2025-11-25T09:01:08.124 [DEBUG] [Thread-206582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:01:08.117 [DEBUG] [Thread-206581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:01:37.461 [DEBUG] [Thread-206583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:01:43.147 [DEBUG] [Thread-206584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:01:49.379 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:01:49.466 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:01:58.591 [DEBUG] [Thread-206585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:02:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 8, 59, 23), 21.03, 24.1, 0.0, 23.29, 19.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:02:14.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 08:59:23
2025-11-25T09:02:23.713 [DEBUG] [Thread-206586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:02:44.168 [DEBUG] [Thread-206587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:02:49.824 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:02:50.061 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:03:07.885 [DEBUG] [Thread-206588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:03:10.271 [DEBUG] [Thread-206589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:03:15.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:03:23.657 [DEBUG] [Thread-206590] [transport.py] [_log()] starting thread (client mode): 0xd7bc7730
2025-11-25T09:03:23.659 [DEBUG] [Thread-206590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:03:23.660 [DEBUG] [Thread-206590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:03:23.660 [INFO] [Thread-206590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:03:23.672 [DEBUG] [Thread-206590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:03:23.672 [DEBUG] [Thread-206590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:03:23.673 [DEBUG] [Thread-206590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:03:23.673 [DEBUG] [Thread-206590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:03:23.673 [DEBUG] [Thread-206590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:03:23.673 [DEBUG] [Thread-206590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:03:23.673 [DEBUG] [Thread-206590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:03:23.673 [DEBUG] [Thread-206590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:03:23.673 [DEBUG] [Thread-206590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:03:23.673 [DEBUG] [Thread-206590] [transport.py] [_log()] client lang: <none>
2025-11-25T09:03:23.673 [DEBUG] [Thread-206590] [transport.py] [_log()] server lang: <none>
2025-11-25T09:03:23.675 [DEBUG] [Thread-206590] [transport.py] [_log()] kex follows: False
2025-11-25T09:03:23.675 [DEBUG] [Thread-206590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:03:24.405 [DEBUG] [Thread-206590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:03:24.406 [DEBUG] [Thread-206590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:03:24.406 [DEBUG] [Thread-206590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:03:24.406 [DEBUG] [Thread-206590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:03:24.406 [DEBUG] [Thread-206590] [transport.py] [_log()] Compression: none
2025-11-25T09:03:24.406 [DEBUG] [Thread-206590] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:03:25.243 [DEBUG] [Thread-206590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:03:25.894 [DEBUG] [Thread-206592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:03:26.142 [DEBUG] [Thread-206590] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:03:26.805 [DEBUG] [Thread-206590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:03:28.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:03:28.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:03:29.790 [DEBUG] [Thread-206590] [transport.py] [_log()] userauth is OK
2025-11-25T09:03:29.791 [DEBUG] [Thread-206590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:03:29.792 [DEBUG] [Thread-206590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:03:29.792 [DEBUG] [Thread-206590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:03:29.792 [DEBUG] [Thread-206590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:03:32.980 [INFO] [Thread-206590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:03:32.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:03:33.881 [DEBUG] [Thread-206590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:03:33.884 [DEBUG] [Thread-206590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:03:33.886 [DEBUG] [Thread-206590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:03:33.886 [DEBUG] [Thread-206590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:03:33.886 [DEBUG] [Thread-206590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:03:33.889 [DEBUG] [Thread-206590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:03:33.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:03:34.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:03:34.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:03:34.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:03:35.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:03:35.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:03:35.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:03:35.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:03:35.968 [DEBUG] [Thread-206590] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:03:36.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:03:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.293853 -999.00  +18.10  22.16     30   +0.60 1 1 1 1 1   888    0 23.27 216.28 ----- 22.2 22.2 119.4 27.4 24.6 -28.2 24.2 -28.0 22.8 -27.1 23.2 -28.1
2025-11-25T09:03:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:03:37.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:03:37.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.293853
2025-11-25T09:03:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:03:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:03:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:03:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:03:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:03:37.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T08:59:23', tmtdew=21.03, humidity=24.1, cloud=0.0, wind=23.29, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:03:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:03:39.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:03:39.391 [DEBUG] [Thread-206594] [transport.py] [_log()] starting thread (client mode): 0xd07fb340
2025-11-25T09:03:39.391 [DEBUG] [Thread-206594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:03:39.402 [DEBUG] [Thread-206594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:03:39.402 [INFO] [Thread-206594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:03:39.411 [DEBUG] [Thread-206594] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] client lang: <none>
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] server lang: <none>
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] kex follows: False
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:03:39.412 [DEBUG] [Thread-206594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:03:39.413 [DEBUG] [Thread-206594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:03:39.413 [DEBUG] [Thread-206594] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:03:39.413 [DEBUG] [Thread-206594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:03:39.413 [DEBUG] [Thread-206594] [transport.py] [_log()] Compression: none
2025-11-25T09:03:39.413 [DEBUG] [Thread-206594] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:03:39.471 [DEBUG] [Thread-206594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:03:39.474 [DEBUG] [Thread-206594] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:03:39.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:03:39.475 [DEBUG] [Thread-206594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:03:39.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:03:39.527 [DEBUG] [Thread-206594] [transport.py] [_log()] userauth is OK
2025-11-25T09:03:39.530 [DEBUG] [Thread-206594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:03:39.530 [DEBUG] [Thread-206594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:03:39.530 [DEBUG] [Thread-206594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:03:39.530 [DEBUG] [Thread-206594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:03:39.553 [INFO] [Thread-206594] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:03:39.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:03:39.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:03:40.398 [DEBUG] [Thread-206594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:03:40.398 [DEBUG] [Thread-206594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:03:40.446 [DEBUG] [Thread-206594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:03:40.446 [DEBUG] [Thread-206594] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:03:40.454 [DEBUG] [Thread-206594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:03:40.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:03:40.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:03:40.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:03:41.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:03:41.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:03:41.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:03:41.457 [DEBUG] [Thread-206594] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:03:43.462 [DEBUG] [Thread-206596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:03:50.205 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:03:50.210 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:03:59.890 [DEBUG] [Thread-206597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:04:11.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:04:11.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:04:13.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:04:15.815 [DEBUG] [Thread-206598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:04:15.922 [DEBUG] [Thread-206599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:04:31.316 [DEBUG] [Thread-206600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:04:47.026 [DEBUG] [Thread-206601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:04:50.511 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:04:51.414 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:04:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 8, 59, 23), 21.03, 24.1, 0.0, 23.29, 19.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:04:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 08:59:23
2025-11-25T09:05:02.873 [DEBUG] [Thread-206602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:05:09.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:05:10.054 [DEBUG] [Thread-206603] [transport.py] [_log()] starting thread (client mode): 0xd0786680
2025-11-25T09:05:10.055 [DEBUG] [Thread-206603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:05:10.055 [DEBUG] [Thread-206603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:05:10.055 [INFO] [Thread-206603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] client lang: <none>
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] server lang: <none>
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] kex follows: False
2025-11-25T09:05:10.061 [DEBUG] [Thread-206603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:05:10.062 [DEBUG] [Thread-206603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:05:10.062 [DEBUG] [Thread-206603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:05:10.062 [DEBUG] [Thread-206603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:05:10.062 [DEBUG] [Thread-206603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:05:10.062 [DEBUG] [Thread-206603] [transport.py] [_log()] Compression: none
2025-11-25T09:05:10.062 [DEBUG] [Thread-206603] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:05:10.092 [DEBUG] [Thread-206603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:05:10.454 [DEBUG] [Thread-206603] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:05:10.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:05:10.788 [DEBUG] [Thread-206603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:05:10.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:05:10.791 [DEBUG] [Thread-206603] [transport.py] [_log()] userauth is OK
2025-11-25T09:05:10.792 [DEBUG] [Thread-206603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:05:10.792 [DEBUG] [Thread-206603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:05:10.792 [DEBUG] [Thread-206603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:05:10.792 [DEBUG] [Thread-206603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:05:10.990 [INFO] [Thread-206603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:05:10.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:05:13.424 [DEBUG] [Thread-206603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:05:13.424 [DEBUG] [Thread-206603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:05:13.425 [DEBUG] [Thread-206603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:05:13.425 [DEBUG] [Thread-206603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:05:13.425 [DEBUG] [Thread-206603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:05:13.427 [DEBUG] [Thread-206603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:05:13.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:05:13.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:05:13.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:05:13.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:05:13.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:05:13.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:05:13.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:05:13.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:05:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:05:13.449 [DEBUG] [Thread-206603] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:05:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.295242 -999.00  +18.70  14.53     29   +0.60 1 1 1 1 1   888    0 25.08 275.75 ----- 17.9 14.5 116.6 27.1 24.5 -28.2 24.3 -27.5 22.9 -27.0 23.4 -28.8
2025-11-25T09:05:13.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:05:13.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:05:13.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.295242
2025-11-25T09:05:13.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:05:13.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:05:13.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:05:13.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:05:13.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:05:13.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T08:59:23', tmtdew=21.03, humidity=24.1, cloud=0.0, wind=23.29, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:05:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:05:13.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:05:13.627 [DEBUG] [Thread-206606] [transport.py] [_log()] starting thread (client mode): 0xd07be530
2025-11-25T09:05:13.628 [DEBUG] [Thread-206606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:05:13.643 [DEBUG] [Thread-206606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:05:13.643 [INFO] [Thread-206606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:05:13.650 [DEBUG] [Thread-206606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] client lang: <none>
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] server lang: <none>
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] kex follows: False
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] Compression: none
2025-11-25T09:05:13.651 [DEBUG] [Thread-206606] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:05:14.013 [DEBUG] [Thread-206606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:05:14.016 [DEBUG] [Thread-206606] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:05:14.017 [DEBUG] [Thread-206606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:05:14.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:05:14.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:05:14.777 [DEBUG] [Thread-206606] [transport.py] [_log()] userauth is OK
2025-11-25T09:05:14.777 [DEBUG] [Thread-206606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:05:14.777 [DEBUG] [Thread-206606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:05:14.777 [DEBUG] [Thread-206606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:05:14.777 [DEBUG] [Thread-206606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:05:16.738 [INFO] [Thread-206606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:05:16.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:05:16.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:05:17.567 [DEBUG] [Thread-206606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:05:17.726 [DEBUG] [Thread-206606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:05:17.727 [DEBUG] [Thread-206606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:05:17.727 [DEBUG] [Thread-206606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:05:18.519 [DEBUG] [Thread-206606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:05:18.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:05:18.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:05:18.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:05:18.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:05:18.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:05:18.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:05:18.675 [DEBUG] [Thread-206606] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:05:20.307 [DEBUG] [Thread-206608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:05:21.741 [DEBUG] [Thread-206609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:05:36.908 [DEBUG] [Thread-206610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:05:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:05:48.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:05:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:05:51.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 5, 3), 22.75, 21.44, 0.0, 27.17, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:05:51.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:05:03
2025-11-25T09:05:51.992 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:05:51.999 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:05:52.448 [DEBUG] [Thread-206611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:05:53.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:05:53.344 [DEBUG] [Thread-206612] [transport.py] [_log()] starting thread (client mode): 0xd07bf130
2025-11-25T09:05:53.345 [DEBUG] [Thread-206612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:05:53.355 [DEBUG] [Thread-206612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:05:53.359 [INFO] [Thread-206612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:05:53.367 [DEBUG] [Thread-206612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:05:53.367 [DEBUG] [Thread-206612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:05:53.367 [DEBUG] [Thread-206612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:05:53.367 [DEBUG] [Thread-206612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:05:53.367 [DEBUG] [Thread-206612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:05:53.367 [DEBUG] [Thread-206612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:05:53.367 [DEBUG] [Thread-206612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:05:53.367 [DEBUG] [Thread-206612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] client lang: <none>
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] server lang: <none>
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] kex follows: False
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] Compression: none
2025-11-25T09:05:53.368 [DEBUG] [Thread-206612] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:05:53.397 [DEBUG] [Thread-206612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:05:53.497 [DEBUG] [Thread-206612] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:05:53.498 [DEBUG] [Thread-206612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:05:53.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:05:53.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:05:53.503 [DEBUG] [Thread-206612] [transport.py] [_log()] userauth is OK
2025-11-25T09:05:53.504 [DEBUG] [Thread-206612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:05:53.504 [DEBUG] [Thread-206612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:05:53.504 [DEBUG] [Thread-206612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:05:53.504 [DEBUG] [Thread-206612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:05:53.522 [INFO] [Thread-206612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:05:53.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:05:54.164 [DEBUG] [Thread-206612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:05:54.164 [DEBUG] [Thread-206612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:05:54.172 [DEBUG] [Thread-206612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:05:54.200 [DEBUG] [Thread-206612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:05:54.200 [DEBUG] [Thread-206612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:05:54.218 [DEBUG] [Thread-206612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:05:54.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:05:54.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:05:54.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:05:54.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:05:54.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:05:54.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:05:54.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:05:54.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:05:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:05:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.295589 -999.00  +18.50  22.64     29   +0.50 1 1 1 1 1   888    0 24.04 232.06 ----- 20.9 22.6 106.4 28.7 24.4 -31.1 24.2 -28.0 22.8 -28.3 23.4 -27.5
2025-11-25T09:05:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:05:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:05:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.295589
2025-11-25T09:05:54.253 [DEBUG] [Thread-206612] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:05:54.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:05:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:05:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:05:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:05:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:05:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:05:03', tmtdew=22.75, humidity=21.44, cloud=0.0, wind=27.17, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:05:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:05:54.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:05:54.414 [DEBUG] [Thread-206615] [transport.py] [_log()] starting thread (client mode): 0xd07face0
2025-11-25T09:05:54.414 [DEBUG] [Thread-206615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:05:54.429 [DEBUG] [Thread-206615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:05:54.429 [INFO] [Thread-206615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:05:54.436 [DEBUG] [Thread-206615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:05:54.436 [DEBUG] [Thread-206615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:05:54.436 [DEBUG] [Thread-206615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] client lang: <none>
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] server lang: <none>
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] kex follows: False
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] Compression: none
2025-11-25T09:05:54.437 [DEBUG] [Thread-206615] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:05:54.494 [DEBUG] [Thread-206615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:05:54.494 [DEBUG] [Thread-206615] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:05:54.494 [DEBUG] [Thread-206615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:05:54.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:05:54.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:05:54.568 [DEBUG] [Thread-206615] [transport.py] [_log()] userauth is OK
2025-11-25T09:05:54.568 [DEBUG] [Thread-206615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:05:54.568 [DEBUG] [Thread-206615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:05:54.568 [DEBUG] [Thread-206615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:05:54.568 [DEBUG] [Thread-206615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:05:54.616 [INFO] [Thread-206615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:05:54.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:05:54.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:05:55.466 [DEBUG] [Thread-206615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:05:55.466 [DEBUG] [Thread-206615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:05:55.514 [DEBUG] [Thread-206615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:05:55.514 [DEBUG] [Thread-206615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:05:55.523 [DEBUG] [Thread-206615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:05:55.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:05:55.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:05:55.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:05:55.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:05:55.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:05:55.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:05:55.557 [DEBUG] [Thread-206615] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:06:07.599 [DEBUG] [Thread-206617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:06:22.265 [DEBUG] [Thread-206618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:06:22.750 [DEBUG] [Thread-206619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:06:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:06:25.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:06:25.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:06:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 6, 18), 22.12, 22.27, 0.0, 26.89, 19.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:06:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:06:18
2025-11-25T09:06:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:06:26.929 [DEBUG] [Thread-206620] [transport.py] [_log()] starting thread (client mode): 0xd31b0220
2025-11-25T09:06:26.930 [DEBUG] [Thread-206620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:06:26.943 [DEBUG] [Thread-206620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:06:26.943 [INFO] [Thread-206620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] client lang: <none>
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] server lang: <none>
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] kex follows: False
2025-11-25T09:06:26.948 [DEBUG] [Thread-206620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:06:26.949 [DEBUG] [Thread-206620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:06:26.949 [DEBUG] [Thread-206620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:06:26.949 [DEBUG] [Thread-206620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:06:26.949 [DEBUG] [Thread-206620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:06:26.949 [DEBUG] [Thread-206620] [transport.py] [_log()] Compression: none
2025-11-25T09:06:26.949 [DEBUG] [Thread-206620] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:06:26.980 [DEBUG] [Thread-206620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:06:26.984 [DEBUG] [Thread-206620] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:06:26.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:06:26.986 [DEBUG] [Thread-206620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:06:26.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:06:26.988 [DEBUG] [Thread-206620] [transport.py] [_log()] userauth is OK
2025-11-25T09:06:26.988 [DEBUG] [Thread-206620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:06:26.988 [DEBUG] [Thread-206620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:06:26.988 [DEBUG] [Thread-206620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:06:26.988 [DEBUG] [Thread-206620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:06:27.007 [INFO] [Thread-206620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:06:27.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:06:27.655 [DEBUG] [Thread-206620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:06:27.655 [DEBUG] [Thread-206620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:06:27.656 [DEBUG] [Thread-206620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:06:27.696 [DEBUG] [Thread-206620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:06:27.696 [DEBUG] [Thread-206620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:06:27.699 [DEBUG] [Thread-206620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:06:27.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:06:27.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:06:27.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:06:27.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:06:27.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:06:27.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:06:27.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:06:27.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:06:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:06:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.295937 -999.00  +18.20  21.54     30   +0.30 1 1 1 1 1   888    0 24.48 237.95 ----- 16.9 21.5 116.7 25.1 24.1 -30.6 24.2 -28.1 22.8 -27.7 23.2 -28.0
2025-11-25T09:06:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:06:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:06:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.295937
2025-11-25T09:06:27.728 [DEBUG] [Thread-206620] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:06:27.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:06:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:06:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:06:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:06:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:06:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:06:18', tmtdew=22.12, humidity=22.27, cloud=0.0, wind=26.89, temperature=19.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:06:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:06:27.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:06:27.832 [DEBUG] [Thread-206623] [transport.py] [_log()] starting thread (client mode): 0xd31b0460
2025-11-25T09:06:27.833 [DEBUG] [Thread-206623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:06:27.848 [DEBUG] [Thread-206623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:06:27.848 [INFO] [Thread-206623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:06:27.855 [DEBUG] [Thread-206623] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] client lang: <none>
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] server lang: <none>
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] kex follows: False
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] Compression: none
2025-11-25T09:06:27.856 [DEBUG] [Thread-206623] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:06:27.914 [DEBUG] [Thread-206623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:06:27.914 [DEBUG] [Thread-206623] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:06:27.915 [DEBUG] [Thread-206623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:06:27.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:06:27.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:06:27.970 [DEBUG] [Thread-206623] [transport.py] [_log()] userauth is OK
2025-11-25T09:06:27.971 [DEBUG] [Thread-206623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:06:27.971 [DEBUG] [Thread-206623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:06:27.971 [DEBUG] [Thread-206623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:06:27.971 [DEBUG] [Thread-206623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:06:27.995 [INFO] [Thread-206623] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:06:27.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:06:27.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:06:28.851 [DEBUG] [Thread-206623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:06:28.851 [DEBUG] [Thread-206623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:06:28.899 [DEBUG] [Thread-206623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:06:28.900 [DEBUG] [Thread-206623] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:06:28.909 [DEBUG] [Thread-206623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:06:28.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:06:28.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:06:28.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:06:28.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:06:28.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:06:28.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:06:28.956 [DEBUG] [Thread-206623] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:06:37.867 [DEBUG] [Thread-206625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:06:52.158 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:06:52.173 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:06:53.028 [DEBUG] [Thread-206626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:06:58.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:06:59.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:06:59.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:06:59.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 6, 53), 21.24, 23.78, 0.0, 20.56, 18.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:06:59.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:06:53
2025-11-25T09:07:00.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:07:00.278 [DEBUG] [Thread-206627] [transport.py] [_log()] starting thread (client mode): 0xd07bce80
2025-11-25T09:07:00.278 [DEBUG] [Thread-206627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:07:00.286 [DEBUG] [Thread-206627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:07:00.286 [INFO] [Thread-206627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:07:00.291 [DEBUG] [Thread-206627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:07:00.291 [DEBUG] [Thread-206627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:07:00.291 [DEBUG] [Thread-206627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:07:00.291 [DEBUG] [Thread-206627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:07:00.292 [DEBUG] [Thread-206627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:07:00.292 [DEBUG] [Thread-206627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:07:00.292 [DEBUG] [Thread-206627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:07:00.292 [DEBUG] [Thread-206627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:07:00.292 [DEBUG] [Thread-206627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:07:00.292 [DEBUG] [Thread-206627] [transport.py] [_log()] client lang: <none>
2025-11-25T09:07:00.292 [DEBUG] [Thread-206627] [transport.py] [_log()] server lang: <none>
2025-11-25T09:07:00.292 [DEBUG] [Thread-206627] [transport.py] [_log()] kex follows: False
2025-11-25T09:07:00.292 [DEBUG] [Thread-206627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:07:00.293 [DEBUG] [Thread-206627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:07:00.293 [DEBUG] [Thread-206627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:07:00.293 [DEBUG] [Thread-206627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:07:00.293 [DEBUG] [Thread-206627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:07:00.293 [DEBUG] [Thread-206627] [transport.py] [_log()] Compression: none
2025-11-25T09:07:00.293 [DEBUG] [Thread-206627] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:07:00.323 [DEBUG] [Thread-206627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:07:00.328 [DEBUG] [Thread-206627] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:07:00.329 [DEBUG] [Thread-206627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:07:00.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:07:00.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:07:00.334 [DEBUG] [Thread-206627] [transport.py] [_log()] userauth is OK
2025-11-25T09:07:00.334 [DEBUG] [Thread-206627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:07:00.334 [DEBUG] [Thread-206627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:07:00.335 [DEBUG] [Thread-206627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:07:00.335 [DEBUG] [Thread-206627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:07:00.358 [INFO] [Thread-206627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:07:00.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:07:00.991 [DEBUG] [Thread-206627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:07:00.991 [DEBUG] [Thread-206627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:07:01.002 [DEBUG] [Thread-206627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:07:01.033 [DEBUG] [Thread-206627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:07:01.033 [DEBUG] [Thread-206627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:07:01.036 [DEBUG] [Thread-206627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:07:01.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:07:01.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:07:01.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:07:01.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:07:01.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:07:01.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:07:01.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:07:01.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:07:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:07:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.296284 -999.00  +18.00  15.36     30   +0.20 1 1 1 1 1   888    0 23.69 227.66 ----- 13.9 15.4 113.8 28.4 24.1 -29.2 24.1 -27.7 22.8 -27.6 23.2 -27.8
2025-11-25T09:07:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:07:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:07:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.296284
2025-11-25T09:07:01.075 [DEBUG] [Thread-206627] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:07:01.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:07:01.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:07:01.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:07:01.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:07:01.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:07:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:06:53', tmtdew=21.24, humidity=23.78, cloud=0.0, wind=20.56, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:06:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:07:01.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:07:01.196 [DEBUG] [Thread-206630] [transport.py] [_log()] starting thread (client mode): 0xd0787f10
2025-11-25T09:07:01.196 [DEBUG] [Thread-206630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:07:01.210 [DEBUG] [Thread-206630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:07:01.210 [INFO] [Thread-206630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] client lang: <none>
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] server lang: <none>
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] kex follows: False
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:07:01.217 [DEBUG] [Thread-206630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:07:01.218 [DEBUG] [Thread-206630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:07:01.218 [DEBUG] [Thread-206630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:07:01.218 [DEBUG] [Thread-206630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:07:01.218 [DEBUG] [Thread-206630] [transport.py] [_log()] Compression: none
2025-11-25T09:07:01.218 [DEBUG] [Thread-206630] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:07:01.274 [DEBUG] [Thread-206630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:07:01.275 [DEBUG] [Thread-206630] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:07:01.276 [DEBUG] [Thread-206630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:07:01.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:07:01.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:07:01.330 [DEBUG] [Thread-206630] [transport.py] [_log()] userauth is OK
2025-11-25T09:07:01.330 [DEBUG] [Thread-206630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:07:01.330 [DEBUG] [Thread-206630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:07:01.330 [DEBUG] [Thread-206630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:07:01.330 [DEBUG] [Thread-206630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:07:01.344 [INFO] [Thread-206630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:07:01.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:07:01.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:07:02.201 [DEBUG] [Thread-206630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:07:02.201 [DEBUG] [Thread-206630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:07:02.248 [DEBUG] [Thread-206630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:07:02.248 [DEBUG] [Thread-206630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:07:02.256 [DEBUG] [Thread-206630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:07:02.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:07:02.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:07:02.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:07:02.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:07:02.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:07:02.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:07:02.292 [DEBUG] [Thread-206630] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:07:08.144 [DEBUG] [Thread-206632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:07:22.627 [DEBUG] [Thread-206633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:07:23.310 [DEBUG] [Thread-206634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:07:32.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:07:32.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:07:32.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:07:33.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 7, 26), 21.14, 23.95, 0.0, 21.7, 18.91, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:07:33.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:07:26
2025-11-25T09:07:33.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:07:33.566 [DEBUG] [Thread-206635] [transport.py] [_log()] starting thread (client mode): 0xd07869e0
2025-11-25T09:07:33.567 [DEBUG] [Thread-206635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:07:33.575 [DEBUG] [Thread-206635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:07:33.575 [INFO] [Thread-206635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:07:33.582 [DEBUG] [Thread-206635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:07:33.582 [DEBUG] [Thread-206635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:07:33.582 [DEBUG] [Thread-206635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:07:33.582 [DEBUG] [Thread-206635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:07:33.582 [DEBUG] [Thread-206635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:07:33.582 [DEBUG] [Thread-206635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:07:33.582 [DEBUG] [Thread-206635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:07:33.582 [DEBUG] [Thread-206635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:07:33.582 [DEBUG] [Thread-206635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:07:33.583 [DEBUG] [Thread-206635] [transport.py] [_log()] client lang: <none>
2025-11-25T09:07:33.583 [DEBUG] [Thread-206635] [transport.py] [_log()] server lang: <none>
2025-11-25T09:07:33.583 [DEBUG] [Thread-206635] [transport.py] [_log()] kex follows: False
2025-11-25T09:07:33.583 [DEBUG] [Thread-206635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:07:33.584 [DEBUG] [Thread-206635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:07:33.584 [DEBUG] [Thread-206635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:07:33.584 [DEBUG] [Thread-206635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:07:33.585 [DEBUG] [Thread-206635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:07:33.585 [DEBUG] [Thread-206635] [transport.py] [_log()] Compression: none
2025-11-25T09:07:33.585 [DEBUG] [Thread-206635] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:07:33.615 [DEBUG] [Thread-206635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:07:33.621 [DEBUG] [Thread-206635] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:07:33.623 [DEBUG] [Thread-206635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:07:33.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:07:33.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:07:33.628 [DEBUG] [Thread-206635] [transport.py] [_log()] userauth is OK
2025-11-25T09:07:33.628 [DEBUG] [Thread-206635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:07:33.629 [DEBUG] [Thread-206635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:07:33.629 [DEBUG] [Thread-206635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:07:33.629 [DEBUG] [Thread-206635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:07:33.656 [INFO] [Thread-206635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:07:33.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:07:34.307 [DEBUG] [Thread-206635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:07:34.307 [DEBUG] [Thread-206635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:07:34.308 [DEBUG] [Thread-206635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:07:34.349 [DEBUG] [Thread-206635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:07:34.349 [DEBUG] [Thread-206635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:07:34.353 [DEBUG] [Thread-206635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:07:34.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:07:34.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:07:34.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:07:34.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:07:34.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:07:34.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:07:34.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:07:34.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:07:34.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:07:34.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.296631 -999.00  +18.10  16.09     30   +0.50 1 1 1 1 1   888    0 23.11 208.66 ----- 16.8 16.1 105.2 27.2 24.1 -30.2 24.1 -27.4 22.8 -26.6 23.2 -28.2
2025-11-25T09:07:34.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:07:34.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:07:34.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.296631
2025-11-25T09:07:34.381 [DEBUG] [Thread-206635] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:07:34.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:07:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:07:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:07:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:07:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:07:34.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:07:26', tmtdew=21.14, humidity=23.95, cloud=0.0, wind=21.7, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:07:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:07:34.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:07:34.489 [DEBUG] [Thread-206638] [transport.py] [_log()] starting thread (client mode): 0xd07bf400
2025-11-25T09:07:34.489 [DEBUG] [Thread-206638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:07:34.504 [DEBUG] [Thread-206638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:07:34.504 [INFO] [Thread-206638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] client lang: <none>
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] server lang: <none>
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] kex follows: False
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:07:34.512 [DEBUG] [Thread-206638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:07:34.513 [DEBUG] [Thread-206638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:07:34.513 [DEBUG] [Thread-206638] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:07:34.513 [DEBUG] [Thread-206638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:07:34.513 [DEBUG] [Thread-206638] [transport.py] [_log()] Compression: none
2025-11-25T09:07:34.513 [DEBUG] [Thread-206638] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:07:34.569 [DEBUG] [Thread-206638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:07:34.569 [DEBUG] [Thread-206638] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:07:34.569 [DEBUG] [Thread-206638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:07:34.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:07:34.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:07:34.626 [DEBUG] [Thread-206638] [transport.py] [_log()] userauth is OK
2025-11-25T09:07:34.626 [DEBUG] [Thread-206638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:07:34.626 [DEBUG] [Thread-206638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:07:34.626 [DEBUG] [Thread-206638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:07:34.626 [DEBUG] [Thread-206638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:07:34.645 [INFO] [Thread-206638] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:07:34.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:07:34.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:07:35.488 [DEBUG] [Thread-206638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:07:35.488 [DEBUG] [Thread-206638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:07:35.536 [DEBUG] [Thread-206638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:07:35.536 [DEBUG] [Thread-206638] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:07:35.544 [DEBUG] [Thread-206638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:07:35.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:07:35.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:07:35.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:07:35.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:07:35.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:07:35.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:07:35.578 [DEBUG] [Thread-206638] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:07:38.402 [DEBUG] [Thread-206640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:07:52.334 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:07:52.349 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:07:53.563 [DEBUG] [Thread-206641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:08:05.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:08:05.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:08:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:08:06.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 7, 26), 21.09, 23.95, 0.0, 27.1, 18.76, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:08:06.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:07:26
2025-11-25T09:08:06.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:08:07.020 [DEBUG] [Thread-206642] [transport.py] [_log()] starting thread (client mode): 0xd31355d0
2025-11-25T09:08:07.020 [DEBUG] [Thread-206642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:08:07.022 [DEBUG] [Thread-206642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:08:07.022 [INFO] [Thread-206642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] client lang: <none>
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] server lang: <none>
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] kex follows: False
2025-11-25T09:08:07.026 [DEBUG] [Thread-206642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:08:07.027 [DEBUG] [Thread-206642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:08:07.027 [DEBUG] [Thread-206642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:08:07.027 [DEBUG] [Thread-206642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:08:07.027 [DEBUG] [Thread-206642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:08:07.027 [DEBUG] [Thread-206642] [transport.py] [_log()] Compression: none
2025-11-25T09:08:07.027 [DEBUG] [Thread-206642] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:08:07.057 [DEBUG] [Thread-206642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:08:07.061 [DEBUG] [Thread-206642] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:08:07.064 [DEBUG] [Thread-206642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:08:07.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:08:07.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:08:07.069 [DEBUG] [Thread-206642] [transport.py] [_log()] userauth is OK
2025-11-25T09:08:07.069 [DEBUG] [Thread-206642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:08:07.070 [DEBUG] [Thread-206642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:08:07.070 [DEBUG] [Thread-206642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:08:07.070 [DEBUG] [Thread-206642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:08:07.089 [INFO] [Thread-206642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:08:07.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:08:07.722 [DEBUG] [Thread-206642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:08:07.722 [DEBUG] [Thread-206642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:08:07.732 [DEBUG] [Thread-206642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:08:07.763 [DEBUG] [Thread-206642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:08:07.763 [DEBUG] [Thread-206642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:08:07.766 [DEBUG] [Thread-206642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:08:07.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:08:07.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:08:07.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:08:07.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:08:07.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:08:07.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:08:07.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:08:07.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:08:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:08:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.296978 -999.00  +18.40  15.82     30   +0.80 1 1 1 1 1   888    0 23.24 197.76 ----- 15.8 15.8 112.6 27.5 24.1 -28.8 24.1 -26.8 22.9 -27.5 23.2 -27.4
2025-11-25T09:08:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:08:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:08:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.296978
2025-11-25T09:08:07.799 [DEBUG] [Thread-206642] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:08:07.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:08:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:08:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:08:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:08:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:08:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:07:26', tmtdew=21.09, humidity=23.95, cloud=0.0, wind=27.1, temperature=18.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:07:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:08:07.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:08:07.890 [DEBUG] [Thread-206645] [transport.py] [_log()] starting thread (client mode): 0xd3136f20
2025-11-25T09:08:07.890 [DEBUG] [Thread-206645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:08:07.906 [DEBUG] [Thread-206645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:08:07.906 [INFO] [Thread-206645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:08:07.913 [DEBUG] [Thread-206645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] client lang: <none>
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] server lang: <none>
2025-11-25T09:08:07.914 [DEBUG] [Thread-206645] [transport.py] [_log()] kex follows: False
2025-11-25T09:08:07.915 [DEBUG] [Thread-206645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:08:07.915 [DEBUG] [Thread-206645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:08:07.915 [DEBUG] [Thread-206645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:08:07.915 [DEBUG] [Thread-206645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:08:07.915 [DEBUG] [Thread-206645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:08:07.915 [DEBUG] [Thread-206645] [transport.py] [_log()] Compression: none
2025-11-25T09:08:07.915 [DEBUG] [Thread-206645] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:08:07.974 [DEBUG] [Thread-206645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:08:07.975 [DEBUG] [Thread-206645] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:08:07.975 [DEBUG] [Thread-206645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:08:07.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:08:07.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:08:08.030 [DEBUG] [Thread-206645] [transport.py] [_log()] userauth is OK
2025-11-25T09:08:08.030 [DEBUG] [Thread-206645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:08:08.030 [DEBUG] [Thread-206645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:08:08.030 [DEBUG] [Thread-206645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:08:08.030 [DEBUG] [Thread-206645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:08:08.044 [INFO] [Thread-206645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:08:08.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:08:08.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:08:08.665 [DEBUG] [Thread-206647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:08:08.911 [DEBUG] [Thread-206645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:08:08.911 [DEBUG] [Thread-206645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:08:08.959 [DEBUG] [Thread-206645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:08:08.960 [DEBUG] [Thread-206645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:08:08.969 [DEBUG] [Thread-206645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:08:08.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:08:08.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:08:08.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:08:08.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:08:08.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:08:08.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:08:09.004 [DEBUG] [Thread-206645] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:08:22.934 [DEBUG] [Thread-206648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:08:23.784 [DEBUG] [Thread-206649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:08:39.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:08:39.231 [DEBUG] [Thread-206650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:08:39.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:08:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:08:40.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 7, 26), 21.09, 23.95, 0.0, 27.1, 18.76, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:08:40.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:07:26
2025-11-25T09:08:41.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:08:41.331 [DEBUG] [Thread-206651] [transport.py] [_log()] starting thread (client mode): 0xd0701060
2025-11-25T09:08:41.332 [DEBUG] [Thread-206651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:08:41.344 [DEBUG] [Thread-206651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:08:41.345 [INFO] [Thread-206651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] client lang: <none>
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] server lang: <none>
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] kex follows: False
2025-11-25T09:08:41.350 [DEBUG] [Thread-206651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:08:41.351 [DEBUG] [Thread-206651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:08:41.351 [DEBUG] [Thread-206651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:08:41.351 [DEBUG] [Thread-206651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:08:41.351 [DEBUG] [Thread-206651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:08:41.351 [DEBUG] [Thread-206651] [transport.py] [_log()] Compression: none
2025-11-25T09:08:41.351 [DEBUG] [Thread-206651] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:08:41.382 [DEBUG] [Thread-206651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:08:41.386 [DEBUG] [Thread-206651] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:08:41.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:08:41.389 [DEBUG] [Thread-206651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:08:41.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:08:41.391 [DEBUG] [Thread-206651] [transport.py] [_log()] userauth is OK
2025-11-25T09:08:41.391 [DEBUG] [Thread-206651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:08:41.392 [DEBUG] [Thread-206651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:08:41.392 [DEBUG] [Thread-206651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:08:41.392 [DEBUG] [Thread-206651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:08:41.410 [INFO] [Thread-206651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:08:41.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:08:42.061 [DEBUG] [Thread-206651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:08:42.106 [DEBUG] [Thread-206651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:08:42.108 [DEBUG] [Thread-206651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:08:42.108 [DEBUG] [Thread-206651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:08:42.108 [DEBUG] [Thread-206651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:08:42.111 [DEBUG] [Thread-206651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:08:42.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:08:42.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:08:42.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:08:42.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:08:42.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:08:42.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:08:42.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:08:42.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:08:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:08:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.297325 -999.00  +18.10  16.85     30   +0.40 1 1 1 1 1   888    0 22.77 182.16 ----- 17.6 16.9 94.2 22.1 24.0 -33.3 24.0 -28.4 22.6 -28.1 23.1 -27.9
2025-11-25T09:08:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:08:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:08:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.297325
2025-11-25T09:08:42.141 [DEBUG] [Thread-206651] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:08:42.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:08:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:08:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:08:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:08:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:08:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:07:26', tmtdew=21.09, humidity=23.95, cloud=0.0, wind=27.1, temperature=18.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:08:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:08:42.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:08:42.245 [DEBUG] [Thread-206654] [transport.py] [_log()] starting thread (client mode): 0xd07bfb80
2025-11-25T09:08:42.245 [DEBUG] [Thread-206654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:08:42.260 [DEBUG] [Thread-206654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:08:42.260 [INFO] [Thread-206654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:08:42.267 [DEBUG] [Thread-206654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] client lang: <none>
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] server lang: <none>
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] kex follows: False
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] Compression: none
2025-11-25T09:08:42.268 [DEBUG] [Thread-206654] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:08:42.325 [DEBUG] [Thread-206654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:08:42.325 [DEBUG] [Thread-206654] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:08:42.325 [DEBUG] [Thread-206654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:08:42.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:08:42.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:08:42.382 [DEBUG] [Thread-206654] [transport.py] [_log()] userauth is OK
2025-11-25T09:08:42.382 [DEBUG] [Thread-206654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:08:42.382 [DEBUG] [Thread-206654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:08:42.382 [DEBUG] [Thread-206654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:08:42.382 [DEBUG] [Thread-206654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:08:42.396 [INFO] [Thread-206654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:08:42.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:08:42.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:08:43.276 [DEBUG] [Thread-206654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:08:43.276 [DEBUG] [Thread-206654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:08:43.324 [DEBUG] [Thread-206654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:08:43.324 [DEBUG] [Thread-206654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:08:43.332 [DEBUG] [Thread-206654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:08:43.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:08:43.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:08:43.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:08:43.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:08:43.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:08:43.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:08:43.364 [DEBUG] [Thread-206654] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:08:52.514 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:08:52.529 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:08:54.334 [DEBUG] [Thread-206656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:09:09.475 [DEBUG] [Thread-206657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:09:13.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:09:13.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:09:13.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:09:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 8, 35), 20.9, 24.27, 0.0, 22.6, 18.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:09:14.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:08:35
2025-11-25T09:09:14.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:09:14.761 [DEBUG] [Thread-206658] [transport.py] [_log()] starting thread (client mode): 0xd07862c0
2025-11-25T09:09:14.763 [DEBUG] [Thread-206658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:09:14.764 [DEBUG] [Thread-206658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:09:14.764 [INFO] [Thread-206658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] client lang: <none>
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] server lang: <none>
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] kex follows: False
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:09:14.769 [DEBUG] [Thread-206658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:09:14.770 [DEBUG] [Thread-206658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:09:14.770 [DEBUG] [Thread-206658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:09:14.770 [DEBUG] [Thread-206658] [transport.py] [_log()] Compression: none
2025-11-25T09:09:14.770 [DEBUG] [Thread-206658] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:09:14.800 [DEBUG] [Thread-206658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:09:14.804 [DEBUG] [Thread-206658] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:09:14.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:09:14.806 [DEBUG] [Thread-206658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:09:14.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:09:14.808 [DEBUG] [Thread-206658] [transport.py] [_log()] userauth is OK
2025-11-25T09:09:14.808 [DEBUG] [Thread-206658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:09:14.808 [DEBUG] [Thread-206658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:09:14.808 [DEBUG] [Thread-206658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:09:14.808 [DEBUG] [Thread-206658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:09:14.826 [INFO] [Thread-206658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:09:14.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:09:15.499 [DEBUG] [Thread-206658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:09:15.499 [DEBUG] [Thread-206658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:09:15.500 [DEBUG] [Thread-206658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:09:15.540 [DEBUG] [Thread-206658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:09:15.540 [DEBUG] [Thread-206658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:09:15.544 [DEBUG] [Thread-206658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:09:15.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:09:15.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:09:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:09:15.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:09:15.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:09:15.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:09:15.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:09:15.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:09:15.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:09:15.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.298020 -999.00  +18.40  11.06     30   +0.70 1 1 1 1 1   888    0 22.16 152.35 ----- 15.1 11.1 104.7 22.6 24.1 -27.1 24.1 -27.1 22.8 -26.7 23.1 -26.6
2025-11-25T09:09:15.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:09:15.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:09:15.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.298020
2025-11-25T09:09:15.583 [DEBUG] [Thread-206658] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:09:15.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:09:15.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:09:15.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:09:15.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:09:15.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:09:15.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:08:35', tmtdew=20.9, humidity=24.27, cloud=0.0, wind=22.6, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:09:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:09:15.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:09:15.679 [DEBUG] [Thread-206661] [transport.py] [_log()] starting thread (client mode): 0xd0703b50
2025-11-25T09:09:15.679 [DEBUG] [Thread-206661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:09:15.695 [DEBUG] [Thread-206661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:09:15.695 [INFO] [Thread-206661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] client lang: <none>
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] server lang: <none>
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] kex follows: False
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] Compression: none
2025-11-25T09:09:15.704 [DEBUG] [Thread-206661] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:09:15.762 [DEBUG] [Thread-206661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:09:15.763 [DEBUG] [Thread-206661] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:09:15.763 [DEBUG] [Thread-206661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:09:15.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:09:15.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:09:15.819 [DEBUG] [Thread-206661] [transport.py] [_log()] userauth is OK
2025-11-25T09:09:15.819 [DEBUG] [Thread-206661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:09:15.820 [DEBUG] [Thread-206661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:09:15.820 [DEBUG] [Thread-206661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:09:15.820 [DEBUG] [Thread-206661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:09:15.839 [INFO] [Thread-206661] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:09:15.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:09:15.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:09:16.689 [DEBUG] [Thread-206661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:09:16.690 [DEBUG] [Thread-206661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:09:16.737 [DEBUG] [Thread-206661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:09:16.737 [DEBUG] [Thread-206661] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:09:16.746 [DEBUG] [Thread-206661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:09:16.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:09:16.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:09:16.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:09:16.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:09:16.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:09:16.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:09:16.781 [DEBUG] [Thread-206661] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:09:23.274 [DEBUG] [Thread-206663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:09:24.559 [DEBUG] [Thread-206664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:09:39.740 [DEBUG] [Thread-206665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:09:46.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:09:46.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:09:46.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:09:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 9, 12), 20.86, 24.3, 0.0, 25.11, 18.46, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:09:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:09:12
2025-11-25T09:09:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:09:48.558 [DEBUG] [Thread-206666] [transport.py] [_log()] starting thread (client mode): 0xd3137610
2025-11-25T09:09:48.559 [DEBUG] [Thread-206666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:09:48.566 [DEBUG] [Thread-206666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:09:48.566 [INFO] [Thread-206666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] client lang: <none>
2025-11-25T09:09:48.571 [DEBUG] [Thread-206666] [transport.py] [_log()] server lang: <none>
2025-11-25T09:09:48.572 [DEBUG] [Thread-206666] [transport.py] [_log()] kex follows: False
2025-11-25T09:09:48.572 [DEBUG] [Thread-206666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:09:48.572 [DEBUG] [Thread-206666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:09:48.572 [DEBUG] [Thread-206666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:09:48.572 [DEBUG] [Thread-206666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:09:48.572 [DEBUG] [Thread-206666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:09:48.573 [DEBUG] [Thread-206666] [transport.py] [_log()] Compression: none
2025-11-25T09:09:48.573 [DEBUG] [Thread-206666] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:09:48.602 [DEBUG] [Thread-206666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:09:48.606 [DEBUG] [Thread-206666] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:09:48.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:09:48.609 [DEBUG] [Thread-206666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:09:48.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:09:48.611 [DEBUG] [Thread-206666] [transport.py] [_log()] userauth is OK
2025-11-25T09:09:48.611 [DEBUG] [Thread-206666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:09:48.611 [DEBUG] [Thread-206666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:09:48.611 [DEBUG] [Thread-206666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:09:48.611 [DEBUG] [Thread-206666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:09:48.623 [INFO] [Thread-206666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:09:48.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:09:49.226 [DEBUG] [Thread-206666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:09:49.226 [DEBUG] [Thread-206666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:09:49.227 [DEBUG] [Thread-206666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:09:49.267 [DEBUG] [Thread-206666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:09:49.267 [DEBUG] [Thread-206666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:09:49.269 [DEBUG] [Thread-206666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:09:49.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:09:49.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:09:49.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:09:49.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:09:49.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:09:49.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:09:49.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:09:49.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:09:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:09:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.298367 -999.00  +18.50  11.97     30   +0.70 1 1 1 1 1   888    0 21.14 128.41 ----- 16.4 12.0 96.1 25.3 24.1 -29.6 24.1 -26.8 22.8 -26.6 23.1 -27.3
2025-11-25T09:09:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:09:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:09:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.298367
2025-11-25T09:09:49.291 [DEBUG] [Thread-206666] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:09:49.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:09:49.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:09:49.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:09:49.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:09:49.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:09:49.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:09:12', tmtdew=20.86, humidity=24.3, cloud=0.0, wind=25.11, temperature=18.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:09:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:09:49.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:09:49.396 [DEBUG] [Thread-206669] [transport.py] [_log()] starting thread (client mode): 0xd31b0220
2025-11-25T09:09:49.396 [DEBUG] [Thread-206669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:09:49.411 [DEBUG] [Thread-206669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:09:49.411 [INFO] [Thread-206669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] client lang: <none>
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] server lang: <none>
2025-11-25T09:09:49.419 [DEBUG] [Thread-206669] [transport.py] [_log()] kex follows: False
2025-11-25T09:09:49.420 [DEBUG] [Thread-206669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:09:49.420 [DEBUG] [Thread-206669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:09:49.420 [DEBUG] [Thread-206669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:09:49.420 [DEBUG] [Thread-206669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:09:49.420 [DEBUG] [Thread-206669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:09:49.420 [DEBUG] [Thread-206669] [transport.py] [_log()] Compression: none
2025-11-25T09:09:49.420 [DEBUG] [Thread-206669] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:09:49.475 [DEBUG] [Thread-206669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:09:49.476 [DEBUG] [Thread-206669] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:09:49.476 [DEBUG] [Thread-206669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:09:49.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:09:49.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:09:49.531 [DEBUG] [Thread-206669] [transport.py] [_log()] userauth is OK
2025-11-25T09:09:49.531 [DEBUG] [Thread-206669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:09:49.532 [DEBUG] [Thread-206669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:09:49.532 [DEBUG] [Thread-206669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:09:49.532 [DEBUG] [Thread-206669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:09:49.550 [INFO] [Thread-206669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:09:49.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:09:49.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:09:50.419 [DEBUG] [Thread-206669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:09:50.420 [DEBUG] [Thread-206669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:09:50.467 [DEBUG] [Thread-206669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:09:50.468 [DEBUG] [Thread-206669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:09:50.477 [DEBUG] [Thread-206669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:09:50.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:09:50.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:09:50.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:09:50.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:09:50.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:09:50.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:09:50.529 [DEBUG] [Thread-206669] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:09:52.674 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:09:52.677 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:09:54.859 [DEBUG] [Thread-206671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:10:10.046 [DEBUG] [Thread-206672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:10:20.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:10:20.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:10:20.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:10:22.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 9, 45), 20.8, 24.1, 0.0, 20.08, 18.51, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:10:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:09:45
2025-11-25T09:10:22.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:10:22.999 [DEBUG] [Thread-206673] [transport.py] [_log()] starting thread (client mode): 0xd3134370
2025-11-25T09:10:23.000 [DEBUG] [Thread-206673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:10:23.001 [DEBUG] [Thread-206673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:10:23.002 [INFO] [Thread-206673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:10:23.007 [DEBUG] [Thread-206673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:10:23.007 [DEBUG] [Thread-206673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:10:23.007 [DEBUG] [Thread-206673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:10:23.007 [DEBUG] [Thread-206673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:10:23.007 [DEBUG] [Thread-206673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:10:23.007 [DEBUG] [Thread-206673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:10:23.007 [DEBUG] [Thread-206673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:10:23.007 [DEBUG] [Thread-206673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:10:23.008 [DEBUG] [Thread-206673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:10:23.008 [DEBUG] [Thread-206673] [transport.py] [_log()] client lang: <none>
2025-11-25T09:10:23.008 [DEBUG] [Thread-206673] [transport.py] [_log()] server lang: <none>
2025-11-25T09:10:23.008 [DEBUG] [Thread-206673] [transport.py] [_log()] kex follows: False
2025-11-25T09:10:23.008 [DEBUG] [Thread-206673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:10:23.008 [DEBUG] [Thread-206673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:10:23.008 [DEBUG] [Thread-206673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:10:23.008 [DEBUG] [Thread-206673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:10:23.008 [DEBUG] [Thread-206673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:10:23.009 [DEBUG] [Thread-206673] [transport.py] [_log()] Compression: none
2025-11-25T09:10:23.009 [DEBUG] [Thread-206673] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:10:23.043 [DEBUG] [Thread-206673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:10:23.051 [DEBUG] [Thread-206673] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:10:23.053 [DEBUG] [Thread-206673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:10:23.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:10:23.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:10:23.056 [DEBUG] [Thread-206673] [transport.py] [_log()] userauth is OK
2025-11-25T09:10:23.057 [DEBUG] [Thread-206673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:10:23.057 [DEBUG] [Thread-206673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:10:23.057 [DEBUG] [Thread-206673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:10:23.057 [DEBUG] [Thread-206673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:10:23.089 [INFO] [Thread-206673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:10:23.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:10:23.753 [DEBUG] [Thread-206673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:10:23.848 [DEBUG] [Thread-206673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:10:23.849 [DEBUG] [Thread-206673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:10:23.849 [DEBUG] [Thread-206673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:10:23.849 [DEBUG] [Thread-206673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:10:23.852 [DEBUG] [Thread-206673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:10:24.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:10:24.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:10:24.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:10:24.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:10:24.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:10:24.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:10:24.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:10:24.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:10:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:10:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.298714 -999.00  +18.60  17.14     29   +0.60 1 1 1 1 1   888    0 20.91 110.47 ----- 20.2 17.1 110.4 21.1 24.3 -27.4 24.2 -27.3 22.9 -26.7 23.2 -26.7
2025-11-25T09:10:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:10:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:10:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.298714
2025-11-25T09:10:24.733 [DEBUG] [Thread-206673] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:10:24.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:10:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:10:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:10:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:10:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:10:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:09:45', tmtdew=20.8, humidity=24.1, cloud=0.0, wind=20.08, temperature=18.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:10:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:10:24.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:10:24.834 [DEBUG] [Thread-206676] [transport.py] [_log()] starting thread (client mode): 0xd31345e0
2025-11-25T09:10:24.834 [DEBUG] [Thread-206676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:10:24.848 [DEBUG] [Thread-206676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:10:24.848 [INFO] [Thread-206676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] client lang: <none>
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] server lang: <none>
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] kex follows: False
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] Compression: none
2025-11-25T09:10:24.856 [DEBUG] [Thread-206676] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:10:24.918 [DEBUG] [Thread-206676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:10:24.919 [DEBUG] [Thread-206676] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:10:24.919 [DEBUG] [Thread-206676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:10:24.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:10:24.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:10:24.976 [DEBUG] [Thread-206676] [transport.py] [_log()] userauth is OK
2025-11-25T09:10:24.977 [DEBUG] [Thread-206678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:10:24.977 [DEBUG] [Thread-206676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:10:24.978 [DEBUG] [Thread-206676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:10:24.978 [DEBUG] [Thread-206676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:10:24.978 [DEBUG] [Thread-206676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:10:24.992 [INFO] [Thread-206676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:10:24.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:10:24.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:10:25.138 [DEBUG] [Thread-206679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:10:25.814 [DEBUG] [Thread-206676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:10:25.814 [DEBUG] [Thread-206676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:10:25.862 [DEBUG] [Thread-206676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:10:25.862 [DEBUG] [Thread-206676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:10:25.870 [DEBUG] [Thread-206676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:10:25.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:10:25.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:10:25.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:10:25.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:10:25.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:10:25.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:10:25.904 [DEBUG] [Thread-206676] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:10:40.284 [DEBUG] [Thread-206680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:10:52.838 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:10:52.853 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:10:55.388 [DEBUG] [Thread-206681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:10:55.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:10:55.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:10:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:11:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 10, 19), 20.71, 24.25, 0.0, 19.75, 18.48, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:11:08.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:10:19
2025-11-25T09:11:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:11:08.618 [DEBUG] [Thread-206682] [transport.py] [_log()] starting thread (client mode): 0xd7bc7730
2025-11-25T09:11:08.618 [DEBUG] [Thread-206682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:11:08.630 [DEBUG] [Thread-206682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:11:08.631 [INFO] [Thread-206682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:11:08.635 [DEBUG] [Thread-206682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] client lang: <none>
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] server lang: <none>
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] kex follows: False
2025-11-25T09:11:08.636 [DEBUG] [Thread-206682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:11:08.637 [DEBUG] [Thread-206682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:11:08.637 [DEBUG] [Thread-206682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:11:08.637 [DEBUG] [Thread-206682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:11:08.637 [DEBUG] [Thread-206682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:11:08.637 [DEBUG] [Thread-206682] [transport.py] [_log()] Compression: none
2025-11-25T09:11:08.637 [DEBUG] [Thread-206682] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:11:08.673 [DEBUG] [Thread-206682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:11:08.679 [DEBUG] [Thread-206682] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:11:08.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:11:08.683 [DEBUG] [Thread-206682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:11:08.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:11:08.685 [DEBUG] [Thread-206682] [transport.py] [_log()] userauth is OK
2025-11-25T09:11:08.685 [DEBUG] [Thread-206682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:11:08.685 [DEBUG] [Thread-206682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:11:08.685 [DEBUG] [Thread-206682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:11:08.685 [DEBUG] [Thread-206682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:11:08.705 [INFO] [Thread-206682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:11:08.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:11:09.315 [DEBUG] [Thread-206682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:11:09.315 [DEBUG] [Thread-206682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:11:09.316 [DEBUG] [Thread-206682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:11:09.357 [DEBUG] [Thread-206682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:11:09.357 [DEBUG] [Thread-206682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:11:09.362 [DEBUG] [Thread-206682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:11:09.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:11:09.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:11:09.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:11:09.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:11:09.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:11:09.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:11:09.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:11:09.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:11:09.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:11:09.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.299061 -999.00  +18.20  14.72     30   +0.50 1 1 1 1 1   888    0 20.29 102.32 ----- 12.9 14.7 107.8 20.4 24.2 -29.7 24.2 -26.7 22.9 -26.4 23.2 -27.0
2025-11-25T09:11:09.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:11:09.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:11:09.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.299061
2025-11-25T09:11:09.399 [DEBUG] [Thread-206682] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:11:09.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:11:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:11:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:11:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:11:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:11:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:10:19', tmtdew=20.71, humidity=24.25, cloud=0.0, wind=19.75, temperature=18.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:10:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:11:09.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:11:09.501 [DEBUG] [Thread-206685] [transport.py] [_log()] starting thread (client mode): 0xd31370a0
2025-11-25T09:11:09.501 [DEBUG] [Thread-206685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:11:09.516 [DEBUG] [Thread-206685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:11:09.516 [INFO] [Thread-206685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] client lang: <none>
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] server lang: <none>
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] kex follows: False
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] Compression: none
2025-11-25T09:11:09.524 [DEBUG] [Thread-206685] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:11:09.579 [DEBUG] [Thread-206685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:11:09.579 [DEBUG] [Thread-206685] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:11:09.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:11:09.579 [DEBUG] [Thread-206685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:11:09.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:11:09.636 [DEBUG] [Thread-206685] [transport.py] [_log()] userauth is OK
2025-11-25T09:11:09.636 [DEBUG] [Thread-206685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:11:09.636 [DEBUG] [Thread-206685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:11:09.636 [DEBUG] [Thread-206685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:11:09.636 [DEBUG] [Thread-206685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:11:09.654 [INFO] [Thread-206685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:11:09.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:11:09.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:11:10.489 [DEBUG] [Thread-206687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:11:10.492 [DEBUG] [Thread-206685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:11:10.492 [DEBUG] [Thread-206685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:11:10.540 [DEBUG] [Thread-206685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:11:10.540 [DEBUG] [Thread-206685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:11:10.548 [DEBUG] [Thread-206685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:11:10.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:11:10.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:11:10.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:11:10.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:11:10.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:11:10.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:11:10.583 [DEBUG] [Thread-206685] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:11:25.338 [DEBUG] [Thread-206688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:11:25.653 [DEBUG] [Thread-206689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:11:40.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:11:40.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:11:40.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:11:40.762 [DEBUG] [Thread-206690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:11:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 10, 56), 20.79, 24.48, 0.0, 19.21, 18.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:11:42.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:10:56
2025-11-25T09:11:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:11:42.710 [DEBUG] [Thread-206691] [transport.py] [_log()] starting thread (client mode): 0xd3136bf0
2025-11-25T09:11:42.710 [DEBUG] [Thread-206691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:11:42.718 [DEBUG] [Thread-206691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:11:42.719 [INFO] [Thread-206691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] client lang: <none>
2025-11-25T09:11:42.723 [DEBUG] [Thread-206691] [transport.py] [_log()] server lang: <none>
2025-11-25T09:11:42.724 [DEBUG] [Thread-206691] [transport.py] [_log()] kex follows: False
2025-11-25T09:11:42.724 [DEBUG] [Thread-206691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:11:42.724 [DEBUG] [Thread-206691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:11:42.724 [DEBUG] [Thread-206691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:11:42.724 [DEBUG] [Thread-206691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:11:42.724 [DEBUG] [Thread-206691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:11:42.724 [DEBUG] [Thread-206691] [transport.py] [_log()] Compression: none
2025-11-25T09:11:42.724 [DEBUG] [Thread-206691] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:11:42.754 [DEBUG] [Thread-206691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:11:42.758 [DEBUG] [Thread-206691] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:11:42.759 [DEBUG] [Thread-206691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:11:42.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:11:42.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:11:42.763 [DEBUG] [Thread-206691] [transport.py] [_log()] userauth is OK
2025-11-25T09:11:42.763 [DEBUG] [Thread-206691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:11:42.763 [DEBUG] [Thread-206691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:11:42.763 [DEBUG] [Thread-206691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:11:42.763 [DEBUG] [Thread-206691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:11:42.792 [INFO] [Thread-206691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:11:42.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:11:43.460 [DEBUG] [Thread-206691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:11:43.461 [DEBUG] [Thread-206691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:11:43.462 [DEBUG] [Thread-206691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:11:43.501 [DEBUG] [Thread-206691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:11:43.501 [DEBUG] [Thread-206691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:11:43.504 [DEBUG] [Thread-206691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:11:43.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:11:43.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:11:43.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:11:43.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:11:43.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:11:43.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:11:43.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:11:43.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:11:43.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:11:43.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.299409 -999.00  +18.30   8.54     30   +0.60 1 1 1 1 1   888    0 20.49 95.75 ----- 10.3 8.5 112.7 20.2 24.3 -32.4 24.3 -26.5 23.0 -26.4 23.2 -27.9
2025-11-25T09:11:43.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:11:43.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:11:43.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.299409
2025-11-25T09:11:43.535 [DEBUG] [Thread-206691] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:11:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:11:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:11:43.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:11:43.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:11:43.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:11:43.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:10:56', tmtdew=20.79, humidity=24.48, cloud=0.0, wind=19.21, temperature=18.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:11:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:11:43.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:11:43.640 [DEBUG] [Thread-206694] [transport.py] [_log()] starting thread (client mode): 0xd3137f70
2025-11-25T09:11:43.640 [DEBUG] [Thread-206694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:11:43.654 [DEBUG] [Thread-206694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:11:43.654 [INFO] [Thread-206694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] client lang: <none>
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] server lang: <none>
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] kex follows: False
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] Compression: none
2025-11-25T09:11:43.662 [DEBUG] [Thread-206694] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:11:43.720 [DEBUG] [Thread-206694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:11:43.721 [DEBUG] [Thread-206694] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:11:43.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:11:43.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:11:43.721 [DEBUG] [Thread-206694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:11:43.776 [DEBUG] [Thread-206694] [transport.py] [_log()] userauth is OK
2025-11-25T09:11:43.776 [DEBUG] [Thread-206694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:11:43.776 [DEBUG] [Thread-206694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:11:43.776 [DEBUG] [Thread-206694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:11:43.776 [DEBUG] [Thread-206694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:11:43.889 [INFO] [Thread-206694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:11:43.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:11:43.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:11:44.690 [DEBUG] [Thread-206694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:11:44.691 [DEBUG] [Thread-206694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:11:44.739 [DEBUG] [Thread-206694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:11:44.739 [DEBUG] [Thread-206694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:11:44.747 [DEBUG] [Thread-206694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:11:44.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:11:44.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:11:44.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:11:44.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:11:44.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:11:44.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:11:44.781 [DEBUG] [Thread-206694] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:11:53.012 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:11:53.028 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:11:55.876 [DEBUG] [Thread-206696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:12:14.965 [DEBUG] [Thread-206697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:12:15.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:12:15.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:12:18.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:12:42.134 [DEBUG] [Thread-206698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:12:54.094 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:12:54.104 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:13:00.572 [DEBUG] [Thread-206699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:13:06.767 [DEBUG] [Thread-206700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:13:48.724 [DEBUG] [Thread-206701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:13:55.717 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:13:55.722 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:14:30.609 [DEBUG] [Thread-206703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:14:30.609 [DEBUG] [Thread-206702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:14:46.391 [DEBUG] [Thread-206704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:14:46.398 [DEBUG] [Thread-206705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:14:56.546 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:14:57.567 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:15:09.249 [DEBUG] [Thread-206706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:15:35.771 [DEBUG] [Thread-206707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:15:55.116 [DEBUG] [Thread-206708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:16:01.257 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:16:01.263 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:16:34.646 [DEBUG] [Thread-206709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:17:27.060 [DEBUG] [Thread-195095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:17:37.142 [DEBUG] [Thread-206710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:17:44.623 [DEBUG] [Thread-206711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:17:44.632 [DEBUG] [Thread-206712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:18:21.382 [DEBUG] [Thread-206710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:18:47.676 [DEBUG] [Thread-206713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:18:46.331 [DEBUG] [Thread-206710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:18:53.980 [DEBUG] [Thread-206714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:18:53.984 [DEBUG] [Thread-206715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:19:14.087 [DEBUG] [Thread-206716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:19:27.995 [DEBUG] [Thread-206713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:19:41.650 [DEBUG] [Thread-206713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:19:46.082 [DEBUG] [Thread-206717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:19:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 11, 40), 20.91, 24.35, 0.0, 24.91, 18.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:19:49.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:11:40
2025-11-25T09:19:58.012 [DEBUG] [Thread-206718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:20:19.663 [DEBUG] [Thread-206719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:20:22.525 [DEBUG] [Thread-206720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:20:38.987 [DEBUG] [Thread-206717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:20:39.063 [DEBUG] [Thread-206721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:20:39.066 [DEBUG] [Thread-206717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:20:39.083 [DEBUG] [Thread-206722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:21:30.694 [DEBUG] [Thread-206723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:21:43.962 [DEBUG] [Thread-206721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:21:43.958 [DEBUG] [Thread-206724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:21:43.973 [DEBUG] [Thread-206721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:22:39.814 [DEBUG] [Thread-206726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:22:34.393 [DEBUG] [Thread-206725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:22:48.857 [DEBUG] [Thread-206721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:22:48.872 [DEBUG] [Thread-206721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:23:15.475 [DEBUG] [Thread-206727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:23:15.480 [DEBUG] [Thread-206728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:23:57.904 [DEBUG] [Thread-206721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:23:58.100 [DEBUG] [Thread-206730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:23:57.901 [DEBUG] [Thread-206729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:24:14.807 [DEBUG] [Thread-206731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:24:58.556 [DEBUG] [Thread-206732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:25:09.741 [DEBUG] [Thread-206733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:25:09.729 [DEBUG] [Thread-206730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:25:09.758 [DEBUG] [Thread-206734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:25:09.765 [DEBUG] [Thread-206730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:25:20.517 [DEBUG] [Thread-206735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:25:40.242 [DEBUG] [Thread-206736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:25:41.956 [DEBUG] [Thread-206737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:25:41.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:25:56.715 [DEBUG] [Thread-206738] [transport.py] [_log()] starting thread (client mode): 0xd3137eb0
2025-11-25T09:25:56.724 [DEBUG] [Thread-206738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:25:56.725 [DEBUG] [Thread-206738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:25:56.725 [INFO] [Thread-206738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:25:56.882 [DEBUG] [Thread-206738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] client lang: <none>
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] server lang: <none>
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] kex follows: False
2025-11-25T09:25:56.883 [DEBUG] [Thread-206738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:25:56.889 [DEBUG] [Thread-206738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:25:56.889 [DEBUG] [Thread-206738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:25:56.889 [DEBUG] [Thread-206738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:25:56.889 [DEBUG] [Thread-206738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:25:56.890 [DEBUG] [Thread-206738] [transport.py] [_log()] Compression: none
2025-11-25T09:25:56.890 [DEBUG] [Thread-206738] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:26:01.006 [DEBUG] [Thread-206738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:26:15.780 [DEBUG] [Thread-206734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:26:15.798 [DEBUG] [Thread-206740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:26:19.739 [DEBUG] [Thread-206734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:26:19.750 [DEBUG] [Thread-206741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:26:19.751 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:26:19.760 [DEBUG] [Thread-206738] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:26:19.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:26:19.772 [DEBUG] [Thread-206738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:26:19.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:26:19.780 [DEBUG] [Thread-206738] [transport.py] [_log()] userauth is OK
2025-11-25T09:26:19.781 [DEBUG] [Thread-206738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:26:19.782 [DEBUG] [Thread-206738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:26:19.782 [DEBUG] [Thread-206738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:26:19.783 [DEBUG] [Thread-206738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:26:20.685 [INFO] [Thread-206738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:26:20.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:26:20.694 [DEBUG] [Thread-206738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:26:20.694 [DEBUG] [Thread-206738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:26:20.695 [DEBUG] [Thread-206738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:26:20.695 [DEBUG] [Thread-206738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:26:20.695 [DEBUG] [Thread-206738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:26:20.698 [DEBUG] [Thread-206738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:26:20.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:26:20.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:26:20.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:26:20.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:26:20.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:26:20.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:26:20.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:26:20.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:26:21.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:26:21.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.309825 -999.00  +18.40  15.23     28   +0.00 1 1 1 1 1   888    0 22.11 112.59 ----- 15.4 15.2 114.1 21.0 24.9 -27.2 24.9 -27.2 23.6 -28.0 23.9 -27.8
2025-11-25T09:26:21.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:26:21.572 [DEBUG] [Thread-206738] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:26:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:26:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.309825
2025-11-25T09:26:21.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:26:21.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:26:21.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:26:21.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:26:21.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:26:21.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:11:40', tmtdew=20.91, humidity=24.35, cloud=0.0, wind=24.91, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:26:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:26:22.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:26:22.600 [DEBUG] [Thread-206744] [transport.py] [_log()] starting thread (client mode): 0xd3137cd0
2025-11-25T09:26:22.600 [DEBUG] [Thread-206744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:26:22.600 [DEBUG] [Thread-206744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:26:22.600 [INFO] [Thread-206744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:26:22.610 [DEBUG] [Thread-206744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:26:22.611 [DEBUG] [Thread-206744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:26:22.611 [DEBUG] [Thread-206744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:26:22.611 [DEBUG] [Thread-206744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:26:22.611 [DEBUG] [Thread-206744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:26:22.611 [DEBUG] [Thread-206744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:26:22.770 [DEBUG] [Thread-206744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:26:22.770 [DEBUG] [Thread-206744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:26:22.770 [DEBUG] [Thread-206744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:26:22.770 [DEBUG] [Thread-206744] [transport.py] [_log()] client lang: <none>
2025-11-25T09:26:22.770 [DEBUG] [Thread-206744] [transport.py] [_log()] server lang: <none>
2025-11-25T09:26:22.770 [DEBUG] [Thread-206744] [transport.py] [_log()] kex follows: False
2025-11-25T09:26:22.770 [DEBUG] [Thread-206744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:26:22.779 [DEBUG] [Thread-206744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:26:22.779 [DEBUG] [Thread-206744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:26:22.779 [DEBUG] [Thread-206744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:26:22.779 [DEBUG] [Thread-206744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:26:22.779 [DEBUG] [Thread-206744] [transport.py] [_log()] Compression: none
2025-11-25T09:26:22.779 [DEBUG] [Thread-206744] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:26:25.263 [DEBUG] [Thread-206744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:26:30.009 [DEBUG] [Thread-206744] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:26:30.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:26:36.995 [DEBUG] [Thread-206744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:26:45.745 [DEBUG] [Thread-206746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:26:45.746 [DEBUG] [Thread-206747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:26:45.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:26:45.767 [DEBUG] [Thread-206744] [transport.py] [_log()] userauth is OK
2025-11-25T09:26:45.767 [DEBUG] [Thread-206744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:26:45.769 [DEBUG] [Thread-206744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:26:45.769 [DEBUG] [Thread-206744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:26:45.769 [DEBUG] [Thread-206744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:26:45.802 [INFO] [Thread-206744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:26:45.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:26:46.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:26:46.693 [DEBUG] [Thread-206744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:26:46.694 [DEBUG] [Thread-206744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:26:46.702 [DEBUG] [Thread-206744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:26:46.703 [DEBUG] [Thread-206744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:26:46.715 [DEBUG] [Thread-206744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:26:46.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:26:46.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:26:46.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:26:47.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:26:47.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:26:47.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:26:47.034 [DEBUG] [Thread-206744] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:27:06.706 [DEBUG] [Thread-206748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:27:19.771 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:27:19.777 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:27:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:27:19.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:27:24.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:27:24.255 [DEBUG] [Thread-206749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:27:25.445 [DEBUG] [Thread-206750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:27:55.393 [DEBUG] [Thread-206751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:28:07.939 [DEBUG] [Thread-206752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:28:21.831 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:28:23.618 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:28:30.301 [DEBUG] [Thread-206753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:28:57.853 [DEBUG] [Thread-206754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:29:26.379 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:29:28.483 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:29:29.791 [DEBUG] [Thread-206755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:29:30.881 [DEBUG] [Thread-206756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:30:12.388 [DEBUG] [Thread-206757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:30:32.684 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:30:33.431 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:30:41.044 [DEBUG] [Thread-206758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:31:07.050 [DEBUG] [Thread-206759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:31:22.926 [DEBUG] [Thread-206760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:31:35.880 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:31:37.884 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:31:55.862 [DEBUG] [Thread-206761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:32:17.043 [DEBUG] [Thread-206762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:32:41.733 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:32:42.234 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:32:43.931 [DEBUG] [Thread-206763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:32:49.883 [DEBUG] [Thread-206764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:33:21.287 [DEBUG] [Thread-206765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:33:46.155 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:33:50.532 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:33:50.538 [DEBUG] [Thread-206766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:33:50.545 [DEBUG] [Thread-206767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:34:24.314 [DEBUG] [Thread-206768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:34:27.326 [DEBUG] [Thread-206769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:34:46.551 [DEBUG] [Thread-206770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:34:51.145 [DEBUG] [Thread-206766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:34:51.148 [DEBUG] [Thread-206766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:35:13.661 [DEBUG] [Thread-206771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:35:13.943 [DEBUG] [Thread-206772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:35:32.173 [DEBUG] [Thread-206773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:35:56.870 [DEBUG] [Thread-206766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:36:12.751 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:36:12.769 [DEBUG] [Thread-206775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:36:12.771 [DEBUG] [Thread-206776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:36:38.428 [DEBUG] [Thread-206777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:36:45.860 [DEBUG] [Thread-206778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:37:03.013 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:37:03.041 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:37:04.552 [DEBUG] [Thread-206779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:37:35.175 [DEBUG] [Thread-206780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:37:53.405 [DEBUG] [Thread-206781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:38:00.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 11, 40), 20.91, 24.35, 0.0, 24.91, 18.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:38:01.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:11:40
2025-11-25T09:38:04.848 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:38:05.850 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:38:23.192 [DEBUG] [Thread-206782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:38:23.505 [DEBUG] [Thread-206783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:38:58.688 [DEBUG] [Thread-206784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:39:07.727 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:39:07.735 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:39:26.301 [DEBUG] [Thread-206785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:39:32.316 [DEBUG] [Thread-206786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:39:37.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:39:38.549 [DEBUG] [Thread-206787] [transport.py] [_log()] starting thread (client mode): 0xd07be4a0
2025-11-25T09:39:38.645 [DEBUG] [Thread-206787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:39:38.649 [DEBUG] [Thread-206787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:39:38.650 [INFO] [Thread-206787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:39:38.657 [DEBUG] [Thread-206787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:39:38.658 [DEBUG] [Thread-206787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:39:38.658 [DEBUG] [Thread-206787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:39:38.658 [DEBUG] [Thread-206787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:39:38.658 [DEBUG] [Thread-206787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:39:38.658 [DEBUG] [Thread-206787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:39:38.659 [DEBUG] [Thread-206787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:39:38.659 [DEBUG] [Thread-206787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:39:38.659 [DEBUG] [Thread-206787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:39:38.659 [DEBUG] [Thread-206787] [transport.py] [_log()] client lang: <none>
2025-11-25T09:39:38.659 [DEBUG] [Thread-206787] [transport.py] [_log()] server lang: <none>
2025-11-25T09:39:38.659 [DEBUG] [Thread-206787] [transport.py] [_log()] kex follows: False
2025-11-25T09:39:38.659 [DEBUG] [Thread-206787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:39:38.660 [DEBUG] [Thread-206787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:39:38.660 [DEBUG] [Thread-206787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:39:38.660 [DEBUG] [Thread-206787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:39:38.661 [DEBUG] [Thread-206787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:39:38.661 [DEBUG] [Thread-206787] [transport.py] [_log()] Compression: none
2025-11-25T09:39:38.661 [DEBUG] [Thread-206787] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:39:38.941 [DEBUG] [Thread-206787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:39:39.122 [DEBUG] [Thread-206787] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:39:39.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:39:39.522 [DEBUG] [Thread-206787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:39:39.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:39:39.527 [DEBUG] [Thread-206787] [transport.py] [_log()] userauth is OK
2025-11-25T09:39:39.527 [DEBUG] [Thread-206787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:39:39.527 [DEBUG] [Thread-206787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:39:39.527 [DEBUG] [Thread-206787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:39:39.527 [DEBUG] [Thread-206787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:39:39.727 [INFO] [Thread-206787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:39:39.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:39:40.243 [DEBUG] [Thread-206787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:39:40.243 [DEBUG] [Thread-206787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:39:40.246 [DEBUG] [Thread-206787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:39:40.246 [DEBUG] [Thread-206787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:39:40.246 [DEBUG] [Thread-206787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:39:40.250 [DEBUG] [Thread-206787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:39:40.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:39:40.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:39:40.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:39:40.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:39:40.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:39:40.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:39:40.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:39:40.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:39:40.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:39:40.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.318853 -999.00  +20.70  19.12     21   -2.10 1 1 1 1 1   888    0 26.62 215.72 ----- 21.7 19.1 121.8 26.1 26.0 -30.1 25.6 -28.8 24.4 -26.8 24.9 -27.0
2025-11-25T09:39:40.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:39:40.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:39:40.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.318853
2025-11-25T09:39:40.513 [DEBUG] [Thread-206787] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:39:40.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:39:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:39:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:39:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:39:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:39:41.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:11:40', tmtdew=20.91, humidity=24.35, cloud=0.0, wind=24.91, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:39:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:39:41.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:39:41.572 [DEBUG] [Thread-206790] [transport.py] [_log()] starting thread (client mode): 0xd07bf2e0
2025-11-25T09:39:41.572 [DEBUG] [Thread-206790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:39:41.585 [DEBUG] [Thread-206790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:39:41.585 [INFO] [Thread-206790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] client lang: <none>
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] server lang: <none>
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] kex follows: False
2025-11-25T09:39:41.594 [DEBUG] [Thread-206790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:39:41.595 [DEBUG] [Thread-206790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:39:41.595 [DEBUG] [Thread-206790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:39:41.595 [DEBUG] [Thread-206790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:39:41.595 [DEBUG] [Thread-206790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:39:41.595 [DEBUG] [Thread-206790] [transport.py] [_log()] Compression: none
2025-11-25T09:39:41.595 [DEBUG] [Thread-206790] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:39:41.650 [DEBUG] [Thread-206790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:39:41.651 [DEBUG] [Thread-206790] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:39:41.652 [DEBUG] [Thread-206790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:39:41.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:39:41.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:39:41.707 [DEBUG] [Thread-206790] [transport.py] [_log()] userauth is OK
2025-11-25T09:39:41.707 [DEBUG] [Thread-206790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:39:41.707 [DEBUG] [Thread-206790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:39:41.707 [DEBUG] [Thread-206790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:39:41.707 [DEBUG] [Thread-206790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:39:41.721 [INFO] [Thread-206790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:39:41.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:39:41.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:39:42.547 [DEBUG] [Thread-206790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:39:42.547 [DEBUG] [Thread-206790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:39:42.595 [DEBUG] [Thread-206790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:39:42.595 [DEBUG] [Thread-206790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:39:42.605 [DEBUG] [Thread-206790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:39:42.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:39:42.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:39:42.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:39:42.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:39:42.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:39:42.971 [DEBUG] [Thread-206790] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:39:42.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:39:44.107 [DEBUG] [Thread-206792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:40:05.286 [DEBUG] [Thread-206793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:40:07.965 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:40:08.143 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:40:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:40:13.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:40:17.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:40:29.748 [DEBUG] [Thread-206794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:40:47.974 [DEBUG] [Thread-206795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:41:22.635 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:41:23.139 [DEBUG] [Thread-206796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:41:23.141 [DEBUG] [Thread-206797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:41:23.146 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:42:02.204 [DEBUG] [Thread-206798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:42:05.098 [DEBUG] [Thread-206799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:42:22.912 [DEBUG] [Thread-206796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:42:43.377 [DEBUG] [Thread-206796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:42:43.386 [DEBUG] [Thread-206802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:42:43.386 [DEBUG] [Thread-206801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:42:40.934 [DEBUG] [Thread-206800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:43:12.134 [DEBUG] [Thread-206803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:43:29.143 [DEBUG] [Thread-206800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:43:29.849 [DEBUG] [Thread-206800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:43:35.719 [DEBUG] [Thread-206804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:44:09.602 [DEBUG] [Thread-206805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:44:42.114 [DEBUG] [Thread-206800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:44:42.115 [DEBUG] [Thread-206806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:44:42.134 [DEBUG] [Thread-206807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:44:42.152 [DEBUG] [Thread-206808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:44:42.159 [DEBUG] [Thread-206800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:45:24.544 [DEBUG] [Thread-206810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:45:24.539 [DEBUG] [Thread-206809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:45:25.037 [DEBUG] [Thread-206811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:45:30.721 [DEBUG] [Thread-206812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:45:42.586 [DEBUG] [Thread-206807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:45:42.601 [DEBUG] [Thread-206807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:46:06.730 [DEBUG] [Thread-206813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:46:34.859 [DEBUG] [Thread-206814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:46:43.713 [DEBUG] [Thread-206807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:46:43.730 [DEBUG] [Thread-206807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:46:54.080 [DEBUG] [Thread-206815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:47:30.974 [DEBUG] [Thread-206816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:47:31.289 [DEBUG] [Thread-206817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:47:49.014 [DEBUG] [Thread-206807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:47:55.918 [DEBUG] [Thread-206818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:47:56.296 [DEBUG] [Thread-206819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:47:55.918 [DEBUG] [Thread-206807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:47:58.798 [DEBUG] [Thread-206820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:48:18.245 [DEBUG] [Thread-206821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:48:51.771 [DEBUG] [Thread-206822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:48:54.068 [DEBUG] [Thread-206818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:48:54.074 [DEBUG] [Thread-206818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:48:54.689 [DEBUG] [Thread-206823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:49:30.628 [DEBUG] [Thread-206824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:49:35.401 [DEBUG] [Thread-206825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:49:55.903 [DEBUG] [Thread-206818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:49:55.914 [DEBUG] [Thread-206818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:50:10.163 [DEBUG] [Thread-206826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:50:10.504 [DEBUG] [Thread-206827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:50:32.951 [DEBUG] [Thread-206828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:51:06.834 [DEBUG] [Thread-206829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:51:06.809 [DEBUG] [Thread-206818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:51:07.555 [DEBUG] [Thread-206830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:51:07.681 [DEBUG] [Thread-206818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:51:07.688 [DEBUG] [Thread-206831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:51:33.035 [DEBUG] [Thread-206832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:52:06.561 [DEBUG] [Thread-206833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:52:09.002 [DEBUG] [Thread-206831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:52:10.897 [DEBUG] [Thread-206831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:52:19.407 [DEBUG] [Thread-206834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:52:23.147 [DEBUG] [Thread-206835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:52:37.135 [DEBUG] [Thread-206836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:52:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 11, 40), 20.91, 24.35, 0.0, 24.91, 18.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T09:52:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:11:40
2025-11-25T09:52:55.734 [DEBUG] [Thread-206837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:53:13.773 [DEBUG] [Thread-206831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:53:14.354 [DEBUG] [Thread-206831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:53:24.282 [DEBUG] [Thread-206838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:53:30.837 [DEBUG] [Thread-206839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:53:52.406 [DEBUG] [Thread-206840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:53:52.414 [DEBUG] [Thread-206841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:54:01.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T09:54:18.075 [DEBUG] [Thread-206831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:54:14.051 [DEBUG] [Thread-206842] [transport.py] [_log()] starting thread (client mode): 0xd07bc6d0
2025-11-25T09:54:19.343 [DEBUG] [Thread-206842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:54:20.191 [DEBUG] [Thread-206831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:54:21.110 [DEBUG] [Thread-206842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T09:54:21.112 [DEBUG] [Thread-206843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:54:21.113 [INFO] [Thread-206842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T09:54:22.857 [DEBUG] [Thread-206842] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:54:22.857 [DEBUG] [Thread-206842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T09:54:22.857 [DEBUG] [Thread-206842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] client lang: <none>
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] server lang: <none>
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] kex follows: False
2025-11-25T09:54:22.858 [DEBUG] [Thread-206842] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:54:22.859 [DEBUG] [Thread-206842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:54:22.859 [DEBUG] [Thread-206842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:54:22.859 [DEBUG] [Thread-206842] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:54:22.859 [DEBUG] [Thread-206842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:54:22.860 [DEBUG] [Thread-206842] [transport.py] [_log()] Compression: none
2025-11-25T09:54:22.860 [DEBUG] [Thread-206842] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:54:23.084 [DEBUG] [Thread-206842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:54:23.098 [DEBUG] [Thread-206842] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:54:23.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T09:54:23.523 [DEBUG] [Thread-206842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T09:54:23.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:54:24.150 [DEBUG] [Thread-206842] [transport.py] [_log()] userauth is OK
2025-11-25T09:54:24.150 [DEBUG] [Thread-206842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:54:24.154 [DEBUG] [Thread-206842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:54:24.154 [DEBUG] [Thread-206842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T09:54:24.154 [DEBUG] [Thread-206842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:54:25.011 [INFO] [Thread-206842] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:54:30.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:54:30.665 [DEBUG] [Thread-206842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:54:30.665 [DEBUG] [Thread-206842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:54:30.666 [DEBUG] [Thread-206842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T09:54:30.667 [DEBUG] [Thread-206842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:54:30.667 [DEBUG] [Thread-206842] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:54:30.669 [DEBUG] [Thread-206842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:54:30.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:54:30.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T09:54:30.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T09:54:30.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T09:54:31.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:54:31.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T09:54:31.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:54:31.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:54:31.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T09:54:31.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.328922 -999.00  +20.60  16.16     20   -2.50 1 1 1 1 1   888    0 31.95 324.23 ----- 12.1 16.2 116.7 19.3 26.9 -27.5 26.6 -27.5 25.5 -27.8 25.9 -27.2
2025-11-25T09:54:31.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T09:54:31.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T09:54:31.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.328922
2025-11-25T09:54:31.767 [DEBUG] [Thread-206842] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:54:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T09:54:32.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T09:54:32.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T09:54:32.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T09:54:32.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T09:54:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:11:40', tmtdew=20.91, humidity=24.35, cloud=0.0, wind=24.91, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T07:53:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T09:54:33.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T09:54:34.348 [DEBUG] [Thread-206846] [transport.py] [_log()] starting thread (client mode): 0xd07bc4f0
2025-11-25T09:54:34.349 [DEBUG] [Thread-206846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T09:54:34.349 [DEBUG] [Thread-206846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T09:54:34.349 [INFO] [Thread-206846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T09:54:34.358 [DEBUG] [Thread-206846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] client lang: <none>
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] server lang: <none>
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] kex follows: False
2025-11-25T09:54:34.359 [DEBUG] [Thread-206846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T09:54:34.360 [DEBUG] [Thread-206846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T09:54:34.360 [DEBUG] [Thread-206846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T09:54:34.360 [DEBUG] [Thread-206846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T09:54:34.360 [DEBUG] [Thread-206846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T09:54:34.360 [DEBUG] [Thread-206846] [transport.py] [_log()] Compression: none
2025-11-25T09:54:34.360 [DEBUG] [Thread-206846] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T09:54:34.770 [DEBUG] [Thread-206846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T09:54:34.775 [DEBUG] [Thread-206846] [transport.py] [_log()] Switch to new keys ...
2025-11-25T09:54:34.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T09:54:34.775 [DEBUG] [Thread-206846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T09:54:34.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T09:54:34.829 [DEBUG] [Thread-206846] [transport.py] [_log()] userauth is OK
2025-11-25T09:54:34.829 [DEBUG] [Thread-206846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T09:54:34.829 [DEBUG] [Thread-206846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T09:54:34.829 [DEBUG] [Thread-206846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T09:54:34.829 [DEBUG] [Thread-206846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T09:54:34.971 [INFO] [Thread-206846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T09:54:34.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T09:54:35.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T09:54:35.744 [DEBUG] [Thread-206846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T09:54:36.985 [DEBUG] [Thread-206846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T09:54:36.985 [DEBUG] [Thread-206846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T09:54:36.986 [DEBUG] [Thread-206846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T09:54:36.998 [DEBUG] [Thread-206846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T09:54:37.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T09:54:37.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T09:54:37.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T09:54:37.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T09:54:37.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T09:54:37.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T09:54:37.267 [DEBUG] [Thread-206846] [transport.py] [_log()] EOF in transport thread
2025-11-25T09:54:43.516 [DEBUG] [Thread-206848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:55:09.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T09:55:12.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T09:55:23.322 [DEBUG] [Thread-206849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:55:25.219 [DEBUG] [Thread-206831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:55:33.832 [DEBUG] [Thread-206831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:55:33.849 [DEBUG] [Thread-206850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:55:33.877 [DEBUG] [Thread-206851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:55:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T09:55:54.889 [DEBUG] [Thread-206852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:56:04.158 [DEBUG] [Thread-206853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:56:29.574 [DEBUG] [Thread-206851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:56:29.573 [DEBUG] [Thread-206854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:56:29.609 [DEBUG] [Thread-206851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:56:30.809 [DEBUG] [Thread-206855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:56:56.784 [DEBUG] [Thread-206856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:57:26.171 [DEBUG] [Thread-206857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:57:26.208 [DEBUG] [Thread-206858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:57:31.595 [DEBUG] [Thread-206851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:57:31.600 [DEBUG] [Thread-206851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:57:46.046 [DEBUG] [Thread-206859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:58:35.406 [DEBUG] [Thread-206851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:58:36.108 [DEBUG] [Thread-206861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:58:36.109 [DEBUG] [Thread-206860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:58:39.966 [DEBUG] [Thread-206862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:58:40.212 [DEBUG] [Thread-206851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:58:51.391 [DEBUG] [Thread-206863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:59:11.924 [DEBUG] [Thread-206864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:59:15.063 [DEBUG] [Thread-206865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:59:47.454 [DEBUG] [Thread-206862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:59:49.390 [DEBUG] [Thread-206866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T09:59:50.551 [DEBUG] [Thread-206866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:00:18.889 [DEBUG] [Thread-206867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:00:30.793 [DEBUG] [Thread-206868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:00:52.901 [DEBUG] [Thread-206866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:01:07.340 [DEBUG] [Thread-206869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:01:27.471 [DEBUG] [Thread-206870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:02:09.237 [DEBUG] [Thread-206869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:02:10.604 [DEBUG] [Thread-206871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:02:10.608 [DEBUG] [Thread-206872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:02:10.623 [DEBUG] [Thread-206869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:02:30.367 [DEBUG] [Thread-206873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:03:00.217 [DEBUG] [Thread-206874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:03:00.218 [DEBUG] [Thread-206875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:03:07.686 [DEBUG] [Thread-206876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:03:10.759 [DEBUG] [Thread-206872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:03:12.230 [DEBUG] [Thread-206872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:03:48.952 [DEBUG] [Thread-206877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:03:59.735 [DEBUG] [Thread-206878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:04:18.668 [DEBUG] [Thread-206872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:04:39.640 [DEBUG] [Thread-206880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:04:42.466 [DEBUG] [Thread-206881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:04:40.130 [DEBUG] [Thread-206879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:04:59.751 [DEBUG] [Thread-206882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:05:24.738 [DEBUG] [Thread-206879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:05:24.669 [DEBUG] [Thread-206883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:05:25.348 [DEBUG] [Thread-206879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:05:25.349 [DEBUG] [Thread-206884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:05:29.176 [DEBUG] [Thread-206885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:05:58.905 [DEBUG] [Thread-206886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:06:24.765 [DEBUG] [Thread-206887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:06:28.130 [DEBUG] [Thread-206879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:06:28.454 [DEBUG] [Thread-206879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:07:07.626 [DEBUG] [Thread-206888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:07:31.092 [DEBUG] [Thread-206879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:07:32.827 [DEBUG] [Thread-206889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:07:47.910 [DEBUG] [Thread-206890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:07:47.912 [DEBUG] [Thread-206879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:08:09.715 [DEBUG] [Thread-206891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:08:55.494 [DEBUG] [Thread-206892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:08:53.627 [DEBUG] [Thread-206890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:08:55.520 [DEBUG] [Thread-206890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:09:47.182 [DEBUG] [Thread-206893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:09:47.182 [DEBUG] [Thread-206894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:09:48.156 [DEBUG] [Thread-206895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:09:51.880 [DEBUG] [Thread-206892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:09:55.236 [DEBUG] [Thread-206896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:09:55.984 [DEBUG] [Thread-206897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:09:55.996 [DEBUG] [Thread-206892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:10:27.189 [DEBUG] [Thread-206898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:10:59.303 [DEBUG] [Thread-206897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:10:59.336 [DEBUG] [Thread-206897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:11:00.537 [DEBUG] [Thread-206899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:12:03.117 [DEBUG] [Thread-206897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:12:03.257 [DEBUG] [Thread-206897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:12:09.911 [DEBUG] [Thread-206900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:12:17.518 [DEBUG] [Thread-206901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:13:13.826 [DEBUG] [Thread-206897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:13:15.770 [DEBUG] [Thread-206902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:14:09.710 [DEBUG] [Thread-206905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:14:09.692 [DEBUG] [Thread-206904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:14:10.369 [DEBUG] [Thread-206906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:14:09.698 [DEBUG] [Thread-206903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:14:13.527 [DEBUG] [Thread-206904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:14:13.527 [DEBUG] [Thread-206904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:15:23.709 [DEBUG] [Thread-206904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:15:27.078 [DEBUG] [Thread-206907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:15:28.995 [DEBUG] [Thread-206908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:15:28.996 [DEBUG] [Thread-206904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:15:29.526 [DEBUG] [Thread-206909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:15:29.908 [DEBUG] [Thread-206910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:15:29.909 [DEBUG] [Thread-206911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:16:04.124 [DEBUG] [Thread-206912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:16:51.859 [DEBUG] [Thread-206913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:16:51.845 [DEBUG] [Thread-206909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:16:51.899 [DEBUG] [Thread-206914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:16:51.913 [DEBUG] [Thread-206909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:16:55.380 [DEBUG] [Thread-206915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:17:42.731 [DEBUG] [Thread-206914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:17:56.665 [DEBUG] [Thread-206916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:17:56.667 [DEBUG] [Thread-206914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:18:24.807 [DEBUG] [Thread-206917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:19:00.702 [DEBUG] [Thread-206916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:19:13.955 [DEBUG] [Thread-206918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:19:14.762 [DEBUG] [Thread-206916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:19:36.638 [DEBUG] [Thread-206919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:20:01.794 [DEBUG] [Thread-206918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:20:19.306 [DEBUG] [Thread-206920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:20:19.310 [DEBUG] [Thread-206918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:20:26.194 [DEBUG] [Thread-206921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:20:59.027 [DEBUG] [Thread-206922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:21:25.891 [DEBUG] [Thread-206923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:21:25.884 [DEBUG] [Thread-206920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:21:25.908 [DEBUG] [Thread-206920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:21:38.081 [DEBUG] [Thread-206924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:21:46.104 [DEBUG] [Thread-206925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:22:19.806 [DEBUG] [Thread-206923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:22:19.803 [DEBUG] [Thread-206926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:22:22.475 [DEBUG] [Thread-206928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:22:21.941 [DEBUG] [Thread-206927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:22:23.188 [DEBUG] [Thread-206923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:23:18.703 [DEBUG] [Thread-206929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:23:18.712 [DEBUG] [Thread-206930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:23:27.561 [DEBUG] [Thread-206927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:23:27.591 [DEBUG] [Thread-206927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:23:42.785 [DEBUG] [Thread-206931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:24:22.660 [DEBUG] [Thread-206932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:24:29.771 [DEBUG] [Thread-206927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:24:29.793 [DEBUG] [Thread-206927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:24:57.263 [DEBUG] [Thread-206933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:25:26.717 [DEBUG] [Thread-206934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:26:06.942 [DEBUG] [Thread-206927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:26:11.060 [DEBUG] [Thread-206935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:26:11.593 [DEBUG] [Thread-206936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:26:11.904 [DEBUG] [Thread-206937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:26:47.470 [DEBUG] [Thread-206935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:26:52.335 [DEBUG] [Thread-206939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:26:52.341 [DEBUG] [Thread-206938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:26:52.345 [DEBUG] [Thread-206935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:26:52.381 [DEBUG] [Thread-206940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:27:53.522 [DEBUG] [Thread-206939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:28:03.158 [DEBUG] [Thread-206939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:28:03.190 [DEBUG] [Thread-206941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:28:03.211 [DEBUG] [Thread-206942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:28:17.764 [DEBUG] [Thread-206943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:28:21.299 [DEBUG] [Thread-206944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:28:34.484 [DEBUG] [Thread-206945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:29:12.748 [DEBUG] [Thread-206941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:29:12.737 [DEBUG] [Thread-206946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:29:12.840 [DEBUG] [Thread-206947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:29:14.008 [DEBUG] [Thread-206941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:29:43.392 [DEBUG] [Thread-206948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:29:43.396 [DEBUG] [Thread-206949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:30:01.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 11, 40), 20.91, 24.35, 0.0, 24.91, 18.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T10:30:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:11:40
2025-11-25T10:30:17.480 [DEBUG] [Thread-206947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:30:17.978 [DEBUG] [Thread-206947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:30:17.981 [DEBUG] [Thread-206950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:30:37.719 [DEBUG] [Thread-206951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:31:20.694 [DEBUG] [Thread-206950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:31:26.449 [DEBUG] [Thread-206952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:31:34.475 [DEBUG] [Thread-206953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:31:35.683 [DEBUG] [Thread-206954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:32:13.162 [DEBUG] [Thread-206955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:32:18.550 [DEBUG] [Thread-206956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:32:32.008 [DEBUG] [Thread-206953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:32:44.514 [DEBUG] [Thread-206957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:32:44.510 [DEBUG] [Thread-206953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T10:32:47.781 [DEBUG] [Thread-206958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:02:49.590 [INFO] [MainThread] [loggingutils.py] [setup_logging()] Logging set up
2025-11-25T14:02:49.590 [INFO] [MainThread] [driver.py] [__init__()] Starting up weather service
2025-11-25T14:02:49.590 [INFO] [MainThread] [driver.py] [parse_config()] Parsing config file /usr/local/etc/weather.cfg
2025-11-25T14:02:49.590 [DEBUG] [MainThread] [driver.py] [parse_config()] Using database table current_weather
2025-11-25T14:02:49.590 [DEBUG] [MainThread] [driver.py] [__init__()] Using database table current_weather
2025-11-25T14:02:49.590 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:02:49.590 [INFO] [MainThread] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:02:49.596 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:02:50.370 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 11, 40), 20.91, 24.35, 0.0, 24.91, 18.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:02:50.370 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:11:40
2025-11-25T14:02:50.520 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:02:50.667 [INFO] [MainThread] [driver.py] [read_atlas_file()] An error occurred: [Errno -3] Temporary failure in name resolution
2025-11-25T14:02:50.667 [ERROR] [MainThread] [driver.py] [read_atlas_file()] Error opening or reading local copy of weather.dat: [Errno 2] No such file or directory: '/tmp/weather.log'
2025-11-25T14:02:50.667 [WARNING] [MainThread] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: [Errno 2] No such file or directory: '/tmp/weather.log'
2025-11-25T14:02:50.667 [DEBUG] [MainThread] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:11:40', tmtdew=20.91, humidity=24.35, cloud=0.0, wind=24.91, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:02:50.667 [INFO] [poll_weather_worker] [driver.py] [poll_weather_worker()] Starting polling thread
2025-11-25T14:02:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:02:50.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:02:50.668 [INFO] [MainThread] [server.py] [run()] Listening on 9061
2025-11-25T14:02:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:02:51.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 11, 40), 20.91, 24.35, 0.0, 24.91, 18.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:02:51.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:11:40
2025-11-25T14:02:51.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:02:54.514 [DEBUG] [Thread-1] [transport.py] [_log()] starting thread (client mode): 0x761da080
2025-11-25T14:02:54.515 [DEBUG] [Thread-1] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:02:54.529 [DEBUG] [Thread-1] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:02:54.529 [INFO] [Thread-1] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:02:54.530 [DEBUG] [Thread-1] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] client lang: <none>
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] server lang: <none>
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] kex follows: False
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] Compression: none
2025-11-25T14:02:54.531 [DEBUG] [Thread-1] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:02:54.547 [DEBUG] [Thread-1] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:02:54.547 [DEBUG] [Thread-1] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:02:54.547 [DEBUG] [Thread-1] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:02:54.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:02:54.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:02:54.548 [DEBUG] [Thread-1] [transport.py] [_log()] userauth is OK
2025-11-25T14:02:54.548 [DEBUG] [Thread-1] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:02:54.548 [DEBUG] [Thread-1] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:02:54.548 [DEBUG] [Thread-1] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:02:54.548 [DEBUG] [Thread-1] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:02:54.562 [INFO] [Thread-1] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:02:54.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:02:55.241 [DEBUG] [Thread-1] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:02:55.241 [DEBUG] [Thread-1] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:02:55.241 [DEBUG] [Thread-1] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:02:55.282 [DEBUG] [Thread-1] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:02:55.282 [DEBUG] [Thread-1] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:02:55.284 [DEBUG] [Thread-1] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:02:55.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:02:55.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:02:55.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:02:55.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:02:55.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:02:55.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:02:55.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:02:55.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.501490 -999.00  +26.10  22.89     13   -3.90 1 1 1 1 1   888    0 29.39 -17.59 ----- 22.1 22.9 59.2 25.8 33.8 -31.4 33.2 -32.1 34.1 -28.8 34.7 -31.8
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.501490
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:02:55.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:11:40', tmtdew=20.91, humidity=24.35, cloud=0.0, wind=24.91, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:02:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:02:55.301 [DEBUG] [Thread-1] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:02:55.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:02:55.393 [DEBUG] [Thread-4] [transport.py] [_log()] starting thread (client mode): 0x761d8cd0
2025-11-25T14:02:55.393 [DEBUG] [Thread-4] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:02:55.407 [DEBUG] [Thread-4] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:02:55.407 [INFO] [Thread-4] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] client lang: <none>
2025-11-25T14:02:55.414 [DEBUG] [Thread-4] [transport.py] [_log()] server lang: <none>
2025-11-25T14:02:55.415 [DEBUG] [Thread-4] [transport.py] [_log()] kex follows: False
2025-11-25T14:02:55.415 [DEBUG] [Thread-4] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:02:55.415 [DEBUG] [Thread-4] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:02:55.415 [DEBUG] [Thread-4] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:02:55.415 [DEBUG] [Thread-4] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:02:55.415 [DEBUG] [Thread-4] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:02:55.415 [DEBUG] [Thread-4] [transport.py] [_log()] Compression: none
2025-11-25T14:02:55.415 [DEBUG] [Thread-4] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:02:55.470 [DEBUG] [Thread-4] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:02:55.470 [DEBUG] [Thread-4] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:02:55.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:02:55.470 [DEBUG] [Thread-4] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:02:55.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:02:55.528 [DEBUG] [Thread-4] [transport.py] [_log()] userauth is OK
2025-11-25T14:02:55.528 [DEBUG] [Thread-4] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:02:55.528 [DEBUG] [Thread-4] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:02:55.528 [DEBUG] [Thread-4] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:02:55.529 [DEBUG] [Thread-4] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:02:55.546 [INFO] [Thread-4] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:02:55.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:02:55.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:02:56.280 [DEBUG] [Thread-4] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:02:56.280 [DEBUG] [Thread-4] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:02:56.329 [DEBUG] [Thread-4] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:02:56.329 [DEBUG] [Thread-4] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:02:56.337 [DEBUG] [Thread-4] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:02:56.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:02:56.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:02:56.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:02:56.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:02:56.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:02:56.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:02:56.368 [DEBUG] [Thread-4] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:03:14.733 [DEBUG] [Thread-6 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:03:26.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:03:26.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:03:26.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:03:27.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 11, 40), 20.91, 24.35, 0.0, 24.91, 18.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:03:27.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:11:40
2025-11-25T14:03:27.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:03:27.290 [DEBUG] [Thread-7] [transport.py] [_log()] starting thread (client mode): 0x761db520
2025-11-25T14:03:27.290 [DEBUG] [Thread-7] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:03:27.312 [DEBUG] [Thread-7] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:03:27.312 [INFO] [Thread-7] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] client lang: <none>
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] server lang: <none>
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] kex follows: False
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:03:27.316 [DEBUG] [Thread-7] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:03:27.317 [DEBUG] [Thread-7] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:03:27.317 [DEBUG] [Thread-7] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:03:27.317 [DEBUG] [Thread-7] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:03:27.317 [DEBUG] [Thread-7] [transport.py] [_log()] Compression: none
2025-11-25T14:03:27.317 [DEBUG] [Thread-7] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:03:27.335 [DEBUG] [Thread-7] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:03:27.336 [DEBUG] [Thread-7] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:03:27.336 [DEBUG] [Thread-7] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:03:27.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:03:27.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:03:27.339 [DEBUG] [Thread-7] [transport.py] [_log()] userauth is OK
2025-11-25T14:03:27.339 [DEBUG] [Thread-7] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:03:27.339 [DEBUG] [Thread-7] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:03:27.339 [DEBUG] [Thread-7] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:03:27.339 [DEBUG] [Thread-7] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:03:27.358 [INFO] [Thread-7] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:03:27.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:03:27.956 [DEBUG] [Thread-7] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:03:27.957 [DEBUG] [Thread-7] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:03:27.957 [DEBUG] [Thread-7] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:03:27.998 [DEBUG] [Thread-7] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:03:27.998 [DEBUG] [Thread-7] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:03:28.001 [DEBUG] [Thread-7] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:03:28.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:03:28.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:03:28.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:03:28.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:03:28.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:03:28.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:03:28.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:03:28.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:03:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:03:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.501837 -999.00  +25.40  20.02     13   -4.20 1 1 1 1 1   888    0 29.76 -17.95 ----- 16.4 20.0 63.4 24.4 33.6 -29.8 33.0 -32.7 33.9 -31.9 34.5 -30.1
2025-11-25T14:03:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:03:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:03:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.501837
2025-11-25T14:03:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:03:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:03:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:03:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:03:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:03:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:11:40', tmtdew=20.91, humidity=24.35, cloud=0.0, wind=24.91, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:02:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:03:28.030 [DEBUG] [Thread-7] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:03:28.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:03:28.133 [DEBUG] [Thread-10] [transport.py] [_log()] starting thread (client mode): 0x761dba30
2025-11-25T14:03:28.133 [DEBUG] [Thread-10] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:03:28.147 [DEBUG] [Thread-10] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:03:28.148 [INFO] [Thread-10] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:03:28.155 [DEBUG] [Thread-10] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:03:28.155 [DEBUG] [Thread-10] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:03:28.155 [DEBUG] [Thread-10] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:03:28.155 [DEBUG] [Thread-10] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:03:28.155 [DEBUG] [Thread-10] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:03:28.155 [DEBUG] [Thread-10] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:03:28.155 [DEBUG] [Thread-10] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:03:28.155 [DEBUG] [Thread-10] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] client lang: <none>
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] server lang: <none>
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] kex follows: False
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] Compression: none
2025-11-25T14:03:28.156 [DEBUG] [Thread-10] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:03:28.213 [DEBUG] [Thread-10] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:03:28.214 [DEBUG] [Thread-10] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:03:28.214 [DEBUG] [Thread-10] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:03:28.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:03:28.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:03:28.270 [DEBUG] [Thread-10] [transport.py] [_log()] userauth is OK
2025-11-25T14:03:28.270 [DEBUG] [Thread-10] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:03:28.270 [DEBUG] [Thread-10] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:03:28.270 [DEBUG] [Thread-10] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:03:28.270 [DEBUG] [Thread-10] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:03:28.289 [INFO] [Thread-10] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:03:28.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:03:28.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:03:29.004 [DEBUG] [Thread-10] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:03:29.004 [DEBUG] [Thread-10] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:03:29.052 [DEBUG] [Thread-10] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:03:29.052 [DEBUG] [Thread-10] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:03:29.061 [DEBUG] [Thread-10] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:03:29.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:03:29.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:03:29.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:03:29.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:03:29.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:03:29.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:03:29.098 [DEBUG] [Thread-10] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:03:30.032 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:03:45.107 [DEBUG] [Thread-13 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:03:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:03:59.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:03:59.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:03:59.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 11, 40), 20.91, 24.35, 0.0, 24.91, 18.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:03:59.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:11:40
2025-11-25T14:03:59.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:04:00.044 [DEBUG] [Thread-14] [transport.py] [_log()] starting thread (client mode): 0x7374f0a0
2025-11-25T14:04:00.044 [DEBUG] [Thread-14] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:04:00.065 [DEBUG] [Thread-14] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:04:00.065 [INFO] [Thread-14] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] client lang: <none>
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] server lang: <none>
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] kex follows: False
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] Compression: none
2025-11-25T14:04:00.068 [DEBUG] [Thread-14] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:04:00.085 [DEBUG] [Thread-14] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:04:00.085 [DEBUG] [Thread-14] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:04:00.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:04:00.086 [DEBUG] [Thread-14] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:04:00.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:04:00.088 [DEBUG] [Thread-14] [transport.py] [_log()] userauth is OK
2025-11-25T14:04:00.088 [DEBUG] [Thread-14] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:04:00.088 [DEBUG] [Thread-14] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:04:00.088 [DEBUG] [Thread-14] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:04:00.088 [DEBUG] [Thread-14] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:04:00.112 [INFO] [Thread-14] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:04:00.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:04:00.153 [DEBUG] [Thread-16 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:04:00.904 [DEBUG] [Thread-14] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:04:00.904 [DEBUG] [Thread-14] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:04:00.904 [DEBUG] [Thread-14] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:04:00.945 [DEBUG] [Thread-14] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:04:00.945 [DEBUG] [Thread-14] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:04:00.947 [DEBUG] [Thread-14] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:04:00.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:04:00.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:04:00.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:04:00.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:04:00.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:04:00.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:04:00.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:04:00.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:04:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:04:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.502185 -999.00  +25.30  11.23     14   -4.00 1 1 1 1 1   888    0 29.61 -17.73 ----- 8.9 11.2 52.6 17.6 33.4 -29.8 33.0 -31.2 33.8 -29.9 34.7 -29.2
2025-11-25T14:04:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:04:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:04:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.502185
2025-11-25T14:04:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:04:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:04:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:04:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:04:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:04:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:11:40', tmtdew=20.91, humidity=24.35, cloud=0.0, wind=24.91, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:03:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:04:00.966 [DEBUG] [Thread-14] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:04:01.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:04:01.075 [DEBUG] [Thread-18] [transport.py] [_log()] starting thread (client mode): 0x761dbbe0
2025-11-25T14:04:01.075 [DEBUG] [Thread-18] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:04:01.090 [DEBUG] [Thread-18] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:04:01.090 [INFO] [Thread-18] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:04:01.098 [DEBUG] [Thread-18] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:04:01.098 [DEBUG] [Thread-18] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:04:01.098 [DEBUG] [Thread-18] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:04:01.098 [DEBUG] [Thread-18] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:04:01.098 [DEBUG] [Thread-18] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:04:01.098 [DEBUG] [Thread-18] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:04:01.099 [DEBUG] [Thread-18] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:04:01.099 [DEBUG] [Thread-18] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:04:01.099 [DEBUG] [Thread-18] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:04:01.099 [DEBUG] [Thread-18] [transport.py] [_log()] client lang: <none>
2025-11-25T14:04:01.099 [DEBUG] [Thread-18] [transport.py] [_log()] server lang: <none>
2025-11-25T14:04:01.099 [DEBUG] [Thread-18] [transport.py] [_log()] kex follows: False
2025-11-25T14:04:01.099 [DEBUG] [Thread-18] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:04:01.099 [DEBUG] [Thread-18] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:04:01.100 [DEBUG] [Thread-18] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:04:01.100 [DEBUG] [Thread-18] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:04:01.100 [DEBUG] [Thread-18] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:04:01.100 [DEBUG] [Thread-18] [transport.py] [_log()] Compression: none
2025-11-25T14:04:01.100 [DEBUG] [Thread-18] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:04:01.157 [DEBUG] [Thread-18] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:04:01.158 [DEBUG] [Thread-18] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:04:01.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:04:01.159 [DEBUG] [Thread-18] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:04:01.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:04:01.217 [DEBUG] [Thread-18] [transport.py] [_log()] userauth is OK
2025-11-25T14:04:01.217 [DEBUG] [Thread-18] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:04:01.217 [DEBUG] [Thread-18] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:04:01.217 [DEBUG] [Thread-18] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:04:01.217 [DEBUG] [Thread-18] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:04:01.235 [INFO] [Thread-18] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:04:01.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:04:01.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:04:01.954 [DEBUG] [Thread-18] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:04:01.955 [DEBUG] [Thread-18] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:04:02.003 [DEBUG] [Thread-18] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:04:02.003 [DEBUG] [Thread-18] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:04:02.012 [DEBUG] [Thread-18] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:04:02.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:04:02.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:04:02.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:04:02.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:04:02.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:04:02.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:04:02.049 [DEBUG] [Thread-18] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:04:15.200 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:04:30.261 [DEBUG] [Thread-21 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:04:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:04:32.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:04:32.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:04:32.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 9, 11, 40), 20.91, 24.35, 0.0, 24.91, 18.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:04:32.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 09:11:40
2025-11-25T14:04:32.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:04:32.983 [DEBUG] [Thread-22] [transport.py] [_log()] starting thread (client mode): 0x7374ce20
2025-11-25T14:04:32.983 [DEBUG] [Thread-22] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:04:33.003 [DEBUG] [Thread-22] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:04:33.003 [INFO] [Thread-22] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:04:33.007 [DEBUG] [Thread-22] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:04:33.007 [DEBUG] [Thread-22] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:04:33.007 [DEBUG] [Thread-22] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:04:33.007 [DEBUG] [Thread-22] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:04:33.007 [DEBUG] [Thread-22] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:04:33.007 [DEBUG] [Thread-22] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:04:33.007 [DEBUG] [Thread-22] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:04:33.007 [DEBUG] [Thread-22] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:04:33.007 [DEBUG] [Thread-22] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] client lang: <none>
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] server lang: <none>
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] kex follows: False
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] Compression: none
2025-11-25T14:04:33.008 [DEBUG] [Thread-22] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:04:33.026 [DEBUG] [Thread-22] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:04:33.027 [DEBUG] [Thread-22] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:04:33.027 [DEBUG] [Thread-22] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:04:33.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:04:33.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:04:33.029 [DEBUG] [Thread-22] [transport.py] [_log()] userauth is OK
2025-11-25T14:04:33.029 [DEBUG] [Thread-22] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:04:33.030 [DEBUG] [Thread-22] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:04:33.030 [DEBUG] [Thread-22] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:04:33.030 [DEBUG] [Thread-22] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:04:33.047 [INFO] [Thread-22] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:04:33.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:04:33.676 [DEBUG] [Thread-22] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:04:33.676 [DEBUG] [Thread-22] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:04:33.676 [DEBUG] [Thread-22] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:04:33.717 [DEBUG] [Thread-22] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:04:33.717 [DEBUG] [Thread-22] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:04:33.721 [DEBUG] [Thread-22] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:04:33.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:04:33.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:04:33.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:04:33.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:04:33.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:04:33.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:04:33.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:04:33.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:04:33.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:04:33.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.502879 -999.00  +25.00   4.62     14   -4.10 1 1 1 1 1   888    0 28.82 -22.47 ----- 4.2 4.6 85.9 14.7 33.0 -30.2 33.1 -30.2 34.0 -30.2 34.8 -28.7
2025-11-25T14:04:33.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:04:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:04:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.502879
2025-11-25T14:04:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:04:33.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:04:33.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:04:33.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:04:33.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:04:33.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T09:11:40', tmtdew=20.91, humidity=24.35, cloud=0.0, wind=24.91, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:04:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:04:33.747 [DEBUG] [Thread-22] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:04:33.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:04:33.854 [DEBUG] [Thread-25] [transport.py] [_log()] starting thread (client mode): 0x7374fe20
2025-11-25T14:04:33.854 [DEBUG] [Thread-25] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:04:33.868 [DEBUG] [Thread-25] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:04:33.868 [INFO] [Thread-25] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:04:33.878 [DEBUG] [Thread-25] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:04:33.878 [DEBUG] [Thread-25] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:04:33.878 [DEBUG] [Thread-25] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:04:33.878 [DEBUG] [Thread-25] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:04:33.879 [DEBUG] [Thread-25] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:04:33.879 [DEBUG] [Thread-25] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:04:33.879 [DEBUG] [Thread-25] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:04:33.879 [DEBUG] [Thread-25] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:04:33.879 [DEBUG] [Thread-25] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:04:33.879 [DEBUG] [Thread-25] [transport.py] [_log()] client lang: <none>
2025-11-25T14:04:33.879 [DEBUG] [Thread-25] [transport.py] [_log()] server lang: <none>
2025-11-25T14:04:33.879 [DEBUG] [Thread-25] [transport.py] [_log()] kex follows: False
2025-11-25T14:04:33.879 [DEBUG] [Thread-25] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:04:33.880 [DEBUG] [Thread-25] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:04:33.880 [DEBUG] [Thread-25] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:04:33.880 [DEBUG] [Thread-25] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:04:33.880 [DEBUG] [Thread-25] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:04:33.881 [DEBUG] [Thread-25] [transport.py] [_log()] Compression: none
2025-11-25T14:04:33.881 [DEBUG] [Thread-25] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:04:33.936 [DEBUG] [Thread-25] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:04:33.937 [DEBUG] [Thread-25] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:04:33.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:04:33.946 [DEBUG] [Thread-25] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:04:33.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:04:33.993 [DEBUG] [Thread-25] [transport.py] [_log()] userauth is OK
2025-11-25T14:04:33.994 [DEBUG] [Thread-25] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:04:33.994 [DEBUG] [Thread-25] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:04:33.994 [DEBUG] [Thread-25] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:04:33.994 [DEBUG] [Thread-25] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:04:34.013 [INFO] [Thread-25] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:04:34.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:04:34.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:04:34.685 [DEBUG] [Thread-25] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:04:34.685 [DEBUG] [Thread-25] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:04:34.734 [DEBUG] [Thread-25] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:04:34.734 [DEBUG] [Thread-25] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:04:34.743 [DEBUG] [Thread-25] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:04:34.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:04:34.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:04:34.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:04:34.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:04:34.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:04:34.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:04:34.781 [DEBUG] [Thread-25] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:04:42.294 [DEBUG] [Thread-27 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:04:45.299 [DEBUG] [Thread-28 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:05:00.348 [DEBUG] [Thread-29 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:05:04.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:05:04.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:05:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:05:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 4, 41), 35.4, 8.84, 0.0, 12.6, 25.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:05:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:04:41
2025-11-25T14:05:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:05:05.683 [DEBUG] [Thread-30] [transport.py] [_log()] starting thread (client mode): 0x7374f130
2025-11-25T14:05:05.683 [DEBUG] [Thread-30] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:05:05.704 [DEBUG] [Thread-30] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:05:05.704 [INFO] [Thread-30] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] client lang: <none>
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] server lang: <none>
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] kex follows: False
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:05:05.706 [DEBUG] [Thread-30] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:05:05.707 [DEBUG] [Thread-30] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:05:05.707 [DEBUG] [Thread-30] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:05:05.707 [DEBUG] [Thread-30] [transport.py] [_log()] Compression: none
2025-11-25T14:05:05.707 [DEBUG] [Thread-30] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:05:05.716 [DEBUG] [Thread-30] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:05:05.716 [DEBUG] [Thread-30] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:05:05.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:05:05.717 [DEBUG] [Thread-30] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:05:05.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:05:05.719 [DEBUG] [Thread-30] [transport.py] [_log()] userauth is OK
2025-11-25T14:05:05.720 [DEBUG] [Thread-30] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:05:05.720 [DEBUG] [Thread-30] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:05:05.720 [DEBUG] [Thread-30] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:05:05.720 [DEBUG] [Thread-30] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:05:05.738 [INFO] [Thread-30] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:05:05.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:05:09.927 [DEBUG] [Thread-30] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:05:09.928 [DEBUG] [Thread-30] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:05:09.929 [DEBUG] [Thread-30] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:05:09.968 [DEBUG] [Thread-30] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:05:09.969 [DEBUG] [Thread-30] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:05:09.972 [DEBUG] [Thread-30] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:05:09.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:05:09.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:05:09.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:05:09.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:05:09.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:05:09.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:05:09.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:05:09.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:05:09.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:05:09.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.503226 -999.00  +25.10   8.49     14   -4.10 1 1 1 1 1   888    0 29.70 -26.13 ----- 8.5 8.5 108.0 15.0 33.3 -29.2 33.2 -30.0 34.1 -29.1 34.8 -30.0
2025-11-25T14:05:09.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:05:09.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:05:09.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.503226
2025-11-25T14:05:09.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:05:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:05:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:05:09.998 [DEBUG] [Thread-30] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:05:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:05:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:05:09.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:04:41', tmtdew=35.4, humidity=8.84, cloud=0.0, wind=12.6, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:04:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:05:10.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:05:10.103 [DEBUG] [Thread-33] [transport.py] [_log()] starting thread (client mode): 0x7374cbb0
2025-11-25T14:05:10.103 [DEBUG] [Thread-33] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:05:10.117 [DEBUG] [Thread-33] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:05:10.117 [INFO] [Thread-33] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:05:10.125 [DEBUG] [Thread-33] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:05:10.125 [DEBUG] [Thread-33] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:05:10.125 [DEBUG] [Thread-33] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:05:10.125 [DEBUG] [Thread-33] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:05:10.125 [DEBUG] [Thread-33] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:05:10.125 [DEBUG] [Thread-33] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] client lang: <none>
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] server lang: <none>
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] kex follows: False
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] Compression: none
2025-11-25T14:05:10.126 [DEBUG] [Thread-33] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:05:10.186 [DEBUG] [Thread-33] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:05:10.187 [DEBUG] [Thread-33] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:05:10.187 [DEBUG] [Thread-33] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:05:10.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:05:10.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:05:10.245 [DEBUG] [Thread-33] [transport.py] [_log()] userauth is OK
2025-11-25T14:05:10.245 [DEBUG] [Thread-33] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:05:10.245 [DEBUG] [Thread-33] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:05:10.245 [DEBUG] [Thread-33] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:05:10.245 [DEBUG] [Thread-33] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:05:10.264 [INFO] [Thread-33] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:05:10.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:05:10.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:05:10.948 [DEBUG] [Thread-33] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:05:10.949 [DEBUG] [Thread-33] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:05:10.996 [DEBUG] [Thread-33] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:05:10.997 [DEBUG] [Thread-33] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:05:11.005 [DEBUG] [Thread-33] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:05:11.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:05:11.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:05:11.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:05:11.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:05:11.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:05:11.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:05:11.041 [DEBUG] [Thread-33] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:05:15.393 [DEBUG] [Thread-35 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:05:30.446 [DEBUG] [Thread-36 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:05:41.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:05:41.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:05: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
2025-11-25T14:05:41.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 5, 14), 35.57, 8.74, 0.0, 9.55, 25.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:05:41.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:05:14
2025-11-25T14:05:41.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:05:41.986 [DEBUG] [Thread-37] [transport.py] [_log()] starting thread (client mode): 0x7374dc30
2025-11-25T14:05:41.986 [DEBUG] [Thread-37] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:05:41.999 [DEBUG] [Thread-37] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:05:41.999 [INFO] [Thread-37] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:05:42.001 [DEBUG] [Thread-37] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:05:42.001 [DEBUG] [Thread-37] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:05:42.001 [DEBUG] [Thread-37] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:05:42.001 [DEBUG] [Thread-37] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:05:42.001 [DEBUG] [Thread-37] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:05:42.001 [DEBUG] [Thread-37] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:05:42.001 [DEBUG] [Thread-37] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] client lang: <none>
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] server lang: <none>
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] kex follows: False
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] Compression: none
2025-11-25T14:05:42.002 [DEBUG] [Thread-37] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:05:42.012 [DEBUG] [Thread-37] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:05:42.013 [DEBUG] [Thread-37] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:05:42.013 [DEBUG] [Thread-37] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:05:42.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:05:42.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:05:42.015 [DEBUG] [Thread-37] [transport.py] [_log()] userauth is OK
2025-11-25T14:05:42.015 [DEBUG] [Thread-37] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:05:42.015 [DEBUG] [Thread-37] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:05:42.015 [DEBUG] [Thread-37] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:05:42.015 [DEBUG] [Thread-37] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:05:42.030 [INFO] [Thread-37] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:05:42.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:05:42.677 [DEBUG] [Thread-37] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:05:42.677 [DEBUG] [Thread-37] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:05:42.678 [DEBUG] [Thread-37] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:05:42.718 [DEBUG] [Thread-37] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:05:42.718 [DEBUG] [Thread-37] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:05:42.720 [DEBUG] [Thread-37] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:05:42.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:05:42.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:05:42.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:05:42.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:05:42.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:05:42.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:05:42.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.503573 -999.00  +25.00   6.60     14   -4.20 1 1 1 1 1   888    0 28.78 -28.71 ----- 3.1 6.6 98.0 14.0 33.3 -29.5 33.2 -30.1 -999.0 -999.0 34.9 -29.2
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.503573
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:05:14', tmtdew=35.57, humidity=8.74, cloud=0.0, wind=9.55, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:05:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:05:42.741 [DEBUG] [Thread-37] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:05:42.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:05:42.843 [DEBUG] [Thread-40] [transport.py] [_log()] starting thread (client mode): 0x7374ee00
2025-11-25T14:05:42.843 [DEBUG] [Thread-40] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:05:42.858 [DEBUG] [Thread-40] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:05:42.858 [INFO] [Thread-40] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] client lang: <none>
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] server lang: <none>
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] kex follows: False
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] Compression: none
2025-11-25T14:05:42.865 [DEBUG] [Thread-40] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:05:42.923 [DEBUG] [Thread-40] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:05:42.923 [DEBUG] [Thread-40] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:05:42.923 [DEBUG] [Thread-40] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:05:42.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:05:42.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:05:42.980 [DEBUG] [Thread-40] [transport.py] [_log()] userauth is OK
2025-11-25T14:05:42.980 [DEBUG] [Thread-40] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:05:42.980 [DEBUG] [Thread-40] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:05:42.980 [DEBUG] [Thread-40] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:05:42.980 [DEBUG] [Thread-40] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:05:42.994 [INFO] [Thread-40] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:05:42.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:05:42.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:05:43.050 [DEBUG] [Thread-42 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:05:43.678 [DEBUG] [Thread-40] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:05:43.679 [DEBUG] [Thread-40] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:05:43.727 [DEBUG] [Thread-40] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:05:43.727 [DEBUG] [Thread-40] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:05:43.736 [DEBUG] [Thread-40] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:05:43.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:05:43.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:05:43.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:05:43.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:05:43.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:05:43.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:05:43.771 [DEBUG] [Thread-40] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:05:45.494 [DEBUG] [Thread-43 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:06:00.566 [DEBUG] [Thread-44 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:06:13.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:06:13.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:06:13.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:06:14.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 5, 46), 35.42, 8.75, 0.0, 9.63, 25.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:06:14.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:05:46
2025-11-25T14:06:14.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:06:14.673 [DEBUG] [Thread-45] [transport.py] [_log()] starting thread (client mode): 0x7374f580
2025-11-25T14:06:14.673 [DEBUG] [Thread-45] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:06:14.693 [DEBUG] [Thread-45] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:06:14.693 [INFO] [Thread-45] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:06:14.697 [DEBUG] [Thread-45] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:06:14.697 [DEBUG] [Thread-45] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:06:14.697 [DEBUG] [Thread-45] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:06:14.697 [DEBUG] [Thread-45] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] client lang: <none>
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] server lang: <none>
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] kex follows: False
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:06:14.698 [DEBUG] [Thread-45] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:06:14.699 [DEBUG] [Thread-45] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:06:14.699 [DEBUG] [Thread-45] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:06:14.699 [DEBUG] [Thread-45] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:06:14.699 [DEBUG] [Thread-45] [transport.py] [_log()] Compression: none
2025-11-25T14:06:14.699 [DEBUG] [Thread-45] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:06:14.716 [DEBUG] [Thread-45] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:06:14.717 [DEBUG] [Thread-45] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:06:14.717 [DEBUG] [Thread-45] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:06:14.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:06:14.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:06:14.719 [DEBUG] [Thread-45] [transport.py] [_log()] userauth is OK
2025-11-25T14:06:14.719 [DEBUG] [Thread-45] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:06:14.719 [DEBUG] [Thread-45] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:06:14.719 [DEBUG] [Thread-45] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:06:14.720 [DEBUG] [Thread-45] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:06:14.744 [INFO] [Thread-45] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:06:14.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:06:15.498 [DEBUG] [Thread-45] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:06:15.499 [DEBUG] [Thread-45] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:06:15.499 [DEBUG] [Thread-45] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:06:15.540 [DEBUG] [Thread-45] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:06:15.540 [DEBUG] [Thread-45] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:06:15.543 [DEBUG] [Thread-45] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:06:15.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:06:15.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:06:15.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:06:15.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:06:15.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:06:15.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:06:15.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:06:15.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:06:15.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:06:15.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.503921 -999.00  +25.30   4.03     13   -4.20 1 1 1 1 1   888    0 29.09 -31.84 ----- 1.2 4.0 70.5 6.4 33.3 -31.1 33.5 -29.4 34.4 -27.9 35.2 -28.9
2025-11-25T14:06:15.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:06:15.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:06:15.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.503921
2025-11-25T14:06:15.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:05:46', tmtdew=35.42, humidity=8.75, cloud=0.0, wind=9.63, temperature=25.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:05:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:06:15.564 [DEBUG] [Thread-45] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:06:15.605 [DEBUG] [Thread-48 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:06:15.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:06:15.667 [DEBUG] [Thread-49] [transport.py] [_log()] starting thread (client mode): 0x7374fd60
2025-11-25T14:06:15.667 [DEBUG] [Thread-49] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:06:15.680 [DEBUG] [Thread-49] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:06:15.681 [INFO] [Thread-49] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] client lang: <none>
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] server lang: <none>
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] kex follows: False
2025-11-25T14:06:15.689 [DEBUG] [Thread-49] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:06:15.690 [DEBUG] [Thread-49] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:06:15.690 [DEBUG] [Thread-49] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:06:15.690 [DEBUG] [Thread-49] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:06:15.690 [DEBUG] [Thread-49] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:06:15.690 [DEBUG] [Thread-49] [transport.py] [_log()] Compression: none
2025-11-25T14:06:15.690 [DEBUG] [Thread-49] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:06:15.749 [DEBUG] [Thread-49] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:06:15.750 [DEBUG] [Thread-49] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:06:15.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:06:15.751 [DEBUG] [Thread-49] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:06:15.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:06:15.805 [DEBUG] [Thread-49] [transport.py] [_log()] userauth is OK
2025-11-25T14:06:15.805 [DEBUG] [Thread-49] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:06:15.805 [DEBUG] [Thread-49] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:06:15.806 [DEBUG] [Thread-49] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:06:15.806 [DEBUG] [Thread-49] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:06:15.822 [INFO] [Thread-49] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:06:15.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:06:15.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:06:16.506 [DEBUG] [Thread-49] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:06:16.506 [DEBUG] [Thread-49] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:06:16.554 [DEBUG] [Thread-49] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:06:16.554 [DEBUG] [Thread-49] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:06:16.563 [DEBUG] [Thread-49] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:06:16.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:06:16.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:06:16.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:06:16.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:06:16.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:06:16.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:06:16.600 [DEBUG] [Thread-49] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:06:30.679 [DEBUG] [Thread-51 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:06:43.763 [DEBUG] [Thread-52 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:06:45.720 [DEBUG] [Thread-53 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:06:46.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:06:46.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:06:46.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:06:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 6, 18), 35.49, 8.72, 0.0, 9.97, 25.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:06:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:06:18
2025-11-25T14:06:47.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:06:47.546 [DEBUG] [Thread-54] [transport.py] [_log()] starting thread (client mode): 0x7374e3b0
2025-11-25T14:06:47.547 [DEBUG] [Thread-54] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:06:47.569 [DEBUG] [Thread-54] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:06:47.569 [INFO] [Thread-54] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:06:47.572 [DEBUG] [Thread-54] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:06:47.572 [DEBUG] [Thread-54] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] client lang: <none>
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] server lang: <none>
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] kex follows: False
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:06:47.573 [DEBUG] [Thread-54] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:06:47.574 [DEBUG] [Thread-54] [transport.py] [_log()] Compression: none
2025-11-25T14:06:47.574 [DEBUG] [Thread-54] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:06:47.595 [DEBUG] [Thread-54] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:06:47.596 [DEBUG] [Thread-54] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:06:47.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:06:47.597 [DEBUG] [Thread-54] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:06:47.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:06:47.599 [DEBUG] [Thread-54] [transport.py] [_log()] userauth is OK
2025-11-25T14:06:47.600 [DEBUG] [Thread-54] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:06:47.600 [DEBUG] [Thread-54] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:06:47.600 [DEBUG] [Thread-54] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:06:47.600 [DEBUG] [Thread-54] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:06:47.627 [INFO] [Thread-54] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:06:47.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:06:48.244 [DEBUG] [Thread-54] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:06:48.244 [DEBUG] [Thread-54] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:06:48.245 [DEBUG] [Thread-54] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:06:48.285 [DEBUG] [Thread-54] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:06:48.285 [DEBUG] [Thread-54] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:06:48.288 [DEBUG] [Thread-54] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:06:48.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:06:48.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:06:48.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:06:48.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:06:48.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:06:48.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:06:48.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:06:48.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:06:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:06:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.504268 -999.00  +25.40   7.62     13   -4.20 1 1 1 1 1   888    0 29.15 -32.92 ----- 3.7 7.6 57.4 9.9 33.6 -30.1 33.5 -31.1 34.5 -28.7 35.2 -29.1
2025-11-25T14:06:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:06:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:06:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.504268
2025-11-25T14:06:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:06:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:06:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:06:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:06:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:06:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:06:18', tmtdew=35.49, humidity=8.72, cloud=0.0, wind=9.97, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:06:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:06:48.316 [DEBUG] [Thread-54] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:06:48.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:06:48.419 [DEBUG] [Thread-57] [transport.py] [_log()] starting thread (client mode): 0x761dbc70
2025-11-25T14:06:48.419 [DEBUG] [Thread-57] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:06:48.436 [DEBUG] [Thread-57] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:06:48.436 [INFO] [Thread-57] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:06:48.443 [DEBUG] [Thread-57] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] client lang: <none>
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] server lang: <none>
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] kex follows: False
2025-11-25T14:06:48.444 [DEBUG] [Thread-57] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:06:48.445 [DEBUG] [Thread-57] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:06:48.445 [DEBUG] [Thread-57] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:06:48.445 [DEBUG] [Thread-57] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:06:48.445 [DEBUG] [Thread-57] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:06:48.445 [DEBUG] [Thread-57] [transport.py] [_log()] Compression: none
2025-11-25T14:06:48.445 [DEBUG] [Thread-57] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:06:48.502 [DEBUG] [Thread-57] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:06:48.503 [DEBUG] [Thread-57] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:06:48.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:06:48.504 [DEBUG] [Thread-57] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:06:48.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:06:48.558 [DEBUG] [Thread-57] [transport.py] [_log()] userauth is OK
2025-11-25T14:06:48.559 [DEBUG] [Thread-57] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:06:48.559 [DEBUG] [Thread-57] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:06:48.559 [DEBUG] [Thread-57] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:06:48.559 [DEBUG] [Thread-57] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:06:48.579 [INFO] [Thread-57] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:06:48.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:06:48.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:06:49.300 [DEBUG] [Thread-57] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:06:49.300 [DEBUG] [Thread-57] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:06:49.348 [DEBUG] [Thread-57] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:06:49.348 [DEBUG] [Thread-57] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:06:49.358 [DEBUG] [Thread-57] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:06:49.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:06:49.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:06:49.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:06:49.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:06:49.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:06:49.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:06:49.394 [DEBUG] [Thread-57] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:07:00.762 [DEBUG] [Thread-59 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:07:15.828 [DEBUG] [Thread-60 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:07:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:07:19.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:07:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:07:20.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 6, 50), 35.7, 8.69, 0.0, 9.49, 25.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:07:20.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:06:50
2025-11-25T14:07:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:07:20.339 [DEBUG] [Thread-61] [transport.py] [_log()] starting thread (client mode): 0x7376e2c0
2025-11-25T14:07:20.339 [DEBUG] [Thread-61] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:07:20.359 [DEBUG] [Thread-61] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:07:20.359 [INFO] [Thread-61] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:07:20.362 [DEBUG] [Thread-61] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:07:20.362 [DEBUG] [Thread-61] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:07:20.362 [DEBUG] [Thread-61] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] client lang: <none>
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] server lang: <none>
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] kex follows: False
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] Compression: none
2025-11-25T14:07:20.363 [DEBUG] [Thread-61] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:07:20.378 [DEBUG] [Thread-61] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:07:20.379 [DEBUG] [Thread-61] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:07:20.379 [DEBUG] [Thread-61] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:07:20.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:07:20.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:07:20.381 [DEBUG] [Thread-61] [transport.py] [_log()] userauth is OK
2025-11-25T14:07:20.381 [DEBUG] [Thread-61] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:07:20.381 [DEBUG] [Thread-61] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:07:20.381 [DEBUG] [Thread-61] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:07:20.382 [DEBUG] [Thread-61] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:07:20.404 [INFO] [Thread-61] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:07:20.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:07:21.188 [DEBUG] [Thread-61] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:07:21.188 [DEBUG] [Thread-61] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:07:21.189 [DEBUG] [Thread-61] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:07:21.229 [DEBUG] [Thread-61] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:07:21.229 [DEBUG] [Thread-61] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:07:21.232 [DEBUG] [Thread-61] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:07:21.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:07:21.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:07:21.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:07:21.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:07:21.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:07:21.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:07:21.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:07:21.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:07:21.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:07:21.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.504615 -999.00  +25.60   5.88     13   -3.90 1 1 1 1 1   888    0 28.79 -34.90 ----- 15.0 5.9 49.4 9.6 33.7 -29.6 33.6 -30.1 34.6 -28.5 35.3 -30.7
2025-11-25T14:07:21.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:07:21.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:07:21.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.504615
2025-11-25T14:07:21.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:07:21.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:07:21.251 [DEBUG] [Thread-61] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:07:21.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:07:21.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:07:21.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:07:21.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:06:50', tmtdew=35.7, humidity=8.69, cloud=0.0, wind=9.49, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:06:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:07:21.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:07:21.357 [DEBUG] [Thread-64] [transport.py] [_log()] starting thread (client mode): 0x7376ce20
2025-11-25T14:07:21.357 [DEBUG] [Thread-64] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:07:21.371 [DEBUG] [Thread-64] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:07:21.372 [INFO] [Thread-64] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:07:21.380 [DEBUG] [Thread-64] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:07:21.380 [DEBUG] [Thread-64] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:07:21.380 [DEBUG] [Thread-64] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:07:21.380 [DEBUG] [Thread-64] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:07:21.381 [DEBUG] [Thread-64] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:07:21.381 [DEBUG] [Thread-64] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:07:21.381 [DEBUG] [Thread-64] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:07:21.381 [DEBUG] [Thread-64] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:07:21.381 [DEBUG] [Thread-64] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:07:21.381 [DEBUG] [Thread-64] [transport.py] [_log()] client lang: <none>
2025-11-25T14:07:21.381 [DEBUG] [Thread-64] [transport.py] [_log()] server lang: <none>
2025-11-25T14:07:21.381 [DEBUG] [Thread-64] [transport.py] [_log()] kex follows: False
2025-11-25T14:07:21.381 [DEBUG] [Thread-64] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:07:21.382 [DEBUG] [Thread-64] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:07:21.382 [DEBUG] [Thread-64] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:07:21.382 [DEBUG] [Thread-64] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:07:21.382 [DEBUG] [Thread-64] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:07:21.382 [DEBUG] [Thread-64] [transport.py] [_log()] Compression: none
2025-11-25T14:07:21.382 [DEBUG] [Thread-64] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:07:21.442 [DEBUG] [Thread-64] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:07:21.443 [DEBUG] [Thread-64] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:07:21.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:07:21.444 [DEBUG] [Thread-64] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:07:21.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:07:21.502 [DEBUG] [Thread-64] [transport.py] [_log()] userauth is OK
2025-11-25T14:07:21.502 [DEBUG] [Thread-64] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:07:21.502 [DEBUG] [Thread-64] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:07:21.502 [DEBUG] [Thread-64] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:07:21.503 [DEBUG] [Thread-64] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:07:21.520 [INFO] [Thread-64] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:07:21.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:07:21.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:07:22.223 [DEBUG] [Thread-64] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:07:22.224 [DEBUG] [Thread-64] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:07:22.272 [DEBUG] [Thread-64] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:07:22.272 [DEBUG] [Thread-64] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:07:22.281 [DEBUG] [Thread-64] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:07:22.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:07:22.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:07:22.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:07:22.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:07:22.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:07:22.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:07:22.318 [DEBUG] [Thread-64] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:07:30.871 [DEBUG] [Thread-66 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:07:44.273 [DEBUG] [Thread-67 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:07:45.950 [DEBUG] [Thread-68 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:07:52.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:07:52.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:07:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:07:53.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 7, 22), 35.89, 8.55, 0.0, 4.31, 25.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:07:53.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:07:22
2025-11-25T14:07:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:07:53.307 [DEBUG] [Thread-69] [transport.py] [_log()] starting thread (client mode): 0x7374ef20
2025-11-25T14:07:53.307 [DEBUG] [Thread-69] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:07:53.326 [DEBUG] [Thread-69] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:07:53.326 [INFO] [Thread-69] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:07:53.329 [DEBUG] [Thread-69] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] client lang: <none>
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] server lang: <none>
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] kex follows: False
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] Compression: none
2025-11-25T14:07:53.330 [DEBUG] [Thread-69] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:07:53.346 [DEBUG] [Thread-69] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:07:53.346 [DEBUG] [Thread-69] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:07:53.346 [DEBUG] [Thread-69] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:07:53.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:07:53.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:07:53.347 [DEBUG] [Thread-69] [transport.py] [_log()] userauth is OK
2025-11-25T14:07:53.347 [DEBUG] [Thread-69] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:07:53.347 [DEBUG] [Thread-69] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:07:53.347 [DEBUG] [Thread-69] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:07:53.347 [DEBUG] [Thread-69] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:07:53.356 [INFO] [Thread-69] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:07:53.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:07:54.005 [DEBUG] [Thread-69] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:07:54.005 [DEBUG] [Thread-69] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:07:54.005 [DEBUG] [Thread-69] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:07:54.046 [DEBUG] [Thread-69] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:07:54.046 [DEBUG] [Thread-69] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:07:54.048 [DEBUG] [Thread-69] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:07:54.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:07:54.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:07:54.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:07:54.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:07:54.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:07:54.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:07:54.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:07:54.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:07:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:07:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.504962 -999.00  +25.60  12.05     13   -3.90 1 1 1 1 1   888    0 28.69 -36.49 ----- 8.9 12.1 126.0 16.9 33.7 -31.9 33.5 -30.7 34.5 -29.8 35.2 -29.7
2025-11-25T14:07:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:07:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:07:54.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.504962
2025-11-25T14:07:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:07:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:07:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:07:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:07:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:07:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:07:22', tmtdew=35.89, humidity=8.55, cloud=0.0, wind=4.31, temperature=25.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:07:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:07:54.068 [DEBUG] [Thread-69] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:07:54.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:07:54.160 [DEBUG] [Thread-72] [transport.py] [_log()] starting thread (client mode): 0x7374e3b0
2025-11-25T14:07:54.160 [DEBUG] [Thread-72] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:07:54.173 [DEBUG] [Thread-72] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:07:54.173 [INFO] [Thread-72] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] client lang: <none>
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] server lang: <none>
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] kex follows: False
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] Compression: none
2025-11-25T14:07:54.181 [DEBUG] [Thread-72] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:07:54.239 [DEBUG] [Thread-72] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:07:54.239 [DEBUG] [Thread-72] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:07:54.240 [DEBUG] [Thread-72] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:07:54.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:07:54.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:07:54.296 [DEBUG] [Thread-72] [transport.py] [_log()] userauth is OK
2025-11-25T14:07:54.296 [DEBUG] [Thread-72] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:07:54.296 [DEBUG] [Thread-72] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:07:54.296 [DEBUG] [Thread-72] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:07:54.297 [DEBUG] [Thread-72] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:07:54.314 [INFO] [Thread-72] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:07:54.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:07:54.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:07:55.002 [DEBUG] [Thread-72] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:07:55.002 [DEBUG] [Thread-72] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:07:55.050 [DEBUG] [Thread-72] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:07:55.050 [DEBUG] [Thread-72] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:07:55.058 [DEBUG] [Thread-72] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:07:55.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:07:55.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:07:55.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:07:55.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:07:55.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:07:55.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:07:55.090 [DEBUG] [Thread-72] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:08:00.990 [DEBUG] [Thread-74 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:08:16.065 [DEBUG] [Thread-75 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:08:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:08:25.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:08:25.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:08:25.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 7, 54), 35.81, 8.6, 0.0, 5.26, 25.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:08:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:07:54
2025-11-25T14:08:25.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:08:26.024 [DEBUG] [Thread-76] [transport.py] [_log()] starting thread (client mode): 0x7376d1e0
2025-11-25T14:08:26.025 [DEBUG] [Thread-76] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:08:26.045 [DEBUG] [Thread-76] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:08:26.046 [INFO] [Thread-76] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:08:26.049 [DEBUG] [Thread-76] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:08:26.049 [DEBUG] [Thread-76] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:08:26.049 [DEBUG] [Thread-76] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:08:26.049 [DEBUG] [Thread-76] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:08:26.049 [DEBUG] [Thread-76] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:08:26.049 [DEBUG] [Thread-76] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:08:26.049 [DEBUG] [Thread-76] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] client lang: <none>
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] server lang: <none>
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] kex follows: False
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] Compression: none
2025-11-25T14:08:26.050 [DEBUG] [Thread-76] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:08:26.069 [DEBUG] [Thread-76] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:08:26.069 [DEBUG] [Thread-76] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:08:26.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:08:26.070 [DEBUG] [Thread-76] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:08:26.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:08:26.072 [DEBUG] [Thread-76] [transport.py] [_log()] userauth is OK
2025-11-25T14:08:26.072 [DEBUG] [Thread-76] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:08:26.072 [DEBUG] [Thread-76] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:08:26.072 [DEBUG] [Thread-76] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:08:26.072 [DEBUG] [Thread-76] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:08:26.091 [INFO] [Thread-76] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:08:26.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:08:26.917 [DEBUG] [Thread-76] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:08:26.918 [DEBUG] [Thread-76] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:08:26.918 [DEBUG] [Thread-76] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:08:26.958 [DEBUG] [Thread-76] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:08:26.958 [DEBUG] [Thread-76] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:08:26.960 [DEBUG] [Thread-76] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:08:26.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:08:26.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:08:26.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:08:26.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:08:26.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:08:26.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:08:26.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:08:26.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:08:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:08:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.505310 -999.00  +25.60  11.26     14   -3.80 1 1 1 1 1   888    0 28.91 -40.97 ----- 12.8 11.3 85.8 18.8 33.6 -33.6 33.5 -29.9 34.5 -29.1 35.2 -30.5
2025-11-25T14:08:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:08:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:08:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.505310
2025-11-25T14:08:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:08:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:08:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:08:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:08:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:08:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:07:54', tmtdew=35.81, humidity=8.6, cloud=0.0, wind=5.26, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:07:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:08:26.978 [DEBUG] [Thread-76] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:08:27.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:08:27.072 [DEBUG] [Thread-79] [transport.py] [_log()] starting thread (client mode): 0x7376d060
2025-11-25T14:08:27.072 [DEBUG] [Thread-79] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:08:27.087 [DEBUG] [Thread-79] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:08:27.087 [INFO] [Thread-79] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] client lang: <none>
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] server lang: <none>
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] kex follows: False
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] Compression: none
2025-11-25T14:08:27.095 [DEBUG] [Thread-79] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:08:27.151 [DEBUG] [Thread-79] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:08:27.152 [DEBUG] [Thread-79] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:08:27.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:08:27.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:08:27.152 [DEBUG] [Thread-79] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:08:27.209 [DEBUG] [Thread-79] [transport.py] [_log()] userauth is OK
2025-11-25T14:08:27.209 [DEBUG] [Thread-79] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:08:27.209 [DEBUG] [Thread-79] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:08:27.209 [DEBUG] [Thread-79] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:08:27.209 [DEBUG] [Thread-79] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:08:27.224 [INFO] [Thread-79] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:08:27.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:08:27.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:08:27.925 [DEBUG] [Thread-79] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:08:27.925 [DEBUG] [Thread-79] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:08:27.973 [DEBUG] [Thread-79] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:08:27.973 [DEBUG] [Thread-79] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:08:27.981 [DEBUG] [Thread-79] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:08:27.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:08:27.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:08:27.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:08:28.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:08:28.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:08:28.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:08:28.015 [DEBUG] [Thread-79] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:08:31.106 [DEBUG] [Thread-81 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:08:45.038 [DEBUG] [Thread-82 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:08:46.171 [DEBUG] [Thread-83 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:08:58.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:08:58.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:08:58.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:08:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 8, 26), 35.72, 8.62, 0.0, 6.09, 25.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:08:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:08:26
2025-11-25T14:08:58.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:08:58.965 [DEBUG] [Thread-84] [transport.py] [_log()] starting thread (client mode): 0x7374fac0
2025-11-25T14:08:58.965 [DEBUG] [Thread-84] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:08:58.984 [DEBUG] [Thread-84] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:08:58.985 [INFO] [Thread-84] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] client lang: <none>
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] server lang: <none>
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] kex follows: False
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:08:58.986 [DEBUG] [Thread-84] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:08:58.987 [DEBUG] [Thread-84] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:08:58.987 [DEBUG] [Thread-84] [transport.py] [_log()] Compression: none
2025-11-25T14:08:58.987 [DEBUG] [Thread-84] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:08:58.997 [DEBUG] [Thread-84] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:08:58.998 [DEBUG] [Thread-84] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:08:58.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:08:58.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:08:58.998 [DEBUG] [Thread-84] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:08:58.998 [DEBUG] [Thread-84] [transport.py] [_log()] userauth is OK
2025-11-25T14:08:58.999 [DEBUG] [Thread-84] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:08:58.999 [DEBUG] [Thread-84] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:08:58.999 [DEBUG] [Thread-84] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:08:58.999 [DEBUG] [Thread-84] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:08:59.020 [INFO] [Thread-84] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:08:59.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:08:59.682 [DEBUG] [Thread-84] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:08:59.682 [DEBUG] [Thread-84] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:08:59.682 [DEBUG] [Thread-84] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:08:59.722 [DEBUG] [Thread-84] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:08:59.722 [DEBUG] [Thread-84] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:08:59.724 [DEBUG] [Thread-84] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:08:59.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:08:59.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:08:59.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:08:59.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:08:59.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:08:59.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:08:59.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:08:59.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:08:59.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.505657 -999.00  +25.60  11.30     13   -4.00 1 1 1 1 1   888    0 28.70 -39.48 ----- 11.7 11.3 101.0 19.5 33.6 -29.9 33.4 -30.7 34.7 -30.7 35.2 -31.4
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.505657
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:08:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:08:26', tmtdew=35.72, humidity=8.62, cloud=0.0, wind=6.09, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:08:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:08:59.741 [DEBUG] [Thread-84] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:08:59.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:08:59.834 [DEBUG] [Thread-87] [transport.py] [_log()] starting thread (client mode): 0x7376fca0
2025-11-25T14:08:59.834 [DEBUG] [Thread-87] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:08:59.848 [DEBUG] [Thread-87] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:08:59.848 [INFO] [Thread-87] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:08:59.855 [DEBUG] [Thread-87] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:08:59.855 [DEBUG] [Thread-87] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:08:59.855 [DEBUG] [Thread-87] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:08:59.855 [DEBUG] [Thread-87] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:08:59.855 [DEBUG] [Thread-87] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:08:59.855 [DEBUG] [Thread-87] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:08:59.855 [DEBUG] [Thread-87] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:08:59.855 [DEBUG] [Thread-87] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:08:59.855 [DEBUG] [Thread-87] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] client lang: <none>
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] server lang: <none>
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] kex follows: False
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] Compression: none
2025-11-25T14:08:59.856 [DEBUG] [Thread-87] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:08:59.911 [DEBUG] [Thread-87] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:08:59.912 [DEBUG] [Thread-87] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:08:59.912 [DEBUG] [Thread-87] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:08:59.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:08:59.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:08:59.968 [DEBUG] [Thread-87] [transport.py] [_log()] userauth is OK
2025-11-25T14:08:59.968 [DEBUG] [Thread-87] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:08:59.968 [DEBUG] [Thread-87] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:08:59.968 [DEBUG] [Thread-87] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:08:59.968 [DEBUG] [Thread-87] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:08:59.982 [INFO] [Thread-87] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:08:59.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:08:59.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:09:00.731 [DEBUG] [Thread-87] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:09:00.731 [DEBUG] [Thread-87] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:09:00.779 [DEBUG] [Thread-87] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:09:00.779 [DEBUG] [Thread-87] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:09:00.789 [DEBUG] [Thread-87] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:09:00.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:09: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')
2025-11-25T14:09: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
2025-11-25T14:09:00.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:09:00.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:09:00.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:09:00.827 [DEBUG] [Thread-87] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:09:01.215 [DEBUG] [Thread-89 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:09:16.275 [DEBUG] [Thread-90 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:09:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:09:30.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:09:30.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:09:31.319 [DEBUG] [Thread-91 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:09:31.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 8, 58), 35.61, 8.67, 0.0, 7.52, 25.41, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:09:31.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:08:58
2025-11-25T14:09:31.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:09:31.845 [DEBUG] [Thread-92] [transport.py] [_log()] starting thread (client mode): 0x7374f640
2025-11-25T14:09:31.845 [DEBUG] [Thread-92] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:09:31.866 [DEBUG] [Thread-92] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:09:31.866 [INFO] [Thread-92] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:09:31.868 [DEBUG] [Thread-92] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:09:31.868 [DEBUG] [Thread-92] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:09:31.868 [DEBUG] [Thread-92] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:09:31.868 [DEBUG] [Thread-92] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:09:31.868 [DEBUG] [Thread-92] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:09:31.868 [DEBUG] [Thread-92] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:09:31.868 [DEBUG] [Thread-92] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] client lang: <none>
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] server lang: <none>
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] kex follows: False
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] Compression: none
2025-11-25T14:09:31.869 [DEBUG] [Thread-92] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:09:31.881 [DEBUG] [Thread-92] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:09:31.881 [DEBUG] [Thread-92] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:09:31.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:09:31.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:09:31.882 [DEBUG] [Thread-92] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:09:31.882 [DEBUG] [Thread-92] [transport.py] [_log()] userauth is OK
2025-11-25T14:09:31.882 [DEBUG] [Thread-92] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:09:31.882 [DEBUG] [Thread-92] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:09:31.882 [DEBUG] [Thread-92] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:09:31.882 [DEBUG] [Thread-92] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:09:31.900 [INFO] [Thread-92] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:09:31.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:09:32.725 [DEBUG] [Thread-92] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:09:32.725 [DEBUG] [Thread-92] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:09:32.726 [DEBUG] [Thread-92] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:09:32.765 [DEBUG] [Thread-92] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:09:32.766 [DEBUG] [Thread-92] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:09:32.769 [DEBUG] [Thread-92] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:09:32.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:09:32.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:09:32.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:09:32.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:09:32.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:09:32.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:09:32.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:09:32.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:09:32.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:09:32.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.506351 -999.00  +25.70   4.51     13   -4.00 1 1 1 1 1   888    0 28.73 -36.69 ----- 7.3 4.5 94.4 9.3 33.5 -33.6 33.7 -30.2 34.6 -29.6 35.3 -30.2
2025-11-25T14:09:32.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:09:32.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:09:32.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.506351
2025-11-25T14:09:32.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:09:32.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:09:32.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:09:32.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:09:32.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:09:32.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:08:58', tmtdew=35.61, humidity=8.67, cloud=0.0, wind=7.52, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:09:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:09:32.794 [DEBUG] [Thread-92] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:09:32.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:09:32.901 [DEBUG] [Thread-95] [transport.py] [_log()] starting thread (client mode): 0x7376c4c0
2025-11-25T14:09:32.901 [DEBUG] [Thread-95] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:09:32.915 [DEBUG] [Thread-95] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:09:32.915 [INFO] [Thread-95] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:09:32.923 [DEBUG] [Thread-95] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:09:32.923 [DEBUG] [Thread-95] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:09:32.923 [DEBUG] [Thread-95] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:09:32.923 [DEBUG] [Thread-95] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:09:32.923 [DEBUG] [Thread-95] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] client lang: <none>
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] server lang: <none>
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] kex follows: False
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] Compression: none
2025-11-25T14:09:32.924 [DEBUG] [Thread-95] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:09:32.982 [DEBUG] [Thread-95] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:09:32.982 [DEBUG] [Thread-95] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:09:32.983 [DEBUG] [Thread-95] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:09:32.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:09:32.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:09:33.038 [DEBUG] [Thread-95] [transport.py] [_log()] userauth is OK
2025-11-25T14:09:33.038 [DEBUG] [Thread-95] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:09:33.038 [DEBUG] [Thread-95] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:09:33.038 [DEBUG] [Thread-95] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:09:33.039 [DEBUG] [Thread-95] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:09:33.058 [INFO] [Thread-95] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:09:33.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:09:33.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:09:33.787 [DEBUG] [Thread-95] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:09:33.787 [DEBUG] [Thread-95] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:09:33.835 [DEBUG] [Thread-95] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:09:33.835 [DEBUG] [Thread-95] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:09:33.844 [DEBUG] [Thread-95] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:09:33.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:09:33.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:09:33.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:09:33.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:09:33.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:09:33.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:09:33.879 [DEBUG] [Thread-95] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:09:45.787 [DEBUG] [Thread-97 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:09:46.355 [DEBUG] [Thread-98 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:10:01.415 [DEBUG] [Thread-99 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:10:03.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:10:03.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:10:03.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:10:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 9, 30), 35.4, 8.79, 0.0, 6.71, 25.24, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:10:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:09:30
2025-11-25T14:10:04.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:10:04.864 [DEBUG] [Thread-100] [transport.py] [_log()] starting thread (client mode): 0x7376e9b0
2025-11-25T14:10:04.864 [DEBUG] [Thread-100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:10:04.888 [DEBUG] [Thread-100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:10:04.888 [INFO] [Thread-100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:10:04.891 [DEBUG] [Thread-100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:10:04.891 [DEBUG] [Thread-100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:10:04.891 [DEBUG] [Thread-100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:10:04.892 [DEBUG] [Thread-100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:10:04.892 [DEBUG] [Thread-100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:10:04.892 [DEBUG] [Thread-100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:10:04.892 [DEBUG] [Thread-100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:10:04.892 [DEBUG] [Thread-100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:10:04.892 [DEBUG] [Thread-100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:10:04.892 [DEBUG] [Thread-100] [transport.py] [_log()] client lang: <none>
2025-11-25T14:10:04.892 [DEBUG] [Thread-100] [transport.py] [_log()] server lang: <none>
2025-11-25T14:10:04.893 [DEBUG] [Thread-100] [transport.py] [_log()] kex follows: False
2025-11-25T14:10:04.893 [DEBUG] [Thread-100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:10:04.893 [DEBUG] [Thread-100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:10:04.893 [DEBUG] [Thread-100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:10:04.893 [DEBUG] [Thread-100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:10:04.893 [DEBUG] [Thread-100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:10:04.893 [DEBUG] [Thread-100] [transport.py] [_log()] Compression: none
2025-11-25T14:10:04.893 [DEBUG] [Thread-100] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:10:04.903 [DEBUG] [Thread-100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:10:04.904 [DEBUG] [Thread-100] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:10:04.904 [DEBUG] [Thread-100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:10:04.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:10:04.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:10:04.906 [DEBUG] [Thread-100] [transport.py] [_log()] userauth is OK
2025-11-25T14:10:04.907 [DEBUG] [Thread-100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:10:04.907 [DEBUG] [Thread-100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:10:04.907 [DEBUG] [Thread-100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:10:04.907 [DEBUG] [Thread-100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:10:04.932 [INFO] [Thread-100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:10:04.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:10:06.698 [DEBUG] [Thread-100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:10:06.699 [DEBUG] [Thread-100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:10:06.699 [DEBUG] [Thread-100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:10:06.740 [DEBUG] [Thread-100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:10:06.740 [DEBUG] [Thread-100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:10:06.742 [DEBUG] [Thread-100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:10:06.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:10:06.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:10:06.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:10:06.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:10:06.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:10:06.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:10:06.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:10:06.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:10:06.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:10:06.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.506699 -999.00  +25.70   4.13     13   -4.00 1 1 1 1 1   888    0 28.79 -34.34 ----- 4.2 4.1 66.4 8.5 33.8 -29.9 33.7 -29.9 34.8 -30.1 35.4 -30.1
2025-11-25T14:10:06.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:10:06.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:10:06.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.506699
2025-11-25T14:10:06.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:10:06.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:10:06.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:10:06.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:10:06.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:10:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:09:30', tmtdew=35.4, humidity=8.79, cloud=0.0, wind=6.71, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:09:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:10:06.778 [DEBUG] [Thread-100] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:10:06.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:10:06.880 [DEBUG] [Thread-103] [transport.py] [_log()] starting thread (client mode): 0x7376c910
2025-11-25T14:10:06.880 [DEBUG] [Thread-103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:10:06.894 [DEBUG] [Thread-103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:10:06.894 [INFO] [Thread-103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:10:06.902 [DEBUG] [Thread-103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:10:06.902 [DEBUG] [Thread-103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:10:06.902 [DEBUG] [Thread-103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:10:06.902 [DEBUG] [Thread-103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:10:06.902 [DEBUG] [Thread-103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:10:06.903 [DEBUG] [Thread-103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:10:06.903 [DEBUG] [Thread-103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:10:06.903 [DEBUG] [Thread-103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:10:06.903 [DEBUG] [Thread-103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:10:06.903 [DEBUG] [Thread-103] [transport.py] [_log()] client lang: <none>
2025-11-25T14:10:06.903 [DEBUG] [Thread-103] [transport.py] [_log()] server lang: <none>
2025-11-25T14:10:06.903 [DEBUG] [Thread-103] [transport.py] [_log()] kex follows: False
2025-11-25T14:10:06.903 [DEBUG] [Thread-103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:10:06.904 [DEBUG] [Thread-103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:10:06.904 [DEBUG] [Thread-103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:10:06.904 [DEBUG] [Thread-103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:10:06.904 [DEBUG] [Thread-103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:10:06.904 [DEBUG] [Thread-103] [transport.py] [_log()] Compression: none
2025-11-25T14:10:06.904 [DEBUG] [Thread-103] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:10:06.963 [DEBUG] [Thread-103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:10:06.963 [DEBUG] [Thread-103] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:10:06.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:10:06.964 [DEBUG] [Thread-103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:10:06.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:10:07.018 [DEBUG] [Thread-103] [transport.py] [_log()] userauth is OK
2025-11-25T14:10:07.019 [DEBUG] [Thread-103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:10:07.019 [DEBUG] [Thread-103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:10:07.019 [DEBUG] [Thread-103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:10:07.019 [DEBUG] [Thread-103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:10:07.037 [INFO] [Thread-103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14: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
2025-11-25T14:10:07.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:10:07.743 [DEBUG] [Thread-103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:10:07.744 [DEBUG] [Thread-103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:10:07.791 [DEBUG] [Thread-103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:10:07.792 [DEBUG] [Thread-103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:10:07.800 [DEBUG] [Thread-103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:10:07.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:10:07.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')
2025-11-25T14:10:07.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:10:07.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:10:07.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:10:07.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:10:07.834 [DEBUG] [Thread-103] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:10:16.455 [DEBUG] [Thread-105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:10:31.523 [DEBUG] [Thread-106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:10:37.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:10:37.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:10:37.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:10:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 10, 34), 35.44, 8.69, 0.0, 4.5, 25.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:10:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:10:34
2025-11-25T14:10:38.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:10:38.785 [DEBUG] [Thread-107] [transport.py] [_log()] starting thread (client mode): 0x7376e350
2025-11-25T14:10:38.785 [DEBUG] [Thread-107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:10:38.808 [DEBUG] [Thread-107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:10:38.808 [INFO] [Thread-107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] client lang: <none>
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] server lang: <none>
2025-11-25T14:10:38.812 [DEBUG] [Thread-107] [transport.py] [_log()] kex follows: False
2025-11-25T14:10:38.813 [DEBUG] [Thread-107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:10:38.813 [DEBUG] [Thread-107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:10:38.813 [DEBUG] [Thread-107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:10:38.813 [DEBUG] [Thread-107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:10:38.813 [DEBUG] [Thread-107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:10:38.813 [DEBUG] [Thread-107] [transport.py] [_log()] Compression: none
2025-11-25T14:10:38.813 [DEBUG] [Thread-107] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:10:38.830 [DEBUG] [Thread-107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:10:38.831 [DEBUG] [Thread-107] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:10:38.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:10:38.832 [DEBUG] [Thread-107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:10:38.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:10:38.834 [DEBUG] [Thread-107] [transport.py] [_log()] userauth is OK
2025-11-25T14:10:38.835 [DEBUG] [Thread-107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:10:38.835 [DEBUG] [Thread-107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:10:38.835 [DEBUG] [Thread-107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:10:38.835 [DEBUG] [Thread-107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:10:38.859 [INFO] [Thread-107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:10:38.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:10:39.709 [DEBUG] [Thread-107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:10:39.710 [DEBUG] [Thread-107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:10:39.710 [DEBUG] [Thread-107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:10:39.751 [DEBUG] [Thread-107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:10:39.751 [DEBUG] [Thread-107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:10:39.754 [DEBUG] [Thread-107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:10:39.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:10:39.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:10:39.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:10:39.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:10:39.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:10:39.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:10:39.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:10:39.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:10:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:10:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.507045 -999.00  +25.50   4.86     13   -4.20 1 1 1 1 1   888    0 28.75 -33.91 ----- 4.1 4.9 9.4 5.9 33.9 -30.1 33.9 -29.8 35.0 -29.0 35.6 -29.2
2025-11-25T14:10:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:10:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:10:39.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.507045
2025-11-25T14:10:39.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:10:39.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:10:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:10:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:10:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:10:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:10:34', tmtdew=35.44, humidity=8.69, cloud=0.0, wind=4.5, temperature=25.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:10:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:10:39.783 [DEBUG] [Thread-107] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:10:39.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:10:39.887 [DEBUG] [Thread-110] [transport.py] [_log()] starting thread (client mode): 0x7376f5e0
2025-11-25T14:10:39.888 [DEBUG] [Thread-110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:10:39.901 [DEBUG] [Thread-110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:10:39.901 [INFO] [Thread-110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:10:39.908 [DEBUG] [Thread-110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] client lang: <none>
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] server lang: <none>
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] kex follows: False
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:10:39.909 [DEBUG] [Thread-110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:10:39.910 [DEBUG] [Thread-110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:10:39.910 [DEBUG] [Thread-110] [transport.py] [_log()] Compression: none
2025-11-25T14:10:39.910 [DEBUG] [Thread-110] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:10:39.966 [DEBUG] [Thread-110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:10:39.967 [DEBUG] [Thread-110] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:10:39.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:10:39.968 [DEBUG] [Thread-110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:10:39.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:10:40.023 [DEBUG] [Thread-110] [transport.py] [_log()] userauth is OK
2025-11-25T14:10:40.023 [DEBUG] [Thread-110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:10:40.023 [DEBUG] [Thread-110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:10:40.023 [DEBUG] [Thread-110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:10:40.023 [DEBUG] [Thread-110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:10:40.042 [INFO] [Thread-110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:10:40.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:10:40.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:10:40.776 [DEBUG] [Thread-110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:10:40.777 [DEBUG] [Thread-110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:10:40.825 [DEBUG] [Thread-110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:10:40.825 [DEBUG] [Thread-110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:10:40.834 [DEBUG] [Thread-110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:10:40.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:10:40.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')
2025-11-25T14:10:40.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:10:40.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:10:40.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:10:40.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:10:40.872 [DEBUG] [Thread-110] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:10:46.515 [DEBUG] [Thread-112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:10:46.565 [DEBUG] [Thread-113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:11:01.628 [DEBUG] [Thread-114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:11:10.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:11:10.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:11:10.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:11:11.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 11, 6), 35.28, 8.79, 0.0, 3.95, 25.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:11:11.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:11:06
2025-11-25T14:11:11.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:11:11.839 [DEBUG] [Thread-115] [transport.py] [_log()] starting thread (client mode): 0x737826e0
2025-11-25T14:11:11.839 [DEBUG] [Thread-115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:11:11.861 [DEBUG] [Thread-115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:11:11.862 [INFO] [Thread-115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] client lang: <none>
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] server lang: <none>
2025-11-25T14:11:11.865 [DEBUG] [Thread-115] [transport.py] [_log()] kex follows: False
2025-11-25T14:11:11.866 [DEBUG] [Thread-115] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:11:11.866 [DEBUG] [Thread-115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:11:11.866 [DEBUG] [Thread-115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:11:11.866 [DEBUG] [Thread-115] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:11:11.866 [DEBUG] [Thread-115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:11:11.866 [DEBUG] [Thread-115] [transport.py] [_log()] Compression: none
2025-11-25T14:11:11.866 [DEBUG] [Thread-115] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:11:11.884 [DEBUG] [Thread-115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:11:11.884 [DEBUG] [Thread-115] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:11:11.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:11:11.885 [DEBUG] [Thread-115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:11:11.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:11:11.887 [DEBUG] [Thread-115] [transport.py] [_log()] userauth is OK
2025-11-25T14:11:11.888 [DEBUG] [Thread-115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:11:11.888 [DEBUG] [Thread-115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:11:11.888 [DEBUG] [Thread-115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:11:11.888 [DEBUG] [Thread-115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:11:11.915 [INFO] [Thread-115] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:11:11.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:11:12.575 [DEBUG] [Thread-115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:11:12.575 [DEBUG] [Thread-115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:11:12.575 [DEBUG] [Thread-115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:11:12.616 [DEBUG] [Thread-115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:11:12.616 [DEBUG] [Thread-115] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:11:12.619 [DEBUG] [Thread-115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:11:12.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:11:12.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:11:12.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:11:12.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:11:12.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:11:12.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:11:12.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:11:12.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:11:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:11:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.507393 -999.00  +25.50   2.95     13   -4.10 1 1 1 1 1   888    0 29.21 -34.87 ----- 7.1 3.0 96.6 5.3 34.1 -29.8 33.9 -32.3 35.2 -28.5 35.7 -29.5
2025-11-25T14:11:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:11:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:11:12.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.507393
2025-11-25T14:11:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:11:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:11:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:11:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:11:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:11:12.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:11:06', tmtdew=35.28, humidity=8.79, cloud=0.0, wind=3.95, temperature=25.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:10:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:11:12.644 [DEBUG] [Thread-115] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:11:12.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:11:12.756 [DEBUG] [Thread-118] [transport.py] [_log()] starting thread (client mode): 0x73781f60
2025-11-25T14:11:12.756 [DEBUG] [Thread-118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:11:12.769 [DEBUG] [Thread-118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:11:12.770 [INFO] [Thread-118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:11:12.777 [DEBUG] [Thread-118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:11:12.777 [DEBUG] [Thread-118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:11:12.777 [DEBUG] [Thread-118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:11:12.777 [DEBUG] [Thread-118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] client lang: <none>
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] server lang: <none>
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] kex follows: False
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:11:12.778 [DEBUG] [Thread-118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:11:12.779 [DEBUG] [Thread-118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:11:12.779 [DEBUG] [Thread-118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:11:12.779 [DEBUG] [Thread-118] [transport.py] [_log()] Compression: none
2025-11-25T14:11:12.779 [DEBUG] [Thread-118] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:11:12.835 [DEBUG] [Thread-118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:11:12.835 [DEBUG] [Thread-118] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:11:12.836 [DEBUG] [Thread-118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:11:12.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:11:12.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:11:12.891 [DEBUG] [Thread-118] [transport.py] [_log()] userauth is OK
2025-11-25T14:11:12.891 [DEBUG] [Thread-118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:11:12.891 [DEBUG] [Thread-118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:11:12.891 [DEBUG] [Thread-118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:11:12.891 [DEBUG] [Thread-118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:11:12.910 [INFO] [Thread-118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:11:12.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:11:12.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:11:13.599 [DEBUG] [Thread-118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:11:13.599 [DEBUG] [Thread-118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:11:13.649 [DEBUG] [Thread-118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:11:13.649 [DEBUG] [Thread-118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:11:13.661 [DEBUG] [Thread-118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:11:13.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:11:13.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:11:13.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:11:13.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:11:13.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:11:13.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:11:13.707 [DEBUG] [Thread-118] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:11:16.672 [DEBUG] [Thread-120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:11:31.740 [DEBUG] [Thread-121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:11:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:11:43.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:11:43.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:11:44.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 11, 38), 35.47, 8.8, 0.0, 4.34, 25.51, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:11:44.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:11:38
2025-11-25T14:11:44.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:11:44.644 [DEBUG] [Thread-122] [transport.py] [_log()] starting thread (client mode): 0x73783850
2025-11-25T14:11:44.644 [DEBUG] [Thread-122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:11:44.657 [DEBUG] [Thread-122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:11:44.657 [INFO] [Thread-122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:11:44.658 [DEBUG] [Thread-122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:11:44.658 [DEBUG] [Thread-122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:11:44.658 [DEBUG] [Thread-122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:11:44.658 [DEBUG] [Thread-122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:11:44.658 [DEBUG] [Thread-122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] client lang: <none>
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] server lang: <none>
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] kex follows: False
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] Compression: none
2025-11-25T14:11:44.659 [DEBUG] [Thread-122] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:11:44.673 [DEBUG] [Thread-122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:11:44.674 [DEBUG] [Thread-122] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:11:44.674 [DEBUG] [Thread-122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:11:44.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:11:44.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:11:44.676 [DEBUG] [Thread-122] [transport.py] [_log()] userauth is OK
2025-11-25T14:11:44.676 [DEBUG] [Thread-122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:11:44.677 [DEBUG] [Thread-122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:11:44.677 [DEBUG] [Thread-122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:11:44.677 [DEBUG] [Thread-122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:11:44.713 [INFO] [Thread-122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:11:44.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:11:45.509 [DEBUG] [Thread-122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:11:45.509 [DEBUG] [Thread-122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:11:45.510 [DEBUG] [Thread-122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:11:45.550 [DEBUG] [Thread-122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:11:45.550 [DEBUG] [Thread-122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:11:45.554 [DEBUG] [Thread-122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:11:45.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:11:45.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:11:45.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:11:45.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:11:45.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:11:45.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:11:45.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:11:45.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:11:45.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:11:45.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.507740 -999.00  +25.70   2.71     13   -4.00 1 1 1 1 1   888    0 28.43 -34.81 ----- 4.2 2.7 41.3 8.9 34.1 -30.6 34.0 -30.6 35.0 -28.7 35.6 -32.0
2025-11-25T14:11:45.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:11:45.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:11:45.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.507740
2025-11-25T14:11:45.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:11:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:11:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:11:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:11:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:11:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:11:38', tmtdew=35.47, humidity=8.8, cloud=0.0, wind=4.34, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:11:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:11:45.573 [DEBUG] [Thread-122] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:11:45.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:11:45.677 [DEBUG] [Thread-125] [transport.py] [_log()] starting thread (client mode): 0x7376caf0
2025-11-25T14:11:45.677 [DEBUG] [Thread-125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:11:45.695 [DEBUG] [Thread-125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:11:45.695 [INFO] [Thread-125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:11:45.703 [DEBUG] [Thread-125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:11:45.703 [DEBUG] [Thread-125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:11:45.703 [DEBUG] [Thread-125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:11:45.703 [DEBUG] [Thread-125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:11:45.703 [DEBUG] [Thread-125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:11:45.703 [DEBUG] [Thread-125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:11:45.703 [DEBUG] [Thread-125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:11:45.703 [DEBUG] [Thread-125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] client lang: <none>
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] server lang: <none>
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] kex follows: False
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] Compression: none
2025-11-25T14:11:45.704 [DEBUG] [Thread-125] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:11:45.763 [DEBUG] [Thread-125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:11:45.763 [DEBUG] [Thread-125] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:11:45.764 [DEBUG] [Thread-125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:11:45.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:11:45.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:11:45.819 [DEBUG] [Thread-125] [transport.py] [_log()] userauth is OK
2025-11-25T14:11:45.819 [DEBUG] [Thread-125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:11:45.819 [DEBUG] [Thread-125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:11:45.819 [DEBUG] [Thread-125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:11:45.819 [DEBUG] [Thread-125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:11:45.838 [INFO] [Thread-125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:11:45.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:11:45.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:11:46.548 [DEBUG] [Thread-125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:11:46.548 [DEBUG] [Thread-125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:11:46.596 [DEBUG] [Thread-125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:11:46.596 [DEBUG] [Thread-125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:11:46.604 [DEBUG] [Thread-125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:11:46.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:11: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')
2025-11-25T14:11:46.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:11:46.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:11:46.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:11:46.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:11:46.638 [DEBUG] [Thread-125] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:11:46.777 [DEBUG] [Thread-127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:11:47.019 [DEBUG] [Thread-128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:12:01.825 [DEBUG] [Thread-129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:12:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:12:16.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:12:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:12:16.858 [DEBUG] [Thread-130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:12:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 12, 10), 35.8, 8.62, 0.0, 9.23, 25.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:12:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:12:10
2025-11-25T14:12:17.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:12:17.584 [DEBUG] [Thread-131] [transport.py] [_log()] starting thread (client mode): 0x73780eb0
2025-11-25T14:12:17.584 [DEBUG] [Thread-131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:12:17.604 [DEBUG] [Thread-131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:12:17.604 [INFO] [Thread-131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] client lang: <none>
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] server lang: <none>
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] kex follows: False
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] Compression: none
2025-11-25T14:12:17.608 [DEBUG] [Thread-131] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:12:17.623 [DEBUG] [Thread-131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:12:17.623 [DEBUG] [Thread-131] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:12:17.623 [DEBUG] [Thread-131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:12:17.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:12:17.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:12:17.624 [DEBUG] [Thread-131] [transport.py] [_log()] userauth is OK
2025-11-25T14:12:17.624 [DEBUG] [Thread-131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:12:17.624 [DEBUG] [Thread-131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:12:17.624 [DEBUG] [Thread-131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:12:17.625 [DEBUG] [Thread-131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:12:17.634 [INFO] [Thread-131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:12:17.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:12:18.262 [DEBUG] [Thread-131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:12:18.263 [DEBUG] [Thread-131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:12:18.263 [DEBUG] [Thread-131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:12:18.303 [DEBUG] [Thread-131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:12:18.303 [DEBUG] [Thread-131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:12:18.305 [DEBUG] [Thread-131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:12:18.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:12:18.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:12:18.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:12:18.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:12:18.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:12:18.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:12:18.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.508087 -999.00  +25.70   5.18     13   -4.10 1 1 1 1 1   888    0 28.56 -33.94 ----- 6.4 5.2 347.2 6.2 34.3 -30.3 33.9 -31.7 35.1 -28.9 35.8 -29.9
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.508087
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:12:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:12:10', tmtdew=35.8, humidity=8.62, cloud=0.0, wind=9.23, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:11:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:12:18.325 [DEBUG] [Thread-131] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:12:18.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:12:18.413 [DEBUG] [Thread-134] [transport.py] [_log()] starting thread (client mode): 0x737815d0
2025-11-25T14:12:18.414 [DEBUG] [Thread-134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:12:18.428 [DEBUG] [Thread-134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:12:18.428 [INFO] [Thread-134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:12:18.435 [DEBUG] [Thread-134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:12:18.435 [DEBUG] [Thread-134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:12:18.435 [DEBUG] [Thread-134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:12:18.435 [DEBUG] [Thread-134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:12:18.435 [DEBUG] [Thread-134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] client lang: <none>
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] server lang: <none>
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] kex follows: False
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] Compression: none
2025-11-25T14:12:18.436 [DEBUG] [Thread-134] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:12:18.492 [DEBUG] [Thread-134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:12:18.492 [DEBUG] [Thread-134] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:12:18.492 [DEBUG] [Thread-134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:12:18.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:12:18.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:12:18.549 [DEBUG] [Thread-134] [transport.py] [_log()] userauth is OK
2025-11-25T14:12:18.549 [DEBUG] [Thread-134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:12:18.549 [DEBUG] [Thread-134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:12:18.549 [DEBUG] [Thread-134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:12:18.549 [DEBUG] [Thread-134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:12:18.563 [INFO] [Thread-134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:12:18.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:12:18.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:12:19.243 [DEBUG] [Thread-134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:12:19.243 [DEBUG] [Thread-134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:12:19.291 [DEBUG] [Thread-134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:12:19.291 [DEBUG] [Thread-134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:12:19.300 [DEBUG] [Thread-134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:12:19.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:12:19.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:12:19.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:12:19.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:12:19.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:12:19.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:12:19.331 [DEBUG] [Thread-134] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:12:31.889 [DEBUG] [Thread-136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:12:46.934 [DEBUG] [Thread-137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:12:47.566 [DEBUG] [Thread-138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:12:49.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:12:49.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:12:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:12:50.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 12, 42), 35.86, 8.64, 0.0, 9.21, 25.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:12:50.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:12:42
2025-11-25T14:12:50.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:12:50.313 [DEBUG] [Thread-139] [transport.py] [_log()] starting thread (client mode): 0x761dbf40
2025-11-25T14:12:50.313 [DEBUG] [Thread-139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:12:50.334 [DEBUG] [Thread-139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:12:50.334 [INFO] [Thread-139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] client lang: <none>
2025-11-25T14:12:50.337 [DEBUG] [Thread-139] [transport.py] [_log()] server lang: <none>
2025-11-25T14:12:50.338 [DEBUG] [Thread-139] [transport.py] [_log()] kex follows: False
2025-11-25T14:12:50.338 [DEBUG] [Thread-139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:12:50.338 [DEBUG] [Thread-139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:12:50.338 [DEBUG] [Thread-139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:12:50.338 [DEBUG] [Thread-139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:12:50.338 [DEBUG] [Thread-139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:12:50.338 [DEBUG] [Thread-139] [transport.py] [_log()] Compression: none
2025-11-25T14:12:50.338 [DEBUG] [Thread-139] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:12:50.345 [DEBUG] [Thread-139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:12:50.345 [DEBUG] [Thread-139] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:12:50.345 [DEBUG] [Thread-139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:12:50.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:12:50.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:12:50.346 [DEBUG] [Thread-139] [transport.py] [_log()] userauth is OK
2025-11-25T14:12:50.346 [DEBUG] [Thread-139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:12:50.346 [DEBUG] [Thread-139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:12:50.346 [DEBUG] [Thread-139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:12:50.346 [DEBUG] [Thread-139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:12:50.357 [INFO] [Thread-139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:12:50.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:12:50.963 [DEBUG] [Thread-139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:12:50.963 [DEBUG] [Thread-139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:12:50.963 [DEBUG] [Thread-139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:12:51.004 [DEBUG] [Thread-139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:12:51.004 [DEBUG] [Thread-139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:12:51.006 [DEBUG] [Thread-139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:12:51.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:12:51.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:12:51.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:12:51.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:12:51.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:12:51.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:12:51.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.508435 -999.00  +25.40   6.65     13   -4.00 1 1 1 1 1   888    0 28.81 -31.86 ----- 3.8 6.7 301.2 11.3 34.3 -30.8 34.0 -30.1 35.1 -28.7 35.6 -30.4
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.508435
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:12:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:12:42', tmtdew=35.86, humidity=8.64, cloud=0.0, wind=9.21, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:12:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:12:51.024 [DEBUG] [Thread-139] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:12:51.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:12:51.122 [DEBUG] [Thread-142] [transport.py] [_log()] starting thread (client mode): 0x737811e0
2025-11-25T14:12:51.122 [DEBUG] [Thread-142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:12:51.137 [DEBUG] [Thread-142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:12:51.137 [INFO] [Thread-142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] client lang: <none>
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] server lang: <none>
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] kex follows: False
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:12:51.144 [DEBUG] [Thread-142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:12:51.145 [DEBUG] [Thread-142] [transport.py] [_log()] Compression: none
2025-11-25T14:12:51.145 [DEBUG] [Thread-142] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:12:51.199 [DEBUG] [Thread-142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:12:51.200 [DEBUG] [Thread-142] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:12:51.200 [DEBUG] [Thread-142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:12:51.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:12:51.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:12:51.261 [DEBUG] [Thread-142] [transport.py] [_log()] userauth is OK
2025-11-25T14:12:51.261 [DEBUG] [Thread-142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:12:51.261 [DEBUG] [Thread-142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:12:51.261 [DEBUG] [Thread-142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:12:51.261 [DEBUG] [Thread-142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:12:51.274 [INFO] [Thread-142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:12:51.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:12:51.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:12:51.993 [DEBUG] [Thread-142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:12:51.993 [DEBUG] [Thread-142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:12:52.041 [DEBUG] [Thread-142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:12:52.041 [DEBUG] [Thread-142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:12:52.049 [DEBUG] [Thread-142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:12:52.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:12:52.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:12:52.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:12:52.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:12:52.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:12:52.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:12:52.089 [DEBUG] [Thread-142] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:13:01.964 [DEBUG] [Thread-144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:13:17.013 [DEBUG] [Thread-145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:13:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:13:22.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:13:22.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:13:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 13, 14), 35.9, 8.62, 0.0, 8.73, 25.69, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:13:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:13:14
2025-11-25T14:13:22.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:13:23.058 [DEBUG] [Thread-146] [transport.py] [_log()] starting thread (client mode): 0x73781630
2025-11-25T14:13:23.058 [DEBUG] [Thread-146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:13:23.078 [DEBUG] [Thread-146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:13:23.078 [INFO] [Thread-146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:13:23.080 [DEBUG] [Thread-146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:13:23.080 [DEBUG] [Thread-146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:13:23.080 [DEBUG] [Thread-146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:13:23.080 [DEBUG] [Thread-146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:13:23.080 [DEBUG] [Thread-146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:13:23.080 [DEBUG] [Thread-146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:13:23.080 [DEBUG] [Thread-146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:13:23.080 [DEBUG] [Thread-146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] client lang: <none>
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] server lang: <none>
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] kex follows: False
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] Compression: none
2025-11-25T14:13:23.081 [DEBUG] [Thread-146] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:13:23.091 [DEBUG] [Thread-146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:13:23.091 [DEBUG] [Thread-146] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:13:23.092 [DEBUG] [Thread-146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:13:23.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:13:23.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:13:23.094 [DEBUG] [Thread-146] [transport.py] [_log()] userauth is OK
2025-11-25T14:13:23.094 [DEBUG] [Thread-146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:13:23.095 [DEBUG] [Thread-146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:13:23.095 [DEBUG] [Thread-146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:13:23.095 [DEBUG] [Thread-146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:13:23.114 [INFO] [Thread-146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:13:23.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:13:23.768 [DEBUG] [Thread-146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:13:23.768 [DEBUG] [Thread-146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:13:23.768 [DEBUG] [Thread-146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:13:23.808 [DEBUG] [Thread-146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:13:23.808 [DEBUG] [Thread-146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:13:23.809 [DEBUG] [Thread-146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:13:23.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:13:23.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:13:23.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:13:23.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:13:23.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:13:23.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:13:23.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.508782 -999.00  +25.70   1.12     13   -3.90 1 1 1 1 1   888    0 28.58 -32.36 ----- 2.9 1.1 142.8 4.6 34.5 -30.2 34.1 -30.7 35.2 -29.5 35.8 -29.3
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.508782
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:13:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:13:14', tmtdew=35.9, humidity=8.62, cloud=0.0, wind=8.73, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:12:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:13:23.827 [DEBUG] [Thread-146] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:13:23.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:13:23.920 [DEBUG] [Thread-149] [transport.py] [_log()] starting thread (client mode): 0x73780a60
2025-11-25T14:13:23.921 [DEBUG] [Thread-149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:13:23.934 [DEBUG] [Thread-149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:13:23.934 [INFO] [Thread-149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] client lang: <none>
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] server lang: <none>
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] kex follows: False
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] Compression: none
2025-11-25T14:13:23.942 [DEBUG] [Thread-149] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:13:24.000 [DEBUG] [Thread-149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:13:24.000 [DEBUG] [Thread-149] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:13:24.000 [DEBUG] [Thread-149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:13:24.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:13:24.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:13:24.058 [DEBUG] [Thread-149] [transport.py] [_log()] userauth is OK
2025-11-25T14:13:24.058 [DEBUG] [Thread-149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:13:24.058 [DEBUG] [Thread-149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:13:24.058 [DEBUG] [Thread-149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:13:24.058 [DEBUG] [Thread-149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:13:24.075 [INFO] [Thread-149] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:13:24.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:13:24.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:13:24.785 [DEBUG] [Thread-149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:13:24.785 [DEBUG] [Thread-149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:13:24.833 [DEBUG] [Thread-149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:13:24.833 [DEBUG] [Thread-149] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:13:24.841 [DEBUG] [Thread-149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:13:24.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:13:24.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:13:24.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:13:24.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:13:24.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:13:24.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:13:24.873 [DEBUG] [Thread-149] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:13:32.044 [DEBUG] [Thread-151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:13:47.102 [DEBUG] [Thread-152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:13:48.309 [DEBUG] [Thread-153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:13:54.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:13:54.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:13:54.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:13:55.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 13, 46), 35.77, 8.6, 0.0, 8.65, 25.67, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:13:55.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:13:46
2025-11-25T14:13:55.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:13:55.840 [DEBUG] [Thread-154] [transport.py] [_log()] starting thread (client mode): 0x737828c0
2025-11-25T14:13:55.841 [DEBUG] [Thread-154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:13:55.854 [DEBUG] [Thread-154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:13:55.854 [INFO] [Thread-154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:13:55.857 [DEBUG] [Thread-154] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] client lang: <none>
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] server lang: <none>
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] kex follows: False
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] Compression: none
2025-11-25T14:13:55.858 [DEBUG] [Thread-154] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:13:55.876 [DEBUG] [Thread-154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:13:55.876 [DEBUG] [Thread-154] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:13:55.877 [DEBUG] [Thread-154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:13:55.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:13:55.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:13:55.878 [DEBUG] [Thread-154] [transport.py] [_log()] userauth is OK
2025-11-25T14:13:55.879 [DEBUG] [Thread-154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:13:55.879 [DEBUG] [Thread-154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:13:55.879 [DEBUG] [Thread-154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:13:55.879 [DEBUG] [Thread-154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:13:55.914 [INFO] [Thread-154] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:13:55.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:13:56.550 [DEBUG] [Thread-154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:13:56.550 [DEBUG] [Thread-154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:13:56.550 [DEBUG] [Thread-154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:13:56.591 [DEBUG] [Thread-154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:13:56.592 [DEBUG] [Thread-154] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:13:56.594 [DEBUG] [Thread-154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:13:56.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:13:56.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:13:56.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:13:56.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:13:56.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:13:56.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:13:56.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:13:56.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:13:56.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:13:56.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.509129 -999.00  +26.00   8.25     13   -3.90 1 1 1 1 1   888    0 29.21 -32.28 ----- 7.4 8.2 115.9 11.3 34.6 -29.9 34.3 -30.2 35.3 -28.8 35.9 -29.8
2025-11-25T14:13:56.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:13:56.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:13:56.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.509129
2025-11-25T14:13:56.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:13:56.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:13:56.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:13:56.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:13:56.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:13:56.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:13:46', tmtdew=35.77, humidity=8.6, cloud=0.0, wind=8.65, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:13:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:13:56.620 [DEBUG] [Thread-154] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:13:56.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:13:56.734 [DEBUG] [Thread-157] [transport.py] [_log()] starting thread (client mode): 0x737805b0
2025-11-25T14:13:56.734 [DEBUG] [Thread-157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:13:56.747 [DEBUG] [Thread-157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:13:56.747 [INFO] [Thread-157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] client lang: <none>
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] server lang: <none>
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] kex follows: False
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:13:56.755 [DEBUG] [Thread-157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:13:56.756 [DEBUG] [Thread-157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:13:56.756 [DEBUG] [Thread-157] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:13:56.756 [DEBUG] [Thread-157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:13:56.756 [DEBUG] [Thread-157] [transport.py] [_log()] Compression: none
2025-11-25T14:13:56.756 [DEBUG] [Thread-157] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:13:56.816 [DEBUG] [Thread-157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:13:56.817 [DEBUG] [Thread-157] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:13:56.817 [DEBUG] [Thread-157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:13:56.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:13:56.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:13:56.877 [DEBUG] [Thread-157] [transport.py] [_log()] userauth is OK
2025-11-25T14:13:56.877 [DEBUG] [Thread-157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:13:56.877 [DEBUG] [Thread-157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:13:56.878 [DEBUG] [Thread-157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:13:56.878 [DEBUG] [Thread-157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:13:56.899 [INFO] [Thread-157] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:13:56.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:13:56.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:13:57.598 [DEBUG] [Thread-157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:13:57.598 [DEBUG] [Thread-157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:13:57.646 [DEBUG] [Thread-157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:13:57.646 [DEBUG] [Thread-157] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:13:57.662 [DEBUG] [Thread-157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:13:57.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:13:57.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:13:57.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
2025-11-25T14:13:57.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:13:57.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:13:57.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:13:57.696 [DEBUG] [Thread-157] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:14:02.141 [DEBUG] [Thread-159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:14:17.193 [DEBUG] [Thread-160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:14:27.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:14:27.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:14:27.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:14:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 14, 18), 35.69, 8.64, 0.0, 8.7, 25.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:14:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:14:18
2025-11-25T14:14:28.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:14:28.671 [DEBUG] [Thread-161] [transport.py] [_log()] starting thread (client mode): 0x737822c0
2025-11-25T14:14:28.671 [DEBUG] [Thread-161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:14:28.691 [DEBUG] [Thread-161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:14:28.691 [INFO] [Thread-161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:14:28.694 [DEBUG] [Thread-161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:14:28.695 [DEBUG] [Thread-161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:14:28.695 [DEBUG] [Thread-161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:14:28.695 [DEBUG] [Thread-161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:14:28.695 [DEBUG] [Thread-161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:14:28.695 [DEBUG] [Thread-161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:14:28.695 [DEBUG] [Thread-161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:14:28.695 [DEBUG] [Thread-161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:14:28.696 [DEBUG] [Thread-161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:14:28.696 [DEBUG] [Thread-161] [transport.py] [_log()] client lang: <none>
2025-11-25T14:14:28.696 [DEBUG] [Thread-161] [transport.py] [_log()] server lang: <none>
2025-11-25T14:14:28.696 [DEBUG] [Thread-161] [transport.py] [_log()] kex follows: False
2025-11-25T14:14:28.696 [DEBUG] [Thread-161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:14:28.696 [DEBUG] [Thread-161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:14:28.696 [DEBUG] [Thread-161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:14:28.696 [DEBUG] [Thread-161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:14:28.697 [DEBUG] [Thread-161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:14:28.697 [DEBUG] [Thread-161] [transport.py] [_log()] Compression: none
2025-11-25T14:14:28.697 [DEBUG] [Thread-161] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:14:28.717 [DEBUG] [Thread-161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:14:28.717 [DEBUG] [Thread-161] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:14:28.718 [DEBUG] [Thread-161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:14:28.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:14:28.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:14:28.720 [DEBUG] [Thread-161] [transport.py] [_log()] userauth is OK
2025-11-25T14:14:28.720 [DEBUG] [Thread-161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:14:28.721 [DEBUG] [Thread-161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:14:28.721 [DEBUG] [Thread-161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:14:28.721 [DEBUG] [Thread-161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:14:28.745 [INFO] [Thread-161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:14:28.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:14:29.408 [DEBUG] [Thread-161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:14:29.409 [DEBUG] [Thread-161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:14:29.409 [DEBUG] [Thread-161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:14:29.450 [DEBUG] [Thread-161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:14:29.450 [DEBUG] [Thread-161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:14:29.454 [DEBUG] [Thread-161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:14:29.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:14:29.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:14:29.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:14:29.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:14:29.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:14:29.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:14:29.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:14:29.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.509476 -999.00  +26.00  11.28     13   -3.80 1 1 1 1 1   888    0 29.02 -31.05 ----- 11.1 11.3 117.4 12.3 34.4 -35.1 34.3 -30.2 35.3 -29.4 36.0 -30.4
2025-11-25T14:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:14:29.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.509476
2025-11-25T14:14:29.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:14:29.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:14:29.481 [DEBUG] [Thread-161] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:14:29.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:14:29.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:14:29.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:14:29.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:14:18', tmtdew=35.69, humidity=8.64, cloud=0.0, wind=8.7, temperature=25.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:13:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:14:29.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:14:29.593 [DEBUG] [Thread-164] [transport.py] [_log()] starting thread (client mode): 0x73781510
2025-11-25T14:14:29.593 [DEBUG] [Thread-164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:14:29.608 [DEBUG] [Thread-164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:14:29.608 [INFO] [Thread-164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:14:29.617 [DEBUG] [Thread-164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:14:29.617 [DEBUG] [Thread-164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:14:29.617 [DEBUG] [Thread-164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:14:29.617 [DEBUG] [Thread-164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:14:29.617 [DEBUG] [Thread-164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:14:29.617 [DEBUG] [Thread-164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:14:29.617 [DEBUG] [Thread-164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:14:29.617 [DEBUG] [Thread-164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] client lang: <none>
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] server lang: <none>
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] kex follows: False
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] Compression: none
2025-11-25T14:14:29.618 [DEBUG] [Thread-164] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:14:29.674 [DEBUG] [Thread-164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:14:29.674 [DEBUG] [Thread-164] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:14:29.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:14:29.676 [DEBUG] [Thread-164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:14:29.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:14:29.730 [DEBUG] [Thread-164] [transport.py] [_log()] userauth is OK
2025-11-25T14:14:29.730 [DEBUG] [Thread-164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:14:29.731 [DEBUG] [Thread-164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:14:29.731 [DEBUG] [Thread-164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:14:29.731 [DEBUG] [Thread-164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:14:29.749 [INFO] [Thread-164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:14:29.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:14:29.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:14:30.473 [DEBUG] [Thread-164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:14:30.473 [DEBUG] [Thread-164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:14:30.520 [DEBUG] [Thread-164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:14:30.521 [DEBUG] [Thread-164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:14:30.530 [DEBUG] [Thread-164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:14:30.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:14:30.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:14:30.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:14:30.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:14:30.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:14:30.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:14:30.564 [DEBUG] [Thread-164] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:14:32.245 [DEBUG] [Thread-166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:14:47.312 [DEBUG] [Thread-167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:14:49.024 [DEBUG] [Thread-168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:15:00.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:15:00.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:15:00.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:15:01.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 14, 50), 35.72, 8.74, 0.0, 12.37, 25.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:15:01.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:14:50
2025-11-25T14:15:01.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:15:01.562 [DEBUG] [Thread-169] [transport.py] [_log()] starting thread (client mode): 0x73783d30
2025-11-25T14:15:01.562 [DEBUG] [Thread-169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:15:01.583 [DEBUG] [Thread-169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:15:01.583 [INFO] [Thread-169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] client lang: <none>
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] server lang: <none>
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] kex follows: False
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] Compression: none
2025-11-25T14:15:01.586 [DEBUG] [Thread-169] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:15:01.602 [DEBUG] [Thread-169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:15:01.602 [DEBUG] [Thread-169] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:15:01.602 [DEBUG] [Thread-169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:15:01.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:15:01.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:15:01.603 [DEBUG] [Thread-169] [transport.py] [_log()] userauth is OK
2025-11-25T14:15:01.603 [DEBUG] [Thread-169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:15:01.603 [DEBUG] [Thread-169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:15:01.603 [DEBUG] [Thread-169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:15:01.603 [DEBUG] [Thread-169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:15:01.622 [INFO] [Thread-169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:15:01.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:15:02.291 [DEBUG] [Thread-169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:15:02.291 [DEBUG] [Thread-169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:15:02.292 [DEBUG] [Thread-169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:15:02.332 [DEBUG] [Thread-169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:15:02.332 [DEBUG] [Thread-169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:15:02.336 [DEBUG] [Thread-169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:15:02.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:15:02.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:15:02.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:15:02.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:15:02.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:15:02.356 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:15:02.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:15:02.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:15:02.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:15:02.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:15:02.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.510171 -999.00  +26.00  10.49     13   -4.00 1 1 1 1 1   888    0 29.25 -24.93 ----- 14.2 10.5 127.0 16.2 34.4 -30.7 34.3 -30.6 35.4 -30.3 36.0 -30.9
2025-11-25T14:15:02.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:15:02.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:15:02.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.510171
2025-11-25T14:15:02.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:15:02.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:15:02.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:15:02.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:15:02.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:15:02.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:14:50', tmtdew=35.72, humidity=8.74, cloud=0.0, wind=12.37, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:14:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:15:02.360 [DEBUG] [Thread-169] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:15:02.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:15:02.462 [DEBUG] [Thread-173] [transport.py] [_log()] starting thread (client mode): 0x73781570
2025-11-25T14:15:02.463 [DEBUG] [Thread-173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:15:02.477 [DEBUG] [Thread-173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:15:02.477 [INFO] [Thread-173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:15:02.485 [DEBUG] [Thread-173] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:15:02.485 [DEBUG] [Thread-173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:15:02.485 [DEBUG] [Thread-173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:15:02.485 [DEBUG] [Thread-173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:15:02.485 [DEBUG] [Thread-173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:15:02.485 [DEBUG] [Thread-173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] client lang: <none>
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] server lang: <none>
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] kex follows: False
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] Compression: none
2025-11-25T14:15:02.486 [DEBUG] [Thread-173] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:15:02.547 [DEBUG] [Thread-173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:15:02.547 [DEBUG] [Thread-173] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:15:02.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:15:02.549 [DEBUG] [Thread-173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:15:02.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:15:02.612 [DEBUG] [Thread-173] [transport.py] [_log()] userauth is OK
2025-11-25T14:15:02.612 [DEBUG] [Thread-173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:15:02.612 [DEBUG] [Thread-173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:15:02.612 [DEBUG] [Thread-173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:15:02.612 [DEBUG] [Thread-173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:15:02.630 [INFO] [Thread-173] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:15:02.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:15:02.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:15:03.332 [DEBUG] [Thread-173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:15:03.332 [DEBUG] [Thread-173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:15:03.380 [DEBUG] [Thread-173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:15:03.381 [DEBUG] [Thread-173] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:15:03.390 [DEBUG] [Thread-173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:15:03.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:15: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')
2025-11-25T14:15:03.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
2025-11-25T14:15:03.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:15:03.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:15:03.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:15:03.424 [DEBUG] [Thread-173] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:15:17.397 [DEBUG] [Thread-175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:15:32.460 [DEBUG] [Thread-176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:15:33.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:15:33.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:15:33.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:15:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 15, 22), 35.54, 8.84, 0.0, 11.7, 25.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:15:34.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:15:22
2025-11-25T14:15:34.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:15:34.398 [DEBUG] [Thread-177] [transport.py] [_log()] starting thread (client mode): 0x737828c0
2025-11-25T14:15:34.398 [DEBUG] [Thread-177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:15:34.418 [DEBUG] [Thread-177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:15:34.419 [INFO] [Thread-177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] client lang: <none>
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] server lang: <none>
2025-11-25T14:15:34.422 [DEBUG] [Thread-177] [transport.py] [_log()] kex follows: False
2025-11-25T14:15:34.423 [DEBUG] [Thread-177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:15:34.423 [DEBUG] [Thread-177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:15:34.423 [DEBUG] [Thread-177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:15:34.423 [DEBUG] [Thread-177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:15:34.423 [DEBUG] [Thread-177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:15:34.423 [DEBUG] [Thread-177] [transport.py] [_log()] Compression: none
2025-11-25T14:15:34.423 [DEBUG] [Thread-177] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:15:34.440 [DEBUG] [Thread-177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:15:34.441 [DEBUG] [Thread-177] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:15:34.441 [DEBUG] [Thread-177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:15:34.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:15:34.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:15:34.443 [DEBUG] [Thread-177] [transport.py] [_log()] userauth is OK
2025-11-25T14:15:34.443 [DEBUG] [Thread-177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:15:34.443 [DEBUG] [Thread-177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:15:34.443 [DEBUG] [Thread-177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:15:34.443 [DEBUG] [Thread-177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:15:34.478 [INFO] [Thread-177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:15:34.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:15:35.109 [DEBUG] [Thread-177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:15:35.109 [DEBUG] [Thread-177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:15:35.109 [DEBUG] [Thread-177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:15:35.149 [DEBUG] [Thread-177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:15:35.150 [DEBUG] [Thread-177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:15:35.152 [DEBUG] [Thread-177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:15:35.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:15:35.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:15:35.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:15:35.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:15:35.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:15:35.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:15:35.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:15:35.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:15:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:15:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.510518 -999.00  +26.00   9.06     13   -4.00 1 1 1 1 1   888    0 29.51 -21.73 ----- 5.9 9.1 161.4 15.6 34.5 -30.7 34.2 -30.2 35.4 -30.1 36.0 -31.2
2025-11-25T14:15:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:15:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:15:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.510518
2025-11-25T14:15:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:15:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:15:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:15:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:15:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:15:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:15:22', tmtdew=35.54, humidity=8.84, cloud=0.0, wind=11.7, temperature=25.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:15:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:15:35.175 [DEBUG] [Thread-177] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:15:35.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:15:35.282 [DEBUG] [Thread-180] [transport.py] [_log()] starting thread (client mode): 0x73781780
2025-11-25T14:15:35.282 [DEBUG] [Thread-180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:15:35.297 [DEBUG] [Thread-180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:15:35.298 [INFO] [Thread-180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:15:35.305 [DEBUG] [Thread-180] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:15:35.305 [DEBUG] [Thread-180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:15:35.305 [DEBUG] [Thread-180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:15:35.305 [DEBUG] [Thread-180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:15:35.305 [DEBUG] [Thread-180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:15:35.305 [DEBUG] [Thread-180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:15:35.306 [DEBUG] [Thread-180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:15:35.306 [DEBUG] [Thread-180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:15:35.306 [DEBUG] [Thread-180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:15:35.306 [DEBUG] [Thread-180] [transport.py] [_log()] client lang: <none>
2025-11-25T14:15:35.306 [DEBUG] [Thread-180] [transport.py] [_log()] server lang: <none>
2025-11-25T14:15:35.306 [DEBUG] [Thread-180] [transport.py] [_log()] kex follows: False
2025-11-25T14:15:35.306 [DEBUG] [Thread-180] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:15:35.306 [DEBUG] [Thread-180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:15:35.306 [DEBUG] [Thread-180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:15:35.307 [DEBUG] [Thread-180] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:15:35.307 [DEBUG] [Thread-180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:15:35.307 [DEBUG] [Thread-180] [transport.py] [_log()] Compression: none
2025-11-25T14:15:35.307 [DEBUG] [Thread-180] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:15:35.365 [DEBUG] [Thread-180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:15:35.365 [DEBUG] [Thread-180] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:15:35.366 [DEBUG] [Thread-180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:15:35.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:15:35.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:15:35.425 [DEBUG] [Thread-180] [transport.py] [_log()] userauth is OK
2025-11-25T14:15:35.425 [DEBUG] [Thread-180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:15:35.425 [DEBUG] [Thread-180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:15:35.426 [DEBUG] [Thread-180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:15:35.426 [DEBUG] [Thread-180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:15:35.445 [INFO] [Thread-180] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:15:35.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:15:35.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:15:36.163 [DEBUG] [Thread-180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:15:36.163 [DEBUG] [Thread-180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:15:36.211 [DEBUG] [Thread-180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:15:36.211 [DEBUG] [Thread-180] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:15:36.220 [DEBUG] [Thread-180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:15:36.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:15:36.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:15:36.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:15:36.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:15:36.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:15:36.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:15:36.255 [DEBUG] [Thread-180] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:15:47.505 [DEBUG] [Thread-182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:15:49.782 [DEBUG] [Thread-183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:16:02.575 [DEBUG] [Thread-184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:16:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:16:06.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:16:06.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:16:06.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 15, 54), 35.35, 8.84, 0.0, 11.52, 25.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:16:06.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:15:54
2025-11-25T14:16:07.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:16:07.207 [DEBUG] [Thread-185] [transport.py] [_log()] starting thread (client mode): 0x7376e3e0
2025-11-25T14:16:07.207 [DEBUG] [Thread-185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:16:07.225 [DEBUG] [Thread-185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:16:07.225 [INFO] [Thread-185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] client lang: <none>
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] server lang: <none>
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] kex follows: False
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:16:07.229 [DEBUG] [Thread-185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:16:07.230 [DEBUG] [Thread-185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:16:07.230 [DEBUG] [Thread-185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:16:07.230 [DEBUG] [Thread-185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:16:07.230 [DEBUG] [Thread-185] [transport.py] [_log()] Compression: none
2025-11-25T14:16:07.230 [DEBUG] [Thread-185] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:16:07.247 [DEBUG] [Thread-185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:16:07.248 [DEBUG] [Thread-185] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:16:07.248 [DEBUG] [Thread-185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:16:07.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:16:07.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:16:07.250 [DEBUG] [Thread-185] [transport.py] [_log()] userauth is OK
2025-11-25T14:16:07.250 [DEBUG] [Thread-185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:16:07.251 [DEBUG] [Thread-185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:16:07.251 [DEBUG] [Thread-185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:16:07.251 [DEBUG] [Thread-185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:16:07.276 [INFO] [Thread-185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:16:07.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:16:07.930 [DEBUG] [Thread-185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:16:07.930 [DEBUG] [Thread-185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:16:07.931 [DEBUG] [Thread-185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:16:07.971 [DEBUG] [Thread-185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:16:07.971 [DEBUG] [Thread-185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:16:07.974 [DEBUG] [Thread-185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:16:07.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:16:07.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:16:07.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:16:07.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:16:07.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:16:07.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:16:07.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:16:07.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:16:07.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:16:07.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.510865 -999.00  +26.20   6.17     13   -3.80 1 1 1 1 1   888    0 29.30 -20.02 ----- 9.0 6.2 143.0 11.7 34.5 -30.6 34.3 -30.6 35.5 -29.6 36.1 -30.2
2025-11-25T14:16:07.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:16:07.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:16:07.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.510865
2025-11-25T14:16:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:16:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:16:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:16:07.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:16:07.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:16:07.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:15:54', tmtdew=35.35, humidity=8.84, cloud=0.0, wind=11.52, temperature=25.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:15:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:16:07.998 [DEBUG] [Thread-185] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:16:08.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:16:08.100 [DEBUG] [Thread-188] [transport.py] [_log()] starting thread (client mode): 0x7376ccd0
2025-11-25T14:16:08.100 [DEBUG] [Thread-188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:16:08.114 [DEBUG] [Thread-188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:16:08.114 [INFO] [Thread-188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:16:08.122 [DEBUG] [Thread-188] [transport.py] [_log()] client lang: <none>
2025-11-25T14:16:08.123 [DEBUG] [Thread-188] [transport.py] [_log()] server lang: <none>
2025-11-25T14:16:08.123 [DEBUG] [Thread-188] [transport.py] [_log()] kex follows: False
2025-11-25T14:16:08.123 [DEBUG] [Thread-188] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:16:08.123 [DEBUG] [Thread-188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:16:08.123 [DEBUG] [Thread-188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:16:08.123 [DEBUG] [Thread-188] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:16:08.123 [DEBUG] [Thread-188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:16:08.123 [DEBUG] [Thread-188] [transport.py] [_log()] Compression: none
2025-11-25T14:16:08.123 [DEBUG] [Thread-188] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:16:08.180 [DEBUG] [Thread-188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:16:08.181 [DEBUG] [Thread-188] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:16:08.182 [DEBUG] [Thread-188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:16:08.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:16:08.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:16:08.240 [DEBUG] [Thread-188] [transport.py] [_log()] userauth is OK
2025-11-25T14:16:08.240 [DEBUG] [Thread-188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:16:08.240 [DEBUG] [Thread-188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:16:08.240 [DEBUG] [Thread-188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:16:08.240 [DEBUG] [Thread-188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:16:08.258 [INFO] [Thread-188] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:16:08.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:16:08.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:16:08.948 [DEBUG] [Thread-188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:16:08.949 [DEBUG] [Thread-188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:16:08.997 [DEBUG] [Thread-188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:16:08.997 [DEBUG] [Thread-188] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:16:09.006 [DEBUG] [Thread-188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:16:09.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:16:09.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:16:09.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:16:09.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:16:09.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:16:09.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:16:09.042 [DEBUG] [Thread-188] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:16:17.622 [DEBUG] [Thread-190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:16:32.687 [DEBUG] [Thread-191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:16:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:16:39.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:16:39.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:16:39.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 16, 27), 35.56, 8.72, 0.0, 10.11, 25.46, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:16:39.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:16:27
2025-11-25T14:16:39.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:16:39.987 [DEBUG] [Thread-192] [transport.py] [_log()] starting thread (client mode): 0x737802e0
2025-11-25T14:16:39.988 [DEBUG] [Thread-192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:16:40.007 [DEBUG] [Thread-192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:16:40.007 [INFO] [Thread-192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] client lang: <none>
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] server lang: <none>
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] kex follows: False
2025-11-25T14:16:40.011 [DEBUG] [Thread-192] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:16:40.012 [DEBUG] [Thread-192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:16:40.012 [DEBUG] [Thread-192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:16:40.012 [DEBUG] [Thread-192] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:16:40.012 [DEBUG] [Thread-192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:16:40.012 [DEBUG] [Thread-192] [transport.py] [_log()] Compression: none
2025-11-25T14:16:40.012 [DEBUG] [Thread-192] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:16:40.032 [DEBUG] [Thread-192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:16:40.033 [DEBUG] [Thread-192] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:16:40.033 [DEBUG] [Thread-192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:16:40.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:16:40.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:16:40.035 [DEBUG] [Thread-192] [transport.py] [_log()] userauth is OK
2025-11-25T14:16:40.035 [DEBUG] [Thread-192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:16:40.035 [DEBUG] [Thread-192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:16:40.035 [DEBUG] [Thread-192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:16:40.035 [DEBUG] [Thread-192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:16:40.052 [INFO] [Thread-192] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:16:40.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:16:40.722 [DEBUG] [Thread-192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:16:40.722 [DEBUG] [Thread-192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:16:40.722 [DEBUG] [Thread-192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:16:40.763 [DEBUG] [Thread-192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:16:40.763 [DEBUG] [Thread-192] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:16:40.767 [DEBUG] [Thread-192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:16:40.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:16:40.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:16:40.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:16:40.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:16:40.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:16:40.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:16:40.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:16:40.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:16:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:16:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.511212 -999.00  +26.50   9.32     13   -3.70 1 1 1 1 1   888    0 29.29 -18.47 ----- 7.1 9.3 125.1 11.8 34.6 -30.4 34.3 -30.4 35.5 -30.0 36.2 -30.0
2025-11-25T14:16:40.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:16:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:16:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.511212
2025-11-25T14:16:40.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:16:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:16:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:16:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:16:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:16:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:16:27', tmtdew=35.56, humidity=8.72, cloud=0.0, wind=10.11, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:16:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:16:40.795 [DEBUG] [Thread-192] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:16:40.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:16:40.897 [DEBUG] [Thread-195] [transport.py] [_log()] starting thread (client mode): 0x73782e30
2025-11-25T14:16:40.898 [DEBUG] [Thread-195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:16:40.912 [DEBUG] [Thread-195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:16:40.912 [INFO] [Thread-195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:16:40.919 [DEBUG] [Thread-195] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:16:40.919 [DEBUG] [Thread-195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:16:40.919 [DEBUG] [Thread-195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:16:40.919 [DEBUG] [Thread-195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] client lang: <none>
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] server lang: <none>
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] kex follows: False
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] Compression: none
2025-11-25T14:16:40.920 [DEBUG] [Thread-195] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:16:40.977 [DEBUG] [Thread-195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:16:40.977 [DEBUG] [Thread-195] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:16:40.978 [DEBUG] [Thread-195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:16:40.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:16:40.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:16:41.034 [DEBUG] [Thread-195] [transport.py] [_log()] userauth is OK
2025-11-25T14:16:41.034 [DEBUG] [Thread-195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:16:41.035 [DEBUG] [Thread-195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:16:41.035 [DEBUG] [Thread-195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:16:41.035 [DEBUG] [Thread-195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:16:41.053 [INFO] [Thread-195] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:16:41.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:16:41.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:16:41.745 [DEBUG] [Thread-195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:16:41.745 [DEBUG] [Thread-195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:16:41.792 [DEBUG] [Thread-195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:16:41.793 [DEBUG] [Thread-195] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:16:41.802 [DEBUG] [Thread-195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:16:41.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:16:41.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:16:41.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:16:41.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:16:41.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:16:41.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:16:41.839 [DEBUG] [Thread-195] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:16:47.730 [DEBUG] [Thread-197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:16:50.517 [DEBUG] [Thread-198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:17:02.811 [DEBUG] [Thread-199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:17:11.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:17:11.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:17:11.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:17:12.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 16, 59), 35.49, 8.65, 0.0, 7.11, 25.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:17:12.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:16:59
2025-11-25T14:17:12.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:17:12.844 [DEBUG] [Thread-200] [transport.py] [_log()] starting thread (client mode): 0x737812a0
2025-11-25T14:17:12.844 [DEBUG] [Thread-200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:17:12.869 [DEBUG] [Thread-200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:17:12.869 [INFO] [Thread-200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:17:12.871 [DEBUG] [Thread-200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:17:12.872 [DEBUG] [Thread-200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:17:12.872 [DEBUG] [Thread-200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:17:12.872 [DEBUG] [Thread-200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:17:12.872 [DEBUG] [Thread-200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:17:12.872 [DEBUG] [Thread-200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:17:12.872 [DEBUG] [Thread-200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:17:12.872 [DEBUG] [Thread-200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:17:12.872 [DEBUG] [Thread-200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:17:12.872 [DEBUG] [Thread-200] [transport.py] [_log()] client lang: <none>
2025-11-25T14:17:12.873 [DEBUG] [Thread-200] [transport.py] [_log()] server lang: <none>
2025-11-25T14:17:12.873 [DEBUG] [Thread-200] [transport.py] [_log()] kex follows: False
2025-11-25T14:17:12.873 [DEBUG] [Thread-200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:17:12.873 [DEBUG] [Thread-200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:17:12.873 [DEBUG] [Thread-200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:17:12.873 [DEBUG] [Thread-200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:17:12.873 [DEBUG] [Thread-200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:17:12.873 [DEBUG] [Thread-200] [transport.py] [_log()] Compression: none
2025-11-25T14:17:12.874 [DEBUG] [Thread-200] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:17:12.889 [DEBUG] [Thread-200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:17:12.890 [DEBUG] [Thread-200] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:17:12.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:17:12.891 [DEBUG] [Thread-200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:17:12.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:17:12.894 [DEBUG] [Thread-200] [transport.py] [_log()] userauth is OK
2025-11-25T14:17:12.894 [DEBUG] [Thread-200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:17:12.894 [DEBUG] [Thread-200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:17:12.894 [DEBUG] [Thread-200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:17:12.894 [DEBUG] [Thread-200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:17:12.920 [INFO] [Thread-200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:17:12.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:17:13.560 [DEBUG] [Thread-200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:17:13.560 [DEBUG] [Thread-200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:17:13.561 [DEBUG] [Thread-200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:17:13.602 [DEBUG] [Thread-200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:17:13.602 [DEBUG] [Thread-200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:17:13.606 [DEBUG] [Thread-200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:17:13.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:17:13.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:17:13.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:17:13.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:17:13.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:17:13.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:17:13.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:17:13.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:17:13.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:17:13.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.511560 -999.00  +26.30  11.64     13   -3.90 1 1 1 1 1   888    0 29.54 -17.56 ----- 11.5 11.6 114.8 12.7 34.6 -32.3 34.3 -31.1 35.5 -30.5 36.2 -31.0
2025-11-25T14:17:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:17:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:17:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.511560
2025-11-25T14:17:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:17:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:17:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:17:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:17:13.632 [DEBUG] [Thread-200] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:17:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:17:13.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:16:59', tmtdew=35.49, humidity=8.65, cloud=0.0, wind=7.11, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:16:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:17:13.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:17:13.735 [DEBUG] [Thread-203] [transport.py] [_log()] starting thread (client mode): 0x7376d6c0
2025-11-25T14:17:13.735 [DEBUG] [Thread-203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:17:13.749 [DEBUG] [Thread-203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:17:13.750 [INFO] [Thread-203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:17:13.757 [DEBUG] [Thread-203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:17:13.757 [DEBUG] [Thread-203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:17:13.757 [DEBUG] [Thread-203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:17:13.757 [DEBUG] [Thread-203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:17:13.757 [DEBUG] [Thread-203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:17:13.757 [DEBUG] [Thread-203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] client lang: <none>
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] server lang: <none>
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] kex follows: False
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] Compression: none
2025-11-25T14:17:13.758 [DEBUG] [Thread-203] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:17:13.817 [DEBUG] [Thread-203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:17:13.817 [DEBUG] [Thread-203] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:17:13.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:17:13.819 [DEBUG] [Thread-203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:17:13.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:17:13.873 [DEBUG] [Thread-203] [transport.py] [_log()] userauth is OK
2025-11-25T14:17:13.873 [DEBUG] [Thread-203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:17:13.873 [DEBUG] [Thread-203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:17:13.873 [DEBUG] [Thread-203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:17:13.873 [DEBUG] [Thread-203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:17:13.898 [INFO] [Thread-203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:17:13.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:17:13.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:17:14.600 [DEBUG] [Thread-203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:17:14.600 [DEBUG] [Thread-203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:17:14.648 [DEBUG] [Thread-203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:17:14.648 [DEBUG] [Thread-203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:17:14.657 [DEBUG] [Thread-203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:17:14.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:17:14.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:17:14.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:17:14.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:17:14.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:17:14.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:17:14.693 [DEBUG] [Thread-203] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:17:17.855 [DEBUG] [Thread-205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:17:32.933 [DEBUG] [Thread-206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:17:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:17:44.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:17:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:17:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 17, 31), 35.62, 8.59, 0.0, 7.48, 25.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:17:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:17:31
2025-11-25T14:17:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:17:45.730 [DEBUG] [Thread-207] [transport.py] [_log()] starting thread (client mode): 0x7376f9d0
2025-11-25T14:17:45.730 [DEBUG] [Thread-207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:17:45.750 [DEBUG] [Thread-207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:17:45.750 [INFO] [Thread-207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:17:45.753 [DEBUG] [Thread-207] [transport.py] [_log()] client lang: <none>
2025-11-25T14:17:45.754 [DEBUG] [Thread-207] [transport.py] [_log()] server lang: <none>
2025-11-25T14:17:45.754 [DEBUG] [Thread-207] [transport.py] [_log()] kex follows: False
2025-11-25T14:17:45.754 [DEBUG] [Thread-207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:17:45.754 [DEBUG] [Thread-207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:17:45.754 [DEBUG] [Thread-207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:17:45.754 [DEBUG] [Thread-207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:17:45.754 [DEBUG] [Thread-207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:17:45.754 [DEBUG] [Thread-207] [transport.py] [_log()] Compression: none
2025-11-25T14:17:45.754 [DEBUG] [Thread-207] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:17:45.773 [DEBUG] [Thread-207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:17:45.773 [DEBUG] [Thread-207] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:17:45.774 [DEBUG] [Thread-207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:17:45.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:17:45.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:17:45.774 [DEBUG] [Thread-207] [transport.py] [_log()] userauth is OK
2025-11-25T14:17:45.775 [DEBUG] [Thread-207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:17:45.775 [DEBUG] [Thread-207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:17:45.775 [DEBUG] [Thread-207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:17:45.775 [DEBUG] [Thread-207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:17:45.786 [INFO] [Thread-207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:17:45.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:17:46.459 [DEBUG] [Thread-207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:17:46.459 [DEBUG] [Thread-207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:17:46.459 [DEBUG] [Thread-207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:17:46.500 [DEBUG] [Thread-207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:17:46.500 [DEBUG] [Thread-207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:17:46.502 [DEBUG] [Thread-207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:17:46.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:17:46.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:17:46.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:17:46.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:17:46.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:17:46.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:17:46.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:17:46.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.511907 -999.00  +26.20  12.63     13   -4.00 1 1 1 1 1   888    0 29.41 -17.44 ----- 8.8 12.6 104.0 16.9 34.4 -31.3 34.2 -30.5 35.5 -31.4 36.2 -32.1
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.511907
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:17:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:17:31', tmtdew=35.62, humidity=8.59, cloud=0.0, wind=7.48, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:17:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:17:46.522 [DEBUG] [Thread-207] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:17:46.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:17:46.616 [DEBUG] [Thread-210] [transport.py] [_log()] starting thread (client mode): 0x73782fe0
2025-11-25T14:17:46.616 [DEBUG] [Thread-210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:17:46.632 [DEBUG] [Thread-210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:17:46.632 [INFO] [Thread-210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] client lang: <none>
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] server lang: <none>
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] kex follows: False
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] Compression: none
2025-11-25T14:17:46.639 [DEBUG] [Thread-210] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:17:46.697 [DEBUG] [Thread-210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:17:46.697 [DEBUG] [Thread-210] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:17:46.698 [DEBUG] [Thread-210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:17:46.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:17:46.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:17:46.754 [DEBUG] [Thread-210] [transport.py] [_log()] userauth is OK
2025-11-25T14:17:46.754 [DEBUG] [Thread-210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:17:46.754 [DEBUG] [Thread-210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:17:46.754 [DEBUG] [Thread-210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:17:46.754 [DEBUG] [Thread-210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:17:46.768 [INFO] [Thread-210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:17:46.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:17:46.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:17:47.498 [DEBUG] [Thread-210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:17:47.499 [DEBUG] [Thread-210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:17:47.546 [DEBUG] [Thread-210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:17:47.546 [DEBUG] [Thread-210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:17:47.554 [DEBUG] [Thread-210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:17:47.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:17:47.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:17:47.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:17:47.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:17:47.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:17:47.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:17:47.587 [DEBUG] [Thread-210] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:17:47.972 [DEBUG] [Thread-212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:17:51.027 [DEBUG] [Thread-213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:18:03.040 [DEBUG] [Thread-214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:18:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:18:17.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:18:17.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:18:18.086 [DEBUG] [Thread-215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:18:18.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 18, 2), 35.75, 8.52, 0.0, 6.23, 25.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:18:18.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:18:02
2025-11-25T14:18:18.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:18:18.555 [DEBUG] [Thread-216] [transport.py] [_log()] starting thread (client mode): 0x73781cf0
2025-11-25T14:18:18.555 [DEBUG] [Thread-216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:18:18.577 [DEBUG] [Thread-216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:18:18.577 [INFO] [Thread-216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:18:18.580 [DEBUG] [Thread-216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:18:18.580 [DEBUG] [Thread-216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:18:18.581 [DEBUG] [Thread-216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:18:18.581 [DEBUG] [Thread-216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:18:18.581 [DEBUG] [Thread-216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:18:18.581 [DEBUG] [Thread-216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:18:18.581 [DEBUG] [Thread-216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:18:18.581 [DEBUG] [Thread-216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:18:18.581 [DEBUG] [Thread-216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:18:18.581 [DEBUG] [Thread-216] [transport.py] [_log()] client lang: <none>
2025-11-25T14:18:18.581 [DEBUG] [Thread-216] [transport.py] [_log()] server lang: <none>
2025-11-25T14:18:18.582 [DEBUG] [Thread-216] [transport.py] [_log()] kex follows: False
2025-11-25T14:18:18.582 [DEBUG] [Thread-216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:18:18.582 [DEBUG] [Thread-216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:18:18.582 [DEBUG] [Thread-216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:18:18.582 [DEBUG] [Thread-216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:18:18.582 [DEBUG] [Thread-216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:18:18.582 [DEBUG] [Thread-216] [transport.py] [_log()] Compression: none
2025-11-25T14:18:18.582 [DEBUG] [Thread-216] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:18:18.601 [DEBUG] [Thread-216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:18:18.602 [DEBUG] [Thread-216] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:18:18.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:18:18.603 [DEBUG] [Thread-216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:18:18.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:18:18.605 [DEBUG] [Thread-216] [transport.py] [_log()] userauth is OK
2025-11-25T14:18:18.605 [DEBUG] [Thread-216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:18:18.606 [DEBUG] [Thread-216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:18:18.606 [DEBUG] [Thread-216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:18:18.606 [DEBUG] [Thread-216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:18:18.630 [INFO] [Thread-216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:18:18.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:18:19.252 [DEBUG] [Thread-216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:18:19.253 [DEBUG] [Thread-216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:18:19.253 [DEBUG] [Thread-216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:18:19.294 [DEBUG] [Thread-216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:18:19.294 [DEBUG] [Thread-216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:18:19.298 [DEBUG] [Thread-216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:18:19.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:18:19.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:18:19.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:18:19.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:18:19.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:18:19.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:18:19.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:18:19.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:18:19.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:18:19.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.512254 -999.00  +26.00   9.47     13   -3.90 1 1 1 1 1   888    0 29.06 -16.23 ----- 7.5 9.5 100.2 15.5 34.2 -32.8 34.3 -30.5 35.6 -29.4 36.2 -30.6
2025-11-25T14:18:19.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:18:19.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:18:19.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.512254
2025-11-25T14:18:19.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:18:19.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:18:19.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:18:19.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:18:19.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:18:19.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:18:02', tmtdew=35.75, humidity=8.52, cloud=0.0, wind=6.23, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:17:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:18:19.324 [DEBUG] [Thread-216] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:18:19.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:18:19.426 [DEBUG] [Thread-219] [transport.py] [_log()] starting thread (client mode): 0x737823b0
2025-11-25T14:18:19.426 [DEBUG] [Thread-219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:18:19.440 [DEBUG] [Thread-219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:18:19.440 [INFO] [Thread-219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:18:19.448 [DEBUG] [Thread-219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] client lang: <none>
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] server lang: <none>
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] kex follows: False
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:18:19.449 [DEBUG] [Thread-219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:18:19.450 [DEBUG] [Thread-219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:18:19.450 [DEBUG] [Thread-219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:18:19.450 [DEBUG] [Thread-219] [transport.py] [_log()] Compression: none
2025-11-25T14:18:19.450 [DEBUG] [Thread-219] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:18:19.505 [DEBUG] [Thread-219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:18:19.505 [DEBUG] [Thread-219] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:18:19.506 [DEBUG] [Thread-219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:18:19.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:18:19.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:18:19.561 [DEBUG] [Thread-219] [transport.py] [_log()] userauth is OK
2025-11-25T14:18:19.562 [DEBUG] [Thread-219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:18:19.562 [DEBUG] [Thread-219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:18:19.562 [DEBUG] [Thread-219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:18:19.562 [DEBUG] [Thread-219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:18:19.581 [INFO] [Thread-219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:18:19.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:18:19.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:18:20.322 [DEBUG] [Thread-219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:18:20.322 [DEBUG] [Thread-219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:18:20.370 [DEBUG] [Thread-219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:18:20.370 [DEBUG] [Thread-219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:18:20.380 [DEBUG] [Thread-219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:18:20.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:18:20.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:18:20.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:18:20.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:18:20.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:18:20.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:18:20.419 [DEBUG] [Thread-219] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:18:33.125 [DEBUG] [Thread-221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:18:48.193 [DEBUG] [Thread-222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:18:50.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:18:50.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:18:50.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:18:51.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 18, 34), 36.03, 8.5, 0.0, 7.52, 25.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:18:51.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:18:34
2025-11-25T14:18:51.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:18:51.378 [DEBUG] [Thread-223] [transport.py] [_log()] starting thread (client mode): 0x7376d810
2025-11-25T14:18:51.378 [DEBUG] [Thread-223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:18:51.400 [DEBUG] [Thread-223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:18:51.400 [INFO] [Thread-223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:18:51.404 [DEBUG] [Thread-223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] client lang: <none>
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] server lang: <none>
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] kex follows: False
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:18:51.405 [DEBUG] [Thread-223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:18:51.406 [DEBUG] [Thread-223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:18:51.406 [DEBUG] [Thread-223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:18:51.406 [DEBUG] [Thread-223] [transport.py] [_log()] Compression: none
2025-11-25T14:18:51.406 [DEBUG] [Thread-223] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:18:51.415 [DEBUG] [Thread-223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:18:51.416 [DEBUG] [Thread-223] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:18:51.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:18:51.417 [DEBUG] [Thread-223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:18:51.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:18:51.419 [DEBUG] [Thread-223] [transport.py] [_log()] userauth is OK
2025-11-25T14:18:51.420 [DEBUG] [Thread-223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:18:51.420 [DEBUG] [Thread-223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:18:51.420 [DEBUG] [Thread-223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:18:51.420 [DEBUG] [Thread-223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:18:51.455 [INFO] [Thread-223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:18:51.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:18:51.759 [DEBUG] [Thread-225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:18:52.232 [DEBUG] [Thread-223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:18:52.233 [DEBUG] [Thread-223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:18:52.233 [DEBUG] [Thread-223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:18:52.274 [DEBUG] [Thread-223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:18:52.274 [DEBUG] [Thread-223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:18:52.277 [DEBUG] [Thread-223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:18:52.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:18:52.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:18:52.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:18:52.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:18:52.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:18:52.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:18:52.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:18:52.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:18:52.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:18:52.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.512602 -999.00  +26.00   9.51     13   -4.10 1 1 1 1 1   888    0 29.88 -14.62 ----- 8.6 9.5 133.2 12.3 34.4 -35.5 34.3 -30.9 35.6 -29.5 36.2 -30.8
2025-11-25T14:18:52.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:18:52.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:18:52.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.512602
2025-11-25T14:18:52.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:18:52.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:18:52.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:18:52.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:18:52.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:18:52.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:18:34', tmtdew=36.03, humidity=8.5, cloud=0.0, wind=7.52, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:18:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:18:52.304 [DEBUG] [Thread-223] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:18:52.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:18:52.411 [DEBUG] [Thread-227] [transport.py] [_log()] starting thread (client mode): 0x7376c370
2025-11-25T14:18:52.411 [DEBUG] [Thread-227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:18:52.425 [DEBUG] [Thread-227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:18:52.426 [INFO] [Thread-227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:18:52.433 [DEBUG] [Thread-227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:18:52.433 [DEBUG] [Thread-227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:18:52.433 [DEBUG] [Thread-227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:18:52.433 [DEBUG] [Thread-227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:18:52.433 [DEBUG] [Thread-227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] client lang: <none>
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] server lang: <none>
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] kex follows: False
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] Compression: none
2025-11-25T14:18:52.434 [DEBUG] [Thread-227] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:18:52.491 [DEBUG] [Thread-227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:18:52.492 [DEBUG] [Thread-227] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:18:52.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:18:52.493 [DEBUG] [Thread-227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:18:52.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:18:52.548 [DEBUG] [Thread-227] [transport.py] [_log()] userauth is OK
2025-11-25T14:18:52.548 [DEBUG] [Thread-227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:18:52.548 [DEBUG] [Thread-227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:18:52.548 [DEBUG] [Thread-227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:18:52.548 [DEBUG] [Thread-227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:18:52.567 [INFO] [Thread-227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14: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
2025-11-25T14:18:52.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:18:53.309 [DEBUG] [Thread-227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:18:53.310 [DEBUG] [Thread-227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:18:53.358 [DEBUG] [Thread-227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:18:53.358 [DEBUG] [Thread-227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:18:53.369 [DEBUG] [Thread-227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:18:53.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:18:53.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:18:53.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:18:53.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:18:53.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:18:53.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:18:53.406 [DEBUG] [Thread-227] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:19:03.236 [DEBUG] [Thread-229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:19:18.296 [DEBUG] [Thread-230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:19:23.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:19:23.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:19:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:19:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 19, 6), 35.99, 8.55, 0.0, 9.86, 25.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:19:24.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:19:06
2025-11-25T14:19:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:19:24.332 [DEBUG] [Thread-231] [transport.py] [_log()] starting thread (client mode): 0x73783850
2025-11-25T14:19:24.332 [DEBUG] [Thread-231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:19:24.353 [DEBUG] [Thread-231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:19:24.354 [INFO] [Thread-231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:19:24.356 [DEBUG] [Thread-231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:19:24.356 [DEBUG] [Thread-231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] client lang: <none>
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] server lang: <none>
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] kex follows: False
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] Compression: none
2025-11-25T14:19:24.357 [DEBUG] [Thread-231] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:19:24.376 [DEBUG] [Thread-231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:19:24.376 [DEBUG] [Thread-231] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:19:24.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:19:24.377 [DEBUG] [Thread-231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:19:24.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:19:24.379 [DEBUG] [Thread-231] [transport.py] [_log()] userauth is OK
2025-11-25T14:19:24.380 [DEBUG] [Thread-231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:19:24.380 [DEBUG] [Thread-231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:19:24.380 [DEBUG] [Thread-231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:19:24.380 [DEBUG] [Thread-231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:19:24.415 [INFO] [Thread-231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:19:24.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:19:25.076 [DEBUG] [Thread-231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:19:25.076 [DEBUG] [Thread-231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:19:25.076 [DEBUG] [Thread-231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:19:25.117 [DEBUG] [Thread-231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:19:25.117 [DEBUG] [Thread-231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:19:25.120 [DEBUG] [Thread-231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:19:25.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:19:25.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:19:25.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:19:25.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:19:25.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:19:25.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:19:25.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:19:25.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:19:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:19:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.512949 -999.00  +26.00   7.23     13   -4.00 1 1 1 1 1   888    0 29.84 -12.30 ----- 4.6 7.2 167.4 11.0 34.5 -30.8 34.3 -30.5 35.7 -29.3 36.2 -31.0
2025-11-25T14:19:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:19:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:19:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.512949
2025-11-25T14:19:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:19:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:19:25.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:19:25.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:19:25.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:19:25.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:19:06', tmtdew=35.99, humidity=8.55, cloud=0.0, wind=9.86, temperature=25.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:18:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:19:25.150 [DEBUG] [Thread-231] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:19:25.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:19:25.256 [DEBUG] [Thread-234] [transport.py] [_log()] starting thread (client mode): 0x73780730
2025-11-25T14:19:25.256 [DEBUG] [Thread-234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:19:25.271 [DEBUG] [Thread-234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:19:25.271 [INFO] [Thread-234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:19:25.279 [DEBUG] [Thread-234] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:19:25.279 [DEBUG] [Thread-234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:19:25.279 [DEBUG] [Thread-234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:19:25.279 [DEBUG] [Thread-234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:19:25.279 [DEBUG] [Thread-234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:19:25.279 [DEBUG] [Thread-234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:19:25.279 [DEBUG] [Thread-234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:19:25.279 [DEBUG] [Thread-234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:19:25.279 [DEBUG] [Thread-234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] client lang: <none>
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] server lang: <none>
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] kex follows: False
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] Compression: none
2025-11-25T14:19:25.280 [DEBUG] [Thread-234] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:19:25.338 [DEBUG] [Thread-234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:19:25.339 [DEBUG] [Thread-234] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:19:25.340 [DEBUG] [Thread-234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:19:25.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:19:25.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:19:25.398 [DEBUG] [Thread-234] [transport.py] [_log()] userauth is OK
2025-11-25T14:19:25.398 [DEBUG] [Thread-234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:19:25.398 [DEBUG] [Thread-234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:19:25.399 [DEBUG] [Thread-234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:19:25.399 [DEBUG] [Thread-234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:19:25.417 [INFO] [Thread-234] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:19:25.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:19:25.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:19:26.158 [DEBUG] [Thread-234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:19:26.159 [DEBUG] [Thread-234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:19:26.208 [DEBUG] [Thread-234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:19:26.208 [DEBUG] [Thread-234] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:19:26.217 [DEBUG] [Thread-234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:19:26.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:19:26.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:19:26.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:19:26.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:19:26.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:19:26.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:19:26.253 [DEBUG] [Thread-234] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:19:33.342 [DEBUG] [Thread-236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:19:48.408 [DEBUG] [Thread-237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:19:52.262 [DEBUG] [Thread-238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:19:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:19:56.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:19:56.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:19:56.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 19, 38), 36.13, 8.44, 0.0, 5.17, 25.85, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:19:56.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:19:38
2025-11-25T14:19:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:19:57.212 [DEBUG] [Thread-239] [transport.py] [_log()] starting thread (client mode): 0x7376f7f0
2025-11-25T14:19:57.212 [DEBUG] [Thread-239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:19:57.232 [DEBUG] [Thread-239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:19:57.232 [INFO] [Thread-239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:19:57.235 [DEBUG] [Thread-239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:19:57.236 [DEBUG] [Thread-239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:19:57.236 [DEBUG] [Thread-239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:19:57.236 [DEBUG] [Thread-239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:19:57.236 [DEBUG] [Thread-239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:19:57.236 [DEBUG] [Thread-239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:19:57.236 [DEBUG] [Thread-239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:19:57.236 [DEBUG] [Thread-239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:19:57.236 [DEBUG] [Thread-239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:19:57.237 [DEBUG] [Thread-239] [transport.py] [_log()] client lang: <none>
2025-11-25T14:19:57.237 [DEBUG] [Thread-239] [transport.py] [_log()] server lang: <none>
2025-11-25T14:19:57.237 [DEBUG] [Thread-239] [transport.py] [_log()] kex follows: False
2025-11-25T14:19:57.237 [DEBUG] [Thread-239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:19:57.237 [DEBUG] [Thread-239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:19:57.237 [DEBUG] [Thread-239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:19:57.237 [DEBUG] [Thread-239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:19:57.238 [DEBUG] [Thread-239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:19:57.238 [DEBUG] [Thread-239] [transport.py] [_log()] Compression: none
2025-11-25T14:19:57.238 [DEBUG] [Thread-239] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:19:57.255 [DEBUG] [Thread-239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:19:57.256 [DEBUG] [Thread-239] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:19:57.256 [DEBUG] [Thread-239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:19:57.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:19:57.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:19:57.297 [DEBUG] [Thread-239] [transport.py] [_log()] userauth is OK
2025-11-25T14:19:57.297 [DEBUG] [Thread-239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:19:57.297 [DEBUG] [Thread-239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:19:57.298 [DEBUG] [Thread-239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:19:57.298 [DEBUG] [Thread-239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:19:57.333 [INFO] [Thread-239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:19:57.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:19:58.138 [DEBUG] [Thread-239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:19:58.138 [DEBUG] [Thread-239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:19:58.138 [DEBUG] [Thread-239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:19:58.180 [DEBUG] [Thread-239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:19:58.180 [DEBUG] [Thread-239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:19:58.183 [DEBUG] [Thread-239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:19:58.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:19:58.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:19:58.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:19:58.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:19:58.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:19:58.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:19:58.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:19:58.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:19:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:19:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.513643 -999.00  +26.20   4.59     13   -4.00 1 1 1 1 1   888    0 29.36 -3.59 ----- 5.9 4.6 141.1 10.8 34.7 -30.6 34.5 -30.5 35.8 -30.0 36.4 -31.2
2025-11-25T14:19:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:19:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:19:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.513643
2025-11-25T14:19:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:19:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:19:58.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:19:58.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:19:58.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:19:58.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:19:38', tmtdew=36.13, humidity=8.44, cloud=0.0, wind=5.17, temperature=25.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:19:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:19:58.206 [DEBUG] [Thread-239] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:19:58.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:19:58.306 [DEBUG] [Thread-242] [transport.py] [_log()] starting thread (client mode): 0x73780850
2025-11-25T14:19:58.306 [DEBUG] [Thread-242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:19:58.321 [DEBUG] [Thread-242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:19:58.321 [INFO] [Thread-242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] client lang: <none>
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] server lang: <none>
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] kex follows: False
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:19:58.329 [DEBUG] [Thread-242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:19:58.330 [DEBUG] [Thread-242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:19:58.330 [DEBUG] [Thread-242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:19:58.330 [DEBUG] [Thread-242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:19:58.330 [DEBUG] [Thread-242] [transport.py] [_log()] Compression: none
2025-11-25T14:19:58.330 [DEBUG] [Thread-242] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:19:58.388 [DEBUG] [Thread-242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:19:58.389 [DEBUG] [Thread-242] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:19:58.389 [DEBUG] [Thread-242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:19:58.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:19:58.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:19:58.447 [DEBUG] [Thread-242] [transport.py] [_log()] userauth is OK
2025-11-25T14:19:58.447 [DEBUG] [Thread-242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:19:58.447 [DEBUG] [Thread-242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:19:58.447 [DEBUG] [Thread-242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:19:58.447 [DEBUG] [Thread-242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:19:58.466 [INFO] [Thread-242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:19:58.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:19:58.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:19:59.167 [DEBUG] [Thread-242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:19:59.167 [DEBUG] [Thread-242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:19:59.215 [DEBUG] [Thread-242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:19:59.215 [DEBUG] [Thread-242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:19:59.224 [DEBUG] [Thread-242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:19:59.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:19:59.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:19:59.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:19:59.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:19:59.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:19:59.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:19:59.258 [DEBUG] [Thread-242] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:20:03.451 [DEBUG] [Thread-244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:20:18.522 [DEBUG] [Thread-245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:20:29.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:20:29.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:20:29.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:20:29.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 20, 11), 36.07, 8.45, 0.0, 8.58, 25.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:20:29.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:20:11
2025-11-25T14:20:30.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:20:30.226 [DEBUG] [Thread-246] [transport.py] [_log()] starting thread (client mode): 0x7376dde0
2025-11-25T14:20:30.226 [DEBUG] [Thread-246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:20:30.245 [DEBUG] [Thread-246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:20:30.246 [INFO] [Thread-246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] client lang: <none>
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] server lang: <none>
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] kex follows: False
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:20:30.249 [DEBUG] [Thread-246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:20:30.250 [DEBUG] [Thread-246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:20:30.250 [DEBUG] [Thread-246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:20:30.250 [DEBUG] [Thread-246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:20:30.250 [DEBUG] [Thread-246] [transport.py] [_log()] Compression: none
2025-11-25T14:20:30.250 [DEBUG] [Thread-246] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:20:30.268 [DEBUG] [Thread-246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:20:30.269 [DEBUG] [Thread-246] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:20:30.269 [DEBUG] [Thread-246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:20:30.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:20:30.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:20:30.271 [DEBUG] [Thread-246] [transport.py] [_log()] userauth is OK
2025-11-25T14:20:30.272 [DEBUG] [Thread-246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:20:30.272 [DEBUG] [Thread-246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:20:30.272 [DEBUG] [Thread-246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:20:30.272 [DEBUG] [Thread-246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:20:30.290 [INFO] [Thread-246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:20:30.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:20:30.918 [DEBUG] [Thread-246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:20:30.918 [DEBUG] [Thread-246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:20:30.918 [DEBUG] [Thread-246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:20:30.959 [DEBUG] [Thread-246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:20:30.959 [DEBUG] [Thread-246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:20:30.963 [DEBUG] [Thread-246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:20:30.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:20:30.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:20:30.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:20:30.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:20:30.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:20:30.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:20:30.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:20:30.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:20:30.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:20:30.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.513990 -999.00  +26.30   5.21     13   -3.90 1 1 1 1 1   888    0 29.53 1.01 ----- 7.8 5.2 112.4 8.1 34.8 -30.6 34.5 -30.2 35.9 -28.8 36.5 -31.5
2025-11-25T14:20:30.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:20:30.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:20:30.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.513990
2025-11-25T14:20:30.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:20:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:20:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:20:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:20:30.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:20:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:20:11', tmtdew=36.07, humidity=8.45, cloud=0.0, wind=8.58, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:20:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:20:30.991 [DEBUG] [Thread-246] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:20:31.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:20:31.096 [DEBUG] [Thread-249] [transport.py] [_log()] starting thread (client mode): 0x73782ef0
2025-11-25T14:20:31.097 [DEBUG] [Thread-249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:20:31.111 [DEBUG] [Thread-249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:20:31.111 [INFO] [Thread-249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:20:31.119 [DEBUG] [Thread-249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:20:31.119 [DEBUG] [Thread-249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:20:31.119 [DEBUG] [Thread-249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:20:31.119 [DEBUG] [Thread-249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:20:31.119 [DEBUG] [Thread-249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:20:31.119 [DEBUG] [Thread-249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:20:31.119 [DEBUG] [Thread-249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:20:31.119 [DEBUG] [Thread-249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] client lang: <none>
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] server lang: <none>
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] kex follows: False
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] Compression: none
2025-11-25T14:20:31.120 [DEBUG] [Thread-249] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:20:31.176 [DEBUG] [Thread-249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:20:31.177 [DEBUG] [Thread-249] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:20:31.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:20:31.178 [DEBUG] [Thread-249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:20:31.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:20:31.232 [DEBUG] [Thread-249] [transport.py] [_log()] userauth is OK
2025-11-25T14:20:31.233 [DEBUG] [Thread-249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:20:31.233 [DEBUG] [Thread-249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:20:31.233 [DEBUG] [Thread-249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:20:31.233 [DEBUG] [Thread-249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:20:31.251 [INFO] [Thread-249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:20:31.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:20:31.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:20:31.978 [DEBUG] [Thread-249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:20:31.979 [DEBUG] [Thread-249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:20:32.028 [DEBUG] [Thread-249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:20:32.028 [DEBUG] [Thread-249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:20:32.039 [DEBUG] [Thread-249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:20:32.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:20:32.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:20:32.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:20:32.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:20:32.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:20:32.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:20:32.076 [DEBUG] [Thread-249] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:20:33.564 [DEBUG] [Thread-251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:20:48.630 [DEBUG] [Thread-252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:20:52.778 [DEBUG] [Thread-253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:21:02.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:21:02.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:21:02.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:21:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 20, 43), 36.21, 8.4, 0.0, 15.88, 26.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:21:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:20:43
2025-11-25T14:21:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:21:03.044 [DEBUG] [Thread-254] [transport.py] [_log()] starting thread (client mode): 0x7374c2e0
2025-11-25T14:21:03.044 [DEBUG] [Thread-254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:21:03.065 [DEBUG] [Thread-254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:21:03.066 [INFO] [Thread-254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] client lang: <none>
2025-11-25T14:21:03.069 [DEBUG] [Thread-254] [transport.py] [_log()] server lang: <none>
2025-11-25T14:21:03.070 [DEBUG] [Thread-254] [transport.py] [_log()] kex follows: False
2025-11-25T14:21:03.070 [DEBUG] [Thread-254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:21:03.070 [DEBUG] [Thread-254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:21:03.070 [DEBUG] [Thread-254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:21:03.070 [DEBUG] [Thread-254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:21:03.070 [DEBUG] [Thread-254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:21:03.070 [DEBUG] [Thread-254] [transport.py] [_log()] Compression: none
2025-11-25T14:21:03.070 [DEBUG] [Thread-254] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:21:03.090 [DEBUG] [Thread-254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:21:03.091 [DEBUG] [Thread-254] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:21:03.092 [DEBUG] [Thread-254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:21:03.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:21:03.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:21:03.094 [DEBUG] [Thread-254] [transport.py] [_log()] userauth is OK
2025-11-25T14:21:03.094 [DEBUG] [Thread-254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:21:03.094 [DEBUG] [Thread-254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:21:03.094 [DEBUG] [Thread-254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:21:03.094 [DEBUG] [Thread-254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:21:03.115 [INFO] [Thread-254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:21:03.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:21:03.674 [DEBUG] [Thread-256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:21:03.916 [DEBUG] [Thread-254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:21:03.916 [DEBUG] [Thread-254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:21:03.916 [DEBUG] [Thread-254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:21:03.956 [DEBUG] [Thread-254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:21:03.956 [DEBUG] [Thread-254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:21:03.959 [DEBUG] [Thread-254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:21:03.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:21:03.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:21:03.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:21:03.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:21:03.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:21:03.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:21:03.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:21:03.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:21:03.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:21:03.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.514337 -999.00  +26.40   8.96     13   -4.00 1 1 1 1 1   888    0 30.44 5.96 ----- 12.3 9.0 106.5 12.6 34.8 -33.5 34.6 -30.5 36.0 -28.8 36.8 -30.4
2025-11-25T14:21:03.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:21:03.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:21:03.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.514337
2025-11-25T14:21:03.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:21:03.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:21:03.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:21:03.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:21:03.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:21:03.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:20:43', tmtdew=36.21, humidity=8.4, cloud=0.0, wind=15.88, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:20:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:21:03.999 [DEBUG] [Thread-254] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:21:04.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:21:04.102 [DEBUG] [Thread-258] [transport.py] [_log()] starting thread (client mode): 0x7374f970
2025-11-25T14:21:04.102 [DEBUG] [Thread-258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:21:04.117 [DEBUG] [Thread-258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:21:04.117 [INFO] [Thread-258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:21:04.124 [DEBUG] [Thread-258] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] client lang: <none>
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] server lang: <none>
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] kex follows: False
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:21:04.125 [DEBUG] [Thread-258] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:21:04.126 [DEBUG] [Thread-258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:21:04.126 [DEBUG] [Thread-258] [transport.py] [_log()] Compression: none
2025-11-25T14:21:04.126 [DEBUG] [Thread-258] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:21:04.185 [DEBUG] [Thread-258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:21:04.186 [DEBUG] [Thread-258] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:21:04.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:21:04.187 [DEBUG] [Thread-258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:21:04.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:21:04.241 [DEBUG] [Thread-258] [transport.py] [_log()] userauth is OK
2025-11-25T14:21:04.241 [DEBUG] [Thread-258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:21:04.241 [DEBUG] [Thread-258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:21:04.241 [DEBUG] [Thread-258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:21:04.241 [DEBUG] [Thread-258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:21:04.261 [INFO] [Thread-258] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:21:04.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:21:04.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:21:04.997 [DEBUG] [Thread-258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:21:04.997 [DEBUG] [Thread-258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:21:05.045 [DEBUG] [Thread-258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:21:05.045 [DEBUG] [Thread-258] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:21:05.054 [DEBUG] [Thread-258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:21:05.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:21:05.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:21:05.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:21:05.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:21:05.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:21:05.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:21:05.092 [DEBUG] [Thread-258] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:21:18.721 [DEBUG] [Thread-260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:21:33.789 [DEBUG] [Thread-261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:21:35.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:21:35.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:21:35.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:21:35.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 21, 15), 36.22, 8.42, 0.0, 11.61, 26.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:21:35.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:21:15
2025-11-25T14:21:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:21:36.092 [DEBUG] [Thread-262] [transport.py] [_log()] starting thread (client mode): 0x73783a60
2025-11-25T14:21:36.092 [DEBUG] [Thread-262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:21:36.112 [DEBUG] [Thread-262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:21:36.112 [INFO] [Thread-262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:21:36.115 [DEBUG] [Thread-262] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:21:36.115 [DEBUG] [Thread-262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] client lang: <none>
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] server lang: <none>
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] kex follows: False
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:21:36.116 [DEBUG] [Thread-262] [transport.py] [_log()] Compression: none
2025-11-25T14:21:36.117 [DEBUG] [Thread-262] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:21:36.135 [DEBUG] [Thread-262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:21:36.136 [DEBUG] [Thread-262] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:21:36.136 [DEBUG] [Thread-262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:21:36.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:21:36.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:21:36.139 [DEBUG] [Thread-262] [transport.py] [_log()] userauth is OK
2025-11-25T14:21:36.139 [DEBUG] [Thread-262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:21:36.139 [DEBUG] [Thread-262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:21:36.139 [DEBUG] [Thread-262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:21:36.139 [DEBUG] [Thread-262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:21:36.172 [INFO] [Thread-262] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:21:36.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:21:36.844 [DEBUG] [Thread-262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:21:36.845 [DEBUG] [Thread-262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:21:36.845 [DEBUG] [Thread-262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:21:36.886 [DEBUG] [Thread-262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:21:36.886 [DEBUG] [Thread-262] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:21:36.890 [DEBUG] [Thread-262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:21:36.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:21:36.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:21:36.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:21:36.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:21:36.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:21:36.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:21:36.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:21:36.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:21:36.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:21:36.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.514685 -999.00  +26.50  12.04     13   -3.80 1 1 1 1 1   888    0 29.90 10.61 ----- 12.0 12.0 105.6 16.3 34.8 -31.3 34.7 -30.2 36.0 -29.9 36.8 -30.4
2025-11-25T14:21:36.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:21:36.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:21:36.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.514685
2025-11-25T14:21:36.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:21:36.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:21:36.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:21:36.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:21:36.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:21:36.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:21:15', tmtdew=36.22, humidity=8.42, cloud=0.0, wind=11.61, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:21:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:21:36.919 [DEBUG] [Thread-262] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:21:37.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:21:37.022 [DEBUG] [Thread-265] [transport.py] [_log()] starting thread (client mode): 0x73783190
2025-11-25T14:21:37.022 [DEBUG] [Thread-265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:21:37.036 [DEBUG] [Thread-265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:21:37.036 [INFO] [Thread-265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:21:37.044 [DEBUG] [Thread-265] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:21:37.044 [DEBUG] [Thread-265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:21:37.044 [DEBUG] [Thread-265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:21:37.044 [DEBUG] [Thread-265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:21:37.044 [DEBUG] [Thread-265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:21:37.045 [DEBUG] [Thread-265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:21:37.045 [DEBUG] [Thread-265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:21:37.045 [DEBUG] [Thread-265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:21:37.045 [DEBUG] [Thread-265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:21:37.045 [DEBUG] [Thread-265] [transport.py] [_log()] client lang: <none>
2025-11-25T14:21:37.045 [DEBUG] [Thread-265] [transport.py] [_log()] server lang: <none>
2025-11-25T14:21:37.045 [DEBUG] [Thread-265] [transport.py] [_log()] kex follows: False
2025-11-25T14:21:37.045 [DEBUG] [Thread-265] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:21:37.045 [DEBUG] [Thread-265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:21:37.046 [DEBUG] [Thread-265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:21:37.046 [DEBUG] [Thread-265] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:21:37.046 [DEBUG] [Thread-265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:21:37.046 [DEBUG] [Thread-265] [transport.py] [_log()] Compression: none
2025-11-25T14:21:37.046 [DEBUG] [Thread-265] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:21:37.102 [DEBUG] [Thread-265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:21:37.103 [DEBUG] [Thread-265] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:21:37.104 [DEBUG] [Thread-265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:21:37.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:21:37.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:21:37.158 [DEBUG] [Thread-265] [transport.py] [_log()] userauth is OK
2025-11-25T14:21:37.158 [DEBUG] [Thread-265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:21:37.158 [DEBUG] [Thread-265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:21:37.159 [DEBUG] [Thread-265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:21:37.159 [DEBUG] [Thread-265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:21:37.178 [INFO] [Thread-265] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:21:37.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:21:37.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:21:37.880 [DEBUG] [Thread-265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:21:37.880 [DEBUG] [Thread-265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:21:37.929 [DEBUG] [Thread-265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:21:37.929 [DEBUG] [Thread-265] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:21:37.938 [DEBUG] [Thread-265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:21:37.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:21:37.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:21:37.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:21:37.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:21:37.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:21:37.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:21:37.975 [DEBUG] [Thread-265] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:21:48.828 [DEBUG] [Thread-267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:21:53.516 [DEBUG] [Thread-268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:22:03.883 [DEBUG] [Thread-269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:22:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:22:07.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:22:07.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:22:08.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 21, 47), 37.15, 8.16, 0.0, 15.84, 26.91, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:22:08.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:21:47
2025-11-25T14:22:08.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:22:08.984 [DEBUG] [Thread-270] [transport.py] [_log()] starting thread (client mode): 0x7374f010
2025-11-25T14:22:08.984 [DEBUG] [Thread-270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:22:09.006 [DEBUG] [Thread-270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:22:09.006 [INFO] [Thread-270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:22:09.009 [DEBUG] [Thread-270] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:22:09.009 [DEBUG] [Thread-270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:22:09.009 [DEBUG] [Thread-270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:22:09.009 [DEBUG] [Thread-270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:22:09.009 [DEBUG] [Thread-270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:22:09.009 [DEBUG] [Thread-270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:22:09.009 [DEBUG] [Thread-270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:22:09.009 [DEBUG] [Thread-270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] client lang: <none>
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] server lang: <none>
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] kex follows: False
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] Compression: none
2025-11-25T14:22:09.010 [DEBUG] [Thread-270] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:22:09.025 [DEBUG] [Thread-270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:22:09.025 [DEBUG] [Thread-270] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:22:09.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:22:09.025 [DEBUG] [Thread-270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:22:09.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:22:09.026 [DEBUG] [Thread-270] [transport.py] [_log()] userauth is OK
2025-11-25T14:22:09.026 [DEBUG] [Thread-270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:22:09.026 [DEBUG] [Thread-270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:22:09.026 [DEBUG] [Thread-270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:22:09.026 [DEBUG] [Thread-270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:22:09.040 [INFO] [Thread-270] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:22:09.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:22:09.836 [DEBUG] [Thread-270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:22:09.836 [DEBUG] [Thread-270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:22:09.837 [DEBUG] [Thread-270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:22:09.877 [DEBUG] [Thread-270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:22:09.877 [DEBUG] [Thread-270] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:22:09.879 [DEBUG] [Thread-270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:22:09.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:22:09.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:22:09.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:22:09.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:22:09.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:22:09.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:22:09.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.515032 -999.00  +26.60   7.25     13   -3.90 1 1 1 1 1   888    0 30.11 14.92 ----- 6.2 7.2 91.9 13.0 34.8 -36.9 34.8 -30.2 36.0 -30.5 36.8 -31.1
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.515032
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:22:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:21:47', tmtdew=37.15, humidity=8.16, cloud=0.0, wind=15.84, temperature=26.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:21:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:22:09.897 [DEBUG] [Thread-270] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:22:09.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:22:09.988 [DEBUG] [Thread-273] [transport.py] [_log()] starting thread (client mode): 0x7374d3c0
2025-11-25T14:22:09.989 [DEBUG] [Thread-273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:22:10.003 [DEBUG] [Thread-273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:22:10.003 [INFO] [Thread-273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] client lang: <none>
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] server lang: <none>
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] kex follows: False
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] Compression: none
2025-11-25T14:22:10.010 [DEBUG] [Thread-273] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:22:10.065 [DEBUG] [Thread-273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:22:10.065 [DEBUG] [Thread-273] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:22:10.065 [DEBUG] [Thread-273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:22:10.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:22:10.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:22:10.122 [DEBUG] [Thread-273] [transport.py] [_log()] userauth is OK
2025-11-25T14:22:10.122 [DEBUG] [Thread-273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:22:10.122 [DEBUG] [Thread-273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:22:10.122 [DEBUG] [Thread-273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:22:10.122 [DEBUG] [Thread-273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:22:10.137 [INFO] [Thread-273] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:22:10.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:22:10.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:22:10.849 [DEBUG] [Thread-273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:22:10.849 [DEBUG] [Thread-273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:22:10.900 [DEBUG] [Thread-273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:22:10.900 [DEBUG] [Thread-273] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:22:10.912 [DEBUG] [Thread-273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:22:10.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:22:10.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:22:10.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:22:10.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:22:10.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:22:10.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:22:10.957 [DEBUG] [Thread-273] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:22:18.925 [DEBUG] [Thread-275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:22:33.992 [DEBUG] [Thread-276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:22:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:22:40.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:22:40.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:22:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 22, 19), 37.25, 8.11, 0.0, 15.37, 27.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:22:41.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:22:19
2025-11-25T14:22:41.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:22:41.938 [DEBUG] [Thread-277] [transport.py] [_log()] starting thread (client mode): 0x7374f5b0
2025-11-25T14:22:41.938 [DEBUG] [Thread-277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:22:41.957 [DEBUG] [Thread-277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:22:41.958 [INFO] [Thread-277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] client lang: <none>
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] server lang: <none>
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] kex follows: False
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:22:41.961 [DEBUG] [Thread-277] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:22:41.962 [DEBUG] [Thread-277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:22:41.962 [DEBUG] [Thread-277] [transport.py] [_log()] Compression: none
2025-11-25T14:22:41.962 [DEBUG] [Thread-277] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:22:41.980 [DEBUG] [Thread-277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:22:41.980 [DEBUG] [Thread-277] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:22:41.981 [DEBUG] [Thread-277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:22:41.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:22:41.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:22:42.023 [DEBUG] [Thread-277] [transport.py] [_log()] userauth is OK
2025-11-25T14:22:42.023 [DEBUG] [Thread-277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:22:42.024 [DEBUG] [Thread-277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:22:42.024 [DEBUG] [Thread-277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:22:42.024 [DEBUG] [Thread-277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:22:42.061 [INFO] [Thread-277] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:22:42.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:22:42.703 [DEBUG] [Thread-277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:22:42.703 [DEBUG] [Thread-277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:22:42.704 [DEBUG] [Thread-277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:22:42.744 [DEBUG] [Thread-277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:22:42.744 [DEBUG] [Thread-277] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:22:42.747 [DEBUG] [Thread-277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:22:42.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:22:42.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:22:42.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:22:42.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:22:42.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:22:42.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:22:42.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:22:42.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:22:42.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:22:42.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.515379 -999.00  +26.60   7.57     13   -3.90 1 1 1 1 1   888    0 30.61 20.70 ----- 9.5 7.6 66.2 11.8 34.9 -30.9 34.8 -31.2 36.2 -29.0 36.9 -30.5
2025-11-25T14:22:42.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:22:42.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:22:42.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.515379
2025-11-25T14:22:42.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:22:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:22:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:22:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:22:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:22:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:22:19', tmtdew=37.25, humidity=8.11, cloud=0.0, wind=15.37, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:22:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:22:42.779 [DEBUG] [Thread-277] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:22:42.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:22:42.880 [DEBUG] [Thread-280] [transport.py] [_log()] starting thread (client mode): 0x761d93f0
2025-11-25T14:22:42.880 [DEBUG] [Thread-280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:22:42.895 [DEBUG] [Thread-280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:22:42.895 [INFO] [Thread-280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:22:42.902 [DEBUG] [Thread-280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] client lang: <none>
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] server lang: <none>
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] kex follows: False
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:22:42.903 [DEBUG] [Thread-280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:22:42.904 [DEBUG] [Thread-280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:22:42.904 [DEBUG] [Thread-280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:22:42.904 [DEBUG] [Thread-280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:22:42.904 [DEBUG] [Thread-280] [transport.py] [_log()] Compression: none
2025-11-25T14:22:42.904 [DEBUG] [Thread-280] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:22:42.964 [DEBUG] [Thread-280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:22:42.964 [DEBUG] [Thread-280] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:22:42.965 [DEBUG] [Thread-280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:22:42.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:22:42.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:22:43.020 [DEBUG] [Thread-280] [transport.py] [_log()] userauth is OK
2025-11-25T14:22:43.021 [DEBUG] [Thread-280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:22:43.021 [DEBUG] [Thread-280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:22:43.021 [DEBUG] [Thread-280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:22:43.021 [DEBUG] [Thread-280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:22:43.040 [INFO] [Thread-280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:22:43.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:22:43.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:22:43.763 [DEBUG] [Thread-280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:22:43.763 [DEBUG] [Thread-280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:22:43.811 [DEBUG] [Thread-280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:22:43.811 [DEBUG] [Thread-280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:22:43.819 [DEBUG] [Thread-280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:22:43.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:22:43.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:22:43.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:22:43.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:22:43.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:22:43.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:22:43.852 [DEBUG] [Thread-280] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:22:49.034 [DEBUG] [Thread-282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:22:54.039 [DEBUG] [Thread-283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:23:04.090 [DEBUG] [Thread-284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:23:13.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:23:13.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:23:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:23:14.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 22, 51), 37.5, 7.59, 0.0, 16.32, 27.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:23:14.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:22:51
2025-11-25T14:23:14.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:23:14.801 [DEBUG] [Thread-285] [transport.py] [_log()] starting thread (client mode): 0x73780f40
2025-11-25T14:23:14.801 [DEBUG] [Thread-285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:23:14.821 [DEBUG] [Thread-285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:23:14.822 [INFO] [Thread-285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] client lang: <none>
2025-11-25T14:23:14.824 [DEBUG] [Thread-285] [transport.py] [_log()] server lang: <none>
2025-11-25T14:23:14.825 [DEBUG] [Thread-285] [transport.py] [_log()] kex follows: False
2025-11-25T14:23:14.825 [DEBUG] [Thread-285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:23:14.825 [DEBUG] [Thread-285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:23:14.825 [DEBUG] [Thread-285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:23:14.825 [DEBUG] [Thread-285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:23:14.825 [DEBUG] [Thread-285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:23:14.825 [DEBUG] [Thread-285] [transport.py] [_log()] Compression: none
2025-11-25T14:23:14.825 [DEBUG] [Thread-285] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:23:14.846 [DEBUG] [Thread-285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:23:14.847 [DEBUG] [Thread-285] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:23:14.847 [DEBUG] [Thread-285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:23:14.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:23:14.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:23:14.849 [DEBUG] [Thread-285] [transport.py] [_log()] userauth is OK
2025-11-25T14:23:14.850 [DEBUG] [Thread-285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:23:14.850 [DEBUG] [Thread-285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:23:14.850 [DEBUG] [Thread-285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:23:14.850 [DEBUG] [Thread-285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:23:14.869 [INFO] [Thread-285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:23:14.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:23:15.671 [DEBUG] [Thread-285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:23:15.672 [DEBUG] [Thread-285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:23:15.672 [DEBUG] [Thread-285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:23:15.713 [DEBUG] [Thread-285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:23:15.713 [DEBUG] [Thread-285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:23:15.716 [DEBUG] [Thread-285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:23:15.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:23:15.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:23:15.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:23:15.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:23:15.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:23:15.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:23:15.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:23:15.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:23:15.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:23:15.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.515726 -999.00  +26.80  16.03     13   -3.80 1 1 1 1 1   888    0 30.73 25.34 ----- 11.9 16.0 69.7 24.9 35.0 -30.8 34.8 -31.8 36.0 -31.6 36.9 -30.6
2025-11-25T14:23:15.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:23:15.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:23:15.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.515726
2025-11-25T14:23:15.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:23:15.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:23:15.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:23:15.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:23:15.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:23:15.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:22:51', tmtdew=37.5, humidity=7.59, cloud=0.0, wind=16.32, temperature=27.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:22:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:23:15.744 [DEBUG] [Thread-285] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:23:15.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:23:15.846 [DEBUG] [Thread-288] [transport.py] [_log()] starting thread (client mode): 0x7374f040
2025-11-25T14:23:15.846 [DEBUG] [Thread-288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:23:15.860 [DEBUG] [Thread-288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:23:15.860 [INFO] [Thread-288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:23:15.868 [DEBUG] [Thread-288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:23:15.868 [DEBUG] [Thread-288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:23:15.868 [DEBUG] [Thread-288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:23:15.869 [DEBUG] [Thread-288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:23:15.869 [DEBUG] [Thread-288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:23:15.869 [DEBUG] [Thread-288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:23:15.869 [DEBUG] [Thread-288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:23:15.869 [DEBUG] [Thread-288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:23:15.869 [DEBUG] [Thread-288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:23:15.869 [DEBUG] [Thread-288] [transport.py] [_log()] client lang: <none>
2025-11-25T14:23:15.870 [DEBUG] [Thread-288] [transport.py] [_log()] server lang: <none>
2025-11-25T14:23:15.870 [DEBUG] [Thread-288] [transport.py] [_log()] kex follows: False
2025-11-25T14:23:15.870 [DEBUG] [Thread-288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:23:15.870 [DEBUG] [Thread-288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:23:15.870 [DEBUG] [Thread-288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:23:15.870 [DEBUG] [Thread-288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:23:15.870 [DEBUG] [Thread-288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:23:15.870 [DEBUG] [Thread-288] [transport.py] [_log()] Compression: none
2025-11-25T14:23:15.870 [DEBUG] [Thread-288] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:23:15.929 [DEBUG] [Thread-288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:23:15.929 [DEBUG] [Thread-288] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:23:15.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:23:15.930 [DEBUG] [Thread-288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:23:15.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:23:15.984 [DEBUG] [Thread-288] [transport.py] [_log()] userauth is OK
2025-11-25T14:23:15.985 [DEBUG] [Thread-288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:23:15.985 [DEBUG] [Thread-288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:23:15.985 [DEBUG] [Thread-288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:23:15.985 [DEBUG] [Thread-288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:23:16.009 [INFO] [Thread-288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:23:16.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:23:16.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:23:16.734 [DEBUG] [Thread-288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:23:16.734 [DEBUG] [Thread-288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:23:16.782 [DEBUG] [Thread-288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:23:16.782 [DEBUG] [Thread-288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:23:16.791 [DEBUG] [Thread-288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:23:16.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:23:16.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:23:16.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:23:16.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:23:16.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:23:16.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:23:16.828 [DEBUG] [Thread-288] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:23:19.137 [DEBUG] [Thread-290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:23:34.206 [DEBUG] [Thread-291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:23:46.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:23:46.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:23:46.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:23:47.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 23, 23), 37.76, 7.46, 0.0, 13.43, 27.26, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:23:47.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:23:23
2025-11-25T14:23:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:23:47.766 [DEBUG] [Thread-292] [transport.py] [_log()] starting thread (client mode): 0x761d96f0
2025-11-25T14:23:47.767 [DEBUG] [Thread-292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:23:47.787 [DEBUG] [Thread-292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:23:47.787 [INFO] [Thread-292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:23:47.790 [DEBUG] [Thread-292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:23:47.790 [DEBUG] [Thread-292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:23:47.790 [DEBUG] [Thread-292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:23:47.790 [DEBUG] [Thread-292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] client lang: <none>
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] server lang: <none>
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] kex follows: False
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] Compression: none
2025-11-25T14:23:47.791 [DEBUG] [Thread-292] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:23:47.811 [DEBUG] [Thread-292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:23:47.811 [DEBUG] [Thread-292] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:23:47.811 [DEBUG] [Thread-292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:23:47.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:23:47.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:23:47.812 [DEBUG] [Thread-292] [transport.py] [_log()] userauth is OK
2025-11-25T14:23:47.812 [DEBUG] [Thread-292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:23:47.812 [DEBUG] [Thread-292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:23:47.812 [DEBUG] [Thread-292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:23:47.812 [DEBUG] [Thread-292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:23:47.842 [INFO] [Thread-292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:23:47.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:23:48.486 [DEBUG] [Thread-292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:23:48.486 [DEBUG] [Thread-292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:23:48.487 [DEBUG] [Thread-292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:23:48.528 [DEBUG] [Thread-292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:23:48.528 [DEBUG] [Thread-292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:23:48.532 [DEBUG] [Thread-292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:23:48.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:23:48.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:23:48.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:23:48.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:23:48.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:23:48.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:23:48.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:23:48.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:23:48.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:23:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.516073 -999.00  +27.00  13.23     12   -3.90 1 1 1 1 1   888    0 30.57 28.87 ----- 16.6 13.2 93.0 22.2 34.8 -35.5 34.8 -31.7 36.0 -29.9 36.8 -31.7
2025-11-25T14:23:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:23:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:23:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.516073
2025-11-25T14:23:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:23:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:23:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:23:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:23:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:23:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:23:23', tmtdew=37.76, humidity=7.46, cloud=0.0, wind=13.43, temperature=27.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:23:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:23:48.553 [DEBUG] [Thread-292] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:23:48.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:23:48.655 [DEBUG] [Thread-295] [transport.py] [_log()] starting thread (client mode): 0x761dbdc0
2025-11-25T14:23:48.656 [DEBUG] [Thread-295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:23:48.672 [DEBUG] [Thread-295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:23:48.673 [INFO] [Thread-295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:23:48.680 [DEBUG] [Thread-295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:23:48.680 [DEBUG] [Thread-295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] client lang: <none>
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] server lang: <none>
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] kex follows: False
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:23:48.681 [DEBUG] [Thread-295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:23:48.682 [DEBUG] [Thread-295] [transport.py] [_log()] Compression: none
2025-11-25T14:23:48.682 [DEBUG] [Thread-295] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:23:48.742 [DEBUG] [Thread-295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:23:48.743 [DEBUG] [Thread-295] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:23:48.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:23:48.744 [DEBUG] [Thread-295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:23:48.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:23:48.802 [DEBUG] [Thread-295] [transport.py] [_log()] userauth is OK
2025-11-25T14:23:48.802 [DEBUG] [Thread-295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:23:48.802 [DEBUG] [Thread-295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:23:48.802 [DEBUG] [Thread-295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:23:48.802 [DEBUG] [Thread-295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:23:48.831 [INFO] [Thread-295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:23:48.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:23:48.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:23:49.257 [DEBUG] [Thread-297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:23:49.562 [DEBUG] [Thread-295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:23:49.562 [DEBUG] [Thread-295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:23:49.611 [DEBUG] [Thread-295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:23:49.611 [DEBUG] [Thread-295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:23:49.620 [DEBUG] [Thread-295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:23:49.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:23:49.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:23:49.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:23:49.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:23:49.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:23:49.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:23:49.659 [DEBUG] [Thread-295] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:23:54.775 [DEBUG] [Thread-298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:24:04.320 [DEBUG] [Thread-299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:24:19.360 [DEBUG] [Thread-300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:24:19.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:24:19.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:24:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:24:20.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 23, 55), 37.88, 7.46, 0.0, 15.0, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:24:20.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:23:55
2025-11-25T14:24:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:24:20.640 [DEBUG] [Thread-301] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-25T14:24:20.640 [DEBUG] [Thread-301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:24:20.659 [DEBUG] [Thread-301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:24:20.660 [INFO] [Thread-301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:24:20.663 [DEBUG] [Thread-301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:24:20.663 [DEBUG] [Thread-301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:24:20.663 [DEBUG] [Thread-301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:24:20.663 [DEBUG] [Thread-301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:24:20.663 [DEBUG] [Thread-301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:24:20.663 [DEBUG] [Thread-301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:24:20.663 [DEBUG] [Thread-301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:24:20.664 [DEBUG] [Thread-301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:24:20.664 [DEBUG] [Thread-301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:24:20.664 [DEBUG] [Thread-301] [transport.py] [_log()] client lang: <none>
2025-11-25T14:24:20.664 [DEBUG] [Thread-301] [transport.py] [_log()] server lang: <none>
2025-11-25T14:24:20.664 [DEBUG] [Thread-301] [transport.py] [_log()] kex follows: False
2025-11-25T14:24:20.664 [DEBUG] [Thread-301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:24:20.664 [DEBUG] [Thread-301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:24:20.664 [DEBUG] [Thread-301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:24:20.664 [DEBUG] [Thread-301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:24:20.665 [DEBUG] [Thread-301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:24:20.665 [DEBUG] [Thread-301] [transport.py] [_log()] Compression: none
2025-11-25T14:24:20.665 [DEBUG] [Thread-301] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:24:20.683 [DEBUG] [Thread-301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:24:20.683 [DEBUG] [Thread-301] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:24:20.684 [DEBUG] [Thread-301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:24:20.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:24:20.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:24:20.685 [DEBUG] [Thread-301] [transport.py] [_log()] userauth is OK
2025-11-25T14:24:20.686 [DEBUG] [Thread-301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:24:20.686 [DEBUG] [Thread-301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:24:20.686 [DEBUG] [Thread-301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:24:20.686 [DEBUG] [Thread-301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:24:20.710 [INFO] [Thread-301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:24:20.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:24:21.323 [DEBUG] [Thread-301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:24:21.324 [DEBUG] [Thread-301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:24:21.324 [DEBUG] [Thread-301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:24:21.364 [DEBUG] [Thread-301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:24:21.365 [DEBUG] [Thread-301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:24:21.367 [DEBUG] [Thread-301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:24:21.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:24:21.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:24:21.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:24:21.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:24:21.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:24:21.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:24:21.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:24:21.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:24:21.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:24:21.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.516421 -999.00  +26.90  13.28     12   -3.90 1 1 1 1 1   888    0 30.79 31.50 ----- 15.8 13.3 82.1 27.1 34.6 -32.2 34.7 -31.3 35.9 -29.6 36.5 -33.1
2025-11-25T14:24:21.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:24:21.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:24:21.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.516421
2025-11-25T14:24:21.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:24:21.387 [DEBUG] [Thread-301] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:24:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:24:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:24:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:24:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:24:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:23:55', tmtdew=37.88, humidity=7.46, cloud=0.0, wind=15.0, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:23:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:24:21.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:24:21.491 [DEBUG] [Thread-304] [transport.py] [_log()] starting thread (client mode): 0x7374c3d0
2025-11-25T14:24:21.491 [DEBUG] [Thread-304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:24:21.505 [DEBUG] [Thread-304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:24:21.505 [INFO] [Thread-304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:24:21.513 [DEBUG] [Thread-304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:24:21.513 [DEBUG] [Thread-304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:24:21.513 [DEBUG] [Thread-304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:24:21.513 [DEBUG] [Thread-304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:24:21.513 [DEBUG] [Thread-304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:24:21.513 [DEBUG] [Thread-304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:24:21.513 [DEBUG] [Thread-304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:24:21.513 [DEBUG] [Thread-304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:24:21.514 [DEBUG] [Thread-304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:24:21.514 [DEBUG] [Thread-304] [transport.py] [_log()] client lang: <none>
2025-11-25T14:24:21.514 [DEBUG] [Thread-304] [transport.py] [_log()] server lang: <none>
2025-11-25T14:24:21.514 [DEBUG] [Thread-304] [transport.py] [_log()] kex follows: False
2025-11-25T14:24:21.514 [DEBUG] [Thread-304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:24:21.514 [DEBUG] [Thread-304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:24:21.514 [DEBUG] [Thread-304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:24:21.514 [DEBUG] [Thread-304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:24:21.514 [DEBUG] [Thread-304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:24:21.515 [DEBUG] [Thread-304] [transport.py] [_log()] Compression: none
2025-11-25T14:24:21.515 [DEBUG] [Thread-304] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:24:21.570 [DEBUG] [Thread-304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:24:21.571 [DEBUG] [Thread-304] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:24:21.571 [DEBUG] [Thread-304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:24:21.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:24:21.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:24:21.626 [DEBUG] [Thread-304] [transport.py] [_log()] userauth is OK
2025-11-25T14:24:21.626 [DEBUG] [Thread-304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:24:21.626 [DEBUG] [Thread-304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:24:21.626 [DEBUG] [Thread-304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:24:21.626 [DEBUG] [Thread-304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:24:21.649 [INFO] [Thread-304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:24:21.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:24:21.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:24:22.344 [DEBUG] [Thread-304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:24:22.345 [DEBUG] [Thread-304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:24:22.393 [DEBUG] [Thread-304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:24:22.393 [DEBUG] [Thread-304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:24:22.402 [DEBUG] [Thread-304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:24:22.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:24:22.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:24:22.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:24:22.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:24:22.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:24:22.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:24:22.437 [DEBUG] [Thread-304] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:24:34.403 [DEBUG] [Thread-306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:24:49.467 [DEBUG] [Thread-307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:24:52.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:24:52.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:24:52.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:24:53.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 24, 27), 37.85, 7.49, 0.0, 15.49, 27.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:24:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:24:27
2025-11-25T14:24:53.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:24:53.420 [DEBUG] [Thread-308] [transport.py] [_log()] starting thread (client mode): 0x761d9f30
2025-11-25T14:24:53.421 [DEBUG] [Thread-308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:24:53.443 [DEBUG] [Thread-308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:24:53.443 [INFO] [Thread-308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:24:53.447 [DEBUG] [Thread-308] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:24:53.447 [DEBUG] [Thread-308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:24:53.447 [DEBUG] [Thread-308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:24:53.447 [DEBUG] [Thread-308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:24:53.447 [DEBUG] [Thread-308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:24:53.447 [DEBUG] [Thread-308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:24:53.447 [DEBUG] [Thread-308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:24:53.447 [DEBUG] [Thread-308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:24:53.447 [DEBUG] [Thread-308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] client lang: <none>
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] server lang: <none>
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] kex follows: False
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] Compression: none
2025-11-25T14:24:53.448 [DEBUG] [Thread-308] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:24:53.466 [DEBUG] [Thread-308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:24:53.466 [DEBUG] [Thread-308] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:24:53.467 [DEBUG] [Thread-308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:24:53.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:24:53.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:24:53.469 [DEBUG] [Thread-308] [transport.py] [_log()] userauth is OK
2025-11-25T14:24:53.469 [DEBUG] [Thread-308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:24:53.469 [DEBUG] [Thread-308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:24:53.469 [DEBUG] [Thread-308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:24:53.469 [DEBUG] [Thread-308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:24:53.493 [INFO] [Thread-308] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:24:53.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:24:54.130 [DEBUG] [Thread-308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:24:54.130 [DEBUG] [Thread-308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:24:54.130 [DEBUG] [Thread-308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:24:54.171 [DEBUG] [Thread-308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:24:54.171 [DEBUG] [Thread-308] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:24:54.173 [DEBUG] [Thread-308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:24:54.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:24:54.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:24:54.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:24:54.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:24:54.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:24:54.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:24:54.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:24:54.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:24:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:24:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.516768 -999.00  +26.60  16.39     12   -4.10 1 1 1 1 1   888    0 30.57 36.13 ----- 17.4 16.4 107.7 26.3 34.5 -32.1 34.5 -32.2 35.8 -30.5 36.5 -32.0
2025-11-25T14:24:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:24:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:24:54.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.516768
2025-11-25T14:24:54.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:24:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:24:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:24:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:24:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:24:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:24:27', tmtdew=37.85, humidity=7.49, cloud=0.0, wind=15.49, temperature=27.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:24:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:24:54.191 [DEBUG] [Thread-308] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:24:54.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:24:54.294 [DEBUG] [Thread-311] [transport.py] [_log()] starting thread (client mode): 0x761dbe80
2025-11-25T14:24:54.294 [DEBUG] [Thread-311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:24:54.310 [DEBUG] [Thread-311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:24:54.311 [INFO] [Thread-311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:24:54.318 [DEBUG] [Thread-311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:24:54.319 [DEBUG] [Thread-311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:24:54.319 [DEBUG] [Thread-311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:24:54.319 [DEBUG] [Thread-311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:24:54.319 [DEBUG] [Thread-311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:24:54.319 [DEBUG] [Thread-311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:24:54.319 [DEBUG] [Thread-311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:24:54.319 [DEBUG] [Thread-311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:24:54.319 [DEBUG] [Thread-311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:24:54.319 [DEBUG] [Thread-311] [transport.py] [_log()] client lang: <none>
2025-11-25T14:24:54.320 [DEBUG] [Thread-311] [transport.py] [_log()] server lang: <none>
2025-11-25T14:24:54.320 [DEBUG] [Thread-311] [transport.py] [_log()] kex follows: False
2025-11-25T14:24:54.320 [DEBUG] [Thread-311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:24:54.320 [DEBUG] [Thread-311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:24:54.320 [DEBUG] [Thread-311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:24:54.320 [DEBUG] [Thread-311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:24:54.320 [DEBUG] [Thread-311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:24:54.321 [DEBUG] [Thread-311] [transport.py] [_log()] Compression: none
2025-11-25T14:24:54.321 [DEBUG] [Thread-311] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:24:54.380 [DEBUG] [Thread-311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:24:54.380 [DEBUG] [Thread-311] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:24:54.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:24:54.382 [DEBUG] [Thread-311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:24:54.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:24:54.435 [DEBUG] [Thread-311] [transport.py] [_log()] userauth is OK
2025-11-25T14:24:54.436 [DEBUG] [Thread-311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:24:54.436 [DEBUG] [Thread-311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:24:54.436 [DEBUG] [Thread-311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:24:54.436 [DEBUG] [Thread-311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:24:54.454 [INFO] [Thread-311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:24:54.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:24:54.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:24:55.204 [DEBUG] [Thread-311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:24:55.204 [DEBUG] [Thread-311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:24:55.252 [DEBUG] [Thread-311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:24:55.252 [DEBUG] [Thread-311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:24:55.260 [DEBUG] [Thread-311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:24:55.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:24:55.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:24:55.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:24:55.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:24:55.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:24:55.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:24:55.291 [DEBUG] [Thread-311] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:24:55.521 [DEBUG] [Thread-313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:25:04.513 [DEBUG] [Thread-314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:25:19.579 [DEBUG] [Thread-315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:25:25.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:25:25.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:25:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:25:25.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 24, 59), 38.21, 7.49, 0.0, 17.59, 27.78, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:25:25.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:24:59
2025-11-25T14:25:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:25:26.244 [DEBUG] [Thread-316] [transport.py] [_log()] starting thread (client mode): 0x7374e170
2025-11-25T14:25:26.244 [DEBUG] [Thread-316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:25:26.264 [DEBUG] [Thread-316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:25:26.264 [INFO] [Thread-316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:25:26.265 [DEBUG] [Thread-316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:25:26.265 [DEBUG] [Thread-316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] client lang: <none>
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] server lang: <none>
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] kex follows: False
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] Compression: none
2025-11-25T14:25:26.266 [DEBUG] [Thread-316] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:25:26.284 [DEBUG] [Thread-316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:25:26.285 [DEBUG] [Thread-316] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:25:26.285 [DEBUG] [Thread-316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:25:26.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:25:26.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:25:26.287 [DEBUG] [Thread-316] [transport.py] [_log()] userauth is OK
2025-11-25T14:25:26.288 [DEBUG] [Thread-316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:25:26.288 [DEBUG] [Thread-316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:25:26.288 [DEBUG] [Thread-316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:25:26.288 [DEBUG] [Thread-316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:25:26.320 [INFO] [Thread-316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:25:26.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:25:26.969 [DEBUG] [Thread-316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:25:26.969 [DEBUG] [Thread-316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:25:26.970 [DEBUG] [Thread-316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:25:27.011 [DEBUG] [Thread-316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:25:27.011 [DEBUG] [Thread-316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:25:27.015 [DEBUG] [Thread-316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:25:27.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:25:27.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:25:27.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:25:27.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:25:27.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:25:27.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:25:27.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:25:27.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:25:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:25:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.517462 -999.00  +26.10  20.22     13   -4.00 1 1 1 1 1   888    0 31.10 43.98 ----- 19.4 20.2 119.4 27.0 33.7 -36.4 34.3 -31.4 35.5 -31.7 36.0 -31.9
2025-11-25T14:25:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:25:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:25:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.517462
2025-11-25T14:25:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:25:27.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:25:27.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:25:27.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:25:27.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:25:27.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:24:59', tmtdew=38.21, humidity=7.49, cloud=0.0, wind=17.59, temperature=27.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:25:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:25:27.042 [DEBUG] [Thread-316] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:25:27.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:25:27.145 [DEBUG] [Thread-319] [transport.py] [_log()] starting thread (client mode): 0x761d9540
2025-11-25T14:25:27.145 [DEBUG] [Thread-319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:25:27.159 [DEBUG] [Thread-319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:25:27.159 [INFO] [Thread-319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:25:27.167 [DEBUG] [Thread-319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:25:27.167 [DEBUG] [Thread-319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:25:27.167 [DEBUG] [Thread-319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:25:27.167 [DEBUG] [Thread-319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:25:27.167 [DEBUG] [Thread-319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:25:27.167 [DEBUG] [Thread-319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:25:27.168 [DEBUG] [Thread-319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:25:27.168 [DEBUG] [Thread-319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:25:27.168 [DEBUG] [Thread-319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:25:27.168 [DEBUG] [Thread-319] [transport.py] [_log()] client lang: <none>
2025-11-25T14:25:27.168 [DEBUG] [Thread-319] [transport.py] [_log()] server lang: <none>
2025-11-25T14:25:27.168 [DEBUG] [Thread-319] [transport.py] [_log()] kex follows: False
2025-11-25T14:25:27.168 [DEBUG] [Thread-319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:25:27.168 [DEBUG] [Thread-319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:25:27.168 [DEBUG] [Thread-319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:25:27.169 [DEBUG] [Thread-319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:25:27.169 [DEBUG] [Thread-319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:25:27.169 [DEBUG] [Thread-319] [transport.py] [_log()] Compression: none
2025-11-25T14:25:27.169 [DEBUG] [Thread-319] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:25:27.229 [DEBUG] [Thread-319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:25:27.229 [DEBUG] [Thread-319] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:25:27.230 [DEBUG] [Thread-319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:25:27.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:25:27.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:25:27.284 [DEBUG] [Thread-319] [transport.py] [_log()] userauth is OK
2025-11-25T14:25:27.285 [DEBUG] [Thread-319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:25:27.285 [DEBUG] [Thread-319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:25:27.285 [DEBUG] [Thread-319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:25:27.285 [DEBUG] [Thread-319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:25:27.303 [INFO] [Thread-319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:25:27.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:25:27.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:25:28.049 [DEBUG] [Thread-319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:25:28.049 [DEBUG] [Thread-319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:25:28.096 [DEBUG] [Thread-319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:25:28.096 [DEBUG] [Thread-319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:25:28.105 [DEBUG] [Thread-319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:25:28.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:25:28.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:25:28.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:25:28.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:25:28.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:25:28.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:25:28.139 [DEBUG] [Thread-319] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:25:34.623 [DEBUG] [Thread-321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:25:49.700 [DEBUG] [Thread-322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:25:56.054 [DEBUG] [Thread-323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:25:58.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:25:58.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:25:58.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:25:58.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 25, 31), 38.49, 7.33, 0.0, 15.72, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:25:58.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:25:31
2025-11-25T14:25:58.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:25:59.143 [DEBUG] [Thread-324] [transport.py] [_log()] starting thread (client mode): 0x7374e890
2025-11-25T14:25:59.143 [DEBUG] [Thread-324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:25:59.154 [DEBUG] [Thread-324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:25:59.154 [INFO] [Thread-324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:25:59.157 [DEBUG] [Thread-324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:25:59.157 [DEBUG] [Thread-324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:25:59.157 [DEBUG] [Thread-324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:25:59.157 [DEBUG] [Thread-324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:25:59.157 [DEBUG] [Thread-324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:25:59.157 [DEBUG] [Thread-324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] client lang: <none>
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] server lang: <none>
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] kex follows: False
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] Compression: none
2025-11-25T14:25:59.158 [DEBUG] [Thread-324] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:25:59.177 [DEBUG] [Thread-324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:25:59.178 [DEBUG] [Thread-324] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:25:59.178 [DEBUG] [Thread-324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:25:59.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:25:59.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:25:59.181 [DEBUG] [Thread-324] [transport.py] [_log()] userauth is OK
2025-11-25T14:25:59.181 [DEBUG] [Thread-324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:25:59.181 [DEBUG] [Thread-324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:25:59.181 [DEBUG] [Thread-324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:25:59.181 [DEBUG] [Thread-324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:25:59.205 [INFO] [Thread-324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:25:59.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:25:59.848 [DEBUG] [Thread-324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:25:59.848 [DEBUG] [Thread-324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:25:59.849 [DEBUG] [Thread-324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:25:59.889 [DEBUG] [Thread-324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:25:59.889 [DEBUG] [Thread-324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:25:59.893 [DEBUG] [Thread-324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:25:59.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:25:59.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:25:59.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:25:59.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:25:59.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:25:59.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:25:59.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:25:59.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:25:59.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:25:59.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.517810 -999.00  +26.60  15.39     13   -3.90 1 1 1 1 1   888    0 31.83 47.81 ----- 19.5 15.4 111.8 21.0 33.6 -31.7 34.2 -31.1 35.6 -30.2 35.8 -31.3
2025-11-25T14:25:59.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:25:59.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:25:59.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.517810
2025-11-25T14:25:59.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:25:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:25:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:25:59.921 [DEBUG] [Thread-324] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:25:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:25:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:25:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:25:31', tmtdew=38.49, humidity=7.33, cloud=0.0, wind=15.72, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:25:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:26:00.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:26:00.025 [DEBUG] [Thread-327] [transport.py] [_log()] starting thread (client mode): 0x7374fc40
2025-11-25T14:26:00.025 [DEBUG] [Thread-327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:26:00.039 [DEBUG] [Thread-327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:26:00.040 [INFO] [Thread-327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:26:00.047 [DEBUG] [Thread-327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:26:00.047 [DEBUG] [Thread-327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:26:00.047 [DEBUG] [Thread-327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:26:00.047 [DEBUG] [Thread-327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:26:00.048 [DEBUG] [Thread-327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:26:00.048 [DEBUG] [Thread-327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:26:00.048 [DEBUG] [Thread-327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:26:00.048 [DEBUG] [Thread-327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:26:00.048 [DEBUG] [Thread-327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:26:00.048 [DEBUG] [Thread-327] [transport.py] [_log()] client lang: <none>
2025-11-25T14:26:00.048 [DEBUG] [Thread-327] [transport.py] [_log()] server lang: <none>
2025-11-25T14:26:00.048 [DEBUG] [Thread-327] [transport.py] [_log()] kex follows: False
2025-11-25T14:26:00.048 [DEBUG] [Thread-327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:26:00.049 [DEBUG] [Thread-327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:26:00.049 [DEBUG] [Thread-327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:26:00.049 [DEBUG] [Thread-327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:26:00.049 [DEBUG] [Thread-327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:26:00.049 [DEBUG] [Thread-327] [transport.py] [_log()] Compression: none
2025-11-25T14:26:00.049 [DEBUG] [Thread-327] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:26:00.105 [DEBUG] [Thread-327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:26:00.105 [DEBUG] [Thread-327] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:26:00.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:26:00.106 [DEBUG] [Thread-327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:26:00.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:26:00.162 [DEBUG] [Thread-327] [transport.py] [_log()] userauth is OK
2025-11-25T14:26:00.162 [DEBUG] [Thread-327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:26:00.162 [DEBUG] [Thread-327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:26:00.162 [DEBUG] [Thread-327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:26:00.162 [DEBUG] [Thread-327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:26:00.181 [INFO] [Thread-327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:26:00.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:26:00.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:26:00.911 [DEBUG] [Thread-327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:26:00.911 [DEBUG] [Thread-327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:26:00.960 [DEBUG] [Thread-327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:26:00.960 [DEBUG] [Thread-327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:26:00.969 [DEBUG] [Thread-327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:26:00.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:26:00.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:26:00.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:26:00.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:26:00.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:26:00.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:26:01.006 [DEBUG] [Thread-327] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:26:04.739 [DEBUG] [Thread-329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:26:19.794 [DEBUG] [Thread-330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:26:31.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:26:31.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:26:31.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:26:31.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 26, 3), 37.96, 7.54, 0.0, 18.1, 27.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:26:31.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:26:03
2025-11-25T14:26:31.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:26:32.021 [DEBUG] [Thread-331] [transport.py] [_log()] starting thread (client mode): 0x73782ad0
2025-11-25T14:26:32.021 [DEBUG] [Thread-331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:26:32.042 [DEBUG] [Thread-331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:26:32.042 [INFO] [Thread-331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] client lang: <none>
2025-11-25T14:26:32.045 [DEBUG] [Thread-331] [transport.py] [_log()] server lang: <none>
2025-11-25T14:26:32.046 [DEBUG] [Thread-331] [transport.py] [_log()] kex follows: False
2025-11-25T14:26:32.046 [DEBUG] [Thread-331] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:26:32.046 [DEBUG] [Thread-331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:26:32.046 [DEBUG] [Thread-331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:26:32.046 [DEBUG] [Thread-331] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:26:32.046 [DEBUG] [Thread-331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:26:32.046 [DEBUG] [Thread-331] [transport.py] [_log()] Compression: none
2025-11-25T14:26:32.046 [DEBUG] [Thread-331] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:26:32.053 [DEBUG] [Thread-331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:26:32.053 [DEBUG] [Thread-331] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:26:32.053 [DEBUG] [Thread-331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:26:32.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:26:32.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:26:32.054 [DEBUG] [Thread-331] [transport.py] [_log()] userauth is OK
2025-11-25T14:26:32.054 [DEBUG] [Thread-331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:26:32.054 [DEBUG] [Thread-331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:26:32.054 [DEBUG] [Thread-331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:26:32.054 [DEBUG] [Thread-331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:26:32.063 [INFO] [Thread-331] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:26:32.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:26:32.741 [DEBUG] [Thread-331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:26:32.741 [DEBUG] [Thread-331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:26:32.741 [DEBUG] [Thread-331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:26:32.782 [DEBUG] [Thread-331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:26:32.782 [DEBUG] [Thread-331] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:26:32.784 [DEBUG] [Thread-331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:26:32.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:26:32.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:26:32.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:26:32.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:26:32.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:26:32.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:26:32.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:26:32.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:26:32.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:26:32.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.518157 -999.00  +26.20  10.44     13   -4.20 1 1 1 1 1   888    0 31.73 51.72 ----- 15.6 10.4 105.4 24.4 33.6 -34.4 34.2 -30.7 35.6 -30.5 35.8 -31.5
2025-11-25T14:26:32.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:26:32.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:26:32.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.518157
2025-11-25T14:26:32.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:26:32.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:26:32.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:26:32.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:26:32.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:26:32.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:26:03', tmtdew=37.96, humidity=7.54, cloud=0.0, wind=18.1, temperature=27.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:26:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:26:32.803 [DEBUG] [Thread-331] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:26:32.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:26:32.896 [DEBUG] [Thread-334] [transport.py] [_log()] starting thread (client mode): 0x73782650
2025-11-25T14:26:32.896 [DEBUG] [Thread-334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:26:32.909 [DEBUG] [Thread-334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:26:32.909 [INFO] [Thread-334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] client lang: <none>
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] server lang: <none>
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] kex follows: False
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] Compression: none
2025-11-25T14:26:32.917 [DEBUG] [Thread-334] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:26:32.979 [DEBUG] [Thread-334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:26:32.980 [DEBUG] [Thread-334] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:26:32.980 [DEBUG] [Thread-334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:26:32.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:26:32.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:26:33.038 [DEBUG] [Thread-334] [transport.py] [_log()] userauth is OK
2025-11-25T14:26:33.038 [DEBUG] [Thread-334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:26:33.038 [DEBUG] [Thread-334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:26:33.038 [DEBUG] [Thread-334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:26:33.038 [DEBUG] [Thread-334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:26:33.051 [INFO] [Thread-334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:26:33.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:26:33.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:26:33.783 [DEBUG] [Thread-334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:26:33.783 [DEBUG] [Thread-334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:26:33.831 [DEBUG] [Thread-334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:26:33.831 [DEBUG] [Thread-334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:26:33.841 [DEBUG] [Thread-334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:26:33.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:26:33.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:26:33.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:26:33.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:26:33.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:26:33.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:26:33.872 [DEBUG] [Thread-334] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:26:34.831 [DEBUG] [Thread-336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:26:49.890 [DEBUG] [Thread-337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:26:56.776 [DEBUG] [Thread-338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:27:03.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:27:03.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:27:03.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:27:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 26, 35), 36.92, 8.19, 0.0, 13.48, 26.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:27:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:26:35
2025-11-25T14:27:04.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:27:04.849 [DEBUG] [Thread-339] [transport.py] [_log()] starting thread (client mode): 0x7374d3c0
2025-11-25T14:27:04.849 [DEBUG] [Thread-339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:27:04.870 [DEBUG] [Thread-339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:27:04.870 [INFO] [Thread-339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:27:04.873 [DEBUG] [Thread-339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:27:04.873 [DEBUG] [Thread-339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:27:04.873 [DEBUG] [Thread-339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] client lang: <none>
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] server lang: <none>
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] kex follows: False
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:27:04.874 [DEBUG] [Thread-339] [transport.py] [_log()] Compression: none
2025-11-25T14:27:04.875 [DEBUG] [Thread-339] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:27:04.892 [DEBUG] [Thread-339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:27:04.893 [DEBUG] [Thread-339] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:27:04.893 [DEBUG] [Thread-339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:27:04.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:27:04.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:27:04.895 [DEBUG] [Thread-339] [transport.py] [_log()] userauth is OK
2025-11-25T14:27:04.895 [DEBUG] [Thread-339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:27:04.896 [DEBUG] [Thread-339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:27:04.896 [DEBUG] [Thread-339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:27:04.896 [DEBUG] [Thread-339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:27:04.921 [INFO] [Thread-339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:27:04.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:27:04.937 [DEBUG] [Thread-341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:27:05.573 [DEBUG] [Thread-339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:27:05.573 [DEBUG] [Thread-339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:27:05.573 [DEBUG] [Thread-339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:27:05.614 [DEBUG] [Thread-339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:27:05.614 [DEBUG] [Thread-339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:27:05.617 [DEBUG] [Thread-339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:27:05.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:27:05.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:27:05.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:27:05.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:27:05.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:27:05.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:27:05.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:27:05.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:27:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:27:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.518504 -999.00  +26.20  11.41     13   -4.00 1 1 1 1 1   888    0 31.66 52.51 ----- 11.7 11.4 93.1 17.5 33.6 -33.1 34.2 -31.5 35.5 -31.0 35.9 -31.4
2025-11-25T14:27:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:27:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:27:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.518504
2025-11-25T14:27:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:27:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:27:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:27:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:27:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:27:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:26:35', tmtdew=36.92, humidity=8.19, cloud=0.0, wind=13.48, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:26:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:27:05.644 [DEBUG] [Thread-339] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:27:05.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:27:05.748 [DEBUG] [Thread-343] [transport.py] [_log()] starting thread (client mode): 0x7374e4a0
2025-11-25T14:27:05.748 [DEBUG] [Thread-343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:27:05.762 [DEBUG] [Thread-343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:27:05.763 [INFO] [Thread-343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:27:05.770 [DEBUG] [Thread-343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:27:05.770 [DEBUG] [Thread-343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:27:05.770 [DEBUG] [Thread-343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] client lang: <none>
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] server lang: <none>
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] kex follows: False
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:27:05.771 [DEBUG] [Thread-343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:27:05.772 [DEBUG] [Thread-343] [transport.py] [_log()] Compression: none
2025-11-25T14:27:05.772 [DEBUG] [Thread-343] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:27:05.832 [DEBUG] [Thread-343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:27:05.833 [DEBUG] [Thread-343] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:27:05.833 [DEBUG] [Thread-343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:27:05.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:27:05.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:27:05.888 [DEBUG] [Thread-343] [transport.py] [_log()] userauth is OK
2025-11-25T14:27:05.888 [DEBUG] [Thread-343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:27:05.888 [DEBUG] [Thread-343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:27:05.888 [DEBUG] [Thread-343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:27:05.889 [DEBUG] [Thread-343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:27:05.910 [INFO] [Thread-343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:27:05.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:27:05.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:27:06.677 [DEBUG] [Thread-343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:27:06.678 [DEBUG] [Thread-343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:27:06.726 [DEBUG] [Thread-343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:27:06.726 [DEBUG] [Thread-343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:27:06.735 [DEBUG] [Thread-343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:27:06.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:27:06.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:27:06.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:27:06.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:27:06.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:27:06.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:27:06.776 [DEBUG] [Thread-343] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:27:19.982 [DEBUG] [Thread-345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:27:35.059 [DEBUG] [Thread-346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:27:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:27:36.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:27:36.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:27:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 27, 7), 36.43, 8.42, 0.0, 12.28, 25.75, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:27:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:27:07
2025-11-25T14:27:37.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:27:37.715 [DEBUG] [Thread-347] [transport.py] [_log()] starting thread (client mode): 0x73780a60
2025-11-25T14:27:37.716 [DEBUG] [Thread-347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:27:37.737 [DEBUG] [Thread-347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:27:37.737 [INFO] [Thread-347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:27:37.738 [DEBUG] [Thread-347] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] client lang: <none>
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] server lang: <none>
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] kex follows: False
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] Compression: none
2025-11-25T14:27:37.739 [DEBUG] [Thread-347] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:27:37.759 [DEBUG] [Thread-347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:27:37.760 [DEBUG] [Thread-347] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:27:37.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:27:37.761 [DEBUG] [Thread-347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:27:37.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:27:37.763 [DEBUG] [Thread-347] [transport.py] [_log()] userauth is OK
2025-11-25T14:27:37.763 [DEBUG] [Thread-347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:27:37.763 [DEBUG] [Thread-347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:27:37.764 [DEBUG] [Thread-347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:27:37.764 [DEBUG] [Thread-347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:27:37.795 [INFO] [Thread-347] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:27:37.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:27:38.388 [DEBUG] [Thread-347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:27:38.388 [DEBUG] [Thread-347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:27:38.389 [DEBUG] [Thread-347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:27:38.429 [DEBUG] [Thread-347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:27:38.429 [DEBUG] [Thread-347] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:27:38.433 [DEBUG] [Thread-347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:27:38.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:27:38.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:27:38.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:27:38.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:27:38.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:27:38.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:27:38.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:27:38.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:27:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:27:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.518851 -999.00  +25.80  13.59     13   -4.30 1 1 1 1 1   888    0 31.64 50.50 ----- 15.0 13.6 117.8 18.2 33.5 -31.8 34.2 -30.6 35.5 -30.4 35.9 -31.1
2025-11-25T14:27:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:27:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:27:38.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.518851
2025-11-25T14:27:38.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:27:38.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:27:38.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:27:38.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:27:38.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:27:38.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:27:07', tmtdew=36.43, humidity=8.42, cloud=0.0, wind=12.28, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:27:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:27:38.460 [DEBUG] [Thread-347] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:27:38.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:27:38.562 [DEBUG] [Thread-350] [transport.py] [_log()] starting thread (client mode): 0x73782170
2025-11-25T14:27:38.562 [DEBUG] [Thread-350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:27:38.576 [DEBUG] [Thread-350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:27:38.576 [INFO] [Thread-350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:27:38.583 [DEBUG] [Thread-350] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:27:38.584 [DEBUG] [Thread-350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:27:38.584 [DEBUG] [Thread-350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:27:38.584 [DEBUG] [Thread-350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:27:38.584 [DEBUG] [Thread-350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:27:38.584 [DEBUG] [Thread-350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:27:38.584 [DEBUG] [Thread-350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] client lang: <none>
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] server lang: <none>
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] kex follows: False
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] Compression: none
2025-11-25T14:27:38.585 [DEBUG] [Thread-350] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:27:38.644 [DEBUG] [Thread-350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:27:38.645 [DEBUG] [Thread-350] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:27:38.646 [DEBUG] [Thread-350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:27:38.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:27:38.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:27:38.701 [DEBUG] [Thread-350] [transport.py] [_log()] userauth is OK
2025-11-25T14:27:38.701 [DEBUG] [Thread-350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:27:38.701 [DEBUG] [Thread-350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:27:38.701 [DEBUG] [Thread-350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:27:38.701 [DEBUG] [Thread-350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:27:38.720 [INFO] [Thread-350] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:27:38.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:27:38.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:27:39.441 [DEBUG] [Thread-350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:27:39.441 [DEBUG] [Thread-350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:27:39.489 [DEBUG] [Thread-350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:27:39.489 [DEBUG] [Thread-350] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:27:39.497 [DEBUG] [Thread-350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:27:39.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:27:39.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:27:39.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:27:39.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:27:39.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:27:39.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:27:39.532 [DEBUG] [Thread-350] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:27:50.098 [DEBUG] [Thread-352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:27:57.510 [DEBUG] [Thread-353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:28:05.156 [DEBUG] [Thread-354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:28:09.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:28:09.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:28:09.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:28:10.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 27, 39), 36.46, 8.42, 0.0, 16.82, 25.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:28:10.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:27:39
2025-11-25T14:28:10.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:28:10.500 [DEBUG] [Thread-355] [transport.py] [_log()] starting thread (client mode): 0x737821d0
2025-11-25T14:28:10.501 [DEBUG] [Thread-355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:28:10.515 [DEBUG] [Thread-355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:28:10.516 [INFO] [Thread-355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] client lang: <none>
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] server lang: <none>
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] kex follows: False
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:28:10.519 [DEBUG] [Thread-355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:28:10.520 [DEBUG] [Thread-355] [transport.py] [_log()] Compression: none
2025-11-25T14:28:10.520 [DEBUG] [Thread-355] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:28:10.539 [DEBUG] [Thread-355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:28:10.540 [DEBUG] [Thread-355] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:28:10.540 [DEBUG] [Thread-355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:28:10.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:28:10.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:28:10.542 [DEBUG] [Thread-355] [transport.py] [_log()] userauth is OK
2025-11-25T14:28:10.542 [DEBUG] [Thread-355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:28:10.542 [DEBUG] [Thread-355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:28:10.542 [DEBUG] [Thread-355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:28:10.542 [DEBUG] [Thread-355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:28:10.565 [INFO] [Thread-355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:28:10.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:28:11.162 [DEBUG] [Thread-355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:28:11.162 [DEBUG] [Thread-355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:28:11.163 [DEBUG] [Thread-355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:28:11.204 [DEBUG] [Thread-355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:28:11.204 [DEBUG] [Thread-355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:28:11.208 [DEBUG] [Thread-355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:28:11.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:28:11.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:28:11.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:28:11.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:28:11.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:28:11.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:28:11.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:28:11.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:28:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:28:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.519198 -999.00  +25.90  19.74     13   -4.10 1 1 1 1 1   888    0 31.80 52.28 ----- 17.3 19.7 120.2 22.8 33.6 -32.0 34.1 -31.8 35.6 -31.5 35.9 -31.3
2025-11-25T14:28:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:28:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:28:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.519198
2025-11-25T14:28:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:28:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:28:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:28:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:28:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:28:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:27:39', tmtdew=36.46, humidity=8.42, cloud=0.0, wind=16.82, temperature=25.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:27:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:28:11.232 [DEBUG] [Thread-355] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:28:11.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:28:11.325 [DEBUG] [Thread-358] [transport.py] [_log()] starting thread (client mode): 0x73782b60
2025-11-25T14:28:11.325 [DEBUG] [Thread-358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:28:11.340 [DEBUG] [Thread-358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:28:11.340 [INFO] [Thread-358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:28:11.348 [DEBUG] [Thread-358] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:28:11.348 [DEBUG] [Thread-358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:28:11.348 [DEBUG] [Thread-358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] client lang: <none>
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] server lang: <none>
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] kex follows: False
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] Compression: none
2025-11-25T14:28:11.349 [DEBUG] [Thread-358] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:28:11.406 [DEBUG] [Thread-358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:28:11.406 [DEBUG] [Thread-358] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:28:11.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:28:11.406 [DEBUG] [Thread-358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:28:11.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:28:11.465 [DEBUG] [Thread-358] [transport.py] [_log()] userauth is OK
2025-11-25T14:28:11.465 [DEBUG] [Thread-358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:28:11.465 [DEBUG] [Thread-358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:28:11.465 [DEBUG] [Thread-358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:28:11.465 [DEBUG] [Thread-358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:28:11.479 [INFO] [Thread-358] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:28:11.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:28:11.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:28:12.219 [DEBUG] [Thread-358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:28:12.219 [DEBUG] [Thread-358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:28:12.266 [DEBUG] [Thread-358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:28:12.266 [DEBUG] [Thread-358] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:28:12.275 [DEBUG] [Thread-358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:28:12.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:28:12.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:28:12.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:28:12.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:28:12.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:28:12.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:28:12.312 [DEBUG] [Thread-358] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:28:20.197 [DEBUG] [Thread-360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:28:35.265 [DEBUG] [Thread-361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:28:42.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:28:42.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:28:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:28:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 28, 11), 36.79, 8.26, 0.0, 16.71, 26.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:28:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:28:11
2025-11-25T14:28:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:28:43.276 [DEBUG] [Thread-362] [transport.py] [_log()] starting thread (client mode): 0x7374e0e0
2025-11-25T14:28:43.276 [DEBUG] [Thread-362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:28:43.296 [DEBUG] [Thread-362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:28:43.296 [INFO] [Thread-362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:28:43.298 [DEBUG] [Thread-362] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:28:43.298 [DEBUG] [Thread-362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:28:43.298 [DEBUG] [Thread-362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] client lang: <none>
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] server lang: <none>
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] kex follows: False
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:28:43.299 [DEBUG] [Thread-362] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:28:43.300 [DEBUG] [Thread-362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:28:43.300 [DEBUG] [Thread-362] [transport.py] [_log()] Compression: none
2025-11-25T14:28:43.300 [DEBUG] [Thread-362] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:28:43.317 [DEBUG] [Thread-362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:28:43.317 [DEBUG] [Thread-362] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:28:43.318 [DEBUG] [Thread-362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:28:43.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:28:43.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:28:43.320 [DEBUG] [Thread-362] [transport.py] [_log()] userauth is OK
2025-11-25T14:28:43.320 [DEBUG] [Thread-362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:28:43.320 [DEBUG] [Thread-362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:28:43.320 [DEBUG] [Thread-362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:28:43.320 [DEBUG] [Thread-362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:28:43.343 [INFO] [Thread-362] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:28:43.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:28:43.974 [DEBUG] [Thread-362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:28:43.974 [DEBUG] [Thread-362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:28:43.975 [DEBUG] [Thread-362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:28:44.015 [DEBUG] [Thread-362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:28:44.015 [DEBUG] [Thread-362] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:28:44.017 [DEBUG] [Thread-362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:28:44.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:28:44.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:28:44.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:28:44.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:28:44.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:28:44.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:28:44.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.519546 -999.00  +25.70  12.43     13   -4.30 1 1 1 1 1   888    0 31.38 46.54 ----- 9.8 12.4 110.8 19.5 33.5 -30.8 34.1 -31.2 35.5 -29.9 35.6 -31.6
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.519546
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:28:44.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:28:11', tmtdew=36.79, humidity=8.26, cloud=0.0, wind=16.71, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:28:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:28:44.036 [DEBUG] [Thread-362] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:28:44.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:28:44.131 [DEBUG] [Thread-365] [transport.py] [_log()] starting thread (client mode): 0x7374dfc0
2025-11-25T14:28:44.131 [DEBUG] [Thread-365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:28:44.145 [DEBUG] [Thread-365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:28:44.145 [INFO] [Thread-365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:28:44.152 [DEBUG] [Thread-365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:28:44.152 [DEBUG] [Thread-365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:28:44.152 [DEBUG] [Thread-365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:28:44.152 [DEBUG] [Thread-365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:28:44.152 [DEBUG] [Thread-365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:28:44.152 [DEBUG] [Thread-365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:28:44.152 [DEBUG] [Thread-365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:28:44.152 [DEBUG] [Thread-365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:28:44.152 [DEBUG] [Thread-365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] client lang: <none>
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] server lang: <none>
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] kex follows: False
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] Compression: none
2025-11-25T14:28:44.153 [DEBUG] [Thread-365] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:28:44.212 [DEBUG] [Thread-365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:28:44.212 [DEBUG] [Thread-365] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:28:44.213 [DEBUG] [Thread-365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:28:44.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:28:44.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:28:44.271 [DEBUG] [Thread-365] [transport.py] [_log()] userauth is OK
2025-11-25T14:28:44.271 [DEBUG] [Thread-365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:28:44.271 [DEBUG] [Thread-365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:28:44.271 [DEBUG] [Thread-365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:28:44.271 [DEBUG] [Thread-365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:28:44.288 [INFO] [Thread-365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:28:44.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:28:44.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:28:44.998 [DEBUG] [Thread-365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:28:44.998 [DEBUG] [Thread-365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:28:45.047 [DEBUG] [Thread-365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:28:45.047 [DEBUG] [Thread-365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:28:45.056 [DEBUG] [Thread-365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:28:45.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:28:45.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:28:45.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:28:45.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:28:45.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:28:45.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:28:45.087 [DEBUG] [Thread-365] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:28:50.306 [DEBUG] [Thread-367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:28:58.020 [DEBUG] [Thread-368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:29:05.368 [DEBUG] [Thread-369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:29:15.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:29:15.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:29:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:29:15.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 28, 43), 36.87, 8.21, 0.0, 18.92, 26.33, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:29:15.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:28:43
2025-11-25T14:29:15.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:29:16.126 [DEBUG] [Thread-370] [transport.py] [_log()] starting thread (client mode): 0x7376d930
2025-11-25T14:29:16.126 [DEBUG] [Thread-370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:29:16.149 [DEBUG] [Thread-370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:29:16.149 [INFO] [Thread-370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] client lang: <none>
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] server lang: <none>
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] kex follows: False
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] Compression: none
2025-11-25T14:29:16.153 [DEBUG] [Thread-370] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:29:16.167 [DEBUG] [Thread-370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:29:16.167 [DEBUG] [Thread-370] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:29:16.168 [DEBUG] [Thread-370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:29:16.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:29:16.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:29:16.168 [DEBUG] [Thread-370] [transport.py] [_log()] userauth is OK
2025-11-25T14:29:16.168 [DEBUG] [Thread-370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:29:16.168 [DEBUG] [Thread-370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:29:16.168 [DEBUG] [Thread-370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:29:16.168 [DEBUG] [Thread-370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:29:16.195 [INFO] [Thread-370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:29:16.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:29:16.836 [DEBUG] [Thread-370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:29:16.837 [DEBUG] [Thread-370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:29:16.837 [DEBUG] [Thread-370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:29:16.877 [DEBUG] [Thread-370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:29:16.877 [DEBUG] [Thread-370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:29:16.879 [DEBUG] [Thread-370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:29:16.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:29:16.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:29:16.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:29:16.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:29:16.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:29:16.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:29:16.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.519893 -999.00  +26.20  12.50     13   -4.00 1 1 1 1 1   888    0 31.07 44.71 ----- 18.0 12.5 74.8 23.7 33.6 -29.9 34.1 -31.2 35.6 -29.7 35.8 -31.1
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.519893
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:29:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:28:43', tmtdew=36.87, humidity=8.21, cloud=0.0, wind=18.92, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:28:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:29:16.893 [DEBUG] [Thread-370] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:29:16.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:29:16.986 [DEBUG] [Thread-373] [transport.py] [_log()] starting thread (client mode): 0x7376d600
2025-11-25T14:29:16.986 [DEBUG] [Thread-373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:29:17.004 [DEBUG] [Thread-373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:29:17.004 [INFO] [Thread-373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:29:17.011 [DEBUG] [Thread-373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:29:17.011 [DEBUG] [Thread-373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] client lang: <none>
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] server lang: <none>
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] kex follows: False
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] Compression: none
2025-11-25T14:29:17.012 [DEBUG] [Thread-373] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:29:17.070 [DEBUG] [Thread-373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:29:17.070 [DEBUG] [Thread-373] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:29:17.071 [DEBUG] [Thread-373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:29:17.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:29:17.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:29:17.131 [DEBUG] [Thread-373] [transport.py] [_log()] userauth is OK
2025-11-25T14:29:17.131 [DEBUG] [Thread-373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:29:17.131 [DEBUG] [Thread-373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:29:17.131 [DEBUG] [Thread-373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:29:17.131 [DEBUG] [Thread-373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:29:17.147 [INFO] [Thread-373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:29:17.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:29:17.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:29:17.910 [DEBUG] [Thread-373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:29:17.911 [DEBUG] [Thread-373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:29:17.959 [DEBUG] [Thread-373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:29:17.959 [DEBUG] [Thread-373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:29:17.968 [DEBUG] [Thread-373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:29:17.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:29:17.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:29:17.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:29:17.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:29:17.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:29:17.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:29:18.004 [DEBUG] [Thread-373] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:29:20.416 [DEBUG] [Thread-375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:29:35.491 [DEBUG] [Thread-376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:29:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:29:48.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:29:48.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:29:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 29, 15), 37.03, 8.11, 0.0, 17.86, 26.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:29:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:29:15
2025-11-25T14:29:48.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:29:49.024 [DEBUG] [Thread-377] [transport.py] [_log()] starting thread (client mode): 0x7376f790
2025-11-25T14:29:49.024 [DEBUG] [Thread-377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:29:49.045 [DEBUG] [Thread-377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:29:49.045 [INFO] [Thread-377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] client lang: <none>
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] server lang: <none>
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] kex follows: False
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] Compression: none
2025-11-25T14:29:49.048 [DEBUG] [Thread-377] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:29:49.056 [DEBUG] [Thread-377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:29:49.056 [DEBUG] [Thread-377] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:29:49.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:29:49.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:29:49.056 [DEBUG] [Thread-377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:29:49.057 [DEBUG] [Thread-377] [transport.py] [_log()] userauth is OK
2025-11-25T14:29:49.057 [DEBUG] [Thread-377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:29:49.057 [DEBUG] [Thread-377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:29:49.057 [DEBUG] [Thread-377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:29:49.057 [DEBUG] [Thread-377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:29:49.076 [INFO] [Thread-377] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:29:49.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:29:49.756 [DEBUG] [Thread-377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:29:49.756 [DEBUG] [Thread-377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:29:49.757 [DEBUG] [Thread-377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:29:49.797 [DEBUG] [Thread-377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:29:49.797 [DEBUG] [Thread-377] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:29:49.801 [DEBUG] [Thread-377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:29:49.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:29:49.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:29:49.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:29:49.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:29:49.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:29:49.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:29:49.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:29:49.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:29:49.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:29:49.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.520240 -999.00  +26.20  16.82     13   -4.20 1 1 1 1 1   888    0 31.00 42.74 ----- 14.4 16.8 109.1 24.3 33.5 -37.0 34.1 -31.0 35.4 -30.5 35.8 -32.9
2025-11-25T14:29:49.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:29:49.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:29:49.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.520240
2025-11-25T14:29:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:29:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:29:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:29:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:29:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:29:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:29:15', tmtdew=37.03, humidity=8.11, cloud=0.0, wind=17.86, temperature=26.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:29:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:29:49.828 [DEBUG] [Thread-377] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:29:49.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:29:49.931 [DEBUG] [Thread-380] [transport.py] [_log()] starting thread (client mode): 0x73781ba0
2025-11-25T14:29:49.932 [DEBUG] [Thread-380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:29:49.946 [DEBUG] [Thread-380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:29:49.946 [INFO] [Thread-380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:29:49.954 [DEBUG] [Thread-380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:29:49.954 [DEBUG] [Thread-380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:29:49.954 [DEBUG] [Thread-380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:29:49.954 [DEBUG] [Thread-380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:29:49.954 [DEBUG] [Thread-380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:29:49.954 [DEBUG] [Thread-380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:29:49.954 [DEBUG] [Thread-380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:29:49.955 [DEBUG] [Thread-380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:29:49.955 [DEBUG] [Thread-380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:29:49.955 [DEBUG] [Thread-380] [transport.py] [_log()] client lang: <none>
2025-11-25T14:29:49.955 [DEBUG] [Thread-380] [transport.py] [_log()] server lang: <none>
2025-11-25T14:29:49.955 [DEBUG] [Thread-380] [transport.py] [_log()] kex follows: False
2025-11-25T14:29:49.955 [DEBUG] [Thread-380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:29:49.955 [DEBUG] [Thread-380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:29:49.955 [DEBUG] [Thread-380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:29:49.956 [DEBUG] [Thread-380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:29:49.956 [DEBUG] [Thread-380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:29:49.956 [DEBUG] [Thread-380] [transport.py] [_log()] Compression: none
2025-11-25T14:29:49.956 [DEBUG] [Thread-380] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:29:50.018 [DEBUG] [Thread-380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:29:50.018 [DEBUG] [Thread-380] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:29:50.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:29:50.019 [DEBUG] [Thread-380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:29:50.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:29:50.075 [DEBUG] [Thread-380] [transport.py] [_log()] userauth is OK
2025-11-25T14:29:50.076 [DEBUG] [Thread-380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:29:50.076 [DEBUG] [Thread-380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:29:50.076 [DEBUG] [Thread-380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:29:50.076 [DEBUG] [Thread-380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:29:50.102 [INFO] [Thread-380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:29:50.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:29:50.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:29:50.530 [DEBUG] [Thread-382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:29:50.868 [DEBUG] [Thread-380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:29:50.868 [DEBUG] [Thread-380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:29:50.916 [DEBUG] [Thread-380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:29:50.916 [DEBUG] [Thread-380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:29:50.925 [DEBUG] [Thread-380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:29:50.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:29:50.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:29:50.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:29:50.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:29:50.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:29:50.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:29:50.962 [DEBUG] [Thread-380] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:29:58.516 [DEBUG] [Thread-383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:30:05.595 [DEBUG] [Thread-384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:30:20.642 [DEBUG] [Thread-385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:30:20.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:30:20.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:30:20.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:30:21.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 29, 47), 37.05, 7.74, 0.0, 12.69, 26.23, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:30:21.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:29:47
2025-11-25T14:30:21.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:30:21.992 [DEBUG] [Thread-386] [transport.py] [_log()] starting thread (client mode): 0x7376f820
2025-11-25T14:30:21.992 [DEBUG] [Thread-386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:30:22.013 [DEBUG] [Thread-386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:30:22.013 [INFO] [Thread-386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] client lang: <none>
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] server lang: <none>
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] kex follows: False
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:30:22.016 [DEBUG] [Thread-386] [transport.py] [_log()] Compression: none
2025-11-25T14:30:22.017 [DEBUG] [Thread-386] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:30:22.034 [DEBUG] [Thread-386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:30:22.034 [DEBUG] [Thread-386] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:30:22.035 [DEBUG] [Thread-386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:30:22.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:30:22.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:30:22.036 [DEBUG] [Thread-386] [transport.py] [_log()] userauth is OK
2025-11-25T14:30:22.036 [DEBUG] [Thread-386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:30:22.036 [DEBUG] [Thread-386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:30:22.036 [DEBUG] [Thread-386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:30:22.036 [DEBUG] [Thread-386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:30:22.062 [INFO] [Thread-386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:30:22.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:30:22.713 [DEBUG] [Thread-386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:30:22.713 [DEBUG] [Thread-386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:30:22.713 [DEBUG] [Thread-386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:30:22.753 [DEBUG] [Thread-386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:30:22.753 [DEBUG] [Thread-386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:30:22.756 [DEBUG] [Thread-386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:30:22.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:30:22.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:30:22.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:30:22.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:30:22.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:30:22.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:30:22.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:30:22.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:30:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:30:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.520934 -999.00  +26.00  12.51     13   -4.40 1 1 1 1 1   888    0 30.94 42.93 ----- 12.6 12.5 129.8 13.9 33.6 -30.6 34.1 -30.9 35.5 -30.7 35.9 -30.6
2025-11-25T14:30:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:30:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:30:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.520934
2025-11-25T14:30:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:30:22.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:30:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:30:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:30:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:30:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:29:47', tmtdew=37.05, humidity=7.74, cloud=0.0, wind=12.69, temperature=26.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:30:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:30:22.775 [DEBUG] [Thread-386] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:30:22.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:30:22.867 [DEBUG] [Thread-389] [transport.py] [_log()] starting thread (client mode): 0x7376d030
2025-11-25T14:30:22.867 [DEBUG] [Thread-389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:30:22.881 [DEBUG] [Thread-389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:30:22.881 [INFO] [Thread-389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] client lang: <none>
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] server lang: <none>
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] kex follows: False
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] Compression: none
2025-11-25T14:30:22.889 [DEBUG] [Thread-389] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:30:22.947 [DEBUG] [Thread-389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:30:22.947 [DEBUG] [Thread-389] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:30:22.947 [DEBUG] [Thread-389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:30:22.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:30:22.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:30:23.005 [DEBUG] [Thread-389] [transport.py] [_log()] userauth is OK
2025-11-25T14:30:23.005 [DEBUG] [Thread-389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:30:23.005 [DEBUG] [Thread-389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:30:23.005 [DEBUG] [Thread-389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:30:23.005 [DEBUG] [Thread-389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:30:23.024 [INFO] [Thread-389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:30:23.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:30:23.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:30:23.753 [DEBUG] [Thread-389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:30:23.753 [DEBUG] [Thread-389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:30:23.801 [DEBUG] [Thread-389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:30:23.801 [DEBUG] [Thread-389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:30:23.810 [DEBUG] [Thread-389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:30:23.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:30:23.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:30:23.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:30:23.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:30:23.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:30:23.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:30:23.847 [DEBUG] [Thread-389] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:30:35.685 [DEBUG] [Thread-391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:30:50.752 [DEBUG] [Thread-392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:30:53.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:30:53.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:30:53.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:30:54.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 30, 51), 36.92, 7.84, 0.0, 12.44, 26.04, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:30:54.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:30:51
2025-11-25T14:30:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:30:54.810 [DEBUG] [Thread-393] [transport.py] [_log()] starting thread (client mode): 0x7374d0c0
2025-11-25T14:30:54.810 [DEBUG] [Thread-393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:30:54.831 [DEBUG] [Thread-393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:30:54.831 [INFO] [Thread-393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:30:54.834 [DEBUG] [Thread-393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] client lang: <none>
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] server lang: <none>
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] kex follows: False
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] Compression: none
2025-11-25T14:30:54.835 [DEBUG] [Thread-393] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:30:54.850 [DEBUG] [Thread-393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:30:54.850 [DEBUG] [Thread-393] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:30:54.850 [DEBUG] [Thread-393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:30:54.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:30:54.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:30:54.851 [DEBUG] [Thread-393] [transport.py] [_log()] userauth is OK
2025-11-25T14:30:54.851 [DEBUG] [Thread-393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:30:54.851 [DEBUG] [Thread-393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:30:54.851 [DEBUG] [Thread-393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:30:54.851 [DEBUG] [Thread-393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:30:54.864 [INFO] [Thread-393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:30:54.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:30:55.517 [DEBUG] [Thread-393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:30:55.517 [DEBUG] [Thread-393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:30:55.518 [DEBUG] [Thread-393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:30:55.558 [DEBUG] [Thread-393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:30:55.558 [DEBUG] [Thread-393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:30:55.561 [DEBUG] [Thread-393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:30:55.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:30:55.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:30:55.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:30:55.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:30:55.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:30:55.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:30:55.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:30:55.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:30:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:30:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.521282 -999.00  +25.90  13.32     13   -4.20 1 1 1 1 1   888    0 31.49 42.71 ----- 12.7 13.3 66.2 15.2 33.7 -30.8 34.0 -32.4 35.5 -30.7 35.8 -30.8
2025-11-25T14:30:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:30:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:30:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.521282
2025-11-25T14:30:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:30:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:30:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:30:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:30:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:30:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:30:51', tmtdew=36.92, humidity=7.84, cloud=0.0, wind=12.44, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:30:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:30:55.576 [DEBUG] [Thread-393] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:30:55.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:30:55.670 [DEBUG] [Thread-396] [transport.py] [_log()] starting thread (client mode): 0x7374fd30
2025-11-25T14:30:55.670 [DEBUG] [Thread-396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:30:55.686 [DEBUG] [Thread-396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:30:55.686 [INFO] [Thread-396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:30:55.693 [DEBUG] [Thread-396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:30:55.693 [DEBUG] [Thread-396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:30:55.693 [DEBUG] [Thread-396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:30:55.693 [DEBUG] [Thread-396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:30:55.693 [DEBUG] [Thread-396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:30:55.693 [DEBUG] [Thread-396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] client lang: <none>
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] server lang: <none>
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] kex follows: False
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] Compression: none
2025-11-25T14:30:55.694 [DEBUG] [Thread-396] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:30:55.752 [DEBUG] [Thread-396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:30:55.752 [DEBUG] [Thread-396] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:30:55.753 [DEBUG] [Thread-396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:30:55.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:30:55.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:30:55.809 [DEBUG] [Thread-396] [transport.py] [_log()] userauth is OK
2025-11-25T14:30:55.809 [DEBUG] [Thread-396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:30:55.809 [DEBUG] [Thread-396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:30:55.809 [DEBUG] [Thread-396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:30:55.809 [DEBUG] [Thread-396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:30:55.823 [INFO] [Thread-396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:30:55.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:30:55.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:30:56.533 [DEBUG] [Thread-396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:30:56.533 [DEBUG] [Thread-396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:30:56.581 [DEBUG] [Thread-396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:30:56.581 [DEBUG] [Thread-396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:30:56.589 [DEBUG] [Thread-396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:30:56.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:30:56.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:30:56.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:30:56.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:30:56.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:30:56.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:30:56.620 [DEBUG] [Thread-396] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:30:59.041 [DEBUG] [Thread-398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:31:05.793 [DEBUG] [Thread-399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:31:20.872 [DEBUG] [Thread-400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:31:26.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:31:26.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:31:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:31:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 31, 23), 36.59, 8.02, 0.0, 7.91, 25.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:31:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:31:23
2025-11-25T14:31:27.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:31:27.590 [DEBUG] [Thread-401] [transport.py] [_log()] starting thread (client mode): 0x7376ceb0
2025-11-25T14:31:27.590 [DEBUG] [Thread-401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:31:27.614 [DEBUG] [Thread-401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:31:27.614 [INFO] [Thread-401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:31:27.618 [DEBUG] [Thread-401] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:31:27.618 [DEBUG] [Thread-401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] client lang: <none>
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] server lang: <none>
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] kex follows: False
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:31:27.619 [DEBUG] [Thread-401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:31:27.620 [DEBUG] [Thread-401] [transport.py] [_log()] Compression: none
2025-11-25T14:31:27.620 [DEBUG] [Thread-401] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:31:27.638 [DEBUG] [Thread-401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:31:27.639 [DEBUG] [Thread-401] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:31:27.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:31:27.640 [DEBUG] [Thread-401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:31:27.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:31:27.642 [DEBUG] [Thread-401] [transport.py] [_log()] userauth is OK
2025-11-25T14:31:27.642 [DEBUG] [Thread-401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:31:27.642 [DEBUG] [Thread-401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:31:27.642 [DEBUG] [Thread-401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:31:27.642 [DEBUG] [Thread-401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:31:27.678 [INFO] [Thread-401] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:31:27.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:31:28.358 [DEBUG] [Thread-401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:31:28.358 [DEBUG] [Thread-401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:31:28.358 [DEBUG] [Thread-401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:31:28.399 [DEBUG] [Thread-401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:31:28.399 [DEBUG] [Thread-401] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:31:28.402 [DEBUG] [Thread-401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:31:28.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:31:28.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:31:28.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:31:28.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:31:28.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:31:28.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:31:28.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:31:28.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:31:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:31:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.521629 -999.00  +25.80   6.84     13   -4.30 1 1 1 1 1   888    0 31.27 40.68 ----- 6.2 6.8 88.8 13.9 33.7 -31.8 33.9 -30.9 35.4 -32.1 35.8 -31.4
2025-11-25T14:31:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:31:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:31:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.521629
2025-11-25T14:31:28.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:31:28.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:31:28.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:31:28.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:31:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:31:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:31:23', tmtdew=36.59, humidity=8.02, cloud=0.0, wind=7.91, temperature=25.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:31:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:31:28.429 [DEBUG] [Thread-401] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:31:28.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:31:28.532 [DEBUG] [Thread-404] [transport.py] [_log()] starting thread (client mode): 0x7376ea10
2025-11-25T14:31:28.532 [DEBUG] [Thread-404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:31:28.545 [DEBUG] [Thread-404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:31:28.545 [INFO] [Thread-404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:31:28.552 [DEBUG] [Thread-404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] client lang: <none>
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] server lang: <none>
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] kex follows: False
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:31:28.553 [DEBUG] [Thread-404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:31:28.554 [DEBUG] [Thread-404] [transport.py] [_log()] Compression: none
2025-11-25T14:31:28.554 [DEBUG] [Thread-404] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:31:28.611 [DEBUG] [Thread-404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:31:28.611 [DEBUG] [Thread-404] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:31:28.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:31:28.612 [DEBUG] [Thread-404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:31:28.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:31:28.666 [DEBUG] [Thread-404] [transport.py] [_log()] userauth is OK
2025-11-25T14:31:28.667 [DEBUG] [Thread-404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:31:28.667 [DEBUG] [Thread-404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:31:28.667 [DEBUG] [Thread-404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:31:28.667 [DEBUG] [Thread-404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:31:28.686 [INFO] [Thread-404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:31:28.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:31:28.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:31:29.406 [DEBUG] [Thread-404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:31:29.406 [DEBUG] [Thread-404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:31:29.454 [DEBUG] [Thread-404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:31:29.454 [DEBUG] [Thread-404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:31:29.464 [DEBUG] [Thread-404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:31:29.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:31:29.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:31:29.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:31:29.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:31:29.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:31:29.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:31:29.501 [DEBUG] [Thread-404] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:31:35.911 [DEBUG] [Thread-406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:31:50.971 [DEBUG] [Thread-407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:31:59.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:31:59.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:31:59.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:31:59.771 [DEBUG] [Thread-408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:32:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 31, 55), 36.27, 8.52, 0.0, 5.7, 25.69, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:32:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:31:55
2025-11-25T14:32:00.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:32:00.464 [DEBUG] [Thread-409] [transport.py] [_log()] starting thread (client mode): 0x7376dde0
2025-11-25T14:32:00.464 [DEBUG] [Thread-409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:32:00.484 [DEBUG] [Thread-409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:32:00.484 [INFO] [Thread-409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:32:00.485 [DEBUG] [Thread-409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] client lang: <none>
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] server lang: <none>
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] kex follows: False
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] Compression: none
2025-11-25T14:32:00.486 [DEBUG] [Thread-409] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:32:00.497 [DEBUG] [Thread-409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:32:00.498 [DEBUG] [Thread-409] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:32:00.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:32:00.499 [DEBUG] [Thread-409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:32:00.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:32:00.500 [DEBUG] [Thread-409] [transport.py] [_log()] userauth is OK
2025-11-25T14:32:00.501 [DEBUG] [Thread-409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:32:00.501 [DEBUG] [Thread-409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:32:00.501 [DEBUG] [Thread-409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:32:00.501 [DEBUG] [Thread-409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:32:00.519 [INFO] [Thread-409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:32:00.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:32:01.103 [DEBUG] [Thread-409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:32:01.103 [DEBUG] [Thread-409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:32:01.103 [DEBUG] [Thread-409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:32:01.145 [DEBUG] [Thread-409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:32:01.145 [DEBUG] [Thread-409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:32:01.147 [DEBUG] [Thread-409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:32:01.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:32:01.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:32:01.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:32:01.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:32:01.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:32:01.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:32:01.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:32:01.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:32:01.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.521976 -999.00  +25.80   8.16     13   -4.30 1 1 1 1 1   888    0 31.09 40.42 ----- 10.7 8.2 57.4 10.6 33.8 -32.1 33.9 -31.3 35.4 -31.3 35.9 -29.7
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.521976
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:32:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:31:55', tmtdew=36.27, humidity=8.52, cloud=0.0, wind=5.7, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:31:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:32:01.167 [DEBUG] [Thread-409] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:32:01.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:32:01.260 [DEBUG] [Thread-412] [transport.py] [_log()] starting thread (client mode): 0x7376ddb0
2025-11-25T14:32:01.260 [DEBUG] [Thread-412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:32:01.274 [DEBUG] [Thread-412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:32:01.274 [INFO] [Thread-412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:32:01.281 [DEBUG] [Thread-412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:32:01.281 [DEBUG] [Thread-412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:32:01.282 [DEBUG] [Thread-412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:32:01.282 [DEBUG] [Thread-412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:32:01.282 [DEBUG] [Thread-412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:32:01.282 [DEBUG] [Thread-412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:32:01.282 [DEBUG] [Thread-412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:32:01.282 [DEBUG] [Thread-412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:32:01.282 [DEBUG] [Thread-412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] client lang: <none>
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] server lang: <none>
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] kex follows: False
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] Compression: none
2025-11-25T14:32:01.283 [DEBUG] [Thread-412] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:32:01.344 [DEBUG] [Thread-412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:32:01.344 [DEBUG] [Thread-412] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:32:01.345 [DEBUG] [Thread-412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:32:01.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:32:01.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:32:01.400 [DEBUG] [Thread-412] [transport.py] [_log()] userauth is OK
2025-11-25T14:32:01.400 [DEBUG] [Thread-412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:32:01.400 [DEBUG] [Thread-412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:32:01.400 [DEBUG] [Thread-412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:32:01.400 [DEBUG] [Thread-412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:32:01.420 [INFO] [Thread-412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:32:01.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:32:01.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:32:02.164 [DEBUG] [Thread-412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:32:02.164 [DEBUG] [Thread-412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:32:02.212 [DEBUG] [Thread-412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:32:02.212 [DEBUG] [Thread-412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:32:02.221 [DEBUG] [Thread-412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:32:02.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:32:02.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:32:02.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:32:02.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:32:02.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:32:02.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:32:02.258 [DEBUG] [Thread-412] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:32:06.015 [DEBUG] [Thread-414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:32:21.081 [DEBUG] [Thread-415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:32:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:32:32.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:32:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:32:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 32, 27), 36.13, 8.6, 0.0, 7.98, 25.65, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:32:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:32:27
2025-11-25T14:32:33.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:32:33.249 [DEBUG] [Thread-416] [transport.py] [_log()] starting thread (client mode): 0x7374f220
2025-11-25T14:32:33.249 [DEBUG] [Thread-416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:32:33.270 [DEBUG] [Thread-416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:32:33.270 [INFO] [Thread-416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:32:33.273 [DEBUG] [Thread-416] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:32:33.273 [DEBUG] [Thread-416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:32:33.273 [DEBUG] [Thread-416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:32:33.273 [DEBUG] [Thread-416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:32:33.273 [DEBUG] [Thread-416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:32:33.273 [DEBUG] [Thread-416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:32:33.274 [DEBUG] [Thread-416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:32:33.274 [DEBUG] [Thread-416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:32:33.274 [DEBUG] [Thread-416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:32:33.274 [DEBUG] [Thread-416] [transport.py] [_log()] client lang: <none>
2025-11-25T14:32:33.274 [DEBUG] [Thread-416] [transport.py] [_log()] server lang: <none>
2025-11-25T14:32:33.274 [DEBUG] [Thread-416] [transport.py] [_log()] kex follows: False
2025-11-25T14:32:33.274 [DEBUG] [Thread-416] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:32:33.274 [DEBUG] [Thread-416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:32:33.275 [DEBUG] [Thread-416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:32:33.275 [DEBUG] [Thread-416] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:32:33.275 [DEBUG] [Thread-416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:32:33.275 [DEBUG] [Thread-416] [transport.py] [_log()] Compression: none
2025-11-25T14:32:33.275 [DEBUG] [Thread-416] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:32:33.296 [DEBUG] [Thread-416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:32:33.297 [DEBUG] [Thread-416] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:32:33.298 [DEBUG] [Thread-416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:32:33.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:32:33.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:32:33.339 [DEBUG] [Thread-416] [transport.py] [_log()] userauth is OK
2025-11-25T14:32:33.339 [DEBUG] [Thread-416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:32:33.339 [DEBUG] [Thread-416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:32:33.340 [DEBUG] [Thread-416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:32:33.340 [DEBUG] [Thread-416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:32:33.371 [INFO] [Thread-416] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:32:33.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:32:33.995 [DEBUG] [Thread-416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:32:33.995 [DEBUG] [Thread-416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:32:33.996 [DEBUG] [Thread-416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:32:34.036 [DEBUG] [Thread-416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:32:34.036 [DEBUG] [Thread-416] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:32:34.040 [DEBUG] [Thread-416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:32:34.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:32:34.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:32:34.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:32:34.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:32:34.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:32:34.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:32:34.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:32:34.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:32:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:32:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.522323 -999.00  +25.80  15.74     13   -4.50 1 1 1 1 1   888    0 31.51 43.60 ----- 14.7 15.7 76.7 21.2 33.8 -30.1 33.8 -32.2 35.2 -30.6 36.0 -30.7
2025-11-25T14:32:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:32:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:32:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.522323
2025-11-25T14:32:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:32:34.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:32:34.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:32:34.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:32:34.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:32:34.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:32:27', tmtdew=36.13, humidity=8.6, cloud=0.0, wind=7.98, temperature=25.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:32:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:32:34.069 [DEBUG] [Thread-416] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:32:34.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:32:34.173 [DEBUG] [Thread-419] [transport.py] [_log()] starting thread (client mode): 0x7374cac0
2025-11-25T14:32:34.174 [DEBUG] [Thread-419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:32:34.188 [DEBUG] [Thread-419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:32:34.188 [INFO] [Thread-419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:32:34.196 [DEBUG] [Thread-419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:32:34.196 [DEBUG] [Thread-419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:32:34.196 [DEBUG] [Thread-419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:32:34.196 [DEBUG] [Thread-419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] client lang: <none>
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] server lang: <none>
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] kex follows: False
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] Compression: none
2025-11-25T14:32:34.197 [DEBUG] [Thread-419] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:32:34.256 [DEBUG] [Thread-419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:32:34.257 [DEBUG] [Thread-419] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:32:34.258 [DEBUG] [Thread-419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:32:34.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:32:34.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:32:34.315 [DEBUG] [Thread-419] [transport.py] [_log()] userauth is OK
2025-11-25T14:32:34.316 [DEBUG] [Thread-419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:32:34.316 [DEBUG] [Thread-419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:32:34.316 [DEBUG] [Thread-419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:32:34.316 [DEBUG] [Thread-419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:32:34.335 [INFO] [Thread-419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:32:34.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:32:34.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:32:35.050 [DEBUG] [Thread-419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:32:35.050 [DEBUG] [Thread-419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:32:35.098 [DEBUG] [Thread-419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:32:35.098 [DEBUG] [Thread-419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:32:35.107 [DEBUG] [Thread-419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:32:35.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:32:35.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:32:35.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:32:35.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:32:35.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:32:35.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:32:35.145 [DEBUG] [Thread-419] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:32:36.128 [DEBUG] [Thread-421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:32:51.190 [DEBUG] [Thread-422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:33:00.302 [DEBUG] [Thread-423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:33:05.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:33:05.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:33:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:33:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 32, 59), 36.28, 8.07, 0.0, 12.32, 25.69, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:33:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:32:59
2025-11-25T14:33:05.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:33:06.089 [DEBUG] [Thread-424] [transport.py] [_log()] starting thread (client mode): 0x7376e710
2025-11-25T14:33:06.090 [DEBUG] [Thread-424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:33:06.111 [DEBUG] [Thread-424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:33:06.111 [INFO] [Thread-424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:33:06.114 [DEBUG] [Thread-424] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:33:06.114 [DEBUG] [Thread-424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] client lang: <none>
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] server lang: <none>
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] kex follows: False
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] Compression: none
2025-11-25T14:33:06.115 [DEBUG] [Thread-424] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:33:06.133 [DEBUG] [Thread-424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:33:06.134 [DEBUG] [Thread-424] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:33:06.134 [DEBUG] [Thread-424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:33:06.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:33:06.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:33:06.136 [DEBUG] [Thread-424] [transport.py] [_log()] userauth is OK
2025-11-25T14:33:06.136 [DEBUG] [Thread-424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:33:06.137 [DEBUG] [Thread-424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:33:06.137 [DEBUG] [Thread-424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:33:06.137 [DEBUG] [Thread-424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:33:06.175 [INFO] [Thread-424] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:33:06.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:33:06.229 [DEBUG] [Thread-426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:33:06.827 [DEBUG] [Thread-424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:33:06.828 [DEBUG] [Thread-424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:33:06.828 [DEBUG] [Thread-424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:33:06.869 [DEBUG] [Thread-424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:33:06.869 [DEBUG] [Thread-424] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:33:06.873 [DEBUG] [Thread-424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:33:06.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:33:06.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:33:06.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:33:06.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:33:06.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:33:06.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:33:06.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:33:06.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:33:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:33:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.522671 -999.00  +25.70  11.82     13   -4.30 1 1 1 1 1   888    0 31.23 44.80 ----- 6.0 11.8 43.2 17.3 33.5 -34.3 33.8 -32.3 35.2 -29.8 35.8 -30.9
2025-11-25T14:33:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:33:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:33:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.522671
2025-11-25T14:33:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:33:06.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:33:06.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:33:06.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:33:06.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:33:06.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:32:59', tmtdew=36.28, humidity=8.07, cloud=0.0, wind=12.32, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:32:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:33:06.900 [DEBUG] [Thread-424] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:33:06.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:33:07.003 [DEBUG] [Thread-428] [transport.py] [_log()] starting thread (client mode): 0x7376e5f0
2025-11-25T14:33:07.004 [DEBUG] [Thread-428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:33:07.018 [DEBUG] [Thread-428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:33:07.018 [INFO] [Thread-428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:33:07.026 [DEBUG] [Thread-428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:33:07.026 [DEBUG] [Thread-428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:33:07.026 [DEBUG] [Thread-428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:33:07.026 [DEBUG] [Thread-428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:33:07.026 [DEBUG] [Thread-428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:33:07.026 [DEBUG] [Thread-428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:33:07.026 [DEBUG] [Thread-428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:33:07.026 [DEBUG] [Thread-428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] client lang: <none>
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] server lang: <none>
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] kex follows: False
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] Compression: none
2025-11-25T14:33:07.027 [DEBUG] [Thread-428] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:33:07.086 [DEBUG] [Thread-428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:33:07.086 [DEBUG] [Thread-428] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:33:07.087 [DEBUG] [Thread-428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:33:07.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:33:07.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:33:07.145 [DEBUG] [Thread-428] [transport.py] [_log()] userauth is OK
2025-11-25T14:33:07.146 [DEBUG] [Thread-428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:33:07.146 [DEBUG] [Thread-428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:33:07.146 [DEBUG] [Thread-428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:33:07.146 [DEBUG] [Thread-428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:33:07.165 [INFO] [Thread-428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:33:07.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:33:07.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:33:07.915 [DEBUG] [Thread-428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:33:07.915 [DEBUG] [Thread-428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:33:07.963 [DEBUG] [Thread-428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:33:07.963 [DEBUG] [Thread-428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:33:07.972 [DEBUG] [Thread-428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:33:07.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:33:07.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:33:07.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:33:07.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:33:07.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:33:07.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:33:08.006 [DEBUG] [Thread-428] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:33:21.274 [DEBUG] [Thread-430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:33:36.347 [DEBUG] [Thread-431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:33:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:33:38.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:33:38.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:33:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 33, 31), 36.11, 8.19, 0.0, 10.29, 25.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:33:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:33:31
2025-11-25T14:33:38.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:33:38.955 [DEBUG] [Thread-432] [transport.py] [_log()] starting thread (client mode): 0x7378ead0
2025-11-25T14:33:38.955 [DEBUG] [Thread-432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:33:38.975 [DEBUG] [Thread-432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:33:38.976 [INFO] [Thread-432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:33:38.979 [DEBUG] [Thread-432] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:33:38.979 [DEBUG] [Thread-432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:33:38.980 [DEBUG] [Thread-432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:33:38.980 [DEBUG] [Thread-432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:33:38.980 [DEBUG] [Thread-432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:33:38.980 [DEBUG] [Thread-432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:33:38.980 [DEBUG] [Thread-432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:33:38.980 [DEBUG] [Thread-432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:33:38.980 [DEBUG] [Thread-432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:33:38.980 [DEBUG] [Thread-432] [transport.py] [_log()] client lang: <none>
2025-11-25T14:33:38.980 [DEBUG] [Thread-432] [transport.py] [_log()] server lang: <none>
2025-11-25T14:33:38.981 [DEBUG] [Thread-432] [transport.py] [_log()] kex follows: False
2025-11-25T14:33:38.981 [DEBUG] [Thread-432] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:33:38.981 [DEBUG] [Thread-432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:33:38.981 [DEBUG] [Thread-432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:33:38.981 [DEBUG] [Thread-432] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:33:38.981 [DEBUG] [Thread-432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:33:38.981 [DEBUG] [Thread-432] [transport.py] [_log()] Compression: none
2025-11-25T14:33:38.982 [DEBUG] [Thread-432] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:33:39.002 [DEBUG] [Thread-432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:33:39.002 [DEBUG] [Thread-432] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:33:39.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:33:39.003 [DEBUG] [Thread-432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:33:39.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:33:39.005 [DEBUG] [Thread-432] [transport.py] [_log()] userauth is OK
2025-11-25T14:33:39.005 [DEBUG] [Thread-432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:33:39.005 [DEBUG] [Thread-432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:33:39.005 [DEBUG] [Thread-432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:33:39.005 [DEBUG] [Thread-432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:33:39.042 [INFO] [Thread-432] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:33:39.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:33:39.683 [DEBUG] [Thread-432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:33:39.684 [DEBUG] [Thread-432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:33:39.684 [DEBUG] [Thread-432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:33:39.725 [DEBUG] [Thread-432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:33:39.725 [DEBUG] [Thread-432] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:33:39.729 [DEBUG] [Thread-432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:33:39.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:33:39.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:33:39.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:33:39.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:33:39.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:33:39.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:33:39.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:33:39.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:33:39.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:33:39.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.523018 -999.00  +25.60   9.81     13   -4.20 1 1 1 1 1   888    0 30.99 43.78 ----- 5.4 9.8 343.4 12.1 33.8 -30.2 33.9 -31.7 35.4 -29.1 35.8 -29.8
2025-11-25T14:33:39.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:33:39.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:33:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.523018
2025-11-25T14:33:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:33:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:33:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:33:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:33:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:33:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:33:31', tmtdew=36.11, humidity=8.19, cloud=0.0, wind=10.29, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:33:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:33:39.757 [DEBUG] [Thread-432] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:33:39.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:33:39.863 [DEBUG] [Thread-435] [transport.py] [_log()] starting thread (client mode): 0x7378fd90
2025-11-25T14:33:39.863 [DEBUG] [Thread-435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:33:39.879 [DEBUG] [Thread-435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:33:39.880 [INFO] [Thread-435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:33:39.887 [DEBUG] [Thread-435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:33:39.887 [DEBUG] [Thread-435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:33:39.887 [DEBUG] [Thread-435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] client lang: <none>
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] server lang: <none>
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] kex follows: False
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] Compression: none
2025-11-25T14:33:39.888 [DEBUG] [Thread-435] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:33:39.946 [DEBUG] [Thread-435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:33:39.947 [DEBUG] [Thread-435] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:33:39.947 [DEBUG] [Thread-435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:33:39.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:33:39.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:33:40.002 [DEBUG] [Thread-435] [transport.py] [_log()] userauth is OK
2025-11-25T14:33:40.002 [DEBUG] [Thread-435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:33:40.002 [DEBUG] [Thread-435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:33:40.002 [DEBUG] [Thread-435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:33:40.002 [DEBUG] [Thread-435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:33:40.021 [INFO] [Thread-435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:33:40.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:33:40.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:33:40.743 [DEBUG] [Thread-435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:33:40.743 [DEBUG] [Thread-435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:33:40.791 [DEBUG] [Thread-435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:33:40.791 [DEBUG] [Thread-435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:33:40.800 [DEBUG] [Thread-435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:33:40.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:33:40.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:33:40.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:33:40.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:33:40.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:33:40.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:33:40.837 [DEBUG] [Thread-435] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:33:51.392 [DEBUG] [Thread-437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:34:01.013 [DEBUG] [Thread-438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:34:06.453 [DEBUG] [Thread-439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:34:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:34:10.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:34:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:34:11.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 34, 3), 36.18, 8.14, 0.0, 8.37, 25.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:34:11.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:34:03
2025-11-25T14:34:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:34:11.808 [DEBUG] [Thread-440] [transport.py] [_log()] starting thread (client mode): 0x7376cf70
2025-11-25T14:34:11.808 [DEBUG] [Thread-440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:34:11.829 [DEBUG] [Thread-440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:34:11.830 [INFO] [Thread-440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] client lang: <none>
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] server lang: <none>
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] kex follows: False
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:34:11.833 [DEBUG] [Thread-440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:34:11.834 [DEBUG] [Thread-440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:34:11.834 [DEBUG] [Thread-440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:34:11.834 [DEBUG] [Thread-440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:34:11.834 [DEBUG] [Thread-440] [transport.py] [_log()] Compression: none
2025-11-25T14:34:11.834 [DEBUG] [Thread-440] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:34:11.843 [DEBUG] [Thread-440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:34:11.844 [DEBUG] [Thread-440] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:34:11.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:34:11.845 [DEBUG] [Thread-440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:34:11.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:34:11.847 [DEBUG] [Thread-440] [transport.py] [_log()] userauth is OK
2025-11-25T14:34:11.847 [DEBUG] [Thread-440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:34:11.847 [DEBUG] [Thread-440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:34:11.847 [DEBUG] [Thread-440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:34:11.847 [DEBUG] [Thread-440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:34:11.872 [INFO] [Thread-440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:34:11.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:34:12.535 [DEBUG] [Thread-440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:34:12.536 [DEBUG] [Thread-440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:34:12.536 [DEBUG] [Thread-440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:34:12.577 [DEBUG] [Thread-440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:34:12.577 [DEBUG] [Thread-440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:34:12.580 [DEBUG] [Thread-440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:34:12.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:34:12.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:34:12.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:34:12.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:34:12.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:34:12.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:34:12.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:34:12.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:34:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:34:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.523365 -999.00  +25.60  12.28     13   -4.10 1 1 1 1 1   888    0 31.07 40.65 ----- 11.1 12.3 31.0 14.3 34.1 -30.4 34.0 -32.0 35.4 -29.4 35.9 -29.9
2025-11-25T14:34:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:34:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:34:12.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.523365
2025-11-25T14:34:12.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:34:12.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:34:12.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:34:12.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:34:12.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:34:12.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:34:03', tmtdew=36.18, humidity=8.14, cloud=0.0, wind=8.37, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:33:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:34:12.606 [DEBUG] [Thread-440] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:34:12.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:34:12.710 [DEBUG] [Thread-443] [transport.py] [_log()] starting thread (client mode): 0x7376e320
2025-11-25T14:34:12.710 [DEBUG] [Thread-443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:34:12.731 [DEBUG] [Thread-443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:34:12.731 [INFO] [Thread-443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:34:12.738 [DEBUG] [Thread-443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] client lang: <none>
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] server lang: <none>
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] kex follows: False
2025-11-25T14:34:12.739 [DEBUG] [Thread-443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:34:12.740 [DEBUG] [Thread-443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:34:12.740 [DEBUG] [Thread-443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:34:12.740 [DEBUG] [Thread-443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:34:12.740 [DEBUG] [Thread-443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:34:12.740 [DEBUG] [Thread-443] [transport.py] [_log()] Compression: none
2025-11-25T14:34:12.740 [DEBUG] [Thread-443] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:34:12.798 [DEBUG] [Thread-443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:34:12.799 [DEBUG] [Thread-443] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:34:12.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:34:12.800 [DEBUG] [Thread-443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:34:12.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:34:12.855 [DEBUG] [Thread-443] [transport.py] [_log()] userauth is OK
2025-11-25T14:34:12.855 [DEBUG] [Thread-443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:34:12.855 [DEBUG] [Thread-443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:34:12.856 [DEBUG] [Thread-443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:34:12.856 [DEBUG] [Thread-443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:34:12.876 [INFO] [Thread-443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:34:12.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:34:12.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:34:13.593 [DEBUG] [Thread-443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:34:13.593 [DEBUG] [Thread-443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:34:13.641 [DEBUG] [Thread-443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:34:13.641 [DEBUG] [Thread-443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:34:13.650 [DEBUG] [Thread-443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:34:13.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:34:13.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')
2025-11-25T14:34:13.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:34:13.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:34:13.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:34:13.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:34:13.687 [DEBUG] [Thread-443] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:34:21.499 [DEBUG] [Thread-445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:34:36.564 [DEBUG] [Thread-446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:34:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:34:43.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:34:43.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:34:44.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 34, 35), 36.01, 8.62, 0.0, 8.84, 25.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:34:44.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:34:35
2025-11-25T14:34:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:34:44.666 [DEBUG] [Thread-447] [transport.py] [_log()] starting thread (client mode): 0x73783910
2025-11-25T14:34:44.666 [DEBUG] [Thread-447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:34:44.681 [DEBUG] [Thread-447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:34:44.681 [INFO] [Thread-447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:34:44.684 [DEBUG] [Thread-447] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] client lang: <none>
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] server lang: <none>
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] kex follows: False
2025-11-25T14:34:44.685 [DEBUG] [Thread-447] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:34:44.686 [DEBUG] [Thread-447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:34:44.686 [DEBUG] [Thread-447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:34:44.686 [DEBUG] [Thread-447] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:34:44.686 [DEBUG] [Thread-447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:34:44.686 [DEBUG] [Thread-447] [transport.py] [_log()] Compression: none
2025-11-25T14:34:44.686 [DEBUG] [Thread-447] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:34:44.704 [DEBUG] [Thread-447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:34:44.705 [DEBUG] [Thread-447] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:34:44.706 [DEBUG] [Thread-447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:34:44.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:34:44.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:34:44.708 [DEBUG] [Thread-447] [transport.py] [_log()] userauth is OK
2025-11-25T14:34:44.708 [DEBUG] [Thread-447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:34:44.709 [DEBUG] [Thread-447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:34:44.709 [DEBUG] [Thread-447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:34:44.709 [DEBUG] [Thread-447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:34:44.732 [INFO] [Thread-447] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:34:44.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:34:45.369 [DEBUG] [Thread-447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:34:45.369 [DEBUG] [Thread-447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:34:45.369 [DEBUG] [Thread-447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:34:45.410 [DEBUG] [Thread-447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:34:45.410 [DEBUG] [Thread-447] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:34:45.413 [DEBUG] [Thread-447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:34:45.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:34:45.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:34:45.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:34:45.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:34:45.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:34:45.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:34:45.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:34:45.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:34:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:34:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.523712 -999.00  +25.50   9.10     13   -4.30 1 1 1 1 1   888    0 31.02 39.28 ----- 7.5 9.1 42.2 13.9 34.0 -31.2 33.9 -32.7 35.2 -31.5 35.8 -30.0
2025-11-25T14:34:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:34:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:34:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.523712
2025-11-25T14:34:45.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:34:45.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:34:45.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:34:45.438 [DEBUG] [Thread-447] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:34:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:34:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:34:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:34:35', tmtdew=36.01, humidity=8.62, cloud=0.0, wind=8.84, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:34:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:34:45.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:34:45.542 [DEBUG] [Thread-450] [transport.py] [_log()] starting thread (client mode): 0x737810f0
2025-11-25T14:34:45.542 [DEBUG] [Thread-450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:34:45.561 [DEBUG] [Thread-450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:34:45.562 [INFO] [Thread-450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:34:45.569 [DEBUG] [Thread-450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:34:45.569 [DEBUG] [Thread-450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:34:45.569 [DEBUG] [Thread-450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:34:45.570 [DEBUG] [Thread-450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:34:45.570 [DEBUG] [Thread-450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:34:45.570 [DEBUG] [Thread-450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:34:45.570 [DEBUG] [Thread-450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:34:45.570 [DEBUG] [Thread-450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:34:45.570 [DEBUG] [Thread-450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:34:45.570 [DEBUG] [Thread-450] [transport.py] [_log()] client lang: <none>
2025-11-25T14:34:45.570 [DEBUG] [Thread-450] [transport.py] [_log()] server lang: <none>
2025-11-25T14:34:45.570 [DEBUG] [Thread-450] [transport.py] [_log()] kex follows: False
2025-11-25T14:34:45.571 [DEBUG] [Thread-450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:34:45.571 [DEBUG] [Thread-450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:34:45.571 [DEBUG] [Thread-450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:34:45.571 [DEBUG] [Thread-450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:34:45.571 [DEBUG] [Thread-450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:34:45.571 [DEBUG] [Thread-450] [transport.py] [_log()] Compression: none
2025-11-25T14:34:45.571 [DEBUG] [Thread-450] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:34:45.628 [DEBUG] [Thread-450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:34:45.628 [DEBUG] [Thread-450] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:34:45.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:34:45.630 [DEBUG] [Thread-450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:34:45.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:34:45.684 [DEBUG] [Thread-450] [transport.py] [_log()] userauth is OK
2025-11-25T14:34:45.684 [DEBUG] [Thread-450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:34:45.684 [DEBUG] [Thread-450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:34:45.684 [DEBUG] [Thread-450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:34:45.684 [DEBUG] [Thread-450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:34:45.704 [INFO] [Thread-450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:34:45.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:34:45.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:34:46.465 [DEBUG] [Thread-450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:34:46.466 [DEBUG] [Thread-450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:34:46.514 [DEBUG] [Thread-450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:34:46.514 [DEBUG] [Thread-450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:34:46.523 [DEBUG] [Thread-450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:34:46.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:34:46.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:34:46.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:34:46.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:34:46.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:34:46.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:34:46.559 [DEBUG] [Thread-450] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:34:51.602 [DEBUG] [Thread-452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:35:01.560 [DEBUG] [Thread-453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:35:06.674 [DEBUG] [Thread-454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:35:16.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:35:16.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:35:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:35:17.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 35, 7), 35.79, 8.75, 0.0, 8.42, 25.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:35:17.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:35:07
2025-11-25T14:35:17.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:35:17.601 [DEBUG] [Thread-455] [transport.py] [_log()] starting thread (client mode): 0x73781600
2025-11-25T14:35:17.601 [DEBUG] [Thread-455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:35:17.630 [DEBUG] [Thread-455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:35:17.630 [INFO] [Thread-455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:35:17.633 [DEBUG] [Thread-455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:35:17.633 [DEBUG] [Thread-455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:35:17.633 [DEBUG] [Thread-455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:35:17.633 [DEBUG] [Thread-455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:35:17.633 [DEBUG] [Thread-455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] client lang: <none>
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] server lang: <none>
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] kex follows: False
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] Compression: none
2025-11-25T14:35:17.634 [DEBUG] [Thread-455] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:35:17.650 [DEBUG] [Thread-455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:35:17.650 [DEBUG] [Thread-455] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:35:17.650 [DEBUG] [Thread-455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:35:17.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:35:17.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:35:17.651 [DEBUG] [Thread-455] [transport.py] [_log()] userauth is OK
2025-11-25T14:35:17.651 [DEBUG] [Thread-455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:35:17.652 [DEBUG] [Thread-455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:35:17.652 [DEBUG] [Thread-455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:35:17.652 [DEBUG] [Thread-455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:35:17.662 [INFO] [Thread-455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:35:17.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:35:18.297 [DEBUG] [Thread-455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:35:18.297 [DEBUG] [Thread-455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:35:18.297 [DEBUG] [Thread-455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:35:18.339 [DEBUG] [Thread-455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:35:18.339 [DEBUG] [Thread-455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:35:18.341 [DEBUG] [Thread-455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:35:18.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:35:18.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:35:18.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:35:18.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:35:18.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:35:18.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:35:18.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.524060 -999.00  +25.30   6.82     13   -4.40 1 1 1 1 1   888    0 31.20 35.00 ----- 7.5 6.8 295.0 8.4 34.0 -32.3 34.0 -30.9 35.2 -29.5 35.7 -29.8
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.524060
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:35:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:35:07', tmtdew=35.79, humidity=8.75, cloud=0.0, wind=8.42, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:34:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:35:18.361 [DEBUG] [Thread-455] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:35:18.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:35:18.453 [DEBUG] [Thread-458] [transport.py] [_log()] starting thread (client mode): 0x737824a0
2025-11-25T14:35:18.453 [DEBUG] [Thread-458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:35:18.468 [DEBUG] [Thread-458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:35:18.468 [INFO] [Thread-458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:35:18.475 [DEBUG] [Thread-458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:35:18.475 [DEBUG] [Thread-458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:35:18.475 [DEBUG] [Thread-458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:35:18.475 [DEBUG] [Thread-458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:35:18.475 [DEBUG] [Thread-458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:35:18.475 [DEBUG] [Thread-458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:35:18.475 [DEBUG] [Thread-458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:35:18.475 [DEBUG] [Thread-458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] client lang: <none>
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] server lang: <none>
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] kex follows: False
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] Compression: none
2025-11-25T14:35:18.476 [DEBUG] [Thread-458] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:35:18.530 [DEBUG] [Thread-458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:35:18.531 [DEBUG] [Thread-458] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:35:18.531 [DEBUG] [Thread-458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:35:18.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:35:18.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:35:18.588 [DEBUG] [Thread-458] [transport.py] [_log()] userauth is OK
2025-11-25T14:35:18.588 [DEBUG] [Thread-458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:35:18.588 [DEBUG] [Thread-458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:35:18.588 [DEBUG] [Thread-458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:35:18.588 [DEBUG] [Thread-458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:35:18.605 [INFO] [Thread-458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:35:18.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:35:18.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:35:19.345 [DEBUG] [Thread-458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:35:19.345 [DEBUG] [Thread-458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:35:19.393 [DEBUG] [Thread-458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:35:19.393 [DEBUG] [Thread-458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:35:19.402 [DEBUG] [Thread-458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:35:19.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:35:19.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:35:19.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:35:19.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:35:19.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:35:19.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:35:19.434 [DEBUG] [Thread-458] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:35:21.715 [DEBUG] [Thread-460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:35:36.787 [DEBUG] [Thread-461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:35:49.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:35:49.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:35:49.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:35:50.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 35, 39), 35.71, 8.74, 0.0, 3.11, 25.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:35:50.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:35:39
2025-11-25T14:35:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:35:50.406 [DEBUG] [Thread-462] [transport.py] [_log()] starting thread (client mode): 0x761d9e40
2025-11-25T14:35:50.406 [DEBUG] [Thread-462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:35:50.417 [DEBUG] [Thread-462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:35:50.417 [INFO] [Thread-462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:35:50.420 [DEBUG] [Thread-462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:35:50.420 [DEBUG] [Thread-462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:35:50.420 [DEBUG] [Thread-462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:35:50.420 [DEBUG] [Thread-462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:35:50.420 [DEBUG] [Thread-462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:35:50.420 [DEBUG] [Thread-462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:35:50.420 [DEBUG] [Thread-462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] client lang: <none>
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] server lang: <none>
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] kex follows: False
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] Compression: none
2025-11-25T14:35:50.421 [DEBUG] [Thread-462] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:35:50.438 [DEBUG] [Thread-462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:35:50.439 [DEBUG] [Thread-462] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:35:50.440 [DEBUG] [Thread-462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:35:50.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:35:50.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:35:50.442 [DEBUG] [Thread-462] [transport.py] [_log()] userauth is OK
2025-11-25T14:35:50.442 [DEBUG] [Thread-462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:35:50.442 [DEBUG] [Thread-462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:35:50.442 [DEBUG] [Thread-462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:35:50.442 [DEBUG] [Thread-462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:35:50.476 [INFO] [Thread-462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:35:50.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:35:51.106 [DEBUG] [Thread-462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:35:51.106 [DEBUG] [Thread-462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:35:51.107 [DEBUG] [Thread-462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:35:51.148 [DEBUG] [Thread-462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:35:51.148 [DEBUG] [Thread-462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:35:51.151 [DEBUG] [Thread-462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:35:51.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:35:51.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:35:51.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:35:51.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:35:51.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:35:51.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:35:51.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:35:51.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:35:51.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:35:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.524754 -999.00  +25.40   4.16     13   -4.10 1 1 1 1 1   888    0 30.42 24.97 ----- 2.0 4.2 278.0 10.9 34.1 -31.9 34.1 -30.6 34.9 -28.4 35.6 -30.3
2025-11-25T14:35:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:35:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:35:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.524754
2025-11-25T14:35:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:35:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:35:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:35:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:35:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:35:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:35:39', tmtdew=35.71, humidity=8.74, cloud=0.0, wind=3.11, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:35:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:35:51.176 [DEBUG] [Thread-462] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:35:51.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:35:51.281 [DEBUG] [Thread-465] [transport.py] [_log()] starting thread (client mode): 0x761db550
2025-11-25T14:35:51.281 [DEBUG] [Thread-465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:35:51.295 [DEBUG] [Thread-465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:35:51.296 [INFO] [Thread-465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] client lang: <none>
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] server lang: <none>
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] kex follows: False
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] Compression: none
2025-11-25T14:35:51.303 [DEBUG] [Thread-465] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:35:51.360 [DEBUG] [Thread-465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:35:51.361 [DEBUG] [Thread-465] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:35:51.361 [DEBUG] [Thread-465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:35:51.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:35:51.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:35:51.417 [DEBUG] [Thread-465] [transport.py] [_log()] userauth is OK
2025-11-25T14:35:51.418 [DEBUG] [Thread-465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:35:51.418 [DEBUG] [Thread-465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:35:51.418 [DEBUG] [Thread-465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:35:51.418 [DEBUG] [Thread-465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:35:51.438 [INFO] [Thread-465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:35:51.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:35:51.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:35:51.830 [DEBUG] [Thread-467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:35:52.184 [DEBUG] [Thread-465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:35:52.184 [DEBUG] [Thread-465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:35:52.232 [DEBUG] [Thread-465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:35:52.232 [DEBUG] [Thread-465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:35:52.241 [DEBUG] [Thread-465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:35:52.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:35:52.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:35:52.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:35:52.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:35:52.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:35:52.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:35:52.278 [DEBUG] [Thread-465] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:36:02.262 [DEBUG] [Thread-468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:36:06.891 [DEBUG] [Thread-469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:36:21.938 [DEBUG] [Thread-470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:36:22.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:36:22.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:36:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:36:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 36, 11), 35.86, 8.65, 0.0, 4.01, 25.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:36:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:36:11
2025-11-25T14:36:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:36:23.237 [DEBUG] [Thread-471] [transport.py] [_log()] starting thread (client mode): 0x7374f340
2025-11-25T14:36:23.237 [DEBUG] [Thread-471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:36:23.259 [DEBUG] [Thread-471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:36:23.259 [INFO] [Thread-471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] client lang: <none>
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] server lang: <none>
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] kex follows: False
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:36:23.263 [DEBUG] [Thread-471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:36:23.264 [DEBUG] [Thread-471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:36:23.264 [DEBUG] [Thread-471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:36:23.264 [DEBUG] [Thread-471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:36:23.264 [DEBUG] [Thread-471] [transport.py] [_log()] Compression: none
2025-11-25T14:36:23.264 [DEBUG] [Thread-471] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:36:23.285 [DEBUG] [Thread-471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:36:23.286 [DEBUG] [Thread-471] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:36:23.287 [DEBUG] [Thread-471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:36:23.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:36:23.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:36:23.289 [DEBUG] [Thread-471] [transport.py] [_log()] userauth is OK
2025-11-25T14:36:23.289 [DEBUG] [Thread-471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:36:23.289 [DEBUG] [Thread-471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:36:23.289 [DEBUG] [Thread-471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:36:23.289 [DEBUG] [Thread-471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:36:23.314 [INFO] [Thread-471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:36:23.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:36:23.956 [DEBUG] [Thread-471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:36:23.956 [DEBUG] [Thread-471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:36:23.957 [DEBUG] [Thread-471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:36:23.997 [DEBUG] [Thread-471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:36:23.997 [DEBUG] [Thread-471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:36:24.000 [DEBUG] [Thread-471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:36:24.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:36:24.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:36:24.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:36:24.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:36:24.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:36:24.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:36:24.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:36:24.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:36:24.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:36:24.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.525101 -999.00  +25.90   3.89     13   -4.00 1 1 1 1 1   888    0 30.53 20.99 ----- 10.0 3.9 26.7 5.3 34.4 -30.2 34.3 -31.1 35.2 -28.2 35.8 -29.5
2025-11-25T14:36:24.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:36:24.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:36:24.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.525101
2025-11-25T14:36:24.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:36:24.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:36:24.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:36:24.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:36:24.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:36:24.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:36:11', tmtdew=35.86, humidity=8.65, cloud=0.0, wind=4.01, temperature=25.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:36:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:36:24.027 [DEBUG] [Thread-471] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:36:24.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:36:24.129 [DEBUG] [Thread-474] [transport.py] [_log()] starting thread (client mode): 0x7374cd00
2025-11-25T14:36:24.129 [DEBUG] [Thread-474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:36:24.143 [DEBUG] [Thread-474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:36:24.144 [INFO] [Thread-474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:36:24.151 [DEBUG] [Thread-474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:36:24.151 [DEBUG] [Thread-474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] client lang: <none>
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] server lang: <none>
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] kex follows: False
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:36:24.152 [DEBUG] [Thread-474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:36:24.153 [DEBUG] [Thread-474] [transport.py] [_log()] Compression: none
2025-11-25T14:36:24.153 [DEBUG] [Thread-474] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:36:24.210 [DEBUG] [Thread-474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:36:24.210 [DEBUG] [Thread-474] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:36:24.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:36:24.212 [DEBUG] [Thread-474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:36:24.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:36:24.266 [DEBUG] [Thread-474] [transport.py] [_log()] userauth is OK
2025-11-25T14:36:24.266 [DEBUG] [Thread-474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:36:24.267 [DEBUG] [Thread-474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:36:24.267 [DEBUG] [Thread-474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:36:24.267 [DEBUG] [Thread-474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:36:24.285 [INFO] [Thread-474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:36:24.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:36:24.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:36:25.035 [DEBUG] [Thread-474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:36:25.035 [DEBUG] [Thread-474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:36:25.084 [DEBUG] [Thread-474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:36:25.084 [DEBUG] [Thread-474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:36:25.093 [DEBUG] [Thread-474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:36:25.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:36:25.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:36:25.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:36:25.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:36:25.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:36:25.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:36:25.130 [DEBUG] [Thread-474] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:36:36.986 [DEBUG] [Thread-476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:36:52.054 [DEBUG] [Thread-477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:36:55.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:36:55.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:36:55.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:36:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 36, 43), 35.81, 8.69, 0.0, 3.88, 25.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:36:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:36:43
2025-11-25T14:36:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:36:56.094 [DEBUG] [Thread-478] [transport.py] [_log()] starting thread (client mode): 0x761d9810
2025-11-25T14:36:56.094 [DEBUG] [Thread-478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:36:56.115 [DEBUG] [Thread-478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:36:56.115 [INFO] [Thread-478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:36:56.118 [DEBUG] [Thread-478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:36:56.119 [DEBUG] [Thread-478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:36:56.119 [DEBUG] [Thread-478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:36:56.119 [DEBUG] [Thread-478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:36:56.119 [DEBUG] [Thread-478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:36:56.119 [DEBUG] [Thread-478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:36:56.119 [DEBUG] [Thread-478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:36:56.120 [DEBUG] [Thread-478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:36:56.120 [DEBUG] [Thread-478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:36:56.120 [DEBUG] [Thread-478] [transport.py] [_log()] client lang: <none>
2025-11-25T14:36:56.120 [DEBUG] [Thread-478] [transport.py] [_log()] server lang: <none>
2025-11-25T14:36:56.120 [DEBUG] [Thread-478] [transport.py] [_log()] kex follows: False
2025-11-25T14:36:56.120 [DEBUG] [Thread-478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:36:56.120 [DEBUG] [Thread-478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:36:56.120 [DEBUG] [Thread-478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:36:56.121 [DEBUG] [Thread-478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:36:56.121 [DEBUG] [Thread-478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:36:56.121 [DEBUG] [Thread-478] [transport.py] [_log()] Compression: none
2025-11-25T14:36:56.121 [DEBUG] [Thread-478] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:36:56.142 [DEBUG] [Thread-478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:36:56.142 [DEBUG] [Thread-478] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:36:56.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:36:56.144 [DEBUG] [Thread-478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:36:56.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:36:56.146 [DEBUG] [Thread-478] [transport.py] [_log()] userauth is OK
2025-11-25T14:36:56.146 [DEBUG] [Thread-478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:36:56.146 [DEBUG] [Thread-478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:36:56.146 [DEBUG] [Thread-478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:36:56.146 [DEBUG] [Thread-478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:36:56.182 [INFO] [Thread-478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:36:56.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:36:56.830 [DEBUG] [Thread-478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:36:56.830 [DEBUG] [Thread-478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:36:56.831 [DEBUG] [Thread-478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:36:56.871 [DEBUG] [Thread-478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:36:56.871 [DEBUG] [Thread-478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:36:56.874 [DEBUG] [Thread-478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:36:56.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:36:56.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:36:56.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:36:56.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:36:56.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:36:56.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:36:56.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:36:56.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:36:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:36:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.525448 -999.00  +25.80   7.28     13   -4.20 1 1 1 1 1   888    0 30.49 18.77 ----- 7.1 7.3 81.4 14.0 34.2 -35.3 34.1 -30.8 34.9 -31.9 35.8 -31.0
2025-11-25T14:36:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:36:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:36:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.525448
2025-11-25T14:36:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:36:56.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:36:56.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:36:56.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:36:56.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:36:56.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:36:43', tmtdew=35.81, humidity=8.69, cloud=0.0, wind=3.88, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:36:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:36:56.901 [DEBUG] [Thread-478] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:36:56.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:36:57.007 [DEBUG] [Thread-481] [transport.py] [_log()] starting thread (client mode): 0x73782590
2025-11-25T14:36:57.007 [DEBUG] [Thread-481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:36:57.022 [DEBUG] [Thread-481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:36:57.022 [INFO] [Thread-481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] client lang: <none>
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] server lang: <none>
2025-11-25T14:36:57.030 [DEBUG] [Thread-481] [transport.py] [_log()] kex follows: False
2025-11-25T14:36:57.031 [DEBUG] [Thread-481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:36:57.031 [DEBUG] [Thread-481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:36:57.031 [DEBUG] [Thread-481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:36:57.031 [DEBUG] [Thread-481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:36:57.031 [DEBUG] [Thread-481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:36:57.031 [DEBUG] [Thread-481] [transport.py] [_log()] Compression: none
2025-11-25T14:36:57.031 [DEBUG] [Thread-481] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:36:57.091 [DEBUG] [Thread-481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:36:57.092 [DEBUG] [Thread-481] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:36:57.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:36:57.093 [DEBUG] [Thread-481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:36:57.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:36:57.147 [DEBUG] [Thread-481] [transport.py] [_log()] userauth is OK
2025-11-25T14:36:57.147 [DEBUG] [Thread-481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:36:57.147 [DEBUG] [Thread-481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:36:57.147 [DEBUG] [Thread-481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:36:57.147 [DEBUG] [Thread-481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:36:57.165 [INFO] [Thread-481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:36:57.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:36:57.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:36:57.898 [DEBUG] [Thread-481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:36:57.898 [DEBUG] [Thread-481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:36:57.946 [DEBUG] [Thread-481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:36:57.946 [DEBUG] [Thread-481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:36:57.955 [DEBUG] [Thread-481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:36:57.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:36:57.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:36:57.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:36:57.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:36:57.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:36:57.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:36:57.992 [DEBUG] [Thread-481] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:37:02.770 [DEBUG] [Thread-483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:37:07.098 [DEBUG] [Thread-484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:37:22.159 [DEBUG] [Thread-485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:37:27.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:37:27.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:37:27.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:37:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 37, 15), 35.91, 8.64, 0.0, 4.38, 25.67, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:37:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:37:15
2025-11-25T14:37:28.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:37:28.933 [DEBUG] [Thread-486] [transport.py] [_log()] starting thread (client mode): 0x7374c910
2025-11-25T14:37:28.933 [DEBUG] [Thread-486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:37:28.954 [DEBUG] [Thread-486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:37:28.954 [INFO] [Thread-486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:37:28.957 [DEBUG] [Thread-486] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] client lang: <none>
2025-11-25T14:37:28.958 [DEBUG] [Thread-486] [transport.py] [_log()] server lang: <none>
2025-11-25T14:37:28.959 [DEBUG] [Thread-486] [transport.py] [_log()] kex follows: False
2025-11-25T14:37:28.959 [DEBUG] [Thread-486] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:37:28.959 [DEBUG] [Thread-486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:37:28.959 [DEBUG] [Thread-486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:37:28.959 [DEBUG] [Thread-486] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:37:28.959 [DEBUG] [Thread-486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:37:28.959 [DEBUG] [Thread-486] [transport.py] [_log()] Compression: none
2025-11-25T14:37:28.959 [DEBUG] [Thread-486] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:37:28.977 [DEBUG] [Thread-486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:37:28.978 [DEBUG] [Thread-486] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:37:28.978 [DEBUG] [Thread-486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:37:28.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:37:28.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:37:28.980 [DEBUG] [Thread-486] [transport.py] [_log()] userauth is OK
2025-11-25T14:37:28.981 [DEBUG] [Thread-486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:37:28.981 [DEBUG] [Thread-486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:37:28.981 [DEBUG] [Thread-486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:37:28.981 [DEBUG] [Thread-486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:37:28.995 [INFO] [Thread-486] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:37:28.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:37:29.672 [DEBUG] [Thread-486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:37:29.672 [DEBUG] [Thread-486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:37:29.672 [DEBUG] [Thread-486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:37:29.713 [DEBUG] [Thread-486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:37:29.713 [DEBUG] [Thread-486] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:37:29.716 [DEBUG] [Thread-486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:37:29.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:37:29.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:37:29.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:37:29.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:37:29.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:37:29.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:37:29.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:37:29.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:37:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:37:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.525796 -999.00  +26.00   7.85     13   -4.00 1 1 1 1 1   888    0 30.41 15.81 ----- 6.8 7.8 84.2 10.9 34.3 -30.8 34.2 -30.7 35.2 -29.2 35.8 -29.8
2025-11-25T14:37:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:37:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:37:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.525796
2025-11-25T14:37:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:37:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:37:29.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:37:29.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:37:29.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:37:29.744 [DEBUG] [Thread-486] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:37:29.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:37:15', tmtdew=35.91, humidity=8.64, cloud=0.0, wind=4.38, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:37:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:37:29.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:37:29.847 [DEBUG] [Thread-489] [transport.py] [_log()] starting thread (client mode): 0x7374fe80
2025-11-25T14:37:29.847 [DEBUG] [Thread-489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:37:29.862 [DEBUG] [Thread-489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:37:29.862 [INFO] [Thread-489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:37:29.869 [DEBUG] [Thread-489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:37:29.870 [DEBUG] [Thread-489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:37:29.870 [DEBUG] [Thread-489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:37:29.870 [DEBUG] [Thread-489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:37:29.870 [DEBUG] [Thread-489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:37:29.870 [DEBUG] [Thread-489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:37:29.870 [DEBUG] [Thread-489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:37:29.870 [DEBUG] [Thread-489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:37:29.870 [DEBUG] [Thread-489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:37:29.871 [DEBUG] [Thread-489] [transport.py] [_log()] client lang: <none>
2025-11-25T14:37:29.871 [DEBUG] [Thread-489] [transport.py] [_log()] server lang: <none>
2025-11-25T14:37:29.871 [DEBUG] [Thread-489] [transport.py] [_log()] kex follows: False
2025-11-25T14:37:29.871 [DEBUG] [Thread-489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:37:29.871 [DEBUG] [Thread-489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:37:29.871 [DEBUG] [Thread-489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:37:29.871 [DEBUG] [Thread-489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:37:29.872 [DEBUG] [Thread-489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:37:29.872 [DEBUG] [Thread-489] [transport.py] [_log()] Compression: none
2025-11-25T14:37:29.872 [DEBUG] [Thread-489] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:37:29.932 [DEBUG] [Thread-489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:37:29.933 [DEBUG] [Thread-489] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:37:29.933 [DEBUG] [Thread-489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:37:29.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:37:29.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:37:29.990 [DEBUG] [Thread-489] [transport.py] [_log()] userauth is OK
2025-11-25T14:37:29.990 [DEBUG] [Thread-489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:37:29.991 [DEBUG] [Thread-489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:37:29.991 [DEBUG] [Thread-489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:37:29.991 [DEBUG] [Thread-489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:37:30.009 [INFO] [Thread-489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:37:30.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:37:30.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:37:30.744 [DEBUG] [Thread-489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:37:30.744 [DEBUG] [Thread-489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:37:30.793 [DEBUG] [Thread-489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:37:30.793 [DEBUG] [Thread-489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:37:30.802 [DEBUG] [Thread-489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:37:30.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:37:30.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:37:30.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:37:30.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:37:30.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:37:30.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:37:30.843 [DEBUG] [Thread-489] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:37:37.202 [DEBUG] [Thread-491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:37:52.271 [DEBUG] [Thread-492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:38:00.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:38:00.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:38:00.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:38:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 37, 47), 36.04, 8.55, 0.0, 11.08, 25.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:38:01.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:37:47
2025-11-25T14:38:01.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:38:01.790 [DEBUG] [Thread-493] [transport.py] [_log()] starting thread (client mode): 0x7374eb60
2025-11-25T14:38:01.790 [DEBUG] [Thread-493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:38:01.809 [DEBUG] [Thread-493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:38:01.809 [INFO] [Thread-493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:38:01.812 [DEBUG] [Thread-493] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:38:01.812 [DEBUG] [Thread-493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:38:01.812 [DEBUG] [Thread-493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:38:01.812 [DEBUG] [Thread-493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:38:01.812 [DEBUG] [Thread-493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:38:01.812 [DEBUG] [Thread-493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:38:01.812 [DEBUG] [Thread-493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:38:01.812 [DEBUG] [Thread-493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] client lang: <none>
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] server lang: <none>
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] kex follows: False
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] Compression: none
2025-11-25T14:38:01.813 [DEBUG] [Thread-493] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:38:01.829 [DEBUG] [Thread-493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:38:01.830 [DEBUG] [Thread-493] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:38:01.830 [DEBUG] [Thread-493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:38:01.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:38:01.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:38:01.833 [DEBUG] [Thread-493] [transport.py] [_log()] userauth is OK
2025-11-25T14:38:01.833 [DEBUG] [Thread-493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:38:01.833 [DEBUG] [Thread-493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:38:01.833 [DEBUG] [Thread-493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:38:01.833 [DEBUG] [Thread-493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:38:01.857 [INFO] [Thread-493] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:38:01.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:38:02.471 [DEBUG] [Thread-493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:38:02.471 [DEBUG] [Thread-493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:38:02.471 [DEBUG] [Thread-493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:38:02.512 [DEBUG] [Thread-493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:38:02.512 [DEBUG] [Thread-493] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:38:02.515 [DEBUG] [Thread-493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:38:02.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:38:02.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:38:02.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:38:02.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:38:02.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:38:02.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:38:02.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:38:02.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:38:02.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:38:02.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.526143 -999.00  +25.90   5.76     13   -4.10 1 1 1 1 1   888    0 30.75 12.92 ----- 2.4 5.8 139.0 8.8 34.2 -30.3 34.3 -31.1 35.3 -29.9 35.9 -30.3
2025-11-25T14:38:02.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:38:02.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:38:02.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.526143
2025-11-25T14:38:02.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:38:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:38:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:38:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:38:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:38:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:37:47', tmtdew=36.04, humidity=8.55, cloud=0.0, wind=11.08, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:37:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:38:02.544 [DEBUG] [Thread-493] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:38:02.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:38:02.646 [DEBUG] [Thread-496] [transport.py] [_log()] starting thread (client mode): 0x7374dbd0
2025-11-25T14:38:02.646 [DEBUG] [Thread-496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:38:02.659 [DEBUG] [Thread-496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:38:02.660 [INFO] [Thread-496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:38:02.667 [DEBUG] [Thread-496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:38:02.668 [DEBUG] [Thread-496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:38:02.668 [DEBUG] [Thread-496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:38:02.668 [DEBUG] [Thread-496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:38:02.668 [DEBUG] [Thread-496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:38:02.668 [DEBUG] [Thread-496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:38:02.668 [DEBUG] [Thread-496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:38:02.668 [DEBUG] [Thread-496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:38:02.669 [DEBUG] [Thread-496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:38:02.669 [DEBUG] [Thread-496] [transport.py] [_log()] client lang: <none>
2025-11-25T14:38:02.669 [DEBUG] [Thread-496] [transport.py] [_log()] server lang: <none>
2025-11-25T14:38:02.669 [DEBUG] [Thread-496] [transport.py] [_log()] kex follows: False
2025-11-25T14:38:02.669 [DEBUG] [Thread-496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:38:02.669 [DEBUG] [Thread-496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:38:02.669 [DEBUG] [Thread-496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:38:02.670 [DEBUG] [Thread-496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:38:02.670 [DEBUG] [Thread-496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:38:02.670 [DEBUG] [Thread-496] [transport.py] [_log()] Compression: none
2025-11-25T14:38:02.670 [DEBUG] [Thread-496] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:38:02.727 [DEBUG] [Thread-496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:38:02.727 [DEBUG] [Thread-496] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:38:02.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:38:02.728 [DEBUG] [Thread-496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:38:02.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:38:02.781 [DEBUG] [Thread-496] [transport.py] [_log()] userauth is OK
2025-11-25T14:38:02.782 [DEBUG] [Thread-496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:38:02.782 [DEBUG] [Thread-496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:38:02.782 [DEBUG] [Thread-496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:38:02.782 [DEBUG] [Thread-496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:38:02.795 [INFO] [Thread-496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:38:02.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:38:02.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:38:03.285 [DEBUG] [Thread-498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:38:03.548 [DEBUG] [Thread-496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:38:03.548 [DEBUG] [Thread-496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:38:03.597 [DEBUG] [Thread-496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:38:03.597 [DEBUG] [Thread-496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:38:03.607 [DEBUG] [Thread-496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:38:03.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:38:03.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:38:03.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:38:03.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:38:03.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:38:03.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:38:03.643 [DEBUG] [Thread-496] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:38:07.314 [DEBUG] [Thread-499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:38:22.380 [DEBUG] [Thread-500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:38:33.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:38:33.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:38:33.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:38:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 38, 19), 36.01, 8.59, 0.0, 12.81, 25.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:38:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:38:19
2025-11-25T14:38:34.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:38:34.594 [DEBUG] [Thread-501] [transport.py] [_log()] starting thread (client mode): 0x73783fa0
2025-11-25T14:38:34.594 [DEBUG] [Thread-501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:38:34.615 [DEBUG] [Thread-501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:38:34.615 [INFO] [Thread-501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:38:34.618 [DEBUG] [Thread-501] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:38:34.619 [DEBUG] [Thread-501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:38:34.619 [DEBUG] [Thread-501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:38:34.619 [DEBUG] [Thread-501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:38:34.619 [DEBUG] [Thread-501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:38:34.619 [DEBUG] [Thread-501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:38:34.619 [DEBUG] [Thread-501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:38:34.619 [DEBUG] [Thread-501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:38:34.619 [DEBUG] [Thread-501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:38:34.619 [DEBUG] [Thread-501] [transport.py] [_log()] client lang: <none>
2025-11-25T14:38:34.620 [DEBUG] [Thread-501] [transport.py] [_log()] server lang: <none>
2025-11-25T14:38:34.620 [DEBUG] [Thread-501] [transport.py] [_log()] kex follows: False
2025-11-25T14:38:34.620 [DEBUG] [Thread-501] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:38:34.620 [DEBUG] [Thread-501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:38:34.620 [DEBUG] [Thread-501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:38:34.620 [DEBUG] [Thread-501] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:38:34.620 [DEBUG] [Thread-501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:38:34.621 [DEBUG] [Thread-501] [transport.py] [_log()] Compression: none
2025-11-25T14:38:34.621 [DEBUG] [Thread-501] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:38:34.640 [DEBUG] [Thread-501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:38:34.641 [DEBUG] [Thread-501] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:38:34.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:38:34.642 [DEBUG] [Thread-501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:38:34.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:38:34.644 [DEBUG] [Thread-501] [transport.py] [_log()] userauth is OK
2025-11-25T14:38:34.644 [DEBUG] [Thread-501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:38:34.644 [DEBUG] [Thread-501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:38:34.644 [DEBUG] [Thread-501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:38:34.644 [DEBUG] [Thread-501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:38:34.663 [INFO] [Thread-501] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:38:34.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:38:35.269 [DEBUG] [Thread-501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:38:35.269 [DEBUG] [Thread-501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:38:35.269 [DEBUG] [Thread-501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:38:35.309 [DEBUG] [Thread-501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:38:35.310 [DEBUG] [Thread-501] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:38:35.313 [DEBUG] [Thread-501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:38:35.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:38:35.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:38:35.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:38:35.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:38:35.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:38:35.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:38:35.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:38:35.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:38:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:38:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.526490 -999.00  +26.00   4.64     13   -4.00 1 1 1 1 1   888    0 30.42 10.16 ----- 4.2 4.6 43.6 6.0 34.4 -30.8 34.3 -31.2 35.5 -29.0 36.1 -29.8
2025-11-25T14:38:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:38:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:38:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.526490
2025-11-25T14:38:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:38:35.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:38:35.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:38:35.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:38:35.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:38:35.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:38:19', tmtdew=36.01, humidity=8.59, cloud=0.0, wind=12.81, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:38:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:38:35.341 [DEBUG] [Thread-501] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:38:35.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:38:35.446 [DEBUG] [Thread-504] [transport.py] [_log()] starting thread (client mode): 0x7376cbe0
2025-11-25T14:38:35.446 [DEBUG] [Thread-504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:38:35.463 [DEBUG] [Thread-504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:38:35.463 [INFO] [Thread-504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:38:35.470 [DEBUG] [Thread-504] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] client lang: <none>
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] server lang: <none>
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] kex follows: False
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:38:35.471 [DEBUG] [Thread-504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:38:35.472 [DEBUG] [Thread-504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:38:35.472 [DEBUG] [Thread-504] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:38:35.472 [DEBUG] [Thread-504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:38:35.472 [DEBUG] [Thread-504] [transport.py] [_log()] Compression: none
2025-11-25T14:38:35.472 [DEBUG] [Thread-504] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:38:35.531 [DEBUG] [Thread-504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:38:35.532 [DEBUG] [Thread-504] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:38:35.532 [DEBUG] [Thread-504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:38:35.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:38:35.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:38:35.590 [DEBUG] [Thread-504] [transport.py] [_log()] userauth is OK
2025-11-25T14:38:35.591 [DEBUG] [Thread-504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:38:35.591 [DEBUG] [Thread-504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:38:35.591 [DEBUG] [Thread-504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:38:35.591 [DEBUG] [Thread-504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:38:35.609 [INFO] [Thread-504] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:38:35.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:38:35.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:38:36.380 [DEBUG] [Thread-504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:38:36.380 [DEBUG] [Thread-504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:38:36.428 [DEBUG] [Thread-504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:38:36.428 [DEBUG] [Thread-504] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:38:36.437 [DEBUG] [Thread-504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:38:36.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:38:36.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:38:36.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:38:36.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:38:36.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:38:36.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:38:36.474 [DEBUG] [Thread-504] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:38:37.425 [DEBUG] [Thread-506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:38:52.494 [DEBUG] [Thread-507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:39:04.050 [DEBUG] [Thread-508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:39:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:39:06.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:39:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:39:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 38, 51), 36.03, 8.55, 0.0, 14.19, 25.88, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:39:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:38:51
2025-11-25T14:39:07.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:39:07.480 [DEBUG] [Thread-509] [transport.py] [_log()] starting thread (client mode): 0x73782530
2025-11-25T14:39:07.481 [DEBUG] [Thread-509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:39:07.500 [DEBUG] [Thread-509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:39:07.500 [INFO] [Thread-509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] client lang: <none>
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] server lang: <none>
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] kex follows: False
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] Compression: none
2025-11-25T14:39:07.504 [DEBUG] [Thread-509] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:39:07.517 [DEBUG] [Thread-509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:39:07.518 [DEBUG] [Thread-509] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:39:07.518 [DEBUG] [Thread-509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:39:07.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:39:07.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:39:07.519 [DEBUG] [Thread-509] [transport.py] [_log()] userauth is OK
2025-11-25T14:39:07.519 [DEBUG] [Thread-509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:39:07.519 [DEBUG] [Thread-509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:39:07.519 [DEBUG] [Thread-509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:39:07.519 [DEBUG] [Thread-509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:39:07.531 [DEBUG] [Thread-511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:39:07.534 [INFO] [Thread-509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:39:07.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:39:08.173 [DEBUG] [Thread-509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:39:08.173 [DEBUG] [Thread-509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:39:08.173 [DEBUG] [Thread-509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:39:08.214 [DEBUG] [Thread-509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:39:08.214 [DEBUG] [Thread-509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:39:08.217 [DEBUG] [Thread-509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:39:08.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:39:08.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:39:08.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:39:08.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:39:08.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:39:08.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:39:08.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:39:08.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:39:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:39:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.526837 -999.00  +26.10   3.03     13   -4.00 1 1 1 1 1   888    0 30.68 8.32 ----- 3.5 3.0 43.2 5.7 34.5 -30.7 34.4 -31.1 35.5 -29.4 36.2 -30.0
2025-11-25T14:39:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:39:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:39:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.526837
2025-11-25T14:39:08.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:39:08.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:39:08.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:39:08.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:39:08.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:39:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:38:51', tmtdew=36.03, humidity=8.55, cloud=0.0, wind=14.19, temperature=25.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:38:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:39:08.243 [DEBUG] [Thread-509] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:39:08.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:39:08.355 [DEBUG] [Thread-513] [transport.py] [_log()] starting thread (client mode): 0x7376ceb0
2025-11-25T14:39:08.355 [DEBUG] [Thread-513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:39:08.370 [DEBUG] [Thread-513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:39:08.370 [INFO] [Thread-513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:39:08.378 [DEBUG] [Thread-513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:39:08.378 [DEBUG] [Thread-513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:39:08.378 [DEBUG] [Thread-513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:39:08.378 [DEBUG] [Thread-513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:39:08.378 [DEBUG] [Thread-513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:39:08.378 [DEBUG] [Thread-513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] client lang: <none>
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] server lang: <none>
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] kex follows: False
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] Compression: none
2025-11-25T14:39:08.379 [DEBUG] [Thread-513] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:39:08.438 [DEBUG] [Thread-513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:39:08.439 [DEBUG] [Thread-513] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:39:08.439 [DEBUG] [Thread-513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:39:08.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:39:08.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:39:08.494 [DEBUG] [Thread-513] [transport.py] [_log()] userauth is OK
2025-11-25T14:39:08.494 [DEBUG] [Thread-513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:39:08.494 [DEBUG] [Thread-513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:39:08.494 [DEBUG] [Thread-513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:39:08.494 [DEBUG] [Thread-513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:39:08.512 [INFO] [Thread-513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:39:08.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:39:08.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:39:09.253 [DEBUG] [Thread-513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:39:09.254 [DEBUG] [Thread-513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:39:09.302 [DEBUG] [Thread-513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:39:09.302 [DEBUG] [Thread-513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:39:09.311 [DEBUG] [Thread-513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:39:09.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:39:09.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:39:09.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:39:09.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:39:09.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:39:09.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:39:09.348 [DEBUG] [Thread-513] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:39:22.572 [DEBUG] [Thread-515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:39:37.639 [DEBUG] [Thread-516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:39:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:39:39.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:39:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:39:40.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 39, 23), 36.14, 8.47, 0.0, 12.69, 25.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:39:40.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:39:23
2025-11-25T14:39:40.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:39:40.360 [DEBUG] [Thread-517] [transport.py] [_log()] starting thread (client mode): 0x7374ec50
2025-11-25T14:39:40.360 [DEBUG] [Thread-517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:39:40.380 [DEBUG] [Thread-517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:39:40.380 [INFO] [Thread-517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] client lang: <none>
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] server lang: <none>
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] kex follows: False
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] Compression: none
2025-11-25T14:39:40.384 [DEBUG] [Thread-517] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:39:40.400 [DEBUG] [Thread-517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:39:40.400 [DEBUG] [Thread-517] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:39:40.400 [DEBUG] [Thread-517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:39:40.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:39:40.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:39:40.401 [DEBUG] [Thread-517] [transport.py] [_log()] userauth is OK
2025-11-25T14:39:40.401 [DEBUG] [Thread-517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:39:40.401 [DEBUG] [Thread-517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:39:40.401 [DEBUG] [Thread-517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:39:40.401 [DEBUG] [Thread-517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:39:40.410 [INFO] [Thread-517] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:39:40.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:39:41.074 [DEBUG] [Thread-517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:39:41.074 [DEBUG] [Thread-517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:39:41.074 [DEBUG] [Thread-517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:39:41.115 [DEBUG] [Thread-517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:39:41.115 [DEBUG] [Thread-517] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:39:41.118 [DEBUG] [Thread-517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:39:41.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:39:41.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:39:41.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:39:41.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:39:41.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:39:41.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:39:41.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.527184 -999.00  +26.10  11.96     13   -3.90 1 1 1 1 1   888    0 30.44 5.49 ----- 12.8 12.0 17.4 13.5 34.6 -30.7 34.3 -31.6 35.6 -30.3 36.2 -34.8
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.527184
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:39:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:39:23', tmtdew=36.14, humidity=8.47, cloud=0.0, wind=12.69, temperature=25.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:39:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:39:41.136 [DEBUG] [Thread-517] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:39:41.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:39:41.226 [DEBUG] [Thread-520] [transport.py] [_log()] starting thread (client mode): 0x73780760
2025-11-25T14:39:41.226 [DEBUG] [Thread-520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:39:41.241 [DEBUG] [Thread-520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:39:41.241 [INFO] [Thread-520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:39:41.248 [DEBUG] [Thread-520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:39:41.248 [DEBUG] [Thread-520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:39:41.248 [DEBUG] [Thread-520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:39:41.248 [DEBUG] [Thread-520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] client lang: <none>
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] server lang: <none>
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] kex follows: False
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] Compression: none
2025-11-25T14:39:41.249 [DEBUG] [Thread-520] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:39:41.304 [DEBUG] [Thread-520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:39:41.304 [DEBUG] [Thread-520] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:39:41.304 [DEBUG] [Thread-520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:39:41.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:39:41.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:39:41.361 [DEBUG] [Thread-520] [transport.py] [_log()] userauth is OK
2025-11-25T14:39:41.361 [DEBUG] [Thread-520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:39:41.361 [DEBUG] [Thread-520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:39:41.361 [DEBUG] [Thread-520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:39:41.361 [DEBUG] [Thread-520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:39:41.375 [INFO] [Thread-520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:39:41.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:39:41.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:39:42.109 [DEBUG] [Thread-520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:39:42.109 [DEBUG] [Thread-520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:39:42.157 [DEBUG] [Thread-520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:39:42.157 [DEBUG] [Thread-520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:39:42.165 [DEBUG] [Thread-520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:39:42.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:39:42.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:39:42.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:39:42.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:39:42.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:39:42.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:39:42.197 [DEBUG] [Thread-520] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:39:52.686 [DEBUG] [Thread-522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:40:04.765 [DEBUG] [Thread-523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:40:07.760 [DEBUG] [Thread-524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:40:12.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:40:12.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:40:12.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:40:12.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 39, 55), 36.05, 8.5, 0.0, 13.64, 26.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:40:12.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:39:55
2025-11-25T14:40:12.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:40:13.140 [DEBUG] [Thread-525] [transport.py] [_log()] starting thread (client mode): 0x761d9360
2025-11-25T14:40:13.140 [DEBUG] [Thread-525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:40:13.163 [DEBUG] [Thread-525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:40:13.163 [INFO] [Thread-525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:40:13.167 [DEBUG] [Thread-525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:40:13.167 [DEBUG] [Thread-525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:40:13.167 [DEBUG] [Thread-525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] client lang: <none>
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] server lang: <none>
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] kex follows: False
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:40:13.168 [DEBUG] [Thread-525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:40:13.169 [DEBUG] [Thread-525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:40:13.169 [DEBUG] [Thread-525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:40:13.169 [DEBUG] [Thread-525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:40:13.169 [DEBUG] [Thread-525] [transport.py] [_log()] Compression: none
2025-11-25T14:40:13.169 [DEBUG] [Thread-525] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:40:13.188 [DEBUG] [Thread-525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:40:13.189 [DEBUG] [Thread-525] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:40:13.190 [DEBUG] [Thread-525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:40:13.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:40:13.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:40:13.192 [DEBUG] [Thread-525] [transport.py] [_log()] userauth is OK
2025-11-25T14:40:13.192 [DEBUG] [Thread-525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:40:13.192 [DEBUG] [Thread-525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:40:13.192 [DEBUG] [Thread-525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:40:13.192 [DEBUG] [Thread-525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:40:13.217 [INFO] [Thread-525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:40:13.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:40:13.903 [DEBUG] [Thread-525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:40:13.903 [DEBUG] [Thread-525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:40:13.904 [DEBUG] [Thread-525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:40:13.944 [DEBUG] [Thread-525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:40:13.944 [DEBUG] [Thread-525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:40:13.949 [DEBUG] [Thread-525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:40:13.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:40:13.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:40:13.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:40:13.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:40:14.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:40:14.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:40:14.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:40:14.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:40:14.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:40:14.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.527532 -999.00  +26.20  14.36     13   -3.80 1 1 1 1 1   888    0 30.53 3.19 ----- 17.0 14.4 58.8 18.9 34.6 -31.5 34.3 -32.2 35.4 -31.0 36.0 -30.2
2025-11-25T14:40:14.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:40:14.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:40:14.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.527532
2025-11-25T14:40:14.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:40:14.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:40:14.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:40:14.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:40:14.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:40:14.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:39:55', tmtdew=36.05, humidity=8.5, cloud=0.0, wind=13.64, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:39:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:40:14.013 [DEBUG] [Thread-525] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:40:14.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:40:14.119 [DEBUG] [Thread-528] [transport.py] [_log()] starting thread (client mode): 0x7376d720
2025-11-25T14:40:14.119 [DEBUG] [Thread-528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:40:14.133 [DEBUG] [Thread-528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:40:14.134 [INFO] [Thread-528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:40:14.141 [DEBUG] [Thread-528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:40:14.141 [DEBUG] [Thread-528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:40:14.141 [DEBUG] [Thread-528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:40:14.142 [DEBUG] [Thread-528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:40:14.142 [DEBUG] [Thread-528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:40:14.142 [DEBUG] [Thread-528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:40:14.142 [DEBUG] [Thread-528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:40:14.142 [DEBUG] [Thread-528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:40:14.142 [DEBUG] [Thread-528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:40:14.142 [DEBUG] [Thread-528] [transport.py] [_log()] client lang: <none>
2025-11-25T14:40:14.142 [DEBUG] [Thread-528] [transport.py] [_log()] server lang: <none>
2025-11-25T14:40:14.142 [DEBUG] [Thread-528] [transport.py] [_log()] kex follows: False
2025-11-25T14:40:14.143 [DEBUG] [Thread-528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:40:14.143 [DEBUG] [Thread-528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:40:14.143 [DEBUG] [Thread-528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:40:14.143 [DEBUG] [Thread-528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:40:14.143 [DEBUG] [Thread-528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:40:14.143 [DEBUG] [Thread-528] [transport.py] [_log()] Compression: none
2025-11-25T14:40:14.143 [DEBUG] [Thread-528] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:40:14.202 [DEBUG] [Thread-528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:40:14.203 [DEBUG] [Thread-528] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:40:14.204 [DEBUG] [Thread-528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:40:14.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:40:14.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:40:14.258 [DEBUG] [Thread-528] [transport.py] [_log()] userauth is OK
2025-11-25T14:40:14.258 [DEBUG] [Thread-528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:40:14.259 [DEBUG] [Thread-528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:40:14.259 [DEBUG] [Thread-528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:40:14.259 [DEBUG] [Thread-528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:40:14.277 [INFO] [Thread-528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:40:14.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:40:14.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:40:15.007 [DEBUG] [Thread-528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:40:15.008 [DEBUG] [Thread-528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:40:15.056 [DEBUG] [Thread-528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:40:15.056 [DEBUG] [Thread-528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:40:15.065 [DEBUG] [Thread-528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:40:15.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:40:15.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:40:15.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:40:15.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:40:15.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:40:15.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:40:15.103 [DEBUG] [Thread-528] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:40:22.799 [DEBUG] [Thread-530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:40:37.873 [DEBUG] [Thread-531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:40:45.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:40:45.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:40:45.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:40:45.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 40, 27), 35.95, 8.55, 0.0, 12.37, 25.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:40:45.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:40:27
2025-11-25T14:40:45.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:40:46.065 [DEBUG] [Thread-532] [transport.py] [_log()] starting thread (client mode): 0x7376fac0
2025-11-25T14:40:46.066 [DEBUG] [Thread-532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:40:46.087 [DEBUG] [Thread-532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:40:46.087 [INFO] [Thread-532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:40:46.090 [DEBUG] [Thread-532] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:40:46.090 [DEBUG] [Thread-532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:40:46.090 [DEBUG] [Thread-532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:40:46.090 [DEBUG] [Thread-532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] client lang: <none>
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] server lang: <none>
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] kex follows: False
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] Compression: none
2025-11-25T14:40:46.091 [DEBUG] [Thread-532] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:40:46.109 [DEBUG] [Thread-532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:40:46.109 [DEBUG] [Thread-532] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:40:46.110 [DEBUG] [Thread-532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:40:46.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:40:46.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:40:46.112 [DEBUG] [Thread-532] [transport.py] [_log()] userauth is OK
2025-11-25T14:40:46.112 [DEBUG] [Thread-532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:40:46.112 [DEBUG] [Thread-532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:40:46.113 [DEBUG] [Thread-532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:40:46.113 [DEBUG] [Thread-532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:40:46.137 [INFO] [Thread-532] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:40:46.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:40:46.810 [DEBUG] [Thread-532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:40:46.810 [DEBUG] [Thread-532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:40:46.811 [DEBUG] [Thread-532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:40:46.851 [DEBUG] [Thread-532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:40:46.851 [DEBUG] [Thread-532] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:40:46.854 [DEBUG] [Thread-532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:40:46.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:40:46.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:40:46.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:40:46.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:40:46.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:40:46.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:40:46.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:40:46.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:40:46.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:40:46.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.528226 -999.00  +26.50  13.71     13   -3.70 1 1 1 1 1   888    0 29.91 -0.38 ----- 17.5 13.7 315.6 17.1 34.5 -30.7 34.3 -30.5 35.4 -30.5 35.8 -29.8
2025-11-25T14:40:46.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:40:46.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:40:46.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.528226
2025-11-25T14:40:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:40:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:40:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:40:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:40:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:40:46.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:40:27', tmtdew=35.95, humidity=8.55, cloud=0.0, wind=12.37, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:40:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:40:46.885 [DEBUG] [Thread-532] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:40:46.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:40:46.988 [DEBUG] [Thread-535] [transport.py] [_log()] starting thread (client mode): 0x7376c5b0
2025-11-25T14:40:46.988 [DEBUG] [Thread-535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:40:47.003 [DEBUG] [Thread-535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:40:47.003 [INFO] [Thread-535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:40:47.010 [DEBUG] [Thread-535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] client lang: <none>
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] server lang: <none>
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] kex follows: False
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:40:47.011 [DEBUG] [Thread-535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:40:47.012 [DEBUG] [Thread-535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:40:47.012 [DEBUG] [Thread-535] [transport.py] [_log()] Compression: none
2025-11-25T14:40:47.012 [DEBUG] [Thread-535] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:40:47.070 [DEBUG] [Thread-535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:40:47.071 [DEBUG] [Thread-535] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:40:47.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:40:47.080 [DEBUG] [Thread-535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:40:47.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:40:47.127 [DEBUG] [Thread-535] [transport.py] [_log()] userauth is OK
2025-11-25T14:40:47.127 [DEBUG] [Thread-535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:40:47.127 [DEBUG] [Thread-535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:40:47.128 [DEBUG] [Thread-535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:40:47.128 [DEBUG] [Thread-535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:40:47.146 [INFO] [Thread-535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:40:47.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:40:47.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:40:47.892 [DEBUG] [Thread-535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:40:47.893 [DEBUG] [Thread-535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:40:47.941 [DEBUG] [Thread-535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:40:47.941 [DEBUG] [Thread-535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:40:47.950 [DEBUG] [Thread-535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:40:47.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:40:47.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:40:47.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:40:47.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:40:47.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:40:47.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:40:47.988 [DEBUG] [Thread-535] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:40:52.917 [DEBUG] [Thread-537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:41:05.286 [DEBUG] [Thread-538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:41:07.986 [DEBUG] [Thread-539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:41:18.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:41:18.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:41: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
2025-11-25T14:41:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 40, 59), 36.39, 8.44, 0.0, 13.08, 26.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:41:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:40:59
2025-11-25T14:41:18.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:41:18.948 [DEBUG] [Thread-540] [transport.py] [_log()] starting thread (client mode): 0x761d9840
2025-11-25T14:41:18.948 [DEBUG] [Thread-540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:41:18.971 [DEBUG] [Thread-540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:41:18.971 [INFO] [Thread-540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:41:18.974 [DEBUG] [Thread-540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:41:18.975 [DEBUG] [Thread-540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:41:18.975 [DEBUG] [Thread-540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:41:18.975 [DEBUG] [Thread-540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:41:18.975 [DEBUG] [Thread-540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:41:18.975 [DEBUG] [Thread-540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:41:18.975 [DEBUG] [Thread-540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:41:18.975 [DEBUG] [Thread-540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:41:18.975 [DEBUG] [Thread-540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] client lang: <none>
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] server lang: <none>
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] kex follows: False
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] Compression: none
2025-11-25T14:41:18.976 [DEBUG] [Thread-540] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:41:18.995 [DEBUG] [Thread-540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:41:18.996 [DEBUG] [Thread-540] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:41:18.997 [DEBUG] [Thread-540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:41:18.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:41:18.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:41:18.999 [DEBUG] [Thread-540] [transport.py] [_log()] userauth is OK
2025-11-25T14:41:19.000 [DEBUG] [Thread-540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:41:19.000 [DEBUG] [Thread-540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:41:19.000 [DEBUG] [Thread-540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:41:19.000 [DEBUG] [Thread-540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:41:19.034 [INFO] [Thread-540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:41:19.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:41:19.715 [DEBUG] [Thread-540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:41:19.715 [DEBUG] [Thread-540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:41:19.716 [DEBUG] [Thread-540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:41:19.756 [DEBUG] [Thread-540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:41:19.756 [DEBUG] [Thread-540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:41:19.759 [DEBUG] [Thread-540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:41:19.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:41:19.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:41:19.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:41:19.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:41:19.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:41:19.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:41:19.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:41:19.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:41:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:41:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.528573 -999.00  +26.10  12.19     13   -3.90 1 1 1 1 1   888    0 30.18 -2.52 ----- 9.3 12.2 326.9 19.5 34.5 -30.9 34.3 -30.6 35.4 -28.7 35.8 -29.7
2025-11-25T14:41:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:41:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:41:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.528573
2025-11-25T14:41:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:41:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:41:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:41:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:41:19.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:41:19.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:40:59', tmtdew=36.39, humidity=8.44, cloud=0.0, wind=13.08, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:41:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:41:19.787 [DEBUG] [Thread-540] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:41:19.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:41:19.890 [DEBUG] [Thread-543] [transport.py] [_log()] starting thread (client mode): 0x761d9ba0
2025-11-25T14:41:19.890 [DEBUG] [Thread-543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:41:19.905 [DEBUG] [Thread-543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:41:19.905 [INFO] [Thread-543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:41:19.913 [DEBUG] [Thread-543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:41:19.913 [DEBUG] [Thread-543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:41:19.913 [DEBUG] [Thread-543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:41:19.913 [DEBUG] [Thread-543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:41:19.913 [DEBUG] [Thread-543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:41:19.913 [DEBUG] [Thread-543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] client lang: <none>
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] server lang: <none>
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] kex follows: False
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] Compression: none
2025-11-25T14:41:19.914 [DEBUG] [Thread-543] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:41:19.970 [DEBUG] [Thread-543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:41:19.970 [DEBUG] [Thread-543] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:41:19.971 [DEBUG] [Thread-543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:41:19.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:41:19.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:41:20.027 [DEBUG] [Thread-543] [transport.py] [_log()] userauth is OK
2025-11-25T14:41:20.027 [DEBUG] [Thread-543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:41:20.027 [DEBUG] [Thread-543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:41:20.027 [DEBUG] [Thread-543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:41:20.028 [DEBUG] [Thread-543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:41:20.046 [INFO] [Thread-543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:41:20.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:41:20.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:41:20.789 [DEBUG] [Thread-543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:41:20.789 [DEBUG] [Thread-543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:41:20.838 [DEBUG] [Thread-543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:41:20.838 [DEBUG] [Thread-543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:41:20.847 [DEBUG] [Thread-543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:41:20.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:41:20.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:41:20.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:41:20.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:41:20.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:41:20.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:41:20.884 [DEBUG] [Thread-543] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:41:23.033 [DEBUG] [Thread-545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:41:38.111 [DEBUG] [Thread-546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:41:50.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:41:50.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:41:50.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:41:51.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 41, 31), 36.2, 8.54, 0.0, 12.53, 25.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:41:51.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:41:31
2025-11-25T14:41:51.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:41:51.808 [DEBUG] [Thread-547] [transport.py] [_log()] starting thread (client mode): 0x737829b0
2025-11-25T14:41:51.808 [DEBUG] [Thread-547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:41:51.829 [DEBUG] [Thread-547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:41:51.829 [INFO] [Thread-547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] client lang: <none>
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] server lang: <none>
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] kex follows: False
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:41:51.832 [DEBUG] [Thread-547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:41:51.833 [DEBUG] [Thread-547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:41:51.833 [DEBUG] [Thread-547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:41:51.833 [DEBUG] [Thread-547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:41:51.833 [DEBUG] [Thread-547] [transport.py] [_log()] Compression: none
2025-11-25T14:41:51.833 [DEBUG] [Thread-547] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:41:51.851 [DEBUG] [Thread-547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:41:51.852 [DEBUG] [Thread-547] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:41:51.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:41:51.853 [DEBUG] [Thread-547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:41:51.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:41:51.855 [DEBUG] [Thread-547] [transport.py] [_log()] userauth is OK
2025-11-25T14:41:51.855 [DEBUG] [Thread-547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:41:51.855 [DEBUG] [Thread-547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:41:51.855 [DEBUG] [Thread-547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:41:51.855 [DEBUG] [Thread-547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:41:51.880 [INFO] [Thread-547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:41:51.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:41:52.536 [DEBUG] [Thread-547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:41:52.537 [DEBUG] [Thread-547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:41:52.537 [DEBUG] [Thread-547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:41:52.578 [DEBUG] [Thread-547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:41:52.578 [DEBUG] [Thread-547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:41:52.581 [DEBUG] [Thread-547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:41:52.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:41:52.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:41:52.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:41:52.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:41:52.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:41:52.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:41:52.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:41:52.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:41:52.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:41:52.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.528921 -999.00  +26.20   6.68     13   -3.70 1 1 1 1 1   888    0 29.76 -4.53 ----- 10.3 6.7 349.0 14.7 34.6 -30.7 34.2 -31.3 35.4 -28.8 35.9 -29.5
2025-11-25T14:41:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:41:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:41:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.528921
2025-11-25T14:41:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:41:52.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:41:52.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:41:52.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:41:52.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:41:52.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:41:31', tmtdew=36.2, humidity=8.54, cloud=0.0, wind=12.53, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:41:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:41:52.604 [DEBUG] [Thread-547] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:41:52.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:41:52.709 [DEBUG] [Thread-550] [transport.py] [_log()] starting thread (client mode): 0x737832b0
2025-11-25T14:41:52.710 [DEBUG] [Thread-550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:41:52.724 [DEBUG] [Thread-550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:41:52.724 [INFO] [Thread-550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:41:52.732 [DEBUG] [Thread-550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:41:52.732 [DEBUG] [Thread-550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:41:52.732 [DEBUG] [Thread-550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:41:52.732 [DEBUG] [Thread-550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:41:52.732 [DEBUG] [Thread-550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:41:52.732 [DEBUG] [Thread-550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:41:52.732 [DEBUG] [Thread-550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] client lang: <none>
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] server lang: <none>
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] kex follows: False
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] Compression: none
2025-11-25T14:41:52.733 [DEBUG] [Thread-550] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:41:52.794 [DEBUG] [Thread-550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:41:52.795 [DEBUG] [Thread-550] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:41:52.796 [DEBUG] [Thread-550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:41:52.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:41:52.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:41:52.850 [DEBUG] [Thread-550] [transport.py] [_log()] userauth is OK
2025-11-25T14:41:52.851 [DEBUG] [Thread-550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:41:52.851 [DEBUG] [Thread-550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:41:52.851 [DEBUG] [Thread-550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:41:52.851 [DEBUG] [Thread-550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:41:52.869 [INFO] [Thread-550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:41:52.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:41:52.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:41:53.156 [DEBUG] [Thread-552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:41:53.588 [DEBUG] [Thread-550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:41:53.589 [DEBUG] [Thread-550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:41:53.637 [DEBUG] [Thread-550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:41:53.637 [DEBUG] [Thread-550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:41:53.646 [DEBUG] [Thread-550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:41:53.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:41:53.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:41:53.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:41:53.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:41:53.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:41:53.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:41:53.683 [DEBUG] [Thread-550] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:42:06.009 [DEBUG] [Thread-553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:42:08.226 [DEBUG] [Thread-554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:42:23.270 [DEBUG] [Thread-555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:42:23.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:42:23.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:42:23.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:42:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 42, 3), 36.11, 8.59, 0.0, 9.3, 25.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:42:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:42:03
2025-11-25T14:42:24.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:42:24.626 [DEBUG] [Thread-556] [transport.py] [_log()] starting thread (client mode): 0x7378dc90
2025-11-25T14:42:24.626 [DEBUG] [Thread-556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:42:24.647 [DEBUG] [Thread-556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:42:24.647 [INFO] [Thread-556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:42:24.651 [DEBUG] [Thread-556] [transport.py] [_log()] client lang: <none>
2025-11-25T14:42:24.652 [DEBUG] [Thread-556] [transport.py] [_log()] server lang: <none>
2025-11-25T14:42:24.652 [DEBUG] [Thread-556] [transport.py] [_log()] kex follows: False
2025-11-25T14:42:24.652 [DEBUG] [Thread-556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:42:24.652 [DEBUG] [Thread-556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:42:24.652 [DEBUG] [Thread-556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:42:24.652 [DEBUG] [Thread-556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:42:24.652 [DEBUG] [Thread-556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:42:24.652 [DEBUG] [Thread-556] [transport.py] [_log()] Compression: none
2025-11-25T14:42:24.652 [DEBUG] [Thread-556] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:42:24.670 [DEBUG] [Thread-556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:42:24.671 [DEBUG] [Thread-556] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:42:24.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:42:24.672 [DEBUG] [Thread-556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:42:24.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:42:24.674 [DEBUG] [Thread-556] [transport.py] [_log()] userauth is OK
2025-11-25T14:42:24.674 [DEBUG] [Thread-556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:42:24.674 [DEBUG] [Thread-556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:42:24.674 [DEBUG] [Thread-556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:42:24.674 [DEBUG] [Thread-556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:42:24.692 [INFO] [Thread-556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:42:24.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:42:25.328 [DEBUG] [Thread-556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:42:25.329 [DEBUG] [Thread-556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:42:25.329 [DEBUG] [Thread-556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:42:25.370 [DEBUG] [Thread-556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:42:25.370 [DEBUG] [Thread-556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:42:25.374 [DEBUG] [Thread-556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:42:25.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:42:25.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:42:25.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:42:25.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:42:25.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:42:25.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:42:25.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:42:25.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:42:25.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:42:25.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.529268 -999.00  +26.50  11.71     13   -3.80 1 1 1 1 1   888    0 29.73 -6.08 ----- 12.1 11.7 343.2 14.1 34.6 -31.2 34.2 -30.7 35.3 -29.1 35.9 -30.4
2025-11-25T14:42:25.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:42:25.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:42:25.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.529268
2025-11-25T14:42:25.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:42:25.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:42:25.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:42:25.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:42:25.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:42:25.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:42:03', tmtdew=36.11, humidity=8.59, cloud=0.0, wind=9.3, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:42:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:42:25.400 [DEBUG] [Thread-556] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:42:25.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:42:25.504 [DEBUG] [Thread-559] [transport.py] [_log()] starting thread (client mode): 0x7376e830
2025-11-25T14:42:25.504 [DEBUG] [Thread-559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:42:25.519 [DEBUG] [Thread-559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:42:25.519 [INFO] [Thread-559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:42:25.527 [DEBUG] [Thread-559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:42:25.527 [DEBUG] [Thread-559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:42:25.527 [DEBUG] [Thread-559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:42:25.527 [DEBUG] [Thread-559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:42:25.527 [DEBUG] [Thread-559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:42:25.527 [DEBUG] [Thread-559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:42:25.527 [DEBUG] [Thread-559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] client lang: <none>
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] server lang: <none>
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] kex follows: False
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] Compression: none
2025-11-25T14:42:25.528 [DEBUG] [Thread-559] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:42:25.586 [DEBUG] [Thread-559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:42:25.587 [DEBUG] [Thread-559] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:42:25.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:42:25.588 [DEBUG] [Thread-559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:42:25.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:42:25.642 [DEBUG] [Thread-559] [transport.py] [_log()] userauth is OK
2025-11-25T14:42:25.643 [DEBUG] [Thread-559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:42:25.643 [DEBUG] [Thread-559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:42:25.643 [DEBUG] [Thread-559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:42:25.643 [DEBUG] [Thread-559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:42:25.661 [INFO] [Thread-559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:42:25.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:42:25.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:42:26.393 [DEBUG] [Thread-559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:42:26.393 [DEBUG] [Thread-559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:42:26.440 [DEBUG] [Thread-559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:42:26.441 [DEBUG] [Thread-559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:42:26.450 [DEBUG] [Thread-559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:42:26.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:42:26.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:42:26.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:42:26.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:42:26.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:42:26.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:42:26.487 [DEBUG] [Thread-559] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:42:38.317 [DEBUG] [Thread-561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:42:53.379 [DEBUG] [Thread-562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:42:56.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:42:56.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:42:56.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:42:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 42, 35), 36.26, 8.17, 0.0, 8.05, 26.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:42:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:42:35
2025-11-25T14:42:57.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:42:57.417 [DEBUG] [Thread-563] [transport.py] [_log()] starting thread (client mode): 0x7376c070
2025-11-25T14:42:57.417 [DEBUG] [Thread-563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:42:57.439 [DEBUG] [Thread-563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:42:57.439 [INFO] [Thread-563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:42:57.441 [DEBUG] [Thread-563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] client lang: <none>
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] server lang: <none>
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] kex follows: False
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] Compression: none
2025-11-25T14:42:57.442 [DEBUG] [Thread-563] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:42:57.459 [DEBUG] [Thread-563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:42:57.460 [DEBUG] [Thread-563] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:42:57.460 [DEBUG] [Thread-563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:42:57.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:42:57.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:42:57.462 [DEBUG] [Thread-563] [transport.py] [_log()] userauth is OK
2025-11-25T14:42:57.462 [DEBUG] [Thread-563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:42:57.463 [DEBUG] [Thread-563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:42:57.463 [DEBUG] [Thread-563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:42:57.463 [DEBUG] [Thread-563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:42:57.487 [INFO] [Thread-563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:42:57.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:42:58.150 [DEBUG] [Thread-563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:42:58.150 [DEBUG] [Thread-563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:42:58.151 [DEBUG] [Thread-563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:42:58.191 [DEBUG] [Thread-563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:42:58.191 [DEBUG] [Thread-563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:42:58.194 [DEBUG] [Thread-563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:42:58.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:42:58.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:42:58.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:42:58.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:42:58.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:42:58.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:42:58.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:42:58.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:42:58.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:42:58.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.529615 -999.00  +26.40  14.42     13   -3.70 1 1 1 1 1   888    0 29.57 -7.45 ----- 16.9 14.4 11.6 19.1 34.5 -31.8 34.0 -32.6 35.3 -29.2 35.8 -33.9
2025-11-25T14:42:58.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:42:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:42:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.529615
2025-11-25T14:42:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:42:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:42:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:42:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:42:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:42:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:42:35', tmtdew=36.26, humidity=8.17, cloud=0.0, wind=8.05, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:42:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:42:58.221 [DEBUG] [Thread-563] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:42:58.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:42:58.315 [DEBUG] [Thread-566] [transport.py] [_log()] starting thread (client mode): 0x7378fa30
2025-11-25T14:42:58.315 [DEBUG] [Thread-566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:42:58.329 [DEBUG] [Thread-566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:42:58.330 [INFO] [Thread-566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:42:58.337 [DEBUG] [Thread-566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:42:58.337 [DEBUG] [Thread-566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:42:58.337 [DEBUG] [Thread-566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:42:58.337 [DEBUG] [Thread-566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:42:58.337 [DEBUG] [Thread-566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] client lang: <none>
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] server lang: <none>
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] kex follows: False
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] Compression: none
2025-11-25T14:42:58.338 [DEBUG] [Thread-566] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:42:58.394 [DEBUG] [Thread-566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:42:58.395 [DEBUG] [Thread-566] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:42:58.396 [DEBUG] [Thread-566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:42:58.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:42:58.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:42:58.450 [DEBUG] [Thread-566] [transport.py] [_log()] userauth is OK
2025-11-25T14:42:58.451 [DEBUG] [Thread-566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:42:58.451 [DEBUG] [Thread-566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:42:58.451 [DEBUG] [Thread-566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:42:58.451 [DEBUG] [Thread-566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:42:58.470 [INFO] [Thread-566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:42:58.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:42:58.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:42:59.212 [DEBUG] [Thread-566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:42:59.212 [DEBUG] [Thread-566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:42:59.261 [DEBUG] [Thread-566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:42:59.261 [DEBUG] [Thread-566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:42:59.270 [DEBUG] [Thread-566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:42:59.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:42:59.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:42:59.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:42:59.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:42:59.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:42:59.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:42:59.311 [DEBUG] [Thread-566] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:43:06.523 [DEBUG] [Thread-568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:43:08.420 [DEBUG] [Thread-569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:43:23.479 [DEBUG] [Thread-570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:43:29.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:43:29.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:43:29.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:43:29.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 43, 7), 36.2, 8.19, 0.0, 7.87, 26.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:43:29.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:43:07
2025-11-25T14:43:30.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:43:30.265 [DEBUG] [Thread-571] [transport.py] [_log()] starting thread (client mode): 0x7378c160
2025-11-25T14:43:30.265 [DEBUG] [Thread-571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:43:30.285 [DEBUG] [Thread-571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:43:30.285 [INFO] [Thread-571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:43:30.288 [DEBUG] [Thread-571] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] client lang: <none>
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] server lang: <none>
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] kex follows: False
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:43:30.289 [DEBUG] [Thread-571] [transport.py] [_log()] Compression: none
2025-11-25T14:43:30.290 [DEBUG] [Thread-571] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:43:30.307 [DEBUG] [Thread-571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:43:30.308 [DEBUG] [Thread-571] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:43:30.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:43:30.309 [DEBUG] [Thread-571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:43:30.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:43:30.311 [DEBUG] [Thread-571] [transport.py] [_log()] userauth is OK
2025-11-25T14:43:30.311 [DEBUG] [Thread-571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:43:30.311 [DEBUG] [Thread-571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:43:30.311 [DEBUG] [Thread-571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:43:30.311 [DEBUG] [Thread-571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:43:30.335 [INFO] [Thread-571] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:43:30.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:43:30.996 [DEBUG] [Thread-571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:43:30.996 [DEBUG] [Thread-571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:43:30.996 [DEBUG] [Thread-571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:43:31.037 [DEBUG] [Thread-571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:43:31.037 [DEBUG] [Thread-571] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:43:31.040 [DEBUG] [Thread-571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:43:31.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:43:31.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:43:31.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:43:31.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:43:31.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:43:31.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:43:31.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:43:31.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:43:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:43:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.529962 -999.00  +26.20  12.27     13   -4.00 1 1 1 1 1   888    0 30.10 -8.81 ----- 14.8 12.3 13.8 20.0 34.4 -32.0 33.9 -31.4 35.1 -31.0 35.6 -30.2
2025-11-25T14:43:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:43:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:43:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.529962
2025-11-25T14:43:31.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:43:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:43:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:43:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:43:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:43:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:43:07', tmtdew=36.2, humidity=8.19, cloud=0.0, wind=7.87, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:43:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:43:31.067 [DEBUG] [Thread-571] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:43:31.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:43:31.171 [DEBUG] [Thread-574] [transport.py] [_log()] starting thread (client mode): 0x761d9690
2025-11-25T14:43:31.171 [DEBUG] [Thread-574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:43:31.186 [DEBUG] [Thread-574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:43:31.186 [INFO] [Thread-574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:43:31.193 [DEBUG] [Thread-574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:43:31.193 [DEBUG] [Thread-574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:43:31.193 [DEBUG] [Thread-574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:43:31.193 [DEBUG] [Thread-574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:43:31.193 [DEBUG] [Thread-574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:43:31.193 [DEBUG] [Thread-574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:43:31.193 [DEBUG] [Thread-574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:43:31.193 [DEBUG] [Thread-574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:43:31.193 [DEBUG] [Thread-574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] client lang: <none>
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] server lang: <none>
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] kex follows: False
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] Compression: none
2025-11-25T14:43:31.194 [DEBUG] [Thread-574] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:43:31.251 [DEBUG] [Thread-574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:43:31.252 [DEBUG] [Thread-574] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:43:31.252 [DEBUG] [Thread-574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:43:31.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:43:31.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:43:31.310 [DEBUG] [Thread-574] [transport.py] [_log()] userauth is OK
2025-11-25T14:43:31.311 [DEBUG] [Thread-574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:43:31.311 [DEBUG] [Thread-574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:43:31.311 [DEBUG] [Thread-574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:43:31.311 [DEBUG] [Thread-574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:43:31.330 [INFO] [Thread-574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:43:31.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:43:31.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:43:32.098 [DEBUG] [Thread-574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:43:32.098 [DEBUG] [Thread-574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:43:32.146 [DEBUG] [Thread-574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:43:32.146 [DEBUG] [Thread-574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:43:32.155 [DEBUG] [Thread-574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:43:32.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:43:32.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:43:32.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:43:32.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:43:32.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:43:32.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:43:32.192 [DEBUG] [Thread-574] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:43:38.517 [DEBUG] [Thread-576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:43:53.592 [DEBUG] [Thread-577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:44:02.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:44:02.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:44:02.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:44:02.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 43, 39), 36.29, 8.25, 0.0, 12.05, 25.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:44:02.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:43:39
2025-11-25T14:44:03.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:44:03.200 [DEBUG] [Thread-578] [transport.py] [_log()] starting thread (client mode): 0x7378cf70
2025-11-25T14:44:03.200 [DEBUG] [Thread-578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:44:03.220 [DEBUG] [Thread-578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:44:03.221 [INFO] [Thread-578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] client lang: <none>
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] server lang: <none>
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] kex follows: False
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] Compression: none
2025-11-25T14:44:03.224 [DEBUG] [Thread-578] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:44:03.240 [DEBUG] [Thread-578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:44:03.240 [DEBUG] [Thread-578] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:44:03.240 [DEBUG] [Thread-578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:44:03.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:44:03.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:44:03.241 [DEBUG] [Thread-578] [transport.py] [_log()] userauth is OK
2025-11-25T14:44:03.241 [DEBUG] [Thread-578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:44:03.241 [DEBUG] [Thread-578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:44:03.241 [DEBUG] [Thread-578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:44:03.241 [DEBUG] [Thread-578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:44:03.250 [INFO] [Thread-578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:44:03.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:44:03.883 [DEBUG] [Thread-578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:44:03.883 [DEBUG] [Thread-578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:44:03.883 [DEBUG] [Thread-578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:44:03.924 [DEBUG] [Thread-578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:44:03.924 [DEBUG] [Thread-578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:44:03.927 [DEBUG] [Thread-578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:44:03.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:44:03.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:44:03.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:44:03.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:44:03.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:44:03.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:44:03.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:44:03.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.530309 -999.00  +26.00  15.15     13   -3.90 1 1 1 1 1   888    0 29.87 -9.82 ----- 7.3 15.2 24.8 19.0 34.2 -31.9 33.8 -32.6 34.8 -30.1 35.3 -30.2
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.530309
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:44:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:43:39', tmtdew=36.29, humidity=8.25, cloud=0.0, wind=12.05, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:43:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:44:03.946 [DEBUG] [Thread-578] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:44:04.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:44:04.040 [DEBUG] [Thread-581] [transport.py] [_log()] starting thread (client mode): 0x7378caf0
2025-11-25T14:44:04.040 [DEBUG] [Thread-581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:44:04.054 [DEBUG] [Thread-581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:44:04.054 [INFO] [Thread-581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] client lang: <none>
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] server lang: <none>
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] kex follows: False
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] Compression: none
2025-11-25T14:44:04.062 [DEBUG] [Thread-581] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:44:04.117 [DEBUG] [Thread-581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:44:04.117 [DEBUG] [Thread-581] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:44:04.117 [DEBUG] [Thread-581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:44:04.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:44:04.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:44:04.174 [DEBUG] [Thread-581] [transport.py] [_log()] userauth is OK
2025-11-25T14:44:04.174 [DEBUG] [Thread-581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:44:04.174 [DEBUG] [Thread-581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:44:04.174 [DEBUG] [Thread-581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:44:04.174 [DEBUG] [Thread-581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:44:04.188 [INFO] [Thread-581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:44:04.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:44:04.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:44:04.937 [DEBUG] [Thread-581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:44:04.937 [DEBUG] [Thread-581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:44:04.985 [DEBUG] [Thread-581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:44:04.985 [DEBUG] [Thread-581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:44:04.993 [DEBUG] [Thread-581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:44:05.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:44:05.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:44:05.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:44:05.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:44:05.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:44:05.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:44:05.025 [DEBUG] [Thread-581] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:44:07.260 [DEBUG] [Thread-583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:44:08.634 [DEBUG] [Thread-584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:44:23.702 [DEBUG] [Thread-585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:44:35.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:44:35.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:44:35.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:44:35.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 44, 11), 36.16, 8.32, 0.0, 9.48, 25.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:44:35.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:44:11
2025-11-25T14:44:35.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:44:36.005 [DEBUG] [Thread-586] [transport.py] [_log()] starting thread (client mode): 0x7378d870
2025-11-25T14:44:36.005 [DEBUG] [Thread-586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:44:36.023 [DEBUG] [Thread-586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:44:36.023 [INFO] [Thread-586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] client lang: <none>
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] server lang: <none>
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] kex follows: False
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:44:36.027 [DEBUG] [Thread-586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:44:36.028 [DEBUG] [Thread-586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:44:36.028 [DEBUG] [Thread-586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:44:36.028 [DEBUG] [Thread-586] [transport.py] [_log()] Compression: none
2025-11-25T14:44:36.028 [DEBUG] [Thread-586] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:44:36.046 [DEBUG] [Thread-586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:44:36.046 [DEBUG] [Thread-586] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:44:36.047 [DEBUG] [Thread-586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:44:36.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:44:36.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:44:36.049 [DEBUG] [Thread-586] [transport.py] [_log()] userauth is OK
2025-11-25T14:44:36.049 [DEBUG] [Thread-586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:44:36.049 [DEBUG] [Thread-586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:44:36.049 [DEBUG] [Thread-586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:44:36.049 [DEBUG] [Thread-586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:44:36.073 [INFO] [Thread-586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:44:36.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:44:36.738 [DEBUG] [Thread-586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:44:36.738 [DEBUG] [Thread-586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:44:36.739 [DEBUG] [Thread-586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:44:36.780 [DEBUG] [Thread-586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:44:36.780 [DEBUG] [Thread-586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:44:36.784 [DEBUG] [Thread-586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:44:36.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:44:36.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:44:36.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:44:36.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:44:36.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:44:36.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:44:36.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:44:36.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:44:36.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:44:36.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.530657 -999.00  +25.70  11.05     13   -4.00 1 1 1 1 1   888    0 29.67 -11.55 ----- 10.2 11.1 4.2 15.9 34.2 -32.6 33.6 -32.4 34.8 -29.9 35.3 -30.3
2025-11-25T14:44:36.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:44:36.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:44:36.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.530657
2025-11-25T14:44:36.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:44:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:44:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:44:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:44:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:44:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:44:11', tmtdew=36.16, humidity=8.32, cloud=0.0, wind=9.48, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:44:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:44:36.812 [DEBUG] [Thread-586] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:44:36.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:44:36.929 [DEBUG] [Thread-589] [transport.py] [_log()] starting thread (client mode): 0x7378ff40
2025-11-25T14:44:36.929 [DEBUG] [Thread-589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:44:36.943 [DEBUG] [Thread-589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:44:36.943 [INFO] [Thread-589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:44:36.950 [DEBUG] [Thread-589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] client lang: <none>
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] server lang: <none>
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] kex follows: False
2025-11-25T14:44:36.951 [DEBUG] [Thread-589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:44:36.952 [DEBUG] [Thread-589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:44:36.952 [DEBUG] [Thread-589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:44:36.952 [DEBUG] [Thread-589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:44:36.952 [DEBUG] [Thread-589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:44:36.952 [DEBUG] [Thread-589] [transport.py] [_log()] Compression: none
2025-11-25T14:44:36.952 [DEBUG] [Thread-589] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:44:37.011 [DEBUG] [Thread-589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:44:37.011 [DEBUG] [Thread-589] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:44:37.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:44:37.013 [DEBUG] [Thread-589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:44:37.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:44:37.067 [DEBUG] [Thread-589] [transport.py] [_log()] userauth is OK
2025-11-25T14:44:37.067 [DEBUG] [Thread-589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:44:37.068 [DEBUG] [Thread-589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:44:37.068 [DEBUG] [Thread-589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:44:37.068 [DEBUG] [Thread-589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:44:37.086 [INFO] [Thread-589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:44:37.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:44:37.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:44:37.816 [DEBUG] [Thread-589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:44:37.816 [DEBUG] [Thread-589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:44:37.864 [DEBUG] [Thread-589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:44:37.864 [DEBUG] [Thread-589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:44:37.872 [DEBUG] [Thread-589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:44:37.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:44:37.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:44:37.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:44:37.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:44:37.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:44:37.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:44:37.904 [DEBUG] [Thread-589] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:44:38.745 [DEBUG] [Thread-591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:44:53.801 [DEBUG] [Thread-592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:45:07.767 [DEBUG] [Thread-593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:45:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:45:07.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:45:07.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:45:08.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 44, 43), 35.98, 8.27, 0.0, 6.95, 26.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:45:08.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:44:43
2025-11-25T14:45:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:45:08.846 [DEBUG] [Thread-594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:45:08.876 [DEBUG] [Thread-595] [transport.py] [_log()] starting thread (client mode): 0x761d9bd0
2025-11-25T14:45:08.877 [DEBUG] [Thread-595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:45:08.896 [DEBUG] [Thread-595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:45:08.896 [INFO] [Thread-595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:45:08.897 [DEBUG] [Thread-595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:45:08.897 [DEBUG] [Thread-595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] client lang: <none>
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] server lang: <none>
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] kex follows: False
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] Compression: none
2025-11-25T14:45:08.898 [DEBUG] [Thread-595] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:45:08.907 [DEBUG] [Thread-595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:45:08.907 [DEBUG] [Thread-595] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:45:08.907 [DEBUG] [Thread-595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:45:08.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:45:08.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:45:08.909 [DEBUG] [Thread-595] [transport.py] [_log()] userauth is OK
2025-11-25T14:45:08.909 [DEBUG] [Thread-595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:45:08.909 [DEBUG] [Thread-595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:45:08.909 [DEBUG] [Thread-595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:45:08.909 [DEBUG] [Thread-595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:45:08.925 [INFO] [Thread-595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:45:08.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:45:09.584 [DEBUG] [Thread-595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:45:09.584 [DEBUG] [Thread-595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:45:09.585 [DEBUG] [Thread-595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:45:09.625 [DEBUG] [Thread-595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:45:09.625 [DEBUG] [Thread-595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:45:09.628 [DEBUG] [Thread-595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:45:09.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:45:09.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:45:09.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:45:09.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:45:09.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:45:09.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:45:09.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:45:09.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:45:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:45:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.531004 -999.00  +25.50  11.75     13   -4.00 1 1 1 1 1   888    0 29.91 -13.22 ----- 9.9 11.8 353.6 13.4 34.1 -31.0 33.6 -31.9 34.7 -29.2 34.8 -29.1
2025-11-25T14:45:09.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:45:09.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:45:09.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.531004
2025-11-25T14:45:09.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:45:09.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:45:09.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:45:09.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:45:09.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:45:09.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:44:43', tmtdew=35.98, humidity=8.27, cloud=0.0, wind=6.95, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:44:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:45:09.654 [DEBUG] [Thread-595] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:45:09.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:45:09.758 [DEBUG] [Thread-598] [transport.py] [_log()] starting thread (client mode): 0x737c4cd0
2025-11-25T14:45:09.759 [DEBUG] [Thread-598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:45:09.775 [DEBUG] [Thread-598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:45:09.775 [INFO] [Thread-598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:45:09.782 [DEBUG] [Thread-598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] client lang: <none>
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] server lang: <none>
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] kex follows: False
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:45:09.783 [DEBUG] [Thread-598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:45:09.784 [DEBUG] [Thread-598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:45:09.784 [DEBUG] [Thread-598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:45:09.784 [DEBUG] [Thread-598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:45:09.784 [DEBUG] [Thread-598] [transport.py] [_log()] Compression: none
2025-11-25T14:45:09.784 [DEBUG] [Thread-598] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:45:09.843 [DEBUG] [Thread-598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:45:09.844 [DEBUG] [Thread-598] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:45:09.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:45:09.845 [DEBUG] [Thread-598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:45:09.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:45:09.900 [DEBUG] [Thread-598] [transport.py] [_log()] userauth is OK
2025-11-25T14:45:09.900 [DEBUG] [Thread-598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:45:09.900 [DEBUG] [Thread-598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:45:09.900 [DEBUG] [Thread-598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:45:09.900 [DEBUG] [Thread-598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:45:09.919 [INFO] [Thread-598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:45:09.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:45:09.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:45:10.627 [DEBUG] [Thread-598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:45:10.627 [DEBUG] [Thread-598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:45:10.675 [DEBUG] [Thread-598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:45:10.675 [DEBUG] [Thread-598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:45:10.684 [DEBUG] [Thread-598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:45:10.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:45:10.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:45:10.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:45:10.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:45:10.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:45:10.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:45:10.724 [DEBUG] [Thread-598] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:45:23.883 [DEBUG] [Thread-600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:45:38.954 [DEBUG] [Thread-601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:45:40.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:45:40.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:45:40.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:45:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 45, 15), 36.1, 8.19, 0.0, 11.01, 25.99, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:45:41.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:45:15
2025-11-25T14:45:41.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:45:41.684 [DEBUG] [Thread-602] [transport.py] [_log()] starting thread (client mode): 0x7378c370
2025-11-25T14:45:41.685 [DEBUG] [Thread-602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:45:41.698 [DEBUG] [Thread-602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:45:41.698 [INFO] [Thread-602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] client lang: <none>
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] server lang: <none>
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] kex follows: False
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] Compression: none
2025-11-25T14:45:41.699 [DEBUG] [Thread-602] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:45:41.707 [DEBUG] [Thread-602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:45:41.708 [DEBUG] [Thread-602] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:45:41.708 [DEBUG] [Thread-602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:45:41.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:45:41.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:45:41.710 [DEBUG] [Thread-602] [transport.py] [_log()] userauth is OK
2025-11-25T14:45:41.710 [DEBUG] [Thread-602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:45:41.710 [DEBUG] [Thread-602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:45:41.710 [DEBUG] [Thread-602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:45:41.710 [DEBUG] [Thread-602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:45:41.729 [INFO] [Thread-602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:45:41.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:45:42.291 [DEBUG] [Thread-602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:45:42.292 [DEBUG] [Thread-602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:45:42.292 [DEBUG] [Thread-602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:45:42.332 [DEBUG] [Thread-602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:45:42.333 [DEBUG] [Thread-602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:45:42.336 [DEBUG] [Thread-602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:45:42.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:45:42.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:45:42.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:45:42.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:45:42.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:45:42.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:45:42.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:45:42.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:45:42.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:45:42.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.531698 -999.00  +25.80   4.12     13   -4.00 1 1 1 1 1   888    0 29.70 -18.55 ----- 1.6 4.1 119.7 9.2 34.1 -31.8 33.8 -30.5 34.8 -30.1 35.2 -30.9
2025-11-25T14:45:42.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:45:42.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:45:42.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.531698
2025-11-25T14:45:42.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:45:42.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:45:42.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:45:42.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:45:42.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:45:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:45:15', tmtdew=36.1, humidity=8.19, cloud=0.0, wind=11.01, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:45:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:45:42.362 [DEBUG] [Thread-602] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:45:42.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:45:42.456 [DEBUG] [Thread-605] [transport.py] [_log()] starting thread (client mode): 0x7378d930
2025-11-25T14:45:42.456 [DEBUG] [Thread-605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:45:42.470 [DEBUG] [Thread-605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:45:42.470 [INFO] [Thread-605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:45:42.478 [DEBUG] [Thread-605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:45:42.478 [DEBUG] [Thread-605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:45:42.478 [DEBUG] [Thread-605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:45:42.478 [DEBUG] [Thread-605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:45:42.478 [DEBUG] [Thread-605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:45:42.478 [DEBUG] [Thread-605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:45:42.478 [DEBUG] [Thread-605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:45:42.478 [DEBUG] [Thread-605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:45:42.478 [DEBUG] [Thread-605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] client lang: <none>
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] server lang: <none>
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] kex follows: False
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] Compression: none
2025-11-25T14:45:42.479 [DEBUG] [Thread-605] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:45:42.535 [DEBUG] [Thread-605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:45:42.536 [DEBUG] [Thread-605] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:45:42.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:45:42.537 [DEBUG] [Thread-605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:45:42.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:45:42.592 [DEBUG] [Thread-605] [transport.py] [_log()] userauth is OK
2025-11-25T14:45:42.592 [DEBUG] [Thread-605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:45:42.592 [DEBUG] [Thread-605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:45:42.592 [DEBUG] [Thread-605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:45:42.592 [DEBUG] [Thread-605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:45:42.611 [INFO] [Thread-605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:45:42.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:45:42.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:45:43.339 [DEBUG] [Thread-605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:45:43.339 [DEBUG] [Thread-605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:45:43.388 [DEBUG] [Thread-605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:45:43.388 [DEBUG] [Thread-605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:45:43.397 [DEBUG] [Thread-605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:45:43.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:45:43.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:45:43.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:45:43.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:45:43.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:45:43.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:45:43.434 [DEBUG] [Thread-605] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:45:53.994 [DEBUG] [Thread-607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:46:08.522 [DEBUG] [Thread-608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:46:09.047 [DEBUG] [Thread-609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:46:13.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:46:13.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:46:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:46:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 45, 48), 36.48, 8.09, 0.0, 8.63, 26.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:46:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:45:48
2025-11-25T14:46:14.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:46:14.389 [DEBUG] [Thread-610] [transport.py] [_log()] starting thread (client mode): 0x7378fd60
2025-11-25T14:46:14.390 [DEBUG] [Thread-610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:46:14.409 [DEBUG] [Thread-610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:46:14.409 [INFO] [Thread-610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] client lang: <none>
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] server lang: <none>
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] kex follows: False
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:46:14.412 [DEBUG] [Thread-610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:46:14.413 [DEBUG] [Thread-610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:46:14.413 [DEBUG] [Thread-610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:46:14.413 [DEBUG] [Thread-610] [transport.py] [_log()] Compression: none
2025-11-25T14:46:14.413 [DEBUG] [Thread-610] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:46:14.427 [DEBUG] [Thread-610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:46:14.428 [DEBUG] [Thread-610] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:46:14.428 [DEBUG] [Thread-610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:46:14.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:46:14.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:46:14.430 [DEBUG] [Thread-610] [transport.py] [_log()] userauth is OK
2025-11-25T14:46:14.430 [DEBUG] [Thread-610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:46:14.431 [DEBUG] [Thread-610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:46:14.431 [DEBUG] [Thread-610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:46:14.431 [DEBUG] [Thread-610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:46:14.456 [INFO] [Thread-610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:46:14.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:46:15.054 [DEBUG] [Thread-610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:46:15.054 [DEBUG] [Thread-610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:46:15.054 [DEBUG] [Thread-610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:46:15.096 [DEBUG] [Thread-610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:46:15.096 [DEBUG] [Thread-610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:46:15.099 [DEBUG] [Thread-610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:46:15.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:46:15.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:46:15.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:46:15.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:46:15.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:46:15.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:46:15.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:46:15.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:46:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:46:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.532046 -999.00  +26.00   6.02     13   -3.90 1 1 1 1 1   888    0 29.81 -18.83 ----- 7.6 6.0 24.8 7.7 34.1 -30.5 33.9 -31.3 34.9 -28.4 35.4 -29.1
2025-11-25T14:46:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:46:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:46:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.532046
2025-11-25T14:46:15.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:46:15.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:46:15.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:46:15.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:46:15.132 [DEBUG] [Thread-610] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:46:15.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:46:15.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:45:48', tmtdew=36.48, humidity=8.09, cloud=0.0, wind=8.63, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:46:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:46:15.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:46:15.235 [DEBUG] [Thread-613] [transport.py] [_log()] starting thread (client mode): 0x761d93f0
2025-11-25T14:46:15.236 [DEBUG] [Thread-613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:46:15.250 [DEBUG] [Thread-613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:46:15.250 [INFO] [Thread-613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:46:15.257 [DEBUG] [Thread-613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] client lang: <none>
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] server lang: <none>
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] kex follows: False
2025-11-25T14:46:15.258 [DEBUG] [Thread-613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:46:15.259 [DEBUG] [Thread-613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:46:15.259 [DEBUG] [Thread-613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:46:15.259 [DEBUG] [Thread-613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:46:15.259 [DEBUG] [Thread-613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:46:15.259 [DEBUG] [Thread-613] [transport.py] [_log()] Compression: none
2025-11-25T14:46:15.259 [DEBUG] [Thread-613] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:46:15.316 [DEBUG] [Thread-613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:46:15.317 [DEBUG] [Thread-613] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:46:15.317 [DEBUG] [Thread-613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:46:15.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:46:15.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:46:15.376 [DEBUG] [Thread-613] [transport.py] [_log()] userauth is OK
2025-11-25T14:46:15.376 [DEBUG] [Thread-613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:46:15.376 [DEBUG] [Thread-613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:46:15.376 [DEBUG] [Thread-613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:46:15.377 [DEBUG] [Thread-613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:46:15.401 [INFO] [Thread-613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:46:15.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:46:15.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:46:16.135 [DEBUG] [Thread-613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:46:16.135 [DEBUG] [Thread-613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:46:16.183 [DEBUG] [Thread-613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:46:16.183 [DEBUG] [Thread-613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:46:16.192 [DEBUG] [Thread-613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:46:16.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:46:16.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:46:16.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:46:16.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:46:16.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:46:16.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:46:16.229 [DEBUG] [Thread-613] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:46:24.096 [DEBUG] [Thread-615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:46:39.159 [DEBUG] [Thread-616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:46:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:46:46.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:46:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:46:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 46, 20), 36.6, 8.0, 0.0, 6.56, 26.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:46:46.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:46:20
2025-11-25T14:46:47.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:46:47.216 [DEBUG] [Thread-617] [transport.py] [_log()] starting thread (client mode): 0x7378f100
2025-11-25T14:46:47.216 [DEBUG] [Thread-617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:46:47.236 [DEBUG] [Thread-617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:46:47.236 [INFO] [Thread-617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:46:47.239 [DEBUG] [Thread-617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:46:47.239 [DEBUG] [Thread-617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:46:47.239 [DEBUG] [Thread-617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:46:47.239 [DEBUG] [Thread-617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:46:47.240 [DEBUG] [Thread-617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:46:47.240 [DEBUG] [Thread-617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:46:47.240 [DEBUG] [Thread-617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:46:47.240 [DEBUG] [Thread-617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:46:47.240 [DEBUG] [Thread-617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:46:47.240 [DEBUG] [Thread-617] [transport.py] [_log()] client lang: <none>
2025-11-25T14:46:47.240 [DEBUG] [Thread-617] [transport.py] [_log()] server lang: <none>
2025-11-25T14:46:47.240 [DEBUG] [Thread-617] [transport.py] [_log()] kex follows: False
2025-11-25T14:46:47.241 [DEBUG] [Thread-617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:46:47.241 [DEBUG] [Thread-617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:46:47.241 [DEBUG] [Thread-617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:46:47.241 [DEBUG] [Thread-617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:46:47.241 [DEBUG] [Thread-617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:46:47.241 [DEBUG] [Thread-617] [transport.py] [_log()] Compression: none
2025-11-25T14:46:47.241 [DEBUG] [Thread-617] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:46:47.262 [DEBUG] [Thread-617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:46:47.262 [DEBUG] [Thread-617] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:46:47.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:46:47.264 [DEBUG] [Thread-617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:46:47.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:46:47.266 [DEBUG] [Thread-617] [transport.py] [_log()] userauth is OK
2025-11-25T14:46:47.266 [DEBUG] [Thread-617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:46:47.266 [DEBUG] [Thread-617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:46:47.266 [DEBUG] [Thread-617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:46:47.266 [DEBUG] [Thread-617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:46:47.291 [INFO] [Thread-617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:46:47.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:46:47.874 [DEBUG] [Thread-617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:46:47.874 [DEBUG] [Thread-617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:46:47.875 [DEBUG] [Thread-617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:46:47.915 [DEBUG] [Thread-617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:46:47.916 [DEBUG] [Thread-617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:46:47.919 [DEBUG] [Thread-617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:46:47.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:46:47.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:46:47.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:46:47.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:46:47.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:46:47.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:46:47.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:46:47.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:46:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:46:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.532393 -999.00  +26.50  18.13     13   -3.90 1 1 1 1 1   888    0 29.47 -18.78 ----- 15.0 18.1 49.2 20.8 34.2 -30.3 33.8 -32.3 34.9 -28.9 35.3 -31.3
2025-11-25T14:46:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:46:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:46:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.532393
2025-11-25T14:46:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:46:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:46:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:46:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:46:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:46:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:46:20', tmtdew=36.6, humidity=8.0, cloud=0.0, wind=6.56, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:46:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:46:47.945 [DEBUG] [Thread-617] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:46:48.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:46:48.051 [DEBUG] [Thread-620] [transport.py] [_log()] starting thread (client mode): 0x7378cd30
2025-11-25T14:46:48.051 [DEBUG] [Thread-620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:46:48.065 [DEBUG] [Thread-620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:46:48.066 [INFO] [Thread-620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:46:48.073 [DEBUG] [Thread-620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:46:48.074 [DEBUG] [Thread-620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:46:48.074 [DEBUG] [Thread-620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:46:48.074 [DEBUG] [Thread-620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:46:48.074 [DEBUG] [Thread-620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:46:48.074 [DEBUG] [Thread-620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:46:48.074 [DEBUG] [Thread-620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:46:48.074 [DEBUG] [Thread-620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] client lang: <none>
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] server lang: <none>
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] kex follows: False
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] Compression: none
2025-11-25T14:46:48.075 [DEBUG] [Thread-620] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:46:48.132 [DEBUG] [Thread-620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:46:48.133 [DEBUG] [Thread-620] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:46:48.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:46:48.134 [DEBUG] [Thread-620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:46:48.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:46:48.192 [DEBUG] [Thread-620] [transport.py] [_log()] userauth is OK
2025-11-25T14:46:48.192 [DEBUG] [Thread-620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:46:48.192 [DEBUG] [Thread-620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:46:48.192 [DEBUG] [Thread-620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:46:48.193 [DEBUG] [Thread-620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:46:48.212 [INFO] [Thread-620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:46:48.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:46:48.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:46:49.002 [DEBUG] [Thread-620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:46:49.003 [DEBUG] [Thread-620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:46:49.052 [DEBUG] [Thread-620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:46:49.052 [DEBUG] [Thread-620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:46:49.062 [DEBUG] [Thread-620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:46:49.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:46:49.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:46:49.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:46:49.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:46:49.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:46:49.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:46:49.104 [DEBUG] [Thread-620] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:46:54.204 [DEBUG] [Thread-622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:47:09.051 [DEBUG] [Thread-623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:47:09.256 [DEBUG] [Thread-624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:47:19.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:47:19.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:47:19.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:47:19.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 46, 53), 36.15, 8.6, 0.0, 9.44, 26.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:47:19.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:46:53
2025-11-25T14:47:19.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:47:20.087 [DEBUG] [Thread-625] [transport.py] [_log()] starting thread (client mode): 0x7376cd00
2025-11-25T14:47:20.087 [DEBUG] [Thread-625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:47:20.100 [DEBUG] [Thread-625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:47:20.100 [INFO] [Thread-625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:47:20.101 [DEBUG] [Thread-625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:47:20.101 [DEBUG] [Thread-625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:47:20.101 [DEBUG] [Thread-625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:47:20.101 [DEBUG] [Thread-625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] client lang: <none>
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] server lang: <none>
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] kex follows: False
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] Compression: none
2025-11-25T14:47:20.102 [DEBUG] [Thread-625] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:47:20.111 [DEBUG] [Thread-625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:47:20.111 [DEBUG] [Thread-625] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:47:20.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:47:20.112 [DEBUG] [Thread-625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:47:20.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:47:20.114 [DEBUG] [Thread-625] [transport.py] [_log()] userauth is OK
2025-11-25T14:47:20.114 [DEBUG] [Thread-625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:47:20.114 [DEBUG] [Thread-625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:47:20.114 [DEBUG] [Thread-625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:47:20.114 [DEBUG] [Thread-625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:47:20.132 [INFO] [Thread-625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:47:20.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:47:20.731 [DEBUG] [Thread-625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:47:20.731 [DEBUG] [Thread-625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:47:20.732 [DEBUG] [Thread-625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:47:20.771 [DEBUG] [Thread-625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:47:20.772 [DEBUG] [Thread-625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:47:20.774 [DEBUG] [Thread-625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:47:20.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:47:20.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:47:20.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:47:20.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:47:20.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:47:20.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:47:20.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:47:20.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:47:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:47:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.532740 -999.00  +26.20  15.60     13   -3.90 1 1 1 1 1   888    0 29.63 -17.72 ----- 12.5 15.6 63.0 17.6 34.0 -31.1 33.6 -32.3 34.6 -30.9 35.3 -30.0
2025-11-25T14:47:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:47:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:47:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.532740
2025-11-25T14:47:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:47:20.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:47:20.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:47:20.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:47:20.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:47:20.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:46:53', tmtdew=36.15, humidity=8.6, cloud=0.0, wind=9.44, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:47:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:47:20.793 [DEBUG] [Thread-625] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:47:20.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:47:20.885 [DEBUG] [Thread-628] [transport.py] [_log()] starting thread (client mode): 0x7376e4d0
2025-11-25T14:47:20.885 [DEBUG] [Thread-628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:47:20.900 [DEBUG] [Thread-628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:47:20.901 [INFO] [Thread-628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:47:20.910 [DEBUG] [Thread-628] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:47:20.910 [DEBUG] [Thread-628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:47:20.910 [DEBUG] [Thread-628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:47:20.910 [DEBUG] [Thread-628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:47:20.910 [DEBUG] [Thread-628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:47:20.910 [DEBUG] [Thread-628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] client lang: <none>
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] server lang: <none>
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] kex follows: False
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] Compression: none
2025-11-25T14:47:20.911 [DEBUG] [Thread-628] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:47:20.967 [DEBUG] [Thread-628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:47:20.968 [DEBUG] [Thread-628] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:47:20.968 [DEBUG] [Thread-628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:47:20.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:47:20.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:47:21.024 [DEBUG] [Thread-628] [transport.py] [_log()] userauth is OK
2025-11-25T14:47:21.024 [DEBUG] [Thread-628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:47:21.024 [DEBUG] [Thread-628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:47:21.024 [DEBUG] [Thread-628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:47:21.024 [DEBUG] [Thread-628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:47:21.043 [INFO] [Thread-628] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:47:21.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:47:21.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:47:21.772 [DEBUG] [Thread-628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:47:21.772 [DEBUG] [Thread-628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:47:21.820 [DEBUG] [Thread-628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:47:21.820 [DEBUG] [Thread-628] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:47:21.829 [DEBUG] [Thread-628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:47:21.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:47:21.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:47:21.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:47:21.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:47:21.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:47:21.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:47:21.864 [DEBUG] [Thread-628] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:47:24.296 [DEBUG] [Thread-630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:47:39.364 [DEBUG] [Thread-631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:47:51.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:47:51.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:47:51.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:47:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 47, 25), 36.4, 8.45, 0.0, 7.99, 26.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:47:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:47:25
2025-11-25T14:47:52.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:47:52.824 [DEBUG] [Thread-632] [transport.py] [_log()] starting thread (client mode): 0x7378e920
2025-11-25T14:47:52.824 [DEBUG] [Thread-632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:47:52.836 [DEBUG] [Thread-632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:47:52.837 [INFO] [Thread-632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] client lang: <none>
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] server lang: <none>
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] kex follows: False
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] Compression: none
2025-11-25T14:47:52.838 [DEBUG] [Thread-632] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:47:52.851 [DEBUG] [Thread-632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:47:52.852 [DEBUG] [Thread-632] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:47:52.852 [DEBUG] [Thread-632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:47:52.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:47:52.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:47:52.854 [DEBUG] [Thread-632] [transport.py] [_log()] userauth is OK
2025-11-25T14:47:52.854 [DEBUG] [Thread-632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:47:52.855 [DEBUG] [Thread-632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:47:52.855 [DEBUG] [Thread-632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:47:52.855 [DEBUG] [Thread-632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:47:52.873 [INFO] [Thread-632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:47:52.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:47:53.508 [DEBUG] [Thread-632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:47:53.508 [DEBUG] [Thread-632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:47:53.509 [DEBUG] [Thread-632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:47:53.550 [DEBUG] [Thread-632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:47:53.550 [DEBUG] [Thread-632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:47:53.553 [DEBUG] [Thread-632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:47:53.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:47:53.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:47:53.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:47:53.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:47:53.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:47:53.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:47:53.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:47:53.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:47:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:47:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.533087 -999.00  +26.20  14.04     13   -3.90 1 1 1 1 1   888    0 29.68 -16.94 ----- 12.0 14.0 56.0 15.3 34.0 -30.4 33.8 -30.7 34.8 -28.4 35.3 -29.4
2025-11-25T14:47:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:47:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:47:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.533087
2025-11-25T14:47:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:47:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:47:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:47:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:47:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:47:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:47:25', tmtdew=36.4, humidity=8.45, cloud=0.0, wind=7.99, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:47:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:47:53.582 [DEBUG] [Thread-632] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:47:53.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:47:53.684 [DEBUG] [Thread-635] [transport.py] [_log()] starting thread (client mode): 0x761db610
2025-11-25T14:47:53.684 [DEBUG] [Thread-635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:47:53.699 [DEBUG] [Thread-635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:47:53.699 [INFO] [Thread-635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:47:53.707 [DEBUG] [Thread-635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:47:53.707 [DEBUG] [Thread-635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:47:53.707 [DEBUG] [Thread-635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:47:53.707 [DEBUG] [Thread-635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:47:53.708 [DEBUG] [Thread-635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:47:53.708 [DEBUG] [Thread-635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:47:53.708 [DEBUG] [Thread-635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:47:53.708 [DEBUG] [Thread-635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:47:53.708 [DEBUG] [Thread-635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:47:53.708 [DEBUG] [Thread-635] [transport.py] [_log()] client lang: <none>
2025-11-25T14:47:53.709 [DEBUG] [Thread-635] [transport.py] [_log()] server lang: <none>
2025-11-25T14:47:53.709 [DEBUG] [Thread-635] [transport.py] [_log()] kex follows: False
2025-11-25T14:47:53.709 [DEBUG] [Thread-635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:47:53.709 [DEBUG] [Thread-635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:47:53.709 [DEBUG] [Thread-635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:47:53.709 [DEBUG] [Thread-635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:47:53.709 [DEBUG] [Thread-635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:47:53.709 [DEBUG] [Thread-635] [transport.py] [_log()] Compression: none
2025-11-25T14:47:53.709 [DEBUG] [Thread-635] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:47:53.764 [DEBUG] [Thread-635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:47:53.765 [DEBUG] [Thread-635] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:47:53.765 [DEBUG] [Thread-635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:47:53.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:47:53.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:47:53.821 [DEBUG] [Thread-635] [transport.py] [_log()] userauth is OK
2025-11-25T14:47:53.821 [DEBUG] [Thread-635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:47:53.822 [DEBUG] [Thread-635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:47:53.822 [DEBUG] [Thread-635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:47:53.822 [DEBUG] [Thread-635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:47:53.841 [INFO] [Thread-635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:47:53.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:47:53.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:47:54.408 [DEBUG] [Thread-637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:47:54.605 [DEBUG] [Thread-635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:47:54.605 [DEBUG] [Thread-635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:47:54.653 [DEBUG] [Thread-635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:47:54.653 [DEBUG] [Thread-635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:47:54.662 [DEBUG] [Thread-635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:47:54.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:47:54.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:47:54.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:47:54.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:47:54.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:47:54.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:47:54.699 [DEBUG] [Thread-635] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:48:09.483 [DEBUG] [Thread-638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:48:09.641 [DEBUG] [Thread-639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:48:24.518 [DEBUG] [Thread-640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:48:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:48:24.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:48:24.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:48:25.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 47, 58), 36.45, 8.05, 0.0, 6.41, 26.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:48:25.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:47:58
2025-11-25T14:48:25.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:48:25.716 [DEBUG] [Thread-641] [transport.py] [_log()] starting thread (client mode): 0x7378f3a0
2025-11-25T14:48:25.716 [DEBUG] [Thread-641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:48:25.732 [DEBUG] [Thread-641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:48:25.733 [INFO] [Thread-641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:48:25.735 [DEBUG] [Thread-641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:48:25.735 [DEBUG] [Thread-641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:48:25.735 [DEBUG] [Thread-641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:48:25.735 [DEBUG] [Thread-641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:48:25.735 [DEBUG] [Thread-641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:48:25.735 [DEBUG] [Thread-641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:48:25.735 [DEBUG] [Thread-641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:48:25.735 [DEBUG] [Thread-641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] client lang: <none>
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] server lang: <none>
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] kex follows: False
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] Compression: none
2025-11-25T14:48:25.736 [DEBUG] [Thread-641] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:48:25.743 [DEBUG] [Thread-641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:48:25.743 [DEBUG] [Thread-641] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:48:25.743 [DEBUG] [Thread-641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:48:25.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:48:25.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:48:25.744 [DEBUG] [Thread-641] [transport.py] [_log()] userauth is OK
2025-11-25T14:48:25.744 [DEBUG] [Thread-641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:48:25.744 [DEBUG] [Thread-641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:48:25.744 [DEBUG] [Thread-641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:48:25.744 [DEBUG] [Thread-641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:48:25.753 [INFO] [Thread-641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:48:25.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:48:26.328 [DEBUG] [Thread-641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:48:26.328 [DEBUG] [Thread-641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:48:26.328 [DEBUG] [Thread-641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:48:26.368 [DEBUG] [Thread-641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:48:26.369 [DEBUG] [Thread-641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:48:26.371 [DEBUG] [Thread-641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:48:26.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:48:26.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:48:26.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:48:26.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:48:26.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:48:26.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:48:26.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:48:26.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:48:26.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:48:26.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.533434 -999.00  +26.70   6.21     13   -3.70 1 1 1 1 1   888    0 29.77 -18.63 ----- 4.0 6.2 317.6 14.9 34.1 -31.0 33.9 -30.7 34.9 -28.2 35.4 -29.7
2025-11-25T14:48:26.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:48:26.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:48:26.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.533434
2025-11-25T14:48:26.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:48:26.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:48:26.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:48:26.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:48:26.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:48:26.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:47:58', tmtdew=36.45, humidity=8.05, cloud=0.0, wind=6.41, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:48:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:48:26.403 [DEBUG] [Thread-641] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:48:26.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:48:26.507 [DEBUG] [Thread-644] [transport.py] [_log()] starting thread (client mode): 0x7378e440
2025-11-25T14:48:26.508 [DEBUG] [Thread-644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:48:26.522 [DEBUG] [Thread-644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:48:26.522 [INFO] [Thread-644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:48:26.530 [DEBUG] [Thread-644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:48:26.530 [DEBUG] [Thread-644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:48:26.530 [DEBUG] [Thread-644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:48:26.531 [DEBUG] [Thread-644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:48:26.531 [DEBUG] [Thread-644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:48:26.531 [DEBUG] [Thread-644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:48:26.531 [DEBUG] [Thread-644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:48:26.531 [DEBUG] [Thread-644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:48:26.531 [DEBUG] [Thread-644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:48:26.531 [DEBUG] [Thread-644] [transport.py] [_log()] client lang: <none>
2025-11-25T14:48:26.531 [DEBUG] [Thread-644] [transport.py] [_log()] server lang: <none>
2025-11-25T14:48:26.532 [DEBUG] [Thread-644] [transport.py] [_log()] kex follows: False
2025-11-25T14:48:26.532 [DEBUG] [Thread-644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:48:26.532 [DEBUG] [Thread-644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:48:26.532 [DEBUG] [Thread-644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:48:26.532 [DEBUG] [Thread-644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:48:26.532 [DEBUG] [Thread-644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:48:26.532 [DEBUG] [Thread-644] [transport.py] [_log()] Compression: none
2025-11-25T14:48:26.533 [DEBUG] [Thread-644] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:48:26.590 [DEBUG] [Thread-644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:48:26.590 [DEBUG] [Thread-644] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:48:26.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:48:26.591 [DEBUG] [Thread-644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:48:26.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:48:26.649 [DEBUG] [Thread-644] [transport.py] [_log()] userauth is OK
2025-11-25T14:48:26.649 [DEBUG] [Thread-644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:48:26.650 [DEBUG] [Thread-644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:48:26.650 [DEBUG] [Thread-644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:48:26.650 [DEBUG] [Thread-644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:48:26.670 [INFO] [Thread-644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:48:26.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:48:26.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:48:27.412 [DEBUG] [Thread-644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:48:27.413 [DEBUG] [Thread-644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:48:27.461 [DEBUG] [Thread-644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:48:27.461 [DEBUG] [Thread-644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:48:27.470 [DEBUG] [Thread-644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:48:27.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:48:27.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:48:27.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:48:27.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:48:27.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:48:27.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:48:27.507 [DEBUG] [Thread-644] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:48:39.557 [DEBUG] [Thread-646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:48:54.625 [DEBUG] [Thread-647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:48:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:48:57.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:48:57.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:48:58.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 48, 30), 36.59, 7.97, 0.0, 6.3, 26.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:48:58.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:48:30
2025-11-25T14:48:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:48:58.512 [DEBUG] [Thread-648] [transport.py] [_log()] starting thread (client mode): 0x7376d870
2025-11-25T14:48:58.512 [DEBUG] [Thread-648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:48:58.526 [DEBUG] [Thread-648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:48:58.526 [INFO] [Thread-648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] client lang: <none>
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] server lang: <none>
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] kex follows: False
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:48:58.527 [DEBUG] [Thread-648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:48:58.528 [DEBUG] [Thread-648] [transport.py] [_log()] Compression: none
2025-11-25T14:48:58.528 [DEBUG] [Thread-648] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:48:58.535 [DEBUG] [Thread-648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:48:58.535 [DEBUG] [Thread-648] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:48:58.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:48:58.535 [DEBUG] [Thread-648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:48:58.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:48:58.536 [DEBUG] [Thread-648] [transport.py] [_log()] userauth is OK
2025-11-25T14:48:58.536 [DEBUG] [Thread-648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:48:58.536 [DEBUG] [Thread-648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:48:58.536 [DEBUG] [Thread-648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:48:58.536 [DEBUG] [Thread-648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:48:58.549 [INFO] [Thread-648] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:48:58.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:48:59.150 [DEBUG] [Thread-648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:48:59.150 [DEBUG] [Thread-648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:48:59.150 [DEBUG] [Thread-648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:48:59.191 [DEBUG] [Thread-648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:48:59.191 [DEBUG] [Thread-648] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:48:59.194 [DEBUG] [Thread-648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:48:59.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:48:59.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:48:59.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:48:59.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:48:59.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:48:59.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:48:59.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.533782 -999.00  +26.60  12.14     12   -4.10 1 1 1 1 1   888    0 29.90 -16.14 ----- 14.6 12.1 285.6 14.0 34.2 -31.1 33.9 -31.3 35.0 -30.5 35.5 -29.7
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.533782
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:48:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:48:30', tmtdew=36.59, humidity=7.97, cloud=0.0, wind=6.3, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:48:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:48:59.205 [DEBUG] [Thread-648] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:48:59.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:48:59.301 [DEBUG] [Thread-651] [transport.py] [_log()] starting thread (client mode): 0x7376fe20
2025-11-25T14:48:59.301 [DEBUG] [Thread-651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:48:59.315 [DEBUG] [Thread-651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:48:59.315 [INFO] [Thread-651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] client lang: <none>
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] server lang: <none>
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] kex follows: False
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] Compression: none
2025-11-25T14:48:59.323 [DEBUG] [Thread-651] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:48:59.379 [DEBUG] [Thread-651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:48:59.380 [DEBUG] [Thread-651] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:48:59.380 [DEBUG] [Thread-651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:48:59.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:48:59.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:48:59.437 [DEBUG] [Thread-651] [transport.py] [_log()] userauth is OK
2025-11-25T14:48:59.437 [DEBUG] [Thread-651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:48:59.437 [DEBUG] [Thread-651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:48:59.437 [DEBUG] [Thread-651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:48:59.437 [DEBUG] [Thread-651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:48:59.454 [INFO] [Thread-651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:48:59.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:48:59.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:49:00.182 [DEBUG] [Thread-651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:49:00.183 [DEBUG] [Thread-651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:49:00.230 [DEBUG] [Thread-651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:49:00.230 [DEBUG] [Thread-651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:49:00.238 [DEBUG] [Thread-651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:49:00.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:49:00.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:49:00.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:49:00.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:49:00.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:49:00.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:49:00.270 [DEBUG] [Thread-651] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:49:09.669 [DEBUG] [Thread-653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:49:10.264 [DEBUG] [Thread-654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:49:24.735 [DEBUG] [Thread-655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:49:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:49:30.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:49:30.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:49:30.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 49, 2), 36.4, 8.07, 29.3, 6.11, 26.32, 0, 0, 0, 0, 0, 0),)
2025-11-25T14:49:30.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:49:02
2025-11-25T14:49:31.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:49:31.237 [DEBUG] [Thread-656] [transport.py] [_log()] starting thread (client mode): 0x7378fcd0
2025-11-25T14:49:31.237 [DEBUG] [Thread-656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:49:31.257 [DEBUG] [Thread-656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:49:31.257 [INFO] [Thread-656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:49:31.260 [DEBUG] [Thread-656] [transport.py] [_log()] client lang: <none>
2025-11-25T14:49:31.261 [DEBUG] [Thread-656] [transport.py] [_log()] server lang: <none>
2025-11-25T14:49:31.261 [DEBUG] [Thread-656] [transport.py] [_log()] kex follows: False
2025-11-25T14:49:31.261 [DEBUG] [Thread-656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:49:31.261 [DEBUG] [Thread-656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:49:31.261 [DEBUG] [Thread-656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:49:31.261 [DEBUG] [Thread-656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:49:31.261 [DEBUG] [Thread-656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:49:31.261 [DEBUG] [Thread-656] [transport.py] [_log()] Compression: none
2025-11-25T14:49:31.261 [DEBUG] [Thread-656] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:49:31.278 [DEBUG] [Thread-656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:49:31.278 [DEBUG] [Thread-656] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:49:31.279 [DEBUG] [Thread-656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:49:31.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:49:31.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:49:31.281 [DEBUG] [Thread-656] [transport.py] [_log()] userauth is OK
2025-11-25T14:49:31.281 [DEBUG] [Thread-656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:49:31.281 [DEBUG] [Thread-656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:49:31.281 [DEBUG] [Thread-656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:49:31.281 [DEBUG] [Thread-656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:49:31.316 [INFO] [Thread-656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:49:31.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:49:31.975 [DEBUG] [Thread-656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:49:31.976 [DEBUG] [Thread-656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:49:31.976 [DEBUG] [Thread-656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:49:32.017 [DEBUG] [Thread-656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:49:32.017 [DEBUG] [Thread-656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:49:32.020 [DEBUG] [Thread-656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:49:32.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:49:32.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:49:32.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:49:32.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:49:32.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:49:32.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:49:32.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:49:32.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:49:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:49:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.534129 -999.00  +26.20   8.34     13   -4.00 1 1 1 1 1   888    0 29.45 -15.99 ----- 10.0 8.3 309.6 16.8 34.1 -30.6 33.9 -31.0 34.8 -28.3 35.4 -29.3
2025-11-25T14:49:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:49:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:49:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.534129
2025-11-25T14:49:32.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:49:32.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:49:32.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:49:32.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:49:32.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:49:32.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:49:02', tmtdew=36.4, humidity=8.07, cloud=29.3, wind=6.11, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:49:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:49:32.048 [DEBUG] [Thread-656] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:49:32.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:49:32.151 [DEBUG] [Thread-659] [transport.py] [_log()] starting thread (client mode): 0x73781900
2025-11-25T14:49:32.151 [DEBUG] [Thread-659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:49:32.165 [DEBUG] [Thread-659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:49:32.166 [INFO] [Thread-659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:49:32.173 [DEBUG] [Thread-659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:49:32.173 [DEBUG] [Thread-659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:49:32.173 [DEBUG] [Thread-659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:49:32.173 [DEBUG] [Thread-659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:49:32.174 [DEBUG] [Thread-659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:49:32.174 [DEBUG] [Thread-659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:49:32.174 [DEBUG] [Thread-659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:49:32.174 [DEBUG] [Thread-659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:49:32.174 [DEBUG] [Thread-659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:49:32.174 [DEBUG] [Thread-659] [transport.py] [_log()] client lang: <none>
2025-11-25T14:49:32.174 [DEBUG] [Thread-659] [transport.py] [_log()] server lang: <none>
2025-11-25T14:49:32.174 [DEBUG] [Thread-659] [transport.py] [_log()] kex follows: False
2025-11-25T14:49:32.174 [DEBUG] [Thread-659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:49:32.175 [DEBUG] [Thread-659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:49:32.175 [DEBUG] [Thread-659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:49:32.175 [DEBUG] [Thread-659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:49:32.175 [DEBUG] [Thread-659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:49:32.175 [DEBUG] [Thread-659] [transport.py] [_log()] Compression: none
2025-11-25T14:49:32.175 [DEBUG] [Thread-659] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:49:32.232 [DEBUG] [Thread-659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:49:32.233 [DEBUG] [Thread-659] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:49:32.234 [DEBUG] [Thread-659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:49:32.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:49:32.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:49:32.291 [DEBUG] [Thread-659] [transport.py] [_log()] userauth is OK
2025-11-25T14:49:32.292 [DEBUG] [Thread-659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:49:32.292 [DEBUG] [Thread-659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:49:32.292 [DEBUG] [Thread-659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:49:32.292 [DEBUG] [Thread-659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:49:32.311 [INFO] [Thread-659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:49:32.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:49:32.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:49:33.071 [DEBUG] [Thread-659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:49:33.071 [DEBUG] [Thread-659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:49:33.120 [DEBUG] [Thread-659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:49:33.121 [DEBUG] [Thread-659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:49:33.132 [DEBUG] [Thread-659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:49:33.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:49:33.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:49:33.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:49:33.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:49:33.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:49:33.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:49:33.170 [DEBUG] [Thread-659] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:49:39.774 [DEBUG] [Thread-661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:49:54.832 [DEBUG] [Thread-662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:50:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:50:03.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:50:03.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:50:03.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 49, 34), 36.43, 8.09, 29.3, 9.35, 26.2, 0, 0, 0, 0, 0, 0),)
2025-11-25T14:50:03.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:49:34
2025-11-25T14:50:03.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:50:04.125 [DEBUG] [Thread-663] [transport.py] [_log()] starting thread (client mode): 0x73783910
2025-11-25T14:50:04.126 [DEBUG] [Thread-663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:50:04.147 [DEBUG] [Thread-663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:50:04.147 [INFO] [Thread-663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] client lang: <none>
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] server lang: <none>
2025-11-25T14:50:04.150 [DEBUG] [Thread-663] [transport.py] [_log()] kex follows: False
2025-11-25T14:50:04.151 [DEBUG] [Thread-663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:50:04.151 [DEBUG] [Thread-663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:50:04.151 [DEBUG] [Thread-663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:50:04.151 [DEBUG] [Thread-663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:50:04.151 [DEBUG] [Thread-663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:50:04.151 [DEBUG] [Thread-663] [transport.py] [_log()] Compression: none
2025-11-25T14:50:04.151 [DEBUG] [Thread-663] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:50:04.162 [DEBUG] [Thread-663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:50:04.162 [DEBUG] [Thread-663] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:50:04.163 [DEBUG] [Thread-663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:50:04.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:50:04.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:50:04.174 [DEBUG] [Thread-663] [transport.py] [_log()] userauth is OK
2025-11-25T14:50:04.174 [DEBUG] [Thread-663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:50:04.174 [DEBUG] [Thread-663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:50:04.174 [DEBUG] [Thread-663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:50:04.174 [DEBUG] [Thread-663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:50:04.193 [INFO] [Thread-663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:50:04.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:50:05.111 [DEBUG] [Thread-663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:50:05.112 [DEBUG] [Thread-663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:50:05.112 [DEBUG] [Thread-663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:50:05.152 [DEBUG] [Thread-663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:50:05.152 [DEBUG] [Thread-663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:50:05.155 [DEBUG] [Thread-663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:50:05.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:50:05.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:50:05.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:50:05.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:50:05.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:50:05.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:50:05.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:50:05.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:50:05.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:50:05.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.534476 -999.00  +26.10   8.07     13   -4.00 1 1 1 1 1   888    0 29.59 -16.76 ----- 9.5 8.1 348.0 16.1 34.1 -30.9 33.8 -30.3 34.9 -28.8 35.4 -34.5
2025-11-25T14:50:05.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:50:05.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:50:05.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.534476
2025-11-25T14:50:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:50:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:50:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:50:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:50:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:50:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:49:34', tmtdew=36.43, humidity=8.09, cloud=29.3, wind=9.35, temperature=26.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:49:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:50:05.182 [DEBUG] [Thread-663] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:50:05.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:50:05.286 [DEBUG] [Thread-666] [transport.py] [_log()] starting thread (client mode): 0x7376c160
2025-11-25T14:50:05.286 [DEBUG] [Thread-666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:50:05.300 [DEBUG] [Thread-666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:50:05.301 [INFO] [Thread-666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:50:05.308 [DEBUG] [Thread-666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:50:05.308 [DEBUG] [Thread-666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:50:05.308 [DEBUG] [Thread-666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:50:05.308 [DEBUG] [Thread-666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:50:05.308 [DEBUG] [Thread-666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:50:05.308 [DEBUG] [Thread-666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:50:05.308 [DEBUG] [Thread-666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:50:05.308 [DEBUG] [Thread-666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:50:05.308 [DEBUG] [Thread-666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] client lang: <none>
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] server lang: <none>
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] kex follows: False
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] Compression: none
2025-11-25T14:50:05.309 [DEBUG] [Thread-666] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:50:05.368 [DEBUG] [Thread-666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:50:05.369 [DEBUG] [Thread-666] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:50:05.370 [DEBUG] [Thread-666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:50:05.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:50:05.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:50:05.435 [DEBUG] [Thread-666] [transport.py] [_log()] userauth is OK
2025-11-25T14:50:05.435 [DEBUG] [Thread-666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:50:05.435 [DEBUG] [Thread-666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:50:05.436 [DEBUG] [Thread-666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:50:05.436 [DEBUG] [Thread-666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:50:05.455 [INFO] [Thread-666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:50:05.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:50:05.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:50:06.212 [DEBUG] [Thread-666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:50:06.212 [DEBUG] [Thread-666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:50:06.260 [DEBUG] [Thread-666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:50:06.260 [DEBUG] [Thread-666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:50:06.269 [DEBUG] [Thread-666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:50:06.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:50:06.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:50:06.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:50:06.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:50:06.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:50:06.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:50:06.306 [DEBUG] [Thread-666] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:50:09.874 [DEBUG] [Thread-668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:50:10.766 [DEBUG] [Thread-669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:50:24.934 [DEBUG] [Thread-670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:50:36.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:50:36.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:50:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:50:36.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 50, 6), 36.46, 8.05, 29.3, 7.66, 26.13, 0, 0, 0, 0, 0, 0),)
2025-11-25T14:50:36.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:50:06
2025-11-25T14:50:37.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:50:37.267 [DEBUG] [Thread-671] [transport.py] [_log()] starting thread (client mode): 0x7378fb80
2025-11-25T14:50:37.267 [DEBUG] [Thread-671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:50:37.285 [DEBUG] [Thread-671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:50:37.285 [INFO] [Thread-671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:50:37.288 [DEBUG] [Thread-671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] client lang: <none>
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] server lang: <none>
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] kex follows: False
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] Compression: none
2025-11-25T14:50:37.289 [DEBUG] [Thread-671] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:50:37.307 [DEBUG] [Thread-671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:50:37.308 [DEBUG] [Thread-671] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:50:37.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:50:37.309 [DEBUG] [Thread-671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:50:37.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:50:37.311 [DEBUG] [Thread-671] [transport.py] [_log()] userauth is OK
2025-11-25T14:50:37.311 [DEBUG] [Thread-671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:50:37.312 [DEBUG] [Thread-671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:50:37.312 [DEBUG] [Thread-671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:50:37.312 [DEBUG] [Thread-671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:50:37.337 [INFO] [Thread-671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:50:37.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:50:37.968 [DEBUG] [Thread-671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:50:37.969 [DEBUG] [Thread-671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:50:37.969 [DEBUG] [Thread-671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:50:38.010 [DEBUG] [Thread-671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:50:38.010 [DEBUG] [Thread-671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:50:38.016 [DEBUG] [Thread-671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:50:38.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:50:38.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:50:38.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:50:38.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:50:38.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:50:38.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:50:38.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:50:38.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:50:38.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:50:38.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.534476 -999.00  +26.10   8.07     13   -4.00 1 1 1 1 1   888    0 29.59 -16.76 ----- 9.5 8.1 348.0 16.1 34.1 -30.9 33.8 -30.3 34.9 -28.8 35.4 -34.5
2025-11-25T14:50:38.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:50:38.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:50:38.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.534476
2025-11-25T14:50:38.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:50:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:50:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:50:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:50:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:50:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:50:06', tmtdew=36.46, humidity=8.05, cloud=29.3, wind=7.66, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:49:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:50:38.044 [DEBUG] [Thread-671] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:50:38.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:50:38.147 [DEBUG] [Thread-674] [transport.py] [_log()] starting thread (client mode): 0x7376c190
2025-11-25T14:50:38.148 [DEBUG] [Thread-674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:50:38.161 [DEBUG] [Thread-674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:50:38.162 [INFO] [Thread-674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:50:38.169 [DEBUG] [Thread-674] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:50:38.169 [DEBUG] [Thread-674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:50:38.170 [DEBUG] [Thread-674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:50:38.170 [DEBUG] [Thread-674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:50:38.170 [DEBUG] [Thread-674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:50:38.170 [DEBUG] [Thread-674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:50:38.170 [DEBUG] [Thread-674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:50:38.170 [DEBUG] [Thread-674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:50:38.170 [DEBUG] [Thread-674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:50:38.170 [DEBUG] [Thread-674] [transport.py] [_log()] client lang: <none>
2025-11-25T14:50:38.170 [DEBUG] [Thread-674] [transport.py] [_log()] server lang: <none>
2025-11-25T14:50:38.171 [DEBUG] [Thread-674] [transport.py] [_log()] kex follows: False
2025-11-25T14:50:38.171 [DEBUG] [Thread-674] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:50:38.171 [DEBUG] [Thread-674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:50:38.171 [DEBUG] [Thread-674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:50:38.171 [DEBUG] [Thread-674] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:50:38.171 [DEBUG] [Thread-674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:50:38.171 [DEBUG] [Thread-674] [transport.py] [_log()] Compression: none
2025-11-25T14:50:38.172 [DEBUG] [Thread-674] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:50:38.229 [DEBUG] [Thread-674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:50:38.229 [DEBUG] [Thread-674] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:50:38.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:50:38.231 [DEBUG] [Thread-674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:50:38.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:50:38.286 [DEBUG] [Thread-674] [transport.py] [_log()] userauth is OK
2025-11-25T14:50:38.286 [DEBUG] [Thread-674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:50:38.286 [DEBUG] [Thread-674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:50:38.286 [DEBUG] [Thread-674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:50:38.287 [DEBUG] [Thread-674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:50:38.307 [INFO] [Thread-674] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:50:38.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:50:38.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:50:39.043 [DEBUG] [Thread-674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:50:39.043 [DEBUG] [Thread-674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:50:39.090 [DEBUG] [Thread-674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:50:39.090 [DEBUG] [Thread-674] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:50:39.099 [DEBUG] [Thread-674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:50:39.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:50:39.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:50:39.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:50:39.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:50:39.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:50:39.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:50:39.130 [DEBUG] [Thread-674] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:50:39.977 [DEBUG] [Thread-676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:50:55.029 [DEBUG] [Thread-677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:51:09.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:51:09.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:51:09.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:51:09.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 50, 38), 36.47, 8.12, 29.3, 11.72, 26.12, 0, 0, 0, 0, 0, 0),)
2025-11-25T14:51:09.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:50:38
2025-11-25T14:51:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:51:10.071 [DEBUG] [Thread-678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:51:10.083 [DEBUG] [Thread-679] [transport.py] [_log()] starting thread (client mode): 0x7374e530
2025-11-25T14:51:10.084 [DEBUG] [Thread-679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:51:10.103 [DEBUG] [Thread-679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:51:10.103 [INFO] [Thread-679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:51:10.106 [DEBUG] [Thread-679] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] client lang: <none>
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] server lang: <none>
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] kex follows: False
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:51:10.107 [DEBUG] [Thread-679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:51:10.108 [DEBUG] [Thread-679] [transport.py] [_log()] Compression: none
2025-11-25T14:51:10.108 [DEBUG] [Thread-679] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:51:10.127 [DEBUG] [Thread-679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:51:10.128 [DEBUG] [Thread-679] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:51:10.128 [DEBUG] [Thread-679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:51:10.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:51:10.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:51:10.130 [DEBUG] [Thread-679] [transport.py] [_log()] userauth is OK
2025-11-25T14:51:10.130 [DEBUG] [Thread-679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:51:10.130 [DEBUG] [Thread-679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:51:10.130 [DEBUG] [Thread-679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:51:10.130 [DEBUG] [Thread-679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:51:10.154 [INFO] [Thread-679] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:51:10.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:51:10.968 [DEBUG] [Thread-679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:51:10.968 [DEBUG] [Thread-679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:51:10.968 [DEBUG] [Thread-679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:51:11.009 [DEBUG] [Thread-679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:51:11.009 [DEBUG] [Thread-679] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:51:11.011 [DEBUG] [Thread-679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:51:11.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:51:11.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:51:11.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:51:11.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:51:11.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:51:11.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:51:11.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:51:11.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:51:11.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:51:11.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.534823 -999.00  +26.10  15.83     13   -4.10 1 1 1 1 1   888    0 29.66 -16.11 ----- 14.7 15.8 288.6 17.1 34.3 -30.3 33.9 -30.9 34.9 -29.7 35.5 -29.5
2025-11-25T14:51:11.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:51:11.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:51:11.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.534823
2025-11-25T14:51:11.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:51:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:51:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:51:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:51:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:51:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:50:38', tmtdew=36.47, humidity=8.12, cloud=29.3, wind=11.72, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:50:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:51:11.032 [DEBUG] [Thread-679] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:51:11.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:51:11.149 [DEBUG] [Thread-682] [transport.py] [_log()] starting thread (client mode): 0x7378e4d0
2025-11-25T14:51:11.149 [DEBUG] [Thread-682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:51:11.168 [DEBUG] [Thread-682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:51:11.168 [INFO] [Thread-682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] client lang: <none>
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] server lang: <none>
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] kex follows: False
2025-11-25T14:51:11.175 [DEBUG] [Thread-682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:51:11.176 [DEBUG] [Thread-682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:51:11.176 [DEBUG] [Thread-682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:51:11.176 [DEBUG] [Thread-682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:51:11.176 [DEBUG] [Thread-682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:51:11.176 [DEBUG] [Thread-682] [transport.py] [_log()] Compression: none
2025-11-25T14:51:11.176 [DEBUG] [Thread-682] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:51:11.230 [DEBUG] [Thread-682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:51:11.230 [DEBUG] [Thread-682] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:51:11.230 [DEBUG] [Thread-682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:51:11.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:51:11.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:51:11.294 [DEBUG] [Thread-682] [transport.py] [_log()] userauth is OK
2025-11-25T14:51:11.295 [DEBUG] [Thread-682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:51:11.295 [DEBUG] [Thread-682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:51:11.295 [DEBUG] [Thread-682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:51:11.295 [DEBUG] [Thread-682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:51:11.296 [DEBUG] [Thread-684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:51:11.310 [INFO] [Thread-682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:51:11.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:51:11.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:51:12.092 [DEBUG] [Thread-682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:51:12.092 [DEBUG] [Thread-682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:51:12.140 [DEBUG] [Thread-682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:51:12.140 [DEBUG] [Thread-682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:51:12.148 [DEBUG] [Thread-682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:51:12.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:51:12.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:51:12.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:51:12.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:51:12.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:51:12.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:51:12.179 [DEBUG] [Thread-682] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:51:25.113 [DEBUG] [Thread-685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:51:40.180 [DEBUG] [Thread-686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:51:42.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:51:42.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:51:42.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:51:42.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 51, 10), 36.56, 8.05, 29.3, 9.92, 26.07, 0, 0, 0, 0, 0, 0),)
2025-11-25T14:51:42.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:51:10
2025-11-25T14:51:42.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:51:43.156 [DEBUG] [Thread-687] [transport.py] [_log()] starting thread (client mode): 0x761db610
2025-11-25T14:51:43.156 [DEBUG] [Thread-687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:51:43.176 [DEBUG] [Thread-687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:51:43.177 [INFO] [Thread-687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:51:43.179 [DEBUG] [Thread-687] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:51:43.179 [DEBUG] [Thread-687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] client lang: <none>
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] server lang: <none>
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] kex follows: False
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] Compression: none
2025-11-25T14:51:43.180 [DEBUG] [Thread-687] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:51:43.198 [DEBUG] [Thread-687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:51:43.199 [DEBUG] [Thread-687] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:51:43.199 [DEBUG] [Thread-687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:51:43.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:51:43.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:51:43.201 [DEBUG] [Thread-687] [transport.py] [_log()] userauth is OK
2025-11-25T14:51:43.202 [DEBUG] [Thread-687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:51:43.202 [DEBUG] [Thread-687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:51:43.202 [DEBUG] [Thread-687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:51:43.202 [DEBUG] [Thread-687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:51:43.220 [INFO] [Thread-687] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:51:43.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:51:43.850 [DEBUG] [Thread-687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:51:43.850 [DEBUG] [Thread-687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:51:43.850 [DEBUG] [Thread-687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:51:43.890 [DEBUG] [Thread-687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:51:43.891 [DEBUG] [Thread-687] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:51:43.894 [DEBUG] [Thread-687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:51:43.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:51:43.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:51:43.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:51:43.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:51:43.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:51:43.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:51:43.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:51:43.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:51:43.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:51:43.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.535518 -999.00  +25.80   6.49     13   -4.10 1 1 1 1 1   888    0 29.88 -16.64 ----- 7.1 6.5 284.4 17.0 34.0 -30.7 33.9 -30.4 34.5 -28.1 35.1 -30.6
2025-11-25T14:51:43.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:51:43.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:51:43.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.535518
2025-11-25T14:51:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:51:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:51:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:51:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:51:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:51:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:51:10', tmtdew=36.56, humidity=8.05, cloud=29.3, wind=9.92, temperature=26.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:51:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:51:43.918 [DEBUG] [Thread-687] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:51:44.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:51:44.023 [DEBUG] [Thread-690] [transport.py] [_log()] starting thread (client mode): 0x7378cd60
2025-11-25T14:51:44.023 [DEBUG] [Thread-690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:51:44.039 [DEBUG] [Thread-690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:51:44.040 [INFO] [Thread-690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] client lang: <none>
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] server lang: <none>
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] kex follows: False
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] Compression: none
2025-11-25T14:51:44.047 [DEBUG] [Thread-690] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:51:44.104 [DEBUG] [Thread-690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:51:44.104 [DEBUG] [Thread-690] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:51:44.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:51:44.105 [DEBUG] [Thread-690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:51:44.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:51:44.162 [DEBUG] [Thread-690] [transport.py] [_log()] userauth is OK
2025-11-25T14:51:44.162 [DEBUG] [Thread-690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:51:44.162 [DEBUG] [Thread-690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:51:44.162 [DEBUG] [Thread-690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:51:44.162 [DEBUG] [Thread-690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:51:44.175 [INFO] [Thread-690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:51:44.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:51:44.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:51:44.913 [DEBUG] [Thread-690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:51:44.913 [DEBUG] [Thread-690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:51:44.960 [DEBUG] [Thread-690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:51:44.960 [DEBUG] [Thread-690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:51:44.969 [DEBUG] [Thread-690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:51:44.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:51:44.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:51:44.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:51:44.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:51:44.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:51:44.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:51:45.000 [DEBUG] [Thread-690] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:51:55.224 [DEBUG] [Thread-692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:52:10.296 [DEBUG] [Thread-693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:52:12.028 [DEBUG] [Thread-694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:52:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:52:14.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:52:14.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:52:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 51, 42), 36.28, 8.07, 29.3, 7.2, 25.93, 0, 0, 0, 0, 0, 0),)
2025-11-25T14:52:15.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:51:42
2025-11-25T14:52:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:52:15.964 [DEBUG] [Thread-695] [transport.py] [_log()] starting thread (client mode): 0x7376fac0
2025-11-25T14:52:15.964 [DEBUG] [Thread-695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:52:15.984 [DEBUG] [Thread-695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:52:15.984 [INFO] [Thread-695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:52:15.987 [DEBUG] [Thread-695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:52:15.987 [DEBUG] [Thread-695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] client lang: <none>
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] server lang: <none>
2025-11-25T14:52:15.988 [DEBUG] [Thread-695] [transport.py] [_log()] kex follows: False
2025-11-25T14:52:15.989 [DEBUG] [Thread-695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:52:15.989 [DEBUG] [Thread-695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:52:15.989 [DEBUG] [Thread-695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:52:15.989 [DEBUG] [Thread-695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:52:15.989 [DEBUG] [Thread-695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:52:15.989 [DEBUG] [Thread-695] [transport.py] [_log()] Compression: none
2025-11-25T14:52:15.989 [DEBUG] [Thread-695] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:52:16.004 [DEBUG] [Thread-695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:52:16.004 [DEBUG] [Thread-695] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:52:16.005 [DEBUG] [Thread-695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:52:16.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:52:16.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:52:16.007 [DEBUG] [Thread-695] [transport.py] [_log()] userauth is OK
2025-11-25T14:52:16.007 [DEBUG] [Thread-695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:52:16.007 [DEBUG] [Thread-695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:52:16.008 [DEBUG] [Thread-695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:52:16.008 [DEBUG] [Thread-695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:52:16.025 [INFO] [Thread-695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:52:16.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:52:16.817 [DEBUG] [Thread-695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:52:16.817 [DEBUG] [Thread-695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:52:16.817 [DEBUG] [Thread-695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:52:16.858 [DEBUG] [Thread-695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:52:16.858 [DEBUG] [Thread-695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:52:16.860 [DEBUG] [Thread-695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:52:16.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:52:16.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:52:16.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:52:16.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:52:16.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:52:16.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:52:16.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.535865 -999.00  +26.00   5.90     13   -4.10 1 1 1 1 1   888    0 29.37 -15.84 ----- 7.9 5.9 235.4 11.6 34.1 -30.9 33.9 -30.8 34.6 -31.6 35.2 -30.9
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.535865
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:52:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:51:42', tmtdew=36.28, humidity=8.07, cloud=29.3, wind=7.2, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:51:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:52:16.878 [DEBUG] [Thread-695] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:52:16.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:52:16.977 [DEBUG] [Thread-698] [transport.py] [_log()] starting thread (client mode): 0x7376d840
2025-11-25T14:52:16.977 [DEBUG] [Thread-698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:52:16.992 [DEBUG] [Thread-698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:52:16.992 [INFO] [Thread-698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:52:16.999 [DEBUG] [Thread-698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:52:16.999 [DEBUG] [Thread-698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:52:16.999 [DEBUG] [Thread-698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:52:16.999 [DEBUG] [Thread-698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:52:16.999 [DEBUG] [Thread-698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:52:16.999 [DEBUG] [Thread-698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:52:16.999 [DEBUG] [Thread-698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] client lang: <none>
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] server lang: <none>
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] kex follows: False
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] Compression: none
2025-11-25T14:52:17.000 [DEBUG] [Thread-698] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:52:17.055 [DEBUG] [Thread-698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:52:17.055 [DEBUG] [Thread-698] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:52:17.055 [DEBUG] [Thread-698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:52:17.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:52:17.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:52:17.112 [DEBUG] [Thread-698] [transport.py] [_log()] userauth is OK
2025-11-25T14:52:17.112 [DEBUG] [Thread-698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:52:17.113 [DEBUG] [Thread-698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:52:17.113 [DEBUG] [Thread-698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:52:17.113 [DEBUG] [Thread-698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:52:17.127 [INFO] [Thread-698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:52:17.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:52:17.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:52:17.878 [DEBUG] [Thread-698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:52:17.879 [DEBUG] [Thread-698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:52:17.927 [DEBUG] [Thread-698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:52:17.927 [DEBUG] [Thread-698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:52:17.936 [DEBUG] [Thread-698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:52:17.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:52:17.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:52:17.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:52:17.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:52:17.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:52:17.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:52:17.971 [DEBUG] [Thread-698] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:52:25.341 [DEBUG] [Thread-700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:52:40.416 [DEBUG] [Thread-701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:52:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:52:47.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:52:47.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:52:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 52, 15), 36.25, 8.09, 29.3, 6.97, 25.95, 0, 0, 0, 0, 0, 0),)
2025-11-25T14:52:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:52:15
2025-11-25T14:52:48.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:52:49.022 [DEBUG] [Thread-702] [transport.py] [_log()] starting thread (client mode): 0x7374d060
2025-11-25T14:52:49.022 [DEBUG] [Thread-702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:52:49.043 [DEBUG] [Thread-702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:52:49.043 [INFO] [Thread-702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] client lang: <none>
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] server lang: <none>
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] kex follows: False
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] Compression: none
2025-11-25T14:52:49.046 [DEBUG] [Thread-702] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:52:49.062 [DEBUG] [Thread-702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:52:49.062 [DEBUG] [Thread-702] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:52:49.062 [DEBUG] [Thread-702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:52:49.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:52:49.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:52:49.063 [DEBUG] [Thread-702] [transport.py] [_log()] userauth is OK
2025-11-25T14:52:49.063 [DEBUG] [Thread-702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:52:49.063 [DEBUG] [Thread-702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:52:49.063 [DEBUG] [Thread-702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:52:49.063 [DEBUG] [Thread-702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:52:49.093 [INFO] [Thread-702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:52:49.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:52:49.695 [DEBUG] [Thread-702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:52:49.696 [DEBUG] [Thread-702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:52:49.696 [DEBUG] [Thread-702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:52:49.736 [DEBUG] [Thread-702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:52:49.736 [DEBUG] [Thread-702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:52:49.739 [DEBUG] [Thread-702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:52:49.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:52:49.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:52:49.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:52:49.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:52:49.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:52:49.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:52:49.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:52:49.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.536212 -999.00  +26.20  11.09     13   -4.00 1 1 1 1 1   888    0 29.64 -14.55 ----- 7.0 11.1 261.8 12.1 34.1 -32.0 33.9 -30.7 34.6 -31.9 35.2 -31.2
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.536212
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:52:15', tmtdew=36.25, humidity=8.09, cloud=29.3, wind=6.97, temperature=25.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:52:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:52:49.758 [DEBUG] [Thread-702] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:52:49.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:52:49.851 [DEBUG] [Thread-705] [transport.py] [_log()] starting thread (client mode): 0x7374c7c0
2025-11-25T14:52:49.851 [DEBUG] [Thread-705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:52:49.865 [DEBUG] [Thread-705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:52:49.865 [INFO] [Thread-705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] client lang: <none>
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] server lang: <none>
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] kex follows: False
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] Compression: none
2025-11-25T14:52:49.873 [DEBUG] [Thread-705] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:52:49.928 [DEBUG] [Thread-705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:52:49.928 [DEBUG] [Thread-705] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:52:49.928 [DEBUG] [Thread-705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:52:49.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:52:49.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:52:49.986 [DEBUG] [Thread-705] [transport.py] [_log()] userauth is OK
2025-11-25T14:52:49.986 [DEBUG] [Thread-705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:52:49.986 [DEBUG] [Thread-705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:52:49.986 [DEBUG] [Thread-705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:52:49.986 [DEBUG] [Thread-705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:52:50.009 [INFO] [Thread-705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:52:50.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:52:50.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:52:50.796 [DEBUG] [Thread-705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:52:50.796 [DEBUG] [Thread-705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:52:50.844 [DEBUG] [Thread-705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:52:50.844 [DEBUG] [Thread-705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:52:50.853 [DEBUG] [Thread-705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:52:50.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:52:50.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:52:50.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:52:50.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:52:50.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:52:50.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:52:50.889 [DEBUG] [Thread-705] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:52:55.454 [DEBUG] [Thread-707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:53:10.522 [DEBUG] [Thread-708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:53:12.761 [DEBUG] [Thread-709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:53:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:53:20.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:53:20.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:53:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 52, 47), 36.36, 8.05, 29.3, 4.36, 26.0, 0, 0, 0, 0, 0, 0),)
2025-11-25T14:53:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:52:47
2025-11-25T14:53:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:53:21.948 [DEBUG] [Thread-710] [transport.py] [_log()] starting thread (client mode): 0x7374c1c0
2025-11-25T14:53:21.948 [DEBUG] [Thread-710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:53:21.968 [DEBUG] [Thread-710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:53:21.969 [INFO] [Thread-710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] client lang: <none>
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] server lang: <none>
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] kex follows: False
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] Compression: none
2025-11-25T14:53:21.972 [DEBUG] [Thread-710] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:53:21.988 [DEBUG] [Thread-710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:53:21.988 [DEBUG] [Thread-710] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:53:21.989 [DEBUG] [Thread-710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:53:21.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:53:21.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:53:21.990 [DEBUG] [Thread-710] [transport.py] [_log()] userauth is OK
2025-11-25T14:53:21.990 [DEBUG] [Thread-710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:53:21.990 [DEBUG] [Thread-710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:53:21.990 [DEBUG] [Thread-710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:53:21.990 [DEBUG] [Thread-710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:53:22.003 [INFO] [Thread-710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:53:22.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:53:22.792 [DEBUG] [Thread-710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:53:22.792 [DEBUG] [Thread-710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:53:22.792 [DEBUG] [Thread-710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:53:22.833 [DEBUG] [Thread-710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:53:22.833 [DEBUG] [Thread-710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:53:22.836 [DEBUG] [Thread-710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:53:22.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:53:22.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:53:22.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:53:22.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:53:22.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:53:22.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:53:22.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.536559 -999.00  +26.20   6.65     13   -4.10 1 1 1 1 1   888    0 29.51 -13.28 ----- 5.2 6.7 219.8 8.7 34.1 -31.8 33.9 -29.9 34.6 -28.2 35.1 -30.2
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.536559
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:53:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:52:47', tmtdew=36.36, humidity=8.05, cloud=29.3, wind=4.36, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:52:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:53:22.857 [DEBUG] [Thread-710] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:53:22.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:53:22.956 [DEBUG] [Thread-713] [transport.py] [_log()] starting thread (client mode): 0x7374ef80
2025-11-25T14:53:22.956 [DEBUG] [Thread-713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:53:22.973 [DEBUG] [Thread-713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:53:22.973 [INFO] [Thread-713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] client lang: <none>
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] server lang: <none>
2025-11-25T14:53:22.980 [DEBUG] [Thread-713] [transport.py] [_log()] kex follows: False
2025-11-25T14:53:22.981 [DEBUG] [Thread-713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:53:22.981 [DEBUG] [Thread-713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:53:22.981 [DEBUG] [Thread-713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:53:22.981 [DEBUG] [Thread-713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:53:22.981 [DEBUG] [Thread-713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:53:22.981 [DEBUG] [Thread-713] [transport.py] [_log()] Compression: none
2025-11-25T14:53:22.981 [DEBUG] [Thread-713] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:53:23.035 [DEBUG] [Thread-713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:53:23.035 [DEBUG] [Thread-713] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:53:23.035 [DEBUG] [Thread-713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:53:23.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:53:23.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:53:23.092 [DEBUG] [Thread-713] [transport.py] [_log()] userauth is OK
2025-11-25T14:53:23.092 [DEBUG] [Thread-713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:53:23.092 [DEBUG] [Thread-713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:53:23.092 [DEBUG] [Thread-713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:53:23.092 [DEBUG] [Thread-713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:53:23.106 [INFO] [Thread-713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:53:23.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:53:23.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:53:23.874 [DEBUG] [Thread-713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:53:23.874 [DEBUG] [Thread-713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:53:23.923 [DEBUG] [Thread-713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:53:23.923 [DEBUG] [Thread-713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:53:23.931 [DEBUG] [Thread-713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:53:23.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:53:23.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:53:23.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:53:23.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:53:23.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:53:23.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:53:23.964 [DEBUG] [Thread-713] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:53:25.563 [DEBUG] [Thread-715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:53:40.630 [DEBUG] [Thread-716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:53:53.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:53:53.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:53:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:53:54.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 53, 19), 36.19, 8.17, 29.3, 5.54, 26.03, 0, 0, 0, 0, 0, 0),)
2025-11-25T14:53:54.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:53:19
2025-11-25T14:53:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:53:54.928 [DEBUG] [Thread-717] [transport.py] [_log()] starting thread (client mode): 0x737836d0
2025-11-25T14:53:54.928 [DEBUG] [Thread-717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:53:54.949 [DEBUG] [Thread-717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:53:54.949 [INFO] [Thread-717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:53:54.953 [DEBUG] [Thread-717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:53:54.953 [DEBUG] [Thread-717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:53:54.953 [DEBUG] [Thread-717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:53:54.953 [DEBUG] [Thread-717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:53:54.954 [DEBUG] [Thread-717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:53:54.954 [DEBUG] [Thread-717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:53:54.954 [DEBUG] [Thread-717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:53:54.954 [DEBUG] [Thread-717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:53:54.954 [DEBUG] [Thread-717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:53:54.954 [DEBUG] [Thread-717] [transport.py] [_log()] client lang: <none>
2025-11-25T14:53:54.954 [DEBUG] [Thread-717] [transport.py] [_log()] server lang: <none>
2025-11-25T14:53:54.954 [DEBUG] [Thread-717] [transport.py] [_log()] kex follows: False
2025-11-25T14:53:54.954 [DEBUG] [Thread-717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:53:54.955 [DEBUG] [Thread-717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:53:54.955 [DEBUG] [Thread-717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:53:54.955 [DEBUG] [Thread-717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:53:54.955 [DEBUG] [Thread-717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:53:54.955 [DEBUG] [Thread-717] [transport.py] [_log()] Compression: none
2025-11-25T14:53:54.955 [DEBUG] [Thread-717] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:53:54.972 [DEBUG] [Thread-717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:53:54.973 [DEBUG] [Thread-717] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:53:54.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:53:54.974 [DEBUG] [Thread-717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:53:54.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:53:54.976 [DEBUG] [Thread-717] [transport.py] [_log()] userauth is OK
2025-11-25T14:53:54.977 [DEBUG] [Thread-717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:53:54.977 [DEBUG] [Thread-717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:53:54.977 [DEBUG] [Thread-717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:53:54.977 [DEBUG] [Thread-717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:53:55.002 [INFO] [Thread-717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:53:55.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:53:55.634 [DEBUG] [Thread-717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:53:55.634 [DEBUG] [Thread-717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:53:55.634 [DEBUG] [Thread-717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:53:55.673 [DEBUG] [Thread-719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:53:55.675 [DEBUG] [Thread-717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:53:55.675 [DEBUG] [Thread-717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:53:55.677 [DEBUG] [Thread-717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:53:55.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:53:55.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:53:55.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:53:55.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:53:55.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:53:55.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:53:55.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.536907 -999.00  +26.40   4.36     13   -3.80 1 1 1 1 1   888    0 29.85 -9.40 ----- 3.7 4.4 148.8 5.5 34.2 -30.6 33.8 -30.1 34.8 -28.3 35.4 -30.3
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.536907
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:53:55.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:53:19', tmtdew=36.19, humidity=8.17, cloud=29.3, wind=5.54, temperature=26.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:53:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:53:55.694 [DEBUG] [Thread-717] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:53:55.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:53:55.788 [DEBUG] [Thread-721] [transport.py] [_log()] starting thread (client mode): 0x737c4a00
2025-11-25T14:53:55.789 [DEBUG] [Thread-721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:53:55.806 [DEBUG] [Thread-721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:53:55.806 [INFO] [Thread-721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:53:55.813 [DEBUG] [Thread-721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:53:55.813 [DEBUG] [Thread-721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] client lang: <none>
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] server lang: <none>
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] kex follows: False
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] Compression: none
2025-11-25T14:53:55.814 [DEBUG] [Thread-721] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:53:55.870 [DEBUG] [Thread-721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:53:55.871 [DEBUG] [Thread-721] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:53:55.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:53:55.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:53:55.871 [DEBUG] [Thread-721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:53:55.927 [DEBUG] [Thread-721] [transport.py] [_log()] userauth is OK
2025-11-25T14:53:55.927 [DEBUG] [Thread-721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:53:55.927 [DEBUG] [Thread-721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:53:55.927 [DEBUG] [Thread-721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:53:55.927 [DEBUG] [Thread-721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:53:55.943 [INFO] [Thread-721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:53:55.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:53:55.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:53:56.723 [DEBUG] [Thread-721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:53:56.723 [DEBUG] [Thread-721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:53:56.771 [DEBUG] [Thread-721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:53:56.771 [DEBUG] [Thread-721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:53:56.779 [DEBUG] [Thread-721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:53:56.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:53:56.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:53:56.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:53:56.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:53:56.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:53:56.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:53:56.812 [DEBUG] [Thread-721] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:54:10.715 [DEBUG] [Thread-723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:54:13.288 [DEBUG] [Thread-724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:54:25.779 [DEBUG] [Thread-725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:54:26.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:54:26.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:54:26.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:54:27.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 54, 23), 36.47, 8.09, 0.0, 7.24, 26.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:54:27.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:54:23
2025-11-25T14:54:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:54:27.776 [DEBUG] [Thread-726] [transport.py] [_log()] starting thread (client mode): 0x737c7f10
2025-11-25T14:54:27.776 [DEBUG] [Thread-726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:54:27.797 [DEBUG] [Thread-726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:54:27.797 [INFO] [Thread-726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:54:27.800 [DEBUG] [Thread-726] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:54:27.800 [DEBUG] [Thread-726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:54:27.800 [DEBUG] [Thread-726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:54:27.800 [DEBUG] [Thread-726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:54:27.801 [DEBUG] [Thread-726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:54:27.801 [DEBUG] [Thread-726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:54:27.801 [DEBUG] [Thread-726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:54:27.801 [DEBUG] [Thread-726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:54:27.801 [DEBUG] [Thread-726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:54:27.801 [DEBUG] [Thread-726] [transport.py] [_log()] client lang: <none>
2025-11-25T14:54:27.801 [DEBUG] [Thread-726] [transport.py] [_log()] server lang: <none>
2025-11-25T14:54:27.802 [DEBUG] [Thread-726] [transport.py] [_log()] kex follows: False
2025-11-25T14:54:27.802 [DEBUG] [Thread-726] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:54:27.802 [DEBUG] [Thread-726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:54:27.802 [DEBUG] [Thread-726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:54:27.802 [DEBUG] [Thread-726] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:54:27.802 [DEBUG] [Thread-726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:54:27.802 [DEBUG] [Thread-726] [transport.py] [_log()] Compression: none
2025-11-25T14:54:27.802 [DEBUG] [Thread-726] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:54:27.821 [DEBUG] [Thread-726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:54:27.821 [DEBUG] [Thread-726] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:54:27.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:54:27.822 [DEBUG] [Thread-726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:54:27.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:54:27.824 [DEBUG] [Thread-726] [transport.py] [_log()] userauth is OK
2025-11-25T14:54:27.824 [DEBUG] [Thread-726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:54:27.824 [DEBUG] [Thread-726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:54:27.824 [DEBUG] [Thread-726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:54:27.824 [DEBUG] [Thread-726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:54:27.849 [INFO] [Thread-726] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:54:27.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:54:28.646 [DEBUG] [Thread-726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:54:28.646 [DEBUG] [Thread-726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:54:28.646 [DEBUG] [Thread-726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:54:28.686 [DEBUG] [Thread-726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:54:28.686 [DEBUG] [Thread-726] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:54:28.689 [DEBUG] [Thread-726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:54:28.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:54:28.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:54:28.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:54:28.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:54:28.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:54:28.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:54:28.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:54:28.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:54:28.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:54:28.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.537254 -999.00  +26.70   2.90     13   -3.80 1 1 1 1 1   888    0 30.15 -3.88 ----- 3.1 2.9 51.9 5.3 34.4 -29.7 33.9 -30.1 35.0 -27.9 35.5 -29.7
2025-11-25T14:54:28.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:54:28.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:54:28.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.537254
2025-11-25T14:54:28.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:54:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:54:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:54:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:54:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:54:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:54:23', tmtdew=36.47, humidity=8.09, cloud=0.0, wind=7.24, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:53:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:54:28.714 [DEBUG] [Thread-726] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:54:28.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:54:28.822 [DEBUG] [Thread-729] [transport.py] [_log()] starting thread (client mode): 0x737c4b80
2025-11-25T14:54:28.822 [DEBUG] [Thread-729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:54:28.837 [DEBUG] [Thread-729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:54:28.837 [INFO] [Thread-729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:54:28.845 [DEBUG] [Thread-729] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:54:28.845 [DEBUG] [Thread-729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:54:28.845 [DEBUG] [Thread-729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:54:28.845 [DEBUG] [Thread-729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:54:28.845 [DEBUG] [Thread-729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] client lang: <none>
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] server lang: <none>
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] kex follows: False
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] Compression: none
2025-11-25T14:54:28.846 [DEBUG] [Thread-729] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:54:28.906 [DEBUG] [Thread-729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:54:28.907 [DEBUG] [Thread-729] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:54:28.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:54:28.908 [DEBUG] [Thread-729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:54:28.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:54:28.962 [DEBUG] [Thread-729] [transport.py] [_log()] userauth is OK
2025-11-25T14:54:28.962 [DEBUG] [Thread-729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:54:28.962 [DEBUG] [Thread-729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:54:28.962 [DEBUG] [Thread-729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:54:28.963 [DEBUG] [Thread-729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:54:28.981 [INFO] [Thread-729] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:54:28.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:54:28.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:54:29.774 [DEBUG] [Thread-729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:54:29.774 [DEBUG] [Thread-729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:54:29.822 [DEBUG] [Thread-729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:54:29.822 [DEBUG] [Thread-729] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:54:29.831 [DEBUG] [Thread-729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:54:29.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:54:29.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:54:29.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:54:29.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:54:29.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:54:29.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:54:29.865 [DEBUG] [Thread-729] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:54:40.823 [DEBUG] [Thread-731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:54:55.888 [DEBUG] [Thread-732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:54:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:54:59.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:54:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:55:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 54, 55), 36.44, 8.19, 0.0, 15.3, 26.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:55:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:54:55
2025-11-25T14:55:00.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:55:00.819 [DEBUG] [Thread-733] [transport.py] [_log()] starting thread (client mode): 0x7378e080
2025-11-25T14:55:00.819 [DEBUG] [Thread-733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:55:00.839 [DEBUG] [Thread-733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:55:00.839 [INFO] [Thread-733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] client lang: <none>
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] server lang: <none>
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] kex follows: False
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:55:00.843 [DEBUG] [Thread-733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:55:00.844 [DEBUG] [Thread-733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:55:00.844 [DEBUG] [Thread-733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:55:00.844 [DEBUG] [Thread-733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:55:00.844 [DEBUG] [Thread-733] [transport.py] [_log()] Compression: none
2025-11-25T14:55:00.844 [DEBUG] [Thread-733] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:55:00.861 [DEBUG] [Thread-733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:55:00.862 [DEBUG] [Thread-733] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:55:00.862 [DEBUG] [Thread-733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:55:00.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:55:00.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:55:00.865 [DEBUG] [Thread-733] [transport.py] [_log()] userauth is OK
2025-11-25T14:55:00.865 [DEBUG] [Thread-733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:55:00.865 [DEBUG] [Thread-733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:55:00.865 [DEBUG] [Thread-733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:55:00.865 [DEBUG] [Thread-733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:55:00.901 [INFO] [Thread-733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:55:00.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:55:01.556 [DEBUG] [Thread-733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:55:01.557 [DEBUG] [Thread-733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:55:01.557 [DEBUG] [Thread-733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:55:01.597 [DEBUG] [Thread-733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:55:01.598 [DEBUG] [Thread-733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:55:01.600 [DEBUG] [Thread-733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:55:01.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:55:01.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:55:01.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:55:01.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:55:01.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:55:01.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:55:01.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:55:01.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:55:01.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:55:01.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.537601 -999.00  +26.90   5.17     13   -3.80 1 1 1 1 1   888    0 30.06 2.92 ----- 5.4 5.2 139.0 5.5 34.4 -30.3 34.0 -30.0 35.0 -28.8 35.7 -30.7
2025-11-25T14:55:01.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:55:01.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:55:01.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.537601
2025-11-25T14:55:01.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:55:01.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:55:01.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:55:01.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:55:01.622 [DEBUG] [Thread-733] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:55:01.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:55:01.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:54:55', tmtdew=36.44, humidity=8.19, cloud=0.0, wind=15.3, temperature=26.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:54:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:55:01.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:55:01.725 [DEBUG] [Thread-736] [transport.py] [_log()] starting thread (client mode): 0x737c7e20
2025-11-25T14:55:01.725 [DEBUG] [Thread-736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:55:01.739 [DEBUG] [Thread-736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:55:01.740 [INFO] [Thread-736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:55:01.747 [DEBUG] [Thread-736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:55:01.747 [DEBUG] [Thread-736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:55:01.747 [DEBUG] [Thread-736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] client lang: <none>
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] server lang: <none>
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] kex follows: False
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] Compression: none
2025-11-25T14:55:01.748 [DEBUG] [Thread-736] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:55:01.805 [DEBUG] [Thread-736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:55:01.805 [DEBUG] [Thread-736] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:55:01.805 [DEBUG] [Thread-736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:55:01.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:55:01.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:55:01.860 [DEBUG] [Thread-736] [transport.py] [_log()] userauth is OK
2025-11-25T14:55:01.860 [DEBUG] [Thread-736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:55:01.860 [DEBUG] [Thread-736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:55:01.860 [DEBUG] [Thread-736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:55:01.860 [DEBUG] [Thread-736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:55:01.873 [INFO] [Thread-736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:55:01.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:55:01.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:55:02.669 [DEBUG] [Thread-736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:55:02.669 [DEBUG] [Thread-736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:55:02.721 [DEBUG] [Thread-736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:55:02.721 [DEBUG] [Thread-736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:55:02.733 [DEBUG] [Thread-736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:55:02.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:55: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')
2025-11-25T14:55: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
2025-11-25T14:55:02.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:55:02.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:55:02.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:55:02.770 [DEBUG] [Thread-736] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:55:10.930 [DEBUG] [Thread-738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:55:14.048 [DEBUG] [Thread-739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:55:25.988 [DEBUG] [Thread-740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:55:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:55:32.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:55:32.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:55:33.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 55, 27), 36.8, 7.99, 0.0, 13.16, 26.85, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:55:33.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:55:27
2025-11-25T14:55:33.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:55:33.725 [DEBUG] [Thread-741] [transport.py] [_log()] starting thread (client mode): 0x737c4220
2025-11-25T14:55:33.725 [DEBUG] [Thread-741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:55:33.746 [DEBUG] [Thread-741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:55:33.746 [INFO] [Thread-741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:55:33.749 [DEBUG] [Thread-741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:55:33.749 [DEBUG] [Thread-741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:55:33.749 [DEBUG] [Thread-741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:55:33.749 [DEBUG] [Thread-741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:55:33.749 [DEBUG] [Thread-741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] client lang: <none>
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] server lang: <none>
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] kex follows: False
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] Compression: none
2025-11-25T14:55:33.750 [DEBUG] [Thread-741] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:55:33.770 [DEBUG] [Thread-741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:55:33.770 [DEBUG] [Thread-741] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:55:33.771 [DEBUG] [Thread-741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:55:33.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:55:33.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:55:33.773 [DEBUG] [Thread-741] [transport.py] [_log()] userauth is OK
2025-11-25T14:55:33.773 [DEBUG] [Thread-741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:55:33.774 [DEBUG] [Thread-741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:55:33.774 [DEBUG] [Thread-741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:55:33.774 [DEBUG] [Thread-741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:55:33.799 [INFO] [Thread-741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:55:33.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:55:34.436 [DEBUG] [Thread-741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:55:34.436 [DEBUG] [Thread-741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:55:34.436 [DEBUG] [Thread-741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:55:34.476 [DEBUG] [Thread-741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:55:34.477 [DEBUG] [Thread-741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:55:34.480 [DEBUG] [Thread-741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:55:34.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:55:34.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:55:34.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:55:34.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:55:34.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:55:34.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:55:34.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:55:34.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:55:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:55:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.537948 -999.00  +27.00   7.91     12   -3.90 1 1 1 1 1   888    0 30.33 9.64 ----- 8.4 7.9 113.2 9.7 34.4 -30.3 34.1 -30.1 35.1 -28.6 35.8 -30.0
2025-11-25T14:55:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:55:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:55:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.537948
2025-11-25T14:55:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:55:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:55:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:55:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:55:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:55:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:55:27', tmtdew=36.8, humidity=7.99, cloud=0.0, wind=13.16, temperature=26.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:54:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:55:34.505 [DEBUG] [Thread-741] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:55:34.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:55:34.608 [DEBUG] [Thread-744] [transport.py] [_log()] starting thread (client mode): 0x737c7e80
2025-11-25T14:55:34.609 [DEBUG] [Thread-744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:55:34.624 [DEBUG] [Thread-744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:55:34.624 [INFO] [Thread-744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:55:34.631 [DEBUG] [Thread-744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] client lang: <none>
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] server lang: <none>
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] kex follows: False
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:55:34.632 [DEBUG] [Thread-744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:55:34.633 [DEBUG] [Thread-744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:55:34.633 [DEBUG] [Thread-744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:55:34.633 [DEBUG] [Thread-744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:55:34.633 [DEBUG] [Thread-744] [transport.py] [_log()] Compression: none
2025-11-25T14:55:34.633 [DEBUG] [Thread-744] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:55:34.691 [DEBUG] [Thread-744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:55:34.692 [DEBUG] [Thread-744] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:55:34.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:55:34.693 [DEBUG] [Thread-744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:55:34.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:55:34.747 [DEBUG] [Thread-744] [transport.py] [_log()] userauth is OK
2025-11-25T14:55:34.748 [DEBUG] [Thread-744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:55:34.748 [DEBUG] [Thread-744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:55:34.748 [DEBUG] [Thread-744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:55:34.748 [DEBUG] [Thread-744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:55:34.767 [INFO] [Thread-744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:55:34.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:55:34.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:55:35.526 [DEBUG] [Thread-744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:55:35.526 [DEBUG] [Thread-744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:55:35.574 [DEBUG] [Thread-744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:55:35.574 [DEBUG] [Thread-744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:55:35.583 [DEBUG] [Thread-744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:55:35.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:55:35.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:55:35.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:55:35.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:55:35.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:55:35.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:55:35.621 [DEBUG] [Thread-744] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:55:41.034 [DEBUG] [Thread-746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:55:56.105 [DEBUG] [Thread-747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:56:05.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:56:05.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:56:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:56:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 55, 59), 37.32, 8.05, 0.0, 9.51, 27.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:56:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:55:59
2025-11-25T14:56:06.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:56:06.567 [DEBUG] [Thread-748] [transport.py] [_log()] starting thread (client mode): 0x737c5de0
2025-11-25T14:56:06.567 [DEBUG] [Thread-748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:56:06.588 [DEBUG] [Thread-748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:56:06.588 [INFO] [Thread-748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:56:06.591 [DEBUG] [Thread-748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] client lang: <none>
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] server lang: <none>
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] kex follows: False
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] Compression: none
2025-11-25T14:56:06.592 [DEBUG] [Thread-748] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:56:06.610 [DEBUG] [Thread-748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:56:06.611 [DEBUG] [Thread-748] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:56:06.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:56:06.612 [DEBUG] [Thread-748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:56:06.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:56:06.614 [DEBUG] [Thread-748] [transport.py] [_log()] userauth is OK
2025-11-25T14:56:06.614 [DEBUG] [Thread-748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:56:06.615 [DEBUG] [Thread-748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:56:06.615 [DEBUG] [Thread-748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:56:06.615 [DEBUG] [Thread-748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:56:06.639 [INFO] [Thread-748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:56:06.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:56:07.312 [DEBUG] [Thread-748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:56:07.312 [DEBUG] [Thread-748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:56:07.312 [DEBUG] [Thread-748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:56:07.353 [DEBUG] [Thread-748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:56:07.353 [DEBUG] [Thread-748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:56:07.356 [DEBUG] [Thread-748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:56:07.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:56:07.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:56:07.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:56:07.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:56:07.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:56:07.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:56:07.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:56:07.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:56:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:56:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.538295 -999.00  +27.00   5.03     12   -3.70 1 1 1 1 1   888    0 30.57 14.98 ----- 4.6 5.0 65.0 11.0 34.4 -30.5 34.1 -30.4 35.2 -29.2 36.0 -29.5
2025-11-25T14:56:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:56:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:56:07.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.538295
2025-11-25T14:56:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:56:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:56:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:56:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:56:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:56:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:55:59', tmtdew=37.32, humidity=8.05, cloud=0.0, wind=9.51, temperature=27.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:55:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:56:07.376 [DEBUG] [Thread-748] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:56:07.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:56:07.477 [DEBUG] [Thread-751] [transport.py] [_log()] starting thread (client mode): 0x7378cee0
2025-11-25T14:56:07.478 [DEBUG] [Thread-751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:56:07.493 [DEBUG] [Thread-751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:56:07.493 [INFO] [Thread-751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:56:07.501 [DEBUG] [Thread-751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:56:07.501 [DEBUG] [Thread-751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:56:07.501 [DEBUG] [Thread-751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:56:07.501 [DEBUG] [Thread-751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:56:07.501 [DEBUG] [Thread-751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:56:07.501 [DEBUG] [Thread-751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:56:07.501 [DEBUG] [Thread-751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:56:07.501 [DEBUG] [Thread-751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:56:07.501 [DEBUG] [Thread-751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] client lang: <none>
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] server lang: <none>
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] kex follows: False
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] Compression: none
2025-11-25T14:56:07.502 [DEBUG] [Thread-751] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:56:07.558 [DEBUG] [Thread-751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:56:07.559 [DEBUG] [Thread-751] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:56:07.559 [DEBUG] [Thread-751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:56:07.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:56:07.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:56:07.618 [DEBUG] [Thread-751] [transport.py] [_log()] userauth is OK
2025-11-25T14:56:07.619 [DEBUG] [Thread-751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:56:07.619 [DEBUG] [Thread-751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:56:07.619 [DEBUG] [Thread-751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:56:07.619 [DEBUG] [Thread-751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:56:07.639 [INFO] [Thread-751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:56:07.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:56:07.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:56:08.441 [DEBUG] [Thread-751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:56:08.441 [DEBUG] [Thread-751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:56:08.490 [DEBUG] [Thread-751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:56:08.490 [DEBUG] [Thread-751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:56:08.499 [DEBUG] [Thread-751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:56:08.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:56:08.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:56:08.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:56:08.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:56:08.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:56:08.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:56:08.535 [DEBUG] [Thread-751] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:56:11.147 [DEBUG] [Thread-753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:56:14.766 [DEBUG] [Thread-754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:56:26.213 [DEBUG] [Thread-755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:56:38.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:56:38.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:56:38.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:56:39.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 56, 31), 37.55, 7.95, 0.0, 11.03, 27.46, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:56:39.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:56:31
2025-11-25T14:56:39.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:56:39.488 [DEBUG] [Thread-756] [transport.py] [_log()] starting thread (client mode): 0x737c5540
2025-11-25T14:56:39.488 [DEBUG] [Thread-756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:56:39.513 [DEBUG] [Thread-756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:56:39.513 [INFO] [Thread-756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:56:39.516 [DEBUG] [Thread-756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:56:39.516 [DEBUG] [Thread-756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:56:39.516 [DEBUG] [Thread-756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:56:39.516 [DEBUG] [Thread-756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:56:39.516 [DEBUG] [Thread-756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] client lang: <none>
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] server lang: <none>
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] kex follows: False
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] Compression: none
2025-11-25T14:56:39.517 [DEBUG] [Thread-756] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:56:39.537 [DEBUG] [Thread-756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:56:39.538 [DEBUG] [Thread-756] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:56:39.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:56:39.539 [DEBUG] [Thread-756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:56:39.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:56:39.582 [DEBUG] [Thread-756] [transport.py] [_log()] userauth is OK
2025-11-25T14:56:39.582 [DEBUG] [Thread-756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:56:39.582 [DEBUG] [Thread-756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:56:39.582 [DEBUG] [Thread-756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:56:39.582 [DEBUG] [Thread-756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:56:39.617 [INFO] [Thread-756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:56:39.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:56:40.235 [DEBUG] [Thread-756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:56:40.235 [DEBUG] [Thread-756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:56:40.235 [DEBUG] [Thread-756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:56:40.276 [DEBUG] [Thread-756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:56:40.276 [DEBUG] [Thread-756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:56:40.280 [DEBUG] [Thread-756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:56:40.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:56:40.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:56:40.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:56:40.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:56:40.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:56:40.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:56:40.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:56:40.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:56:40.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:56:40.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.538990 -999.00  +27.40   3.79     12   -3.70 1 1 1 1 1   888    0 30.67 29.35 ----- 2.1 3.8 179.1 5.2 34.6 -30.8 34.4 -30.3 35.6 -29.3 36.3 -29.8
2025-11-25T14:56:40.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:56:40.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:56:40.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.538990
2025-11-25T14:56:40.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:56:40.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:56:40.309 [DEBUG] [Thread-756] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:56:40.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:56:40.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:56:40.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:56:40.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:56:31', tmtdew=37.55, humidity=7.95, cloud=0.0, wind=11.03, temperature=27.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:56:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:56:40.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:56:40.413 [DEBUG] [Thread-759] [transport.py] [_log()] starting thread (client mode): 0x737c55d0
2025-11-25T14:56:40.413 [DEBUG] [Thread-759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:56:40.427 [DEBUG] [Thread-759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:56:40.428 [INFO] [Thread-759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:56:40.435 [DEBUG] [Thread-759] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:56:40.435 [DEBUG] [Thread-759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:56:40.435 [DEBUG] [Thread-759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:56:40.435 [DEBUG] [Thread-759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:56:40.435 [DEBUG] [Thread-759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:56:40.435 [DEBUG] [Thread-759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] client lang: <none>
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] server lang: <none>
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] kex follows: False
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] Compression: none
2025-11-25T14:56:40.436 [DEBUG] [Thread-759] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:56:40.493 [DEBUG] [Thread-759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:56:40.493 [DEBUG] [Thread-759] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:56:40.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:56:40.495 [DEBUG] [Thread-759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:56:40.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:56:40.549 [DEBUG] [Thread-759] [transport.py] [_log()] userauth is OK
2025-11-25T14:56:40.549 [DEBUG] [Thread-759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:56:40.549 [DEBUG] [Thread-759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:56:40.549 [DEBUG] [Thread-759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:56:40.549 [DEBUG] [Thread-759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:56:40.568 [INFO] [Thread-759] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:56:40.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:56:40.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:56:41.250 [DEBUG] [Thread-761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:56:41.324 [DEBUG] [Thread-759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:56:41.324 [DEBUG] [Thread-759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:56:41.371 [DEBUG] [Thread-759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:56:41.372 [DEBUG] [Thread-759] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:56:41.380 [DEBUG] [Thread-759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:56:41.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:56:41.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:56:41.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:56:41.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:56:41.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:56:41.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:56:41.417 [DEBUG] [Thread-759] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:56:56.316 [DEBUG] [Thread-762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:57:11.354 [DEBUG] [Thread-763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:57:11.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:57:11.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:57:11.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:57:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 57, 3), 37.93, 7.76, 0.0, 6.21, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:57:12.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:57:03
2025-11-25T14:57:12.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:57:12.395 [DEBUG] [Thread-764] [transport.py] [_log()] starting thread (client mode): 0x737c6320
2025-11-25T14:57:12.395 [DEBUG] [Thread-764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:57:12.415 [DEBUG] [Thread-764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:57:12.415 [INFO] [Thread-764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] client lang: <none>
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] server lang: <none>
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] kex follows: False
2025-11-25T14:57:12.418 [DEBUG] [Thread-764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:57:12.419 [DEBUG] [Thread-764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:57:12.419 [DEBUG] [Thread-764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:57:12.419 [DEBUG] [Thread-764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:57:12.419 [DEBUG] [Thread-764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:57:12.419 [DEBUG] [Thread-764] [transport.py] [_log()] Compression: none
2025-11-25T14:57:12.419 [DEBUG] [Thread-764] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:57:12.436 [DEBUG] [Thread-764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:57:12.436 [DEBUG] [Thread-764] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:57:12.437 [DEBUG] [Thread-764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:57:12.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:57:12.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:57:12.439 [DEBUG] [Thread-764] [transport.py] [_log()] userauth is OK
2025-11-25T14:57:12.439 [DEBUG] [Thread-764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:57:12.439 [DEBUG] [Thread-764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:57:12.439 [DEBUG] [Thread-764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:57:12.439 [DEBUG] [Thread-764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:57:12.458 [INFO] [Thread-764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:57:12.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:57:13.149 [DEBUG] [Thread-764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:57:13.149 [DEBUG] [Thread-764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:57:13.150 [DEBUG] [Thread-764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:57:13.190 [DEBUG] [Thread-764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:57:13.190 [DEBUG] [Thread-764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:57:13.194 [DEBUG] [Thread-764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:57:13.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:57:13.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:57:13.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:57:13.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:57:13.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:57:13.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:57:13.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:57:13.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:57:13.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:57:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.539337 -999.00  +27.30   6.80     12   -3.70 1 1 1 1 1   888    0 30.58 33.44 ----- 9.3 6.8 232.4 8.3 34.6 -32.4 34.4 -30.6 35.8 -28.6 36.3 -31.0
2025-11-25T14:57:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:57:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:57:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.539337
2025-11-25T14:57:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:57:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:57:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:57:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:57:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:57:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:57:03', tmtdew=37.93, humidity=7.76, cloud=0.0, wind=6.21, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:56:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:57:13.219 [DEBUG] [Thread-764] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:57:13.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:57:13.323 [DEBUG] [Thread-767] [transport.py] [_log()] starting thread (client mode): 0x737c5990
2025-11-25T14:57:13.323 [DEBUG] [Thread-767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:57:13.340 [DEBUG] [Thread-767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:57:13.341 [INFO] [Thread-767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:57:13.348 [DEBUG] [Thread-767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:57:13.348 [DEBUG] [Thread-767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] client lang: <none>
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] server lang: <none>
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] kex follows: False
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:57:13.349 [DEBUG] [Thread-767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:57:13.350 [DEBUG] [Thread-767] [transport.py] [_log()] Compression: none
2025-11-25T14:57:13.350 [DEBUG] [Thread-767] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:57:13.407 [DEBUG] [Thread-767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:57:13.407 [DEBUG] [Thread-767] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:57:13.407 [DEBUG] [Thread-767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:57:13.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:57:13.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:57:13.464 [DEBUG] [Thread-767] [transport.py] [_log()] userauth is OK
2025-11-25T14:57:13.465 [DEBUG] [Thread-767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:57:13.465 [DEBUG] [Thread-767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:57:13.465 [DEBUG] [Thread-767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:57:13.465 [DEBUG] [Thread-767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:57:13.490 [INFO] [Thread-767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:57:13.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:57:13.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:57:14.318 [DEBUG] [Thread-767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:57:14.319 [DEBUG] [Thread-767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:57:14.368 [DEBUG] [Thread-767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:57:14.368 [DEBUG] [Thread-767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:57:14.377 [DEBUG] [Thread-767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:57:14.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:57:14.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:57:14.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:57:14.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:57:14.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:57:14.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:57:14.414 [DEBUG] [Thread-767] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:57:15.268 [DEBUG] [Thread-769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:57:26.395 [DEBUG] [Thread-770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:57:41.456 [DEBUG] [Thread-771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:57:44.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:57:44.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:57:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:57:45.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 57, 36), 37.92, 7.76, 0.0, 18.83, 27.71, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:57:45.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:57:36
2025-11-25T14:57:45.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:57:45.360 [DEBUG] [Thread-772] [transport.py] [_log()] starting thread (client mode): 0x7378f130
2025-11-25T14:57:45.360 [DEBUG] [Thread-772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:57:45.376 [DEBUG] [Thread-772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:57:45.376 [INFO] [Thread-772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:57:45.379 [DEBUG] [Thread-772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] client lang: <none>
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] server lang: <none>
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] kex follows: False
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] Compression: none
2025-11-25T14:57:45.380 [DEBUG] [Thread-772] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:57:45.398 [DEBUG] [Thread-772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:57:45.398 [DEBUG] [Thread-772] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:57:45.399 [DEBUG] [Thread-772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:57:45.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:57:45.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:57:45.401 [DEBUG] [Thread-772] [transport.py] [_log()] userauth is OK
2025-11-25T14:57:45.401 [DEBUG] [Thread-772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:57:45.401 [DEBUG] [Thread-772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:57:45.401 [DEBUG] [Thread-772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:57:45.401 [DEBUG] [Thread-772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:57:45.418 [INFO] [Thread-772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:57:45.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:57:46.057 [DEBUG] [Thread-772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:57:46.058 [DEBUG] [Thread-772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:57:46.058 [DEBUG] [Thread-772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:57:46.099 [DEBUG] [Thread-772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:57:46.099 [DEBUG] [Thread-772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:57:46.102 [DEBUG] [Thread-772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:57:46.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:57:46.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:57:46.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:57:46.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:57:46.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:57:46.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:57:46.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:57:46.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:57:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:57:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.539684 -999.00  +27.30  16.44     12   -3.50 1 1 1 1 1   888    0 31.98 39.36 ----- 19.7 16.4 129.8 20.5 34.7 -31.6 34.0 -33.0 35.5 -29.7 36.2 -30.5
2025-11-25T14:57:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:57:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:57:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.539684
2025-11-25T14:57:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:57:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:57:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:57:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:57:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:57:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:57:36', tmtdew=37.92, humidity=7.76, cloud=0.0, wind=18.83, temperature=27.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:57:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:57:46.129 [DEBUG] [Thread-772] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:57:46.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:57:46.233 [DEBUG] [Thread-775] [transport.py] [_log()] starting thread (client mode): 0x7378ee00
2025-11-25T14:57:46.233 [DEBUG] [Thread-775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:57:46.248 [DEBUG] [Thread-775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:57:46.248 [INFO] [Thread-775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] client lang: <none>
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] server lang: <none>
2025-11-25T14:57:46.256 [DEBUG] [Thread-775] [transport.py] [_log()] kex follows: False
2025-11-25T14:57:46.257 [DEBUG] [Thread-775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:57:46.257 [DEBUG] [Thread-775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:57:46.257 [DEBUG] [Thread-775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:57:46.257 [DEBUG] [Thread-775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:57:46.257 [DEBUG] [Thread-775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:57:46.257 [DEBUG] [Thread-775] [transport.py] [_log()] Compression: none
2025-11-25T14:57:46.257 [DEBUG] [Thread-775] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:57:46.319 [DEBUG] [Thread-775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:57:46.319 [DEBUG] [Thread-775] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:57:46.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:57:46.321 [DEBUG] [Thread-775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:57:46.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:57:46.376 [DEBUG] [Thread-775] [transport.py] [_log()] userauth is OK
2025-11-25T14:57:46.376 [DEBUG] [Thread-775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:57:46.376 [DEBUG] [Thread-775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:57:46.376 [DEBUG] [Thread-775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:57:46.376 [DEBUG] [Thread-775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:57:46.394 [INFO] [Thread-775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:57:46.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:57:46.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:57:47.153 [DEBUG] [Thread-775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:57:47.153 [DEBUG] [Thread-775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:57:47.201 [DEBUG] [Thread-775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:57:47.202 [DEBUG] [Thread-775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:57:47.211 [DEBUG] [Thread-775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:57:47.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:57: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')
2025-11-25T14:57:47.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:57:47.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:57:47.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:57:47.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:57:47.248 [DEBUG] [Thread-775] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:57:56.500 [DEBUG] [Thread-777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:58:11.572 [DEBUG] [Thread-778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:58:15.766 [DEBUG] [Thread-779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:58:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:58:17.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:58:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:58:17.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 58, 8), 38.03, 7.69, 0.0, 15.67, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:58:17.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:58:08
2025-11-25T14:58:18.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:58:18.272 [DEBUG] [Thread-780] [transport.py] [_log()] starting thread (client mode): 0x737c5ae0
2025-11-25T14:58:18.272 [DEBUG] [Thread-780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:58:18.292 [DEBUG] [Thread-780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:58:18.292 [INFO] [Thread-780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:58:18.295 [DEBUG] [Thread-780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:58:18.295 [DEBUG] [Thread-780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:58:18.295 [DEBUG] [Thread-780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] client lang: <none>
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] server lang: <none>
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] kex follows: False
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] Compression: none
2025-11-25T14:58:18.296 [DEBUG] [Thread-780] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:58:18.309 [DEBUG] [Thread-780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:58:18.309 [DEBUG] [Thread-780] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:58:18.310 [DEBUG] [Thread-780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:58:18.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:58:18.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:58:18.310 [DEBUG] [Thread-780] [transport.py] [_log()] userauth is OK
2025-11-25T14:58:18.310 [DEBUG] [Thread-780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:58:18.310 [DEBUG] [Thread-780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:58:18.310 [DEBUG] [Thread-780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:58:18.310 [DEBUG] [Thread-780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:58:18.325 [INFO] [Thread-780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:58:18.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:58:18.956 [DEBUG] [Thread-780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:58:18.957 [DEBUG] [Thread-780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:58:18.957 [DEBUG] [Thread-780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:58:18.997 [DEBUG] [Thread-780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:58:18.997 [DEBUG] [Thread-780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:58:18.999 [DEBUG] [Thread-780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:58:19.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:58:19.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:58:19.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:58:19.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:58:19.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:58:19.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:58:19.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.540032 -999.00  +27.40  10.23     12   -3.70 1 1 1 1 1   888    0 31.74 41.63 ----- 4.7 10.2 165.8 21.9 34.5 -31.6 34.0 -30.1 35.4 -29.9 36.1 -31.7
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.540032
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:58:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:58:08', tmtdew=38.03, humidity=7.69, cloud=0.0, wind=15.67, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:57:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:58:19.017 [DEBUG] [Thread-780] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:58:19.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:58:19.110 [DEBUG] [Thread-783] [transport.py] [_log()] starting thread (client mode): 0x737c5660
2025-11-25T14:58:19.110 [DEBUG] [Thread-783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:58:19.125 [DEBUG] [Thread-783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:58:19.125 [INFO] [Thread-783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:58:19.132 [DEBUG] [Thread-783] [transport.py] [_log()] client lang: <none>
2025-11-25T14:58:19.133 [DEBUG] [Thread-783] [transport.py] [_log()] server lang: <none>
2025-11-25T14:58:19.133 [DEBUG] [Thread-783] [transport.py] [_log()] kex follows: False
2025-11-25T14:58:19.133 [DEBUG] [Thread-783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:58:19.133 [DEBUG] [Thread-783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:58:19.133 [DEBUG] [Thread-783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:58:19.133 [DEBUG] [Thread-783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:58:19.133 [DEBUG] [Thread-783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:58:19.133 [DEBUG] [Thread-783] [transport.py] [_log()] Compression: none
2025-11-25T14:58:19.133 [DEBUG] [Thread-783] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:58:19.188 [DEBUG] [Thread-783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:58:19.188 [DEBUG] [Thread-783] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:58:19.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:58:19.189 [DEBUG] [Thread-783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:58:19.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:58:19.246 [DEBUG] [Thread-783] [transport.py] [_log()] userauth is OK
2025-11-25T14:58:19.246 [DEBUG] [Thread-783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:58:19.246 [DEBUG] [Thread-783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:58:19.246 [DEBUG] [Thread-783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:58:19.246 [DEBUG] [Thread-783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:58:19.259 [INFO] [Thread-783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:58:19.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:58:19.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:58:20.007 [DEBUG] [Thread-783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:58:20.007 [DEBUG] [Thread-783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:58:20.055 [DEBUG] [Thread-783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:58:20.055 [DEBUG] [Thread-783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:58:20.063 [DEBUG] [Thread-783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:58:20.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:58:20.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:58:20.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:58:20.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:58:20.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:58:20.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:58:20.094 [DEBUG] [Thread-783] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:58:26.613 [DEBUG] [Thread-785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:58:41.681 [DEBUG] [Thread-786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:58:50.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:58:50.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:58:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:58:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 58, 40), 37.97, 7.69, 0.0, 5.84, 27.61, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:58:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:58:40
2025-11-25T14:58:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:58:51.062 [DEBUG] [Thread-787] [transport.py] [_log()] starting thread (client mode): 0x737c6cb0
2025-11-25T14:58:51.062 [DEBUG] [Thread-787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:58:51.082 [DEBUG] [Thread-787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:58:51.082 [INFO] [Thread-787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:58:51.085 [DEBUG] [Thread-787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:58:51.086 [DEBUG] [Thread-787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:58:51.086 [DEBUG] [Thread-787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:58:51.086 [DEBUG] [Thread-787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:58:51.086 [DEBUG] [Thread-787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:58:51.086 [DEBUG] [Thread-787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:58:51.086 [DEBUG] [Thread-787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:58:51.086 [DEBUG] [Thread-787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:58:51.086 [DEBUG] [Thread-787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:58:51.087 [DEBUG] [Thread-787] [transport.py] [_log()] client lang: <none>
2025-11-25T14:58:51.087 [DEBUG] [Thread-787] [transport.py] [_log()] server lang: <none>
2025-11-25T14:58:51.087 [DEBUG] [Thread-787] [transport.py] [_log()] kex follows: False
2025-11-25T14:58:51.087 [DEBUG] [Thread-787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:58:51.087 [DEBUG] [Thread-787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:58:51.087 [DEBUG] [Thread-787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:58:51.087 [DEBUG] [Thread-787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:58:51.087 [DEBUG] [Thread-787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:58:51.088 [DEBUG] [Thread-787] [transport.py] [_log()] Compression: none
2025-11-25T14:58:51.088 [DEBUG] [Thread-787] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:58:51.098 [DEBUG] [Thread-787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:58:51.099 [DEBUG] [Thread-787] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:58:51.099 [DEBUG] [Thread-787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:58:51.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:58:51.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:58:51.101 [DEBUG] [Thread-787] [transport.py] [_log()] userauth is OK
2025-11-25T14:58:51.101 [DEBUG] [Thread-787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:58:51.101 [DEBUG] [Thread-787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:58:51.102 [DEBUG] [Thread-787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:58:51.102 [DEBUG] [Thread-787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:58:51.124 [INFO] [Thread-787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:58:51.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:58:51.755 [DEBUG] [Thread-787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:58:51.755 [DEBUG] [Thread-787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:58:51.756 [DEBUG] [Thread-787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:58:51.796 [DEBUG] [Thread-787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:58:51.796 [DEBUG] [Thread-787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:58:51.799 [DEBUG] [Thread-787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:58:51.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:58:51.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:58:51.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:58:51.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:58:51.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:58:51.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:58:51.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:58:51.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:58:51.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:58:51.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.540379 -999.00  +27.20   9.50     12   -3.70 1 1 1 1 1   888    0 31.30 45.89 ----- 11.7 9.5 46.6 16.6 34.5 -31.2 34.1 -31.2 35.5 -28.8 36.3 -31.0
2025-11-25T14:58:51.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:58:51.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:58:51.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.540379
2025-11-25T14:58:51.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:58:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:58:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:58:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:58:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:58:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:58:40', tmtdew=37.97, humidity=7.69, cloud=0.0, wind=5.84, temperature=27.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:58:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:58:51.826 [DEBUG] [Thread-787] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:58:51.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:58:51.927 [DEBUG] [Thread-790] [transport.py] [_log()] starting thread (client mode): 0x737c4f40
2025-11-25T14:58:51.927 [DEBUG] [Thread-790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:58:51.941 [DEBUG] [Thread-790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:58:51.942 [INFO] [Thread-790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:58:51.949 [DEBUG] [Thread-790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:58:51.949 [DEBUG] [Thread-790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:58:51.950 [DEBUG] [Thread-790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:58:51.950 [DEBUG] [Thread-790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:58:51.950 [DEBUG] [Thread-790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:58:51.950 [DEBUG] [Thread-790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:58:51.950 [DEBUG] [Thread-790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:58:51.951 [DEBUG] [Thread-790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:58:51.951 [DEBUG] [Thread-790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:58:51.951 [DEBUG] [Thread-790] [transport.py] [_log()] client lang: <none>
2025-11-25T14:58:51.951 [DEBUG] [Thread-790] [transport.py] [_log()] server lang: <none>
2025-11-25T14:58:51.951 [DEBUG] [Thread-790] [transport.py] [_log()] kex follows: False
2025-11-25T14:58:51.951 [DEBUG] [Thread-790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:58:51.951 [DEBUG] [Thread-790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:58:51.951 [DEBUG] [Thread-790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:58:51.952 [DEBUG] [Thread-790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:58:51.952 [DEBUG] [Thread-790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:58:51.952 [DEBUG] [Thread-790] [transport.py] [_log()] Compression: none
2025-11-25T14:58:51.952 [DEBUG] [Thread-790] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:58:52.010 [DEBUG] [Thread-790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:58:52.010 [DEBUG] [Thread-790] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:58:52.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:58:52.011 [DEBUG] [Thread-790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:58:52.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:58:52.065 [DEBUG] [Thread-790] [transport.py] [_log()] userauth is OK
2025-11-25T14:58:52.065 [DEBUG] [Thread-790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:58:52.065 [DEBUG] [Thread-790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:58:52.065 [DEBUG] [Thread-790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:58:52.065 [DEBUG] [Thread-790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:58:52.081 [INFO] [Thread-790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:58:52.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:58:52.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:58:52.874 [DEBUG] [Thread-790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:58:52.874 [DEBUG] [Thread-790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:58:52.922 [DEBUG] [Thread-790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:58:52.922 [DEBUG] [Thread-790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:58:52.932 [DEBUG] [Thread-790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:58:52.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:58:52.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:58:52.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:58:52.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:58:52.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:58:52.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:58:52.969 [DEBUG] [Thread-790] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:58:56.718 [DEBUG] [Thread-792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:59:11.779 [DEBUG] [Thread-793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:59:16.267 [DEBUG] [Thread-794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:59:22.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:59:22.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:59:22.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:59:23.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 59, 12), 37.88, 7.72, 0.0, 6.88, 27.48, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:59:23.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:59:12
2025-11-25T14:59:23.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:59:23.932 [DEBUG] [Thread-795] [transport.py] [_log()] starting thread (client mode): 0x737c7220
2025-11-25T14:59:23.932 [DEBUG] [Thread-795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:59:23.952 [DEBUG] [Thread-795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:59:23.952 [INFO] [Thread-795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:59:23.955 [DEBUG] [Thread-795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:59:23.955 [DEBUG] [Thread-795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] client lang: <none>
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] server lang: <none>
2025-11-25T14:59:23.956 [DEBUG] [Thread-795] [transport.py] [_log()] kex follows: False
2025-11-25T14:59:23.957 [DEBUG] [Thread-795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:59:23.957 [DEBUG] [Thread-795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:59:23.957 [DEBUG] [Thread-795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:59:23.957 [DEBUG] [Thread-795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:59:23.957 [DEBUG] [Thread-795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:59:23.957 [DEBUG] [Thread-795] [transport.py] [_log()] Compression: none
2025-11-25T14:59:23.957 [DEBUG] [Thread-795] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:59:23.977 [DEBUG] [Thread-795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:59:23.978 [DEBUG] [Thread-795] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:59:23.978 [DEBUG] [Thread-795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:59:23.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:59:23.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:59:23.980 [DEBUG] [Thread-795] [transport.py] [_log()] userauth is OK
2025-11-25T14:59:23.981 [DEBUG] [Thread-795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:59:23.981 [DEBUG] [Thread-795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:59:23.981 [DEBUG] [Thread-795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:59:23.981 [DEBUG] [Thread-795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:59:24.006 [INFO] [Thread-795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:59:24.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:59:24.669 [DEBUG] [Thread-795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:59:24.669 [DEBUG] [Thread-795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:59:24.670 [DEBUG] [Thread-795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:59:24.710 [DEBUG] [Thread-795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:59:24.710 [DEBUG] [Thread-795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:59:24.714 [DEBUG] [Thread-795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:59:24.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:59:24.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:59:24.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:59:24.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:59:24.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:59:24.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:59:24.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:59:24.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:59:24.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:59:24.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.540726 -999.00  +26.60  11.08     13   -3.90 1 1 1 1 1   888    0 32.11 43.21 ----- 8.1 11.1 17.4 15.2 34.5 -31.3 34.0 -31.8 35.5 -29.4 36.2 -30.3
2025-11-25T14:59:24.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:59:24.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:59:24.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.540726
2025-11-25T14:59:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:59:24.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:59:24.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:59:24.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:59:24.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:59:24.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:59:12', tmtdew=37.88, humidity=7.72, cloud=0.0, wind=6.88, temperature=27.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:58:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:59:24.742 [DEBUG] [Thread-795] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:59:24.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:59:24.847 [DEBUG] [Thread-798] [transport.py] [_log()] starting thread (client mode): 0x7374c7f0
2025-11-25T14:59:24.847 [DEBUG] [Thread-798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:59:24.861 [DEBUG] [Thread-798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:59:24.862 [INFO] [Thread-798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:59:24.869 [DEBUG] [Thread-798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:59:24.869 [DEBUG] [Thread-798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:59:24.869 [DEBUG] [Thread-798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:59:24.869 [DEBUG] [Thread-798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] client lang: <none>
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] server lang: <none>
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] kex follows: False
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:59:24.870 [DEBUG] [Thread-798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:59:24.871 [DEBUG] [Thread-798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:59:24.871 [DEBUG] [Thread-798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:59:24.871 [DEBUG] [Thread-798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:59:24.871 [DEBUG] [Thread-798] [transport.py] [_log()] Compression: none
2025-11-25T14:59:24.871 [DEBUG] [Thread-798] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:59:24.928 [DEBUG] [Thread-798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:59:24.928 [DEBUG] [Thread-798] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:59:24.929 [DEBUG] [Thread-798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:59:24.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:59:24.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:59:24.984 [DEBUG] [Thread-798] [transport.py] [_log()] userauth is OK
2025-11-25T14:59:24.985 [DEBUG] [Thread-798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:59:24.985 [DEBUG] [Thread-798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:59:24.985 [DEBUG] [Thread-798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:59:24.985 [DEBUG] [Thread-798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:59:25.004 [INFO] [Thread-798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:59:25.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:59:25.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:59:25.765 [DEBUG] [Thread-798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:59:25.766 [DEBUG] [Thread-798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:59:25.814 [DEBUG] [Thread-798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:59:25.814 [DEBUG] [Thread-798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:59:25.823 [DEBUG] [Thread-798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:59:25.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:59:25.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:59:25.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:59:25.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:59:25.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:59:25.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:59:25.860 [DEBUG] [Thread-798] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:59:26.820 [DEBUG] [Thread-800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:59:41.903 [DEBUG] [Thread-801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:59:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T14:59:55.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T14:59:55.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T14:59:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 14, 59, 44), 37.31, 7.79, 0.0, 8.51, 26.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T14:59:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 14:59:44
2025-11-25T14:59:56.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T14:59:56.823 [DEBUG] [Thread-802] [transport.py] [_log()] starting thread (client mode): 0x73780550
2025-11-25T14:59:56.823 [DEBUG] [Thread-802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:59:56.845 [DEBUG] [Thread-802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T14:59:56.845 [INFO] [Thread-802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T14:59:56.848 [DEBUG] [Thread-802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:59:56.849 [DEBUG] [Thread-802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T14:59:56.849 [DEBUG] [Thread-802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:59:56.849 [DEBUG] [Thread-802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:59:56.849 [DEBUG] [Thread-802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:59:56.849 [DEBUG] [Thread-802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:59:56.849 [DEBUG] [Thread-802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:59:56.849 [DEBUG] [Thread-802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] client lang: <none>
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] server lang: <none>
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] kex follows: False
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] Compression: none
2025-11-25T14:59:56.850 [DEBUG] [Thread-802] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:59:56.869 [DEBUG] [Thread-802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:59:56.870 [DEBUG] [Thread-802] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:59:56.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T14:59:56.871 [DEBUG] [Thread-802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T14:59:56.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:59:56.873 [DEBUG] [Thread-802] [transport.py] [_log()] userauth is OK
2025-11-25T14:59:56.873 [DEBUG] [Thread-802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:59:56.874 [DEBUG] [Thread-802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:59:56.874 [DEBUG] [Thread-802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T14:59:56.874 [DEBUG] [Thread-802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:59:56.898 [INFO] [Thread-802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:59:56.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:59:56.950 [DEBUG] [Thread-804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T14:59:57.549 [DEBUG] [Thread-802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:59:57.550 [DEBUG] [Thread-802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:59:57.550 [DEBUG] [Thread-802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T14:59:57.591 [DEBUG] [Thread-802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:59:57.591 [DEBUG] [Thread-802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:59:57.594 [DEBUG] [Thread-802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:59:57.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:59:57.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T14:59:57.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T14:59:57.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T14:59:57.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:59:57.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T14:59:57.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:59:57.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:59:57.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T14:59:57.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.541073 -999.00  +26.20  10.38     13   -4.00 1 1 1 1 1   888    0 31.80 47.84 ----- 10.1 10.4 11.0 11.9 34.5 -31.9 34.0 -32.3 35.5 -29.5 36.2 -30.5
2025-11-25T14:59:57.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T14:59:57.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T14:59:57.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.541073
2025-11-25T14:59:57.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T14:59:57.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T14:59:57.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T14:59:57.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T14:59:57.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T14:59:57.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T14:59:44', tmtdew=37.31, humidity=7.79, cloud=0.0, wind=8.51, temperature=26.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:59:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T14:59:57.623 [DEBUG] [Thread-802] [transport.py] [_log()] EOF in transport thread
2025-11-25T14:59:57.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T14:59:57.727 [DEBUG] [Thread-806] [transport.py] [_log()] starting thread (client mode): 0x737832b0
2025-11-25T14:59:57.727 [DEBUG] [Thread-806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T14:59:57.741 [DEBUG] [Thread-806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T14:59:57.741 [INFO] [Thread-806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T14:59:57.749 [DEBUG] [Thread-806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T14:59:57.749 [DEBUG] [Thread-806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T14:59:57.749 [DEBUG] [Thread-806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T14:59:57.749 [DEBUG] [Thread-806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:59:57.750 [DEBUG] [Thread-806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T14:59:57.750 [DEBUG] [Thread-806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:59:57.750 [DEBUG] [Thread-806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T14:59:57.750 [DEBUG] [Thread-806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T14:59:57.750 [DEBUG] [Thread-806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T14:59:57.750 [DEBUG] [Thread-806] [transport.py] [_log()] client lang: <none>
2025-11-25T14:59:57.750 [DEBUG] [Thread-806] [transport.py] [_log()] server lang: <none>
2025-11-25T14:59:57.750 [DEBUG] [Thread-806] [transport.py] [_log()] kex follows: False
2025-11-25T14:59:57.750 [DEBUG] [Thread-806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T14:59:57.751 [DEBUG] [Thread-806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T14:59:57.751 [DEBUG] [Thread-806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T14:59:57.751 [DEBUG] [Thread-806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T14:59:57.751 [DEBUG] [Thread-806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T14:59:57.751 [DEBUG] [Thread-806] [transport.py] [_log()] Compression: none
2025-11-25T14:59:57.751 [DEBUG] [Thread-806] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T14:59:57.808 [DEBUG] [Thread-806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T14:59:57.809 [DEBUG] [Thread-806] [transport.py] [_log()] Switch to new keys ...
2025-11-25T14:59:57.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T14:59:57.810 [DEBUG] [Thread-806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T14:59:57.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T14:59:57.864 [DEBUG] [Thread-806] [transport.py] [_log()] userauth is OK
2025-11-25T14:59:57.865 [DEBUG] [Thread-806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T14:59:57.865 [DEBUG] [Thread-806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T14:59:57.865 [DEBUG] [Thread-806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T14:59:57.865 [DEBUG] [Thread-806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T14:59:57.883 [INFO] [Thread-806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T14:59:57.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T14:59:57.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T14:59:58.635 [DEBUG] [Thread-806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T14:59:58.635 [DEBUG] [Thread-806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T14:59:58.683 [DEBUG] [Thread-806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T14:59:58.683 [DEBUG] [Thread-806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T14:59:58.692 [DEBUG] [Thread-806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T14:59:58.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T14:59:58.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T14:59:58.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T14:59:58.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T14:59:58.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T14:59:58.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T14:59:58.729 [DEBUG] [Thread-806] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:00:11.989 [DEBUG] [Thread-808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:00:16.802 [DEBUG] [Thread-809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:00:27.049 [DEBUG] [Thread-810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:00:28.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:00:28.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:00:28.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:00:29.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 0, 16), 37.24, 7.82, 0.0, 7.59, 26.88, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:00:29.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:00:16
2025-11-25T15:00:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:00:29.699 [DEBUG] [Thread-811] [transport.py] [_log()] starting thread (client mode): 0x7374fb50
2025-11-25T15:00:29.699 [DEBUG] [Thread-811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:00:29.721 [DEBUG] [Thread-811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:00:29.721 [INFO] [Thread-811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:00:29.723 [DEBUG] [Thread-811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:00:29.723 [DEBUG] [Thread-811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:00:29.723 [DEBUG] [Thread-811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:00:29.723 [DEBUG] [Thread-811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:00:29.723 [DEBUG] [Thread-811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:00:29.723 [DEBUG] [Thread-811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] client lang: <none>
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] server lang: <none>
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] kex follows: False
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] Compression: none
2025-11-25T15:00:29.724 [DEBUG] [Thread-811] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:00:29.733 [DEBUG] [Thread-811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:00:29.734 [DEBUG] [Thread-811] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:00:29.735 [DEBUG] [Thread-811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:00:29.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:00:29.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:00:29.737 [DEBUG] [Thread-811] [transport.py] [_log()] userauth is OK
2025-11-25T15:00:29.737 [DEBUG] [Thread-811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:00:29.737 [DEBUG] [Thread-811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:00:29.737 [DEBUG] [Thread-811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:00:29.738 [DEBUG] [Thread-811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:00:29.754 [INFO] [Thread-811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:00:29.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:00:30.469 [DEBUG] [Thread-811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:00:30.469 [DEBUG] [Thread-811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:00:30.470 [DEBUG] [Thread-811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:00:30.510 [DEBUG] [Thread-811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:00:30.510 [DEBUG] [Thread-811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:00:30.515 [DEBUG] [Thread-811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:00:30.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:00:30.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:00:30.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:00:30.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:00:30.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:00:30.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:00:30.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:00:30.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:00:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:00:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.541420 -999.00  +26.20   9.91     13   -3.80 1 1 1 1 1   888    0 31.38 43.53 ----- 7.0 9.9 28.4 12.1 34.5 -31.1 34.0 -31.5 35.5 -29.7 36.0 -29.7
2025-11-25T15:00:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:00:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:00:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.541420
2025-11-25T15:00:30.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:00:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:00:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:00:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:00:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:00:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:00:16', tmtdew=37.24, humidity=7.82, cloud=0.0, wind=7.59, temperature=26.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T12:59:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:00:30.545 [DEBUG] [Thread-811] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:00:30.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:00:30.660 [DEBUG] [Thread-814] [transport.py] [_log()] starting thread (client mode): 0x737c4c10
2025-11-25T15:00:30.661 [DEBUG] [Thread-814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:00:30.675 [DEBUG] [Thread-814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:00:30.676 [INFO] [Thread-814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:00:30.683 [DEBUG] [Thread-814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:00:30.684 [DEBUG] [Thread-814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:00:30.684 [DEBUG] [Thread-814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:00:30.684 [DEBUG] [Thread-814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:00:30.684 [DEBUG] [Thread-814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:00:30.684 [DEBUG] [Thread-814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:00:30.684 [DEBUG] [Thread-814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:00:30.684 [DEBUG] [Thread-814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:00:30.684 [DEBUG] [Thread-814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] client lang: <none>
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] server lang: <none>
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] kex follows: False
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] Compression: none
2025-11-25T15:00:30.685 [DEBUG] [Thread-814] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:00:30.745 [DEBUG] [Thread-814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:00:30.746 [DEBUG] [Thread-814] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:00:30.746 [DEBUG] [Thread-814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:00:30.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:00:30.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:00:30.803 [DEBUG] [Thread-814] [transport.py] [_log()] userauth is OK
2025-11-25T15:00:30.804 [DEBUG] [Thread-814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:00:30.804 [DEBUG] [Thread-814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:00:30.804 [DEBUG] [Thread-814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:00:30.804 [DEBUG] [Thread-814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:00:30.821 [INFO] [Thread-814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:00:30.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:00:30.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:00:31.588 [DEBUG] [Thread-814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:00:31.589 [DEBUG] [Thread-814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:00:31.638 [DEBUG] [Thread-814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:00:31.638 [DEBUG] [Thread-814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:00:31.650 [DEBUG] [Thread-814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:00:31.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:00:31.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')
2025-11-25T15:00:31.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:00:31.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:00:31.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:00:31.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:00:31.690 [DEBUG] [Thread-814] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:00:42.095 [DEBUG] [Thread-816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:00:57.157 [DEBUG] [Thread-817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:01:01.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:01:01.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:01:01.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:01:02.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 0, 48), 36.94, 7.89, 0.0, 5.31, 26.58, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:01:02.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:00:48
2025-11-25T15:01:02.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:01:02.652 [DEBUG] [Thread-818] [transport.py] [_log()] starting thread (client mode): 0x737c4a30
2025-11-25T15:01:02.653 [DEBUG] [Thread-818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:01:02.672 [DEBUG] [Thread-818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:01:02.672 [INFO] [Thread-818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] client lang: <none>
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] server lang: <none>
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] kex follows: False
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:01:02.675 [DEBUG] [Thread-818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:01:02.676 [DEBUG] [Thread-818] [transport.py] [_log()] Compression: none
2025-11-25T15:01:02.676 [DEBUG] [Thread-818] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:01:02.694 [DEBUG] [Thread-818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:01:02.695 [DEBUG] [Thread-818] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:01:02.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:01:02.696 [DEBUG] [Thread-818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:01:02.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:01:02.698 [DEBUG] [Thread-818] [transport.py] [_log()] userauth is OK
2025-11-25T15:01:02.699 [DEBUG] [Thread-818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:01:02.699 [DEBUG] [Thread-818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:01:02.699 [DEBUG] [Thread-818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:01:02.699 [DEBUG] [Thread-818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:01:02.718 [INFO] [Thread-818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:01:02.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:01:03.386 [DEBUG] [Thread-818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:01:03.386 [DEBUG] [Thread-818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:01:03.387 [DEBUG] [Thread-818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:01:03.428 [DEBUG] [Thread-818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:01:03.428 [DEBUG] [Thread-818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:01:03.432 [DEBUG] [Thread-818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:01:03.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:01:03.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:01:03.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:01:03.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:01:03.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:01:03.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:01:03.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:01:03.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:01:03.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:01:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.541767 -999.00  +26.30  10.50     13   -3.90 1 1 1 1 1   888    0 31.28 45.17 ----- 8.9 10.5 63.8 12.7 34.5 -30.9 34.1 -30.6 35.3 -29.6 36.0 -30.3
2025-11-25T15:01:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:01:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:01:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.541767
2025-11-25T15:01:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:01:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:01:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:01:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:01:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:01:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:00:48', tmtdew=36.94, humidity=7.89, cloud=0.0, wind=5.31, temperature=26.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:00:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:01:03.460 [DEBUG] [Thread-818] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:01:03.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:01:03.564 [DEBUG] [Thread-821] [transport.py] [_log()] starting thread (client mode): 0x737815a0
2025-11-25T15:01:03.564 [DEBUG] [Thread-821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:01:03.579 [DEBUG] [Thread-821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:01:03.579 [INFO] [Thread-821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:01:03.586 [DEBUG] [Thread-821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:01:03.586 [DEBUG] [Thread-821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:01:03.586 [DEBUG] [Thread-821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] client lang: <none>
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] server lang: <none>
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] kex follows: False
2025-11-25T15:01:03.587 [DEBUG] [Thread-821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:01:03.588 [DEBUG] [Thread-821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:01:03.588 [DEBUG] [Thread-821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:01:03.588 [DEBUG] [Thread-821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:01:03.588 [DEBUG] [Thread-821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:01:03.588 [DEBUG] [Thread-821] [transport.py] [_log()] Compression: none
2025-11-25T15:01:03.588 [DEBUG] [Thread-821] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:01:03.646 [DEBUG] [Thread-821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:01:03.647 [DEBUG] [Thread-821] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:01:03.647 [DEBUG] [Thread-821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:01:03.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:01:03.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:01:03.702 [DEBUG] [Thread-821] [transport.py] [_log()] userauth is OK
2025-11-25T15:01:03.702 [DEBUG] [Thread-821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:01:03.702 [DEBUG] [Thread-821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:01:03.703 [DEBUG] [Thread-821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:01:03.703 [DEBUG] [Thread-821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:01:03.723 [INFO] [Thread-821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:01:03.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:01:03.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:01:04.471 [DEBUG] [Thread-821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:01:04.471 [DEBUG] [Thread-821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:01:04.519 [DEBUG] [Thread-821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:01:04.519 [DEBUG] [Thread-821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:01:04.528 [DEBUG] [Thread-821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:01:04.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:01:04.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:01:04.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:01:04.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:01:04.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:01:04.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:01:04.565 [DEBUG] [Thread-821] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:01:12.201 [DEBUG] [Thread-823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:01:17.524 [DEBUG] [Thread-824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:01:27.250 [DEBUG] [Thread-825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:01:34.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:01:34.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:01:34.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:01:35.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 1, 20), 36.84, 7.97, 0.0, 5.79, 26.7, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:01:35.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:01:20
2025-11-25T15:01:35.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:01:35.515 [DEBUG] [Thread-826] [transport.py] [_log()] starting thread (client mode): 0x737c7b20
2025-11-25T15:01:35.515 [DEBUG] [Thread-826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:01:35.537 [DEBUG] [Thread-826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:01:35.538 [INFO] [Thread-826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:01:35.540 [DEBUG] [Thread-826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:01:35.540 [DEBUG] [Thread-826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] client lang: <none>
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] server lang: <none>
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] kex follows: False
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:01:35.541 [DEBUG] [Thread-826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:01:35.542 [DEBUG] [Thread-826] [transport.py] [_log()] Compression: none
2025-11-25T15:01:35.542 [DEBUG] [Thread-826] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:01:35.560 [DEBUG] [Thread-826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:01:35.560 [DEBUG] [Thread-826] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:01:35.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:01:35.562 [DEBUG] [Thread-826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:01:35.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:01:35.564 [DEBUG] [Thread-826] [transport.py] [_log()] userauth is OK
2025-11-25T15:01:35.564 [DEBUG] [Thread-826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:01:35.564 [DEBUG] [Thread-826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:01:35.564 [DEBUG] [Thread-826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:01:35.564 [DEBUG] [Thread-826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:01:35.603 [INFO] [Thread-826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:01:35.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:01:36.261 [DEBUG] [Thread-826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:01:36.261 [DEBUG] [Thread-826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:01:36.262 [DEBUG] [Thread-826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:01:36.302 [DEBUG] [Thread-826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:01:36.302 [DEBUG] [Thread-826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:01:36.306 [DEBUG] [Thread-826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:01:36.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:01:36.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:01:36.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:01:36.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:01:36.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:01:36.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:01:36.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:01:36.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:01:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:01:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.542462 -999.00  +26.40   3.19     13   -3.90 1 1 1 1 1   888    0 31.16 45.00 ----- 3.5 3.2 46.6 8.3 34.3 -30.7 34.1 -31.4 35.4 -30.0 36.0 -30.4
2025-11-25T15:01:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:01:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:01:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.542462
2025-11-25T15:01:36.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:01:36.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:01:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:01:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:01:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:01:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:01:20', tmtdew=36.84, humidity=7.97, cloud=0.0, wind=5.79, temperature=26.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:01:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:01:36.331 [DEBUG] [Thread-826] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:01:36.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:01:36.433 [DEBUG] [Thread-829] [transport.py] [_log()] starting thread (client mode): 0x761d97b0
2025-11-25T15:01:36.433 [DEBUG] [Thread-829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:01:36.448 [DEBUG] [Thread-829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:01:36.449 [INFO] [Thread-829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:01:36.456 [DEBUG] [Thread-829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:01:36.456 [DEBUG] [Thread-829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:01:36.456 [DEBUG] [Thread-829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:01:36.456 [DEBUG] [Thread-829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:01:36.456 [DEBUG] [Thread-829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] client lang: <none>
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] server lang: <none>
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] kex follows: False
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] Compression: none
2025-11-25T15:01:36.457 [DEBUG] [Thread-829] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:01:36.514 [DEBUG] [Thread-829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:01:36.514 [DEBUG] [Thread-829] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:01:36.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:01:36.516 [DEBUG] [Thread-829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:01:36.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:01:36.570 [DEBUG] [Thread-829] [transport.py] [_log()] userauth is OK
2025-11-25T15:01:36.570 [DEBUG] [Thread-829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:01:36.571 [DEBUG] [Thread-829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:01:36.571 [DEBUG] [Thread-829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:01:36.571 [DEBUG] [Thread-829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:01:36.589 [INFO] [Thread-829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:01:36.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:01:36.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:01:37.402 [DEBUG] [Thread-829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:01:37.403 [DEBUG] [Thread-829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:01:37.451 [DEBUG] [Thread-829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:01:37.451 [DEBUG] [Thread-829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:01:37.460 [DEBUG] [Thread-829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:01:37.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:01:37.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:01:37.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:01:37.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:01:37.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:01:37.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:01:37.497 [DEBUG] [Thread-829] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:01:42.294 [DEBUG] [Thread-831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:01:57.357 [DEBUG] [Thread-832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:02:07.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:02:07.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:02:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:02:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 1, 52), 36.98, 7.84, 0.0, 6.09, 26.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:02:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:01:52
2025-11-25T15:02:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:02:08.453 [DEBUG] [Thread-833] [transport.py] [_log()] starting thread (client mode): 0x7374dc00
2025-11-25T15:02:08.453 [DEBUG] [Thread-833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:02:08.472 [DEBUG] [Thread-833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:02:08.472 [INFO] [Thread-833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:02:08.475 [DEBUG] [Thread-833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:02:08.475 [DEBUG] [Thread-833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:02:08.475 [DEBUG] [Thread-833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:02:08.475 [DEBUG] [Thread-833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:02:08.475 [DEBUG] [Thread-833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:02:08.475 [DEBUG] [Thread-833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:02:08.475 [DEBUG] [Thread-833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:02:08.475 [DEBUG] [Thread-833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:02:08.475 [DEBUG] [Thread-833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] client lang: <none>
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] server lang: <none>
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] kex follows: False
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] Compression: none
2025-11-25T15:02:08.476 [DEBUG] [Thread-833] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:02:08.495 [DEBUG] [Thread-833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:02:08.495 [DEBUG] [Thread-833] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:02:08.496 [DEBUG] [Thread-833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:02:08.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:02:08.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:02:08.498 [DEBUG] [Thread-833] [transport.py] [_log()] userauth is OK
2025-11-25T15:02:08.498 [DEBUG] [Thread-833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:02:08.498 [DEBUG] [Thread-833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:02:08.498 [DEBUG] [Thread-833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:02:08.498 [DEBUG] [Thread-833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:02:08.516 [INFO] [Thread-833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:02:08.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:02:09.127 [DEBUG] [Thread-833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:02:09.127 [DEBUG] [Thread-833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:02:09.127 [DEBUG] [Thread-833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:02:09.168 [DEBUG] [Thread-833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:02:09.168 [DEBUG] [Thread-833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:02:09.172 [DEBUG] [Thread-833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:02:09.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:02:09.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:02:09.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:02:09.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:02:09.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:02:09.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:02:09.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:02:09.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:02:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:02:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.542809 -999.00  +26.50   2.71     13   -3.90 1 1 1 1 1   888    0 31.56 44.85 ----- 5.2 2.7 104.7 6.1 34.2 -33.3 34.2 -30.7 35.4 -29.7 36.1 -30.4
2025-11-25T15:02:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:02:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:02:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.542809
2025-11-25T15:02:09.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:02:09.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:02:09.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:02:09.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:02:09.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:02:09.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:01:52', tmtdew=36.98, humidity=7.84, cloud=0.0, wind=6.09, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:01:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:02:09.197 [DEBUG] [Thread-833] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:02:09.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:02:09.305 [DEBUG] [Thread-836] [transport.py] [_log()] starting thread (client mode): 0x73783550
2025-11-25T15:02:09.306 [DEBUG] [Thread-836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:02:09.320 [DEBUG] [Thread-836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:02:09.320 [INFO] [Thread-836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:02:09.331 [DEBUG] [Thread-836] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:02:09.331 [DEBUG] [Thread-836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:02:09.331 [DEBUG] [Thread-836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:02:09.331 [DEBUG] [Thread-836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:02:09.332 [DEBUG] [Thread-836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:02:09.332 [DEBUG] [Thread-836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:02:09.332 [DEBUG] [Thread-836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:02:09.332 [DEBUG] [Thread-836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:02:09.332 [DEBUG] [Thread-836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:02:09.332 [DEBUG] [Thread-836] [transport.py] [_log()] client lang: <none>
2025-11-25T15:02:09.332 [DEBUG] [Thread-836] [transport.py] [_log()] server lang: <none>
2025-11-25T15:02:09.332 [DEBUG] [Thread-836] [transport.py] [_log()] kex follows: False
2025-11-25T15:02:09.332 [DEBUG] [Thread-836] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:02:09.333 [DEBUG] [Thread-836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:02:09.333 [DEBUG] [Thread-836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:02:09.333 [DEBUG] [Thread-836] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:02:09.333 [DEBUG] [Thread-836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:02:09.333 [DEBUG] [Thread-836] [transport.py] [_log()] Compression: none
2025-11-25T15:02:09.333 [DEBUG] [Thread-836] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:02:09.393 [DEBUG] [Thread-836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:02:09.394 [DEBUG] [Thread-836] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:02:09.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:02:09.395 [DEBUG] [Thread-836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:02:09.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:02:09.454 [DEBUG] [Thread-836] [transport.py] [_log()] userauth is OK
2025-11-25T15:02:09.454 [DEBUG] [Thread-836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:02:09.455 [DEBUG] [Thread-836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:02:09.455 [DEBUG] [Thread-836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:02:09.455 [DEBUG] [Thread-836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:02:09.474 [INFO] [Thread-836] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:02:09.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:02:09.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:02:10.238 [DEBUG] [Thread-836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:02:10.238 [DEBUG] [Thread-836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:02:10.287 [DEBUG] [Thread-836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:02:10.287 [DEBUG] [Thread-836] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:02:10.297 [DEBUG] [Thread-836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:02:10.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:02:10.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:02:10.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:02:10.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:02:10.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:02:10.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:02:10.342 [DEBUG] [Thread-836] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:02:12.399 [DEBUG] [Thread-838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:02:18.261 [DEBUG] [Thread-839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:02:27.471 [DEBUG] [Thread-840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:02:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:02:40.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:02:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:02:41.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 2, 24), 37.31, 7.67, 0.0, 8.15, 26.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:02:41.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:02:24
2025-11-25T15:02:41.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:02:41.355 [DEBUG] [Thread-841] [transport.py] [_log()] starting thread (client mode): 0x7376f700
2025-11-25T15:02:41.355 [DEBUG] [Thread-841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:02:41.366 [DEBUG] [Thread-841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:02:41.366 [INFO] [Thread-841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] client lang: <none>
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] server lang: <none>
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] kex follows: False
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:02:41.373 [DEBUG] [Thread-841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:02:41.374 [DEBUG] [Thread-841] [transport.py] [_log()] Compression: none
2025-11-25T15:02:41.374 [DEBUG] [Thread-841] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:02:41.381 [DEBUG] [Thread-841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:02:41.381 [DEBUG] [Thread-841] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:02:41.382 [DEBUG] [Thread-841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:02:41.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:02:41.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:02:41.382 [DEBUG] [Thread-841] [transport.py] [_log()] userauth is OK
2025-11-25T15:02:41.382 [DEBUG] [Thread-841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:02:41.383 [DEBUG] [Thread-841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:02:41.383 [DEBUG] [Thread-841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:02:41.383 [DEBUG] [Thread-841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:02:41.393 [INFO] [Thread-841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:02:41.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:02:42.004 [DEBUG] [Thread-841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:02:42.004 [DEBUG] [Thread-841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:02:42.004 [DEBUG] [Thread-841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:02:42.045 [DEBUG] [Thread-841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:02:42.045 [DEBUG] [Thread-841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:02:42.048 [DEBUG] [Thread-841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:02:42.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:02:42.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:02:42.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:02:42.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:02:42.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:02:42.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:02:42.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.543157 -999.00  +26.50   7.18     13   -4.00 1 1 1 1 1   888    0 32.03 46.00 ----- 5.9 7.2 67.6 10.3 34.4 -30.6 34.2 -30.7 35.5 -30.4 36.2 -30.2
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.543157
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:02:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:02:24', tmtdew=37.31, humidity=7.67, cloud=0.0, wind=8.15, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:02:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:02:42.067 [DEBUG] [Thread-841] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:02:42.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:02:42.159 [DEBUG] [Thread-844] [transport.py] [_log()] starting thread (client mode): 0x7376f340
2025-11-25T15:02:42.159 [DEBUG] [Thread-844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:02:42.174 [DEBUG] [Thread-844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:02:42.174 [INFO] [Thread-844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:02:42.181 [DEBUG] [Thread-844] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:02:42.181 [DEBUG] [Thread-844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:02:42.181 [DEBUG] [Thread-844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] client lang: <none>
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] server lang: <none>
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] kex follows: False
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] Compression: none
2025-11-25T15:02:42.182 [DEBUG] [Thread-844] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:02:42.239 [DEBUG] [Thread-844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:02:42.239 [DEBUG] [Thread-844] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:02:42.240 [DEBUG] [Thread-844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:02:42.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:02:42.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:02:42.296 [DEBUG] [Thread-844] [transport.py] [_log()] userauth is OK
2025-11-25T15:02:42.296 [DEBUG] [Thread-844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:02:42.296 [DEBUG] [Thread-844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:02:42.296 [DEBUG] [Thread-844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:02:42.296 [DEBUG] [Thread-844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:02:42.314 [INFO] [Thread-844] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:02:42.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:02:42.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:02:42.513 [DEBUG] [Thread-846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:02:43.092 [DEBUG] [Thread-844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:02:43.092 [DEBUG] [Thread-844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:02:43.140 [DEBUG] [Thread-844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:02:43.140 [DEBUG] [Thread-844] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:02:43.150 [DEBUG] [Thread-844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:02:43.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:02:43.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:02: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') -> 00000000
2025-11-25T15:02:43.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:02:43.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:02:43.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:02:43.187 [DEBUG] [Thread-844] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:02:57.590 [DEBUG] [Thread-847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:03:12.629 [DEBUG] [Thread-848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:03:13.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:03:13.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:03:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:03:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 2, 56), 37.55, 7.61, 0.0, 6.86, 27.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:03:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:02:56
2025-11-25T15:03:14.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:03:14.163 [DEBUG] [Thread-849] [transport.py] [_log()] starting thread (client mode): 0x7378f7f0
2025-11-25T15:03:14.163 [DEBUG] [Thread-849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:03:14.184 [DEBUG] [Thread-849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:03:14.184 [INFO] [Thread-849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] client lang: <none>
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] server lang: <none>
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] kex follows: False
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] Compression: none
2025-11-25T15:03:14.187 [DEBUG] [Thread-849] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:03:14.204 [DEBUG] [Thread-849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:03:14.204 [DEBUG] [Thread-849] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:03:14.204 [DEBUG] [Thread-849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:03:14.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:03:14.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:03:14.205 [DEBUG] [Thread-849] [transport.py] [_log()] userauth is OK
2025-11-25T15:03:14.205 [DEBUG] [Thread-849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:03:14.205 [DEBUG] [Thread-849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:03:14.205 [DEBUG] [Thread-849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:03:14.205 [DEBUG] [Thread-849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:03:14.215 [INFO] [Thread-849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:03:14.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:03:14.856 [DEBUG] [Thread-849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:03:14.856 [DEBUG] [Thread-849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:03:14.856 [DEBUG] [Thread-849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:03:14.897 [DEBUG] [Thread-849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:03:14.897 [DEBUG] [Thread-849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:03:14.899 [DEBUG] [Thread-849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:03:14.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:03:14.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:03:14.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:03:14.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:03:14.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:03:14.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:03:14.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.543504 -999.00  +26.70   6.10     13   -3.80 1 1 1 1 1   888    0 31.54 46.67 ----- 4.7 6.1 88.2 9.3 34.5 -30.5 34.4 -30.3 35.6 -29.4 36.3 -30.2
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.543504
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:03:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:02:56', tmtdew=37.55, humidity=7.61, cloud=0.0, wind=6.86, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:02:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:03:14.918 [DEBUG] [Thread-849] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:03:14.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:03:15.010 [DEBUG] [Thread-852] [transport.py] [_log()] starting thread (client mode): 0x761d9a50
2025-11-25T15:03:15.010 [DEBUG] [Thread-852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:03:15.025 [DEBUG] [Thread-852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:03:15.025 [INFO] [Thread-852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:03:15.032 [DEBUG] [Thread-852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:03:15.032 [DEBUG] [Thread-852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:03:15.032 [DEBUG] [Thread-852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:03:15.032 [DEBUG] [Thread-852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:03:15.032 [DEBUG] [Thread-852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:03:15.032 [DEBUG] [Thread-852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:03:15.032 [DEBUG] [Thread-852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:03:15.032 [DEBUG] [Thread-852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] client lang: <none>
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] server lang: <none>
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] kex follows: False
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] Compression: none
2025-11-25T15:03:15.033 [DEBUG] [Thread-852] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:03:15.094 [DEBUG] [Thread-852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:03:15.094 [DEBUG] [Thread-852] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:03:15.094 [DEBUG] [Thread-852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:03:15.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:03:15.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:03:15.152 [DEBUG] [Thread-852] [transport.py] [_log()] userauth is OK
2025-11-25T15:03:15.152 [DEBUG] [Thread-852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:03:15.152 [DEBUG] [Thread-852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:03:15.152 [DEBUG] [Thread-852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:03:15.152 [DEBUG] [Thread-852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:03:15.165 [INFO] [Thread-852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:03:15.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:03:15.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:03:15.969 [DEBUG] [Thread-852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:03:15.969 [DEBUG] [Thread-852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:03:16.017 [DEBUG] [Thread-852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:03:16.017 [DEBUG] [Thread-852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:03:16.025 [DEBUG] [Thread-852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:03:16.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:03:16.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:03:16.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:03:16.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:03:16.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:03:16.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:03:16.056 [DEBUG] [Thread-852] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:03:18.784 [DEBUG] [Thread-854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:03:27.665 [DEBUG] [Thread-855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:03:42.731 [DEBUG] [Thread-856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:03:46.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:03:46.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:03:46.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:03:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 3, 28), 37.77, 7.49, 0.0, 11.17, 27.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:03:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:03:28
2025-11-25T15:03:46.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:03:47.026 [DEBUG] [Thread-857] [transport.py] [_log()] starting thread (client mode): 0x761d9a80
2025-11-25T15:03:47.026 [DEBUG] [Thread-857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:03:47.047 [DEBUG] [Thread-857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:03:47.047 [INFO] [Thread-857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:03:47.050 [DEBUG] [Thread-857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] client lang: <none>
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] server lang: <none>
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] kex follows: False
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:03:47.051 [DEBUG] [Thread-857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:03:47.052 [DEBUG] [Thread-857] [transport.py] [_log()] Compression: none
2025-11-25T15:03:47.052 [DEBUG] [Thread-857] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:03:47.070 [DEBUG] [Thread-857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:03:47.071 [DEBUG] [Thread-857] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:03:47.071 [DEBUG] [Thread-857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:03:47.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:03:47.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:03:47.073 [DEBUG] [Thread-857] [transport.py] [_log()] userauth is OK
2025-11-25T15:03:47.074 [DEBUG] [Thread-857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:03:47.074 [DEBUG] [Thread-857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:03:47.074 [DEBUG] [Thread-857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:03:47.074 [DEBUG] [Thread-857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:03:47.093 [INFO] [Thread-857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:03:47.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:03:47.862 [DEBUG] [Thread-857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:03:47.863 [DEBUG] [Thread-857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:03:47.863 [DEBUG] [Thread-857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:03:47.904 [DEBUG] [Thread-857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:03:47.904 [DEBUG] [Thread-857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:03:47.909 [DEBUG] [Thread-857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:03:47.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:03:47.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:03:47.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:03:47.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:03:47.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:03:47.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:03:47.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:03:47.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:03:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:03:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.543851 -999.00  +26.70   4.22     13   -3.80 1 1 1 1 1   888    0 31.52 47.33 ----- 3.4 4.2 92.4 7.1 34.5 -30.4 34.5 -31.1 35.7 -29.0 36.5 -30.6
2025-11-25T15:03:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:03:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:03:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.543851
2025-11-25T15:03:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:03:47.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:03:47.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:03:47.928 [DEBUG] [Thread-857] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:03:47.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:03:47.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:03:47.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:03:28', tmtdew=37.77, humidity=7.49, cloud=0.0, wind=11.17, temperature=27.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:03:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:03:48.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:03:48.035 [DEBUG] [Thread-860] [transport.py] [_log()] starting thread (client mode): 0x7374c6a0
2025-11-25T15:03:48.035 [DEBUG] [Thread-860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:03:48.055 [DEBUG] [Thread-860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:03:48.055 [INFO] [Thread-860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:03:48.064 [DEBUG] [Thread-860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] client lang: <none>
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] server lang: <none>
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] kex follows: False
2025-11-25T15:03:48.065 [DEBUG] [Thread-860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:03:48.066 [DEBUG] [Thread-860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:03:48.066 [DEBUG] [Thread-860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:03:48.066 [DEBUG] [Thread-860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:03:48.066 [DEBUG] [Thread-860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:03:48.066 [DEBUG] [Thread-860] [transport.py] [_log()] Compression: none
2025-11-25T15:03:48.066 [DEBUG] [Thread-860] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:03:48.120 [DEBUG] [Thread-860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:03:48.120 [DEBUG] [Thread-860] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:03:48.121 [DEBUG] [Thread-860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:03:48.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:03:48.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:03:48.176 [DEBUG] [Thread-860] [transport.py] [_log()] userauth is OK
2025-11-25T15:03:48.176 [DEBUG] [Thread-860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:03:48.177 [DEBUG] [Thread-860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:03:48.177 [DEBUG] [Thread-860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:03:48.177 [DEBUG] [Thread-860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:03:48.196 [INFO] [Thread-860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:03:48.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:03:48.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:03:48.987 [DEBUG] [Thread-860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:03:48.987 [DEBUG] [Thread-860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:03:49.036 [DEBUG] [Thread-860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:03:49.036 [DEBUG] [Thread-860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:03:49.045 [DEBUG] [Thread-860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:03:49.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:03:49.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:03:49.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:03:49.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:03:49.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:03:49.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:03:49.083 [DEBUG] [Thread-860] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:03:57.772 [DEBUG] [Thread-862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:04:12.837 [DEBUG] [Thread-863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:04:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:04:19.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:04:19.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:04:19.545 [DEBUG] [Thread-864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:04:19.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 3, 28), 37.77, 7.49, 0.0, 11.17, 27.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:04:19.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:03:28
2025-11-25T15:04:19.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:04:20.092 [DEBUG] [Thread-865] [transport.py] [_log()] starting thread (client mode): 0x7376eef0
2025-11-25T15:04:20.092 [DEBUG] [Thread-865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:04:20.112 [DEBUG] [Thread-865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:04:20.113 [INFO] [Thread-865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] client lang: <none>
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] server lang: <none>
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] kex follows: False
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:04:20.116 [DEBUG] [Thread-865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:04:20.117 [DEBUG] [Thread-865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:04:20.117 [DEBUG] [Thread-865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:04:20.117 [DEBUG] [Thread-865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:04:20.117 [DEBUG] [Thread-865] [transport.py] [_log()] Compression: none
2025-11-25T15:04:20.117 [DEBUG] [Thread-865] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:04:20.134 [DEBUG] [Thread-865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:04:20.135 [DEBUG] [Thread-865] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:04:20.135 [DEBUG] [Thread-865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:04:20.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:04:20.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:04:20.137 [DEBUG] [Thread-865] [transport.py] [_log()] userauth is OK
2025-11-25T15:04:20.137 [DEBUG] [Thread-865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:04:20.137 [DEBUG] [Thread-865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:04:20.137 [DEBUG] [Thread-865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:04:20.137 [DEBUG] [Thread-865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:04:20.159 [INFO] [Thread-865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:04:20.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:04:20.829 [DEBUG] [Thread-865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:04:20.830 [DEBUG] [Thread-865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:04:20.830 [DEBUG] [Thread-865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:04:20.870 [DEBUG] [Thread-865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:04:20.871 [DEBUG] [Thread-865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:04:20.873 [DEBUG] [Thread-865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:04:20.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:04:20.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:04:20.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:04:20.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:04:20.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:04:20.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:04:20.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:04:20.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:04:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:04:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.544198 -999.00  +26.80   7.75     13   -3.80 1 1 1 1 1   888    0 31.24 45.42 ----- 7.5 7.8 37.4 8.3 34.6 -31.4 34.5 -31.7 35.9 -29.0 36.6 -30.1
2025-11-25T15:04:20.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:04:20.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:04:20.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.544198
2025-11-25T15:04:20.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:04:20.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:04:20.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:04:20.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:04:20.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:04:20.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:03:28', tmtdew=37.77, humidity=7.49, cloud=0.0, wind=11.17, temperature=27.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:03:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:04:20.900 [DEBUG] [Thread-865] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:04:20.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:04:21.006 [DEBUG] [Thread-868] [transport.py] [_log()] starting thread (client mode): 0x761d9a80
2025-11-25T15:04:21.007 [DEBUG] [Thread-868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:04:21.021 [DEBUG] [Thread-868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:04:21.021 [INFO] [Thread-868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:04:21.029 [DEBUG] [Thread-868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:04:21.029 [DEBUG] [Thread-868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:04:21.029 [DEBUG] [Thread-868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:04:21.030 [DEBUG] [Thread-868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:04:21.030 [DEBUG] [Thread-868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:04:21.030 [DEBUG] [Thread-868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:04:21.030 [DEBUG] [Thread-868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:04:21.030 [DEBUG] [Thread-868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:04:21.030 [DEBUG] [Thread-868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:04:21.030 [DEBUG] [Thread-868] [transport.py] [_log()] client lang: <none>
2025-11-25T15:04:21.030 [DEBUG] [Thread-868] [transport.py] [_log()] server lang: <none>
2025-11-25T15:04:21.031 [DEBUG] [Thread-868] [transport.py] [_log()] kex follows: False
2025-11-25T15:04:21.031 [DEBUG] [Thread-868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:04:21.031 [DEBUG] [Thread-868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:04:21.031 [DEBUG] [Thread-868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:04:21.031 [DEBUG] [Thread-868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:04:21.031 [DEBUG] [Thread-868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:04:21.032 [DEBUG] [Thread-868] [transport.py] [_log()] Compression: none
2025-11-25T15:04:21.032 [DEBUG] [Thread-868] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:04:21.088 [DEBUG] [Thread-868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:04:21.089 [DEBUG] [Thread-868] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:04:21.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:04:21.090 [DEBUG] [Thread-868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:04:21.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:04:21.148 [DEBUG] [Thread-868] [transport.py] [_log()] userauth is OK
2025-11-25T15:04:21.148 [DEBUG] [Thread-868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:04:21.148 [DEBUG] [Thread-868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:04:21.148 [DEBUG] [Thread-868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:04:21.148 [DEBUG] [Thread-868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:04:21.166 [INFO] [Thread-868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:04:21.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:04:21.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:04:21.903 [DEBUG] [Thread-868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:04:21.903 [DEBUG] [Thread-868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:04:21.952 [DEBUG] [Thread-868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:04:21.952 [DEBUG] [Thread-868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:04:21.961 [DEBUG] [Thread-868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:04:21.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:04:21.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:04:21.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:04:21.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:04:21.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:04:21.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:04:21.999 [DEBUG] [Thread-868] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:04:27.881 [DEBUG] [Thread-870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:04:42.943 [DEBUG] [Thread-871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:04:51.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:04:51.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:04:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:04:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 4, 32), 38.11, 7.44, 0.0, 10.6, 27.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:04:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:04:32
2025-11-25T15:04:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:04:52.932 [DEBUG] [Thread-872] [transport.py] [_log()] starting thread (client mode): 0x7376e860
2025-11-25T15:04:52.932 [DEBUG] [Thread-872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:04:52.953 [DEBUG] [Thread-872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:04:52.954 [INFO] [Thread-872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:04:52.957 [DEBUG] [Thread-872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:04:52.957 [DEBUG] [Thread-872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:04:52.957 [DEBUG] [Thread-872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:04:52.957 [DEBUG] [Thread-872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:04:52.957 [DEBUG] [Thread-872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:04:52.957 [DEBUG] [Thread-872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] client lang: <none>
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] server lang: <none>
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] kex follows: False
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] Compression: none
2025-11-25T15:04:52.958 [DEBUG] [Thread-872] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:04:52.976 [DEBUG] [Thread-872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:04:52.977 [DEBUG] [Thread-872] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:04:52.977 [DEBUG] [Thread-872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:04:52.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:04:52.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:04:52.979 [DEBUG] [Thread-872] [transport.py] [_log()] userauth is OK
2025-11-25T15:04:52.979 [DEBUG] [Thread-872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:04:52.980 [DEBUG] [Thread-872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:04:52.980 [DEBUG] [Thread-872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:04:52.980 [DEBUG] [Thread-872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:04:53.005 [INFO] [Thread-872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:04:53.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:04:53.754 [DEBUG] [Thread-872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:04:53.755 [DEBUG] [Thread-872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:04:53.755 [DEBUG] [Thread-872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:04:53.796 [DEBUG] [Thread-872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:04:53.796 [DEBUG] [Thread-872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:04:53.799 [DEBUG] [Thread-872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:04:53.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:04:53.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:04:53.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:04:53.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:04:53.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:04:53.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:04:53.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:04:53.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:04:53.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:04:53.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.544545 -999.00  +27.00   6.96     12   -4.10 1 1 1 1 1   888    0 31.85 46.84 ----- 5.9 7.0 36.6 8.8 34.8 -31.3 34.5 -31.4 35.9 -30.7 36.6 -29.9
2025-11-25T15:04:53.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:04:53.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:04:53.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.544545
2025-11-25T15:04:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:04:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:04:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:04:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:04:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:04:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:04:32', tmtdew=38.11, humidity=7.44, cloud=0.0, wind=10.6, temperature=27.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:04:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:04:53.828 [DEBUG] [Thread-872] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:04:53.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:04:53.930 [DEBUG] [Thread-875] [transport.py] [_log()] starting thread (client mode): 0x737e96c0
2025-11-25T15:04:53.930 [DEBUG] [Thread-875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:04:53.948 [DEBUG] [Thread-875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:04:53.949 [INFO] [Thread-875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:04:53.956 [DEBUG] [Thread-875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:04:53.956 [DEBUG] [Thread-875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] client lang: <none>
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] server lang: <none>
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] kex follows: False
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:04:53.957 [DEBUG] [Thread-875] [transport.py] [_log()] Compression: none
2025-11-25T15:04:53.958 [DEBUG] [Thread-875] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:04:54.015 [DEBUG] [Thread-875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:04:54.016 [DEBUG] [Thread-875] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:04:54.016 [DEBUG] [Thread-875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:04:54.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:04:54.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:04:54.071 [DEBUG] [Thread-875] [transport.py] [_log()] userauth is OK
2025-11-25T15:04:54.071 [DEBUG] [Thread-875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:04:54.072 [DEBUG] [Thread-875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:04:54.072 [DEBUG] [Thread-875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:04:54.072 [DEBUG] [Thread-875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:04:54.090 [INFO] [Thread-875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:04:54.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:04:54.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:04:54.848 [DEBUG] [Thread-875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:04:54.848 [DEBUG] [Thread-875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:04:54.896 [DEBUG] [Thread-875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:04:54.896 [DEBUG] [Thread-875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:04:54.905 [DEBUG] [Thread-875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:04:54.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:04:54.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:04:54.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:04:54.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:04:54.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:04:54.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:04:54.942 [DEBUG] [Thread-875] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:04:57.993 [DEBUG] [Thread-877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:05:13.062 [DEBUG] [Thread-878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:05:20.269 [DEBUG] [Thread-879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:05:24.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:05:24.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:05:24.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:05:25.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 5, 4), 38.21, 7.41, 0.0, 9.42, 27.51, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:05:25.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:05:04
2025-11-25T15:05:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:05:25.908 [DEBUG] [Thread-880] [transport.py] [_log()] starting thread (client mode): 0x7376d420
2025-11-25T15:05:25.909 [DEBUG] [Thread-880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:05:25.930 [DEBUG] [Thread-880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:05:25.930 [INFO] [Thread-880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:05:25.933 [DEBUG] [Thread-880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:05:25.933 [DEBUG] [Thread-880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:05:25.933 [DEBUG] [Thread-880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:05:25.933 [DEBUG] [Thread-880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:05:25.933 [DEBUG] [Thread-880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] client lang: <none>
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] server lang: <none>
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] kex follows: False
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] Compression: none
2025-11-25T15:05:25.934 [DEBUG] [Thread-880] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:05:25.952 [DEBUG] [Thread-880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:05:25.953 [DEBUG] [Thread-880] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:05:25.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:05:25.954 [DEBUG] [Thread-880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:05:25.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:05:25.956 [DEBUG] [Thread-880] [transport.py] [_log()] userauth is OK
2025-11-25T15:05:25.956 [DEBUG] [Thread-880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:05:25.957 [DEBUG] [Thread-880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:05:25.957 [DEBUG] [Thread-880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:05:25.957 [DEBUG] [Thread-880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:05:25.993 [INFO] [Thread-880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:05:25.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:05:26.652 [DEBUG] [Thread-880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:05:26.652 [DEBUG] [Thread-880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:05:26.653 [DEBUG] [Thread-880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:05:26.693 [DEBUG] [Thread-880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:05:26.693 [DEBUG] [Thread-880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:05:26.696 [DEBUG] [Thread-880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:05:26.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:05:26.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:05:26.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:05:26.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:05:26.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:05:26.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:05:26.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:05:26.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:05:26.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:05:26.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.544893 -999.00  +27.00   7.93     12   -4.20 1 1 1 1 1   888    0 32.01 44.90 ----- 20.1 7.9 22.0 11.8 34.7 -31.2 34.5 -32.5 35.9 -31.1 36.5 -30.6
2025-11-25T15:05:26.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:05:26.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:05:26.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.544893
2025-11-25T15:05:26.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:05:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:05:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:05:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:05:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:05:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:05:04', tmtdew=38.21, humidity=7.41, cloud=0.0, wind=9.42, temperature=27.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:04:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:05:26.724 [DEBUG] [Thread-880] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:05:26.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:05:26.827 [DEBUG] [Thread-883] [transport.py] [_log()] starting thread (client mode): 0x737eb8e0
2025-11-25T15:05:26.828 [DEBUG] [Thread-883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:05:26.842 [DEBUG] [Thread-883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:05:26.842 [INFO] [Thread-883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:05:26.850 [DEBUG] [Thread-883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:05:26.850 [DEBUG] [Thread-883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:05:26.850 [DEBUG] [Thread-883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:05:26.850 [DEBUG] [Thread-883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:05:26.850 [DEBUG] [Thread-883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] client lang: <none>
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] server lang: <none>
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] kex follows: False
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] Compression: none
2025-11-25T15:05:26.851 [DEBUG] [Thread-883] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:05:26.911 [DEBUG] [Thread-883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:05:26.911 [DEBUG] [Thread-883] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:05:26.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:05:26.913 [DEBUG] [Thread-883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:05:26.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:05:26.971 [DEBUG] [Thread-883] [transport.py] [_log()] userauth is OK
2025-11-25T15:05:26.971 [DEBUG] [Thread-883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:05:26.972 [DEBUG] [Thread-883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:05:26.972 [DEBUG] [Thread-883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:05:26.972 [DEBUG] [Thread-883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:05:26.994 [INFO] [Thread-883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:05:26.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:05:26.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:05:27.820 [DEBUG] [Thread-883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:05:27.821 [DEBUG] [Thread-883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:05:27.869 [DEBUG] [Thread-883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:05:27.869 [DEBUG] [Thread-883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:05:27.878 [DEBUG] [Thread-883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:05:27.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:05:27.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:05:27.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:05:27.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:05:27.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:05:27.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:05:27.919 [DEBUG] [Thread-883] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:05:28.107 [DEBUG] [Thread-885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:05:43.168 [DEBUG] [Thread-886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:05:57.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:05:57.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:05:57.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:05:58.204 [DEBUG] [Thread-887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:05:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 5, 36), 38.48, 7.44, 0.0, 10.23, 27.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:05:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:05:36
2025-11-25T15:05:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:05:58.878 [DEBUG] [Thread-888] [transport.py] [_log()] starting thread (client mode): 0x737eb190
2025-11-25T15:05:58.878 [DEBUG] [Thread-888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:05:58.897 [DEBUG] [Thread-888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:05:58.898 [INFO] [Thread-888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:05:58.901 [DEBUG] [Thread-888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:05:58.901 [DEBUG] [Thread-888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:05:58.901 [DEBUG] [Thread-888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] client lang: <none>
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] server lang: <none>
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] kex follows: False
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] Compression: none
2025-11-25T15:05:58.902 [DEBUG] [Thread-888] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:05:58.920 [DEBUG] [Thread-888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:05:58.921 [DEBUG] [Thread-888] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:05:58.922 [DEBUG] [Thread-888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:05:58.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:05:58.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:05:58.924 [DEBUG] [Thread-888] [transport.py] [_log()] userauth is OK
2025-11-25T15:05:58.924 [DEBUG] [Thread-888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:05:58.924 [DEBUG] [Thread-888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:05:58.924 [DEBUG] [Thread-888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:05:58.924 [DEBUG] [Thread-888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:05:58.962 [INFO] [Thread-888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:05:58.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:05:59.804 [DEBUG] [Thread-888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:05:59.804 [DEBUG] [Thread-888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:05:59.804 [DEBUG] [Thread-888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:05:59.845 [DEBUG] [Thread-888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:05:59.845 [DEBUG] [Thread-888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:05:59.848 [DEBUG] [Thread-888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:05:59.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:05:59.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:05:59.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:05:59.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:05:59.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:05:59.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:05:59.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:05:59.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:05:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:05:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.545240 -999.00  +27.10  16.16     12   -4.40 1 1 1 1 1   888    0 31.88 44.92 ----- 13.5 16.2 58.0 22.1 34.7 -32.4 34.3 -33.6 35.6 -32.0 36.5 -30.6
2025-11-25T15:05:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:05:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:05:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.545240
2025-11-25T15:05:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:05:59.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:05:59.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:05:59.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:05:59.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:05:59.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:05:36', tmtdew=38.48, humidity=7.44, cloud=0.0, wind=10.23, temperature=27.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:05:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:05:59.874 [DEBUG] [Thread-888] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:05:59.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:05:59.976 [DEBUG] [Thread-891] [transport.py] [_log()] starting thread (client mode): 0x737e9a80
2025-11-25T15:05:59.976 [DEBUG] [Thread-891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:05:59.990 [DEBUG] [Thread-891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:05:59.991 [INFO] [Thread-891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:05:59.998 [DEBUG] [Thread-891] [transport.py] [_log()] client lang: <none>
2025-11-25T15:05:59.999 [DEBUG] [Thread-891] [transport.py] [_log()] server lang: <none>
2025-11-25T15:05:59.999 [DEBUG] [Thread-891] [transport.py] [_log()] kex follows: False
2025-11-25T15:05:59.999 [DEBUG] [Thread-891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:05:59.999 [DEBUG] [Thread-891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:05:59.999 [DEBUG] [Thread-891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:05:59.999 [DEBUG] [Thread-891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:06:00.000 [DEBUG] [Thread-891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:06:00.000 [DEBUG] [Thread-891] [transport.py] [_log()] Compression: none
2025-11-25T15:06:00.000 [DEBUG] [Thread-891] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:06:00.058 [DEBUG] [Thread-891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:06:00.058 [DEBUG] [Thread-891] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:06:00.059 [DEBUG] [Thread-891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:06:00.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:06:00.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:06:00.114 [DEBUG] [Thread-891] [transport.py] [_log()] userauth is OK
2025-11-25T15:06:00.114 [DEBUG] [Thread-891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:06:00.114 [DEBUG] [Thread-891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:06:00.114 [DEBUG] [Thread-891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:06:00.114 [DEBUG] [Thread-891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:06:00.133 [INFO] [Thread-891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:06:00.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:06:00.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:06:00.892 [DEBUG] [Thread-891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:06:00.892 [DEBUG] [Thread-891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:06:00.940 [DEBUG] [Thread-891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:06:00.940 [DEBUG] [Thread-891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:06:00.949 [DEBUG] [Thread-891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:06:00.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:06:00.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:06:00.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:06:00.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:06:00.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:06:00.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:06:00.986 [DEBUG] [Thread-891] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:06:13.244 [DEBUG] [Thread-893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:06:20.783 [DEBUG] [Thread-894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:06:28.308 [DEBUG] [Thread-895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:06:31.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:06:31.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:06:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:06:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 6, 8), 38.76, 7.29, 0.0, 7.02, 27.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:06:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:06:08
2025-11-25T15:06:31.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:06:31.959 [DEBUG] [Thread-896] [transport.py] [_log()] starting thread (client mode): 0x737eab00
2025-11-25T15:06:31.959 [DEBUG] [Thread-896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:06:31.979 [DEBUG] [Thread-896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:06:31.979 [INFO] [Thread-896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] client lang: <none>
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] server lang: <none>
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] kex follows: False
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:06:31.983 [DEBUG] [Thread-896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:06:31.984 [DEBUG] [Thread-896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:06:31.984 [DEBUG] [Thread-896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:06:31.984 [DEBUG] [Thread-896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:06:31.984 [DEBUG] [Thread-896] [transport.py] [_log()] Compression: none
2025-11-25T15:06:31.984 [DEBUG] [Thread-896] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:06:32.002 [DEBUG] [Thread-896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:06:32.003 [DEBUG] [Thread-896] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:06:32.003 [DEBUG] [Thread-896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:06:32.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:06:32.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:06:32.006 [DEBUG] [Thread-896] [transport.py] [_log()] userauth is OK
2025-11-25T15:06:32.006 [DEBUG] [Thread-896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:06:32.006 [DEBUG] [Thread-896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:06:32.006 [DEBUG] [Thread-896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:06:32.006 [DEBUG] [Thread-896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:06:32.031 [INFO] [Thread-896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:06:32.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:06:32.652 [DEBUG] [Thread-896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:06:32.652 [DEBUG] [Thread-896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:06:32.652 [DEBUG] [Thread-896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:06:32.693 [DEBUG] [Thread-896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:06:32.693 [DEBUG] [Thread-896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:06:32.696 [DEBUG] [Thread-896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:06:32.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:06:32.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:06:32.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:06:32.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:06:32.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:06:32.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:06:32.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:06:32.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:06:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:06:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.545587 -999.00  +26.90   7.08     12   -4.30 1 1 1 1 1   888    0 31.34 47.29 ----- 15.4 7.1 120.6 24.6 34.5 -31.6 34.3 -32.2 35.5 -29.8 36.2 -31.7
2025-11-25T15:06:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:06:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:06:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.545587
2025-11-25T15:06:32.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:06:32.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:06:32.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:06:32.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:06:32.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:06:32.722 [DEBUG] [Thread-896] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:06:32.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:06:08', tmtdew=38.76, humidity=7.29, cloud=0.0, wind=7.02, temperature=27.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:05:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:06:32.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:06:32.829 [DEBUG] [Thread-899] [transport.py] [_log()] starting thread (client mode): 0x737eb070
2025-11-25T15:06:32.829 [DEBUG] [Thread-899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:06:32.843 [DEBUG] [Thread-899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:06:32.844 [INFO] [Thread-899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:06:32.851 [DEBUG] [Thread-899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:06:32.851 [DEBUG] [Thread-899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] client lang: <none>
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] server lang: <none>
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] kex follows: False
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:06:32.852 [DEBUG] [Thread-899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:06:32.853 [DEBUG] [Thread-899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:06:32.853 [DEBUG] [Thread-899] [transport.py] [_log()] Compression: none
2025-11-25T15:06:32.853 [DEBUG] [Thread-899] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:06:32.911 [DEBUG] [Thread-899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:06:32.911 [DEBUG] [Thread-899] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:06:32.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:06:32.912 [DEBUG] [Thread-899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:06:32.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:06:32.966 [DEBUG] [Thread-899] [transport.py] [_log()] userauth is OK
2025-11-25T15:06:32.967 [DEBUG] [Thread-899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:06:32.967 [DEBUG] [Thread-899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:06:32.967 [DEBUG] [Thread-899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:06:32.967 [DEBUG] [Thread-899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:06:32.985 [INFO] [Thread-899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:06:32.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:06:32.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:06:33.745 [DEBUG] [Thread-899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:06:33.745 [DEBUG] [Thread-899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:06:33.793 [DEBUG] [Thread-899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:06:33.793 [DEBUG] [Thread-899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:06:33.802 [DEBUG] [Thread-899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:06:33.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:06:33.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:06:33.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:06:33.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:06:33.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:06:33.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:06:33.839 [DEBUG] [Thread-899] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:06:43.356 [DEBUG] [Thread-901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:06:58.421 [DEBUG] [Thread-902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:07:03.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:07:03.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:07:03.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:07:04.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 6, 40), 38.67, 7.33, 0.0, 9.76, 27.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:07:04.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:06:40
2025-11-25T15:07:04.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:07:04.811 [DEBUG] [Thread-903] [transport.py] [_log()] starting thread (client mode): 0x737832b0
2025-11-25T15:07:04.811 [DEBUG] [Thread-903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:07:04.833 [DEBUG] [Thread-903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:07:04.833 [INFO] [Thread-903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] client lang: <none>
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] server lang: <none>
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] kex follows: False
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:07:04.837 [DEBUG] [Thread-903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:07:04.838 [DEBUG] [Thread-903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:07:04.838 [DEBUG] [Thread-903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:07:04.838 [DEBUG] [Thread-903] [transport.py] [_log()] Compression: none
2025-11-25T15:07:04.838 [DEBUG] [Thread-903] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:07:04.857 [DEBUG] [Thread-903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:07:04.857 [DEBUG] [Thread-903] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:07:04.858 [DEBUG] [Thread-903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:07:04.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:07:04.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:07:04.860 [DEBUG] [Thread-903] [transport.py] [_log()] userauth is OK
2025-11-25T15:07:04.860 [DEBUG] [Thread-903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:07:04.860 [DEBUG] [Thread-903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:07:04.860 [DEBUG] [Thread-903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:07:04.861 [DEBUG] [Thread-903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:07:04.878 [INFO] [Thread-903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:07:04.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:07:05.714 [DEBUG] [Thread-903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:07:05.714 [DEBUG] [Thread-903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:07:05.714 [DEBUG] [Thread-903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:07:05.755 [DEBUG] [Thread-903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:07:05.755 [DEBUG] [Thread-903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:07:05.759 [DEBUG] [Thread-903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:07:05.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:07:05.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:07:05.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:07:05.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:07:05.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:07:05.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:07:05.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:07:05.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:07:05.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:07:05.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.546282 -999.00  +26.60  17.42     12   -4.40 1 1 1 1 1   888    0 31.71 47.02 ----- 13.8 17.4 105.7 25.4 34.0 -33.5 34.0 -31.1 35.3 -29.2 35.8 -32.3
2025-11-25T15:07:05.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:07:05.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:07:05.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.546282
2025-11-25T15:07:05.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:07:05.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:07:05.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:07:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:07:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:07:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:06:40', tmtdew=38.67, humidity=7.33, cloud=0.0, wind=9.76, temperature=27.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:06:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:07:05.786 [DEBUG] [Thread-903] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:07:05.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:07:05.889 [DEBUG] [Thread-906] [transport.py] [_log()] starting thread (client mode): 0x737838b0
2025-11-25T15:07:05.889 [DEBUG] [Thread-906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:07:05.904 [DEBUG] [Thread-906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:07:05.904 [INFO] [Thread-906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:07:05.911 [DEBUG] [Thread-906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:07:05.912 [DEBUG] [Thread-906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:07:05.912 [DEBUG] [Thread-906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:07:05.912 [DEBUG] [Thread-906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:07:05.912 [DEBUG] [Thread-906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:07:05.912 [DEBUG] [Thread-906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:07:05.912 [DEBUG] [Thread-906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:07:05.912 [DEBUG] [Thread-906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:07:05.913 [DEBUG] [Thread-906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:07:05.913 [DEBUG] [Thread-906] [transport.py] [_log()] client lang: <none>
2025-11-25T15:07:05.913 [DEBUG] [Thread-906] [transport.py] [_log()] server lang: <none>
2025-11-25T15:07:05.913 [DEBUG] [Thread-906] [transport.py] [_log()] kex follows: False
2025-11-25T15:07:05.913 [DEBUG] [Thread-906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:07:05.913 [DEBUG] [Thread-906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:07:05.913 [DEBUG] [Thread-906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:07:05.913 [DEBUG] [Thread-906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:07:05.914 [DEBUG] [Thread-906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:07:05.914 [DEBUG] [Thread-906] [transport.py] [_log()] Compression: none
2025-11-25T15:07:05.914 [DEBUG] [Thread-906] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:07:05.974 [DEBUG] [Thread-906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:07:05.975 [DEBUG] [Thread-906] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:07:05.976 [DEBUG] [Thread-906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:07:05.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:07:05.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:07:06.034 [DEBUG] [Thread-906] [transport.py] [_log()] userauth is OK
2025-11-25T15:07:06.034 [DEBUG] [Thread-906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:07:06.035 [DEBUG] [Thread-906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:07:06.035 [DEBUG] [Thread-906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:07:06.035 [DEBUG] [Thread-906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:07:06.053 [INFO] [Thread-906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:07:06.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:07:06.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:07:06.875 [DEBUG] [Thread-906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:07:06.875 [DEBUG] [Thread-906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:07:06.923 [DEBUG] [Thread-906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:07:06.924 [DEBUG] [Thread-906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:07:06.932 [DEBUG] [Thread-906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:07:06.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:07:06.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:07:06.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:07:06.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:07:06.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:07:06.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:07:06.967 [DEBUG] [Thread-906] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:07:13.456 [DEBUG] [Thread-908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:07:21.513 [DEBUG] [Thread-909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:07:28.518 [DEBUG] [Thread-910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:07:36.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:07:36.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:07:36.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:07:37.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 7, 12), 38.32, 7.47, 0.0, 9.5, 27.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:07:37.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:07:12
2025-11-25T15:07:37.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:07:37.984 [DEBUG] [Thread-911] [transport.py] [_log()] starting thread (client mode): 0x737ea6e0
2025-11-25T15:07:37.984 [DEBUG] [Thread-911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:07:38.007 [DEBUG] [Thread-911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:07:38.007 [INFO] [Thread-911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] client lang: <none>
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] server lang: <none>
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] kex follows: False
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] Compression: none
2025-11-25T15:07:38.009 [DEBUG] [Thread-911] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:07:38.016 [DEBUG] [Thread-911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:07:38.017 [DEBUG] [Thread-911] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:07:38.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:07:38.017 [DEBUG] [Thread-911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:07:38.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:07:38.018 [DEBUG] [Thread-911] [transport.py] [_log()] userauth is OK
2025-11-25T15:07:38.018 [DEBUG] [Thread-911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:07:38.018 [DEBUG] [Thread-911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:07:38.018 [DEBUG] [Thread-911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:07:38.018 [DEBUG] [Thread-911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:07:38.036 [INFO] [Thread-911] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:07:38.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:07:38.701 [DEBUG] [Thread-911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:07:38.701 [DEBUG] [Thread-911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:07:38.701 [DEBUG] [Thread-911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:07:38.741 [DEBUG] [Thread-911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:07:38.741 [DEBUG] [Thread-911] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:07:38.743 [DEBUG] [Thread-911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:07:38.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:07:38.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:07:38.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:07:38.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:07:38.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:07:38.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:07:38.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:07:38.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:07:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:07:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.546629 -999.00  +26.60   7.77     12   -4.40 1 1 1 1 1   888    0 31.56 49.88 ----- 4.2 7.8 126.5 20.6 33.9 -32.6 34.0 -31.0 35.4 -29.9 35.8 -32.6
2025-11-25T15:07:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:07:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:07:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.546629
2025-11-25T15:07:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:07:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:07:38.761 [DEBUG] [Thread-911] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:07:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:07:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:07:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:07:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:07:12', tmtdew=38.32, humidity=7.47, cloud=0.0, wind=9.5, temperature=27.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:07:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:07:38.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:07:38.857 [DEBUG] [Thread-914] [transport.py] [_log()] starting thread (client mode): 0x737e81c0
2025-11-25T15:07:38.858 [DEBUG] [Thread-914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:07:38.876 [DEBUG] [Thread-914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:07:38.876 [INFO] [Thread-914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] client lang: <none>
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] server lang: <none>
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] kex follows: False
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] Compression: none
2025-11-25T15:07:38.884 [DEBUG] [Thread-914] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:07:38.940 [DEBUG] [Thread-914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:07:38.940 [DEBUG] [Thread-914] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:07:38.940 [DEBUG] [Thread-914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:07:38.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:07:38.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:07:38.997 [DEBUG] [Thread-914] [transport.py] [_log()] userauth is OK
2025-11-25T15:07:38.997 [DEBUG] [Thread-914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:07:38.997 [DEBUG] [Thread-914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:07:38.997 [DEBUG] [Thread-914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:07:38.997 [DEBUG] [Thread-914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:07:39.011 [INFO] [Thread-914] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:07:39.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:07:39.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:07:39.782 [DEBUG] [Thread-914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:07:39.782 [DEBUG] [Thread-914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:07:39.830 [DEBUG] [Thread-914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:07:39.830 [DEBUG] [Thread-914] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:07:39.839 [DEBUG] [Thread-914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:07:39.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:07:39.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:07:39.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:07:39.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:07:39.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:07:39.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:07:39.871 [DEBUG] [Thread-914] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:07:43.560 [DEBUG] [Thread-916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:07:58.626 [DEBUG] [Thread-917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:08:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:08:09.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:08:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:08:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 7, 44), 37.98, 7.52, 0.0, 10.34, 26.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:08:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:07:44
2025-11-25T15:08:10.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:08:10.812 [DEBUG] [Thread-918] [transport.py] [_log()] starting thread (client mode): 0x761dbeb0
2025-11-25T15:08:10.812 [DEBUG] [Thread-918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:08:10.828 [DEBUG] [Thread-918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:08:10.828 [INFO] [Thread-918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] client lang: <none>
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] server lang: <none>
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] kex follows: False
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] Compression: none
2025-11-25T15:08:10.831 [DEBUG] [Thread-918] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:08:10.845 [DEBUG] [Thread-918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:08:10.845 [DEBUG] [Thread-918] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:08:10.846 [DEBUG] [Thread-918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:08:10.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:08:10.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:08:10.848 [DEBUG] [Thread-918] [transport.py] [_log()] userauth is OK
2025-11-25T15:08:10.848 [DEBUG] [Thread-918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:08:10.848 [DEBUG] [Thread-918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:08:10.848 [DEBUG] [Thread-918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:08:10.848 [DEBUG] [Thread-918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:08:10.864 [INFO] [Thread-918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:08:10.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:08:11.616 [DEBUG] [Thread-918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:08:11.616 [DEBUG] [Thread-918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:08:11.617 [DEBUG] [Thread-918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:08:11.657 [DEBUG] [Thread-918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:08:11.658 [DEBUG] [Thread-918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:08:11.660 [DEBUG] [Thread-918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:08:11.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:08:11.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:08:11.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:08:11.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:08:11.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:08:11.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:08:11.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:08:11.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:08:11.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:08:11.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.546976 -999.00  +26.50  12.65     12   -4.50 1 1 1 1 1   888    0 32.12 51.89 ----- 8.6 12.7 113.8 15.1 34.0 -34.6 34.0 -31.5 35.4 -29.9 36.0 -31.2
2025-11-25T15:08:11.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:08:11.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:08:11.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.546976
2025-11-25T15:08:11.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:08:11.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:08:11.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:08:11.684 [DEBUG] [Thread-918] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:08:11.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:08:11.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:08:11.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:07:44', tmtdew=37.98, humidity=7.52, cloud=0.0, wind=10.34, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:07:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:08:11.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:08:11.798 [DEBUG] [Thread-921] [transport.py] [_log()] starting thread (client mode): 0x761d95d0
2025-11-25T15:08:11.798 [DEBUG] [Thread-921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:08:11.813 [DEBUG] [Thread-921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:08:11.813 [INFO] [Thread-921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] client lang: <none>
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] server lang: <none>
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] kex follows: False
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] Compression: none
2025-11-25T15:08:11.821 [DEBUG] [Thread-921] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:08:11.879 [DEBUG] [Thread-921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:08:11.880 [DEBUG] [Thread-921] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:08:11.880 [DEBUG] [Thread-921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:08:11.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:08:11.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:08:11.937 [DEBUG] [Thread-921] [transport.py] [_log()] userauth is OK
2025-11-25T15:08:11.937 [DEBUG] [Thread-921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:08:11.937 [DEBUG] [Thread-921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:08:11.937 [DEBUG] [Thread-921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:08:11.937 [DEBUG] [Thread-921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:08:11.952 [INFO] [Thread-921] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:08:11.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:08:11.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:08:12.725 [DEBUG] [Thread-921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:08:12.725 [DEBUG] [Thread-921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:08:12.773 [DEBUG] [Thread-921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:08:12.773 [DEBUG] [Thread-921] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:08:12.781 [DEBUG] [Thread-921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:08:12.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:08:12.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:08:12.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:08:12.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:08:12.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:08:12.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:08:12.813 [DEBUG] [Thread-921] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:08:13.667 [DEBUG] [Thread-923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:08:22.033 [DEBUG] [Thread-924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:08:28.734 [DEBUG] [Thread-925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:08:42.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:08:42.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:08:42.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:08:43.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 8, 16), 38.2, 7.41, 0.0, 9.67, 26.76, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:08:43.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:08:16
2025-11-25T15:08:43.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:08:43.779 [DEBUG] [Thread-926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:08:43.784 [DEBUG] [Thread-927] [transport.py] [_log()] starting thread (client mode): 0x761d9840
2025-11-25T15:08:43.784 [DEBUG] [Thread-927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:08:43.803 [DEBUG] [Thread-927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:08:43.803 [INFO] [Thread-927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] client lang: <none>
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] server lang: <none>
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] kex follows: False
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:08:43.807 [DEBUG] [Thread-927] [transport.py] [_log()] Compression: none
2025-11-25T15:08:43.808 [DEBUG] [Thread-927] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:08:43.825 [DEBUG] [Thread-927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:08:43.826 [DEBUG] [Thread-927] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:08:43.826 [DEBUG] [Thread-927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:08:43.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:08:43.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:08:43.828 [DEBUG] [Thread-927] [transport.py] [_log()] userauth is OK
2025-11-25T15:08:43.829 [DEBUG] [Thread-927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:08:43.829 [DEBUG] [Thread-927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:08:43.829 [DEBUG] [Thread-927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:08:43.829 [DEBUG] [Thread-927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:08:43.846 [INFO] [Thread-927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:08:43.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:08:44.527 [DEBUG] [Thread-927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:08:44.528 [DEBUG] [Thread-927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:08:44.528 [DEBUG] [Thread-927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:08:44.568 [DEBUG] [Thread-927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:08:44.568 [DEBUG] [Thread-927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:08:44.571 [DEBUG] [Thread-927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:08:44.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:08:44.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:08:44.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:08:44.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:08:44.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:08:44.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:08:44.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:08:44.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:08:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:08:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.547323 -999.00  +26.50   8.47     12   -4.50 1 1 1 1 1   888    0 31.98 52.26 ----- 5.9 8.5 89.6 14.4 33.8 -31.5 -999.0 -999.0 35.4 -30.1 35.9 -31.8
2025-11-25T15:08:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:08:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:08:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.547323
2025-11-25T15:08:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:08:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:08:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:08:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:08:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:08:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:08:16', tmtdew=38.2, humidity=7.41, cloud=0.0, wind=9.67, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:08:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:08:44.596 [DEBUG] [Thread-927] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:08:44.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:08:44.705 [DEBUG] [Thread-930] [transport.py] [_log()] starting thread (client mode): 0x737e93f0
2025-11-25T15:08:44.705 [DEBUG] [Thread-930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:08:44.720 [DEBUG] [Thread-930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:08:44.721 [INFO] [Thread-930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:08:44.728 [DEBUG] [Thread-930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:08:44.728 [DEBUG] [Thread-930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:08:44.728 [DEBUG] [Thread-930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:08:44.728 [DEBUG] [Thread-930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:08:44.728 [DEBUG] [Thread-930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] client lang: <none>
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] server lang: <none>
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] kex follows: False
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:08:44.729 [DEBUG] [Thread-930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:08:44.730 [DEBUG] [Thread-930] [transport.py] [_log()] Compression: none
2025-11-25T15:08:44.730 [DEBUG] [Thread-930] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:08:44.789 [DEBUG] [Thread-930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:08:44.790 [DEBUG] [Thread-930] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:08:44.791 [DEBUG] [Thread-930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:08:44.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:08:44.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:08:44.845 [DEBUG] [Thread-930] [transport.py] [_log()] userauth is OK
2025-11-25T15:08:44.846 [DEBUG] [Thread-930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:08:44.846 [DEBUG] [Thread-930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:08:44.846 [DEBUG] [Thread-930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:08:44.846 [DEBUG] [Thread-930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:08:44.864 [INFO] [Thread-930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:08:44.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:08:44.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:08:45.622 [DEBUG] [Thread-930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:08:45.622 [DEBUG] [Thread-930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:08:45.671 [DEBUG] [Thread-930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:08:45.671 [DEBUG] [Thread-930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:08:45.680 [DEBUG] [Thread-930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:08:45.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:08:45.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:08:45.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:08:45.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:08:45.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:08:45.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:08:45.723 [DEBUG] [Thread-930] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:08:58.821 [DEBUG] [Thread-932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:09:13.888 [DEBUG] [Thread-933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:09:15.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:09:15.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:09:15.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:09:16.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 8, 48), 37.99, 7.46, 0.0, 7.5, 26.71, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:09:16.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:08:48
2025-11-25T15:09:16.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:09:16.678 [DEBUG] [Thread-934] [transport.py] [_log()] starting thread (client mode): 0x761d96f0
2025-11-25T15:09:16.678 [DEBUG] [Thread-934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:09:16.698 [DEBUG] [Thread-934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:09:16.698 [INFO] [Thread-934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:09:16.699 [DEBUG] [Thread-934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] client lang: <none>
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] server lang: <none>
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] kex follows: False
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] Compression: none
2025-11-25T15:09:16.700 [DEBUG] [Thread-934] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:09:16.719 [DEBUG] [Thread-934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:09:16.719 [DEBUG] [Thread-934] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:09:16.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:09:16.720 [DEBUG] [Thread-934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:09:16.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:09:16.723 [DEBUG] [Thread-934] [transport.py] [_log()] userauth is OK
2025-11-25T15:09:16.723 [DEBUG] [Thread-934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:09:16.723 [DEBUG] [Thread-934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:09:16.723 [DEBUG] [Thread-934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:09:16.723 [DEBUG] [Thread-934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:09:16.739 [INFO] [Thread-934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:09:16.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:09:17.522 [DEBUG] [Thread-934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:09:17.522 [DEBUG] [Thread-934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:09:17.523 [DEBUG] [Thread-934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:09:17.564 [DEBUG] [Thread-934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:09:17.564 [DEBUG] [Thread-934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:09:17.566 [DEBUG] [Thread-934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:09:17.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:09:17.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:09:17.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:09:17.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:09:17.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:09:17.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:09:17.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:09:17.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:09:17.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:09:17.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.547670 -999.00  +26.50  10.14     12   -4.50 1 1 1 1 1   888    0 31.94 51.16 ----- 12.3 10.1 55.4 12.0 34.0 -31.4 34.0 -33.7 35.4 -32.3 36.0 -30.6
2025-11-25T15:09:17.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:09:17.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:09:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.547670
2025-11-25T15:09:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:09:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:09:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:09:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:09:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:09:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:08:48', tmtdew=37.99, humidity=7.46, cloud=0.0, wind=7.5, temperature=26.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:08:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:09:17.593 [DEBUG] [Thread-934] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:09:17.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:09:17.695 [DEBUG] [Thread-937] [transport.py] [_log()] starting thread (client mode): 0x761d9f30
2025-11-25T15:09:17.695 [DEBUG] [Thread-937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:09:17.709 [DEBUG] [Thread-937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:09:17.709 [INFO] [Thread-937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:09:17.717 [DEBUG] [Thread-937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:09:17.717 [DEBUG] [Thread-937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:09:17.717 [DEBUG] [Thread-937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:09:17.717 [DEBUG] [Thread-937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:09:17.717 [DEBUG] [Thread-937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:09:17.717 [DEBUG] [Thread-937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:09:17.717 [DEBUG] [Thread-937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:09:17.717 [DEBUG] [Thread-937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] client lang: <none>
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] server lang: <none>
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] kex follows: False
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] Compression: none
2025-11-25T15:09:17.718 [DEBUG] [Thread-937] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:09:17.777 [DEBUG] [Thread-937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:09:17.777 [DEBUG] [Thread-937] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:09:17.778 [DEBUG] [Thread-937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:09:17.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:09:17.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:09:17.832 [DEBUG] [Thread-937] [transport.py] [_log()] userauth is OK
2025-11-25T15:09:17.832 [DEBUG] [Thread-937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:09:17.832 [DEBUG] [Thread-937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:09:17.832 [DEBUG] [Thread-937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:09:17.832 [DEBUG] [Thread-937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:09:17.847 [INFO] [Thread-937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:09:17.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:09:17.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:09:18.605 [DEBUG] [Thread-937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:09:18.605 [DEBUG] [Thread-937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:09:18.653 [DEBUG] [Thread-937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:09:18.654 [DEBUG] [Thread-937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:09:18.663 [DEBUG] [Thread-937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:09:18.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:09: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')
2025-11-25T15:09:18.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:09:18.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:09:18.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:09:18.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:09:18.696 [DEBUG] [Thread-937] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:09:22.794 [DEBUG] [Thread-939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:09:28.930 [DEBUG] [Thread-940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:09:43.995 [DEBUG] [Thread-941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:09:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:09:48.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:09:48.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:09:49.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 9, 20), 37.97, 7.46, 0.0, 6.05, 26.61, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:09:49.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:09:20
2025-11-25T15:09:49.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:09:49.664 [DEBUG] [Thread-942] [transport.py] [_log()] starting thread (client mode): 0x737eb430
2025-11-25T15:09:49.664 [DEBUG] [Thread-942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:09:49.682 [DEBUG] [Thread-942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:09:49.683 [INFO] [Thread-942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:09:49.685 [DEBUG] [Thread-942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:09:49.686 [DEBUG] [Thread-942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:09:49.686 [DEBUG] [Thread-942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:09:49.686 [DEBUG] [Thread-942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:09:49.686 [DEBUG] [Thread-942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:09:49.686 [DEBUG] [Thread-942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:09:49.686 [DEBUG] [Thread-942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:09:49.686 [DEBUG] [Thread-942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:09:49.686 [DEBUG] [Thread-942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:09:49.686 [DEBUG] [Thread-942] [transport.py] [_log()] client lang: <none>
2025-11-25T15:09:49.687 [DEBUG] [Thread-942] [transport.py] [_log()] server lang: <none>
2025-11-25T15:09:49.687 [DEBUG] [Thread-942] [transport.py] [_log()] kex follows: False
2025-11-25T15:09:49.687 [DEBUG] [Thread-942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:09:49.687 [DEBUG] [Thread-942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:09:49.687 [DEBUG] [Thread-942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:09:49.687 [DEBUG] [Thread-942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:09:49.687 [DEBUG] [Thread-942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:09:49.687 [DEBUG] [Thread-942] [transport.py] [_log()] Compression: none
2025-11-25T15:09:49.688 [DEBUG] [Thread-942] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:09:49.709 [DEBUG] [Thread-942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:09:49.710 [DEBUG] [Thread-942] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:09:49.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:09:49.711 [DEBUG] [Thread-942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:09:49.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:09:49.713 [DEBUG] [Thread-942] [transport.py] [_log()] userauth is OK
2025-11-25T15:09:49.713 [DEBUG] [Thread-942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:09:49.714 [DEBUG] [Thread-942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:09:49.714 [DEBUG] [Thread-942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:09:49.714 [DEBUG] [Thread-942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:09:49.749 [INFO] [Thread-942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:09:49.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:09:50.396 [DEBUG] [Thread-942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:09:50.396 [DEBUG] [Thread-942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:09:50.396 [DEBUG] [Thread-942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:09:50.437 [DEBUG] [Thread-942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:09:50.437 [DEBUG] [Thread-942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:09:50.441 [DEBUG] [Thread-942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:09:50.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:09:50.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:09:50.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:09:50.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:09:50.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:09:50.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:09:50.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:09:50.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.548018 -999.00  +26.30  10.80     12   -4.60 1 1 1 1 1   888    0 31.93 53.21 ----- 13.8 10.8 14.9 13.9 34.0 -31.3 34.0 -32.0 35.5 -29.5 36.0 -30.8
2025-11-25T15:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.548018
2025-11-25T15:09:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:09:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:09:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:09:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:09:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:09:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:09:20', tmtdew=37.97, humidity=7.46, cloud=0.0, wind=6.05, temperature=26.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:09:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:09:50.468 [DEBUG] [Thread-942] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:09:50.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:09:50.572 [DEBUG] [Thread-945] [transport.py] [_log()] starting thread (client mode): 0x761d9ab0
2025-11-25T15:09:50.572 [DEBUG] [Thread-945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:09:50.587 [DEBUG] [Thread-945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:09:50.588 [INFO] [Thread-945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:09:50.595 [DEBUG] [Thread-945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:09:50.595 [DEBUG] [Thread-945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] client lang: <none>
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] server lang: <none>
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] kex follows: False
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] Compression: none
2025-11-25T15:09:50.596 [DEBUG] [Thread-945] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:09:50.659 [DEBUG] [Thread-945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:09:50.660 [DEBUG] [Thread-945] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:09:50.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:09:50.661 [DEBUG] [Thread-945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:09:50.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:09:50.719 [DEBUG] [Thread-945] [transport.py] [_log()] userauth is OK
2025-11-25T15:09:50.719 [DEBUG] [Thread-945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:09:50.719 [DEBUG] [Thread-945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:09:50.719 [DEBUG] [Thread-945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:09:50.720 [DEBUG] [Thread-945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:09:50.739 [INFO] [Thread-945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:09:50.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:09:50.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:09:51.507 [DEBUG] [Thread-945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:09:51.507 [DEBUG] [Thread-945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:09:51.556 [DEBUG] [Thread-945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:09:51.556 [DEBUG] [Thread-945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:09:51.566 [DEBUG] [Thread-945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:09:51.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:09: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')
2025-11-25T15:09:51.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:09:51.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:09:51.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:09:51.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:09:51.603 [DEBUG] [Thread-945] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:09:59.040 [DEBUG] [Thread-947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:10:14.101 [DEBUG] [Thread-948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:10:21.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:10:21.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:10:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:10:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 9, 52), 37.96, 7.49, 0.0, 11.07, 26.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:10:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:09:52
2025-11-25T15:10:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:10:22.543 [DEBUG] [Thread-949] [transport.py] [_log()] starting thread (client mode): 0x7376d840
2025-11-25T15:10:22.543 [DEBUG] [Thread-949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:10:22.564 [DEBUG] [Thread-949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:10:22.564 [INFO] [Thread-949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:10:22.567 [DEBUG] [Thread-949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:10:22.567 [DEBUG] [Thread-949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:10:22.567 [DEBUG] [Thread-949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:10:22.567 [DEBUG] [Thread-949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:10:22.567 [DEBUG] [Thread-949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:10:22.567 [DEBUG] [Thread-949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:10:22.567 [DEBUG] [Thread-949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:10:22.567 [DEBUG] [Thread-949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] client lang: <none>
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] server lang: <none>
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] kex follows: False
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] Compression: none
2025-11-25T15:10:22.568 [DEBUG] [Thread-949] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:10:22.587 [DEBUG] [Thread-949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:10:22.588 [DEBUG] [Thread-949] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:10:22.588 [DEBUG] [Thread-949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:10:22.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:10:22.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:10:22.590 [DEBUG] [Thread-949] [transport.py] [_log()] userauth is OK
2025-11-25T15:10:22.590 [DEBUG] [Thread-949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:10:22.591 [DEBUG] [Thread-949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:10:22.591 [DEBUG] [Thread-949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:10:22.591 [DEBUG] [Thread-949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:10:22.615 [INFO] [Thread-949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:10:22.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:10:23.213 [DEBUG] [Thread-949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:10:23.213 [DEBUG] [Thread-949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:10:23.214 [DEBUG] [Thread-949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:10:23.254 [DEBUG] [Thread-949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:10:23.254 [DEBUG] [Thread-949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:10:23.256 [DEBUG] [Thread-949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:10:23.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:10:23.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:10:23.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:10:23.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:10:23.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:10:23.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:10:23.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:10:23.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:10:23.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:10:23.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.548365 -999.00  +26.50  12.20     12   -4.30 1 1 1 1 1   888    0 32.41 58.26 ----- 11.8 12.2 49.5 15.0 34.1 -30.5 34.0 -30.5 35.5 -29.5 35.9 -30.3
2025-11-25T15:10:23.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:10:23.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:10:23.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.548365
2025-11-25T15:10:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:10:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:10:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:10:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:10:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:10:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:09:52', tmtdew=37.96, humidity=7.49, cloud=0.0, wind=11.07, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:09:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:10:23.276 [DEBUG] [Thread-949] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:10:23.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:10:23.416 [DEBUG] [Thread-952] [transport.py] [_log()] starting thread (client mode): 0x737e8b20
2025-11-25T15:10:23.416 [DEBUG] [Thread-952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:10:23.434 [DEBUG] [Thread-952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:10:23.434 [INFO] [Thread-952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] client lang: <none>
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] server lang: <none>
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] kex follows: False
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] Compression: none
2025-11-25T15:10:23.442 [DEBUG] [Thread-952] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:10:23.498 [DEBUG] [Thread-952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:10:23.499 [DEBUG] [Thread-952] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:10:23.499 [DEBUG] [Thread-952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:10:23.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:10:23.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:10:23.531 [DEBUG] [Thread-954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:10:23.556 [DEBUG] [Thread-952] [transport.py] [_log()] userauth is OK
2025-11-25T15:10:23.556 [DEBUG] [Thread-952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:10:23.556 [DEBUG] [Thread-952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:10:23.556 [DEBUG] [Thread-952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:10:23.557 [DEBUG] [Thread-952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:10:23.573 [INFO] [Thread-952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:10:23.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:10:23.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:10:24.362 [DEBUG] [Thread-952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:10:24.363 [DEBUG] [Thread-952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:10:24.411 [DEBUG] [Thread-952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:10:24.411 [DEBUG] [Thread-952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:10:24.420 [DEBUG] [Thread-952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:10:24.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:10:24.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:10:24.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:10:24.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:10:24.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:10:24.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:10:24.457 [DEBUG] [Thread-952] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:10:29.152 [DEBUG] [Thread-955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:10:44.220 [DEBUG] [Thread-956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:10:54.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:10:54.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:10:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:10:55.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 10, 24), 37.83, 7.56, 0.0, 12.72, 26.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:10:55.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:10:24
2025-11-25T15:10:55.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:10:55.420 [DEBUG] [Thread-957] [transport.py] [_log()] starting thread (client mode): 0x73780940
2025-11-25T15:10:55.421 [DEBUG] [Thread-957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:10:55.440 [DEBUG] [Thread-957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:10:55.441 [INFO] [Thread-957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:10:55.444 [DEBUG] [Thread-957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:10:55.444 [DEBUG] [Thread-957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:10:55.444 [DEBUG] [Thread-957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:10:55.444 [DEBUG] [Thread-957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:10:55.444 [DEBUG] [Thread-957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:10:55.444 [DEBUG] [Thread-957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:10:55.444 [DEBUG] [Thread-957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] client lang: <none>
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] server lang: <none>
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] kex follows: False
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] Compression: none
2025-11-25T15:10:55.445 [DEBUG] [Thread-957] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:10:55.463 [DEBUG] [Thread-957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:10:55.464 [DEBUG] [Thread-957] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:10:55.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:10:55.465 [DEBUG] [Thread-957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:10:55.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:10:55.466 [DEBUG] [Thread-957] [transport.py] [_log()] userauth is OK
2025-11-25T15:10:55.466 [DEBUG] [Thread-957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:10:55.466 [DEBUG] [Thread-957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:10:55.466 [DEBUG] [Thread-957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:10:55.467 [DEBUG] [Thread-957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:10:55.491 [INFO] [Thread-957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:10:55.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:10:56.127 [DEBUG] [Thread-957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:10:56.128 [DEBUG] [Thread-957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:10:56.128 [DEBUG] [Thread-957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:10:56.169 [DEBUG] [Thread-957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:10:56.169 [DEBUG] [Thread-957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:10:56.172 [DEBUG] [Thread-957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:10:56.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:10:56.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:10:56.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:10:56.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:10:56.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:10:56.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:10:56.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:10:56.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:10:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:10:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.548712 -999.00  +26.70   9.41     12   -4.30 1 1 1 1 1   888    0 32.08 55.40 ----- 15.1 9.4 65.8 14.9 34.1 -30.7 34.0 -31.8 35.4 -29.6 35.9 -30.3
2025-11-25T15:10:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:10:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:10:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.548712
2025-11-25T15:10:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:10:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:10:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:10:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:10:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:10:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:10:24', tmtdew=37.83, humidity=7.56, cloud=0.0, wind=12.72, temperature=26.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:10:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:10:56.198 [DEBUG] [Thread-957] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:10:56.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:10:56.303 [DEBUG] [Thread-960] [transport.py] [_log()] starting thread (client mode): 0x7374c160
2025-11-25T15:10:56.303 [DEBUG] [Thread-960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:10:56.317 [DEBUG] [Thread-960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:10:56.317 [INFO] [Thread-960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:10:56.325 [DEBUG] [Thread-960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:10:56.325 [DEBUG] [Thread-960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] client lang: <none>
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] server lang: <none>
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] kex follows: False
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:10:56.326 [DEBUG] [Thread-960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:10:56.327 [DEBUG] [Thread-960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:10:56.327 [DEBUG] [Thread-960] [transport.py] [_log()] Compression: none
2025-11-25T15:10:56.327 [DEBUG] [Thread-960] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:10:56.389 [DEBUG] [Thread-960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:10:56.390 [DEBUG] [Thread-960] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:10:56.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:10:56.391 [DEBUG] [Thread-960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:10:56.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:10:56.448 [DEBUG] [Thread-960] [transport.py] [_log()] userauth is OK
2025-11-25T15:10:56.448 [DEBUG] [Thread-960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:10:56.449 [DEBUG] [Thread-960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:10:56.449 [DEBUG] [Thread-960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:10:56.449 [DEBUG] [Thread-960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:10:56.468 [INFO] [Thread-960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:10:56.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:10:56.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:10:57.269 [DEBUG] [Thread-960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:10:57.269 [DEBUG] [Thread-960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:10:57.316 [DEBUG] [Thread-960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:10:57.316 [DEBUG] [Thread-960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:10:57.324 [DEBUG] [Thread-960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:10:57.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:10:57.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:10:57.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:10:57.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:10:57.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:10:57.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:10:57.356 [DEBUG] [Thread-960] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:10:59.260 [DEBUG] [Thread-962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:11:14.327 [DEBUG] [Thread-963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:11:24.274 [DEBUG] [Thread-964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:11:27.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:11:27.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:11:27.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:11:28.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 10, 56), 37.79, 7.61, 0.0, 8.19, 26.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:11:28.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:10:56
2025-11-25T15:11:28.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:11:28.326 [DEBUG] [Thread-965] [transport.py] [_log()] starting thread (client mode): 0x737eb910
2025-11-25T15:11:28.326 [DEBUG] [Thread-965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:11:28.349 [DEBUG] [Thread-965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:11:28.350 [INFO] [Thread-965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:11:28.352 [DEBUG] [Thread-965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:11:28.353 [DEBUG] [Thread-965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:11:28.353 [DEBUG] [Thread-965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:11:28.353 [DEBUG] [Thread-965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:11:28.353 [DEBUG] [Thread-965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:11:28.353 [DEBUG] [Thread-965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:11:28.353 [DEBUG] [Thread-965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:11:28.353 [DEBUG] [Thread-965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:11:28.353 [DEBUG] [Thread-965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:11:28.354 [DEBUG] [Thread-965] [transport.py] [_log()] client lang: <none>
2025-11-25T15:11:28.354 [DEBUG] [Thread-965] [transport.py] [_log()] server lang: <none>
2025-11-25T15:11:28.354 [DEBUG] [Thread-965] [transport.py] [_log()] kex follows: False
2025-11-25T15:11:28.354 [DEBUG] [Thread-965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:11:28.354 [DEBUG] [Thread-965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:11:28.354 [DEBUG] [Thread-965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:11:28.355 [DEBUG] [Thread-965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:11:28.355 [DEBUG] [Thread-965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:11:28.355 [DEBUG] [Thread-965] [transport.py] [_log()] Compression: none
2025-11-25T15:11:28.355 [DEBUG] [Thread-965] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:11:28.372 [DEBUG] [Thread-965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:11:28.373 [DEBUG] [Thread-965] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:11:28.374 [DEBUG] [Thread-965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:11:28.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:11:28.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:11:28.383 [DEBUG] [Thread-965] [transport.py] [_log()] userauth is OK
2025-11-25T15:11:28.384 [DEBUG] [Thread-965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:11:28.384 [DEBUG] [Thread-965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:11:28.384 [DEBUG] [Thread-965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:11:28.384 [DEBUG] [Thread-965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:11:28.412 [INFO] [Thread-965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:11:28.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:11:29.040 [DEBUG] [Thread-965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:11:29.040 [DEBUG] [Thread-965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:11:29.040 [DEBUG] [Thread-965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:11:29.081 [DEBUG] [Thread-965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:11:29.081 [DEBUG] [Thread-965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:11:29.083 [DEBUG] [Thread-965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:11:29.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:11:29.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:11:29.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:11:29.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:11:29.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:11:29.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:11:29.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.549059 -999.00  +26.60   4.48     12   -4.60 1 1 1 1 1   888    0 32.08 52.69 ----- 1.7 4.5 63.2 18.2 34.0 -33.6 34.1 -31.0 35.2 -30.1 35.9 -30.8
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.549059
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:10:56', tmtdew=37.79, humidity=7.61, cloud=0.0, wind=8.19, temperature=26.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:10:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:11:29.095 [DEBUG] [Thread-965] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:11:29.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:11:29.188 [DEBUG] [Thread-968] [transport.py] [_log()] starting thread (client mode): 0x7376e860
2025-11-25T15:11:29.188 [DEBUG] [Thread-968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:11:29.203 [DEBUG] [Thread-968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:11:29.203 [INFO] [Thread-968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:11:29.213 [DEBUG] [Thread-968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] client lang: <none>
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] server lang: <none>
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] kex follows: False
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] Compression: none
2025-11-25T15:11:29.214 [DEBUG] [Thread-968] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:11:29.274 [DEBUG] [Thread-968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:11:29.274 [DEBUG] [Thread-968] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:11:29.274 [DEBUG] [Thread-968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:11:29.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:11:29.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:11:29.330 [DEBUG] [Thread-968] [transport.py] [_log()] userauth is OK
2025-11-25T15:11:29.330 [DEBUG] [Thread-968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:11:29.330 [DEBUG] [Thread-968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:11:29.330 [DEBUG] [Thread-968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:11:29.331 [DEBUG] [Thread-968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:11:29.349 [INFO] [Thread-968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:11:29.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:11:29.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:11:29.365 [DEBUG] [Thread-970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:11:30.189 [DEBUG] [Thread-968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:11:30.189 [DEBUG] [Thread-968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:11:30.237 [DEBUG] [Thread-968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:11:30.237 [DEBUG] [Thread-968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:11:30.245 [DEBUG] [Thread-968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:11:30.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:11:30.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:11:30.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:11:30.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:11:30.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:11:30.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:11:30.277 [DEBUG] [Thread-968] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:11:44.423 [DEBUG] [Thread-971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:11:59.462 [DEBUG] [Thread-972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:12:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:12:00.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:12:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:12:00.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 11, 28), 37.88, 7.56, 0.0, 6.6, 26.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:12:00.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:11:28
2025-11-25T15:12:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:12:01.262 [DEBUG] [Thread-973] [transport.py] [_log()] starting thread (client mode): 0x761d8cd0
2025-11-25T15:12:01.262 [DEBUG] [Thread-973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:12:01.282 [DEBUG] [Thread-973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:12:01.283 [INFO] [Thread-973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] client lang: <none>
2025-11-25T15:12:01.284 [DEBUG] [Thread-973] [transport.py] [_log()] server lang: <none>
2025-11-25T15:12:01.285 [DEBUG] [Thread-973] [transport.py] [_log()] kex follows: False
2025-11-25T15:12:01.285 [DEBUG] [Thread-973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:12:01.285 [DEBUG] [Thread-973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:12:01.285 [DEBUG] [Thread-973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:12:01.285 [DEBUG] [Thread-973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:12:01.285 [DEBUG] [Thread-973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:12:01.285 [DEBUG] [Thread-973] [transport.py] [_log()] Compression: none
2025-11-25T15:12:01.285 [DEBUG] [Thread-973] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:12:01.297 [DEBUG] [Thread-973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:12:01.297 [DEBUG] [Thread-973] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:12:01.297 [DEBUG] [Thread-973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:12:01.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:12:01.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:12:01.298 [DEBUG] [Thread-973] [transport.py] [_log()] userauth is OK
2025-11-25T15:12:01.298 [DEBUG] [Thread-973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:12:01.298 [DEBUG] [Thread-973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:12:01.298 [DEBUG] [Thread-973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:12:01.298 [DEBUG] [Thread-973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:12:01.314 [INFO] [Thread-973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:12:01.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:12:01.966 [DEBUG] [Thread-973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:12:01.966 [DEBUG] [Thread-973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:12:01.966 [DEBUG] [Thread-973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:12:02.007 [DEBUG] [Thread-973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:12:02.007 [DEBUG] [Thread-973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:12:02.011 [DEBUG] [Thread-973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:12:02.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:12:02.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:12:02.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:12:02.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:12:02.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:12:02.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:12:02.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:12:02.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:12:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:12:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.549754 -999.00  +26.80   3.38     12   -4.50 1 1 1 1 1   888    0 32.37 58.83 ----- 2.5 3.4 291.7 4.5 34.4 -30.6 34.4 -30.6 35.7 -28.9 36.3 -29.9
2025-11-25T15:12:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:12:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:12:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.549754
2025-11-25T15:12:02.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:12:02.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:12:02.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:12:02.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:12:02.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:12:02.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:11:28', tmtdew=37.88, humidity=7.56, cloud=0.0, wind=6.6, temperature=26.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:11:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:12:02.022 [DEBUG] [Thread-973] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:12:02.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:12:02.112 [DEBUG] [Thread-976] [transport.py] [_log()] starting thread (client mode): 0x7374c370
2025-11-25T15:12:02.112 [DEBUG] [Thread-976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:12:02.129 [DEBUG] [Thread-976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:12:02.129 [INFO] [Thread-976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] client lang: <none>
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] server lang: <none>
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] kex follows: False
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:12:02.137 [DEBUG] [Thread-976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:12:02.138 [DEBUG] [Thread-976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:12:02.138 [DEBUG] [Thread-976] [transport.py] [_log()] Compression: none
2025-11-25T15:12:02.138 [DEBUG] [Thread-976] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:12:02.193 [DEBUG] [Thread-976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:12:02.193 [DEBUG] [Thread-976] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:12:02.193 [DEBUG] [Thread-976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:12:02.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:12:02.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:12:02.249 [DEBUG] [Thread-976] [transport.py] [_log()] userauth is OK
2025-11-25T15:12:02.249 [DEBUG] [Thread-976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:12:02.249 [DEBUG] [Thread-976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:12:02.249 [DEBUG] [Thread-976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:12:02.249 [DEBUG] [Thread-976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:12:02.263 [INFO] [Thread-976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:12:02.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:12:02.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:12:03.039 [DEBUG] [Thread-976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:12:03.039 [DEBUG] [Thread-976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:12:03.087 [DEBUG] [Thread-976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:12:03.087 [DEBUG] [Thread-976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:12:03.096 [DEBUG] [Thread-976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:12:03.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:12:03.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:12:03.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:12:03.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:12:03.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:12:03.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:12:03.133 [DEBUG] [Thread-976] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:12:14.504 [DEBUG] [Thread-978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:12:25.006 [DEBUG] [Thread-979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:12:29.570 [DEBUG] [Thread-980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:12:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:12:33.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:12:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:12:33.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 12), 38.28, 7.14, 0.0, 10.15, 27.26, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:12:33.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:12:00
2025-11-25T15:12:34.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:12:34.185 [DEBUG] [Thread-981] [transport.py] [_log()] starting thread (client mode): 0x737ebcd0
2025-11-25T15:12:34.185 [DEBUG] [Thread-981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:12:34.205 [DEBUG] [Thread-981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:12:34.205 [INFO] [Thread-981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:12:34.206 [DEBUG] [Thread-981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:12:34.206 [DEBUG] [Thread-981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:12:34.206 [DEBUG] [Thread-981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:12:34.206 [DEBUG] [Thread-981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:12:34.206 [DEBUG] [Thread-981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:12:34.206 [DEBUG] [Thread-981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:12:34.206 [DEBUG] [Thread-981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:12:34.206 [DEBUG] [Thread-981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:12:34.206 [DEBUG] [Thread-981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] client lang: <none>
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] server lang: <none>
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] kex follows: False
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] Compression: none
2025-11-25T15:12:34.207 [DEBUG] [Thread-981] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:12:34.218 [DEBUG] [Thread-981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:12:34.218 [DEBUG] [Thread-981] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:12:34.218 [DEBUG] [Thread-981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:12:34.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:12:34.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:12:34.220 [DEBUG] [Thread-981] [transport.py] [_log()] userauth is OK
2025-11-25T15:12:34.220 [DEBUG] [Thread-981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:12:34.220 [DEBUG] [Thread-981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:12:34.220 [DEBUG] [Thread-981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:12:34.220 [DEBUG] [Thread-981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:12:34.240 [INFO] [Thread-981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:12:34.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:12:34.873 [DEBUG] [Thread-981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:12:34.873 [DEBUG] [Thread-981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:12:34.873 [DEBUG] [Thread-981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:12:34.914 [DEBUG] [Thread-981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:12:34.914 [DEBUG] [Thread-981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:12:34.917 [DEBUG] [Thread-981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:12:34.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:12:34.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:12:34.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:12:34.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:12:34.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:12:34.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:12:34.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:12:34.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:12:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:12:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.550101 -999.00  +26.90   3.08     12   -4.40 1 1 1 1 1   888    0 32.79 66.45 ----- 4.4 3.1 329.8 4.1 34.6 -30.5 34.4 -30.9 35.9 -28.7 36.4 -30.0
2025-11-25T15:12:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:12:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:12:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.550101
2025-11-25T15:12:34.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:12:34.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:12:34.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:12:34.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:12:34.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:12:34.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:12:00', tmtdew=38.28, humidity=7.14, cloud=0.0, wind=10.15, temperature=27.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:12:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:12:34.935 [DEBUG] [Thread-981] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:12:35.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:12:35.030 [DEBUG] [Thread-984] [transport.py] [_log()] starting thread (client mode): 0x7376cd90
2025-11-25T15:12:35.030 [DEBUG] [Thread-984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:12:35.047 [DEBUG] [Thread-984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:12:35.047 [INFO] [Thread-984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:12:35.054 [DEBUG] [Thread-984] [transport.py] [_log()] client lang: <none>
2025-11-25T15:12:35.055 [DEBUG] [Thread-984] [transport.py] [_log()] server lang: <none>
2025-11-25T15:12:35.055 [DEBUG] [Thread-984] [transport.py] [_log()] kex follows: False
2025-11-25T15:12:35.055 [DEBUG] [Thread-984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:12:35.055 [DEBUG] [Thread-984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:12:35.055 [DEBUG] [Thread-984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:12:35.055 [DEBUG] [Thread-984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:12:35.055 [DEBUG] [Thread-984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:12:35.055 [DEBUG] [Thread-984] [transport.py] [_log()] Compression: none
2025-11-25T15:12:35.055 [DEBUG] [Thread-984] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:12:35.113 [DEBUG] [Thread-984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:12:35.113 [DEBUG] [Thread-984] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:12:35.113 [DEBUG] [Thread-984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:12:35.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:12:35.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:12:35.174 [DEBUG] [Thread-984] [transport.py] [_log()] userauth is OK
2025-11-25T15:12:35.174 [DEBUG] [Thread-984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:12:35.174 [DEBUG] [Thread-984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:12:35.174 [DEBUG] [Thread-984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:12:35.174 [DEBUG] [Thread-984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:12:35.189 [INFO] [Thread-984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:12:35.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:12:35.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:12:35.996 [DEBUG] [Thread-984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:12:35.996 [DEBUG] [Thread-984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:12:36.045 [DEBUG] [Thread-984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:12:36.045 [DEBUG] [Thread-984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:12:36.053 [DEBUG] [Thread-984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:12:36.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:12:36.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:12:36.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:12:36.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:12:36.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:12:36.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:12:36.085 [DEBUG] [Thread-984] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:12:44.614 [DEBUG] [Thread-986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:12:59.685 [DEBUG] [Thread-987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:13:06.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:13:06.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:13:06.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:13:06.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 12, 32), 38.55, 6.99, 0.0, 6.34, 27.28, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:13:06.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:12:32
2025-11-25T15:13:06.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:13:07.091 [DEBUG] [Thread-988] [transport.py] [_log()] starting thread (client mode): 0x7374c2b0
2025-11-25T15:13:07.091 [DEBUG] [Thread-988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:13:07.111 [DEBUG] [Thread-988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:13:07.112 [INFO] [Thread-988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] client lang: <none>
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] server lang: <none>
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] kex follows: False
2025-11-25T15:13:07.115 [DEBUG] [Thread-988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:13:07.116 [DEBUG] [Thread-988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:13:07.116 [DEBUG] [Thread-988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:13:07.116 [DEBUG] [Thread-988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:13:07.116 [DEBUG] [Thread-988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:13:07.116 [DEBUG] [Thread-988] [transport.py] [_log()] Compression: none
2025-11-25T15:13:07.116 [DEBUG] [Thread-988] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:13:07.128 [DEBUG] [Thread-988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:13:07.128 [DEBUG] [Thread-988] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:13:07.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:13:07.129 [DEBUG] [Thread-988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:13:07.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:13:07.131 [DEBUG] [Thread-988] [transport.py] [_log()] userauth is OK
2025-11-25T15:13:07.132 [DEBUG] [Thread-988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:13:07.132 [DEBUG] [Thread-988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:13:07.132 [DEBUG] [Thread-988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:13:07.132 [DEBUG] [Thread-988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:13:07.149 [INFO] [Thread-988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:13:07.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:13:07.793 [DEBUG] [Thread-988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:13:07.793 [DEBUG] [Thread-988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:13:07.794 [DEBUG] [Thread-988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:13:07.834 [DEBUG] [Thread-988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:13:07.834 [DEBUG] [Thread-988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:13:07.838 [DEBUG] [Thread-988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:13:07.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:13:07.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:13:07.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:13:07.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:13:07.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:13:07.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:13:07.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:13:07.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:13:07.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:13:07.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.550448 -999.00  +26.90  12.92     12   -4.50 1 1 1 1 1   888    0 32.74 60.64 ----- 14.4 12.9 22.6 16.7 34.6 -32.1 34.4 -32.0 35.8 -31.5 36.5 -30.5
2025-11-25T15:13:07.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:13:07.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:13:07.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.550448
2025-11-25T15:13:07.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:13:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:13:07.863 [DEBUG] [Thread-988] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:13:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:13:07.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:13:07.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:13:07.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:12:32', tmtdew=38.55, humidity=6.99, cloud=0.0, wind=6.34, temperature=27.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:12:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:13:07.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:13:07.968 [DEBUG] [Thread-991] [transport.py] [_log()] starting thread (client mode): 0x7374cd60
2025-11-25T15:13:07.968 [DEBUG] [Thread-991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:13:07.982 [DEBUG] [Thread-991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:13:07.982 [INFO] [Thread-991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:13:07.990 [DEBUG] [Thread-991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:13:07.990 [DEBUG] [Thread-991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:13:07.990 [DEBUG] [Thread-991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:13:07.990 [DEBUG] [Thread-991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:13:07.991 [DEBUG] [Thread-991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:13:07.991 [DEBUG] [Thread-991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:13:07.991 [DEBUG] [Thread-991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:13:07.991 [DEBUG] [Thread-991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:13:07.991 [DEBUG] [Thread-991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:13:07.991 [DEBUG] [Thread-991] [transport.py] [_log()] client lang: <none>
2025-11-25T15:13:07.991 [DEBUG] [Thread-991] [transport.py] [_log()] server lang: <none>
2025-11-25T15:13:07.991 [DEBUG] [Thread-991] [transport.py] [_log()] kex follows: False
2025-11-25T15:13:07.991 [DEBUG] [Thread-991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:13:07.992 [DEBUG] [Thread-991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:13:07.992 [DEBUG] [Thread-991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:13:07.992 [DEBUG] [Thread-991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:13:07.992 [DEBUG] [Thread-991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:13:07.992 [DEBUG] [Thread-991] [transport.py] [_log()] Compression: none
2025-11-25T15:13:07.992 [DEBUG] [Thread-991] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:13:08.052 [DEBUG] [Thread-991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:13:08.053 [DEBUG] [Thread-991] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:13:08.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:13:08.055 [DEBUG] [Thread-991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:13:08.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:13:08.111 [DEBUG] [Thread-991] [transport.py] [_log()] userauth is OK
2025-11-25T15:13:08.112 [DEBUG] [Thread-991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:13:08.112 [DEBUG] [Thread-991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:13:08.112 [DEBUG] [Thread-991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:13:08.112 [DEBUG] [Thread-991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:13:08.131 [INFO] [Thread-991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:13:08.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:13:08.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:13:08.918 [DEBUG] [Thread-991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:13:08.918 [DEBUG] [Thread-991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:13:08.965 [DEBUG] [Thread-991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:13:08.966 [DEBUG] [Thread-991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:13:08.975 [DEBUG] [Thread-991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:13:08.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:13:08.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:13:08.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:13:09.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:13:09.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:13:09.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:13:09.012 [DEBUG] [Thread-991] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:13:14.723 [DEBUG] [Thread-993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:13:25.509 [DEBUG] [Thread-994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:13:29.790 [DEBUG] [Thread-995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:13:39.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:13:39.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:13:39.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:13:39.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 13, 36), 38.66, 6.87, 0.0, 15.88, 27.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:13:39.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:13:36
2025-11-25T15:13:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:13:39.976 [DEBUG] [Thread-996] [transport.py] [_log()] starting thread (client mode): 0x73782620
2025-11-25T15:13:39.976 [DEBUG] [Thread-996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:13:39.997 [DEBUG] [Thread-996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:13:39.997 [INFO] [Thread-996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:13:40.000 [DEBUG] [Thread-996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:13:40.000 [DEBUG] [Thread-996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] client lang: <none>
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] server lang: <none>
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] kex follows: False
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] Compression: none
2025-11-25T15:13:40.001 [DEBUG] [Thread-996] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:13:40.019 [DEBUG] [Thread-996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:13:40.019 [DEBUG] [Thread-996] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:13:40.020 [DEBUG] [Thread-996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:13:40.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:13:40.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:13:40.022 [DEBUG] [Thread-996] [transport.py] [_log()] userauth is OK
2025-11-25T15:13:40.022 [DEBUG] [Thread-996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:13:40.022 [DEBUG] [Thread-996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:13:40.022 [DEBUG] [Thread-996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:13:40.022 [DEBUG] [Thread-996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:13:40.046 [INFO] [Thread-996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:13:40.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:13:40.692 [DEBUG] [Thread-996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:13:40.692 [DEBUG] [Thread-996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:13:40.693 [DEBUG] [Thread-996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:13:40.733 [DEBUG] [Thread-996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:13:40.733 [DEBUG] [Thread-996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:13:40.737 [DEBUG] [Thread-996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:13:40.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:13:40.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:13:40.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:13:40.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:13:40.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:13:40.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:13:40.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:13:40.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:13:40.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:13:40.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.550795 -999.00  +26.70  15.28     12   -4.60 1 1 1 1 1   888    0 32.46 60.39 ----- 13.9 15.3 15.4 21.5 34.5 -32.2 34.1 -32.2 35.6 -30.2 36.1 -31.0
2025-11-25T15:13:40.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:13:40.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:13:40.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.550795
2025-11-25T15:13:40.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:13:40.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:13:40.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:13:40.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:13:40.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:13:40.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:13:36', tmtdew=38.66, humidity=6.87, cloud=0.0, wind=15.88, temperature=27.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:13:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:13:40.764 [DEBUG] [Thread-996] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:13:40.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:13:40.866 [DEBUG] [Thread-999] [transport.py] [_log()] starting thread (client mode): 0x7378f130
2025-11-25T15:13:40.866 [DEBUG] [Thread-999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:13:40.881 [DEBUG] [Thread-999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:13:40.881 [INFO] [Thread-999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:13:40.888 [DEBUG] [Thread-999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:13:40.888 [DEBUG] [Thread-999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] client lang: <none>
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] server lang: <none>
2025-11-25T15:13:40.889 [DEBUG] [Thread-999] [transport.py] [_log()] kex follows: False
2025-11-25T15:13:40.890 [DEBUG] [Thread-999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:13:40.890 [DEBUG] [Thread-999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:13:40.890 [DEBUG] [Thread-999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:13:40.890 [DEBUG] [Thread-999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:13:40.890 [DEBUG] [Thread-999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:13:40.890 [DEBUG] [Thread-999] [transport.py] [_log()] Compression: none
2025-11-25T15:13:40.890 [DEBUG] [Thread-999] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:13:40.945 [DEBUG] [Thread-999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:13:40.946 [DEBUG] [Thread-999] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:13:40.946 [DEBUG] [Thread-999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:13:40.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:13:40.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:13:41.002 [DEBUG] [Thread-999] [transport.py] [_log()] userauth is OK
2025-11-25T15:13:41.002 [DEBUG] [Thread-999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:13:41.002 [DEBUG] [Thread-999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:13:41.002 [DEBUG] [Thread-999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:13:41.002 [DEBUG] [Thread-999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:13:41.021 [INFO] [Thread-999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:13:41.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:13:41.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:13:41.830 [DEBUG] [Thread-999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:13:41.830 [DEBUG] [Thread-999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:13:41.879 [DEBUG] [Thread-999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:13:41.879 [DEBUG] [Thread-999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:13:41.888 [DEBUG] [Thread-999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:13:41.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:13:41.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:13:41.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:13:41.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:13:41.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:13:41.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:13:41.924 [DEBUG] [Thread-999] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:13:44.831 [DEBUG] [Thread-1001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:13:59.889 [DEBUG] [Thread-1002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:14:11.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:14:11.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:14:11.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:14:12.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 14, 8), 38.63, 6.91, 0.0, 18.79, 27.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:14:12.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:14:08
2025-11-25T15:14:12.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:14:12.915 [DEBUG] [Thread-1003] [transport.py] [_log()] starting thread (client mode): 0x7374d240
2025-11-25T15:14:12.915 [DEBUG] [Thread-1003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:14:12.936 [DEBUG] [Thread-1003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:14:12.936 [INFO] [Thread-1003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:14:12.939 [DEBUG] [Thread-1003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:14:12.939 [DEBUG] [Thread-1003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:14:12.940 [DEBUG] [Thread-1003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:14:12.940 [DEBUG] [Thread-1003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:14:12.940 [DEBUG] [Thread-1003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:14:12.940 [DEBUG] [Thread-1003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:14:12.940 [DEBUG] [Thread-1003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:14:12.940 [DEBUG] [Thread-1003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:14:12.940 [DEBUG] [Thread-1003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:14:12.940 [DEBUG] [Thread-1003] [transport.py] [_log()] client lang: <none>
2025-11-25T15:14:12.941 [DEBUG] [Thread-1003] [transport.py] [_log()] server lang: <none>
2025-11-25T15:14:12.941 [DEBUG] [Thread-1003] [transport.py] [_log()] kex follows: False
2025-11-25T15:14:12.941 [DEBUG] [Thread-1003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:14:12.941 [DEBUG] [Thread-1003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:14:12.941 [DEBUG] [Thread-1003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:14:12.941 [DEBUG] [Thread-1003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:14:12.941 [DEBUG] [Thread-1003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:14:12.941 [DEBUG] [Thread-1003] [transport.py] [_log()] Compression: none
2025-11-25T15:14:12.942 [DEBUG] [Thread-1003] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:14:12.962 [DEBUG] [Thread-1003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:14:12.962 [DEBUG] [Thread-1003] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:14:12.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:14:12.963 [DEBUG] [Thread-1003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:14:12.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:14:12.966 [DEBUG] [Thread-1003] [transport.py] [_log()] userauth is OK
2025-11-25T15:14:12.966 [DEBUG] [Thread-1003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:14:12.966 [DEBUG] [Thread-1003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:14:12.966 [DEBUG] [Thread-1003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:14:12.966 [DEBUG] [Thread-1003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:14:12.985 [INFO] [Thread-1003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:14:12.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:14:13.654 [DEBUG] [Thread-1003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:14:13.654 [DEBUG] [Thread-1003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:14:13.654 [DEBUG] [Thread-1003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:14:13.695 [DEBUG] [Thread-1003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:14:13.695 [DEBUG] [Thread-1003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:14:13.699 [DEBUG] [Thread-1003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:14:13.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:14:13.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:14:13.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:14:13.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:14:13.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:14:13.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:14:13.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:14:13.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:14:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:14:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.551143 -999.00  +26.80  26.02     12   -4.50 1 1 1 1 1   888    0 32.61 65.98 ----- 22.1 26.0 45.6 29.8 34.3 -32.6 33.9 -33.9 35.1 -32.2 35.8 -30.7
2025-11-25T15:14:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:14:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:14:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.551143
2025-11-25T15:14:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:14:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:14:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:14:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:14:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:14:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:14:08', tmtdew=38.63, humidity=6.91, cloud=0.0, wind=18.79, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:13:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:14:13.726 [DEBUG] [Thread-1003] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:14:13.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:14:13.828 [DEBUG] [Thread-1006] [transport.py] [_log()] starting thread (client mode): 0x7374f910
2025-11-25T15:14:13.828 [DEBUG] [Thread-1006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:14:13.841 [DEBUG] [Thread-1006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:14:13.842 [INFO] [Thread-1006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] client lang: <none>
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] server lang: <none>
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] kex follows: False
2025-11-25T15:14:13.849 [DEBUG] [Thread-1006] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:14:13.850 [DEBUG] [Thread-1006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:14:13.850 [DEBUG] [Thread-1006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:14:13.850 [DEBUG] [Thread-1006] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:14:13.850 [DEBUG] [Thread-1006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:14:13.850 [DEBUG] [Thread-1006] [transport.py] [_log()] Compression: none
2025-11-25T15:14:13.851 [DEBUG] [Thread-1006] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:14:13.908 [DEBUG] [Thread-1006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:14:13.909 [DEBUG] [Thread-1006] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:14:13.910 [DEBUG] [Thread-1006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:14:13.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:14:13.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:14:13.964 [DEBUG] [Thread-1006] [transport.py] [_log()] userauth is OK
2025-11-25T15:14:13.965 [DEBUG] [Thread-1006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:14:13.965 [DEBUG] [Thread-1006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:14:13.965 [DEBUG] [Thread-1006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:14:13.965 [DEBUG] [Thread-1006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:14:13.983 [INFO] [Thread-1006] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:14:13.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:14:13.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:14:14.785 [DEBUG] [Thread-1006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:14:14.785 [DEBUG] [Thread-1006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:14:14.834 [DEBUG] [Thread-1006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:14:14.834 [DEBUG] [Thread-1006] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:14:14.843 [DEBUG] [Thread-1006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:14:14.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:14:14.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:14:14.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:14:14.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:14:14.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:14:14.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:14:14.879 [DEBUG] [Thread-1006] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:14:14.932 [DEBUG] [Thread-1008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:14:26.045 [DEBUG] [Thread-1009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:14:29.995 [DEBUG] [Thread-1010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:14:44.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:14:44.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:14:44.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:14:45.037 [DEBUG] [Thread-1011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:14:45.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 14, 40), 38.79, 7.29, 0.0, 14.63, 27.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:14:45.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:14:40
2025-11-25T15:14:45.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:14:45.829 [DEBUG] [Thread-1012] [transport.py] [_log()] starting thread (client mode): 0x7378f6a0
2025-11-25T15:14:45.829 [DEBUG] [Thread-1012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:14:45.850 [DEBUG] [Thread-1012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:14:45.851 [INFO] [Thread-1012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:14:45.853 [DEBUG] [Thread-1012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:14:45.853 [DEBUG] [Thread-1012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:14:45.853 [DEBUG] [Thread-1012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:14:45.853 [DEBUG] [Thread-1012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:14:45.853 [DEBUG] [Thread-1012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:14:45.853 [DEBUG] [Thread-1012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:14:45.853 [DEBUG] [Thread-1012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] client lang: <none>
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] server lang: <none>
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] kex follows: False
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] Compression: none
2025-11-25T15:14:45.854 [DEBUG] [Thread-1012] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:14:45.874 [DEBUG] [Thread-1012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:14:45.875 [DEBUG] [Thread-1012] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:14:45.875 [DEBUG] [Thread-1012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:14:45.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:14:45.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:14:45.877 [DEBUG] [Thread-1012] [transport.py] [_log()] userauth is OK
2025-11-25T15:14:45.877 [DEBUG] [Thread-1012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:14:45.877 [DEBUG] [Thread-1012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:14:45.878 [DEBUG] [Thread-1012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:14:45.878 [DEBUG] [Thread-1012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:14:45.902 [INFO] [Thread-1012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:14:45.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:14:46.548 [DEBUG] [Thread-1012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:14:46.549 [DEBUG] [Thread-1012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:14:46.549 [DEBUG] [Thread-1012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:14:46.590 [DEBUG] [Thread-1012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:14:46.590 [DEBUG] [Thread-1012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:14:46.593 [DEBUG] [Thread-1012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:14:46.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:14:46.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:14:46.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:14:46.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:14:46.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:14:46.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:14:46.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:14:46.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:14:46.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:14:46.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.551490 -999.00  +26.70  21.55     12   -4.70 1 1 1 1 1   888    0 32.66 62.80 ----- 23.4 21.6 44.4 27.7 34.1 -33.3 33.7 -34.9 34.8 -34.1 35.6 -30.7
2025-11-25T15:14:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:14:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:14:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.551490
2025-11-25T15:14:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:14:46.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:14:46.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:14:46.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:14:46.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:14:46.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:14:40', tmtdew=38.79, humidity=7.29, cloud=0.0, wind=14.63, temperature=27.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:14:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:14:46.624 [DEBUG] [Thread-1012] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:14:46.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:14:46.731 [DEBUG] [Thread-1015] [transport.py] [_log()] starting thread (client mode): 0x7378fd60
2025-11-25T15:14:46.731 [DEBUG] [Thread-1015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:14:46.746 [DEBUG] [Thread-1015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:14:46.746 [INFO] [Thread-1015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:14:46.753 [DEBUG] [Thread-1015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] client lang: <none>
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] server lang: <none>
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] kex follows: False
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:14:46.754 [DEBUG] [Thread-1015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:14:46.755 [DEBUG] [Thread-1015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:14:46.755 [DEBUG] [Thread-1015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:14:46.755 [DEBUG] [Thread-1015] [transport.py] [_log()] Compression: none
2025-11-25T15:14:46.755 [DEBUG] [Thread-1015] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:14:46.812 [DEBUG] [Thread-1015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:14:46.812 [DEBUG] [Thread-1015] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:14:46.813 [DEBUG] [Thread-1015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:14:46.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:14:46.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:14:46.871 [DEBUG] [Thread-1015] [transport.py] [_log()] userauth is OK
2025-11-25T15:14:46.872 [DEBUG] [Thread-1015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:14:46.872 [DEBUG] [Thread-1015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:14:46.872 [DEBUG] [Thread-1015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:14:46.872 [DEBUG] [Thread-1015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:14:46.890 [INFO] [Thread-1015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:14:46.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:14:46.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:14:47.676 [DEBUG] [Thread-1015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:14:47.676 [DEBUG] [Thread-1015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:14:47.723 [DEBUG] [Thread-1015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:14:47.724 [DEBUG] [Thread-1015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:14:47.732 [DEBUG] [Thread-1015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:14:47.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:14:47.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:14:47.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:14:47.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:14:47.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:14:47.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:14:47.767 [DEBUG] [Thread-1015] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:15:00.083 [DEBUG] [Thread-1017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:15:15.152 [DEBUG] [Thread-1018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:15:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:15:17.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:15:17.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:15:18.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 15, 12), 38.47, 7.44, 0.0, 14.19, 27.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:15:18.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:15:12
2025-11-25T15:15:18.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:15:18.717 [DEBUG] [Thread-1019] [transport.py] [_log()] starting thread (client mode): 0x737c6d70
2025-11-25T15:15:18.718 [DEBUG] [Thread-1019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:15:18.738 [DEBUG] [Thread-1019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:15:18.738 [INFO] [Thread-1019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:15:18.742 [DEBUG] [Thread-1019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:15:18.742 [DEBUG] [Thread-1019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:15:18.742 [DEBUG] [Thread-1019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:15:18.742 [DEBUG] [Thread-1019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:15:18.743 [DEBUG] [Thread-1019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:15:18.743 [DEBUG] [Thread-1019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:15:18.743 [DEBUG] [Thread-1019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:15:18.743 [DEBUG] [Thread-1019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:15:18.743 [DEBUG] [Thread-1019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:15:18.743 [DEBUG] [Thread-1019] [transport.py] [_log()] client lang: <none>
2025-11-25T15:15:18.743 [DEBUG] [Thread-1019] [transport.py] [_log()] server lang: <none>
2025-11-25T15:15:18.743 [DEBUG] [Thread-1019] [transport.py] [_log()] kex follows: False
2025-11-25T15:15:18.743 [DEBUG] [Thread-1019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:15:18.744 [DEBUG] [Thread-1019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:15:18.744 [DEBUG] [Thread-1019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:15:18.744 [DEBUG] [Thread-1019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:15:18.744 [DEBUG] [Thread-1019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:15:18.744 [DEBUG] [Thread-1019] [transport.py] [_log()] Compression: none
2025-11-25T15:15:18.744 [DEBUG] [Thread-1019] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:15:18.762 [DEBUG] [Thread-1019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:15:18.763 [DEBUG] [Thread-1019] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:15:18.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:15:18.763 [DEBUG] [Thread-1019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:15:18.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:15:18.766 [DEBUG] [Thread-1019] [transport.py] [_log()] userauth is OK
2025-11-25T15:15:18.766 [DEBUG] [Thread-1019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:15:18.766 [DEBUG] [Thread-1019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:15:18.766 [DEBUG] [Thread-1019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:15:18.766 [DEBUG] [Thread-1019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:15:18.791 [INFO] [Thread-1019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:15:18.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:15:20.255 [DEBUG] [Thread-1019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:15:20.255 [DEBUG] [Thread-1019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:15:20.255 [DEBUG] [Thread-1019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:15:20.296 [DEBUG] [Thread-1019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:15:20.296 [DEBUG] [Thread-1019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:15:20.299 [DEBUG] [Thread-1019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:15:20.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:15:20.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:15:20.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:15:20.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:15:20.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:15:20.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:15:20.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:15:20.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:15:20.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:15:20.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.551837 -999.00  +26.50  20.76     12   -4.70 1 1 1 1 1   888    0 32.84 61.73 ----- 18.5 20.8 40.8 26.0 33.9 -32.3 33.6 -33.7 34.7 -32.0 35.4 -30.8
2025-11-25T15:15:20.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:15:20.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:15:20.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.551837
2025-11-25T15:15:20.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:15:20.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:15:20.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:15:20.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:15:20.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:15:20.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:15:12', tmtdew=38.47, humidity=7.44, cloud=0.0, wind=14.19, temperature=27.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:14:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:15:20.332 [DEBUG] [Thread-1019] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:15:20.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:15:20.434 [DEBUG] [Thread-1022] [transport.py] [_log()] starting thread (client mode): 0x737e8910
2025-11-25T15:15:20.434 [DEBUG] [Thread-1022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:15:20.448 [DEBUG] [Thread-1022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:15:20.449 [INFO] [Thread-1022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:15:20.456 [DEBUG] [Thread-1022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:15:20.456 [DEBUG] [Thread-1022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:15:20.457 [DEBUG] [Thread-1022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:15:20.457 [DEBUG] [Thread-1022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:15:20.457 [DEBUG] [Thread-1022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:15:20.457 [DEBUG] [Thread-1022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:15:20.457 [DEBUG] [Thread-1022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:15:20.457 [DEBUG] [Thread-1022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] client lang: <none>
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] server lang: <none>
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] kex follows: False
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] Compression: none
2025-11-25T15:15:20.458 [DEBUG] [Thread-1022] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:15:20.514 [DEBUG] [Thread-1022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:15:20.515 [DEBUG] [Thread-1022] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:15:20.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:15:20.516 [DEBUG] [Thread-1022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:15:20.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:15:20.570 [DEBUG] [Thread-1022] [transport.py] [_log()] userauth is OK
2025-11-25T15:15:20.570 [DEBUG] [Thread-1022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:15:20.570 [DEBUG] [Thread-1022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:15:20.570 [DEBUG] [Thread-1022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:15:20.570 [DEBUG] [Thread-1022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:15:20.584 [INFO] [Thread-1022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:15:20.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:15:20.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:15:21.347 [DEBUG] [Thread-1022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:15:21.347 [DEBUG] [Thread-1022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:15:21.394 [DEBUG] [Thread-1022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:15:21.395 [DEBUG] [Thread-1022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:15:21.404 [DEBUG] [Thread-1022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:15:21.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:15:21.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:15:21.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:15:21.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:15:21.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:15:21.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:15:21.440 [DEBUG] [Thread-1022] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:15:26.768 [DEBUG] [Thread-1024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:15:30.202 [DEBUG] [Thread-1025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:15:35.678 [DEBUG] [Thread-1026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:15:45.274 [DEBUG] [Thread-1027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:15:51.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:15:51.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:15:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:15:52.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 15, 44), 38.81, 6.92, 0.0, 12.28, 27.24, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:15:52.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:15:44
2025-11-25T15:15:52.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:15:52.391 [DEBUG] [Thread-1028] [transport.py] [_log()] starting thread (client mode): 0x7374fa00
2025-11-25T15:15:52.391 [DEBUG] [Thread-1028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:15:52.411 [DEBUG] [Thread-1028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:15:52.411 [INFO] [Thread-1028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] client lang: <none>
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] server lang: <none>
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] kex follows: False
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:15:52.414 [DEBUG] [Thread-1028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:15:52.415 [DEBUG] [Thread-1028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:15:52.415 [DEBUG] [Thread-1028] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:15:52.415 [DEBUG] [Thread-1028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:15:52.415 [DEBUG] [Thread-1028] [transport.py] [_log()] Compression: none
2025-11-25T15:15:52.415 [DEBUG] [Thread-1028] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:15:52.433 [DEBUG] [Thread-1028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:15:52.433 [DEBUG] [Thread-1028] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:15:52.434 [DEBUG] [Thread-1028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:15:52.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:15:52.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:15:52.436 [DEBUG] [Thread-1028] [transport.py] [_log()] userauth is OK
2025-11-25T15:15:52.436 [DEBUG] [Thread-1028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:15:52.436 [DEBUG] [Thread-1028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:15:52.436 [DEBUG] [Thread-1028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:15:52.436 [DEBUG] [Thread-1028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:15:52.472 [INFO] [Thread-1028] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:15:52.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:15:53.132 [DEBUG] [Thread-1028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:15:53.133 [DEBUG] [Thread-1028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:15:53.133 [DEBUG] [Thread-1028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:15:53.173 [DEBUG] [Thread-1028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:15:53.174 [DEBUG] [Thread-1028] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:15:53.177 [DEBUG] [Thread-1028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:15:53.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:15:53.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:15:53.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:15:53.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:15:53.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:15:53.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:15:53.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:15:53.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:15:53.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:15:53.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.552184 -999.00  +26.20  17.59     12   -4.80 1 1 1 1 1   888    0 32.29 55.95 ----- 15.9 17.6 40.4 22.2 33.8 -32.4 33.5 -32.2 34.6 -29.3 35.1 -30.8
2025-11-25T15:15:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:15:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:15:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.552184
2025-11-25T15:15:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:15:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:15:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:15:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:15:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:15:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:15:44', tmtdew=38.81, humidity=6.92, cloud=0.0, wind=12.28, temperature=27.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:15:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:15:53.203 [DEBUG] [Thread-1028] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:15:53.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:15:53.307 [DEBUG] [Thread-1031] [transport.py] [_log()] starting thread (client mode): 0x737c5750
2025-11-25T15:15:53.307 [DEBUG] [Thread-1031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:15:53.322 [DEBUG] [Thread-1031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:15:53.322 [INFO] [Thread-1031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:15:53.329 [DEBUG] [Thread-1031] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:15:53.330 [DEBUG] [Thread-1031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:15:53.330 [DEBUG] [Thread-1031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:15:53.330 [DEBUG] [Thread-1031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:15:53.330 [DEBUG] [Thread-1031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:15:53.330 [DEBUG] [Thread-1031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:15:53.330 [DEBUG] [Thread-1031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:15:53.331 [DEBUG] [Thread-1031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:15:53.331 [DEBUG] [Thread-1031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:15:53.331 [DEBUG] [Thread-1031] [transport.py] [_log()] client lang: <none>
2025-11-25T15:15:53.331 [DEBUG] [Thread-1031] [transport.py] [_log()] server lang: <none>
2025-11-25T15:15:53.331 [DEBUG] [Thread-1031] [transport.py] [_log()] kex follows: False
2025-11-25T15:15:53.331 [DEBUG] [Thread-1031] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:15:53.331 [DEBUG] [Thread-1031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:15:53.331 [DEBUG] [Thread-1031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:15:53.331 [DEBUG] [Thread-1031] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:15:53.332 [DEBUG] [Thread-1031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:15:53.332 [DEBUG] [Thread-1031] [transport.py] [_log()] Compression: none
2025-11-25T15:15:53.332 [DEBUG] [Thread-1031] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:15:53.390 [DEBUG] [Thread-1031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:15:53.390 [DEBUG] [Thread-1031] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:15:53.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:15:53.391 [DEBUG] [Thread-1031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:15:53.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:15:53.445 [DEBUG] [Thread-1031] [transport.py] [_log()] userauth is OK
2025-11-25T15:15:53.446 [DEBUG] [Thread-1031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:15:53.446 [DEBUG] [Thread-1031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:15:53.446 [DEBUG] [Thread-1031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:15:53.446 [DEBUG] [Thread-1031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:15:53.464 [INFO] [Thread-1031] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:15:53.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:15:53.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:15:54.221 [DEBUG] [Thread-1031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:15:54.221 [DEBUG] [Thread-1031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:15:54.269 [DEBUG] [Thread-1031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:15:54.269 [DEBUG] [Thread-1031] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:15:54.278 [DEBUG] [Thread-1031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:15:54.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:15:54.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:15:54.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:15:54.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:15:54.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:15:54.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:15:54.315 [DEBUG] [Thread-1031] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:16:00.317 [DEBUG] [Thread-1033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:16:15.383 [DEBUG] [Thread-1034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:16:24.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:16:24.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:16:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:16:24.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 16, 16), 38.58, 7.06, 0.0, 12.69, 27.28, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:16:24.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:16:16
2025-11-25T15:16:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:16:25.259 [DEBUG] [Thread-1035] [transport.py] [_log()] starting thread (client mode): 0x7374de70
2025-11-25T15:16:25.259 [DEBUG] [Thread-1035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:16:25.281 [DEBUG] [Thread-1035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:16:25.281 [INFO] [Thread-1035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] client lang: <none>
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] server lang: <none>
2025-11-25T15:16:25.285 [DEBUG] [Thread-1035] [transport.py] [_log()] kex follows: False
2025-11-25T15:16:25.286 [DEBUG] [Thread-1035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:16:25.286 [DEBUG] [Thread-1035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:16:25.286 [DEBUG] [Thread-1035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:16:25.286 [DEBUG] [Thread-1035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:16:25.286 [DEBUG] [Thread-1035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:16:25.286 [DEBUG] [Thread-1035] [transport.py] [_log()] Compression: none
2025-11-25T15:16:25.286 [DEBUG] [Thread-1035] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:16:25.303 [DEBUG] [Thread-1035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:16:25.304 [DEBUG] [Thread-1035] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:16:25.305 [DEBUG] [Thread-1035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:16:25.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:16:25.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:16:25.307 [DEBUG] [Thread-1035] [transport.py] [_log()] userauth is OK
2025-11-25T15:16:25.307 [DEBUG] [Thread-1035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:16:25.307 [DEBUG] [Thread-1035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:16:25.307 [DEBUG] [Thread-1035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:16:25.307 [DEBUG] [Thread-1035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:16:25.343 [INFO] [Thread-1035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:16:25.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:16:26.164 [DEBUG] [Thread-1035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:16:26.165 [DEBUG] [Thread-1035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:16:26.165 [DEBUG] [Thread-1035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:16:26.206 [DEBUG] [Thread-1035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:16:26.206 [DEBUG] [Thread-1035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:16:26.209 [DEBUG] [Thread-1035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:16:26.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:16:26.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:16:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:16:26.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:16:26.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:16:26.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:16:26.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:16:26.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:16:26.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:16:26.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.552531 -999.00  +26.20  14.26     12   -4.70 1 1 1 1 1   888    0 32.48 56.49 ----- 18.2 14.3 46.8 17.7 33.7 -31.3 33.5 -32.9 34.5 -29.8 35.0 -29.9
2025-11-25T15:16:26.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:16:26.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:16:26.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.552531
2025-11-25T15:16:26.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:16:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:16:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:16:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:16:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:16:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:16:16', tmtdew=38.58, humidity=7.06, cloud=0.0, wind=12.69, temperature=27.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:15:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:16:26.247 [DEBUG] [Thread-1035] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:16:26.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:16:26.351 [DEBUG] [Thread-1038] [transport.py] [_log()] starting thread (client mode): 0x737c5c90
2025-11-25T15:16:26.352 [DEBUG] [Thread-1038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:16:26.368 [DEBUG] [Thread-1038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:16:26.368 [INFO] [Thread-1038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:16:26.375 [DEBUG] [Thread-1038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:16:26.375 [DEBUG] [Thread-1038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] client lang: <none>
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] server lang: <none>
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] kex follows: False
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:16:26.376 [DEBUG] [Thread-1038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:16:26.377 [DEBUG] [Thread-1038] [transport.py] [_log()] Compression: none
2025-11-25T15:16:26.377 [DEBUG] [Thread-1038] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:16:26.436 [DEBUG] [Thread-1038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:16:26.436 [DEBUG] [Thread-1038] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:16:26.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:16:26.438 [DEBUG] [Thread-1038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:16:26.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:16:26.496 [DEBUG] [Thread-1038] [transport.py] [_log()] userauth is OK
2025-11-25T15:16:26.496 [DEBUG] [Thread-1038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:16:26.496 [DEBUG] [Thread-1038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:16:26.496 [DEBUG] [Thread-1038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:16:26.496 [DEBUG] [Thread-1038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:16:26.517 [INFO] [Thread-1038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:16:26.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:16:26.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:16:27.321 [DEBUG] [Thread-1038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:16:27.321 [DEBUG] [Thread-1038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:16:27.371 [DEBUG] [Thread-1038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:16:27.371 [DEBUG] [Thread-1038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:16:27.388 [DEBUG] [Thread-1038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:16:27.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:16:27.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:16:27.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:16:27.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:16:27.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:16:27.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:16:27.419 [DEBUG] [Thread-1038] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:16:27.532 [DEBUG] [Thread-1040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:16:30.423 [DEBUG] [Thread-1041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:16:45.490 [DEBUG] [Thread-1042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:16:57.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:16:57.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:16:57.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:16:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 16, 48), 38.55, 6.97, 0.0, 14.15, 27.31, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:16:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:16:48
2025-11-25T15:16:58.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:16:58.377 [DEBUG] [Thread-1043] [transport.py] [_log()] starting thread (client mode): 0x737ebd00
2025-11-25T15:16:58.377 [DEBUG] [Thread-1043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:16:58.398 [DEBUG] [Thread-1043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:16:58.398 [INFO] [Thread-1043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] client lang: <none>
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] server lang: <none>
2025-11-25T15:16:58.401 [DEBUG] [Thread-1043] [transport.py] [_log()] kex follows: False
2025-11-25T15:16:58.402 [DEBUG] [Thread-1043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:16:58.402 [DEBUG] [Thread-1043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:16:58.402 [DEBUG] [Thread-1043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:16:58.402 [DEBUG] [Thread-1043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:16:58.402 [DEBUG] [Thread-1043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:16:58.402 [DEBUG] [Thread-1043] [transport.py] [_log()] Compression: none
2025-11-25T15:16:58.402 [DEBUG] [Thread-1043] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:16:58.417 [DEBUG] [Thread-1043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:16:58.417 [DEBUG] [Thread-1043] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:16:58.417 [DEBUG] [Thread-1043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:16:58.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:16:58.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:16:58.418 [DEBUG] [Thread-1043] [transport.py] [_log()] userauth is OK
2025-11-25T15:16:58.418 [DEBUG] [Thread-1043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:16:58.418 [DEBUG] [Thread-1043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:16:58.418 [DEBUG] [Thread-1043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:16:58.418 [DEBUG] [Thread-1043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:16:58.433 [INFO] [Thread-1043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:16:58.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:16:59.079 [DEBUG] [Thread-1043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:16:59.080 [DEBUG] [Thread-1043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:16:59.080 [DEBUG] [Thread-1043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:16:59.121 [DEBUG] [Thread-1043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:16:59.121 [DEBUG] [Thread-1043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:16:59.124 [DEBUG] [Thread-1043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:16:59.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:16:59.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:16:59.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:16:59.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:16:59.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:16:59.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:16:59.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:16:59.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:16:59.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:16:59.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.553226 -999.00  +26.00  12.57     12   -4.70 1 1 1 1 1   888    0 32.28 49.68 ----- 13.0 12.6 49.4 16.6 33.6 -30.5 33.3 -30.7 34.3 -28.4 34.8 -30.1
2025-11-25T15:16:59.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:16:59.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:16:59.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.553226
2025-11-25T15:16:59.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:16:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:16:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:16:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:16:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:16:59.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:16:48', tmtdew=38.55, humidity=6.97, cloud=0.0, wind=14.15, temperature=27.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:16:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:16:59.149 [DEBUG] [Thread-1043] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:16:59.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:16:59.252 [DEBUG] [Thread-1046] [transport.py] [_log()] starting thread (client mode): 0x737c7310
2025-11-25T15:16:59.252 [DEBUG] [Thread-1046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:16:59.266 [DEBUG] [Thread-1046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:16:59.266 [INFO] [Thread-1046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:16:59.273 [DEBUG] [Thread-1046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:16:59.274 [DEBUG] [Thread-1046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:16:59.274 [DEBUG] [Thread-1046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:16:59.274 [DEBUG] [Thread-1046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:16:59.274 [DEBUG] [Thread-1046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:16:59.274 [DEBUG] [Thread-1046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:16:59.274 [DEBUG] [Thread-1046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:16:59.274 [DEBUG] [Thread-1046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:16:59.274 [DEBUG] [Thread-1046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:16:59.275 [DEBUG] [Thread-1046] [transport.py] [_log()] client lang: <none>
2025-11-25T15:16:59.275 [DEBUG] [Thread-1046] [transport.py] [_log()] server lang: <none>
2025-11-25T15:16:59.275 [DEBUG] [Thread-1046] [transport.py] [_log()] kex follows: False
2025-11-25T15:16:59.275 [DEBUG] [Thread-1046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:16:59.275 [DEBUG] [Thread-1046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:16:59.275 [DEBUG] [Thread-1046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:16:59.275 [DEBUG] [Thread-1046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:16:59.276 [DEBUG] [Thread-1046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:16:59.276 [DEBUG] [Thread-1046] [transport.py] [_log()] Compression: none
2025-11-25T15:16:59.276 [DEBUG] [Thread-1046] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:16:59.335 [DEBUG] [Thread-1046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:16:59.336 [DEBUG] [Thread-1046] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:16:59.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:16:59.337 [DEBUG] [Thread-1046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:16:59.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:16:59.391 [DEBUG] [Thread-1046] [transport.py] [_log()] userauth is OK
2025-11-25T15:16:59.392 [DEBUG] [Thread-1046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:16:59.392 [DEBUG] [Thread-1046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:16:59.392 [DEBUG] [Thread-1046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:16:59.392 [DEBUG] [Thread-1046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:16:59.410 [INFO] [Thread-1046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:16:59.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:16:59.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:17:00.190 [DEBUG] [Thread-1046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:17:00.190 [DEBUG] [Thread-1046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:17:00.237 [DEBUG] [Thread-1046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:17:00.238 [DEBUG] [Thread-1046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:17:00.246 [DEBUG] [Thread-1046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:17:00.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:17:00.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:17:00.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:17:00.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:17:00.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:17:00.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:17:00.280 [DEBUG] [Thread-1046] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:17:00.529 [DEBUG] [Thread-1048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:17:15.591 [DEBUG] [Thread-1049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:17:28.262 [DEBUG] [Thread-1050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:17:30.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:17:30.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:17:30.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:17:30.632 [DEBUG] [Thread-1051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:17:30.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 17, 21), 38.85, 6.84, 0.0, 15.97, 27.5, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:17:30.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:17:21
2025-11-25T15:17:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:17:31.281 [DEBUG] [Thread-1052] [transport.py] [_log()] starting thread (client mode): 0x737835b0
2025-11-25T15:17:31.281 [DEBUG] [Thread-1052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:17:31.302 [DEBUG] [Thread-1052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:17:31.302 [INFO] [Thread-1052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:17:31.304 [DEBUG] [Thread-1052] [transport.py] [_log()] client lang: <none>
2025-11-25T15:17:31.305 [DEBUG] [Thread-1052] [transport.py] [_log()] server lang: <none>
2025-11-25T15:17:31.305 [DEBUG] [Thread-1052] [transport.py] [_log()] kex follows: False
2025-11-25T15:17:31.305 [DEBUG] [Thread-1052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:17:31.305 [DEBUG] [Thread-1052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:17:31.305 [DEBUG] [Thread-1052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:17:31.305 [DEBUG] [Thread-1052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:17:31.305 [DEBUG] [Thread-1052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:17:31.305 [DEBUG] [Thread-1052] [transport.py] [_log()] Compression: none
2025-11-25T15:17:31.305 [DEBUG] [Thread-1052] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:17:31.314 [DEBUG] [Thread-1052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:17:31.314 [DEBUG] [Thread-1052] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:17:31.314 [DEBUG] [Thread-1052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:17:31.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:17:31.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:17:31.314 [DEBUG] [Thread-1052] [transport.py] [_log()] userauth is OK
2025-11-25T15:17:31.314 [DEBUG] [Thread-1052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:17:31.314 [DEBUG] [Thread-1052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:17:31.315 [DEBUG] [Thread-1052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:17:31.315 [DEBUG] [Thread-1052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:17:31.324 [INFO] [Thread-1052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:17:31.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:17:32.140 [DEBUG] [Thread-1052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:17:32.140 [DEBUG] [Thread-1052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:17:32.141 [DEBUG] [Thread-1052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:17:32.181 [DEBUG] [Thread-1052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:17:32.181 [DEBUG] [Thread-1052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:17:32.183 [DEBUG] [Thread-1052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:17:32.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:17:32.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:17:32.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:17:32.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:17:32.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:17:32.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:17:32.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:17:32.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:17:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:17:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.553573 -999.00  +26.20  18.87     12   -4.60 1 1 1 1 1   888    0 32.80 53.87 ----- 17.9 18.9 18.0 20.2 33.5 -31.3 33.2 -32.0 34.3 -28.7 34.6 -29.8
2025-11-25T15:17:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:17:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:17:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.553573
2025-11-25T15:17:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:17:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:17:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:17:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:17:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:17:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:17:21', tmtdew=38.85, humidity=6.84, cloud=0.0, wind=15.97, temperature=27.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:17:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:17:32.202 [DEBUG] [Thread-1052] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:17:32.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:17:32.296 [DEBUG] [Thread-1055] [transport.py] [_log()] starting thread (client mode): 0x737c68c0
2025-11-25T15:17:32.296 [DEBUG] [Thread-1055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:17:32.311 [DEBUG] [Thread-1055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:17:32.311 [INFO] [Thread-1055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] client lang: <none>
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] server lang: <none>
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] kex follows: False
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] Compression: none
2025-11-25T15:17:32.320 [DEBUG] [Thread-1055] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:17:32.377 [DEBUG] [Thread-1055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:17:32.377 [DEBUG] [Thread-1055] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:17:32.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:17:32.377 [DEBUG] [Thread-1055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:17:32.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:17:32.434 [DEBUG] [Thread-1055] [transport.py] [_log()] userauth is OK
2025-11-25T15:17:32.434 [DEBUG] [Thread-1055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:17:32.434 [DEBUG] [Thread-1055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:17:32.434 [DEBUG] [Thread-1055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:17:32.434 [DEBUG] [Thread-1055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:17:32.447 [INFO] [Thread-1055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:17:32.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:17:32.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:17:33.232 [DEBUG] [Thread-1055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:17:33.232 [DEBUG] [Thread-1055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:17:33.280 [DEBUG] [Thread-1055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:17:33.280 [DEBUG] [Thread-1055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:17:33.288 [DEBUG] [Thread-1055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:17:33.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:17:33.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:17:33.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:17:33.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:17:33.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:17:33.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:17:33.322 [DEBUG] [Thread-1055] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:17:45.672 [DEBUG] [Thread-1057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:18:00.753 [DEBUG] [Thread-1058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:18:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:18:03.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:18:03.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:18:04.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 17, 53), 38.78, 7.29, 0.0, 15.3, 27.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:18:04.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:17:53
2025-11-25T15:18:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:18:04.285 [DEBUG] [Thread-1059] [transport.py] [_log()] starting thread (client mode): 0x737c5f60
2025-11-25T15:18:04.285 [DEBUG] [Thread-1059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:18:04.307 [DEBUG] [Thread-1059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:18:04.307 [INFO] [Thread-1059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] client lang: <none>
2025-11-25T15:18:04.311 [DEBUG] [Thread-1059] [transport.py] [_log()] server lang: <none>
2025-11-25T15:18:04.312 [DEBUG] [Thread-1059] [transport.py] [_log()] kex follows: False
2025-11-25T15:18:04.312 [DEBUG] [Thread-1059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:18:04.312 [DEBUG] [Thread-1059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:18:04.312 [DEBUG] [Thread-1059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:18:04.312 [DEBUG] [Thread-1059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:18:04.312 [DEBUG] [Thread-1059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:18:04.312 [DEBUG] [Thread-1059] [transport.py] [_log()] Compression: none
2025-11-25T15:18:04.312 [DEBUG] [Thread-1059] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:18:04.332 [DEBUG] [Thread-1059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:18:04.333 [DEBUG] [Thread-1059] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:18:04.333 [DEBUG] [Thread-1059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:18:04.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:18:04.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:18:04.336 [DEBUG] [Thread-1059] [transport.py] [_log()] userauth is OK
2025-11-25T15:18:04.336 [DEBUG] [Thread-1059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:18:04.336 [DEBUG] [Thread-1059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:18:04.336 [DEBUG] [Thread-1059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:18:04.336 [DEBUG] [Thread-1059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:18:04.361 [INFO] [Thread-1059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:18:04.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:18:05.020 [DEBUG] [Thread-1059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:18:05.021 [DEBUG] [Thread-1059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:18:05.021 [DEBUG] [Thread-1059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:18:05.062 [DEBUG] [Thread-1059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:18:05.062 [DEBUG] [Thread-1059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:18:05.066 [DEBUG] [Thread-1059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:18:05.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:18:05.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:18:05.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:18:05.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:18:05.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:18:05.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:18:05.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:18:05.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:18:05.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:18:05.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.553920 -999.00  +26.50  27.27     12   -4.70 1 1 1 1 1   888    0 32.06 51.65 ----- 17.9 27.3 47.4 28.8 33.4 -32.4 33.1 -33.4 34.0 -32.1 34.5 -30.3
2025-11-25T15:18:05.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:18:05.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:18:05.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.553920
2025-11-25T15:18:05.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:18:05.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:18:05.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:18:05.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:18:05.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:18:05.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:17:53', tmtdew=38.78, humidity=7.29, cloud=0.0, wind=15.3, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:17:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:18:05.093 [DEBUG] [Thread-1059] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:18:05.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:18:05.196 [DEBUG] [Thread-1062] [transport.py] [_log()] starting thread (client mode): 0x70d037f0
2025-11-25T15:18:05.196 [DEBUG] [Thread-1062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:18:05.211 [DEBUG] [Thread-1062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:18:05.211 [INFO] [Thread-1062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:18:05.218 [DEBUG] [Thread-1062] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:18:05.219 [DEBUG] [Thread-1062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:18:05.219 [DEBUG] [Thread-1062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:18:05.219 [DEBUG] [Thread-1062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:18:05.219 [DEBUG] [Thread-1062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:18:05.219 [DEBUG] [Thread-1062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:18:05.219 [DEBUG] [Thread-1062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:18:05.219 [DEBUG] [Thread-1062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:18:05.220 [DEBUG] [Thread-1062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:18:05.220 [DEBUG] [Thread-1062] [transport.py] [_log()] client lang: <none>
2025-11-25T15:18:05.220 [DEBUG] [Thread-1062] [transport.py] [_log()] server lang: <none>
2025-11-25T15:18:05.220 [DEBUG] [Thread-1062] [transport.py] [_log()] kex follows: False
2025-11-25T15:18:05.220 [DEBUG] [Thread-1062] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:18:05.220 [DEBUG] [Thread-1062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:18:05.220 [DEBUG] [Thread-1062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:18:05.220 [DEBUG] [Thread-1062] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:18:05.221 [DEBUG] [Thread-1062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:18:05.221 [DEBUG] [Thread-1062] [transport.py] [_log()] Compression: none
2025-11-25T15:18:05.221 [DEBUG] [Thread-1062] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:18:05.278 [DEBUG] [Thread-1062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:18:05.278 [DEBUG] [Thread-1062] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:18:05.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:18:05.279 [DEBUG] [Thread-1062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:18:05.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:18:05.333 [DEBUG] [Thread-1062] [transport.py] [_log()] userauth is OK
2025-11-25T15:18:05.334 [DEBUG] [Thread-1062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:18:05.334 [DEBUG] [Thread-1062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:18:05.334 [DEBUG] [Thread-1062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:18:05.334 [DEBUG] [Thread-1062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:18:05.353 [INFO] [Thread-1062] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:18:05.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:18:05.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:18:06.148 [DEBUG] [Thread-1062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:18:06.148 [DEBUG] [Thread-1062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:18:06.195 [DEBUG] [Thread-1062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:18:06.195 [DEBUG] [Thread-1062] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:18:06.204 [DEBUG] [Thread-1062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:18:06.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:18:06.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:18:06.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:18:06.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:18:06.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:18:06.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:18:06.238 [DEBUG] [Thread-1062] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:18:15.797 [DEBUG] [Thread-1064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:18:28.778 [DEBUG] [Thread-1065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:18:30.863 [DEBUG] [Thread-1066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:18:36.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:18:36.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:18:36.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:18:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 18, 25), 38.79, 7.31, 0.0, 18.56, 27.55, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:18:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:18:25
2025-11-25T15:18:37.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:18:37.161 [DEBUG] [Thread-1067] [transport.py] [_log()] starting thread (client mode): 0x70d00a90
2025-11-25T15:18:37.161 [DEBUG] [Thread-1067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:18:37.182 [DEBUG] [Thread-1067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:18:37.182 [INFO] [Thread-1067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:18:37.185 [DEBUG] [Thread-1067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] client lang: <none>
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] server lang: <none>
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] kex follows: False
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] Compression: none
2025-11-25T15:18:37.186 [DEBUG] [Thread-1067] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:18:37.205 [DEBUG] [Thread-1067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:18:37.205 [DEBUG] [Thread-1067] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:18:37.206 [DEBUG] [Thread-1067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:18:37.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:18:37.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:18:37.208 [DEBUG] [Thread-1067] [transport.py] [_log()] userauth is OK
2025-11-25T15:18:37.208 [DEBUG] [Thread-1067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:18:37.208 [DEBUG] [Thread-1067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:18:37.208 [DEBUG] [Thread-1067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:18:37.208 [DEBUG] [Thread-1067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:18:37.232 [INFO] [Thread-1067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:18:37.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:18:38.057 [DEBUG] [Thread-1067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:18:38.057 [DEBUG] [Thread-1067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:18:38.058 [DEBUG] [Thread-1067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:18:38.098 [DEBUG] [Thread-1067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:18:38.098 [DEBUG] [Thread-1067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:18:38.101 [DEBUG] [Thread-1067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:18:38.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:18:38.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:18:38.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:18:38.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:18:38.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:18:38.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:18:38.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:18:38.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:18:38.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:18:38.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.554268 -999.00  +26.30  18.60     12   -4.70 1 1 1 1 1   888    0 32.07 46.61 ----- 18.6 18.6 12.7 23.9 33.4 -31.1 33.1 -31.9 34.1 -28.5 34.5 -31.2
2025-11-25T15:18:38.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:18:38.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:18:38.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.554268
2025-11-25T15:18:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:18:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:18:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:18:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:18:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:18:38.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:18:25', tmtdew=38.79, humidity=7.31, cloud=0.0, wind=18.56, temperature=27.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:18:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:18:38.127 [DEBUG] [Thread-1067] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:18:38.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:18:38.237 [DEBUG] [Thread-1070] [transport.py] [_log()] starting thread (client mode): 0x70d03280
2025-11-25T15:18:38.237 [DEBUG] [Thread-1070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:18:38.251 [DEBUG] [Thread-1070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:18:38.251 [INFO] [Thread-1070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:18:38.258 [DEBUG] [Thread-1070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:18:38.258 [DEBUG] [Thread-1070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:18:38.258 [DEBUG] [Thread-1070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:18:38.258 [DEBUG] [Thread-1070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:18:38.258 [DEBUG] [Thread-1070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] client lang: <none>
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] server lang: <none>
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] kex follows: False
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] Compression: none
2025-11-25T15:18:38.259 [DEBUG] [Thread-1070] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:18:38.315 [DEBUG] [Thread-1070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:18:38.316 [DEBUG] [Thread-1070] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:18:38.316 [DEBUG] [Thread-1070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:18:38.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:18:38.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:18:38.372 [DEBUG] [Thread-1070] [transport.py] [_log()] userauth is OK
2025-11-25T15:18:38.372 [DEBUG] [Thread-1070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:18:38.373 [DEBUG] [Thread-1070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:18:38.373 [DEBUG] [Thread-1070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:18:38.373 [DEBUG] [Thread-1070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:18:38.394 [INFO] [Thread-1070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:18:38.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:18:38.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:18:39.193 [DEBUG] [Thread-1070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:18:39.194 [DEBUG] [Thread-1070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:18:39.242 [DEBUG] [Thread-1070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:18:39.242 [DEBUG] [Thread-1070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:18:39.251 [DEBUG] [Thread-1070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:18:39.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:18:39.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:18:39.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:18:39.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:18:39.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:18:39.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:18:39.286 [DEBUG] [Thread-1070] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:18:45.904 [DEBUG] [Thread-1072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:19:00.958 [DEBUG] [Thread-1073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:19:09.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:19:09.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:19:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:19:09.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 18, 57), 39.19, 6.73, 0.0, 20.11, 27.77, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:19:09.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:18:57
2025-11-25T15:19:10.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:19:10.250 [DEBUG] [Thread-1074] [transport.py] [_log()] starting thread (client mode): 0x7374eb60
2025-11-25T15:19:10.250 [DEBUG] [Thread-1074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:19:10.271 [DEBUG] [Thread-1074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:19:10.271 [INFO] [Thread-1074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:19:10.274 [DEBUG] [Thread-1074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:19:10.274 [DEBUG] [Thread-1074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] client lang: <none>
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] server lang: <none>
2025-11-25T15:19:10.275 [DEBUG] [Thread-1074] [transport.py] [_log()] kex follows: False
2025-11-25T15:19:10.276 [DEBUG] [Thread-1074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:19:10.276 [DEBUG] [Thread-1074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:19:10.276 [DEBUG] [Thread-1074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:19:10.276 [DEBUG] [Thread-1074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:19:10.276 [DEBUG] [Thread-1074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:19:10.276 [DEBUG] [Thread-1074] [transport.py] [_log()] Compression: none
2025-11-25T15:19:10.276 [DEBUG] [Thread-1074] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:19:10.293 [DEBUG] [Thread-1074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:19:10.294 [DEBUG] [Thread-1074] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:19:10.294 [DEBUG] [Thread-1074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:19:10.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:19:10.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:19:10.296 [DEBUG] [Thread-1074] [transport.py] [_log()] userauth is OK
2025-11-25T15:19:10.297 [DEBUG] [Thread-1074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:19:10.297 [DEBUG] [Thread-1074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:19:10.297 [DEBUG] [Thread-1074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:19:10.297 [DEBUG] [Thread-1074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:19:10.320 [INFO] [Thread-1074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:19:10.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:19:10.991 [DEBUG] [Thread-1074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:19:10.991 [DEBUG] [Thread-1074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:19:10.992 [DEBUG] [Thread-1074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:19:11.032 [DEBUG] [Thread-1074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:19:11.032 [DEBUG] [Thread-1074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:19:11.035 [DEBUG] [Thread-1074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:19:11.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:19:11.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:19:11.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:19:11.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:19:11.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:19:11.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:19:11.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:19:11.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:19:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:19:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.554615 -999.00  +26.60  20.64     12   -4.40 1 1 1 1 1   888    0 32.39 47.02 ----- 23.5 20.6 55.4 27.0 33.3 -30.3 33.0 -31.6 33.9 -30.6 34.4 -29.1
2025-11-25T15:19:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:19:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:19:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.554615
2025-11-25T15:19:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:19:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:19:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:19:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:19:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:19:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:18:57', tmtdew=39.19, humidity=6.73, cloud=0.0, wind=20.11, temperature=27.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:18:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:19:11.063 [DEBUG] [Thread-1074] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:19:11.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:19:11.172 [DEBUG] [Thread-1077] [transport.py] [_log()] starting thread (client mode): 0x7374c3d0
2025-11-25T15:19:11.173 [DEBUG] [Thread-1077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:19:11.189 [DEBUG] [Thread-1077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:19:11.190 [INFO] [Thread-1077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:19:11.201 [DEBUG] [Thread-1077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] client lang: <none>
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] server lang: <none>
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] kex follows: False
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:19:11.202 [DEBUG] [Thread-1077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:19:11.203 [DEBUG] [Thread-1077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:19:11.203 [DEBUG] [Thread-1077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:19:11.203 [DEBUG] [Thread-1077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:19:11.203 [DEBUG] [Thread-1077] [transport.py] [_log()] Compression: none
2025-11-25T15:19:11.203 [DEBUG] [Thread-1077] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:19:11.257 [DEBUG] [Thread-1077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:19:11.257 [DEBUG] [Thread-1077] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:19:11.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:19:11.259 [DEBUG] [Thread-1077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:19:11.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:19:11.311 [DEBUG] [Thread-1077] [transport.py] [_log()] userauth is OK
2025-11-25T15:19:11.311 [DEBUG] [Thread-1077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:19:11.311 [DEBUG] [Thread-1077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:19:11.312 [DEBUG] [Thread-1077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:19:11.312 [DEBUG] [Thread-1077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:19:11.330 [INFO] [Thread-1077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:19:11.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:19:11.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:19:12.101 [DEBUG] [Thread-1077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:19:12.102 [DEBUG] [Thread-1077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:19:12.149 [DEBUG] [Thread-1077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:19:12.150 [DEBUG] [Thread-1077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:19:12.159 [DEBUG] [Thread-1077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:19:12.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:19: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')
2025-11-25T15:19:12.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:19:12.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:19:12.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:19:12.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:19:12.192 [DEBUG] [Thread-1077] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:19:16.003 [DEBUG] [Thread-1079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:19:29.560 [DEBUG] [Thread-1080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:19:31.064 [DEBUG] [Thread-1081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:19:42.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:19:42.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:19:42.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:19:42.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 19, 29), 38.72, 6.96, 0.0, 17.15, 27.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:19:42.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:19:29
2025-11-25T15:19:42.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:19:43.132 [DEBUG] [Thread-1082] [transport.py] [_log()] starting thread (client mode): 0x70d02a40
2025-11-25T15:19:43.132 [DEBUG] [Thread-1082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:19:43.153 [DEBUG] [Thread-1082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:19:43.153 [INFO] [Thread-1082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:19:43.156 [DEBUG] [Thread-1082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] client lang: <none>
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] server lang: <none>
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] kex follows: False
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:19:43.157 [DEBUG] [Thread-1082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:19:43.158 [DEBUG] [Thread-1082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:19:43.158 [DEBUG] [Thread-1082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:19:43.158 [DEBUG] [Thread-1082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:19:43.158 [DEBUG] [Thread-1082] [transport.py] [_log()] Compression: none
2025-11-25T15:19:43.158 [DEBUG] [Thread-1082] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:19:43.167 [DEBUG] [Thread-1082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:19:43.168 [DEBUG] [Thread-1082] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:19:43.168 [DEBUG] [Thread-1082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:19:43.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:19:43.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:19:43.170 [DEBUG] [Thread-1082] [transport.py] [_log()] userauth is OK
2025-11-25T15:19:43.171 [DEBUG] [Thread-1082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:19:43.171 [DEBUG] [Thread-1082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:19:43.171 [DEBUG] [Thread-1082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:19:43.171 [DEBUG] [Thread-1082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:19:43.195 [INFO] [Thread-1082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:19:43.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:19:43.986 [DEBUG] [Thread-1082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:19:43.986 [DEBUG] [Thread-1082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:19:43.986 [DEBUG] [Thread-1082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:19:44.026 [DEBUG] [Thread-1082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:19:44.027 [DEBUG] [Thread-1082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:19:44.029 [DEBUG] [Thread-1082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:19:44.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:19:44.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:19:44.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:19:44.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:19:44.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:19:44.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:19:44.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:19:44.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:19:44.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:19:44.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.554962 -999.00  +27.00  17.54     12   -4.40 1 1 1 1 1   888    0 32.35 48.57 ----- 13.3 17.5 38.0 28.6 33.1 -31.5 32.9 -31.4 34.0 -28.9 34.4 -29.3
2025-11-25T15:19:44.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:19:44.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:19:44.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.554962
2025-11-25T15:19:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:19:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:19:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:19:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:19:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:19:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:19:29', tmtdew=38.72, humidity=6.96, cloud=0.0, wind=17.15, temperature=27.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:19:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:19:44.054 [DEBUG] [Thread-1082] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:19:44.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:19:44.157 [DEBUG] [Thread-1085] [transport.py] [_log()] starting thread (client mode): 0x70d03250
2025-11-25T15:19:44.157 [DEBUG] [Thread-1085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:19:44.171 [DEBUG] [Thread-1085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:19:44.171 [INFO] [Thread-1085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] client lang: <none>
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] server lang: <none>
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] kex follows: False
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:19:44.179 [DEBUG] [Thread-1085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:19:44.180 [DEBUG] [Thread-1085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:19:44.180 [DEBUG] [Thread-1085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:19:44.180 [DEBUG] [Thread-1085] [transport.py] [_log()] Compression: none
2025-11-25T15:19:44.180 [DEBUG] [Thread-1085] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:19:44.239 [DEBUG] [Thread-1085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:19:44.239 [DEBUG] [Thread-1085] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:19:44.240 [DEBUG] [Thread-1085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:19:44.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:19:44.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:19:44.295 [DEBUG] [Thread-1085] [transport.py] [_log()] userauth is OK
2025-11-25T15:19:44.296 [DEBUG] [Thread-1085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:19:44.296 [DEBUG] [Thread-1085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:19:44.296 [DEBUG] [Thread-1085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:19:44.296 [DEBUG] [Thread-1085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:19:44.316 [INFO] [Thread-1085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:19:44.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:19:44.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:19:45.106 [DEBUG] [Thread-1085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:19:45.106 [DEBUG] [Thread-1085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:19:45.161 [DEBUG] [Thread-1085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:19:45.161 [DEBUG] [Thread-1085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:19:45.170 [DEBUG] [Thread-1085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:19:45.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:19:45.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:19:45.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:19:45.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:19:45.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:19:45.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:19:45.206 [DEBUG] [Thread-1085] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:19:46.107 [DEBUG] [Thread-1087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:20:01.172 [DEBUG] [Thread-1088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:20:15.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:20:15.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:20:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:20:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 20, 1), 39.41, 6.79, 0.0, 25.48, 28.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:20:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:20:01
2025-11-25T15:20:15.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:20:16.156 [DEBUG] [Thread-1089] [transport.py] [_log()] starting thread (client mode): 0x7378e7d0
2025-11-25T15:20:16.156 [DEBUG] [Thread-1089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:20:16.176 [DEBUG] [Thread-1089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:20:16.177 [INFO] [Thread-1089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] client lang: <none>
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] server lang: <none>
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] kex follows: False
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:20:16.180 [DEBUG] [Thread-1089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:20:16.181 [DEBUG] [Thread-1089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:20:16.181 [DEBUG] [Thread-1089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:20:16.181 [DEBUG] [Thread-1089] [transport.py] [_log()] Compression: none
2025-11-25T15:20:16.181 [DEBUG] [Thread-1089] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:20:16.198 [DEBUG] [Thread-1089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:20:16.199 [DEBUG] [Thread-1089] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:20:16.199 [DEBUG] [Thread-1089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:20:16.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:20:16.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:20:16.201 [DEBUG] [Thread-1089] [transport.py] [_log()] userauth is OK
2025-11-25T15:20:16.201 [DEBUG] [Thread-1089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:20:16.201 [DEBUG] [Thread-1089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:20:16.201 [DEBUG] [Thread-1089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:20:16.202 [DEBUG] [Thread-1089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:20:16.213 [DEBUG] [Thread-1091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:20:16.237 [INFO] [Thread-1089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:20:16.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:20:16.838 [DEBUG] [Thread-1089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:20:16.839 [DEBUG] [Thread-1089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:20:16.839 [DEBUG] [Thread-1089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:20:16.880 [DEBUG] [Thread-1089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:20:16.880 [DEBUG] [Thread-1089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:20:16.885 [DEBUG] [Thread-1089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:20:16.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:20:16.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:20:16.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:20:16.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:20:16.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:20:16.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:20:16.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:20:16.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:20:16.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:20:16.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.555309 -999.00  +27.60  21.51     12   -4.10 1 1 1 1 1   888    0 32.07 56.03 ----- 16.5 21.5 47.4 25.5 33.2 -30.6 33.0 -30.1 34.1 -27.9 34.4 -28.7
2025-11-25T15:20:16.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:20:16.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:20:16.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.555309
2025-11-25T15:20:16.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:20:16.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:20:16.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:20:16.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:20:16.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:20:16.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:20:01', tmtdew=39.41, humidity=6.79, cloud=0.0, wind=25.48, temperature=28.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:19:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:20:16.910 [DEBUG] [Thread-1089] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:20:16.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:20:17.015 [DEBUG] [Thread-1093] [transport.py] [_log()] starting thread (client mode): 0x7374f940
2025-11-25T15:20:17.015 [DEBUG] [Thread-1093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:20:17.030 [DEBUG] [Thread-1093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:20:17.030 [INFO] [Thread-1093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:20:17.037 [DEBUG] [Thread-1093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:20:17.038 [DEBUG] [Thread-1093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:20:17.038 [DEBUG] [Thread-1093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:20:17.038 [DEBUG] [Thread-1093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:20:17.038 [DEBUG] [Thread-1093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:20:17.038 [DEBUG] [Thread-1093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:20:17.038 [DEBUG] [Thread-1093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:20:17.038 [DEBUG] [Thread-1093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:20:17.039 [DEBUG] [Thread-1093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:20:17.039 [DEBUG] [Thread-1093] [transport.py] [_log()] client lang: <none>
2025-11-25T15:20:17.039 [DEBUG] [Thread-1093] [transport.py] [_log()] server lang: <none>
2025-11-25T15:20:17.039 [DEBUG] [Thread-1093] [transport.py] [_log()] kex follows: False
2025-11-25T15:20:17.039 [DEBUG] [Thread-1093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:20:17.039 [DEBUG] [Thread-1093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:20:17.039 [DEBUG] [Thread-1093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:20:17.039 [DEBUG] [Thread-1093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:20:17.040 [DEBUG] [Thread-1093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:20:17.040 [DEBUG] [Thread-1093] [transport.py] [_log()] Compression: none
2025-11-25T15:20:17.040 [DEBUG] [Thread-1093] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:20:17.101 [DEBUG] [Thread-1093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:20:17.102 [DEBUG] [Thread-1093] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:20:17.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:20:17.103 [DEBUG] [Thread-1093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:20:17.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:20:17.159 [DEBUG] [Thread-1093] [transport.py] [_log()] userauth is OK
2025-11-25T15:20:17.159 [DEBUG] [Thread-1093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:20:17.159 [DEBUG] [Thread-1093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:20:17.160 [DEBUG] [Thread-1093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:20:17.160 [DEBUG] [Thread-1093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:20:17.178 [INFO] [Thread-1093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:20:17.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:20:17.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:20:17.972 [DEBUG] [Thread-1093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:20:17.972 [DEBUG] [Thread-1093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:20:18.020 [DEBUG] [Thread-1093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:20:18.020 [DEBUG] [Thread-1093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:20:18.030 [DEBUG] [Thread-1093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:20:18.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:20:18.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:20: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') -> 00000000
2025-11-25T15:20:18.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:20:18.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:20:18.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:20:18.067 [DEBUG] [Thread-1093] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:20:30.260 [DEBUG] [Thread-1095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:20:31.259 [DEBUG] [Thread-1096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:20:46.320 [DEBUG] [Thread-1097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:20:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:20:48.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:20:48.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:20:48.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 20, 33), 39.49, 6.76, 0.0, 21.19, 28.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:20:48.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:20:33
2025-11-25T15:20:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:20:49.020 [DEBUG] [Thread-1098] [transport.py] [_log()] starting thread (client mode): 0x737c7f40
2025-11-25T15:20:49.020 [DEBUG] [Thread-1098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:20:49.033 [DEBUG] [Thread-1098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:20:49.033 [INFO] [Thread-1098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:20:49.037 [DEBUG] [Thread-1098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:20:49.037 [DEBUG] [Thread-1098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:20:49.037 [DEBUG] [Thread-1098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:20:49.037 [DEBUG] [Thread-1098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:20:49.037 [DEBUG] [Thread-1098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:20:49.037 [DEBUG] [Thread-1098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:20:49.037 [DEBUG] [Thread-1098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:20:49.037 [DEBUG] [Thread-1098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:20:49.037 [DEBUG] [Thread-1098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] client lang: <none>
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] server lang: <none>
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] kex follows: False
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] Compression: none
2025-11-25T15:20:49.038 [DEBUG] [Thread-1098] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:20:49.056 [DEBUG] [Thread-1098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:20:49.056 [DEBUG] [Thread-1098] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:20:49.057 [DEBUG] [Thread-1098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:20:49.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:20:49.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:20:49.059 [DEBUG] [Thread-1098] [transport.py] [_log()] userauth is OK
2025-11-25T15:20:49.059 [DEBUG] [Thread-1098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:20:49.059 [DEBUG] [Thread-1098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:20:49.059 [DEBUG] [Thread-1098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:20:49.059 [DEBUG] [Thread-1098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:20:49.083 [INFO] [Thread-1098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:20:49.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:20:49.744 [DEBUG] [Thread-1098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:20:49.744 [DEBUG] [Thread-1098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:20:49.745 [DEBUG] [Thread-1098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:20:49.786 [DEBUG] [Thread-1098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:20:49.786 [DEBUG] [Thread-1098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:20:49.789 [DEBUG] [Thread-1098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:20:49.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:20:49.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:20:49.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:20:49.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:20:49.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:20:49.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:20:49.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:20:49.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:20:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:20:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.555656 -999.00  +27.70  22.90     12   -4.20 1 1 1 1 1   888    0 33.18 64.37 ----- 25.0 22.9 43.4 31.3 33.1 -30.8 33.0 -31.5 33.9 -28.1 34.4 -28.7
2025-11-25T15:20:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:20:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:20:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.555656
2025-11-25T15:20:49.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:20:49.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:20:49.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:20:49.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:20:49.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:20:49.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:20:33', tmtdew=39.49, humidity=6.76, cloud=0.0, wind=21.19, temperature=28.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:20:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:20:49.815 [DEBUG] [Thread-1098] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:20:49.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:20:49.919 [DEBUG] [Thread-1101] [transport.py] [_log()] starting thread (client mode): 0x7374cdf0
2025-11-25T15:20:49.919 [DEBUG] [Thread-1101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:20:49.934 [DEBUG] [Thread-1101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:20:49.935 [INFO] [Thread-1101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:20:49.942 [DEBUG] [Thread-1101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:20:49.942 [DEBUG] [Thread-1101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] client lang: <none>
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] server lang: <none>
2025-11-25T15:20:49.943 [DEBUG] [Thread-1101] [transport.py] [_log()] kex follows: False
2025-11-25T15:20:49.944 [DEBUG] [Thread-1101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:20:49.944 [DEBUG] [Thread-1101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:20:49.944 [DEBUG] [Thread-1101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:20:49.944 [DEBUG] [Thread-1101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:20:49.944 [DEBUG] [Thread-1101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:20:49.944 [DEBUG] [Thread-1101] [transport.py] [_log()] Compression: none
2025-11-25T15:20:49.944 [DEBUG] [Thread-1101] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:20:50.002 [DEBUG] [Thread-1101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:20:50.002 [DEBUG] [Thread-1101] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:20:50.003 [DEBUG] [Thread-1101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:20:50.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:20:50.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:20:50.059 [DEBUG] [Thread-1101] [transport.py] [_log()] userauth is OK
2025-11-25T15:20:50.059 [DEBUG] [Thread-1101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:20:50.059 [DEBUG] [Thread-1101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:20:50.059 [DEBUG] [Thread-1101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:20:50.059 [DEBUG] [Thread-1101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:20:50.078 [INFO] [Thread-1101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:20:50.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:20:50.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:20:50.866 [DEBUG] [Thread-1101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:20:50.866 [DEBUG] [Thread-1101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:20:50.913 [DEBUG] [Thread-1101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:20:50.914 [DEBUG] [Thread-1101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:20:50.922 [DEBUG] [Thread-1101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:20:50.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:20:50.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')
2025-11-25T15:20:50.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
2025-11-25T15:20:50.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:20:50.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:20:50.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:20:50.957 [DEBUG] [Thread-1101] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:21:01.362 [DEBUG] [Thread-1103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:21:16.425 [DEBUG] [Thread-1104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:21:20.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:21:20.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:21:20.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:21:21.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 21, 5), 39.45, 6.76, 0.0, 19.2, 27.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:21:21.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:21:05
2025-11-25T15:21:21.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:21:21.922 [DEBUG] [Thread-1105] [transport.py] [_log()] starting thread (client mode): 0x737c79d0
2025-11-25T15:21:21.922 [DEBUG] [Thread-1105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:21:21.942 [DEBUG] [Thread-1105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:21:21.943 [INFO] [Thread-1105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:21:21.946 [DEBUG] [Thread-1105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:21:21.946 [DEBUG] [Thread-1105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:21:21.946 [DEBUG] [Thread-1105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:21:21.946 [DEBUG] [Thread-1105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:21:21.946 [DEBUG] [Thread-1105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:21:21.946 [DEBUG] [Thread-1105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:21:21.946 [DEBUG] [Thread-1105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:21:21.946 [DEBUG] [Thread-1105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:21:21.946 [DEBUG] [Thread-1105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] client lang: <none>
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] server lang: <none>
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] kex follows: False
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] Compression: none
2025-11-25T15:21:21.947 [DEBUG] [Thread-1105] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:21:21.965 [DEBUG] [Thread-1105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:21:21.966 [DEBUG] [Thread-1105] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:21:21.967 [DEBUG] [Thread-1105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:21:21.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:21:21.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:21:21.969 [DEBUG] [Thread-1105] [transport.py] [_log()] userauth is OK
2025-11-25T15:21:21.969 [DEBUG] [Thread-1105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:21:21.969 [DEBUG] [Thread-1105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:21:21.969 [DEBUG] [Thread-1105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:21:21.969 [DEBUG] [Thread-1105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:21:22.005 [INFO] [Thread-1105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:21:22.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:21:22.653 [DEBUG] [Thread-1105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:21:22.653 [DEBUG] [Thread-1105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:21:22.653 [DEBUG] [Thread-1105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:21:22.694 [DEBUG] [Thread-1105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:21:22.694 [DEBUG] [Thread-1105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:21:22.697 [DEBUG] [Thread-1105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:21:22.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:21:22.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:21:22.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:21:22.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:21:22.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:21:22.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:21:22.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:21:22.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:21:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:21:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.556004 -999.00  +26.90  31.39     12   -4.60 1 1 2 1 1   888    0 32.71 65.44 ----- 30.1 31.4 45.6 35.7 32.9 -31.6 32.6 -33.1 33.5 -32.0 34.1 -30.3
2025-11-25T15:21:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:21:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:21:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.556004
2025-11-25T15:21:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:21:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:21:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:21:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:21:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:21:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:21:05', tmtdew=39.45, humidity=6.76, cloud=0.0, wind=19.2, temperature=27.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:20:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:21:22.722 [DEBUG] [Thread-1105] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:21:22.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:21:22.825 [DEBUG] [Thread-1108] [transport.py] [_log()] starting thread (client mode): 0x737c4a30
2025-11-25T15:21:22.825 [DEBUG] [Thread-1108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:21:22.840 [DEBUG] [Thread-1108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:21:22.840 [INFO] [Thread-1108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:21:22.848 [DEBUG] [Thread-1108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:21:22.848 [DEBUG] [Thread-1108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:21:22.848 [DEBUG] [Thread-1108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:21:22.848 [DEBUG] [Thread-1108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:21:22.848 [DEBUG] [Thread-1108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:21:22.848 [DEBUG] [Thread-1108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:21:22.849 [DEBUG] [Thread-1108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:21:22.849 [DEBUG] [Thread-1108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:21:22.849 [DEBUG] [Thread-1108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:21:22.849 [DEBUG] [Thread-1108] [transport.py] [_log()] client lang: <none>
2025-11-25T15:21:22.849 [DEBUG] [Thread-1108] [transport.py] [_log()] server lang: <none>
2025-11-25T15:21:22.849 [DEBUG] [Thread-1108] [transport.py] [_log()] kex follows: False
2025-11-25T15:21:22.849 [DEBUG] [Thread-1108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:21:22.849 [DEBUG] [Thread-1108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:21:22.850 [DEBUG] [Thread-1108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:21:22.850 [DEBUG] [Thread-1108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:21:22.850 [DEBUG] [Thread-1108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:21:22.850 [DEBUG] [Thread-1108] [transport.py] [_log()] Compression: none
2025-11-25T15:21:22.850 [DEBUG] [Thread-1108] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:21:22.909 [DEBUG] [Thread-1108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:21:22.910 [DEBUG] [Thread-1108] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:21:22.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:21:22.912 [DEBUG] [Thread-1108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:21:22.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:21:22.966 [DEBUG] [Thread-1108] [transport.py] [_log()] userauth is OK
2025-11-25T15:21:22.966 [DEBUG] [Thread-1108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:21:22.967 [DEBUG] [Thread-1108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:21:22.967 [DEBUG] [Thread-1108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:21:22.967 [DEBUG] [Thread-1108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:21:22.986 [INFO] [Thread-1108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:21:22.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:21:22.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:21:23.747 [DEBUG] [Thread-1108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:21:23.747 [DEBUG] [Thread-1108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:21:23.797 [DEBUG] [Thread-1108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:21:23.797 [DEBUG] [Thread-1108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:21:23.808 [DEBUG] [Thread-1108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:21:23.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:21:23.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:21:23.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:21:23.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:21:23.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:21:23.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:21:23.846 [DEBUG] [Thread-1108] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:21:30.769 [DEBUG] [Thread-1110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:21:31.467 [DEBUG] [Thread-1111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:21:46.544 [DEBUG] [Thread-1112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:21:53.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:21:53.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:21: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
2025-11-25T15:21:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 21, 37), 39.06, 6.78, 0.0, 22.96, 27.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:21:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:21:37
2025-11-25T15:21:54.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:21:54.821 [DEBUG] [Thread-1113] [transport.py] [_log()] starting thread (client mode): 0x7376e4d0
2025-11-25T15:21:54.821 [DEBUG] [Thread-1113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:21:54.840 [DEBUG] [Thread-1113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:21:54.840 [INFO] [Thread-1113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] client lang: <none>
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] server lang: <none>
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] kex follows: False
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:21:54.843 [DEBUG] [Thread-1113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:21:54.844 [DEBUG] [Thread-1113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:21:54.844 [DEBUG] [Thread-1113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:21:54.844 [DEBUG] [Thread-1113] [transport.py] [_log()] Compression: none
2025-11-25T15:21:54.844 [DEBUG] [Thread-1113] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:21:54.858 [DEBUG] [Thread-1113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:21:54.859 [DEBUG] [Thread-1113] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:21:54.859 [DEBUG] [Thread-1113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:21:54.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:21:54.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:21:54.860 [DEBUG] [Thread-1113] [transport.py] [_log()] userauth is OK
2025-11-25T15:21:54.860 [DEBUG] [Thread-1113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:21:54.860 [DEBUG] [Thread-1113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:21:54.860 [DEBUG] [Thread-1113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:21:54.860 [DEBUG] [Thread-1113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:21:54.868 [INFO] [Thread-1113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:21:54.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:21:55.508 [DEBUG] [Thread-1113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:21:55.508 [DEBUG] [Thread-1113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:21:55.508 [DEBUG] [Thread-1113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:21:55.549 [DEBUG] [Thread-1113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:21:55.549 [DEBUG] [Thread-1113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:21:55.551 [DEBUG] [Thread-1113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:21:55.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:21:55.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:21:55.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:21:55.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:21:55.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:21:55.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:21:55.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:21:55.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:21:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:21:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.556351 -999.00  +26.50  24.54     12   -4.80 1 1 1 1 1   888    0 33.60 64.17 ----- 28.4 24.5 71.8 35.2 32.6 -30.9 32.4 -33.4 33.2 -31.8 33.9 -31.3
2025-11-25T15:21:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:21:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:21:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.556351
2025-11-25T15:21:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:21:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:21:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:21:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:21:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:21:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:21:37', tmtdew=39.06, humidity=6.78, cloud=0.0, wind=22.96, temperature=27.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:21:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:21:55.569 [DEBUG] [Thread-1113] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:21:55.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:21:55.666 [DEBUG] [Thread-1116] [transport.py] [_log()] starting thread (client mode): 0x761db550
2025-11-25T15:21:55.666 [DEBUG] [Thread-1116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:21:55.680 [DEBUG] [Thread-1116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:21:55.681 [INFO] [Thread-1116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] client lang: <none>
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] server lang: <none>
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] kex follows: False
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] Compression: none
2025-11-25T15:21:55.688 [DEBUG] [Thread-1116] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:21:55.743 [DEBUG] [Thread-1116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:21:55.743 [DEBUG] [Thread-1116] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:21:55.744 [DEBUG] [Thread-1116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:21:55.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:21:55.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:21:55.800 [DEBUG] [Thread-1116] [transport.py] [_log()] userauth is OK
2025-11-25T15:21:55.800 [DEBUG] [Thread-1116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:21:55.801 [DEBUG] [Thread-1116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:21:55.801 [DEBUG] [Thread-1116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:21:55.801 [DEBUG] [Thread-1116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:21:55.814 [INFO] [Thread-1116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:21:55.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:21:55.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:21:56.610 [DEBUG] [Thread-1116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:21:56.610 [DEBUG] [Thread-1116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:21:56.658 [DEBUG] [Thread-1116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:21:56.658 [DEBUG] [Thread-1116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:21:56.668 [DEBUG] [Thread-1116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:21:56.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:21:56.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:21:56.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:21:56.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:21:56.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:21:56.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:21:56.704 [DEBUG] [Thread-1116] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:22:01.584 [DEBUG] [Thread-1118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:22:16.653 [DEBUG] [Thread-1119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:22:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:22:26.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:22:26.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:22:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 22, 9), 38.94, 6.84, 0.0, 17.96, 27.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:22:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:22:09
2025-11-25T15:22:27.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:22:27.708 [DEBUG] [Thread-1120] [transport.py] [_log()] starting thread (client mode): 0x761dbd90
2025-11-25T15:22:27.708 [DEBUG] [Thread-1120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:22:27.718 [DEBUG] [Thread-1120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:22:27.718 [INFO] [Thread-1120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] client lang: <none>
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] server lang: <none>
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] kex follows: False
2025-11-25T15:22:27.721 [DEBUG] [Thread-1120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:22:27.722 [DEBUG] [Thread-1120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:22:27.722 [DEBUG] [Thread-1120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:22:27.722 [DEBUG] [Thread-1120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:22:27.722 [DEBUG] [Thread-1120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:22:27.722 [DEBUG] [Thread-1120] [transport.py] [_log()] Compression: none
2025-11-25T15:22:27.722 [DEBUG] [Thread-1120] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:22:27.735 [DEBUG] [Thread-1120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:22:27.735 [DEBUG] [Thread-1120] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:22:27.735 [DEBUG] [Thread-1120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:22:27.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:22:27.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:22:27.735 [DEBUG] [Thread-1120] [transport.py] [_log()] userauth is OK
2025-11-25T15:22:27.736 [DEBUG] [Thread-1120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:22:27.736 [DEBUG] [Thread-1120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:22:27.736 [DEBUG] [Thread-1120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:22:27.736 [DEBUG] [Thread-1120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:22:27.745 [INFO] [Thread-1120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:22:27.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:22:28.373 [DEBUG] [Thread-1120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:22:28.373 [DEBUG] [Thread-1120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:22:28.373 [DEBUG] [Thread-1120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:22:28.413 [DEBUG] [Thread-1120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:22:28.413 [DEBUG] [Thread-1120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:22:28.415 [DEBUG] [Thread-1120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:22:28.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:22:28.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:22:28.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:22:28.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:22:28.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:22:28.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:22:28.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.557045 -999.00  +26.20  16.03     12   -4.70 1 1 1 1 1   888    0 32.78 64.62 ----- 18.1 16.0 57.0 17.7 32.5 -30.7 32.5 -31.8 33.5 -30.0 34.0 -28.7
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.557045
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:22:09', tmtdew=38.94, humidity=6.84, cloud=0.0, wind=17.96, temperature=27.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:22:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:22:28.433 [DEBUG] [Thread-1120] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:22:28.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:22:28.527 [DEBUG] [Thread-1123] [transport.py] [_log()] starting thread (client mode): 0x737c78e0
2025-11-25T15:22:28.527 [DEBUG] [Thread-1123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:22:28.542 [DEBUG] [Thread-1123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:22:28.542 [INFO] [Thread-1123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] client lang: <none>
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] server lang: <none>
2025-11-25T15:22:28.549 [DEBUG] [Thread-1123] [transport.py] [_log()] kex follows: False
2025-11-25T15:22:28.550 [DEBUG] [Thread-1123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:22:28.550 [DEBUG] [Thread-1123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:22:28.550 [DEBUG] [Thread-1123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:22:28.550 [DEBUG] [Thread-1123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:22:28.550 [DEBUG] [Thread-1123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:22:28.550 [DEBUG] [Thread-1123] [transport.py] [_log()] Compression: none
2025-11-25T15:22:28.550 [DEBUG] [Thread-1123] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:22:28.607 [DEBUG] [Thread-1123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:22:28.607 [DEBUG] [Thread-1123] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:22:28.607 [DEBUG] [Thread-1123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:22:28.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:22:28.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:22:28.664 [DEBUG] [Thread-1123] [transport.py] [_log()] userauth is OK
2025-11-25T15:22:28.664 [DEBUG] [Thread-1123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:22:28.664 [DEBUG] [Thread-1123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:22:28.664 [DEBUG] [Thread-1123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:22:28.664 [DEBUG] [Thread-1123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:22:28.677 [INFO] [Thread-1123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:22:28.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:22:28.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:22:29.480 [DEBUG] [Thread-1123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:22:29.480 [DEBUG] [Thread-1123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:22:29.528 [DEBUG] [Thread-1123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:22:29.528 [DEBUG] [Thread-1123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:22:29.536 [DEBUG] [Thread-1123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:22:29.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:22:29.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:22:29.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:22:29.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:22:29.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:22:29.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:22:29.568 [DEBUG] [Thread-1123] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:22:31.302 [DEBUG] [Thread-1125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:22:31.692 [DEBUG] [Thread-1126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:22:46.755 [DEBUG] [Thread-1127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:22:59.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:22:59.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:22:59.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:23:00.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 22, 41), 38.44, 7.34, 0.0, 16.48, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:23:00.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:22:41
2025-11-25T15:23:00.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:23:00.535 [DEBUG] [Thread-1128] [transport.py] [_log()] starting thread (client mode): 0x761d9900
2025-11-25T15:23:00.535 [DEBUG] [Thread-1128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:23:00.555 [DEBUG] [Thread-1128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:23:00.556 [INFO] [Thread-1128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:23:00.559 [DEBUG] [Thread-1128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:23:00.559 [DEBUG] [Thread-1128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:23:00.559 [DEBUG] [Thread-1128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:23:00.559 [DEBUG] [Thread-1128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:23:00.559 [DEBUG] [Thread-1128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] client lang: <none>
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] server lang: <none>
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] kex follows: False
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:23:00.560 [DEBUG] [Thread-1128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:23:00.561 [DEBUG] [Thread-1128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:23:00.561 [DEBUG] [Thread-1128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:23:00.561 [DEBUG] [Thread-1128] [transport.py] [_log()] Compression: none
2025-11-25T15:23:00.561 [DEBUG] [Thread-1128] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:23:00.578 [DEBUG] [Thread-1128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:23:00.578 [DEBUG] [Thread-1128] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:23:00.578 [DEBUG] [Thread-1128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:23:00.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:23:00.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:23:00.579 [DEBUG] [Thread-1128] [transport.py] [_log()] userauth is OK
2025-11-25T15:23:00.579 [DEBUG] [Thread-1128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:23:00.579 [DEBUG] [Thread-1128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:23:00.579 [DEBUG] [Thread-1128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:23:00.579 [DEBUG] [Thread-1128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:23:00.605 [INFO] [Thread-1128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:23:00.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:23:01.266 [DEBUG] [Thread-1128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:23:01.266 [DEBUG] [Thread-1128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:23:01.266 [DEBUG] [Thread-1128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:23:01.306 [DEBUG] [Thread-1128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:23:01.306 [DEBUG] [Thread-1128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:23:01.309 [DEBUG] [Thread-1128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:23:01.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:23:01.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:23:01.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:23:01.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:23:01.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:23:01.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:23:01.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:23:01.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:23:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:23:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.557393 -999.00  +26.20  20.21     12   -4.70 1 1 1 1 1   888    0 32.93 53.57 ----- 16.8 20.2 18.6 23.1 32.4 -30.7 32.4 -30.2 33.6 -28.6 34.0 -29.3
2025-11-25T15:23:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:23:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:23:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.557393
2025-11-25T15:23:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:23:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:23:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:23:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:23:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:23:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:22:41', tmtdew=38.44, humidity=7.34, cloud=0.0, wind=16.48, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:22:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:23:01.333 [DEBUG] [Thread-1128] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:23:01.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:23:01.457 [DEBUG] [Thread-1131] [transport.py] [_log()] starting thread (client mode): 0x70d007f0
2025-11-25T15:23:01.457 [DEBUG] [Thread-1131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:23:01.474 [DEBUG] [Thread-1131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:23:01.474 [INFO] [Thread-1131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:23:01.481 [DEBUG] [Thread-1131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:23:01.481 [DEBUG] [Thread-1131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] client lang: <none>
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] server lang: <none>
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] kex follows: False
2025-11-25T15:23:01.482 [DEBUG] [Thread-1131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:23:01.483 [DEBUG] [Thread-1131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:23:01.483 [DEBUG] [Thread-1131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:23:01.483 [DEBUG] [Thread-1131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:23:01.483 [DEBUG] [Thread-1131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:23:01.483 [DEBUG] [Thread-1131] [transport.py] [_log()] Compression: none
2025-11-25T15:23:01.483 [DEBUG] [Thread-1131] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:23:01.543 [DEBUG] [Thread-1131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:23:01.543 [DEBUG] [Thread-1131] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:23:01.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:23:01.544 [DEBUG] [Thread-1131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:23:01.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:23:01.599 [DEBUG] [Thread-1131] [transport.py] [_log()] userauth is OK
2025-11-25T15:23:01.599 [DEBUG] [Thread-1131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:23:01.600 [DEBUG] [Thread-1131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:23:01.600 [DEBUG] [Thread-1131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:23:01.600 [DEBUG] [Thread-1131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:23:01.618 [INFO] [Thread-1131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:23:01.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:23:01.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:23:01.798 [DEBUG] [Thread-1133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:23:02.427 [DEBUG] [Thread-1131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:23:02.427 [DEBUG] [Thread-1131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:23:02.474 [DEBUG] [Thread-1131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:23:02.475 [DEBUG] [Thread-1131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:23:02.484 [DEBUG] [Thread-1131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:23:02.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:23: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')
2025-11-25T15:23:02.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:23:02.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:23:02.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:23:02.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:23:02.520 [DEBUG] [Thread-1131] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:23:16.855 [DEBUG] [Thread-1134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:23:31.899 [DEBUG] [Thread-1135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:23:32.017 [DEBUG] [Thread-1136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:23:32.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:23:32.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:23:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:23:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 23, 13), 38.53, 7.29, 0.0, 13.94, 27.09, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:23:33.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:23:13
2025-11-25T15:23:33.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:23:33.490 [DEBUG] [Thread-1137] [transport.py] [_log()] starting thread (client mode): 0x7374ef80
2025-11-25T15:23:33.490 [DEBUG] [Thread-1137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:23:33.509 [DEBUG] [Thread-1137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:23:33.510 [INFO] [Thread-1137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:23:33.513 [DEBUG] [Thread-1137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:23:33.513 [DEBUG] [Thread-1137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:23:33.513 [DEBUG] [Thread-1137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:23:33.513 [DEBUG] [Thread-1137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:23:33.513 [DEBUG] [Thread-1137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:23:33.513 [DEBUG] [Thread-1137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:23:33.513 [DEBUG] [Thread-1137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] client lang: <none>
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] server lang: <none>
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] kex follows: False
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] Compression: none
2025-11-25T15:23:33.514 [DEBUG] [Thread-1137] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:23:33.532 [DEBUG] [Thread-1137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:23:33.533 [DEBUG] [Thread-1137] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:23:33.534 [DEBUG] [Thread-1137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:23:33.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:23:33.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:23:33.536 [DEBUG] [Thread-1137] [transport.py] [_log()] userauth is OK
2025-11-25T15:23:33.536 [DEBUG] [Thread-1137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:23:33.536 [DEBUG] [Thread-1137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:23:33.537 [DEBUG] [Thread-1137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:23:33.537 [DEBUG] [Thread-1137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:23:33.560 [INFO] [Thread-1137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:23:33.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:23:34.177 [DEBUG] [Thread-1137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:23:34.177 [DEBUG] [Thread-1137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:23:34.178 [DEBUG] [Thread-1137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:23:34.219 [DEBUG] [Thread-1137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:23:34.219 [DEBUG] [Thread-1137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:23:34.222 [DEBUG] [Thread-1137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:23:34.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:23:34.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:23:34.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:23:34.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:23:34.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:23:34.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:23:34.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:23:34.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:23:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:23:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.557740 -999.00  +26.20  12.25     12   -4.70 1 1 1 1 1   888    0 32.44 46.76 ----- 6.9 12.2 56.6 19.7 32.5 -30.0 32.4 -30.5 33.5 -28.2 33.9 -29.1
2025-11-25T15:23:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:23:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:23:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.557740
2025-11-25T15:23:34.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:23:34.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:23:34.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:23:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:23:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:23:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:23:13', tmtdew=38.53, humidity=7.29, cloud=0.0, wind=13.94, temperature=27.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:23:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:23:34.250 [DEBUG] [Thread-1137] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:23:34.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:23:34.356 [DEBUG] [Thread-1140] [transport.py] [_log()] starting thread (client mode): 0x761d9840
2025-11-25T15:23:34.357 [DEBUG] [Thread-1140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:23:34.372 [DEBUG] [Thread-1140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:23:34.372 [INFO] [Thread-1140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:23:34.380 [DEBUG] [Thread-1140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:23:34.380 [DEBUG] [Thread-1140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:23:34.380 [DEBUG] [Thread-1140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:23:34.380 [DEBUG] [Thread-1140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:23:34.380 [DEBUG] [Thread-1140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:23:34.380 [DEBUG] [Thread-1140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] client lang: <none>
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] server lang: <none>
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] kex follows: False
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] Compression: none
2025-11-25T15:23:34.381 [DEBUG] [Thread-1140] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:23:34.442 [DEBUG] [Thread-1140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:23:34.443 [DEBUG] [Thread-1140] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:23:34.444 [DEBUG] [Thread-1140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:23:34.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:23:34.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:23:34.500 [DEBUG] [Thread-1140] [transport.py] [_log()] userauth is OK
2025-11-25T15:23:34.501 [DEBUG] [Thread-1140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:23:34.501 [DEBUG] [Thread-1140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:23:34.501 [DEBUG] [Thread-1140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:23:34.501 [DEBUG] [Thread-1140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:23:34.523 [INFO] [Thread-1140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:23:34.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:23:34.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:23:35.268 [DEBUG] [Thread-1140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:23:35.269 [DEBUG] [Thread-1140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:23:35.317 [DEBUG] [Thread-1140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:23:35.317 [DEBUG] [Thread-1140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:23:35.326 [DEBUG] [Thread-1140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:23:35.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:23:35.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:23:35.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:23:35.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:23:35.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:23:35.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:23:35.363 [DEBUG] [Thread-1140] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:23:46.933 [DEBUG] [Thread-1142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:24:01.990 [DEBUG] [Thread-1143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:24:05.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:24:05.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:24:05.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:24:06.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 23, 45), 38.62, 7.26, 0.0, 15.63, 27.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:24:06.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:23:45
2025-11-25T15:24:06.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:24:06.326 [DEBUG] [Thread-1144] [transport.py] [_log()] starting thread (client mode): 0x70d02830
2025-11-25T15:24:06.326 [DEBUG] [Thread-1144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:24:06.347 [DEBUG] [Thread-1144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:24:06.348 [INFO] [Thread-1144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:24:06.351 [DEBUG] [Thread-1144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:24:06.351 [DEBUG] [Thread-1144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:24:06.351 [DEBUG] [Thread-1144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:24:06.351 [DEBUG] [Thread-1144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:24:06.352 [DEBUG] [Thread-1144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:24:06.352 [DEBUG] [Thread-1144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:24:06.352 [DEBUG] [Thread-1144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:24:06.352 [DEBUG] [Thread-1144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:24:06.352 [DEBUG] [Thread-1144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:24:06.352 [DEBUG] [Thread-1144] [transport.py] [_log()] client lang: <none>
2025-11-25T15:24:06.352 [DEBUG] [Thread-1144] [transport.py] [_log()] server lang: <none>
2025-11-25T15:24:06.352 [DEBUG] [Thread-1144] [transport.py] [_log()] kex follows: False
2025-11-25T15:24:06.352 [DEBUG] [Thread-1144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:24:06.353 [DEBUG] [Thread-1144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:24:06.353 [DEBUG] [Thread-1144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:24:06.353 [DEBUG] [Thread-1144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:24:06.353 [DEBUG] [Thread-1144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:24:06.353 [DEBUG] [Thread-1144] [transport.py] [_log()] Compression: none
2025-11-25T15:24:06.353 [DEBUG] [Thread-1144] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:24:06.372 [DEBUG] [Thread-1144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:24:06.373 [DEBUG] [Thread-1144] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:24:06.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:24:06.374 [DEBUG] [Thread-1144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:24:06.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:24:06.377 [DEBUG] [Thread-1144] [transport.py] [_log()] userauth is OK
2025-11-25T15:24:06.377 [DEBUG] [Thread-1144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:24:06.377 [DEBUG] [Thread-1144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:24:06.377 [DEBUG] [Thread-1144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:24:06.377 [DEBUG] [Thread-1144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:24:06.403 [INFO] [Thread-1144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:24:06.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:24:07.045 [DEBUG] [Thread-1144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:24:07.045 [DEBUG] [Thread-1144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:24:07.046 [DEBUG] [Thread-1144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:24:07.086 [DEBUG] [Thread-1144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:24:07.086 [DEBUG] [Thread-1144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:24:07.089 [DEBUG] [Thread-1144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:24:07.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:24:07.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:24:07.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:24:07.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:24:07.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:24:07.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:24:07.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:24:07.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:24:07.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:24:07.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.558087 -999.00  +26.30  10.19     12   -4.70 1 1 1 1 1   888    0 31.85 41.71 ----- 14.1 10.2 77.2 12.3 32.5 -33.5 32.5 -30.3 33.6 -29.5 34.1 -29.5
2025-11-25T15:24:07.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:24:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:24:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.558087
2025-11-25T15:24:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:24:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:24:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:24:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:24:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:24:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:23:45', tmtdew=38.62, humidity=7.26, cloud=0.0, wind=15.63, temperature=27.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:23:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:24:07.113 [DEBUG] [Thread-1144] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:24:07.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:24:07.218 [DEBUG] [Thread-1147] [transport.py] [_log()] starting thread (client mode): 0x70d015a0
2025-11-25T15:24:07.218 [DEBUG] [Thread-1147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:24:07.232 [DEBUG] [Thread-1147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:24:07.233 [INFO] [Thread-1147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:24:07.240 [DEBUG] [Thread-1147] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:24:07.240 [DEBUG] [Thread-1147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:24:07.240 [DEBUG] [Thread-1147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:24:07.240 [DEBUG] [Thread-1147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:24:07.240 [DEBUG] [Thread-1147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] client lang: <none>
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] server lang: <none>
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] kex follows: False
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] Compression: none
2025-11-25T15:24:07.241 [DEBUG] [Thread-1147] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:24:07.305 [DEBUG] [Thread-1147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:24:07.306 [DEBUG] [Thread-1147] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:24:07.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:24:07.307 [DEBUG] [Thread-1147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:24:07.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:24:07.361 [DEBUG] [Thread-1147] [transport.py] [_log()] userauth is OK
2025-11-25T15:24:07.361 [DEBUG] [Thread-1147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:24:07.362 [DEBUG] [Thread-1147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:24:07.362 [DEBUG] [Thread-1147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:24:07.362 [DEBUG] [Thread-1147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:24:07.381 [INFO] [Thread-1147] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:24:07.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:24:07.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:24:08.140 [DEBUG] [Thread-1147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:24:08.140 [DEBUG] [Thread-1147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:24:08.188 [DEBUG] [Thread-1147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:24:08.188 [DEBUG] [Thread-1147] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:24:08.197 [DEBUG] [Thread-1147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:24:08.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:24:08.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:24:08.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:24:08.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:24:08.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:24:08.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:24:08.234 [DEBUG] [Thread-1147] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:24:17.033 [DEBUG] [Thread-1149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:24:32.099 [DEBUG] [Thread-1150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:24:32.523 [DEBUG] [Thread-1151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:24:38.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:24:38.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:24:38.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:24:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 24, 17), 38.39, 7.37, 0.0, 14.73, 26.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:24:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:24:17
2025-11-25T15:24:39.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:24:39.181 [DEBUG] [Thread-1152] [transport.py] [_log()] starting thread (client mode): 0x761d9840
2025-11-25T15:24:39.181 [DEBUG] [Thread-1152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:24:39.201 [DEBUG] [Thread-1152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:24:39.201 [INFO] [Thread-1152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:24:39.203 [DEBUG] [Thread-1152] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:24:39.203 [DEBUG] [Thread-1152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:24:39.203 [DEBUG] [Thread-1152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:24:39.203 [DEBUG] [Thread-1152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:24:39.203 [DEBUG] [Thread-1152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:24:39.203 [DEBUG] [Thread-1152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:24:39.203 [DEBUG] [Thread-1152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:24:39.203 [DEBUG] [Thread-1152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] client lang: <none>
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] server lang: <none>
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] kex follows: False
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] Compression: none
2025-11-25T15:24:39.204 [DEBUG] [Thread-1152] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:24:39.216 [DEBUG] [Thread-1152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:24:39.216 [DEBUG] [Thread-1152] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:24:39.217 [DEBUG] [Thread-1152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:24:39.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:24:39.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:24:39.219 [DEBUG] [Thread-1152] [transport.py] [_log()] userauth is OK
2025-11-25T15:24:39.219 [DEBUG] [Thread-1152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:24:39.219 [DEBUG] [Thread-1152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:24:39.219 [DEBUG] [Thread-1152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:24:39.220 [DEBUG] [Thread-1152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:24:39.244 [INFO] [Thread-1152] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:24:39.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:24:39.902 [DEBUG] [Thread-1152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:24:39.902 [DEBUG] [Thread-1152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:24:39.903 [DEBUG] [Thread-1152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:24:39.943 [DEBUG] [Thread-1152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:24:39.943 [DEBUG] [Thread-1152] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:24:39.946 [DEBUG] [Thread-1152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:24:39.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:24:39.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:24:39.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:24:39.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:24:39.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:24:39.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:24:39.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:24:39.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:24:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:24:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.558434 -999.00  +26.40  22.17     12   -4.70 1 1 1 1 1   888    0 32.24 38.78 ----- 21.4 22.2 50.8 26.1 32.5 -30.5 32.3 -31.9 33.4 -30.8 34.1 -30.5
2025-11-25T15:24:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:24:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:24:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.558434
2025-11-25T15:24:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:24:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:24:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:24:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:24:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:24:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:24:17', tmtdew=38.39, humidity=7.37, cloud=0.0, wind=14.73, temperature=26.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:24:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:24:39.973 [DEBUG] [Thread-1152] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:24:40.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:24:40.075 [DEBUG] [Thread-1155] [transport.py] [_log()] starting thread (client mode): 0x70d02f20
2025-11-25T15:24:40.075 [DEBUG] [Thread-1155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:24:40.089 [DEBUG] [Thread-1155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:24:40.089 [INFO] [Thread-1155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:24:40.097 [DEBUG] [Thread-1155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:24:40.097 [DEBUG] [Thread-1155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:24:40.098 [DEBUG] [Thread-1155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:24:40.098 [DEBUG] [Thread-1155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:24:40.098 [DEBUG] [Thread-1155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:24:40.098 [DEBUG] [Thread-1155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:24:40.098 [DEBUG] [Thread-1155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:24:40.098 [DEBUG] [Thread-1155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] client lang: <none>
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] server lang: <none>
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] kex follows: False
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] Compression: none
2025-11-25T15:24:40.099 [DEBUG] [Thread-1155] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:24:40.161 [DEBUG] [Thread-1155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:24:40.162 [DEBUG] [Thread-1155] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:24:40.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:24:40.163 [DEBUG] [Thread-1155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:24:40.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:24:40.218 [DEBUG] [Thread-1155] [transport.py] [_log()] userauth is OK
2025-11-25T15:24:40.218 [DEBUG] [Thread-1155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:24:40.218 [DEBUG] [Thread-1155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:24:40.218 [DEBUG] [Thread-1155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:24:40.218 [DEBUG] [Thread-1155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:24:40.238 [INFO] [Thread-1155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:24:40.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:24:40.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:24:41.028 [DEBUG] [Thread-1155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:24:41.028 [DEBUG] [Thread-1155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:24:41.076 [DEBUG] [Thread-1155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:24:41.076 [DEBUG] [Thread-1155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:24:41.085 [DEBUG] [Thread-1155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:24:41.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:24:41.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:24:41.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:24:41.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:24:41.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:24:41.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:24:41.120 [DEBUG] [Thread-1155] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:24:47.144 [DEBUG] [Thread-1157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:25:02.208 [DEBUG] [Thread-1158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:25:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:25:11.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:25:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:25:11.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 24, 49), 38.4, 7.31, 0.0, 16.01, 26.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:25:11.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:24:49
2025-11-25T15:25:11.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:25:12.092 [DEBUG] [Thread-1159] [transport.py] [_log()] starting thread (client mode): 0x737eb610
2025-11-25T15:25:12.092 [DEBUG] [Thread-1159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:25:12.115 [DEBUG] [Thread-1159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:25:12.115 [INFO] [Thread-1159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:25:12.117 [DEBUG] [Thread-1159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] client lang: <none>
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] server lang: <none>
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] kex follows: False
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] Compression: none
2025-11-25T15:25:12.118 [DEBUG] [Thread-1159] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:25:12.136 [DEBUG] [Thread-1159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:25:12.136 [DEBUG] [Thread-1159] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:25:12.136 [DEBUG] [Thread-1159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:25:12.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:25:12.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:25:12.138 [DEBUG] [Thread-1159] [transport.py] [_log()] userauth is OK
2025-11-25T15:25:12.138 [DEBUG] [Thread-1159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:25:12.138 [DEBUG] [Thread-1159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:25:12.138 [DEBUG] [Thread-1159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:25:12.138 [DEBUG] [Thread-1159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:25:12.149 [INFO] [Thread-1159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:25:12.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:25:12.980 [DEBUG] [Thread-1159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:25:12.981 [DEBUG] [Thread-1159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:25:12.981 [DEBUG] [Thread-1159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:25:13.021 [DEBUG] [Thread-1159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:25:13.022 [DEBUG] [Thread-1159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:25:13.024 [DEBUG] [Thread-1159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:25:13.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:25:13.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:25:13.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:25:13.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:25:13.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:25:13.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:25:13.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:25:13.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:25:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:25:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.558781 -999.00  +26.10  26.74     12   -4.80 1 1 1 1 1   888    0 31.82 34.61 ----- 25.0 26.7 45.0 31.0 32.2 -31.6 32.1 -32.2 33.3 -29.5 33.9 -29.8
2025-11-25T15:25:13.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:25:13.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:25:13.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.558781
2025-11-25T15:25:13.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:25:13.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:25:13.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:25:13.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:25:13.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:25:13.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:24:49', tmtdew=38.4, humidity=7.31, cloud=0.0, wind=16.01, temperature=26.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:24:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:25:13.047 [DEBUG] [Thread-1159] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:25:13.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:25:13.150 [DEBUG] [Thread-1162] [transport.py] [_log()] starting thread (client mode): 0x737c4b80
2025-11-25T15:25:13.150 [DEBUG] [Thread-1162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:25:13.166 [DEBUG] [Thread-1162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:25:13.166 [INFO] [Thread-1162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:25:13.173 [DEBUG] [Thread-1162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:25:13.173 [DEBUG] [Thread-1162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] client lang: <none>
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] server lang: <none>
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] kex follows: False
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:25:13.174 [DEBUG] [Thread-1162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:25:13.175 [DEBUG] [Thread-1162] [transport.py] [_log()] Compression: none
2025-11-25T15:25:13.175 [DEBUG] [Thread-1162] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:25:13.240 [DEBUG] [Thread-1162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:25:13.240 [DEBUG] [Thread-1162] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:25:13.241 [DEBUG] [Thread-1162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:25:13.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:25:13.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:25:13.300 [DEBUG] [Thread-1162] [transport.py] [_log()] userauth is OK
2025-11-25T15:25:13.300 [DEBUG] [Thread-1162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:25:13.300 [DEBUG] [Thread-1162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:25:13.300 [DEBUG] [Thread-1162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:25:13.300 [DEBUG] [Thread-1162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:25:13.322 [INFO] [Thread-1162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:25:13.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:25:13.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:25:14.116 [DEBUG] [Thread-1162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:25:14.116 [DEBUG] [Thread-1162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:25:14.167 [DEBUG] [Thread-1162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:25:14.167 [DEBUG] [Thread-1162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:25:14.175 [DEBUG] [Thread-1162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:25:14.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:25:14.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:25:14.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:25:14.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:25:14.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:25:14.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:25:14.209 [DEBUG] [Thread-1162] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:25:17.259 [DEBUG] [Thread-1164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:25:32.323 [DEBUG] [Thread-1165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:25:33.030 [DEBUG] [Thread-1166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:25:44.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:25:44.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:25:44.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:25:44.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 25, 21), 38.02, 7.51, 0.0, 19.29, 26.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:25:44.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:25:21
2025-11-25T15:25:45.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:25:45.166 [DEBUG] [Thread-1167] [transport.py] [_log()] starting thread (client mode): 0x70d006d0
2025-11-25T15:25:45.166 [DEBUG] [Thread-1167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:25:45.186 [DEBUG] [Thread-1167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:25:45.186 [INFO] [Thread-1167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] client lang: <none>
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] server lang: <none>
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] kex follows: False
2025-11-25T15:25:45.190 [DEBUG] [Thread-1167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:25:45.191 [DEBUG] [Thread-1167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:25:45.191 [DEBUG] [Thread-1167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:25:45.191 [DEBUG] [Thread-1167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:25:45.191 [DEBUG] [Thread-1167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:25:45.191 [DEBUG] [Thread-1167] [transport.py] [_log()] Compression: none
2025-11-25T15:25:45.191 [DEBUG] [Thread-1167] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:25:45.208 [DEBUG] [Thread-1167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:25:45.209 [DEBUG] [Thread-1167] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:25:45.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:25:45.210 [DEBUG] [Thread-1167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:25:45.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:25:45.212 [DEBUG] [Thread-1167] [transport.py] [_log()] userauth is OK
2025-11-25T15:25:45.212 [DEBUG] [Thread-1167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:25:45.212 [DEBUG] [Thread-1167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:25:45.212 [DEBUG] [Thread-1167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:25:45.212 [DEBUG] [Thread-1167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:25:45.236 [INFO] [Thread-1167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:25:45.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:25:45.874 [DEBUG] [Thread-1167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:25:45.875 [DEBUG] [Thread-1167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:25:45.875 [DEBUG] [Thread-1167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:25:45.916 [DEBUG] [Thread-1167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:25:45.916 [DEBUG] [Thread-1167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:25:45.919 [DEBUG] [Thread-1167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:25:45.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:25:45.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:25:45.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:25:45.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:25:45.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:25:45.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:25:45.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:25:45.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:25:45.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:25:45.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.559128 -999.00  +25.90  21.31     12   -4.80 1 1 1 1 1   888    0 31.76 32.60 ----- 18.9 21.3 56.8 27.8 32.2 -30.8 32.0 -32.5 33.1 -30.7 33.7 -29.3
2025-11-25T15:25:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:25:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:25:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.559128
2025-11-25T15:25:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:25:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:25:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:25:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:25:45.945 [DEBUG] [Thread-1167] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:25:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:25:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:25:21', tmtdew=38.02, humidity=7.51, cloud=0.0, wind=19.29, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:25:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:25:46.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:25:46.053 [DEBUG] [Thread-1170] [transport.py] [_log()] starting thread (client mode): 0x70d02e90
2025-11-25T15:25:46.053 [DEBUG] [Thread-1170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:25:46.068 [DEBUG] [Thread-1170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:25:46.069 [INFO] [Thread-1170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:25:46.076 [DEBUG] [Thread-1170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] client lang: <none>
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] server lang: <none>
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] kex follows: False
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:25:46.077 [DEBUG] [Thread-1170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:25:46.078 [DEBUG] [Thread-1170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:25:46.078 [DEBUG] [Thread-1170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:25:46.078 [DEBUG] [Thread-1170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:25:46.078 [DEBUG] [Thread-1170] [transport.py] [_log()] Compression: none
2025-11-25T15:25:46.078 [DEBUG] [Thread-1170] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:25:46.135 [DEBUG] [Thread-1170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:25:46.135 [DEBUG] [Thread-1170] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:25:46.136 [DEBUG] [Thread-1170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:25:46.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:25:46.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:25:46.191 [DEBUG] [Thread-1170] [transport.py] [_log()] userauth is OK
2025-11-25T15:25:46.191 [DEBUG] [Thread-1170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:25:46.191 [DEBUG] [Thread-1170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:25:46.191 [DEBUG] [Thread-1170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:25:46.191 [DEBUG] [Thread-1170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:25:46.211 [INFO] [Thread-1170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:25:46.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:25:46.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:25:47.010 [DEBUG] [Thread-1170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:25:47.011 [DEBUG] [Thread-1170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:25:47.059 [DEBUG] [Thread-1170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:25:47.059 [DEBUG] [Thread-1170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:25:47.068 [DEBUG] [Thread-1170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:25:47.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:25:47.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:25:47.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:25:47.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:25:47.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:25:47.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:25:47.106 [DEBUG] [Thread-1170] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:25:47.363 [DEBUG] [Thread-1172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:26:02.426 [DEBUG] [Thread-1173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:26:17.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:26:17.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:26:17.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:26:17.461 [DEBUG] [Thread-1174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:26:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 25, 53), 38.19, 7.42, 0.0, 17.24, 26.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:26:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:25:53
2025-11-25T15:26:17.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:26:18.070 [DEBUG] [Thread-1175] [transport.py] [_log()] starting thread (client mode): 0x761dbe80
2025-11-25T15:26:18.070 [DEBUG] [Thread-1175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:26:18.092 [DEBUG] [Thread-1175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:26:18.092 [INFO] [Thread-1175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:26:18.095 [DEBUG] [Thread-1175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] client lang: <none>
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] server lang: <none>
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] kex follows: False
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:26:18.096 [DEBUG] [Thread-1175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:26:18.097 [DEBUG] [Thread-1175] [transport.py] [_log()] Compression: none
2025-11-25T15:26:18.097 [DEBUG] [Thread-1175] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:26:18.115 [DEBUG] [Thread-1175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:26:18.115 [DEBUG] [Thread-1175] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:26:18.116 [DEBUG] [Thread-1175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:26:18.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:26:18.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:26:18.118 [DEBUG] [Thread-1175] [transport.py] [_log()] userauth is OK
2025-11-25T15:26:18.118 [DEBUG] [Thread-1175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:26:18.119 [DEBUG] [Thread-1175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:26:18.119 [DEBUG] [Thread-1175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:26:18.119 [DEBUG] [Thread-1175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:26:18.143 [INFO] [Thread-1175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:26:18.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:26:18.739 [DEBUG] [Thread-1175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:26:18.739 [DEBUG] [Thread-1175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:26:18.740 [DEBUG] [Thread-1175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:26:18.781 [DEBUG] [Thread-1175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:26:18.781 [DEBUG] [Thread-1175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:26:18.785 [DEBUG] [Thread-1175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:26:18.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:26:18.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:26:18.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:26:18.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:26:18.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:26:18.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:26:18.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:26:18.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:26:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:26:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.559476 -999.00  +25.90  21.15     12   -4.80 1 1 1 1 1   888    0 32.20 32.30 ----- 15.2 21.1 56.6 28.3 32.1 -30.6 31.9 -30.7 33.0 -29.4 33.6 -30.7
2025-11-25T15:26:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:26:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:26:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.559476
2025-11-25T15:26:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:26:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:26:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:26:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:26:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:26:18.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:25:53', tmtdew=38.19, humidity=7.42, cloud=0.0, wind=17.24, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:25:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:26:18.813 [DEBUG] [Thread-1175] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:26:18.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:26:18.917 [DEBUG] [Thread-1178] [transport.py] [_log()] starting thread (client mode): 0x7376f850
2025-11-25T15:26:18.917 [DEBUG] [Thread-1178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:26:18.931 [DEBUG] [Thread-1178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:26:18.932 [INFO] [Thread-1178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:26:18.939 [DEBUG] [Thread-1178] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:26:18.939 [DEBUG] [Thread-1178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:26:18.940 [DEBUG] [Thread-1178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:26:18.940 [DEBUG] [Thread-1178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:26:18.940 [DEBUG] [Thread-1178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:26:18.940 [DEBUG] [Thread-1178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:26:18.940 [DEBUG] [Thread-1178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:26:18.940 [DEBUG] [Thread-1178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:26:18.940 [DEBUG] [Thread-1178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:26:18.940 [DEBUG] [Thread-1178] [transport.py] [_log()] client lang: <none>
2025-11-25T15:26:18.941 [DEBUG] [Thread-1178] [transport.py] [_log()] server lang: <none>
2025-11-25T15:26:18.941 [DEBUG] [Thread-1178] [transport.py] [_log()] kex follows: False
2025-11-25T15:26:18.941 [DEBUG] [Thread-1178] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:26:18.941 [DEBUG] [Thread-1178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:26:18.941 [DEBUG] [Thread-1178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:26:18.941 [DEBUG] [Thread-1178] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:26:18.941 [DEBUG] [Thread-1178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:26:18.941 [DEBUG] [Thread-1178] [transport.py] [_log()] Compression: none
2025-11-25T15:26:18.942 [DEBUG] [Thread-1178] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:26:19.000 [DEBUG] [Thread-1178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:26:19.000 [DEBUG] [Thread-1178] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:26:19.000 [DEBUG] [Thread-1178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:26:19.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:26:19.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:26:19.064 [DEBUG] [Thread-1178] [transport.py] [_log()] userauth is OK
2025-11-25T15:26:19.064 [DEBUG] [Thread-1178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:26:19.064 [DEBUG] [Thread-1178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:26:19.065 [DEBUG] [Thread-1178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:26:19.065 [DEBUG] [Thread-1178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:26:19.084 [INFO] [Thread-1178] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:26:19.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:26:19.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:26:19.864 [DEBUG] [Thread-1178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:26:19.865 [DEBUG] [Thread-1178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:26:19.913 [DEBUG] [Thread-1178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:26:19.913 [DEBUG] [Thread-1178] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:26:19.922 [DEBUG] [Thread-1178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:26:19.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:26:19.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')
2025-11-25T15:26:19.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:26:19.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:26:19.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:26:19.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:26:19.961 [DEBUG] [Thread-1178] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:26:32.501 [DEBUG] [Thread-1180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:26:33.781 [DEBUG] [Thread-1181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:26:47.567 [DEBUG] [Thread-1182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:26:49.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:26:49.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:26:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:26:50.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 26, 25), 37.99, 7.54, 0.0, 16.23, 26.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:26:50.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:26:25
2025-11-25T15:26:50.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:26:50.949 [DEBUG] [Thread-1183] [transport.py] [_log()] starting thread (client mode): 0x737e98a0
2025-11-25T15:26:50.949 [DEBUG] [Thread-1183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:26:50.971 [DEBUG] [Thread-1183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:26:50.971 [INFO] [Thread-1183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] client lang: <none>
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] server lang: <none>
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] kex follows: False
2025-11-25T15:26:50.974 [DEBUG] [Thread-1183] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:26:50.975 [DEBUG] [Thread-1183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:26:50.975 [DEBUG] [Thread-1183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:26:50.975 [DEBUG] [Thread-1183] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:26:50.975 [DEBUG] [Thread-1183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:26:50.975 [DEBUG] [Thread-1183] [transport.py] [_log()] Compression: none
2025-11-25T15:26:50.975 [DEBUG] [Thread-1183] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:26:50.990 [DEBUG] [Thread-1183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:26:50.990 [DEBUG] [Thread-1183] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:26:50.990 [DEBUG] [Thread-1183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:26:50.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:26:50.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:26:50.991 [DEBUG] [Thread-1183] [transport.py] [_log()] userauth is OK
2025-11-25T15:26:50.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:26:50.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:26:50.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:26:50.991 [DEBUG] [Thread-1183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:26:51.006 [INFO] [Thread-1183] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:26:51.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:26:51.664 [DEBUG] [Thread-1183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:26:51.664 [DEBUG] [Thread-1183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:26:51.664 [DEBUG] [Thread-1183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:26:51.705 [DEBUG] [Thread-1183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:26:51.706 [DEBUG] [Thread-1183] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:26:51.708 [DEBUG] [Thread-1183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:26:51.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:26:51.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:26:51.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:26:51.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:26:51.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:26:51.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:26:51.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:26:51.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:26:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:26:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.559823 -999.00  +26.20  21.28     12   -4.70 1 1 1 1 1   888    0 31.98 30.86 ----- 19.6 21.3 57.2 24.8 32.2 -30.2 31.9 -31.3 33.0 -29.7 33.7 -29.3
2025-11-25T15:26:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:26:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:26:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.559823
2025-11-25T15:26:51.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:26:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:26:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:26:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:26:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:26:51.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:26:25', tmtdew=37.99, humidity=7.54, cloud=0.0, wind=16.23, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:26:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:26:51.727 [DEBUG] [Thread-1183] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:26:51.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:26:51.820 [DEBUG] [Thread-1186] [transport.py] [_log()] starting thread (client mode): 0x737e8610
2025-11-25T15:26:51.820 [DEBUG] [Thread-1186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:26:51.836 [DEBUG] [Thread-1186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:26:51.836 [INFO] [Thread-1186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] client lang: <none>
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] server lang: <none>
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] kex follows: False
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] Compression: none
2025-11-25T15:26:51.845 [DEBUG] [Thread-1186] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:26:51.902 [DEBUG] [Thread-1186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:26:51.902 [DEBUG] [Thread-1186] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:26:51.902 [DEBUG] [Thread-1186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:26:51.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:26:51.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:26:51.959 [DEBUG] [Thread-1186] [transport.py] [_log()] userauth is OK
2025-11-25T15:26:51.959 [DEBUG] [Thread-1186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:26:51.959 [DEBUG] [Thread-1186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:26:51.959 [DEBUG] [Thread-1186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:26:51.959 [DEBUG] [Thread-1186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:26:51.974 [INFO] [Thread-1186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:26:51.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:26:51.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:26:52.820 [DEBUG] [Thread-1186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:26:52.821 [DEBUG] [Thread-1186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:26:52.869 [DEBUG] [Thread-1186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:26:52.869 [DEBUG] [Thread-1186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:26:52.879 [DEBUG] [Thread-1186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:26:52.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:26:52.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:26:52.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:26:52.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:26:52.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:26:52.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:26:52.915 [DEBUG] [Thread-1186] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:27:02.605 [DEBUG] [Thread-1188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:27:17.672 [DEBUG] [Thread-1189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:27:22.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:27:22.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:27:22.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
2025-11-25T15:27:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 26, 57), 38.17, 7.52, 0.0, 16.36, 26.76, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:27:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:26:57
2025-11-25T15:27:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:27:23.897 [DEBUG] [Thread-1190] [transport.py] [_log()] starting thread (client mode): 0x737e83a0
2025-11-25T15:27:23.897 [DEBUG] [Thread-1190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:27:23.917 [DEBUG] [Thread-1190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:27:23.917 [INFO] [Thread-1190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:27:23.920 [DEBUG] [Thread-1190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:27:23.920 [DEBUG] [Thread-1190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] client lang: <none>
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] server lang: <none>
2025-11-25T15:27:23.921 [DEBUG] [Thread-1190] [transport.py] [_log()] kex follows: False
2025-11-25T15:27:23.922 [DEBUG] [Thread-1190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:27:23.922 [DEBUG] [Thread-1190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:27:23.922 [DEBUG] [Thread-1190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:27:23.922 [DEBUG] [Thread-1190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:27:23.922 [DEBUG] [Thread-1190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:27:23.922 [DEBUG] [Thread-1190] [transport.py] [_log()] Compression: none
2025-11-25T15:27:23.922 [DEBUG] [Thread-1190] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:27:23.940 [DEBUG] [Thread-1190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:27:23.940 [DEBUG] [Thread-1190] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:27:23.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:27:23.941 [DEBUG] [Thread-1190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:27:23.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:27:23.943 [DEBUG] [Thread-1190] [transport.py] [_log()] userauth is OK
2025-11-25T15:27:23.943 [DEBUG] [Thread-1190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:27:23.943 [DEBUG] [Thread-1190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:27:23.943 [DEBUG] [Thread-1190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:27:23.943 [DEBUG] [Thread-1190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:27:23.967 [INFO] [Thread-1190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:27:23.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:27:24.539 [DEBUG] [Thread-1190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:27:24.539 [DEBUG] [Thread-1190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:27:24.540 [DEBUG] [Thread-1190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:27:24.580 [DEBUG] [Thread-1190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:27:24.580 [DEBUG] [Thread-1190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:27:24.582 [DEBUG] [Thread-1190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:27:24.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:27:24.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:27:24.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:27:24.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:27:24.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:27:24.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:27:24.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:27:24.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.560517 -999.00  +26.30  15.51     12   -4.70 1 1 1 1 1   888    0 32.35 31.38 ----- 16.8 15.5 34.2 18.5 32.2 -30.4 32.0 -30.7 33.2 -29.9 33.8 -29.3
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.560517
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:27:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:26:57', tmtdew=38.17, humidity=7.52, cloud=0.0, wind=16.36, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:27:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:27:24.599 [DEBUG] [Thread-1190] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:27:24.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:27:24.695 [DEBUG] [Thread-1193] [transport.py] [_log()] starting thread (client mode): 0x737eb7c0
2025-11-25T15:27:24.695 [DEBUG] [Thread-1193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:27:24.710 [DEBUG] [Thread-1193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:27:24.710 [INFO] [Thread-1193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] client lang: <none>
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] server lang: <none>
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] kex follows: False
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:27:24.717 [DEBUG] [Thread-1193] [transport.py] [_log()] Compression: none
2025-11-25T15:27:24.718 [DEBUG] [Thread-1193] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:27:24.774 [DEBUG] [Thread-1193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:27:24.774 [DEBUG] [Thread-1193] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:27:24.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:27:24.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:27:24.775 [DEBUG] [Thread-1193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:27:24.832 [DEBUG] [Thread-1193] [transport.py] [_log()] userauth is OK
2025-11-25T15:27:24.832 [DEBUG] [Thread-1193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:27:24.832 [DEBUG] [Thread-1193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:27:24.832 [DEBUG] [Thread-1193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:27:24.832 [DEBUG] [Thread-1193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:27:24.849 [INFO] [Thread-1193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:27:24.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:27:24.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:27:25.658 [DEBUG] [Thread-1193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:27:25.658 [DEBUG] [Thread-1193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:27:25.705 [DEBUG] [Thread-1193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:27:25.705 [DEBUG] [Thread-1193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:27:25.714 [DEBUG] [Thread-1193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:27:25.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:27:25.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:27:25.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:27:25.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:27:25.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:27:25.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:27:25.746 [DEBUG] [Thread-1193] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:27:32.710 [DEBUG] [Thread-1195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:27:34.521 [DEBUG] [Thread-1196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:27:47.778 [DEBUG] [Thread-1197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:27:55.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:27:55.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:27:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:27:56.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 27, 29), 38.38, 7.41, 0.0, 13.82, 26.78, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:27:56.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:27:29
2025-11-25T15:27:56.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:27:56.713 [DEBUG] [Thread-1198] [transport.py] [_log()] starting thread (client mode): 0x7376f850
2025-11-25T15:27:56.713 [DEBUG] [Thread-1198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:27:56.734 [DEBUG] [Thread-1198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:27:56.734 [INFO] [Thread-1198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:27:56.737 [DEBUG] [Thread-1198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:27:56.738 [DEBUG] [Thread-1198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:27:56.738 [DEBUG] [Thread-1198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:27:56.738 [DEBUG] [Thread-1198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:27:56.738 [DEBUG] [Thread-1198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:27:56.738 [DEBUG] [Thread-1198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:27:56.738 [DEBUG] [Thread-1198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:27:56.738 [DEBUG] [Thread-1198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:27:56.738 [DEBUG] [Thread-1198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:27:56.738 [DEBUG] [Thread-1198] [transport.py] [_log()] client lang: <none>
2025-11-25T15:27:56.739 [DEBUG] [Thread-1198] [transport.py] [_log()] server lang: <none>
2025-11-25T15:27:56.739 [DEBUG] [Thread-1198] [transport.py] [_log()] kex follows: False
2025-11-25T15:27:56.739 [DEBUG] [Thread-1198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:27:56.739 [DEBUG] [Thread-1198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:27:56.739 [DEBUG] [Thread-1198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:27:56.739 [DEBUG] [Thread-1198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:27:56.739 [DEBUG] [Thread-1198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:27:56.739 [DEBUG] [Thread-1198] [transport.py] [_log()] Compression: none
2025-11-25T15:27:56.739 [DEBUG] [Thread-1198] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:27:56.757 [DEBUG] [Thread-1198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:27:56.757 [DEBUG] [Thread-1198] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:27:56.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:27:56.759 [DEBUG] [Thread-1198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:27:56.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:27:56.761 [DEBUG] [Thread-1198] [transport.py] [_log()] userauth is OK
2025-11-25T15:27:56.761 [DEBUG] [Thread-1198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:27:56.761 [DEBUG] [Thread-1198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:27:56.761 [DEBUG] [Thread-1198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:27:56.761 [DEBUG] [Thread-1198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:27:56.787 [INFO] [Thread-1198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:27:56.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:27:57.422 [DEBUG] [Thread-1198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:27:57.422 [DEBUG] [Thread-1198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:27:57.423 [DEBUG] [Thread-1198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:27:57.464 [DEBUG] [Thread-1198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:27:57.464 [DEBUG] [Thread-1198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:27:57.467 [DEBUG] [Thread-1198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:27:57.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:27:57.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:27:57.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:27:57.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:27:57.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:27:57.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:27:57.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:27:57.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:27:57.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:27:57.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.560865 -999.00  +26.20  16.11     12   -5.00 1 1 1 1 1   888    0 31.88 30.69 ----- 17.6 16.1 38.6 25.3 32.0 -30.4 31.9 -30.4 33.0 -27.8 33.6 -29.1
2025-11-25T15:27:57.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:27:57.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:27:57.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.560865
2025-11-25T15:27:57.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:27:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:27:57.492 [DEBUG] [Thread-1198] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:27:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:27:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:27:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:27:57.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:27:29', tmtdew=38.38, humidity=7.41, cloud=0.0, wind=13.82, temperature=26.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:27:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:27:57.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:27:57.593 [DEBUG] [Thread-1201] [transport.py] [_log()] starting thread (client mode): 0x761d9a20
2025-11-25T15:27:57.593 [DEBUG] [Thread-1201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:27:57.607 [DEBUG] [Thread-1201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:27:57.607 [INFO] [Thread-1201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:27:57.615 [DEBUG] [Thread-1201] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:27:57.615 [DEBUG] [Thread-1201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:27:57.615 [DEBUG] [Thread-1201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:27:57.615 [DEBUG] [Thread-1201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:27:57.615 [DEBUG] [Thread-1201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:27:57.615 [DEBUG] [Thread-1201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] client lang: <none>
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] server lang: <none>
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] kex follows: False
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] Compression: none
2025-11-25T15:27:57.616 [DEBUG] [Thread-1201] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:27:57.678 [DEBUG] [Thread-1201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:27:57.679 [DEBUG] [Thread-1201] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:27:57.679 [DEBUG] [Thread-1201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:27:57.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:27:57.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:27:57.737 [DEBUG] [Thread-1201] [transport.py] [_log()] userauth is OK
2025-11-25T15:27:57.737 [DEBUG] [Thread-1201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:27:57.737 [DEBUG] [Thread-1201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:27:57.737 [DEBUG] [Thread-1201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:27:57.738 [DEBUG] [Thread-1201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:27:57.760 [INFO] [Thread-1201] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:27:57.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:27:57.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:27:58.582 [DEBUG] [Thread-1201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:27:58.582 [DEBUG] [Thread-1201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:27:58.630 [DEBUG] [Thread-1201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:27:58.630 [DEBUG] [Thread-1201] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:27:58.640 [DEBUG] [Thread-1201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:27:58.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:27:58.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:27:58.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:27:58.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:27:58.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:27:58.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:27:58.677 [DEBUG] [Thread-1201] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:28:02.822 [DEBUG] [Thread-1203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:28:17.882 [DEBUG] [Thread-1204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:28:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:28:28.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:28:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:28:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 28, 1), 38.27, 7.46, 0.0, 13.29, 26.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:28:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:28:01
2025-11-25T15:28:29.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:28:29.642 [DEBUG] [Thread-1205] [transport.py] [_log()] starting thread (client mode): 0x7374e830
2025-11-25T15:28:29.642 [DEBUG] [Thread-1205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:28:29.667 [DEBUG] [Thread-1205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:28:29.667 [INFO] [Thread-1205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:28:29.669 [DEBUG] [Thread-1205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:28:29.670 [DEBUG] [Thread-1205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:28:29.670 [DEBUG] [Thread-1205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:28:29.670 [DEBUG] [Thread-1205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:28:29.670 [DEBUG] [Thread-1205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:28:29.670 [DEBUG] [Thread-1205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:28:29.670 [DEBUG] [Thread-1205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:28:29.670 [DEBUG] [Thread-1205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:28:29.671 [DEBUG] [Thread-1205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:28:29.671 [DEBUG] [Thread-1205] [transport.py] [_log()] client lang: <none>
2025-11-25T15:28:29.671 [DEBUG] [Thread-1205] [transport.py] [_log()] server lang: <none>
2025-11-25T15:28:29.671 [DEBUG] [Thread-1205] [transport.py] [_log()] kex follows: False
2025-11-25T15:28:29.671 [DEBUG] [Thread-1205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:28:29.671 [DEBUG] [Thread-1205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:28:29.671 [DEBUG] [Thread-1205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:28:29.671 [DEBUG] [Thread-1205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:28:29.672 [DEBUG] [Thread-1205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:28:29.672 [DEBUG] [Thread-1205] [transport.py] [_log()] Compression: none
2025-11-25T15:28:29.672 [DEBUG] [Thread-1205] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:28:29.684 [DEBUG] [Thread-1205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:28:29.685 [DEBUG] [Thread-1205] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:28:29.685 [DEBUG] [Thread-1205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:28:29.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:28:29.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:28:29.688 [DEBUG] [Thread-1205] [transport.py] [_log()] userauth is OK
2025-11-25T15:28:29.688 [DEBUG] [Thread-1205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:28:29.688 [DEBUG] [Thread-1205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:28:29.688 [DEBUG] [Thread-1205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:28:29.688 [DEBUG] [Thread-1205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:28:29.708 [INFO] [Thread-1205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:28:29.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:28:30.330 [DEBUG] [Thread-1205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:28:30.330 [DEBUG] [Thread-1205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:28:30.331 [DEBUG] [Thread-1205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:28:30.371 [DEBUG] [Thread-1205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:28:30.371 [DEBUG] [Thread-1205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:28:30.374 [DEBUG] [Thread-1205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:28:30.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:28:30.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:28:30.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:28:30.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:28:30.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:28:30.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:28:30.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:28:30.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:28:30.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:28:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.561212 -999.00  +26.20  12.94     12   -4.90 1 1 1 1 1   888    0 31.81 31.62 ----- 12.4 12.9 46.0 20.7 32.2 -30.9 31.9 -31.3 33.0 -29.4 33.6 -29.3
2025-11-25T15:28:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:28:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:28:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.561212
2025-11-25T15:28:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:28:30.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:28:30.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:28:30.396 [DEBUG] [Thread-1205] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:28:30.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:28:30.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:28:30.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:28:01', tmtdew=38.27, humidity=7.46, cloud=0.0, wind=13.29, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:28:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:28:30.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:28:30.501 [DEBUG] [Thread-1208] [transport.py] [_log()] starting thread (client mode): 0x737e9180
2025-11-25T15:28:30.502 [DEBUG] [Thread-1208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:28:30.520 [DEBUG] [Thread-1208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:28:30.521 [INFO] [Thread-1208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:28:30.528 [DEBUG] [Thread-1208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:28:30.528 [DEBUG] [Thread-1208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:28:30.528 [DEBUG] [Thread-1208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:28:30.528 [DEBUG] [Thread-1208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] client lang: <none>
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] server lang: <none>
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] kex follows: False
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] Compression: none
2025-11-25T15:28:30.529 [DEBUG] [Thread-1208] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:28:30.585 [DEBUG] [Thread-1208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:28:30.586 [DEBUG] [Thread-1208] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:28:30.586 [DEBUG] [Thread-1208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:28:30.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:28:30.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:28:30.641 [DEBUG] [Thread-1208] [transport.py] [_log()] userauth is OK
2025-11-25T15:28:30.642 [DEBUG] [Thread-1208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:28:30.642 [DEBUG] [Thread-1208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:28:30.642 [DEBUG] [Thread-1208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:28:30.642 [DEBUG] [Thread-1208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:28:30.661 [INFO] [Thread-1208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:28:30.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:28:30.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:28:31.459 [DEBUG] [Thread-1208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:28:31.459 [DEBUG] [Thread-1208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:28:31.507 [DEBUG] [Thread-1208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:28:31.507 [DEBUG] [Thread-1208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:28:31.516 [DEBUG] [Thread-1208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:28:31.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:28:31.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:28:31.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:28:31.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:28:31.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:28:31.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:28:31.554 [DEBUG] [Thread-1208] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:28:32.930 [DEBUG] [Thread-1210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:28:35.047 [DEBUG] [Thread-1211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:28:48.002 [DEBUG] [Thread-1212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:29:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:29:01.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:29:01.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:29:02.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 28, 33), 38.96, 6.95, 0.0, 9.49, 27.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:29:02.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:28:33
2025-11-25T15:29:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:29:02.507 [DEBUG] [Thread-1213] [transport.py] [_log()] starting thread (client mode): 0x70d039d0
2025-11-25T15:29:02.507 [DEBUG] [Thread-1213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:29:02.526 [DEBUG] [Thread-1213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:29:02.526 [INFO] [Thread-1213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:29:02.529 [DEBUG] [Thread-1213] [transport.py] [_log()] client lang: <none>
2025-11-25T15:29:02.530 [DEBUG] [Thread-1213] [transport.py] [_log()] server lang: <none>
2025-11-25T15:29:02.530 [DEBUG] [Thread-1213] [transport.py] [_log()] kex follows: False
2025-11-25T15:29:02.530 [DEBUG] [Thread-1213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:29:02.530 [DEBUG] [Thread-1213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:29:02.530 [DEBUG] [Thread-1213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:29:02.530 [DEBUG] [Thread-1213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:29:02.531 [DEBUG] [Thread-1213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:29:02.531 [DEBUG] [Thread-1213] [transport.py] [_log()] Compression: none
2025-11-25T15:29:02.531 [DEBUG] [Thread-1213] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:29:02.545 [DEBUG] [Thread-1213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:29:02.545 [DEBUG] [Thread-1213] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:29:02.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:29:02.547 [DEBUG] [Thread-1213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:29:02.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:29:02.548 [DEBUG] [Thread-1213] [transport.py] [_log()] userauth is OK
2025-11-25T15:29:02.549 [DEBUG] [Thread-1213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:29:02.549 [DEBUG] [Thread-1213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:29:02.549 [DEBUG] [Thread-1213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:29:02.549 [DEBUG] [Thread-1213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:29:02.567 [INFO] [Thread-1213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:29:02.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:29:03.046 [DEBUG] [Thread-1215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:29:03.213 [DEBUG] [Thread-1213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:29:03.213 [DEBUG] [Thread-1213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:29:03.213 [DEBUG] [Thread-1213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:29:03.254 [DEBUG] [Thread-1213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:29:03.255 [DEBUG] [Thread-1213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:29:03.257 [DEBUG] [Thread-1213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:29:03.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:29:03.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:29:03.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:29:03.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:29:03.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:29:03.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:29:03.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.561559 -999.00  +26.00  11.79     12   -4.90 1 1 1 1 1   888    0 31.88 29.84 ----- 11.9 11.8 41.4 14.9 32.2 -30.3 32.0 -30.9 33.1 -27.9 33.6 -28.7
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.561559
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:29:03.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:28:33', tmtdew=38.96, humidity=6.95, cloud=0.0, wind=9.49, temperature=27.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:28:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:29:03.275 [DEBUG] [Thread-1213] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:29:03.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:29:03.370 [DEBUG] [Thread-1217] [transport.py] [_log()] starting thread (client mode): 0x70d0ea70
2025-11-25T15:29:03.371 [DEBUG] [Thread-1217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:29:03.385 [DEBUG] [Thread-1217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:29:03.385 [INFO] [Thread-1217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:29:03.393 [DEBUG] [Thread-1217] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:29:03.393 [DEBUG] [Thread-1217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:29:03.393 [DEBUG] [Thread-1217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:29:03.393 [DEBUG] [Thread-1217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:29:03.393 [DEBUG] [Thread-1217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] client lang: <none>
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] server lang: <none>
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] kex follows: False
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] Compression: none
2025-11-25T15:29:03.394 [DEBUG] [Thread-1217] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:29:03.458 [DEBUG] [Thread-1217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:29:03.459 [DEBUG] [Thread-1217] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:29:03.460 [DEBUG] [Thread-1217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:29:03.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:29:03.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:29:03.518 [DEBUG] [Thread-1217] [transport.py] [_log()] userauth is OK
2025-11-25T15:29:03.518 [DEBUG] [Thread-1217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:29:03.518 [DEBUG] [Thread-1217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:29:03.518 [DEBUG] [Thread-1217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:29:03.518 [DEBUG] [Thread-1217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:29:03.537 [INFO] [Thread-1217] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:29:03.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:29:03.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:29:04.342 [DEBUG] [Thread-1217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:29:04.343 [DEBUG] [Thread-1217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:29:04.391 [DEBUG] [Thread-1217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:29:04.391 [DEBUG] [Thread-1217] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:29:04.400 [DEBUG] [Thread-1217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:29:04.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:29:04.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:29:04.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:29:04.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:29:04.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:29:04.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:29:04.438 [DEBUG] [Thread-1217] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:29:18.086 [DEBUG] [Thread-1219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:29:33.146 [DEBUG] [Thread-1220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:29:34.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:29:34.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:29:34.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:29:35.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 29, 5), 38.37, 6.97, 0.0, 7.98, 26.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:29:35.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:29:05
2025-11-25T15:29:35.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:29:35.397 [DEBUG] [Thread-1221] [transport.py] [_log()] starting thread (client mode): 0x70d0f460
2025-11-25T15:29:35.397 [DEBUG] [Thread-1221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:29:35.415 [DEBUG] [Thread-1221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:29:35.415 [INFO] [Thread-1221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:29:35.416 [DEBUG] [Thread-1221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:29:35.417 [DEBUG] [Thread-1221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:29:35.417 [DEBUG] [Thread-1221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:29:35.417 [DEBUG] [Thread-1221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:29:35.417 [DEBUG] [Thread-1221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:29:35.417 [DEBUG] [Thread-1221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:29:35.417 [DEBUG] [Thread-1221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:29:35.417 [DEBUG] [Thread-1221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:29:35.418 [DEBUG] [Thread-1221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:29:35.418 [DEBUG] [Thread-1221] [transport.py] [_log()] client lang: <none>
2025-11-25T15:29:35.418 [DEBUG] [Thread-1221] [transport.py] [_log()] server lang: <none>
2025-11-25T15:29:35.418 [DEBUG] [Thread-1221] [transport.py] [_log()] kex follows: False
2025-11-25T15:29:35.418 [DEBUG] [Thread-1221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:29:35.418 [DEBUG] [Thread-1221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:29:35.418 [DEBUG] [Thread-1221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:29:35.418 [DEBUG] [Thread-1221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:29:35.418 [DEBUG] [Thread-1221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:29:35.419 [DEBUG] [Thread-1221] [transport.py] [_log()] Compression: none
2025-11-25T15:29:35.419 [DEBUG] [Thread-1221] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:29:35.429 [DEBUG] [Thread-1221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:29:35.430 [DEBUG] [Thread-1221] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:29:35.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:29:35.431 [DEBUG] [Thread-1221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:29:35.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:29:35.433 [DEBUG] [Thread-1221] [transport.py] [_log()] userauth is OK
2025-11-25T15:29:35.433 [DEBUG] [Thread-1221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:29:35.433 [DEBUG] [Thread-1221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:29:35.433 [DEBUG] [Thread-1221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:29:35.433 [DEBUG] [Thread-1221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:29:35.452 [INFO] [Thread-1221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:29:35.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:29:35.776 [DEBUG] [Thread-1223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:29:36.033 [DEBUG] [Thread-1221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:29:36.033 [DEBUG] [Thread-1221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:29:36.034 [DEBUG] [Thread-1221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:29:36.073 [DEBUG] [Thread-1221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:29:36.074 [DEBUG] [Thread-1221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:29:36.077 [DEBUG] [Thread-1221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:29:36.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:29:36.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:29:36.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:29:36.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:29:36.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:29:36.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:29:36.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:29:36.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:29:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:29:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.561906 -999.00  +26.40  11.26     12   -4.90 1 1 1 1 1   888    0 31.07 27.73 ----- 10.5 11.3 8.4 13.5 32.3 -30.2 32.1 -30.5 33.3 -27.4 33.7 -28.5
2025-11-25T15:29:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:29:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:29:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.561906
2025-11-25T15:29:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:29:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:29:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:29:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:29:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:29:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:29:05', tmtdew=38.37, humidity=6.97, cloud=0.0, wind=7.98, temperature=26.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:29:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:29:36.101 [DEBUG] [Thread-1221] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:29:36.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:29:36.213 [DEBUG] [Thread-1225] [transport.py] [_log()] starting thread (client mode): 0x70d0f790
2025-11-25T15:29:36.213 [DEBUG] [Thread-1225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:29:36.228 [DEBUG] [Thread-1225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:29:36.228 [INFO] [Thread-1225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:29:36.235 [DEBUG] [Thread-1225] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:29:36.235 [DEBUG] [Thread-1225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] client lang: <none>
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] server lang: <none>
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] kex follows: False
2025-11-25T15:29:36.236 [DEBUG] [Thread-1225] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:29:36.237 [DEBUG] [Thread-1225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:29:36.237 [DEBUG] [Thread-1225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:29:36.237 [DEBUG] [Thread-1225] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:29:36.237 [DEBUG] [Thread-1225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:29:36.237 [DEBUG] [Thread-1225] [transport.py] [_log()] Compression: none
2025-11-25T15:29:36.237 [DEBUG] [Thread-1225] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:29:36.293 [DEBUG] [Thread-1225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:29:36.293 [DEBUG] [Thread-1225] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:29:36.294 [DEBUG] [Thread-1225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:29:36.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:29:36.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:29:36.349 [DEBUG] [Thread-1225] [transport.py] [_log()] userauth is OK
2025-11-25T15:29:36.350 [DEBUG] [Thread-1225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:29:36.350 [DEBUG] [Thread-1225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:29:36.350 [DEBUG] [Thread-1225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:29:36.350 [DEBUG] [Thread-1225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:29:36.372 [INFO] [Thread-1225] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:29:36.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:29:36.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:29:37.210 [DEBUG] [Thread-1225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:29:37.210 [DEBUG] [Thread-1225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:29:37.257 [DEBUG] [Thread-1225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:29:37.258 [DEBUG] [Thread-1225] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:29:37.268 [DEBUG] [Thread-1225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:29:37.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:29:37.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:29:37.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:29:37.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:29:37.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:29:37.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:29:37.307 [DEBUG] [Thread-1225] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:29:48.191 [DEBUG] [Thread-1227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:30:03.266 [DEBUG] [Thread-1228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:30:07.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:30:07.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:30:07.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:30:07.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 29, 37), 38.38, 6.99, 0.0, 7.69, 26.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:30:07.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:29:37
2025-11-25T15:30:08.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:30:08.262 [DEBUG] [Thread-1229] [transport.py] [_log()] starting thread (client mode): 0x953dfee0
2025-11-25T15:30:08.262 [DEBUG] [Thread-1229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:30:08.285 [DEBUG] [Thread-1229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:30:08.286 [INFO] [Thread-1229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:30:08.290 [DEBUG] [Thread-1229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:30:08.290 [DEBUG] [Thread-1229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:30:08.290 [DEBUG] [Thread-1229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:30:08.290 [DEBUG] [Thread-1229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:30:08.290 [DEBUG] [Thread-1229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] client lang: <none>
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] server lang: <none>
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] kex follows: False
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] Compression: none
2025-11-25T15:30:08.291 [DEBUG] [Thread-1229] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:30:08.312 [DEBUG] [Thread-1229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:30:08.313 [DEBUG] [Thread-1229] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:30:08.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:30:08.314 [DEBUG] [Thread-1229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:30:08.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:30:08.316 [DEBUG] [Thread-1229] [transport.py] [_log()] userauth is OK
2025-11-25T15:30:08.316 [DEBUG] [Thread-1229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:30:08.316 [DEBUG] [Thread-1229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:30:08.316 [DEBUG] [Thread-1229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:30:08.316 [DEBUG] [Thread-1229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:30:08.341 [INFO] [Thread-1229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:30:08.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:30:09.663 [DEBUG] [Thread-1229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:30:09.663 [DEBUG] [Thread-1229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:30:09.664 [DEBUG] [Thread-1229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:30:09.704 [DEBUG] [Thread-1229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:30:09.704 [DEBUG] [Thread-1229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:30:09.708 [DEBUG] [Thread-1229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:30:09.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:30:09.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:30:09.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:30:09.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:30:09.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:30:09.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:30:09.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:30:09.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:30:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:30:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.562254 -999.00  +26.40  13.15     12   -4.90 1 1 1 1 1   888    0 31.90 25.41 ----- 8.7 13.2 49.6 15.5 32.3 -30.5 32.0 -30.6 33.2 -28.2 33.8 -28.8
2025-11-25T15:30:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:30:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:30:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.562254
2025-11-25T15:30:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:30:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:30:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:30:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:30:09.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:30:09.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:29:37', tmtdew=38.38, humidity=6.99, cloud=0.0, wind=7.69, temperature=26.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:29:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:30:09.755 [DEBUG] [Thread-1229] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:30:09.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:30:18.313 [DEBUG] [Thread-1232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:30:33.379 [DEBUG] [Thread-1233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:30:36.403 [DEBUG] [Thread-1234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:30:48.416 [DEBUG] [Thread-1235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:31:03.463 [DEBUG] [Thread-1236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:31:18.510 [DEBUG] [Thread-1237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:31:33.557 [DEBUG] [Thread-1238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:31:37.013 [DEBUG] [Thread-1239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:31:48.594 [DEBUG] [Thread-1240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:32:03.636 [DEBUG] [Thread-1241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:32:18.681 [DEBUG] [Thread-1242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:32:21.581 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T15:32:33.718 [DEBUG] [Thread-1243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:32:37.524 [DEBUG] [Thread-1244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:32:48.761 [DEBUG] [Thread-1245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:32:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:32:51.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:32:51.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:32:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 32, 17), 38.29, 7.42, 0.0, 9.42, 26.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:32:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:32:17
2025-11-25T15:32:52.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:32:52.561 [DEBUG] [Thread-1246] [transport.py] [_log()] starting thread (client mode): 0x70d0eaa0
2025-11-25T15:32:52.561 [DEBUG] [Thread-1246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:32:52.582 [DEBUG] [Thread-1246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:32:52.582 [INFO] [Thread-1246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:32:52.585 [DEBUG] [Thread-1246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:32:52.586 [DEBUG] [Thread-1246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:32:52.586 [DEBUG] [Thread-1246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:32:52.586 [DEBUG] [Thread-1246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:32:52.586 [DEBUG] [Thread-1246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:32:52.586 [DEBUG] [Thread-1246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:32:52.586 [DEBUG] [Thread-1246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:32:52.586 [DEBUG] [Thread-1246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:32:52.586 [DEBUG] [Thread-1246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:32:52.587 [DEBUG] [Thread-1246] [transport.py] [_log()] client lang: <none>
2025-11-25T15:32:52.587 [DEBUG] [Thread-1246] [transport.py] [_log()] server lang: <none>
2025-11-25T15:32:52.587 [DEBUG] [Thread-1246] [transport.py] [_log()] kex follows: False
2025-11-25T15:32:52.587 [DEBUG] [Thread-1246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:32:52.587 [DEBUG] [Thread-1246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:32:52.587 [DEBUG] [Thread-1246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:32:52.587 [DEBUG] [Thread-1246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:32:52.587 [DEBUG] [Thread-1246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:32:52.588 [DEBUG] [Thread-1246] [transport.py] [_log()] Compression: none
2025-11-25T15:32:52.588 [DEBUG] [Thread-1246] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:32:52.608 [DEBUG] [Thread-1246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:32:52.609 [DEBUG] [Thread-1246] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:32:52.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:32:52.610 [DEBUG] [Thread-1246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:32:52.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:32:52.612 [DEBUG] [Thread-1246] [transport.py] [_log()] userauth is OK
2025-11-25T15:32:52.612 [DEBUG] [Thread-1246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:32:52.612 [DEBUG] [Thread-1246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:32:52.612 [DEBUG] [Thread-1246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:32:52.612 [DEBUG] [Thread-1246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:32:52.630 [INFO] [Thread-1246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:32:52.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:32:53.216 [DEBUG] [Thread-1246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:32:53.216 [DEBUG] [Thread-1246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:32:53.216 [DEBUG] [Thread-1246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:32:53.258 [DEBUG] [Thread-1246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:32:53.258 [DEBUG] [Thread-1246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:32:53.261 [DEBUG] [Thread-1246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:32:53.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:32:53.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:32:53.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:32:53.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:32:53.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:32:53.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:32:53.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:32:53.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:32:53.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:32:53.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.564337 -999.00  +26.50  13.02     12   -5.00 1 1 1 1 1   888    0 32.18 11.34 ----- 10.8 13.0 58.2 16.6 32.5 -31.2 32.3 -30.8 33.4 -29.1 34.0 -29.8
2025-11-25T15:32:53.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:32:53.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:32:53.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.564337
2025-11-25T15:32:53.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:32:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:32:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:32:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:32:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:32:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:32:17', tmtdew=38.29, humidity=7.42, cloud=0.0, wind=9.42, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:32:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:32:53.290 [DEBUG] [Thread-1246] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:32:53.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:32:53.396 [DEBUG] [Thread-1249] [transport.py] [_log()] starting thread (client mode): 0x70d0f520
2025-11-25T15:32:53.396 [DEBUG] [Thread-1249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:32:53.410 [DEBUG] [Thread-1249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:32:53.411 [INFO] [Thread-1249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:32:53.418 [DEBUG] [Thread-1249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:32:53.418 [DEBUG] [Thread-1249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:32:53.418 [DEBUG] [Thread-1249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:32:53.418 [DEBUG] [Thread-1249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:32:53.418 [DEBUG] [Thread-1249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] client lang: <none>
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] server lang: <none>
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] kex follows: False
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] Compression: none
2025-11-25T15:32:53.419 [DEBUG] [Thread-1249] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:32:53.476 [DEBUG] [Thread-1249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:32:53.476 [DEBUG] [Thread-1249] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:32:53.477 [DEBUG] [Thread-1249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:32:53.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:32:53.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:32:53.532 [DEBUG] [Thread-1249] [transport.py] [_log()] userauth is OK
2025-11-25T15:32:53.532 [DEBUG] [Thread-1249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:32:53.533 [DEBUG] [Thread-1249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:32:53.533 [DEBUG] [Thread-1249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:32:53.533 [DEBUG] [Thread-1249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:32:53.551 [INFO] [Thread-1249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:32:53.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:32:53.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:32:54.347 [DEBUG] [Thread-1249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:32:54.348 [DEBUG] [Thread-1249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:32:54.396 [DEBUG] [Thread-1249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:32:54.396 [DEBUG] [Thread-1249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:32:54.405 [DEBUG] [Thread-1249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:32:54.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:32: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')
2025-11-25T15:32:54.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:32:54.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:32:54.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:32:54.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:32:54.442 [DEBUG] [Thread-1249] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:33:03.803 [DEBUG] [Thread-1251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:33:18.866 [DEBUG] [Thread-1252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:33:24.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:33:24.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:33: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
2025-11-25T15:33:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 33, 21), 38.44, 7.37, 0.0, 7.8, 26.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:33:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:33:21
2025-11-25T15:33:25.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:33:25.405 [DEBUG] [Thread-1253] [transport.py] [_log()] starting thread (client mode): 0x70d0c9d0
2025-11-25T15:33:25.405 [DEBUG] [Thread-1253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:33:25.425 [DEBUG] [Thread-1253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:33:25.426 [INFO] [Thread-1253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] client lang: <none>
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] server lang: <none>
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] kex follows: False
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:33:25.429 [DEBUG] [Thread-1253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:33:25.430 [DEBUG] [Thread-1253] [transport.py] [_log()] Compression: none
2025-11-25T15:33:25.430 [DEBUG] [Thread-1253] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:33:25.448 [DEBUG] [Thread-1253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:33:25.448 [DEBUG] [Thread-1253] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:33:25.449 [DEBUG] [Thread-1253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:33:25.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:33:25.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:33:25.451 [DEBUG] [Thread-1253] [transport.py] [_log()] userauth is OK
2025-11-25T15:33:25.451 [DEBUG] [Thread-1253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:33:25.451 [DEBUG] [Thread-1253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:33:25.451 [DEBUG] [Thread-1253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:33:25.451 [DEBUG] [Thread-1253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:33:25.488 [INFO] [Thread-1253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:33:25.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:33:26.124 [DEBUG] [Thread-1253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:33:26.125 [DEBUG] [Thread-1253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:33:26.125 [DEBUG] [Thread-1253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:33:26.166 [DEBUG] [Thread-1253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:33:26.166 [DEBUG] [Thread-1253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:33:26.170 [DEBUG] [Thread-1253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:33:26.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:33:26.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:33:26.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:33:26.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:33:26.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:33:26.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:33:26.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:33:26.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:33:26.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:33:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.564684 -999.00  +26.40   6.75     12   -5.00 1 1 1 1 1   888    0 31.20 11.09 ----- 6.2 6.8 42.8 11.9 32.7 -30.9 32.4 -30.6 33.4 -29.6 34.1 -29.0
2025-11-25T15:33:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:33:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:33:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.564684
2025-11-25T15:33:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:33:26.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:33:26.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:33:26.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:33:26.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:33:26.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:33:21', tmtdew=38.44, humidity=7.37, cloud=0.0, wind=7.8, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:33:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:33:26.199 [DEBUG] [Thread-1253] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:33:26.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:33:26.301 [DEBUG] [Thread-1256] [transport.py] [_log()] starting thread (client mode): 0x70d0ce50
2025-11-25T15:33:26.302 [DEBUG] [Thread-1256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:33:26.316 [DEBUG] [Thread-1256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:33:26.316 [INFO] [Thread-1256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:33:26.324 [DEBUG] [Thread-1256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:33:26.324 [DEBUG] [Thread-1256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:33:26.324 [DEBUG] [Thread-1256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:33:26.324 [DEBUG] [Thread-1256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:33:26.324 [DEBUG] [Thread-1256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] client lang: <none>
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] server lang: <none>
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] kex follows: False
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] Compression: none
2025-11-25T15:33:26.325 [DEBUG] [Thread-1256] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:33:26.389 [DEBUG] [Thread-1256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:33:26.389 [DEBUG] [Thread-1256] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:33:26.390 [DEBUG] [Thread-1256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:33:26.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:33:26.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:33:26.448 [DEBUG] [Thread-1256] [transport.py] [_log()] userauth is OK
2025-11-25T15:33:26.448 [DEBUG] [Thread-1256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:33:26.449 [DEBUG] [Thread-1256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:33:26.449 [DEBUG] [Thread-1256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:33:26.449 [DEBUG] [Thread-1256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:33:26.468 [INFO] [Thread-1256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:33:26.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:33:26.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:33:27.257 [DEBUG] [Thread-1256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:33:27.258 [DEBUG] [Thread-1256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:33:27.306 [DEBUG] [Thread-1256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:33:27.306 [DEBUG] [Thread-1256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:33:27.315 [DEBUG] [Thread-1256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:33:27.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:33:27.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:33:27.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:33:27.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:33:27.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:33:27.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:33:27.352 [DEBUG] [Thread-1256] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:33:33.909 [DEBUG] [Thread-1258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:33:38.274 [DEBUG] [Thread-1259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:33:48.971 [DEBUG] [Thread-1260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:33:57.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:33:57.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:33:57.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:33:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 33, 53), 38.76, 6.79, 0.0, 5.65, 26.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:33:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:33:53
2025-11-25T15:33:58.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:33:58.347 [DEBUG] [Thread-1261] [transport.py] [_log()] starting thread (client mode): 0x70d0d7b0
2025-11-25T15:33:58.347 [DEBUG] [Thread-1261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:33:58.367 [DEBUG] [Thread-1261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:33:58.367 [INFO] [Thread-1261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:33:58.368 [DEBUG] [Thread-1261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:33:58.368 [DEBUG] [Thread-1261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:33:58.368 [DEBUG] [Thread-1261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:33:58.368 [DEBUG] [Thread-1261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:33:58.368 [DEBUG] [Thread-1261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:33:58.368 [DEBUG] [Thread-1261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] client lang: <none>
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] server lang: <none>
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] kex follows: False
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] Compression: none
2025-11-25T15:33:58.369 [DEBUG] [Thread-1261] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:33:58.382 [DEBUG] [Thread-1261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:33:58.382 [DEBUG] [Thread-1261] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:33:58.383 [DEBUG] [Thread-1261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:33:58.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:33:58.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:33:58.385 [DEBUG] [Thread-1261] [transport.py] [_log()] userauth is OK
2025-11-25T15:33:58.386 [DEBUG] [Thread-1261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:33:58.386 [DEBUG] [Thread-1261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:33:58.386 [DEBUG] [Thread-1261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:33:58.386 [DEBUG] [Thread-1261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:33:58.410 [INFO] [Thread-1261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:33:58.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:33:59.071 [DEBUG] [Thread-1261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:33:59.072 [DEBUG] [Thread-1261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:33:59.072 [DEBUG] [Thread-1261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:33:59.113 [DEBUG] [Thread-1261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:33:59.113 [DEBUG] [Thread-1261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:33:59.116 [DEBUG] [Thread-1261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:33:59.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:33:59.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:33:59.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:33:59.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:33:59.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:33:59.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:33:59.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:33:59.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:33:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:33:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.565031 -999.00  +26.30   3.96     12   -5.00 1 1 1 1 1   888    0 31.01 8.73 ----- 5.2 4.0 28.2 7.6 32.7 -30.8 32.5 -31.3 33.6 -28.2 34.1 -31.8
2025-11-25T15:33:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:33:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:33:59.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.565031
2025-11-25T15:33:59.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:33:59.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:33:59.139 [DEBUG] [Thread-1261] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:33:59.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:33:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:33:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:33:59.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:33:53', tmtdew=38.76, humidity=6.79, cloud=0.0, wind=5.65, temperature=26.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:33:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:33:59.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:33:59.241 [DEBUG] [Thread-1264] [transport.py] [_log()] starting thread (client mode): 0x70d0ea40
2025-11-25T15:33:59.241 [DEBUG] [Thread-1264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:33:59.255 [DEBUG] [Thread-1264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:33:59.256 [INFO] [Thread-1264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:33:59.263 [DEBUG] [Thread-1264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:33:59.263 [DEBUG] [Thread-1264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:33:59.263 [DEBUG] [Thread-1264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:33:59.263 [DEBUG] [Thread-1264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:33:59.263 [DEBUG] [Thread-1264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:33:59.263 [DEBUG] [Thread-1264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:33:59.263 [DEBUG] [Thread-1264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:33:59.263 [DEBUG] [Thread-1264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:33:59.263 [DEBUG] [Thread-1264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] client lang: <none>
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] server lang: <none>
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] kex follows: False
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] Compression: none
2025-11-25T15:33:59.264 [DEBUG] [Thread-1264] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:33:59.319 [DEBUG] [Thread-1264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:33:59.320 [DEBUG] [Thread-1264] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:33:59.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:33:59.320 [DEBUG] [Thread-1264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:33:59.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:33:59.376 [DEBUG] [Thread-1264] [transport.py] [_log()] userauth is OK
2025-11-25T15:33:59.376 [DEBUG] [Thread-1264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:33:59.377 [DEBUG] [Thread-1264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:33:59.377 [DEBUG] [Thread-1264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:33:59.377 [DEBUG] [Thread-1264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:33:59.395 [INFO] [Thread-1264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:33:59.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:33:59.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:34:00.177 [DEBUG] [Thread-1264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:34:00.178 [DEBUG] [Thread-1264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:34:00.233 [DEBUG] [Thread-1264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:34:00.233 [DEBUG] [Thread-1264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:34:00.242 [DEBUG] [Thread-1264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:34:00.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:34:00.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:34:00.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:34:00.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:34:00.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:34:00.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:34:00.279 [DEBUG] [Thread-1264] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:34:04.014 [DEBUG] [Thread-1266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:34:19.079 [DEBUG] [Thread-1267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:34:30.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:34:30.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:34:30.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:34:30.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 34, 25), 38.51, 6.91, 0.0, 7.59, 26.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:34:30.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:34:25
2025-11-25T15:34:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:34:31.248 [DEBUG] [Thread-1268] [transport.py] [_log()] starting thread (client mode): 0x70d0d600
2025-11-25T15:34:31.248 [DEBUG] [Thread-1268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:34:31.268 [DEBUG] [Thread-1268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:34:31.269 [INFO] [Thread-1268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:34:31.271 [DEBUG] [Thread-1268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] client lang: <none>
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] server lang: <none>
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] kex follows: False
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] Compression: none
2025-11-25T15:34:31.272 [DEBUG] [Thread-1268] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:34:31.290 [DEBUG] [Thread-1268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:34:31.291 [DEBUG] [Thread-1268] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:34:31.291 [DEBUG] [Thread-1268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:34:31.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:34:31.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:34:31.293 [DEBUG] [Thread-1268] [transport.py] [_log()] userauth is OK
2025-11-25T15:34:31.293 [DEBUG] [Thread-1268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:34:31.293 [DEBUG] [Thread-1268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:34:31.293 [DEBUG] [Thread-1268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:34:31.293 [DEBUG] [Thread-1268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:34:31.315 [INFO] [Thread-1268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:34:31.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:34:32.000 [DEBUG] [Thread-1268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:34:32.000 [DEBUG] [Thread-1268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:34:32.001 [DEBUG] [Thread-1268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:34:32.042 [DEBUG] [Thread-1268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:34:32.042 [DEBUG] [Thread-1268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:34:32.045 [DEBUG] [Thread-1268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:34:32.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:34:32.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:34:32.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:34:32.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:34:32.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:34:32.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:34:32.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:34:32.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:34:32.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:34:32.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.565379 -999.00  +26.40   7.65     12   -5.10 1 1 1 1 1   888    0 31.66 8.21 ----- 4.4 7.7 93.4 9.4 32.5 -31.6 32.6 -30.1 33.6 -29.5 34.2 -29.8
2025-11-25T15:34:32.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:34:32.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:34:32.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.565379
2025-11-25T15:34:32.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:34:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:34:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:34:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:34:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:34:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:34:25', tmtdew=38.51, humidity=6.91, cloud=0.0, wind=7.59, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:34:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:34:32.072 [DEBUG] [Thread-1268] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:34:32.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:34:32.175 [DEBUG] [Thread-1271] [transport.py] [_log()] starting thread (client mode): 0x70d0c7c0
2025-11-25T15:34:32.175 [DEBUG] [Thread-1271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:34:32.190 [DEBUG] [Thread-1271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:34:32.190 [INFO] [Thread-1271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:34:32.198 [DEBUG] [Thread-1271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:34:32.198 [DEBUG] [Thread-1271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:34:32.198 [DEBUG] [Thread-1271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:34:32.198 [DEBUG] [Thread-1271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:34:32.198 [DEBUG] [Thread-1271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:34:32.198 [DEBUG] [Thread-1271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:34:32.198 [DEBUG] [Thread-1271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:34:32.199 [DEBUG] [Thread-1271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:34:32.199 [DEBUG] [Thread-1271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:34:32.199 [DEBUG] [Thread-1271] [transport.py] [_log()] client lang: <none>
2025-11-25T15:34:32.199 [DEBUG] [Thread-1271] [transport.py] [_log()] server lang: <none>
2025-11-25T15:34:32.199 [DEBUG] [Thread-1271] [transport.py] [_log()] kex follows: False
2025-11-25T15:34:32.199 [DEBUG] [Thread-1271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:34:32.199 [DEBUG] [Thread-1271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:34:32.199 [DEBUG] [Thread-1271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:34:32.200 [DEBUG] [Thread-1271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:34:32.200 [DEBUG] [Thread-1271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:34:32.200 [DEBUG] [Thread-1271] [transport.py] [_log()] Compression: none
2025-11-25T15:34:32.200 [DEBUG] [Thread-1271] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:34:32.256 [DEBUG] [Thread-1271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:34:32.257 [DEBUG] [Thread-1271] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:34:32.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:34:32.258 [DEBUG] [Thread-1271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:34:32.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:34:32.312 [DEBUG] [Thread-1271] [transport.py] [_log()] userauth is OK
2025-11-25T15:34:32.312 [DEBUG] [Thread-1271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:34:32.312 [DEBUG] [Thread-1271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:34:32.312 [DEBUG] [Thread-1271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:34:32.313 [DEBUG] [Thread-1271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:34:32.331 [INFO] [Thread-1271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:34:32.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:34:32.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:34:33.135 [DEBUG] [Thread-1271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:34:33.135 [DEBUG] [Thread-1271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:34:33.183 [DEBUG] [Thread-1271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:34:33.183 [DEBUG] [Thread-1271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:34:33.192 [DEBUG] [Thread-1271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:34:33.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:34:33.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:34:33.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:34:33.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:34:33.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:34:33.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:34:33.229 [DEBUG] [Thread-1271] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:34:34.120 [DEBUG] [Thread-1273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:34:39.020 [DEBUG] [Thread-1274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:34:49.189 [DEBUG] [Thread-1275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:35:03.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:35:03.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:35:03.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:35:03.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 34, 57), 38.34, 7.02, 0.0, 4.43, 26.46, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:35:03.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:34:57
2025-11-25T15:35:04.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:35:04.201 [DEBUG] [Thread-1276] [transport.py] [_log()] starting thread (client mode): 0x70d0c7c0
2025-11-25T15:35:04.201 [DEBUG] [Thread-1276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:35:04.221 [DEBUG] [Thread-1276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:35:04.221 [INFO] [Thread-1276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:35:04.222 [DEBUG] [Thread-1276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] client lang: <none>
2025-11-25T15:35:04.223 [DEBUG] [Thread-1276] [transport.py] [_log()] server lang: <none>
2025-11-25T15:35:04.224 [DEBUG] [Thread-1276] [transport.py] [_log()] kex follows: False
2025-11-25T15:35:04.224 [DEBUG] [Thread-1276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:35:04.224 [DEBUG] [Thread-1276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:35:04.224 [DEBUG] [Thread-1276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:35:04.224 [DEBUG] [Thread-1276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:35:04.224 [DEBUG] [Thread-1276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:35:04.224 [DEBUG] [Thread-1276] [transport.py] [_log()] Compression: none
2025-11-25T15:35:04.224 [DEBUG] [Thread-1276] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:35:04.227 [DEBUG] [Thread-1278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:35:04.243 [DEBUG] [Thread-1276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:35:04.243 [DEBUG] [Thread-1276] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:35:04.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:35:04.244 [DEBUG] [Thread-1276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:35:04.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:35:04.246 [DEBUG] [Thread-1276] [transport.py] [_log()] userauth is OK
2025-11-25T15:35:04.247 [DEBUG] [Thread-1276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:35:04.247 [DEBUG] [Thread-1276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:35:04.247 [DEBUG] [Thread-1276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:35:04.247 [DEBUG] [Thread-1276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:35:04.282 [INFO] [Thread-1276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:35:04.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:35:05.971 [DEBUG] [Thread-1276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:35:05.971 [DEBUG] [Thread-1276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:35:05.972 [DEBUG] [Thread-1276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:35:06.011 [DEBUG] [Thread-1276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:35:06.011 [DEBUG] [Thread-1276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:35:06.013 [DEBUG] [Thread-1276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:35:06.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:35:06.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:35:06.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:35:06.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:35:06.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:35:06.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:35:06.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:35:06.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:35:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:35:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.565726 -999.00  +26.50   4.93     12   -4.90 1 1 1 1 1   888    0 31.69 9.33 ----- 4.7 4.9 45.6 6.5 32.9 -30.5 32.7 -29.8 33.6 -28.0 34.4 -29.4
2025-11-25T15:35:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:35:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:35:06.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.565726
2025-11-25T15:35:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:35:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:35:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:35:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:35:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:35:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:34:57', tmtdew=38.34, humidity=7.02, cloud=0.0, wind=4.43, temperature=26.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:34:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:35:06.073 [DEBUG] [Thread-1276] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:35:06.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:35:06.164 [DEBUG] [Thread-1280] [transport.py] [_log()] starting thread (client mode): 0x70d0f970
2025-11-25T15:35:06.164 [DEBUG] [Thread-1280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:35:06.181 [DEBUG] [Thread-1280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:35:06.181 [INFO] [Thread-1280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:35:06.189 [DEBUG] [Thread-1280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:35:06.189 [DEBUG] [Thread-1280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:35:06.189 [DEBUG] [Thread-1280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:35:06.189 [DEBUG] [Thread-1280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:35:06.189 [DEBUG] [Thread-1280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:35:06.189 [DEBUG] [Thread-1280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] client lang: <none>
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] server lang: <none>
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] kex follows: False
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] Compression: none
2025-11-25T15:35:06.190 [DEBUG] [Thread-1280] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:35:06.249 [DEBUG] [Thread-1280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:35:06.250 [DEBUG] [Thread-1280] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:35:06.250 [DEBUG] [Thread-1280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:35:06.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:35:06.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:35:06.305 [DEBUG] [Thread-1280] [transport.py] [_log()] userauth is OK
2025-11-25T15:35:06.305 [DEBUG] [Thread-1280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:35:06.305 [DEBUG] [Thread-1280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:35:06.305 [DEBUG] [Thread-1280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:35:06.305 [DEBUG] [Thread-1280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:35:06.329 [INFO] [Thread-1280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:35:06.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:35:06.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:35:07.175 [DEBUG] [Thread-1280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:35:07.175 [DEBUG] [Thread-1280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:35:07.224 [DEBUG] [Thread-1280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:35:07.225 [DEBUG] [Thread-1280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:35:07.242 [DEBUG] [Thread-1280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:35:07.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:35:07.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:35:07.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:35:07.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:35:07.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:35:07.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:35:07.285 [DEBUG] [Thread-1280] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:35:19.277 [DEBUG] [Thread-1282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:35:34.338 [DEBUG] [Thread-1283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:35:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:35:37.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:35:37.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:35:37.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 35, 30), 38.57, 6.92, 0.0, 5.14, 26.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:35:37.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:35:30
2025-11-25T15:35:38.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:35:38.244 [DEBUG] [Thread-1284] [transport.py] [_log()] starting thread (client mode): 0x70d0cb20
2025-11-25T15:35:38.245 [DEBUG] [Thread-1284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:35:38.266 [DEBUG] [Thread-1284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:35:38.266 [INFO] [Thread-1284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:35:38.269 [DEBUG] [Thread-1284] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:35:38.269 [DEBUG] [Thread-1284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:35:38.269 [DEBUG] [Thread-1284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:35:38.269 [DEBUG] [Thread-1284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] client lang: <none>
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] server lang: <none>
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] kex follows: False
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] Compression: none
2025-11-25T15:35:38.270 [DEBUG] [Thread-1284] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:35:38.288 [DEBUG] [Thread-1284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:35:38.288 [DEBUG] [Thread-1284] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:35:38.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:35:38.289 [DEBUG] [Thread-1284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:35:38.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:35:38.291 [DEBUG] [Thread-1284] [transport.py] [_log()] userauth is OK
2025-11-25T15:35:38.291 [DEBUG] [Thread-1284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:35:38.291 [DEBUG] [Thread-1284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:35:38.291 [DEBUG] [Thread-1284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:35:38.291 [DEBUG] [Thread-1284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:35:38.314 [INFO] [Thread-1284] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:35:38.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:35:38.977 [DEBUG] [Thread-1284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:35:38.978 [DEBUG] [Thread-1284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:35:38.978 [DEBUG] [Thread-1284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:35:39.019 [DEBUG] [Thread-1284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:35:39.019 [DEBUG] [Thread-1284] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:35:39.022 [DEBUG] [Thread-1284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:35:39.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:35:39.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:35:39.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:35:39.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:35:39.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:35:39.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:35:39.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.566073 -999.00  +26.60   9.67     11   -5.20 1 1 1 1 1   888    0 31.64 13.66 ----- 8.4 9.7 78.2 10.7 32.8 -30.5 32.7 -30.8 33.9 -28.4 34.5 -30.4
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.566073
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:35:39.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:35:30', tmtdew=38.57, humidity=6.92, cloud=0.0, wind=5.14, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:35:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:35:39.042 [DEBUG] [Thread-1284] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:35:39.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:35:39.135 [DEBUG] [Thread-1287] [transport.py] [_log()] starting thread (client mode): 0x7378ff70
2025-11-25T15:35:39.135 [DEBUG] [Thread-1287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:35:39.149 [DEBUG] [Thread-1287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:35:39.149 [INFO] [Thread-1287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] client lang: <none>
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] server lang: <none>
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] kex follows: False
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:35:39.157 [DEBUG] [Thread-1287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:35:39.158 [DEBUG] [Thread-1287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:35:39.158 [DEBUG] [Thread-1287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:35:39.158 [DEBUG] [Thread-1287] [transport.py] [_log()] Compression: none
2025-11-25T15:35:39.158 [DEBUG] [Thread-1287] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:35:39.216 [DEBUG] [Thread-1287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:35:39.216 [DEBUG] [Thread-1287] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:35:39.217 [DEBUG] [Thread-1287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:35:39.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:35:39.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:35:39.272 [DEBUG] [Thread-1287] [transport.py] [_log()] userauth is OK
2025-11-25T15:35:39.272 [DEBUG] [Thread-1287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:35:39.272 [DEBUG] [Thread-1287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:35:39.272 [DEBUG] [Thread-1287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:35:39.272 [DEBUG] [Thread-1287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:35:39.290 [INFO] [Thread-1287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:35:39.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:35:39.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:35:39.533 [DEBUG] [Thread-1289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:35:40.078 [DEBUG] [Thread-1287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:35:40.078 [DEBUG] [Thread-1287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:35:40.126 [DEBUG] [Thread-1287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:35:40.126 [DEBUG] [Thread-1287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:35:40.135 [DEBUG] [Thread-1287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:35:40.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:35:40.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:35:40.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:35:40.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:35:40.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:35:40.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:35:40.173 [DEBUG] [Thread-1287] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:35:49.387 [DEBUG] [Thread-1290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:36:04.448 [DEBUG] [Thread-1291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:36:10.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:36:10.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:36:10.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:36:10.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 36, 2), 38.81, 6.81, 0.0, 4.04, 26.76, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:36:10.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:36:02
2025-11-25T15:36:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:36:11.156 [DEBUG] [Thread-1292] [transport.py] [_log()] starting thread (client mode): 0x70d0fdc0
2025-11-25T15:36:11.156 [DEBUG] [Thread-1292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:36:11.179 [DEBUG] [Thread-1292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:36:11.180 [INFO] [Thread-1292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] client lang: <none>
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] server lang: <none>
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] kex follows: False
2025-11-25T15:36:11.182 [DEBUG] [Thread-1292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:36:11.183 [DEBUG] [Thread-1292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:36:11.183 [DEBUG] [Thread-1292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:36:11.183 [DEBUG] [Thread-1292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:36:11.183 [DEBUG] [Thread-1292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:36:11.183 [DEBUG] [Thread-1292] [transport.py] [_log()] Compression: none
2025-11-25T15:36:11.183 [DEBUG] [Thread-1292] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:36:11.197 [DEBUG] [Thread-1292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:36:11.197 [DEBUG] [Thread-1292] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:36:11.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:36:11.198 [DEBUG] [Thread-1292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:36:11.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:36:11.200 [DEBUG] [Thread-1292] [transport.py] [_log()] userauth is OK
2025-11-25T15:36:11.200 [DEBUG] [Thread-1292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:36:11.201 [DEBUG] [Thread-1292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:36:11.201 [DEBUG] [Thread-1292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:36:11.201 [DEBUG] [Thread-1292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:36:11.225 [INFO] [Thread-1292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:36:11.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:36:11.888 [DEBUG] [Thread-1292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:36:11.888 [DEBUG] [Thread-1292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:36:11.888 [DEBUG] [Thread-1292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:36:11.928 [DEBUG] [Thread-1292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:36:11.929 [DEBUG] [Thread-1292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:36:11.931 [DEBUG] [Thread-1292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:36:11.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:36:11.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:36:11.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:36:11.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:36:11.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:36:11.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:36:11.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:36:11.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:36:11.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:36:11.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.566420 -999.00  +26.50   8.19     12   -5.20 1 1 1 1 1   888    0 31.91 17.94 ----- 7.4 8.2 67.0 10.0 32.9 -30.6 32.8 -30.3 34.0 -29.3 34.6 -29.8
2025-11-25T15:36:11.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:36:11.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:36:11.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.566420
2025-11-25T15:36:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:36:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:36:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:36:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:36:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:36:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:36:02', tmtdew=38.81, humidity=6.81, cloud=0.0, wind=4.04, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:35:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:36:11.960 [DEBUG] [Thread-1292] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:36:12.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:36:12.055 [DEBUG] [Thread-1295] [transport.py] [_log()] starting thread (client mode): 0x70d0c430
2025-11-25T15:36:12.055 [DEBUG] [Thread-1295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:36:12.069 [DEBUG] [Thread-1295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:36:12.069 [INFO] [Thread-1295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] client lang: <none>
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] server lang: <none>
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] kex follows: False
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] Compression: none
2025-11-25T15:36:12.077 [DEBUG] [Thread-1295] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:36:12.135 [DEBUG] [Thread-1295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:36:12.137 [DEBUG] [Thread-1295] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:36:12.137 [DEBUG] [Thread-1295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:36:12.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:36:12.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:36:12.193 [DEBUG] [Thread-1295] [transport.py] [_log()] userauth is OK
2025-11-25T15:36:12.193 [DEBUG] [Thread-1295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:36:12.193 [DEBUG] [Thread-1295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:36:12.193 [DEBUG] [Thread-1295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:36:12.193 [DEBUG] [Thread-1295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:36:12.214 [INFO] [Thread-1295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:36:12.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:36:12.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:36:13.037 [DEBUG] [Thread-1295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:36:13.037 [DEBUG] [Thread-1295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:36:13.086 [DEBUG] [Thread-1295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:36:13.086 [DEBUG] [Thread-1295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:36:13.095 [DEBUG] [Thread-1295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:36:13.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:36: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')
2025-11-25T15:36: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') -> 00000000
2025-11-25T15:36:13.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:36:13.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:36:13.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:36:13.132 [DEBUG] [Thread-1295] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:36:19.492 [DEBUG] [Thread-1297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:36:34.562 [DEBUG] [Thread-1298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:36:40.261 [DEBUG] [Thread-1299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:36:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:36:43.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:36:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:36:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 36, 34), 38.86, 6.83, 0.0, 6.88, 26.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:36:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:36:34
2025-11-25T15:36:43.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:36:44.124 [DEBUG] [Thread-1300] [transport.py] [_log()] starting thread (client mode): 0x70d0c040
2025-11-25T15:36:44.124 [DEBUG] [Thread-1300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:36:44.144 [DEBUG] [Thread-1300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:36:44.144 [INFO] [Thread-1300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:36:44.147 [DEBUG] [Thread-1300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:36:44.147 [DEBUG] [Thread-1300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:36:44.147 [DEBUG] [Thread-1300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:36:44.147 [DEBUG] [Thread-1300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:36:44.147 [DEBUG] [Thread-1300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:36:44.147 [DEBUG] [Thread-1300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:36:44.147 [DEBUG] [Thread-1300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:36:44.147 [DEBUG] [Thread-1300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] client lang: <none>
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] server lang: <none>
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] kex follows: False
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] Compression: none
2025-11-25T15:36:44.148 [DEBUG] [Thread-1300] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:36:44.163 [DEBUG] [Thread-1300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:36:44.163 [DEBUG] [Thread-1300] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:36:44.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:36:44.164 [DEBUG] [Thread-1300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:36:44.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:36:44.165 [DEBUG] [Thread-1300] [transport.py] [_log()] userauth is OK
2025-11-25T15:36:44.165 [DEBUG] [Thread-1300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:36:44.165 [DEBUG] [Thread-1300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:36:44.165 [DEBUG] [Thread-1300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:36:44.165 [DEBUG] [Thread-1300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:36:44.177 [INFO] [Thread-1300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:36:44.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:36:44.819 [DEBUG] [Thread-1300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:36:44.820 [DEBUG] [Thread-1300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:36:44.820 [DEBUG] [Thread-1300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:36:44.860 [DEBUG] [Thread-1300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:36:44.861 [DEBUG] [Thread-1300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:36:44.863 [DEBUG] [Thread-1300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:36:44.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:36:44.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:36:44.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:36:44.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:36:44.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:36:44.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:36:44.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:36:44.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.566767 -999.00  +26.40   8.22     11   -5.30 1 1 1 1 1   888    0 31.55 23.98 ----- 11.6 8.2 53.0 10.3 32.9 -30.8 32.7 -31.8 34.0 -29.0 34.7 -30.6
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.566767
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:36:44.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:36:34', tmtdew=38.86, humidity=6.83, cloud=0.0, wind=6.88, temperature=26.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:36:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:36:44.885 [DEBUG] [Thread-1300] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:36:44.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:36:44.979 [DEBUG] [Thread-1303] [transport.py] [_log()] starting thread (client mode): 0x70d0d2a0
2025-11-25T15:36:44.979 [DEBUG] [Thread-1303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:36:44.993 [DEBUG] [Thread-1303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:36:44.993 [INFO] [Thread-1303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] client lang: <none>
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] server lang: <none>
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] kex follows: False
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] Compression: none
2025-11-25T15:36:45.001 [DEBUG] [Thread-1303] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:36:45.059 [DEBUG] [Thread-1303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:36:45.060 [DEBUG] [Thread-1303] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:36:45.060 [DEBUG] [Thread-1303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:36:45.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:36:45.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:36:45.117 [DEBUG] [Thread-1303] [transport.py] [_log()] userauth is OK
2025-11-25T15:36:45.117 [DEBUG] [Thread-1303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:36:45.117 [DEBUG] [Thread-1303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:36:45.117 [DEBUG] [Thread-1303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:36:45.117 [DEBUG] [Thread-1303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:36:45.135 [INFO] [Thread-1303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:36:45.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:36:45.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:36:45.920 [DEBUG] [Thread-1303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:36:45.920 [DEBUG] [Thread-1303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:36:45.968 [DEBUG] [Thread-1303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:36:45.968 [DEBUG] [Thread-1303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:36:45.977 [DEBUG] [Thread-1303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:36:45.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:36: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')
2025-11-25T15:36:45.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:36:46.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:36:46.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:36:46.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:36:46.008 [DEBUG] [Thread-1303] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:36:49.601 [DEBUG] [Thread-1305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:37:04.671 [DEBUG] [Thread-1306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:37:16.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:37:16.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:37:16.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:37:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 37, 6), 38.89, 6.81, 0.0, 6.07, 26.91, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:37:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:37:06
2025-11-25T15:37:16.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:37:16.967 [DEBUG] [Thread-1307] [transport.py] [_log()] starting thread (client mode): 0x7378f1c0
2025-11-25T15:37:16.967 [DEBUG] [Thread-1307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:37:16.987 [DEBUG] [Thread-1307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:37:16.988 [INFO] [Thread-1307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:37:16.990 [DEBUG] [Thread-1307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:37:16.990 [DEBUG] [Thread-1307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:37:16.990 [DEBUG] [Thread-1307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] client lang: <none>
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] server lang: <none>
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] kex follows: False
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] Compression: none
2025-11-25T15:37:16.991 [DEBUG] [Thread-1307] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:37:17.009 [DEBUG] [Thread-1307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:37:17.010 [DEBUG] [Thread-1307] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:37:17.010 [DEBUG] [Thread-1307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:37:17.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:37:17.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:37:17.012 [DEBUG] [Thread-1307] [transport.py] [_log()] userauth is OK
2025-11-25T15:37:17.013 [DEBUG] [Thread-1307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:37:17.013 [DEBUG] [Thread-1307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:37:17.013 [DEBUG] [Thread-1307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:37:17.013 [DEBUG] [Thread-1307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:37:17.038 [INFO] [Thread-1307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:37:17.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:37:17.668 [DEBUG] [Thread-1307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:37:17.668 [DEBUG] [Thread-1307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:37:17.668 [DEBUG] [Thread-1307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:37:17.709 [DEBUG] [Thread-1307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:37:17.709 [DEBUG] [Thread-1307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:37:17.713 [DEBUG] [Thread-1307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:37:17.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:37:17.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:37:17.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:37:17.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:37:17.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:37:17.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:37:17.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:37:17.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:37:17.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:37:17.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.567115 -999.00  +26.20   7.59     12   -5.30 1 1 1 1 1   888    0 31.52 23.78 ----- 4.4 7.6 38.2 12.5 32.8 -30.7 32.7 -31.8 34.0 -30.7 34.7 -30.2
2025-11-25T15:37:17.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:37:17.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:37:17.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.567115
2025-11-25T15:37:17.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:37:17.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:37:17.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:37:17.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:37:17.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:37:17.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:37:06', tmtdew=38.89, humidity=6.81, cloud=0.0, wind=6.07, temperature=26.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:36:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:37:17.740 [DEBUG] [Thread-1307] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:37:17.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:37:17.841 [DEBUG] [Thread-1310] [transport.py] [_log()] starting thread (client mode): 0x7378f160
2025-11-25T15:37:17.841 [DEBUG] [Thread-1310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:37:17.861 [DEBUG] [Thread-1310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:37:17.861 [INFO] [Thread-1310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:37:17.868 [DEBUG] [Thread-1310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:37:17.869 [DEBUG] [Thread-1310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:37:17.869 [DEBUG] [Thread-1310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:37:17.869 [DEBUG] [Thread-1310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:37:17.869 [DEBUG] [Thread-1310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:37:17.869 [DEBUG] [Thread-1310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:37:17.870 [DEBUG] [Thread-1310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:37:17.870 [DEBUG] [Thread-1310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:37:17.870 [DEBUG] [Thread-1310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:37:17.870 [DEBUG] [Thread-1310] [transport.py] [_log()] client lang: <none>
2025-11-25T15:37:17.870 [DEBUG] [Thread-1310] [transport.py] [_log()] server lang: <none>
2025-11-25T15:37:17.870 [DEBUG] [Thread-1310] [transport.py] [_log()] kex follows: False
2025-11-25T15:37:17.870 [DEBUG] [Thread-1310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:37:17.870 [DEBUG] [Thread-1310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:37:17.870 [DEBUG] [Thread-1310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:37:17.871 [DEBUG] [Thread-1310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:37:17.871 [DEBUG] [Thread-1310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:37:17.871 [DEBUG] [Thread-1310] [transport.py] [_log()] Compression: none
2025-11-25T15:37:17.871 [DEBUG] [Thread-1310] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:37:17.930 [DEBUG] [Thread-1310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:37:17.930 [DEBUG] [Thread-1310] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:37:17.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:37:17.932 [DEBUG] [Thread-1310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:37:17.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:37:17.985 [DEBUG] [Thread-1310] [transport.py] [_log()] userauth is OK
2025-11-25T15:37:17.986 [DEBUG] [Thread-1310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:37:17.986 [DEBUG] [Thread-1310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:37:17.986 [DEBUG] [Thread-1310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:37:17.986 [DEBUG] [Thread-1310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:37:18.005 [INFO] [Thread-1310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:37:18.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:37:18.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:37:18.799 [DEBUG] [Thread-1310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:37:18.799 [DEBUG] [Thread-1310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:37:18.847 [DEBUG] [Thread-1310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:37:18.847 [DEBUG] [Thread-1310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:37:18.856 [DEBUG] [Thread-1310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:37:18.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:37:18.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:37:18.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:37:18.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:37:18.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:37:18.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:37:18.894 [DEBUG] [Thread-1310] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:37:19.710 [DEBUG] [Thread-1312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:37:34.768 [DEBUG] [Thread-1313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:37:40.753 [DEBUG] [Thread-1314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:37:48.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:37:48.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:37:48.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:37:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 37, 38), 39.03, 6.79, 0.0, 3.25, 26.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:37:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:37:38
2025-11-25T15:37:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:37:49.814 [DEBUG] [Thread-1315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:37:49.836 [DEBUG] [Thread-1316] [transport.py] [_log()] starting thread (client mode): 0x7378ec80
2025-11-25T15:37:49.836 [DEBUG] [Thread-1316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:37:49.857 [DEBUG] [Thread-1316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:37:49.857 [INFO] [Thread-1316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:37:49.860 [DEBUG] [Thread-1316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:37:49.861 [DEBUG] [Thread-1316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:37:49.861 [DEBUG] [Thread-1316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:37:49.861 [DEBUG] [Thread-1316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:37:49.861 [DEBUG] [Thread-1316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:37:49.861 [DEBUG] [Thread-1316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:37:49.861 [DEBUG] [Thread-1316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:37:49.861 [DEBUG] [Thread-1316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:37:49.861 [DEBUG] [Thread-1316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:37:49.861 [DEBUG] [Thread-1316] [transport.py] [_log()] client lang: <none>
2025-11-25T15:37:49.862 [DEBUG] [Thread-1316] [transport.py] [_log()] server lang: <none>
2025-11-25T15:37:49.862 [DEBUG] [Thread-1316] [transport.py] [_log()] kex follows: False
2025-11-25T15:37:49.862 [DEBUG] [Thread-1316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:37:49.862 [DEBUG] [Thread-1316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:37:49.862 [DEBUG] [Thread-1316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:37:49.862 [DEBUG] [Thread-1316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:37:49.862 [DEBUG] [Thread-1316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:37:49.862 [DEBUG] [Thread-1316] [transport.py] [_log()] Compression: none
2025-11-25T15:37:49.862 [DEBUG] [Thread-1316] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:37:49.879 [DEBUG] [Thread-1316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:37:49.879 [DEBUG] [Thread-1316] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:37:49.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:37:49.880 [DEBUG] [Thread-1316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:37:49.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:37:49.883 [DEBUG] [Thread-1316] [transport.py] [_log()] userauth is OK
2025-11-25T15:37:49.883 [DEBUG] [Thread-1316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:37:49.883 [DEBUG] [Thread-1316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:37:49.883 [DEBUG] [Thread-1316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:37:49.883 [DEBUG] [Thread-1316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:37:49.908 [INFO] [Thread-1316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:37:49.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:37:50.561 [DEBUG] [Thread-1316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:37:50.561 [DEBUG] [Thread-1316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:37:50.561 [DEBUG] [Thread-1316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:37:50.602 [DEBUG] [Thread-1316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:37:50.602 [DEBUG] [Thread-1316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:37:50.605 [DEBUG] [Thread-1316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:37:50.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:37:50.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:37:50.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:37:50.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:37:50.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:37:50.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:37:50.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:37:50.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:37:50.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:37:50.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.567809 -999.00  +26.50   1.69     11   -5.40 1 1 1 1 1   888    0 31.38 27.49 ----- 1.8 1.7 243.4 2.2 33.1 -30.7 33.0 -30.4 34.1 -30.0 34.9 -30.3
2025-11-25T15:37:50.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:37:50.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:37:50.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.567809
2025-11-25T15:37:50.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:37:50.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:37:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:37:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:37:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:37:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:37:38', tmtdew=39.03, humidity=6.79, cloud=0.0, wind=3.25, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:37:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:37:50.632 [DEBUG] [Thread-1316] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:37:50.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:37:50.735 [DEBUG] [Thread-1319] [transport.py] [_log()] starting thread (client mode): 0x7378d570
2025-11-25T15:37:50.735 [DEBUG] [Thread-1319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:37:50.749 [DEBUG] [Thread-1319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:37:50.750 [INFO] [Thread-1319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:37:50.757 [DEBUG] [Thread-1319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:37:50.757 [DEBUG] [Thread-1319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] client lang: <none>
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] server lang: <none>
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] kex follows: False
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:37:50.758 [DEBUG] [Thread-1319] [transport.py] [_log()] Compression: none
2025-11-25T15:37:50.759 [DEBUG] [Thread-1319] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:37:50.818 [DEBUG] [Thread-1319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:37:50.818 [DEBUG] [Thread-1319] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:37:50.819 [DEBUG] [Thread-1319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:37:50.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:37:50.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:37:50.874 [DEBUG] [Thread-1319] [transport.py] [_log()] userauth is OK
2025-11-25T15:37:50.874 [DEBUG] [Thread-1319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:37:50.874 [DEBUG] [Thread-1319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:37:50.874 [DEBUG] [Thread-1319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:37:50.874 [DEBUG] [Thread-1319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:37:50.893 [INFO] [Thread-1319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:37:50.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:37:50.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:37:51.727 [DEBUG] [Thread-1319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:37:51.727 [DEBUG] [Thread-1319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:37:51.776 [DEBUG] [Thread-1319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:37:51.776 [DEBUG] [Thread-1319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:37:51.785 [DEBUG] [Thread-1319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:37:51.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:37:51.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:37:51.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:37:51.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:37:51.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:37:51.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:37:51.822 [DEBUG] [Thread-1319] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:38:04.852 [DEBUG] [Thread-1321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:38:19.922 [DEBUG] [Thread-1322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:38:21.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:38:21.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:38: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
2025-11-25T15:38:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 38, 10), 39.14, 6.74, 0.0, 2.84, 26.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:38:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:38:10
2025-11-25T15:38:22.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:38:22.780 [DEBUG] [Thread-1323] [transport.py] [_log()] starting thread (client mode): 0x7378da50
2025-11-25T15:38:22.781 [DEBUG] [Thread-1323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:38:22.801 [DEBUG] [Thread-1323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:38:22.801 [INFO] [Thread-1323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] client lang: <none>
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] server lang: <none>
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] kex follows: False
2025-11-25T15:38:22.805 [DEBUG] [Thread-1323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:38:22.806 [DEBUG] [Thread-1323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:38:22.806 [DEBUG] [Thread-1323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:38:22.806 [DEBUG] [Thread-1323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:38:22.806 [DEBUG] [Thread-1323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:38:22.806 [DEBUG] [Thread-1323] [transport.py] [_log()] Compression: none
2025-11-25T15:38:22.806 [DEBUG] [Thread-1323] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:38:22.823 [DEBUG] [Thread-1323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:38:22.823 [DEBUG] [Thread-1323] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:38:22.824 [DEBUG] [Thread-1323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:38:22.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:38:22.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:38:22.826 [DEBUG] [Thread-1323] [transport.py] [_log()] userauth is OK
2025-11-25T15:38:22.826 [DEBUG] [Thread-1323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:38:22.827 [DEBUG] [Thread-1323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:38:22.827 [DEBUG] [Thread-1323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:38:22.827 [DEBUG] [Thread-1323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:38:22.852 [INFO] [Thread-1323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:38:22.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:38:23.489 [DEBUG] [Thread-1323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:38:23.489 [DEBUG] [Thread-1323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:38:23.489 [DEBUG] [Thread-1323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:38:23.530 [DEBUG] [Thread-1323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:38:23.530 [DEBUG] [Thread-1323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:38:23.534 [DEBUG] [Thread-1323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:38:23.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:38:23.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:38:23.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:38:23.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:38:23.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:38:23.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:38:23.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:38:23.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:38:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:38:23.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.568156 -999.00  +26.70   1.50     11   -5.10 1 1 1 1 1   888    0 32.20 24.57 ----- 1.6 1.5 21.8 2.4 33.2 -31.2 33.1 -31.3 34.4 -28.7 35.2 -29.6
2025-11-25T15:38:23.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:38:23.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:38:23.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.568156
2025-11-25T15:38:23.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:38:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:38:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:38:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:38:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:38:23.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:38:10', tmtdew=39.14, humidity=6.74, cloud=0.0, wind=2.84, temperature=26.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:38:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:38:23.558 [DEBUG] [Thread-1323] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:38:23.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:38:23.668 [DEBUG] [Thread-1326] [transport.py] [_log()] starting thread (client mode): 0x761dace0
2025-11-25T15:38:23.669 [DEBUG] [Thread-1326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:38:23.683 [DEBUG] [Thread-1326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:38:23.683 [INFO] [Thread-1326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] client lang: <none>
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] server lang: <none>
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] kex follows: False
2025-11-25T15:38:23.691 [DEBUG] [Thread-1326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:38:23.692 [DEBUG] [Thread-1326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:38:23.692 [DEBUG] [Thread-1326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:38:23.692 [DEBUG] [Thread-1326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:38:23.692 [DEBUG] [Thread-1326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:38:23.692 [DEBUG] [Thread-1326] [transport.py] [_log()] Compression: none
2025-11-25T15:38:23.692 [DEBUG] [Thread-1326] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:38:23.752 [DEBUG] [Thread-1326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:38:23.752 [DEBUG] [Thread-1326] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:38:23.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:38:23.754 [DEBUG] [Thread-1326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:38:23.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:38:23.814 [DEBUG] [Thread-1326] [transport.py] [_log()] userauth is OK
2025-11-25T15:38:23.815 [DEBUG] [Thread-1326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:38:23.815 [DEBUG] [Thread-1326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:38:23.815 [DEBUG] [Thread-1326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:38:23.815 [DEBUG] [Thread-1326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:38:23.837 [INFO] [Thread-1326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:38:23.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:38:23.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:38:24.667 [DEBUG] [Thread-1326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:38:24.667 [DEBUG] [Thread-1326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:38:24.717 [DEBUG] [Thread-1326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:38:24.717 [DEBUG] [Thread-1326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:38:24.728 [DEBUG] [Thread-1326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:38:24.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:38:24.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:38:24.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:38:24.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:38:24.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:38:24.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:38:24.768 [DEBUG] [Thread-1326] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:38:34.963 [DEBUG] [Thread-1328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:38:41.261 [DEBUG] [Thread-1329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:38:50.019 [DEBUG] [Thread-1330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:38:54.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:38:54.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:38:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:38:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 38, 42), 38.9, 6.82, 0.0, 5.91, 26.91, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:38:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:38:42
2025-11-25T15:38:55.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:38:55.717 [DEBUG] [Thread-1331] [transport.py] [_log()] starting thread (client mode): 0x761d9e10
2025-11-25T15:38:55.718 [DEBUG] [Thread-1331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:38:55.738 [DEBUG] [Thread-1331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:38:55.738 [INFO] [Thread-1331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] client lang: <none>
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] server lang: <none>
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] kex follows: False
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:38:55.742 [DEBUG] [Thread-1331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:38:55.743 [DEBUG] [Thread-1331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:38:55.743 [DEBUG] [Thread-1331] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:38:55.743 [DEBUG] [Thread-1331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:38:55.743 [DEBUG] [Thread-1331] [transport.py] [_log()] Compression: none
2025-11-25T15:38:55.743 [DEBUG] [Thread-1331] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:38:55.761 [DEBUG] [Thread-1331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:38:55.762 [DEBUG] [Thread-1331] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:38:55.762 [DEBUG] [Thread-1331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:38:55.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:38:55.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:38:55.764 [DEBUG] [Thread-1331] [transport.py] [_log()] userauth is OK
2025-11-25T15:38:55.765 [DEBUG] [Thread-1331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:38:55.765 [DEBUG] [Thread-1331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:38:55.765 [DEBUG] [Thread-1331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:38:55.765 [DEBUG] [Thread-1331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:38:55.790 [INFO] [Thread-1331] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:38:55.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:38:56.430 [DEBUG] [Thread-1331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:38:56.430 [DEBUG] [Thread-1331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:38:56.431 [DEBUG] [Thread-1331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:38:56.471 [DEBUG] [Thread-1331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:38:56.471 [DEBUG] [Thread-1331] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:38:56.475 [DEBUG] [Thread-1331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:38:56.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:38:56.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:38:56.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:38:56.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:38:56.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:38:56.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:38:56.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:38:56.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:38:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:38:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.568504 -999.00  +26.70   6.57     11   -5.30 1 1 1 1 1   888    0 32.33 29.05 ----- 2.3 6.6 111.6 8.7 33.2 -30.9 33.2 -31.3 34.5 -28.6 35.2 -30.4
2025-11-25T15:38:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:38:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:38:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.568504
2025-11-25T15:38:56.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:38:56.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:38:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:38:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:38:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:38:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:38:42', tmtdew=38.9, humidity=6.82, cloud=0.0, wind=5.91, temperature=26.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:38:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:38:56.500 [DEBUG] [Thread-1331] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:38:56.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:39:05.067 [DEBUG] [Thread-1334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:39:20.135 [DEBUG] [Thread-1335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:39:35.181 [DEBUG] [Thread-1336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:39:41.765 [DEBUG] [Thread-1337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:39:50.224 [DEBUG] [Thread-1338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:40:05.262 [DEBUG] [Thread-1339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:40:20.305 [DEBUG] [Thread-1340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:40:35.347 [DEBUG] [Thread-1341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:40:42.275 [DEBUG] [Thread-1342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:40:50.393 [DEBUG] [Thread-1343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:41:05.433 [DEBUG] [Thread-1344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:41:09.965 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T15:41:20.472 [DEBUG] [Thread-1345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:41:35.519 [DEBUG] [Thread-1346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:41:39.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:41:39.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:41:39.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:41:40.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 41, 22), 38.5, 6.91, 0.0, 6.26, 26.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:41:40.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:41:22
2025-11-25T15:41:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:41:40.951 [DEBUG] [Thread-1347] [transport.py] [_log()] starting thread (client mode): 0x761d9a50
2025-11-25T15:41:40.951 [DEBUG] [Thread-1347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:41:40.972 [DEBUG] [Thread-1347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:41:40.972 [INFO] [Thread-1347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] client lang: <none>
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] server lang: <none>
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] kex follows: False
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:41:40.974 [DEBUG] [Thread-1347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:41:40.975 [DEBUG] [Thread-1347] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:41:40.975 [DEBUG] [Thread-1347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:41:40.975 [DEBUG] [Thread-1347] [transport.py] [_log()] Compression: none
2025-11-25T15:41:40.975 [DEBUG] [Thread-1347] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:41:40.990 [DEBUG] [Thread-1347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:41:40.990 [DEBUG] [Thread-1347] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:41:40.990 [DEBUG] [Thread-1347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:41:40.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:41:40.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:41:40.991 [DEBUG] [Thread-1347] [transport.py] [_log()] userauth is OK
2025-11-25T15:41:40.991 [DEBUG] [Thread-1347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:41:40.991 [DEBUG] [Thread-1347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:41:40.991 [DEBUG] [Thread-1347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:41:40.991 [DEBUG] [Thread-1347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:41:41.000 [INFO] [Thread-1347] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:41:41.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:41:41.639 [DEBUG] [Thread-1347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:41:41.639 [DEBUG] [Thread-1347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:41:41.639 [DEBUG] [Thread-1347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:41:41.680 [DEBUG] [Thread-1347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:41:41.680 [DEBUG] [Thread-1347] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:41:41.683 [DEBUG] [Thread-1347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:41:41.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:41:41.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:41:41.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:41:41.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:41:41.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:41:41.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:41:41.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.570240 -999.00  +27.40   4.41     11   -4.80 1 1 1 1 1   888    0 32.93 39.79 ----- 6.7 4.4 169.1 5.3 33.8 -30.8 33.6 -32.3 35.3 -28.7 35.9 -31.8
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.570240
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:41:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:41:22', tmtdew=38.5, humidity=6.91, cloud=0.0, wind=6.26, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:41:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:41:41.703 [DEBUG] [Thread-1347] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:41:41.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:41:41.797 [DEBUG] [Thread-1350] [transport.py] [_log()] starting thread (client mode): 0x7378ccd0
2025-11-25T15:41:41.797 [DEBUG] [Thread-1350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:41:41.812 [DEBUG] [Thread-1350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:41:41.812 [INFO] [Thread-1350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] client lang: <none>
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] server lang: <none>
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] kex follows: False
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:41:41.819 [DEBUG] [Thread-1350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:41:41.820 [DEBUG] [Thread-1350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:41:41.820 [DEBUG] [Thread-1350] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:41:41.820 [DEBUG] [Thread-1350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:41:41.820 [DEBUG] [Thread-1350] [transport.py] [_log()] Compression: none
2025-11-25T15:41:41.820 [DEBUG] [Thread-1350] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:41:41.877 [DEBUG] [Thread-1350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:41:41.877 [DEBUG] [Thread-1350] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:41:41.877 [DEBUG] [Thread-1350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:41:41.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:41:41.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:41:41.934 [DEBUG] [Thread-1350] [transport.py] [_log()] userauth is OK
2025-11-25T15:41:41.934 [DEBUG] [Thread-1350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:41:41.934 [DEBUG] [Thread-1350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:41:41.934 [DEBUG] [Thread-1350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:41:41.934 [DEBUG] [Thread-1350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:41:41.949 [INFO] [Thread-1350] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:41:41.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:41:41.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:41:42.767 [DEBUG] [Thread-1350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:41:42.767 [DEBUG] [Thread-1350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:41:42.795 [DEBUG] [Thread-1352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:41:42.815 [DEBUG] [Thread-1350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:41:42.815 [DEBUG] [Thread-1350] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:41:42.823 [DEBUG] [Thread-1350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:41:42.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:41:42.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:41:42.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:41:42.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:41:42.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:41:42.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:41:42.855 [DEBUG] [Thread-1350] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:41:50.559 [DEBUG] [Thread-1353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:42:05.640 [DEBUG] [Thread-1354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:42:12.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:42:12.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:42:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:42:13.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 41, 54), 38.56, 7.34, 0.0, 7.92, 26.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:42:13.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:41:54
2025-11-25T15:42:13.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:42:13.808 [DEBUG] [Thread-1355] [transport.py] [_log()] starting thread (client mode): 0x7378c970
2025-11-25T15:42:13.808 [DEBUG] [Thread-1355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:42:13.820 [DEBUG] [Thread-1355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:42:13.821 [INFO] [Thread-1355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] client lang: <none>
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] server lang: <none>
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] kex follows: False
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] Compression: none
2025-11-25T15:42:13.822 [DEBUG] [Thread-1355] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:42:13.832 [DEBUG] [Thread-1355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:42:13.832 [DEBUG] [Thread-1355] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:42:13.832 [DEBUG] [Thread-1355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:42:13.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:42:13.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:42:13.833 [DEBUG] [Thread-1355] [transport.py] [_log()] userauth is OK
2025-11-25T15:42:13.833 [DEBUG] [Thread-1355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:42:13.833 [DEBUG] [Thread-1355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:42:13.833 [DEBUG] [Thread-1355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:42:13.833 [DEBUG] [Thread-1355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:42:13.846 [INFO] [Thread-1355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:42:13.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:42:14.440 [DEBUG] [Thread-1355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:42:14.441 [DEBUG] [Thread-1355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:42:14.441 [DEBUG] [Thread-1355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:42:14.482 [DEBUG] [Thread-1355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:42:14.482 [DEBUG] [Thread-1355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:42:14.487 [DEBUG] [Thread-1355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:42:14.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:42:14.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:42:14.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:42:14.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:42:14.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:42:14.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:42:14.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:42:14.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:42:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.570587 -999.00  +27.40   6.16     11   -4.70 1 1 1 1 1   888    0 32.66 45.15 ----- 5.4 6.2 141.2 8.7 33.8 -32.1 33.6 -34.7 35.3 -29.9 36.0 -31.3
2025-11-25T15:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.570587
2025-11-25T15:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:42:14.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:42:14.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:42:14.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:42:14.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:42:14.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:41:54', tmtdew=38.56, humidity=7.34, cloud=0.0, wind=7.92, temperature=26.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:41:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:42:14.513 [DEBUG] [Thread-1355] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:42:14.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:42:14.619 [DEBUG] [Thread-1358] [transport.py] [_log()] starting thread (client mode): 0x7378d600
2025-11-25T15:42:14.619 [DEBUG] [Thread-1358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:42:14.634 [DEBUG] [Thread-1358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:42:14.634 [INFO] [Thread-1358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:42:14.641 [DEBUG] [Thread-1358] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:42:14.641 [DEBUG] [Thread-1358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:42:14.642 [DEBUG] [Thread-1358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:42:14.642 [DEBUG] [Thread-1358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:42:14.642 [DEBUG] [Thread-1358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:42:14.642 [DEBUG] [Thread-1358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:42:14.642 [DEBUG] [Thread-1358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:42:14.642 [DEBUG] [Thread-1358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:42:14.642 [DEBUG] [Thread-1358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:42:14.643 [DEBUG] [Thread-1358] [transport.py] [_log()] client lang: <none>
2025-11-25T15:42:14.643 [DEBUG] [Thread-1358] [transport.py] [_log()] server lang: <none>
2025-11-25T15:42:14.643 [DEBUG] [Thread-1358] [transport.py] [_log()] kex follows: False
2025-11-25T15:42:14.643 [DEBUG] [Thread-1358] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:42:14.643 [DEBUG] [Thread-1358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:42:14.643 [DEBUG] [Thread-1358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:42:14.643 [DEBUG] [Thread-1358] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:42:14.644 [DEBUG] [Thread-1358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:42:14.644 [DEBUG] [Thread-1358] [transport.py] [_log()] Compression: none
2025-11-25T15:42:14.644 [DEBUG] [Thread-1358] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:42:14.703 [DEBUG] [Thread-1358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:42:14.704 [DEBUG] [Thread-1358] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:42:14.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:42:14.706 [DEBUG] [Thread-1358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:42:14.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:42:14.763 [DEBUG] [Thread-1358] [transport.py] [_log()] userauth is OK
2025-11-25T15:42:14.763 [DEBUG] [Thread-1358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:42:14.763 [DEBUG] [Thread-1358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:42:14.763 [DEBUG] [Thread-1358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:42:14.764 [DEBUG] [Thread-1358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:42:14.785 [INFO] [Thread-1358] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:42:14.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:42:14.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:42:15.588 [DEBUG] [Thread-1358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:42:15.588 [DEBUG] [Thread-1358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:42:15.636 [DEBUG] [Thread-1358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:42:15.636 [DEBUG] [Thread-1358] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:42:15.645 [DEBUG] [Thread-1358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:42:15.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:42:15.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:42:15.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:42:15.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:42:15.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:42:15.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:42:15.682 [DEBUG] [Thread-1358] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:42:20.680 [DEBUG] [Thread-1360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:42:35.736 [DEBUG] [Thread-1361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:42:43.530 [DEBUG] [Thread-1362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:42:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:42:45.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:42: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
2025-11-25T15:42:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 42, 26), 38.47, 7.39, 0.0, 8.1, 26.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:42:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:42:26
2025-11-25T15:42:46.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:42:46.650 [DEBUG] [Thread-1363] [transport.py] [_log()] starting thread (client mode): 0x761d9e10
2025-11-25T15:42:46.650 [DEBUG] [Thread-1363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:42:46.663 [DEBUG] [Thread-1363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:42:46.663 [INFO] [Thread-1363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] client lang: <none>
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] server lang: <none>
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] kex follows: False
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] Compression: none
2025-11-25T15:42:46.665 [DEBUG] [Thread-1363] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:42:46.681 [DEBUG] [Thread-1363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:42:46.682 [DEBUG] [Thread-1363] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:42:46.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:42:46.683 [DEBUG] [Thread-1363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:42:46.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:42:46.685 [DEBUG] [Thread-1363] [transport.py] [_log()] userauth is OK
2025-11-25T15:42:46.685 [DEBUG] [Thread-1363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:42:46.685 [DEBUG] [Thread-1363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:42:46.685 [DEBUG] [Thread-1363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:42:46.685 [DEBUG] [Thread-1363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:42:46.703 [INFO] [Thread-1363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:42:46.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:42:47.356 [DEBUG] [Thread-1363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:42:47.356 [DEBUG] [Thread-1363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:42:47.357 [DEBUG] [Thread-1363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:42:47.397 [DEBUG] [Thread-1363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:42:47.397 [DEBUG] [Thread-1363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:42:47.401 [DEBUG] [Thread-1363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:42:47.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:42:47.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:42:47.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:42:47.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:42:47.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:42:47.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:42:47.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:42:47.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:42:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:42:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.570934 -999.00  +27.50   7.70     12   -4.20 1 1 1 1 1   888    0 32.55 44.29 ----- 7.0 7.7 164.6 8.2 33.8 -32.0 33.6 -30.8 35.4 -29.4 36.0 -31.2
2025-11-25T15:42:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:42:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:42:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.570934
2025-11-25T15:42:47.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:42:47.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:42:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:42:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:42:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:42:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:42:26', tmtdew=38.47, humidity=7.39, cloud=0.0, wind=8.1, temperature=26.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:42:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:42:47.430 [DEBUG] [Thread-1363] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:42:47.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:42:47.535 [DEBUG] [Thread-1366] [transport.py] [_log()] starting thread (client mode): 0x761dace0
2025-11-25T15:42:47.535 [DEBUG] [Thread-1366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:42:47.549 [DEBUG] [Thread-1366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:42:47.550 [INFO] [Thread-1366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:42:47.557 [DEBUG] [Thread-1366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:42:47.558 [DEBUG] [Thread-1366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:42:47.558 [DEBUG] [Thread-1366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:42:47.558 [DEBUG] [Thread-1366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:42:47.558 [DEBUG] [Thread-1366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:42:47.558 [DEBUG] [Thread-1366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:42:47.558 [DEBUG] [Thread-1366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:42:47.558 [DEBUG] [Thread-1366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] client lang: <none>
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] server lang: <none>
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] kex follows: False
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] Compression: none
2025-11-25T15:42:47.559 [DEBUG] [Thread-1366] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:42:47.619 [DEBUG] [Thread-1366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:42:47.620 [DEBUG] [Thread-1366] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:42:47.620 [DEBUG] [Thread-1366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:42:47.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:42:47.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:42:47.681 [DEBUG] [Thread-1366] [transport.py] [_log()] userauth is OK
2025-11-25T15:42:47.682 [DEBUG] [Thread-1366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:42:47.682 [DEBUG] [Thread-1366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:42:47.682 [DEBUG] [Thread-1366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:42:47.682 [DEBUG] [Thread-1366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:42:47.701 [INFO] [Thread-1366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:42:47.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:42:47.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:42:48.514 [DEBUG] [Thread-1366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:42:48.514 [DEBUG] [Thread-1366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:42:48.562 [DEBUG] [Thread-1366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:42:48.562 [DEBUG] [Thread-1366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:42:48.571 [DEBUG] [Thread-1366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:42:48.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:42:48.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:42:48.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:42:48.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:42:48.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:42:48.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:42:48.607 [DEBUG] [Thread-1366] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:42:50.779 [DEBUG] [Thread-1368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:43:05.855 [DEBUG] [Thread-1369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:43:18.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:43:18.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:43:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:43:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 42, 58), 38.08, 7.44, 0.0, 9.39, 26.67, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:43:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:42:58
2025-11-25T15:43:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:43:19.574 [DEBUG] [Thread-1370] [transport.py] [_log()] starting thread (client mode): 0x7378cac0
2025-11-25T15:43:19.574 [DEBUG] [Thread-1370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:43:19.595 [DEBUG] [Thread-1370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:43:19.595 [INFO] [Thread-1370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:43:19.598 [DEBUG] [Thread-1370] [transport.py] [_log()] client lang: <none>
2025-11-25T15:43:19.599 [DEBUG] [Thread-1370] [transport.py] [_log()] server lang: <none>
2025-11-25T15:43:19.599 [DEBUG] [Thread-1370] [transport.py] [_log()] kex follows: False
2025-11-25T15:43:19.599 [DEBUG] [Thread-1370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:43:19.599 [DEBUG] [Thread-1370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:43:19.599 [DEBUG] [Thread-1370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:43:19.599 [DEBUG] [Thread-1370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:43:19.599 [DEBUG] [Thread-1370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:43:19.599 [DEBUG] [Thread-1370] [transport.py] [_log()] Compression: none
2025-11-25T15:43:19.599 [DEBUG] [Thread-1370] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:43:19.615 [DEBUG] [Thread-1370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:43:19.616 [DEBUG] [Thread-1370] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:43:19.616 [DEBUG] [Thread-1370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:43:19.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:43:19.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:43:19.618 [DEBUG] [Thread-1370] [transport.py] [_log()] userauth is OK
2025-11-25T15:43:19.618 [DEBUG] [Thread-1370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:43:19.619 [DEBUG] [Thread-1370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:43:19.619 [DEBUG] [Thread-1370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:43:19.619 [DEBUG] [Thread-1370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:43:19.655 [INFO] [Thread-1370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:43:19.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:43:20.296 [DEBUG] [Thread-1370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:43:20.296 [DEBUG] [Thread-1370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:43:20.297 [DEBUG] [Thread-1370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:43:20.338 [DEBUG] [Thread-1370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:43:20.338 [DEBUG] [Thread-1370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:43:20.341 [DEBUG] [Thread-1370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:43:20.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:43:20.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:43:20.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:43:20.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:43:20.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:43:20.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:43:20.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:43:20.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:43:20.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:43:20.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.571628 -999.00  +27.20   7.33     11   -4.70 1 1 1 1 1   888    0 32.96 44.76 ----- 6.0 7.3 166.6 11.2 33.8 -32.3 33.6 -30.8 35.4 -30.0 36.1 -31.9
2025-11-25T15:43:20.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:43:20.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:43:20.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.571628
2025-11-25T15:43:20.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:43:20.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:43:20.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:43:20.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:43:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:43:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:42:58', tmtdew=38.08, humidity=7.44, cloud=0.0, wind=9.39, temperature=26.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:43:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:43:20.369 [DEBUG] [Thread-1370] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:43:20.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:43:20.470 [DEBUG] [Thread-1373] [transport.py] [_log()] starting thread (client mode): 0x7378f820
2025-11-25T15:43:20.470 [DEBUG] [Thread-1373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:43:20.489 [DEBUG] [Thread-1373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:43:20.489 [INFO] [Thread-1373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:43:20.497 [DEBUG] [Thread-1373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:43:20.497 [DEBUG] [Thread-1373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:43:20.497 [DEBUG] [Thread-1373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:43:20.497 [DEBUG] [Thread-1373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:43:20.497 [DEBUG] [Thread-1373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:43:20.497 [DEBUG] [Thread-1373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:43:20.497 [DEBUG] [Thread-1373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:43:20.497 [DEBUG] [Thread-1373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] client lang: <none>
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] server lang: <none>
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] kex follows: False
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] Compression: none
2025-11-25T15:43:20.498 [DEBUG] [Thread-1373] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:43:20.554 [DEBUG] [Thread-1373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:43:20.554 [DEBUG] [Thread-1373] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:43:20.555 [DEBUG] [Thread-1373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:43:20.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:43:20.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:43:20.610 [DEBUG] [Thread-1373] [transport.py] [_log()] userauth is OK
2025-11-25T15:43:20.610 [DEBUG] [Thread-1373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:43:20.610 [DEBUG] [Thread-1373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:43:20.610 [DEBUG] [Thread-1373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:43:20.610 [DEBUG] [Thread-1373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:43:20.629 [INFO] [Thread-1373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:43:20.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:43:20.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:43:20.902 [DEBUG] [Thread-1375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:43:21.422 [DEBUG] [Thread-1373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:43:21.422 [DEBUG] [Thread-1373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:43:21.470 [DEBUG] [Thread-1373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:43:21.470 [DEBUG] [Thread-1373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:43:21.479 [DEBUG] [Thread-1373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:43:21.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:43:21.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:43:21.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:43:21.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:43:21.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:43:21.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:43:21.517 [DEBUG] [Thread-1373] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:43:35.966 [DEBUG] [Thread-1376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:43:44.292 [DEBUG] [Thread-1377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:43:51.010 [DEBUG] [Thread-1378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:43:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:43:51.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:43:51.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:43:52.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 43, 31), 38.13, 7.44, 0.0, 9.37, 26.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:43:52.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:43:31
2025-11-25T15:43:52.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:43:52.472 [DEBUG] [Thread-1379] [transport.py] [_log()] starting thread (client mode): 0x70d0c070
2025-11-25T15:43:52.472 [DEBUG] [Thread-1379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:43:52.492 [DEBUG] [Thread-1379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:43:52.492 [INFO] [Thread-1379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:43:52.496 [DEBUG] [Thread-1379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:43:52.496 [DEBUG] [Thread-1379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:43:52.496 [DEBUG] [Thread-1379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:43:52.497 [DEBUG] [Thread-1379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:43:52.497 [DEBUG] [Thread-1379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:43:52.497 [DEBUG] [Thread-1379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:43:52.497 [DEBUG] [Thread-1379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:43:52.497 [DEBUG] [Thread-1379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:43:52.497 [DEBUG] [Thread-1379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:43:52.497 [DEBUG] [Thread-1379] [transport.py] [_log()] client lang: <none>
2025-11-25T15:43:52.497 [DEBUG] [Thread-1379] [transport.py] [_log()] server lang: <none>
2025-11-25T15:43:52.498 [DEBUG] [Thread-1379] [transport.py] [_log()] kex follows: False
2025-11-25T15:43:52.498 [DEBUG] [Thread-1379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:43:52.498 [DEBUG] [Thread-1379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:43:52.498 [DEBUG] [Thread-1379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:43:52.498 [DEBUG] [Thread-1379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:43:52.498 [DEBUG] [Thread-1379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:43:52.498 [DEBUG] [Thread-1379] [transport.py] [_log()] Compression: none
2025-11-25T15:43:52.498 [DEBUG] [Thread-1379] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:43:52.517 [DEBUG] [Thread-1379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:43:52.518 [DEBUG] [Thread-1379] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:43:52.518 [DEBUG] [Thread-1379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:43:52.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:43:52.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:43:52.520 [DEBUG] [Thread-1379] [transport.py] [_log()] userauth is OK
2025-11-25T15:43:52.521 [DEBUG] [Thread-1379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:43:52.521 [DEBUG] [Thread-1379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:43:52.521 [DEBUG] [Thread-1379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:43:52.521 [DEBUG] [Thread-1379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:43:52.545 [INFO] [Thread-1379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:43:52.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:43:53.182 [DEBUG] [Thread-1379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:43:53.182 [DEBUG] [Thread-1379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:43:53.183 [DEBUG] [Thread-1379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:43:53.223 [DEBUG] [Thread-1379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:43:53.223 [DEBUG] [Thread-1379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:43:53.226 [DEBUG] [Thread-1379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:43:53.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:43:53.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:43:53.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:43:53.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:43:53.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:43:53.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:43:53.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:43:53.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:43:53.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:43:53.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.571976 -999.00  +27.20   2.68     12   -4.50 1 1 1 1 1   888    0 32.54 47.83 ----- 8.0 2.7 151.6 6.9 33.9 -31.9 33.5 -35.0 35.4 -29.7 36.1 -32.6
2025-11-25T15:43:53.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:43:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:43:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.571976
2025-11-25T15:43:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:43:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:43:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:43:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:43:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:43:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:43:31', tmtdew=38.13, humidity=7.44, cloud=0.0, wind=9.37, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:43:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:43:53.251 [DEBUG] [Thread-1379] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:43:53.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:43:53.356 [DEBUG] [Thread-1382] [transport.py] [_log()] starting thread (client mode): 0x7378d3c0
2025-11-25T15:43:53.356 [DEBUG] [Thread-1382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:43:53.370 [DEBUG] [Thread-1382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:43:53.371 [INFO] [Thread-1382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:43:53.378 [DEBUG] [Thread-1382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:43:53.378 [DEBUG] [Thread-1382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:43:53.378 [DEBUG] [Thread-1382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:43:53.378 [DEBUG] [Thread-1382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] client lang: <none>
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] server lang: <none>
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] kex follows: False
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] Compression: none
2025-11-25T15:43:53.379 [DEBUG] [Thread-1382] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:43:53.439 [DEBUG] [Thread-1382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:43:53.440 [DEBUG] [Thread-1382] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:43:53.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:43:53.441 [DEBUG] [Thread-1382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:43:53.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:43:53.495 [DEBUG] [Thread-1382] [transport.py] [_log()] userauth is OK
2025-11-25T15:43:53.495 [DEBUG] [Thread-1382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:43:53.495 [DEBUG] [Thread-1382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:43:53.495 [DEBUG] [Thread-1382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:43:53.495 [DEBUG] [Thread-1382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:43:53.514 [INFO] [Thread-1382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:43:53.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:43:53.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:43:54.316 [DEBUG] [Thread-1382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:43:54.317 [DEBUG] [Thread-1382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:43:54.365 [DEBUG] [Thread-1382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:43:54.365 [DEBUG] [Thread-1382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:43:54.374 [DEBUG] [Thread-1382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:43:54.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:43:54.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:43:54.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:43:54.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:43:54.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:43:54.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:43:54.408 [DEBUG] [Thread-1382] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:44:06.053 [DEBUG] [Thread-1384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:44:21.117 [DEBUG] [Thread-1385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:44:24.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:44:24.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:44:24.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:44:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 44, 3), 38.19, 7.39, 0.0, 10.22, 26.76, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:44:25.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:44:03
2025-11-25T15:44:25.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:44:25.361 [DEBUG] [Thread-1386] [transport.py] [_log()] starting thread (client mode): 0x7378f2e0
2025-11-25T15:44:25.361 [DEBUG] [Thread-1386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:44:25.376 [DEBUG] [Thread-1386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:44:25.377 [INFO] [Thread-1386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] client lang: <none>
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] server lang: <none>
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] kex follows: False
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] Compression: none
2025-11-25T15:44:25.380 [DEBUG] [Thread-1386] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:44:25.398 [DEBUG] [Thread-1386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:44:25.398 [DEBUG] [Thread-1386] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:44:25.399 [DEBUG] [Thread-1386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:44:25.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:44:25.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:44:25.401 [DEBUG] [Thread-1386] [transport.py] [_log()] userauth is OK
2025-11-25T15:44:25.401 [DEBUG] [Thread-1386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:44:25.401 [DEBUG] [Thread-1386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:44:25.401 [DEBUG] [Thread-1386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:44:25.401 [DEBUG] [Thread-1386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:44:25.418 [INFO] [Thread-1386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:44:25.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:44:26.067 [DEBUG] [Thread-1386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:44:26.067 [DEBUG] [Thread-1386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:44:26.068 [DEBUG] [Thread-1386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:44:26.109 [DEBUG] [Thread-1386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:44:26.109 [DEBUG] [Thread-1386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:44:26.112 [DEBUG] [Thread-1386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:44:26.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:44:26.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:44:26.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:44:26.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:44:26.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:44:26.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:44:26.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:44:26.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:44:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:44:26.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.572323 -999.00  +27.10   7.99     12   -4.60 1 1 1 1 1   888    0 32.64 50.74 ----- 6.8 8.0 182.9 10.3 33.9 -32.4 -999.0 -999.0 35.4 -30.0 36.0 -33.1
2025-11-25T15:44:26.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:44:26.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:44:26.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.572323
2025-11-25T15:44:26.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:44:26.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:44:26.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:44:26.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:44:26.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:44:26.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:44:03', tmtdew=38.19, humidity=7.39, cloud=0.0, wind=10.22, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:44:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:44:26.140 [DEBUG] [Thread-1386] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:44:26.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:44:26.244 [DEBUG] [Thread-1389] [transport.py] [_log()] starting thread (client mode): 0x761dbdf0
2025-11-25T15:44:26.244 [DEBUG] [Thread-1389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:44:26.259 [DEBUG] [Thread-1389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:44:26.260 [INFO] [Thread-1389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] client lang: <none>
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] server lang: <none>
2025-11-25T15:44:26.268 [DEBUG] [Thread-1389] [transport.py] [_log()] kex follows: False
2025-11-25T15:44:26.269 [DEBUG] [Thread-1389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:44:26.269 [DEBUG] [Thread-1389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:44:26.269 [DEBUG] [Thread-1389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:44:26.269 [DEBUG] [Thread-1389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:44:26.269 [DEBUG] [Thread-1389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:44:26.269 [DEBUG] [Thread-1389] [transport.py] [_log()] Compression: none
2025-11-25T15:44:26.269 [DEBUG] [Thread-1389] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:44:26.331 [DEBUG] [Thread-1389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:44:26.332 [DEBUG] [Thread-1389] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:44:26.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:44:26.333 [DEBUG] [Thread-1389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:44:26.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:44:26.391 [DEBUG] [Thread-1389] [transport.py] [_log()] userauth is OK
2025-11-25T15:44:26.391 [DEBUG] [Thread-1389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:44:26.391 [DEBUG] [Thread-1389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:44:26.391 [DEBUG] [Thread-1389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:44:26.391 [DEBUG] [Thread-1389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:44:26.411 [INFO] [Thread-1389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:44:26.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:44:26.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:44:27.215 [DEBUG] [Thread-1389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:44:27.215 [DEBUG] [Thread-1389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:44:27.263 [DEBUG] [Thread-1389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:44:27.263 [DEBUG] [Thread-1389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:44:27.275 [DEBUG] [Thread-1389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:44:27.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:44:27.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:44:27.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:44:27.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:44:27.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:44:27.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:44:27.311 [DEBUG] [Thread-1389] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:44:36.162 [DEBUG] [Thread-1391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:44:44.805 [DEBUG] [Thread-1392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:44:51.219 [DEBUG] [Thread-1393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:44:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:44:57.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:44:57.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:44:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 44, 36), 38.26, 7.41, 0.0, 8.22, 26.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:44:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:44:36
2025-11-25T15:44:58.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:44:58.261 [DEBUG] [Thread-1394] [transport.py] [_log()] starting thread (client mode): 0x7378f8e0
2025-11-25T15:44:58.261 [DEBUG] [Thread-1394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:44:58.282 [DEBUG] [Thread-1394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:44:58.283 [INFO] [Thread-1394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:44:58.285 [DEBUG] [Thread-1394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:44:58.285 [DEBUG] [Thread-1394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] client lang: <none>
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] server lang: <none>
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] kex follows: False
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] Compression: none
2025-11-25T15:44:58.286 [DEBUG] [Thread-1394] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:44:58.304 [DEBUG] [Thread-1394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:44:58.304 [DEBUG] [Thread-1394] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:44:58.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:44:58.306 [DEBUG] [Thread-1394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:44:58.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:44:58.308 [DEBUG] [Thread-1394] [transport.py] [_log()] userauth is OK
2025-11-25T15:44:58.308 [DEBUG] [Thread-1394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:44:58.308 [DEBUG] [Thread-1394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:44:58.308 [DEBUG] [Thread-1394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:44:58.308 [DEBUG] [Thread-1394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:44:58.331 [INFO] [Thread-1394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:44:58.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:44:58.964 [DEBUG] [Thread-1394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:44:58.965 [DEBUG] [Thread-1394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:44:58.965 [DEBUG] [Thread-1394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:44:59.006 [DEBUG] [Thread-1394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:44:59.006 [DEBUG] [Thread-1394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:44:59.010 [DEBUG] [Thread-1394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:44:59.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:44:59.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:44:59.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:44:59.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:44:59.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:44:59.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:44:59.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:44:59.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:44:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:44:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.572670 -999.00  +27.20   5.15     12   -4.40 1 1 1 1 1   888    0 32.98 53.19 ----- 11.6 5.2 143.5 13.9 33.9 -32.1 33.5 -31.2 35.5 -29.6 36.1 -32.2
2025-11-25T15:44:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:44:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:44:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.572670
2025-11-25T15:44:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:44:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:44:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:44:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:44:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:44:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:44:36', tmtdew=38.26, humidity=7.41, cloud=0.0, wind=8.22, temperature=26.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:44:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:44:59.040 [DEBUG] [Thread-1394] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:44:59.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:44:59.151 [DEBUG] [Thread-1397] [transport.py] [_log()] starting thread (client mode): 0x737e9f00
2025-11-25T15:44:59.152 [DEBUG] [Thread-1397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:44:59.166 [DEBUG] [Thread-1397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:44:59.166 [INFO] [Thread-1397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:44:59.174 [DEBUG] [Thread-1397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:44:59.174 [DEBUG] [Thread-1397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:44:59.174 [DEBUG] [Thread-1397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:44:59.174 [DEBUG] [Thread-1397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:44:59.174 [DEBUG] [Thread-1397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:44:59.174 [DEBUG] [Thread-1397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:44:59.174 [DEBUG] [Thread-1397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:44:59.174 [DEBUG] [Thread-1397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:44:59.174 [DEBUG] [Thread-1397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] client lang: <none>
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] server lang: <none>
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] kex follows: False
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] Compression: none
2025-11-25T15:44:59.175 [DEBUG] [Thread-1397] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:44:59.237 [DEBUG] [Thread-1397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:44:59.237 [DEBUG] [Thread-1397] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:44:59.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:44:59.238 [DEBUG] [Thread-1397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:44:59.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:44:59.304 [DEBUG] [Thread-1397] [transport.py] [_log()] userauth is OK
2025-11-25T15:44:59.304 [DEBUG] [Thread-1397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:44:59.304 [DEBUG] [Thread-1397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:44:59.305 [DEBUG] [Thread-1397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:44:59.305 [DEBUG] [Thread-1397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:44:59.329 [INFO] [Thread-1397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:44:59.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:44:59.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:45:00.111 [DEBUG] [Thread-1397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:45:00.112 [DEBUG] [Thread-1397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:45:00.160 [DEBUG] [Thread-1397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:45:00.160 [DEBUG] [Thread-1397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:45:00.169 [DEBUG] [Thread-1397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:45:00.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:45:00.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:45: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
2025-11-25T15:45:00.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:45:00.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:45:00.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:45:00.207 [DEBUG] [Thread-1397] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:45:06.260 [DEBUG] [Thread-1399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:45:21.329 [DEBUG] [Thread-1400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:45:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:45:30.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:45:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:45:30.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 45, 8), 38.1, 7.46, 0.0, 8.17, 26.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:45:30.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:45:08
2025-11-25T15:45:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:45:31.171 [DEBUG] [Thread-1401] [transport.py] [_log()] starting thread (client mode): 0x737eaa10
2025-11-25T15:45:31.171 [DEBUG] [Thread-1401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:45:31.191 [DEBUG] [Thread-1401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:45:31.191 [INFO] [Thread-1401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:45:31.194 [DEBUG] [Thread-1401] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:45:31.194 [DEBUG] [Thread-1401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:45:31.194 [DEBUG] [Thread-1401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] client lang: <none>
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] server lang: <none>
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] kex follows: False
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] Compression: none
2025-11-25T15:45:31.195 [DEBUG] [Thread-1401] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:45:31.215 [DEBUG] [Thread-1401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:45:31.215 [DEBUG] [Thread-1401] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:45:31.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:45:31.216 [DEBUG] [Thread-1401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:45:31.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:45:31.218 [DEBUG] [Thread-1401] [transport.py] [_log()] userauth is OK
2025-11-25T15:45:31.218 [DEBUG] [Thread-1401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:45:31.218 [DEBUG] [Thread-1401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:45:31.218 [DEBUG] [Thread-1401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:45:31.218 [DEBUG] [Thread-1401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:45:31.254 [INFO] [Thread-1401] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:45:31.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:45:31.915 [DEBUG] [Thread-1401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:45:31.915 [DEBUG] [Thread-1401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:45:31.915 [DEBUG] [Thread-1401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:45:31.955 [DEBUG] [Thread-1401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:45:31.956 [DEBUG] [Thread-1401] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:45:31.958 [DEBUG] [Thread-1401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:45:31.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:45:31.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:45:31.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:45:31.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:45:31.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:45:31.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:45:31.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:45:31.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:45:31.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:45:31.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.573017 -999.00  +27.20   6.48     12   -4.50 1 1 1 1 1   888    0 32.28 58.24 ----- 6.3 6.5 165.8 12.8 34.0 -32.2 33.5 -31.6 35.5 -30.9 36.2 -33.4
2025-11-25T15:45:31.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:45:31.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:45:31.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.573017
2025-11-25T15:45:31.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:45:31.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:45:31.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:45:31.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:45:31.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:45:31.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:45:08', tmtdew=38.1, humidity=7.46, cloud=0.0, wind=8.17, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:45:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:45:31.983 [DEBUG] [Thread-1401] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:45:32.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:45:32.086 [DEBUG] [Thread-1404] [transport.py] [_log()] starting thread (client mode): 0x737e9300
2025-11-25T15:45:32.086 [DEBUG] [Thread-1404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:45:32.100 [DEBUG] [Thread-1404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:45:32.100 [INFO] [Thread-1404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:45:32.108 [DEBUG] [Thread-1404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:45:32.108 [DEBUG] [Thread-1404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:45:32.108 [DEBUG] [Thread-1404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:45:32.108 [DEBUG] [Thread-1404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:45:32.108 [DEBUG] [Thread-1404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:45:32.108 [DEBUG] [Thread-1404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:45:32.108 [DEBUG] [Thread-1404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:45:32.108 [DEBUG] [Thread-1404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] client lang: <none>
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] server lang: <none>
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] kex follows: False
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] Compression: none
2025-11-25T15:45:32.109 [DEBUG] [Thread-1404] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:45:32.166 [DEBUG] [Thread-1404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:45:32.167 [DEBUG] [Thread-1404] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:45:32.167 [DEBUG] [Thread-1404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:45:32.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:45:32.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:45:32.226 [DEBUG] [Thread-1404] [transport.py] [_log()] userauth is OK
2025-11-25T15:45:32.227 [DEBUG] [Thread-1404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:45:32.227 [DEBUG] [Thread-1404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:45:32.227 [DEBUG] [Thread-1404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:45:32.227 [DEBUG] [Thread-1404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:45:32.247 [INFO] [Thread-1404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:45:32.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:45:32.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:45:33.040 [DEBUG] [Thread-1404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:45:33.040 [DEBUG] [Thread-1404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:45:33.088 [DEBUG] [Thread-1404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:45:33.088 [DEBUG] [Thread-1404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:45:33.097 [DEBUG] [Thread-1404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:45:33.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:45:33.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:45:33.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:45:33.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:45:33.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:45:33.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:45:33.135 [DEBUG] [Thread-1404] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:45:36.370 [DEBUG] [Thread-1406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:45:45.527 [DEBUG] [Thread-1407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:45:51.437 [DEBUG] [Thread-1408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:46:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:46:03.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:46:03.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:46:03.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 45, 40), 38.09, 7.46, 0.0, 6.81, 26.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:46:03.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:45:40
2025-11-25T15:46:03.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:46:04.143 [DEBUG] [Thread-1409] [transport.py] [_log()] starting thread (client mode): 0x737ebdf0
2025-11-25T15:46:04.143 [DEBUG] [Thread-1409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:46:04.163 [DEBUG] [Thread-1409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:46:04.163 [INFO] [Thread-1409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] client lang: <none>
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] server lang: <none>
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] kex follows: False
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:46:04.166 [DEBUG] [Thread-1409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:46:04.167 [DEBUG] [Thread-1409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:46:04.167 [DEBUG] [Thread-1409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:46:04.167 [DEBUG] [Thread-1409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:46:04.167 [DEBUG] [Thread-1409] [transport.py] [_log()] Compression: none
2025-11-25T15:46:04.167 [DEBUG] [Thread-1409] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:46:04.182 [DEBUG] [Thread-1409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:46:04.183 [DEBUG] [Thread-1409] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:46:04.183 [DEBUG] [Thread-1409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:46:04.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:46:04.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:46:04.184 [DEBUG] [Thread-1409] [transport.py] [_log()] userauth is OK
2025-11-25T15:46:04.184 [DEBUG] [Thread-1409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:46:04.184 [DEBUG] [Thread-1409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:46:04.184 [DEBUG] [Thread-1409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:46:04.184 [DEBUG] [Thread-1409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:46:04.197 [INFO] [Thread-1409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:46:04.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:46:04.841 [DEBUG] [Thread-1409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:46:04.842 [DEBUG] [Thread-1409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:46:04.842 [DEBUG] [Thread-1409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:46:04.882 [DEBUG] [Thread-1409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:46:04.882 [DEBUG] [Thread-1409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:46:04.884 [DEBUG] [Thread-1409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:46:04.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:46:04.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:46:04.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:46:04.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:46:04.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:46:04.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:46:04.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.573365 -999.00  +27.20   2.82     12   -4.40 1 1 1 1 1   888    0 33.20 52.72 ----- 12.7 2.8 178.5 11.4 34.0 -32.2 33.5 -31.5 35.4 -30.8 36.1 -31.0
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.573365
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:46:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:45:40', tmtdew=38.09, humidity=7.46, cloud=0.0, wind=6.81, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:45:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:46:04.896 [DEBUG] [Thread-1409] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:46:04.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:46:04.991 [DEBUG] [Thread-1412] [transport.py] [_log()] starting thread (client mode): 0x737eb400
2025-11-25T15:46:04.991 [DEBUG] [Thread-1412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:46:05.006 [DEBUG] [Thread-1412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:46:05.006 [INFO] [Thread-1412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:46:05.013 [DEBUG] [Thread-1412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] client lang: <none>
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] server lang: <none>
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] kex follows: False
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] Compression: none
2025-11-25T15:46:05.014 [DEBUG] [Thread-1412] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:46:05.076 [DEBUG] [Thread-1412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:46:05.076 [DEBUG] [Thread-1412] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:46:05.077 [DEBUG] [Thread-1412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:46:05.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:46:05.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:46:05.134 [DEBUG] [Thread-1412] [transport.py] [_log()] userauth is OK
2025-11-25T15:46:05.134 [DEBUG] [Thread-1412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:46:05.134 [DEBUG] [Thread-1412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:46:05.134 [DEBUG] [Thread-1412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:46:05.134 [DEBUG] [Thread-1412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:46:05.152 [INFO] [Thread-1412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:46:05.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:46:05.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:46:05.969 [DEBUG] [Thread-1412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:46:05.969 [DEBUG] [Thread-1412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:46:06.016 [DEBUG] [Thread-1412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:46:06.016 [DEBUG] [Thread-1412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:46:06.024 [DEBUG] [Thread-1412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:46:06.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:46:06.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:46:06.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:46:06.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:46:06.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:46:06.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:46:06.058 [DEBUG] [Thread-1412] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:46:06.477 [DEBUG] [Thread-1414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:46:21.548 [DEBUG] [Thread-1415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:46:36.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:46:36.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:46:36.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:46:36.592 [DEBUG] [Thread-1416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:46:36.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 46, 12), 37.84, 7.61, 0.0, 7.45, 26.71, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:46:36.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:46:12
2025-11-25T15:46:36.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:46:37.030 [DEBUG] [Thread-1417] [transport.py] [_log()] starting thread (client mode): 0x737e9030
2025-11-25T15:46:37.030 [DEBUG] [Thread-1417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:46:37.050 [DEBUG] [Thread-1417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:46:37.051 [INFO] [Thread-1417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] client lang: <none>
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] server lang: <none>
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] kex follows: False
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:46:37.054 [DEBUG] [Thread-1417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:46:37.055 [DEBUG] [Thread-1417] [transport.py] [_log()] Compression: none
2025-11-25T15:46:37.055 [DEBUG] [Thread-1417] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:46:37.073 [DEBUG] [Thread-1417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:46:37.074 [DEBUG] [Thread-1417] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:46:37.074 [DEBUG] [Thread-1417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:46:37.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:46:37.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:46:37.076 [DEBUG] [Thread-1417] [transport.py] [_log()] userauth is OK
2025-11-25T15:46:37.077 [DEBUG] [Thread-1417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:46:37.077 [DEBUG] [Thread-1417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:46:37.077 [DEBUG] [Thread-1417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:46:37.077 [DEBUG] [Thread-1417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:46:37.102 [INFO] [Thread-1417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:46:37.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:46:37.765 [DEBUG] [Thread-1417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:46:37.765 [DEBUG] [Thread-1417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:46:37.766 [DEBUG] [Thread-1417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:46:37.806 [DEBUG] [Thread-1417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:46:37.807 [DEBUG] [Thread-1417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:46:37.810 [DEBUG] [Thread-1417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:46:37.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:46:37.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:46:37.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:46:37.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:46:37.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:46:37.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:46:37.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:46:37.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:46:37.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:46:37.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.573712 -999.00  +27.20   3.41     12   -4.40 1 1 1 1 1   888    0 32.81 54.64 ----- 1.8 3.4 189.9 14.8 33.9 -32.8 33.7 -31.1 35.5 -30.0 36.2 -31.2
2025-11-25T15:46:37.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:46:37.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:46:37.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.573712
2025-11-25T15:46:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:46:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:46:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:46:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:46:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:46:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:46:12', tmtdew=37.84, humidity=7.61, cloud=0.0, wind=7.45, temperature=26.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:46:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:46:37.842 [DEBUG] [Thread-1417] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:46:37.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:46:37.947 [DEBUG] [Thread-1420] [transport.py] [_log()] starting thread (client mode): 0x737eb970
2025-11-25T15:46:37.947 [DEBUG] [Thread-1420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:46:37.962 [DEBUG] [Thread-1420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:46:37.962 [INFO] [Thread-1420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] client lang: <none>
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] server lang: <none>
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] kex follows: False
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] Compression: none
2025-11-25T15:46:37.970 [DEBUG] [Thread-1420] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:46:38.032 [DEBUG] [Thread-1420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:46:38.032 [DEBUG] [Thread-1420] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:46:38.032 [DEBUG] [Thread-1420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:46:38.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:46:38.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:46:38.089 [DEBUG] [Thread-1420] [transport.py] [_log()] userauth is OK
2025-11-25T15:46:38.089 [DEBUG] [Thread-1420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:46:38.089 [DEBUG] [Thread-1420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:46:38.089 [DEBUG] [Thread-1420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:46:38.089 [DEBUG] [Thread-1420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:46:38.103 [INFO] [Thread-1420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:46:38.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:46:38.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:46:38.906 [DEBUG] [Thread-1420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:46:38.906 [DEBUG] [Thread-1420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:46:38.954 [DEBUG] [Thread-1420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:46:38.954 [DEBUG] [Thread-1420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:46:38.962 [DEBUG] [Thread-1420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:46:38.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:46:38.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:46:38.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:46:38.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:46:38.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:46:38.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:46:38.994 [DEBUG] [Thread-1420] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:46:46.307 [DEBUG] [Thread-1422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:46:51.631 [DEBUG] [Thread-1423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:47:06.699 [DEBUG] [Thread-1424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:47:09.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:47:09.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:47:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:47:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 46, 44), 38.07, 7.47, 0.0, 8.17, 26.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:47:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:46:44
2025-11-25T15:47:09.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:47:09.960 [DEBUG] [Thread-1425] [transport.py] [_log()] starting thread (client mode): 0x761da8c0
2025-11-25T15:47:09.960 [DEBUG] [Thread-1425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:47:09.981 [DEBUG] [Thread-1425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:47:09.981 [INFO] [Thread-1425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:47:09.984 [DEBUG] [Thread-1425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] client lang: <none>
2025-11-25T15:47:09.985 [DEBUG] [Thread-1425] [transport.py] [_log()] server lang: <none>
2025-11-25T15:47:09.986 [DEBUG] [Thread-1425] [transport.py] [_log()] kex follows: False
2025-11-25T15:47:09.986 [DEBUG] [Thread-1425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:47:09.986 [DEBUG] [Thread-1425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:47:09.986 [DEBUG] [Thread-1425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:47:09.986 [DEBUG] [Thread-1425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:47:09.986 [DEBUG] [Thread-1425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:47:09.986 [DEBUG] [Thread-1425] [transport.py] [_log()] Compression: none
2025-11-25T15:47:09.986 [DEBUG] [Thread-1425] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:47:10.004 [DEBUG] [Thread-1425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:47:10.004 [DEBUG] [Thread-1425] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:47:10.005 [DEBUG] [Thread-1425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:47:10.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:47:10.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:47:10.007 [DEBUG] [Thread-1425] [transport.py] [_log()] userauth is OK
2025-11-25T15:47:10.007 [DEBUG] [Thread-1425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:47:10.007 [DEBUG] [Thread-1425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:47:10.007 [DEBUG] [Thread-1425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:47:10.007 [DEBUG] [Thread-1425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:47:10.025 [INFO] [Thread-1425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:47:10.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:47:10.666 [DEBUG] [Thread-1425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:47:10.666 [DEBUG] [Thread-1425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:47:10.667 [DEBUG] [Thread-1425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:47:10.707 [DEBUG] [Thread-1425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:47:10.707 [DEBUG] [Thread-1425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:47:10.710 [DEBUG] [Thread-1425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:47:10.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:47:10.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:47:10.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:47:10.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:47:10.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:47:10.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:47:10.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:47:10.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:47:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:47:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.574059 -999.00  +27.40   1.68     12   -4.30 1 1 1 1 1   888    0 33.03 50.72 ----- 4.1 1.7 239.8 6.2 34.0 -31.2 33.9 -31.3 35.6 -29.2 36.4 -31.3
2025-11-25T15:47:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:47:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:47:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.574059
2025-11-25T15:47:10.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:47:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:47:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:47:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:47:10.738 [DEBUG] [Thread-1425] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:47:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:47:10.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:46:44', tmtdew=38.07, humidity=7.47, cloud=0.0, wind=8.17, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:46:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:47:10.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:47:10.844 [DEBUG] [Thread-1428] [transport.py] [_log()] starting thread (client mode): 0x761d9720
2025-11-25T15:47:10.844 [DEBUG] [Thread-1428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:47:10.858 [DEBUG] [Thread-1428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:47:10.859 [INFO] [Thread-1428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:47:10.866 [DEBUG] [Thread-1428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:47:10.866 [DEBUG] [Thread-1428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:47:10.866 [DEBUG] [Thread-1428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:47:10.866 [DEBUG] [Thread-1428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:47:10.867 [DEBUG] [Thread-1428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:47:10.867 [DEBUG] [Thread-1428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:47:10.867 [DEBUG] [Thread-1428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:47:10.867 [DEBUG] [Thread-1428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:47:10.867 [DEBUG] [Thread-1428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:47:10.867 [DEBUG] [Thread-1428] [transport.py] [_log()] client lang: <none>
2025-11-25T15:47:10.867 [DEBUG] [Thread-1428] [transport.py] [_log()] server lang: <none>
2025-11-25T15:47:10.867 [DEBUG] [Thread-1428] [transport.py] [_log()] kex follows: False
2025-11-25T15:47:10.867 [DEBUG] [Thread-1428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:47:10.868 [DEBUG] [Thread-1428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:47:10.868 [DEBUG] [Thread-1428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:47:10.868 [DEBUG] [Thread-1428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:47:10.868 [DEBUG] [Thread-1428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:47:10.868 [DEBUG] [Thread-1428] [transport.py] [_log()] Compression: none
2025-11-25T15:47:10.868 [DEBUG] [Thread-1428] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:47:10.925 [DEBUG] [Thread-1428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:47:10.926 [DEBUG] [Thread-1428] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:47:10.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:47:10.928 [DEBUG] [Thread-1428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:47:10.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:47:10.985 [DEBUG] [Thread-1428] [transport.py] [_log()] userauth is OK
2025-11-25T15:47:10.985 [DEBUG] [Thread-1428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:47:10.986 [DEBUG] [Thread-1428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:47:10.986 [DEBUG] [Thread-1428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:47:10.986 [DEBUG] [Thread-1428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:47:11.004 [INFO] [Thread-1428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:47:11.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:47:11.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:47:11.808 [DEBUG] [Thread-1428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:47:11.808 [DEBUG] [Thread-1428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:47:11.859 [DEBUG] [Thread-1428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:47:11.859 [DEBUG] [Thread-1428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:47:11.872 [DEBUG] [Thread-1428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:47:11.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:47:11.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:47:11.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:47:11.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:47:11.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:47:11.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:47:11.905 [DEBUG] [Thread-1428] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:47:21.739 [DEBUG] [Thread-1430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:47:36.808 [DEBUG] [Thread-1431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:47:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:47:41.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:47:41.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:47:42.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 47, 16), 38.2, 7.39, 0.0, 7.55, 26.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:47:42.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:47:16
2025-11-25T15:47:42.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:47:42.835 [DEBUG] [Thread-1432] [transport.py] [_log()] starting thread (client mode): 0x737e99c0
2025-11-25T15:47:42.835 [DEBUG] [Thread-1432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:47:42.855 [DEBUG] [Thread-1432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:47:42.856 [INFO] [Thread-1432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:47:42.859 [DEBUG] [Thread-1432] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:47:42.859 [DEBUG] [Thread-1432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:47:42.859 [DEBUG] [Thread-1432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:47:42.859 [DEBUG] [Thread-1432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:47:42.859 [DEBUG] [Thread-1432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:47:42.859 [DEBUG] [Thread-1432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:47:42.860 [DEBUG] [Thread-1432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:47:42.860 [DEBUG] [Thread-1432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:47:42.860 [DEBUG] [Thread-1432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:47:42.860 [DEBUG] [Thread-1432] [transport.py] [_log()] client lang: <none>
2025-11-25T15:47:42.860 [DEBUG] [Thread-1432] [transport.py] [_log()] server lang: <none>
2025-11-25T15:47:42.860 [DEBUG] [Thread-1432] [transport.py] [_log()] kex follows: False
2025-11-25T15:47:42.860 [DEBUG] [Thread-1432] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:47:42.860 [DEBUG] [Thread-1432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:47:42.860 [DEBUG] [Thread-1432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:47:42.861 [DEBUG] [Thread-1432] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:47:42.861 [DEBUG] [Thread-1432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:47:42.861 [DEBUG] [Thread-1432] [transport.py] [_log()] Compression: none
2025-11-25T15:47:42.861 [DEBUG] [Thread-1432] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:47:42.880 [DEBUG] [Thread-1432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:47:42.880 [DEBUG] [Thread-1432] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:47:42.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:47:42.881 [DEBUG] [Thread-1432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:47:42.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:47:42.883 [DEBUG] [Thread-1432] [transport.py] [_log()] userauth is OK
2025-11-25T15:47:42.884 [DEBUG] [Thread-1432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:47:42.884 [DEBUG] [Thread-1432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:47:42.884 [DEBUG] [Thread-1432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:47:42.884 [DEBUG] [Thread-1432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:47:42.909 [INFO] [Thread-1432] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:47:42.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:47:43.560 [DEBUG] [Thread-1432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:47:43.560 [DEBUG] [Thread-1432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:47:43.561 [DEBUG] [Thread-1432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:47:43.602 [DEBUG] [Thread-1432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:47:43.602 [DEBUG] [Thread-1432] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:47:43.605 [DEBUG] [Thread-1432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:47:43.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:47:43.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:47:43.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:47:43.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:47:43.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:47:43.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:47:43.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:47:43.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:47:43.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:47:43.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.574406 -999.00  +27.70   2.43     12   -4.20 1 1 1 1 1   888    0 32.55 48.43 ----- 6.4 2.4 158.1 5.0 34.2 -31.8 33.9 -31.9 35.7 -29.1 36.5 -30.9
2025-11-25T15:47:43.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:47:43.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:47:43.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.574406
2025-11-25T15:47:43.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:47:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:47:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:47:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:47:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:47:43.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:47:16', tmtdew=38.2, humidity=7.39, cloud=0.0, wind=7.55, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:47:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:47:43.633 [DEBUG] [Thread-1432] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:47:43.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:47:43.736 [DEBUG] [Thread-1435] [transport.py] [_log()] starting thread (client mode): 0x737e8100
2025-11-25T15:47:43.736 [DEBUG] [Thread-1435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:47:43.750 [DEBUG] [Thread-1435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:47:43.750 [INFO] [Thread-1435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:47:43.758 [DEBUG] [Thread-1435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:47:43.758 [DEBUG] [Thread-1435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:47:43.758 [DEBUG] [Thread-1435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:47:43.758 [DEBUG] [Thread-1435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:47:43.758 [DEBUG] [Thread-1435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:47:43.758 [DEBUG] [Thread-1435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:47:43.758 [DEBUG] [Thread-1435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:47:43.758 [DEBUG] [Thread-1435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:47:43.758 [DEBUG] [Thread-1435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] client lang: <none>
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] server lang: <none>
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] kex follows: False
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] Compression: none
2025-11-25T15:47:43.759 [DEBUG] [Thread-1435] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:47:43.817 [DEBUG] [Thread-1435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:47:43.817 [DEBUG] [Thread-1435] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:47:43.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:47:43.819 [DEBUG] [Thread-1435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:47:43.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:47:43.876 [DEBUG] [Thread-1435] [transport.py] [_log()] userauth is OK
2025-11-25T15:47:43.876 [DEBUG] [Thread-1435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:47:43.876 [DEBUG] [Thread-1435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:47:43.876 [DEBUG] [Thread-1435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:47:43.877 [DEBUG] [Thread-1435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:47:43.891 [INFO] [Thread-1435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:47:43.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:47:43.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:47:44.679 [DEBUG] [Thread-1435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:47:44.679 [DEBUG] [Thread-1435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:47:44.726 [DEBUG] [Thread-1435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:47:44.726 [DEBUG] [Thread-1435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:47:44.735 [DEBUG] [Thread-1435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:47:44.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:47:44.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:47:44.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:47:44.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:47:44.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:47:44.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:47:44.770 [DEBUG] [Thread-1435] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:47:47.012 [DEBUG] [Thread-1437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:47:51.852 [DEBUG] [Thread-1438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:48:06.926 [DEBUG] [Thread-1439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:48:14.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:48:14.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:48:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:48:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 47, 48), 38.07, 7.44, 0.0, 3.94, 26.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:48:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:47:48
2025-11-25T15:48:15.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:48:15.717 [DEBUG] [Thread-1440] [transport.py] [_log()] starting thread (client mode): 0x761d90f0
2025-11-25T15:48:15.717 [DEBUG] [Thread-1440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:48:15.739 [DEBUG] [Thread-1440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:48:15.739 [INFO] [Thread-1440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:48:15.742 [DEBUG] [Thread-1440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:48:15.742 [DEBUG] [Thread-1440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:48:15.743 [DEBUG] [Thread-1440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:48:15.743 [DEBUG] [Thread-1440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:48:15.743 [DEBUG] [Thread-1440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:48:15.743 [DEBUG] [Thread-1440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:48:15.743 [DEBUG] [Thread-1440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:48:15.743 [DEBUG] [Thread-1440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:48:15.743 [DEBUG] [Thread-1440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:48:15.743 [DEBUG] [Thread-1440] [transport.py] [_log()] client lang: <none>
2025-11-25T15:48:15.744 [DEBUG] [Thread-1440] [transport.py] [_log()] server lang: <none>
2025-11-25T15:48:15.744 [DEBUG] [Thread-1440] [transport.py] [_log()] kex follows: False
2025-11-25T15:48:15.744 [DEBUG] [Thread-1440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:48:15.744 [DEBUG] [Thread-1440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:48:15.744 [DEBUG] [Thread-1440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:48:15.744 [DEBUG] [Thread-1440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:48:15.744 [DEBUG] [Thread-1440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:48:15.745 [DEBUG] [Thread-1440] [transport.py] [_log()] Compression: none
2025-11-25T15:48:15.745 [DEBUG] [Thread-1440] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:48:15.765 [DEBUG] [Thread-1440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:48:15.765 [DEBUG] [Thread-1440] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:48:15.766 [DEBUG] [Thread-1440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:48:15.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:48:15.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:48:15.768 [DEBUG] [Thread-1440] [transport.py] [_log()] userauth is OK
2025-11-25T15:48:15.768 [DEBUG] [Thread-1440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:48:15.768 [DEBUG] [Thread-1440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:48:15.768 [DEBUG] [Thread-1440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:48:15.768 [DEBUG] [Thread-1440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:48:15.793 [INFO] [Thread-1440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:48:15.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:48:16.442 [DEBUG] [Thread-1440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:48:16.443 [DEBUG] [Thread-1440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:48:16.443 [DEBUG] [Thread-1440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:48:16.484 [DEBUG] [Thread-1440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:48:16.484 [DEBUG] [Thread-1440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:48:16.487 [DEBUG] [Thread-1440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:48:16.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:48:16.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:48:16.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:48:16.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:48:16.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:48:16.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:48:16.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:48:16.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:48:16.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:48:16.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.575101 -999.00  +27.20   7.63     12   -4.60 1 1 1 1 1   888    0 32.98 47.61 ----- 3.7 7.6 333.4 8.6 34.2 -32.3 34.1 -31.1 35.8 -29.8 36.4 -30.7
2025-11-25T15:48:16.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:48:16.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:48:16.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.575101
2025-11-25T15:48:16.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:48:16.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:48:16.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:48:16.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:48:16.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:48:16.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:47:48', tmtdew=38.07, humidity=7.44, cloud=0.0, wind=3.94, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:48:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:48:16.515 [DEBUG] [Thread-1440] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:48:16.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:48:16.620 [DEBUG] [Thread-1443] [transport.py] [_log()] starting thread (client mode): 0x761da7a0
2025-11-25T15:48:16.620 [DEBUG] [Thread-1443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:48:16.634 [DEBUG] [Thread-1443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:48:16.635 [INFO] [Thread-1443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:48:16.642 [DEBUG] [Thread-1443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:48:16.642 [DEBUG] [Thread-1443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:48:16.642 [DEBUG] [Thread-1443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:48:16.642 [DEBUG] [Thread-1443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:48:16.642 [DEBUG] [Thread-1443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] client lang: <none>
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] server lang: <none>
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] kex follows: False
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] Compression: none
2025-11-25T15:48:16.643 [DEBUG] [Thread-1443] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:48:16.699 [DEBUG] [Thread-1443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:48:16.700 [DEBUG] [Thread-1443] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:48:16.701 [DEBUG] [Thread-1443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:48:16.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:48:16.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:48:16.757 [DEBUG] [Thread-1443] [transport.py] [_log()] userauth is OK
2025-11-25T15:48:16.757 [DEBUG] [Thread-1443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:48:16.757 [DEBUG] [Thread-1443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:48:16.757 [DEBUG] [Thread-1443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:48:16.758 [DEBUG] [Thread-1443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:48:16.775 [INFO] [Thread-1443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:48:16.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:48:16.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:48:17.572 [DEBUG] [Thread-1443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:48:17.572 [DEBUG] [Thread-1443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:48:17.621 [DEBUG] [Thread-1443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:48:17.621 [DEBUG] [Thread-1443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:48:17.631 [DEBUG] [Thread-1443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:48:17.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:48:17.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:48:17.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:48:17.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:48:17.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:48:17.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:48:17.668 [DEBUG] [Thread-1443] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:48:21.970 [DEBUG] [Thread-1445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:48:37.026 [DEBUG] [Thread-1446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:48:47.521 [DEBUG] [Thread-1447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:48:47.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:48:47.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:48:47.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:48:48.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 48, 20), 38.04, 7.46, 0.0, 2.6, 26.76, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:48:48.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:48:20
2025-11-25T15:48:48.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:48:48.613 [DEBUG] [Thread-1448] [transport.py] [_log()] starting thread (client mode): 0x737ea140
2025-11-25T15:48:48.614 [DEBUG] [Thread-1448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:48:48.633 [DEBUG] [Thread-1448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:48:48.633 [INFO] [Thread-1448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:48:48.635 [DEBUG] [Thread-1448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:48:48.635 [DEBUG] [Thread-1448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:48:48.635 [DEBUG] [Thread-1448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:48:48.635 [DEBUG] [Thread-1448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:48:48.635 [DEBUG] [Thread-1448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:48:48.635 [DEBUG] [Thread-1448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:48:48.635 [DEBUG] [Thread-1448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:48:48.635 [DEBUG] [Thread-1448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:48:48.636 [DEBUG] [Thread-1448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:48:48.636 [DEBUG] [Thread-1448] [transport.py] [_log()] client lang: <none>
2025-11-25T15:48:48.636 [DEBUG] [Thread-1448] [transport.py] [_log()] server lang: <none>
2025-11-25T15:48:48.636 [DEBUG] [Thread-1448] [transport.py] [_log()] kex follows: False
2025-11-25T15:48:48.636 [DEBUG] [Thread-1448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:48:48.636 [DEBUG] [Thread-1448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:48:48.636 [DEBUG] [Thread-1448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:48:48.637 [DEBUG] [Thread-1448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:48:48.637 [DEBUG] [Thread-1448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:48:48.637 [DEBUG] [Thread-1448] [transport.py] [_log()] Compression: none
2025-11-25T15:48:48.637 [DEBUG] [Thread-1448] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:48:48.657 [DEBUG] [Thread-1448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:48:48.658 [DEBUG] [Thread-1448] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:48:48.658 [DEBUG] [Thread-1448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:48:48.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:48:48.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:48:48.660 [DEBUG] [Thread-1448] [transport.py] [_log()] userauth is OK
2025-11-25T15:48:48.660 [DEBUG] [Thread-1448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:48:48.660 [DEBUG] [Thread-1448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:48:48.660 [DEBUG] [Thread-1448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:48:48.660 [DEBUG] [Thread-1448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:48:48.696 [INFO] [Thread-1448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:48:48.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:48:49.366 [DEBUG] [Thread-1448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:48:49.366 [DEBUG] [Thread-1448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:48:49.367 [DEBUG] [Thread-1448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:48:49.407 [DEBUG] [Thread-1448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:48:49.407 [DEBUG] [Thread-1448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:48:49.410 [DEBUG] [Thread-1448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:48:49.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:48:49.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:48:49.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:48:49.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:48:49.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:48:49.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:48:49.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:48:49.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:48:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:48:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.575448 -999.00  +27.30  12.12     12   -4.40 1 1 1 1 1   888    0 33.23 47.10 ----- 10.4 12.1 320.4 15.1 34.4 -31.5 34.2 -31.6 35.8 -29.0 36.4 -31.4
2025-11-25T15:48:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:48:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:48:49.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.575448
2025-11-25T15:48:49.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:48:49.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:48:49.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:48:49.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:48:49.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:48:49.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:48:20', tmtdew=38.04, humidity=7.46, cloud=0.0, wind=2.6, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:48:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:48:49.436 [DEBUG] [Thread-1448] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:48:49.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:48:49.540 [DEBUG] [Thread-1451] [transport.py] [_log()] starting thread (client mode): 0x761dae90
2025-11-25T15:48:49.540 [DEBUG] [Thread-1451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:48:49.555 [DEBUG] [Thread-1451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:48:49.555 [INFO] [Thread-1451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:48:49.563 [DEBUG] [Thread-1451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:48:49.563 [DEBUG] [Thread-1451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:48:49.563 [DEBUG] [Thread-1451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:48:49.563 [DEBUG] [Thread-1451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:48:49.564 [DEBUG] [Thread-1451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:48:49.564 [DEBUG] [Thread-1451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:48:49.564 [DEBUG] [Thread-1451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:48:49.564 [DEBUG] [Thread-1451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:48:49.564 [DEBUG] [Thread-1451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:48:49.564 [DEBUG] [Thread-1451] [transport.py] [_log()] client lang: <none>
2025-11-25T15:48:49.564 [DEBUG] [Thread-1451] [transport.py] [_log()] server lang: <none>
2025-11-25T15:48:49.564 [DEBUG] [Thread-1451] [transport.py] [_log()] kex follows: False
2025-11-25T15:48:49.564 [DEBUG] [Thread-1451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:48:49.565 [DEBUG] [Thread-1451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:48:49.565 [DEBUG] [Thread-1451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:48:49.565 [DEBUG] [Thread-1451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:48:49.565 [DEBUG] [Thread-1451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:48:49.565 [DEBUG] [Thread-1451] [transport.py] [_log()] Compression: none
2025-11-25T15:48:49.565 [DEBUG] [Thread-1451] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:48:49.624 [DEBUG] [Thread-1451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:48:49.624 [DEBUG] [Thread-1451] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:48:49.625 [DEBUG] [Thread-1451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:48:49.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:48:49.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:48:49.680 [DEBUG] [Thread-1451] [transport.py] [_log()] userauth is OK
2025-11-25T15:48:49.680 [DEBUG] [Thread-1451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:48:49.680 [DEBUG] [Thread-1451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:48:49.680 [DEBUG] [Thread-1451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:48:49.680 [DEBUG] [Thread-1451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:48:49.705 [INFO] [Thread-1451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:48:49.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:48:49.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:48:50.520 [DEBUG] [Thread-1451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:48:50.520 [DEBUG] [Thread-1451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:48:50.567 [DEBUG] [Thread-1451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:48:50.568 [DEBUG] [Thread-1451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:48:50.576 [DEBUG] [Thread-1451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:48:50.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:48:50.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:48:50.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:48:50.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:48:50.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:48:50.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:48:50.612 [DEBUG] [Thread-1451] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:48:52.069 [DEBUG] [Thread-1453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:49:07.141 [DEBUG] [Thread-1454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:49:20.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:49:20.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:49:20.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
2025-11-25T15:49:21.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 48, 52), 38.17, 7.46, 0.0, 5.01, 26.77, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:49:21.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:48:52
2025-11-25T15:49:21.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:49:21.581 [DEBUG] [Thread-1455] [transport.py] [_log()] starting thread (client mode): 0x737e9ea0
2025-11-25T15:49:21.582 [DEBUG] [Thread-1455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:49:21.603 [DEBUG] [Thread-1455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:49:21.603 [INFO] [Thread-1455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] client lang: <none>
2025-11-25T15:49:21.606 [DEBUG] [Thread-1455] [transport.py] [_log()] server lang: <none>
2025-11-25T15:49:21.607 [DEBUG] [Thread-1455] [transport.py] [_log()] kex follows: False
2025-11-25T15:49:21.607 [DEBUG] [Thread-1455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:49:21.607 [DEBUG] [Thread-1455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:49:21.607 [DEBUG] [Thread-1455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:49:21.607 [DEBUG] [Thread-1455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:49:21.607 [DEBUG] [Thread-1455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:49:21.607 [DEBUG] [Thread-1455] [transport.py] [_log()] Compression: none
2025-11-25T15:49:21.607 [DEBUG] [Thread-1455] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:49:21.629 [DEBUG] [Thread-1455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:49:21.629 [DEBUG] [Thread-1455] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:49:21.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:49:21.630 [DEBUG] [Thread-1455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:49:21.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:49:21.633 [DEBUG] [Thread-1455] [transport.py] [_log()] userauth is OK
2025-11-25T15:49:21.633 [DEBUG] [Thread-1455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:49:21.633 [DEBUG] [Thread-1455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:49:21.633 [DEBUG] [Thread-1455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:49:21.633 [DEBUG] [Thread-1455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:49:21.669 [INFO] [Thread-1455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:49:21.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:49:22.181 [DEBUG] [Thread-1457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:49:22.311 [DEBUG] [Thread-1455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:49:22.312 [DEBUG] [Thread-1455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:49:22.312 [DEBUG] [Thread-1455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:49:22.353 [DEBUG] [Thread-1455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:49:22.353 [DEBUG] [Thread-1455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:49:22.357 [DEBUG] [Thread-1455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:49:22.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:49:22.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:49:22.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:49:22.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:49:22.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:49:22.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:49:22.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:49:22.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:49:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:49:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.575795 -999.00  +27.10   8.85     12   -4.40 1 1 1 1 1   888    0 32.94 45.24 ----- 7.0 8.8 303.4 17.6 34.3 -32.5 34.2 -31.4 35.8 -31.1 36.3 -31.1
2025-11-25T15:49:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:49:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:49:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.575795
2025-11-25T15:49:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:49:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:49:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:49:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:49:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:49:22.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:48:52', tmtdew=38.17, humidity=7.46, cloud=0.0, wind=5.01, temperature=26.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:49:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:49:22.384 [DEBUG] [Thread-1455] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:49:22.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:49:22.488 [DEBUG] [Thread-1459] [transport.py] [_log()] starting thread (client mode): 0x737e8310
2025-11-25T15:49:22.488 [DEBUG] [Thread-1459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:49:22.504 [DEBUG] [Thread-1459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:49:22.504 [INFO] [Thread-1459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:49:22.511 [DEBUG] [Thread-1459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] client lang: <none>
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] server lang: <none>
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] kex follows: False
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:49:22.512 [DEBUG] [Thread-1459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:49:22.513 [DEBUG] [Thread-1459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:49:22.513 [DEBUG] [Thread-1459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:49:22.513 [DEBUG] [Thread-1459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:49:22.513 [DEBUG] [Thread-1459] [transport.py] [_log()] Compression: none
2025-11-25T15:49:22.513 [DEBUG] [Thread-1459] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:49:22.570 [DEBUG] [Thread-1459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:49:22.570 [DEBUG] [Thread-1459] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:49:22.571 [DEBUG] [Thread-1459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:49:22.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:49:22.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:49:22.629 [DEBUG] [Thread-1459] [transport.py] [_log()] userauth is OK
2025-11-25T15:49:22.629 [DEBUG] [Thread-1459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:49:22.629 [DEBUG] [Thread-1459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:49:22.629 [DEBUG] [Thread-1459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:49:22.630 [DEBUG] [Thread-1459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:49:22.648 [INFO] [Thread-1459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:49:22.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:49:22.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:49:23.448 [DEBUG] [Thread-1459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:49:23.449 [DEBUG] [Thread-1459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:49:23.498 [DEBUG] [Thread-1459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:49:23.498 [DEBUG] [Thread-1459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:49:23.513 [DEBUG] [Thread-1459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:49:23.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:49:23.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:49:23.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:49:23.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:49:23.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:49:23.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:49:23.552 [DEBUG] [Thread-1459] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:49:37.228 [DEBUG] [Thread-1461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:49:48.030 [DEBUG] [Thread-1462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:49:52.291 [DEBUG] [Thread-1463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:49:53.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:49:53.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:49:53.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:49:54.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 49, 24), 38.25, 7.42, 0.0, 7.29, 26.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:49:54.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:49:24
2025-11-25T15:49:54.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:49:54.499 [DEBUG] [Thread-1464] [transport.py] [_log()] starting thread (client mode): 0x737e9d80
2025-11-25T15:49:54.499 [DEBUG] [Thread-1464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:49:54.518 [DEBUG] [Thread-1464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:49:54.519 [INFO] [Thread-1464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:49:54.522 [DEBUG] [Thread-1464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:49:54.522 [DEBUG] [Thread-1464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:49:54.522 [DEBUG] [Thread-1464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:49:54.522 [DEBUG] [Thread-1464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:49:54.523 [DEBUG] [Thread-1464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:49:54.523 [DEBUG] [Thread-1464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:49:54.523 [DEBUG] [Thread-1464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:49:54.523 [DEBUG] [Thread-1464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:49:54.523 [DEBUG] [Thread-1464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:49:54.523 [DEBUG] [Thread-1464] [transport.py] [_log()] client lang: <none>
2025-11-25T15:49:54.523 [DEBUG] [Thread-1464] [transport.py] [_log()] server lang: <none>
2025-11-25T15:49:54.523 [DEBUG] [Thread-1464] [transport.py] [_log()] kex follows: False
2025-11-25T15:49:54.523 [DEBUG] [Thread-1464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:49:54.524 [DEBUG] [Thread-1464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:49:54.524 [DEBUG] [Thread-1464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:49:54.524 [DEBUG] [Thread-1464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:49:54.524 [DEBUG] [Thread-1464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:49:54.524 [DEBUG] [Thread-1464] [transport.py] [_log()] Compression: none
2025-11-25T15:49:54.524 [DEBUG] [Thread-1464] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:49:54.537 [DEBUG] [Thread-1464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:49:54.538 [DEBUG] [Thread-1464] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:49:54.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:49:54.538 [DEBUG] [Thread-1464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:49:54.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:49:54.540 [DEBUG] [Thread-1464] [transport.py] [_log()] userauth is OK
2025-11-25T15:49:54.541 [DEBUG] [Thread-1464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:49:54.541 [DEBUG] [Thread-1464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:49:54.541 [DEBUG] [Thread-1464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:49:54.541 [DEBUG] [Thread-1464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:49:54.563 [INFO] [Thread-1464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:49:54.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:49:55.228 [DEBUG] [Thread-1464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:49:55.229 [DEBUG] [Thread-1464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:49:55.229 [DEBUG] [Thread-1464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:49:55.270 [DEBUG] [Thread-1464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:49:55.270 [DEBUG] [Thread-1464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:49:55.273 [DEBUG] [Thread-1464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:49:55.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:49:55.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:49:55.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:49:55.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:49:55.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:49:55.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:49:55.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:49:55.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:49:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:49:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.576142 -999.00  +27.00   4.86     12   -4.60 1 1 1 1 1   888    0 32.99 45.35 ----- 3.2 4.9 309.4 8.3 34.4 -31.7 34.3 -31.5 35.7 -29.5 36.4 -31.0
2025-11-25T15:49:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:49:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:49:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.576142
2025-11-25T15:49:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:49:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:49:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:49:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:49:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:49:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:49:24', tmtdew=38.25, humidity=7.42, cloud=0.0, wind=7.29, temperature=26.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:49:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:49:55.295 [DEBUG] [Thread-1464] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:49:55.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:49:55.386 [DEBUG] [Thread-1467] [transport.py] [_log()] starting thread (client mode): 0x737e9c60
2025-11-25T15:49:55.386 [DEBUG] [Thread-1467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:49:55.401 [DEBUG] [Thread-1467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:49:55.401 [INFO] [Thread-1467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:49:55.409 [DEBUG] [Thread-1467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:49:55.409 [DEBUG] [Thread-1467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:49:55.409 [DEBUG] [Thread-1467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:49:55.409 [DEBUG] [Thread-1467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:49:55.409 [DEBUG] [Thread-1467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:49:55.409 [DEBUG] [Thread-1467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:49:55.410 [DEBUG] [Thread-1467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:49:55.410 [DEBUG] [Thread-1467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:49:55.410 [DEBUG] [Thread-1467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:49:55.410 [DEBUG] [Thread-1467] [transport.py] [_log()] client lang: <none>
2025-11-25T15:49:55.410 [DEBUG] [Thread-1467] [transport.py] [_log()] server lang: <none>
2025-11-25T15:49:55.410 [DEBUG] [Thread-1467] [transport.py] [_log()] kex follows: False
2025-11-25T15:49:55.410 [DEBUG] [Thread-1467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:49:55.410 [DEBUG] [Thread-1467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:49:55.411 [DEBUG] [Thread-1467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:49:55.411 [DEBUG] [Thread-1467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:49:55.411 [DEBUG] [Thread-1467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:49:55.411 [DEBUG] [Thread-1467] [transport.py] [_log()] Compression: none
2025-11-25T15:49:55.411 [DEBUG] [Thread-1467] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:49:55.471 [DEBUG] [Thread-1467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:49:55.472 [DEBUG] [Thread-1467] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:49:55.473 [DEBUG] [Thread-1467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:49:55.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:49:55.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:49:55.530 [DEBUG] [Thread-1467] [transport.py] [_log()] userauth is OK
2025-11-25T15:49:55.531 [DEBUG] [Thread-1467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:49:55.531 [DEBUG] [Thread-1467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:49:55.531 [DEBUG] [Thread-1467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:49:55.532 [DEBUG] [Thread-1467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:49:55.550 [INFO] [Thread-1467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:49:55.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:49:55.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:49:56.351 [DEBUG] [Thread-1467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:49:56.351 [DEBUG] [Thread-1467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:49:56.399 [DEBUG] [Thread-1467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:49:56.399 [DEBUG] [Thread-1467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:49:56.408 [DEBUG] [Thread-1467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:49:56.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:49:56.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:49:56.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:49:56.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:49:56.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:49:56.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:49:56.444 [DEBUG] [Thread-1467] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:50:07.334 [DEBUG] [Thread-1469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:50:22.412 [DEBUG] [Thread-1470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:50:26.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:50:26.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:50:26.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:50:27.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 49, 56), 38.31, 7.41, 0.0, 10.15, 26.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:50:27.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:49:56
2025-11-25T15:50:27.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:50:27.410 [DEBUG] [Thread-1471] [transport.py] [_log()] starting thread (client mode): 0x7378cb80
2025-11-25T15:50:27.411 [DEBUG] [Thread-1471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:50:27.427 [DEBUG] [Thread-1471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:50:27.427 [INFO] [Thread-1471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:50:27.430 [DEBUG] [Thread-1471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:50:27.430 [DEBUG] [Thread-1471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:50:27.430 [DEBUG] [Thread-1471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:50:27.430 [DEBUG] [Thread-1471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:50:27.430 [DEBUG] [Thread-1471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:50:27.430 [DEBUG] [Thread-1471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] client lang: <none>
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] server lang: <none>
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] kex follows: False
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] Compression: none
2025-11-25T15:50:27.431 [DEBUG] [Thread-1471] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:50:27.449 [DEBUG] [Thread-1471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:50:27.449 [DEBUG] [Thread-1471] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:50:27.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:50:27.450 [DEBUG] [Thread-1471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:50:27.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:50:27.452 [DEBUG] [Thread-1471] [transport.py] [_log()] userauth is OK
2025-11-25T15:50:27.452 [DEBUG] [Thread-1471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:50:27.452 [DEBUG] [Thread-1471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:50:27.452 [DEBUG] [Thread-1471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:50:27.452 [DEBUG] [Thread-1471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:50:27.470 [INFO] [Thread-1471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:50:27.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:50:28.114 [DEBUG] [Thread-1471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:50:28.114 [DEBUG] [Thread-1471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:50:28.114 [DEBUG] [Thread-1471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:50:28.154 [DEBUG] [Thread-1471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:50:28.155 [DEBUG] [Thread-1471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:50:28.158 [DEBUG] [Thread-1471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:50:28.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:50:28.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:50:28.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:50:28.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:50:28.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:50:28.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:50:28.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:50:28.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:50:28.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:50:28.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.576489 -999.00  +27.10   6.18     12   -4.50 1 1 1 1 1   888    0 33.05 50.39 ----- 4.3 6.2 329.2 6.6 34.5 -32.7 34.4 -31.1 35.8 -29.8 36.5 -30.7
2025-11-25T15:50:28.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:50:28.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:50:28.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.576489
2025-11-25T15:50:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:50:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:50:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:50:28.184 [DEBUG] [Thread-1471] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:50:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:50:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:50:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:49:56', tmtdew=38.31, humidity=7.41, cloud=0.0, wind=10.15, temperature=26.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:50:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:50:28.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:50:28.287 [DEBUG] [Thread-1474] [transport.py] [_log()] starting thread (client mode): 0x7378ef50
2025-11-25T15:50:28.288 [DEBUG] [Thread-1474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:50:28.302 [DEBUG] [Thread-1474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:50:28.302 [INFO] [Thread-1474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:50:28.310 [DEBUG] [Thread-1474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:50:28.310 [DEBUG] [Thread-1474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:50:28.310 [DEBUG] [Thread-1474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:50:28.311 [DEBUG] [Thread-1474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:50:28.311 [DEBUG] [Thread-1474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:50:28.311 [DEBUG] [Thread-1474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:50:28.311 [DEBUG] [Thread-1474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:50:28.311 [DEBUG] [Thread-1474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:50:28.311 [DEBUG] [Thread-1474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:50:28.311 [DEBUG] [Thread-1474] [transport.py] [_log()] client lang: <none>
2025-11-25T15:50:28.312 [DEBUG] [Thread-1474] [transport.py] [_log()] server lang: <none>
2025-11-25T15:50:28.312 [DEBUG] [Thread-1474] [transport.py] [_log()] kex follows: False
2025-11-25T15:50:28.312 [DEBUG] [Thread-1474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:50:28.312 [DEBUG] [Thread-1474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:50:28.312 [DEBUG] [Thread-1474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:50:28.312 [DEBUG] [Thread-1474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:50:28.312 [DEBUG] [Thread-1474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:50:28.312 [DEBUG] [Thread-1474] [transport.py] [_log()] Compression: none
2025-11-25T15:50:28.312 [DEBUG] [Thread-1474] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:50:28.370 [DEBUG] [Thread-1474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:50:28.371 [DEBUG] [Thread-1474] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:50:28.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:50:28.372 [DEBUG] [Thread-1474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:50:28.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:50:28.426 [DEBUG] [Thread-1474] [transport.py] [_log()] userauth is OK
2025-11-25T15:50:28.426 [DEBUG] [Thread-1474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:50:28.426 [DEBUG] [Thread-1474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:50:28.426 [DEBUG] [Thread-1474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:50:28.427 [DEBUG] [Thread-1474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:50:28.444 [INFO] [Thread-1474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:50:28.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:50:28.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:50:29.257 [DEBUG] [Thread-1474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:50:29.257 [DEBUG] [Thread-1474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:50:29.305 [DEBUG] [Thread-1474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:50:29.305 [DEBUG] [Thread-1474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:50:29.313 [DEBUG] [Thread-1474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:50:29.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:50:29.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:50:29.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:50:29.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:50:29.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:50:29.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:50:29.348 [DEBUG] [Thread-1474] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:50:37.455 [DEBUG] [Thread-1476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:50:48.772 [DEBUG] [Thread-1477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:50:52.522 [DEBUG] [Thread-1478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:50:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:50:59.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:50:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:51:00.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 50, 28), 38.58, 7.28, 0.0, 10.46, 26.99, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:51:00.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:50:28
2025-11-25T15:51:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:51:00.345 [DEBUG] [Thread-1479] [transport.py] [_log()] starting thread (client mode): 0x737eb400
2025-11-25T15:51:00.345 [DEBUG] [Thread-1479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:51:00.366 [DEBUG] [Thread-1479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:51:00.366 [INFO] [Thread-1479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] client lang: <none>
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] server lang: <none>
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] kex follows: False
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] Compression: none
2025-11-25T15:51:00.370 [DEBUG] [Thread-1479] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:51:00.385 [DEBUG] [Thread-1479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:51:00.385 [DEBUG] [Thread-1479] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:51:00.385 [DEBUG] [Thread-1479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:51:00.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:51:00.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:51:00.386 [DEBUG] [Thread-1479] [transport.py] [_log()] userauth is OK
2025-11-25T15:51:00.386 [DEBUG] [Thread-1479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:51:00.386 [DEBUG] [Thread-1479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:51:00.386 [DEBUG] [Thread-1479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:51:00.386 [DEBUG] [Thread-1479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:51:00.400 [INFO] [Thread-1479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:51:00.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:51:01.055 [DEBUG] [Thread-1479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:51:01.055 [DEBUG] [Thread-1479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:51:01.056 [DEBUG] [Thread-1479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:51:01.096 [DEBUG] [Thread-1479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:51:01.096 [DEBUG] [Thread-1479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:51:01.099 [DEBUG] [Thread-1479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:51:01.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:51:01.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:51:01.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:51:01.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:51:01.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:51:01.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:51:01.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:51:01.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.576837 -999.00  +27.30   6.67     12   -4.40 1 1 1 1 1   888    0 33.50 49.56 ----- 7.2 6.7 317.1 9.7 34.6 -31.9 34.5 -31.5 35.9 -29.2 36.4 -31.1
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.576837
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:51:01.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:50:28', tmtdew=38.58, humidity=7.28, cloud=0.0, wind=10.46, temperature=26.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:50:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:51:01.118 [DEBUG] [Thread-1479] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:51:01.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:51:01.214 [DEBUG] [Thread-1482] [transport.py] [_log()] starting thread (client mode): 0x737ea110
2025-11-25T15:51:01.214 [DEBUG] [Thread-1482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:51:01.229 [DEBUG] [Thread-1482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:51:01.229 [INFO] [Thread-1482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:51:01.237 [DEBUG] [Thread-1482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:51:01.237 [DEBUG] [Thread-1482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:51:01.237 [DEBUG] [Thread-1482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] client lang: <none>
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] server lang: <none>
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] kex follows: False
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] Compression: none
2025-11-25T15:51:01.238 [DEBUG] [Thread-1482] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:51:01.292 [DEBUG] [Thread-1482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:51:01.292 [DEBUG] [Thread-1482] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:51:01.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:51:01.292 [DEBUG] [Thread-1482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:51:01.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:51:01.349 [DEBUG] [Thread-1482] [transport.py] [_log()] userauth is OK
2025-11-25T15:51:01.349 [DEBUG] [Thread-1482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:51:01.349 [DEBUG] [Thread-1482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:51:01.349 [DEBUG] [Thread-1482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:51:01.349 [DEBUG] [Thread-1482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:51:01.366 [INFO] [Thread-1482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:51:01.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:51:01.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:51:02.193 [DEBUG] [Thread-1482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:51:02.193 [DEBUG] [Thread-1482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:51:02.241 [DEBUG] [Thread-1482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:51:02.241 [DEBUG] [Thread-1482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:51:02.249 [DEBUG] [Thread-1482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:51:02.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:51:02.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:51:02.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:51:02.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:51:02.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:51:02.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:51:02.295 [DEBUG] [Thread-1482] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:51:07.563 [DEBUG] [Thread-1484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:51:22.626 [DEBUG] [Thread-1485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:51:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:51:32.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:51:32.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:51:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 51), 38.6, 7.28, 0.0, 8.91, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:51:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:51:00
2025-11-25T15:51:33.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:51:33.253 [DEBUG] [Thread-1486] [transport.py] [_log()] starting thread (client mode): 0x7378f190
2025-11-25T15:51:33.253 [DEBUG] [Thread-1486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:51:33.274 [DEBUG] [Thread-1486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:51:33.274 [INFO] [Thread-1486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:51:33.276 [DEBUG] [Thread-1486] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:51:33.276 [DEBUG] [Thread-1486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:51:33.276 [DEBUG] [Thread-1486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:51:33.276 [DEBUG] [Thread-1486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:51:33.276 [DEBUG] [Thread-1486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:51:33.276 [DEBUG] [Thread-1486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:51:33.276 [DEBUG] [Thread-1486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] client lang: <none>
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] server lang: <none>
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] kex follows: False
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] Compression: none
2025-11-25T15:51:33.277 [DEBUG] [Thread-1486] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:51:33.290 [DEBUG] [Thread-1486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:51:33.291 [DEBUG] [Thread-1486] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:51:33.291 [DEBUG] [Thread-1486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:51:33.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:51:33.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:51:33.293 [DEBUG] [Thread-1486] [transport.py] [_log()] userauth is OK
2025-11-25T15:51:33.293 [DEBUG] [Thread-1486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:51:33.293 [DEBUG] [Thread-1486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:51:33.293 [DEBUG] [Thread-1486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:51:33.294 [DEBUG] [Thread-1486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:51:33.318 [INFO] [Thread-1486] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:51:33.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:51:33.986 [DEBUG] [Thread-1486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:51:33.987 [DEBUG] [Thread-1486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:51:33.987 [DEBUG] [Thread-1486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:51:34.027 [DEBUG] [Thread-1486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:51:34.027 [DEBUG] [Thread-1486] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:51:34.043 [DEBUG] [Thread-1486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:51:34.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:51:34.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:51:34.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:51:34.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:51:34.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:51:34.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:51:34.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.577184 -999.00  +27.40   8.32     12   -4.40 1 1 1 1 1   888    0 33.05 47.94 ----- 11.4 8.3 356.5 9.2 34.6 -32.3 34.5 -32.5 35.9 -29.8 36.5 -31.3
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.577184
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:51:00', tmtdew=38.6, humidity=7.28, cloud=0.0, wind=8.91, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:51:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:51:34.062 [DEBUG] [Thread-1486] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:51:34.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:51:34.155 [DEBUG] [Thread-1489] [transport.py] [_log()] starting thread (client mode): 0x737e9c00
2025-11-25T15:51:34.155 [DEBUG] [Thread-1489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:51:34.173 [DEBUG] [Thread-1489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:51:34.173 [INFO] [Thread-1489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] client lang: <none>
2025-11-25T15:51:34.184 [DEBUG] [Thread-1489] [transport.py] [_log()] server lang: <none>
2025-11-25T15:51:34.185 [DEBUG] [Thread-1489] [transport.py] [_log()] kex follows: False
2025-11-25T15:51:34.185 [DEBUG] [Thread-1489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:51:34.185 [DEBUG] [Thread-1489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:51:34.185 [DEBUG] [Thread-1489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:51:34.185 [DEBUG] [Thread-1489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:51:34.185 [DEBUG] [Thread-1489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:51:34.185 [DEBUG] [Thread-1489] [transport.py] [_log()] Compression: none
2025-11-25T15:51:34.185 [DEBUG] [Thread-1489] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:51:34.239 [DEBUG] [Thread-1489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:51:34.240 [DEBUG] [Thread-1489] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:51:34.240 [DEBUG] [Thread-1489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:51:34.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:51:34.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:51:34.297 [DEBUG] [Thread-1489] [transport.py] [_log()] userauth is OK
2025-11-25T15:51:34.297 [DEBUG] [Thread-1489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:51:34.297 [DEBUG] [Thread-1489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:51:34.297 [DEBUG] [Thread-1489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:51:34.297 [DEBUG] [Thread-1489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:51:34.314 [INFO] [Thread-1489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:51:34.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:51:34.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:51:35.128 [DEBUG] [Thread-1489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:51:35.129 [DEBUG] [Thread-1489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:51:35.176 [DEBUG] [Thread-1489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:51:35.176 [DEBUG] [Thread-1489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:51:35.184 [DEBUG] [Thread-1489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:51:35.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:51:35.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:51:35.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:51:35.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:51:35.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:51:35.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:51:35.216 [DEBUG] [Thread-1489] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:51:37.667 [DEBUG] [Thread-1491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:51:49.522 [DEBUG] [Thread-1492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:51:52.725 [DEBUG] [Thread-1493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:52:05.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:52:05.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:52:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:52:05.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 51, 33), 40.4, 6.39, 0.0, 17.26, 28.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:52:05.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:51:33
2025-11-25T15:52:06.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:52:06.192 [DEBUG] [Thread-1494] [transport.py] [_log()] starting thread (client mode): 0x761da5c0
2025-11-25T15:52:06.192 [DEBUG] [Thread-1494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:52:06.212 [DEBUG] [Thread-1494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:52:06.212 [INFO] [Thread-1494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] client lang: <none>
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] server lang: <none>
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] kex follows: False
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] Compression: none
2025-11-25T15:52:06.215 [DEBUG] [Thread-1494] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:52:06.233 [DEBUG] [Thread-1494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:52:06.233 [DEBUG] [Thread-1494] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:52:06.233 [DEBUG] [Thread-1494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:52:06.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:52:06.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:52:06.234 [DEBUG] [Thread-1494] [transport.py] [_log()] userauth is OK
2025-11-25T15:52:06.234 [DEBUG] [Thread-1494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:52:06.234 [DEBUG] [Thread-1494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:52:06.234 [DEBUG] [Thread-1494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:52:06.234 [DEBUG] [Thread-1494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:52:06.265 [INFO] [Thread-1494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:52:06.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:52:06.938 [DEBUG] [Thread-1494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:52:06.938 [DEBUG] [Thread-1494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:52:06.938 [DEBUG] [Thread-1494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:52:06.979 [DEBUG] [Thread-1494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:52:06.979 [DEBUG] [Thread-1494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:52:06.982 [DEBUG] [Thread-1494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:52:06.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:52:06.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:52:06.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:52:06.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:52:07.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:52:07.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:52:07.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:52:07.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.577531 -999.00  +27.10  17.22     11   -4.80 1 1 1 1 1   888    0 33.26 46.52 ----- 19.1 17.2 15.2 19.5 34.6 -33.7 34.2 -33.5 35.9 -30.8 36.1 -31.9
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.577531
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:52:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:51:33', tmtdew=40.4, humidity=6.39, cloud=0.0, wind=17.26, temperature=28.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:51:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:52:07.004 [DEBUG] [Thread-1494] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:52:07.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:52:07.105 [DEBUG] [Thread-1497] [transport.py] [_log()] starting thread (client mode): 0x7378dab0
2025-11-25T15:52:07.105 [DEBUG] [Thread-1497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:52:07.120 [DEBUG] [Thread-1497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:52:07.120 [INFO] [Thread-1497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:52:07.127 [DEBUG] [Thread-1497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:52:07.127 [DEBUG] [Thread-1497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:52:07.127 [DEBUG] [Thread-1497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:52:07.127 [DEBUG] [Thread-1497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] client lang: <none>
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] server lang: <none>
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] kex follows: False
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] Compression: none
2025-11-25T15:52:07.128 [DEBUG] [Thread-1497] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:52:07.183 [DEBUG] [Thread-1497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:52:07.183 [DEBUG] [Thread-1497] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:52:07.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:52:07.183 [DEBUG] [Thread-1497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:52:07.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:52:07.240 [DEBUG] [Thread-1497] [transport.py] [_log()] userauth is OK
2025-11-25T15:52:07.240 [DEBUG] [Thread-1497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:52:07.240 [DEBUG] [Thread-1497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:52:07.240 [DEBUG] [Thread-1497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:52:07.240 [DEBUG] [Thread-1497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:52:07.254 [INFO] [Thread-1497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:52:07.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:52:07.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:52:07.772 [DEBUG] [Thread-1499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:52:08.110 [DEBUG] [Thread-1497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:52:08.110 [DEBUG] [Thread-1497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:52:08.158 [DEBUG] [Thread-1497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:52:08.158 [DEBUG] [Thread-1497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:52:08.167 [DEBUG] [Thread-1497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:52:08.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:52:08.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:52:08.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:52:08.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:52:08.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:52:08.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:52:08.203 [DEBUG] [Thread-1497] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:52:22.828 [DEBUG] [Thread-1500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:52:37.876 [DEBUG] [Thread-1501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:52:38.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:52:38.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:52:38.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:52:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 52, 5), 38.94, 7.21, 0.0, 12.65, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:52:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:52:05
2025-11-25T15:52:39.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:52:39.243 [DEBUG] [Thread-1502] [transport.py] [_log()] starting thread (client mode): 0x7378d630
2025-11-25T15:52:39.243 [DEBUG] [Thread-1502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:52:39.263 [DEBUG] [Thread-1502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:52:39.263 [INFO] [Thread-1502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:52:39.266 [DEBUG] [Thread-1502] [transport.py] [_log()] client lang: <none>
2025-11-25T15:52:39.267 [DEBUG] [Thread-1502] [transport.py] [_log()] server lang: <none>
2025-11-25T15:52:39.267 [DEBUG] [Thread-1502] [transport.py] [_log()] kex follows: False
2025-11-25T15:52:39.267 [DEBUG] [Thread-1502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:52:39.267 [DEBUG] [Thread-1502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:52:39.267 [DEBUG] [Thread-1502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:52:39.267 [DEBUG] [Thread-1502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:52:39.267 [DEBUG] [Thread-1502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:52:39.267 [DEBUG] [Thread-1502] [transport.py] [_log()] Compression: none
2025-11-25T15:52:39.267 [DEBUG] [Thread-1502] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:52:39.282 [DEBUG] [Thread-1502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:52:39.282 [DEBUG] [Thread-1502] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:52:39.282 [DEBUG] [Thread-1502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:52:39.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:52:39.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:52:39.283 [DEBUG] [Thread-1502] [transport.py] [_log()] userauth is OK
2025-11-25T15:52:39.283 [DEBUG] [Thread-1502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:52:39.283 [DEBUG] [Thread-1502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:52:39.283 [DEBUG] [Thread-1502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:52:39.283 [DEBUG] [Thread-1502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:52:39.292 [INFO] [Thread-1502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:52:39.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:52:39.896 [DEBUG] [Thread-1502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:52:39.896 [DEBUG] [Thread-1502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:52:39.896 [DEBUG] [Thread-1502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:52:39.937 [DEBUG] [Thread-1502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:52:39.937 [DEBUG] [Thread-1502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:52:39.939 [DEBUG] [Thread-1502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:52:39.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:52:39.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:52:39.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:52:39.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:52:39.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:52:39.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:52:39.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:52:39.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:52:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:52:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.577878 -999.00  +26.90  12.70     12   -4.70 1 1 1 1 1   888    0 32.72 43.68 ----- 16.9 12.7 50.0 21.3 34.4 -33.1 34.1 -32.7 35.5 -30.5 35.9 -30.9
2025-11-25T15:52:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:52:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:52:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.577878
2025-11-25T15:52:39.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:52:39.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:52:39.964 [DEBUG] [Thread-1502] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:52:39.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:52:39.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:52:39.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:52:39.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:52:05', tmtdew=38.94, humidity=7.21, cloud=0.0, wind=12.65, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:52:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:52:40.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:52:40.072 [DEBUG] [Thread-1505] [transport.py] [_log()] starting thread (client mode): 0x7378cfa0
2025-11-25T15:52:40.072 [DEBUG] [Thread-1505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:52:40.087 [DEBUG] [Thread-1505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:52:40.088 [INFO] [Thread-1505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:52:40.095 [DEBUG] [Thread-1505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] client lang: <none>
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] server lang: <none>
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] kex follows: False
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:52:40.096 [DEBUG] [Thread-1505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:52:40.097 [DEBUG] [Thread-1505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:52:40.097 [DEBUG] [Thread-1505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:52:40.097 [DEBUG] [Thread-1505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:52:40.097 [DEBUG] [Thread-1505] [transport.py] [_log()] Compression: none
2025-11-25T15:52:40.097 [DEBUG] [Thread-1505] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:52:40.156 [DEBUG] [Thread-1505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:52:40.157 [DEBUG] [Thread-1505] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:52:40.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:52:40.158 [DEBUG] [Thread-1505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:52:40.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:52:40.212 [DEBUG] [Thread-1505] [transport.py] [_log()] userauth is OK
2025-11-25T15:52:40.213 [DEBUG] [Thread-1505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:52:40.213 [DEBUG] [Thread-1505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:52:40.213 [DEBUG] [Thread-1505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:52:40.213 [DEBUG] [Thread-1505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:52:40.231 [INFO] [Thread-1505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:52:40.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:52:40.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:52:41.039 [DEBUG] [Thread-1505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:52:41.040 [DEBUG] [Thread-1505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:52:41.088 [DEBUG] [Thread-1505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:52:41.088 [DEBUG] [Thread-1505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:52:41.097 [DEBUG] [Thread-1505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:52:41.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:52:41.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:52:41.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:52:41.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:52:41.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:52:41.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:52:41.136 [DEBUG] [Thread-1505] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:52:50.018 [DEBUG] [Thread-1507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:52:52.919 [DEBUG] [Thread-1508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:53:07.977 [DEBUG] [Thread-1509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:53:11.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:53:11.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:53:11.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:53:11.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 52, 37), 39.2, 6.64, 0.0, 16.04, 27.6, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:53:11.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:52:37
2025-11-25T15:53:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:53:12.164 [DEBUG] [Thread-1510] [transport.py] [_log()] starting thread (client mode): 0x737ea380
2025-11-25T15:53:12.164 [DEBUG] [Thread-1510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:53:12.183 [DEBUG] [Thread-1510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:53:12.183 [INFO] [Thread-1510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] client lang: <none>
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] server lang: <none>
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] kex follows: False
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] Compression: none
2025-11-25T15:53:12.187 [DEBUG] [Thread-1510] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:53:12.205 [DEBUG] [Thread-1510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:53:12.205 [DEBUG] [Thread-1510] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:53:12.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:53:12.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:53:12.207 [DEBUG] [Thread-1510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:53:12.207 [DEBUG] [Thread-1510] [transport.py] [_log()] userauth is OK
2025-11-25T15:53:12.207 [DEBUG] [Thread-1510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:53:12.207 [DEBUG] [Thread-1510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:53:12.207 [DEBUG] [Thread-1510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:53:12.207 [DEBUG] [Thread-1510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:53:12.222 [INFO] [Thread-1510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:53:12.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:53:12.876 [DEBUG] [Thread-1510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:53:12.877 [DEBUG] [Thread-1510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:53:12.877 [DEBUG] [Thread-1510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:53:12.918 [DEBUG] [Thread-1510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:53:12.918 [DEBUG] [Thread-1510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:53:12.922 [DEBUG] [Thread-1510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:53:12.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:53:12.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:53:12.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:53:12.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:53:12.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:53:12.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:53:12.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:53:12.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:53:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:53:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.578226 -999.00  +27.30  18.02     11   -4.60 1 1 1 1 1   888    0 33.03 41.93 ----- 18.6 18.0 53.2 20.6 34.3 -31.9 34.0 -33.1 35.4 -30.3 35.8 -30.8
2025-11-25T15:53:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:53:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:53:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.578226
2025-11-25T15:53:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:53:12.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:53:12.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:53:12.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:53:12.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:53:12.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:52:37', tmtdew=39.2, humidity=6.64, cloud=0.0, wind=16.04, temperature=27.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:52:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:53:12.949 [DEBUG] [Thread-1510] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:53:13.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:53:13.051 [DEBUG] [Thread-1513] [transport.py] [_log()] starting thread (client mode): 0x761d9900
2025-11-25T15:53:13.051 [DEBUG] [Thread-1513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:53:13.066 [DEBUG] [Thread-1513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:53:13.066 [INFO] [Thread-1513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:53:13.073 [DEBUG] [Thread-1513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:53:13.074 [DEBUG] [Thread-1513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:53:13.074 [DEBUG] [Thread-1513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:53:13.074 [DEBUG] [Thread-1513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:53:13.074 [DEBUG] [Thread-1513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:53:13.074 [DEBUG] [Thread-1513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:53:13.074 [DEBUG] [Thread-1513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:53:13.074 [DEBUG] [Thread-1513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:53:13.075 [DEBUG] [Thread-1513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:53:13.075 [DEBUG] [Thread-1513] [transport.py] [_log()] client lang: <none>
2025-11-25T15:53:13.075 [DEBUG] [Thread-1513] [transport.py] [_log()] server lang: <none>
2025-11-25T15:53:13.075 [DEBUG] [Thread-1513] [transport.py] [_log()] kex follows: False
2025-11-25T15:53:13.075 [DEBUG] [Thread-1513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:53:13.075 [DEBUG] [Thread-1513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:53:13.075 [DEBUG] [Thread-1513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:53:13.075 [DEBUG] [Thread-1513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:53:13.076 [DEBUG] [Thread-1513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:53:13.076 [DEBUG] [Thread-1513] [transport.py] [_log()] Compression: none
2025-11-25T15:53:13.076 [DEBUG] [Thread-1513] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:53:13.141 [DEBUG] [Thread-1513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:53:13.142 [DEBUG] [Thread-1513] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:53:13.142 [DEBUG] [Thread-1513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:53:13.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:53:13.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:53:13.196 [DEBUG] [Thread-1513] [transport.py] [_log()] userauth is OK
2025-11-25T15:53:13.197 [DEBUG] [Thread-1513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:53:13.197 [DEBUG] [Thread-1513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:53:13.197 [DEBUG] [Thread-1513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:53:13.198 [DEBUG] [Thread-1513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:53:13.216 [INFO] [Thread-1513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:53:13.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:53:13.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:53:14.025 [DEBUG] [Thread-1513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:53:14.025 [DEBUG] [Thread-1513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:53:14.073 [DEBUG] [Thread-1513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:53:14.073 [DEBUG] [Thread-1513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:53:14.082 [DEBUG] [Thread-1513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:53:14.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:53:14.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:53:14.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:53:14.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:53:14.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:53:14.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:53:14.119 [DEBUG] [Thread-1513] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:53:23.024 [DEBUG] [Thread-1515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:53:38.089 [DEBUG] [Thread-1516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:53:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:53:44.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:53:44.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:53:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 53, 41), 39.22, 6.73, 0.0, 14.96, 27.55, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:53:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:53:41
2025-11-25T15:53:44.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:53:45.091 [DEBUG] [Thread-1517] [transport.py] [_log()] starting thread (client mode): 0x7378e860
2025-11-25T15:53:45.091 [DEBUG] [Thread-1517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:53:45.111 [DEBUG] [Thread-1517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:53:45.111 [INFO] [Thread-1517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:53:45.114 [DEBUG] [Thread-1517] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:53:45.114 [DEBUG] [Thread-1517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] client lang: <none>
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] server lang: <none>
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] kex follows: False
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] Compression: none
2025-11-25T15:53:45.115 [DEBUG] [Thread-1517] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:53:45.132 [DEBUG] [Thread-1517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:53:45.132 [DEBUG] [Thread-1517] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:53:45.133 [DEBUG] [Thread-1517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:53:45.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:53:45.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:53:45.135 [DEBUG] [Thread-1517] [transport.py] [_log()] userauth is OK
2025-11-25T15:53:45.135 [DEBUG] [Thread-1517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:53:45.135 [DEBUG] [Thread-1517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:53:45.135 [DEBUG] [Thread-1517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:53:45.136 [DEBUG] [Thread-1517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:53:45.159 [INFO] [Thread-1517] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:53:45.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:53:45.811 [DEBUG] [Thread-1517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:53:45.811 [DEBUG] [Thread-1517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:53:45.812 [DEBUG] [Thread-1517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:53:45.852 [DEBUG] [Thread-1517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:53:45.852 [DEBUG] [Thread-1517] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:53:45.856 [DEBUG] [Thread-1517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:53:45.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:53:45.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:53:45.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:53:45.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:53:45.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:53:45.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:53:45.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:53:45.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:53:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:53:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.578920 -999.00  +27.50  11.46     11   -4.70 1 1 1 1 1   888    0 33.07 39.65 ----- 20.4 11.5 35.0 16.8 34.1 -31.8 33.8 -33.5 35.2 -29.1 35.5 -31.6
2025-11-25T15:53:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:53:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:53:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.578920
2025-11-25T15:53:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:53:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:53:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:53:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:53:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:53:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:53:41', tmtdew=39.22, humidity=6.73, cloud=0.0, wind=14.96, temperature=27.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:53:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:53:45.885 [DEBUG] [Thread-1517] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:53:45.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:53:45.989 [DEBUG] [Thread-1520] [transport.py] [_log()] starting thread (client mode): 0x7378d2d0
2025-11-25T15:53:45.990 [DEBUG] [Thread-1520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:53:46.004 [DEBUG] [Thread-1520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:53:46.004 [INFO] [Thread-1520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:53:46.012 [DEBUG] [Thread-1520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:53:46.012 [DEBUG] [Thread-1520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:53:46.012 [DEBUG] [Thread-1520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:53:46.012 [DEBUG] [Thread-1520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:53:46.012 [DEBUG] [Thread-1520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:53:46.012 [DEBUG] [Thread-1520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:53:46.012 [DEBUG] [Thread-1520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] client lang: <none>
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] server lang: <none>
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] kex follows: False
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] Compression: none
2025-11-25T15:53:46.013 [DEBUG] [Thread-1520] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:53:46.072 [DEBUG] [Thread-1520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:53:46.072 [DEBUG] [Thread-1520] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:53:46.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:53:46.073 [DEBUG] [Thread-1520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:53:46.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:53:46.128 [DEBUG] [Thread-1520] [transport.py] [_log()] userauth is OK
2025-11-25T15:53:46.128 [DEBUG] [Thread-1520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:53:46.128 [DEBUG] [Thread-1520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:53:46.129 [DEBUG] [Thread-1520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:53:46.129 [DEBUG] [Thread-1520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:53:46.148 [INFO] [Thread-1520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:53:46.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:53:46.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:53:46.974 [DEBUG] [Thread-1520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:53:46.975 [DEBUG] [Thread-1520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:53:47.023 [DEBUG] [Thread-1520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:53:47.023 [DEBUG] [Thread-1520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:53:47.032 [DEBUG] [Thread-1520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:53:47.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:53:47.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:53: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
2025-11-25T15:53:47.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:53:47.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:53:47.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:53:47.069 [DEBUG] [Thread-1520] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:53:50.759 [DEBUG] [Thread-1522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:53:53.133 [DEBUG] [Thread-1523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:54:08.199 [DEBUG] [Thread-1524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:54:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:54:17.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:54:17.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:54:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 54, 13), 39.24, 6.71, 0.0, 11.38, 27.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:54:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:54:13
2025-11-25T15:54:17.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:54:18.040 [DEBUG] [Thread-1525] [transport.py] [_log()] starting thread (client mode): 0x7378e170
2025-11-25T15:54:18.041 [DEBUG] [Thread-1525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:54:18.061 [DEBUG] [Thread-1525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:54:18.061 [INFO] [Thread-1525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:54:18.064 [DEBUG] [Thread-1525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:54:18.064 [DEBUG] [Thread-1525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] client lang: <none>
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] server lang: <none>
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] kex follows: False
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] Compression: none
2025-11-25T15:54:18.065 [DEBUG] [Thread-1525] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:54:18.082 [DEBUG] [Thread-1525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:54:18.083 [DEBUG] [Thread-1525] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:54:18.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:54:18.084 [DEBUG] [Thread-1525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:54:18.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:54:18.086 [DEBUG] [Thread-1525] [transport.py] [_log()] userauth is OK
2025-11-25T15:54:18.086 [DEBUG] [Thread-1525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:54:18.086 [DEBUG] [Thread-1525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:54:18.086 [DEBUG] [Thread-1525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:54:18.086 [DEBUG] [Thread-1525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:54:18.111 [INFO] [Thread-1525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:54:18.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:54:18.771 [DEBUG] [Thread-1525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:54:18.772 [DEBUG] [Thread-1525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:54:18.772 [DEBUG] [Thread-1525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:54:18.813 [DEBUG] [Thread-1525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:54:18.813 [DEBUG] [Thread-1525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:54:18.817 [DEBUG] [Thread-1525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:54:18.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:54:18.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:54:18.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:54:18.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:54:18.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:54:18.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:54:18.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:54:18.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:54:18.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:54:18.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.579267 -999.00  +27.10  20.10     11   -4.80 1 1 1 1 1   888    0 32.81 35.32 ----- 21.5 20.1 58.8 22.5 34.0 -33.5 33.7 -32.7 35.0 -32.3 35.3 -31.9
2025-11-25T15:54:18.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:54:18.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:54:18.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.579267
2025-11-25T15:54:18.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:54:18.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:54:18.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:54:18.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:54:18.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:54:18.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:54:13', tmtdew=39.24, humidity=6.71, cloud=0.0, wind=11.38, temperature=27.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:54:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:54:18.843 [DEBUG] [Thread-1525] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:54:18.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:54:18.945 [DEBUG] [Thread-1528] [transport.py] [_log()] starting thread (client mode): 0x7378df90
2025-11-25T15:54:18.946 [DEBUG] [Thread-1528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:54:18.960 [DEBUG] [Thread-1528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:54:18.960 [INFO] [Thread-1528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:54:18.967 [DEBUG] [Thread-1528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:54:18.967 [DEBUG] [Thread-1528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:54:18.967 [DEBUG] [Thread-1528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:54:18.967 [DEBUG] [Thread-1528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:54:18.967 [DEBUG] [Thread-1528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] client lang: <none>
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] server lang: <none>
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] kex follows: False
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] Compression: none
2025-11-25T15:54:18.968 [DEBUG] [Thread-1528] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:54:19.028 [DEBUG] [Thread-1528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:54:19.028 [DEBUG] [Thread-1528] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:54:19.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:54:19.029 [DEBUG] [Thread-1528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:54:19.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:54:19.084 [DEBUG] [Thread-1528] [transport.py] [_log()] userauth is OK
2025-11-25T15:54:19.084 [DEBUG] [Thread-1528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:54:19.084 [DEBUG] [Thread-1528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:54:19.084 [DEBUG] [Thread-1528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:54:19.084 [DEBUG] [Thread-1528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:54:19.103 [INFO] [Thread-1528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:54:19.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:54:19.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:54:19.921 [DEBUG] [Thread-1528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:54:19.921 [DEBUG] [Thread-1528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:54:19.969 [DEBUG] [Thread-1528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:54:19.969 [DEBUG] [Thread-1528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:54:19.978 [DEBUG] [Thread-1528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:54:19.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:54:19.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:54: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
2025-11-25T15:54:20.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:54:20.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:54:20.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:54:20.014 [DEBUG] [Thread-1528] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:54:23.238 [DEBUG] [Thread-1530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:54:38.309 [DEBUG] [Thread-1531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:54:50.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:54:50.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:54:50.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
2025-11-25T15:54:50.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 54, 45), 39.45, 6.66, 0.0, 14.52, 27.69, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:54:50.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:54:45
2025-11-25T15:54:50.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:54:50.972 [DEBUG] [Thread-1532] [transport.py] [_log()] starting thread (client mode): 0x761da5c0
2025-11-25T15:54:50.972 [DEBUG] [Thread-1532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:54:50.992 [DEBUG] [Thread-1532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:54:50.992 [INFO] [Thread-1532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:54:50.995 [DEBUG] [Thread-1532] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:54:50.995 [DEBUG] [Thread-1532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:54:50.995 [DEBUG] [Thread-1532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:54:50.995 [DEBUG] [Thread-1532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:54:50.995 [DEBUG] [Thread-1532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] client lang: <none>
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] server lang: <none>
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] kex follows: False
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] Compression: none
2025-11-25T15:54:50.996 [DEBUG] [Thread-1532] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:54:51.012 [DEBUG] [Thread-1532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:54:51.012 [DEBUG] [Thread-1532] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:54:51.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:54:51.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:54:51.013 [DEBUG] [Thread-1532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:54:51.013 [DEBUG] [Thread-1532] [transport.py] [_log()] userauth is OK
2025-11-25T15:54:51.013 [DEBUG] [Thread-1532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:54:51.013 [DEBUG] [Thread-1532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:54:51.013 [DEBUG] [Thread-1532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:54:51.013 [DEBUG] [Thread-1532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:54:51.027 [INFO] [Thread-1532] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:54:51.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:54:51.257 [DEBUG] [Thread-1534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:54:51.672 [DEBUG] [Thread-1532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:54:51.672 [DEBUG] [Thread-1532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:54:51.672 [DEBUG] [Thread-1532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:54:51.713 [DEBUG] [Thread-1532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:54:51.713 [DEBUG] [Thread-1532] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:54:51.717 [DEBUG] [Thread-1532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:54:51.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:54:51.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:54:51.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:54:51.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:54:51.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:54:51.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:54:51.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:54:51.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:54:51.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:54:51.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.579615 -999.00  +27.50  13.88     11   -4.50 1 1 1 1 1   888    0 32.80 36.07 ----- 19.2 13.9 32.8 24.6 33.8 -32.6 33.7 -32.5 34.9 -30.1 35.3 -30.8
2025-11-25T15:54:51.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:54:51.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:54:51.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.579615
2025-11-25T15:54:51.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:54:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:54:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:54:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:54:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:54:51.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:54:45', tmtdew=39.45, humidity=6.66, cloud=0.0, wind=14.52, temperature=27.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:54:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:54:51.739 [DEBUG] [Thread-1532] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:54:51.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:54:51.844 [DEBUG] [Thread-1536] [transport.py] [_log()] starting thread (client mode): 0x737e9390
2025-11-25T15:54:51.844 [DEBUG] [Thread-1536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:54:51.858 [DEBUG] [Thread-1536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:54:51.858 [INFO] [Thread-1536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:54:51.867 [DEBUG] [Thread-1536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:54:51.867 [DEBUG] [Thread-1536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:54:51.867 [DEBUG] [Thread-1536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:54:51.867 [DEBUG] [Thread-1536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:54:51.868 [DEBUG] [Thread-1536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:54:51.868 [DEBUG] [Thread-1536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:54:51.868 [DEBUG] [Thread-1536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:54:51.868 [DEBUG] [Thread-1536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:54:51.868 [DEBUG] [Thread-1536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:54:51.868 [DEBUG] [Thread-1536] [transport.py] [_log()] client lang: <none>
2025-11-25T15:54:51.868 [DEBUG] [Thread-1536] [transport.py] [_log()] server lang: <none>
2025-11-25T15:54:51.868 [DEBUG] [Thread-1536] [transport.py] [_log()] kex follows: False
2025-11-25T15:54:51.868 [DEBUG] [Thread-1536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:54:51.869 [DEBUG] [Thread-1536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:54:51.869 [DEBUG] [Thread-1536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:54:51.869 [DEBUG] [Thread-1536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:54:51.869 [DEBUG] [Thread-1536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:54:51.869 [DEBUG] [Thread-1536] [transport.py] [_log()] Compression: none
2025-11-25T15:54:51.869 [DEBUG] [Thread-1536] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:54:51.928 [DEBUG] [Thread-1536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:54:51.929 [DEBUG] [Thread-1536] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:54:51.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:54:51.930 [DEBUG] [Thread-1536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:54:51.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:54:51.987 [DEBUG] [Thread-1536] [transport.py] [_log()] userauth is OK
2025-11-25T15:54:51.987 [DEBUG] [Thread-1536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:54:51.988 [DEBUG] [Thread-1536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:54:51.988 [DEBUG] [Thread-1536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:54:51.988 [DEBUG] [Thread-1536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:54:52.007 [INFO] [Thread-1536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:54:52.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:54:52.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:54:52.819 [DEBUG] [Thread-1536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:54:52.820 [DEBUG] [Thread-1536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:54:52.868 [DEBUG] [Thread-1536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:54:52.868 [DEBUG] [Thread-1536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:54:52.877 [DEBUG] [Thread-1536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:54:52.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:54:52.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:54:52.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:54:52.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:54:52.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:54:52.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:54:52.913 [DEBUG] [Thread-1536] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:54:53.349 [DEBUG] [Thread-1538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:55:08.415 [DEBUG] [Thread-1539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:55:22.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:55:22.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:55:22.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:55:23.452 [DEBUG] [Thread-1540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:55:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 55, 17), 39.22, 6.74, 0.0, 12.92, 27.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:55:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:55:17
2025-11-25T15:55:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:55:23.896 [DEBUG] [Thread-1541] [transport.py] [_log()] starting thread (client mode): 0x761d9660
2025-11-25T15:55:23.897 [DEBUG] [Thread-1541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:55:23.912 [DEBUG] [Thread-1541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:55:23.912 [INFO] [Thread-1541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] client lang: <none>
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] server lang: <none>
2025-11-25T15:55:23.914 [DEBUG] [Thread-1541] [transport.py] [_log()] kex follows: False
2025-11-25T15:55:23.915 [DEBUG] [Thread-1541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:55:23.915 [DEBUG] [Thread-1541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:55:23.915 [DEBUG] [Thread-1541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:55:23.915 [DEBUG] [Thread-1541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:55:23.915 [DEBUG] [Thread-1541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:55:23.915 [DEBUG] [Thread-1541] [transport.py] [_log()] Compression: none
2025-11-25T15:55:23.915 [DEBUG] [Thread-1541] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:55:23.927 [DEBUG] [Thread-1541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:55:23.928 [DEBUG] [Thread-1541] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:55:23.928 [DEBUG] [Thread-1541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:55:23.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:55:23.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:55:23.928 [DEBUG] [Thread-1541] [transport.py] [_log()] userauth is OK
2025-11-25T15:55:23.929 [DEBUG] [Thread-1541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:55:23.929 [DEBUG] [Thread-1541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:55:23.929 [DEBUG] [Thread-1541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:55:23.929 [DEBUG] [Thread-1541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:55:23.937 [INFO] [Thread-1541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:55:23.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:55:24.535 [DEBUG] [Thread-1541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:55:24.536 [DEBUG] [Thread-1541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:55:24.536 [DEBUG] [Thread-1541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:55:24.576 [DEBUG] [Thread-1541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:55:24.576 [DEBUG] [Thread-1541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:55:24.579 [DEBUG] [Thread-1541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:55:24.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:55:24.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:55:24.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:55:24.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:55:24.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:55:24.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:55:24.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:55:24.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:55:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:55:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.579962 -999.00  +27.40  18.60     11   -4.70 1 1 1 1 1   888    0 32.93 34.56 ----- 16.9 18.6 14.9 21.4 33.8 -32.3 33.4 -33.2 35.0 -30.4 34.9 -31.0
2025-11-25T15:55:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:55:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:55:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.579962
2025-11-25T15:55:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:55:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:55:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:55:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:55:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:55:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:55:17', tmtdew=39.22, humidity=6.74, cloud=0.0, wind=12.92, temperature=27.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:55:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:55:24.599 [DEBUG] [Thread-1541] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:55:24.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:55:24.692 [DEBUG] [Thread-1544] [transport.py] [_log()] starting thread (client mode): 0x70d0fe20
2025-11-25T15:55:24.692 [DEBUG] [Thread-1544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:55:24.706 [DEBUG] [Thread-1544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:55:24.706 [INFO] [Thread-1544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] client lang: <none>
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] server lang: <none>
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] kex follows: False
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] Compression: none
2025-11-25T15:55:24.714 [DEBUG] [Thread-1544] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:55:24.769 [DEBUG] [Thread-1544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:55:24.769 [DEBUG] [Thread-1544] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:55:24.770 [DEBUG] [Thread-1544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:55:24.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:55:24.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:55:24.826 [DEBUG] [Thread-1544] [transport.py] [_log()] userauth is OK
2025-11-25T15:55:24.826 [DEBUG] [Thread-1544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:55:24.826 [DEBUG] [Thread-1544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:55:24.826 [DEBUG] [Thread-1544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:55:24.826 [DEBUG] [Thread-1544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:55:24.841 [INFO] [Thread-1544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:55:24.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:55:24.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:55:25.643 [DEBUG] [Thread-1544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:55:25.644 [DEBUG] [Thread-1544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:55:25.692 [DEBUG] [Thread-1544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:55:25.692 [DEBUG] [Thread-1544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:55:25.701 [DEBUG] [Thread-1544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:55:25.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:55:25.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:55:25.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:55:25.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:55:25.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:55:25.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:55:25.738 [DEBUG] [Thread-1544] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:55:38.493 [DEBUG] [Thread-1546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:55:51.796 [DEBUG] [Thread-1547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:55:53.553 [DEBUG] [Thread-1548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:55:55.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:55:55.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:55:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:55:56.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 55, 50), 39.03, 6.92, 0.0, 14.86, 27.31, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:55:56.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:55:50
2025-11-25T15:55:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:55:56.701 [DEBUG] [Thread-1549] [transport.py] [_log()] starting thread (client mode): 0x7378dc90
2025-11-25T15:55:56.701 [DEBUG] [Thread-1549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:55:56.721 [DEBUG] [Thread-1549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:55:56.722 [INFO] [Thread-1549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] client lang: <none>
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] server lang: <none>
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] kex follows: False
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] Compression: none
2025-11-25T15:55:56.724 [DEBUG] [Thread-1549] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:55:56.731 [DEBUG] [Thread-1549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:55:56.731 [DEBUG] [Thread-1549] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:55:56.731 [DEBUG] [Thread-1549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:55:56.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:55:56.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:55:56.732 [DEBUG] [Thread-1549] [transport.py] [_log()] userauth is OK
2025-11-25T15:55:56.732 [DEBUG] [Thread-1549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:55:56.732 [DEBUG] [Thread-1549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:55:56.732 [DEBUG] [Thread-1549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:55:56.732 [DEBUG] [Thread-1549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:55:56.741 [INFO] [Thread-1549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:55:56.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:55:57.347 [DEBUG] [Thread-1549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:55:57.347 [DEBUG] [Thread-1549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:55:57.347 [DEBUG] [Thread-1549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:55:57.388 [DEBUG] [Thread-1549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:55:57.388 [DEBUG] [Thread-1549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:55:57.390 [DEBUG] [Thread-1549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:55:57.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:55:57.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:55:57.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:55:57.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:55:57.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:55:57.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:55:57.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:55:57.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:55:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:55:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.580309 -999.00  +27.20  14.19     11   -4.70 1 1 1 1 1   888    0 32.90 33.90 ----- 16.7 14.2 339.7 22.6 33.6 -32.7 33.4 -33.8 34.8 -30.3 34.7 -33.1
2025-11-25T15:55:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:55:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:55:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.580309
2025-11-25T15:55:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:55:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:55:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:55:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:55:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:55:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:55:50', tmtdew=39.03, humidity=6.92, cloud=0.0, wind=14.86, temperature=27.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:55:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:55:57.403 [DEBUG] [Thread-1549] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:55:57.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:55:57.498 [DEBUG] [Thread-1552] [transport.py] [_log()] starting thread (client mode): 0x7378c310
2025-11-25T15:55:57.498 [DEBUG] [Thread-1552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:55:57.513 [DEBUG] [Thread-1552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:55:57.513 [INFO] [Thread-1552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:55:57.520 [DEBUG] [Thread-1552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:55:57.520 [DEBUG] [Thread-1552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:55:57.520 [DEBUG] [Thread-1552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:55:57.520 [DEBUG] [Thread-1552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:55:57.520 [DEBUG] [Thread-1552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] client lang: <none>
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] server lang: <none>
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] kex follows: False
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] Compression: none
2025-11-25T15:55:57.521 [DEBUG] [Thread-1552] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:55:57.578 [DEBUG] [Thread-1552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:55:57.578 [DEBUG] [Thread-1552] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:55:57.578 [DEBUG] [Thread-1552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:55:57.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:55:57.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:55:57.634 [DEBUG] [Thread-1552] [transport.py] [_log()] userauth is OK
2025-11-25T15:55:57.634 [DEBUG] [Thread-1552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:55:57.634 [DEBUG] [Thread-1552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:55:57.634 [DEBUG] [Thread-1552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:55:57.634 [DEBUG] [Thread-1552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:55:57.648 [INFO] [Thread-1552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:55:57.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:55:57.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:55:58.430 [DEBUG] [Thread-1552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:55:58.430 [DEBUG] [Thread-1552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:55:58.478 [DEBUG] [Thread-1552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:55:58.478 [DEBUG] [Thread-1552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:55:58.486 [DEBUG] [Thread-1552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:55:58.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:55:58.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:55:58.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:55:58.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:55:58.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:55:58.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:55:58.518 [DEBUG] [Thread-1552] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:56:08.597 [DEBUG] [Thread-1554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:56:23.661 [DEBUG] [Thread-1555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:56:28.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:56:28.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:56:28.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:56:29.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 56, 22), 39.12, 6.87, 0.0, 12.39, 27.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:56:29.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:56:22
2025-11-25T15:56:29.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:56:29.481 [DEBUG] [Thread-1556] [transport.py] [_log()] starting thread (client mode): 0x70d0e740
2025-11-25T15:56:29.481 [DEBUG] [Thread-1556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:56:29.499 [DEBUG] [Thread-1556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:56:29.500 [INFO] [Thread-1556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:56:29.501 [DEBUG] [Thread-1556] [transport.py] [_log()] client lang: <none>
2025-11-25T15:56:29.502 [DEBUG] [Thread-1556] [transport.py] [_log()] server lang: <none>
2025-11-25T15:56:29.502 [DEBUG] [Thread-1556] [transport.py] [_log()] kex follows: False
2025-11-25T15:56:29.502 [DEBUG] [Thread-1556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:56:29.502 [DEBUG] [Thread-1556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:56:29.502 [DEBUG] [Thread-1556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:56:29.502 [DEBUG] [Thread-1556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:56:29.502 [DEBUG] [Thread-1556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:56:29.502 [DEBUG] [Thread-1556] [transport.py] [_log()] Compression: none
2025-11-25T15:56:29.502 [DEBUG] [Thread-1556] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:56:29.514 [DEBUG] [Thread-1556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:56:29.515 [DEBUG] [Thread-1556] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:56:29.515 [DEBUG] [Thread-1556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:56:29.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:56:29.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:56:29.517 [DEBUG] [Thread-1556] [transport.py] [_log()] userauth is OK
2025-11-25T15:56:29.517 [DEBUG] [Thread-1556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:56:29.517 [DEBUG] [Thread-1556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:56:29.517 [DEBUG] [Thread-1556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:56:29.517 [DEBUG] [Thread-1556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:56:29.537 [INFO] [Thread-1556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:56:29.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:56:30.138 [DEBUG] [Thread-1556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:56:30.139 [DEBUG] [Thread-1556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:56:30.139 [DEBUG] [Thread-1556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:56:30.180 [DEBUG] [Thread-1556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:56:30.180 [DEBUG] [Thread-1556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:56:30.184 [DEBUG] [Thread-1556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:56:30.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:56:30.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:56:30.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:56:30.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:56:30.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:56:30.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:56:30.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:56:30.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:56:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:56:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.580656 -999.00  +26.70  10.60     12   -4.80 1 1 1 1 1   888    0 32.75 31.05 ----- 10.4 10.6 357.8 19.9 33.4 -32.7 33.2 -32.6 34.7 -30.2 34.7 -30.3
2025-11-25T15:56:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:56:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:56:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.580656
2025-11-25T15:56:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:56:30.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:56:30.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:56:30.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:56:30.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:56:30.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:56:22', tmtdew=39.12, humidity=6.87, cloud=0.0, wind=12.39, temperature=27.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:56:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:56:30.212 [DEBUG] [Thread-1556] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:56:30.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:56:30.314 [DEBUG] [Thread-1559] [transport.py] [_log()] starting thread (client mode): 0x70d0d9c0
2025-11-25T15:56:30.315 [DEBUG] [Thread-1559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:56:30.329 [DEBUG] [Thread-1559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:56:30.329 [INFO] [Thread-1559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] client lang: <none>
2025-11-25T15:56:30.337 [DEBUG] [Thread-1559] [transport.py] [_log()] server lang: <none>
2025-11-25T15:56:30.338 [DEBUG] [Thread-1559] [transport.py] [_log()] kex follows: False
2025-11-25T15:56:30.338 [DEBUG] [Thread-1559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:56:30.338 [DEBUG] [Thread-1559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:56:30.338 [DEBUG] [Thread-1559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:56:30.338 [DEBUG] [Thread-1559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:56:30.338 [DEBUG] [Thread-1559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:56:30.338 [DEBUG] [Thread-1559] [transport.py] [_log()] Compression: none
2025-11-25T15:56:30.338 [DEBUG] [Thread-1559] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:56:30.394 [DEBUG] [Thread-1559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:56:30.395 [DEBUG] [Thread-1559] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:56:30.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:56:30.396 [DEBUG] [Thread-1559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:56:30.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:56:30.450 [DEBUG] [Thread-1559] [transport.py] [_log()] userauth is OK
2025-11-25T15:56:30.451 [DEBUG] [Thread-1559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:56:30.451 [DEBUG] [Thread-1559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:56:30.451 [DEBUG] [Thread-1559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:56:30.451 [DEBUG] [Thread-1559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:56:30.470 [INFO] [Thread-1559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:56:30.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:56:30.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:56:31.293 [DEBUG] [Thread-1559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:56:31.293 [DEBUG] [Thread-1559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:56:31.341 [DEBUG] [Thread-1559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:56:31.341 [DEBUG] [Thread-1559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:56:31.350 [DEBUG] [Thread-1559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:56:31.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:56:31.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:56:31.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:56:31.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:56:31.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:56:31.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:56:31.387 [DEBUG] [Thread-1559] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:56:38.700 [DEBUG] [Thread-1561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:56:52.518 [DEBUG] [Thread-1562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:56:53.759 [DEBUG] [Thread-1563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:57:01.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:57:01.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:57:01.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:57:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 56, 54), 39.06, 6.86, 0.0, 17.61, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:57:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:56:54
2025-11-25T15:57:02.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:57:02.333 [DEBUG] [Thread-1564] [transport.py] [_log()] starting thread (client mode): 0x70d0eaa0
2025-11-25T15:57:02.333 [DEBUG] [Thread-1564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:57:02.353 [DEBUG] [Thread-1564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:57:02.353 [INFO] [Thread-1564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:57:02.356 [DEBUG] [Thread-1564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:57:02.356 [DEBUG] [Thread-1564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] client lang: <none>
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] server lang: <none>
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] kex follows: False
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] Compression: none
2025-11-25T15:57:02.357 [DEBUG] [Thread-1564] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:57:02.367 [DEBUG] [Thread-1564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:57:02.367 [DEBUG] [Thread-1564] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:57:02.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:57:02.368 [DEBUG] [Thread-1564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:57:02.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:57:02.370 [DEBUG] [Thread-1564] [transport.py] [_log()] userauth is OK
2025-11-25T15:57:02.370 [DEBUG] [Thread-1564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:57:02.370 [DEBUG] [Thread-1564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:57:02.370 [DEBUG] [Thread-1564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:57:02.370 [DEBUG] [Thread-1564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:57:02.396 [INFO] [Thread-1564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:57:02.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:57:03.020 [DEBUG] [Thread-1564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:57:03.021 [DEBUG] [Thread-1564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:57:03.021 [DEBUG] [Thread-1564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:57:03.062 [DEBUG] [Thread-1564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:57:03.062 [DEBUG] [Thread-1564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:57:03.065 [DEBUG] [Thread-1564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:57:03.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:57:03.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:57:03.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:57:03.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:57:03.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:57:03.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:57:03.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:57:03.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:57:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:57:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.581003 -999.00  +26.70   7.10     12   -5.00 1 1 1 1 1   888    0 32.30 28.98 ----- 7.1 7.1 346.5 12.6 33.4 -32.2 33.4 -31.8 34.6 -29.7 34.8 -30.8
2025-11-25T15:57:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:57:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:57:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.581003
2025-11-25T15:57:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:57:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:57:03.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:57:03.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:57:03.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:57:03.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:56:54', tmtdew=39.06, humidity=6.86, cloud=0.0, wind=17.61, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:56:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:57:03.099 [DEBUG] [Thread-1564] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:57:03.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:57:03.204 [DEBUG] [Thread-1567] [transport.py] [_log()] starting thread (client mode): 0x70d0c4f0
2025-11-25T15:57:03.204 [DEBUG] [Thread-1567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:57:03.218 [DEBUG] [Thread-1567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:57:03.218 [INFO] [Thread-1567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:57:03.226 [DEBUG] [Thread-1567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:57:03.226 [DEBUG] [Thread-1567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:57:03.226 [DEBUG] [Thread-1567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:57:03.226 [DEBUG] [Thread-1567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:57:03.226 [DEBUG] [Thread-1567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:57:03.226 [DEBUG] [Thread-1567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:57:03.226 [DEBUG] [Thread-1567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:57:03.227 [DEBUG] [Thread-1567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:57:03.227 [DEBUG] [Thread-1567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:57:03.227 [DEBUG] [Thread-1567] [transport.py] [_log()] client lang: <none>
2025-11-25T15:57:03.227 [DEBUG] [Thread-1567] [transport.py] [_log()] server lang: <none>
2025-11-25T15:57:03.227 [DEBUG] [Thread-1567] [transport.py] [_log()] kex follows: False
2025-11-25T15:57:03.227 [DEBUG] [Thread-1567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:57:03.227 [DEBUG] [Thread-1567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:57:03.227 [DEBUG] [Thread-1567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:57:03.228 [DEBUG] [Thread-1567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:57:03.228 [DEBUG] [Thread-1567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:57:03.228 [DEBUG] [Thread-1567] [transport.py] [_log()] Compression: none
2025-11-25T15:57:03.228 [DEBUG] [Thread-1567] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:57:03.287 [DEBUG] [Thread-1567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:57:03.287 [DEBUG] [Thread-1567] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:57:03.288 [DEBUG] [Thread-1567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:57:03.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:57:03.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:57:03.343 [DEBUG] [Thread-1567] [transport.py] [_log()] userauth is OK
2025-11-25T15:57:03.343 [DEBUG] [Thread-1567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:57:03.343 [DEBUG] [Thread-1567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:57:03.343 [DEBUG] [Thread-1567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:57:03.343 [DEBUG] [Thread-1567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:57:03.364 [INFO] [Thread-1567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:57:03.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:57:03.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:57:04.172 [DEBUG] [Thread-1567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:57:04.172 [DEBUG] [Thread-1567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:57:04.220 [DEBUG] [Thread-1567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:57:04.220 [DEBUG] [Thread-1567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:57:04.230 [DEBUG] [Thread-1567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:57:04.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:57:04.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:57:04.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:57:04.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:57:04.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:57:04.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:57:04.267 [DEBUG] [Thread-1567] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:57:08.802 [DEBUG] [Thread-1569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:57:23.865 [DEBUG] [Thread-1570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:57:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:57:34.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:57:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:57:34.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 57, 26), 39.36, 6.74, 0.0, 18.58, 27.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:57:34.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:57:26
2025-11-25T15:57:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:57:35.198 [DEBUG] [Thread-1571] [transport.py] [_log()] starting thread (client mode): 0x70d0d5a0
2025-11-25T15:57:35.199 [DEBUG] [Thread-1571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:57:35.222 [DEBUG] [Thread-1571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:57:35.222 [INFO] [Thread-1571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] client lang: <none>
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] server lang: <none>
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] kex follows: False
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:57:35.224 [DEBUG] [Thread-1571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:57:35.225 [DEBUG] [Thread-1571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:57:35.225 [DEBUG] [Thread-1571] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:57:35.225 [DEBUG] [Thread-1571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:57:35.225 [DEBUG] [Thread-1571] [transport.py] [_log()] Compression: none
2025-11-25T15:57:35.225 [DEBUG] [Thread-1571] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:57:35.237 [DEBUG] [Thread-1571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:57:35.238 [DEBUG] [Thread-1571] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:57:35.238 [DEBUG] [Thread-1571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:57:35.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:57:35.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:57:35.240 [DEBUG] [Thread-1571] [transport.py] [_log()] userauth is OK
2025-11-25T15:57:35.240 [DEBUG] [Thread-1571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:57:35.240 [DEBUG] [Thread-1571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:57:35.240 [DEBUG] [Thread-1571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:57:35.241 [DEBUG] [Thread-1571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:57:35.265 [INFO] [Thread-1571] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:57:35.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:57:35.824 [DEBUG] [Thread-1571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:57:35.824 [DEBUG] [Thread-1571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:57:35.824 [DEBUG] [Thread-1571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:57:35.865 [DEBUG] [Thread-1571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:57:35.865 [DEBUG] [Thread-1571] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:57:35.869 [DEBUG] [Thread-1571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:57:35.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:57:35.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:57:35.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:57:35.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:57:35.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:57:35.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:57:35.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:57:35.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:57:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:57:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.581351 -999.00  +26.90  11.95     12   -4.80 1 1 1 1 1   888    0 32.25 27.10 ----- 9.2 11.9 322.0 15.1 33.4 -31.9 33.5 -31.5 34.6 -29.6 34.9 -29.8
2025-11-25T15:57:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:57:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:57:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.581351
2025-11-25T15:57:35.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:57:35.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:57:35.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:57:35.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:57:35.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:57:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:57:26', tmtdew=39.36, humidity=6.74, cloud=0.0, wind=18.58, temperature=27.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:57:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:57:35.893 [DEBUG] [Thread-1571] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:57:35.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:57:35.996 [DEBUG] [Thread-1574] [transport.py] [_log()] starting thread (client mode): 0x70d0cd90
2025-11-25T15:57:35.996 [DEBUG] [Thread-1574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:57:36.011 [DEBUG] [Thread-1574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:57:36.011 [INFO] [Thread-1574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:57:36.019 [DEBUG] [Thread-1574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:57:36.019 [DEBUG] [Thread-1574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:57:36.019 [DEBUG] [Thread-1574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:57:36.019 [DEBUG] [Thread-1574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:57:36.020 [DEBUG] [Thread-1574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:57:36.020 [DEBUG] [Thread-1574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:57:36.020 [DEBUG] [Thread-1574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:57:36.020 [DEBUG] [Thread-1574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:57:36.020 [DEBUG] [Thread-1574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:57:36.020 [DEBUG] [Thread-1574] [transport.py] [_log()] client lang: <none>
2025-11-25T15:57:36.020 [DEBUG] [Thread-1574] [transport.py] [_log()] server lang: <none>
2025-11-25T15:57:36.020 [DEBUG] [Thread-1574] [transport.py] [_log()] kex follows: False
2025-11-25T15:57:36.020 [DEBUG] [Thread-1574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:57:36.021 [DEBUG] [Thread-1574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:57:36.021 [DEBUG] [Thread-1574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:57:36.021 [DEBUG] [Thread-1574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:57:36.021 [DEBUG] [Thread-1574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:57:36.021 [DEBUG] [Thread-1574] [transport.py] [_log()] Compression: none
2025-11-25T15:57:36.021 [DEBUG] [Thread-1574] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:57:36.079 [DEBUG] [Thread-1574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:57:36.079 [DEBUG] [Thread-1574] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:57:36.080 [DEBUG] [Thread-1574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:57:36.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:57:36.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:57:36.135 [DEBUG] [Thread-1574] [transport.py] [_log()] userauth is OK
2025-11-25T15:57:36.135 [DEBUG] [Thread-1574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:57:36.135 [DEBUG] [Thread-1574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:57:36.135 [DEBUG] [Thread-1574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:57:36.135 [DEBUG] [Thread-1574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:57:36.154 [INFO] [Thread-1574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:57:36.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:57:36.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:57:36.960 [DEBUG] [Thread-1574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:57:36.960 [DEBUG] [Thread-1574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:57:37.009 [DEBUG] [Thread-1574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:57:37.009 [DEBUG] [Thread-1574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:57:37.018 [DEBUG] [Thread-1574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:57:37.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:57:37.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:57:37.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:57:37.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:57:37.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:57:37.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:57:37.056 [DEBUG] [Thread-1574] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:57:38.908 [DEBUG] [Thread-1576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:57:53.048 [DEBUG] [Thread-1577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:57:53.970 [DEBUG] [Thread-1578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:58:07.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:58:07.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:58:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:58:07.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 57, 58), 39.21, 6.76, 0.0, 13.39, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:58:07.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:57:58
2025-11-25T15:58:07.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:58:07.992 [DEBUG] [Thread-1579] [transport.py] [_log()] starting thread (client mode): 0x7378dab0
2025-11-25T15:58:07.992 [DEBUG] [Thread-1579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:58:08.009 [DEBUG] [Thread-1579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:58:08.009 [INFO] [Thread-1579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] client lang: <none>
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] server lang: <none>
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] kex follows: False
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] Compression: none
2025-11-25T15:58:08.011 [DEBUG] [Thread-1579] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:58:08.020 [DEBUG] [Thread-1579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:58:08.021 [DEBUG] [Thread-1579] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:58:08.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:58:08.022 [DEBUG] [Thread-1579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:58:08.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:58:08.024 [DEBUG] [Thread-1579] [transport.py] [_log()] userauth is OK
2025-11-25T15:58:08.024 [DEBUG] [Thread-1579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:58:08.024 [DEBUG] [Thread-1579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:58:08.025 [DEBUG] [Thread-1579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:58:08.025 [DEBUG] [Thread-1579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:58:08.043 [INFO] [Thread-1579] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:58:08.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:58:08.649 [DEBUG] [Thread-1579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:58:08.650 [DEBUG] [Thread-1579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:58:08.650 [DEBUG] [Thread-1579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:58:08.690 [DEBUG] [Thread-1579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:58:08.690 [DEBUG] [Thread-1579] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:58:08.692 [DEBUG] [Thread-1579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:58:08.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:58:08.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:58:08.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:58:08.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:58:08.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:58:08.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:58:08.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:58:08.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:58:08.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:58:08.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.581698 -999.00  +27.40  22.23     12   -4.40 1 1 1 1 1   888    0 33.00 26.97 ----- 22.8 22.2 29.1 27.5 33.5 -32.1 33.5 -31.5 34.7 -29.6 34.8 -30.6
2025-11-25T15:58:08.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:58:08.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:58:08.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.581698
2025-11-25T15:58:08.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:58:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:58:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:58:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:58:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:58:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:57:58', tmtdew=39.21, humidity=6.76, cloud=0.0, wind=13.39, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:57:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:58:08.717 [DEBUG] [Thread-1579] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:58:08.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:58:08.814 [DEBUG] [Thread-1582] [transport.py] [_log()] starting thread (client mode): 0x7378d930
2025-11-25T15:58:08.814 [DEBUG] [Thread-1582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:58:08.829 [DEBUG] [Thread-1582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:58:08.829 [INFO] [Thread-1582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:58:08.837 [DEBUG] [Thread-1582] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:58:08.837 [DEBUG] [Thread-1582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:58:08.837 [DEBUG] [Thread-1582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:58:08.837 [DEBUG] [Thread-1582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:58:08.837 [DEBUG] [Thread-1582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:58:08.838 [DEBUG] [Thread-1582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:58:08.838 [DEBUG] [Thread-1582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:58:08.838 [DEBUG] [Thread-1582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:58:08.838 [DEBUG] [Thread-1582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:58:08.838 [DEBUG] [Thread-1582] [transport.py] [_log()] client lang: <none>
2025-11-25T15:58:08.838 [DEBUG] [Thread-1582] [transport.py] [_log()] server lang: <none>
2025-11-25T15:58:08.838 [DEBUG] [Thread-1582] [transport.py] [_log()] kex follows: False
2025-11-25T15:58:08.838 [DEBUG] [Thread-1582] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:58:08.838 [DEBUG] [Thread-1582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:58:08.839 [DEBUG] [Thread-1582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:58:08.839 [DEBUG] [Thread-1582] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:58:08.839 [DEBUG] [Thread-1582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:58:08.839 [DEBUG] [Thread-1582] [transport.py] [_log()] Compression: none
2025-11-25T15:58:08.839 [DEBUG] [Thread-1582] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:58:08.899 [DEBUG] [Thread-1582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:58:08.900 [DEBUG] [Thread-1582] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:58:08.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:58:08.901 [DEBUG] [Thread-1582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:58:08.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:58:08.960 [DEBUG] [Thread-1582] [transport.py] [_log()] userauth is OK
2025-11-25T15:58:08.961 [DEBUG] [Thread-1582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:58:08.961 [DEBUG] [Thread-1582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:58:08.961 [DEBUG] [Thread-1582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:58:08.961 [DEBUG] [Thread-1582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:58:08.980 [INFO] [Thread-1582] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:58:08.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:58:08.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:58:09.016 [DEBUG] [Thread-1584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:58:09.779 [DEBUG] [Thread-1582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:58:09.779 [DEBUG] [Thread-1582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:58:09.827 [DEBUG] [Thread-1582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:58:09.827 [DEBUG] [Thread-1582] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:58:09.836 [DEBUG] [Thread-1582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:58:09.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:58:09.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:58:09.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:58:09.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:58:09.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:58:09.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:58:09.873 [DEBUG] [Thread-1582] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:58:24.083 [DEBUG] [Thread-1585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:58:39.132 [DEBUG] [Thread-1586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:58:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:58:39.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:58:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:58:40.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 58, 30), 39.11, 6.79, 0.0, 11.15, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:58:40.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:58:30
2025-11-25T15:58:40.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:58:40.798 [DEBUG] [Thread-1587] [transport.py] [_log()] starting thread (client mode): 0x7378c640
2025-11-25T15:58:40.798 [DEBUG] [Thread-1587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:58:40.813 [DEBUG] [Thread-1587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:58:40.814 [INFO] [Thread-1587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:58:40.816 [DEBUG] [Thread-1587] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] client lang: <none>
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] server lang: <none>
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] kex follows: False
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] Compression: none
2025-11-25T15:58:40.817 [DEBUG] [Thread-1587] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:58:40.829 [DEBUG] [Thread-1587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:58:40.830 [DEBUG] [Thread-1587] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:58:40.830 [DEBUG] [Thread-1587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:58:40.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:58:40.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:58:40.832 [DEBUG] [Thread-1587] [transport.py] [_log()] userauth is OK
2025-11-25T15:58:40.833 [DEBUG] [Thread-1587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:58:40.833 [DEBUG] [Thread-1587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:58:40.833 [DEBUG] [Thread-1587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:58:40.833 [DEBUG] [Thread-1587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:58:40.852 [INFO] [Thread-1587] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:58:40.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:58:41.445 [DEBUG] [Thread-1587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:58:41.446 [DEBUG] [Thread-1587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:58:41.446 [DEBUG] [Thread-1587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:58:41.487 [DEBUG] [Thread-1587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:58:41.487 [DEBUG] [Thread-1587] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:58:41.491 [DEBUG] [Thread-1587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:58:41.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:58:41.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:58:41.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:58:41.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:58:41.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:58:41.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:58:41.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:58:41.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:58:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:58:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.582392 -999.00  +27.10  11.30     11   -4.80 1 1 1 1 1   888    0 32.70 25.66 ----- 9.3 11.3 44.0 23.4 33.2 -32.3 33.2 -33.2 34.4 -30.1 34.6 -30.3
2025-11-25T15:58:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:58:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:58:41.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.582392
2025-11-25T15:58:41.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:58:41.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:58:41.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:58:41.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:58:41.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:58:41.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:58:30', tmtdew=39.11, humidity=6.79, cloud=0.0, wind=11.15, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:58:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:58:41.513 [DEBUG] [Thread-1587] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:58:41.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:58:41.615 [DEBUG] [Thread-1590] [transport.py] [_log()] starting thread (client mode): 0x70d0c220
2025-11-25T15:58:41.616 [DEBUG] [Thread-1590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:58:41.630 [DEBUG] [Thread-1590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:58:41.631 [INFO] [Thread-1590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:58:41.638 [DEBUG] [Thread-1590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] client lang: <none>
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] server lang: <none>
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] kex follows: False
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:58:41.639 [DEBUG] [Thread-1590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:58:41.640 [DEBUG] [Thread-1590] [transport.py] [_log()] Compression: none
2025-11-25T15:58:41.640 [DEBUG] [Thread-1590] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:58:41.699 [DEBUG] [Thread-1590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:58:41.700 [DEBUG] [Thread-1590] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:58:41.701 [DEBUG] [Thread-1590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:58:41.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:58:41.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:58:41.758 [DEBUG] [Thread-1590] [transport.py] [_log()] userauth is OK
2025-11-25T15:58:41.758 [DEBUG] [Thread-1590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:58:41.759 [DEBUG] [Thread-1590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:58:41.759 [DEBUG] [Thread-1590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:58:41.759 [DEBUG] [Thread-1590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:58:41.779 [INFO] [Thread-1590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:58:41.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:58:41.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:58:42.601 [DEBUG] [Thread-1590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:58:42.601 [DEBUG] [Thread-1590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:58:42.650 [DEBUG] [Thread-1590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:58:42.650 [DEBUG] [Thread-1590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:58:42.659 [DEBUG] [Thread-1590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:58:42.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15: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')
2025-11-25T15:58: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
2025-11-25T15:58:42.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:58:42.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:58:42.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:58:42.703 [DEBUG] [Thread-1590] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:58:53.769 [DEBUG] [Thread-1592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:58:54.182 [DEBUG] [Thread-1593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:59:09.246 [DEBUG] [Thread-1594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:59:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:59:12.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:59:12.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:59:13.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 59, 2), 39.1, 6.82, 0.0, 11.88, 27.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:59:13.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:59:02
2025-11-25T15:59:13.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:59:13.665 [DEBUG] [Thread-1595] [transport.py] [_log()] starting thread (client mode): 0x7378e260
2025-11-25T15:59:13.665 [DEBUG] [Thread-1595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:59:13.678 [DEBUG] [Thread-1595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:59:13.678 [INFO] [Thread-1595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:59:13.679 [DEBUG] [Thread-1595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] client lang: <none>
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] server lang: <none>
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] kex follows: False
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:59:13.680 [DEBUG] [Thread-1595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:59:13.681 [DEBUG] [Thread-1595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:59:13.681 [DEBUG] [Thread-1595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:59:13.681 [DEBUG] [Thread-1595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:59:13.681 [DEBUG] [Thread-1595] [transport.py] [_log()] Compression: none
2025-11-25T15:59:13.681 [DEBUG] [Thread-1595] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:59:13.694 [DEBUG] [Thread-1595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:59:13.695 [DEBUG] [Thread-1595] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:59:13.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:59:13.696 [DEBUG] [Thread-1595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:59:13.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:59:13.698 [DEBUG] [Thread-1595] [transport.py] [_log()] userauth is OK
2025-11-25T15:59:13.698 [DEBUG] [Thread-1595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:59:13.698 [DEBUG] [Thread-1595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:59:13.698 [DEBUG] [Thread-1595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:59:13.698 [DEBUG] [Thread-1595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:59:13.724 [INFO] [Thread-1595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:59:13.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:59:14.349 [DEBUG] [Thread-1595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:59:14.349 [DEBUG] [Thread-1595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:59:14.349 [DEBUG] [Thread-1595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:59:14.389 [DEBUG] [Thread-1595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:59:14.390 [DEBUG] [Thread-1595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:59:14.392 [DEBUG] [Thread-1595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:59:14.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:59:14.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:59:14.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:59:14.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:59:14.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:59:14.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:59:14.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:59:14.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:59:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:59:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.582740 -999.00  +27.40  12.00     12   -4.40 1 1 1 1 1   888    0 32.10 22.86 ----- 14.4 12.0 321.8 15.9 33.2 -31.3 33.2 -31.7 34.4 -28.6 34.5 -31.0
2025-11-25T15:59:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:59:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:59:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.582740
2025-11-25T15:59:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:59:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:59:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:59:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:59:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:59:14.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:59:02', tmtdew=39.1, humidity=6.82, cloud=0.0, wind=11.88, temperature=27.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:59:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:59:14.417 [DEBUG] [Thread-1595] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:59:14.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:59:14.525 [DEBUG] [Thread-1598] [transport.py] [_log()] starting thread (client mode): 0x7378e800
2025-11-25T15:59:14.525 [DEBUG] [Thread-1598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:59:14.539 [DEBUG] [Thread-1598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:59:14.539 [INFO] [Thread-1598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:59:14.546 [DEBUG] [Thread-1598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] client lang: <none>
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] server lang: <none>
2025-11-25T15:59:14.547 [DEBUG] [Thread-1598] [transport.py] [_log()] kex follows: False
2025-11-25T15:59:14.548 [DEBUG] [Thread-1598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:59:14.548 [DEBUG] [Thread-1598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:59:14.548 [DEBUG] [Thread-1598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:59:14.548 [DEBUG] [Thread-1598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:59:14.548 [DEBUG] [Thread-1598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:59:14.548 [DEBUG] [Thread-1598] [transport.py] [_log()] Compression: none
2025-11-25T15:59:14.548 [DEBUG] [Thread-1598] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:59:14.604 [DEBUG] [Thread-1598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:59:14.604 [DEBUG] [Thread-1598] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:59:14.605 [DEBUG] [Thread-1598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:59:14.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:59:14.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:59:14.663 [DEBUG] [Thread-1598] [transport.py] [_log()] userauth is OK
2025-11-25T15:59:14.664 [DEBUG] [Thread-1598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:59:14.664 [DEBUG] [Thread-1598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:59:14.664 [DEBUG] [Thread-1598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:59:14.664 [DEBUG] [Thread-1598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:59:14.682 [INFO] [Thread-1598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:59:14.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:59:14.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:59:15.532 [DEBUG] [Thread-1598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:59:15.532 [DEBUG] [Thread-1598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:59:15.581 [DEBUG] [Thread-1598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:59:15.581 [DEBUG] [Thread-1598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:59:15.590 [DEBUG] [Thread-1598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:59:15.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:59:15.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:59:15.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:59:15.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:59:15.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:59:15.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:59:15.627 [DEBUG] [Thread-1598] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:59:24.293 [DEBUG] [Thread-1600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:59:39.361 [DEBUG] [Thread-1601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:59:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T15:59:45.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T15:59:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T15:59:46.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 15, 59, 34), 39.34, 6.73, 0.0, 16.22, 27.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T15:59:46.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 15:59:34
2025-11-25T15:59:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T15:59:46.591 [DEBUG] [Thread-1602] [transport.py] [_log()] starting thread (client mode): 0x7378d240
2025-11-25T15:59:46.591 [DEBUG] [Thread-1602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:59:46.612 [DEBUG] [Thread-1602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T15:59:46.612 [INFO] [Thread-1602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T15:59:46.613 [DEBUG] [Thread-1602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:59:46.613 [DEBUG] [Thread-1602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] client lang: <none>
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] server lang: <none>
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] kex follows: False
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] Compression: none
2025-11-25T15:59:46.614 [DEBUG] [Thread-1602] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:59:46.626 [DEBUG] [Thread-1602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:59:46.626 [DEBUG] [Thread-1602] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:59:46.627 [DEBUG] [Thread-1602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T15:59:46.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T15:59:46.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:59:46.629 [DEBUG] [Thread-1602] [transport.py] [_log()] userauth is OK
2025-11-25T15:59:46.629 [DEBUG] [Thread-1602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:59:46.629 [DEBUG] [Thread-1602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:59:46.629 [DEBUG] [Thread-1602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T15:59:46.629 [DEBUG] [Thread-1602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:59:46.649 [INFO] [Thread-1602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:59:46.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:59:47.238 [DEBUG] [Thread-1602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:59:47.238 [DEBUG] [Thread-1602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:59:47.238 [DEBUG] [Thread-1602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T15:59:47.279 [DEBUG] [Thread-1602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:59:47.279 [DEBUG] [Thread-1602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:59:47.283 [DEBUG] [Thread-1602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:59:47.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:59:47.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T15:59:47.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T15:59:47.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T15:59:47.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:59:47.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T15:59:47.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:59:47.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:59:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T15:59:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.583087 -999.00  +27.60  18.33     11   -4.50 1 1 1 1 1   888    0 32.28 22.83 ----- 15.4 18.3 327.0 19.5 33.2 -32.1 33.2 -31.5 34.4 -29.1 34.7 -30.3
2025-11-25T15:59:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T15:59:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T15:59:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.583087
2025-11-25T15:59:47.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T15:59:47.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T15:59:47.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T15:59:47.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T15:59:47.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T15:59:47.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T15:59:34', tmtdew=39.34, humidity=6.73, cloud=0.0, wind=16.22, temperature=27.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T13:59:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T15:59:47.311 [DEBUG] [Thread-1602] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:59:47.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T15:59:47.416 [DEBUG] [Thread-1605] [transport.py] [_log()] starting thread (client mode): 0x7378ffd0
2025-11-25T15:59:47.416 [DEBUG] [Thread-1605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T15:59:47.430 [DEBUG] [Thread-1605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T15:59:47.431 [INFO] [Thread-1605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T15:59:47.438 [DEBUG] [Thread-1605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T15:59:47.438 [DEBUG] [Thread-1605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] client lang: <none>
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] server lang: <none>
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] kex follows: False
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T15:59:47.439 [DEBUG] [Thread-1605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T15:59:47.440 [DEBUG] [Thread-1605] [transport.py] [_log()] Compression: none
2025-11-25T15:59:47.440 [DEBUG] [Thread-1605] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T15:59:47.496 [DEBUG] [Thread-1605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T15:59:47.497 [DEBUG] [Thread-1605] [transport.py] [_log()] Switch to new keys ...
2025-11-25T15:59:47.498 [DEBUG] [Thread-1605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T15:59:47.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T15:59:47.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T15:59:47.552 [DEBUG] [Thread-1605] [transport.py] [_log()] userauth is OK
2025-11-25T15:59:47.553 [DEBUG] [Thread-1605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T15:59:47.553 [DEBUG] [Thread-1605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T15:59:47.553 [DEBUG] [Thread-1605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T15:59:47.553 [DEBUG] [Thread-1605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T15:59:47.573 [INFO] [Thread-1605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T15:59:47.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T15:59:47.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T15:59:48.459 [DEBUG] [Thread-1605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T15:59:48.459 [DEBUG] [Thread-1605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T15:59:48.507 [DEBUG] [Thread-1605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T15:59:48.508 [DEBUG] [Thread-1605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T15:59:48.517 [DEBUG] [Thread-1605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T15:59:48.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T15:59:48.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T15:59:48.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T15:59:48.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T15:59:48.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T15:59:48.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T15:59:48.558 [DEBUG] [Thread-1605] [transport.py] [_log()] EOF in transport thread
2025-11-25T15:59:54.399 [DEBUG] [Thread-1607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T15:59:54.540 [DEBUG] [Thread-1608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:00:09.452 [DEBUG] [Thread-1609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:00:18.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:00:18.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:00:18.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:00:19.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 0, 6), 39.52, 6.66, 0.0, 16.23, 27.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:00:19.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:00:06
2025-11-25T16:00:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:00:19.564 [DEBUG] [Thread-1610] [transport.py] [_log()] starting thread (client mode): 0x7378e4d0
2025-11-25T16:00:19.564 [DEBUG] [Thread-1610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:00:19.584 [DEBUG] [Thread-1610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:00:19.584 [INFO] [Thread-1610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] client lang: <none>
2025-11-25T16:00:19.587 [DEBUG] [Thread-1610] [transport.py] [_log()] server lang: <none>
2025-11-25T16:00:19.588 [DEBUG] [Thread-1610] [transport.py] [_log()] kex follows: False
2025-11-25T16:00:19.588 [DEBUG] [Thread-1610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:00:19.588 [DEBUG] [Thread-1610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:00:19.588 [DEBUG] [Thread-1610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:00:19.588 [DEBUG] [Thread-1610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:00:19.588 [DEBUG] [Thread-1610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:00:19.588 [DEBUG] [Thread-1610] [transport.py] [_log()] Compression: none
2025-11-25T16:00:19.588 [DEBUG] [Thread-1610] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:00:19.603 [DEBUG] [Thread-1610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:00:19.603 [DEBUG] [Thread-1610] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:00:19.603 [DEBUG] [Thread-1610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:00:19.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:00:19.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:00:19.604 [DEBUG] [Thread-1610] [transport.py] [_log()] userauth is OK
2025-11-25T16:00:19.604 [DEBUG] [Thread-1610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:00:19.604 [DEBUG] [Thread-1610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:00:19.604 [DEBUG] [Thread-1610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:00:19.604 [DEBUG] [Thread-1610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:00:19.620 [INFO] [Thread-1610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:00:19.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:00:20.221 [DEBUG] [Thread-1610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:00:20.221 [DEBUG] [Thread-1610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:00:20.221 [DEBUG] [Thread-1610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:00:20.262 [DEBUG] [Thread-1610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:00:20.262 [DEBUG] [Thread-1610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:00:20.264 [DEBUG] [Thread-1610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:00:20.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:00:20.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:00:20.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:00:20.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:00:20.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:00:20.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:00:20.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:00:20.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.583434 -999.00  +27.50  14.66     11   -4.70 1 1 1 1 1   888    0 32.89 26.21 ----- 13.9 14.7 327.4 20.7 33.3 -32.1 33.2 -31.4 34.4 -29.6 34.7 -30.2
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.583434
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:00:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:00:06', tmtdew=39.52, humidity=6.66, cloud=0.0, wind=16.23, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:00:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:00:20.280 [DEBUG] [Thread-1610] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:00:20.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:00:20.374 [DEBUG] [Thread-1613] [transport.py] [_log()] starting thread (client mode): 0x70d0fac0
2025-11-25T16:00:20.374 [DEBUG] [Thread-1613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:00:20.389 [DEBUG] [Thread-1613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:00:20.389 [INFO] [Thread-1613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] client lang: <none>
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] server lang: <none>
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] kex follows: False
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] Compression: none
2025-11-25T16:00:20.397 [DEBUG] [Thread-1613] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:00:20.455 [DEBUG] [Thread-1613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:00:20.455 [DEBUG] [Thread-1613] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:00:20.455 [DEBUG] [Thread-1613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:00:20.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:00:20.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:00:20.515 [DEBUG] [Thread-1613] [transport.py] [_log()] userauth is OK
2025-11-25T16:00:20.515 [DEBUG] [Thread-1613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:00:20.515 [DEBUG] [Thread-1613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:00:20.515 [DEBUG] [Thread-1613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:00:20.515 [DEBUG] [Thread-1613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:00:20.529 [INFO] [Thread-1613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:00:20.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:00:20.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:00:21.355 [DEBUG] [Thread-1613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:00:21.355 [DEBUG] [Thread-1613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:00:21.403 [DEBUG] [Thread-1613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:00:21.403 [DEBUG] [Thread-1613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:00:21.411 [DEBUG] [Thread-1613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:00:21.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:00:21.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:00:21.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:00:21.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:00:21.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:00:21.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:00:21.442 [DEBUG] [Thread-1613] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:00:24.494 [DEBUG] [Thread-1615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:00:39.558 [DEBUG] [Thread-1616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:00:51.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:00:51.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:00:51.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:00:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 0, 38), 39.3, 6.66, 0.0, 16.13, 27.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:00:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:00:38
2025-11-25T16:00:52.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:00:52.375 [DEBUG] [Thread-1617] [transport.py] [_log()] starting thread (client mode): 0x737ea4d0
2025-11-25T16:00:52.375 [DEBUG] [Thread-1617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:00:52.394 [DEBUG] [Thread-1617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:00:52.394 [INFO] [Thread-1617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:00:52.397 [DEBUG] [Thread-1617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] client lang: <none>
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] server lang: <none>
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] kex follows: False
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] Compression: none
2025-11-25T16:00:52.398 [DEBUG] [Thread-1617] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:00:52.416 [DEBUG] [Thread-1617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:00:52.416 [DEBUG] [Thread-1617] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:00:52.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:00:52.417 [DEBUG] [Thread-1617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:00:52.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:00:52.420 [DEBUG] [Thread-1617] [transport.py] [_log()] userauth is OK
2025-11-25T16:00:52.420 [DEBUG] [Thread-1617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:00:52.420 [DEBUG] [Thread-1617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:00:52.420 [DEBUG] [Thread-1617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:00:52.420 [DEBUG] [Thread-1617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:00:52.457 [INFO] [Thread-1617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:00:52.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:00:53.057 [DEBUG] [Thread-1617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:00:53.057 [DEBUG] [Thread-1617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:00:53.057 [DEBUG] [Thread-1617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:00:53.097 [DEBUG] [Thread-1617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:00:53.097 [DEBUG] [Thread-1617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:00:53.099 [DEBUG] [Thread-1617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:00:53.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:00:53.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:00:53.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:00:53.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:00:53.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:00:53.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:00:53.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.583434 -999.00  +27.50  14.66     11   -4.70 1 1 1 1 1   888    0 32.89 26.21 ----- 13.9 14.7 327.4 20.7 33.3 -32.1 33.2 -31.4 34.4 -29.6 34.7 -30.2
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.583434
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:00:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:00:38', tmtdew=39.3, humidity=6.66, cloud=0.0, wind=16.13, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:00:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:00:53.117 [DEBUG] [Thread-1617] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:00:53.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:00:53.209 [DEBUG] [Thread-1620] [transport.py] [_log()] starting thread (client mode): 0x737e96c0
2025-11-25T16:00:53.209 [DEBUG] [Thread-1620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:00:53.224 [DEBUG] [Thread-1620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:00:53.224 [INFO] [Thread-1620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] client lang: <none>
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] server lang: <none>
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] kex follows: False
2025-11-25T16:00:53.231 [DEBUG] [Thread-1620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:00:53.232 [DEBUG] [Thread-1620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:00:53.232 [DEBUG] [Thread-1620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:00:53.232 [DEBUG] [Thread-1620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:00:53.232 [DEBUG] [Thread-1620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:00:53.232 [DEBUG] [Thread-1620] [transport.py] [_log()] Compression: none
2025-11-25T16:00:53.232 [DEBUG] [Thread-1620] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:00:53.287 [DEBUG] [Thread-1620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:00:53.287 [DEBUG] [Thread-1620] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:00:53.287 [DEBUG] [Thread-1620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:00:53.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:00:53.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:00:53.344 [DEBUG] [Thread-1620] [transport.py] [_log()] userauth is OK
2025-11-25T16:00:53.344 [DEBUG] [Thread-1620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:00:53.344 [DEBUG] [Thread-1620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:00:53.344 [DEBUG] [Thread-1620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:00:53.344 [DEBUG] [Thread-1620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:00:53.362 [INFO] [Thread-1620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:00:53.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:00:53.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:00:54.201 [DEBUG] [Thread-1620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:00:54.201 [DEBUG] [Thread-1620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:00:54.249 [DEBUG] [Thread-1620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:00:54.249 [DEBUG] [Thread-1620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:00:54.258 [DEBUG] [Thread-1620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:00:54.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:00:54.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:00:54.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:00:54.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:00:54.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:00:54.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:00:54.290 [DEBUG] [Thread-1620] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:00:54.597 [DEBUG] [Thread-1622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:00:55.307 [DEBUG] [Thread-1623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:01:09.664 [DEBUG] [Thread-1624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:01:24.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:01:24.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:01:24.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:01:24.708 [DEBUG] [Thread-1625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:01:24.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 1, 10), 39.03, 6.76, 0.0, 15.55, 27.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:01:24.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:01:10
2025-11-25T16:01:25.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:01:25.210 [DEBUG] [Thread-1626] [transport.py] [_log()] starting thread (client mode): 0x70d0c910
2025-11-25T16:01:25.210 [DEBUG] [Thread-1626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:01:25.232 [DEBUG] [Thread-1626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:01:25.233 [INFO] [Thread-1626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:01:25.235 [DEBUG] [Thread-1626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:01:25.235 [DEBUG] [Thread-1626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:01:25.235 [DEBUG] [Thread-1626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:01:25.235 [DEBUG] [Thread-1626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] client lang: <none>
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] server lang: <none>
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] kex follows: False
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] Compression: none
2025-11-25T16:01:25.236 [DEBUG] [Thread-1626] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:01:25.255 [DEBUG] [Thread-1626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:01:25.255 [DEBUG] [Thread-1626] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:01:25.256 [DEBUG] [Thread-1626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:01:25.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:01:25.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:01:25.258 [DEBUG] [Thread-1626] [transport.py] [_log()] userauth is OK
2025-11-25T16:01:25.258 [DEBUG] [Thread-1626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:01:25.258 [DEBUG] [Thread-1626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:01:25.259 [DEBUG] [Thread-1626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:01:25.259 [DEBUG] [Thread-1626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:01:25.282 [INFO] [Thread-1626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:01:25.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:01:25.939 [DEBUG] [Thread-1626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:01:25.940 [DEBUG] [Thread-1626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:01:25.940 [DEBUG] [Thread-1626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:01:25.981 [DEBUG] [Thread-1626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:01:25.981 [DEBUG] [Thread-1626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:01:25.984 [DEBUG] [Thread-1626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:01:25.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:01:25.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:01:25.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:01:25.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:01:26.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:01:26.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:01:26.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:01:26.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:01:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:01:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.583781 -999.00  +27.40  16.45     11   -4.60 1 1 1 1 1   888    0 32.77 26.61 ----- 19.3 16.4 349.9 22.5 33.2 -31.7 33.2 -31.8 34.3 -28.7 34.7 -30.3
2025-11-25T16:01:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:01:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:01:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.583781
2025-11-25T16:01:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:01:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:01:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:01:26.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:01:26.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:01:26.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:01:10', tmtdew=39.03, humidity=6.76, cloud=0.0, wind=15.55, temperature=27.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:00:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:01:26.010 [DEBUG] [Thread-1626] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:01:26.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:01:26.118 [DEBUG] [Thread-1629] [transport.py] [_log()] starting thread (client mode): 0x7378c3d0
2025-11-25T16:01:26.118 [DEBUG] [Thread-1629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:01:26.134 [DEBUG] [Thread-1629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:01:26.134 [INFO] [Thread-1629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:01:26.141 [DEBUG] [Thread-1629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] client lang: <none>
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] server lang: <none>
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] kex follows: False
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:01:26.142 [DEBUG] [Thread-1629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:01:26.143 [DEBUG] [Thread-1629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:01:26.143 [DEBUG] [Thread-1629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:01:26.143 [DEBUG] [Thread-1629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:01:26.143 [DEBUG] [Thread-1629] [transport.py] [_log()] Compression: none
2025-11-25T16:01:26.143 [DEBUG] [Thread-1629] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:01:26.201 [DEBUG] [Thread-1629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:01:26.201 [DEBUG] [Thread-1629] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:01:26.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:01:26.203 [DEBUG] [Thread-1629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:01:26.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:01:26.257 [DEBUG] [Thread-1629] [transport.py] [_log()] userauth is OK
2025-11-25T16:01:26.257 [DEBUG] [Thread-1629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:01:26.258 [DEBUG] [Thread-1629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:01:26.258 [DEBUG] [Thread-1629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:01:26.258 [DEBUG] [Thread-1629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:01:26.276 [INFO] [Thread-1629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:01:26.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:01:26.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:01:27.120 [DEBUG] [Thread-1629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:01:27.120 [DEBUG] [Thread-1629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:01:27.169 [DEBUG] [Thread-1629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:01:27.169 [DEBUG] [Thread-1629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:01:27.178 [DEBUG] [Thread-1629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:01:27.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:01:27.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:01:27.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:01:27.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:01:27.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:01:27.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:01:27.215 [DEBUG] [Thread-1629] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:01:39.747 [DEBUG] [Thread-1631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:01:54.816 [DEBUG] [Thread-1632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:01:56.039 [DEBUG] [Thread-1633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:01:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:01:57.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:01:57.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:01:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 1, 42), 39.06, 6.78, 0.0, 16.39, 27.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:01:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:01:42
2025-11-25T16:01:58.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:01:58.162 [DEBUG] [Thread-1634] [transport.py] [_log()] starting thread (client mode): 0x737e8040
2025-11-25T16:01:58.162 [DEBUG] [Thread-1634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:01:58.182 [DEBUG] [Thread-1634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:01:58.182 [INFO] [Thread-1634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:01:58.185 [DEBUG] [Thread-1634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:01:58.185 [DEBUG] [Thread-1634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:01:58.185 [DEBUG] [Thread-1634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:01:58.186 [DEBUG] [Thread-1634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:01:58.186 [DEBUG] [Thread-1634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:01:58.186 [DEBUG] [Thread-1634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:01:58.186 [DEBUG] [Thread-1634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:01:58.186 [DEBUG] [Thread-1634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:01:58.186 [DEBUG] [Thread-1634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:01:58.186 [DEBUG] [Thread-1634] [transport.py] [_log()] client lang: <none>
2025-11-25T16:01:58.186 [DEBUG] [Thread-1634] [transport.py] [_log()] server lang: <none>
2025-11-25T16:01:58.187 [DEBUG] [Thread-1634] [transport.py] [_log()] kex follows: False
2025-11-25T16:01:58.187 [DEBUG] [Thread-1634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:01:58.187 [DEBUG] [Thread-1634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:01:58.187 [DEBUG] [Thread-1634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:01:58.187 [DEBUG] [Thread-1634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:01:58.187 [DEBUG] [Thread-1634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:01:58.187 [DEBUG] [Thread-1634] [transport.py] [_log()] Compression: none
2025-11-25T16:01:58.187 [DEBUG] [Thread-1634] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:01:58.202 [DEBUG] [Thread-1634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:01:58.203 [DEBUG] [Thread-1634] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:01:58.203 [DEBUG] [Thread-1634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:01:58.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:01:58.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:01:58.205 [DEBUG] [Thread-1634] [transport.py] [_log()] userauth is OK
2025-11-25T16:01:58.206 [DEBUG] [Thread-1634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:01:58.206 [DEBUG] [Thread-1634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:01:58.206 [DEBUG] [Thread-1634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:01:58.206 [DEBUG] [Thread-1634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:01:58.230 [INFO] [Thread-1634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:01:58.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:01:58.965 [DEBUG] [Thread-1634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:01:58.965 [DEBUG] [Thread-1634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:01:58.966 [DEBUG] [Thread-1634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:01:59.007 [DEBUG] [Thread-1634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:01:59.007 [DEBUG] [Thread-1634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:01:59.011 [DEBUG] [Thread-1634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:01:59.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:01:59.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:01:59.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:01:59.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:01:59.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:01:59.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:01:59.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:01:59.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:01:59.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:01:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.584128 -999.00  +27.60  11.96     11   -4.50 1 1 1 1 1   888    0 32.98 28.81 ----- 17.8 12.0 323.7 23.1 33.2 -31.5 33.1 -31.5 34.4 -29.3 34.6 -30.0
2025-11-25T16:01:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:01:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:01:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.584128
2025-11-25T16:01:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:01:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:01:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:01:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:01:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:01:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:01:42', tmtdew=39.06, humidity=6.78, cloud=0.0, wind=16.39, temperature=27.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:01:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:01:59.038 [DEBUG] [Thread-1634] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:01:59.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:01:59.141 [DEBUG] [Thread-1637] [transport.py] [_log()] starting thread (client mode): 0x737ebfd0
2025-11-25T16:01:59.141 [DEBUG] [Thread-1637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:01:59.155 [DEBUG] [Thread-1637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:01:59.156 [INFO] [Thread-1637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:01:59.163 [DEBUG] [Thread-1637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:01:59.163 [DEBUG] [Thread-1637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:01:59.163 [DEBUG] [Thread-1637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:01:59.163 [DEBUG] [Thread-1637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:01:59.163 [DEBUG] [Thread-1637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:01:59.163 [DEBUG] [Thread-1637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:01:59.163 [DEBUG] [Thread-1637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:01:59.163 [DEBUG] [Thread-1637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] client lang: <none>
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] server lang: <none>
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] kex follows: False
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] Compression: none
2025-11-25T16:01:59.164 [DEBUG] [Thread-1637] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:01:59.221 [DEBUG] [Thread-1637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:01:59.222 [DEBUG] [Thread-1637] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:01:59.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:01:59.223 [DEBUG] [Thread-1637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:01:59.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:01:59.277 [DEBUG] [Thread-1637] [transport.py] [_log()] userauth is OK
2025-11-25T16:01:59.278 [DEBUG] [Thread-1637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:01:59.278 [DEBUG] [Thread-1637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:01:59.278 [DEBUG] [Thread-1637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:01:59.278 [DEBUG] [Thread-1637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:01:59.296 [INFO] [Thread-1637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:01:59.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:01:59.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:02:00.107 [DEBUG] [Thread-1637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:02:00.108 [DEBUG] [Thread-1637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:02:00.156 [DEBUG] [Thread-1637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:02:00.156 [DEBUG] [Thread-1637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:02:00.165 [DEBUG] [Thread-1637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:02:00.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:02: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')
2025-11-25T16:02: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
2025-11-25T16:02:00.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:02:00.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:02:00.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:02:00.202 [DEBUG] [Thread-1637] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:02:09.860 [DEBUG] [Thread-1639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:02:24.916 [DEBUG] [Thread-1640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:02:30.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:02:30.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:02: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
2025-11-25T16:02:30.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 2, 14), 39.14, 6.74, 0.0, 15.18, 27.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:02:30.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:02:14
2025-11-25T16:02:31.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:02:31.169 [DEBUG] [Thread-1641] [transport.py] [_log()] starting thread (client mode): 0x737ea5f0
2025-11-25T16:02:31.169 [DEBUG] [Thread-1641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:02:31.189 [DEBUG] [Thread-1641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:02:31.189 [INFO] [Thread-1641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] client lang: <none>
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] server lang: <none>
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] kex follows: False
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:02:31.193 [DEBUG] [Thread-1641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:02:31.194 [DEBUG] [Thread-1641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:02:31.194 [DEBUG] [Thread-1641] [transport.py] [_log()] Compression: none
2025-11-25T16:02:31.194 [DEBUG] [Thread-1641] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:02:31.212 [DEBUG] [Thread-1641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:02:31.212 [DEBUG] [Thread-1641] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:02:31.213 [DEBUG] [Thread-1641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:02:31.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:02:31.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:02:31.216 [DEBUG] [Thread-1641] [transport.py] [_log()] userauth is OK
2025-11-25T16:02:31.216 [DEBUG] [Thread-1641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:02:31.216 [DEBUG] [Thread-1641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:02:31.216 [DEBUG] [Thread-1641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:02:31.216 [DEBUG] [Thread-1641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:02:31.231 [INFO] [Thread-1641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:02:31.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:02:31.872 [DEBUG] [Thread-1641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:02:31.872 [DEBUG] [Thread-1641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:02:31.873 [DEBUG] [Thread-1641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:02:31.913 [DEBUG] [Thread-1641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:02:31.913 [DEBUG] [Thread-1641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:02:31.917 [DEBUG] [Thread-1641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:02:31.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:02:31.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:02:31.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:02:31.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:02:31.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:02:31.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:02:31.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:02:31.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:02:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:02:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.584476 -999.00  +27.40  16.09     11   -4.60 1 1 1 1 1   888    0 32.73 28.06 ----- 11.4 16.1 327.4 20.2 33.2 -31.5 33.2 -31.3 34.4 -28.9 34.6 -30.0
2025-11-25T16:02:31.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:02:31.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:02:31.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.584476
2025-11-25T16:02:31.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:02:31.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:02:31.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:02:31.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:02:31.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:02:31.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:02:14', tmtdew=39.14, humidity=6.74, cloud=0.0, wind=15.18, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:01:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:02:31.944 [DEBUG] [Thread-1641] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:02:32.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:02:32.038 [DEBUG] [Thread-1644] [transport.py] [_log()] starting thread (client mode): 0x737eb1f0
2025-11-25T16:02:32.038 [DEBUG] [Thread-1644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:02:32.052 [DEBUG] [Thread-1644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:02:32.052 [INFO] [Thread-1644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:02:32.059 [DEBUG] [Thread-1644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] client lang: <none>
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] server lang: <none>
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] kex follows: False
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:02:32.060 [DEBUG] [Thread-1644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:02:32.061 [DEBUG] [Thread-1644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:02:32.061 [DEBUG] [Thread-1644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:02:32.061 [DEBUG] [Thread-1644] [transport.py] [_log()] Compression: none
2025-11-25T16:02:32.061 [DEBUG] [Thread-1644] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:02:32.120 [DEBUG] [Thread-1644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:02:32.121 [DEBUG] [Thread-1644] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:02:32.121 [DEBUG] [Thread-1644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:02:32.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:02:32.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:02:32.180 [DEBUG] [Thread-1644] [transport.py] [_log()] userauth is OK
2025-11-25T16:02:32.180 [DEBUG] [Thread-1644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:02:32.180 [DEBUG] [Thread-1644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:02:32.180 [DEBUG] [Thread-1644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:02:32.180 [DEBUG] [Thread-1644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:02:32.199 [INFO] [Thread-1644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:02:32.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:02:32.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:02:33.014 [DEBUG] [Thread-1644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:02:33.015 [DEBUG] [Thread-1644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:02:33.063 [DEBUG] [Thread-1644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:02:33.063 [DEBUG] [Thread-1644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:02:33.072 [DEBUG] [Thread-1644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:02:33.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:02:33.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:02:33.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:02:33.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:02:33.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:02:33.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:02:33.106 [DEBUG] [Thread-1644] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:02:39.966 [DEBUG] [Thread-1646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:02:55.031 [DEBUG] [Thread-1647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:02:56.765 [DEBUG] [Thread-1648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:03:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:03:03.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:03:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:03:03.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 2, 46), 39.37, 6.71, 0.0, 19.71, 27.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:03:03.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:02:46
2025-11-25T16:03:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:03:04.071 [DEBUG] [Thread-1649] [transport.py] [_log()] starting thread (client mode): 0x737ea9e0
2025-11-25T16:03:04.071 [DEBUG] [Thread-1649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:03:04.083 [DEBUG] [Thread-1649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:03:04.083 [INFO] [Thread-1649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] client lang: <none>
2025-11-25T16:03:04.085 [DEBUG] [Thread-1649] [transport.py] [_log()] server lang: <none>
2025-11-25T16:03:04.086 [DEBUG] [Thread-1649] [transport.py] [_log()] kex follows: False
2025-11-25T16:03:04.086 [DEBUG] [Thread-1649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:03:04.086 [DEBUG] [Thread-1649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:03:04.086 [DEBUG] [Thread-1649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:03:04.086 [DEBUG] [Thread-1649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:03:04.086 [DEBUG] [Thread-1649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:03:04.086 [DEBUG] [Thread-1649] [transport.py] [_log()] Compression: none
2025-11-25T16:03:04.086 [DEBUG] [Thread-1649] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:03:04.101 [DEBUG] [Thread-1649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:03:04.102 [DEBUG] [Thread-1649] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:03:04.102 [DEBUG] [Thread-1649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:03:04.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:03:04.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:03:04.104 [DEBUG] [Thread-1649] [transport.py] [_log()] userauth is OK
2025-11-25T16:03:04.105 [DEBUG] [Thread-1649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:03:04.105 [DEBUG] [Thread-1649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:03:04.105 [DEBUG] [Thread-1649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:03:04.105 [DEBUG] [Thread-1649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:03:04.121 [INFO] [Thread-1649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:03:04.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:03:04.893 [DEBUG] [Thread-1649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:03:04.893 [DEBUG] [Thread-1649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:03:04.894 [DEBUG] [Thread-1649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:03:04.934 [DEBUG] [Thread-1649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:03:04.935 [DEBUG] [Thread-1649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:03:04.938 [DEBUG] [Thread-1649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:03:04.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:03:04.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:03:04.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:03:04.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:03:04.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:03:04.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:03:04.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:03:04.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:03:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:03:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.584823 -999.00  +27.20  17.24     11   -4.80 1 1 1 1 1   888    0 32.73 28.42 ----- 19.5 17.2 324.0 22.4 33.2 -32.7 33.0 -31.7 34.4 -30.0 34.6 -30.6
2025-11-25T16:03:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:03:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:03:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.584823
2025-11-25T16:03:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:03:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:03:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:03:04.961 [DEBUG] [Thread-1649] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:03:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:03:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:03:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:02:46', tmtdew=39.37, humidity=6.71, cloud=0.0, wind=19.71, temperature=27.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:02:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:03:05.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:03:05.064 [DEBUG] [Thread-1652] [transport.py] [_log()] starting thread (client mode): 0x761d9540
2025-11-25T16:03:05.064 [DEBUG] [Thread-1652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:03:05.078 [DEBUG] [Thread-1652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:03:05.079 [INFO] [Thread-1652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] client lang: <none>
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] server lang: <none>
2025-11-25T16:03:05.086 [DEBUG] [Thread-1652] [transport.py] [_log()] kex follows: False
2025-11-25T16:03:05.087 [DEBUG] [Thread-1652] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:03:05.087 [DEBUG] [Thread-1652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:03:05.087 [DEBUG] [Thread-1652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:03:05.087 [DEBUG] [Thread-1652] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:03:05.087 [DEBUG] [Thread-1652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:03:05.087 [DEBUG] [Thread-1652] [transport.py] [_log()] Compression: none
2025-11-25T16:03:05.087 [DEBUG] [Thread-1652] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:03:05.146 [DEBUG] [Thread-1652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:03:05.147 [DEBUG] [Thread-1652] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:03:05.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:03:05.148 [DEBUG] [Thread-1652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:03:05.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:03:05.202 [DEBUG] [Thread-1652] [transport.py] [_log()] userauth is OK
2025-11-25T16:03:05.202 [DEBUG] [Thread-1652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:03:05.202 [DEBUG] [Thread-1652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:03:05.202 [DEBUG] [Thread-1652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:03:05.202 [DEBUG] [Thread-1652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:03:05.221 [INFO] [Thread-1652] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:03:05.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:03:05.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:03:06.404 [DEBUG] [Thread-1652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:03:06.404 [DEBUG] [Thread-1652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:03:06.452 [DEBUG] [Thread-1652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:03:06.452 [DEBUG] [Thread-1652] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:03:06.461 [DEBUG] [Thread-1652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:03:06.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:03:06.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:03:06.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:03:06.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:03:06.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:03:06.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:03:06.498 [DEBUG] [Thread-1652] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:03:10.076 [DEBUG] [Thread-1654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:03:25.148 [DEBUG] [Thread-1655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:03:36.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:03:36.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:03:36.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:03:37.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 3, 18), 39.1, 6.81, 0.0, 19.92, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:03:37.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:03:18
2025-11-25T16:03:37.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:03:37.446 [DEBUG] [Thread-1656] [transport.py] [_log()] starting thread (client mode): 0x761da770
2025-11-25T16:03:37.446 [DEBUG] [Thread-1656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:03:37.467 [DEBUG] [Thread-1656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:03:37.468 [INFO] [Thread-1656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:03:37.470 [DEBUG] [Thread-1656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] client lang: <none>
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] server lang: <none>
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] kex follows: False
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:03:37.471 [DEBUG] [Thread-1656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:03:37.472 [DEBUG] [Thread-1656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:03:37.472 [DEBUG] [Thread-1656] [transport.py] [_log()] Compression: none
2025-11-25T16:03:37.472 [DEBUG] [Thread-1656] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:03:37.480 [DEBUG] [Thread-1656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:03:37.481 [DEBUG] [Thread-1656] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:03:37.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:03:37.482 [DEBUG] [Thread-1656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:03:37.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:03:37.484 [DEBUG] [Thread-1656] [transport.py] [_log()] userauth is OK
2025-11-25T16:03:37.484 [DEBUG] [Thread-1656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:03:37.484 [DEBUG] [Thread-1656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:03:37.484 [DEBUG] [Thread-1656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:03:37.484 [DEBUG] [Thread-1656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:03:37.501 [INFO] [Thread-1656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:03:37.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:03:38.155 [DEBUG] [Thread-1656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:03:38.156 [DEBUG] [Thread-1656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:03:38.156 [DEBUG] [Thread-1656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:03:38.196 [DEBUG] [Thread-1656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:03:38.197 [DEBUG] [Thread-1656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:03:38.200 [DEBUG] [Thread-1656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:03:38.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:03:38.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:03:38.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:03:38.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:03:38.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:03:38.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:03:38.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:03:38.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:03:38.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:03:38.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.585170 -999.00  +27.20  14.70     11   -4.80 1 1 1 1 1   888    0 32.87 26.57 ----- 10.9 14.7 357.6 23.2 33.1 -31.7 33.0 -31.6 34.3 -30.4 34.6 -30.0
2025-11-25T16:03:38.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:03:38.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:03:38.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.585170
2025-11-25T16:03:38.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:03:38.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:03:38.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:03:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:03:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:03:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:03:18', tmtdew=39.1, humidity=6.81, cloud=0.0, wind=19.92, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:02:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:03:38.226 [DEBUG] [Thread-1656] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:03:38.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:03:38.330 [DEBUG] [Thread-1659] [transport.py] [_log()] starting thread (client mode): 0x761daaa0
2025-11-25T16:03:38.330 [DEBUG] [Thread-1659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:03:38.345 [DEBUG] [Thread-1659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:03:38.345 [INFO] [Thread-1659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:03:38.352 [DEBUG] [Thread-1659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:03:38.353 [DEBUG] [Thread-1659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:03:38.353 [DEBUG] [Thread-1659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:03:38.353 [DEBUG] [Thread-1659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:03:38.353 [DEBUG] [Thread-1659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:03:38.353 [DEBUG] [Thread-1659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:03:38.353 [DEBUG] [Thread-1659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:03:38.354 [DEBUG] [Thread-1659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:03:38.354 [DEBUG] [Thread-1659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:03:38.354 [DEBUG] [Thread-1659] [transport.py] [_log()] client lang: <none>
2025-11-25T16:03:38.354 [DEBUG] [Thread-1659] [transport.py] [_log()] server lang: <none>
2025-11-25T16:03:38.354 [DEBUG] [Thread-1659] [transport.py] [_log()] kex follows: False
2025-11-25T16:03:38.354 [DEBUG] [Thread-1659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:03:38.354 [DEBUG] [Thread-1659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:03:38.354 [DEBUG] [Thread-1659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:03:38.355 [DEBUG] [Thread-1659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:03:38.355 [DEBUG] [Thread-1659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:03:38.355 [DEBUG] [Thread-1659] [transport.py] [_log()] Compression: none
2025-11-25T16:03:38.355 [DEBUG] [Thread-1659] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:03:38.411 [DEBUG] [Thread-1659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:03:38.412 [DEBUG] [Thread-1659] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:03:38.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:03:38.413 [DEBUG] [Thread-1659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:03:38.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:03:38.473 [DEBUG] [Thread-1659] [transport.py] [_log()] userauth is OK
2025-11-25T16:03:38.474 [DEBUG] [Thread-1659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:03:38.474 [DEBUG] [Thread-1659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:03:38.474 [DEBUG] [Thread-1659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:03:38.474 [DEBUG] [Thread-1659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:03:38.495 [INFO] [Thread-1659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:03:38.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:03:38.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:03:39.558 [DEBUG] [Thread-1659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:03:39.558 [DEBUG] [Thread-1659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:03:39.606 [DEBUG] [Thread-1659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:03:39.606 [DEBUG] [Thread-1659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:03:39.619 [DEBUG] [Thread-1659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:03:39.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:03:39.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:03:39.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:03:39.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:03:39.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:03:39.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:03:39.663 [DEBUG] [Thread-1659] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:03:40.190 [DEBUG] [Thread-1661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:03:55.256 [DEBUG] [Thread-1662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:03:57.260 [DEBUG] [Thread-1663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:04:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:04:09.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:04:09.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:04:10.296 [DEBUG] [Thread-1664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:04:10.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 3, 50), 38.71, 6.94, 0.0, 19.55, 27.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:04:10.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:03:50
2025-11-25T16:04:10.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:04:10.602 [DEBUG] [Thread-1665] [transport.py] [_log()] starting thread (client mode): 0x70d0f220
2025-11-25T16:04:10.602 [DEBUG] [Thread-1665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:04:10.623 [DEBUG] [Thread-1665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:04:10.623 [INFO] [Thread-1665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:04:10.624 [DEBUG] [Thread-1665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] client lang: <none>
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] server lang: <none>
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] kex follows: False
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:04:10.625 [DEBUG] [Thread-1665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:04:10.626 [DEBUG] [Thread-1665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:04:10.626 [DEBUG] [Thread-1665] [transport.py] [_log()] Compression: none
2025-11-25T16:04:10.626 [DEBUG] [Thread-1665] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:04:10.640 [DEBUG] [Thread-1665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:04:10.640 [DEBUG] [Thread-1665] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:04:10.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:04:10.641 [DEBUG] [Thread-1665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:04:10.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:04:10.644 [DEBUG] [Thread-1665] [transport.py] [_log()] userauth is OK
2025-11-25T16:04:10.644 [DEBUG] [Thread-1665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:04:10.644 [DEBUG] [Thread-1665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:04:10.644 [DEBUG] [Thread-1665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:04:10.645 [DEBUG] [Thread-1665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:04:10.665 [INFO] [Thread-1665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:04:10.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:04:11.457 [DEBUG] [Thread-1665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:04:11.457 [DEBUG] [Thread-1665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:04:11.457 [DEBUG] [Thread-1665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:04:11.498 [DEBUG] [Thread-1665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:04:11.498 [DEBUG] [Thread-1665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:04:11.500 [DEBUG] [Thread-1665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:04:11.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:04:11.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:04:11.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:04:11.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:04:11.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:04:11.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:04:11.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:04:11.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:04:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:04:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.585517 -999.00  +27.10  22.90     11   -4.80 1 1 1 1 1   888    0 32.77 23.66 ----- 23.1 22.9 332.2 24.8 33.1 -32.4 33.0 -31.4 34.3 -30.3 34.5 -29.8
2025-11-25T16:04:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:04:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:04:11.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.585517
2025-11-25T16:04:11.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:04:11.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:04:11.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:04:11.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:04:11.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:04:11.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:03:50', tmtdew=38.71, humidity=6.94, cloud=0.0, wind=19.55, temperature=27.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:03:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:04:11.524 [DEBUG] [Thread-1665] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:04:11.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:04:11.625 [DEBUG] [Thread-1668] [transport.py] [_log()] starting thread (client mode): 0x9588c130
2025-11-25T16:04:11.625 [DEBUG] [Thread-1668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:04:11.639 [DEBUG] [Thread-1668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:04:11.639 [INFO] [Thread-1668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:04:11.646 [DEBUG] [Thread-1668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:04:11.647 [DEBUG] [Thread-1668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:04:11.647 [DEBUG] [Thread-1668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:04:11.647 [DEBUG] [Thread-1668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:04:11.647 [DEBUG] [Thread-1668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:04:11.647 [DEBUG] [Thread-1668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:04:11.647 [DEBUG] [Thread-1668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:04:11.647 [DEBUG] [Thread-1668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:04:11.647 [DEBUG] [Thread-1668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:04:11.648 [DEBUG] [Thread-1668] [transport.py] [_log()] client lang: <none>
2025-11-25T16:04:11.648 [DEBUG] [Thread-1668] [transport.py] [_log()] server lang: <none>
2025-11-25T16:04:11.648 [DEBUG] [Thread-1668] [transport.py] [_log()] kex follows: False
2025-11-25T16:04:11.648 [DEBUG] [Thread-1668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:04:11.648 [DEBUG] [Thread-1668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:04:11.648 [DEBUG] [Thread-1668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:04:11.648 [DEBUG] [Thread-1668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:04:11.648 [DEBUG] [Thread-1668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:04:11.648 [DEBUG] [Thread-1668] [transport.py] [_log()] Compression: none
2025-11-25T16:04:11.649 [DEBUG] [Thread-1668] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:04:11.706 [DEBUG] [Thread-1668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:04:11.707 [DEBUG] [Thread-1668] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:04:11.707 [DEBUG] [Thread-1668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:04:11.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:04:11.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:04:11.762 [DEBUG] [Thread-1668] [transport.py] [_log()] userauth is OK
2025-11-25T16:04:11.762 [DEBUG] [Thread-1668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:04:11.762 [DEBUG] [Thread-1668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:04:11.762 [DEBUG] [Thread-1668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:04:11.762 [DEBUG] [Thread-1668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:04:11.781 [INFO] [Thread-1668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:04:11.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:04:11.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:04:12.855 [DEBUG] [Thread-1668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:04:12.855 [DEBUG] [Thread-1668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:04:12.903 [DEBUG] [Thread-1668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:04:12.904 [DEBUG] [Thread-1668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:04:12.915 [DEBUG] [Thread-1668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:04:12.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:04:12.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:04:12.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:04:12.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:04:12.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:04:12.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:04:12.953 [DEBUG] [Thread-1668] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:04:25.332 [DEBUG] [Thread-1670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:04:40.404 [DEBUG] [Thread-1671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:04:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:04:42.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:04:42.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:04:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 4, 22), 38.69, 6.94, 0.0, 17.5, 26.99, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:04:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:04:22
2025-11-25T16:04:43.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:04:43.877 [DEBUG] [Thread-1672] [transport.py] [_log()] starting thread (client mode): 0x70d0ccd0
2025-11-25T16:04:43.877 [DEBUG] [Thread-1672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:04:43.899 [DEBUG] [Thread-1672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:04:43.899 [INFO] [Thread-1672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] client lang: <none>
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] server lang: <none>
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] kex follows: False
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:04:43.902 [DEBUG] [Thread-1672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:04:43.903 [DEBUG] [Thread-1672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:04:43.903 [DEBUG] [Thread-1672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:04:43.903 [DEBUG] [Thread-1672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:04:43.903 [DEBUG] [Thread-1672] [transport.py] [_log()] Compression: none
2025-11-25T16:04:43.903 [DEBUG] [Thread-1672] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:04:43.917 [DEBUG] [Thread-1672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:04:43.917 [DEBUG] [Thread-1672] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:04:43.918 [DEBUG] [Thread-1672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:04:43.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:04:43.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:04:43.919 [DEBUG] [Thread-1672] [transport.py] [_log()] userauth is OK
2025-11-25T16:04:43.919 [DEBUG] [Thread-1672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:04:43.919 [DEBUG] [Thread-1672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:04:43.919 [DEBUG] [Thread-1672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:04:43.919 [DEBUG] [Thread-1672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:04:43.946 [INFO] [Thread-1672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:04:43.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:04:44.581 [DEBUG] [Thread-1672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:04:44.581 [DEBUG] [Thread-1672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:04:44.581 [DEBUG] [Thread-1672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:04:44.621 [DEBUG] [Thread-1672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:04:44.622 [DEBUG] [Thread-1672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:04:44.625 [DEBUG] [Thread-1672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:04:44.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:04:44.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:04:44.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:04:44.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:04:44.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:04:44.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:04:44.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:04:44.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:04:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:04:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.586212 -999.00  +26.90  14.20     12   -4.60 1 1 1 1 1   888    0 33.17 11.52 ----- 11.5 14.2 19.2 22.8 32.9 -31.9 32.8 -32.0 34.1 -29.1 34.3 -34.7
2025-11-25T16:04:44.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:04:44.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:04:44.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.586212
2025-11-25T16:04:44.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:04:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:04:22', tmtdew=38.69, humidity=6.94, cloud=0.0, wind=17.5, temperature=26.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:04:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:04:44.649 [DEBUG] [Thread-1672] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:04:44.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:04:44.752 [DEBUG] [Thread-1675] [transport.py] [_log()] starting thread (client mode): 0x761dacb0
2025-11-25T16:04:44.752 [DEBUG] [Thread-1675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:04:44.767 [DEBUG] [Thread-1675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:04:44.767 [INFO] [Thread-1675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:04:44.775 [DEBUG] [Thread-1675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:04:44.775 [DEBUG] [Thread-1675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:04:44.775 [DEBUG] [Thread-1675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:04:44.775 [DEBUG] [Thread-1675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:04:44.776 [DEBUG] [Thread-1675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:04:44.776 [DEBUG] [Thread-1675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:04:44.776 [DEBUG] [Thread-1675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:04:44.776 [DEBUG] [Thread-1675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:04:44.776 [DEBUG] [Thread-1675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:04:44.776 [DEBUG] [Thread-1675] [transport.py] [_log()] client lang: <none>
2025-11-25T16:04:44.776 [DEBUG] [Thread-1675] [transport.py] [_log()] server lang: <none>
2025-11-25T16:04:44.776 [DEBUG] [Thread-1675] [transport.py] [_log()] kex follows: False
2025-11-25T16:04:44.776 [DEBUG] [Thread-1675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:04:44.777 [DEBUG] [Thread-1675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:04:44.777 [DEBUG] [Thread-1675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:04:44.777 [DEBUG] [Thread-1675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:04:44.777 [DEBUG] [Thread-1675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:04:44.777 [DEBUG] [Thread-1675] [transport.py] [_log()] Compression: none
2025-11-25T16:04:44.777 [DEBUG] [Thread-1675] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:04:44.835 [DEBUG] [Thread-1675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:04:44.835 [DEBUG] [Thread-1675] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:04:44.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:04:44.837 [DEBUG] [Thread-1675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:04:44.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:04:44.890 [DEBUG] [Thread-1675] [transport.py] [_log()] userauth is OK
2025-11-25T16:04:44.891 [DEBUG] [Thread-1675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:04:44.891 [DEBUG] [Thread-1675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:04:44.891 [DEBUG] [Thread-1675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:04:44.891 [DEBUG] [Thread-1675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:04:44.909 [INFO] [Thread-1675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:04:44.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:04:44.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:04:45.941 [DEBUG] [Thread-1675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:04:45.942 [DEBUG] [Thread-1675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:04:45.991 [DEBUG] [Thread-1675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:04:45.991 [DEBUG] [Thread-1675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:04:46.000 [DEBUG] [Thread-1675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:04:46.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:04:46.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')
2025-11-25T16:04:46.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:04:46.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:04:46.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:04:46.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:04:46.037 [DEBUG] [Thread-1675] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:04:55.442 [DEBUG] [Thread-1677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:04:57.770 [DEBUG] [Thread-1678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:05:10.499 [DEBUG] [Thread-1679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:05:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:05:16.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:05:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:05:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 4, 54), 38.61, 6.97, 0.0, 16.43, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:05:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:04:54
2025-11-25T16:05:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:05:17.027 [DEBUG] [Thread-1680] [transport.py] [_log()] starting thread (client mode): 0x737ebfd0
2025-11-25T16:05:17.027 [DEBUG] [Thread-1680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:05:17.049 [DEBUG] [Thread-1680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:05:17.049 [INFO] [Thread-1680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:05:17.052 [DEBUG] [Thread-1680] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:05:17.052 [DEBUG] [Thread-1680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] client lang: <none>
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] server lang: <none>
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] kex follows: False
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] Compression: none
2025-11-25T16:05:17.053 [DEBUG] [Thread-1680] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:05:17.072 [DEBUG] [Thread-1680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:05:17.072 [DEBUG] [Thread-1680] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:05:17.073 [DEBUG] [Thread-1680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:05:17.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:05:17.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:05:17.073 [DEBUG] [Thread-1680] [transport.py] [_log()] userauth is OK
2025-11-25T16:05:17.074 [DEBUG] [Thread-1680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:05:17.074 [DEBUG] [Thread-1680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:05:17.074 [DEBUG] [Thread-1680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:05:17.074 [DEBUG] [Thread-1680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:05:17.089 [INFO] [Thread-1680] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:05:17.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:05:18.583 [DEBUG] [Thread-1680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:05:18.583 [DEBUG] [Thread-1680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:05:18.583 [DEBUG] [Thread-1680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:05:18.624 [DEBUG] [Thread-1680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:05:18.624 [DEBUG] [Thread-1680] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:05:18.626 [DEBUG] [Thread-1680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:05:18.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:05:18.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:05:18.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:05:18.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:05:18.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:05:18.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:05:18.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.586906 -999.00  +26.60  11.60     12   -4.80 1 1 1 1 1   888    0 31.87 3.00 ----- 9.2 11.6 12.0 24.2 32.8 -32.0 32.7 -32.6 34.0 -29.1 34.1 -31.4
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.586906
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:05:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:04:54', tmtdew=38.61, humidity=6.97, cloud=0.0, wind=16.43, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:05:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:05:18.644 [DEBUG] [Thread-1680] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:05:18.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:05:18.735 [DEBUG] [Thread-1683] [transport.py] [_log()] starting thread (client mode): 0x737e8640
2025-11-25T16:05:18.735 [DEBUG] [Thread-1683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:05:18.749 [DEBUG] [Thread-1683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:05:18.749 [INFO] [Thread-1683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] client lang: <none>
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] server lang: <none>
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] kex follows: False
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] Compression: none
2025-11-25T16:05:18.757 [DEBUG] [Thread-1683] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:05:18.813 [DEBUG] [Thread-1683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:05:18.814 [DEBUG] [Thread-1683] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:05:18.814 [DEBUG] [Thread-1683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:05:18.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:05:18.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:05:18.871 [DEBUG] [Thread-1683] [transport.py] [_log()] userauth is OK
2025-11-25T16:05:18.871 [DEBUG] [Thread-1683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:05:18.871 [DEBUG] [Thread-1683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:05:18.871 [DEBUG] [Thread-1683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:05:18.871 [DEBUG] [Thread-1683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:05:18.890 [INFO] [Thread-1683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:05:18.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:05:18.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:05:19.151 [DEBUG] [Thread-1683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:05:19.151 [DEBUG] [Thread-1683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:05:19.199 [DEBUG] [Thread-1683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:05:19.199 [DEBUG] [Thread-1683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:05:19.208 [DEBUG] [Thread-1683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:05:19.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:05:19.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:05:19.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:05:19.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:05:19.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:05:19.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:05:19.245 [DEBUG] [Thread-1683] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:05:25.540 [DEBUG] [Thread-1685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:05:40.610 [DEBUG] [Thread-1686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:05:49.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:05:49.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:05:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:05:49.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 5, 26), 38.67, 6.96, 0.0, 15.85, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:05:49.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:05:26
2025-11-25T16:05:50.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:05:50.181 [DEBUG] [Thread-1687] [transport.py] [_log()] starting thread (client mode): 0x70d0f6a0
2025-11-25T16:05:50.181 [DEBUG] [Thread-1687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:05:50.201 [DEBUG] [Thread-1687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:05:50.201 [INFO] [Thread-1687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] client lang: <none>
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] server lang: <none>
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] kex follows: False
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:05:50.204 [DEBUG] [Thread-1687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:05:50.205 [DEBUG] [Thread-1687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:05:50.205 [DEBUG] [Thread-1687] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:05:50.205 [DEBUG] [Thread-1687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:05:50.205 [DEBUG] [Thread-1687] [transport.py] [_log()] Compression: none
2025-11-25T16:05:50.205 [DEBUG] [Thread-1687] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:05:50.220 [DEBUG] [Thread-1687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:05:50.220 [DEBUG] [Thread-1687] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:05:50.220 [DEBUG] [Thread-1687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:05:50.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:05:50.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:05:50.220 [DEBUG] [Thread-1687] [transport.py] [_log()] userauth is OK
2025-11-25T16:05:50.220 [DEBUG] [Thread-1687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:05:50.221 [DEBUG] [Thread-1687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:05:50.221 [DEBUG] [Thread-1687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:05:50.221 [DEBUG] [Thread-1687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:05:50.229 [INFO] [Thread-1687] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:05:50.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:05:50.848 [DEBUG] [Thread-1687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:05:50.848 [DEBUG] [Thread-1687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:05:50.848 [DEBUG] [Thread-1687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:05:50.889 [DEBUG] [Thread-1687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:05:50.889 [DEBUG] [Thread-1687] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:05:50.891 [DEBUG] [Thread-1687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:05:50.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:05:50.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:05:50.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:05:50.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:05:50.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:05:50.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:05:50.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:05:50.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.586906 -999.00  +26.60  11.60     12   -4.80 1 1 1 1 1   888    0 31.87 3.00 ----- 9.2 11.6 12.0 24.2 32.8 -32.0 32.7 -32.6 34.0 -29.1 34.1 -31.4
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.586906
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:05:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:05:26', tmtdew=38.67, humidity=6.96, cloud=0.0, wind=15.85, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:05:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:05:50.911 [DEBUG] [Thread-1687] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:05:50.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:05:51.004 [DEBUG] [Thread-1690] [transport.py] [_log()] starting thread (client mode): 0x70d0e770
2025-11-25T16:05:51.004 [DEBUG] [Thread-1690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:05:51.018 [DEBUG] [Thread-1690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:05:51.018 [INFO] [Thread-1690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] client lang: <none>
2025-11-25T16:05:51.025 [DEBUG] [Thread-1690] [transport.py] [_log()] server lang: <none>
2025-11-25T16:05:51.026 [DEBUG] [Thread-1690] [transport.py] [_log()] kex follows: False
2025-11-25T16:05:51.026 [DEBUG] [Thread-1690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:05:51.026 [DEBUG] [Thread-1690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:05:51.026 [DEBUG] [Thread-1690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:05:51.026 [DEBUG] [Thread-1690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:05:51.026 [DEBUG] [Thread-1690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:05:51.026 [DEBUG] [Thread-1690] [transport.py] [_log()] Compression: none
2025-11-25T16:05:51.026 [DEBUG] [Thread-1690] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:05:51.081 [DEBUG] [Thread-1690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:05:51.082 [DEBUG] [Thread-1690] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:05:51.082 [DEBUG] [Thread-1690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:05:51.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:05:51.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:05:51.138 [DEBUG] [Thread-1690] [transport.py] [_log()] userauth is OK
2025-11-25T16:05:51.138 [DEBUG] [Thread-1690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:05:51.138 [DEBUG] [Thread-1690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:05:51.138 [DEBUG] [Thread-1690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:05:51.138 [DEBUG] [Thread-1690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:05:51.152 [INFO] [Thread-1690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:05:51.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:05:51.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:05:51.656 [DEBUG] [Thread-1690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:05:51.656 [DEBUG] [Thread-1690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:05:51.704 [DEBUG] [Thread-1690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:05:51.704 [DEBUG] [Thread-1690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:05:51.712 [DEBUG] [Thread-1690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:05:51.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:05:51.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:05:51.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:05:51.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:05:51.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:05:51.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:05:51.744 [DEBUG] [Thread-1690] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:05:55.651 [DEBUG] [Thread-1692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:05:58.529 [DEBUG] [Thread-1693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:06:10.718 [DEBUG] [Thread-1694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:06:21.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:06:21.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:06:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:06:22.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 5, 58), 38.51, 7.44, 0.0, 12.33, 27.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:06:22.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:05:58
2025-11-25T16:06:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:06:22.700 [DEBUG] [Thread-1695] [transport.py] [_log()] starting thread (client mode): 0x73783130
2025-11-25T16:06:22.700 [DEBUG] [Thread-1695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:06:22.722 [DEBUG] [Thread-1695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:06:22.722 [INFO] [Thread-1695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:06:22.725 [DEBUG] [Thread-1695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:06:22.725 [DEBUG] [Thread-1695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:06:22.725 [DEBUG] [Thread-1695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:06:22.725 [DEBUG] [Thread-1695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] client lang: <none>
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] server lang: <none>
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] kex follows: False
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] Compression: none
2025-11-25T16:06:22.726 [DEBUG] [Thread-1695] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:06:22.743 [DEBUG] [Thread-1695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:06:22.744 [DEBUG] [Thread-1695] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:06:22.744 [DEBUG] [Thread-1695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:06:22.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:06:22.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:06:22.746 [DEBUG] [Thread-1695] [transport.py] [_log()] userauth is OK
2025-11-25T16:06:22.746 [DEBUG] [Thread-1695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:06:22.747 [DEBUG] [Thread-1695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:06:22.747 [DEBUG] [Thread-1695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:06:22.747 [DEBUG] [Thread-1695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:06:22.771 [INFO] [Thread-1695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:06:22.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:06:23.552 [DEBUG] [Thread-1695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:06:23.552 [DEBUG] [Thread-1695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:06:23.552 [DEBUG] [Thread-1695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:06:23.593 [DEBUG] [Thread-1695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:06:23.593 [DEBUG] [Thread-1695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:06:23.596 [DEBUG] [Thread-1695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:06:23.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:06:23.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:06:23.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:06:23.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:06:23.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:06:23.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:06:23.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:06:23.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:06:23.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:06:23.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.587253 -999.00  +26.90   9.96     12   -4.60 1 1 1 1 1   888    0 31.35 -0.95 ----- 10.6 10.0 341.8 20.6 32.8 -31.6 32.7 -31.8 34.0 -29.5 34.0 -30.1
2025-11-25T16:06:23.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:06:23.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:06:23.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.587253
2025-11-25T16:06:23.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:06:23.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:06:23.621 [DEBUG] [Thread-1695] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:06:23.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:06:23.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:06:23.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:06:23.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:05:58', tmtdew=38.51, humidity=7.44, cloud=0.0, wind=12.33, temperature=27.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:05:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:06:23.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:06:23.732 [DEBUG] [Thread-1698] [transport.py] [_log()] starting thread (client mode): 0x73780d90
2025-11-25T16:06:23.732 [DEBUG] [Thread-1698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:06:23.747 [DEBUG] [Thread-1698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:06:23.747 [INFO] [Thread-1698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:06:23.754 [DEBUG] [Thread-1698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] client lang: <none>
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] server lang: <none>
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] kex follows: False
2025-11-25T16:06:23.755 [DEBUG] [Thread-1698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:06:23.756 [DEBUG] [Thread-1698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:06:23.756 [DEBUG] [Thread-1698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:06:23.756 [DEBUG] [Thread-1698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:06:23.756 [DEBUG] [Thread-1698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:06:23.756 [DEBUG] [Thread-1698] [transport.py] [_log()] Compression: none
2025-11-25T16:06:23.756 [DEBUG] [Thread-1698] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:06:23.817 [DEBUG] [Thread-1698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:06:23.817 [DEBUG] [Thread-1698] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:06:23.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:06:23.819 [DEBUG] [Thread-1698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:06:23.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:06:23.875 [DEBUG] [Thread-1698] [transport.py] [_log()] userauth is OK
2025-11-25T16:06:23.875 [DEBUG] [Thread-1698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:06:23.875 [DEBUG] [Thread-1698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:06:23.875 [DEBUG] [Thread-1698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:06:23.875 [DEBUG] [Thread-1698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:06:23.894 [INFO] [Thread-1698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:06:23.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:06:23.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:06:24.541 [DEBUG] [Thread-1698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:06:24.542 [DEBUG] [Thread-1698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:06:24.589 [DEBUG] [Thread-1698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:06:24.590 [DEBUG] [Thread-1698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:06:24.599 [DEBUG] [Thread-1698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:06:24.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:06:24.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:06: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') -> 00000000
2025-11-25T16:06:24.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:06:24.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:06:24.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:06:24.635 [DEBUG] [Thread-1698] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:06:25.764 [DEBUG] [Thread-1700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:06:40.830 [DEBUG] [Thread-1701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:06:54.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:06:54.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:06:54.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:06:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 6, 30), 38.39, 7.51, 0.0, 13.11, 27.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:06:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:06:30
2025-11-25T16:06:55.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:06:55.567 [DEBUG] [Thread-1702] [transport.py] [_log()] starting thread (client mode): 0x73783b50
2025-11-25T16:06:55.567 [DEBUG] [Thread-1702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:06:55.588 [DEBUG] [Thread-1702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:06:55.588 [INFO] [Thread-1702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:06:55.591 [DEBUG] [Thread-1702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:06:55.591 [DEBUG] [Thread-1702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:06:55.591 [DEBUG] [Thread-1702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:06:55.591 [DEBUG] [Thread-1702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:06:55.591 [DEBUG] [Thread-1702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:06:55.591 [DEBUG] [Thread-1702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:06:55.591 [DEBUG] [Thread-1702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] client lang: <none>
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] server lang: <none>
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] kex follows: False
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] Compression: none
2025-11-25T16:06:55.592 [DEBUG] [Thread-1702] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:06:55.612 [DEBUG] [Thread-1702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:06:55.613 [DEBUG] [Thread-1702] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:06:55.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:06:55.614 [DEBUG] [Thread-1702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:06:55.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:06:55.616 [DEBUG] [Thread-1702] [transport.py] [_log()] userauth is OK
2025-11-25T16:06:55.616 [DEBUG] [Thread-1702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:06:55.617 [DEBUG] [Thread-1702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:06:55.617 [DEBUG] [Thread-1702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:06:55.617 [DEBUG] [Thread-1702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:06:55.655 [INFO] [Thread-1702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:06:55.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:06:55.874 [DEBUG] [Thread-1704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:06:56.272 [DEBUG] [Thread-1702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:06:56.272 [DEBUG] [Thread-1702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:06:56.273 [DEBUG] [Thread-1702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:06:56.313 [DEBUG] [Thread-1702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:06:56.313 [DEBUG] [Thread-1702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:06:56.316 [DEBUG] [Thread-1702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:06:56.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:06:56.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:06:56.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:06:56.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:06:56.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:06:56.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:06:56.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:06:56.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:06:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:06:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.587601 -999.00  +27.10  12.71     12   -4.40 1 1 1 1 1   888    0 31.88 -3.87 ----- 11.6 12.7 317.0 14.7 32.8 -31.7 32.7 -31.4 34.0 -29.1 34.1 -29.9
2025-11-25T16:06:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:06:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:06:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.587601
2025-11-25T16:06:56.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:06:56.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:06:56.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:06:56.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:06:56.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:06:56.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:06:30', tmtdew=38.39, humidity=7.51, cloud=0.0, wind=13.11, temperature=27.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:06:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:06:56.343 [DEBUG] [Thread-1702] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:06:56.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:06:56.445 [DEBUG] [Thread-1706] [transport.py] [_log()] starting thread (client mode): 0x761db310
2025-11-25T16:06:56.446 [DEBUG] [Thread-1706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:06:56.462 [DEBUG] [Thread-1706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:06:56.462 [INFO] [Thread-1706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:06:56.471 [DEBUG] [Thread-1706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] client lang: <none>
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] server lang: <none>
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] kex follows: False
2025-11-25T16:06:56.472 [DEBUG] [Thread-1706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:06:56.473 [DEBUG] [Thread-1706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:06:56.473 [DEBUG] [Thread-1706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:06:56.473 [DEBUG] [Thread-1706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:06:56.473 [DEBUG] [Thread-1706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:06:56.473 [DEBUG] [Thread-1706] [transport.py] [_log()] Compression: none
2025-11-25T16:06:56.473 [DEBUG] [Thread-1706] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:06:56.531 [DEBUG] [Thread-1706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:06:56.532 [DEBUG] [Thread-1706] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:06:56.533 [DEBUG] [Thread-1706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:06:56.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:06:56.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:06:56.591 [DEBUG] [Thread-1706] [transport.py] [_log()] userauth is OK
2025-11-25T16:06:56.591 [DEBUG] [Thread-1706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:06:56.591 [DEBUG] [Thread-1706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:06:56.592 [DEBUG] [Thread-1706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:06:56.592 [DEBUG] [Thread-1706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:06:56.611 [INFO] [Thread-1706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:06:56.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:06:56.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:06:57.745 [DEBUG] [Thread-1706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:06:57.745 [DEBUG] [Thread-1706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:06:57.793 [DEBUG] [Thread-1706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:06:57.793 [DEBUG] [Thread-1706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:06:57.804 [DEBUG] [Thread-1706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:06:57.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:06: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')
2025-11-25T16:06: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
2025-11-25T16:06:57.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:06:57.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:06:57.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:06:57.845 [DEBUG] [Thread-1706] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:06:59.264 [DEBUG] [Thread-1708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:07:10.914 [DEBUG] [Thread-1709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:07:25.981 [DEBUG] [Thread-1710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:07:27.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:07:27.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:07: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
2025-11-25T16:07:28.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 7, 2), 38.62, 7.39, 0.0, 11.35, 27.26, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:07:28.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:07:02
2025-11-25T16:07:28.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:07:28.807 [DEBUG] [Thread-1711] [transport.py] [_log()] starting thread (client mode): 0x737ebbb0
2025-11-25T16:07:28.807 [DEBUG] [Thread-1711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:07:28.829 [DEBUG] [Thread-1711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:07:28.829 [INFO] [Thread-1711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:07:28.832 [DEBUG] [Thread-1711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:07:28.832 [DEBUG] [Thread-1711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:07:28.832 [DEBUG] [Thread-1711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:07:28.833 [DEBUG] [Thread-1711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:07:28.833 [DEBUG] [Thread-1711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:07:28.833 [DEBUG] [Thread-1711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:07:28.833 [DEBUG] [Thread-1711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:07:28.833 [DEBUG] [Thread-1711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:07:28.833 [DEBUG] [Thread-1711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:07:28.833 [DEBUG] [Thread-1711] [transport.py] [_log()] client lang: <none>
2025-11-25T16:07:28.833 [DEBUG] [Thread-1711] [transport.py] [_log()] server lang: <none>
2025-11-25T16:07:28.834 [DEBUG] [Thread-1711] [transport.py] [_log()] kex follows: False
2025-11-25T16:07:28.834 [DEBUG] [Thread-1711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:07:28.834 [DEBUG] [Thread-1711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:07:28.834 [DEBUG] [Thread-1711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:07:28.834 [DEBUG] [Thread-1711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:07:28.834 [DEBUG] [Thread-1711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:07:28.834 [DEBUG] [Thread-1711] [transport.py] [_log()] Compression: none
2025-11-25T16:07:28.835 [DEBUG] [Thread-1711] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:07:28.855 [DEBUG] [Thread-1711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:07:28.856 [DEBUG] [Thread-1711] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:07:28.856 [DEBUG] [Thread-1711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:07:28.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:07:28.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:07:28.858 [DEBUG] [Thread-1711] [transport.py] [_log()] userauth is OK
2025-11-25T16:07:28.859 [DEBUG] [Thread-1711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:07:28.859 [DEBUG] [Thread-1711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:07:28.859 [DEBUG] [Thread-1711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:07:28.859 [DEBUG] [Thread-1711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:07:28.884 [INFO] [Thread-1711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:07:28.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:07:29.660 [DEBUG] [Thread-1711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:07:29.660 [DEBUG] [Thread-1711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:07:29.661 [DEBUG] [Thread-1711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:07:29.701 [DEBUG] [Thread-1711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:07:29.701 [DEBUG] [Thread-1711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:07:29.704 [DEBUG] [Thread-1711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:07:29.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:07:29.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:07:29.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:07:29.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:07:29.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:07:29.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:07:29.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:07:29.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:07:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:07:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.587948 -999.00  +27.20  16.28     12   -4.40 1 1 1 1 1   888    0 31.81 -6.19 ----- 12.1 16.3 30.3 19.4 32.8 -31.3 32.8 -31.4 34.1 -28.6 34.3 -29.8
2025-11-25T16:07:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:07:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:07:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.587948
2025-11-25T16:07:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:07:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:07:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:07:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:07:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:07:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:07:02', tmtdew=38.62, humidity=7.39, cloud=0.0, wind=11.35, temperature=27.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:06:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:07:29.730 [DEBUG] [Thread-1711] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:07:29.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:07:29.833 [DEBUG] [Thread-1714] [transport.py] [_log()] starting thread (client mode): 0x737ea140
2025-11-25T16:07:29.834 [DEBUG] [Thread-1714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:07:29.848 [DEBUG] [Thread-1714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:07:29.848 [INFO] [Thread-1714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:07:29.856 [DEBUG] [Thread-1714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:07:29.856 [DEBUG] [Thread-1714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] client lang: <none>
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] server lang: <none>
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] kex follows: False
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:07:29.857 [DEBUG] [Thread-1714] [transport.py] [_log()] Compression: none
2025-11-25T16:07:29.858 [DEBUG] [Thread-1714] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:07:29.916 [DEBUG] [Thread-1714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:07:29.917 [DEBUG] [Thread-1714] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:07:29.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:07:29.918 [DEBUG] [Thread-1714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:07:29.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:07:29.975 [DEBUG] [Thread-1714] [transport.py] [_log()] userauth is OK
2025-11-25T16:07:29.975 [DEBUG] [Thread-1714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:07:29.976 [DEBUG] [Thread-1714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:07:29.976 [DEBUG] [Thread-1714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:07:29.976 [DEBUG] [Thread-1714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:07:29.994 [INFO] [Thread-1714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:07:29.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:07:29.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:07:30.567 [DEBUG] [Thread-1714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:07:30.567 [DEBUG] [Thread-1714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:07:30.615 [DEBUG] [Thread-1714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:07:30.615 [DEBUG] [Thread-1714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:07:30.625 [DEBUG] [Thread-1714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:07:30.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:07:30.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:07:30.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:07:30.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:07:30.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:07:30.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:07:30.668 [DEBUG] [Thread-1714] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:07:41.028 [DEBUG] [Thread-1716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:07:56.083 [DEBUG] [Thread-1717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:07:59.767 [DEBUG] [Thread-1718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:08:00.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:08:00.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:08:00.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:08:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 7, 34), 38.84, 6.91, 0.0, 9.71, 27.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:08:01.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:07:34
2025-11-25T16:08:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:08:01.637 [DEBUG] [Thread-1719] [transport.py] [_log()] starting thread (client mode): 0x737e9270
2025-11-25T16:08:01.637 [DEBUG] [Thread-1719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:08:01.649 [DEBUG] [Thread-1719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:08:01.649 [INFO] [Thread-1719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:08:01.652 [DEBUG] [Thread-1719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:08:01.652 [DEBUG] [Thread-1719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:08:01.652 [DEBUG] [Thread-1719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:08:01.652 [DEBUG] [Thread-1719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:08:01.652 [DEBUG] [Thread-1719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] client lang: <none>
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] server lang: <none>
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] kex follows: False
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] Compression: none
2025-11-25T16:08:01.653 [DEBUG] [Thread-1719] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:08:01.671 [DEBUG] [Thread-1719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:08:01.672 [DEBUG] [Thread-1719] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:08:01.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:08:01.673 [DEBUG] [Thread-1719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:08:01.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:08:01.675 [DEBUG] [Thread-1719] [transport.py] [_log()] userauth is OK
2025-11-25T16:08:01.675 [DEBUG] [Thread-1719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:08:01.675 [DEBUG] [Thread-1719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:08:01.675 [DEBUG] [Thread-1719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:08:01.675 [DEBUG] [Thread-1719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:08:01.700 [INFO] [Thread-1719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:08:01.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:08:02.339 [DEBUG] [Thread-1719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:08:02.339 [DEBUG] [Thread-1719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:08:02.339 [DEBUG] [Thread-1719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:08:02.380 [DEBUG] [Thread-1719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:08:02.380 [DEBUG] [Thread-1719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:08:02.383 [DEBUG] [Thread-1719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:08:02.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:08:02.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:08:02.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:08:02.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:08:02.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:08:02.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:08:02.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:08:02.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:08:02.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:08:02.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.588295 -999.00  +27.00   7.39     12   -4.70 1 1 1 1 1   888    0 31.04 -7.62 ----- 10.9 7.4 357.0 16.0 32.8 -31.6 32.7 -31.9 34.0 -28.9 34.3 -29.9
2025-11-25T16:08:02.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:08:02.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:08:02.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.588295
2025-11-25T16:08:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:08:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:08:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:08:02.408 [DEBUG] [Thread-1719] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:08:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:08:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:08:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:07:34', tmtdew=38.84, humidity=6.91, cloud=0.0, wind=9.71, temperature=27.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:07:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:08:02.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:08:02.513 [DEBUG] [Thread-1722] [transport.py] [_log()] starting thread (client mode): 0x737ebdf0
2025-11-25T16:08:02.513 [DEBUG] [Thread-1722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:08:02.527 [DEBUG] [Thread-1722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:08:02.527 [INFO] [Thread-1722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:08:02.535 [DEBUG] [Thread-1722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:08:02.535 [DEBUG] [Thread-1722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:08:02.535 [DEBUG] [Thread-1722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:08:02.535 [DEBUG] [Thread-1722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:08:02.535 [DEBUG] [Thread-1722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:08:02.535 [DEBUG] [Thread-1722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:08:02.535 [DEBUG] [Thread-1722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:08:02.535 [DEBUG] [Thread-1722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] client lang: <none>
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] server lang: <none>
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] kex follows: False
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] Compression: none
2025-11-25T16:08:02.536 [DEBUG] [Thread-1722] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:08:02.610 [DEBUG] [Thread-1722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:08:02.610 [DEBUG] [Thread-1722] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:08:02.611 [DEBUG] [Thread-1722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:08:02.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:08:02.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:08:02.670 [DEBUG] [Thread-1722] [transport.py] [_log()] userauth is OK
2025-11-25T16:08:02.670 [DEBUG] [Thread-1722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:08:02.670 [DEBUG] [Thread-1722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:08:02.671 [DEBUG] [Thread-1722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:08:02.671 [DEBUG] [Thread-1722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:08:02.695 [INFO] [Thread-1722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:08:02.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:08:02.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:08:03.270 [DEBUG] [Thread-1722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:08:03.270 [DEBUG] [Thread-1722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:08:03.318 [DEBUG] [Thread-1722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:08:03.318 [DEBUG] [Thread-1722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:08:03.329 [DEBUG] [Thread-1722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:08:03.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:08:03.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:08:03.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:08:03.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:08:03.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:08:03.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:08:03.369 [DEBUG] [Thread-1722] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:08:11.133 [DEBUG] [Thread-1724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:08:26.206 [DEBUG] [Thread-1725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:08:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:08:33.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:08:33.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:08:34.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 8, 6), 38.96, 6.86, 0.0, 13.02, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:08:34.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:08:06
2025-11-25T16:08:34.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:08:34.322 [DEBUG] [Thread-1726] [transport.py] [_log()] starting thread (client mode): 0x70d0cbe0
2025-11-25T16:08:34.322 [DEBUG] [Thread-1726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:08:34.342 [DEBUG] [Thread-1726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:08:34.342 [INFO] [Thread-1726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:08:34.346 [DEBUG] [Thread-1726] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:08:34.346 [DEBUG] [Thread-1726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:08:34.346 [DEBUG] [Thread-1726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:08:34.346 [DEBUG] [Thread-1726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:08:34.346 [DEBUG] [Thread-1726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:08:34.346 [DEBUG] [Thread-1726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:08:34.346 [DEBUG] [Thread-1726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:08:34.346 [DEBUG] [Thread-1726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:08:34.347 [DEBUG] [Thread-1726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:08:34.347 [DEBUG] [Thread-1726] [transport.py] [_log()] client lang: <none>
2025-11-25T16:08:34.347 [DEBUG] [Thread-1726] [transport.py] [_log()] server lang: <none>
2025-11-25T16:08:34.347 [DEBUG] [Thread-1726] [transport.py] [_log()] kex follows: False
2025-11-25T16:08:34.347 [DEBUG] [Thread-1726] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:08:34.347 [DEBUG] [Thread-1726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:08:34.347 [DEBUG] [Thread-1726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:08:34.347 [DEBUG] [Thread-1726] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:08:34.347 [DEBUG] [Thread-1726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:08:34.348 [DEBUG] [Thread-1726] [transport.py] [_log()] Compression: none
2025-11-25T16:08:34.348 [DEBUG] [Thread-1726] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:08:34.367 [DEBUG] [Thread-1726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:08:34.367 [DEBUG] [Thread-1726] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:08:34.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:08:34.368 [DEBUG] [Thread-1726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:08:34.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:08:34.370 [DEBUG] [Thread-1726] [transport.py] [_log()] userauth is OK
2025-11-25T16:08:34.370 [DEBUG] [Thread-1726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:08:34.370 [DEBUG] [Thread-1726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:08:34.370 [DEBUG] [Thread-1726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:08:34.370 [DEBUG] [Thread-1726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:08:34.394 [INFO] [Thread-1726] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:08:34.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:08:35.004 [DEBUG] [Thread-1726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:08:35.004 [DEBUG] [Thread-1726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:08:35.004 [DEBUG] [Thread-1726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:08:35.045 [DEBUG] [Thread-1726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:08:35.045 [DEBUG] [Thread-1726] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:08:35.047 [DEBUG] [Thread-1726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:08:35.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:08:35.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:08:35.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:08:35.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:08:35.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:08:35.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:08:35.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:08:35.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:08:35.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:08:35.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.588643 -999.00  +26.80   6.18     12   -4.80 1 1 1 1 1   888    0 31.66 -9.47 ----- 5.7 6.2 6.8 15.9 32.8 -31.9 32.7 -32.3 34.0 -29.2 34.2 -30.2
2025-11-25T16:08:35.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:08:35.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:08:35.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.588643
2025-11-25T16:08:35.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:08:35.069 [DEBUG] [Thread-1726] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:08:35.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:08:35.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:08:35.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:08:35.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:08:35.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:08:06', tmtdew=38.96, humidity=6.86, cloud=0.0, wind=13.02, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:07:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:08:35.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:08:35.173 [DEBUG] [Thread-1729] [transport.py] [_log()] starting thread (client mode): 0x70d0c220
2025-11-25T16:08:35.173 [DEBUG] [Thread-1729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:08:35.189 [DEBUG] [Thread-1729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:08:35.189 [INFO] [Thread-1729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:08:35.196 [DEBUG] [Thread-1729] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] client lang: <none>
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] server lang: <none>
2025-11-25T16:08:35.197 [DEBUG] [Thread-1729] [transport.py] [_log()] kex follows: False
2025-11-25T16:08:35.198 [DEBUG] [Thread-1729] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:08:35.198 [DEBUG] [Thread-1729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:08:35.198 [DEBUG] [Thread-1729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:08:35.198 [DEBUG] [Thread-1729] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:08:35.198 [DEBUG] [Thread-1729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:08:35.198 [DEBUG] [Thread-1729] [transport.py] [_log()] Compression: none
2025-11-25T16:08:35.198 [DEBUG] [Thread-1729] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:08:35.254 [DEBUG] [Thread-1729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:08:35.254 [DEBUG] [Thread-1729] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:08:35.254 [DEBUG] [Thread-1729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:08:35.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:08:35.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:08:35.311 [DEBUG] [Thread-1729] [transport.py] [_log()] userauth is OK
2025-11-25T16:08:35.311 [DEBUG] [Thread-1729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:08:35.311 [DEBUG] [Thread-1729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:08:35.311 [DEBUG] [Thread-1729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:08:35.311 [DEBUG] [Thread-1729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:08:35.334 [INFO] [Thread-1729] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:08:35.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:08:35.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:08:36.072 [DEBUG] [Thread-1729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:08:36.072 [DEBUG] [Thread-1729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:08:36.121 [DEBUG] [Thread-1729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:08:36.121 [DEBUG] [Thread-1729] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:08:36.130 [DEBUG] [Thread-1729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:08:36.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:08:36.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:08:36.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:08:36.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:08:36.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:08:36.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:08:36.165 [DEBUG] [Thread-1729] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:08:41.251 [DEBUG] [Thread-1731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:08:56.320 [DEBUG] [Thread-1732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:09:00.293 [DEBUG] [Thread-1733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:09:06.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:09:06.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:09:06.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:09:06.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 8, 38), 39.03, 6.79, 0.0, 16.82, 27.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:09:06.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:08:38
2025-11-25T16:09:06.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:09:07.122 [DEBUG] [Thread-1734] [transport.py] [_log()] starting thread (client mode): 0x7378e1a0
2025-11-25T16:09:07.123 [DEBUG] [Thread-1734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:09:07.145 [DEBUG] [Thread-1734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:09:07.145 [INFO] [Thread-1734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] client lang: <none>
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] server lang: <none>
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] kex follows: False
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:09:07.148 [DEBUG] [Thread-1734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:09:07.149 [DEBUG] [Thread-1734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:09:07.149 [DEBUG] [Thread-1734] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:09:07.149 [DEBUG] [Thread-1734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:09:07.149 [DEBUG] [Thread-1734] [transport.py] [_log()] Compression: none
2025-11-25T16:09:07.149 [DEBUG] [Thread-1734] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:09:07.166 [DEBUG] [Thread-1734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:09:07.167 [DEBUG] [Thread-1734] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:09:07.167 [DEBUG] [Thread-1734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:09:07.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:09:07.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:09:07.169 [DEBUG] [Thread-1734] [transport.py] [_log()] userauth is OK
2025-11-25T16:09:07.169 [DEBUG] [Thread-1734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:09:07.170 [DEBUG] [Thread-1734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:09:07.170 [DEBUG] [Thread-1734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:09:07.170 [DEBUG] [Thread-1734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:09:07.195 [INFO] [Thread-1734] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:09:07.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:09:07.851 [DEBUG] [Thread-1734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:09:07.851 [DEBUG] [Thread-1734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:09:07.852 [DEBUG] [Thread-1734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:09:07.892 [DEBUG] [Thread-1734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:09:07.892 [DEBUG] [Thread-1734] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:09:07.895 [DEBUG] [Thread-1734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:09:07.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:09:07.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:09:07.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:09:07.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:09:07.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:09:07.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:09:07.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:09:07.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:09:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:09:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.588990 -999.00  +26.80  19.27     12   -4.70 1 1 1 1 1   888    0 31.57 -10.26 ----- 15.5 19.3 303.4 24.9 32.8 -31.5 32.7 -31.5 34.0 -28.7 34.1 -29.7
2025-11-25T16:09:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:09:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:09:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.588990
2025-11-25T16:09:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:09:07.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:09:07.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:09:07.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:09:07.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:09:07.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:08:38', tmtdew=39.03, humidity=6.79, cloud=0.0, wind=16.82, temperature=27.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:08:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:09:07.920 [DEBUG] [Thread-1734] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:09:08.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:09:08.025 [DEBUG] [Thread-1737] [transport.py] [_log()] starting thread (client mode): 0x7378ece0
2025-11-25T16:09:08.025 [DEBUG] [Thread-1737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:09:08.040 [DEBUG] [Thread-1737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:09:08.040 [INFO] [Thread-1737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:09:08.047 [DEBUG] [Thread-1737] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:09:08.048 [DEBUG] [Thread-1737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:09:08.048 [DEBUG] [Thread-1737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:09:08.048 [DEBUG] [Thread-1737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:09:08.048 [DEBUG] [Thread-1737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:09:08.048 [DEBUG] [Thread-1737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:09:08.048 [DEBUG] [Thread-1737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:09:08.048 [DEBUG] [Thread-1737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:09:08.048 [DEBUG] [Thread-1737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:09:08.048 [DEBUG] [Thread-1737] [transport.py] [_log()] client lang: <none>
2025-11-25T16:09:08.049 [DEBUG] [Thread-1737] [transport.py] [_log()] server lang: <none>
2025-11-25T16:09:08.049 [DEBUG] [Thread-1737] [transport.py] [_log()] kex follows: False
2025-11-25T16:09:08.049 [DEBUG] [Thread-1737] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:09:08.049 [DEBUG] [Thread-1737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:09:08.049 [DEBUG] [Thread-1737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:09:08.049 [DEBUG] [Thread-1737] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:09:08.049 [DEBUG] [Thread-1737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:09:08.049 [DEBUG] [Thread-1737] [transport.py] [_log()] Compression: none
2025-11-25T16:09:08.049 [DEBUG] [Thread-1737] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:09:08.108 [DEBUG] [Thread-1737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:09:08.108 [DEBUG] [Thread-1737] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:09:08.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:09:08.109 [DEBUG] [Thread-1737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:09:08.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:09:08.163 [DEBUG] [Thread-1737] [transport.py] [_log()] userauth is OK
2025-11-25T16:09:08.164 [DEBUG] [Thread-1737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:09:08.164 [DEBUG] [Thread-1737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:09:08.164 [DEBUG] [Thread-1737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:09:08.164 [DEBUG] [Thread-1737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:09:08.183 [INFO] [Thread-1737] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:09:08.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:09:08.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:09:08.435 [DEBUG] [Thread-1737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:09:08.435 [DEBUG] [Thread-1737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:09:08.482 [DEBUG] [Thread-1737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:09:08.483 [DEBUG] [Thread-1737] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:09:08.492 [DEBUG] [Thread-1737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:09:08.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:09:08.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:09:08.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:09:08.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:09:08.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:09:08.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:09:08.528 [DEBUG] [Thread-1737] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:09:11.360 [DEBUG] [Thread-1739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:09:26.416 [DEBUG] [Thread-1740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:09:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:09:38.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:09:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:09:39.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 9, 10), 39.19, 6.71, 0.0, 17.38, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:09:39.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:09:10
2025-11-25T16:09:39.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:09:39.497 [DEBUG] [Thread-1741] [transport.py] [_log()] starting thread (client mode): 0x7378ffa0
2025-11-25T16:09:39.497 [DEBUG] [Thread-1741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:09:39.517 [DEBUG] [Thread-1741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:09:39.517 [INFO] [Thread-1741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] client lang: <none>
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] server lang: <none>
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] kex follows: False
2025-11-25T16:09:39.520 [DEBUG] [Thread-1741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:09:39.521 [DEBUG] [Thread-1741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:09:39.521 [DEBUG] [Thread-1741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:09:39.521 [DEBUG] [Thread-1741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:09:39.521 [DEBUG] [Thread-1741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:09:39.521 [DEBUG] [Thread-1741] [transport.py] [_log()] Compression: none
2025-11-25T16:09:39.521 [DEBUG] [Thread-1741] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:09:39.542 [DEBUG] [Thread-1741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:09:39.543 [DEBUG] [Thread-1741] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:09:39.543 [DEBUG] [Thread-1741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:09:39.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:09:39.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:09:39.546 [DEBUG] [Thread-1741] [transport.py] [_log()] userauth is OK
2025-11-25T16:09:39.546 [DEBUG] [Thread-1741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:09:39.546 [DEBUG] [Thread-1741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:09:39.546 [DEBUG] [Thread-1741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:09:39.546 [DEBUG] [Thread-1741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:09:39.582 [INFO] [Thread-1741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:09:39.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:09:40.240 [DEBUG] [Thread-1741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:09:40.240 [DEBUG] [Thread-1741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:09:40.241 [DEBUG] [Thread-1741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:09:40.282 [DEBUG] [Thread-1741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:09:40.282 [DEBUG] [Thread-1741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:09:40.286 [DEBUG] [Thread-1741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:09:40.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:09:40.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:09:40.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:09:40.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:09:40.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:09:40.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:09:40.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:09:40.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:09:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:09:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.589684 -999.00  +27.40  17.14     11   -4.50 1 1 1 1 1   888    0 31.32 -9.20 ----- 9.7 17.1 7.8 21.3 32.9 -31.6 32.8 -31.0 34.1 -28.7 34.3 -29.7
2025-11-25T16:09:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:09:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:09:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.589684
2025-11-25T16:09:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:09:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:09:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:09:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:09:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:09:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:09:10', tmtdew=39.19, humidity=6.71, cloud=0.0, wind=17.38, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:09:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:09:40.314 [DEBUG] [Thread-1741] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:09:40.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:09:40.418 [DEBUG] [Thread-1744] [transport.py] [_log()] starting thread (client mode): 0x70d0e3b0
2025-11-25T16:09:40.418 [DEBUG] [Thread-1744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:09:40.433 [DEBUG] [Thread-1744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:09:40.433 [INFO] [Thread-1744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:09:40.441 [DEBUG] [Thread-1744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:09:40.441 [DEBUG] [Thread-1744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:09:40.441 [DEBUG] [Thread-1744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:09:40.442 [DEBUG] [Thread-1744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:09:40.442 [DEBUG] [Thread-1744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:09:40.442 [DEBUG] [Thread-1744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:09:40.442 [DEBUG] [Thread-1744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:09:40.442 [DEBUG] [Thread-1744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:09:40.442 [DEBUG] [Thread-1744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:09:40.442 [DEBUG] [Thread-1744] [transport.py] [_log()] client lang: <none>
2025-11-25T16:09:40.442 [DEBUG] [Thread-1744] [transport.py] [_log()] server lang: <none>
2025-11-25T16:09:40.442 [DEBUG] [Thread-1744] [transport.py] [_log()] kex follows: False
2025-11-25T16:09:40.443 [DEBUG] [Thread-1744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:09:40.443 [DEBUG] [Thread-1744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:09:40.443 [DEBUG] [Thread-1744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:09:40.443 [DEBUG] [Thread-1744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:09:40.443 [DEBUG] [Thread-1744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:09:40.443 [DEBUG] [Thread-1744] [transport.py] [_log()] Compression: none
2025-11-25T16:09:40.443 [DEBUG] [Thread-1744] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:09:40.500 [DEBUG] [Thread-1744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:09:40.501 [DEBUG] [Thread-1744] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:09:40.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:09:40.503 [DEBUG] [Thread-1744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:09:40.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:09:40.559 [DEBUG] [Thread-1744] [transport.py] [_log()] userauth is OK
2025-11-25T16:09:40.559 [DEBUG] [Thread-1744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:09:40.560 [DEBUG] [Thread-1744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:09:40.560 [DEBUG] [Thread-1744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:09:40.560 [DEBUG] [Thread-1744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:09:40.579 [INFO] [Thread-1744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:09:40.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:09:40.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:09:41.389 [DEBUG] [Thread-1744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:09:41.389 [DEBUG] [Thread-1744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:09:41.437 [DEBUG] [Thread-1744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:09:41.437 [DEBUG] [Thread-1744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:09:41.446 [DEBUG] [Thread-1744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:09:41.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:09:41.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:09:41.462 [DEBUG] [Thread-1746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:09:41.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
2025-11-25T16:09:41.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:09:41.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:09:41.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:09:41.482 [DEBUG] [Thread-1744] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:09:56.531 [DEBUG] [Thread-1747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:10:01.022 [DEBUG] [Thread-1748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:10:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:10:11.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:10:11.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:10:11.574 [DEBUG] [Thread-1749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:10:12.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 9, 42), 38.95, 6.76, 0.0, 15.65, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:10:12.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:09:42
2025-11-25T16:10:12.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:10:12.521 [DEBUG] [Thread-1750] [transport.py] [_log()] starting thread (client mode): 0x70d0ca00
2025-11-25T16:10:12.521 [DEBUG] [Thread-1750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:10:12.541 [DEBUG] [Thread-1750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:10:12.541 [INFO] [Thread-1750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:10:12.544 [DEBUG] [Thread-1750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:10:12.544 [DEBUG] [Thread-1750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:10:12.544 [DEBUG] [Thread-1750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:10:12.544 [DEBUG] [Thread-1750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] client lang: <none>
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] server lang: <none>
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] kex follows: False
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] Compression: none
2025-11-25T16:10:12.545 [DEBUG] [Thread-1750] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:10:12.561 [DEBUG] [Thread-1750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:10:12.561 [DEBUG] [Thread-1750] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:10:12.561 [DEBUG] [Thread-1750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:10:12.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:10:12.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:10:12.561 [DEBUG] [Thread-1750] [transport.py] [_log()] userauth is OK
2025-11-25T16:10:12.561 [DEBUG] [Thread-1750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:10:12.561 [DEBUG] [Thread-1750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:10:12.561 [DEBUG] [Thread-1750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:10:12.561 [DEBUG] [Thread-1750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:10:12.571 [INFO] [Thread-1750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:10:12.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:10:13.621 [DEBUG] [Thread-1750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:10:13.621 [DEBUG] [Thread-1750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:10:13.621 [DEBUG] [Thread-1750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:10:13.662 [DEBUG] [Thread-1750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:10:13.662 [DEBUG] [Thread-1750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:10:13.664 [DEBUG] [Thread-1750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:10:13.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:10:13.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:10:13.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:10:13.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:10:13.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:10:13.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:10:13.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.590031 -999.00  +27.20   8.85     11   -4.90 1 1 1 1 1   888    0 31.46 -6.98 ----- 7.4 8.8 338.6 14.7 32.8 -32.1 32.7 -31.8 34.0 -29.3 34.2 -29.9
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.590031
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:10:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:09:42', tmtdew=38.95, humidity=6.76, cloud=0.0, wind=15.65, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:09:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:10:13.699 [DEBUG] [Thread-1750] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:10:13.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:10:13.792 [DEBUG] [Thread-1753] [transport.py] [_log()] starting thread (client mode): 0x70d0d150
2025-11-25T16:10:13.793 [DEBUG] [Thread-1753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:10:13.807 [DEBUG] [Thread-1753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:10:13.807 [INFO] [Thread-1753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:10:13.816 [DEBUG] [Thread-1753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:10:13.816 [DEBUG] [Thread-1753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:10:13.816 [DEBUG] [Thread-1753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:10:13.816 [DEBUG] [Thread-1753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:10:13.816 [DEBUG] [Thread-1753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:10:13.816 [DEBUG] [Thread-1753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:10:13.816 [DEBUG] [Thread-1753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:10:13.816 [DEBUG] [Thread-1753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:10:13.816 [DEBUG] [Thread-1753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] client lang: <none>
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] server lang: <none>
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] kex follows: False
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] Compression: none
2025-11-25T16:10:13.817 [DEBUG] [Thread-1753] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:10:13.874 [DEBUG] [Thread-1753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:10:13.874 [DEBUG] [Thread-1753] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:10:13.874 [DEBUG] [Thread-1753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:10:13.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:10:13.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:10:13.931 [DEBUG] [Thread-1753] [transport.py] [_log()] userauth is OK
2025-11-25T16:10:13.931 [DEBUG] [Thread-1753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:10:13.931 [DEBUG] [Thread-1753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:10:13.931 [DEBUG] [Thread-1753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:10:13.931 [DEBUG] [Thread-1753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:10:13.949 [INFO] [Thread-1753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:10:13.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:10:13.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:10:14.850 [DEBUG] [Thread-1753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:10:14.850 [DEBUG] [Thread-1753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:10:14.898 [DEBUG] [Thread-1753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:10:14.898 [DEBUG] [Thread-1753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:10:14.906 [DEBUG] [Thread-1753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:10:14.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:10:14.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:10:14.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:10:14.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:10:14.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:10:14.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:10:14.937 [DEBUG] [Thread-1753] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:10:26.614 [DEBUG] [Thread-1755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:10:41.692 [DEBUG] [Thread-1756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:10:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:10:44.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:10:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:10:45.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 10, 14), 38.66, 6.91, 0.0, 16.89, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:10:45.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:10:14
2025-11-25T16:10:45.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:10:45.914 [DEBUG] [Thread-1757] [transport.py] [_log()] starting thread (client mode): 0x761dab00
2025-11-25T16:10:45.914 [DEBUG] [Thread-1757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:10:45.934 [DEBUG] [Thread-1757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:10:45.934 [INFO] [Thread-1757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:10:45.938 [DEBUG] [Thread-1757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:10:45.938 [DEBUG] [Thread-1757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:10:45.938 [DEBUG] [Thread-1757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:10:45.938 [DEBUG] [Thread-1757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:10:45.938 [DEBUG] [Thread-1757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:10:45.938 [DEBUG] [Thread-1757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:10:45.938 [DEBUG] [Thread-1757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:10:45.938 [DEBUG] [Thread-1757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:10:45.939 [DEBUG] [Thread-1757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:10:45.939 [DEBUG] [Thread-1757] [transport.py] [_log()] client lang: <none>
2025-11-25T16:10:45.939 [DEBUG] [Thread-1757] [transport.py] [_log()] server lang: <none>
2025-11-25T16:10:45.939 [DEBUG] [Thread-1757] [transport.py] [_log()] kex follows: False
2025-11-25T16:10:45.939 [DEBUG] [Thread-1757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:10:45.939 [DEBUG] [Thread-1757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:10:45.939 [DEBUG] [Thread-1757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:10:45.939 [DEBUG] [Thread-1757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:10:45.939 [DEBUG] [Thread-1757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:10:45.940 [DEBUG] [Thread-1757] [transport.py] [_log()] Compression: none
2025-11-25T16:10:45.940 [DEBUG] [Thread-1757] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:10:45.958 [DEBUG] [Thread-1757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:10:45.959 [DEBUG] [Thread-1757] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:10:45.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:10:45.960 [DEBUG] [Thread-1757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:10:45.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:10:45.962 [DEBUG] [Thread-1757] [transport.py] [_log()] userauth is OK
2025-11-25T16:10:45.963 [DEBUG] [Thread-1757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:10:45.963 [DEBUG] [Thread-1757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:10:45.963 [DEBUG] [Thread-1757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:10:45.963 [DEBUG] [Thread-1757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:10:45.987 [INFO] [Thread-1757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:10:45.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:10:46.606 [DEBUG] [Thread-1757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:10:46.607 [DEBUG] [Thread-1757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:10:46.607 [DEBUG] [Thread-1757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:10:46.648 [DEBUG] [Thread-1757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:10:46.648 [DEBUG] [Thread-1757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:10:46.650 [DEBUG] [Thread-1757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:10:46.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:10:46.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:10:46.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:10:46.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:10:46.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:10:46.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:10:46.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:10:46.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:10:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:10:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.590378 -999.00  +27.00  11.87     12   -4.80 1 1 1 1 1   888    0 31.57 -6.04 ----- 7.9 11.9 11.6 20.8 32.7 -31.6 32.7 -30.9 34.0 -28.9 34.2 -29.6
2025-11-25T16:10:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:10:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:10:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.590378
2025-11-25T16:10:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:10:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:10:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:10:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:10:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:10:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:10:14', tmtdew=38.66, humidity=6.91, cloud=0.0, wind=16.89, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:10:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:10:46.674 [DEBUG] [Thread-1757] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:10:46.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:10:46.779 [DEBUG] [Thread-1760] [transport.py] [_log()] starting thread (client mode): 0x761dbcd0
2025-11-25T16:10:46.779 [DEBUG] [Thread-1760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:10:46.794 [DEBUG] [Thread-1760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:10:46.794 [INFO] [Thread-1760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:10:46.801 [DEBUG] [Thread-1760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:10:46.801 [DEBUG] [Thread-1760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:10:46.801 [DEBUG] [Thread-1760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] client lang: <none>
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] server lang: <none>
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] kex follows: False
2025-11-25T16:10:46.802 [DEBUG] [Thread-1760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:10:46.803 [DEBUG] [Thread-1760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:10:46.803 [DEBUG] [Thread-1760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:10:46.803 [DEBUG] [Thread-1760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:10:46.803 [DEBUG] [Thread-1760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:10:46.803 [DEBUG] [Thread-1760] [transport.py] [_log()] Compression: none
2025-11-25T16:10:46.803 [DEBUG] [Thread-1760] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:10:46.863 [DEBUG] [Thread-1760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:10:46.864 [DEBUG] [Thread-1760] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:10:46.864 [DEBUG] [Thread-1760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:10:46.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:10:46.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:10:46.923 [DEBUG] [Thread-1760] [transport.py] [_log()] userauth is OK
2025-11-25T16:10:46.923 [DEBUG] [Thread-1760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:10:46.923 [DEBUG] [Thread-1760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:10:46.923 [DEBUG] [Thread-1760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:10:46.923 [DEBUG] [Thread-1760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:10:46.940 [INFO] [Thread-1760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:10:46.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:10:46.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:10:47.825 [DEBUG] [Thread-1760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:10:47.825 [DEBUG] [Thread-1760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:10:47.873 [DEBUG] [Thread-1760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:10:47.874 [DEBUG] [Thread-1760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:10:47.882 [DEBUG] [Thread-1760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:10:47.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:10:47.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:10:47.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:10:47.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:10:47.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:10:47.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:10:47.914 [DEBUG] [Thread-1760] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:10:56.730 [DEBUG] [Thread-1762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:11:01.534 [DEBUG] [Thread-1763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:11:11.800 [DEBUG] [Thread-1764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:11:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:11:17.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:11:17.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
2025-11-25T16:11:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 10, 46), 38.41, 6.92, 0.0, 13.8, 26.71, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:11:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:10:46
2025-11-25T16:11:18.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:11:18.874 [DEBUG] [Thread-1765] [transport.py] [_log()] starting thread (client mode): 0x70d0f5b0
2025-11-25T16:11:18.874 [DEBUG] [Thread-1765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:11:18.895 [DEBUG] [Thread-1765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:11:18.895 [INFO] [Thread-1765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:11:18.899 [DEBUG] [Thread-1765] [transport.py] [_log()] client lang: <none>
2025-11-25T16:11:18.900 [DEBUG] [Thread-1765] [transport.py] [_log()] server lang: <none>
2025-11-25T16:11:18.900 [DEBUG] [Thread-1765] [transport.py] [_log()] kex follows: False
2025-11-25T16:11:18.900 [DEBUG] [Thread-1765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:11:18.900 [DEBUG] [Thread-1765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:11:18.900 [DEBUG] [Thread-1765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:11:18.900 [DEBUG] [Thread-1765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:11:18.900 [DEBUG] [Thread-1765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:11:18.900 [DEBUG] [Thread-1765] [transport.py] [_log()] Compression: none
2025-11-25T16:11:18.900 [DEBUG] [Thread-1765] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:11:18.921 [DEBUG] [Thread-1765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:11:18.922 [DEBUG] [Thread-1765] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:11:18.923 [DEBUG] [Thread-1765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:11:18.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:11:18.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:11:18.924 [DEBUG] [Thread-1765] [transport.py] [_log()] userauth is OK
2025-11-25T16:11:18.925 [DEBUG] [Thread-1765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:11:18.925 [DEBUG] [Thread-1765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:11:18.925 [DEBUG] [Thread-1765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:11:18.925 [DEBUG] [Thread-1765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:11:18.952 [INFO] [Thread-1765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:11:18.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:11:19.752 [DEBUG] [Thread-1765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:11:19.752 [DEBUG] [Thread-1765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:11:19.752 [DEBUG] [Thread-1765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:11:19.793 [DEBUG] [Thread-1765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:11:19.793 [DEBUG] [Thread-1765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:11:19.796 [DEBUG] [Thread-1765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:11:19.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:11:19.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:11:19.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:11:19.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:11:19.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:11:19.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:11:19.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.590726 -999.00  +27.00  10.55     12   -4.60 1 1 1 1 1   888    0 31.91 -5.48 ----- 20.6 10.6 359.6 18.0 32.6 -31.5 32.6 -31.3 33.9 -29.8 34.0 -29.6
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.590726
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:11:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:10:46', tmtdew=38.41, humidity=6.92, cloud=0.0, wind=13.8, temperature=26.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:10:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:11:19.807 [DEBUG] [Thread-1765] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:11:19.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:11:19.903 [DEBUG] [Thread-1768] [transport.py] [_log()] starting thread (client mode): 0x70d0eef0
2025-11-25T16:11:19.903 [DEBUG] [Thread-1768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:11:19.917 [DEBUG] [Thread-1768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:11:19.917 [INFO] [Thread-1768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] client lang: <none>
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] server lang: <none>
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] kex follows: False
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] Compression: none
2025-11-25T16:11:19.925 [DEBUG] [Thread-1768] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:11:19.982 [DEBUG] [Thread-1768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:11:19.982 [DEBUG] [Thread-1768] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:11:19.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:11:19.982 [DEBUG] [Thread-1768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:11:19.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:11:20.043 [DEBUG] [Thread-1768] [transport.py] [_log()] userauth is OK
2025-11-25T16:11:20.043 [DEBUG] [Thread-1768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:11:20.043 [DEBUG] [Thread-1768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:11:20.043 [DEBUG] [Thread-1768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:11:20.043 [DEBUG] [Thread-1768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:11:20.058 [INFO] [Thread-1768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:11:20.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:11:20.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:11:20.907 [DEBUG] [Thread-1768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:11:20.907 [DEBUG] [Thread-1768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:11:20.955 [DEBUG] [Thread-1768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:11:20.955 [DEBUG] [Thread-1768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:11:20.964 [DEBUG] [Thread-1768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:11:20.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:11:20.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:11:20.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:11:20.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:11:20.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:11:20.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:11:21.001 [DEBUG] [Thread-1768] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:11:26.845 [DEBUG] [Thread-1770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:11:41.902 [DEBUG] [Thread-1771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:11:51.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:11:51.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:11:51.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:11:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 11, 18), 38.29, 6.97, 0.0, 13.8, 26.61, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:11:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:11:18
2025-11-25T16:11:51.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:11:52.038 [DEBUG] [Thread-1772] [transport.py] [_log()] starting thread (client mode): 0x7378dd80
2025-11-25T16:11:52.038 [DEBUG] [Thread-1772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:11:52.049 [DEBUG] [Thread-1772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:11:52.049 [INFO] [Thread-1772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] client lang: <none>
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] server lang: <none>
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] kex follows: False
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:11:52.052 [DEBUG] [Thread-1772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:11:52.053 [DEBUG] [Thread-1772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:11:52.053 [DEBUG] [Thread-1772] [transport.py] [_log()] Compression: none
2025-11-25T16:11:52.053 [DEBUG] [Thread-1772] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:11:52.068 [DEBUG] [Thread-1772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:11:52.068 [DEBUG] [Thread-1772] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:11:52.068 [DEBUG] [Thread-1772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:11:52.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:11:52.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:11:52.069 [DEBUG] [Thread-1772] [transport.py] [_log()] userauth is OK
2025-11-25T16:11:52.069 [DEBUG] [Thread-1772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:11:52.069 [DEBUG] [Thread-1772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:11:52.069 [DEBUG] [Thread-1772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:11:52.069 [DEBUG] [Thread-1772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:11:52.079 [INFO] [Thread-1772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:11:52.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:11:52.729 [DEBUG] [Thread-1772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:11:52.729 [DEBUG] [Thread-1772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:11:52.729 [DEBUG] [Thread-1772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:11:52.770 [DEBUG] [Thread-1772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:11:52.770 [DEBUG] [Thread-1772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:11:52.773 [DEBUG] [Thread-1772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:11:52.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:11:52.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:11:52.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:11:52.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:11:52.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:11:52.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:11:52.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.591073 -999.00  +26.90  13.82     12   -4.70 1 1 1 1 1   888    0 31.85 -4.73 ----- 16.2 13.8 327.4 22.3 32.5 -31.6 32.5 -32.2 33.8 -29.1 34.1 -30.1
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.591073
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:11:52.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:11:18', tmtdew=38.29, humidity=6.97, cloud=0.0, wind=13.8, temperature=26.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:11:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:11:52.798 [DEBUG] [Thread-1772] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:11:52.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:11:52.892 [DEBUG] [Thread-1775] [transport.py] [_log()] starting thread (client mode): 0x761da1d0
2025-11-25T16:11:52.892 [DEBUG] [Thread-1775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:11:52.907 [DEBUG] [Thread-1775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:11:52.907 [INFO] [Thread-1775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] client lang: <none>
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] server lang: <none>
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] kex follows: False
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] Compression: none
2025-11-25T16:11:52.915 [DEBUG] [Thread-1775] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:11:52.979 [DEBUG] [Thread-1775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:11:52.980 [DEBUG] [Thread-1775] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:11:52.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:11:52.981 [DEBUG] [Thread-1775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:11:52.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:11:53.036 [DEBUG] [Thread-1775] [transport.py] [_log()] userauth is OK
2025-11-25T16:11:53.036 [DEBUG] [Thread-1775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:11:53.036 [DEBUG] [Thread-1775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:11:53.036 [DEBUG] [Thread-1775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:11:53.036 [DEBUG] [Thread-1775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:11:53.056 [INFO] [Thread-1775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:11:53.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:11:53.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:11:53.903 [DEBUG] [Thread-1775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:11:53.903 [DEBUG] [Thread-1775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:11:53.951 [DEBUG] [Thread-1775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:11:53.951 [DEBUG] [Thread-1775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:11:53.960 [DEBUG] [Thread-1775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:11:53.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:11:53.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:11:53.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:11:53.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:11:53.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:11:53.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:11:53.997 [DEBUG] [Thread-1775] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:11:56.949 [DEBUG] [Thread-1777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:12:02.279 [DEBUG] [Thread-1778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:12:12.022 [DEBUG] [Thread-1779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:12:24.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:12:24.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:12:24.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:12:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 11, 50), 38.17, 7.11, 0.0, 16.52, 26.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:12:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:11:50
2025-11-25T16:12:24.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:12:25.013 [DEBUG] [Thread-1780] [transport.py] [_log()] starting thread (client mode): 0x70d0fb50
2025-11-25T16:12:25.014 [DEBUG] [Thread-1780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:12:25.031 [DEBUG] [Thread-1780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:12:25.031 [INFO] [Thread-1780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:12:25.034 [DEBUG] [Thread-1780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:12:25.034 [DEBUG] [Thread-1780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:12:25.034 [DEBUG] [Thread-1780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] client lang: <none>
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] server lang: <none>
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] kex follows: False
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] Compression: none
2025-11-25T16:12:25.035 [DEBUG] [Thread-1780] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:12:25.051 [DEBUG] [Thread-1780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:12:25.051 [DEBUG] [Thread-1780] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:12:25.052 [DEBUG] [Thread-1780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:12:25.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:12:25.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:12:25.053 [DEBUG] [Thread-1780] [transport.py] [_log()] userauth is OK
2025-11-25T16:12:25.053 [DEBUG] [Thread-1780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:12:25.053 [DEBUG] [Thread-1780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:12:25.053 [DEBUG] [Thread-1780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:12:25.054 [DEBUG] [Thread-1780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:12:25.068 [INFO] [Thread-1780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:12:25.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:12:25.804 [DEBUG] [Thread-1780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:12:25.804 [DEBUG] [Thread-1780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:12:25.804 [DEBUG] [Thread-1780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:12:25.845 [DEBUG] [Thread-1780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:12:25.845 [DEBUG] [Thread-1780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:12:25.848 [DEBUG] [Thread-1780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:12:25.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:12:25.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:12:25.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:12:25.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:12:25.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:12:25.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:12:25.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:12:25.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:12:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:12:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.591420 -999.00  +26.80  10.53     12   -4.60 1 1 1 1 1   888    0 31.90 -4.49 ----- 10.1 10.5 24.3 19.1 32.5 -32.2 32.5 -33.2 33.8 -29.6 34.0 -33.0
2025-11-25T16:12:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:12:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:12:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.591420
2025-11-25T16:12:25.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:12:25.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:12:25.874 [DEBUG] [Thread-1780] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:12:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:12:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:12:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:12:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:11:50', tmtdew=38.17, humidity=7.11, cloud=0.0, wind=16.52, temperature=26.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:11:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:12:25.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:12:25.974 [DEBUG] [Thread-1783] [transport.py] [_log()] starting thread (client mode): 0x7378ee90
2025-11-25T16:12:25.974 [DEBUG] [Thread-1783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:12:25.989 [DEBUG] [Thread-1783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:12:25.990 [INFO] [Thread-1783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:12:25.997 [DEBUG] [Thread-1783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:12:25.997 [DEBUG] [Thread-1783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:12:25.997 [DEBUG] [Thread-1783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:12:25.997 [DEBUG] [Thread-1783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:12:25.997 [DEBUG] [Thread-1783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:12:25.997 [DEBUG] [Thread-1783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:12:25.997 [DEBUG] [Thread-1783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] client lang: <none>
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] server lang: <none>
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] kex follows: False
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] Compression: none
2025-11-25T16:12:25.998 [DEBUG] [Thread-1783] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:12:26.056 [DEBUG] [Thread-1783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:12:26.057 [DEBUG] [Thread-1783] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:12:26.057 [DEBUG] [Thread-1783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:12:26.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:12:26.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:12:26.112 [DEBUG] [Thread-1783] [transport.py] [_log()] userauth is OK
2025-11-25T16:12:26.112 [DEBUG] [Thread-1783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:12:26.112 [DEBUG] [Thread-1783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:12:26.112 [DEBUG] [Thread-1783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:12:26.112 [DEBUG] [Thread-1783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:12:26.131 [INFO] [Thread-1783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:12:26.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:12:26.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:12:26.977 [DEBUG] [Thread-1783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:12:26.977 [DEBUG] [Thread-1783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:12:27.026 [DEBUG] [Thread-1783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:12:27.026 [DEBUG] [Thread-1783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:12:27.035 [DEBUG] [Thread-1783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:12:27.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:12:27.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:12: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') -> 00000000
2025-11-25T16:12:27.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:12:27.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:12:27.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:12:27.066 [DEBUG] [Thread-1785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:12:27.072 [DEBUG] [Thread-1783] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:12:42.129 [DEBUG] [Thread-1786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:12:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:12:57.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:12:57.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:12:57.165 [DEBUG] [Thread-1787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:12:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 12, 54), 38.23, 7.09, 0.0, 10.64, 26.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:12:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:12:54
2025-11-25T16:12:57.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:12:58.054 [DEBUG] [Thread-1788] [transport.py] [_log()] starting thread (client mode): 0x7378fbb0
2025-11-25T16:12:58.054 [DEBUG] [Thread-1788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:12:58.072 [DEBUG] [Thread-1788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:12:58.072 [INFO] [Thread-1788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] client lang: <none>
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] server lang: <none>
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] kex follows: False
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:12:58.075 [DEBUG] [Thread-1788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:12:58.076 [DEBUG] [Thread-1788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:12:58.076 [DEBUG] [Thread-1788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:12:58.076 [DEBUG] [Thread-1788] [transport.py] [_log()] Compression: none
2025-11-25T16:12:58.076 [DEBUG] [Thread-1788] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:12:58.092 [DEBUG] [Thread-1788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:12:58.093 [DEBUG] [Thread-1788] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:12:58.093 [DEBUG] [Thread-1788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:12:58.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:12:58.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:12:58.095 [DEBUG] [Thread-1788] [transport.py] [_log()] userauth is OK
2025-11-25T16:12:58.096 [DEBUG] [Thread-1788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:12:58.096 [DEBUG] [Thread-1788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:12:58.096 [DEBUG] [Thread-1788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:12:58.096 [DEBUG] [Thread-1788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:12:58.130 [INFO] [Thread-1788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:12:58.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:12:58.821 [DEBUG] [Thread-1788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:12:58.821 [DEBUG] [Thread-1788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:12:58.821 [DEBUG] [Thread-1788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:12:58.862 [DEBUG] [Thread-1788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:12:58.862 [DEBUG] [Thread-1788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:12:58.865 [DEBUG] [Thread-1788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:12:58.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:12:58.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:12:58.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:12:58.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:12:58.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:12:58.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:12:58.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:12:58.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:12:58.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:12:58.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.591767 -999.00  +26.70  10.34     12   -4.80 1 1 1 1 1   888    0 31.98 -5.22 ----- 6.6 10.3 26.8 15.1 32.5 -32.3 32.5 -31.8 33.8 -29.4 34.0 -30.3
2025-11-25T16:12:58.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:12:58.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:12:58.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.591767
2025-11-25T16:12:58.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:12:58.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:12:58.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:12:58.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:12:58.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:12:58.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:12:54', tmtdew=38.23, humidity=7.09, cloud=0.0, wind=10.64, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:12:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:12:58.892 [DEBUG] [Thread-1788] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:12:58.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:12:58.996 [DEBUG] [Thread-1791] [transport.py] [_log()] starting thread (client mode): 0x761da590
2025-11-25T16:12:58.997 [DEBUG] [Thread-1791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:12:59.011 [DEBUG] [Thread-1791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:12:59.011 [INFO] [Thread-1791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] client lang: <none>
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] server lang: <none>
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] kex follows: False
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] Compression: none
2025-11-25T16:12:59.018 [DEBUG] [Thread-1791] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:12:59.075 [DEBUG] [Thread-1791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:12:59.076 [DEBUG] [Thread-1791] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:12:59.077 [DEBUG] [Thread-1791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:12:59.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:12:59.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:12:59.131 [DEBUG] [Thread-1791] [transport.py] [_log()] userauth is OK
2025-11-25T16:12:59.132 [DEBUG] [Thread-1791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:12:59.132 [DEBUG] [Thread-1791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:12:59.132 [DEBUG] [Thread-1791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:12:59.132 [DEBUG] [Thread-1791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:12:59.150 [INFO] [Thread-1791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:12:59.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:12:59.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:12:59.978 [DEBUG] [Thread-1791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:12:59.978 [DEBUG] [Thread-1791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:13:00.026 [DEBUG] [Thread-1791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:13:00.026 [DEBUG] [Thread-1791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:13:00.035 [DEBUG] [Thread-1791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:13:00.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:13:00.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:13:00.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:13:00.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:13:00.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:13:00.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:13:00.069 [DEBUG] [Thread-1791] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:13:03.030 [DEBUG] [Thread-1793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:13:12.205 [DEBUG] [Thread-1794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:13:27.263 [DEBUG] [Thread-1795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:13:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:13:30.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:13:30.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:13:30.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 13, 26), 38.14, 7.12, 0.0, 11.65, 26.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:13:30.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:13:26
2025-11-25T16:13:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:13:31.027 [DEBUG] [Thread-1796] [transport.py] [_log()] starting thread (client mode): 0x761dab30
2025-11-25T16:13:31.027 [DEBUG] [Thread-1796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:13:31.047 [DEBUG] [Thread-1796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:13:31.048 [INFO] [Thread-1796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:13:31.050 [DEBUG] [Thread-1796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:13:31.050 [DEBUG] [Thread-1796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:13:31.051 [DEBUG] [Thread-1796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:13:31.051 [DEBUG] [Thread-1796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:13:31.051 [DEBUG] [Thread-1796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:13:31.051 [DEBUG] [Thread-1796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:13:31.051 [DEBUG] [Thread-1796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:13:31.051 [DEBUG] [Thread-1796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:13:31.051 [DEBUG] [Thread-1796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:13:31.051 [DEBUG] [Thread-1796] [transport.py] [_log()] client lang: <none>
2025-11-25T16:13:31.051 [DEBUG] [Thread-1796] [transport.py] [_log()] server lang: <none>
2025-11-25T16:13:31.052 [DEBUG] [Thread-1796] [transport.py] [_log()] kex follows: False
2025-11-25T16:13:31.052 [DEBUG] [Thread-1796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:13:31.052 [DEBUG] [Thread-1796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:13:31.052 [DEBUG] [Thread-1796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:13:31.052 [DEBUG] [Thread-1796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:13:31.052 [DEBUG] [Thread-1796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:13:31.052 [DEBUG] [Thread-1796] [transport.py] [_log()] Compression: none
2025-11-25T16:13:31.052 [DEBUG] [Thread-1796] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:13:31.073 [DEBUG] [Thread-1796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:13:31.074 [DEBUG] [Thread-1796] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:13:31.075 [DEBUG] [Thread-1796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:13:31.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:13:31.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:13:31.077 [DEBUG] [Thread-1796] [transport.py] [_log()] userauth is OK
2025-11-25T16:13:31.078 [DEBUG] [Thread-1796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:13:31.078 [DEBUG] [Thread-1796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:13:31.078 [DEBUG] [Thread-1796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:13:31.078 [DEBUG] [Thread-1796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:13:31.105 [INFO] [Thread-1796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:13:31.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:13:31.882 [DEBUG] [Thread-1796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:13:31.883 [DEBUG] [Thread-1796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:13:31.884 [DEBUG] [Thread-1796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:13:31.924 [DEBUG] [Thread-1796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:13:31.924 [DEBUG] [Thread-1796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:13:31.926 [DEBUG] [Thread-1796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:13:31.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:13:31.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:13:31.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:13:31.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:13:31.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:13:31.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:13:31.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:13:31.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:13:31.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:13:31.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.592114 -999.00  +26.80  10.59     12   -4.70 1 1 1 1 1   888    0 31.38 -6.07 ----- 10.6 10.6 16.0 13.4 32.5 -31.1 32.4 -31.5 33.8 -28.4 33.9 -30.0
2025-11-25T16:13:31.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:13:31.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:13:31.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.592114
2025-11-25T16:13:31.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:13:31.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:13:31.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:13:31.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:13:31.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:13:31.949 [DEBUG] [Thread-1796] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:13:31.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:13:26', tmtdew=38.14, humidity=7.12, cloud=0.0, wind=11.65, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:12:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:13:32.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:13:32.053 [DEBUG] [Thread-1799] [transport.py] [_log()] starting thread (client mode): 0x761dbc40
2025-11-25T16:13:32.053 [DEBUG] [Thread-1799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:13:32.068 [DEBUG] [Thread-1799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:13:32.069 [INFO] [Thread-1799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:13:32.076 [DEBUG] [Thread-1799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:13:32.076 [DEBUG] [Thread-1799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] client lang: <none>
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] server lang: <none>
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] kex follows: False
2025-11-25T16:13:32.077 [DEBUG] [Thread-1799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:13:32.078 [DEBUG] [Thread-1799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:13:32.078 [DEBUG] [Thread-1799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:13:32.078 [DEBUG] [Thread-1799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:13:32.078 [DEBUG] [Thread-1799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:13:32.078 [DEBUG] [Thread-1799] [transport.py] [_log()] Compression: none
2025-11-25T16:13:32.078 [DEBUG] [Thread-1799] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:13:32.136 [DEBUG] [Thread-1799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:13:32.137 [DEBUG] [Thread-1799] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:13:32.137 [DEBUG] [Thread-1799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:13:32.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:13:32.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:13:32.192 [DEBUG] [Thread-1799] [transport.py] [_log()] userauth is OK
2025-11-25T16:13:32.192 [DEBUG] [Thread-1799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:13:32.192 [DEBUG] [Thread-1799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:13:32.192 [DEBUG] [Thread-1799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:13:32.193 [DEBUG] [Thread-1799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:13:32.211 [INFO] [Thread-1799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:13:32.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:13:32.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:13:33.033 [DEBUG] [Thread-1799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:13:33.034 [DEBUG] [Thread-1799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:13:33.081 [DEBUG] [Thread-1799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:13:33.082 [DEBUG] [Thread-1799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:13:33.091 [DEBUG] [Thread-1799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:13:33.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:13:33.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:13:33.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:13:33.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:13:33.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:13:33.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:13:33.127 [DEBUG] [Thread-1799] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:13:42.307 [DEBUG] [Thread-1801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:13:57.370 [DEBUG] [Thread-1802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:14:03.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:14:03.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:14:03.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:14:03.797 [DEBUG] [Thread-1803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:14:03.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 13, 58), 38.16, 7.06, 0.0, 9.93, 26.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:14:03.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:13:58
2025-11-25T16:14:03.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:14:04.126 [DEBUG] [Thread-1804] [transport.py] [_log()] starting thread (client mode): 0x761da7d0
2025-11-25T16:14:04.126 [DEBUG] [Thread-1804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:14:04.147 [DEBUG] [Thread-1804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:14:04.147 [INFO] [Thread-1804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] client lang: <none>
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] server lang: <none>
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] kex follows: False
2025-11-25T16:14:04.150 [DEBUG] [Thread-1804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:14:04.151 [DEBUG] [Thread-1804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:14:04.151 [DEBUG] [Thread-1804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:14:04.151 [DEBUG] [Thread-1804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:14:04.151 [DEBUG] [Thread-1804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:14:04.151 [DEBUG] [Thread-1804] [transport.py] [_log()] Compression: none
2025-11-25T16:14:04.151 [DEBUG] [Thread-1804] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:14:04.168 [DEBUG] [Thread-1804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:14:04.169 [DEBUG] [Thread-1804] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:14:04.169 [DEBUG] [Thread-1804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:14:04.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:14:04.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:14:04.171 [DEBUG] [Thread-1804] [transport.py] [_log()] userauth is OK
2025-11-25T16:14:04.171 [DEBUG] [Thread-1804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:14:04.171 [DEBUG] [Thread-1804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:14:04.171 [DEBUG] [Thread-1804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:14:04.172 [DEBUG] [Thread-1804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:14:04.189 [INFO] [Thread-1804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:14:04.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:14:04.854 [DEBUG] [Thread-1804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:14:04.854 [DEBUG] [Thread-1804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:14:04.854 [DEBUG] [Thread-1804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:14:04.895 [DEBUG] [Thread-1804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:14:04.895 [DEBUG] [Thread-1804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:14:04.899 [DEBUG] [Thread-1804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:14:04.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:14:04.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:14:04.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:14:04.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:14:04.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:14:04.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:14:04.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:14:04.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:14:04.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:14:04.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.592462 -999.00  +26.60   9.17     12   -4.90 1 1 1 1 1   888    0 32.03 -6.03 ----- 5.0 9.2 354.8 15.3 32.5 -31.8 32.4 -31.7 33.8 -29.7 33.9 -29.7
2025-11-25T16:14:04.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:14:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:14:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.592462
2025-11-25T16:14:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:14:04.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:14:04.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:14:04.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:14:04.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:14:04.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:13:58', tmtdew=38.16, humidity=7.06, cloud=0.0, wind=9.93, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:13:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:14:04.926 [DEBUG] [Thread-1804] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:14:05.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:14:05.029 [DEBUG] [Thread-1807] [transport.py] [_log()] starting thread (client mode): 0x737e9180
2025-11-25T16:14:05.030 [DEBUG] [Thread-1807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:14:05.044 [DEBUG] [Thread-1807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:14:05.044 [INFO] [Thread-1807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:14:05.052 [DEBUG] [Thread-1807] [transport.py] [_log()] client lang: <none>
2025-11-25T16:14:05.053 [DEBUG] [Thread-1807] [transport.py] [_log()] server lang: <none>
2025-11-25T16:14:05.053 [DEBUG] [Thread-1807] [transport.py] [_log()] kex follows: False
2025-11-25T16:14:05.053 [DEBUG] [Thread-1807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:14:05.053 [DEBUG] [Thread-1807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:14:05.053 [DEBUG] [Thread-1807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:14:05.053 [DEBUG] [Thread-1807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:14:05.053 [DEBUG] [Thread-1807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:14:05.053 [DEBUG] [Thread-1807] [transport.py] [_log()] Compression: none
2025-11-25T16:14:05.053 [DEBUG] [Thread-1807] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:14:05.112 [DEBUG] [Thread-1807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:14:05.113 [DEBUG] [Thread-1807] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:14:05.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:14:05.114 [DEBUG] [Thread-1807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:14:05.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:14:05.168 [DEBUG] [Thread-1807] [transport.py] [_log()] userauth is OK
2025-11-25T16:14:05.168 [DEBUG] [Thread-1807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:14:05.168 [DEBUG] [Thread-1807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:14:05.168 [DEBUG] [Thread-1807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:14:05.168 [DEBUG] [Thread-1807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:14:05.188 [INFO] [Thread-1807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:14:05.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:14:05.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:14:06.030 [DEBUG] [Thread-1807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:14:06.030 [DEBUG] [Thread-1807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:14:06.079 [DEBUG] [Thread-1807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:14:06.079 [DEBUG] [Thread-1807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:14:06.088 [DEBUG] [Thread-1807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:14:06.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:14:06.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:14:06.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:14:06.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:14:06.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:14:06.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:14:06.122 [DEBUG] [Thread-1807] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:14:12.410 [DEBUG] [Thread-1809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:14:27.489 [DEBUG] [Thread-1810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:14:36.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:14:36.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:14:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:14:36.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 14, 30), 38.34, 6.99, 0.0, 10.32, 26.71, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:14:36.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:14:30
2025-11-25T16:14:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:14:37.094 [DEBUG] [Thread-1811] [transport.py] [_log()] starting thread (client mode): 0x761d9e70
2025-11-25T16:14:37.094 [DEBUG] [Thread-1811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:14:37.115 [DEBUG] [Thread-1811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:14:37.116 [INFO] [Thread-1811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] client lang: <none>
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] server lang: <none>
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] kex follows: False
2025-11-25T16:14:37.119 [DEBUG] [Thread-1811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:14:37.120 [DEBUG] [Thread-1811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:14:37.120 [DEBUG] [Thread-1811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:14:37.120 [DEBUG] [Thread-1811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:14:37.120 [DEBUG] [Thread-1811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:14:37.120 [DEBUG] [Thread-1811] [transport.py] [_log()] Compression: none
2025-11-25T16:14:37.120 [DEBUG] [Thread-1811] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:14:37.134 [DEBUG] [Thread-1811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:14:37.134 [DEBUG] [Thread-1811] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:14:37.134 [DEBUG] [Thread-1811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:14:37.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:14:37.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:14:37.135 [DEBUG] [Thread-1811] [transport.py] [_log()] userauth is OK
2025-11-25T16:14:37.135 [DEBUG] [Thread-1811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:14:37.135 [DEBUG] [Thread-1811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:14:37.135 [DEBUG] [Thread-1811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:14:37.135 [DEBUG] [Thread-1811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:14:37.149 [INFO] [Thread-1811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:14:37.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:14:37.984 [DEBUG] [Thread-1811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:14:37.984 [DEBUG] [Thread-1811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:14:37.985 [DEBUG] [Thread-1811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:14:38.026 [DEBUG] [Thread-1811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:14:38.026 [DEBUG] [Thread-1811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:14:38.029 [DEBUG] [Thread-1811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:14:38.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:14:38.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:14:38.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:14:38.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:14:38.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:14:38.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:14:38.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:14:38.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:14:38.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:14:38.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.592809 -999.00  +26.70  13.88     12   -4.80 1 1 1 1 1   888    0 31.71 -7.77 ----- 15.7 13.9 35.2 16.3 32.5 -32.4 32.4 -31.2 33.8 -29.9 33.9 -30.7
2025-11-25T16:14:38.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:14:38.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:14:38.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.592809
2025-11-25T16:14:38.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:14:38.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:14:38.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:14:38.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:14:38.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:14:38.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:14:30', tmtdew=38.34, humidity=6.99, cloud=0.0, wind=10.32, temperature=26.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:13:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:14:38.057 [DEBUG] [Thread-1811] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:14:38.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:14:38.171 [DEBUG] [Thread-1814] [transport.py] [_log()] starting thread (client mode): 0x761dae60
2025-11-25T16:14:38.172 [DEBUG] [Thread-1814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:14:38.186 [DEBUG] [Thread-1814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:14:38.186 [INFO] [Thread-1814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:14:38.193 [DEBUG] [Thread-1814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:14:38.194 [DEBUG] [Thread-1814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:14:38.194 [DEBUG] [Thread-1814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:14:38.194 [DEBUG] [Thread-1814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:14:38.194 [DEBUG] [Thread-1814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:14:38.194 [DEBUG] [Thread-1814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:14:38.194 [DEBUG] [Thread-1814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:14:38.195 [DEBUG] [Thread-1814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:14:38.195 [DEBUG] [Thread-1814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:14:38.195 [DEBUG] [Thread-1814] [transport.py] [_log()] client lang: <none>
2025-11-25T16:14:38.195 [DEBUG] [Thread-1814] [transport.py] [_log()] server lang: <none>
2025-11-25T16:14:38.195 [DEBUG] [Thread-1814] [transport.py] [_log()] kex follows: False
2025-11-25T16:14:38.195 [DEBUG] [Thread-1814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:14:38.195 [DEBUG] [Thread-1814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:14:38.195 [DEBUG] [Thread-1814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:14:38.196 [DEBUG] [Thread-1814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:14:38.196 [DEBUG] [Thread-1814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:14:38.196 [DEBUG] [Thread-1814] [transport.py] [_log()] Compression: none
2025-11-25T16:14:38.196 [DEBUG] [Thread-1814] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:14:38.252 [DEBUG] [Thread-1814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:14:38.253 [DEBUG] [Thread-1814] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:14:38.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:14:38.254 [DEBUG] [Thread-1814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:14:38.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:14:38.308 [DEBUG] [Thread-1814] [transport.py] [_log()] userauth is OK
2025-11-25T16:14:38.309 [DEBUG] [Thread-1814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:14:38.309 [DEBUG] [Thread-1814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:14:38.309 [DEBUG] [Thread-1814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:14:38.309 [DEBUG] [Thread-1814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:14:38.328 [INFO] [Thread-1814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:14:38.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:14:38.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:14:39.135 [DEBUG] [Thread-1814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:14:39.136 [DEBUG] [Thread-1814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:14:39.183 [DEBUG] [Thread-1814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:14:39.183 [DEBUG] [Thread-1814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:14:39.192 [DEBUG] [Thread-1814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:14:39.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:14:39.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:14:39.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:14:39.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:14:39.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:14:39.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:14:39.226 [DEBUG] [Thread-1814] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:14:42.531 [DEBUG] [Thread-1816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:14:57.604 [DEBUG] [Thread-1817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:15:04.548 [DEBUG] [Thread-1818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:15:09.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:15:09.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:15:09.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:15:09.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 15, 3), 38.43, 6.96, 0.0, 7.06, 26.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:15:09.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:15:03
2025-11-25T16:15:10.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:15:10.210 [DEBUG] [Thread-1819] [transport.py] [_log()] starting thread (client mode): 0x761d9bd0
2025-11-25T16:15:10.210 [DEBUG] [Thread-1819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:15:10.229 [DEBUG] [Thread-1819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:15:10.229 [INFO] [Thread-1819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] client lang: <none>
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] server lang: <none>
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] kex follows: False
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] Compression: none
2025-11-25T16:15:10.233 [DEBUG] [Thread-1819] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:15:10.248 [DEBUG] [Thread-1819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:15:10.248 [DEBUG] [Thread-1819] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:15:10.248 [DEBUG] [Thread-1819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:15:10.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:15:10.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:15:10.249 [DEBUG] [Thread-1819] [transport.py] [_log()] userauth is OK
2025-11-25T16:15:10.249 [DEBUG] [Thread-1819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:15:10.249 [DEBUG] [Thread-1819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:15:10.249 [DEBUG] [Thread-1819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:15:10.249 [DEBUG] [Thread-1819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:15:10.268 [INFO] [Thread-1819] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:15:10.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:15:11.146 [DEBUG] [Thread-1819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:15:11.146 [DEBUG] [Thread-1819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:15:11.146 [DEBUG] [Thread-1819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:15:11.187 [DEBUG] [Thread-1819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:15:11.187 [DEBUG] [Thread-1819] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:15:11.189 [DEBUG] [Thread-1819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:15:11.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:15:11.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:15:11.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:15:11.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:15:11.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:15:11.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:15:11.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.593503 -999.00  +26.40  11.02     12   -4.90 1 1 1 1 1   888    0 31.69 -11.46 ----- 10.2 11.0 40.8 18.1 32.3 -31.8 32.3 -31.7 33.6 -30.5 33.8 -30.0
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.593503
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:15:11.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:15:03', tmtdew=38.43, humidity=6.96, cloud=0.0, wind=7.06, temperature=26.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:14:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:15:11.209 [DEBUG] [Thread-1819] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:15:11.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:15:11.310 [DEBUG] [Thread-1822] [transport.py] [_log()] starting thread (client mode): 0x70d0e3b0
2025-11-25T16:15:11.310 [DEBUG] [Thread-1822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:15:11.324 [DEBUG] [Thread-1822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:15:11.324 [INFO] [Thread-1822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] client lang: <none>
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] server lang: <none>
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] kex follows: False
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] Compression: none
2025-11-25T16:15:11.332 [DEBUG] [Thread-1822] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:15:11.387 [DEBUG] [Thread-1822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:15:11.387 [DEBUG] [Thread-1822] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:15:11.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:15:11.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:15:11.388 [DEBUG] [Thread-1822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:15:11.444 [DEBUG] [Thread-1822] [transport.py] [_log()] userauth is OK
2025-11-25T16:15:11.444 [DEBUG] [Thread-1822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:15:11.444 [DEBUG] [Thread-1822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:15:11.444 [DEBUG] [Thread-1822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:15:11.444 [DEBUG] [Thread-1822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:15:11.459 [INFO] [Thread-1822] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:15:11.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:15:11.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:15:12.315 [DEBUG] [Thread-1822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:15:12.315 [DEBUG] [Thread-1822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:15:12.363 [DEBUG] [Thread-1822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:15:12.363 [DEBUG] [Thread-1822] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:15:12.371 [DEBUG] [Thread-1822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:15:12.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:15:12.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:15:12.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:15:12.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:15:12.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:15:12.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:15:12.408 [DEBUG] [Thread-1822] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:15:12.643 [DEBUG] [Thread-1824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:15:27.698 [DEBUG] [Thread-1825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:15:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:15:42.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:15:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:15:42.743 [DEBUG] [Thread-1826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:15:43.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 15, 35), 38.78, 6.91, 0.0, 6.37, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:15:43.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:15:35
2025-11-25T16:15:43.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:15:43.355 [DEBUG] [Thread-1827] [transport.py] [_log()] starting thread (client mode): 0x761db3d0
2025-11-25T16:15:43.355 [DEBUG] [Thread-1827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:15:43.375 [DEBUG] [Thread-1827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:15:43.375 [INFO] [Thread-1827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] client lang: <none>
2025-11-25T16:15:43.378 [DEBUG] [Thread-1827] [transport.py] [_log()] server lang: <none>
2025-11-25T16:15:43.379 [DEBUG] [Thread-1827] [transport.py] [_log()] kex follows: False
2025-11-25T16:15:43.379 [DEBUG] [Thread-1827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:15:43.379 [DEBUG] [Thread-1827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:15:43.379 [DEBUG] [Thread-1827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:15:43.379 [DEBUG] [Thread-1827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:15:43.379 [DEBUG] [Thread-1827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:15:43.379 [DEBUG] [Thread-1827] [transport.py] [_log()] Compression: none
2025-11-25T16:15:43.379 [DEBUG] [Thread-1827] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:15:43.396 [DEBUG] [Thread-1827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:15:43.397 [DEBUG] [Thread-1827] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:15:43.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:15:43.398 [DEBUG] [Thread-1827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:15:43.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:15:43.400 [DEBUG] [Thread-1827] [transport.py] [_log()] userauth is OK
2025-11-25T16:15:43.400 [DEBUG] [Thread-1827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:15:43.401 [DEBUG] [Thread-1827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:15:43.401 [DEBUG] [Thread-1827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:15:43.401 [DEBUG] [Thread-1827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:15:43.420 [INFO] [Thread-1827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:15:43.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:15:44.230 [DEBUG] [Thread-1827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:15:44.231 [DEBUG] [Thread-1827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:15:44.231 [DEBUG] [Thread-1827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:15:44.271 [DEBUG] [Thread-1827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:15:44.272 [DEBUG] [Thread-1827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:15:44.275 [DEBUG] [Thread-1827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:15:44.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:15:44.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:15:44.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:15:44.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:15:44.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:15:44.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:15:44.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:15:44.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:15:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:15:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.593850 -999.00  +26.50   7.16     12   -4.80 1 1 1 1 1   888    0 31.25 -15.02 ----- 4.2 7.2 16.4 12.3 32.4 -31.2 32.3 -32.1 33.6 -28.5 33.8 -29.7
2025-11-25T16:15:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:15:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:15:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.593850
2025-11-25T16:15:44.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:15:44.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:15:44.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:15:44.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:15:44.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:15:44.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:15:35', tmtdew=38.78, humidity=6.91, cloud=0.0, wind=6.37, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:15:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:15:44.298 [DEBUG] [Thread-1827] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:15:44.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:15:44.400 [DEBUG] [Thread-1830] [transport.py] [_log()] starting thread (client mode): 0x70d0ec50
2025-11-25T16:15:44.400 [DEBUG] [Thread-1830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:15:44.414 [DEBUG] [Thread-1830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:15:44.415 [INFO] [Thread-1830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] client lang: <none>
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] server lang: <none>
2025-11-25T16:15:44.422 [DEBUG] [Thread-1830] [transport.py] [_log()] kex follows: False
2025-11-25T16:15:44.423 [DEBUG] [Thread-1830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:15:44.423 [DEBUG] [Thread-1830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:15:44.423 [DEBUG] [Thread-1830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:15:44.423 [DEBUG] [Thread-1830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:15:44.423 [DEBUG] [Thread-1830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:15:44.423 [DEBUG] [Thread-1830] [transport.py] [_log()] Compression: none
2025-11-25T16:15:44.423 [DEBUG] [Thread-1830] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:15:44.479 [DEBUG] [Thread-1830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:15:44.480 [DEBUG] [Thread-1830] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:15:44.480 [DEBUG] [Thread-1830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:15:44.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:15:44.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:15:44.536 [DEBUG] [Thread-1830] [transport.py] [_log()] userauth is OK
2025-11-25T16:15:44.536 [DEBUG] [Thread-1830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:15:44.536 [DEBUG] [Thread-1830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:15:44.536 [DEBUG] [Thread-1830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:15:44.536 [DEBUG] [Thread-1830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:15:44.559 [INFO] [Thread-1830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:15:44.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:15:44.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:15:45.413 [DEBUG] [Thread-1830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:15:45.413 [DEBUG] [Thread-1830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:15:45.462 [DEBUG] [Thread-1830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:15:45.462 [DEBUG] [Thread-1830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:15:45.471 [DEBUG] [Thread-1830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:15:45.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:15:45.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:15:45.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:15:45.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:15:45.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:15:45.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:15:45.508 [DEBUG] [Thread-1830] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:15:57.785 [DEBUG] [Thread-1832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:16:05.273 [DEBUG] [Thread-1833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:16:12.849 [DEBUG] [Thread-1834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:16:15.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:16:15.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:16:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:16:16.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 16, 7), 39.03, 6.81, 0.0, 7.27, 27.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:16:16.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:16:07
2025-11-25T16:16:16.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:16:16.479 [DEBUG] [Thread-1835] [transport.py] [_log()] starting thread (client mode): 0x737e8370
2025-11-25T16:16:16.479 [DEBUG] [Thread-1835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:16:16.493 [DEBUG] [Thread-1835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:16:16.493 [INFO] [Thread-1835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:16:16.494 [DEBUG] [Thread-1835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] client lang: <none>
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] server lang: <none>
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] kex follows: False
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] Compression: none
2025-11-25T16:16:16.495 [DEBUG] [Thread-1835] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:16:16.508 [DEBUG] [Thread-1835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:16:16.508 [DEBUG] [Thread-1835] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:16:16.509 [DEBUG] [Thread-1835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:16:16.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:16:16.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:16:16.511 [DEBUG] [Thread-1835] [transport.py] [_log()] userauth is OK
2025-11-25T16:16:16.511 [DEBUG] [Thread-1835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:16:16.511 [DEBUG] [Thread-1835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:16:16.511 [DEBUG] [Thread-1835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:16:16.511 [DEBUG] [Thread-1835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:16:16.530 [INFO] [Thread-1835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:16:16.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:16:17.212 [DEBUG] [Thread-1835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:16:17.213 [DEBUG] [Thread-1835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:16:17.213 [DEBUG] [Thread-1835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:16:17.254 [DEBUG] [Thread-1835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:16:17.254 [DEBUG] [Thread-1835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:16:17.258 [DEBUG] [Thread-1835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:16:17.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:16:17.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:16:17.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:16:17.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:16:17.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:16:17.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:16:17.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:16:17.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:16:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:16:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.594198 -999.00  +26.60   4.43     12   -4.70 1 1 1 1 1   888    0 31.72 -15.47 ----- 3.4 4.4 25.4 6.3 32.5 -31.2 32.5 -30.6 33.8 -28.3 34.0 -29.2
2025-11-25T16:16:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:16:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:16:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.594198
2025-11-25T16:16:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:16:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:16:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:16:17.284 [DEBUG] [Thread-1835] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:16:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:16:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:16:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:16:07', tmtdew=39.03, humidity=6.81, cloud=0.0, wind=7.27, temperature=27.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:15:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:16:17.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:16:17.391 [DEBUG] [Thread-1838] [transport.py] [_log()] starting thread (client mode): 0x737811b0
2025-11-25T16:16:17.392 [DEBUG] [Thread-1838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:16:17.407 [DEBUG] [Thread-1838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:16:17.407 [INFO] [Thread-1838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] client lang: <none>
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] server lang: <none>
2025-11-25T16:16:17.415 [DEBUG] [Thread-1838] [transport.py] [_log()] kex follows: False
2025-11-25T16:16:17.416 [DEBUG] [Thread-1838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:16:17.416 [DEBUG] [Thread-1838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:16:17.416 [DEBUG] [Thread-1838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:16:17.416 [DEBUG] [Thread-1838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:16:17.416 [DEBUG] [Thread-1838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:16:17.416 [DEBUG] [Thread-1838] [transport.py] [_log()] Compression: none
2025-11-25T16:16:17.416 [DEBUG] [Thread-1838] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:16:17.472 [DEBUG] [Thread-1838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:16:17.473 [DEBUG] [Thread-1838] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:16:17.473 [DEBUG] [Thread-1838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:16:17.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:16:17.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:16:17.529 [DEBUG] [Thread-1838] [transport.py] [_log()] userauth is OK
2025-11-25T16:16:17.529 [DEBUG] [Thread-1838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:16:17.530 [DEBUG] [Thread-1838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:16:17.530 [DEBUG] [Thread-1838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:16:17.530 [DEBUG] [Thread-1838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:16:17.549 [INFO] [Thread-1838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:16:17.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:16:17.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:16:18.382 [DEBUG] [Thread-1838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:16:18.382 [DEBUG] [Thread-1838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:16:18.430 [DEBUG] [Thread-1838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:16:18.431 [DEBUG] [Thread-1838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:16:18.439 [DEBUG] [Thread-1838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:16:18.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:16:18.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:16:18.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:16:18.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:16:18.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:16:18.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:16:18.473 [DEBUG] [Thread-1838] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:16:27.895 [DEBUG] [Thread-1840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:16:42.968 [DEBUG] [Thread-1841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:16:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:16:48.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:16:48.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:16:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 16, 39), 38.71, 6.86, 0.0, 4.64, 27.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:16:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:16:39
2025-11-25T16:16:49.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:16:49.431 [DEBUG] [Thread-1842] [transport.py] [_log()] starting thread (client mode): 0x73782fb0
2025-11-25T16:16:49.431 [DEBUG] [Thread-1842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:16:49.446 [DEBUG] [Thread-1842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:16:49.446 [INFO] [Thread-1842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:16:49.448 [DEBUG] [Thread-1842] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] client lang: <none>
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] server lang: <none>
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] kex follows: False
2025-11-25T16:16:49.449 [DEBUG] [Thread-1842] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:16:49.450 [DEBUG] [Thread-1842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:16:49.450 [DEBUG] [Thread-1842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:16:49.450 [DEBUG] [Thread-1842] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:16:49.450 [DEBUG] [Thread-1842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:16:49.450 [DEBUG] [Thread-1842] [transport.py] [_log()] Compression: none
2025-11-25T16:16:49.450 [DEBUG] [Thread-1842] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:16:49.468 [DEBUG] [Thread-1842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:16:49.469 [DEBUG] [Thread-1842] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:16:49.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:16:49.470 [DEBUG] [Thread-1842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:16:49.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:16:49.472 [DEBUG] [Thread-1842] [transport.py] [_log()] userauth is OK
2025-11-25T16:16:49.472 [DEBUG] [Thread-1842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:16:49.472 [DEBUG] [Thread-1842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:16:49.472 [DEBUG] [Thread-1842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:16:49.472 [DEBUG] [Thread-1842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:16:49.491 [INFO] [Thread-1842] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:16:49.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:16:50.316 [DEBUG] [Thread-1842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:16:50.316 [DEBUG] [Thread-1842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:16:50.316 [DEBUG] [Thread-1842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:16:50.357 [DEBUG] [Thread-1842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:16:50.357 [DEBUG] [Thread-1842] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:16:50.361 [DEBUG] [Thread-1842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:16:50.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:16:50.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:16:50.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:16:50.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:16:50.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:16:50.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:16:50.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:16:50.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:16:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:16:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.594545 -999.00  +26.80   8.48     12   -4.80 1 1 1 1 1   888    0 31.44 -17.44 ----- 8.4 8.5 300.0 10.5 32.6 -30.9 32.6 -30.4 33.9 -28.3 34.2 -29.5
2025-11-25T16:16:50.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:16:50.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:16:50.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.594545
2025-11-25T16:16:50.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:16:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:16:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:16:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:16:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:16:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:16:39', tmtdew=38.71, humidity=6.86, cloud=0.0, wind=4.64, temperature=27.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:16:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:16:50.387 [DEBUG] [Thread-1842] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:16:50.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:16:50.495 [DEBUG] [Thread-1845] [transport.py] [_log()] starting thread (client mode): 0x737831f0
2025-11-25T16:16:50.495 [DEBUG] [Thread-1845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:16:50.509 [DEBUG] [Thread-1845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:16:50.510 [INFO] [Thread-1845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] client lang: <none>
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] server lang: <none>
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] kex follows: False
2025-11-25T16:16:50.517 [DEBUG] [Thread-1845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:16:50.518 [DEBUG] [Thread-1845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:16:50.518 [DEBUG] [Thread-1845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:16:50.518 [DEBUG] [Thread-1845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:16:50.518 [DEBUG] [Thread-1845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:16:50.518 [DEBUG] [Thread-1845] [transport.py] [_log()] Compression: none
2025-11-25T16:16:50.518 [DEBUG] [Thread-1845] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:16:50.580 [DEBUG] [Thread-1845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:16:50.580 [DEBUG] [Thread-1845] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:16:50.581 [DEBUG] [Thread-1845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:16:50.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:16:50.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:16:50.636 [DEBUG] [Thread-1845] [transport.py] [_log()] userauth is OK
2025-11-25T16:16:50.637 [DEBUG] [Thread-1845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:16:50.637 [DEBUG] [Thread-1845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:16:50.637 [DEBUG] [Thread-1845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:16:50.638 [DEBUG] [Thread-1845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:16:50.656 [INFO] [Thread-1845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:16:50.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:16:50.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:16:51.508 [DEBUG] [Thread-1845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:16:51.509 [DEBUG] [Thread-1845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:16:51.557 [DEBUG] [Thread-1845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:16:51.557 [DEBUG] [Thread-1845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:16:51.566 [DEBUG] [Thread-1845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:16:51.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:16:51.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:16:51.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:16:51.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:16:51.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:16:51.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:16:51.604 [DEBUG] [Thread-1845] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:16:58.012 [DEBUG] [Thread-1847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:17:05.797 [DEBUG] [Thread-1848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:17:13.078 [DEBUG] [Thread-1849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:17:21.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:17:21.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:17:21.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:17:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 17, 11), 38.55, 6.94, 0.0, 6.48, 26.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:17:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:17:11
2025-11-25T16:17:22.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:17:22.563 [DEBUG] [Thread-1850] [transport.py] [_log()] starting thread (client mode): 0x73780cd0
2025-11-25T16:17:22.564 [DEBUG] [Thread-1850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:17:22.584 [DEBUG] [Thread-1850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:17:22.585 [INFO] [Thread-1850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] client lang: <none>
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] server lang: <none>
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] kex follows: False
2025-11-25T16:17:22.588 [DEBUG] [Thread-1850] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:17:22.589 [DEBUG] [Thread-1850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:17:22.589 [DEBUG] [Thread-1850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:17:22.589 [DEBUG] [Thread-1850] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:17:22.589 [DEBUG] [Thread-1850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:17:22.589 [DEBUG] [Thread-1850] [transport.py] [_log()] Compression: none
2025-11-25T16:17:22.589 [DEBUG] [Thread-1850] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:17:22.598 [DEBUG] [Thread-1850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:17:22.598 [DEBUG] [Thread-1850] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:17:22.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:17:22.599 [DEBUG] [Thread-1850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:17:22.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:17:22.601 [DEBUG] [Thread-1850] [transport.py] [_log()] userauth is OK
2025-11-25T16:17:22.601 [DEBUG] [Thread-1850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:17:22.601 [DEBUG] [Thread-1850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:17:22.601 [DEBUG] [Thread-1850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:17:22.601 [DEBUG] [Thread-1850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:17:22.625 [INFO] [Thread-1850] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:17:22.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:17:23.295 [DEBUG] [Thread-1850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:17:23.295 [DEBUG] [Thread-1850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:17:23.296 [DEBUG] [Thread-1850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:17:23.337 [DEBUG] [Thread-1850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:17:23.337 [DEBUG] [Thread-1850] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:17:23.340 [DEBUG] [Thread-1850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:17:23.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:17:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:17:23.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:17:23.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:17:23.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:17:23.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:17:23.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:17:23.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:17:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:17:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.594892 -999.00  +26.70   3.91     12   -4.70 1 1 1 1 1   888    0 31.11 -18.80 ----- 6.9 3.9 15.5 9.3 32.7 -31.0 32.7 -30.6 34.0 -28.4 34.3 -29.8
2025-11-25T16:17:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:17:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:17:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.594892
2025-11-25T16:17:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:17:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:17:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:17:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:17:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:17:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:17:11', tmtdew=38.55, humidity=6.94, cloud=0.0, wind=6.48, temperature=26.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:16:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:17:23.366 [DEBUG] [Thread-1850] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:17:23.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:17:23.471 [DEBUG] [Thread-1853] [transport.py] [_log()] starting thread (client mode): 0x737837f0
2025-11-25T16:17:23.471 [DEBUG] [Thread-1853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:17:23.485 [DEBUG] [Thread-1853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:17:23.485 [INFO] [Thread-1853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] client lang: <none>
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] server lang: <none>
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] kex follows: False
2025-11-25T16:17:23.493 [DEBUG] [Thread-1853] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:17:23.494 [DEBUG] [Thread-1853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:17:23.494 [DEBUG] [Thread-1853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:17:23.494 [DEBUG] [Thread-1853] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:17:23.494 [DEBUG] [Thread-1853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:17:23.494 [DEBUG] [Thread-1853] [transport.py] [_log()] Compression: none
2025-11-25T16:17:23.494 [DEBUG] [Thread-1853] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:17:23.558 [DEBUG] [Thread-1853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:17:23.558 [DEBUG] [Thread-1853] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:17:23.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:17:23.559 [DEBUG] [Thread-1853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:17:23.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:17:23.620 [DEBUG] [Thread-1853] [transport.py] [_log()] userauth is OK
2025-11-25T16:17:23.621 [DEBUG] [Thread-1853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:17:23.621 [DEBUG] [Thread-1853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:17:23.621 [DEBUG] [Thread-1853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:17:23.621 [DEBUG] [Thread-1853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:17:23.640 [INFO] [Thread-1853] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:17:23.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:17:23.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:17:24.499 [DEBUG] [Thread-1853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:17:24.499 [DEBUG] [Thread-1853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:17:24.551 [DEBUG] [Thread-1853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:17:24.551 [DEBUG] [Thread-1853] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:17:24.560 [DEBUG] [Thread-1853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:17:24.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:17:24.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:17:24.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:17:24.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:17:24.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:17:24.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:17:24.596 [DEBUG] [Thread-1853] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:17:28.115 [DEBUG] [Thread-1855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:17:43.180 [DEBUG] [Thread-1856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:17:54.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:17:54.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:17:54.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:17:55.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 17, 43), 38.56, 7.04, 0.0, 2.51, 27.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:17:55.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:17:43
2025-11-25T16:17:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:17:55.556 [DEBUG] [Thread-1857] [transport.py] [_log()] starting thread (client mode): 0x70d0f3a0
2025-11-25T16:17:55.556 [DEBUG] [Thread-1857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:17:55.577 [DEBUG] [Thread-1857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:17:55.577 [INFO] [Thread-1857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:17:55.580 [DEBUG] [Thread-1857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:17:55.580 [DEBUG] [Thread-1857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] client lang: <none>
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] server lang: <none>
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] kex follows: False
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] Compression: none
2025-11-25T16:17:55.581 [DEBUG] [Thread-1857] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:17:55.600 [DEBUG] [Thread-1857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:17:55.601 [DEBUG] [Thread-1857] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:17:55.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:17:55.602 [DEBUG] [Thread-1857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:17:55.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:17:55.603 [DEBUG] [Thread-1857] [transport.py] [_log()] userauth is OK
2025-11-25T16:17:55.603 [DEBUG] [Thread-1857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:17:55.603 [DEBUG] [Thread-1857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:17:55.603 [DEBUG] [Thread-1857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:17:55.603 [DEBUG] [Thread-1857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:17:55.626 [INFO] [Thread-1857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:17:55.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:17:56.444 [DEBUG] [Thread-1857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:17:56.444 [DEBUG] [Thread-1857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:17:56.445 [DEBUG] [Thread-1857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:17:56.485 [DEBUG] [Thread-1857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:17:56.485 [DEBUG] [Thread-1857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:17:56.488 [DEBUG] [Thread-1857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:17:56.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:17:56.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:17:56.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:17:56.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:17:56.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:17:56.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:17:56.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:17:56.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:17:56.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:17:56.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.595239 -999.00  +26.70  11.72     12   -4.80 1 1 1 1 1   888    0 31.08 -19.53 ----- 8.8 11.7 55.0 13.3 32.8 -31.4 32.8 -31.1 34.1 -28.8 34.4 -30.1
2025-11-25T16:17:56.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:17:56.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:17:56.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.595239
2025-11-25T16:17:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:17:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:17:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:17:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:17:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:17:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:17:43', tmtdew=38.56, humidity=7.04, cloud=0.0, wind=2.51, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:17:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:17:56.514 [DEBUG] [Thread-1857] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:17:56.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:17:56.616 [DEBUG] [Thread-1860] [transport.py] [_log()] starting thread (client mode): 0x737803d0
2025-11-25T16:17:56.616 [DEBUG] [Thread-1860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:17:56.630 [DEBUG] [Thread-1860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:17:56.631 [INFO] [Thread-1860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:17:56.638 [DEBUG] [Thread-1860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:17:56.638 [DEBUG] [Thread-1860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:17:56.638 [DEBUG] [Thread-1860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:17:56.638 [DEBUG] [Thread-1860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:17:56.638 [DEBUG] [Thread-1860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:17:56.638 [DEBUG] [Thread-1860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] client lang: <none>
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] server lang: <none>
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] kex follows: False
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] Compression: none
2025-11-25T16:17:56.639 [DEBUG] [Thread-1860] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:17:56.696 [DEBUG] [Thread-1860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:17:56.696 [DEBUG] [Thread-1860] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:17:56.697 [DEBUG] [Thread-1860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:17:56.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:17:56.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:17:56.756 [DEBUG] [Thread-1860] [transport.py] [_log()] userauth is OK
2025-11-25T16:17:56.757 [DEBUG] [Thread-1860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:17:56.757 [DEBUG] [Thread-1860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:17:56.757 [DEBUG] [Thread-1860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:17:56.757 [DEBUG] [Thread-1860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:17:56.775 [INFO] [Thread-1860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:17:56.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:17:56.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:17:57.602 [DEBUG] [Thread-1860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:17:57.602 [DEBUG] [Thread-1860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:17:57.650 [DEBUG] [Thread-1860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:17:57.650 [DEBUG] [Thread-1860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:17:57.660 [DEBUG] [Thread-1860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:17:57.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:17:57.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:17:57.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
2025-11-25T16:17:57.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:17:57.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:17:57.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:17:57.697 [DEBUG] [Thread-1860] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:17:58.229 [DEBUG] [Thread-1862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:18:06.515 [DEBUG] [Thread-1863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:18:13.306 [DEBUG] [Thread-1864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:18:27.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:18:27.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:18:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:18:28.344 [DEBUG] [Thread-1865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:18:28.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 18, 15), 38.78, 6.92, 0.0, 1.57, 27.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:18:28.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:18:15
2025-11-25T16:18:28.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:18:28.630 [DEBUG] [Thread-1866] [transport.py] [_log()] starting thread (client mode): 0x73783490
2025-11-25T16:18:28.630 [DEBUG] [Thread-1866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:18:28.654 [DEBUG] [Thread-1866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:18:28.655 [INFO] [Thread-1866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] client lang: <none>
2025-11-25T16:18:28.658 [DEBUG] [Thread-1866] [transport.py] [_log()] server lang: <none>
2025-11-25T16:18:28.659 [DEBUG] [Thread-1866] [transport.py] [_log()] kex follows: False
2025-11-25T16:18:28.659 [DEBUG] [Thread-1866] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:18:28.659 [DEBUG] [Thread-1866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:18:28.659 [DEBUG] [Thread-1866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:18:28.659 [DEBUG] [Thread-1866] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:18:28.659 [DEBUG] [Thread-1866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:18:28.659 [DEBUG] [Thread-1866] [transport.py] [_log()] Compression: none
2025-11-25T16:18:28.659 [DEBUG] [Thread-1866] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:18:28.676 [DEBUG] [Thread-1866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:18:28.676 [DEBUG] [Thread-1866] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:18:28.677 [DEBUG] [Thread-1866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:18:28.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:18:28.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:18:28.679 [DEBUG] [Thread-1866] [transport.py] [_log()] userauth is OK
2025-11-25T16:18:28.679 [DEBUG] [Thread-1866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:18:28.679 [DEBUG] [Thread-1866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:18:28.679 [DEBUG] [Thread-1866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:18:28.679 [DEBUG] [Thread-1866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:18:28.709 [INFO] [Thread-1866] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:18:28.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:18:29.378 [DEBUG] [Thread-1866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:18:29.378 [DEBUG] [Thread-1866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:18:29.379 [DEBUG] [Thread-1866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:18:29.419 [DEBUG] [Thread-1866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:18:29.419 [DEBUG] [Thread-1866] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:18:29.422 [DEBUG] [Thread-1866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:18:29.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:18:29.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:18:29.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:18:29.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:18:29.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:18:29.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:18:29.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:18:29.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:18:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:18:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.595587 -999.00  +26.70  12.20     12   -4.80 1 1 1 1 1   888    0 31.35 -19.54 ----- 12.1 12.2 53.2 15.7 32.7 -31.6 32.6 -32.2 33.9 -30.9 34.4 -30.3
2025-11-25T16:18:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:18:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:18:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.595587
2025-11-25T16:18:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:18:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:18:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:18:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:18:29.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:18:29.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:18:15', tmtdew=38.78, humidity=6.92, cloud=0.0, wind=1.57, temperature=27.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:17:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:18:29.449 [DEBUG] [Thread-1866] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:18:29.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:18:29.547 [DEBUG] [Thread-1869] [transport.py] [_log()] starting thread (client mode): 0x737827a0
2025-11-25T16:18:29.547 [DEBUG] [Thread-1869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:18:29.562 [DEBUG] [Thread-1869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:18:29.562 [INFO] [Thread-1869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:18:29.570 [DEBUG] [Thread-1869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:18:29.570 [DEBUG] [Thread-1869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:18:29.570 [DEBUG] [Thread-1869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:18:29.570 [DEBUG] [Thread-1869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:18:29.570 [DEBUG] [Thread-1869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:18:29.570 [DEBUG] [Thread-1869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:18:29.570 [DEBUG] [Thread-1869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:18:29.570 [DEBUG] [Thread-1869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:18:29.570 [DEBUG] [Thread-1869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] client lang: <none>
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] server lang: <none>
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] kex follows: False
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] Compression: none
2025-11-25T16:18:29.571 [DEBUG] [Thread-1869] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:18:29.629 [DEBUG] [Thread-1869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:18:29.630 [DEBUG] [Thread-1869] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:18:29.630 [DEBUG] [Thread-1869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:18:29.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:18:29.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:18:29.692 [DEBUG] [Thread-1869] [transport.py] [_log()] userauth is OK
2025-11-25T16:18:29.693 [DEBUG] [Thread-1869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:18:29.693 [DEBUG] [Thread-1869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:18:29.693 [DEBUG] [Thread-1869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:18:29.693 [DEBUG] [Thread-1869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:18:29.713 [INFO] [Thread-1869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:18:29.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:18:29.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:18:30.561 [DEBUG] [Thread-1869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:18:30.561 [DEBUG] [Thread-1869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:18:30.610 [DEBUG] [Thread-1869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:18:30.610 [DEBUG] [Thread-1869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:18:30.619 [DEBUG] [Thread-1869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:18:30.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:18:30.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:18:30.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:18:30.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:18:30.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:18:30.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:18:30.656 [DEBUG] [Thread-1869] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:18:43.390 [DEBUG] [Thread-1871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:18:58.456 [DEBUG] [Thread-1872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:19:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:19:00.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:19:00.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:19:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 18, 47), 39.09, 6.92, 0.0, 5.86, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:19:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:18:47
2025-11-25T16:19:01.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:19:01.605 [DEBUG] [Thread-1873] [transport.py] [_log()] starting thread (client mode): 0x70d0f040
2025-11-25T16:19:01.605 [DEBUG] [Thread-1873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:19:01.627 [DEBUG] [Thread-1873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:19:01.627 [INFO] [Thread-1873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] client lang: <none>
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] server lang: <none>
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] kex follows: False
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:19:01.628 [DEBUG] [Thread-1873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:19:01.629 [DEBUG] [Thread-1873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:19:01.629 [DEBUG] [Thread-1873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:19:01.629 [DEBUG] [Thread-1873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:19:01.629 [DEBUG] [Thread-1873] [transport.py] [_log()] Compression: none
2025-11-25T16:19:01.629 [DEBUG] [Thread-1873] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:19:01.646 [DEBUG] [Thread-1873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:19:01.647 [DEBUG] [Thread-1873] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:19:01.647 [DEBUG] [Thread-1873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:19:01.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:19:01.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:19:01.650 [DEBUG] [Thread-1873] [transport.py] [_log()] userauth is OK
2025-11-25T16:19:01.650 [DEBUG] [Thread-1873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:19:01.650 [DEBUG] [Thread-1873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:19:01.650 [DEBUG] [Thread-1873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:19:01.650 [DEBUG] [Thread-1873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:19:01.675 [INFO] [Thread-1873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:19:01.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:19:02.318 [DEBUG] [Thread-1873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:19:02.318 [DEBUG] [Thread-1873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:19:02.319 [DEBUG] [Thread-1873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:19:02.360 [DEBUG] [Thread-1873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:19:02.360 [DEBUG] [Thread-1873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:19:02.363 [DEBUG] [Thread-1873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:19:02.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:19:02.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:19:02.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:19:02.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:19:02.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:19:02.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:19:02.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:19:02.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:19:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:19:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.595934 -999.00  +26.40   8.55     12   -5.20 1 1 1 1 1   888    0 31.30 -18.71 ----- 6.9 8.6 31.4 13.1 32.7 -32.3 32.6 -31.7 34.0 -29.2 34.4 -30.6
2025-11-25T16:19:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:19:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:19:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.595934
2025-11-25T16:19:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:19:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:19:02.390 [DEBUG] [Thread-1873] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:19:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:19:02.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:19:02.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:19:02.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:18:47', tmtdew=39.09, humidity=6.92, cloud=0.0, wind=5.86, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:18:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:19:02.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:19:02.496 [DEBUG] [Thread-1876] [transport.py] [_log()] starting thread (client mode): 0x70d0dfc0
2025-11-25T16:19:02.496 [DEBUG] [Thread-1876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:19:02.511 [DEBUG] [Thread-1876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:19:02.511 [INFO] [Thread-1876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:19:02.518 [DEBUG] [Thread-1876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] client lang: <none>
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] server lang: <none>
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] kex follows: False
2025-11-25T16:19:02.519 [DEBUG] [Thread-1876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:19:02.520 [DEBUG] [Thread-1876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:19:02.520 [DEBUG] [Thread-1876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:19:02.520 [DEBUG] [Thread-1876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:19:02.520 [DEBUG] [Thread-1876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:19:02.520 [DEBUG] [Thread-1876] [transport.py] [_log()] Compression: none
2025-11-25T16:19:02.520 [DEBUG] [Thread-1876] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:19:02.577 [DEBUG] [Thread-1876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:19:02.577 [DEBUG] [Thread-1876] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:19:02.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:19:02.578 [DEBUG] [Thread-1876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:19:02.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:19:02.637 [DEBUG] [Thread-1876] [transport.py] [_log()] userauth is OK
2025-11-25T16:19:02.637 [DEBUG] [Thread-1876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:19:02.637 [DEBUG] [Thread-1876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:19:02.637 [DEBUG] [Thread-1876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:19:02.638 [DEBUG] [Thread-1876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:19:02.658 [INFO] [Thread-1876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:19:02.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:19:02.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:19:03.491 [DEBUG] [Thread-1876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:19:03.491 [DEBUG] [Thread-1876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:19:03.538 [DEBUG] [Thread-1876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:19:03.539 [DEBUG] [Thread-1876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:19:03.548 [DEBUG] [Thread-1876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:19:03.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:19:03.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:19:03.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:19:03.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:19:03.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:19:03.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:19:03.585 [DEBUG] [Thread-1876] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:19:07.025 [DEBUG] [Thread-1878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:19:13.499 [DEBUG] [Thread-1879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:19:28.559 [DEBUG] [Thread-1880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:19:33.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:19:33.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:19:33.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:19:34.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 19, 19), 39.18, 6.87, 0.0, 5.84, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:19:34.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:19:19
2025-11-25T16:19:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:19:34.543 [DEBUG] [Thread-1881] [transport.py] [_log()] starting thread (client mode): 0x73781930
2025-11-25T16:19:34.543 [DEBUG] [Thread-1881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:19:34.564 [DEBUG] [Thread-1881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:19:34.564 [INFO] [Thread-1881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] client lang: <none>
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] server lang: <none>
2025-11-25T16:19:34.566 [DEBUG] [Thread-1881] [transport.py] [_log()] kex follows: False
2025-11-25T16:19:34.567 [DEBUG] [Thread-1881] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:19:34.567 [DEBUG] [Thread-1881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:19:34.567 [DEBUG] [Thread-1881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:19:34.567 [DEBUG] [Thread-1881] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:19:34.567 [DEBUG] [Thread-1881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:19:34.567 [DEBUG] [Thread-1881] [transport.py] [_log()] Compression: none
2025-11-25T16:19:34.567 [DEBUG] [Thread-1881] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:19:34.582 [DEBUG] [Thread-1881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:19:34.582 [DEBUG] [Thread-1881] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:19:34.583 [DEBUG] [Thread-1881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:19:34.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:19:34.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:19:34.585 [DEBUG] [Thread-1881] [transport.py] [_log()] userauth is OK
2025-11-25T16:19:34.585 [DEBUG] [Thread-1881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:19:34.585 [DEBUG] [Thread-1881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:19:34.585 [DEBUG] [Thread-1881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:19:34.585 [DEBUG] [Thread-1881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:19:34.609 [INFO] [Thread-1881] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:19:34.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:19:35.261 [DEBUG] [Thread-1881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:19:35.262 [DEBUG] [Thread-1881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:19:35.262 [DEBUG] [Thread-1881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:19:35.303 [DEBUG] [Thread-1881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:19:35.303 [DEBUG] [Thread-1881] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:19:35.306 [DEBUG] [Thread-1881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:19:35.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:19:35.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:19:35.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:19:35.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:19:35.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:19:35.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:19:35.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:19:35.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:19:35.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:19:35.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.596281 -999.00  +26.40   5.79     12   -5.00 1 1 1 1 1   888    0 31.11 -19.20 ----- 5.4 5.8 19.4 8.1 32.7 -31.4 32.7 -31.8 34.0 -28.5 34.3 -30.3
2025-11-25T16:19:35.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:19:35.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:19:35.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.596281
2025-11-25T16:19:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:19:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:19:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:19:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:19:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:19:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:19:19', tmtdew=39.18, humidity=6.87, cloud=0.0, wind=5.84, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:18:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:19:35.332 [DEBUG] [Thread-1881] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:19:35.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:19:35.434 [DEBUG] [Thread-1884] [transport.py] [_log()] starting thread (client mode): 0x73783340
2025-11-25T16:19:35.434 [DEBUG] [Thread-1884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:19:35.453 [DEBUG] [Thread-1884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:19:35.453 [INFO] [Thread-1884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:19:35.460 [DEBUG] [Thread-1884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] client lang: <none>
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] server lang: <none>
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] kex follows: False
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:19:35.461 [DEBUG] [Thread-1884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:19:35.462 [DEBUG] [Thread-1884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:19:35.462 [DEBUG] [Thread-1884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:19:35.462 [DEBUG] [Thread-1884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:19:35.462 [DEBUG] [Thread-1884] [transport.py] [_log()] Compression: none
2025-11-25T16:19:35.462 [DEBUG] [Thread-1884] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:19:35.520 [DEBUG] [Thread-1884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:19:35.521 [DEBUG] [Thread-1884] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:19:35.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:19:35.522 [DEBUG] [Thread-1884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:19:35.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:19:35.576 [DEBUG] [Thread-1884] [transport.py] [_log()] userauth is OK
2025-11-25T16:19:35.577 [DEBUG] [Thread-1884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:19:35.577 [DEBUG] [Thread-1884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:19:35.577 [DEBUG] [Thread-1884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:19:35.577 [DEBUG] [Thread-1884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:19:35.596 [INFO] [Thread-1884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:19:35.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:19:35.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:19:36.456 [DEBUG] [Thread-1884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:19:36.456 [DEBUG] [Thread-1884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:19:36.504 [DEBUG] [Thread-1884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:19:36.504 [DEBUG] [Thread-1884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:19:36.513 [DEBUG] [Thread-1884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:19:36.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:19:36.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:19:36.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:19:36.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:19:36.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:19:36.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:19:36.549 [DEBUG] [Thread-1884] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:19:43.599 [DEBUG] [Thread-1886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:19:58.663 [DEBUG] [Thread-1887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:20:06.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:20:06.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:20:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:20:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 19, 51), 39.02, 6.87, 0.0, 3.72, 27.09, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:20:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:19:51
2025-11-25T16:20:07.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:20:07.562 [DEBUG] [Thread-1888] [transport.py] [_log()] starting thread (client mode): 0x70d0d540
2025-11-25T16:20:07.562 [DEBUG] [Thread-1888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:20:07.582 [DEBUG] [Thread-1888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:20:07.582 [INFO] [Thread-1888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] client lang: <none>
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] server lang: <none>
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] kex follows: False
2025-11-25T16:20:07.585 [DEBUG] [Thread-1888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:20:07.586 [DEBUG] [Thread-1888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:20:07.586 [DEBUG] [Thread-1888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:20:07.586 [DEBUG] [Thread-1888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:20:07.586 [DEBUG] [Thread-1888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:20:07.586 [DEBUG] [Thread-1888] [transport.py] [_log()] Compression: none
2025-11-25T16:20:07.586 [DEBUG] [Thread-1888] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:20:07.593 [DEBUG] [Thread-1888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:20:07.593 [DEBUG] [Thread-1888] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:20:07.593 [DEBUG] [Thread-1888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:20:07.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:20:07.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:20:07.594 [DEBUG] [Thread-1888] [transport.py] [_log()] userauth is OK
2025-11-25T16:20:07.594 [DEBUG] [Thread-1888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:20:07.594 [DEBUG] [Thread-1888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:20:07.594 [DEBUG] [Thread-1888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:20:07.594 [DEBUG] [Thread-1888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:20:07.607 [INFO] [Thread-1888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:20:07.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:20:07.796 [DEBUG] [Thread-1890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:20:08.517 [DEBUG] [Thread-1888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:20:08.517 [DEBUG] [Thread-1888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:20:08.517 [DEBUG] [Thread-1888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:20:08.558 [DEBUG] [Thread-1888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:20:08.558 [DEBUG] [Thread-1888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:20:08.561 [DEBUG] [Thread-1888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:20:08.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:20:08.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:20:08.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:20:08.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:20:08.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:20:08.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:20:08.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.596976 -999.00  +26.80   0.86     12   -4.90 1 1 1 1 1   888    0 30.98 -20.27 ----- 2.0 0.9 165.6 1.8 32.9 -31.3 32.8 -31.4 34.2 -28.3 34.5 -29.9
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.596976
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:20:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:19:51', tmtdew=39.02, humidity=6.87, cloud=0.0, wind=3.72, temperature=27.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:19:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:20:08.586 [DEBUG] [Thread-1888] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:20:08.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:20:08.680 [DEBUG] [Thread-1892] [transport.py] [_log()] starting thread (client mode): 0x73782b00
2025-11-25T16:20:08.680 [DEBUG] [Thread-1892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:20:08.695 [DEBUG] [Thread-1892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:20:08.695 [INFO] [Thread-1892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] client lang: <none>
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] server lang: <none>
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] kex follows: False
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:20:08.703 [DEBUG] [Thread-1892] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:20:08.704 [DEBUG] [Thread-1892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:20:08.704 [DEBUG] [Thread-1892] [transport.py] [_log()] Compression: none
2025-11-25T16:20:08.704 [DEBUG] [Thread-1892] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:20:08.763 [DEBUG] [Thread-1892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:20:08.763 [DEBUG] [Thread-1892] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:20:08.763 [DEBUG] [Thread-1892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:20:08.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:20:08.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:20:08.819 [DEBUG] [Thread-1892] [transport.py] [_log()] userauth is OK
2025-11-25T16:20:08.819 [DEBUG] [Thread-1892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:20:08.819 [DEBUG] [Thread-1892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:20:08.819 [DEBUG] [Thread-1892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:20:08.819 [DEBUG] [Thread-1892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:20:08.833 [INFO] [Thread-1892] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:20:08.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:20:08.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:20:09.655 [DEBUG] [Thread-1892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:20:09.655 [DEBUG] [Thread-1892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:20:09.703 [DEBUG] [Thread-1892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:20:09.703 [DEBUG] [Thread-1892] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:20:09.711 [DEBUG] [Thread-1892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:20:09.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:20:09.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:20:09.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:20:09.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:20:09.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:20:09.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:20:09.748 [DEBUG] [Thread-1892] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:20:13.709 [DEBUG] [Thread-1894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:20:28.786 [DEBUG] [Thread-1895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:20:39.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:20:39.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:20:39.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:20:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 20, 23), 38.95, 6.92, 0.0, 3.55, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:20:40.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:20:23
2025-11-25T16:20:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:20:40.730 [DEBUG] [Thread-1896] [transport.py] [_log()] starting thread (client mode): 0x761da680
2025-11-25T16:20:40.730 [DEBUG] [Thread-1896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:20:40.750 [DEBUG] [Thread-1896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:20:40.750 [INFO] [Thread-1896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:20:40.753 [DEBUG] [Thread-1896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:20:40.753 [DEBUG] [Thread-1896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:20:40.753 [DEBUG] [Thread-1896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:20:40.753 [DEBUG] [Thread-1896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:20:40.753 [DEBUG] [Thread-1896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:20:40.753 [DEBUG] [Thread-1896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:20:40.753 [DEBUG] [Thread-1896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] client lang: <none>
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] server lang: <none>
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] kex follows: False
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] Compression: none
2025-11-25T16:20:40.754 [DEBUG] [Thread-1896] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:20:40.766 [DEBUG] [Thread-1896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:20:40.767 [DEBUG] [Thread-1896] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:20:40.767 [DEBUG] [Thread-1896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:20:40.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:20:40.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:20:40.769 [DEBUG] [Thread-1896] [transport.py] [_log()] userauth is OK
2025-11-25T16:20:40.769 [DEBUG] [Thread-1896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:20:40.770 [DEBUG] [Thread-1896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:20:40.770 [DEBUG] [Thread-1896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:20:40.770 [DEBUG] [Thread-1896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:20:40.795 [INFO] [Thread-1896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:20:40.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:20:41.392 [DEBUG] [Thread-1896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:20:41.393 [DEBUG] [Thread-1896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:20:41.393 [DEBUG] [Thread-1896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:20:41.434 [DEBUG] [Thread-1896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:20:41.434 [DEBUG] [Thread-1896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:20:41.438 [DEBUG] [Thread-1896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:20:41.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:20:41.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:20:41.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:20:41.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:20:41.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:20:41.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:20:41.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:20:41.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:20:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:20:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.597323 -999.00  +27.00   0.71     12   -4.80 1 1 1 1 1   888    0 31.34 -21.78 ----- 0.9 0.7 163.5 2.5 32.9 -31.8 33.0 -30.8 34.4 -28.9 34.8 -31.2
2025-11-25T16:20:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:20:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:20:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.597323
2025-11-25T16:20:41.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:20:41.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:20:41.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:20:41.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:20:41.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:20:41.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:20:23', tmtdew=38.95, humidity=6.92, cloud=0.0, wind=3.55, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:20:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:20:41.461 [DEBUG] [Thread-1896] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:20:41.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:20:41.574 [DEBUG] [Thread-1899] [transport.py] [_log()] starting thread (client mode): 0x761db8e0
2025-11-25T16:20:41.574 [DEBUG] [Thread-1899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:20:41.596 [DEBUG] [Thread-1899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:20:41.597 [INFO] [Thread-1899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:20:41.604 [DEBUG] [Thread-1899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:20:41.604 [DEBUG] [Thread-1899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:20:41.604 [DEBUG] [Thread-1899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] client lang: <none>
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] server lang: <none>
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] kex follows: False
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] Compression: none
2025-11-25T16:20:41.605 [DEBUG] [Thread-1899] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:20:41.666 [DEBUG] [Thread-1899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:20:41.666 [DEBUG] [Thread-1899] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:20:41.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:20:41.667 [DEBUG] [Thread-1899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:20:41.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:20:41.724 [DEBUG] [Thread-1899] [transport.py] [_log()] userauth is OK
2025-11-25T16:20:41.724 [DEBUG] [Thread-1899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:20:41.724 [DEBUG] [Thread-1899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:20:41.725 [DEBUG] [Thread-1899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:20:41.725 [DEBUG] [Thread-1899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:20:41.743 [INFO] [Thread-1899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:20:41.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:20:41.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:20:42.610 [DEBUG] [Thread-1899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:20:42.610 [DEBUG] [Thread-1899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:20:42.658 [DEBUG] [Thread-1899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:20:42.658 [DEBUG] [Thread-1899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:20:42.670 [DEBUG] [Thread-1899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:20:42.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:20:42.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:20:42.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:20:42.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:20:42.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:20:42.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:20:42.710 [DEBUG] [Thread-1899] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:20:43.835 [DEBUG] [Thread-1901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:20:58.891 [DEBUG] [Thread-1902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:21:08.526 [DEBUG] [Thread-1903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:21:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:21:12.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:21:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:21:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 20, 55), 38.79, 6.92, 0.0, 0.58, 27.04, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:21:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:20:55
2025-11-25T16:21:13.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:21:13.678 [DEBUG] [Thread-1904] [transport.py] [_log()] starting thread (client mode): 0x70d0f5b0
2025-11-25T16:21:13.678 [DEBUG] [Thread-1904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:21:13.696 [DEBUG] [Thread-1904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:21:13.697 [INFO] [Thread-1904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:21:13.698 [DEBUG] [Thread-1904] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:21:13.698 [DEBUG] [Thread-1904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:21:13.698 [DEBUG] [Thread-1904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] client lang: <none>
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] server lang: <none>
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] kex follows: False
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] Compression: none
2025-11-25T16:21:13.699 [DEBUG] [Thread-1904] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:21:13.714 [DEBUG] [Thread-1904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:21:13.714 [DEBUG] [Thread-1904] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:21:13.715 [DEBUG] [Thread-1904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:21:13.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:21:13.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:21:13.717 [DEBUG] [Thread-1904] [transport.py] [_log()] userauth is OK
2025-11-25T16:21:13.717 [DEBUG] [Thread-1904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:21:13.717 [DEBUG] [Thread-1904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:21:13.717 [DEBUG] [Thread-1904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:21:13.717 [DEBUG] [Thread-1904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:21:13.737 [INFO] [Thread-1904] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:21:13.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:21:13.938 [DEBUG] [Thread-1906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:21:14.399 [DEBUG] [Thread-1904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:21:14.399 [DEBUG] [Thread-1904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:21:14.400 [DEBUG] [Thread-1904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:21:14.441 [DEBUG] [Thread-1904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:21:14.441 [DEBUG] [Thread-1904] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:21:14.445 [DEBUG] [Thread-1904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:21:14.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:21:14.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:21:14.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:21:14.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:21:14.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:21:14.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:21:14.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:21:14.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:21:14.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:21:14.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.597670 -999.00  +27.20   0.78     11   -4.80 1 1 1 1 1   888    0 30.89 -21.52 ----- 3.1 0.8 123.7 2.4 33.1 -31.4 33.1 -30.8 34.6 -28.6 34.9 -30.4
2025-11-25T16:21:14.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:21:14.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:21:14.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.597670
2025-11-25T16:21:14.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:21:14.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:21:14.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:21:14.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:21:14.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:21:14.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:20:55', tmtdew=38.79, humidity=6.92, cloud=0.0, wind=0.58, temperature=27.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:20:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:21:14.471 [DEBUG] [Thread-1904] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:21:14.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:21:14.575 [DEBUG] [Thread-1908] [transport.py] [_log()] starting thread (client mode): 0x73782230
2025-11-25T16:21:14.575 [DEBUG] [Thread-1908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:21:14.589 [DEBUG] [Thread-1908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:21:14.590 [INFO] [Thread-1908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:21:14.597 [DEBUG] [Thread-1908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:21:14.597 [DEBUG] [Thread-1908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:21:14.597 [DEBUG] [Thread-1908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:21:14.597 [DEBUG] [Thread-1908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:21:14.597 [DEBUG] [Thread-1908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:21:14.597 [DEBUG] [Thread-1908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:21:14.597 [DEBUG] [Thread-1908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:21:14.598 [DEBUG] [Thread-1908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:21:14.598 [DEBUG] [Thread-1908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:21:14.598 [DEBUG] [Thread-1908] [transport.py] [_log()] client lang: <none>
2025-11-25T16:21:14.598 [DEBUG] [Thread-1908] [transport.py] [_log()] server lang: <none>
2025-11-25T16:21:14.598 [DEBUG] [Thread-1908] [transport.py] [_log()] kex follows: False
2025-11-25T16:21:14.598 [DEBUG] [Thread-1908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:21:14.598 [DEBUG] [Thread-1908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:21:14.598 [DEBUG] [Thread-1908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:21:14.598 [DEBUG] [Thread-1908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:21:14.599 [DEBUG] [Thread-1908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:21:14.599 [DEBUG] [Thread-1908] [transport.py] [_log()] Compression: none
2025-11-25T16:21:14.599 [DEBUG] [Thread-1908] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:21:14.657 [DEBUG] [Thread-1908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:21:14.658 [DEBUG] [Thread-1908] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:21:14.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:21:14.659 [DEBUG] [Thread-1908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:21:14.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:21:14.720 [DEBUG] [Thread-1908] [transport.py] [_log()] userauth is OK
2025-11-25T16:21:14.720 [DEBUG] [Thread-1908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:21:14.720 [DEBUG] [Thread-1908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:21:14.720 [DEBUG] [Thread-1908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:21:14.720 [DEBUG] [Thread-1908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:21:14.739 [INFO] [Thread-1908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:21:14.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:21:14.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:21:15.567 [DEBUG] [Thread-1908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:21:15.567 [DEBUG] [Thread-1908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:21:15.615 [DEBUG] [Thread-1908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:21:15.615 [DEBUG] [Thread-1908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:21:15.624 [DEBUG] [Thread-1908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:21:15.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:21:15.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:21:15.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:21:15.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:21:15.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:21:15.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:21:15.662 [DEBUG] [Thread-1908] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:21:28.981 [DEBUG] [Thread-1910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:21:44.047 [DEBUG] [Thread-1911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:21:45.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:21:45.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:21:45.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:21:46.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 21, 27), 38.82, 6.91, 0.0, 2.91, 27.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:21:46.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:21:27
2025-11-25T16:21:46.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:21:46.641 [DEBUG] [Thread-1912] [transport.py] [_log()] starting thread (client mode): 0x737e8160
2025-11-25T16:21:46.641 [DEBUG] [Thread-1912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:21:46.666 [DEBUG] [Thread-1912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:21:46.666 [INFO] [Thread-1912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:21:46.669 [DEBUG] [Thread-1912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:21:46.669 [DEBUG] [Thread-1912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:21:46.669 [DEBUG] [Thread-1912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:21:46.669 [DEBUG] [Thread-1912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:21:46.669 [DEBUG] [Thread-1912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] client lang: <none>
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] server lang: <none>
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] kex follows: False
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] Compression: none
2025-11-25T16:21:46.670 [DEBUG] [Thread-1912] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:21:46.688 [DEBUG] [Thread-1912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:21:46.688 [DEBUG] [Thread-1912] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:21:46.689 [DEBUG] [Thread-1912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:21:46.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:21:46.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:21:46.691 [DEBUG] [Thread-1912] [transport.py] [_log()] userauth is OK
2025-11-25T16:21:46.691 [DEBUG] [Thread-1912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:21:46.691 [DEBUG] [Thread-1912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:21:46.691 [DEBUG] [Thread-1912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:21:46.692 [DEBUG] [Thread-1912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:21:46.716 [INFO] [Thread-1912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:21:46.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:21:47.379 [DEBUG] [Thread-1912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:21:47.380 [DEBUG] [Thread-1912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:21:47.380 [DEBUG] [Thread-1912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:21:47.421 [DEBUG] [Thread-1912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:21:47.421 [DEBUG] [Thread-1912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:21:47.424 [DEBUG] [Thread-1912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:21:47.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:21:47.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:21:47.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:21:47.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:21:47.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:21:47.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:21:47.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:21:47.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:21:47.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:21:47.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.598017 -999.00  +27.30   3.34     11   -4.60 1 1 1 1 1   888    0 30.83 -20.92 ----- 4.5 3.3 221.0 3.9 33.2 -31.7 33.2 -31.1 34.7 -29.1 35.1 -30.8
2025-11-25T16:21:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:21:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:21:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.598017
2025-11-25T16:21:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:21:47.448 [DEBUG] [Thread-1912] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:21:47.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:21:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:21:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:21:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:21:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:21:27', tmtdew=38.82, humidity=6.91, cloud=0.0, wind=2.91, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:21:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:21:47.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:21:47.553 [DEBUG] [Thread-1915] [transport.py] [_log()] starting thread (client mode): 0x737e8f70
2025-11-25T16:21:47.553 [DEBUG] [Thread-1915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:21:47.568 [DEBUG] [Thread-1915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:21:47.568 [INFO] [Thread-1915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:21:47.576 [DEBUG] [Thread-1915] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:21:47.576 [DEBUG] [Thread-1915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:21:47.576 [DEBUG] [Thread-1915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:21:47.576 [DEBUG] [Thread-1915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:21:47.576 [DEBUG] [Thread-1915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:21:47.576 [DEBUG] [Thread-1915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:21:47.576 [DEBUG] [Thread-1915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:21:47.576 [DEBUG] [Thread-1915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] client lang: <none>
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] server lang: <none>
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] kex follows: False
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] Compression: none
2025-11-25T16:21:47.577 [DEBUG] [Thread-1915] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:21:47.640 [DEBUG] [Thread-1915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:21:47.640 [DEBUG] [Thread-1915] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:21:47.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:21:47.641 [DEBUG] [Thread-1915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:21:47.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:21:47.699 [DEBUG] [Thread-1915] [transport.py] [_log()] userauth is OK
2025-11-25T16:21:47.700 [DEBUG] [Thread-1915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:21:47.700 [DEBUG] [Thread-1915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:21:47.700 [DEBUG] [Thread-1915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:21:47.700 [DEBUG] [Thread-1915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:21:47.718 [INFO] [Thread-1915] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:21:47.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:21:47.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:21:48.590 [DEBUG] [Thread-1915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:21:48.591 [DEBUG] [Thread-1915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:21:48.638 [DEBUG] [Thread-1915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:21:48.638 [DEBUG] [Thread-1915] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:21:48.647 [DEBUG] [Thread-1915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:21:48.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:21:48.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:21:48.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:21:48.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:21:48.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:21:48.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:21:48.681 [DEBUG] [Thread-1915] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:21:59.087 [DEBUG] [Thread-1917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:22:09.264 [DEBUG] [Thread-1918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:22:14.149 [DEBUG] [Thread-1919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:22:18.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:22:18.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:22:18.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:22:19.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 21, 59), 38.82, 6.91, 0.0, 4.89, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:22:19.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:21:59
2025-11-25T16:22:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:22:19.613 [DEBUG] [Thread-1920] [transport.py] [_log()] starting thread (client mode): 0x761db610
2025-11-25T16:22:19.613 [DEBUG] [Thread-1920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:22:19.628 [DEBUG] [Thread-1920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:22:19.628 [INFO] [Thread-1920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] client lang: <none>
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] server lang: <none>
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] kex follows: False
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:22:19.631 [DEBUG] [Thread-1920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:22:19.632 [DEBUG] [Thread-1920] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:22:19.632 [DEBUG] [Thread-1920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:22:19.632 [DEBUG] [Thread-1920] [transport.py] [_log()] Compression: none
2025-11-25T16:22:19.632 [DEBUG] [Thread-1920] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:22:19.651 [DEBUG] [Thread-1920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:22:19.651 [DEBUG] [Thread-1920] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:22:19.652 [DEBUG] [Thread-1920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:22:19.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:22:19.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:22:19.654 [DEBUG] [Thread-1920] [transport.py] [_log()] userauth is OK
2025-11-25T16:22:19.655 [DEBUG] [Thread-1920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:22:19.655 [DEBUG] [Thread-1920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:22:19.655 [DEBUG] [Thread-1920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:22:19.655 [DEBUG] [Thread-1920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:22:19.690 [INFO] [Thread-1920] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:22:19.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:22:20.302 [DEBUG] [Thread-1920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:22:20.303 [DEBUG] [Thread-1920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:22:20.303 [DEBUG] [Thread-1920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:22:20.344 [DEBUG] [Thread-1920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:22:20.344 [DEBUG] [Thread-1920] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:22:20.347 [DEBUG] [Thread-1920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:22:20.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:22:20.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:22:20.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:22:20.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:22:20.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:22:20.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:22:20.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:22:20.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:22:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:22:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.598364 -999.00  +27.30   7.56     11   -4.80 1 1 1 1 1   888    0 30.90 -19.41 ----- 5.1 7.6 167.8 8.5 33.2 -31.9 33.2 -31.6 34.8 -29.7 35.2 -31.2
2025-11-25T16:22:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:22:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:22:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.598364
2025-11-25T16:22:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:22:20.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:22:20.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:22:20.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:22:20.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:22:20.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:21:59', tmtdew=38.82, humidity=6.91, cloud=0.0, wind=4.89, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:21:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:22:20.373 [DEBUG] [Thread-1920] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:22:20.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:22:20.484 [DEBUG] [Thread-1923] [transport.py] [_log()] starting thread (client mode): 0x761da590
2025-11-25T16:22:20.484 [DEBUG] [Thread-1923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:22:20.498 [DEBUG] [Thread-1923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:22:20.498 [INFO] [Thread-1923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:22:20.505 [DEBUG] [Thread-1923] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:22:20.505 [DEBUG] [Thread-1923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:22:20.506 [DEBUG] [Thread-1923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:22:20.506 [DEBUG] [Thread-1923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:22:20.506 [DEBUG] [Thread-1923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:22:20.506 [DEBUG] [Thread-1923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:22:20.506 [DEBUG] [Thread-1923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:22:20.506 [DEBUG] [Thread-1923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:22:20.506 [DEBUG] [Thread-1923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:22:20.506 [DEBUG] [Thread-1923] [transport.py] [_log()] client lang: <none>
2025-11-25T16:22:20.507 [DEBUG] [Thread-1923] [transport.py] [_log()] server lang: <none>
2025-11-25T16:22:20.507 [DEBUG] [Thread-1923] [transport.py] [_log()] kex follows: False
2025-11-25T16:22:20.507 [DEBUG] [Thread-1923] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:22:20.507 [DEBUG] [Thread-1923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:22:20.507 [DEBUG] [Thread-1923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:22:20.507 [DEBUG] [Thread-1923] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:22:20.507 [DEBUG] [Thread-1923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:22:20.507 [DEBUG] [Thread-1923] [transport.py] [_log()] Compression: none
2025-11-25T16:22:20.508 [DEBUG] [Thread-1923] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:22:20.566 [DEBUG] [Thread-1923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:22:20.567 [DEBUG] [Thread-1923] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:22:20.567 [DEBUG] [Thread-1923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:22:20.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:22:20.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:22:20.622 [DEBUG] [Thread-1923] [transport.py] [_log()] userauth is OK
2025-11-25T16:22:20.623 [DEBUG] [Thread-1923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:22:20.623 [DEBUG] [Thread-1923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:22:20.623 [DEBUG] [Thread-1923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:22:20.623 [DEBUG] [Thread-1923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:22:20.639 [INFO] [Thread-1923] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:22:20.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:22:20.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:22:21.496 [DEBUG] [Thread-1923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:22:21.496 [DEBUG] [Thread-1923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:22:21.544 [DEBUG] [Thread-1923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:22:21.544 [DEBUG] [Thread-1923] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:22:21.553 [DEBUG] [Thread-1923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:22:21.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:22:21.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:22:21.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:22:21.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:22:21.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:22:21.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:22:21.589 [DEBUG] [Thread-1923] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:22:29.196 [DEBUG] [Thread-1925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:22:44.257 [DEBUG] [Thread-1926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:22:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:22:51.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:22:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:22:52.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 22, 31), 38.75, 6.92, 0.0, 3.8, 27.09, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:22:52.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:22:31
2025-11-25T16:22:52.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:22:52.541 [DEBUG] [Thread-1927] [transport.py] [_log()] starting thread (client mode): 0x73783430
2025-11-25T16:22:52.541 [DEBUG] [Thread-1927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:22:52.561 [DEBUG] [Thread-1927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:22:52.562 [INFO] [Thread-1927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:22:52.565 [DEBUG] [Thread-1927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:22:52.565 [DEBUG] [Thread-1927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:22:52.565 [DEBUG] [Thread-1927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] client lang: <none>
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] server lang: <none>
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] kex follows: False
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:22:52.566 [DEBUG] [Thread-1927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:22:52.567 [DEBUG] [Thread-1927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:22:52.567 [DEBUG] [Thread-1927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:22:52.567 [DEBUG] [Thread-1927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:22:52.567 [DEBUG] [Thread-1927] [transport.py] [_log()] Compression: none
2025-11-25T16:22:52.567 [DEBUG] [Thread-1927] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:22:52.586 [DEBUG] [Thread-1927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:22:52.586 [DEBUG] [Thread-1927] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:22:52.587 [DEBUG] [Thread-1927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:22:52.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:22:52.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:22:52.589 [DEBUG] [Thread-1927] [transport.py] [_log()] userauth is OK
2025-11-25T16:22:52.589 [DEBUG] [Thread-1927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:22:52.589 [DEBUG] [Thread-1927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:22:52.589 [DEBUG] [Thread-1927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:22:52.589 [DEBUG] [Thread-1927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:22:52.613 [INFO] [Thread-1927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:22:52.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:22:53.252 [DEBUG] [Thread-1927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:22:53.252 [DEBUG] [Thread-1927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:22:53.253 [DEBUG] [Thread-1927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:22:53.293 [DEBUG] [Thread-1927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:22:53.293 [DEBUG] [Thread-1927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:22:53.307 [DEBUG] [Thread-1927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:22:53.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:22:53.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:22:53.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:22:53.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:22:53.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:22:53.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:22:53.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:22:53.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:22:53.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:22:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.598712 -999.00  +27.30   1.59     11   -4.80 1 1 1 1 1   888    0 31.03 -18.56 ----- 1.8 1.6 175.0 6.0 33.3 -31.7 33.2 -31.5 34.9 -29.6 35.3 -30.9
2025-11-25T16:22:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:22:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:22:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.598712
2025-11-25T16:22:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:22:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:22:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:22:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:22:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:22:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:22:31', tmtdew=38.75, humidity=6.92, cloud=0.0, wind=3.8, temperature=27.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:22:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:22:53.328 [DEBUG] [Thread-1927] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:22:53.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:22:53.432 [DEBUG] [Thread-1930] [transport.py] [_log()] starting thread (client mode): 0x737e99c0
2025-11-25T16:22:53.432 [DEBUG] [Thread-1930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:22:53.448 [DEBUG] [Thread-1930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:22:53.448 [INFO] [Thread-1930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:22:53.455 [DEBUG] [Thread-1930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:22:53.455 [DEBUG] [Thread-1930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:22:53.455 [DEBUG] [Thread-1930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] client lang: <none>
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] server lang: <none>
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] kex follows: False
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] Compression: none
2025-11-25T16:22:53.456 [DEBUG] [Thread-1930] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:22:53.519 [DEBUG] [Thread-1930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:22:53.519 [DEBUG] [Thread-1930] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:22:53.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:22:53.521 [DEBUG] [Thread-1930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:22:53.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:22:53.576 [DEBUG] [Thread-1930] [transport.py] [_log()] userauth is OK
2025-11-25T16:22:53.576 [DEBUG] [Thread-1930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:22:53.576 [DEBUG] [Thread-1930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:22:53.576 [DEBUG] [Thread-1930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:22:53.577 [DEBUG] [Thread-1930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:22:53.596 [INFO] [Thread-1930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:22:53.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:22:53.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:22:54.438 [DEBUG] [Thread-1930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:22:54.438 [DEBUG] [Thread-1930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:22:54.487 [DEBUG] [Thread-1930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:22:54.487 [DEBUG] [Thread-1930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:22:54.497 [DEBUG] [Thread-1930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:22:54.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:22:54.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:22:54.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:22:54.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:22:54.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:22:54.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:22:54.534 [DEBUG] [Thread-1930] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:22:59.306 [DEBUG] [Thread-1932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:23:09.767 [DEBUG] [Thread-1933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:23:14.370 [DEBUG] [Thread-1934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:23:24.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:23:24.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:23: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
2025-11-25T16:23:25.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 23, 3), 38.55, 7.04, 0.0, 3.18, 27.09, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:23:25.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:23:03
2025-11-25T16:23:25.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:23:25.509 [DEBUG] [Thread-1935] [transport.py] [_log()] starting thread (client mode): 0x73780e20
2025-11-25T16:23:25.509 [DEBUG] [Thread-1935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:23:25.531 [DEBUG] [Thread-1935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:23:25.531 [INFO] [Thread-1935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] client lang: <none>
2025-11-25T16:23:25.534 [DEBUG] [Thread-1935] [transport.py] [_log()] server lang: <none>
2025-11-25T16:23:25.535 [DEBUG] [Thread-1935] [transport.py] [_log()] kex follows: False
2025-11-25T16:23:25.535 [DEBUG] [Thread-1935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:23:25.535 [DEBUG] [Thread-1935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:23:25.535 [DEBUG] [Thread-1935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:23:25.535 [DEBUG] [Thread-1935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:23:25.535 [DEBUG] [Thread-1935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:23:25.535 [DEBUG] [Thread-1935] [transport.py] [_log()] Compression: none
2025-11-25T16:23:25.535 [DEBUG] [Thread-1935] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:23:25.554 [DEBUG] [Thread-1935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:23:25.555 [DEBUG] [Thread-1935] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:23:25.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:23:25.556 [DEBUG] [Thread-1935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:23:25.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:23:25.558 [DEBUG] [Thread-1935] [transport.py] [_log()] userauth is OK
2025-11-25T16:23:25.558 [DEBUG] [Thread-1935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:23:25.558 [DEBUG] [Thread-1935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:23:25.558 [DEBUG] [Thread-1935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:23:25.558 [DEBUG] [Thread-1935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:23:25.576 [INFO] [Thread-1935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:23:25.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:23:26.197 [DEBUG] [Thread-1935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:23:26.197 [DEBUG] [Thread-1935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:23:26.197 [DEBUG] [Thread-1935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:23:26.237 [DEBUG] [Thread-1935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:23:26.238 [DEBUG] [Thread-1935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:23:26.241 [DEBUG] [Thread-1935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:23:26.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:23:26.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:23:26.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:23:26.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:23:26.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:23:26.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:23:26.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:23:26.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:23:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:23:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.599059 -999.00  +27.50   1.79     11   -4.70 1 1 1 1 1   888    0 31.28 -17.09 ----- 2.1 1.8 158.4 3.4 33.4 -31.6 33.4 -30.7 35.0 -29.6 35.5 -30.9
2025-11-25T16:23:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:23:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:23:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.599059
2025-11-25T16:23:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:23:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:23:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:23:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:23:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:23:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:23:03', tmtdew=38.55, humidity=7.04, cloud=0.0, wind=3.18, temperature=27.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:22:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:23:26.267 [DEBUG] [Thread-1935] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:23:26.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:23:26.370 [DEBUG] [Thread-1938] [transport.py] [_log()] starting thread (client mode): 0x737825f0
2025-11-25T16:23:26.370 [DEBUG] [Thread-1938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:23:26.384 [DEBUG] [Thread-1938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:23:26.384 [INFO] [Thread-1938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:23:26.392 [DEBUG] [Thread-1938] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:23:26.392 [DEBUG] [Thread-1938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:23:26.392 [DEBUG] [Thread-1938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:23:26.392 [DEBUG] [Thread-1938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:23:26.392 [DEBUG] [Thread-1938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:23:26.392 [DEBUG] [Thread-1938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:23:26.392 [DEBUG] [Thread-1938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:23:26.392 [DEBUG] [Thread-1938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:23:26.392 [DEBUG] [Thread-1938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] client lang: <none>
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] server lang: <none>
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] kex follows: False
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] Compression: none
2025-11-25T16:23:26.393 [DEBUG] [Thread-1938] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:23:26.450 [DEBUG] [Thread-1938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:23:26.451 [DEBUG] [Thread-1938] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:23:26.451 [DEBUG] [Thread-1938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:23:26.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:23:26.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:23:26.507 [DEBUG] [Thread-1938] [transport.py] [_log()] userauth is OK
2025-11-25T16:23:26.507 [DEBUG] [Thread-1938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:23:26.507 [DEBUG] [Thread-1938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:23:26.508 [DEBUG] [Thread-1938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:23:26.508 [DEBUG] [Thread-1938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:23:26.527 [INFO] [Thread-1938] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:23:26.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:23:26.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:23:27.407 [DEBUG] [Thread-1938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:23:27.408 [DEBUG] [Thread-1938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:23:27.456 [DEBUG] [Thread-1938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:23:27.456 [DEBUG] [Thread-1938] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:23:27.465 [DEBUG] [Thread-1938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:23:27.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:23:27.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:23:27.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:23:27.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:23:27.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:23:27.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:23:27.502 [DEBUG] [Thread-1938] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:23:29.412 [DEBUG] [Thread-1940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:23:44.482 [DEBUG] [Thread-1941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:23:57.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:23:57.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:23:57.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:23:58.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 23, 35), 38.92, 7.01, 0.0, 4.36, 27.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:23:58.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:23:35
2025-11-25T16:23:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:23:58.465 [DEBUG] [Thread-1942] [transport.py] [_log()] starting thread (client mode): 0x7378dab0
2025-11-25T16:23:58.465 [DEBUG] [Thread-1942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:23:58.484 [DEBUG] [Thread-1942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:23:58.484 [INFO] [Thread-1942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:23:58.487 [DEBUG] [Thread-1942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:23:58.487 [DEBUG] [Thread-1942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] client lang: <none>
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] server lang: <none>
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] kex follows: False
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] Compression: none
2025-11-25T16:23:58.488 [DEBUG] [Thread-1942] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:23:58.506 [DEBUG] [Thread-1942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:23:58.506 [DEBUG] [Thread-1942] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:23:58.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:23:58.507 [DEBUG] [Thread-1942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:23:58.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:23:58.509 [DEBUG] [Thread-1942] [transport.py] [_log()] userauth is OK
2025-11-25T16:23:58.509 [DEBUG] [Thread-1942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:23:58.510 [DEBUG] [Thread-1942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:23:58.510 [DEBUG] [Thread-1942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:23:58.510 [DEBUG] [Thread-1942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:23:58.533 [INFO] [Thread-1942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:23:58.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:23:59.204 [DEBUG] [Thread-1942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:23:59.205 [DEBUG] [Thread-1942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:23:59.205 [DEBUG] [Thread-1942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:23:59.246 [DEBUG] [Thread-1942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:23:59.246 [DEBUG] [Thread-1942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:23:59.250 [DEBUG] [Thread-1942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:23:59.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:23:59.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:23:59.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:23:59.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:23:59.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:23:59.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:23:59.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:23:59.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:23:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:23:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.599406 -999.00  +27.80   1.43     11   -4.40 1 1 1 1 1   888    0 31.27 -13.84 ----- 2.3 1.4 193.4 4.7 33.5 -31.9 33.4 -31.0 35.1 -29.6 35.6 -30.8
2025-11-25T16:23:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:23:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:23:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.599406
2025-11-25T16:23:59.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:23:59.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:23:59.279 [DEBUG] [Thread-1942] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:23:59.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:23:59.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:23:59.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:23:59.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:23:35', tmtdew=38.92, humidity=7.01, cloud=0.0, wind=4.36, temperature=27.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:23:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:23:59.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:23:59.384 [DEBUG] [Thread-1945] [transport.py] [_log()] starting thread (client mode): 0x737eb670
2025-11-25T16:23:59.384 [DEBUG] [Thread-1945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:23:59.399 [DEBUG] [Thread-1945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:23:59.399 [INFO] [Thread-1945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:23:59.407 [DEBUG] [Thread-1945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:23:59.407 [DEBUG] [Thread-1945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:23:59.407 [DEBUG] [Thread-1945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:23:59.407 [DEBUG] [Thread-1945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:23:59.407 [DEBUG] [Thread-1945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:23:59.407 [DEBUG] [Thread-1945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:23:59.407 [DEBUG] [Thread-1945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] client lang: <none>
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] server lang: <none>
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] kex follows: False
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] Compression: none
2025-11-25T16:23:59.408 [DEBUG] [Thread-1945] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:23:59.466 [DEBUG] [Thread-1945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:23:59.467 [DEBUG] [Thread-1945] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:23:59.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:23:59.468 [DEBUG] [Thread-1945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:23:59.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:23:59.522 [DEBUG] [Thread-1945] [transport.py] [_log()] userauth is OK
2025-11-25T16:23:59.523 [DEBUG] [Thread-1945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:23:59.523 [DEBUG] [Thread-1945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:23:59.523 [DEBUG] [Thread-1945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:23:59.523 [DEBUG] [Thread-1945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:23:59.526 [DEBUG] [Thread-1947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:23:59.546 [INFO] [Thread-1945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:23:59.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:23:59.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:24:00.371 [DEBUG] [Thread-1945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:24:00.372 [DEBUG] [Thread-1945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:24:00.420 [DEBUG] [Thread-1945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:24:00.420 [DEBUG] [Thread-1945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:24:00.429 [DEBUG] [Thread-1945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:24:00.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:24:00.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:24:00.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:24:00.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:24:00.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:24:00.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:24:00.464 [DEBUG] [Thread-1945] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:24:10.262 [DEBUG] [Thread-1948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:24:14.594 [DEBUG] [Thread-1949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:24:29.640 [DEBUG] [Thread-1950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:24:30.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:24:30.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:24:30.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:24:31.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 24, 7), 38.91, 7.01, 0.0, 6.83, 27.24, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:24:31.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:24:07
2025-11-25T16:24:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:24:31.452 [DEBUG] [Thread-1951] [transport.py] [_log()] starting thread (client mode): 0x737ea590
2025-11-25T16:24:31.452 [DEBUG] [Thread-1951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:24:31.472 [DEBUG] [Thread-1951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:24:31.473 [INFO] [Thread-1951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] client lang: <none>
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] server lang: <none>
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] kex follows: False
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] Compression: none
2025-11-25T16:24:31.476 [DEBUG] [Thread-1951] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:24:31.491 [DEBUG] [Thread-1951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:24:31.491 [DEBUG] [Thread-1951] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:24:31.491 [DEBUG] [Thread-1951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:24:31.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:24:31.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:24:31.492 [DEBUG] [Thread-1951] [transport.py] [_log()] userauth is OK
2025-11-25T16:24:31.492 [DEBUG] [Thread-1951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:24:31.492 [DEBUG] [Thread-1951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:24:31.492 [DEBUG] [Thread-1951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:24:31.492 [DEBUG] [Thread-1951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:24:31.501 [INFO] [Thread-1951] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:24:31.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:24:32.110 [DEBUG] [Thread-1951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:24:32.110 [DEBUG] [Thread-1951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:24:32.110 [DEBUG] [Thread-1951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:24:32.151 [DEBUG] [Thread-1951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:24:32.151 [DEBUG] [Thread-1951] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:24:32.153 [DEBUG] [Thread-1951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:24:32.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:24:32.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:24:32.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:24:32.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:24:32.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:24:32.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:24:32.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:24:32.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:24:32.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:24:32.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.599753 -999.00  +27.90   2.56     11   -4.30 1 1 1 1 1   888    0 31.34 -10.67 ----- 5.5 2.6 184.1 6.0 33.5 -32.2 33.5 -31.3 35.2 -29.6 35.6 -31.5
2025-11-25T16:24:32.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:24:32.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:24:32.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.599753
2025-11-25T16:24:32.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:24:32.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:24:32.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:24:32.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:24:32.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:24:32.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:24:07', tmtdew=38.91, humidity=7.01, cloud=0.0, wind=6.83, temperature=27.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:23:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:24:32.173 [DEBUG] [Thread-1951] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:24:32.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:24:32.265 [DEBUG] [Thread-1954] [transport.py] [_log()] starting thread (client mode): 0x737eafe0
2025-11-25T16:24:32.265 [DEBUG] [Thread-1954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:24:32.280 [DEBUG] [Thread-1954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:24:32.280 [INFO] [Thread-1954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:24:32.287 [DEBUG] [Thread-1954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:24:32.287 [DEBUG] [Thread-1954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] client lang: <none>
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] server lang: <none>
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] kex follows: False
2025-11-25T16:24:32.288 [DEBUG] [Thread-1954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:24:32.289 [DEBUG] [Thread-1954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:24:32.289 [DEBUG] [Thread-1954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:24:32.289 [DEBUG] [Thread-1954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:24:32.289 [DEBUG] [Thread-1954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:24:32.289 [DEBUG] [Thread-1954] [transport.py] [_log()] Compression: none
2025-11-25T16:24:32.289 [DEBUG] [Thread-1954] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:24:32.346 [DEBUG] [Thread-1954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:24:32.346 [DEBUG] [Thread-1954] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:24:32.347 [DEBUG] [Thread-1954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:24:32.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:24:32.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:24:32.402 [DEBUG] [Thread-1954] [transport.py] [_log()] userauth is OK
2025-11-25T16:24:32.402 [DEBUG] [Thread-1954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:24:32.402 [DEBUG] [Thread-1954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:24:32.402 [DEBUG] [Thread-1954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:24:32.403 [DEBUG] [Thread-1954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:24:32.421 [INFO] [Thread-1954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:24:32.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:24:32.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:24:33.313 [DEBUG] [Thread-1954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:24:33.314 [DEBUG] [Thread-1954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:24:33.362 [DEBUG] [Thread-1954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:24:33.362 [DEBUG] [Thread-1954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:24:33.371 [DEBUG] [Thread-1954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:24:33.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:24:33.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:24:33.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:24:33.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:24:33.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:24:33.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:24:33.411 [DEBUG] [Thread-1954] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:24:44.680 [DEBUG] [Thread-1956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:24:59.753 [DEBUG] [Thread-1957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:25:03.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:25:03.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:25:03.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:25:04.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 24, 39), 38.8, 7.02, 0.0, 6.6, 27.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:25:04.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:24:39
2025-11-25T16:25:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:25:04.395 [DEBUG] [Thread-1958] [transport.py] [_log()] starting thread (client mode): 0x73783700
2025-11-25T16:25:04.395 [DEBUG] [Thread-1958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:25:04.413 [DEBUG] [Thread-1958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:25:04.413 [INFO] [Thread-1958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] client lang: <none>
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] server lang: <none>
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] kex follows: False
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:25:04.417 [DEBUG] [Thread-1958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:25:04.418 [DEBUG] [Thread-1958] [transport.py] [_log()] Compression: none
2025-11-25T16:25:04.418 [DEBUG] [Thread-1958] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:25:04.433 [DEBUG] [Thread-1958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:25:04.433 [DEBUG] [Thread-1958] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:25:04.433 [DEBUG] [Thread-1958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:25:04.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:25:04.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:25:04.434 [DEBUG] [Thread-1958] [transport.py] [_log()] userauth is OK
2025-11-25T16:25:04.434 [DEBUG] [Thread-1958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:25:04.434 [DEBUG] [Thread-1958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:25:04.434 [DEBUG] [Thread-1958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:25:04.434 [DEBUG] [Thread-1958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:25:04.443 [INFO] [Thread-1958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:25:04.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:25:05.560 [DEBUG] [Thread-1958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:25:05.560 [DEBUG] [Thread-1958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:25:05.560 [DEBUG] [Thread-1958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:25:05.601 [DEBUG] [Thread-1958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:25:05.601 [DEBUG] [Thread-1958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:25:05.603 [DEBUG] [Thread-1958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:25:05.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:25:05.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:25:05.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:25:05.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:25:05.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:25:05.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:25:05.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:25:05.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:25:05.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:25:05.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.600101 -999.00  +27.90   4.42     11   -4.40 1 1 1 1 1   888    0 31.15 -6.20 ----- 0.8 4.4 309.8 7.0 33.5 -32.3 33.5 -31.2 35.2 -30.7 35.7 -31.0
2025-11-25T16:25:05.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:25:05.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:25:05.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.600101
2025-11-25T16:25:05.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:25:05.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:25:05.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:25:05.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:25:05.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:25:05.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:24:39', tmtdew=38.8, humidity=7.02, cloud=0.0, wind=6.6, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:24:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:25:05.679 [DEBUG] [Thread-1958] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:25:05.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:25:05.775 [DEBUG] [Thread-1961] [transport.py] [_log()] starting thread (client mode): 0x7378ca00
2025-11-25T16:25:05.775 [DEBUG] [Thread-1961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:25:05.791 [DEBUG] [Thread-1961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:25:05.791 [INFO] [Thread-1961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:25:05.801 [DEBUG] [Thread-1961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] client lang: <none>
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] server lang: <none>
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] kex follows: False
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] Compression: none
2025-11-25T16:25:05.802 [DEBUG] [Thread-1961] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:25:05.856 [DEBUG] [Thread-1961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:25:05.856 [DEBUG] [Thread-1961] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:25:05.856 [DEBUG] [Thread-1961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:25:05.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:25:05.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:25:05.917 [DEBUG] [Thread-1961] [transport.py] [_log()] userauth is OK
2025-11-25T16:25:05.917 [DEBUG] [Thread-1961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:25:05.917 [DEBUG] [Thread-1961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:25:05.917 [DEBUG] [Thread-1961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:25:05.917 [DEBUG] [Thread-1961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:25:05.935 [INFO] [Thread-1961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:25:05.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:25:05.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:25:06.825 [DEBUG] [Thread-1961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:25:06.825 [DEBUG] [Thread-1961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:25:06.873 [DEBUG] [Thread-1961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:25:06.873 [DEBUG] [Thread-1961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:25:06.882 [DEBUG] [Thread-1961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:25:06.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:25:06.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:25:06.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:25:06.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:25:06.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:25:06.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:25:06.914 [DEBUG] [Thread-1961] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:25:10.759 [DEBUG] [Thread-1963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:25:14.794 [DEBUG] [Thread-1964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:25:29.861 [DEBUG] [Thread-1965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:25:36.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:25:36.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:25:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:25:37.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 25, 11), 38.86, 6.99, 0.0, 7.15, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:25:37.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:25:11
2025-11-25T16:25:37.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:25:37.846 [DEBUG] [Thread-1966] [transport.py] [_log()] starting thread (client mode): 0x7378efe0
2025-11-25T16:25:37.846 [DEBUG] [Thread-1966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:25:37.861 [DEBUG] [Thread-1966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:25:37.861 [INFO] [Thread-1966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] client lang: <none>
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] server lang: <none>
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] kex follows: False
2025-11-25T16:25:37.864 [DEBUG] [Thread-1966] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:25:37.865 [DEBUG] [Thread-1966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:25:37.865 [DEBUG] [Thread-1966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:25:37.865 [DEBUG] [Thread-1966] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:25:37.865 [DEBUG] [Thread-1966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:25:37.865 [DEBUG] [Thread-1966] [transport.py] [_log()] Compression: none
2025-11-25T16:25:37.865 [DEBUG] [Thread-1966] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:25:37.884 [DEBUG] [Thread-1966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:25:37.884 [DEBUG] [Thread-1966] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:25:37.885 [DEBUG] [Thread-1966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:25:37.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:25:37.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:25:37.928 [DEBUG] [Thread-1966] [transport.py] [_log()] userauth is OK
2025-11-25T16:25:37.928 [DEBUG] [Thread-1966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:25:37.928 [DEBUG] [Thread-1966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:25:37.928 [DEBUG] [Thread-1966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:25:37.928 [DEBUG] [Thread-1966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:25:37.959 [INFO] [Thread-1966] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:25:37.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:25:38.603 [DEBUG] [Thread-1966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:25:38.603 [DEBUG] [Thread-1966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:25:38.603 [DEBUG] [Thread-1966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:25:38.644 [DEBUG] [Thread-1966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:25:38.644 [DEBUG] [Thread-1966] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:25:38.647 [DEBUG] [Thread-1966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:25:38.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:25:38.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:25:38.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:25:38.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:25:38.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:25:38.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:25:38.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:25:38.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:25:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:25:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.600795 -999.00  +27.80   2.67     11   -4.60 1 1 1 1 1   888    0 31.83 1.72 ----- 6.9 2.7 93.8 10.3 33.7 -32.6 33.6 -31.9 35.4 -29.8 35.8 -31.2
2025-11-25T16:25:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:25:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:25:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.600795
2025-11-25T16:25:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:25:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:25:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:25:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:25:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:25:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:25:11', tmtdew=38.86, humidity=6.99, cloud=0.0, wind=7.15, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:25:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:25:38.672 [DEBUG] [Thread-1966] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:25:38.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:25:38.776 [DEBUG] [Thread-1969] [transport.py] [_log()] starting thread (client mode): 0x7378c760
2025-11-25T16:25:38.777 [DEBUG] [Thread-1969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:25:38.794 [DEBUG] [Thread-1969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:25:38.795 [INFO] [Thread-1969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:25:38.802 [DEBUG] [Thread-1969] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:25:38.802 [DEBUG] [Thread-1969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:25:38.802 [DEBUG] [Thread-1969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] client lang: <none>
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] server lang: <none>
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] kex follows: False
2025-11-25T16:25:38.803 [DEBUG] [Thread-1969] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:25:38.804 [DEBUG] [Thread-1969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:25:38.804 [DEBUG] [Thread-1969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:25:38.804 [DEBUG] [Thread-1969] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:25:38.804 [DEBUG] [Thread-1969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:25:38.804 [DEBUG] [Thread-1969] [transport.py] [_log()] Compression: none
2025-11-25T16:25:38.804 [DEBUG] [Thread-1969] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:25:38.862 [DEBUG] [Thread-1969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:25:38.862 [DEBUG] [Thread-1969] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:25:38.871 [DEBUG] [Thread-1969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:25:38.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:25:38.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:25:38.918 [DEBUG] [Thread-1969] [transport.py] [_log()] userauth is OK
2025-11-25T16:25:38.918 [DEBUG] [Thread-1969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:25:38.918 [DEBUG] [Thread-1969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:25:38.918 [DEBUG] [Thread-1969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:25:38.918 [DEBUG] [Thread-1969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:25:38.937 [INFO] [Thread-1969] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:25:38.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:25:38.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:25:39.835 [DEBUG] [Thread-1969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:25:39.836 [DEBUG] [Thread-1969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:25:39.884 [DEBUG] [Thread-1969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:25:39.884 [DEBUG] [Thread-1969] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:25:39.893 [DEBUG] [Thread-1969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:25:39.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:25:39.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:25:39.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:25:39.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:25:39.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:25:39.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:25:39.927 [DEBUG] [Thread-1969] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:25:44.902 [DEBUG] [Thread-1971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:25:59.955 [DEBUG] [Thread-1972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:26:09.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:26:09.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:26:09.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:26:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 25, 43), 39.05, 6.87, 0.0, 6.39, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:26:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:25:43
2025-11-25T16:26:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:26:10.898 [DEBUG] [Thread-1973] [transport.py] [_log()] starting thread (client mode): 0x7378d600
2025-11-25T16:26:10.898 [DEBUG] [Thread-1973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:26:10.918 [DEBUG] [Thread-1973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:26:10.919 [INFO] [Thread-1973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:26:10.921 [DEBUG] [Thread-1973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:26:10.922 [DEBUG] [Thread-1973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:26:10.922 [DEBUG] [Thread-1973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:26:10.922 [DEBUG] [Thread-1973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:26:10.922 [DEBUG] [Thread-1973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:26:10.922 [DEBUG] [Thread-1973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:26:10.922 [DEBUG] [Thread-1973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:26:10.922 [DEBUG] [Thread-1973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:26:10.923 [DEBUG] [Thread-1973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:26:10.923 [DEBUG] [Thread-1973] [transport.py] [_log()] client lang: <none>
2025-11-25T16:26:10.923 [DEBUG] [Thread-1973] [transport.py] [_log()] server lang: <none>
2025-11-25T16:26:10.923 [DEBUG] [Thread-1973] [transport.py] [_log()] kex follows: False
2025-11-25T16:26:10.923 [DEBUG] [Thread-1973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:26:10.923 [DEBUG] [Thread-1973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:26:10.923 [DEBUG] [Thread-1973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:26:10.923 [DEBUG] [Thread-1973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:26:10.924 [DEBUG] [Thread-1973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:26:10.924 [DEBUG] [Thread-1973] [transport.py] [_log()] Compression: none
2025-11-25T16:26:10.924 [DEBUG] [Thread-1973] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:26:10.942 [DEBUG] [Thread-1973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:26:10.943 [DEBUG] [Thread-1973] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:26:10.944 [DEBUG] [Thread-1973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:26:10.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:26:10.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:26:10.987 [DEBUG] [Thread-1973] [transport.py] [_log()] userauth is OK
2025-11-25T16:26:10.987 [DEBUG] [Thread-1973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:26:10.987 [DEBUG] [Thread-1973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:26:10.987 [DEBUG] [Thread-1973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:26:10.987 [DEBUG] [Thread-1973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:26:11.002 [INFO] [Thread-1973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:26:11.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:26:11.274 [DEBUG] [Thread-1975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:26:11.640 [DEBUG] [Thread-1973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:26:11.641 [DEBUG] [Thread-1973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:26:11.641 [DEBUG] [Thread-1973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:26:11.681 [DEBUG] [Thread-1973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:26:11.682 [DEBUG] [Thread-1973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:26:11.685 [DEBUG] [Thread-1973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:26:11.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:26:11.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:26:11.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:26:11.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:26:11.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:26:11.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:26:11.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:26:11.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:26:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:26:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.601142 -999.00  +27.90   6.25     11   -4.50 1 1 1 1 1   888    0 31.95 6.24 ----- 6.4 6.2 123.8 13.2 33.6 -32.2 33.7 -32.4 35.4 -30.4 35.9 -32.0
2025-11-25T16:26:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:26:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:26:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.601142
2025-11-25T16:26:11.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:26:11.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:26:11.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:26:11.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:26:11.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:26:11.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:25:43', tmtdew=39.05, humidity=6.87, cloud=0.0, wind=6.39, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:25:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:26:11.709 [DEBUG] [Thread-1973] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:26:11.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:26:11.824 [DEBUG] [Thread-1977] [transport.py] [_log()] starting thread (client mode): 0x73781ff0
2025-11-25T16:26:11.824 [DEBUG] [Thread-1977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:26:11.840 [DEBUG] [Thread-1977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:26:11.840 [INFO] [Thread-1977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:26:11.847 [DEBUG] [Thread-1977] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] client lang: <none>
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] server lang: <none>
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] kex follows: False
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:26:11.848 [DEBUG] [Thread-1977] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:26:11.849 [DEBUG] [Thread-1977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:26:11.849 [DEBUG] [Thread-1977] [transport.py] [_log()] Compression: none
2025-11-25T16:26:11.849 [DEBUG] [Thread-1977] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:26:11.905 [DEBUG] [Thread-1977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:26:11.905 [DEBUG] [Thread-1977] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:26:11.906 [DEBUG] [Thread-1977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:26:11.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:26:11.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:26:11.961 [DEBUG] [Thread-1977] [transport.py] [_log()] userauth is OK
2025-11-25T16:26:11.961 [DEBUG] [Thread-1977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:26:11.961 [DEBUG] [Thread-1977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:26:11.961 [DEBUG] [Thread-1977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:26:11.962 [DEBUG] [Thread-1977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:26:11.980 [INFO] [Thread-1977] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:26:11.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:26:11.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:26:12.827 [DEBUG] [Thread-1977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:26:12.827 [DEBUG] [Thread-1977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:26:12.875 [DEBUG] [Thread-1977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:26:12.875 [DEBUG] [Thread-1977] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:26:12.885 [DEBUG] [Thread-1977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:26:12.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:26:12.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:26:12.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:26:12.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:26:12.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:26:12.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:26:12.921 [DEBUG] [Thread-1977] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:26:14.999 [DEBUG] [Thread-1979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:26:30.074 [DEBUG] [Thread-1980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:26:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:26:42.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:26:42.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:26:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 26, 15), 38.94, 6.94, 0.0, 6.87, 27.09, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:26:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:26:15
2025-11-25T16:26:43.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:26:43.880 [DEBUG] [Thread-1981] [transport.py] [_log()] starting thread (client mode): 0x761dba60
2025-11-25T16:26:43.880 [DEBUG] [Thread-1981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:26:43.896 [DEBUG] [Thread-1981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:26:43.897 [INFO] [Thread-1981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] client lang: <none>
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] server lang: <none>
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] kex follows: False
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] Compression: none
2025-11-25T16:26:43.900 [DEBUG] [Thread-1981] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:26:43.915 [DEBUG] [Thread-1981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:26:43.915 [DEBUG] [Thread-1981] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:26:43.916 [DEBUG] [Thread-1981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:26:43.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:26:43.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:26:43.916 [DEBUG] [Thread-1981] [transport.py] [_log()] userauth is OK
2025-11-25T16:26:43.916 [DEBUG] [Thread-1981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:26:43.916 [DEBUG] [Thread-1981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:26:43.917 [DEBUG] [Thread-1981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:26:43.917 [DEBUG] [Thread-1981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:26:43.943 [INFO] [Thread-1981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:26:43.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:26:44.624 [DEBUG] [Thread-1981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:26:44.625 [DEBUG] [Thread-1981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:26:44.625 [DEBUG] [Thread-1981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:26:44.666 [DEBUG] [Thread-1981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:26:44.666 [DEBUG] [Thread-1981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:26:44.669 [DEBUG] [Thread-1981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:26:44.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:26:44.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:26:44.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:26:44.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:26:44.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:26:44.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:26:44.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:26:44.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:26:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:26:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.601489 -999.00  +27.70   4.86     11   -4.50 1 1 1 1 1   888    0 31.71 9.48 ----- 4.5 4.9 76.9 9.2 33.6 -32.8 33.8 -31.7 35.4 -31.2 36.0 -32.2
2025-11-25T16:26:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:26:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:26:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.601489
2025-11-25T16:26:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:26:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:26:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:26:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:26:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:26:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:26:15', tmtdew=38.94, humidity=6.94, cloud=0.0, wind=6.87, temperature=27.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:26:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:26:44.699 [DEBUG] [Thread-1981] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:26:44.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:26:44.803 [DEBUG] [Thread-1984] [transport.py] [_log()] starting thread (client mode): 0x737e9a80
2025-11-25T16:26:44.804 [DEBUG] [Thread-1984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:26:44.818 [DEBUG] [Thread-1984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:26:44.818 [INFO] [Thread-1984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:26:44.826 [DEBUG] [Thread-1984] [transport.py] [_log()] client lang: <none>
2025-11-25T16:26:44.827 [DEBUG] [Thread-1984] [transport.py] [_log()] server lang: <none>
2025-11-25T16:26:44.827 [DEBUG] [Thread-1984] [transport.py] [_log()] kex follows: False
2025-11-25T16:26:44.827 [DEBUG] [Thread-1984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:26:44.827 [DEBUG] [Thread-1984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:26:44.827 [DEBUG] [Thread-1984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:26:44.827 [DEBUG] [Thread-1984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:26:44.827 [DEBUG] [Thread-1984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:26:44.827 [DEBUG] [Thread-1984] [transport.py] [_log()] Compression: none
2025-11-25T16:26:44.827 [DEBUG] [Thread-1984] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:26:44.885 [DEBUG] [Thread-1984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:26:44.886 [DEBUG] [Thread-1984] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:26:44.887 [DEBUG] [Thread-1984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:26:44.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:26:44.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:26:44.941 [DEBUG] [Thread-1984] [transport.py] [_log()] userauth is OK
2025-11-25T16:26:44.942 [DEBUG] [Thread-1984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:26:44.942 [DEBUG] [Thread-1984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:26:44.942 [DEBUG] [Thread-1984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:26:44.942 [DEBUG] [Thread-1984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:26:44.966 [INFO] [Thread-1984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:26:44.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:26:44.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:26:45.118 [DEBUG] [Thread-1986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:26:45.804 [DEBUG] [Thread-1984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:26:45.804 [DEBUG] [Thread-1984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:26:45.852 [DEBUG] [Thread-1984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:26:45.852 [DEBUG] [Thread-1984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:26:45.861 [DEBUG] [Thread-1984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:26:45.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:26:45.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:26: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') -> 00000000
2025-11-25T16:26:45.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:26:45.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:26:45.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:26:45.898 [DEBUG] [Thread-1984] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:27:00.171 [DEBUG] [Thread-1987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:27:11.765 [DEBUG] [Thread-1988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:27:15.212 [DEBUG] [Thread-1989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:27:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:27:15.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:27:15.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:27:16.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 26, 47), 38.91, 6.91, 0.0, 9.33, 27.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:27:16.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:26:47
2025-11-25T16:27:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:27:16.869 [DEBUG] [Thread-1990] [transport.py] [_log()] starting thread (client mode): 0x737eaad0
2025-11-25T16:27:16.870 [DEBUG] [Thread-1990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:27:16.890 [DEBUG] [Thread-1990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:27:16.891 [INFO] [Thread-1990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:27:16.893 [DEBUG] [Thread-1990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] client lang: <none>
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] server lang: <none>
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] kex follows: False
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:27:16.894 [DEBUG] [Thread-1990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:27:16.895 [DEBUG] [Thread-1990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:27:16.895 [DEBUG] [Thread-1990] [transport.py] [_log()] Compression: none
2025-11-25T16:27:16.895 [DEBUG] [Thread-1990] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:27:16.914 [DEBUG] [Thread-1990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:27:16.914 [DEBUG] [Thread-1990] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:27:16.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:27:16.916 [DEBUG] [Thread-1990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:27:16.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:27:16.918 [DEBUG] [Thread-1990] [transport.py] [_log()] userauth is OK
2025-11-25T16:27:16.918 [DEBUG] [Thread-1990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:27:16.918 [DEBUG] [Thread-1990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:27:16.918 [DEBUG] [Thread-1990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:27:16.918 [DEBUG] [Thread-1990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:27:16.942 [INFO] [Thread-1990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:27:16.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:27:17.578 [DEBUG] [Thread-1990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:27:17.578 [DEBUG] [Thread-1990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:27:17.579 [DEBUG] [Thread-1990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:27:17.619 [DEBUG] [Thread-1990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:27:17.619 [DEBUG] [Thread-1990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:27:17.621 [DEBUG] [Thread-1990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:27:17.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:27:17.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:27:17.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:27:17.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:27:17.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:27:17.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:27:17.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:27:17.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:27:17.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:27:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.601836 -999.00  +27.70   9.13     11   -4.60 1 1 1 1 1   888    0 32.50 11.94 ----- 6.3 9.1 75.0 10.9 33.6 -33.4 33.8 -31.7 35.5 -31.3 36.0 -32.5
2025-11-25T16:27:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:27:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:27:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.601836
2025-11-25T16:27:17.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:27:17.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:27:17.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:27:17.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:27:17.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:27:17.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:26:47', tmtdew=38.91, humidity=6.91, cloud=0.0, wind=9.33, temperature=27.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:26:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:27:17.647 [DEBUG] [Thread-1990] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:27:17.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:27:17.749 [DEBUG] [Thread-1993] [transport.py] [_log()] starting thread (client mode): 0x737e99c0
2025-11-25T16:27:17.750 [DEBUG] [Thread-1993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:27:17.764 [DEBUG] [Thread-1993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:27:17.764 [INFO] [Thread-1993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] client lang: <none>
2025-11-25T16:27:17.772 [DEBUG] [Thread-1993] [transport.py] [_log()] server lang: <none>
2025-11-25T16:27:17.773 [DEBUG] [Thread-1993] [transport.py] [_log()] kex follows: False
2025-11-25T16:27:17.773 [DEBUG] [Thread-1993] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:27:17.773 [DEBUG] [Thread-1993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:27:17.773 [DEBUG] [Thread-1993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:27:17.773 [DEBUG] [Thread-1993] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:27:17.773 [DEBUG] [Thread-1993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:27:17.773 [DEBUG] [Thread-1993] [transport.py] [_log()] Compression: none
2025-11-25T16:27:17.773 [DEBUG] [Thread-1993] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:27:17.829 [DEBUG] [Thread-1993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:27:17.829 [DEBUG] [Thread-1993] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:27:17.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:27:17.831 [DEBUG] [Thread-1993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:27:17.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:27:17.885 [DEBUG] [Thread-1993] [transport.py] [_log()] userauth is OK
2025-11-25T16:27:17.885 [DEBUG] [Thread-1993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:27:17.885 [DEBUG] [Thread-1993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:27:17.886 [DEBUG] [Thread-1993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:27:17.886 [DEBUG] [Thread-1993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:27:17.904 [INFO] [Thread-1993] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:27:17.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:27:17.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:27:18.733 [DEBUG] [Thread-1993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:27:18.734 [DEBUG] [Thread-1993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:27:18.782 [DEBUG] [Thread-1993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:27:18.782 [DEBUG] [Thread-1993] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:27:18.791 [DEBUG] [Thread-1993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:27:18.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:27:18.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:27:18.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:27:18.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:27:18.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:27:18.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:27:18.827 [DEBUG] [Thread-1993] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:27:30.256 [DEBUG] [Thread-1995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:27:45.328 [DEBUG] [Thread-1996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:27:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:27:48.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:27:48.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:27:49.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 27, 20), 39.07, 6.84, 0.0, 9.65, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:27:49.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:27:20
2025-11-25T16:27:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:27:49.800 [DEBUG] [Thread-1997] [transport.py] [_log()] starting thread (client mode): 0x7376fb50
2025-11-25T16:27:49.800 [DEBUG] [Thread-1997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:27:49.819 [DEBUG] [Thread-1997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:27:49.820 [INFO] [Thread-1997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:27:49.823 [DEBUG] [Thread-1997] [transport.py] [_log()] client lang: <none>
2025-11-25T16:27:49.824 [DEBUG] [Thread-1997] [transport.py] [_log()] server lang: <none>
2025-11-25T16:27:49.824 [DEBUG] [Thread-1997] [transport.py] [_log()] kex follows: False
2025-11-25T16:27:49.824 [DEBUG] [Thread-1997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:27:49.824 [DEBUG] [Thread-1997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:27:49.824 [DEBUG] [Thread-1997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:27:49.824 [DEBUG] [Thread-1997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:27:49.824 [DEBUG] [Thread-1997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:27:49.824 [DEBUG] [Thread-1997] [transport.py] [_log()] Compression: none
2025-11-25T16:27:49.824 [DEBUG] [Thread-1997] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:27:49.842 [DEBUG] [Thread-1997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:27:49.843 [DEBUG] [Thread-1997] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:27:49.843 [DEBUG] [Thread-1997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:27:49.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:27:49.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:27:49.846 [DEBUG] [Thread-1997] [transport.py] [_log()] userauth is OK
2025-11-25T16:27:49.846 [DEBUG] [Thread-1997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:27:49.846 [DEBUG] [Thread-1997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:27:49.846 [DEBUG] [Thread-1997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:27:49.846 [DEBUG] [Thread-1997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:27:49.871 [INFO] [Thread-1997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:27:49.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:27:50.499 [DEBUG] [Thread-1997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:27:50.499 [DEBUG] [Thread-1997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:27:50.500 [DEBUG] [Thread-1997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:27:50.539 [DEBUG] [Thread-1997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:27:50.540 [DEBUG] [Thread-1997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:27:50.543 [DEBUG] [Thread-1997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:27:50.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:27:50.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:27:50.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:27:50.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:27:50.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:27:50.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:27:50.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:27:50.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:27:50.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:27:50.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.602184 -999.00  +27.60   4.70     11   -4.70 1 1 1 1 1   888    0 32.29 13.97 ----- 7.7 4.7 89.8 11.8 33.5 -34.9 33.8 -32.1 35.5 -31.4 35.9 -32.6
2025-11-25T16:27:50.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:27:50.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:27:50.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.602184
2025-11-25T16:27:50.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:27:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:27:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:27:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:27:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:27:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:27:20', tmtdew=39.07, humidity=6.84, cloud=0.0, wind=9.65, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:27:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:27:50.569 [DEBUG] [Thread-1997] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:27:50.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:27:50.672 [DEBUG] [Thread-2000] [transport.py] [_log()] starting thread (client mode): 0x7378edd0
2025-11-25T16:27:50.672 [DEBUG] [Thread-2000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:27:50.686 [DEBUG] [Thread-2000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:27:50.687 [INFO] [Thread-2000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:27:50.694 [DEBUG] [Thread-2000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:27:50.694 [DEBUG] [Thread-2000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:27:50.694 [DEBUG] [Thread-2000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] client lang: <none>
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] server lang: <none>
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] kex follows: False
2025-11-25T16:27:50.695 [DEBUG] [Thread-2000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:27:50.696 [DEBUG] [Thread-2000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:27:50.696 [DEBUG] [Thread-2000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:27:50.696 [DEBUG] [Thread-2000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:27:50.696 [DEBUG] [Thread-2000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:27:50.696 [DEBUG] [Thread-2000] [transport.py] [_log()] Compression: none
2025-11-25T16:27:50.696 [DEBUG] [Thread-2000] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:27:50.757 [DEBUG] [Thread-2000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:27:50.758 [DEBUG] [Thread-2000] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:27:50.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:27:50.759 [DEBUG] [Thread-2000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:27:50.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:27:50.813 [DEBUG] [Thread-2000] [transport.py] [_log()] userauth is OK
2025-11-25T16:27:50.813 [DEBUG] [Thread-2000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:27:50.813 [DEBUG] [Thread-2000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:27:50.813 [DEBUG] [Thread-2000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:27:50.814 [DEBUG] [Thread-2000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:27:50.834 [INFO] [Thread-2000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:27:50.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:27:50.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:27:51.660 [DEBUG] [Thread-2000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:27:51.660 [DEBUG] [Thread-2000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:27:51.708 [DEBUG] [Thread-2000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:27:51.708 [DEBUG] [Thread-2000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:27:51.718 [DEBUG] [Thread-2000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:27:51.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:27:51.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:27:51.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:27:51.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:27:51.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:27:51.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:27:51.760 [DEBUG] [Thread-2000] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:28:00.370 [DEBUG] [Thread-2002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:28:12.328 [DEBUG] [Thread-2003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:28:15.429 [DEBUG] [Thread-2004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:28:21.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:28:21.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:28:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:28:22.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 27, 51), 39.52, 6.76, 0.0, 12.0, 27.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:28:22.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:27:51
2025-11-25T16:28:22.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:28:22.724 [DEBUG] [Thread-2005] [transport.py] [_log()] starting thread (client mode): 0x7376ffd0
2025-11-25T16:28:22.724 [DEBUG] [Thread-2005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:28:22.744 [DEBUG] [Thread-2005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:28:22.744 [INFO] [Thread-2005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:28:22.748 [DEBUG] [Thread-2005] [transport.py] [_log()] client lang: <none>
2025-11-25T16:28:22.749 [DEBUG] [Thread-2005] [transport.py] [_log()] server lang: <none>
2025-11-25T16:28:22.749 [DEBUG] [Thread-2005] [transport.py] [_log()] kex follows: False
2025-11-25T16:28:22.749 [DEBUG] [Thread-2005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:28:22.749 [DEBUG] [Thread-2005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:28:22.749 [DEBUG] [Thread-2005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:28:22.749 [DEBUG] [Thread-2005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:28:22.749 [DEBUG] [Thread-2005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:28:22.749 [DEBUG] [Thread-2005] [transport.py] [_log()] Compression: none
2025-11-25T16:28:22.749 [DEBUG] [Thread-2005] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:28:22.769 [DEBUG] [Thread-2005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:28:22.769 [DEBUG] [Thread-2005] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:28:22.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:28:22.770 [DEBUG] [Thread-2005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:28:22.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:28:22.773 [DEBUG] [Thread-2005] [transport.py] [_log()] userauth is OK
2025-11-25T16:28:22.773 [DEBUG] [Thread-2005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:28:22.773 [DEBUG] [Thread-2005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:28:22.773 [DEBUG] [Thread-2005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:28:22.773 [DEBUG] [Thread-2005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:28:22.809 [INFO] [Thread-2005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:28:22.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:28:23.431 [DEBUG] [Thread-2005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:28:23.432 [DEBUG] [Thread-2005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:28:23.432 [DEBUG] [Thread-2005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:28:23.473 [DEBUG] [Thread-2005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:28:23.473 [DEBUG] [Thread-2005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:28:23.477 [DEBUG] [Thread-2005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:28:23.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:28:23.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:28:23.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:28:23.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:28:23.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:28:23.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:28:23.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:28:23.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:28:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:28:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.602531 -999.00  +27.40   9.59     11   -4.70 1 1 1 1 1   888    0 32.43 15.03 ----- 7.3 9.6 64.0 11.7 33.3 -32.9 33.8 -32.4 35.4 -32.1 35.9 -32.9
2025-11-25T16:28:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:28:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:28:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.602531
2025-11-25T16:28:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:28:23.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:28:23.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:28:23.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:28:23.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:28:23.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:27:51', tmtdew=39.52, humidity=6.76, cloud=0.0, wind=12.0, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:27:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:28:23.503 [DEBUG] [Thread-2005] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:28:23.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:28:23.605 [DEBUG] [Thread-2008] [transport.py] [_log()] starting thread (client mode): 0x73781b10
2025-11-25T16:28:23.605 [DEBUG] [Thread-2008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:28:23.620 [DEBUG] [Thread-2008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:28:23.620 [INFO] [Thread-2008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:28:23.627 [DEBUG] [Thread-2008] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:28:23.628 [DEBUG] [Thread-2008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:28:23.628 [DEBUG] [Thread-2008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:28:23.628 [DEBUG] [Thread-2008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:28:23.628 [DEBUG] [Thread-2008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:28:23.628 [DEBUG] [Thread-2008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:28:23.628 [DEBUG] [Thread-2008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:28:23.628 [DEBUG] [Thread-2008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:28:23.629 [DEBUG] [Thread-2008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:28:23.629 [DEBUG] [Thread-2008] [transport.py] [_log()] client lang: <none>
2025-11-25T16:28:23.629 [DEBUG] [Thread-2008] [transport.py] [_log()] server lang: <none>
2025-11-25T16:28:23.629 [DEBUG] [Thread-2008] [transport.py] [_log()] kex follows: False
2025-11-25T16:28:23.629 [DEBUG] [Thread-2008] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:28:23.629 [DEBUG] [Thread-2008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:28:23.629 [DEBUG] [Thread-2008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:28:23.629 [DEBUG] [Thread-2008] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:28:23.630 [DEBUG] [Thread-2008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:28:23.630 [DEBUG] [Thread-2008] [transport.py] [_log()] Compression: none
2025-11-25T16:28:23.630 [DEBUG] [Thread-2008] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:28:23.689 [DEBUG] [Thread-2008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:28:23.690 [DEBUG] [Thread-2008] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:28:23.691 [DEBUG] [Thread-2008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:28:23.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:28:23.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:28:23.748 [DEBUG] [Thread-2008] [transport.py] [_log()] userauth is OK
2025-11-25T16:28:23.749 [DEBUG] [Thread-2008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:28:23.749 [DEBUG] [Thread-2008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:28:23.749 [DEBUG] [Thread-2008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:28:23.749 [DEBUG] [Thread-2008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:28:23.772 [INFO] [Thread-2008] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:28:23.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:28:23.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:28:24.623 [DEBUG] [Thread-2008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:28:24.623 [DEBUG] [Thread-2008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:28:24.671 [DEBUG] [Thread-2008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:28:24.671 [DEBUG] [Thread-2008] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:28:24.679 [DEBUG] [Thread-2008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:28:24.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:28:24.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:28:24.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:28:24.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:28:24.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:28:24.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:28:24.711 [DEBUG] [Thread-2008] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:28:30.468 [DEBUG] [Thread-2010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:28:45.540 [DEBUG] [Thread-2011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:28:54.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:28:54.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:28:54.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:28:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 28, 23), 39.65, 6.71, 0.0, 10.13, 27.73, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:28:55.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:28:23
2025-11-25T16:28:55.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:28:55.688 [DEBUG] [Thread-2012] [transport.py] [_log()] starting thread (client mode): 0x737ea2c0
2025-11-25T16:28:55.689 [DEBUG] [Thread-2012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:28:55.708 [DEBUG] [Thread-2012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:28:55.708 [INFO] [Thread-2012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:28:55.711 [DEBUG] [Thread-2012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:28:55.711 [DEBUG] [Thread-2012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] client lang: <none>
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] server lang: <none>
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] kex follows: False
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] Compression: none
2025-11-25T16:28:55.712 [DEBUG] [Thread-2012] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:28:55.729 [DEBUG] [Thread-2012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:28:55.730 [DEBUG] [Thread-2012] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:28:55.730 [DEBUG] [Thread-2012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:28:55.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:28:55.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:28:55.732 [DEBUG] [Thread-2012] [transport.py] [_log()] userauth is OK
2025-11-25T16:28:55.732 [DEBUG] [Thread-2012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:28:55.733 [DEBUG] [Thread-2012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:28:55.733 [DEBUG] [Thread-2012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:28:55.733 [DEBUG] [Thread-2012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:28:55.755 [INFO] [Thread-2012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:28:55.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:28:56.394 [DEBUG] [Thread-2012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:28:56.394 [DEBUG] [Thread-2012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:28:56.394 [DEBUG] [Thread-2012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:28:56.434 [DEBUG] [Thread-2012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:28:56.434 [DEBUG] [Thread-2012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:28:56.437 [DEBUG] [Thread-2012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:28:56.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:28:56.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:28:56.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:28:56.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:28:56.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:28:56.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:28:56.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:28:56.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:28:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:28:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.602878 -999.00  +27.20   8.65     11   -5.00 1 1 1 1 1   888    0 32.39 19.37 ----- 6.3 8.7 114.0 13.9 33.3 -32.7 33.7 -32.7 35.5 -31.1 35.8 -33.1
2025-11-25T16:28:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:28:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:28:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.602878
2025-11-25T16:28:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:28:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:28:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:28:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:28:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:28:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:28:23', tmtdew=39.65, humidity=6.71, cloud=0.0, wind=10.13, temperature=27.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:28:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:28:56.456 [DEBUG] [Thread-2012] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:28:56.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:28:56.549 [DEBUG] [Thread-2015] [transport.py] [_log()] starting thread (client mode): 0x7376d2a0
2025-11-25T16:28:56.549 [DEBUG] [Thread-2015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:28:56.564 [DEBUG] [Thread-2015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:28:56.564 [INFO] [Thread-2015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:28:56.571 [DEBUG] [Thread-2015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] client lang: <none>
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] server lang: <none>
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] kex follows: False
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] Compression: none
2025-11-25T16:28:56.572 [DEBUG] [Thread-2015] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:28:56.627 [DEBUG] [Thread-2015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:28:56.627 [DEBUG] [Thread-2015] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:28:56.628 [DEBUG] [Thread-2015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:28:56.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:28:56.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:28:56.684 [DEBUG] [Thread-2015] [transport.py] [_log()] userauth is OK
2025-11-25T16:28:56.684 [DEBUG] [Thread-2015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:28:56.684 [DEBUG] [Thread-2015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:28:56.684 [DEBUG] [Thread-2015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:28:56.684 [DEBUG] [Thread-2015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:28:56.702 [INFO] [Thread-2015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:28:56.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:28:56.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:28:57.521 [DEBUG] [Thread-2015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:28:57.521 [DEBUG] [Thread-2015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:28:57.569 [DEBUG] [Thread-2015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:28:57.569 [DEBUG] [Thread-2015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:28:57.577 [DEBUG] [Thread-2015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:28:57.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:28:57.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:28:57.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:28:57.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:28:57.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:28:57.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:28:57.609 [DEBUG] [Thread-2015] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:29:00.578 [DEBUG] [Thread-2017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:29:13.022 [DEBUG] [Thread-2018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:29:15.650 [DEBUG] [Thread-2019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:29:27.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:29:27.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:29:27.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:29:28.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 28, 55), 39.45, 6.64, 0.0, 8.66, 27.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:29:28.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:28:55
2025-11-25T16:29:28.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:29:28.635 [DEBUG] [Thread-2020] [transport.py] [_log()] starting thread (client mode): 0x7376d030
2025-11-25T16:29:28.635 [DEBUG] [Thread-2020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:29:28.651 [DEBUG] [Thread-2020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:29:28.651 [INFO] [Thread-2020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] client lang: <none>
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] server lang: <none>
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] kex follows: False
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:29:28.652 [DEBUG] [Thread-2020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:29:28.653 [DEBUG] [Thread-2020] [transport.py] [_log()] Compression: none
2025-11-25T16:29:28.653 [DEBUG] [Thread-2020] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:29:28.661 [DEBUG] [Thread-2020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:29:28.661 [DEBUG] [Thread-2020] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:29:28.661 [DEBUG] [Thread-2020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:29:28.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:29:28.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:29:28.662 [DEBUG] [Thread-2020] [transport.py] [_log()] userauth is OK
2025-11-25T16:29:28.662 [DEBUG] [Thread-2020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:29:28.662 [DEBUG] [Thread-2020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:29:28.662 [DEBUG] [Thread-2020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:29:28.662 [DEBUG] [Thread-2020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:29:28.678 [INFO] [Thread-2020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:29:28.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:29:29.269 [DEBUG] [Thread-2020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:29:29.270 [DEBUG] [Thread-2020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:29:29.270 [DEBUG] [Thread-2020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:29:29.310 [DEBUG] [Thread-2020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:29:29.310 [DEBUG] [Thread-2020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:29:29.312 [DEBUG] [Thread-2020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:29:29.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:29:29.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:29:29.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:29:29.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:29:29.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:29:29.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:29:29.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.603225 -999.00  +27.20   8.92     11   -4.80 1 1 1 1 1   888    0 32.92 21.94 ----- 7.5 8.9 82.2 10.6 33.3 -33.2 33.8 -31.8 35.6 -31.4 35.9 -32.3
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.603225
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:29:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:28:55', tmtdew=39.45, humidity=6.64, cloud=0.0, wind=8.66, temperature=27.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:28:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:29:29.326 [DEBUG] [Thread-2020] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:29:29.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:29:29.418 [DEBUG] [Thread-2023] [transport.py] [_log()] starting thread (client mode): 0x7376d330
2025-11-25T16:29:29.418 [DEBUG] [Thread-2023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:29:29.436 [DEBUG] [Thread-2023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:29:29.436 [INFO] [Thread-2023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] client lang: <none>
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] server lang: <none>
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] kex follows: False
2025-11-25T16:29:29.443 [DEBUG] [Thread-2023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:29:29.444 [DEBUG] [Thread-2023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:29:29.444 [DEBUG] [Thread-2023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:29:29.444 [DEBUG] [Thread-2023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:29:29.444 [DEBUG] [Thread-2023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:29:29.444 [DEBUG] [Thread-2023] [transport.py] [_log()] Compression: none
2025-11-25T16:29:29.444 [DEBUG] [Thread-2023] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:29:29.499 [DEBUG] [Thread-2023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:29:29.500 [DEBUG] [Thread-2023] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:29:29.500 [DEBUG] [Thread-2023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:29:29.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:29:29.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:29:29.556 [DEBUG] [Thread-2023] [transport.py] [_log()] userauth is OK
2025-11-25T16:29:29.556 [DEBUG] [Thread-2023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:29:29.556 [DEBUG] [Thread-2023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:29:29.556 [DEBUG] [Thread-2023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:29:29.556 [DEBUG] [Thread-2023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:29:29.571 [INFO] [Thread-2023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:29:29.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:29:29.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:29:30.417 [DEBUG] [Thread-2023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:29:30.417 [DEBUG] [Thread-2023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:29:30.465 [DEBUG] [Thread-2023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:29:30.465 [DEBUG] [Thread-2023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:29:30.474 [DEBUG] [Thread-2023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:29:30.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:29:30.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:29:30.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:29:30.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:29:30.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:29:30.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:29:30.511 [DEBUG] [Thread-2023] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:29:30.696 [DEBUG] [Thread-2025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:29:45.765 [DEBUG] [Thread-2026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:30:00.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:30:00.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:30:00.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:30:00.808 [DEBUG] [Thread-2027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:30:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 29, 27), 39.39, 6.64, 0.0, 8.79, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:30:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:29:27
2025-11-25T16:30:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:30:01.558 [DEBUG] [Thread-2028] [transport.py] [_log()] starting thread (client mode): 0x7378e470
2025-11-25T16:30:01.558 [DEBUG] [Thread-2028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:30:01.579 [DEBUG] [Thread-2028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:30:01.579 [INFO] [Thread-2028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] client lang: <none>
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] server lang: <none>
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] kex follows: False
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:30:01.582 [DEBUG] [Thread-2028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:30:01.583 [DEBUG] [Thread-2028] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:30:01.583 [DEBUG] [Thread-2028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:30:01.583 [DEBUG] [Thread-2028] [transport.py] [_log()] Compression: none
2025-11-25T16:30:01.583 [DEBUG] [Thread-2028] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:30:01.597 [DEBUG] [Thread-2028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:30:01.597 [DEBUG] [Thread-2028] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:30:01.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:30:01.598 [DEBUG] [Thread-2028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:30:01.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:30:01.598 [DEBUG] [Thread-2028] [transport.py] [_log()] userauth is OK
2025-11-25T16:30:01.599 [DEBUG] [Thread-2028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:30:01.599 [DEBUG] [Thread-2028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:30:01.599 [DEBUG] [Thread-2028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:30:01.599 [DEBUG] [Thread-2028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:30:01.628 [INFO] [Thread-2028] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:30:01.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:30:02.243 [DEBUG] [Thread-2028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:30:02.243 [DEBUG] [Thread-2028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:30:02.243 [DEBUG] [Thread-2028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:30:02.284 [DEBUG] [Thread-2028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:30:02.284 [DEBUG] [Thread-2028] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:30:02.287 [DEBUG] [Thread-2028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:30:02.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:30:02.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:30:02.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:30:02.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:30:02.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:30:02.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:30:02.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.603920 -999.00  +27.30  13.62     11   -4.90 1 1 1 1 1   888    0 32.07 25.43 ----- 11.2 13.6 79.2 22.1 33.1 -35.2 33.6 -32.4 35.3 -32.7 35.5 -33.3
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.603920
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:30:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:29:27', tmtdew=39.39, humidity=6.64, cloud=0.0, wind=8.79, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:29:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:30:02.307 [DEBUG] [Thread-2028] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:30:02.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:30:02.402 [DEBUG] [Thread-2031] [transport.py] [_log()] starting thread (client mode): 0x7378f370
2025-11-25T16:30:02.402 [DEBUG] [Thread-2031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:30:02.417 [DEBUG] [Thread-2031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:30:02.417 [INFO] [Thread-2031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] client lang: <none>
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] server lang: <none>
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] kex follows: False
2025-11-25T16:30:02.424 [DEBUG] [Thread-2031] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:30:02.425 [DEBUG] [Thread-2031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:30:02.425 [DEBUG] [Thread-2031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:30:02.425 [DEBUG] [Thread-2031] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:30:02.425 [DEBUG] [Thread-2031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:30:02.425 [DEBUG] [Thread-2031] [transport.py] [_log()] Compression: none
2025-11-25T16:30:02.425 [DEBUG] [Thread-2031] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:30:02.482 [DEBUG] [Thread-2031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:30:02.483 [DEBUG] [Thread-2031] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:30:02.483 [DEBUG] [Thread-2031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:30:02.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:30:02.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:30:02.540 [DEBUG] [Thread-2031] [transport.py] [_log()] userauth is OK
2025-11-25T16:30:02.540 [DEBUG] [Thread-2031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:30:02.540 [DEBUG] [Thread-2031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:30:02.540 [DEBUG] [Thread-2031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:30:02.540 [DEBUG] [Thread-2031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:30:02.554 [INFO] [Thread-2031] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:30:02.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:30:02.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:30:03.430 [DEBUG] [Thread-2031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:30:03.430 [DEBUG] [Thread-2031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:30:03.478 [DEBUG] [Thread-2031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:30:03.478 [DEBUG] [Thread-2031] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:30:03.486 [DEBUG] [Thread-2031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:30:03.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:30:03.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:30:03.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:30:03.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:30:03.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:30:03.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:30:03.518 [DEBUG] [Thread-2031] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:30:13.518 [DEBUG] [Thread-2033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:30:15.847 [DEBUG] [Thread-2034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:30:30.913 [DEBUG] [Thread-2035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:30:33.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:30:33.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:30:33.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:30:34.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 29, 27), 39.39, 6.64, 0.0, 8.79, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:30:34.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:29:27
2025-11-25T16:30:34.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:30:34.531 [DEBUG] [Thread-2036] [transport.py] [_log()] starting thread (client mode): 0x7376eec0
2025-11-25T16:30:34.531 [DEBUG] [Thread-2036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:30:34.552 [DEBUG] [Thread-2036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:30:34.552 [INFO] [Thread-2036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:30:34.555 [DEBUG] [Thread-2036] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] client lang: <none>
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] server lang: <none>
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] kex follows: False
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] Compression: none
2025-11-25T16:30:34.556 [DEBUG] [Thread-2036] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:30:34.575 [DEBUG] [Thread-2036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:30:34.575 [DEBUG] [Thread-2036] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:30:34.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:30:34.576 [DEBUG] [Thread-2036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:30:34.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:30:34.578 [DEBUG] [Thread-2036] [transport.py] [_log()] userauth is OK
2025-11-25T16:30:34.578 [DEBUG] [Thread-2036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:30:34.579 [DEBUG] [Thread-2036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:30:34.579 [DEBUG] [Thread-2036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:30:34.579 [DEBUG] [Thread-2036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:30:34.603 [INFO] [Thread-2036] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:30:34.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:30:35.441 [DEBUG] [Thread-2036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:30:35.441 [DEBUG] [Thread-2036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:30:35.441 [DEBUG] [Thread-2036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:30:35.482 [DEBUG] [Thread-2036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:30:35.482 [DEBUG] [Thread-2036] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:30:35.485 [DEBUG] [Thread-2036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:30:35.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:30:35.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:30:35.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:30:35.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:30:35.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:30:35.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:30:35.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:30:35.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:30:35.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:30:35.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.604267 -999.00  +27.20  15.24     11   -4.90 1 1 1 1 1   888    0 32.58 30.72 ----- 13.9 15.2 62.6 20.6 33.1 -32.4 33.7 -32.1 35.3 -32.5 35.6 -32.4
2025-11-25T16:30:35.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:30:35.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:30:35.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.604267
2025-11-25T16:30:35.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:30:35.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:30:35.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:30:35.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:30:35.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:30:35.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:29:27', tmtdew=39.39, humidity=6.64, cloud=0.0, wind=8.79, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:30:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:30:35.506 [DEBUG] [Thread-2036] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:30:35.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:30:35.616 [DEBUG] [Thread-2039] [transport.py] [_log()] starting thread (client mode): 0x761d9c00
2025-11-25T16:30:35.616 [DEBUG] [Thread-2039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:30:35.630 [DEBUG] [Thread-2039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:30:35.631 [INFO] [Thread-2039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:30:35.638 [DEBUG] [Thread-2039] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:30:35.639 [DEBUG] [Thread-2039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:30:35.639 [DEBUG] [Thread-2039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:30:35.639 [DEBUG] [Thread-2039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:30:35.639 [DEBUG] [Thread-2039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:30:35.639 [DEBUG] [Thread-2039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:30:35.639 [DEBUG] [Thread-2039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:30:35.639 [DEBUG] [Thread-2039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:30:35.639 [DEBUG] [Thread-2039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:30:35.640 [DEBUG] [Thread-2039] [transport.py] [_log()] client lang: <none>
2025-11-25T16:30:35.640 [DEBUG] [Thread-2039] [transport.py] [_log()] server lang: <none>
2025-11-25T16:30:35.640 [DEBUG] [Thread-2039] [transport.py] [_log()] kex follows: False
2025-11-25T16:30:35.640 [DEBUG] [Thread-2039] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:30:35.640 [DEBUG] [Thread-2039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:30:35.640 [DEBUG] [Thread-2039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:30:35.640 [DEBUG] [Thread-2039] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:30:35.640 [DEBUG] [Thread-2039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:30:35.641 [DEBUG] [Thread-2039] [transport.py] [_log()] Compression: none
2025-11-25T16:30:35.641 [DEBUG] [Thread-2039] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:30:35.697 [DEBUG] [Thread-2039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:30:35.698 [DEBUG] [Thread-2039] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:30:35.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:30:35.699 [DEBUG] [Thread-2039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:30:35.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:30:35.756 [DEBUG] [Thread-2039] [transport.py] [_log()] userauth is OK
2025-11-25T16:30:35.757 [DEBUG] [Thread-2039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:30:35.757 [DEBUG] [Thread-2039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:30:35.757 [DEBUG] [Thread-2039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:30:35.757 [DEBUG] [Thread-2039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:30:35.777 [INFO] [Thread-2039] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:30:35.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:30:35.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:30:36.587 [DEBUG] [Thread-2039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:30:36.587 [DEBUG] [Thread-2039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:30:36.635 [DEBUG] [Thread-2039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:30:36.635 [DEBUG] [Thread-2039] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:30:36.644 [DEBUG] [Thread-2039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:30:36.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:30:36.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:30:36.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:30:36.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:30:36.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:30:36.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:30:36.680 [DEBUG] [Thread-2039] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:30:45.953 [DEBUG] [Thread-2041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:31:01.026 [DEBUG] [Thread-2042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:31:06.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:31:06.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:31:06.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:31:07.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 31, 4), 39.42, 6.63, 0.0, 9.97, 27.5, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:31:07.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:31:04
2025-11-25T16:31:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:31:07.655 [DEBUG] [Thread-2043] [transport.py] [_log()] starting thread (client mode): 0x7376d120
2025-11-25T16:31:07.655 [DEBUG] [Thread-2043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:31:07.675 [DEBUG] [Thread-2043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:31:07.675 [INFO] [Thread-2043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:31:07.678 [DEBUG] [Thread-2043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:31:07.678 [DEBUG] [Thread-2043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:31:07.678 [DEBUG] [Thread-2043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:31:07.678 [DEBUG] [Thread-2043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] client lang: <none>
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] server lang: <none>
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] kex follows: False
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] Compression: none
2025-11-25T16:31:07.679 [DEBUG] [Thread-2043] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:31:07.698 [DEBUG] [Thread-2043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:31:07.698 [DEBUG] [Thread-2043] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:31:07.699 [DEBUG] [Thread-2043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:31:07.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:31:07.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:31:07.701 [DEBUG] [Thread-2043] [transport.py] [_log()] userauth is OK
2025-11-25T16:31:07.701 [DEBUG] [Thread-2043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:31:07.701 [DEBUG] [Thread-2043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:31:07.701 [DEBUG] [Thread-2043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:31:07.701 [DEBUG] [Thread-2043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:31:07.726 [INFO] [Thread-2043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:31:07.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:31:08.390 [DEBUG] [Thread-2043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:31:08.391 [DEBUG] [Thread-2043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:31:08.391 [DEBUG] [Thread-2043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:31:08.432 [DEBUG] [Thread-2043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:31:08.432 [DEBUG] [Thread-2043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:31:08.435 [DEBUG] [Thread-2043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:31:08.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:31:08.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:31:08.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:31:08.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:31:08.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:31:08.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:31:08.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:31:08.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:31:08.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:31:08.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.604614 -999.00  +27.00  16.10     11   -5.10 1 1 1 1 1   888    0 33.61 32.88 ----- 8.0 16.1 52.2 18.3 33.0 -32.5 33.5 -33.3 35.1 -32.0 35.4 -33.1
2025-11-25T16:31:08.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:31:08.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:31:08.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.604614
2025-11-25T16:31:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:31:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:31:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:31:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:31:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:31:08.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:31:04', tmtdew=39.42, humidity=6.63, cloud=0.0, wind=9.97, temperature=27.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:30:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:31:08.457 [DEBUG] [Thread-2043] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:31:08.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:31:08.561 [DEBUG] [Thread-2046] [transport.py] [_log()] starting thread (client mode): 0x7376ce20
2025-11-25T16:31:08.561 [DEBUG] [Thread-2046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:31:08.576 [DEBUG] [Thread-2046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:31:08.576 [INFO] [Thread-2046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:31:08.584 [DEBUG] [Thread-2046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:31:08.584 [DEBUG] [Thread-2046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:31:08.584 [DEBUG] [Thread-2046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:31:08.584 [DEBUG] [Thread-2046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:31:08.584 [DEBUG] [Thread-2046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:31:08.584 [DEBUG] [Thread-2046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] client lang: <none>
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] server lang: <none>
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] kex follows: False
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] Compression: none
2025-11-25T16:31:08.585 [DEBUG] [Thread-2046] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:31:08.644 [DEBUG] [Thread-2046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:31:08.645 [DEBUG] [Thread-2046] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:31:08.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:31:08.646 [DEBUG] [Thread-2046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:31:08.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:31:08.700 [DEBUG] [Thread-2046] [transport.py] [_log()] userauth is OK
2025-11-25T16:31:08.700 [DEBUG] [Thread-2046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:31:08.700 [DEBUG] [Thread-2046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:31:08.700 [DEBUG] [Thread-2046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:31:08.700 [DEBUG] [Thread-2046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:31:08.724 [INFO] [Thread-2046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:31:08.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:31:08.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:31:09.552 [DEBUG] [Thread-2046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:31:09.553 [DEBUG] [Thread-2046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:31:09.601 [DEBUG] [Thread-2046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:31:09.601 [DEBUG] [Thread-2046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:31:09.610 [DEBUG] [Thread-2046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:31:09.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:31:09.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:31:09.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:31:09.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:31:09.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:31:09.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:31:09.646 [DEBUG] [Thread-2046] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:31:14.011 [DEBUG] [Thread-2048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:31:16.069 [DEBUG] [Thread-2049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:31:31.126 [DEBUG] [Thread-2050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:31:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:31:39.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:31:39.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:31:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 31, 36), 39.42, 6.66, 0.0, 9.32, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:31:40.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:31:36
2025-11-25T16:31:40.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:31:40.605 [DEBUG] [Thread-2051] [transport.py] [_log()] starting thread (client mode): 0x737ea680
2025-11-25T16:31:40.605 [DEBUG] [Thread-2051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:31:40.628 [DEBUG] [Thread-2051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:31:40.628 [INFO] [Thread-2051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:31:40.631 [DEBUG] [Thread-2051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:31:40.631 [DEBUG] [Thread-2051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:31:40.631 [DEBUG] [Thread-2051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] client lang: <none>
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] server lang: <none>
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] kex follows: False
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] Compression: none
2025-11-25T16:31:40.632 [DEBUG] [Thread-2051] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:31:40.650 [DEBUG] [Thread-2051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:31:40.651 [DEBUG] [Thread-2051] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:31:40.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:31:40.652 [DEBUG] [Thread-2051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:31:40.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:31:40.654 [DEBUG] [Thread-2051] [transport.py] [_log()] userauth is OK
2025-11-25T16:31:40.654 [DEBUG] [Thread-2051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:31:40.655 [DEBUG] [Thread-2051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:31:40.655 [DEBUG] [Thread-2051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:31:40.655 [DEBUG] [Thread-2051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:31:40.674 [INFO] [Thread-2051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:31:40.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:31:41.501 [DEBUG] [Thread-2051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:31:41.501 [DEBUG] [Thread-2051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:31:41.502 [DEBUG] [Thread-2051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:31:41.543 [DEBUG] [Thread-2051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:31:41.543 [DEBUG] [Thread-2051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:31:41.546 [DEBUG] [Thread-2051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:31:41.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:31:41.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:31:41.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:31:41.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:31:41.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:31:41.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:31:41.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:31:41.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:31:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:31:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.604962 -999.00  +27.00   9.91     11   -5.10 1 1 1 1 1   888    0 32.98 36.50 ----- 12.3 9.9 57.4 11.9 33.1 -32.1 33.4 -32.5 35.3 -30.1 35.4 -31.5
2025-11-25T16:31:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:31:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:31:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.604962
2025-11-25T16:31:41.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:31:41.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:31:41.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:31:41.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:31:41.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:31:41.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:31:36', tmtdew=39.42, humidity=6.66, cloud=0.0, wind=9.32, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:31:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:31:41.574 [DEBUG] [Thread-2051] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:31:41.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:31:41.677 [DEBUG] [Thread-2054] [transport.py] [_log()] starting thread (client mode): 0x737eada0
2025-11-25T16:31:41.677 [DEBUG] [Thread-2054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:31:41.692 [DEBUG] [Thread-2054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:31:41.692 [INFO] [Thread-2054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:31:41.699 [DEBUG] [Thread-2054] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:31:41.699 [DEBUG] [Thread-2054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:31:41.699 [DEBUG] [Thread-2054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:31:41.699 [DEBUG] [Thread-2054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:31:41.699 [DEBUG] [Thread-2054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] client lang: <none>
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] server lang: <none>
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] kex follows: False
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:31:41.700 [DEBUG] [Thread-2054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:31:41.701 [DEBUG] [Thread-2054] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:31:41.701 [DEBUG] [Thread-2054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:31:41.701 [DEBUG] [Thread-2054] [transport.py] [_log()] Compression: none
2025-11-25T16:31:41.701 [DEBUG] [Thread-2054] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:31:41.760 [DEBUG] [Thread-2054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:31:41.761 [DEBUG] [Thread-2054] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:31:41.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:31:41.762 [DEBUG] [Thread-2054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:31:41.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:31:41.816 [DEBUG] [Thread-2054] [transport.py] [_log()] userauth is OK
2025-11-25T16:31:41.816 [DEBUG] [Thread-2054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:31:41.817 [DEBUG] [Thread-2054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:31:41.817 [DEBUG] [Thread-2054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:31:41.817 [DEBUG] [Thread-2054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:31:41.835 [INFO] [Thread-2054] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:31:41.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:31:41.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:31:42.653 [DEBUG] [Thread-2054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:31:42.653 [DEBUG] [Thread-2054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:31:42.702 [DEBUG] [Thread-2054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:31:42.702 [DEBUG] [Thread-2054] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:31:42.711 [DEBUG] [Thread-2054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:31:42.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:31:42.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:31:42.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:31:42.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:31:42.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:31:42.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:31:42.748 [DEBUG] [Thread-2054] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:31:46.172 [DEBUG] [Thread-2056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:32:01.239 [DEBUG] [Thread-2057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:32:12.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:32:12.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:32:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:32:13.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 32, 8), 39.49, 6.63, 0.0, 6.83, 27.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:32:13.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:32:08
2025-11-25T16:32:13.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:32:13.726 [DEBUG] [Thread-2058] [transport.py] [_log()] starting thread (client mode): 0x737e8490
2025-11-25T16:32:13.726 [DEBUG] [Thread-2058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:32:13.746 [DEBUG] [Thread-2058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:32:13.747 [INFO] [Thread-2058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:32:13.749 [DEBUG] [Thread-2058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:32:13.749 [DEBUG] [Thread-2058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] client lang: <none>
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] server lang: <none>
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] kex follows: False
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] Compression: none
2025-11-25T16:32:13.750 [DEBUG] [Thread-2058] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:32:13.770 [DEBUG] [Thread-2058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:32:13.770 [DEBUG] [Thread-2058] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:32:13.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:32:13.771 [DEBUG] [Thread-2058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:32:13.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:32:13.774 [DEBUG] [Thread-2058] [transport.py] [_log()] userauth is OK
2025-11-25T16:32:13.774 [DEBUG] [Thread-2058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:32:13.774 [DEBUG] [Thread-2058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:32:13.774 [DEBUG] [Thread-2058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:32:13.775 [DEBUG] [Thread-2058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:32:13.810 [INFO] [Thread-2058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:32:13.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:32:14.464 [DEBUG] [Thread-2058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:32:14.464 [DEBUG] [Thread-2058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:32:14.464 [DEBUG] [Thread-2058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:32:14.505 [DEBUG] [Thread-2058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:32:14.506 [DEBUG] [Thread-2058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:32:14.508 [DEBUG] [Thread-2058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:32:14.519 [DEBUG] [Thread-2060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:32:14.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:32:14.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:32:14.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:32:14.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:32:14.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:32:14.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:32:14.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:32:14.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.605309 -999.00  +27.20  14.36     11   -4.80 1 1 1 1 1   888    0 33.17 36.56 ----- 15.2 14.4 65.8 16.9 33.1 -31.8 33.4 -32.8 35.1 -32.0 35.4 -32.6
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.605309
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:32:14.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:32:08', tmtdew=39.49, humidity=6.63, cloud=0.0, wind=6.83, temperature=27.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:31:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:32:14.530 [DEBUG] [Thread-2058] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:32:14.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:32:14.622 [DEBUG] [Thread-2062] [transport.py] [_log()] starting thread (client mode): 0x7376d150
2025-11-25T16:32:14.622 [DEBUG] [Thread-2062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:32:14.636 [DEBUG] [Thread-2062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:32:14.637 [INFO] [Thread-2062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:32:14.644 [DEBUG] [Thread-2062] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:32:14.644 [DEBUG] [Thread-2062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:32:14.644 [DEBUG] [Thread-2062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:32:14.644 [DEBUG] [Thread-2062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] client lang: <none>
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] server lang: <none>
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] kex follows: False
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] Compression: none
2025-11-25T16:32:14.645 [DEBUG] [Thread-2062] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:32:14.704 [DEBUG] [Thread-2062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:32:14.704 [DEBUG] [Thread-2062] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:32:14.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:32:14.706 [DEBUG] [Thread-2062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:32:14.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:32:14.760 [DEBUG] [Thread-2062] [transport.py] [_log()] userauth is OK
2025-11-25T16:32:14.760 [DEBUG] [Thread-2062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:32:14.761 [DEBUG] [Thread-2062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:32:14.761 [DEBUG] [Thread-2062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:32:14.761 [DEBUG] [Thread-2062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:32:14.779 [INFO] [Thread-2062] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:32:14.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:32:14.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:32:15.595 [DEBUG] [Thread-2062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:32:15.596 [DEBUG] [Thread-2062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:32:15.645 [DEBUG] [Thread-2062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:32:15.645 [DEBUG] [Thread-2062] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:32:15.655 [DEBUG] [Thread-2062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:32:15.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:32:15.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:32:15.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:32:15.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:32:15.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:32:15.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:32:15.692 [DEBUG] [Thread-2062] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:32:16.283 [DEBUG] [Thread-2064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:32:31.355 [DEBUG] [Thread-2065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:32:45.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:32:45.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:32: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
2025-11-25T16:32:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 32, 40), 39.61, 6.59, 0.0, 8.0, 27.55, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:32:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:32:40
2025-11-25T16:32:46.388 [DEBUG] [Thread-2066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:32:46.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:32:46.659 [DEBUG] [Thread-2067] [transport.py] [_log()] starting thread (client mode): 0x7378ef20
2025-11-25T16:32:46.659 [DEBUG] [Thread-2067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:32:46.669 [DEBUG] [Thread-2067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:32:46.669 [INFO] [Thread-2067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:32:46.670 [DEBUG] [Thread-2067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:32:46.670 [DEBUG] [Thread-2067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:32:46.670 [DEBUG] [Thread-2067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:32:46.670 [DEBUG] [Thread-2067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] client lang: <none>
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] server lang: <none>
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] kex follows: False
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] Compression: none
2025-11-25T16:32:46.671 [DEBUG] [Thread-2067] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:32:46.680 [DEBUG] [Thread-2067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:32:46.681 [DEBUG] [Thread-2067] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:32:46.681 [DEBUG] [Thread-2067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:32:46.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:32:46.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:32:46.682 [DEBUG] [Thread-2067] [transport.py] [_log()] userauth is OK
2025-11-25T16:32:46.682 [DEBUG] [Thread-2067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:32:46.683 [DEBUG] [Thread-2067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:32:46.683 [DEBUG] [Thread-2067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:32:46.683 [DEBUG] [Thread-2067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:32:46.706 [INFO] [Thread-2067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:32:46.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:32:47.463 [DEBUG] [Thread-2067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:32:47.464 [DEBUG] [Thread-2067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:32:47.464 [DEBUG] [Thread-2067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:32:47.504 [DEBUG] [Thread-2067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:32:47.505 [DEBUG] [Thread-2067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:32:47.508 [DEBUG] [Thread-2067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:32:47.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:32:47.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:32:47.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:32:47.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:32:47.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:32:47.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:32:47.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:32:47.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:32:47.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:32:47.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.605656 -999.00  +27.10   8.86     11   -5.00 1 1 1 1 1   888    0 32.98 39.90 ----- 9.2 8.9 15.6 17.0 33.0 -32.7 33.4 -32.5 35.2 -30.4 35.4 -31.6
2025-11-25T16:32:47.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:32:47.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:32:47.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.605656
2025-11-25T16:32:47.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:32:47.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:32:47.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:32:47.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:32:47.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:32:47.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:32:40', tmtdew=39.61, humidity=6.59, cloud=0.0, wind=8.0, temperature=27.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:32:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:32:47.527 [DEBUG] [Thread-2067] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:32:47.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:32:47.629 [DEBUG] [Thread-2070] [transport.py] [_log()] starting thread (client mode): 0x737ebbb0
2025-11-25T16:32:47.629 [DEBUG] [Thread-2070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:32:47.643 [DEBUG] [Thread-2070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:32:47.644 [INFO] [Thread-2070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:32:47.651 [DEBUG] [Thread-2070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:32:47.651 [DEBUG] [Thread-2070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:32:47.652 [DEBUG] [Thread-2070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:32:47.652 [DEBUG] [Thread-2070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:32:47.652 [DEBUG] [Thread-2070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:32:47.652 [DEBUG] [Thread-2070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:32:47.652 [DEBUG] [Thread-2070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:32:47.652 [DEBUG] [Thread-2070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:32:47.652 [DEBUG] [Thread-2070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:32:47.652 [DEBUG] [Thread-2070] [transport.py] [_log()] client lang: <none>
2025-11-25T16:32:47.653 [DEBUG] [Thread-2070] [transport.py] [_log()] server lang: <none>
2025-11-25T16:32:47.653 [DEBUG] [Thread-2070] [transport.py] [_log()] kex follows: False
2025-11-25T16:32:47.653 [DEBUG] [Thread-2070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:32:47.653 [DEBUG] [Thread-2070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:32:47.653 [DEBUG] [Thread-2070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:32:47.653 [DEBUG] [Thread-2070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:32:47.653 [DEBUG] [Thread-2070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:32:47.654 [DEBUG] [Thread-2070] [transport.py] [_log()] Compression: none
2025-11-25T16:32:47.654 [DEBUG] [Thread-2070] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:32:47.713 [DEBUG] [Thread-2070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:32:47.714 [DEBUG] [Thread-2070] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:32:47.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:32:47.715 [DEBUG] [Thread-2070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:32:47.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:32:47.773 [DEBUG] [Thread-2070] [transport.py] [_log()] userauth is OK
2025-11-25T16:32:47.773 [DEBUG] [Thread-2070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:32:47.774 [DEBUG] [Thread-2070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:32:47.774 [DEBUG] [Thread-2070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:32:47.774 [DEBUG] [Thread-2070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:32:47.792 [INFO] [Thread-2070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:32:47.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:32:47.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:32:48.618 [DEBUG] [Thread-2070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:32:48.619 [DEBUG] [Thread-2070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:32:48.667 [DEBUG] [Thread-2070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:32:48.667 [DEBUG] [Thread-2070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:32:48.676 [DEBUG] [Thread-2070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:32:48.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:32:48.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:32:48.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:32:48.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:32:48.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:32:48.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:32:48.717 [DEBUG] [Thread-2070] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:33:01.431 [DEBUG] [Thread-2072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:33:15.015 [DEBUG] [Thread-2073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:33:16.495 [DEBUG] [Thread-2074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:33:18.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:33:18.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:33:18.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:33:19.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 33, 12), 39.72, 6.54, 0.0, 7.84, 27.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:33:19.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:33:12
2025-11-25T16:33:19.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:33:19.674 [DEBUG] [Thread-2075] [transport.py] [_log()] starting thread (client mode): 0x7376cee0
2025-11-25T16:33:19.674 [DEBUG] [Thread-2075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:33:19.695 [DEBUG] [Thread-2075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:33:19.695 [INFO] [Thread-2075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:33:19.698 [DEBUG] [Thread-2075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] client lang: <none>
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] server lang: <none>
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] kex follows: False
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:33:19.699 [DEBUG] [Thread-2075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:33:19.700 [DEBUG] [Thread-2075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:33:19.700 [DEBUG] [Thread-2075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:33:19.700 [DEBUG] [Thread-2075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:33:19.700 [DEBUG] [Thread-2075] [transport.py] [_log()] Compression: none
2025-11-25T16:33:19.700 [DEBUG] [Thread-2075] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:33:19.718 [DEBUG] [Thread-2075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:33:19.719 [DEBUG] [Thread-2075] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:33:19.719 [DEBUG] [Thread-2075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:33:19.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:33:19.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:33:19.721 [DEBUG] [Thread-2075] [transport.py] [_log()] userauth is OK
2025-11-25T16:33:19.721 [DEBUG] [Thread-2075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:33:19.721 [DEBUG] [Thread-2075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:33:19.721 [DEBUG] [Thread-2075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:33:19.721 [DEBUG] [Thread-2075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:33:19.745 [INFO] [Thread-2075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:33:19.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:33:20.436 [DEBUG] [Thread-2075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:33:20.437 [DEBUG] [Thread-2075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:33:20.437 [DEBUG] [Thread-2075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:33:20.478 [DEBUG] [Thread-2075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:33:20.478 [DEBUG] [Thread-2075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:33:20.481 [DEBUG] [Thread-2075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:33:20.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:33:20.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:33:20.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:33:20.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:33:20.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:33:20.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:33:20.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:33:20.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:33:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:33:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.606003 -999.00  +26.80  11.22     11   -5.20 1 1 1 1 1   888    0 33.60 42.32 ----- 10.2 11.2 14.2 15.8 33.1 -32.7 33.4 -32.1 35.1 -30.7 35.3 -31.7
2025-11-25T16:33:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:33:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:33:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.606003
2025-11-25T16:33:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:33:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:33:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:33:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:33:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:33:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:33:12', tmtdew=39.72, humidity=6.54, cloud=0.0, wind=7.84, temperature=27.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:32:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:33:20.508 [DEBUG] [Thread-2075] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:33:20.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:33:20.613 [DEBUG] [Thread-2078] [transport.py] [_log()] starting thread (client mode): 0x70d0f3d0
2025-11-25T16:33:20.613 [DEBUG] [Thread-2078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:33:20.627 [DEBUG] [Thread-2078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:33:20.627 [INFO] [Thread-2078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] client lang: <none>
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] server lang: <none>
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] kex follows: False
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] Compression: none
2025-11-25T16:33:20.636 [DEBUG] [Thread-2078] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:33:20.696 [DEBUG] [Thread-2078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:33:20.697 [DEBUG] [Thread-2078] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:33:20.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:33:20.698 [DEBUG] [Thread-2078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:33:20.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:33:20.753 [DEBUG] [Thread-2078] [transport.py] [_log()] userauth is OK
2025-11-25T16:33:20.753 [DEBUG] [Thread-2078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:33:20.753 [DEBUG] [Thread-2078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:33:20.754 [DEBUG] [Thread-2078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:33:20.754 [DEBUG] [Thread-2078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:33:20.778 [INFO] [Thread-2078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:33:20.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:33:20.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:33:21.627 [DEBUG] [Thread-2078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:33:21.628 [DEBUG] [Thread-2078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:33:21.676 [DEBUG] [Thread-2078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:33:21.676 [DEBUG] [Thread-2078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:33:21.685 [DEBUG] [Thread-2078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:33:21.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:33:21.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:33:21.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:33:21.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:33:21.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:33:21.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:33:21.722 [DEBUG] [Thread-2078] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:33:31.544 [DEBUG] [Thread-2080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:33:46.608 [DEBUG] [Thread-2081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:33:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:33:51.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:33:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:33:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 33, 44), 39.56, 6.58, 0.0, 2.38, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:33:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:33:44
2025-11-25T16:33:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:33:52.672 [DEBUG] [Thread-2082] [transport.py] [_log()] starting thread (client mode): 0x7376e770
2025-11-25T16:33:52.672 [DEBUG] [Thread-2082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:33:52.685 [DEBUG] [Thread-2082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:33:52.686 [INFO] [Thread-2082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:33:52.689 [DEBUG] [Thread-2082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:33:52.689 [DEBUG] [Thread-2082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:33:52.689 [DEBUG] [Thread-2082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:33:52.689 [DEBUG] [Thread-2082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] client lang: <none>
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] server lang: <none>
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] kex follows: False
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:33:52.690 [DEBUG] [Thread-2082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:33:52.691 [DEBUG] [Thread-2082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:33:52.691 [DEBUG] [Thread-2082] [transport.py] [_log()] Compression: none
2025-11-25T16:33:52.691 [DEBUG] [Thread-2082] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:33:52.712 [DEBUG] [Thread-2082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:33:52.712 [DEBUG] [Thread-2082] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:33:52.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:33:52.714 [DEBUG] [Thread-2082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:33:52.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:33:52.715 [DEBUG] [Thread-2082] [transport.py] [_log()] userauth is OK
2025-11-25T16:33:52.716 [DEBUG] [Thread-2082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:33:52.716 [DEBUG] [Thread-2082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:33:52.716 [DEBUG] [Thread-2082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:33:52.716 [DEBUG] [Thread-2082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:33:52.754 [INFO] [Thread-2082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:33:52.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:33:53.400 [DEBUG] [Thread-2082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:33:53.400 [DEBUG] [Thread-2082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:33:53.401 [DEBUG] [Thread-2082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:33:53.441 [DEBUG] [Thread-2082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:33:53.441 [DEBUG] [Thread-2082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:33:53.444 [DEBUG] [Thread-2082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:33:53.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:33:53.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:33:53.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:33:53.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:33:53.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:33:53.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:33:53.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:33:53.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:33:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:33:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.606351 -999.00  +26.60   3.29     11   -5.20 1 1 1 1 1   888    0 33.15 45.35 ----- 4.6 3.3 353.2 10.9 33.1 -33.0 33.3 -33.5 35.1 -30.8 35.2 -31.9
2025-11-25T16:33:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:33:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:33:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.606351
2025-11-25T16:33:53.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:33:53.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:33:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:33:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:33:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:33:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:33:44', tmtdew=39.56, humidity=6.58, cloud=0.0, wind=2.38, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:33:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:33:53.468 [DEBUG] [Thread-2082] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:33:53.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:33:53.570 [DEBUG] [Thread-2085] [transport.py] [_log()] starting thread (client mode): 0x7376c7f0
2025-11-25T16:33:53.570 [DEBUG] [Thread-2085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:33:53.585 [DEBUG] [Thread-2085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:33:53.585 [INFO] [Thread-2085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:33:53.593 [DEBUG] [Thread-2085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:33:53.593 [DEBUG] [Thread-2085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:33:53.593 [DEBUG] [Thread-2085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:33:53.593 [DEBUG] [Thread-2085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:33:53.593 [DEBUG] [Thread-2085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:33:53.593 [DEBUG] [Thread-2085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:33:53.594 [DEBUG] [Thread-2085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:33:53.594 [DEBUG] [Thread-2085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:33:53.594 [DEBUG] [Thread-2085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:33:53.594 [DEBUG] [Thread-2085] [transport.py] [_log()] client lang: <none>
2025-11-25T16:33:53.594 [DEBUG] [Thread-2085] [transport.py] [_log()] server lang: <none>
2025-11-25T16:33:53.594 [DEBUG] [Thread-2085] [transport.py] [_log()] kex follows: False
2025-11-25T16:33:53.594 [DEBUG] [Thread-2085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:33:53.594 [DEBUG] [Thread-2085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:33:53.595 [DEBUG] [Thread-2085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:33:53.595 [DEBUG] [Thread-2085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:33:53.595 [DEBUG] [Thread-2085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:33:53.595 [DEBUG] [Thread-2085] [transport.py] [_log()] Compression: none
2025-11-25T16:33:53.595 [DEBUG] [Thread-2085] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:33:53.653 [DEBUG] [Thread-2085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:33:53.654 [DEBUG] [Thread-2085] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:33:53.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:33:53.655 [DEBUG] [Thread-2085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:33:53.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:33:53.709 [DEBUG] [Thread-2085] [transport.py] [_log()] userauth is OK
2025-11-25T16:33:53.709 [DEBUG] [Thread-2085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:33:53.709 [DEBUG] [Thread-2085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:33:53.709 [DEBUG] [Thread-2085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:33:53.709 [DEBUG] [Thread-2085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:33:53.728 [INFO] [Thread-2085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:33:53.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:33:53.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:33:54.530 [DEBUG] [Thread-2085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:33:54.530 [DEBUG] [Thread-2085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:33:54.577 [DEBUG] [Thread-2085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:33:54.578 [DEBUG] [Thread-2085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:33:54.587 [DEBUG] [Thread-2085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:33:54.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:33:54.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:33:54.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:33:54.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:33:54.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:33:54.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:33:54.623 [DEBUG] [Thread-2085] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:34:01.650 [DEBUG] [Thread-2087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:34:15.517 [DEBUG] [Thread-2088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:34:16.714 [DEBUG] [Thread-2089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:34:24.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:34:24.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:34:24.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:34:25.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 34, 16), 39.66, 6.53, 0.0, 2.81, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:34:25.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:34:16
2025-11-25T16:34:25.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:34:25.629 [DEBUG] [Thread-2090] [transport.py] [_log()] starting thread (client mode): 0x7378f160
2025-11-25T16:34:25.629 [DEBUG] [Thread-2090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:34:25.649 [DEBUG] [Thread-2090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:34:25.649 [INFO] [Thread-2090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:34:25.652 [DEBUG] [Thread-2090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] client lang: <none>
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] server lang: <none>
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] kex follows: False
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] Compression: none
2025-11-25T16:34:25.653 [DEBUG] [Thread-2090] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:34:25.670 [DEBUG] [Thread-2090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:34:25.670 [DEBUG] [Thread-2090] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:34:25.670 [DEBUG] [Thread-2090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:34:25.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:34:25.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:34:25.671 [DEBUG] [Thread-2090] [transport.py] [_log()] userauth is OK
2025-11-25T16:34:25.671 [DEBUG] [Thread-2090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:34:25.671 [DEBUG] [Thread-2090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:34:25.671 [DEBUG] [Thread-2090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:34:25.671 [DEBUG] [Thread-2090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:34:25.686 [INFO] [Thread-2090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:34:25.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:34:26.344 [DEBUG] [Thread-2090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:34:26.344 [DEBUG] [Thread-2090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:34:26.344 [DEBUG] [Thread-2090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:34:26.385 [DEBUG] [Thread-2090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:34:26.385 [DEBUG] [Thread-2090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:34:26.388 [DEBUG] [Thread-2090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:34:26.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:34:26.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:34:26.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:34:26.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:34:26.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:34:26.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:34:26.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:34:26.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:34:26.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:34:26.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.606698 -999.00  +26.80   1.96     11   -5.10 1 1 1 1 1   888    0 33.69 42.45 ----- 2.0 2.0 67.4 5.0 33.2 -32.2 33.4 -32.2 35.0 -31.8 35.1 -31.9
2025-11-25T16:34:26.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:34:26.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:34:26.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.606698
2025-11-25T16:34:26.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:34:26.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:34:26.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:34:26.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:34:26.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:34:26.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:34:16', tmtdew=39.66, humidity=6.53, cloud=0.0, wind=2.81, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:33:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:34:26.405 [DEBUG] [Thread-2090] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:34:26.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:34:26.502 [DEBUG] [Thread-2093] [transport.py] [_log()] starting thread (client mode): 0x7378c130
2025-11-25T16:34:26.502 [DEBUG] [Thread-2093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:34:26.516 [DEBUG] [Thread-2093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:34:26.516 [INFO] [Thread-2093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] client lang: <none>
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] server lang: <none>
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] kex follows: False
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] Compression: none
2025-11-25T16:34:26.524 [DEBUG] [Thread-2093] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:34:26.584 [DEBUG] [Thread-2093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:34:26.584 [DEBUG] [Thread-2093] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:34:26.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:34:26.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:34:26.585 [DEBUG] [Thread-2093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:34:26.640 [DEBUG] [Thread-2093] [transport.py] [_log()] userauth is OK
2025-11-25T16:34:26.640 [DEBUG] [Thread-2093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:34:26.640 [DEBUG] [Thread-2093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:34:26.640 [DEBUG] [Thread-2093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:34:26.640 [DEBUG] [Thread-2093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:34:26.656 [INFO] [Thread-2093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:34:26.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:34:26.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:34:27.519 [DEBUG] [Thread-2093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:34:27.519 [DEBUG] [Thread-2093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:34:27.567 [DEBUG] [Thread-2093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:34:27.567 [DEBUG] [Thread-2093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:34:27.576 [DEBUG] [Thread-2093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:34:27.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:34:27.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:34:27.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:34:27.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:34:27.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:34:27.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:34:27.608 [DEBUG] [Thread-2093] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:34:31.756 [DEBUG] [Thread-2095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:34:46.828 [DEBUG] [Thread-2096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:34:57.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:34:57.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:34:57.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:34:58.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 34, 48), 39.53, 6.54, 0.0, 2.75, 27.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:34:58.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:34:48
2025-11-25T16:34:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:34:58.562 [DEBUG] [Thread-2097] [transport.py] [_log()] starting thread (client mode): 0x7378d180
2025-11-25T16:34:58.562 [DEBUG] [Thread-2097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:34:58.583 [DEBUG] [Thread-2097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:34:58.583 [INFO] [Thread-2097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:34:58.586 [DEBUG] [Thread-2097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:34:58.587 [DEBUG] [Thread-2097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:34:58.587 [DEBUG] [Thread-2097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:34:58.587 [DEBUG] [Thread-2097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:34:58.587 [DEBUG] [Thread-2097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:34:58.587 [DEBUG] [Thread-2097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:34:58.587 [DEBUG] [Thread-2097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:34:58.587 [DEBUG] [Thread-2097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:34:58.587 [DEBUG] [Thread-2097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:34:58.588 [DEBUG] [Thread-2097] [transport.py] [_log()] client lang: <none>
2025-11-25T16:34:58.588 [DEBUG] [Thread-2097] [transport.py] [_log()] server lang: <none>
2025-11-25T16:34:58.588 [DEBUG] [Thread-2097] [transport.py] [_log()] kex follows: False
2025-11-25T16:34:58.588 [DEBUG] [Thread-2097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:34:58.588 [DEBUG] [Thread-2097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:34:58.588 [DEBUG] [Thread-2097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:34:58.588 [DEBUG] [Thread-2097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:34:58.588 [DEBUG] [Thread-2097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:34:58.588 [DEBUG] [Thread-2097] [transport.py] [_log()] Compression: none
2025-11-25T16:34:58.589 [DEBUG] [Thread-2097] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:34:58.607 [DEBUG] [Thread-2097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:34:58.608 [DEBUG] [Thread-2097] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:34:58.608 [DEBUG] [Thread-2097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:34:58.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:34:58.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:34:58.611 [DEBUG] [Thread-2097] [transport.py] [_log()] userauth is OK
2025-11-25T16:34:58.611 [DEBUG] [Thread-2097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:34:58.611 [DEBUG] [Thread-2097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:34:58.611 [DEBUG] [Thread-2097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:34:58.611 [DEBUG] [Thread-2097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:34:58.649 [INFO] [Thread-2097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:34:58.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:34:59.288 [DEBUG] [Thread-2097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:34:59.288 [DEBUG] [Thread-2097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:34:59.288 [DEBUG] [Thread-2097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:34:59.329 [DEBUG] [Thread-2097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:34:59.329 [DEBUG] [Thread-2097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:34:59.332 [DEBUG] [Thread-2097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:34:59.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:34:59.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:34:59.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:34:59.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:34:59.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:34:59.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:34:59.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:34:59.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:34:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:34:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.607045 -999.00  +26.90   5.72     11   -5.10 1 1 1 1 1   888    0 33.70 45.18 ----- 3.6 5.7 124.4 6.4 33.1 -32.4 33.5 -32.6 35.0 -30.4 35.1 -32.3
2025-11-25T16:34:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:34:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:34:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.607045
2025-11-25T16:34:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:34:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:34:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:34:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:34:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:34:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:34:48', tmtdew=39.53, humidity=6.54, cloud=0.0, wind=2.75, temperature=27.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:34:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:34:59.350 [DEBUG] [Thread-2097] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:34:59.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:34:59.443 [DEBUG] [Thread-2100] [transport.py] [_log()] starting thread (client mode): 0x7376cc40
2025-11-25T16:34:59.443 [DEBUG] [Thread-2100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:34:59.458 [DEBUG] [Thread-2100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:34:59.458 [INFO] [Thread-2100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] client lang: <none>
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] server lang: <none>
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] kex follows: False
2025-11-25T16:34:59.465 [DEBUG] [Thread-2100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:34:59.466 [DEBUG] [Thread-2100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:34:59.466 [DEBUG] [Thread-2100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:34:59.466 [DEBUG] [Thread-2100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:34:59.466 [DEBUG] [Thread-2100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:34:59.466 [DEBUG] [Thread-2100] [transport.py] [_log()] Compression: none
2025-11-25T16:34:59.466 [DEBUG] [Thread-2100] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:34:59.523 [DEBUG] [Thread-2100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:34:59.523 [DEBUG] [Thread-2100] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:34:59.523 [DEBUG] [Thread-2100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:34:59.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:34:59.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:34:59.584 [DEBUG] [Thread-2100] [transport.py] [_log()] userauth is OK
2025-11-25T16:34:59.584 [DEBUG] [Thread-2100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:34:59.584 [DEBUG] [Thread-2100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:34:59.584 [DEBUG] [Thread-2100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:34:59.584 [DEBUG] [Thread-2100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:34:59.599 [INFO] [Thread-2100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:34:59.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:34:59.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:35:00.431 [DEBUG] [Thread-2100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:35:00.431 [DEBUG] [Thread-2100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:35:00.479 [DEBUG] [Thread-2100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:35:00.479 [DEBUG] [Thread-2100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:35:00.487 [DEBUG] [Thread-2100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:35:00.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:35:00.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:35:00.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:35:00.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:35:00.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:35:00.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:35:00.519 [DEBUG] [Thread-2100] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:35:01.869 [DEBUG] [Thread-2102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:35:16.015 [DEBUG] [Thread-2103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:35:16.926 [DEBUG] [Thread-2104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:35:30.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:35:30.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:35:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:35:31.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 35, 20), 39.57, 6.51, 0.0, 2.98, 27.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:35:31.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:35:20
2025-11-25T16:35:31.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:35:31.441 [DEBUG] [Thread-2105] [transport.py] [_log()] starting thread (client mode): 0x737836d0
2025-11-25T16:35:31.441 [DEBUG] [Thread-2105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:35:31.461 [DEBUG] [Thread-2105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:35:31.461 [INFO] [Thread-2105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] client lang: <none>
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] server lang: <none>
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] kex follows: False
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:35:31.465 [DEBUG] [Thread-2105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:35:31.466 [DEBUG] [Thread-2105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:35:31.466 [DEBUG] [Thread-2105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:35:31.466 [DEBUG] [Thread-2105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:35:31.466 [DEBUG] [Thread-2105] [transport.py] [_log()] Compression: none
2025-11-25T16:35:31.466 [DEBUG] [Thread-2105] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:35:31.483 [DEBUG] [Thread-2105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:35:31.483 [DEBUG] [Thread-2105] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:35:31.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:35:31.484 [DEBUG] [Thread-2105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:35:31.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:35:31.487 [DEBUG] [Thread-2105] [transport.py] [_log()] userauth is OK
2025-11-25T16:35:31.487 [DEBUG] [Thread-2105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:35:31.487 [DEBUG] [Thread-2105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:35:31.487 [DEBUG] [Thread-2105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:35:31.487 [DEBUG] [Thread-2105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:35:31.512 [INFO] [Thread-2105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:35:31.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:35:31.970 [DEBUG] [Thread-2107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:35:32.147 [DEBUG] [Thread-2105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:35:32.148 [DEBUG] [Thread-2105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:35:32.148 [DEBUG] [Thread-2105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:35:32.189 [DEBUG] [Thread-2105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:35:32.189 [DEBUG] [Thread-2105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:35:32.192 [DEBUG] [Thread-2105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:35:32.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:35:32.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:35:32.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:35:32.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:35:32.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:35:32.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:35:32.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:35:32.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:35:32.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:35:32.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.607739 -999.00  +27.10   3.54     11   -5.00 1 1 1 1 1   888    0 33.06 44.31 ----- 2.8 3.5 92.2 5.0 33.2 -32.6 33.6 -32.2 35.2 -31.2 35.5 -31.3
2025-11-25T16:35:32.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:35:32.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:35:32.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.607739
2025-11-25T16:35:32.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:35:32.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:35:32.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:35:32.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:35:32.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:35:32.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:35:20', tmtdew=39.57, humidity=6.51, cloud=0.0, wind=2.98, temperature=27.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:35:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:35:32.220 [DEBUG] [Thread-2105] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:35:32.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:35:32.323 [DEBUG] [Thread-2109] [transport.py] [_log()] starting thread (client mode): 0x7378ef20
2025-11-25T16:35:32.323 [DEBUG] [Thread-2109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:35:32.337 [DEBUG] [Thread-2109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:35:32.337 [INFO] [Thread-2109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:35:32.344 [DEBUG] [Thread-2109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:35:32.344 [DEBUG] [Thread-2109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] client lang: <none>
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] server lang: <none>
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] kex follows: False
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:35:32.345 [DEBUG] [Thread-2109] [transport.py] [_log()] Compression: none
2025-11-25T16:35:32.346 [DEBUG] [Thread-2109] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:35:32.405 [DEBUG] [Thread-2109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:35:32.406 [DEBUG] [Thread-2109] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:35:32.406 [DEBUG] [Thread-2109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:35:32.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:35:32.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:35:32.466 [DEBUG] [Thread-2109] [transport.py] [_log()] userauth is OK
2025-11-25T16:35:32.466 [DEBUG] [Thread-2109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:35:32.466 [DEBUG] [Thread-2109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:35:32.466 [DEBUG] [Thread-2109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:35:32.466 [DEBUG] [Thread-2109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:35:32.485 [INFO] [Thread-2109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:35:32.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:35:32.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:35:33.342 [DEBUG] [Thread-2109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:35:33.342 [DEBUG] [Thread-2109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:35:33.390 [DEBUG] [Thread-2109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:35:33.390 [DEBUG] [Thread-2109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:35:33.399 [DEBUG] [Thread-2109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:35:33.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:35:33.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:35: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') -> 00000000
2025-11-25T16:35:33.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:35:33.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:35:33.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:35:33.435 [DEBUG] [Thread-2109] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:35:47.010 [DEBUG] [Thread-2111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:36:02.075 [DEBUG] [Thread-2112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:36:03.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:36:03.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:36:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:36:04.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 35, 52), 39.62, 6.59, 0.0, 9.78, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:36:04.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:35:52
2025-11-25T16:36:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:36:04.372 [DEBUG] [Thread-2113] [transport.py] [_log()] starting thread (client mode): 0x70d0eaa0
2025-11-25T16:36:04.372 [DEBUG] [Thread-2113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:36:04.392 [DEBUG] [Thread-2113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:36:04.392 [INFO] [Thread-2113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:36:04.395 [DEBUG] [Thread-2113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:36:04.395 [DEBUG] [Thread-2113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:36:04.396 [DEBUG] [Thread-2113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:36:04.396 [DEBUG] [Thread-2113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:36:04.396 [DEBUG] [Thread-2113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:36:04.396 [DEBUG] [Thread-2113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:36:04.396 [DEBUG] [Thread-2113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:36:04.396 [DEBUG] [Thread-2113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:36:04.396 [DEBUG] [Thread-2113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:36:04.396 [DEBUG] [Thread-2113] [transport.py] [_log()] client lang: <none>
2025-11-25T16:36:04.397 [DEBUG] [Thread-2113] [transport.py] [_log()] server lang: <none>
2025-11-25T16:36:04.397 [DEBUG] [Thread-2113] [transport.py] [_log()] kex follows: False
2025-11-25T16:36:04.397 [DEBUG] [Thread-2113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:36:04.397 [DEBUG] [Thread-2113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:36:04.397 [DEBUG] [Thread-2113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:36:04.397 [DEBUG] [Thread-2113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:36:04.397 [DEBUG] [Thread-2113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:36:04.397 [DEBUG] [Thread-2113] [transport.py] [_log()] Compression: none
2025-11-25T16:36:04.398 [DEBUG] [Thread-2113] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:36:04.411 [DEBUG] [Thread-2113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:36:04.412 [DEBUG] [Thread-2113] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:36:04.413 [DEBUG] [Thread-2113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:36:04.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:36:04.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:36:04.414 [DEBUG] [Thread-2113] [transport.py] [_log()] userauth is OK
2025-11-25T16:36:04.415 [DEBUG] [Thread-2113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:36:04.415 [DEBUG] [Thread-2113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:36:04.415 [DEBUG] [Thread-2113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:36:04.415 [DEBUG] [Thread-2113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:36:04.439 [INFO] [Thread-2113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:36:04.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:36:05.086 [DEBUG] [Thread-2113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:36:05.086 [DEBUG] [Thread-2113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:36:05.086 [DEBUG] [Thread-2113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:36:05.126 [DEBUG] [Thread-2113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:36:05.127 [DEBUG] [Thread-2113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:36:05.130 [DEBUG] [Thread-2113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:36:05.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:36:05.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:36:05.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:36:05.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:36:05.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:36:05.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:36:05.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:36:05.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:36:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:36:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.608087 -999.00  +27.30   2.88     11   -5.00 1 1 1 1 1   888    0 33.36 44.00 ----- 1.5 2.9 74.3 4.9 33.4 -31.9 33.7 -32.0 35.4 -30.1 35.6 -31.6
2025-11-25T16:36:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:36:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:36:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.608087
2025-11-25T16:36:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:36:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:36:05.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:36:05.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:36:05.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:36:05.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:35:52', tmtdew=39.62, humidity=6.59, cloud=0.0, wind=9.78, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:35:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:36:05.153 [DEBUG] [Thread-2113] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:36:05.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:36:05.257 [DEBUG] [Thread-2116] [transport.py] [_log()] starting thread (client mode): 0x70d0e140
2025-11-25T16:36:05.258 [DEBUG] [Thread-2116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:36:05.276 [DEBUG] [Thread-2116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:36:05.276 [INFO] [Thread-2116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] client lang: <none>
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] server lang: <none>
2025-11-25T16:36:05.284 [DEBUG] [Thread-2116] [transport.py] [_log()] kex follows: False
2025-11-25T16:36:05.285 [DEBUG] [Thread-2116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:36:05.285 [DEBUG] [Thread-2116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:36:05.285 [DEBUG] [Thread-2116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:36:05.285 [DEBUG] [Thread-2116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:36:05.285 [DEBUG] [Thread-2116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:36:05.285 [DEBUG] [Thread-2116] [transport.py] [_log()] Compression: none
2025-11-25T16:36:05.285 [DEBUG] [Thread-2116] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:36:05.342 [DEBUG] [Thread-2116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:36:05.343 [DEBUG] [Thread-2116] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:36:05.344 [DEBUG] [Thread-2116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:36:05.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:36:05.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:36:05.405 [DEBUG] [Thread-2116] [transport.py] [_log()] userauth is OK
2025-11-25T16:36:05.405 [DEBUG] [Thread-2116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:36:05.406 [DEBUG] [Thread-2116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:36:05.406 [DEBUG] [Thread-2116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:36:05.406 [DEBUG] [Thread-2116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:36:05.424 [INFO] [Thread-2116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:36:05.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:36:05.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:36:06.292 [DEBUG] [Thread-2116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:36:06.293 [DEBUG] [Thread-2116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:36:06.341 [DEBUG] [Thread-2116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:36:06.341 [DEBUG] [Thread-2116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:36:06.350 [DEBUG] [Thread-2116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:36:06.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:36:06.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:36:06.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:36:06.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:36:06.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:36:06.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:36:06.387 [DEBUG] [Thread-2116] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:36:16.546 [DEBUG] [Thread-2118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:36:17.116 [DEBUG] [Thread-2119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:36:32.175 [DEBUG] [Thread-2120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:36:36.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:36:36.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:36:36.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:36:37.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 36, 24), 39.52, 6.64, 0.0, 9.95, 27.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:36:37.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:36:24
2025-11-25T16:36:37.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:36:37.307 [DEBUG] [Thread-2121] [transport.py] [_log()] starting thread (client mode): 0x73780d90
2025-11-25T16:36:37.307 [DEBUG] [Thread-2121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:36:37.327 [DEBUG] [Thread-2121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:36:37.328 [INFO] [Thread-2121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] client lang: <none>
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] server lang: <none>
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] kex follows: False
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:36:37.331 [DEBUG] [Thread-2121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:36:37.332 [DEBUG] [Thread-2121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:36:37.332 [DEBUG] [Thread-2121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:36:37.332 [DEBUG] [Thread-2121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:36:37.332 [DEBUG] [Thread-2121] [transport.py] [_log()] Compression: none
2025-11-25T16:36:37.332 [DEBUG] [Thread-2121] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:36:37.350 [DEBUG] [Thread-2121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:36:37.351 [DEBUG] [Thread-2121] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:36:37.351 [DEBUG] [Thread-2121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:36:37.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:36:37.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:36:37.353 [DEBUG] [Thread-2121] [transport.py] [_log()] userauth is OK
2025-11-25T16:36:37.353 [DEBUG] [Thread-2121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:36:37.353 [DEBUG] [Thread-2121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:36:37.354 [DEBUG] [Thread-2121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:36:37.354 [DEBUG] [Thread-2121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:36:37.377 [INFO] [Thread-2121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:36:37.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:36:38.018 [DEBUG] [Thread-2121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:36:38.018 [DEBUG] [Thread-2121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:36:38.019 [DEBUG] [Thread-2121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:36:38.060 [DEBUG] [Thread-2121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:36:38.060 [DEBUG] [Thread-2121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:36:38.063 [DEBUG] [Thread-2121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:36:38.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:36:38.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:36:38.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:36:38.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:36:38.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:36:38.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:36:38.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:36:38.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:36:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:36:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.608434 -999.00  +27.50   1.30     11   -4.80 1 1 1 1 1   888    0 33.23 39.19 ----- 2.8 1.3 318.1 2.2 33.5 -31.8 33.8 -31.9 35.5 -30.1 35.7 -32.3
2025-11-25T16:36:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:36:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:36:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.608434
2025-11-25T16:36:38.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:36:38.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:36:38.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:36:38.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:36:38.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:36:38.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:36:24', tmtdew=39.52, humidity=6.64, cloud=0.0, wind=9.95, temperature=27.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:36:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:36:38.089 [DEBUG] [Thread-2121] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:36:38.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:36:38.196 [DEBUG] [Thread-2124] [transport.py] [_log()] starting thread (client mode): 0x737812a0
2025-11-25T16:36:38.196 [DEBUG] [Thread-2124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:36:38.211 [DEBUG] [Thread-2124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:36:38.211 [INFO] [Thread-2124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:36:38.219 [DEBUG] [Thread-2124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:36:38.219 [DEBUG] [Thread-2124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:36:38.219 [DEBUG] [Thread-2124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:36:38.219 [DEBUG] [Thread-2124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:36:38.219 [DEBUG] [Thread-2124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:36:38.219 [DEBUG] [Thread-2124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:36:38.219 [DEBUG] [Thread-2124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:36:38.219 [DEBUG] [Thread-2124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:36:38.219 [DEBUG] [Thread-2124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] client lang: <none>
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] server lang: <none>
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] kex follows: False
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] Compression: none
2025-11-25T16:36:38.220 [DEBUG] [Thread-2124] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:36:38.277 [DEBUG] [Thread-2124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:36:38.278 [DEBUG] [Thread-2124] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:36:38.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:36:38.279 [DEBUG] [Thread-2124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:36:38.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:36:38.338 [DEBUG] [Thread-2124] [transport.py] [_log()] userauth is OK
2025-11-25T16:36:38.338 [DEBUG] [Thread-2124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:36:38.338 [DEBUG] [Thread-2124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:36:38.338 [DEBUG] [Thread-2124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:36:38.338 [DEBUG] [Thread-2124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:36:38.357 [INFO] [Thread-2124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:36:38.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:36:38.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:36:39.230 [DEBUG] [Thread-2124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:36:39.231 [DEBUG] [Thread-2124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:36:39.279 [DEBUG] [Thread-2124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:36:39.279 [DEBUG] [Thread-2124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:36:39.288 [DEBUG] [Thread-2124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:36:39.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:36: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')
2025-11-25T16:36:39.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:36:39.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:36:39.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:36:39.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:36:39.327 [DEBUG] [Thread-2124] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:36:47.221 [DEBUG] [Thread-2126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:37:02.284 [DEBUG] [Thread-2127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:37:09.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:37:09.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:37:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:37:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 36, 56), 39.94, 6.59, 0.0, 9.07, 28.01, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:37:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:36:56
2025-11-25T16:37:10.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:37:10.278 [DEBUG] [Thread-2128] [transport.py] [_log()] starting thread (client mode): 0x737e9300
2025-11-25T16:37:10.278 [DEBUG] [Thread-2128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:37:10.298 [DEBUG] [Thread-2128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:37:10.298 [INFO] [Thread-2128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:37:10.300 [DEBUG] [Thread-2128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:37:10.300 [DEBUG] [Thread-2128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:37:10.300 [DEBUG] [Thread-2128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] client lang: <none>
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] server lang: <none>
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] kex follows: False
2025-11-25T16:37:10.301 [DEBUG] [Thread-2128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:37:10.302 [DEBUG] [Thread-2128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:37:10.302 [DEBUG] [Thread-2128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:37:10.302 [DEBUG] [Thread-2128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:37:10.302 [DEBUG] [Thread-2128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:37:10.302 [DEBUG] [Thread-2128] [transport.py] [_log()] Compression: none
2025-11-25T16:37:10.302 [DEBUG] [Thread-2128] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:37:10.313 [DEBUG] [Thread-2128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:37:10.313 [DEBUG] [Thread-2128] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:37:10.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:37:10.315 [DEBUG] [Thread-2128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:37:10.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:37:10.317 [DEBUG] [Thread-2128] [transport.py] [_log()] userauth is OK
2025-11-25T16:37:10.317 [DEBUG] [Thread-2128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:37:10.317 [DEBUG] [Thread-2128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:37:10.318 [DEBUG] [Thread-2128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:37:10.318 [DEBUG] [Thread-2128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:37:10.341 [INFO] [Thread-2128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:37:10.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:37:10.948 [DEBUG] [Thread-2128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:37:10.948 [DEBUG] [Thread-2128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:37:10.948 [DEBUG] [Thread-2128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:37:10.989 [DEBUG] [Thread-2128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:37:10.989 [DEBUG] [Thread-2128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:37:10.992 [DEBUG] [Thread-2128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:37:11.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:37:11.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:37:11.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:37:11.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:37:11.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:37:11.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:37:11.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:37:11.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:37:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:37:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.608781 -999.00  +27.50   7.76     11   -4.80 1 1 1 1 1   888    0 33.16 37.49 ----- 10.0 7.8 75.8 9.0 33.5 -34.3 33.9 -32.9 35.5 -32.4 35.8 -32.8
2025-11-25T16:37:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:37:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:37:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.608781
2025-11-25T16:37:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:37:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:37:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:37:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:37:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:37:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:36:56', tmtdew=39.94, humidity=6.59, cloud=0.0, wind=9.07, temperature=28.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:36:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:37:11.017 [DEBUG] [Thread-2128] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:37:11.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:37:11.120 [DEBUG] [Thread-2131] [transport.py] [_log()] starting thread (client mode): 0x73781e40
2025-11-25T16:37:11.120 [DEBUG] [Thread-2131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:37:11.135 [DEBUG] [Thread-2131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:37:11.135 [INFO] [Thread-2131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:37:11.142 [DEBUG] [Thread-2131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:37:11.143 [DEBUG] [Thread-2131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:37:11.143 [DEBUG] [Thread-2131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:37:11.143 [DEBUG] [Thread-2131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:37:11.143 [DEBUG] [Thread-2131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:37:11.143 [DEBUG] [Thread-2131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:37:11.143 [DEBUG] [Thread-2131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:37:11.143 [DEBUG] [Thread-2131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:37:11.143 [DEBUG] [Thread-2131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:37:11.144 [DEBUG] [Thread-2131] [transport.py] [_log()] client lang: <none>
2025-11-25T16:37:11.144 [DEBUG] [Thread-2131] [transport.py] [_log()] server lang: <none>
2025-11-25T16:37:11.144 [DEBUG] [Thread-2131] [transport.py] [_log()] kex follows: False
2025-11-25T16:37:11.144 [DEBUG] [Thread-2131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:37:11.144 [DEBUG] [Thread-2131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:37:11.144 [DEBUG] [Thread-2131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:37:11.144 [DEBUG] [Thread-2131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:37:11.144 [DEBUG] [Thread-2131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:37:11.145 [DEBUG] [Thread-2131] [transport.py] [_log()] Compression: none
2025-11-25T16:37:11.145 [DEBUG] [Thread-2131] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:37:11.202 [DEBUG] [Thread-2131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:37:11.203 [DEBUG] [Thread-2131] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:37:11.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:37:11.205 [DEBUG] [Thread-2131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:37:11.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:37:11.262 [DEBUG] [Thread-2131] [transport.py] [_log()] userauth is OK
2025-11-25T16:37:11.262 [DEBUG] [Thread-2131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:37:11.262 [DEBUG] [Thread-2131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:37:11.263 [DEBUG] [Thread-2131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:37:11.263 [DEBUG] [Thread-2131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:37:11.289 [INFO] [Thread-2131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:37:11.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:37:11.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:37:12.131 [DEBUG] [Thread-2131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:37:12.131 [DEBUG] [Thread-2131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:37:12.179 [DEBUG] [Thread-2131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:37:12.179 [DEBUG] [Thread-2131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:37:12.188 [DEBUG] [Thread-2131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:37:12.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:37:12.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:37:12.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:37:12.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:37:12.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:37:12.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:37:12.222 [DEBUG] [Thread-2131] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:37:17.278 [DEBUG] [Thread-2133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:37:17.329 [DEBUG] [Thread-2134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:37:32.393 [DEBUG] [Thread-2135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:37:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:37:42.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:37:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:37:42.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 37, 28), 40.12, 6.51, 0.0, 5.65, 28.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:37:42.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:37:28
2025-11-25T16:37:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:37:43.168 [DEBUG] [Thread-2136] [transport.py] [_log()] starting thread (client mode): 0x737816f0
2025-11-25T16:37:43.168 [DEBUG] [Thread-2136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:37:43.188 [DEBUG] [Thread-2136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:37:43.188 [INFO] [Thread-2136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:37:43.191 [DEBUG] [Thread-2136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:37:43.191 [DEBUG] [Thread-2136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] client lang: <none>
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] server lang: <none>
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] kex follows: False
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] Compression: none
2025-11-25T16:37:43.192 [DEBUG] [Thread-2136] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:37:43.209 [DEBUG] [Thread-2136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:37:43.209 [DEBUG] [Thread-2136] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:37:43.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:37:43.210 [DEBUG] [Thread-2136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:37:43.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:37:43.212 [DEBUG] [Thread-2136] [transport.py] [_log()] userauth is OK
2025-11-25T16:37:43.212 [DEBUG] [Thread-2136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:37:43.212 [DEBUG] [Thread-2136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:37:43.212 [DEBUG] [Thread-2136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:37:43.212 [DEBUG] [Thread-2136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:37:43.230 [INFO] [Thread-2136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:37:43.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:37:43.856 [DEBUG] [Thread-2136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:37:43.856 [DEBUG] [Thread-2136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:37:43.857 [DEBUG] [Thread-2136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:37:43.897 [DEBUG] [Thread-2136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:37:43.897 [DEBUG] [Thread-2136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:37:43.899 [DEBUG] [Thread-2136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:37:43.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:37:43.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:37:43.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:37:43.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:37:43.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:37:43.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:37:43.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:37:43.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:37:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:37:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.609128 -999.00  +27.30   6.60     11   -5.00 1 1 1 1 1   888    0 32.03 34.57 ----- 7.3 6.6 43.0 15.3 33.5 -33.6 33.8 -33.5 35.4 -32.5 35.8 -32.8
2025-11-25T16:37:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:37:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:37:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.609128
2025-11-25T16:37:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:37:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:37:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:37:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:37:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:37:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:37:28', tmtdew=40.12, humidity=6.51, cloud=0.0, wind=5.65, temperature=28.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:37:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:37:43.918 [DEBUG] [Thread-2136] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:37:43.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:37:44.010 [DEBUG] [Thread-2139] [transport.py] [_log()] starting thread (client mode): 0x70d0d7e0
2025-11-25T16:37:44.010 [DEBUG] [Thread-2139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:37:44.025 [DEBUG] [Thread-2139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:37:44.025 [INFO] [Thread-2139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] client lang: <none>
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] server lang: <none>
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] kex follows: False
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:37:44.033 [DEBUG] [Thread-2139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:37:44.034 [DEBUG] [Thread-2139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:37:44.034 [DEBUG] [Thread-2139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:37:44.034 [DEBUG] [Thread-2139] [transport.py] [_log()] Compression: none
2025-11-25T16:37:44.034 [DEBUG] [Thread-2139] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:37:44.089 [DEBUG] [Thread-2139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:37:44.089 [DEBUG] [Thread-2139] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:37:44.090 [DEBUG] [Thread-2139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:37:44.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:37:44.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:37:44.147 [DEBUG] [Thread-2139] [transport.py] [_log()] userauth is OK
2025-11-25T16:37:44.147 [DEBUG] [Thread-2139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:37:44.147 [DEBUG] [Thread-2139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:37:44.147 [DEBUG] [Thread-2139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:37:44.147 [DEBUG] [Thread-2139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:37:44.167 [INFO] [Thread-2139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:37:44.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:37:44.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:37:45.027 [DEBUG] [Thread-2139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:37:45.027 [DEBUG] [Thread-2139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:37:45.075 [DEBUG] [Thread-2139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:37:45.075 [DEBUG] [Thread-2139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:37:45.084 [DEBUG] [Thread-2139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:37:45.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:37:45.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:37:45.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:37:45.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:37:45.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:37:45.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:37:45.116 [DEBUG] [Thread-2139] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:37:47.434 [DEBUG] [Thread-2141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:38:02.501 [DEBUG] [Thread-2142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:38:15.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:38:15.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:38:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:38:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 37, 28), 40.12, 6.51, 0.0, 5.65, 28.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:38:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:37:28
2025-11-25T16:38:15.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:38:16.033 [DEBUG] [Thread-2143] [transport.py] [_log()] starting thread (client mode): 0x70d0d2a0
2025-11-25T16:38:16.033 [DEBUG] [Thread-2143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:38:16.053 [DEBUG] [Thread-2143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:38:16.053 [INFO] [Thread-2143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:38:16.056 [DEBUG] [Thread-2143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:38:16.057 [DEBUG] [Thread-2143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:38:16.057 [DEBUG] [Thread-2143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:38:16.057 [DEBUG] [Thread-2143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:38:16.057 [DEBUG] [Thread-2143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:38:16.057 [DEBUG] [Thread-2143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:38:16.057 [DEBUG] [Thread-2143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:38:16.057 [DEBUG] [Thread-2143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:38:16.057 [DEBUG] [Thread-2143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:38:16.058 [DEBUG] [Thread-2143] [transport.py] [_log()] client lang: <none>
2025-11-25T16:38:16.058 [DEBUG] [Thread-2143] [transport.py] [_log()] server lang: <none>
2025-11-25T16:38:16.058 [DEBUG] [Thread-2143] [transport.py] [_log()] kex follows: False
2025-11-25T16:38:16.058 [DEBUG] [Thread-2143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:38:16.058 [DEBUG] [Thread-2143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:38:16.058 [DEBUG] [Thread-2143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:38:16.058 [DEBUG] [Thread-2143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:38:16.059 [DEBUG] [Thread-2143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:38:16.059 [DEBUG] [Thread-2143] [transport.py] [_log()] Compression: none
2025-11-25T16:38:16.059 [DEBUG] [Thread-2143] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:38:16.081 [DEBUG] [Thread-2143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:38:16.082 [DEBUG] [Thread-2143] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:38:16.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:38:16.083 [DEBUG] [Thread-2143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:38:16.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:38:16.085 [DEBUG] [Thread-2143] [transport.py] [_log()] userauth is OK
2025-11-25T16:38:16.085 [DEBUG] [Thread-2143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:38:16.085 [DEBUG] [Thread-2143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:38:16.085 [DEBUG] [Thread-2143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:38:16.085 [DEBUG] [Thread-2143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:38:16.122 [INFO] [Thread-2143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:38:16.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:38:16.785 [DEBUG] [Thread-2143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:38:16.785 [DEBUG] [Thread-2143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:38:16.785 [DEBUG] [Thread-2143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:38:16.826 [DEBUG] [Thread-2143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:38:16.826 [DEBUG] [Thread-2143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:38:16.829 [DEBUG] [Thread-2143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:38:16.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:38:16.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:38:16.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:38:16.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:38:16.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:38:16.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:38:16.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:38:16.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:38:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:38:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.609475 -999.00  +27.20   6.44     11   -4.90 1 1 1 1 1   888    0 32.70 35.17 ----- 8.2 6.4 17.6 12.9 33.5 -32.7 33.7 -33.1 35.5 -30.2 35.6 -31.8
2025-11-25T16:38:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:38:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:38:16.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.609475
2025-11-25T16:38:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:38:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:38:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:38:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:38:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:38:16.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:37:28', tmtdew=40.12, humidity=6.51, cloud=0.0, wind=5.65, temperature=28.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:37:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:38:16.859 [DEBUG] [Thread-2143] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:38:16.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:38:16.957 [DEBUG] [Thread-2146] [transport.py] [_log()] starting thread (client mode): 0x73782350
2025-11-25T16:38:16.957 [DEBUG] [Thread-2146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:38:16.972 [DEBUG] [Thread-2146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:38:16.972 [INFO] [Thread-2146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:38:16.980 [DEBUG] [Thread-2146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:38:16.980 [DEBUG] [Thread-2146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:38:16.980 [DEBUG] [Thread-2146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:38:16.980 [DEBUG] [Thread-2146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:38:16.980 [DEBUG] [Thread-2146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:38:16.981 [DEBUG] [Thread-2146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:38:16.981 [DEBUG] [Thread-2146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:38:16.981 [DEBUG] [Thread-2146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:38:16.981 [DEBUG] [Thread-2146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:38:16.981 [DEBUG] [Thread-2146] [transport.py] [_log()] client lang: <none>
2025-11-25T16:38:16.981 [DEBUG] [Thread-2146] [transport.py] [_log()] server lang: <none>
2025-11-25T16:38:16.981 [DEBUG] [Thread-2146] [transport.py] [_log()] kex follows: False
2025-11-25T16:38:16.981 [DEBUG] [Thread-2146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:38:16.981 [DEBUG] [Thread-2146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:38:16.982 [DEBUG] [Thread-2146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:38:16.982 [DEBUG] [Thread-2146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:38:16.982 [DEBUG] [Thread-2146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:38:16.982 [DEBUG] [Thread-2146] [transport.py] [_log()] Compression: none
2025-11-25T16:38:16.982 [DEBUG] [Thread-2146] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:38:17.039 [DEBUG] [Thread-2146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:38:17.040 [DEBUG] [Thread-2146] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:38:17.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:38:17.041 [DEBUG] [Thread-2146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:38:17.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:38:17.098 [DEBUG] [Thread-2146] [transport.py] [_log()] userauth is OK
2025-11-25T16:38:17.099 [DEBUG] [Thread-2146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:38:17.099 [DEBUG] [Thread-2146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:38:17.099 [DEBUG] [Thread-2146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:38:17.099 [DEBUG] [Thread-2146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:38:17.118 [INFO] [Thread-2146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:38:17.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:38:17.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:38:17.542 [DEBUG] [Thread-2148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:38:17.925 [DEBUG] [Thread-2146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:38:17.925 [DEBUG] [Thread-2146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:38:17.972 [DEBUG] [Thread-2146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:38:17.972 [DEBUG] [Thread-2146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:38:17.980 [DEBUG] [Thread-2146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:38:17.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:38:17.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:38:17.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:38:18.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:38:18.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:38:18.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:38:18.013 [DEBUG] [Thread-2146] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:38:18.036 [DEBUG] [Thread-2149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:38:32.618 [DEBUG] [Thread-2150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:38:47.659 [DEBUG] [Thread-2151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:38:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:38:48.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:38:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:38:48.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 38, 32), 40.19, 6.49, 0.0, 5.68, 27.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:38:48.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:38:32
2025-11-25T16:38:48.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:38:48.967 [DEBUG] [Thread-2152] [transport.py] [_log()] starting thread (client mode): 0x73780760
2025-11-25T16:38:48.967 [DEBUG] [Thread-2152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:38:48.988 [DEBUG] [Thread-2152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:38:48.988 [INFO] [Thread-2152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:38:48.991 [DEBUG] [Thread-2152] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:38:48.992 [DEBUG] [Thread-2152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:38:48.992 [DEBUG] [Thread-2152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:38:48.992 [DEBUG] [Thread-2152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:38:48.992 [DEBUG] [Thread-2152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:38:48.992 [DEBUG] [Thread-2152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:38:48.992 [DEBUG] [Thread-2152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:38:48.992 [DEBUG] [Thread-2152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:38:48.992 [DEBUG] [Thread-2152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] client lang: <none>
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] server lang: <none>
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] kex follows: False
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] Compression: none
2025-11-25T16:38:48.993 [DEBUG] [Thread-2152] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:38:49.010 [DEBUG] [Thread-2152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:38:49.011 [DEBUG] [Thread-2152] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:38:49.011 [DEBUG] [Thread-2152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:38:49.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:38:49.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:38:49.013 [DEBUG] [Thread-2152] [transport.py] [_log()] userauth is OK
2025-11-25T16:38:49.014 [DEBUG] [Thread-2152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:38:49.014 [DEBUG] [Thread-2152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:38:49.014 [DEBUG] [Thread-2152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:38:49.014 [DEBUG] [Thread-2152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:38:49.037 [INFO] [Thread-2152] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:38:49.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:38:49.658 [DEBUG] [Thread-2152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:38:49.658 [DEBUG] [Thread-2152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:38:49.659 [DEBUG] [Thread-2152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:38:49.699 [DEBUG] [Thread-2152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:38:49.699 [DEBUG] [Thread-2152] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:38:49.702 [DEBUG] [Thread-2152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:38:49.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:38:49.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:38:49.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:38:49.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:38:49.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:38:49.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:38:49.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:38:49.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:38:49.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:38:49.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.609823 -999.00  +27.20  11.79     11   -5.00 1 1 1 1 1   888    0 33.35 34.23 ----- 9.4 11.8 40.4 13.5 33.5 -32.9 33.7 -33.1 35.4 -30.4 35.6 -32.4
2025-11-25T16:38:49.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:38:49.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:38:49.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.609823
2025-11-25T16:38:49.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:38:49.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:38:49.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:38:49.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:38:49.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:38:49.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:38:32', tmtdew=40.19, humidity=6.49, cloud=0.0, wind=5.68, temperature=27.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:38:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:38:49.729 [DEBUG] [Thread-2152] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:38:49.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:38:49.831 [DEBUG] [Thread-2155] [transport.py] [_log()] starting thread (client mode): 0x7374d300
2025-11-25T16:38:49.831 [DEBUG] [Thread-2155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:38:49.846 [DEBUG] [Thread-2155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:38:49.846 [INFO] [Thread-2155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:38:49.856 [DEBUG] [Thread-2155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:38:49.856 [DEBUG] [Thread-2155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:38:49.856 [DEBUG] [Thread-2155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:38:49.856 [DEBUG] [Thread-2155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:38:49.856 [DEBUG] [Thread-2155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:38:49.856 [DEBUG] [Thread-2155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:38:49.857 [DEBUG] [Thread-2155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:38:49.857 [DEBUG] [Thread-2155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:38:49.857 [DEBUG] [Thread-2155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:38:49.857 [DEBUG] [Thread-2155] [transport.py] [_log()] client lang: <none>
2025-11-25T16:38:49.857 [DEBUG] [Thread-2155] [transport.py] [_log()] server lang: <none>
2025-11-25T16:38:49.857 [DEBUG] [Thread-2155] [transport.py] [_log()] kex follows: False
2025-11-25T16:38:49.857 [DEBUG] [Thread-2155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:38:49.857 [DEBUG] [Thread-2155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:38:49.857 [DEBUG] [Thread-2155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:38:49.858 [DEBUG] [Thread-2155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:38:49.858 [DEBUG] [Thread-2155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:38:49.858 [DEBUG] [Thread-2155] [transport.py] [_log()] Compression: none
2025-11-25T16:38:49.858 [DEBUG] [Thread-2155] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:38:49.914 [DEBUG] [Thread-2155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:38:49.915 [DEBUG] [Thread-2155] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:38:49.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:38:49.916 [DEBUG] [Thread-2155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:38:49.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:38:49.971 [DEBUG] [Thread-2155] [transport.py] [_log()] userauth is OK
2025-11-25T16:38:49.971 [DEBUG] [Thread-2155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:38:49.971 [DEBUG] [Thread-2155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:38:49.971 [DEBUG] [Thread-2155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:38:49.971 [DEBUG] [Thread-2155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:38:49.990 [INFO] [Thread-2155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:38:49.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:38:49.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:38:50.882 [DEBUG] [Thread-2155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:38:50.882 [DEBUG] [Thread-2155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:38:50.930 [DEBUG] [Thread-2155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:38:50.930 [DEBUG] [Thread-2155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:38:50.939 [DEBUG] [Thread-2155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:38:50.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:38:50.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:38:50.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:38:50.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:38:50.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:38:50.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:38:50.975 [DEBUG] [Thread-2155] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:39:02.703 [DEBUG] [Thread-2157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:39:17.768 [DEBUG] [Thread-2158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:39:18.774 [DEBUG] [Thread-2159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:39:20.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:39:20.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:39:20.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:39:21.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 39, 4), 40.23, 6.48, 0.0, 5.6, 27.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:39:21.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:39:04
2025-11-25T16:39:21.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:39:21.993 [DEBUG] [Thread-2160] [transport.py] [_log()] starting thread (client mode): 0x7374c3a0
2025-11-25T16:39:21.993 [DEBUG] [Thread-2160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:39:22.013 [DEBUG] [Thread-2160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:39:22.013 [INFO] [Thread-2160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:39:22.016 [DEBUG] [Thread-2160] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] client lang: <none>
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] server lang: <none>
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] kex follows: False
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] Compression: none
2025-11-25T16:39:22.017 [DEBUG] [Thread-2160] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:39:22.032 [DEBUG] [Thread-2160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:39:22.032 [DEBUG] [Thread-2160] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:39:22.032 [DEBUG] [Thread-2160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:39:22.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:39:22.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:39:22.033 [DEBUG] [Thread-2160] [transport.py] [_log()] userauth is OK
2025-11-25T16:39:22.033 [DEBUG] [Thread-2160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:39:22.033 [DEBUG] [Thread-2160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:39:22.033 [DEBUG] [Thread-2160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:39:22.033 [DEBUG] [Thread-2160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:39:22.052 [INFO] [Thread-2160] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:39:22.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:39:22.692 [DEBUG] [Thread-2160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:39:22.693 [DEBUG] [Thread-2160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:39:22.693 [DEBUG] [Thread-2160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:39:22.733 [DEBUG] [Thread-2160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:39:22.734 [DEBUG] [Thread-2160] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:39:22.736 [DEBUG] [Thread-2160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:39:22.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:39:22.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:39:22.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:39:22.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:39:22.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:39:22.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:39:22.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.610170 -999.00  +27.40  10.67     11   -4.80 1 1 1 1 1   888    0 33.07 33.51 ----- 10.8 10.7 59.2 13.6 33.6 -32.5 33.8 -32.7 35.4 -31.6 35.5 -31.6
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.610170
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:39:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:39:04', tmtdew=40.23, humidity=6.48, cloud=0.0, wind=5.6, temperature=27.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:38:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:39:22.755 [DEBUG] [Thread-2160] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:39:22.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:39:22.851 [DEBUG] [Thread-2163] [transport.py] [_log()] starting thread (client mode): 0x73783610
2025-11-25T16:39:22.851 [DEBUG] [Thread-2163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:39:22.866 [DEBUG] [Thread-2163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:39:22.867 [INFO] [Thread-2163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] client lang: <none>
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] server lang: <none>
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] kex follows: False
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:39:22.874 [DEBUG] [Thread-2163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:39:22.875 [DEBUG] [Thread-2163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:39:22.875 [DEBUG] [Thread-2163] [transport.py] [_log()] Compression: none
2025-11-25T16:39:22.875 [DEBUG] [Thread-2163] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:39:22.932 [DEBUG] [Thread-2163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:39:22.933 [DEBUG] [Thread-2163] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:39:22.933 [DEBUG] [Thread-2163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:39:22.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:39:22.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:39:22.990 [DEBUG] [Thread-2163] [transport.py] [_log()] userauth is OK
2025-11-25T16:39:22.991 [DEBUG] [Thread-2163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:39:22.991 [DEBUG] [Thread-2163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:39:22.991 [DEBUG] [Thread-2163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:39:22.991 [DEBUG] [Thread-2163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:39:23.005 [INFO] [Thread-2163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:39:23.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:39:23.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:39:23.834 [DEBUG] [Thread-2163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:39:23.834 [DEBUG] [Thread-2163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:39:23.882 [DEBUG] [Thread-2163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:39:23.882 [DEBUG] [Thread-2163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:39:23.890 [DEBUG] [Thread-2163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:39:23.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:39:23.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:39:23.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:39:23.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:39:23.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:39:23.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:39:23.921 [DEBUG] [Thread-2163] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:39:32.807 [DEBUG] [Thread-2165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:39:47.876 [DEBUG] [Thread-2166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:39:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:39:53.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:39:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:39:54.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 39, 36), 40.12, 6.53, 0.0, 7.06, 28.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:39:54.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:39:36
2025-11-25T16:39:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:39:54.895 [DEBUG] [Thread-2167] [transport.py] [_log()] starting thread (client mode): 0x73782650
2025-11-25T16:39:54.895 [DEBUG] [Thread-2167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:39:54.910 [DEBUG] [Thread-2167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:39:54.910 [INFO] [Thread-2167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] client lang: <none>
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] server lang: <none>
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] kex follows: False
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] Compression: none
2025-11-25T16:39:54.913 [DEBUG] [Thread-2167] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:39:54.930 [DEBUG] [Thread-2167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:39:54.931 [DEBUG] [Thread-2167] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:39:54.931 [DEBUG] [Thread-2167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:39:54.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:39:54.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:39:54.933 [DEBUG] [Thread-2167] [transport.py] [_log()] userauth is OK
2025-11-25T16:39:54.934 [DEBUG] [Thread-2167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:39:54.934 [DEBUG] [Thread-2167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:39:54.934 [DEBUG] [Thread-2167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:39:54.934 [DEBUG] [Thread-2167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:39:54.953 [INFO] [Thread-2167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:39:54.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:39:55.593 [DEBUG] [Thread-2167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:39:55.593 [DEBUG] [Thread-2167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:39:55.593 [DEBUG] [Thread-2167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:39:55.634 [DEBUG] [Thread-2167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:39:55.634 [DEBUG] [Thread-2167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:39:55.637 [DEBUG] [Thread-2167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:39:55.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:39:55.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:39:55.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:39:55.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:39:55.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:39:55.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:39:55.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:39:55.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:39:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:39:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.610517 -999.00  +27.40  12.68     11   -4.90 1 1 1 1 1   888    0 32.85 35.62 ----- 9.4 12.7 53.6 13.8 33.5 -32.6 33.7 -33.3 35.2 -31.5 35.4 -31.9
2025-11-25T16:39:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:39:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:39:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.610517
2025-11-25T16:39:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:39:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:39:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:39:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:39:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:39:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:39:36', tmtdew=40.12, humidity=6.53, cloud=0.0, wind=7.06, temperature=28.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:39:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:39:55.663 [DEBUG] [Thread-2167] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:39:55.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:40:02.919 [DEBUG] [Thread-2170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:40:17.986 [DEBUG] [Thread-2171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:40:19.511 [DEBUG] [Thread-2172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:40:33.035 [DEBUG] [Thread-2173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:40:48.075 [DEBUG] [Thread-2174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:41:03.121 [DEBUG] [Thread-2175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:41:18.167 [DEBUG] [Thread-2176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:41:20.024 [DEBUG] [Thread-2177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:41:33.215 [DEBUG] [Thread-2178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:41:48.259 [DEBUG] [Thread-2179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:42:03.301 [DEBUG] [Thread-2180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:42:07.693 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T16:42:18.349 [DEBUG] [Thread-2181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:42:20.774 [DEBUG] [Thread-2182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:42:33.386 [DEBUG] [Thread-2183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:42:37.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:42:37.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:42:37.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:42:38.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 42, 16), 40.22, 6.18, 0.0, 16.0, 27.5, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:42:38.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:42:16
2025-11-25T16:42:38.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:42:38.654 [DEBUG] [Thread-2184] [transport.py] [_log()] starting thread (client mode): 0x7374f550
2025-11-25T16:42:38.654 [DEBUG] [Thread-2184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:42:38.675 [DEBUG] [Thread-2184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:42:38.676 [INFO] [Thread-2184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:42:38.678 [DEBUG] [Thread-2184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] client lang: <none>
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] server lang: <none>
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] kex follows: False
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:42:38.679 [DEBUG] [Thread-2184] [transport.py] [_log()] Compression: none
2025-11-25T16:42:38.680 [DEBUG] [Thread-2184] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:42:38.697 [DEBUG] [Thread-2184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:42:38.698 [DEBUG] [Thread-2184] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:42:38.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:42:38.699 [DEBUG] [Thread-2184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:42:38.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:42:38.701 [DEBUG] [Thread-2184] [transport.py] [_log()] userauth is OK
2025-11-25T16:42:38.701 [DEBUG] [Thread-2184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:42:38.701 [DEBUG] [Thread-2184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:42:38.701 [DEBUG] [Thread-2184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:42:38.702 [DEBUG] [Thread-2184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:42:38.738 [INFO] [Thread-2184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:42:38.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:42:39.402 [DEBUG] [Thread-2184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:42:39.403 [DEBUG] [Thread-2184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:42:39.403 [DEBUG] [Thread-2184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:42:39.444 [DEBUG] [Thread-2184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:42:39.444 [DEBUG] [Thread-2184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:42:39.448 [DEBUG] [Thread-2184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:42:39.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:42:39.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:42:39.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:42:39.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:42:39.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:42:39.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:42:39.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:42:39.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:42:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:42:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.612601 -999.00  +26.70  21.17     11   -5.40 1 1 1 1 1   888    0 33.32 37.52 ----- 21.2 21.2 322.0 26.4 33.1 -33.4 33.4 -33.2 34.8 -31.3 35.0 -32.2
2025-11-25T16:42:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:42:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:42:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.612601
2025-11-25T16:42:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:42:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:42:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:42:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:42:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:42:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:42:16', tmtdew=40.22, humidity=6.18, cloud=0.0, wind=16.0, temperature=27.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:42:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:42:39.478 [DEBUG] [Thread-2184] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:42:39.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:42:39.587 [DEBUG] [Thread-2187] [transport.py] [_log()] starting thread (client mode): 0x7374ead0
2025-11-25T16:42:39.587 [DEBUG] [Thread-2187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:42:39.602 [DEBUG] [Thread-2187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:42:39.603 [INFO] [Thread-2187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:42:39.610 [DEBUG] [Thread-2187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:42:39.610 [DEBUG] [Thread-2187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] client lang: <none>
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] server lang: <none>
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] kex follows: False
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:42:39.611 [DEBUG] [Thread-2187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:42:39.612 [DEBUG] [Thread-2187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:42:39.612 [DEBUG] [Thread-2187] [transport.py] [_log()] Compression: none
2025-11-25T16:42:39.612 [DEBUG] [Thread-2187] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:42:39.671 [DEBUG] [Thread-2187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:42:39.671 [DEBUG] [Thread-2187] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:42:39.672 [DEBUG] [Thread-2187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:42:39.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:42:39.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:42:39.726 [DEBUG] [Thread-2187] [transport.py] [_log()] userauth is OK
2025-11-25T16:42:39.727 [DEBUG] [Thread-2187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:42:39.727 [DEBUG] [Thread-2187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:42:39.727 [DEBUG] [Thread-2187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:42:39.727 [DEBUG] [Thread-2187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:42:39.745 [INFO] [Thread-2187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:42:39.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:42:39.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:42:40.591 [DEBUG] [Thread-2187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:42:40.591 [DEBUG] [Thread-2187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:42:40.639 [DEBUG] [Thread-2187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:42:40.639 [DEBUG] [Thread-2187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:42:40.648 [DEBUG] [Thread-2187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:42:40.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:42:40.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:42:40.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:42:40.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:42:40.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:42:40.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:42:40.685 [DEBUG] [Thread-2187] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:42:48.432 [DEBUG] [Thread-2189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:43:03.502 [DEBUG] [Thread-2190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:43:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:43:10.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:43:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:43:11.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 42, 48), 39.83, 6.21, 0.0, 11.7, 27.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:43:11.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:42:48
2025-11-25T16:43:11.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:43:11.656 [DEBUG] [Thread-2191] [transport.py] [_log()] starting thread (client mode): 0x7374c3d0
2025-11-25T16:43:11.656 [DEBUG] [Thread-2191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:43:11.676 [DEBUG] [Thread-2191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:43:11.676 [INFO] [Thread-2191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] client lang: <none>
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] server lang: <none>
2025-11-25T16:43:11.679 [DEBUG] [Thread-2191] [transport.py] [_log()] kex follows: False
2025-11-25T16:43:11.680 [DEBUG] [Thread-2191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:43:11.680 [DEBUG] [Thread-2191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:43:11.680 [DEBUG] [Thread-2191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:43:11.680 [DEBUG] [Thread-2191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:43:11.680 [DEBUG] [Thread-2191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:43:11.680 [DEBUG] [Thread-2191] [transport.py] [_log()] Compression: none
2025-11-25T16:43:11.680 [DEBUG] [Thread-2191] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:43:11.697 [DEBUG] [Thread-2191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:43:11.698 [DEBUG] [Thread-2191] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:43:11.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:43:11.698 [DEBUG] [Thread-2191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:43:11.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:43:11.701 [DEBUG] [Thread-2191] [transport.py] [_log()] userauth is OK
2025-11-25T16:43:11.701 [DEBUG] [Thread-2191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:43:11.701 [DEBUG] [Thread-2191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:43:11.701 [DEBUG] [Thread-2191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:43:11.701 [DEBUG] [Thread-2191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:43:11.718 [INFO] [Thread-2191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:43:11.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:43:12.360 [DEBUG] [Thread-2191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:43:12.361 [DEBUG] [Thread-2191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:43:12.361 [DEBUG] [Thread-2191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:43:12.402 [DEBUG] [Thread-2191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:43:12.402 [DEBUG] [Thread-2191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:43:12.405 [DEBUG] [Thread-2191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:43:12.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:43:12.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:43:12.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:43:12.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:43:12.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:43:12.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:43:12.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:43:12.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:43:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:43:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.612948 -999.00  +26.40  14.59     11   -5.50 1 1 1 1 1   888    0 33.05 37.13 ----- 13.4 14.6 320.2 24.5 33.1 -33.4 33.3 -32.9 34.7 -31.3 34.9 -31.9
2025-11-25T16:43:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:43:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:43:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.612948
2025-11-25T16:43:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:43:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:43:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:43:12.431 [DEBUG] [Thread-2191] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:43:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:43:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:43:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:42:48', tmtdew=39.83, humidity=6.21, cloud=0.0, wind=11.7, temperature=27.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:42:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:43:12.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:43:12.538 [DEBUG] [Thread-2194] [transport.py] [_log()] starting thread (client mode): 0x7374e350
2025-11-25T16:43:12.539 [DEBUG] [Thread-2194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:43:12.555 [DEBUG] [Thread-2194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:43:12.555 [INFO] [Thread-2194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:43:12.563 [DEBUG] [Thread-2194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:43:12.563 [DEBUG] [Thread-2194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:43:12.563 [DEBUG] [Thread-2194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:43:12.563 [DEBUG] [Thread-2194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:43:12.563 [DEBUG] [Thread-2194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:43:12.563 [DEBUG] [Thread-2194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:43:12.563 [DEBUG] [Thread-2194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] client lang: <none>
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] server lang: <none>
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] kex follows: False
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] Compression: none
2025-11-25T16:43:12.564 [DEBUG] [Thread-2194] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:43:12.623 [DEBUG] [Thread-2194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:43:12.624 [DEBUG] [Thread-2194] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:43:12.624 [DEBUG] [Thread-2194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:43:12.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:43:12.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:43:12.679 [DEBUG] [Thread-2194] [transport.py] [_log()] userauth is OK
2025-11-25T16:43:12.679 [DEBUG] [Thread-2194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:43:12.679 [DEBUG] [Thread-2194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:43:12.679 [DEBUG] [Thread-2194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:43:12.679 [DEBUG] [Thread-2194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:43:12.698 [INFO] [Thread-2194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:43:12.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:43:12.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:43:13.552 [DEBUG] [Thread-2194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:43:13.552 [DEBUG] [Thread-2194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:43:13.601 [DEBUG] [Thread-2194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:43:13.601 [DEBUG] [Thread-2194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:43:13.610 [DEBUG] [Thread-2194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:43:13.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:43: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')
2025-11-25T16:43: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
2025-11-25T16:43:13.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:43:13.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:43:13.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:43:13.648 [DEBUG] [Thread-2194] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:43:18.548 [DEBUG] [Thread-2196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:43:21.555 [DEBUG] [Thread-2197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:43:33.613 [DEBUG] [Thread-2198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:43:43.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:43:43.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:43:43.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:43:44.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 43, 20), 39.85, 6.19, 0.0, 10.99, 27.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:43:44.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:43:20
2025-11-25T16:43:44.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:43:44.690 [DEBUG] [Thread-2199] [transport.py] [_log()] starting thread (client mode): 0x7374ee30
2025-11-25T16:43:44.690 [DEBUG] [Thread-2199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:43:44.711 [DEBUG] [Thread-2199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:43:44.711 [INFO] [Thread-2199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] client lang: <none>
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] server lang: <none>
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] kex follows: False
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] Compression: none
2025-11-25T16:43:44.714 [DEBUG] [Thread-2199] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:43:44.730 [DEBUG] [Thread-2199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:43:44.730 [DEBUG] [Thread-2199] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:43:44.730 [DEBUG] [Thread-2199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:43:44.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:43:44.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:43:44.731 [DEBUG] [Thread-2199] [transport.py] [_log()] userauth is OK
2025-11-25T16:43:44.731 [DEBUG] [Thread-2199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:43:44.731 [DEBUG] [Thread-2199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:43:44.731 [DEBUG] [Thread-2199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:43:44.731 [DEBUG] [Thread-2199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:43:44.741 [INFO] [Thread-2199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:43:44.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:43:45.374 [DEBUG] [Thread-2199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:43:45.374 [DEBUG] [Thread-2199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:43:45.374 [DEBUG] [Thread-2199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:43:45.415 [DEBUG] [Thread-2199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:43:45.415 [DEBUG] [Thread-2199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:43:45.418 [DEBUG] [Thread-2199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:43:45.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:43:45.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:43:45.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:43:45.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:43:45.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:43:45.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:43:45.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.613295 -999.00  +26.60  20.33     11   -5.40 1 1 1 1 1   888    0 32.93 35.99 ----- 16.9 20.3 328.4 21.3 33.1 -33.2 33.3 -32.5 34.7 -30.7 34.8 -31.6
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.613295
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:43:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:43:45.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:43:20', tmtdew=39.85, humidity=6.19, cloud=0.0, wind=10.99, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:43:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:43:45.438 [DEBUG] [Thread-2199] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:43:45.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:43:45.532 [DEBUG] [Thread-2202] [transport.py] [_log()] starting thread (client mode): 0x7374ff40
2025-11-25T16:43:45.532 [DEBUG] [Thread-2202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:43:45.547 [DEBUG] [Thread-2202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:43:45.547 [INFO] [Thread-2202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:43:45.554 [DEBUG] [Thread-2202] [transport.py] [_log()] client lang: <none>
2025-11-25T16:43:45.555 [DEBUG] [Thread-2202] [transport.py] [_log()] server lang: <none>
2025-11-25T16:43:45.555 [DEBUG] [Thread-2202] [transport.py] [_log()] kex follows: False
2025-11-25T16:43:45.555 [DEBUG] [Thread-2202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:43:45.555 [DEBUG] [Thread-2202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:43:45.555 [DEBUG] [Thread-2202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:43:45.555 [DEBUG] [Thread-2202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:43:45.555 [DEBUG] [Thread-2202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:43:45.555 [DEBUG] [Thread-2202] [transport.py] [_log()] Compression: none
2025-11-25T16:43:45.555 [DEBUG] [Thread-2202] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:43:45.613 [DEBUG] [Thread-2202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:43:45.613 [DEBUG] [Thread-2202] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:43:45.613 [DEBUG] [Thread-2202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:43:45.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:43:45.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:43:45.670 [DEBUG] [Thread-2202] [transport.py] [_log()] userauth is OK
2025-11-25T16:43:45.670 [DEBUG] [Thread-2202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:43:45.670 [DEBUG] [Thread-2202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:43:45.670 [DEBUG] [Thread-2202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:43:45.670 [DEBUG] [Thread-2202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:43:45.684 [INFO] [Thread-2202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:43:45.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:43:45.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:43:46.521 [DEBUG] [Thread-2202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:43:46.521 [DEBUG] [Thread-2202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:43:46.569 [DEBUG] [Thread-2202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:43:46.569 [DEBUG] [Thread-2202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:43:46.578 [DEBUG] [Thread-2202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:43:46.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:43:46.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:43:46.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:43:46.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:43:46.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:43:46.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:43:46.616 [DEBUG] [Thread-2202] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:43:48.655 [DEBUG] [Thread-2204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:44:03.725 [DEBUG] [Thread-2205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:44:16.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:44:16.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:44:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:44:17.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 43, 52), 39.53, 6.71, 0.0, 15.79, 27.04, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:44:17.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:43:52
2025-11-25T16:44:17.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:44:17.595 [DEBUG] [Thread-2206] [transport.py] [_log()] starting thread (client mode): 0x73780f40
2025-11-25T16:44:17.595 [DEBUG] [Thread-2206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:44:17.614 [DEBUG] [Thread-2206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:44:17.614 [INFO] [Thread-2206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:44:17.617 [DEBUG] [Thread-2206] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:44:17.617 [DEBUG] [Thread-2206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:44:17.617 [DEBUG] [Thread-2206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:44:17.617 [DEBUG] [Thread-2206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:44:17.617 [DEBUG] [Thread-2206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:44:17.617 [DEBUG] [Thread-2206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] client lang: <none>
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] server lang: <none>
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] kex follows: False
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] Compression: none
2025-11-25T16:44:17.618 [DEBUG] [Thread-2206] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:44:17.634 [DEBUG] [Thread-2206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:44:17.634 [DEBUG] [Thread-2206] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:44:17.634 [DEBUG] [Thread-2206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:44:17.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:44:17.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:44:17.635 [DEBUG] [Thread-2206] [transport.py] [_log()] userauth is OK
2025-11-25T16:44:17.635 [DEBUG] [Thread-2206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:44:17.635 [DEBUG] [Thread-2206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:44:17.635 [DEBUG] [Thread-2206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:44:17.635 [DEBUG] [Thread-2206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:44:17.651 [INFO] [Thread-2206] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:44:17.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:44:18.307 [DEBUG] [Thread-2206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:44:18.307 [DEBUG] [Thread-2206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:44:18.307 [DEBUG] [Thread-2206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:44:18.348 [DEBUG] [Thread-2206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:44:18.348 [DEBUG] [Thread-2206] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:44:18.351 [DEBUG] [Thread-2206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:44:18.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:44:18.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:44:18.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:44:18.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:44:18.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:44:18.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:44:18.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:44:18.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:44:18.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:44:18.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.613642 -999.00  +26.50  15.05     11   -5.40 1 1 1 1 1   887    0 32.59 33.20 ----- 14.8 15.1 294.8 18.9 33.0 -32.9 33.1 -33.1 34.6 -30.4 34.7 -32.1
2025-11-25T16:44:18.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:44:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:44:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.613642
2025-11-25T16:44:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:44:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:44:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:44:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:44:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:44:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:43:52', tmtdew=39.53, humidity=6.71, cloud=0.0, wind=15.79, temperature=27.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:43:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:44:18.370 [DEBUG] [Thread-2206] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:44:18.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:44:18.464 [DEBUG] [Thread-2209] [transport.py] [_log()] starting thread (client mode): 0x70d0dba0
2025-11-25T16:44:18.464 [DEBUG] [Thread-2209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:44:18.478 [DEBUG] [Thread-2209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:44:18.478 [INFO] [Thread-2209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:44:18.485 [DEBUG] [Thread-2209] [transport.py] [_log()] client lang: <none>
2025-11-25T16:44:18.486 [DEBUG] [Thread-2209] [transport.py] [_log()] server lang: <none>
2025-11-25T16:44:18.486 [DEBUG] [Thread-2209] [transport.py] [_log()] kex follows: False
2025-11-25T16:44:18.486 [DEBUG] [Thread-2209] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:44:18.486 [DEBUG] [Thread-2209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:44:18.486 [DEBUG] [Thread-2209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:44:18.486 [DEBUG] [Thread-2209] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:44:18.486 [DEBUG] [Thread-2209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:44:18.486 [DEBUG] [Thread-2209] [transport.py] [_log()] Compression: none
2025-11-25T16:44:18.486 [DEBUG] [Thread-2209] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:44:18.541 [DEBUG] [Thread-2209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:44:18.541 [DEBUG] [Thread-2209] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:44:18.541 [DEBUG] [Thread-2209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:44:18.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:44:18.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:44:18.602 [DEBUG] [Thread-2209] [transport.py] [_log()] userauth is OK
2025-11-25T16:44:18.602 [DEBUG] [Thread-2209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:44:18.602 [DEBUG] [Thread-2209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:44:18.602 [DEBUG] [Thread-2209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:44:18.602 [DEBUG] [Thread-2209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:44:18.616 [INFO] [Thread-2209] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:44:18.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:44:18.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:44:18.768 [DEBUG] [Thread-2211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:44:19.505 [DEBUG] [Thread-2209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:44:19.506 [DEBUG] [Thread-2209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:44:19.553 [DEBUG] [Thread-2209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:44:19.553 [DEBUG] [Thread-2209] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:44:19.561 [DEBUG] [Thread-2209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:44:19.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:44:19.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:44:19.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:44:19.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:44:19.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:44:19.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:44:19.594 [DEBUG] [Thread-2209] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:44:22.273 [DEBUG] [Thread-2212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:44:33.822 [DEBUG] [Thread-2213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:44:48.865 [DEBUG] [Thread-2214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:44:49.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:44:49.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:44:49.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:44:50.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 44, 24), 39.62, 6.68, 0.0, 11.56, 27.13, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:44:50.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:44:24
2025-11-25T16:44:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:44:50.567 [DEBUG] [Thread-2215] [transport.py] [_log()] starting thread (client mode): 0x7374e920
2025-11-25T16:44:50.568 [DEBUG] [Thread-2215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:44:50.587 [DEBUG] [Thread-2215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:44:50.587 [INFO] [Thread-2215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:44:50.590 [DEBUG] [Thread-2215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:44:50.590 [DEBUG] [Thread-2215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] client lang: <none>
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] server lang: <none>
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] kex follows: False
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] Compression: none
2025-11-25T16:44:50.591 [DEBUG] [Thread-2215] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:44:50.608 [DEBUG] [Thread-2215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:44:50.609 [DEBUG] [Thread-2215] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:44:50.609 [DEBUG] [Thread-2215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:44:50.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:44:50.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:44:50.611 [DEBUG] [Thread-2215] [transport.py] [_log()] userauth is OK
2025-11-25T16:44:50.611 [DEBUG] [Thread-2215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:44:50.611 [DEBUG] [Thread-2215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:44:50.611 [DEBUG] [Thread-2215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:44:50.611 [DEBUG] [Thread-2215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:44:50.635 [INFO] [Thread-2215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:44:50.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:44:51.232 [DEBUG] [Thread-2215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:44:51.232 [DEBUG] [Thread-2215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:44:51.232 [DEBUG] [Thread-2215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:44:51.272 [DEBUG] [Thread-2215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:44:51.272 [DEBUG] [Thread-2215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:44:51.275 [DEBUG] [Thread-2215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:44:51.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:44:51.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:44:51.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:44:51.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:44:51.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:44:51.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:44:51.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:44:51.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:44:51.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:44:51.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.613989 -999.00  +26.40  12.46     11   -5.50 1 1 1 1 1   887    0 33.01 31.63 ----- 11.0 12.5 295.6 16.9 32.9 -33.2 33.2 -32.7 34.4 -32.9 34.6 -31.9
2025-11-25T16:44:51.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:44:51.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:44:51.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.613989
2025-11-25T16:44:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:44:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:44:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:44:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:44:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:44:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:44:24', tmtdew=39.62, humidity=6.68, cloud=0.0, wind=11.56, temperature=27.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:44:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:44:51.299 [DEBUG] [Thread-2215] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:44:51.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:44:51.404 [DEBUG] [Thread-2218] [transport.py] [_log()] starting thread (client mode): 0x7374f4c0
2025-11-25T16:44:51.404 [DEBUG] [Thread-2218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:44:51.419 [DEBUG] [Thread-2218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:44:51.420 [INFO] [Thread-2218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:44:51.427 [DEBUG] [Thread-2218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:44:51.427 [DEBUG] [Thread-2218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:44:51.427 [DEBUG] [Thread-2218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:44:51.427 [DEBUG] [Thread-2218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:44:51.427 [DEBUG] [Thread-2218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:44:51.427 [DEBUG] [Thread-2218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:44:51.427 [DEBUG] [Thread-2218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:44:51.427 [DEBUG] [Thread-2218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:44:51.427 [DEBUG] [Thread-2218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] client lang: <none>
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] server lang: <none>
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] kex follows: False
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] Compression: none
2025-11-25T16:44:51.428 [DEBUG] [Thread-2218] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:44:51.487 [DEBUG] [Thread-2218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:44:51.488 [DEBUG] [Thread-2218] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:44:51.488 [DEBUG] [Thread-2218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:44:51.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:44:51.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:44:51.547 [DEBUG] [Thread-2218] [transport.py] [_log()] userauth is OK
2025-11-25T16:44:51.548 [DEBUG] [Thread-2218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:44:51.548 [DEBUG] [Thread-2218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:44:51.548 [DEBUG] [Thread-2218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:44:51.548 [DEBUG] [Thread-2218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:44:51.570 [INFO] [Thread-2218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:44:51.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:44:51.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:44:52.392 [DEBUG] [Thread-2218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:44:52.392 [DEBUG] [Thread-2218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:44:52.440 [DEBUG] [Thread-2218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:44:52.440 [DEBUG] [Thread-2218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:44:52.449 [DEBUG] [Thread-2218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:44:52.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:44:52.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:44:52.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:44:52.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:44:52.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:44:52.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:44:52.486 [DEBUG] [Thread-2218] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:45:03.909 [DEBUG] [Thread-2220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:45:18.977 [DEBUG] [Thread-2221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:45:22.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:45:22.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:45:22.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:45:22.847 [DEBUG] [Thread-2222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:45:23.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 44, 56), 39.72, 6.69, 0.0, 11.51, 27.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:45:23.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:44:56
2025-11-25T16:45:23.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:45:23.487 [DEBUG] [Thread-2223] [transport.py] [_log()] starting thread (client mode): 0x73782c50
2025-11-25T16:45:23.488 [DEBUG] [Thread-2223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:45:23.509 [DEBUG] [Thread-2223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:45:23.509 [INFO] [Thread-2223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:45:23.512 [DEBUG] [Thread-2223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:45:23.512 [DEBUG] [Thread-2223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:45:23.512 [DEBUG] [Thread-2223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:45:23.512 [DEBUG] [Thread-2223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] client lang: <none>
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] server lang: <none>
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] kex follows: False
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] Compression: none
2025-11-25T16:45:23.513 [DEBUG] [Thread-2223] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:45:23.522 [DEBUG] [Thread-2223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:45:23.523 [DEBUG] [Thread-2223] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:45:23.523 [DEBUG] [Thread-2223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:45:23.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:45:23.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:45:23.525 [DEBUG] [Thread-2223] [transport.py] [_log()] userauth is OK
2025-11-25T16:45:23.526 [DEBUG] [Thread-2223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:45:23.526 [DEBUG] [Thread-2223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:45:23.526 [DEBUG] [Thread-2223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:45:23.526 [DEBUG] [Thread-2223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:45:23.562 [INFO] [Thread-2223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:45:23.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:45:24.212 [DEBUG] [Thread-2223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:45:24.212 [DEBUG] [Thread-2223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:45:24.212 [DEBUG] [Thread-2223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:45:24.253 [DEBUG] [Thread-2223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:45:24.253 [DEBUG] [Thread-2223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:45:24.257 [DEBUG] [Thread-2223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:45:24.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:45:24.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:45:24.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:45:24.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:45:24.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:45:24.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:45:24.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:45:24.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:45:24.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:45:24.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.614337 -999.00  +26.60  13.24     11   -5.30 1 1 1 1 1   887    0 32.42 28.55 ----- 8.0 13.2 287.8 17.3 32.9 -33.5 33.2 -32.0 34.5 -30.7 34.6 -31.7
2025-11-25T16:45:24.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:45:24.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:45:24.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.614337
2025-11-25T16:45:24.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:45:24.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:45:24.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:45:24.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:45:24.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:45:24.284 [DEBUG] [Thread-2223] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:45:24.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:44:56', tmtdew=39.72, humidity=6.69, cloud=0.0, wind=11.51, temperature=27.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:44:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:45:24.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:45:24.387 [DEBUG] [Thread-2226] [transport.py] [_log()] starting thread (client mode): 0x73781ff0
2025-11-25T16:45:24.387 [DEBUG] [Thread-2226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:45:24.402 [DEBUG] [Thread-2226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:45:24.402 [INFO] [Thread-2226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:45:24.409 [DEBUG] [Thread-2226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] client lang: <none>
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] server lang: <none>
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] kex follows: False
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:45:24.410 [DEBUG] [Thread-2226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:45:24.411 [DEBUG] [Thread-2226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:45:24.411 [DEBUG] [Thread-2226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:45:24.411 [DEBUG] [Thread-2226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:45:24.411 [DEBUG] [Thread-2226] [transport.py] [_log()] Compression: none
2025-11-25T16:45:24.411 [DEBUG] [Thread-2226] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:45:24.471 [DEBUG] [Thread-2226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:45:24.472 [DEBUG] [Thread-2226] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:45:24.472 [DEBUG] [Thread-2226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:45:24.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:45:24.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:45:24.535 [DEBUG] [Thread-2226] [transport.py] [_log()] userauth is OK
2025-11-25T16:45:24.535 [DEBUG] [Thread-2226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:45:24.535 [DEBUG] [Thread-2226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:45:24.536 [DEBUG] [Thread-2226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:45:24.536 [DEBUG] [Thread-2226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:45:24.554 [INFO] [Thread-2226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:45:24.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:45:24.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:45:25.436 [DEBUG] [Thread-2226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:45:25.436 [DEBUG] [Thread-2226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:45:25.484 [DEBUG] [Thread-2226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:45:25.484 [DEBUG] [Thread-2226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:45:25.493 [DEBUG] [Thread-2226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:45:25.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:45:25.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:45:25.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:45:25.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:45:25.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:45:25.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:45:25.532 [DEBUG] [Thread-2226] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:45:34.014 [DEBUG] [Thread-2228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:45:49.076 [DEBUG] [Thread-2229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:45:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:45:55.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:45:55.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:45:56.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 45, 28), 39.78, 6.68, 0.0, 11.98, 27.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:45:56.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:45:28
2025-11-25T16:45:56.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:45:56.476 [DEBUG] [Thread-2230] [transport.py] [_log()] starting thread (client mode): 0x7374db70
2025-11-25T16:45:56.476 [DEBUG] [Thread-2230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:45:56.496 [DEBUG] [Thread-2230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:45:56.496 [INFO] [Thread-2230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:45:56.500 [DEBUG] [Thread-2230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:45:56.500 [DEBUG] [Thread-2230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:45:56.500 [DEBUG] [Thread-2230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:45:56.500 [DEBUG] [Thread-2230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:45:56.500 [DEBUG] [Thread-2230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:45:56.501 [DEBUG] [Thread-2230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:45:56.501 [DEBUG] [Thread-2230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:45:56.501 [DEBUG] [Thread-2230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:45:56.501 [DEBUG] [Thread-2230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:45:56.501 [DEBUG] [Thread-2230] [transport.py] [_log()] client lang: <none>
2025-11-25T16:45:56.501 [DEBUG] [Thread-2230] [transport.py] [_log()] server lang: <none>
2025-11-25T16:45:56.501 [DEBUG] [Thread-2230] [transport.py] [_log()] kex follows: False
2025-11-25T16:45:56.501 [DEBUG] [Thread-2230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:45:56.501 [DEBUG] [Thread-2230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:45:56.502 [DEBUG] [Thread-2230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:45:56.502 [DEBUG] [Thread-2230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:45:56.502 [DEBUG] [Thread-2230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:45:56.503 [DEBUG] [Thread-2230] [transport.py] [_log()] Compression: none
2025-11-25T16:45:56.503 [DEBUG] [Thread-2230] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:45:56.522 [DEBUG] [Thread-2230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:45:56.522 [DEBUG] [Thread-2230] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:45:56.523 [DEBUG] [Thread-2230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:45:56.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:45:56.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:45:56.526 [DEBUG] [Thread-2230] [transport.py] [_log()] userauth is OK
2025-11-25T16:45:56.526 [DEBUG] [Thread-2230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:45:56.526 [DEBUG] [Thread-2230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:45:56.526 [DEBUG] [Thread-2230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:45:56.526 [DEBUG] [Thread-2230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:45:56.540 [INFO] [Thread-2230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:45:56.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:45:57.167 [DEBUG] [Thread-2230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:45:57.168 [DEBUG] [Thread-2230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:45:57.168 [DEBUG] [Thread-2230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:45:57.209 [DEBUG] [Thread-2230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:45:57.209 [DEBUG] [Thread-2230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:45:57.212 [DEBUG] [Thread-2230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:45:57.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:45:57.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:45:57.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:45:57.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:45:57.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:45:57.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:45:57.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:45:57.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:45:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:45:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.615031 -999.00  +26.80  10.96     11   -5.20 1 1 1 1 1   887    0 32.37 18.33 ----- 9.6 11.0 284.4 12.3 32.9 -32.8 33.2 -31.9 34.4 -31.0 34.6 -31.6
2025-11-25T16:45:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:45:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:45:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.615031
2025-11-25T16:45:57.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:45:57.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:45:57.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:45:57.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:45:57.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:45:57.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:45:28', tmtdew=39.78, humidity=6.68, cloud=0.0, wind=11.98, temperature=27.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:45:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:45:57.239 [DEBUG] [Thread-2230] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:45:57.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:45:57.343 [DEBUG] [Thread-2233] [transport.py] [_log()] starting thread (client mode): 0x7378fc10
2025-11-25T16:45:57.343 [DEBUG] [Thread-2233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:45:57.358 [DEBUG] [Thread-2233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:45:57.358 [INFO] [Thread-2233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:45:57.366 [DEBUG] [Thread-2233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:45:57.366 [DEBUG] [Thread-2233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:45:57.366 [DEBUG] [Thread-2233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:45:57.366 [DEBUG] [Thread-2233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:45:57.366 [DEBUG] [Thread-2233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:45:57.366 [DEBUG] [Thread-2233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:45:57.366 [DEBUG] [Thread-2233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] client lang: <none>
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] server lang: <none>
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] kex follows: False
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] Compression: none
2025-11-25T16:45:57.367 [DEBUG] [Thread-2233] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:45:57.426 [DEBUG] [Thread-2233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:45:57.427 [DEBUG] [Thread-2233] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:45:57.428 [DEBUG] [Thread-2233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:45:57.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:45:57.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:45:57.483 [DEBUG] [Thread-2233] [transport.py] [_log()] userauth is OK
2025-11-25T16:45:57.483 [DEBUG] [Thread-2233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:45:57.483 [DEBUG] [Thread-2233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:45:57.483 [DEBUG] [Thread-2233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:45:57.484 [DEBUG] [Thread-2233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:45:57.502 [INFO] [Thread-2233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:45:57.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:45:57.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:45:58.347 [DEBUG] [Thread-2233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:45:58.347 [DEBUG] [Thread-2233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:45:58.396 [DEBUG] [Thread-2233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:45:58.396 [DEBUG] [Thread-2233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:45:58.405 [DEBUG] [Thread-2233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:45:58.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:45:58.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:45:58.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:45:58.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:45:58.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:45:58.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:45:58.445 [DEBUG] [Thread-2233] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:46:04.123 [DEBUG] [Thread-2235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:46:19.190 [DEBUG] [Thread-2236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:46:23.526 [DEBUG] [Thread-2237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:46:28.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:46:28.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:46:28.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:46:29.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 46), 39.86, 6.71, 0.0, 13.75, 27.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:46:29.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:46:00
2025-11-25T16:46:29.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:46:29.387 [DEBUG] [Thread-2238] [transport.py] [_log()] starting thread (client mode): 0x7378d570
2025-11-25T16:46:29.387 [DEBUG] [Thread-2238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:46:29.408 [DEBUG] [Thread-2238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:46:29.409 [INFO] [Thread-2238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:46:29.411 [DEBUG] [Thread-2238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] client lang: <none>
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] server lang: <none>
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] kex follows: False
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] Compression: none
2025-11-25T16:46:29.412 [DEBUG] [Thread-2238] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:46:29.434 [DEBUG] [Thread-2238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:46:29.434 [DEBUG] [Thread-2238] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:46:29.435 [DEBUG] [Thread-2238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:46:29.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:46:29.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:46:29.437 [DEBUG] [Thread-2238] [transport.py] [_log()] userauth is OK
2025-11-25T16:46:29.437 [DEBUG] [Thread-2238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:46:29.437 [DEBUG] [Thread-2238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:46:29.437 [DEBUG] [Thread-2238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:46:29.438 [DEBUG] [Thread-2238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:46:29.462 [INFO] [Thread-2238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:46:29.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:46:30.117 [DEBUG] [Thread-2238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:46:30.117 [DEBUG] [Thread-2238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:46:30.118 [DEBUG] [Thread-2238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:46:30.158 [DEBUG] [Thread-2238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:46:30.158 [DEBUG] [Thread-2238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:46:30.161 [DEBUG] [Thread-2238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:46:30.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:46:30.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:46:30.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:46:30.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:46:30.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:46:30.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:46:30.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:46:30.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:46:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:46:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.615378 -999.00  +27.20   8.66     11   -5.10 1 1 1 1 1   887    0 32.37 15.36 ----- 9.1 8.7 352.5 11.6 33.0 -31.9 33.1 -31.8 34.5 -29.4 34.7 -30.6
2025-11-25T16:46:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:46:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:46:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.615378
2025-11-25T16:46:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:46:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:46:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:46:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:46:30.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:46:30.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:46:00', tmtdew=39.86, humidity=6.71, cloud=0.0, wind=13.75, temperature=27.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:46:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:46:30.189 [DEBUG] [Thread-2238] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:46:30.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:46:30.286 [DEBUG] [Thread-2241] [transport.py] [_log()] starting thread (client mode): 0x7374efb0
2025-11-25T16:46:30.287 [DEBUG] [Thread-2241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:46:30.301 [DEBUG] [Thread-2241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:46:30.302 [INFO] [Thread-2241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:46:30.309 [DEBUG] [Thread-2241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:46:30.309 [DEBUG] [Thread-2241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] client lang: <none>
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] server lang: <none>
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] kex follows: False
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:46:30.310 [DEBUG] [Thread-2241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:46:30.311 [DEBUG] [Thread-2241] [transport.py] [_log()] Compression: none
2025-11-25T16:46:30.311 [DEBUG] [Thread-2241] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:46:30.371 [DEBUG] [Thread-2241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:46:30.372 [DEBUG] [Thread-2241] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:46:30.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:46:30.373 [DEBUG] [Thread-2241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:46:30.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:46:30.431 [DEBUG] [Thread-2241] [transport.py] [_log()] userauth is OK
2025-11-25T16:46:30.431 [DEBUG] [Thread-2241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:46:30.431 [DEBUG] [Thread-2241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:46:30.432 [DEBUG] [Thread-2241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:46:30.432 [DEBUG] [Thread-2241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:46:30.450 [INFO] [Thread-2241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:46:30.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:46:30.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:46:31.310 [DEBUG] [Thread-2241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:46:31.310 [DEBUG] [Thread-2241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:46:31.358 [DEBUG] [Thread-2241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:46:31.358 [DEBUG] [Thread-2241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:46:31.367 [DEBUG] [Thread-2241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:46:31.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:46:31.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:46:31.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:46:31.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:46:31.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:46:31.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:46:31.413 [DEBUG] [Thread-2241] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:46:34.230 [DEBUG] [Thread-2243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:46:49.293 [DEBUG] [Thread-2244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:47:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:47:01.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:47:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:47:02.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 46, 32), 39.87, 6.71, 0.0, 10.32, 27.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:47:02.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:46:32
2025-11-25T16:47:02.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:47:02.386 [DEBUG] [Thread-2245] [transport.py] [_log()] starting thread (client mode): 0x70d0f250
2025-11-25T16:47:02.387 [DEBUG] [Thread-2245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:47:02.406 [DEBUG] [Thread-2245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:47:02.407 [INFO] [Thread-2245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:47:02.409 [DEBUG] [Thread-2245] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:47:02.409 [DEBUG] [Thread-2245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:47:02.409 [DEBUG] [Thread-2245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:47:02.409 [DEBUG] [Thread-2245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:47:02.409 [DEBUG] [Thread-2245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:47:02.410 [DEBUG] [Thread-2245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:47:02.410 [DEBUG] [Thread-2245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:47:02.410 [DEBUG] [Thread-2245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:47:02.410 [DEBUG] [Thread-2245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:47:02.410 [DEBUG] [Thread-2245] [transport.py] [_log()] client lang: <none>
2025-11-25T16:47:02.410 [DEBUG] [Thread-2245] [transport.py] [_log()] server lang: <none>
2025-11-25T16:47:02.410 [DEBUG] [Thread-2245] [transport.py] [_log()] kex follows: False
2025-11-25T16:47:02.410 [DEBUG] [Thread-2245] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:47:02.410 [DEBUG] [Thread-2245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:47:02.411 [DEBUG] [Thread-2245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:47:02.411 [DEBUG] [Thread-2245] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:47:02.411 [DEBUG] [Thread-2245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:47:02.411 [DEBUG] [Thread-2245] [transport.py] [_log()] Compression: none
2025-11-25T16:47:02.411 [DEBUG] [Thread-2245] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:47:02.432 [DEBUG] [Thread-2245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:47:02.432 [DEBUG] [Thread-2245] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:47:02.433 [DEBUG] [Thread-2245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:47:02.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:47:02.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:47:02.435 [DEBUG] [Thread-2245] [transport.py] [_log()] userauth is OK
2025-11-25T16:47:02.435 [DEBUG] [Thread-2245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:47:02.435 [DEBUG] [Thread-2245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:47:02.435 [DEBUG] [Thread-2245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:47:02.435 [DEBUG] [Thread-2245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:47:02.460 [INFO] [Thread-2245] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:47:02.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:47:03.073 [DEBUG] [Thread-2245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:47:03.074 [DEBUG] [Thread-2245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:47:03.074 [DEBUG] [Thread-2245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:47:03.115 [DEBUG] [Thread-2245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:47:03.115 [DEBUG] [Thread-2245] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:47:03.118 [DEBUG] [Thread-2245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:47:03.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:47:03.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:47:03.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:47:03.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:47:03.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:47:03.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:47:03.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:47:03.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:47:03.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:47:03.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.615725 -999.00  +27.30   6.92     11   -5.10 1 1 1 1 1   887    0 32.18 12.69 ----- 10.8 6.9 19.4 12.0 32.9 -32.7 33.1 -33.2 34.4 -30.2 34.5 -31.0
2025-11-25T16:47:03.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:47:03.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:47:03.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.615725
2025-11-25T16:47:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:47:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:47:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:47:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:47:03.144 [DEBUG] [Thread-2245] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:47:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:47:03.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:46:32', tmtdew=39.87, humidity=6.71, cloud=0.0, wind=10.32, temperature=27.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:46:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:47:03.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:47:03.248 [DEBUG] [Thread-2248] [transport.py] [_log()] starting thread (client mode): 0x7376e860
2025-11-25T16:47:03.248 [DEBUG] [Thread-2248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:47:03.262 [DEBUG] [Thread-2248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:47:03.262 [INFO] [Thread-2248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:47:03.270 [DEBUG] [Thread-2248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:47:03.270 [DEBUG] [Thread-2248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:47:03.270 [DEBUG] [Thread-2248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:47:03.270 [DEBUG] [Thread-2248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:47:03.270 [DEBUG] [Thread-2248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:47:03.270 [DEBUG] [Thread-2248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:47:03.270 [DEBUG] [Thread-2248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:47:03.270 [DEBUG] [Thread-2248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:47:03.270 [DEBUG] [Thread-2248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] client lang: <none>
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] server lang: <none>
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] kex follows: False
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] Compression: none
2025-11-25T16:47:03.271 [DEBUG] [Thread-2248] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:47:03.332 [DEBUG] [Thread-2248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:47:03.332 [DEBUG] [Thread-2248] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:47:03.333 [DEBUG] [Thread-2248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:47:03.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:47:03.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:47:03.391 [DEBUG] [Thread-2248] [transport.py] [_log()] userauth is OK
2025-11-25T16:47:03.391 [DEBUG] [Thread-2248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:47:03.391 [DEBUG] [Thread-2248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:47:03.391 [DEBUG] [Thread-2248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:47:03.391 [DEBUG] [Thread-2248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:47:03.410 [INFO] [Thread-2248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:47:03.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:47:03.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:47:04.288 [DEBUG] [Thread-2248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:47:04.288 [DEBUG] [Thread-2248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:47:04.335 [DEBUG] [Thread-2248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:47:04.336 [DEBUG] [Thread-2248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:47:04.337 [DEBUG] [Thread-2250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:47:04.345 [DEBUG] [Thread-2248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:47:04.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:47:04.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:47:04.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:47:04.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:47:04.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:47:04.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:47:04.380 [DEBUG] [Thread-2248] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:47:19.404 [DEBUG] [Thread-2251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:47:24.318 [DEBUG] [Thread-2252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:47:34.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:47:34.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:47:34.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:47:34.444 [DEBUG] [Thread-2253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:47:35.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 47, 4), 39.92, 6.69, 0.0, 13.59, 27.65, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:47:35.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:47:04
2025-11-25T16:47:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:47:35.348 [DEBUG] [Thread-2254] [transport.py] [_log()] starting thread (client mode): 0x7374c160
2025-11-25T16:47:35.348 [DEBUG] [Thread-2254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:47:35.369 [DEBUG] [Thread-2254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:47:35.370 [INFO] [Thread-2254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:47:35.373 [DEBUG] [Thread-2254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:47:35.373 [DEBUG] [Thread-2254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:47:35.373 [DEBUG] [Thread-2254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:47:35.373 [DEBUG] [Thread-2254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] client lang: <none>
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] server lang: <none>
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] kex follows: False
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:47:35.374 [DEBUG] [Thread-2254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:47:35.375 [DEBUG] [Thread-2254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:47:35.375 [DEBUG] [Thread-2254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:47:35.375 [DEBUG] [Thread-2254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:47:35.375 [DEBUG] [Thread-2254] [transport.py] [_log()] Compression: none
2025-11-25T16:47:35.375 [DEBUG] [Thread-2254] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:47:35.396 [DEBUG] [Thread-2254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:47:35.397 [DEBUG] [Thread-2254] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:47:35.397 [DEBUG] [Thread-2254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:47:35.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:47:35.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:47:35.399 [DEBUG] [Thread-2254] [transport.py] [_log()] userauth is OK
2025-11-25T16:47:35.400 [DEBUG] [Thread-2254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:47:35.400 [DEBUG] [Thread-2254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:47:35.400 [DEBUG] [Thread-2254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:47:35.400 [DEBUG] [Thread-2254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:47:35.423 [INFO] [Thread-2254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:47:35.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:47:36.073 [DEBUG] [Thread-2254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:47:36.073 [DEBUG] [Thread-2254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:47:36.073 [DEBUG] [Thread-2254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:47:36.114 [DEBUG] [Thread-2254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:47:36.114 [DEBUG] [Thread-2254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:47:36.117 [DEBUG] [Thread-2254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:47:36.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:47:36.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:47:36.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:47:36.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:47:36.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:47:36.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:47:36.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:47:36.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:47:36.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:47:36.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.616073 -999.00  +27.30   5.32     11   -5.00 1 1 1 1 1   887    0 32.50 12.10 ----- 6.0 5.3 32.9 11.8 33.0 -32.4 33.1 -33.2 34.4 -29.5 34.4 -33.4
2025-11-25T16:47:36.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:47:36.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:47:36.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.616073
2025-11-25T16:47:36.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:47:36.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:47:36.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:47:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:47:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:47:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:47:04', tmtdew=39.92, humidity=6.69, cloud=0.0, wind=13.59, temperature=27.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:47:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:47:36.143 [DEBUG] [Thread-2254] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:47:36.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:47:36.248 [DEBUG] [Thread-2257] [transport.py] [_log()] starting thread (client mode): 0x7374e950
2025-11-25T16:47:36.249 [DEBUG] [Thread-2257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:47:36.266 [DEBUG] [Thread-2257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:47:36.267 [INFO] [Thread-2257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:47:36.274 [DEBUG] [Thread-2257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] client lang: <none>
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] server lang: <none>
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] kex follows: False
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:47:36.275 [DEBUG] [Thread-2257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:47:36.276 [DEBUG] [Thread-2257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:47:36.276 [DEBUG] [Thread-2257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:47:36.276 [DEBUG] [Thread-2257] [transport.py] [_log()] Compression: none
2025-11-25T16:47:36.276 [DEBUG] [Thread-2257] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:47:36.341 [DEBUG] [Thread-2257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:47:36.341 [DEBUG] [Thread-2257] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:47:36.342 [DEBUG] [Thread-2257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:47:36.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:47:36.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:47:36.399 [DEBUG] [Thread-2257] [transport.py] [_log()] userauth is OK
2025-11-25T16:47:36.399 [DEBUG] [Thread-2257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:47:36.399 [DEBUG] [Thread-2257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:47:36.399 [DEBUG] [Thread-2257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:47:36.400 [DEBUG] [Thread-2257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:47:36.419 [INFO] [Thread-2257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:47:36.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:47:36.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:47:37.279 [DEBUG] [Thread-2257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:47:37.279 [DEBUG] [Thread-2257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:47:37.327 [DEBUG] [Thread-2257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:47:37.327 [DEBUG] [Thread-2257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:47:37.335 [DEBUG] [Thread-2257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:47:37.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:47:37.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:47:37.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:47:37.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:47:37.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:47:37.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:47:37.367 [DEBUG] [Thread-2257] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:47:49.480 [DEBUG] [Thread-2259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:48:04.552 [DEBUG] [Thread-2260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:48:07.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:48:07.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:48:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:48:08.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 47, 36), 39.79, 6.74, 0.0, 9.99, 27.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:48:08.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:47:36
2025-11-25T16:48:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:48:08.338 [DEBUG] [Thread-2261] [transport.py] [_log()] starting thread (client mode): 0x7374d960
2025-11-25T16:48:08.339 [DEBUG] [Thread-2261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:48:08.359 [DEBUG] [Thread-2261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:48:08.359 [INFO] [Thread-2261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:48:08.362 [DEBUG] [Thread-2261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] client lang: <none>
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] server lang: <none>
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] kex follows: False
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:48:08.363 [DEBUG] [Thread-2261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:48:08.364 [DEBUG] [Thread-2261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:48:08.364 [DEBUG] [Thread-2261] [transport.py] [_log()] Compression: none
2025-11-25T16:48:08.364 [DEBUG] [Thread-2261] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:48:08.381 [DEBUG] [Thread-2261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:48:08.382 [DEBUG] [Thread-2261] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:48:08.382 [DEBUG] [Thread-2261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:48:08.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:48:08.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:48:08.384 [DEBUG] [Thread-2261] [transport.py] [_log()] userauth is OK
2025-11-25T16:48:08.384 [DEBUG] [Thread-2261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:48:08.385 [DEBUG] [Thread-2261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:48:08.385 [DEBUG] [Thread-2261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:48:08.385 [DEBUG] [Thread-2261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:48:08.409 [INFO] [Thread-2261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:48:08.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:48:09.079 [DEBUG] [Thread-2261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:48:09.079 [DEBUG] [Thread-2261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:48:09.079 [DEBUG] [Thread-2261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:48:09.119 [DEBUG] [Thread-2261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:48:09.119 [DEBUG] [Thread-2261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:48:09.121 [DEBUG] [Thread-2261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:48:09.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:48:09.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:48:09.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:48:09.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:48:09.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:48:09.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:48:09.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.616420 -999.00  +27.40   6.09     11   -5.00 1 1 1 1 1   887    0 32.88 10.82 ----- 9.1 6.1 38.6 6.8 33.0 -32.1 33.2 -31.5 34.5 -29.3 34.6 -30.7
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.616420
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:48:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:47:36', tmtdew=39.79, humidity=6.74, cloud=0.0, wind=9.99, temperature=27.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:47:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:48:09.139 [DEBUG] [Thread-2261] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:48:09.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:48:09.234 [DEBUG] [Thread-2264] [transport.py] [_log()] starting thread (client mode): 0x70d0ce80
2025-11-25T16:48:09.234 [DEBUG] [Thread-2264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:48:09.249 [DEBUG] [Thread-2264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:48:09.249 [INFO] [Thread-2264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] client lang: <none>
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] server lang: <none>
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] kex follows: False
2025-11-25T16:48:09.256 [DEBUG] [Thread-2264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:48:09.257 [DEBUG] [Thread-2264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:48:09.257 [DEBUG] [Thread-2264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:48:09.257 [DEBUG] [Thread-2264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:48:09.257 [DEBUG] [Thread-2264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:48:09.257 [DEBUG] [Thread-2264] [transport.py] [_log()] Compression: none
2025-11-25T16:48:09.257 [DEBUG] [Thread-2264] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:48:09.319 [DEBUG] [Thread-2264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:48:09.319 [DEBUG] [Thread-2264] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:48:09.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:48:09.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:48:09.320 [DEBUG] [Thread-2264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:48:09.382 [DEBUG] [Thread-2264] [transport.py] [_log()] userauth is OK
2025-11-25T16:48:09.382 [DEBUG] [Thread-2264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:48:09.383 [DEBUG] [Thread-2264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:48:09.383 [DEBUG] [Thread-2264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:48:09.383 [DEBUG] [Thread-2264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:48:09.399 [INFO] [Thread-2264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:48:09.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:48:09.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:48:10.228 [DEBUG] [Thread-2264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:48:10.228 [DEBUG] [Thread-2264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:48:10.280 [DEBUG] [Thread-2264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:48:10.280 [DEBUG] [Thread-2264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:48:10.291 [DEBUG] [Thread-2264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:48:10.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:48:10.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:48:10.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:48:10.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:48:10.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:48:10.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:48:10.340 [DEBUG] [Thread-2264] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:48:19.599 [DEBUG] [Thread-2266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:48:25.023 [DEBUG] [Thread-2267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:48:34.666 [DEBUG] [Thread-2268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:48:40.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:48:40.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:48:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:48:41.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 48, 8), 39.96, 6.66, 0.0, 15.35, 27.85, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:48:41.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:48:08
2025-11-25T16:48:41.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:48:41.348 [DEBUG] [Thread-2269] [transport.py] [_log()] starting thread (client mode): 0x7376fca0
2025-11-25T16:48:41.348 [DEBUG] [Thread-2269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:48:41.368 [DEBUG] [Thread-2269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:48:41.368 [INFO] [Thread-2269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] client lang: <none>
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] server lang: <none>
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] kex follows: False
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] Compression: none
2025-11-25T16:48:41.372 [DEBUG] [Thread-2269] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:48:41.388 [DEBUG] [Thread-2269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:48:41.388 [DEBUG] [Thread-2269] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:48:41.389 [DEBUG] [Thread-2269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:48:41.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:48:41.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:48:41.390 [DEBUG] [Thread-2269] [transport.py] [_log()] userauth is OK
2025-11-25T16:48:41.390 [DEBUG] [Thread-2269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:48:41.390 [DEBUG] [Thread-2269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:48:41.390 [DEBUG] [Thread-2269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:48:41.390 [DEBUG] [Thread-2269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:48:41.400 [INFO] [Thread-2269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:48:41.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:48:42.000 [DEBUG] [Thread-2269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:48:42.000 [DEBUG] [Thread-2269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:48:42.000 [DEBUG] [Thread-2269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:48:42.041 [DEBUG] [Thread-2269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:48:42.041 [DEBUG] [Thread-2269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:48:42.043 [DEBUG] [Thread-2269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:48:42.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:48:42.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:48:42.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:48:42.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:48:42.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:48:42.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:48:42.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:48:42.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:48:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:48:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.616767 -999.00  +27.20  14.78     11   -5.00 1 1 1 1 1   887    0 32.18 9.89 ----- 13.7 14.8 23.6 18.5 32.9 -33.5 33.1 -33.1 34.4 -30.2 34.6 -31.9
2025-11-25T16:48:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:48:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:48:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.616767
2025-11-25T16:48:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:48:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:48:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:48:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:48:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:48:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:48:08', tmtdew=39.96, humidity=6.66, cloud=0.0, wind=15.35, temperature=27.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:48:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:48:42.061 [DEBUG] [Thread-2269] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:48:42.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:48:42.154 [DEBUG] [Thread-2272] [transport.py] [_log()] starting thread (client mode): 0x737e80d0
2025-11-25T16:48:42.154 [DEBUG] [Thread-2272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:48:42.173 [DEBUG] [Thread-2272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:48:42.174 [INFO] [Thread-2272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] client lang: <none>
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] server lang: <none>
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] kex follows: False
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] Compression: none
2025-11-25T16:48:42.181 [DEBUG] [Thread-2272] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:48:42.237 [DEBUG] [Thread-2272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:48:42.237 [DEBUG] [Thread-2272] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:48:42.237 [DEBUG] [Thread-2272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:48:42.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:48:42.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:48:42.294 [DEBUG] [Thread-2272] [transport.py] [_log()] userauth is OK
2025-11-25T16:48:42.294 [DEBUG] [Thread-2272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:48:42.294 [DEBUG] [Thread-2272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:48:42.294 [DEBUG] [Thread-2272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:48:42.294 [DEBUG] [Thread-2272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:48:42.308 [INFO] [Thread-2272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:48:42.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:48:42.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:48:43.159 [DEBUG] [Thread-2272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:48:43.159 [DEBUG] [Thread-2272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:48:43.207 [DEBUG] [Thread-2272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:48:43.207 [DEBUG] [Thread-2272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:48:43.215 [DEBUG] [Thread-2272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:48:43.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:48:43.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:48:43.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:48:43.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:48:43.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:48:43.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:48:43.247 [DEBUG] [Thread-2272] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:48:49.710 [DEBUG] [Thread-2274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:49:04.780 [DEBUG] [Thread-2275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:49:13.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:49:13.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:49:13.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:49:13.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 48, 40), 39.99, 6.64, 0.0, 12.42, 28.03, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:49:13.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:48:40
2025-11-25T16:49:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:49:14.271 [DEBUG] [Thread-2276] [transport.py] [_log()] starting thread (client mode): 0x737ea710
2025-11-25T16:49:14.271 [DEBUG] [Thread-2276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:49:14.290 [DEBUG] [Thread-2276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:49:14.291 [INFO] [Thread-2276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] client lang: <none>
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] server lang: <none>
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] kex follows: False
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] Compression: none
2025-11-25T16:49:14.294 [DEBUG] [Thread-2276] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:49:14.310 [DEBUG] [Thread-2276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:49:14.310 [DEBUG] [Thread-2276] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:49:14.310 [DEBUG] [Thread-2276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:49:14.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:49:14.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:49:14.311 [DEBUG] [Thread-2276] [transport.py] [_log()] userauth is OK
2025-11-25T16:49:14.311 [DEBUG] [Thread-2276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:49:14.311 [DEBUG] [Thread-2276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:49:14.311 [DEBUG] [Thread-2276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:49:14.311 [DEBUG] [Thread-2276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:49:14.326 [INFO] [Thread-2276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:49:14.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:49:14.968 [DEBUG] [Thread-2276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:49:14.968 [DEBUG] [Thread-2276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:49:14.968 [DEBUG] [Thread-2276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:49:15.009 [DEBUG] [Thread-2276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:49:15.009 [DEBUG] [Thread-2276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:49:15.013 [DEBUG] [Thread-2276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:49:15.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:49:15.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:49:15.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:49:15.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:49:15.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:49:15.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:49:15.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.617114 -999.00  +27.10  14.49     11   -5.00 1 1 1 1 1   887    0 32.23 8.12 ----- 14.0 14.5 36.6 16.8 32.9 -32.6 33.1 -33.1 34.4 -29.9 34.5 -31.6
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.617114
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:49:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:49:15.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:48:40', tmtdew=39.99, humidity=6.64, cloud=0.0, wind=12.42, temperature=28.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:48:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:49:15.033 [DEBUG] [Thread-2276] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:49:15.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:49:15.126 [DEBUG] [Thread-2279] [transport.py] [_log()] starting thread (client mode): 0x7376fcd0
2025-11-25T16:49:15.126 [DEBUG] [Thread-2279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:49:15.141 [DEBUG] [Thread-2279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:49:15.141 [INFO] [Thread-2279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:49:15.148 [DEBUG] [Thread-2279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] client lang: <none>
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] server lang: <none>
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] kex follows: False
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:49:15.149 [DEBUG] [Thread-2279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:49:15.150 [DEBUG] [Thread-2279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:49:15.150 [DEBUG] [Thread-2279] [transport.py] [_log()] Compression: none
2025-11-25T16:49:15.150 [DEBUG] [Thread-2279] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:49:15.206 [DEBUG] [Thread-2279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:49:15.207 [DEBUG] [Thread-2279] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:49:15.208 [DEBUG] [Thread-2279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:49:15.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:49:15.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:49:15.262 [DEBUG] [Thread-2279] [transport.py] [_log()] userauth is OK
2025-11-25T16:49:15.263 [DEBUG] [Thread-2279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:49:15.263 [DEBUG] [Thread-2279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:49:15.263 [DEBUG] [Thread-2279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:49:15.263 [DEBUG] [Thread-2279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:49:15.281 [INFO] [Thread-2279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:49:15.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:49:15.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:49:16.108 [DEBUG] [Thread-2279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:49:16.108 [DEBUG] [Thread-2279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:49:16.156 [DEBUG] [Thread-2279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:49:16.156 [DEBUG] [Thread-2279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:49:16.165 [DEBUG] [Thread-2279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:49:16.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:49:16.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:49:16.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:49:16.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:49:16.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:49:16.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:49:16.200 [DEBUG] [Thread-2279] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:49:19.821 [DEBUG] [Thread-2281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:49:25.514 [DEBUG] [Thread-2282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:49:34.879 [DEBUG] [Thread-2283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:49:46.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:49:46.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:49:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:49:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 49, 12), 40.2, 6.56, 0.0, 12.3, 28.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:49:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:49:12
2025-11-25T16:49:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:49:47.214 [DEBUG] [Thread-2284] [transport.py] [_log()] starting thread (client mode): 0x7374de70
2025-11-25T16:49:47.214 [DEBUG] [Thread-2284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:49:47.236 [DEBUG] [Thread-2284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:49:47.237 [INFO] [Thread-2284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:49:47.240 [DEBUG] [Thread-2284] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:49:47.240 [DEBUG] [Thread-2284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:49:47.240 [DEBUG] [Thread-2284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:49:47.240 [DEBUG] [Thread-2284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:49:47.240 [DEBUG] [Thread-2284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:49:47.240 [DEBUG] [Thread-2284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:49:47.240 [DEBUG] [Thread-2284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:49:47.240 [DEBUG] [Thread-2284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:49:47.240 [DEBUG] [Thread-2284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] client lang: <none>
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] server lang: <none>
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] kex follows: False
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] Compression: none
2025-11-25T16:49:47.241 [DEBUG] [Thread-2284] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:49:47.258 [DEBUG] [Thread-2284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:49:47.259 [DEBUG] [Thread-2284] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:49:47.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:49:47.260 [DEBUG] [Thread-2284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:49:47.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:49:47.261 [DEBUG] [Thread-2284] [transport.py] [_log()] userauth is OK
2025-11-25T16:49:47.262 [DEBUG] [Thread-2284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:49:47.262 [DEBUG] [Thread-2284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:49:47.262 [DEBUG] [Thread-2284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:49:47.262 [DEBUG] [Thread-2284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:49:47.286 [INFO] [Thread-2284] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:49:47.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:49:47.952 [DEBUG] [Thread-2284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:49:47.953 [DEBUG] [Thread-2284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:49:47.953 [DEBUG] [Thread-2284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:49:47.993 [DEBUG] [Thread-2284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:49:47.994 [DEBUG] [Thread-2284] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:49:47.997 [DEBUG] [Thread-2284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:49:48.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:49:48.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:49:48.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:49:48.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:49:48.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:49:48.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:49:48.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:49:48.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:49:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:49:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.617461 -999.00  +27.10  21.73     11   -5.00 1 1 1 1 1   887    0 32.32 5.39 ----- 16.9 21.7 49.2 25.7 32.7 -33.3 33.0 -32.0 34.0 -33.5 34.4 -32.6
2025-11-25T16:49:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:49:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:49:48.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.617461
2025-11-25T16:49:48.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:49:48.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:49:48.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:49:48.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:49:48.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:49:48.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:49:12', tmtdew=40.2, humidity=6.56, cloud=0.0, wind=12.3, temperature=28.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:49:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:49:48.018 [DEBUG] [Thread-2284] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:49:48.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:49:48.124 [DEBUG] [Thread-2287] [transport.py] [_log()] starting thread (client mode): 0x7374c0a0
2025-11-25T16:49:48.124 [DEBUG] [Thread-2287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:49:48.138 [DEBUG] [Thread-2287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:49:48.139 [INFO] [Thread-2287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] client lang: <none>
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] server lang: <none>
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] kex follows: False
2025-11-25T16:49:48.146 [DEBUG] [Thread-2287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:49:48.147 [DEBUG] [Thread-2287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:49:48.147 [DEBUG] [Thread-2287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:49:48.147 [DEBUG] [Thread-2287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:49:48.147 [DEBUG] [Thread-2287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:49:48.147 [DEBUG] [Thread-2287] [transport.py] [_log()] Compression: none
2025-11-25T16:49:48.147 [DEBUG] [Thread-2287] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:49:48.207 [DEBUG] [Thread-2287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:49:48.207 [DEBUG] [Thread-2287] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:49:48.208 [DEBUG] [Thread-2287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:49:48.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:49:48.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:49:48.262 [DEBUG] [Thread-2287] [transport.py] [_log()] userauth is OK
2025-11-25T16:49:48.262 [DEBUG] [Thread-2287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:49:48.263 [DEBUG] [Thread-2287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:49:48.263 [DEBUG] [Thread-2287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:49:48.263 [DEBUG] [Thread-2287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:49:48.285 [INFO] [Thread-2287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:49:48.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:49:48.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:49:49.126 [DEBUG] [Thread-2287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:49:49.127 [DEBUG] [Thread-2287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:49:49.175 [DEBUG] [Thread-2287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:49:49.175 [DEBUG] [Thread-2287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:49:49.184 [DEBUG] [Thread-2287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:49:49.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:49:49.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:49:49.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:49:49.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:49:49.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:49:49.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:49:49.219 [DEBUG] [Thread-2287] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:49:49.922 [DEBUG] [Thread-2289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:50:04.983 [DEBUG] [Thread-2290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:50:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:50:19.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:50:19.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:50:19.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 50, 16), 39.64, 6.76, 0.0, 17.24, 27.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:50:19.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:50:16
2025-11-25T16:50:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:50:20.028 [DEBUG] [Thread-2291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:50:20.181 [DEBUG] [Thread-2292] [transport.py] [_log()] starting thread (client mode): 0x7376e3e0
2025-11-25T16:50:20.181 [DEBUG] [Thread-2292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:50:20.202 [DEBUG] [Thread-2292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:50:20.202 [INFO] [Thread-2292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:50:20.205 [DEBUG] [Thread-2292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:50:20.206 [DEBUG] [Thread-2292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:50:20.206 [DEBUG] [Thread-2292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:50:20.206 [DEBUG] [Thread-2292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:50:20.206 [DEBUG] [Thread-2292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:50:20.206 [DEBUG] [Thread-2292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:50:20.206 [DEBUG] [Thread-2292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:50:20.206 [DEBUG] [Thread-2292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:50:20.206 [DEBUG] [Thread-2292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:50:20.207 [DEBUG] [Thread-2292] [transport.py] [_log()] client lang: <none>
2025-11-25T16:50:20.207 [DEBUG] [Thread-2292] [transport.py] [_log()] server lang: <none>
2025-11-25T16:50:20.207 [DEBUG] [Thread-2292] [transport.py] [_log()] kex follows: False
2025-11-25T16:50:20.207 [DEBUG] [Thread-2292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:50:20.207 [DEBUG] [Thread-2292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:50:20.207 [DEBUG] [Thread-2292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:50:20.207 [DEBUG] [Thread-2292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:50:20.208 [DEBUG] [Thread-2292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:50:20.208 [DEBUG] [Thread-2292] [transport.py] [_log()] Compression: none
2025-11-25T16:50:20.208 [DEBUG] [Thread-2292] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:50:20.226 [DEBUG] [Thread-2292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:50:20.227 [DEBUG] [Thread-2292] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:50:20.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:50:20.228 [DEBUG] [Thread-2292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:50:20.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:50:20.230 [DEBUG] [Thread-2292] [transport.py] [_log()] userauth is OK
2025-11-25T16:50:20.230 [DEBUG] [Thread-2292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:50:20.231 [DEBUG] [Thread-2292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:50:20.231 [DEBUG] [Thread-2292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:50:20.231 [DEBUG] [Thread-2292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:50:20.256 [INFO] [Thread-2292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:50:20.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:50:20.917 [DEBUG] [Thread-2292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:50:20.917 [DEBUG] [Thread-2292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:50:20.918 [DEBUG] [Thread-2292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:50:20.958 [DEBUG] [Thread-2292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:50:20.959 [DEBUG] [Thread-2292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:50:20.961 [DEBUG] [Thread-2292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:50:20.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:50:20.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:50:20.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:50:20.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:50:20.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:50:20.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:50:20.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:50:20.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:50:20.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:50:20.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.617809 -999.00  +27.30  16.07     11   -4.90 1 1 1 1 1   887    0 32.39 2.80 ----- 17.9 16.1 53.0 18.6 32.7 -32.2 32.9 -32.8 34.0 -31.6 34.3 -30.7
2025-11-25T16:50:20.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:50:20.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:50:20.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.617809
2025-11-25T16:50:20.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:50:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:50:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:50:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:50:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:50:20.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:50:16', tmtdew=39.64, humidity=6.76, cloud=0.0, wind=17.24, temperature=27.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:49:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:50:20.989 [DEBUG] [Thread-2292] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:50:21.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:50:21.095 [DEBUG] [Thread-2295] [transport.py] [_log()] starting thread (client mode): 0x737eafe0
2025-11-25T16:50:21.095 [DEBUG] [Thread-2295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:50:21.109 [DEBUG] [Thread-2295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:50:21.110 [INFO] [Thread-2295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:50:21.117 [DEBUG] [Thread-2295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:50:21.117 [DEBUG] [Thread-2295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:50:21.117 [DEBUG] [Thread-2295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:50:21.117 [DEBUG] [Thread-2295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:50:21.117 [DEBUG] [Thread-2295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:50:21.117 [DEBUG] [Thread-2295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] client lang: <none>
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] server lang: <none>
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] kex follows: False
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:50:21.118 [DEBUG] [Thread-2295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:50:21.119 [DEBUG] [Thread-2295] [transport.py] [_log()] Compression: none
2025-11-25T16:50:21.119 [DEBUG] [Thread-2295] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:50:21.174 [DEBUG] [Thread-2295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:50:21.175 [DEBUG] [Thread-2295] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:50:21.175 [DEBUG] [Thread-2295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:50:21.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:50:21.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:50:21.230 [DEBUG] [Thread-2295] [transport.py] [_log()] userauth is OK
2025-11-25T16:50:21.231 [DEBUG] [Thread-2295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:50:21.231 [DEBUG] [Thread-2295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:50:21.231 [DEBUG] [Thread-2295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:50:21.231 [DEBUG] [Thread-2295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:50:21.254 [INFO] [Thread-2295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:50:21.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:50:21.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:50:22.093 [DEBUG] [Thread-2295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:50:22.094 [DEBUG] [Thread-2295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:50:22.142 [DEBUG] [Thread-2295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:50:22.142 [DEBUG] [Thread-2295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:50:22.151 [DEBUG] [Thread-2295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:50:22.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:50:22.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:50:22.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:50:22.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:50:22.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:50:22.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:50:22.189 [DEBUG] [Thread-2295] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:50:26.016 [DEBUG] [Thread-2297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:50:35.064 [DEBUG] [Thread-2298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:50:50.118 [DEBUG] [Thread-2299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:50:52.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:50:52.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:50:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:50:52.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 50, 48), 39.95, 6.64, 0.0, 19.67, 27.78, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:50:52.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:50:48
2025-11-25T16:50:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:50:53.166 [DEBUG] [Thread-2300] [transport.py] [_log()] starting thread (client mode): 0x7374d810
2025-11-25T16:50:53.167 [DEBUG] [Thread-2300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:50:53.186 [DEBUG] [Thread-2300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:50:53.186 [INFO] [Thread-2300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] client lang: <none>
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] server lang: <none>
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] kex follows: False
2025-11-25T16:50:53.189 [DEBUG] [Thread-2300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:50:53.190 [DEBUG] [Thread-2300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:50:53.190 [DEBUG] [Thread-2300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:50:53.190 [DEBUG] [Thread-2300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:50:53.190 [DEBUG] [Thread-2300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:50:53.190 [DEBUG] [Thread-2300] [transport.py] [_log()] Compression: none
2025-11-25T16:50:53.190 [DEBUG] [Thread-2300] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:50:53.199 [DEBUG] [Thread-2300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:50:53.200 [DEBUG] [Thread-2300] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:50:53.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:50:53.201 [DEBUG] [Thread-2300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:50:53.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:50:53.203 [DEBUG] [Thread-2300] [transport.py] [_log()] userauth is OK
2025-11-25T16:50:53.203 [DEBUG] [Thread-2300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:50:53.203 [DEBUG] [Thread-2300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:50:53.204 [DEBUG] [Thread-2300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:50:53.204 [DEBUG] [Thread-2300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:50:53.227 [INFO] [Thread-2300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:50:53.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:50:53.862 [DEBUG] [Thread-2300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:50:53.862 [DEBUG] [Thread-2300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:50:53.863 [DEBUG] [Thread-2300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:50:53.904 [DEBUG] [Thread-2300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:50:53.904 [DEBUG] [Thread-2300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:50:53.907 [DEBUG] [Thread-2300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:50:53.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:50:53.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:50:53.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:50:53.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:50:53.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:50:53.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:50:53.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:50:53.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:50:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:50:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.618503 -999.00  +27.20  13.27     11   -4.90 1 1 1 1 1   887    0 32.34 -0.53 ----- 15.4 13.3 2.8 21.8 32.5 -32.6 32.7 -33.5 33.9 -31.8 33.9 -31.2
2025-11-25T16:50:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:50:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:50:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.618503
2025-11-25T16:50:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:50:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:50:53.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:50:53.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:50:53.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:50:53.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:50:48', tmtdew=39.95, humidity=6.64, cloud=0.0, wind=19.67, temperature=27.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:50:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:50:53.928 [DEBUG] [Thread-2300] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:50:54.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:50:54.032 [DEBUG] [Thread-2303] [transport.py] [_log()] starting thread (client mode): 0x7378f520
2025-11-25T16:50:54.032 [DEBUG] [Thread-2303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:50:54.045 [DEBUG] [Thread-2303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:50:54.045 [INFO] [Thread-2303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:50:54.053 [DEBUG] [Thread-2303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:50:54.053 [DEBUG] [Thread-2303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:50:54.053 [DEBUG] [Thread-2303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:50:54.053 [DEBUG] [Thread-2303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] client lang: <none>
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] server lang: <none>
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] kex follows: False
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] Compression: none
2025-11-25T16:50:54.054 [DEBUG] [Thread-2303] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:50:54.110 [DEBUG] [Thread-2303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:50:54.111 [DEBUG] [Thread-2303] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:50:54.112 [DEBUG] [Thread-2303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:50:54.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:50:54.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:50:54.167 [DEBUG] [Thread-2303] [transport.py] [_log()] userauth is OK
2025-11-25T16:50:54.167 [DEBUG] [Thread-2303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:50:54.167 [DEBUG] [Thread-2303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:50:54.168 [DEBUG] [Thread-2303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:50:54.168 [DEBUG] [Thread-2303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:50:54.185 [INFO] [Thread-2303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:50:54.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:50:54.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:50:55.011 [DEBUG] [Thread-2303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:50:55.012 [DEBUG] [Thread-2303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:50:55.062 [DEBUG] [Thread-2303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:50:55.062 [DEBUG] [Thread-2303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:50:55.075 [DEBUG] [Thread-2303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:50:55.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:50:55.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:50:55.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:50:55.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:50:55.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:50:55.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:50:55.113 [DEBUG] [Thread-2303] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:51:05.161 [DEBUG] [Thread-2305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:51:20.228 [DEBUG] [Thread-2306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:51:25.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:51:25.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:51:25.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:51:25.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 51, 20), 39.81, 6.69, 0.0, 15.35, 27.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:51:25.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:51:20
2025-11-25T16:51:25.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:51:26.055 [DEBUG] [Thread-2307] [transport.py] [_log()] starting thread (client mode): 0x761d8d60
2025-11-25T16:51:26.055 [DEBUG] [Thread-2307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:51:26.068 [DEBUG] [Thread-2307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:51:26.068 [INFO] [Thread-2307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] client lang: <none>
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] server lang: <none>
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] kex follows: False
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] Compression: none
2025-11-25T16:51:26.070 [DEBUG] [Thread-2307] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:51:26.079 [DEBUG] [Thread-2307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:51:26.079 [DEBUG] [Thread-2307] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:51:26.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:51:26.080 [DEBUG] [Thread-2307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:51:26.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:51:26.080 [DEBUG] [Thread-2307] [transport.py] [_log()] userauth is OK
2025-11-25T16:51:26.080 [DEBUG] [Thread-2307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:51:26.080 [DEBUG] [Thread-2307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:51:26.080 [DEBUG] [Thread-2307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:51:26.080 [DEBUG] [Thread-2307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:51:26.090 [INFO] [Thread-2307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:51:26.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:51:26.523 [DEBUG] [Thread-2309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:51:26.747 [DEBUG] [Thread-2307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:51:26.747 [DEBUG] [Thread-2307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:51:26.748 [DEBUG] [Thread-2307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:51:26.789 [DEBUG] [Thread-2307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:51:26.789 [DEBUG] [Thread-2307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:51:26.792 [DEBUG] [Thread-2307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:51:26.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:51:26.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:51:26.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:51:26.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:51:26.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:51:26.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:51:26.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:51:26.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:51:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:51:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.618850 -999.00  +27.10  12.76     11   -5.00 1 1 1 1 1   887    0 31.96 -1.90 ----- 7.5 12.8 340.8 17.7 32.4 -32.3 32.7 -32.2 33.9 -29.6 33.8 -31.3
2025-11-25T16:51:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:51:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:51:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.618850
2025-11-25T16:51:26.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:51:26.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:51:26.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:51:26.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:51:26.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:51:26.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:51:20', tmtdew=39.81, humidity=6.69, cloud=0.0, wind=15.35, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:51:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:51:26.821 [DEBUG] [Thread-2307] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:51:26.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:51:26.925 [DEBUG] [Thread-2311] [transport.py] [_log()] starting thread (client mode): 0x737e8b80
2025-11-25T16:51:26.926 [DEBUG] [Thread-2311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:51:26.940 [DEBUG] [Thread-2311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:51:26.940 [INFO] [Thread-2311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] client lang: <none>
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] server lang: <none>
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] kex follows: False
2025-11-25T16:51:26.948 [DEBUG] [Thread-2311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:51:26.949 [DEBUG] [Thread-2311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:51:26.949 [DEBUG] [Thread-2311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:51:26.949 [DEBUG] [Thread-2311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:51:26.949 [DEBUG] [Thread-2311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:51:26.949 [DEBUG] [Thread-2311] [transport.py] [_log()] Compression: none
2025-11-25T16:51:26.949 [DEBUG] [Thread-2311] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:51:27.008 [DEBUG] [Thread-2311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:51:27.008 [DEBUG] [Thread-2311] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:51:27.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:51:27.010 [DEBUG] [Thread-2311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:51:27.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:51:27.067 [DEBUG] [Thread-2311] [transport.py] [_log()] userauth is OK
2025-11-25T16:51:27.068 [DEBUG] [Thread-2311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:51:27.068 [DEBUG] [Thread-2311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:51:27.068 [DEBUG] [Thread-2311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:51:27.068 [DEBUG] [Thread-2311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:51:27.087 [INFO] [Thread-2311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:51:27.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:51:27.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:51:27.935 [DEBUG] [Thread-2311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:51:27.935 [DEBUG] [Thread-2311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:51:27.984 [DEBUG] [Thread-2311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:51:27.984 [DEBUG] [Thread-2311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:51:27.994 [DEBUG] [Thread-2311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:51:28.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:51:28.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:51:28.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:51:28.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:51:28.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:51:28.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:51:28.030 [DEBUG] [Thread-2311] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:51:35.271 [DEBUG] [Thread-2313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:51:50.339 [DEBUG] [Thread-2314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:51:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:51:58.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:51:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:51:58.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 51, 52), 39.64, 6.31, 0.0, 14.2, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:51:58.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:51:52
2025-11-25T16:51:58.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:51:59.023 [DEBUG] [Thread-2315] [transport.py] [_log()] starting thread (client mode): 0x7376c7f0
2025-11-25T16:51:59.023 [DEBUG] [Thread-2315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:51:59.038 [DEBUG] [Thread-2315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:51:59.038 [INFO] [Thread-2315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:51:59.040 [DEBUG] [Thread-2315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:51:59.040 [DEBUG] [Thread-2315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:51:59.040 [DEBUG] [Thread-2315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] client lang: <none>
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] server lang: <none>
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] kex follows: False
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:51:59.041 [DEBUG] [Thread-2315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:51:59.042 [DEBUG] [Thread-2315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:51:59.042 [DEBUG] [Thread-2315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:51:59.042 [DEBUG] [Thread-2315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:51:59.042 [DEBUG] [Thread-2315] [transport.py] [_log()] Compression: none
2025-11-25T16:51:59.042 [DEBUG] [Thread-2315] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:51:59.058 [DEBUG] [Thread-2315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:51:59.059 [DEBUG] [Thread-2315] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:51:59.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:51:59.059 [DEBUG] [Thread-2315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:51:59.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:51:59.061 [DEBUG] [Thread-2315] [transport.py] [_log()] userauth is OK
2025-11-25T16:51:59.062 [DEBUG] [Thread-2315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:51:59.062 [DEBUG] [Thread-2315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:51:59.062 [DEBUG] [Thread-2315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:51:59.062 [DEBUG] [Thread-2315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:51:59.085 [INFO] [Thread-2315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:51:59.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:51:59.691 [DEBUG] [Thread-2315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:51:59.692 [DEBUG] [Thread-2315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:51:59.692 [DEBUG] [Thread-2315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:51:59.732 [DEBUG] [Thread-2315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:51:59.733 [DEBUG] [Thread-2315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:51:59.736 [DEBUG] [Thread-2315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:51:59.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:51:59.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:51:59.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:51:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:51:59.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:51:59.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:51:59.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:51:59.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:51:59.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:51:59.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.619198 -999.00  +27.30  11.13     11   -4.90 1 1 1 1 1   887    0 32.03 -2.59 ----- 13.5 11.1 348.4 14.4 32.4 -32.1 32.5 -31.8 33.9 -29.3 33.8 -30.2
2025-11-25T16:51:59.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:51:59.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:51:59.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.619198
2025-11-25T16:51:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:51:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:51:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:51:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:51:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:51:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:51:52', tmtdew=39.64, humidity=6.31, cloud=0.0, wind=14.2, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:51:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:51:59.761 [DEBUG] [Thread-2315] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:51:59.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:51:59.865 [DEBUG] [Thread-2318] [transport.py] [_log()] starting thread (client mode): 0x7376ec50
2025-11-25T16:51:59.865 [DEBUG] [Thread-2318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:51:59.879 [DEBUG] [Thread-2318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:51:59.879 [INFO] [Thread-2318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:51:59.886 [DEBUG] [Thread-2318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] client lang: <none>
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] server lang: <none>
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] kex follows: False
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:51:59.887 [DEBUG] [Thread-2318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:51:59.888 [DEBUG] [Thread-2318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:51:59.888 [DEBUG] [Thread-2318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:51:59.888 [DEBUG] [Thread-2318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:51:59.888 [DEBUG] [Thread-2318] [transport.py] [_log()] Compression: none
2025-11-25T16:51:59.888 [DEBUG] [Thread-2318] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:51:59.950 [DEBUG] [Thread-2318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:51:59.950 [DEBUG] [Thread-2318] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:51:59.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:51:59.951 [DEBUG] [Thread-2318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:51:59.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:52:00.006 [DEBUG] [Thread-2318] [transport.py] [_log()] userauth is OK
2025-11-25T16:52:00.006 [DEBUG] [Thread-2318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:52:00.007 [DEBUG] [Thread-2318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:52:00.007 [DEBUG] [Thread-2318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:52:00.007 [DEBUG] [Thread-2318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:52:00.025 [INFO] [Thread-2318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:52:00.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:52:00.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:52:00.852 [DEBUG] [Thread-2318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:52:00.853 [DEBUG] [Thread-2318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:52:00.901 [DEBUG] [Thread-2318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:52:00.901 [DEBUG] [Thread-2318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:52:00.910 [DEBUG] [Thread-2318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:52:00.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:52:00.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:52:00.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:52:00.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:52:00.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:52:00.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:52:00.946 [DEBUG] [Thread-2318] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:52:05.379 [DEBUG] [Thread-2320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:52:20.446 [DEBUG] [Thread-2321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:52:27.276 [DEBUG] [Thread-2322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:52:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:52:30.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:52:30.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:52:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 52, 24), 39.89, 6.19, 0.0, 11.7, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:52:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:52:24
2025-11-25T16:52:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:52:31.869 [DEBUG] [Thread-2323] [transport.py] [_log()] starting thread (client mode): 0x737e8550
2025-11-25T16:52:31.869 [DEBUG] [Thread-2323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:52:31.889 [DEBUG] [Thread-2323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:52:31.889 [INFO] [Thread-2323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:52:31.890 [DEBUG] [Thread-2323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:52:31.890 [DEBUG] [Thread-2323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:52:31.890 [DEBUG] [Thread-2323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:52:31.890 [DEBUG] [Thread-2323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:52:31.890 [DEBUG] [Thread-2323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:52:31.890 [DEBUG] [Thread-2323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:52:31.890 [DEBUG] [Thread-2323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:52:31.890 [DEBUG] [Thread-2323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] client lang: <none>
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] server lang: <none>
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] kex follows: False
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] Compression: none
2025-11-25T16:52:31.891 [DEBUG] [Thread-2323] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:52:31.903 [DEBUG] [Thread-2323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:52:31.904 [DEBUG] [Thread-2323] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:52:31.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:52:31.905 [DEBUG] [Thread-2323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:52:31.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:52:31.907 [DEBUG] [Thread-2323] [transport.py] [_log()] userauth is OK
2025-11-25T16:52:31.907 [DEBUG] [Thread-2323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:52:31.908 [DEBUG] [Thread-2323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:52:31.908 [DEBUG] [Thread-2323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:52:31.908 [DEBUG] [Thread-2323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:52:31.943 [INFO] [Thread-2323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:52:31.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:52:32.500 [DEBUG] [Thread-2323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:52:32.500 [DEBUG] [Thread-2323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:52:32.501 [DEBUG] [Thread-2323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:52:32.541 [DEBUG] [Thread-2323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:52:32.542 [DEBUG] [Thread-2323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:52:32.545 [DEBUG] [Thread-2323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:52:32.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:52:32.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:52:32.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:52:32.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:52:32.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:52:32.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:52:32.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:52:32.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:52:32.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:52:32.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.619545 -999.00  +27.50  16.54     11   -4.90 1 1 1 1 1   887    0 31.80 -2.04 ----- 15.0 16.5 309.8 22.4 32.3 -32.7 32.6 -32.5 33.8 -30.9 33.8 -31.1
2025-11-25T16:52:32.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:52:32.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:52:32.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.619545
2025-11-25T16:52:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:52:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:52:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:52:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:52:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:52:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:52:24', tmtdew=39.89, humidity=6.19, cloud=0.0, wind=11.7, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:52:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:52:32.572 [DEBUG] [Thread-2323] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:52:32.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:52:32.675 [DEBUG] [Thread-2326] [transport.py] [_log()] starting thread (client mode): 0x7376f130
2025-11-25T16:52:32.675 [DEBUG] [Thread-2326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:52:32.689 [DEBUG] [Thread-2326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:52:32.689 [INFO] [Thread-2326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:52:32.697 [DEBUG] [Thread-2326] [transport.py] [_log()] client lang: <none>
2025-11-25T16:52:32.698 [DEBUG] [Thread-2326] [transport.py] [_log()] server lang: <none>
2025-11-25T16:52:32.698 [DEBUG] [Thread-2326] [transport.py] [_log()] kex follows: False
2025-11-25T16:52:32.698 [DEBUG] [Thread-2326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:52:32.698 [DEBUG] [Thread-2326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:52:32.698 [DEBUG] [Thread-2326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:52:32.698 [DEBUG] [Thread-2326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:52:32.698 [DEBUG] [Thread-2326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:52:32.698 [DEBUG] [Thread-2326] [transport.py] [_log()] Compression: none
2025-11-25T16:52:32.698 [DEBUG] [Thread-2326] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:52:32.755 [DEBUG] [Thread-2326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:52:32.756 [DEBUG] [Thread-2326] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:52:32.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:52:32.757 [DEBUG] [Thread-2326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:52:32.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:52:32.811 [DEBUG] [Thread-2326] [transport.py] [_log()] userauth is OK
2025-11-25T16:52:32.811 [DEBUG] [Thread-2326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:52:32.811 [DEBUG] [Thread-2326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:52:32.811 [DEBUG] [Thread-2326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:52:32.812 [DEBUG] [Thread-2326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:52:32.830 [INFO] [Thread-2326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:52:32.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:52:32.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:52:33.647 [DEBUG] [Thread-2326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:52:33.648 [DEBUG] [Thread-2326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:52:33.696 [DEBUG] [Thread-2326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:52:33.696 [DEBUG] [Thread-2326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:52:33.705 [DEBUG] [Thread-2326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:52:33.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:52:33.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:52:33.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:52:33.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:52:33.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:52:33.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:52:33.742 [DEBUG] [Thread-2326] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:52:35.490 [DEBUG] [Thread-2328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:52:50.558 [DEBUG] [Thread-2329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:53:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:53:03.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:53:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:53:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 52, 56), 39.8, 6.24, 0.0, 11.93, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:53:04.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:52:56
2025-11-25T16:53:04.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:53:04.739 [DEBUG] [Thread-2330] [transport.py] [_log()] starting thread (client mode): 0x737c4d60
2025-11-25T16:53:04.739 [DEBUG] [Thread-2330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:53:04.760 [DEBUG] [Thread-2330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:53:04.760 [INFO] [Thread-2330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] client lang: <none>
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] server lang: <none>
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] kex follows: False
2025-11-25T16:53:04.763 [DEBUG] [Thread-2330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:53:04.764 [DEBUG] [Thread-2330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:53:04.764 [DEBUG] [Thread-2330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:53:04.764 [DEBUG] [Thread-2330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:53:04.764 [DEBUG] [Thread-2330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:53:04.764 [DEBUG] [Thread-2330] [transport.py] [_log()] Compression: none
2025-11-25T16:53:04.764 [DEBUG] [Thread-2330] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:53:04.781 [DEBUG] [Thread-2330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:53:04.781 [DEBUG] [Thread-2330] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:53:04.781 [DEBUG] [Thread-2330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:53:04.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:53:04.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:53:04.782 [DEBUG] [Thread-2330] [transport.py] [_log()] userauth is OK
2025-11-25T16:53:04.782 [DEBUG] [Thread-2330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:53:04.782 [DEBUG] [Thread-2330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:53:04.782 [DEBUG] [Thread-2330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:53:04.782 [DEBUG] [Thread-2330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:53:04.795 [INFO] [Thread-2330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:53:04.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:53:05.406 [DEBUG] [Thread-2330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:53:05.406 [DEBUG] [Thread-2330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:53:05.407 [DEBUG] [Thread-2330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:53:05.447 [DEBUG] [Thread-2330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:53:05.447 [DEBUG] [Thread-2330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:53:05.451 [DEBUG] [Thread-2330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:53:05.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:53:05.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:53:05.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:53:05.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:53:05.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:53:05.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:53:05.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:53:05.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:53:05.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:53:05.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.619892 -999.00  +27.60  16.44     11   -5.20 1 1 1 1 1   887    0 31.68 -0.51 ----- 18.5 16.4 317.6 22.2 32.4 -32.7 32.6 -31.9 33.8 -29.6 33.8 -31.2
2025-11-25T16:53:05.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:53:05.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:53:05.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.619892
2025-11-25T16:53:05.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:53:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:53:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:53:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:53:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:53:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:52:56', tmtdew=39.8, humidity=6.24, cloud=0.0, wind=11.93, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:52:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:53:05.479 [DEBUG] [Thread-2330] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:53:05.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:53:05.583 [DEBUG] [Thread-2333] [transport.py] [_log()] starting thread (client mode): 0x737c72e0
2025-11-25T16:53:05.583 [DEBUG] [Thread-2333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:53:05.596 [DEBUG] [Thread-2334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:53:05.597 [DEBUG] [Thread-2333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:53:05.597 [INFO] [Thread-2333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:53:05.604 [DEBUG] [Thread-2333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:53:05.605 [DEBUG] [Thread-2333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:53:05.605 [DEBUG] [Thread-2333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:53:05.605 [DEBUG] [Thread-2333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:53:05.605 [DEBUG] [Thread-2333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:53:05.605 [DEBUG] [Thread-2333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:53:05.605 [DEBUG] [Thread-2333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:53:05.605 [DEBUG] [Thread-2333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:53:05.605 [DEBUG] [Thread-2333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:53:05.606 [DEBUG] [Thread-2333] [transport.py] [_log()] client lang: <none>
2025-11-25T16:53:05.606 [DEBUG] [Thread-2333] [transport.py] [_log()] server lang: <none>
2025-11-25T16:53:05.606 [DEBUG] [Thread-2333] [transport.py] [_log()] kex follows: False
2025-11-25T16:53:05.606 [DEBUG] [Thread-2333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:53:05.606 [DEBUG] [Thread-2333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:53:05.606 [DEBUG] [Thread-2333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:53:05.606 [DEBUG] [Thread-2333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:53:05.608 [DEBUG] [Thread-2333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:53:05.608 [DEBUG] [Thread-2333] [transport.py] [_log()] Compression: none
2025-11-25T16:53:05.608 [DEBUG] [Thread-2333] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:53:05.663 [DEBUG] [Thread-2333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:53:05.663 [DEBUG] [Thread-2333] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:53:05.664 [DEBUG] [Thread-2333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:53:05.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:53:05.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:53:05.719 [DEBUG] [Thread-2333] [transport.py] [_log()] userauth is OK
2025-11-25T16:53:05.719 [DEBUG] [Thread-2333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:53:05.719 [DEBUG] [Thread-2333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:53:05.719 [DEBUG] [Thread-2333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:53:05.719 [DEBUG] [Thread-2333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:53:05.737 [INFO] [Thread-2333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:53:05.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:53:05.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:53:06.633 [DEBUG] [Thread-2333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:53:06.633 [DEBUG] [Thread-2333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:53:06.681 [DEBUG] [Thread-2333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:53:06.681 [DEBUG] [Thread-2333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:53:06.690 [DEBUG] [Thread-2333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:53:06.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:53:06.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:53:06.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:53:06.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:53:06.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:53:06.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:53:06.727 [DEBUG] [Thread-2333] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:53:20.665 [DEBUG] [Thread-2336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:53:28.020 [DEBUG] [Thread-2337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:53:35.708 [DEBUG] [Thread-2338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:53:36.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:53:36.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:53:36.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:53:37.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 53, 28), 39.76, 6.26, 0.0, 11.7, 27.33, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:53:37.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:53:28
2025-11-25T16:53:37.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:53:37.737 [DEBUG] [Thread-2339] [transport.py] [_log()] starting thread (client mode): 0x7376c790
2025-11-25T16:53:37.737 [DEBUG] [Thread-2339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:53:37.757 [DEBUG] [Thread-2339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:53:37.757 [INFO] [Thread-2339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] client lang: <none>
2025-11-25T16:53:37.760 [DEBUG] [Thread-2339] [transport.py] [_log()] server lang: <none>
2025-11-25T16:53:37.761 [DEBUG] [Thread-2339] [transport.py] [_log()] kex follows: False
2025-11-25T16:53:37.761 [DEBUG] [Thread-2339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:53:37.761 [DEBUG] [Thread-2339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:53:37.761 [DEBUG] [Thread-2339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:53:37.761 [DEBUG] [Thread-2339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:53:37.761 [DEBUG] [Thread-2339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:53:37.761 [DEBUG] [Thread-2339] [transport.py] [_log()] Compression: none
2025-11-25T16:53:37.761 [DEBUG] [Thread-2339] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:53:37.775 [DEBUG] [Thread-2339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:53:37.775 [DEBUG] [Thread-2339] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:53:37.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:53:37.776 [DEBUG] [Thread-2339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:53:37.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:53:37.777 [DEBUG] [Thread-2339] [transport.py] [_log()] userauth is OK
2025-11-25T16:53:37.777 [DEBUG] [Thread-2339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:53:37.777 [DEBUG] [Thread-2339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:53:37.777 [DEBUG] [Thread-2339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:53:37.777 [DEBUG] [Thread-2339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:53:37.806 [INFO] [Thread-2339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:53:37.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:53:38.434 [DEBUG] [Thread-2339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:53:38.434 [DEBUG] [Thread-2339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:53:38.434 [DEBUG] [Thread-2339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:53:38.475 [DEBUG] [Thread-2339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:53:38.475 [DEBUG] [Thread-2339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:53:38.477 [DEBUG] [Thread-2339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:53:38.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:53:38.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:53:38.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:53:38.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:53:38.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:53:38.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:53:38.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.620239 -999.00  +27.20  17.06     11   -5.20 1 1 1 1 1   887    0 32.43 1.05 ----- 11.7 17.1 342.4 21.4 32.3 -32.3 32.5 -32.3 33.8 -29.8 33.8 -30.8
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.620239
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:53:38.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:53:28', tmtdew=39.76, humidity=6.26, cloud=0.0, wind=11.7, temperature=27.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:53:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:53:38.507 [DEBUG] [Thread-2339] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:53:38.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:53:38.600 [DEBUG] [Thread-2342] [transport.py] [_log()] starting thread (client mode): 0x761d98a0
2025-11-25T16:53:38.600 [DEBUG] [Thread-2342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:53:38.614 [DEBUG] [Thread-2342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:53:38.615 [INFO] [Thread-2342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] client lang: <none>
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] server lang: <none>
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] kex follows: False
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:53:38.622 [DEBUG] [Thread-2342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:53:38.623 [DEBUG] [Thread-2342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:53:38.623 [DEBUG] [Thread-2342] [transport.py] [_log()] Compression: none
2025-11-25T16:53:38.623 [DEBUG] [Thread-2342] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:53:38.677 [DEBUG] [Thread-2342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:53:38.677 [DEBUG] [Thread-2342] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:53:38.677 [DEBUG] [Thread-2342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:53:38.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:53:38.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:53:38.734 [DEBUG] [Thread-2342] [transport.py] [_log()] userauth is OK
2025-11-25T16:53:38.734 [DEBUG] [Thread-2342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:53:38.734 [DEBUG] [Thread-2342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:53:38.734 [DEBUG] [Thread-2342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:53:38.734 [DEBUG] [Thread-2342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:53:38.752 [INFO] [Thread-2342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:53:38.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:53:38.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:53:39.581 [DEBUG] [Thread-2342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:53:39.581 [DEBUG] [Thread-2342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:53:39.629 [DEBUG] [Thread-2342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:53:39.629 [DEBUG] [Thread-2342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:53:39.638 [DEBUG] [Thread-2342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:53:39.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:53: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')
2025-11-25T16:53:39.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:53:39.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:53:39.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:53:39.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:53:39.670 [DEBUG] [Thread-2342] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:53:50.754 [DEBUG] [Thread-2344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:54:05.821 [DEBUG] [Thread-2345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:54:09.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:54:09.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:54:09.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:54:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 54), 39.74, 6.79, 0.0, 9.16, 27.77, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:54:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:54:00
2025-11-25T16:54:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:54:10.641 [DEBUG] [Thread-2346] [transport.py] [_log()] starting thread (client mode): 0x761db550
2025-11-25T16:54:10.641 [DEBUG] [Thread-2346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:54:10.661 [DEBUG] [Thread-2346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:54:10.661 [INFO] [Thread-2346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:54:10.664 [DEBUG] [Thread-2346] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] client lang: <none>
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] server lang: <none>
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] kex follows: False
2025-11-25T16:54:10.665 [DEBUG] [Thread-2346] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:54:10.666 [DEBUG] [Thread-2346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:54:10.666 [DEBUG] [Thread-2346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:54:10.666 [DEBUG] [Thread-2346] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:54:10.666 [DEBUG] [Thread-2346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:54:10.666 [DEBUG] [Thread-2346] [transport.py] [_log()] Compression: none
2025-11-25T16:54:10.666 [DEBUG] [Thread-2346] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:54:10.683 [DEBUG] [Thread-2346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:54:10.683 [DEBUG] [Thread-2346] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:54:10.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:54:10.684 [DEBUG] [Thread-2346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:54:10.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:54:10.686 [DEBUG] [Thread-2346] [transport.py] [_log()] userauth is OK
2025-11-25T16:54:10.686 [DEBUG] [Thread-2346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:54:10.686 [DEBUG] [Thread-2346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:54:10.686 [DEBUG] [Thread-2346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:54:10.687 [DEBUG] [Thread-2346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:54:10.721 [INFO] [Thread-2346] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:54:10.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:54:11.342 [DEBUG] [Thread-2346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:54:11.342 [DEBUG] [Thread-2346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:54:11.342 [DEBUG] [Thread-2346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:54:11.383 [DEBUG] [Thread-2346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:54:11.383 [DEBUG] [Thread-2346] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:54:11.385 [DEBUG] [Thread-2346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:54:11.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:54:11.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:54:11.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:54:11.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:54:11.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:54:11.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:54:11.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.620586 -999.00  +27.20  10.13     11   -5.20 1 1 1 1 1   887    0 32.50 2.81 ----- 4.5 10.1 355.1 18.3 32.3 -32.0 32.5 -31.8 33.8 -29.8 33.9 -30.9
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.620586
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:54:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:54:00', tmtdew=39.74, humidity=6.79, cloud=0.0, wind=9.16, temperature=27.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:53:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:54:11.404 [DEBUG] [Thread-2346] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:54:11.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:54:11.499 [DEBUG] [Thread-2349] [transport.py] [_log()] starting thread (client mode): 0x73783340
2025-11-25T16:54:11.499 [DEBUG] [Thread-2349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:54:11.513 [DEBUG] [Thread-2349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:54:11.514 [INFO] [Thread-2349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:54:11.521 [DEBUG] [Thread-2349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:54:11.521 [DEBUG] [Thread-2349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:54:11.521 [DEBUG] [Thread-2349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:54:11.521 [DEBUG] [Thread-2349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] client lang: <none>
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] server lang: <none>
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] kex follows: False
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:54:11.522 [DEBUG] [Thread-2349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:54:11.523 [DEBUG] [Thread-2349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:54:11.523 [DEBUG] [Thread-2349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:54:11.523 [DEBUG] [Thread-2349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:54:11.523 [DEBUG] [Thread-2349] [transport.py] [_log()] Compression: none
2025-11-25T16:54:11.523 [DEBUG] [Thread-2349] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:54:11.578 [DEBUG] [Thread-2349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:54:11.578 [DEBUG] [Thread-2349] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:54:11.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:54:11.579 [DEBUG] [Thread-2349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:54:11.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:54:11.634 [DEBUG] [Thread-2349] [transport.py] [_log()] userauth is OK
2025-11-25T16:54:11.634 [DEBUG] [Thread-2349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:54:11.635 [DEBUG] [Thread-2349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:54:11.635 [DEBUG] [Thread-2349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:54:11.635 [DEBUG] [Thread-2349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:54:11.657 [INFO] [Thread-2349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:54:11.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:54:11.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:54:12.472 [DEBUG] [Thread-2349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:54:12.472 [DEBUG] [Thread-2349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:54:12.523 [DEBUG] [Thread-2349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:54:12.523 [DEBUG] [Thread-2349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:54:12.535 [DEBUG] [Thread-2349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:54:12.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:54:12.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:54:12.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:54:12.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:54:12.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:54:12.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:54:12.569 [DEBUG] [Thread-2349] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:54:20.860 [DEBUG] [Thread-2351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:54:28.772 [DEBUG] [Thread-2352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:54:35.924 [DEBUG] [Thread-2353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:54:42.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:54:42.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:54:42.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:54:43.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 54, 32), 39.74, 6.79, 0.0, 12.51, 27.77, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:54:43.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:54:32
2025-11-25T16:54:43.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:54:43.528 [DEBUG] [Thread-2354] [transport.py] [_log()] starting thread (client mode): 0x73781930
2025-11-25T16:54:43.528 [DEBUG] [Thread-2354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:54:43.550 [DEBUG] [Thread-2354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:54:43.550 [INFO] [Thread-2354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:54:43.553 [DEBUG] [Thread-2354] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:54:43.554 [DEBUG] [Thread-2354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:54:43.554 [DEBUG] [Thread-2354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:54:43.554 [DEBUG] [Thread-2354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:54:43.554 [DEBUG] [Thread-2354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:54:43.554 [DEBUG] [Thread-2354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:54:43.554 [DEBUG] [Thread-2354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:54:43.554 [DEBUG] [Thread-2354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:54:43.554 [DEBUG] [Thread-2354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:54:43.554 [DEBUG] [Thread-2354] [transport.py] [_log()] client lang: <none>
2025-11-25T16:54:43.555 [DEBUG] [Thread-2354] [transport.py] [_log()] server lang: <none>
2025-11-25T16:54:43.555 [DEBUG] [Thread-2354] [transport.py] [_log()] kex follows: False
2025-11-25T16:54:43.555 [DEBUG] [Thread-2354] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:54:43.555 [DEBUG] [Thread-2354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:54:43.555 [DEBUG] [Thread-2354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:54:43.555 [DEBUG] [Thread-2354] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:54:43.555 [DEBUG] [Thread-2354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:54:43.555 [DEBUG] [Thread-2354] [transport.py] [_log()] Compression: none
2025-11-25T16:54:43.555 [DEBUG] [Thread-2354] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:54:43.573 [DEBUG] [Thread-2354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:54:43.574 [DEBUG] [Thread-2354] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:54:43.574 [DEBUG] [Thread-2354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:54:43.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:54:43.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:54:43.576 [DEBUG] [Thread-2354] [transport.py] [_log()] userauth is OK
2025-11-25T16:54:43.576 [DEBUG] [Thread-2354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:54:43.576 [DEBUG] [Thread-2354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:54:43.576 [DEBUG] [Thread-2354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:54:43.576 [DEBUG] [Thread-2354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:54:43.600 [INFO] [Thread-2354] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:54:43.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:54:44.261 [DEBUG] [Thread-2354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:54:44.261 [DEBUG] [Thread-2354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:54:44.261 [DEBUG] [Thread-2354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:54:44.302 [DEBUG] [Thread-2354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:54:44.303 [DEBUG] [Thread-2354] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:54:44.305 [DEBUG] [Thread-2354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:54:44.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:54:44.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:54:44.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:54:44.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:54:44.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:54:44.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:54:44.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:54:44.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:54:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:54:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.620934 -999.00  +27.30  17.43     11   -4.90 1 1 1 1 1   887    0 32.52 4.19 ----- 16.9 17.4 308.6 18.8 32.3 -32.1 32.5 -31.7 33.8 -29.5 33.9 -30.7
2025-11-25T16:54:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:54:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:54:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.620934
2025-11-25T16:54:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:54:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:54:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:54:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:54:44.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:54:44.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:54:32', tmtdew=39.74, humidity=6.79, cloud=0.0, wind=12.51, temperature=27.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:54:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:54:44.332 [DEBUG] [Thread-2354] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:54:44.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:54:44.435 [DEBUG] [Thread-2357] [transport.py] [_log()] starting thread (client mode): 0x737eada0
2025-11-25T16:54:44.436 [DEBUG] [Thread-2357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:54:44.450 [DEBUG] [Thread-2357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:54:44.450 [INFO] [Thread-2357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] client lang: <none>
2025-11-25T16:54:44.458 [DEBUG] [Thread-2357] [transport.py] [_log()] server lang: <none>
2025-11-25T16:54:44.459 [DEBUG] [Thread-2357] [transport.py] [_log()] kex follows: False
2025-11-25T16:54:44.459 [DEBUG] [Thread-2357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:54:44.459 [DEBUG] [Thread-2357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:54:44.459 [DEBUG] [Thread-2357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:54:44.459 [DEBUG] [Thread-2357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:54:44.459 [DEBUG] [Thread-2357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:54:44.459 [DEBUG] [Thread-2357] [transport.py] [_log()] Compression: none
2025-11-25T16:54:44.459 [DEBUG] [Thread-2357] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:54:44.513 [DEBUG] [Thread-2357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:54:44.514 [DEBUG] [Thread-2357] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:54:44.514 [DEBUG] [Thread-2357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:54:44.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:54:44.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:54:44.571 [DEBUG] [Thread-2357] [transport.py] [_log()] userauth is OK
2025-11-25T16:54:44.571 [DEBUG] [Thread-2357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:54:44.571 [DEBUG] [Thread-2357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:54:44.571 [DEBUG] [Thread-2357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:54:44.571 [DEBUG] [Thread-2357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:54:44.589 [INFO] [Thread-2357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:54:44.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:54:44.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:54:45.395 [DEBUG] [Thread-2357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:54:45.395 [DEBUG] [Thread-2357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:54:45.442 [DEBUG] [Thread-2357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:54:45.443 [DEBUG] [Thread-2357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:54:45.452 [DEBUG] [Thread-2357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:54:45.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:54:45.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:54:45.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:54:45.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:54:45.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:54:45.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:54:45.487 [DEBUG] [Thread-2357] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:54:50.968 [DEBUG] [Thread-2359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:55:06.026 [DEBUG] [Thread-2360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:55:15.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:55:15.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:55:15.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:55:16.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 55, 4), 39.68, 6.84, 0.0, 10.54, 27.88, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:55:16.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:55:04
2025-11-25T16:55:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:55:16.450 [DEBUG] [Thread-2361] [transport.py] [_log()] starting thread (client mode): 0x7378c2e0
2025-11-25T16:55:16.451 [DEBUG] [Thread-2361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:55:16.472 [DEBUG] [Thread-2361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:55:16.472 [INFO] [Thread-2361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:55:16.473 [DEBUG] [Thread-2361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:55:16.473 [DEBUG] [Thread-2361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:55:16.473 [DEBUG] [Thread-2361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] client lang: <none>
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] server lang: <none>
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] kex follows: False
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] Compression: none
2025-11-25T16:55:16.474 [DEBUG] [Thread-2361] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:55:16.486 [DEBUG] [Thread-2361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:55:16.487 [DEBUG] [Thread-2361] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:55:16.487 [DEBUG] [Thread-2361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:55:16.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:55:16.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:55:16.490 [DEBUG] [Thread-2361] [transport.py] [_log()] userauth is OK
2025-11-25T16:55:16.490 [DEBUG] [Thread-2361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:55:16.490 [DEBUG] [Thread-2361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:55:16.490 [DEBUG] [Thread-2361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:55:16.490 [DEBUG] [Thread-2361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:55:16.526 [INFO] [Thread-2361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:55:16.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:55:17.154 [DEBUG] [Thread-2361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:55:17.155 [DEBUG] [Thread-2361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:55:17.155 [DEBUG] [Thread-2361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:55:17.196 [DEBUG] [Thread-2361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:55:17.196 [DEBUG] [Thread-2361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:55:17.199 [DEBUG] [Thread-2361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:55:17.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:55:17.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:55:17.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:55:17.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:55:17.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:55:17.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:55:17.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:55:17.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:55:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:55:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.621281 -999.00  +27.30  16.68     11   -4.90 1 1 1 1 1   887    0 32.19 4.77 ----- 14.9 16.7 306.4 19.4 32.3 -32.6 32.5 -31.8 33.7 -30.2 33.9 -31.3
2025-11-25T16:55:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:55:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:55:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.621281
2025-11-25T16:55:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:55:17.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:55:17.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:55:17.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:55:17.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:55:17.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:55:04', tmtdew=39.68, humidity=6.84, cloud=0.0, wind=10.54, temperature=27.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:54:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:55:17.220 [DEBUG] [Thread-2361] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:55:17.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:55:17.322 [DEBUG] [Thread-2364] [transport.py] [_log()] starting thread (client mode): 0x761dab30
2025-11-25T16:55:17.322 [DEBUG] [Thread-2364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:55:17.336 [DEBUG] [Thread-2364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:55:17.336 [INFO] [Thread-2364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] client lang: <none>
2025-11-25T16:55:17.344 [DEBUG] [Thread-2364] [transport.py] [_log()] server lang: <none>
2025-11-25T16:55:17.345 [DEBUG] [Thread-2364] [transport.py] [_log()] kex follows: False
2025-11-25T16:55:17.345 [DEBUG] [Thread-2364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:55:17.345 [DEBUG] [Thread-2364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:55:17.345 [DEBUG] [Thread-2364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:55:17.345 [DEBUG] [Thread-2364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:55:17.345 [DEBUG] [Thread-2364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:55:17.345 [DEBUG] [Thread-2364] [transport.py] [_log()] Compression: none
2025-11-25T16:55:17.345 [DEBUG] [Thread-2364] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:55:17.403 [DEBUG] [Thread-2364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:55:17.403 [DEBUG] [Thread-2364] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:55:17.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:55:17.404 [DEBUG] [Thread-2364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:55:17.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:55:17.459 [DEBUG] [Thread-2364] [transport.py] [_log()] userauth is OK
2025-11-25T16:55:17.459 [DEBUG] [Thread-2364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:55:17.459 [DEBUG] [Thread-2364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:55:17.459 [DEBUG] [Thread-2364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:55:17.459 [DEBUG] [Thread-2364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:55:17.477 [INFO] [Thread-2364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:55:17.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:55:17.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:55:18.275 [DEBUG] [Thread-2364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:55:18.275 [DEBUG] [Thread-2364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:55:18.324 [DEBUG] [Thread-2364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:55:18.324 [DEBUG] [Thread-2364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:55:18.333 [DEBUG] [Thread-2364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:55:18.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:55:18.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:55:18.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:55:18.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:55:18.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:55:18.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:55:18.367 [DEBUG] [Thread-2364] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:55:21.069 [DEBUG] [Thread-2366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:55:29.302 [DEBUG] [Thread-2367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:55:36.138 [DEBUG] [Thread-2368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:55:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:55:48.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:55:48.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:55:49.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 55, 36), 39.91, 6.23, 0.0, 9.12, 27.58, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:55:49.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:55:36
2025-11-25T16:55:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:55:49.326 [DEBUG] [Thread-2369] [transport.py] [_log()] starting thread (client mode): 0x737837c0
2025-11-25T16:55:49.326 [DEBUG] [Thread-2369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:55:49.342 [DEBUG] [Thread-2369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:55:49.342 [INFO] [Thread-2369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:55:49.345 [DEBUG] [Thread-2369] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:55:49.345 [DEBUG] [Thread-2369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:55:49.345 [DEBUG] [Thread-2369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:55:49.345 [DEBUG] [Thread-2369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:55:49.345 [DEBUG] [Thread-2369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:55:49.345 [DEBUG] [Thread-2369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:55:49.345 [DEBUG] [Thread-2369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] client lang: <none>
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] server lang: <none>
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] kex follows: False
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] Compression: none
2025-11-25T16:55:49.346 [DEBUG] [Thread-2369] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:55:49.363 [DEBUG] [Thread-2369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:55:49.363 [DEBUG] [Thread-2369] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:55:49.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:55:49.364 [DEBUG] [Thread-2369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:55:49.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:55:49.366 [DEBUG] [Thread-2369] [transport.py] [_log()] userauth is OK
2025-11-25T16:55:49.367 [DEBUG] [Thread-2369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:55:49.367 [DEBUG] [Thread-2369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:55:49.367 [DEBUG] [Thread-2369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:55:49.367 [DEBUG] [Thread-2369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:55:49.391 [INFO] [Thread-2369] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:55:49.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:55:50.051 [DEBUG] [Thread-2369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:55:50.052 [DEBUG] [Thread-2369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:55:50.052 [DEBUG] [Thread-2369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:55:50.093 [DEBUG] [Thread-2369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:55:50.093 [DEBUG] [Thread-2369] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:55:50.097 [DEBUG] [Thread-2369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:55:50.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:55:50.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:55:50.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:55:50.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:55:50.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:55:50.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:55:50.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:55:50.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:55:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:55:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.621975 -999.00  +27.40   9.09     11   -5.00 1 1 1 1 1   887    0 32.25 7.98 ----- 12.3 9.1 19.8 16.0 32.2 -32.5 32.5 -31.7 33.7 -30.1 33.8 -30.7
2025-11-25T16:55:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:55:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:55:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.621975
2025-11-25T16:55:50.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:55:50.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:55:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:55:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:55:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:55:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:55:36', tmtdew=39.91, humidity=6.23, cloud=0.0, wind=9.12, temperature=27.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:55:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:55:50.123 [DEBUG] [Thread-2369] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:55:50.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:55:50.226 [DEBUG] [Thread-2372] [transport.py] [_log()] starting thread (client mode): 0x73782ef0
2025-11-25T16:55:50.227 [DEBUG] [Thread-2372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:55:50.242 [DEBUG] [Thread-2372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:55:50.242 [INFO] [Thread-2372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:55:50.249 [DEBUG] [Thread-2372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:55:50.249 [DEBUG] [Thread-2372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:55:50.249 [DEBUG] [Thread-2372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] client lang: <none>
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] server lang: <none>
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] kex follows: False
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:55:50.250 [DEBUG] [Thread-2372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:55:50.251 [DEBUG] [Thread-2372] [transport.py] [_log()] Compression: none
2025-11-25T16:55:50.251 [DEBUG] [Thread-2372] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:55:50.306 [DEBUG] [Thread-2372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:55:50.307 [DEBUG] [Thread-2372] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:55:50.307 [DEBUG] [Thread-2372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:55:50.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:55:50.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:55:50.363 [DEBUG] [Thread-2372] [transport.py] [_log()] userauth is OK
2025-11-25T16:55:50.363 [DEBUG] [Thread-2372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:55:50.363 [DEBUG] [Thread-2372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:55:50.363 [DEBUG] [Thread-2372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:55:50.364 [DEBUG] [Thread-2372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:55:50.382 [INFO] [Thread-2372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:55:50.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:55:50.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:55:51.179 [DEBUG] [Thread-2372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:55:51.180 [DEBUG] [Thread-2372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:55:51.184 [DEBUG] [Thread-2374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:55:51.228 [DEBUG] [Thread-2372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:55:51.228 [DEBUG] [Thread-2372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:55:51.237 [DEBUG] [Thread-2372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:55:51.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:55:51.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T16:55:51.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:55:51.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:55:51.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:55:51.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:55:51.274 [DEBUG] [Thread-2372] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:56:06.251 [DEBUG] [Thread-2375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:56:21.293 [DEBUG] [Thread-2376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:56:21.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:56:21.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:56: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
2025-11-25T16:56:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 56, 8), 40.05, 6.16, 0.0, 12.16, 27.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:56:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:56:08
2025-11-25T16:56:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:56:22.249 [DEBUG] [Thread-2377] [transport.py] [_log()] starting thread (client mode): 0x737e9720
2025-11-25T16:56:22.249 [DEBUG] [Thread-2377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:56:22.269 [DEBUG] [Thread-2377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:56:22.269 [INFO] [Thread-2377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:56:22.272 [DEBUG] [Thread-2377] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:56:22.272 [DEBUG] [Thread-2377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:56:22.273 [DEBUG] [Thread-2377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:56:22.273 [DEBUG] [Thread-2377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:56:22.273 [DEBUG] [Thread-2377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:56:22.273 [DEBUG] [Thread-2377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:56:22.273 [DEBUG] [Thread-2377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:56:22.273 [DEBUG] [Thread-2377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:56:22.273 [DEBUG] [Thread-2377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:56:22.273 [DEBUG] [Thread-2377] [transport.py] [_log()] client lang: <none>
2025-11-25T16:56:22.273 [DEBUG] [Thread-2377] [transport.py] [_log()] server lang: <none>
2025-11-25T16:56:22.274 [DEBUG] [Thread-2377] [transport.py] [_log()] kex follows: False
2025-11-25T16:56:22.274 [DEBUG] [Thread-2377] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:56:22.274 [DEBUG] [Thread-2377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:56:22.274 [DEBUG] [Thread-2377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:56:22.274 [DEBUG] [Thread-2377] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:56:22.274 [DEBUG] [Thread-2377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:56:22.274 [DEBUG] [Thread-2377] [transport.py] [_log()] Compression: none
2025-11-25T16:56:22.274 [DEBUG] [Thread-2377] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:56:22.291 [DEBUG] [Thread-2377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:56:22.291 [DEBUG] [Thread-2377] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:56:22.292 [DEBUG] [Thread-2377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:56:22.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:56:22.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:56:22.334 [DEBUG] [Thread-2377] [transport.py] [_log()] userauth is OK
2025-11-25T16:56:22.334 [DEBUG] [Thread-2377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:56:22.334 [DEBUG] [Thread-2377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:56:22.334 [DEBUG] [Thread-2377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:56:22.334 [DEBUG] [Thread-2377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:56:22.370 [INFO] [Thread-2377] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:56:22.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:56:23.013 [DEBUG] [Thread-2377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:56:23.013 [DEBUG] [Thread-2377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:56:23.013 [DEBUG] [Thread-2377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:56:23.056 [DEBUG] [Thread-2377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:56:23.056 [DEBUG] [Thread-2377] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:56:23.059 [DEBUG] [Thread-2377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:56:23.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:56:23.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:56:23.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:56:23.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:56:23.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:56:23.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:56:23.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:56:23.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:56:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:56:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.622323 -999.00  +27.10  12.04     11   -5.10 1 1 1 1 1   887    0 32.28 8.94 ----- 12.3 12.0 31.2 15.6 32.2 -31.8 32.4 -32.6 33.7 -29.7 33.8 -31.1
2025-11-25T16:56:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:56:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:56:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.622323
2025-11-25T16:56:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:56:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:56:23.081 [DEBUG] [Thread-2377] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:56:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:56:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:56:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:56:23.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:56:08', tmtdew=40.05, humidity=6.16, cloud=0.0, wind=12.16, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:56:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:56:23.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:56:23.182 [DEBUG] [Thread-2380] [transport.py] [_log()] starting thread (client mode): 0x737ea380
2025-11-25T16:56:23.182 [DEBUG] [Thread-2380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:56:23.197 [DEBUG] [Thread-2380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:56:23.197 [INFO] [Thread-2380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:56:23.204 [DEBUG] [Thread-2380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] client lang: <none>
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] server lang: <none>
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] kex follows: False
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:56:23.205 [DEBUG] [Thread-2380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:56:23.206 [DEBUG] [Thread-2380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:56:23.206 [DEBUG] [Thread-2380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:56:23.206 [DEBUG] [Thread-2380] [transport.py] [_log()] Compression: none
2025-11-25T16:56:23.206 [DEBUG] [Thread-2380] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:56:23.265 [DEBUG] [Thread-2380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:56:23.265 [DEBUG] [Thread-2380] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:56:23.266 [DEBUG] [Thread-2380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:56:23.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:56:23.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:56:23.322 [DEBUG] [Thread-2380] [transport.py] [_log()] userauth is OK
2025-11-25T16:56:23.323 [DEBUG] [Thread-2380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:56:23.323 [DEBUG] [Thread-2380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:56:23.323 [DEBUG] [Thread-2380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:56:23.323 [DEBUG] [Thread-2380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:56:23.347 [INFO] [Thread-2380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:56:23.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:56:23.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:56:24.168 [DEBUG] [Thread-2380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:56:24.168 [DEBUG] [Thread-2380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:56:24.215 [DEBUG] [Thread-2380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:56:24.215 [DEBUG] [Thread-2380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:56:24.224 [DEBUG] [Thread-2380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:56:24.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:56: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')
2025-11-25T16:56: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
2025-11-25T16:56:24.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:56:24.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:56:24.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:56:24.258 [DEBUG] [Thread-2380] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:56:30.014 [DEBUG] [Thread-2382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:56:36.336 [DEBUG] [Thread-2383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:56:51.402 [DEBUG] [Thread-2384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:56:54.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:56:54.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:56:54.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:56:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 56, 40), 40.02, 6.16, 0.0, 15.62, 27.7, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:56:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:56:40
2025-11-25T16:56:55.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:56:55.194 [DEBUG] [Thread-2385] [transport.py] [_log()] starting thread (client mode): 0x7376f160
2025-11-25T16:56:55.194 [DEBUG] [Thread-2385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:56:55.214 [DEBUG] [Thread-2385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:56:55.214 [INFO] [Thread-2385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:56:55.217 [DEBUG] [Thread-2385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] client lang: <none>
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] server lang: <none>
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] kex follows: False
2025-11-25T16:56:55.218 [DEBUG] [Thread-2385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:56:55.219 [DEBUG] [Thread-2385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:56:55.219 [DEBUG] [Thread-2385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:56:55.219 [DEBUG] [Thread-2385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:56:55.219 [DEBUG] [Thread-2385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:56:55.219 [DEBUG] [Thread-2385] [transport.py] [_log()] Compression: none
2025-11-25T16:56:55.219 [DEBUG] [Thread-2385] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:56:55.237 [DEBUG] [Thread-2385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:56:55.238 [DEBUG] [Thread-2385] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:56:55.238 [DEBUG] [Thread-2385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:56:55.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:56:55.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:56:55.240 [DEBUG] [Thread-2385] [transport.py] [_log()] userauth is OK
2025-11-25T16:56:55.240 [DEBUG] [Thread-2385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:56:55.240 [DEBUG] [Thread-2385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:56:55.240 [DEBUG] [Thread-2385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:56:55.240 [DEBUG] [Thread-2385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:56:55.275 [INFO] [Thread-2385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:56:55.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:56:55.920 [DEBUG] [Thread-2385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:56:55.920 [DEBUG] [Thread-2385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:56:55.921 [DEBUG] [Thread-2385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:56:55.962 [DEBUG] [Thread-2385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:56:55.962 [DEBUG] [Thread-2385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:56:55.965 [DEBUG] [Thread-2385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:56:55.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:56:55.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:56:55.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:56:55.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:56:55.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:56:55.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:56:55.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:56:55.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:56:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:56:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.622670 -999.00  +27.40  14.22     11   -4.90 1 1 1 1 1   887    0 32.99 10.11 ----- 14.3 14.2 303.4 19.1 32.2 -32.7 32.4 -31.7 33.6 -30.6 33.8 -30.9
2025-11-25T16:56:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:56:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:56:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.622670
2025-11-25T16:56:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:56:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:56:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:56:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:56:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:56:55.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:56:40', tmtdew=40.02, humidity=6.16, cloud=0.0, wind=15.62, temperature=27.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:56:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:56:55.993 [DEBUG] [Thread-2385] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:56:56.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:56:56.100 [DEBUG] [Thread-2388] [transport.py] [_log()] starting thread (client mode): 0x737eacb0
2025-11-25T16:56:56.100 [DEBUG] [Thread-2388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:56:56.120 [DEBUG] [Thread-2388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T16:56:56.120 [INFO] [Thread-2388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T16:56:56.130 [DEBUG] [Thread-2388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:56:56.130 [DEBUG] [Thread-2388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T16:56:56.130 [DEBUG] [Thread-2388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:56:56.130 [DEBUG] [Thread-2388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:56:56.130 [DEBUG] [Thread-2388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:56:56.130 [DEBUG] [Thread-2388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] client lang: <none>
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] server lang: <none>
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] kex follows: False
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:56:56.131 [DEBUG] [Thread-2388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:56:56.132 [DEBUG] [Thread-2388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:56:56.132 [DEBUG] [Thread-2388] [transport.py] [_log()] Compression: none
2025-11-25T16:56:56.132 [DEBUG] [Thread-2388] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:56:56.191 [DEBUG] [Thread-2388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:56:56.191 [DEBUG] [Thread-2388] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:56:56.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T16:56:56.192 [DEBUG] [Thread-2388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T16:56:56.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:56:56.247 [DEBUG] [Thread-2388] [transport.py] [_log()] userauth is OK
2025-11-25T16:56:56.247 [DEBUG] [Thread-2388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:56:56.247 [DEBUG] [Thread-2388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:56:56.248 [DEBUG] [Thread-2388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T16:56:56.248 [DEBUG] [Thread-2388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:56:56.268 [INFO] [Thread-2388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:56:56.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T16:56:56.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:56:57.097 [DEBUG] [Thread-2388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:56:57.097 [DEBUG] [Thread-2388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:56:57.145 [DEBUG] [Thread-2388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:56:57.145 [DEBUG] [Thread-2388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:56:57.154 [DEBUG] [Thread-2388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:56:57.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:56: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')
2025-11-25T16:56:57.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T16:56:57.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:56:57.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:56:57.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:56:57.197 [DEBUG] [Thread-2388] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:57:06.451 [DEBUG] [Thread-2390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:57:21.515 [DEBUG] [Thread-2391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:57:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T16:57:27.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T16:57:27.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T16:57:27.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 57, 12), 40.08, 6.13, 0.0, 15.07, 27.67, 0, 0, 0, 2, 0, 0),)
2025-11-25T16:57:27.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:57:12
2025-11-25T16:57:28.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T16:57:28.164 [DEBUG] [Thread-2392] [transport.py] [_log()] starting thread (client mode): 0x761dbe80
2025-11-25T16:57:28.164 [DEBUG] [Thread-2392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T16:57:28.186 [DEBUG] [Thread-2392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T16:57:28.186 [INFO] [Thread-2392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T16:57:28.188 [DEBUG] [Thread-2392] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T16:57:28.188 [DEBUG] [Thread-2392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T16:57:28.188 [DEBUG] [Thread-2392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T16:57:28.188 [DEBUG] [Thread-2392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:57:28.188 [DEBUG] [Thread-2392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T16:57:28.188 [DEBUG] [Thread-2392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:57:28.189 [DEBUG] [Thread-2392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T16:57:28.189 [DEBUG] [Thread-2392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T16:57:28.189 [DEBUG] [Thread-2392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T16:57:28.189 [DEBUG] [Thread-2392] [transport.py] [_log()] client lang: <none>
2025-11-25T16:57:28.189 [DEBUG] [Thread-2392] [transport.py] [_log()] server lang: <none>
2025-11-25T16:57:28.189 [DEBUG] [Thread-2392] [transport.py] [_log()] kex follows: False
2025-11-25T16:57:28.189 [DEBUG] [Thread-2392] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T16:57:28.189 [DEBUG] [Thread-2392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T16:57:28.189 [DEBUG] [Thread-2392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T16:57:28.190 [DEBUG] [Thread-2392] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T16:57:28.190 [DEBUG] [Thread-2392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T16:57:28.190 [DEBUG] [Thread-2392] [transport.py] [_log()] Compression: none
2025-11-25T16:57:28.190 [DEBUG] [Thread-2392] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T16:57:28.200 [DEBUG] [Thread-2392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T16:57:28.201 [DEBUG] [Thread-2392] [transport.py] [_log()] Switch to new keys ...
2025-11-25T16:57:28.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T16:57:28.203 [DEBUG] [Thread-2392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T16:57:28.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T16:57:28.205 [DEBUG] [Thread-2392] [transport.py] [_log()] userauth is OK
2025-11-25T16:57:28.205 [DEBUG] [Thread-2392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T16:57:28.205 [DEBUG] [Thread-2392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T16:57:28.206 [DEBUG] [Thread-2392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T16:57:28.206 [DEBUG] [Thread-2392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T16:57:28.226 [INFO] [Thread-2392] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T16:57:28.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T16:57:28.888 [DEBUG] [Thread-2392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T16:57:28.888 [DEBUG] [Thread-2392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T16:57:28.889 [DEBUG] [Thread-2392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T16:57:28.929 [DEBUG] [Thread-2392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T16:57:28.929 [DEBUG] [Thread-2392] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T16:57:28.933 [DEBUG] [Thread-2392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T16:57:28.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T16:57:28.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T16:57:28.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T16:57:28.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T16:57:28.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T16:57:28.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T16:57:28.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T16:57:28.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T16:57:28.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T16:57:28.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.623017 -999.00  +27.30  14.61     11   -5.10 1 1 1 1 1   887    0 32.48 11.38 ----- 14.8 14.6 323.2 19.6 32.2 -32.2 32.4 -31.3 33.7 -30.0 33.8 -30.8
2025-11-25T16:57:28.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T16:57:28.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T16:57:28.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.623017
2025-11-25T16:57:28.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T16:57:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T16:57:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T16:57:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T16:57:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T16:57:28.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:57:12', tmtdew=40.08, humidity=6.13, cloud=0.0, wind=15.07, temperature=27.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:57:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T16:57:28.964 [DEBUG] [Thread-2392] [transport.py] [_log()] EOF in transport thread
2025-11-25T16:57:29.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T16:57:30.516 [DEBUG] [Thread-2395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:57:36.557 [DEBUG] [Thread-2396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:57:51.626 [DEBUG] [Thread-2397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:58:06.673 [DEBUG] [Thread-2398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:58:21.720 [DEBUG] [Thread-2399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:58:31.279 [DEBUG] [Thread-2400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:58:36.763 [DEBUG] [Thread-2401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:58:51.802 [DEBUG] [Thread-2402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:59:06.852 [DEBUG] [Thread-2403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:59:21.891 [DEBUG] [Thread-2404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:59:32.020 [DEBUG] [Thread-2405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:59:36.935 [DEBUG] [Thread-2406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T16:59:44.461 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T16:59:51.978 [DEBUG] [Thread-2407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:00:07.021 [DEBUG] [Thread-2408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:00:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:00:14.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:00:14.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:00:15.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 16, 59, 52), 39.47, 6.76, 0.0, 9.56, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:00:15.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 16:59:52
2025-11-25T17:00:15.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:00:15.410 [DEBUG] [Thread-2409] [transport.py] [_log()] starting thread (client mode): 0x761d9990
2025-11-25T17:00:15.410 [DEBUG] [Thread-2409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:00:15.430 [DEBUG] [Thread-2409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:00:15.431 [INFO] [Thread-2409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:00:15.434 [DEBUG] [Thread-2409] [transport.py] [_log()] client lang: <none>
2025-11-25T17:00:15.435 [DEBUG] [Thread-2409] [transport.py] [_log()] server lang: <none>
2025-11-25T17:00:15.435 [DEBUG] [Thread-2409] [transport.py] [_log()] kex follows: False
2025-11-25T17:00:15.435 [DEBUG] [Thread-2409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:00:15.435 [DEBUG] [Thread-2409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:00:15.435 [DEBUG] [Thread-2409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:00:15.435 [DEBUG] [Thread-2409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:00:15.435 [DEBUG] [Thread-2409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:00:15.435 [DEBUG] [Thread-2409] [transport.py] [_log()] Compression: none
2025-11-25T17:00:15.435 [DEBUG] [Thread-2409] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:00:15.454 [DEBUG] [Thread-2409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:00:15.454 [DEBUG] [Thread-2409] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:00:15.455 [DEBUG] [Thread-2409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:00:15.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:00:15.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:00:15.457 [DEBUG] [Thread-2409] [transport.py] [_log()] userauth is OK
2025-11-25T17:00:15.457 [DEBUG] [Thread-2409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:00:15.457 [DEBUG] [Thread-2409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:00:15.457 [DEBUG] [Thread-2409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:00:15.457 [DEBUG] [Thread-2409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:00:15.481 [INFO] [Thread-2409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:00:15.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:00:16.050 [DEBUG] [Thread-2409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:00:16.051 [DEBUG] [Thread-2409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:00:16.051 [DEBUG] [Thread-2409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:00:16.092 [DEBUG] [Thread-2409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:00:16.092 [DEBUG] [Thread-2409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:00:16.096 [DEBUG] [Thread-2409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:00:16.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:00:16.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:00:16.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:00:16.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:00:16.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:00:16.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:00:16.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:00:16.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:00:16.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:00:16.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.624753 -999.00  +27.30   8.90     11   -4.90 1 1 1 1 1   887    0 31.98 11.54 ----- 10.3 8.9 299.0 16.4 32.3 -31.9 32.6 -31.4 33.7 -30.0 33.9 -31.2
2025-11-25T17:00:16.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:00:16.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:00:16.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.624753
2025-11-25T17:00:16.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:00:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:00:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:00:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:00:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:00:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T16:59:52', tmtdew=39.47, humidity=6.76, cloud=0.0, wind=9.56, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T14:59:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:00:16.125 [DEBUG] [Thread-2409] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:00:16.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:00:16.230 [DEBUG] [Thread-2412] [transport.py] [_log()] starting thread (client mode): 0x70d0d090
2025-11-25T17:00:16.230 [DEBUG] [Thread-2412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:00:16.245 [DEBUG] [Thread-2412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:00:16.245 [INFO] [Thread-2412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:00:16.253 [DEBUG] [Thread-2412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:00:16.253 [DEBUG] [Thread-2412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:00:16.253 [DEBUG] [Thread-2412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:00:16.253 [DEBUG] [Thread-2412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:00:16.253 [DEBUG] [Thread-2412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:00:16.253 [DEBUG] [Thread-2412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:00:16.254 [DEBUG] [Thread-2412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:00:16.254 [DEBUG] [Thread-2412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:00:16.254 [DEBUG] [Thread-2412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:00:16.254 [DEBUG] [Thread-2412] [transport.py] [_log()] client lang: <none>
2025-11-25T17:00:16.254 [DEBUG] [Thread-2412] [transport.py] [_log()] server lang: <none>
2025-11-25T17:00:16.254 [DEBUG] [Thread-2412] [transport.py] [_log()] kex follows: False
2025-11-25T17:00:16.254 [DEBUG] [Thread-2412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:00:16.254 [DEBUG] [Thread-2412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:00:16.254 [DEBUG] [Thread-2412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:00:16.255 [DEBUG] [Thread-2412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:00:16.255 [DEBUG] [Thread-2412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:00:16.255 [DEBUG] [Thread-2412] [transport.py] [_log()] Compression: none
2025-11-25T17:00:16.255 [DEBUG] [Thread-2412] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:00:16.310 [DEBUG] [Thread-2412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:00:16.311 [DEBUG] [Thread-2412] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:00:16.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:00:16.312 [DEBUG] [Thread-2412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:00:16.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:00:16.367 [DEBUG] [Thread-2412] [transport.py] [_log()] userauth is OK
2025-11-25T17:00:16.367 [DEBUG] [Thread-2412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:00:16.367 [DEBUG] [Thread-2412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:00:16.367 [DEBUG] [Thread-2412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:00:16.368 [DEBUG] [Thread-2412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:00:16.386 [INFO] [Thread-2412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:00:16.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:00:16.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:00:17.205 [DEBUG] [Thread-2412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:00:17.206 [DEBUG] [Thread-2412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:00:17.253 [DEBUG] [Thread-2412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:00:17.253 [DEBUG] [Thread-2412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:00:17.262 [DEBUG] [Thread-2412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:00:17.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:00:17.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:00:17.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:00:17.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:00:17.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:00:17.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:00:17.296 [DEBUG] [Thread-2412] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:00:22.069 [DEBUG] [Thread-2414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:00:32.766 [DEBUG] [Thread-2415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:00:37.134 [DEBUG] [Thread-2416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:00:47.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:00:47.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:00:47.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:00:47.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 0, 25), 39.34, 6.81, 0.0, 7.73, 26.92, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:00:47.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:00:25
2025-11-25T17:00:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:00:48.261 [DEBUG] [Thread-2417] [transport.py] [_log()] starting thread (client mode): 0x7374fb50
2025-11-25T17:00:48.261 [DEBUG] [Thread-2417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:00:48.280 [DEBUG] [Thread-2417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:00:48.280 [INFO] [Thread-2417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:00:48.282 [DEBUG] [Thread-2417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:00:48.282 [DEBUG] [Thread-2417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:00:48.282 [DEBUG] [Thread-2417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:00:48.282 [DEBUG] [Thread-2417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:00:48.282 [DEBUG] [Thread-2417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:00:48.282 [DEBUG] [Thread-2417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] client lang: <none>
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] server lang: <none>
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] kex follows: False
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:00:48.283 [DEBUG] [Thread-2417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:00:48.284 [DEBUG] [Thread-2417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:00:48.284 [DEBUG] [Thread-2417] [transport.py] [_log()] Compression: none
2025-11-25T17:00:48.284 [DEBUG] [Thread-2417] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:00:48.294 [DEBUG] [Thread-2417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:00:48.295 [DEBUG] [Thread-2417] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:00:48.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:00:48.296 [DEBUG] [Thread-2417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:00:48.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:00:48.298 [DEBUG] [Thread-2417] [transport.py] [_log()] userauth is OK
2025-11-25T17:00:48.298 [DEBUG] [Thread-2417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:00:48.298 [DEBUG] [Thread-2417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:00:48.298 [DEBUG] [Thread-2417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:00:48.298 [DEBUG] [Thread-2417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:00:48.310 [INFO] [Thread-2417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:00:48.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:00:48.909 [DEBUG] [Thread-2417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:00:48.909 [DEBUG] [Thread-2417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:00:48.910 [DEBUG] [Thread-2417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:00:48.950 [DEBUG] [Thread-2417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:00:48.950 [DEBUG] [Thread-2417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:00:48.953 [DEBUG] [Thread-2417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:00:48.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:00:48.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:00:48.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:00:48.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:00:48.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:00:48.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:00:48.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:00:48.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:00:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:00:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.625448 -999.00  +26.80   9.85     11   -5.20 1 1 1 1 1   887    0 32.31 10.96 ----- 6.8 9.8 296.0 16.0 32.2 -32.4 32.5 -32.2 33.6 -29.7 33.8 -31.6
2025-11-25T17:00:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:00:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:00:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.625448
2025-11-25T17:00:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:00:48.972 [DEBUG] [Thread-2417] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:00:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:00:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:00:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:00:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:00:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:00:25', tmtdew=39.34, humidity=6.81, cloud=0.0, wind=7.73, temperature=26.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:00:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:00:49.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:00:49.084 [DEBUG] [Thread-2420] [transport.py] [_log()] starting thread (client mode): 0x7374c4f0
2025-11-25T17:00:49.084 [DEBUG] [Thread-2420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:00:49.099 [DEBUG] [Thread-2420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:00:49.100 [INFO] [Thread-2420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:00:49.107 [DEBUG] [Thread-2420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:00:49.107 [DEBUG] [Thread-2420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:00:49.107 [DEBUG] [Thread-2420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:00:49.107 [DEBUG] [Thread-2420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:00:49.107 [DEBUG] [Thread-2420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:00:49.107 [DEBUG] [Thread-2420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] client lang: <none>
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] server lang: <none>
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] kex follows: False
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] Compression: none
2025-11-25T17:00:49.108 [DEBUG] [Thread-2420] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:00:49.169 [DEBUG] [Thread-2420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:00:49.170 [DEBUG] [Thread-2420] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:00:49.170 [DEBUG] [Thread-2420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:00:49.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:00:49.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:00:49.226 [DEBUG] [Thread-2420] [transport.py] [_log()] userauth is OK
2025-11-25T17:00:49.226 [DEBUG] [Thread-2420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:00:49.226 [DEBUG] [Thread-2420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:00:49.226 [DEBUG] [Thread-2420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:00:49.227 [DEBUG] [Thread-2420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:00:49.249 [INFO] [Thread-2420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:00:49.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:00:49.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:00:50.100 [DEBUG] [Thread-2420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:00:50.100 [DEBUG] [Thread-2420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:00:50.150 [DEBUG] [Thread-2420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:00:50.150 [DEBUG] [Thread-2420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:00:50.162 [DEBUG] [Thread-2420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:00:50.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:00: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')
2025-11-25T17:00:50.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:00:50.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:00:50.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:00:50.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:00:50.203 [DEBUG] [Thread-2420] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:00:52.177 [DEBUG] [Thread-2422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:01:07.249 [DEBUG] [Thread-2423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:01:20.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:01:20.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:01:20.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:01:20.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 0, 57), 39.1, 6.86, 0.0, 4.54, 26.92, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:01:20.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:00:57
2025-11-25T17:01:21.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:01:21.184 [DEBUG] [Thread-2424] [transport.py] [_log()] starting thread (client mode): 0x7376d810
2025-11-25T17:01:21.185 [DEBUG] [Thread-2424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:01:21.204 [DEBUG] [Thread-2424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:01:21.204 [INFO] [Thread-2424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:01:21.207 [DEBUG] [Thread-2424] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:01:21.207 [DEBUG] [Thread-2424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:01:21.207 [DEBUG] [Thread-2424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:01:21.207 [DEBUG] [Thread-2424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:01:21.207 [DEBUG] [Thread-2424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:01:21.207 [DEBUG] [Thread-2424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] client lang: <none>
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] server lang: <none>
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] kex follows: False
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] Compression: none
2025-11-25T17:01:21.208 [DEBUG] [Thread-2424] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:01:21.223 [DEBUG] [Thread-2424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:01:21.224 [DEBUG] [Thread-2424] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:01:21.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:01:21.225 [DEBUG] [Thread-2424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:01:21.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:01:21.266 [DEBUG] [Thread-2424] [transport.py] [_log()] userauth is OK
2025-11-25T17:01:21.266 [DEBUG] [Thread-2424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:01:21.266 [DEBUG] [Thread-2424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:01:21.266 [DEBUG] [Thread-2424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:01:21.266 [DEBUG] [Thread-2424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:01:21.302 [INFO] [Thread-2424] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:01:21.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:01:21.920 [DEBUG] [Thread-2424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:01:21.920 [DEBUG] [Thread-2424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:01:21.920 [DEBUG] [Thread-2424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:01:21.961 [DEBUG] [Thread-2424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:01:21.961 [DEBUG] [Thread-2424] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:01:21.963 [DEBUG] [Thread-2424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:01:21.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:01:21.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:01:21.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:01:21.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:01:21.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:01:21.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:01:21.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:01:21.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:01:21.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:01:21.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.625448 -999.00  +26.80   9.85     11   -5.20 1 1 1 1 1   887    0 32.31 10.96 ----- 6.8 9.8 296.0 16.0 32.2 -32.4 32.5 -32.2 33.6 -29.7 33.8 -31.6
2025-11-25T17:01:21.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:01:21.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:01:21.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.625448
2025-11-25T17:01:21.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:01:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:01:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:01:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:01:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:01:21.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:00:57', tmtdew=39.1, humidity=6.86, cloud=0.0, wind=4.54, temperature=26.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:00:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:01:21.988 [DEBUG] [Thread-2424] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:01:22.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:01:22.098 [DEBUG] [Thread-2427] [transport.py] [_log()] starting thread (client mode): 0x761da140
2025-11-25T17:01:22.098 [DEBUG] [Thread-2427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:01:22.112 [DEBUG] [Thread-2427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:01:22.112 [INFO] [Thread-2427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:01:22.120 [DEBUG] [Thread-2427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:01:22.120 [DEBUG] [Thread-2427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:01:22.120 [DEBUG] [Thread-2427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:01:22.120 [DEBUG] [Thread-2427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] client lang: <none>
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] server lang: <none>
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] kex follows: False
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:01:22.121 [DEBUG] [Thread-2427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:01:22.122 [DEBUG] [Thread-2427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:01:22.122 [DEBUG] [Thread-2427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:01:22.122 [DEBUG] [Thread-2427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:01:22.122 [DEBUG] [Thread-2427] [transport.py] [_log()] Compression: none
2025-11-25T17:01:22.122 [DEBUG] [Thread-2427] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:01:22.178 [DEBUG] [Thread-2427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:01:22.179 [DEBUG] [Thread-2427] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:01:22.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:01:22.180 [DEBUG] [Thread-2427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:01:22.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:01:22.235 [DEBUG] [Thread-2427] [transport.py] [_log()] userauth is OK
2025-11-25T17:01:22.236 [DEBUG] [Thread-2427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:01:22.236 [DEBUG] [Thread-2427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:01:22.236 [DEBUG] [Thread-2427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:01:22.236 [DEBUG] [Thread-2427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:01:22.254 [INFO] [Thread-2427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:01:22.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:01:22.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:01:22.291 [DEBUG] [Thread-2429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:01:23.093 [DEBUG] [Thread-2427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:01:23.094 [DEBUG] [Thread-2427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:01:23.142 [DEBUG] [Thread-2427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:01:23.142 [DEBUG] [Thread-2427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:01:23.151 [DEBUG] [Thread-2427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:01:23.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:01:23.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:01:23.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:01:23.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:01:23.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:01:23.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:01:23.187 [DEBUG] [Thread-2427] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:01:33.263 [DEBUG] [Thread-2430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:01:37.359 [DEBUG] [Thread-2431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:01:52.400 [DEBUG] [Thread-2432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:01:53.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:01:53.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:01:53.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:01:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 1, 29), 39.15, 6.84, 0.0, 4.17, 26.99, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:01:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:01:29
2025-11-25T17:01:54.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:01:54.158 [DEBUG] [Thread-2433] [transport.py] [_log()] starting thread (client mode): 0x7374cca0
2025-11-25T17:01:54.158 [DEBUG] [Thread-2433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:01:54.179 [DEBUG] [Thread-2433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:01:54.179 [INFO] [Thread-2433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:01:54.182 [DEBUG] [Thread-2433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:01:54.182 [DEBUG] [Thread-2433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:01:54.182 [DEBUG] [Thread-2433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:01:54.182 [DEBUG] [Thread-2433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:01:54.182 [DEBUG] [Thread-2433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:01:54.183 [DEBUG] [Thread-2433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:01:54.183 [DEBUG] [Thread-2433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:01:54.183 [DEBUG] [Thread-2433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:01:54.183 [DEBUG] [Thread-2433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:01:54.183 [DEBUG] [Thread-2433] [transport.py] [_log()] client lang: <none>
2025-11-25T17:01:54.183 [DEBUG] [Thread-2433] [transport.py] [_log()] server lang: <none>
2025-11-25T17:01:54.183 [DEBUG] [Thread-2433] [transport.py] [_log()] kex follows: False
2025-11-25T17:01:54.183 [DEBUG] [Thread-2433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:01:54.183 [DEBUG] [Thread-2433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:01:54.184 [DEBUG] [Thread-2433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:01:54.184 [DEBUG] [Thread-2433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:01:54.184 [DEBUG] [Thread-2433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:01:54.184 [DEBUG] [Thread-2433] [transport.py] [_log()] Compression: none
2025-11-25T17:01:54.184 [DEBUG] [Thread-2433] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:01:54.204 [DEBUG] [Thread-2433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:01:54.205 [DEBUG] [Thread-2433] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:01:54.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:01:54.206 [DEBUG] [Thread-2433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:01:54.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:01:54.207 [DEBUG] [Thread-2433] [transport.py] [_log()] userauth is OK
2025-11-25T17:01:54.208 [DEBUG] [Thread-2433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:01:54.208 [DEBUG] [Thread-2433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:01:54.208 [DEBUG] [Thread-2433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:01:54.208 [DEBUG] [Thread-2433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:01:54.231 [INFO] [Thread-2433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:01:54.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:01:54.883 [DEBUG] [Thread-2433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:01:54.883 [DEBUG] [Thread-2433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:01:54.883 [DEBUG] [Thread-2433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:01:54.924 [DEBUG] [Thread-2433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:01:54.924 [DEBUG] [Thread-2433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:01:54.927 [DEBUG] [Thread-2433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:01:54.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:01:54.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:01:54.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:01:54.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:01:54.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:01:54.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:01:54.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:01:54.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:01:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:01:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.625795 -999.00  +26.80   5.36     11   -5.20 1 1 1 1 1   887    0 32.23 8.95 ----- 4.5 5.4 283.6 8.0 32.3 -32.1 32.5 -31.8 33.8 -30.3 34.0 -31.3
2025-11-25T17:01:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:01:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:01:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.625795
2025-11-25T17:01:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:01:54.955 [DEBUG] [Thread-2433] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:01:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:01:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:01:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:01:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:01:29', tmtdew=39.15, humidity=6.84, cloud=0.0, wind=4.17, temperature=26.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:01:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:01:55.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:01:55.055 [DEBUG] [Thread-2436] [transport.py] [_log()] starting thread (client mode): 0x70d0f250
2025-11-25T17:01:55.055 [DEBUG] [Thread-2436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:01:55.069 [DEBUG] [Thread-2436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:01:55.070 [INFO] [Thread-2436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:01:55.077 [DEBUG] [Thread-2436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:01:55.077 [DEBUG] [Thread-2436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:01:55.077 [DEBUG] [Thread-2436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:01:55.077 [DEBUG] [Thread-2436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:01:55.077 [DEBUG] [Thread-2436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:01:55.077 [DEBUG] [Thread-2436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:01:55.077 [DEBUG] [Thread-2436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:01:55.077 [DEBUG] [Thread-2436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:01:55.077 [DEBUG] [Thread-2436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:01:55.078 [DEBUG] [Thread-2436] [transport.py] [_log()] client lang: <none>
2025-11-25T17:01:55.078 [DEBUG] [Thread-2436] [transport.py] [_log()] server lang: <none>
2025-11-25T17:01:55.078 [DEBUG] [Thread-2436] [transport.py] [_log()] kex follows: False
2025-11-25T17:01:55.078 [DEBUG] [Thread-2436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:01:55.078 [DEBUG] [Thread-2436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:01:55.078 [DEBUG] [Thread-2436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:01:55.078 [DEBUG] [Thread-2436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:01:55.078 [DEBUG] [Thread-2436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:01:55.078 [DEBUG] [Thread-2436] [transport.py] [_log()] Compression: none
2025-11-25T17:01:55.079 [DEBUG] [Thread-2436] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:01:55.134 [DEBUG] [Thread-2436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:01:55.135 [DEBUG] [Thread-2436] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:01:55.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:01:55.136 [DEBUG] [Thread-2436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:01:55.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:01:55.191 [DEBUG] [Thread-2436] [transport.py] [_log()] userauth is OK
2025-11-25T17:01:55.191 [DEBUG] [Thread-2436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:01:55.191 [DEBUG] [Thread-2436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:01:55.191 [DEBUG] [Thread-2436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:01:55.191 [DEBUG] [Thread-2436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:01:55.210 [INFO] [Thread-2436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:01:55.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:01:55.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:01:56.059 [DEBUG] [Thread-2436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:01:56.060 [DEBUG] [Thread-2436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:01:56.108 [DEBUG] [Thread-2436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:01:56.109 [DEBUG] [Thread-2436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:01:56.118 [DEBUG] [Thread-2436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:01:56.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:01:56.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:01:56.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:01:56.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:01:56.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:01:56.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:01:56.156 [DEBUG] [Thread-2436] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:02:07.445 [DEBUG] [Thread-2438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:02:22.509 [DEBUG] [Thread-2439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:02:26.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:02:26.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:02:26.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:02:26.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 2, 1), 39.21, 6.81, 0.0, 2.35, 26.99, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:02:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:02:01
2025-11-25T17:02:26.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:02:27.129 [DEBUG] [Thread-2440] [transport.py] [_log()] starting thread (client mode): 0x761d97e0
2025-11-25T17:02:27.129 [DEBUG] [Thread-2440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:02:27.149 [DEBUG] [Thread-2440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:02:27.149 [INFO] [Thread-2440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] client lang: <none>
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] server lang: <none>
2025-11-25T17:02:27.152 [DEBUG] [Thread-2440] [transport.py] [_log()] kex follows: False
2025-11-25T17:02:27.153 [DEBUG] [Thread-2440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:02:27.153 [DEBUG] [Thread-2440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:02:27.153 [DEBUG] [Thread-2440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:02:27.153 [DEBUG] [Thread-2440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:02:27.153 [DEBUG] [Thread-2440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:02:27.153 [DEBUG] [Thread-2440] [transport.py] [_log()] Compression: none
2025-11-25T17:02:27.153 [DEBUG] [Thread-2440] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:02:27.170 [DEBUG] [Thread-2440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:02:27.171 [DEBUG] [Thread-2440] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:02:27.172 [DEBUG] [Thread-2440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:02:27.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:02:27.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:02:27.214 [DEBUG] [Thread-2440] [transport.py] [_log()] userauth is OK
2025-11-25T17:02:27.214 [DEBUG] [Thread-2440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:02:27.214 [DEBUG] [Thread-2440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:02:27.215 [DEBUG] [Thread-2440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:02:27.215 [DEBUG] [Thread-2440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:02:27.235 [INFO] [Thread-2440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:02:27.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:02:27.854 [DEBUG] [Thread-2440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:02:27.855 [DEBUG] [Thread-2440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:02:27.855 [DEBUG] [Thread-2440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:02:27.896 [DEBUG] [Thread-2440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:02:27.896 [DEBUG] [Thread-2440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:02:27.899 [DEBUG] [Thread-2440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:02:27.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:02:27.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:02:27.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:02:27.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:02:27.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:02:27.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:02:27.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:02:27.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:02:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:02:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.626142 -999.00  +26.90   2.09     11   -5.20 1 1 1 1 1   887    0 32.11 7.31 ----- 1.1 2.1 263.8 8.6 32.4 -32.6 32.6 -31.5 33.8 -29.7 34.0 -31.7
2025-11-25T17:02:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:02:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:02:27.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.626142
2025-11-25T17:02:27.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:02:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:02:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:02:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:02:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:02:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:02:01', tmtdew=39.21, humidity=6.81, cloud=0.0, wind=2.35, temperature=26.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:01:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:02:27.928 [DEBUG] [Thread-2440] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:02:28.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:02:28.031 [DEBUG] [Thread-2443] [transport.py] [_log()] starting thread (client mode): 0x761d99f0
2025-11-25T17:02:28.032 [DEBUG] [Thread-2443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:02:28.046 [DEBUG] [Thread-2443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:02:28.047 [INFO] [Thread-2443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:02:28.054 [DEBUG] [Thread-2443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:02:28.054 [DEBUG] [Thread-2443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] client lang: <none>
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] server lang: <none>
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] kex follows: False
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:02:28.055 [DEBUG] [Thread-2443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:02:28.056 [DEBUG] [Thread-2443] [transport.py] [_log()] Compression: none
2025-11-25T17:02:28.056 [DEBUG] [Thread-2443] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:02:28.117 [DEBUG] [Thread-2443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:02:28.118 [DEBUG] [Thread-2443] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:02:28.118 [DEBUG] [Thread-2443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:02:28.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:02:28.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:02:28.175 [DEBUG] [Thread-2443] [transport.py] [_log()] userauth is OK
2025-11-25T17:02:28.175 [DEBUG] [Thread-2443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:02:28.175 [DEBUG] [Thread-2443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:02:28.175 [DEBUG] [Thread-2443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:02:28.176 [DEBUG] [Thread-2443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:02:28.198 [INFO] [Thread-2443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:02:28.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:02:28.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:02:29.055 [DEBUG] [Thread-2443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:02:29.055 [DEBUG] [Thread-2443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:02:29.103 [DEBUG] [Thread-2443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:02:29.103 [DEBUG] [Thread-2443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:02:29.112 [DEBUG] [Thread-2443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:02:29.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:02:29.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:02:29.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:02:29.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:02:29.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:02:29.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:02:29.149 [DEBUG] [Thread-2443] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:02:33.795 [DEBUG] [Thread-2445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:02:37.549 [DEBUG] [Thread-2446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:02:52.614 [DEBUG] [Thread-2447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:02:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:02:59.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:02:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:02:59.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 2, 33), 39.28, 6.77, 0.0, 2.91, 27.03, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:02:59.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:02:33
2025-11-25T17:03:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:03:00.177 [DEBUG] [Thread-2448] [transport.py] [_log()] starting thread (client mode): 0x761da5c0
2025-11-25T17:03:00.178 [DEBUG] [Thread-2448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:03:00.197 [DEBUG] [Thread-2448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:03:00.197 [INFO] [Thread-2448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:03:00.200 [DEBUG] [Thread-2448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:03:00.200 [DEBUG] [Thread-2448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:03:00.200 [DEBUG] [Thread-2448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:03:00.200 [DEBUG] [Thread-2448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:03:00.200 [DEBUG] [Thread-2448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:03:00.200 [DEBUG] [Thread-2448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:03:00.200 [DEBUG] [Thread-2448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] client lang: <none>
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] server lang: <none>
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] kex follows: False
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] Compression: none
2025-11-25T17:03:00.201 [DEBUG] [Thread-2448] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:03:00.217 [DEBUG] [Thread-2448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:03:00.218 [DEBUG] [Thread-2448] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:03:00.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:03:00.218 [DEBUG] [Thread-2448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:03:00.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:03:00.219 [DEBUG] [Thread-2448] [transport.py] [_log()] userauth is OK
2025-11-25T17:03:00.219 [DEBUG] [Thread-2448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:03:00.219 [DEBUG] [Thread-2448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:03:00.219 [DEBUG] [Thread-2448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:03:00.219 [DEBUG] [Thread-2448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:03:00.228 [INFO] [Thread-2448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:03:00.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:03:00.872 [DEBUG] [Thread-2448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:03:00.872 [DEBUG] [Thread-2448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:03:00.873 [DEBUG] [Thread-2448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:03:00.913 [DEBUG] [Thread-2448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:03:00.913 [DEBUG] [Thread-2448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:03:00.917 [DEBUG] [Thread-2448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:03:00.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:03:00.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:03:00.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:03:00.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:03:00.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:03:00.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:03:00.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:03:00.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:03:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:03:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.626489 -999.00  +27.10   2.81     11   -5.00 1 1 1 1 1   887    0 32.38 6.83 ----- 2.7 2.8 131.2 3.0 32.4 -32.3 32.7 -31.6 33.9 -30.2 34.1 -31.7
2025-11-25T17:03:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:03:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:03:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.626489
2025-11-25T17:03:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:03:00.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:03:00.942 [DEBUG] [Thread-2448] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:03:00.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:03:00.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:03:00.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:03:00.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:02:33', tmtdew=39.28, humidity=6.77, cloud=0.0, wind=2.91, temperature=27.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:02:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:03:01.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:03:01.043 [DEBUG] [Thread-2451] [transport.py] [_log()] starting thread (client mode): 0x761dab60
2025-11-25T17:03:01.043 [DEBUG] [Thread-2451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:03:01.059 [DEBUG] [Thread-2451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:03:01.059 [INFO] [Thread-2451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:03:01.066 [DEBUG] [Thread-2451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] client lang: <none>
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] server lang: <none>
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] kex follows: False
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:03:01.067 [DEBUG] [Thread-2451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:03:01.068 [DEBUG] [Thread-2451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:03:01.068 [DEBUG] [Thread-2451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:03:01.068 [DEBUG] [Thread-2451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:03:01.068 [DEBUG] [Thread-2451] [transport.py] [_log()] Compression: none
2025-11-25T17:03:01.068 [DEBUG] [Thread-2451] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:03:01.127 [DEBUG] [Thread-2451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:03:01.127 [DEBUG] [Thread-2451] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:03:01.128 [DEBUG] [Thread-2451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:03:01.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:03:01.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:03:01.182 [DEBUG] [Thread-2451] [transport.py] [_log()] userauth is OK
2025-11-25T17:03:01.183 [DEBUG] [Thread-2451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:03:01.183 [DEBUG] [Thread-2451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:03:01.183 [DEBUG] [Thread-2451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:03:01.183 [DEBUG] [Thread-2451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:03:01.203 [INFO] [Thread-2451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:03:01.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:03:01.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:03:02.058 [DEBUG] [Thread-2451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:03:02.058 [DEBUG] [Thread-2451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:03:02.106 [DEBUG] [Thread-2451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:03:02.106 [DEBUG] [Thread-2451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:03:02.115 [DEBUG] [Thread-2451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:03:02.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:03:02.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:03:02.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:03:02.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:03:02.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:03:02.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:03:02.154 [DEBUG] [Thread-2451] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:03:07.658 [DEBUG] [Thread-2453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:03:22.724 [DEBUG] [Thread-2454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:03:32.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:03:32.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:03:32.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:03:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 3, 5), 39.4, 6.73, 0.0, 2.95, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:03:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:03:05
2025-11-25T17:03:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:03:33.188 [DEBUG] [Thread-2455] [transport.py] [_log()] starting thread (client mode): 0x7374caf0
2025-11-25T17:03:33.188 [DEBUG] [Thread-2455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:03:33.209 [DEBUG] [Thread-2455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:03:33.209 [INFO] [Thread-2455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] client lang: <none>
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] server lang: <none>
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] kex follows: False
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:03:33.212 [DEBUG] [Thread-2455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:03:33.213 [DEBUG] [Thread-2455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:03:33.213 [DEBUG] [Thread-2455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:03:33.213 [DEBUG] [Thread-2455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:03:33.213 [DEBUG] [Thread-2455] [transport.py] [_log()] Compression: none
2025-11-25T17:03:33.213 [DEBUG] [Thread-2455] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:03:33.231 [DEBUG] [Thread-2455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:03:33.232 [DEBUG] [Thread-2455] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:03:33.232 [DEBUG] [Thread-2455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:03:33.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:03:33.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:03:33.274 [DEBUG] [Thread-2455] [transport.py] [_log()] userauth is OK
2025-11-25T17:03:33.274 [DEBUG] [Thread-2455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:03:33.274 [DEBUG] [Thread-2455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:03:33.274 [DEBUG] [Thread-2455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:03:33.274 [DEBUG] [Thread-2455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:03:33.304 [INFO] [Thread-2455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:03:33.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:03:34.060 [DEBUG] [Thread-2455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:03:34.061 [DEBUG] [Thread-2455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:03:34.061 [DEBUG] [Thread-2455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:03:34.101 [DEBUG] [Thread-2455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:03:34.101 [DEBUG] [Thread-2455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:03:34.104 [DEBUG] [Thread-2455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:03:34.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:03:34.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:03:34.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:03:34.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:03:34.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:03:34.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:03:34.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:03:34.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:03:34.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:03:34.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.626836 -999.00  +27.20   3.25     11   -4.90 1 1 1 1 1   887    0 32.33 5.90 ----- 3.1 3.2 132.2 4.3 32.4 -32.2 32.7 -31.4 34.0 -30.0 34.2 -31.6
2025-11-25T17:03:34.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:03:34.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:03:34.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.626836
2025-11-25T17:03:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:03:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:03:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:03:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:03:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:03:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:03:05', tmtdew=39.4, humidity=6.73, cloud=0.0, wind=2.95, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:02:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:03:34.122 [DEBUG] [Thread-2455] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:03:34.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:03:34.217 [DEBUG] [Thread-2458] [transport.py] [_log()] starting thread (client mode): 0x7374c190
2025-11-25T17:03:34.217 [DEBUG] [Thread-2458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:03:34.232 [DEBUG] [Thread-2458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:03:34.232 [INFO] [Thread-2458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:03:34.239 [DEBUG] [Thread-2458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:03:34.239 [DEBUG] [Thread-2458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:03:34.239 [DEBUG] [Thread-2458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] client lang: <none>
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] server lang: <none>
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] kex follows: False
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] Compression: none
2025-11-25T17:03:34.240 [DEBUG] [Thread-2458] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:03:34.296 [DEBUG] [Thread-2458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:03:34.297 [DEBUG] [Thread-2458] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:03:34.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:03:34.297 [DEBUG] [Thread-2458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:03:34.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:03:34.354 [DEBUG] [Thread-2458] [transport.py] [_log()] userauth is OK
2025-11-25T17:03:34.354 [DEBUG] [Thread-2458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:03:34.354 [DEBUG] [Thread-2458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:03:34.354 [DEBUG] [Thread-2458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:03:34.354 [DEBUG] [Thread-2458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:03:34.373 [INFO] [Thread-2458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:03:34.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:03:34.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:03:34.516 [DEBUG] [Thread-2460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:03:35.202 [DEBUG] [Thread-2458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:03:35.202 [DEBUG] [Thread-2458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:03:35.250 [DEBUG] [Thread-2458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:03:35.250 [DEBUG] [Thread-2458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:03:35.259 [DEBUG] [Thread-2458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:03:35.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:03:35.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:03:35.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:03:35.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:03:35.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:03:35.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:03:35.292 [DEBUG] [Thread-2458] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:03:37.762 [DEBUG] [Thread-2461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:03:52.818 [DEBUG] [Thread-2462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:04:05.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:04:05.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:04:05.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:04:05.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 3, 37), 39.46, 6.76, 0.0, 4.61, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:04:05.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:03:37
2025-11-25T17:04:06.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:04:06.266 [DEBUG] [Thread-2463] [transport.py] [_log()] starting thread (client mode): 0x737e8100
2025-11-25T17:04:06.266 [DEBUG] [Thread-2463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:04:06.286 [DEBUG] [Thread-2463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:04:06.287 [INFO] [Thread-2463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:04:06.288 [DEBUG] [Thread-2463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:04:06.288 [DEBUG] [Thread-2463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] client lang: <none>
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] server lang: <none>
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] kex follows: False
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] Compression: none
2025-11-25T17:04:06.289 [DEBUG] [Thread-2463] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:04:06.303 [DEBUG] [Thread-2463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:04:06.304 [DEBUG] [Thread-2463] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:04:06.304 [DEBUG] [Thread-2463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:04:06.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:04:06.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:04:06.306 [DEBUG] [Thread-2463] [transport.py] [_log()] userauth is OK
2025-11-25T17:04:06.306 [DEBUG] [Thread-2463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:04:06.306 [DEBUG] [Thread-2463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:04:06.306 [DEBUG] [Thread-2463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:04:06.306 [DEBUG] [Thread-2463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:04:06.323 [INFO] [Thread-2463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:04:06.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:04:06.971 [DEBUG] [Thread-2463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:04:06.971 [DEBUG] [Thread-2463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:04:06.972 [DEBUG] [Thread-2463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:04:07.011 [DEBUG] [Thread-2463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:04:07.011 [DEBUG] [Thread-2463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:04:07.014 [DEBUG] [Thread-2463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:04:07.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:04:07.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:04:07.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:04:07.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:04:07.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:04:07.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:04:07.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:04:07.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:04:07.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:04:07.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.627184 -999.00  +27.30   1.68     11   -4.90 1 1 1 1 1   887    0 32.57 4.70 ----- 4.2 1.7 258.6 4.1 32.4 -32.4 32.8 -32.2 34.1 -29.8 34.3 -31.7
2025-11-25T17:04:07.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:04:07.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:04:07.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.627184
2025-11-25T17:04:07.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:04:07.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:04:07.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:04:07.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:04:07.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:04:07.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:03:37', tmtdew=39.46, humidity=6.76, cloud=0.0, wind=4.61, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:03:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:04:07.039 [DEBUG] [Thread-2463] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:04:07.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:04:07.145 [DEBUG] [Thread-2466] [transport.py] [_log()] starting thread (client mode): 0x737c55a0
2025-11-25T17:04:07.146 [DEBUG] [Thread-2466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:04:07.174 [DEBUG] [Thread-2466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:04:07.175 [INFO] [Thread-2466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:04:07.183 [DEBUG] [Thread-2466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:04:07.183 [DEBUG] [Thread-2466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:04:07.183 [DEBUG] [Thread-2466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:04:07.183 [DEBUG] [Thread-2466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:04:07.183 [DEBUG] [Thread-2466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:04:07.183 [DEBUG] [Thread-2466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:04:07.183 [DEBUG] [Thread-2466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:04:07.183 [DEBUG] [Thread-2466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] client lang: <none>
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] server lang: <none>
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] kex follows: False
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] Compression: none
2025-11-25T17:04:07.184 [DEBUG] [Thread-2466] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:04:07.245 [DEBUG] [Thread-2466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:04:07.245 [DEBUG] [Thread-2466] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:04:07.246 [DEBUG] [Thread-2466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:04:07.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:04:07.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:04:07.303 [DEBUG] [Thread-2466] [transport.py] [_log()] userauth is OK
2025-11-25T17:04:07.303 [DEBUG] [Thread-2466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:04:07.303 [DEBUG] [Thread-2466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:04:07.303 [DEBUG] [Thread-2466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:04:07.304 [DEBUG] [Thread-2466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:04:07.324 [INFO] [Thread-2466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:04:07.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:04:07.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:04:07.865 [DEBUG] [Thread-2468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:04:08.173 [DEBUG] [Thread-2466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:04:08.173 [DEBUG] [Thread-2466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:04:08.224 [DEBUG] [Thread-2466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:04:08.225 [DEBUG] [Thread-2466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:04:08.234 [DEBUG] [Thread-2466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:04:08.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:04:08.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:04:08.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:04:08.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:04:08.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:04:08.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:04:08.273 [DEBUG] [Thread-2466] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:04:22.932 [DEBUG] [Thread-2469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:04:35.018 [DEBUG] [Thread-2470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:04:37.977 [DEBUG] [Thread-2471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:04:38.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:04:38.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:04:38.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:04:38.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 4, 9), 39.56, 6.73, 0.0, 4.17, 27.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:04:38.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:04:09
2025-11-25T17:04:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:04:39.231 [DEBUG] [Thread-2472] [transport.py] [_log()] starting thread (client mode): 0x7374fa90
2025-11-25T17:04:39.231 [DEBUG] [Thread-2472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:04:39.253 [DEBUG] [Thread-2472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:04:39.253 [INFO] [Thread-2472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] client lang: <none>
2025-11-25T17:04:39.256 [DEBUG] [Thread-2472] [transport.py] [_log()] server lang: <none>
2025-11-25T17:04:39.257 [DEBUG] [Thread-2472] [transport.py] [_log()] kex follows: False
2025-11-25T17:04:39.257 [DEBUG] [Thread-2472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:04:39.257 [DEBUG] [Thread-2472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:04:39.257 [DEBUG] [Thread-2472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:04:39.257 [DEBUG] [Thread-2472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:04:39.257 [DEBUG] [Thread-2472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:04:39.257 [DEBUG] [Thread-2472] [transport.py] [_log()] Compression: none
2025-11-25T17:04:39.257 [DEBUG] [Thread-2472] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:04:39.275 [DEBUG] [Thread-2472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:04:39.275 [DEBUG] [Thread-2472] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:04:39.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:04:39.276 [DEBUG] [Thread-2472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:04:39.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:04:39.279 [DEBUG] [Thread-2472] [transport.py] [_log()] userauth is OK
2025-11-25T17:04:39.279 [DEBUG] [Thread-2472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:04:39.279 [DEBUG] [Thread-2472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:04:39.279 [DEBUG] [Thread-2472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:04:39.279 [DEBUG] [Thread-2472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:04:39.315 [INFO] [Thread-2472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:04:39.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:04:40.080 [DEBUG] [Thread-2472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:04:40.080 [DEBUG] [Thread-2472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:04:40.080 [DEBUG] [Thread-2472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:04:40.121 [DEBUG] [Thread-2472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:04:40.121 [DEBUG] [Thread-2472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:04:40.124 [DEBUG] [Thread-2472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:04:40.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:04:40.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:04:40.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:04:40.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:04:40.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:04:40.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:04:40.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:04:40.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:04:40.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:04:40.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.627531 -999.00  +27.40   2.91     11   -5.00 1 1 1 1 1   887    0 32.47 3.94 ----- 3.0 2.9 319.1 7.7 32.5 -32.3 32.8 -32.6 34.1 -29.6 34.5 -31.4
2025-11-25T17:04:40.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:04:40.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:04:40.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.627531
2025-11-25T17:04:40.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:04:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:04:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:04:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:04:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:04:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:04:09', tmtdew=39.56, humidity=6.73, cloud=0.0, wind=4.17, temperature=27.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:03:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:04:40.146 [DEBUG] [Thread-2472] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:04:40.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:04:40.244 [DEBUG] [Thread-2475] [transport.py] [_log()] starting thread (client mode): 0x761db520
2025-11-25T17:04:40.244 [DEBUG] [Thread-2475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:04:40.259 [DEBUG] [Thread-2475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:04:40.259 [INFO] [Thread-2475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:04:40.267 [DEBUG] [Thread-2475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:04:40.267 [DEBUG] [Thread-2475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:04:40.268 [DEBUG] [Thread-2475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:04:40.268 [DEBUG] [Thread-2475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:04:40.268 [DEBUG] [Thread-2475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:04:40.268 [DEBUG] [Thread-2475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:04:40.268 [DEBUG] [Thread-2475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:04:40.268 [DEBUG] [Thread-2475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:04:40.268 [DEBUG] [Thread-2475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:04:40.268 [DEBUG] [Thread-2475] [transport.py] [_log()] client lang: <none>
2025-11-25T17:04:40.269 [DEBUG] [Thread-2475] [transport.py] [_log()] server lang: <none>
2025-11-25T17:04:40.269 [DEBUG] [Thread-2475] [transport.py] [_log()] kex follows: False
2025-11-25T17:04:40.269 [DEBUG] [Thread-2475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:04:40.269 [DEBUG] [Thread-2475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:04:40.269 [DEBUG] [Thread-2475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:04:40.269 [DEBUG] [Thread-2475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:04:40.269 [DEBUG] [Thread-2475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:04:40.270 [DEBUG] [Thread-2475] [transport.py] [_log()] Compression: none
2025-11-25T17:04:40.270 [DEBUG] [Thread-2475] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:04:40.328 [DEBUG] [Thread-2475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:04:40.328 [DEBUG] [Thread-2475] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:04:40.329 [DEBUG] [Thread-2475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:04:40.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:04:40.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:04:40.386 [DEBUG] [Thread-2475] [transport.py] [_log()] userauth is OK
2025-11-25T17:04:40.387 [DEBUG] [Thread-2475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:04:40.387 [DEBUG] [Thread-2475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:04:40.387 [DEBUG] [Thread-2475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:04:40.387 [DEBUG] [Thread-2475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:04:40.407 [INFO] [Thread-2475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:04:40.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:04:40.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:04:41.263 [DEBUG] [Thread-2475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:04:41.263 [DEBUG] [Thread-2475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:04:41.311 [DEBUG] [Thread-2475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:04:41.311 [DEBUG] [Thread-2475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:04:41.320 [DEBUG] [Thread-2475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:04:41.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:04:41.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:04:41.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:04:41.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:04:41.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:04:41.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:04:41.353 [DEBUG] [Thread-2475] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:04:53.020 [DEBUG] [Thread-2477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:05:08.085 [DEBUG] [Thread-2478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:05:11.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:05:11.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:05:11.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:05:12.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 4, 41), 39.73, 6.68, 0.0, 9.76, 27.65, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:05:12.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:04:41
2025-11-25T17:05:12.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:05:12.315 [DEBUG] [Thread-2479] [transport.py] [_log()] starting thread (client mode): 0x737eada0
2025-11-25T17:05:12.315 [DEBUG] [Thread-2479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:05:12.334 [DEBUG] [Thread-2479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:05:12.335 [INFO] [Thread-2479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] client lang: <none>
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] server lang: <none>
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] kex follows: False
2025-11-25T17:05:12.338 [DEBUG] [Thread-2479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:05:12.339 [DEBUG] [Thread-2479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:05:12.339 [DEBUG] [Thread-2479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:05:12.339 [DEBUG] [Thread-2479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:05:12.339 [DEBUG] [Thread-2479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:05:12.339 [DEBUG] [Thread-2479] [transport.py] [_log()] Compression: none
2025-11-25T17:05:12.339 [DEBUG] [Thread-2479] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:05:12.355 [DEBUG] [Thread-2479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:05:12.356 [DEBUG] [Thread-2479] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:05:12.356 [DEBUG] [Thread-2479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:05:12.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:05:12.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:05:12.358 [DEBUG] [Thread-2479] [transport.py] [_log()] userauth is OK
2025-11-25T17:05:12.358 [DEBUG] [Thread-2479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:05:12.358 [DEBUG] [Thread-2479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:05:12.359 [DEBUG] [Thread-2479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:05:12.359 [DEBUG] [Thread-2479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:05:12.382 [INFO] [Thread-2479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:05:12.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:05:14.116 [DEBUG] [Thread-2479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:05:14.116 [DEBUG] [Thread-2479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:05:14.116 [DEBUG] [Thread-2479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:05:14.157 [DEBUG] [Thread-2479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:05:14.157 [DEBUG] [Thread-2479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:05:14.159 [DEBUG] [Thread-2479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:05:14.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:05:14.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:05:14.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:05:14.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:05:14.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:05:14.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:05:14.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.628225 -999.00  +27.70   2.28     11   -4.90 1 1 1 1 1   887    0 32.57 4.48 ----- 2.6 2.3 271.8 3.4 32.6 -33.0 32.9 -32.2 34.3 -32.5 34.6 -31.3
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.628225
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:05:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:04:41', tmtdew=39.73, humidity=6.68, cloud=0.0, wind=9.76, temperature=27.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:04:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:05:14.278 [DEBUG] [Thread-2479] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:05:14.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:05:14.371 [DEBUG] [Thread-2482] [transport.py] [_log()] starting thread (client mode): 0x737c7130
2025-11-25T17:05:14.371 [DEBUG] [Thread-2482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:05:14.385 [DEBUG] [Thread-2482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:05:14.385 [INFO] [Thread-2482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] client lang: <none>
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] server lang: <none>
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] kex follows: False
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] Compression: none
2025-11-25T17:05:14.393 [DEBUG] [Thread-2482] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:05:14.448 [DEBUG] [Thread-2482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:05:14.449 [DEBUG] [Thread-2482] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:05:14.449 [DEBUG] [Thread-2482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:05:14.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:05:14.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:05:14.506 [DEBUG] [Thread-2482] [transport.py] [_log()] userauth is OK
2025-11-25T17:05:14.506 [DEBUG] [Thread-2482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:05:14.506 [DEBUG] [Thread-2482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:05:14.507 [DEBUG] [Thread-2482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:05:14.507 [DEBUG] [Thread-2482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:05:14.520 [INFO] [Thread-2482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:05:14.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:05:14.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:05:15.340 [DEBUG] [Thread-2482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:05:15.340 [DEBUG] [Thread-2482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:05:15.396 [DEBUG] [Thread-2482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:05:15.396 [DEBUG] [Thread-2482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:05:15.409 [DEBUG] [Thread-2482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:05:15.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:05:15.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:05:15.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:05:15.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:05:15.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:05:15.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:05:15.449 [DEBUG] [Thread-2482] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:05:23.130 [DEBUG] [Thread-2484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:05:35.514 [DEBUG] [Thread-2485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:05:38.196 [DEBUG] [Thread-2486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:05:45.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:05:45.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:05:45.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:05:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 5, 13), 39.72, 6.68, 0.0, 10.22, 27.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:05:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:05:13
2025-11-25T17:05:46.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:05:46.497 [DEBUG] [Thread-2487] [transport.py] [_log()] starting thread (client mode): 0x737c4ee0
2025-11-25T17:05:46.498 [DEBUG] [Thread-2487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:05:46.519 [DEBUG] [Thread-2487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:05:46.519 [INFO] [Thread-2487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] client lang: <none>
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] server lang: <none>
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] kex follows: False
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] Compression: none
2025-11-25T17:05:46.523 [DEBUG] [Thread-2487] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:05:46.538 [DEBUG] [Thread-2487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:05:46.538 [DEBUG] [Thread-2487] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:05:46.538 [DEBUG] [Thread-2487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:05:46.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:05:46.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:05:46.539 [DEBUG] [Thread-2487] [transport.py] [_log()] userauth is OK
2025-11-25T17:05:46.539 [DEBUG] [Thread-2487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:05:46.539 [DEBUG] [Thread-2487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:05:46.539 [DEBUG] [Thread-2487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:05:46.539 [DEBUG] [Thread-2487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:05:46.553 [INFO] [Thread-2487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:05:46.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:05:47.130 [DEBUG] [Thread-2487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:05:47.130 [DEBUG] [Thread-2487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:05:47.131 [DEBUG] [Thread-2487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:05:47.171 [DEBUG] [Thread-2487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:05:47.171 [DEBUG] [Thread-2487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:05:47.173 [DEBUG] [Thread-2487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:05:47.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:05:47.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:05:47.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:05:47.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:05:47.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:05:47.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:05:47.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:05:47.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.628572 -999.00  +27.70  10.68     11   -4.70 1 1 1 1 1   887    0 32.72 5.77 ----- 8.5 10.7 319.5 13.7 32.7 -32.4 33.0 -32.2 34.3 -29.7 34.6 -31.2
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.628572
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:05:47.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:05:13', tmtdew=39.72, humidity=6.68, cloud=0.0, wind=10.22, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:05:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:05:47.191 [DEBUG] [Thread-2487] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:05:47.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:05:47.285 [DEBUG] [Thread-2490] [transport.py] [_log()] starting thread (client mode): 0x737c4970
2025-11-25T17:05:47.285 [DEBUG] [Thread-2490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:05:47.300 [DEBUG] [Thread-2490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:05:47.300 [INFO] [Thread-2490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:05:47.307 [DEBUG] [Thread-2490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:05:47.308 [DEBUG] [Thread-2490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:05:47.308 [DEBUG] [Thread-2490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:05:47.308 [DEBUG] [Thread-2490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:05:47.308 [DEBUG] [Thread-2490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:05:47.308 [DEBUG] [Thread-2490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:05:47.308 [DEBUG] [Thread-2490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:05:47.308 [DEBUG] [Thread-2490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:05:47.308 [DEBUG] [Thread-2490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:05:47.308 [DEBUG] [Thread-2490] [transport.py] [_log()] client lang: <none>
2025-11-25T17:05:47.309 [DEBUG] [Thread-2490] [transport.py] [_log()] server lang: <none>
2025-11-25T17:05:47.309 [DEBUG] [Thread-2490] [transport.py] [_log()] kex follows: False
2025-11-25T17:05:47.309 [DEBUG] [Thread-2490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:05:47.309 [DEBUG] [Thread-2490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:05:47.309 [DEBUG] [Thread-2490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:05:47.309 [DEBUG] [Thread-2490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:05:47.309 [DEBUG] [Thread-2490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:05:47.309 [DEBUG] [Thread-2490] [transport.py] [_log()] Compression: none
2025-11-25T17:05:47.309 [DEBUG] [Thread-2490] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:05:47.368 [DEBUG] [Thread-2490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:05:47.368 [DEBUG] [Thread-2490] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:05:47.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:05:47.369 [DEBUG] [Thread-2490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:05:47.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:05:47.430 [DEBUG] [Thread-2490] [transport.py] [_log()] userauth is OK
2025-11-25T17:05:47.430 [DEBUG] [Thread-2490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:05:47.431 [DEBUG] [Thread-2490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:05:47.431 [DEBUG] [Thread-2490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:05:47.431 [DEBUG] [Thread-2490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:05:47.449 [INFO] [Thread-2490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:05:47.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:05:47.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:05:48.283 [DEBUG] [Thread-2490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:05:48.283 [DEBUG] [Thread-2490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:05:48.332 [DEBUG] [Thread-2490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:05:48.332 [DEBUG] [Thread-2490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:05:48.341 [DEBUG] [Thread-2490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:05:48.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:05:48.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:05:48.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:05:48.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:05:48.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:05:48.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:05:48.377 [DEBUG] [Thread-2490] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:05:53.239 [DEBUG] [Thread-2492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:06:08.313 [DEBUG] [Thread-2493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:06:18.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:06:18.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:06:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:06:19.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 5, 45), 39.74, 6.68, 0.0, 12.21, 27.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:06:19.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:05:45
2025-11-25T17:06:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:06:19.395 [DEBUG] [Thread-2494] [transport.py] [_log()] starting thread (client mode): 0x737c5f30
2025-11-25T17:06:19.395 [DEBUG] [Thread-2494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:06:19.405 [DEBUG] [Thread-2494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:06:19.405 [INFO] [Thread-2494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] client lang: <none>
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] server lang: <none>
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] kex follows: False
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] Compression: none
2025-11-25T17:06:19.409 [DEBUG] [Thread-2494] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:06:19.426 [DEBUG] [Thread-2494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:06:19.427 [DEBUG] [Thread-2494] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:06:19.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:06:19.428 [DEBUG] [Thread-2494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:06:19.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:06:19.430 [DEBUG] [Thread-2494] [transport.py] [_log()] userauth is OK
2025-11-25T17:06:19.430 [DEBUG] [Thread-2494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:06:19.430 [DEBUG] [Thread-2494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:06:19.430 [DEBUG] [Thread-2494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:06:19.430 [DEBUG] [Thread-2494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:06:19.454 [INFO] [Thread-2494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:06:19.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:06:20.286 [DEBUG] [Thread-2494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:06:20.286 [DEBUG] [Thread-2494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:06:20.287 [DEBUG] [Thread-2494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:06:20.327 [DEBUG] [Thread-2494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:06:20.327 [DEBUG] [Thread-2494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:06:20.331 [DEBUG] [Thread-2494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:06:20.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:06:20.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:06:20.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:06:20.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:06:20.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:06:20.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:06:20.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:06:20.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:06:20.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:06:20.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.628920 -999.00  +27.80   7.36     11   -4.80 1 1 1 1 1   887    0 32.37 7.44 ----- 12.2 7.4 300.0 10.0 32.8 -33.0 33.0 -32.0 34.4 -30.2 34.7 -31.3
2025-11-25T17:06:20.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:06:20.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:06:20.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.628920
2025-11-25T17:06:20.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:06:20.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:06:20.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:06:20.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:06:20.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:06:20.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:05:45', tmtdew=39.74, humidity=6.68, cloud=0.0, wind=12.21, temperature=27.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:05:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:06:20.357 [DEBUG] [Thread-2494] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:06:20.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:06:20.458 [DEBUG] [Thread-2497] [transport.py] [_log()] starting thread (client mode): 0x737c77f0
2025-11-25T17:06:20.459 [DEBUG] [Thread-2497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:06:20.473 [DEBUG] [Thread-2497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:06:20.473 [INFO] [Thread-2497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:06:20.481 [DEBUG] [Thread-2497] [transport.py] [_log()] client lang: <none>
2025-11-25T17:06:20.482 [DEBUG] [Thread-2497] [transport.py] [_log()] server lang: <none>
2025-11-25T17:06:20.482 [DEBUG] [Thread-2497] [transport.py] [_log()] kex follows: False
2025-11-25T17:06:20.482 [DEBUG] [Thread-2497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:06:20.482 [DEBUG] [Thread-2497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:06:20.482 [DEBUG] [Thread-2497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:06:20.482 [DEBUG] [Thread-2497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:06:20.482 [DEBUG] [Thread-2497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:06:20.482 [DEBUG] [Thread-2497] [transport.py] [_log()] Compression: none
2025-11-25T17:06:20.482 [DEBUG] [Thread-2497] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:06:20.538 [DEBUG] [Thread-2497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:06:20.538 [DEBUG] [Thread-2497] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:06:20.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:06:20.539 [DEBUG] [Thread-2497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:06:20.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:06:20.594 [DEBUG] [Thread-2497] [transport.py] [_log()] userauth is OK
2025-11-25T17:06:20.594 [DEBUG] [Thread-2497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:06:20.594 [DEBUG] [Thread-2497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:06:20.594 [DEBUG] [Thread-2497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:06:20.594 [DEBUG] [Thread-2497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:06:20.613 [INFO] [Thread-2497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:06:20.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:06:20.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:06:21.419 [DEBUG] [Thread-2497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:06:21.419 [DEBUG] [Thread-2497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:06:21.469 [DEBUG] [Thread-2497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:06:21.470 [DEBUG] [Thread-2497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:06:21.479 [DEBUG] [Thread-2497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:06:21.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:06: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')
2025-11-25T17:06:21.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:06:21.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:06:21.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:06:21.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:06:21.515 [DEBUG] [Thread-2497] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:06:23.358 [DEBUG] [Thread-2499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:06:36.008 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:06:38.430 [DEBUG] [Thread-2501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:06:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:06:51.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:06:51.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:06:52.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 6, 49), 39.49, 6.74, 0.0, 15.7, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:06:52.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:06:49
2025-11-25T17:06:52.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:06:52.504 [DEBUG] [Thread-2502] [transport.py] [_log()] starting thread (client mode): 0x761db520
2025-11-25T17:06:52.504 [DEBUG] [Thread-2502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:06:52.524 [DEBUG] [Thread-2502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:06:52.525 [INFO] [Thread-2502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:06:52.528 [DEBUG] [Thread-2502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:06:52.528 [DEBUG] [Thread-2502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:06:52.528 [DEBUG] [Thread-2502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:06:52.528 [DEBUG] [Thread-2502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] client lang: <none>
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] server lang: <none>
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] kex follows: False
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] Compression: none
2025-11-25T17:06:52.529 [DEBUG] [Thread-2502] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:06:52.546 [DEBUG] [Thread-2502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:06:52.546 [DEBUG] [Thread-2502] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:06:52.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:06:52.547 [DEBUG] [Thread-2502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:06:52.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:06:52.549 [DEBUG] [Thread-2502] [transport.py] [_log()] userauth is OK
2025-11-25T17:06:52.549 [DEBUG] [Thread-2502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:06:52.550 [DEBUG] [Thread-2502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:06:52.550 [DEBUG] [Thread-2502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:06:52.550 [DEBUG] [Thread-2502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:06:52.574 [INFO] [Thread-2502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:06:52.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:06:53.263 [DEBUG] [Thread-2502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:06:53.264 [DEBUG] [Thread-2502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:06:53.264 [DEBUG] [Thread-2502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:06:53.305 [DEBUG] [Thread-2502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:06:53.305 [DEBUG] [Thread-2502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:06:53.309 [DEBUG] [Thread-2502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:06:53.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:06:53.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:06:53.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:06:53.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:06:53.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:06:53.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:06:53.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:06:53.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:06:53.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:06:53.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.629267 -999.00  +27.70   7.52     11   -4.60 1 1 1 1 1   887    0 32.10 7.84 ----- 11.8 7.5 314.0 16.3 32.8 -32.1 33.0 -31.9 34.3 -30.4 34.6 -31.6
2025-11-25T17:06:53.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:06:53.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:06:53.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.629267
2025-11-25T17:06:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:06:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:06:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:06:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:06:53.327 [DEBUG] [Thread-2502] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:06:53.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:06:53.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:06:49', tmtdew=39.49, humidity=6.74, cloud=0.0, wind=15.7, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:06:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:06:53.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:06:53.431 [DEBUG] [Thread-2505] [transport.py] [_log()] starting thread (client mode): 0x761da650
2025-11-25T17:06:53.431 [DEBUG] [Thread-2505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:06:53.445 [DEBUG] [Thread-2505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:06:53.446 [INFO] [Thread-2505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:06:53.453 [DEBUG] [Thread-2505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] client lang: <none>
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] server lang: <none>
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] kex follows: False
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:06:53.454 [DEBUG] [Thread-2505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:06:53.455 [DEBUG] [Thread-2505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:06:53.455 [DEBUG] [Thread-2505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:06:53.455 [DEBUG] [Thread-2505] [transport.py] [_log()] Compression: none
2025-11-25T17:06:53.455 [DEBUG] [Thread-2505] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:06:53.467 [DEBUG] [Thread-2507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:06:53.510 [DEBUG] [Thread-2505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:06:53.511 [DEBUG] [Thread-2505] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:06:53.511 [DEBUG] [Thread-2505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:06:53.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:06:53.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:06:53.567 [DEBUG] [Thread-2505] [transport.py] [_log()] userauth is OK
2025-11-25T17:06:53.567 [DEBUG] [Thread-2505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:06:53.567 [DEBUG] [Thread-2505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:06:53.567 [DEBUG] [Thread-2505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:06:53.568 [DEBUG] [Thread-2505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:06:53.586 [INFO] [Thread-2505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:06:53.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:06:53.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:06:54.430 [DEBUG] [Thread-2505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:06:54.430 [DEBUG] [Thread-2505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:06:54.478 [DEBUG] [Thread-2505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:06:54.478 [DEBUG] [Thread-2505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:06:54.487 [DEBUG] [Thread-2505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:06:54.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:06:54.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:06:54.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:06:54.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:06:54.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:06:54.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:06:54.524 [DEBUG] [Thread-2505] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:07:08.536 [DEBUG] [Thread-2508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:07:23.575 [DEBUG] [Thread-2509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:07:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:07:24.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:07:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:07:25.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 7, 21), 39.34, 6.81, 0.0, 15.09, 27.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:07:25.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:07:21
2025-11-25T17:07:25.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:07:25.494 [DEBUG] [Thread-2510] [transport.py] [_log()] starting thread (client mode): 0x737c7850
2025-11-25T17:07:25.494 [DEBUG] [Thread-2510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:07:25.515 [DEBUG] [Thread-2510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:07:25.515 [INFO] [Thread-2510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:07:25.518 [DEBUG] [Thread-2510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] client lang: <none>
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] server lang: <none>
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] kex follows: False
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:07:25.519 [DEBUG] [Thread-2510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:07:25.520 [DEBUG] [Thread-2510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:07:25.520 [DEBUG] [Thread-2510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:07:25.520 [DEBUG] [Thread-2510] [transport.py] [_log()] Compression: none
2025-11-25T17:07:25.520 [DEBUG] [Thread-2510] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:07:25.539 [DEBUG] [Thread-2510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:07:25.540 [DEBUG] [Thread-2510] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:07:25.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:07:25.541 [DEBUG] [Thread-2510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:07:25.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:07:25.544 [DEBUG] [Thread-2510] [transport.py] [_log()] userauth is OK
2025-11-25T17:07:25.544 [DEBUG] [Thread-2510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:07:25.544 [DEBUG] [Thread-2510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:07:25.544 [DEBUG] [Thread-2510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:07:25.544 [DEBUG] [Thread-2510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:07:25.569 [INFO] [Thread-2510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:07:25.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:07:26.309 [DEBUG] [Thread-2510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:07:26.310 [DEBUG] [Thread-2510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:07:26.310 [DEBUG] [Thread-2510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:07:26.350 [DEBUG] [Thread-2510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:07:26.351 [DEBUG] [Thread-2510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:07:26.354 [DEBUG] [Thread-2510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:07:26.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:07:26.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:07:26.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:07:26.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:07:26.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:07:26.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:07:26.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:07:26.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:07:26.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:07:26.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.629614 -999.00  +27.60  24.03     11   -4.80 1 1 1 1 1   887    0 32.84 8.63 ----- 11.2 24.0 320.4 27.1 32.7 -33.1 33.0 -32.6 34.3 -30.9 34.6 -31.8
2025-11-25T17:07:26.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:07:26.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:07:26.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.629614
2025-11-25T17:07:26.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:07:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:07:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:07:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:07:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:07:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:07:21', tmtdew=39.34, humidity=6.81, cloud=0.0, wind=15.09, temperature=27.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:06:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:07:26.381 [DEBUG] [Thread-2510] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:07:26.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:07:26.483 [DEBUG] [Thread-2513] [transport.py] [_log()] starting thread (client mode): 0x737c5090
2025-11-25T17:07:26.483 [DEBUG] [Thread-2513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:07:26.499 [DEBUG] [Thread-2513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:07:26.499 [INFO] [Thread-2513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:07:26.507 [DEBUG] [Thread-2513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:07:26.507 [DEBUG] [Thread-2513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:07:26.507 [DEBUG] [Thread-2513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:07:26.508 [DEBUG] [Thread-2513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:07:26.508 [DEBUG] [Thread-2513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:07:26.508 [DEBUG] [Thread-2513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:07:26.508 [DEBUG] [Thread-2513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:07:26.508 [DEBUG] [Thread-2513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:07:26.508 [DEBUG] [Thread-2513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:07:26.508 [DEBUG] [Thread-2513] [transport.py] [_log()] client lang: <none>
2025-11-25T17:07:26.509 [DEBUG] [Thread-2513] [transport.py] [_log()] server lang: <none>
2025-11-25T17:07:26.509 [DEBUG] [Thread-2513] [transport.py] [_log()] kex follows: False
2025-11-25T17:07:26.509 [DEBUG] [Thread-2513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:07:26.509 [DEBUG] [Thread-2513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:07:26.509 [DEBUG] [Thread-2513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:07:26.509 [DEBUG] [Thread-2513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:07:26.509 [DEBUG] [Thread-2513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:07:26.510 [DEBUG] [Thread-2513] [transport.py] [_log()] Compression: none
2025-11-25T17:07:26.510 [DEBUG] [Thread-2513] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:07:26.571 [DEBUG] [Thread-2513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:07:26.571 [DEBUG] [Thread-2513] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:07:26.572 [DEBUG] [Thread-2513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:07:26.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:07:26.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:07:26.627 [DEBUG] [Thread-2513] [transport.py] [_log()] userauth is OK
2025-11-25T17:07:26.628 [DEBUG] [Thread-2513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:07:26.628 [DEBUG] [Thread-2513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:07:26.628 [DEBUG] [Thread-2513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:07:26.628 [DEBUG] [Thread-2513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:07:26.647 [INFO] [Thread-2513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:07:26.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:07:26.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:07:27.503 [DEBUG] [Thread-2513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:07:27.503 [DEBUG] [Thread-2513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:07:27.551 [DEBUG] [Thread-2513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:07:27.551 [DEBUG] [Thread-2513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:07:27.560 [DEBUG] [Thread-2513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:07:27.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:07:27.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:07:27.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:07:27.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:07:27.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:07:27.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:07:27.597 [DEBUG] [Thread-2513] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:07:36.526 [DEBUG] [Thread-2515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:07:38.626 [DEBUG] [Thread-2516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:07:53.697 [DEBUG] [Thread-2517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:07:57.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:07:57.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:07:57.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:07:58.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 7, 53), 39.61, 6.81, 0.0, 13.04, 27.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:07:58.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:07:53
2025-11-25T17:07:58.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:07:58.573 [DEBUG] [Thread-2518] [transport.py] [_log()] starting thread (client mode): 0x761da7d0
2025-11-25T17:07:58.574 [DEBUG] [Thread-2518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:07:58.594 [DEBUG] [Thread-2518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:07:58.594 [INFO] [Thread-2518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] client lang: <none>
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] server lang: <none>
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] kex follows: False
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] Compression: none
2025-11-25T17:07:58.596 [DEBUG] [Thread-2518] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:07:58.606 [DEBUG] [Thread-2518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:07:58.606 [DEBUG] [Thread-2518] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:07:58.607 [DEBUG] [Thread-2518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:07:58.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:07:58.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:07:58.608 [DEBUG] [Thread-2518] [transport.py] [_log()] userauth is OK
2025-11-25T17:07:58.608 [DEBUG] [Thread-2518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:07:58.608 [DEBUG] [Thread-2518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:07:58.608 [DEBUG] [Thread-2518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:07:58.608 [DEBUG] [Thread-2518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:07:58.627 [INFO] [Thread-2518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:07:58.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:07:59.243 [DEBUG] [Thread-2518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:07:59.244 [DEBUG] [Thread-2518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:07:59.245 [DEBUG] [Thread-2518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:07:59.285 [DEBUG] [Thread-2518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:07:59.285 [DEBUG] [Thread-2518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:07:59.288 [DEBUG] [Thread-2518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:07:59.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:07:59.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:07:59.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:07:59.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:07:59.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:07:59.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:07:59.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:07:59.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:07:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:07:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.629961 -999.00  +27.30  20.46     11   -5.10 1 1 1 1 1   887    0 32.80 10.18 ----- 20.5 20.5 331.4 22.8 32.6 -33.2 32.9 -32.9 34.2 -30.6 34.4 -32.0
2025-11-25T17:07:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:07:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:07:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.629961
2025-11-25T17:07:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:07:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:07:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:07:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:07:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:07:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:07:53', tmtdew=39.61, humidity=6.81, cloud=0.0, wind=13.04, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:07:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:07:59.312 [DEBUG] [Thread-2518] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:07:59.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:07:59.417 [DEBUG] [Thread-2521] [transport.py] [_log()] starting thread (client mode): 0x761da260
2025-11-25T17:07:59.417 [DEBUG] [Thread-2521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:07:59.431 [DEBUG] [Thread-2521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:07:59.431 [INFO] [Thread-2521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:07:59.439 [DEBUG] [Thread-2521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:07:59.439 [DEBUG] [Thread-2521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:07:59.439 [DEBUG] [Thread-2521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:07:59.439 [DEBUG] [Thread-2521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:07:59.439 [DEBUG] [Thread-2521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:07:59.439 [DEBUG] [Thread-2521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:07:59.439 [DEBUG] [Thread-2521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] client lang: <none>
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] server lang: <none>
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] kex follows: False
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] Compression: none
2025-11-25T17:07:59.440 [DEBUG] [Thread-2521] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:07:59.499 [DEBUG] [Thread-2521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:07:59.500 [DEBUG] [Thread-2521] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:07:59.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:07:59.501 [DEBUG] [Thread-2521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:07:59.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:07:59.555 [DEBUG] [Thread-2521] [transport.py] [_log()] userauth is OK
2025-11-25T17:07:59.555 [DEBUG] [Thread-2521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:07:59.556 [DEBUG] [Thread-2521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:07:59.556 [DEBUG] [Thread-2521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:07:59.556 [DEBUG] [Thread-2521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:07:59.575 [INFO] [Thread-2521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:07:59.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:07:59.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:08:00.400 [DEBUG] [Thread-2521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:08:00.400 [DEBUG] [Thread-2521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:08:00.448 [DEBUG] [Thread-2521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:08:00.448 [DEBUG] [Thread-2521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:08:00.457 [DEBUG] [Thread-2521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:08:00.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:08:00.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:08:00.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:08:00.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:08:00.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:08:00.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:08:00.494 [DEBUG] [Thread-2521] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:08:08.737 [DEBUG] [Thread-2523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:08:23.815 [DEBUG] [Thread-2524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:08:30.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:08:30.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:08:30.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:08:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 8, 25), 39.63, 6.79, 0.0, 18.1, 27.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:08:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:08:25
2025-11-25T17:08:31.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:08:31.498 [DEBUG] [Thread-2525] [transport.py] [_log()] starting thread (client mode): 0x737c6950
2025-11-25T17:08:31.498 [DEBUG] [Thread-2525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:08:31.519 [DEBUG] [Thread-2525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:08:31.519 [INFO] [Thread-2525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] client lang: <none>
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] server lang: <none>
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] kex follows: False
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] Compression: none
2025-11-25T17:08:31.523 [DEBUG] [Thread-2525] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:08:31.536 [DEBUG] [Thread-2525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:08:31.536 [DEBUG] [Thread-2525] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:08:31.536 [DEBUG] [Thread-2525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:08:31.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:08:31.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:08:31.537 [DEBUG] [Thread-2525] [transport.py] [_log()] userauth is OK
2025-11-25T17:08:31.537 [DEBUG] [Thread-2525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:08:31.537 [DEBUG] [Thread-2525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:08:31.537 [DEBUG] [Thread-2525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:08:31.537 [DEBUG] [Thread-2525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:08:31.546 [INFO] [Thread-2525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:08:31.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:08:32.342 [DEBUG] [Thread-2525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:08:32.342 [DEBUG] [Thread-2525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:08:32.342 [DEBUG] [Thread-2525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:08:32.383 [DEBUG] [Thread-2525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:08:32.383 [DEBUG] [Thread-2525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:08:32.385 [DEBUG] [Thread-2525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:08:32.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:08:32.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:08:32.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:08:32.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:08:32.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:08:32.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:08:32.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:08:32.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:08:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:08:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.630309 -999.00  +27.00  20.04     11   -5.10 1 1 1 1 1   887    0 32.59 9.83 ----- 23.0 20.0 324.2 24.3 32.5 -33.5 32.7 -32.4 34.2 -30.9 34.3 -31.6
2025-11-25T17:08:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:08:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:08:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.630309
2025-11-25T17:08:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:08:32.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:08:32.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:08:32.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:08:32.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:08:32.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:08:25', tmtdew=39.63, humidity=6.79, cloud=0.0, wind=18.1, temperature=27.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:07:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:08:32.397 [DEBUG] [Thread-2525] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:08:32.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:08:32.491 [DEBUG] [Thread-2528] [transport.py] [_log()] starting thread (client mode): 0x70d0d0c0
2025-11-25T17:08:32.491 [DEBUG] [Thread-2528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:08:32.506 [DEBUG] [Thread-2528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:08:32.506 [INFO] [Thread-2528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] client lang: <none>
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] server lang: <none>
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] kex follows: False
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] Compression: none
2025-11-25T17:08:32.516 [DEBUG] [Thread-2528] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:08:32.575 [DEBUG] [Thread-2528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:08:32.575 [DEBUG] [Thread-2528] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:08:32.575 [DEBUG] [Thread-2528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:08:32.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:08:32.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:08:32.638 [DEBUG] [Thread-2528] [transport.py] [_log()] userauth is OK
2025-11-25T17:08:32.638 [DEBUG] [Thread-2528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:08:32.638 [DEBUG] [Thread-2528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:08:32.638 [DEBUG] [Thread-2528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:08:32.638 [DEBUG] [Thread-2528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:08:32.652 [INFO] [Thread-2528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:08:32.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:08:32.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:08:33.459 [DEBUG] [Thread-2528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:08:33.460 [DEBUG] [Thread-2528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:08:33.507 [DEBUG] [Thread-2528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:08:33.507 [DEBUG] [Thread-2528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:08:33.518 [DEBUG] [Thread-2528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:08:33.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:08:33.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:08:33.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
2025-11-25T17:08:33.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:08:33.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:08:33.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:08:33.562 [DEBUG] [Thread-2528] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:08:37.267 [DEBUG] [Thread-2530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:08:38.857 [DEBUG] [Thread-2531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:08:53.924 [DEBUG] [Thread-2532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:09:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:09:03.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:09:03.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:09:04.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 8, 57), 39.73, 6.29, 0.0, 14.89, 27.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:09:04.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:08:57
2025-11-25T17:09:04.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:09:04.514 [DEBUG] [Thread-2533] [transport.py] [_log()] starting thread (client mode): 0x70d0fca0
2025-11-25T17:09:04.514 [DEBUG] [Thread-2533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:09:04.534 [DEBUG] [Thread-2533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:09:04.535 [INFO] [Thread-2533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] client lang: <none>
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] server lang: <none>
2025-11-25T17:09:04.538 [DEBUG] [Thread-2533] [transport.py] [_log()] kex follows: False
2025-11-25T17:09:04.539 [DEBUG] [Thread-2533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:09:04.539 [DEBUG] [Thread-2533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:09:04.539 [DEBUG] [Thread-2533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:09:04.539 [DEBUG] [Thread-2533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:09:04.539 [DEBUG] [Thread-2533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:09:04.539 [DEBUG] [Thread-2533] [transport.py] [_log()] Compression: none
2025-11-25T17:09:04.539 [DEBUG] [Thread-2533] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:09:04.557 [DEBUG] [Thread-2533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:09:04.557 [DEBUG] [Thread-2533] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:09:04.558 [DEBUG] [Thread-2533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:09:04.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:09:04.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:09:04.560 [DEBUG] [Thread-2533] [transport.py] [_log()] userauth is OK
2025-11-25T17:09:04.560 [DEBUG] [Thread-2533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:09:04.560 [DEBUG] [Thread-2533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:09:04.560 [DEBUG] [Thread-2533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:09:04.560 [DEBUG] [Thread-2533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:09:04.586 [INFO] [Thread-2533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:09:04.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:09:05.222 [DEBUG] [Thread-2533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:09:05.222 [DEBUG] [Thread-2533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:09:05.223 [DEBUG] [Thread-2533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:09:05.264 [DEBUG] [Thread-2533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:09:05.264 [DEBUG] [Thread-2533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:09:05.267 [DEBUG] [Thread-2533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:09:05.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:09:05.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:09:05.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:09:05.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:09:05.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:09:05.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:09:05.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:09:05.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:09:05.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:09:05.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.630656 -999.00  +27.00  14.76     11   -5.10 1 1 1 1 1   887    0 32.70 9.01 ----- 13.9 14.8 327.4 25.5 32.5 -32.9 32.7 -32.8 34.1 -30.5 34.2 -31.4
2025-11-25T17:09:05.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:09:05.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:09:05.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.630656
2025-11-25T17:09:05.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:09:05.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:09:05.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:09:05.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:09:05.294 [DEBUG] [Thread-2533] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:09:05.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:09:05.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:08:57', tmtdew=39.73, humidity=6.29, cloud=0.0, wind=14.89, temperature=27.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:08:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:09:05.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:09:05.395 [DEBUG] [Thread-2536] [transport.py] [_log()] starting thread (client mode): 0x737c4880
2025-11-25T17:09:05.395 [DEBUG] [Thread-2536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:09:05.409 [DEBUG] [Thread-2536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:09:05.409 [INFO] [Thread-2536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:09:05.417 [DEBUG] [Thread-2536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:09:05.417 [DEBUG] [Thread-2536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:09:05.417 [DEBUG] [Thread-2536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:09:05.417 [DEBUG] [Thread-2536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:09:05.417 [DEBUG] [Thread-2536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:09:05.417 [DEBUG] [Thread-2536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] client lang: <none>
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] server lang: <none>
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] kex follows: False
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] Compression: none
2025-11-25T17:09:05.418 [DEBUG] [Thread-2536] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:09:05.475 [DEBUG] [Thread-2536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:09:05.476 [DEBUG] [Thread-2536] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:09:05.477 [DEBUG] [Thread-2536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:09:05.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:09:05.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:09:05.531 [DEBUG] [Thread-2536] [transport.py] [_log()] userauth is OK
2025-11-25T17:09:05.532 [DEBUG] [Thread-2536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:09:05.532 [DEBUG] [Thread-2536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:09:05.532 [DEBUG] [Thread-2536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:09:05.532 [DEBUG] [Thread-2536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:09:05.551 [INFO] [Thread-2536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:09:05.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:09:05.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:09:06.360 [DEBUG] [Thread-2536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:09:06.360 [DEBUG] [Thread-2536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:09:06.407 [DEBUG] [Thread-2536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:09:06.407 [DEBUG] [Thread-2536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:09:06.416 [DEBUG] [Thread-2536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:09:06.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:09:06.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:09:06.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:09:06.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:09:06.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:09:06.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:09:06.449 [DEBUG] [Thread-2536] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:09:08.964 [DEBUG] [Thread-2538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:09:24.019 [DEBUG] [Thread-2539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:09:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:09:36.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:09:36.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:09:37.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 9, 29), 39.67, 6.29, 0.0, 10.61, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:09:37.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:09:29
2025-11-25T17:09:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:09:37.434 [DEBUG] [Thread-2540] [transport.py] [_log()] starting thread (client mode): 0x737e8070
2025-11-25T17:09:37.434 [DEBUG] [Thread-2540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:09:37.446 [DEBUG] [Thread-2540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:09:37.446 [INFO] [Thread-2540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] client lang: <none>
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] server lang: <none>
2025-11-25T17:09:37.448 [DEBUG] [Thread-2540] [transport.py] [_log()] kex follows: False
2025-11-25T17:09:37.449 [DEBUG] [Thread-2540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:09:37.449 [DEBUG] [Thread-2540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:09:37.449 [DEBUG] [Thread-2540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:09:37.449 [DEBUG] [Thread-2540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:09:37.449 [DEBUG] [Thread-2540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:09:37.449 [DEBUG] [Thread-2540] [transport.py] [_log()] Compression: none
2025-11-25T17:09:37.449 [DEBUG] [Thread-2540] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:09:37.462 [DEBUG] [Thread-2540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:09:37.462 [DEBUG] [Thread-2540] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:09:37.462 [DEBUG] [Thread-2540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:09:37.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:09:37.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:09:37.463 [DEBUG] [Thread-2540] [transport.py] [_log()] userauth is OK
2025-11-25T17:09:37.463 [DEBUG] [Thread-2540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:09:37.463 [DEBUG] [Thread-2540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:09:37.463 [DEBUG] [Thread-2540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:09:37.463 [DEBUG] [Thread-2540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:09:37.472 [INFO] [Thread-2540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:09:37.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:09:37.758 [DEBUG] [Thread-2542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:09:38.245 [DEBUG] [Thread-2540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:09:38.245 [DEBUG] [Thread-2540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:09:38.246 [DEBUG] [Thread-2540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:09:38.286 [DEBUG] [Thread-2540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:09:38.286 [DEBUG] [Thread-2540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:09:38.289 [DEBUG] [Thread-2540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:09:38.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:09:38.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:09:38.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:09:38.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:09:38.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:09:38.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:09:38.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:09:38.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:09:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:09:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.631003 -999.00  +27.10  10.86     11   -5.00 1 1 1 1 1   887    0 32.33 7.57 ----- 13.1 10.9 22.6 15.5 32.4 -32.8 32.6 -32.5 34.0 -30.2 34.1 -31.4
2025-11-25T17:09:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:09:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:09:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.631003
2025-11-25T17:09:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:09:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:09:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:09:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:09:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:09:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:09:29', tmtdew=39.67, humidity=6.29, cloud=0.0, wind=10.61, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:08:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:09:38.316 [DEBUG] [Thread-2540] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:09:38.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:09:38.423 [DEBUG] [Thread-2544] [transport.py] [_log()] starting thread (client mode): 0x7374f190
2025-11-25T17:09:38.423 [DEBUG] [Thread-2544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:09:38.438 [DEBUG] [Thread-2544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:09:38.443 [INFO] [Thread-2544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:09:38.445 [DEBUG] [Thread-2544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:09:38.445 [DEBUG] [Thread-2544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:09:38.445 [DEBUG] [Thread-2544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] client lang: <none>
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] server lang: <none>
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] kex follows: False
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:09:38.446 [DEBUG] [Thread-2544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:09:38.447 [DEBUG] [Thread-2544] [transport.py] [_log()] Compression: none
2025-11-25T17:09:38.447 [DEBUG] [Thread-2544] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:09:38.511 [DEBUG] [Thread-2544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:09:38.512 [DEBUG] [Thread-2544] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:09:38.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:09:38.513 [DEBUG] [Thread-2544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:09:38.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:09:38.567 [DEBUG] [Thread-2544] [transport.py] [_log()] userauth is OK
2025-11-25T17:09:38.568 [DEBUG] [Thread-2544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:09:38.568 [DEBUG] [Thread-2544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:09:38.568 [DEBUG] [Thread-2544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:09:38.568 [DEBUG] [Thread-2544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:09:38.586 [INFO] [Thread-2544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:09:38.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:09:38.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:09:39.066 [DEBUG] [Thread-2546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:09:39.399 [DEBUG] [Thread-2544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:09:39.400 [DEBUG] [Thread-2544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:09:39.448 [DEBUG] [Thread-2544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:09:39.448 [DEBUG] [Thread-2544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:09:39.459 [DEBUG] [Thread-2544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:09:39.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:09:39.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:09:39.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:09:39.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:09:39.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:09:39.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:09:39.499 [DEBUG] [Thread-2544] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:09:54.142 [DEBUG] [Thread-2547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:10:09.186 [DEBUG] [Thread-2548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:10:09.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:10:09.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:10:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:10:10.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 10, 1), 39.87, 6.31, 0.0, 12.95, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:10:10.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:10:01
2025-11-25T17:10:10.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:10:10.447 [DEBUG] [Thread-2549] [transport.py] [_log()] starting thread (client mode): 0x7374d000
2025-11-25T17:10:10.447 [DEBUG] [Thread-2549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:10:10.468 [DEBUG] [Thread-2549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:10:10.468 [INFO] [Thread-2549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:10:10.472 [DEBUG] [Thread-2549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:10:10.472 [DEBUG] [Thread-2549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:10:10.472 [DEBUG] [Thread-2549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:10:10.472 [DEBUG] [Thread-2549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:10:10.472 [DEBUG] [Thread-2549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:10:10.472 [DEBUG] [Thread-2549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:10:10.473 [DEBUG] [Thread-2549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:10:10.473 [DEBUG] [Thread-2549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:10:10.473 [DEBUG] [Thread-2549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:10:10.473 [DEBUG] [Thread-2549] [transport.py] [_log()] client lang: <none>
2025-11-25T17:10:10.473 [DEBUG] [Thread-2549] [transport.py] [_log()] server lang: <none>
2025-11-25T17:10:10.473 [DEBUG] [Thread-2549] [transport.py] [_log()] kex follows: False
2025-11-25T17:10:10.473 [DEBUG] [Thread-2549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:10:10.473 [DEBUG] [Thread-2549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:10:10.473 [DEBUG] [Thread-2549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:10:10.474 [DEBUG] [Thread-2549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:10:10.474 [DEBUG] [Thread-2549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:10:10.474 [DEBUG] [Thread-2549] [transport.py] [_log()] Compression: none
2025-11-25T17:10:10.474 [DEBUG] [Thread-2549] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:10:10.493 [DEBUG] [Thread-2549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:10:10.494 [DEBUG] [Thread-2549] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:10:10.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:10:10.495 [DEBUG] [Thread-2549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:10:10.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:10:10.497 [DEBUG] [Thread-2549] [transport.py] [_log()] userauth is OK
2025-11-25T17:10:10.497 [DEBUG] [Thread-2549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:10:10.497 [DEBUG] [Thread-2549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:10:10.497 [DEBUG] [Thread-2549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:10:10.497 [DEBUG] [Thread-2549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:10:10.532 [INFO] [Thread-2549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:10:10.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:10:17.189 [DEBUG] [Thread-2549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:10:17.190 [DEBUG] [Thread-2549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:10:17.190 [DEBUG] [Thread-2549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:10:17.231 [DEBUG] [Thread-2549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:10:17.231 [DEBUG] [Thread-2549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:10:17.239 [DEBUG] [Thread-2549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:10:17.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:10:17.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:10:17.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:10:17.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:10:17.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:10:17.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:10:17.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:10:17.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:10:17.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:10:17.702 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-11-25T17:10:17.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:10:01', tmtdew=39.87, humidity=6.31, cloud=0.0, wind=12.95, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:10:17.704 [DEBUG] [Thread-2549] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:10:17.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:10:17.811 [DEBUG] [Thread-2552] [transport.py] [_log()] starting thread (client mode): 0x7376ec50
2025-11-25T17:10:17.811 [DEBUG] [Thread-2552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:10:17.829 [DEBUG] [Thread-2552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:10:17.829 [INFO] [Thread-2552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:10:17.839 [DEBUG] [Thread-2552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:10:17.840 [DEBUG] [Thread-2552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:10:17.840 [DEBUG] [Thread-2552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:10:17.840 [DEBUG] [Thread-2552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:10:17.840 [DEBUG] [Thread-2552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:10:17.840 [DEBUG] [Thread-2552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:10:17.840 [DEBUG] [Thread-2552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:10:17.840 [DEBUG] [Thread-2552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:10:17.840 [DEBUG] [Thread-2552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:10:17.841 [DEBUG] [Thread-2552] [transport.py] [_log()] client lang: <none>
2025-11-25T17:10:17.841 [DEBUG] [Thread-2552] [transport.py] [_log()] server lang: <none>
2025-11-25T17:10:17.841 [DEBUG] [Thread-2552] [transport.py] [_log()] kex follows: False
2025-11-25T17:10:17.841 [DEBUG] [Thread-2552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:10:17.841 [DEBUG] [Thread-2552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:10:17.841 [DEBUG] [Thread-2552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:10:17.841 [DEBUG] [Thread-2552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:10:17.842 [DEBUG] [Thread-2552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:10:17.842 [DEBUG] [Thread-2552] [transport.py] [_log()] Compression: none
2025-11-25T17:10:17.842 [DEBUG] [Thread-2552] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:10:17.903 [DEBUG] [Thread-2552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:10:17.904 [DEBUG] [Thread-2552] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:10:17.905 [DEBUG] [Thread-2552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:10:17.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:10:17.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:10:17.964 [DEBUG] [Thread-2552] [transport.py] [_log()] userauth is OK
2025-11-25T17:10:17.965 [DEBUG] [Thread-2552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:10:17.965 [DEBUG] [Thread-2552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:10:17.965 [DEBUG] [Thread-2552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:10:17.965 [DEBUG] [Thread-2552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:10:17.983 [INFO] [Thread-2552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:10:17.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:10:17.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:10:18.809 [DEBUG] [Thread-2552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:10:18.809 [DEBUG] [Thread-2552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:10:18.862 [DEBUG] [Thread-2552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:10:18.863 [DEBUG] [Thread-2552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:10:18.876 [DEBUG] [Thread-2552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:10:18.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:10:18.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:10:18.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:10:18.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:10:18.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:10:18.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:10:18.923 [DEBUG] [Thread-2552] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:10:24.229 [DEBUG] [Thread-2554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:10:38.261 [DEBUG] [Thread-2555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:10:39.287 [DEBUG] [Thread-2556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:10:48.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:10:48.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:10:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:10:49.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 10, 33), 39.83, 6.32, 0.0, 13.01, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:10:49.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:10:33
2025-11-25T17:10:49.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:10:49.876 [DEBUG] [Thread-2557] [transport.py] [_log()] starting thread (client mode): 0x761db520
2025-11-25T17:10:49.876 [DEBUG] [Thread-2557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:10:49.897 [DEBUG] [Thread-2557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:10:49.897 [INFO] [Thread-2557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:10:49.900 [DEBUG] [Thread-2557] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:10:49.901 [DEBUG] [Thread-2557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:10:49.901 [DEBUG] [Thread-2557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:10:49.901 [DEBUG] [Thread-2557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:10:49.901 [DEBUG] [Thread-2557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:10:49.901 [DEBUG] [Thread-2557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:10:49.901 [DEBUG] [Thread-2557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:10:49.901 [DEBUG] [Thread-2557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:10:49.901 [DEBUG] [Thread-2557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:10:49.901 [DEBUG] [Thread-2557] [transport.py] [_log()] client lang: <none>
2025-11-25T17:10:49.902 [DEBUG] [Thread-2557] [transport.py] [_log()] server lang: <none>
2025-11-25T17:10:49.902 [DEBUG] [Thread-2557] [transport.py] [_log()] kex follows: False
2025-11-25T17:10:49.902 [DEBUG] [Thread-2557] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:10:49.902 [DEBUG] [Thread-2557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:10:49.902 [DEBUG] [Thread-2557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:10:49.902 [DEBUG] [Thread-2557] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:10:49.902 [DEBUG] [Thread-2557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:10:49.902 [DEBUG] [Thread-2557] [transport.py] [_log()] Compression: none
2025-11-25T17:10:49.902 [DEBUG] [Thread-2557] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:10:49.920 [DEBUG] [Thread-2557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:10:49.921 [DEBUG] [Thread-2557] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:10:49.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:10:49.921 [DEBUG] [Thread-2557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:10:49.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:10:49.924 [DEBUG] [Thread-2557] [transport.py] [_log()] userauth is OK
2025-11-25T17:10:49.924 [DEBUG] [Thread-2557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:10:49.924 [DEBUG] [Thread-2557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:10:49.924 [DEBUG] [Thread-2557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:10:49.924 [DEBUG] [Thread-2557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:10:49.948 [INFO] [Thread-2557] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:10:49.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:10:50.539 [DEBUG] [Thread-2557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:10:50.539 [DEBUG] [Thread-2557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:10:50.540 [DEBUG] [Thread-2557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:10:50.580 [DEBUG] [Thread-2557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:10:50.580 [DEBUG] [Thread-2557] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:10:50.583 [DEBUG] [Thread-2557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:10:50.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:10:50.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:10:50.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:10:50.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:10:50.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:10:50.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:10:50.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:10:50.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:10:50.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:10:50.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.632045 -999.00  +27.20  17.47     11   -4.90 1 1 1 1 1   887    0 32.24 6.90 ----- 13.2 17.5 307.6 18.9 32.3 -32.5 32.5 -32.1 33.9 -30.4 34.0 -31.5
2025-11-25T17:10:50.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:10:50.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:10:50.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.632045
2025-11-25T17:10:50.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:10:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:10:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:10:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:10:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:10:50.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:10:33', tmtdew=39.83, humidity=6.32, cloud=0.0, wind=13.01, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:10:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:10:50.602 [DEBUG] [Thread-2557] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:10:50.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:10:50.706 [DEBUG] [Thread-2560] [transport.py] [_log()] starting thread (client mode): 0x7376f9a0
2025-11-25T17:10:50.706 [DEBUG] [Thread-2560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:10:50.721 [DEBUG] [Thread-2560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:10:50.721 [INFO] [Thread-2560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:10:50.728 [DEBUG] [Thread-2560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] client lang: <none>
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] server lang: <none>
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] kex follows: False
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:10:50.729 [DEBUG] [Thread-2560] [transport.py] [_log()] Compression: none
2025-11-25T17:10:50.730 [DEBUG] [Thread-2560] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:10:50.791 [DEBUG] [Thread-2560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:10:50.792 [DEBUG] [Thread-2560] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:10:50.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:10:50.793 [DEBUG] [Thread-2560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:10:50.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:10:50.848 [DEBUG] [Thread-2560] [transport.py] [_log()] userauth is OK
2025-11-25T17:10:50.848 [DEBUG] [Thread-2560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:10:50.848 [DEBUG] [Thread-2560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:10:50.848 [DEBUG] [Thread-2560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:10:50.849 [DEBUG] [Thread-2560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:10:50.867 [INFO] [Thread-2560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:10:50.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:10:50.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:10:51.732 [DEBUG] [Thread-2560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:10:51.732 [DEBUG] [Thread-2560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:10:51.779 [DEBUG] [Thread-2560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:10:51.780 [DEBUG] [Thread-2560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:10:51.789 [DEBUG] [Thread-2560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:10:51.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:10:51.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:10:51.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:10:51.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:10:51.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:10:51.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:10:51.826 [DEBUG] [Thread-2560] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:10:54.334 [DEBUG] [Thread-2562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:11:09.396 [DEBUG] [Thread-2563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:11:21.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:11:21.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:11:21.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:11:22.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 11, 5), 39.84, 6.32, 0.0, 14.75, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:11:22.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:11:05
2025-11-25T17:11:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:11:22.789 [DEBUG] [Thread-2564] [transport.py] [_log()] starting thread (client mode): 0x737c55d0
2025-11-25T17:11:22.790 [DEBUG] [Thread-2564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:11:22.810 [DEBUG] [Thread-2564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:11:22.810 [INFO] [Thread-2564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:11:22.813 [DEBUG] [Thread-2564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] client lang: <none>
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] server lang: <none>
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] kex follows: False
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:11:22.814 [DEBUG] [Thread-2564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:11:22.815 [DEBUG] [Thread-2564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:11:22.815 [DEBUG] [Thread-2564] [transport.py] [_log()] Compression: none
2025-11-25T17:11:22.815 [DEBUG] [Thread-2564] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:11:22.832 [DEBUG] [Thread-2564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:11:22.833 [DEBUG] [Thread-2564] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:11:22.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:11:22.834 [DEBUG] [Thread-2564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:11:22.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:11:22.836 [DEBUG] [Thread-2564] [transport.py] [_log()] userauth is OK
2025-11-25T17:11:22.836 [DEBUG] [Thread-2564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:11:22.836 [DEBUG] [Thread-2564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:11:22.836 [DEBUG] [Thread-2564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:11:22.836 [DEBUG] [Thread-2564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:11:22.860 [INFO] [Thread-2564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:11:22.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:11:23.601 [DEBUG] [Thread-2564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:11:23.601 [DEBUG] [Thread-2564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:11:23.602 [DEBUG] [Thread-2564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:11:23.642 [DEBUG] [Thread-2564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:11:23.642 [DEBUG] [Thread-2564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:11:23.645 [DEBUG] [Thread-2564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:11:23.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:11:23.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:11:23.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:11:23.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:11:23.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:11:23.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:11:23.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:11:23.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:11:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:11:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.632392 -999.00  +27.30  22.85     11   -5.00 1 1 1 1 1   887    0 32.36 7.49 ----- 21.1 22.9 299.4 26.1 32.2 -32.6 32.6 -32.5 33.6 -31.0 33.9 -32.3
2025-11-25T17:11:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:11:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:11:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.632392
2025-11-25T17:11:23.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:11:23.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:11:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:11:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:11:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:11:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:11:05', tmtdew=39.84, humidity=6.32, cloud=0.0, wind=14.75, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:10:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:11:23.670 [DEBUG] [Thread-2564] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:11:23.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:11:23.774 [DEBUG] [Thread-2567] [transport.py] [_log()] starting thread (client mode): 0x7376f370
2025-11-25T17:11:23.774 [DEBUG] [Thread-2567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:11:23.788 [DEBUG] [Thread-2567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:11:23.789 [INFO] [Thread-2567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:11:23.796 [DEBUG] [Thread-2567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:11:23.796 [DEBUG] [Thread-2567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:11:23.797 [DEBUG] [Thread-2567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:11:23.797 [DEBUG] [Thread-2567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:11:23.797 [DEBUG] [Thread-2567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:11:23.797 [DEBUG] [Thread-2567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:11:23.797 [DEBUG] [Thread-2567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:11:23.797 [DEBUG] [Thread-2567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:11:23.797 [DEBUG] [Thread-2567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:11:23.798 [DEBUG] [Thread-2567] [transport.py] [_log()] client lang: <none>
2025-11-25T17:11:23.798 [DEBUG] [Thread-2567] [transport.py] [_log()] server lang: <none>
2025-11-25T17:11:23.798 [DEBUG] [Thread-2567] [transport.py] [_log()] kex follows: False
2025-11-25T17:11:23.798 [DEBUG] [Thread-2567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:11:23.798 [DEBUG] [Thread-2567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:11:23.798 [DEBUG] [Thread-2567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:11:23.798 [DEBUG] [Thread-2567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:11:23.799 [DEBUG] [Thread-2567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:11:23.799 [DEBUG] [Thread-2567] [transport.py] [_log()] Compression: none
2025-11-25T17:11:23.799 [DEBUG] [Thread-2567] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:11:23.856 [DEBUG] [Thread-2567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:11:23.857 [DEBUG] [Thread-2567] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:11:23.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:11:23.858 [DEBUG] [Thread-2567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:11:23.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:11:23.916 [DEBUG] [Thread-2567] [transport.py] [_log()] userauth is OK
2025-11-25T17:11:23.916 [DEBUG] [Thread-2567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:11:23.916 [DEBUG] [Thread-2567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:11:23.916 [DEBUG] [Thread-2567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:11:23.917 [DEBUG] [Thread-2567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:11:23.935 [INFO] [Thread-2567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:11:23.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:11:23.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:11:24.441 [DEBUG] [Thread-2569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:11:24.775 [DEBUG] [Thread-2567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:11:24.775 [DEBUG] [Thread-2567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:11:24.823 [DEBUG] [Thread-2567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:11:24.823 [DEBUG] [Thread-2567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:11:24.832 [DEBUG] [Thread-2567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:11:24.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:11:24.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:11:24.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:11:24.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:11:24.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:11:24.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:11:24.869 [DEBUG] [Thread-2567] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:11:38.809 [DEBUG] [Thread-2570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:11:39.503 [DEBUG] [Thread-2571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:11:54.543 [DEBUG] [Thread-2572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:11:54.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:11:54.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:11:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:11:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 11, 37), 39.71, 6.31, 0.0, 13.71, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:11:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:11:37
2025-11-25T17:11:55.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:11:55.821 [DEBUG] [Thread-2573] [transport.py] [_log()] starting thread (client mode): 0x7376eb00
2025-11-25T17:11:55.821 [DEBUG] [Thread-2573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:11:55.842 [DEBUG] [Thread-2573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:11:55.842 [INFO] [Thread-2573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:11:55.845 [DEBUG] [Thread-2573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:11:55.845 [DEBUG] [Thread-2573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:11:55.845 [DEBUG] [Thread-2573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:11:55.845 [DEBUG] [Thread-2573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:11:55.845 [DEBUG] [Thread-2573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] client lang: <none>
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] server lang: <none>
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] kex follows: False
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] Compression: none
2025-11-25T17:11:55.846 [DEBUG] [Thread-2573] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:11:55.865 [DEBUG] [Thread-2573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:11:55.865 [DEBUG] [Thread-2573] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:11:55.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:11:55.866 [DEBUG] [Thread-2573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:11:55.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:11:55.868 [DEBUG] [Thread-2573] [transport.py] [_log()] userauth is OK
2025-11-25T17:11:55.868 [DEBUG] [Thread-2573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:11:55.868 [DEBUG] [Thread-2573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:11:55.869 [DEBUG] [Thread-2573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:11:55.869 [DEBUG] [Thread-2573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:11:55.904 [INFO] [Thread-2573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:11:55.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:11:56.559 [DEBUG] [Thread-2573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:11:56.560 [DEBUG] [Thread-2573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:11:56.560 [DEBUG] [Thread-2573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:11:56.601 [DEBUG] [Thread-2573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:11:56.601 [DEBUG] [Thread-2573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:11:56.604 [DEBUG] [Thread-2573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:11:56.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:11:56.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:11:56.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:11:56.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:11:56.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:11:56.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:11:56.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:11:56.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:11:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:11:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.632739 -999.00  +27.10  16.35     11   -5.20 1 1 1 1 1   887    0 32.69 9.17 ----- 19.2 16.4 291.4 25.9 32.1 -32.7 -999.0 -999.0 33.6 -33.0 33.7 -31.9
2025-11-25T17:11:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:11:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:11:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.632739
2025-11-25T17:11:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:11:56.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:11:56.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:11:56.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:11:56.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:11:56.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:11:37', tmtdew=39.71, humidity=6.31, cloud=0.0, wind=13.71, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:11:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:11:56.630 [DEBUG] [Thread-2573] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:11:56.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:11:56.733 [DEBUG] [Thread-2576] [transport.py] [_log()] starting thread (client mode): 0x7374e4a0
2025-11-25T17:11:56.733 [DEBUG] [Thread-2576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:11:56.747 [DEBUG] [Thread-2576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:11:56.748 [INFO] [Thread-2576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:11:56.755 [DEBUG] [Thread-2576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:11:56.755 [DEBUG] [Thread-2576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:11:56.756 [DEBUG] [Thread-2576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:11:56.756 [DEBUG] [Thread-2576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:11:56.756 [DEBUG] [Thread-2576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:11:56.756 [DEBUG] [Thread-2576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:11:56.756 [DEBUG] [Thread-2576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:11:56.756 [DEBUG] [Thread-2576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:11:56.756 [DEBUG] [Thread-2576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:11:56.756 [DEBUG] [Thread-2576] [transport.py] [_log()] client lang: <none>
2025-11-25T17:11:56.756 [DEBUG] [Thread-2576] [transport.py] [_log()] server lang: <none>
2025-11-25T17:11:56.757 [DEBUG] [Thread-2576] [transport.py] [_log()] kex follows: False
2025-11-25T17:11:56.757 [DEBUG] [Thread-2576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:11:56.757 [DEBUG] [Thread-2576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:11:56.757 [DEBUG] [Thread-2576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:11:56.757 [DEBUG] [Thread-2576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:11:56.757 [DEBUG] [Thread-2576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:11:56.757 [DEBUG] [Thread-2576] [transport.py] [_log()] Compression: none
2025-11-25T17:11:56.758 [DEBUG] [Thread-2576] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:11:56.817 [DEBUG] [Thread-2576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:11:56.817 [DEBUG] [Thread-2576] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:11:56.818 [DEBUG] [Thread-2576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:11:56.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:11:56.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:11:56.876 [DEBUG] [Thread-2576] [transport.py] [_log()] userauth is OK
2025-11-25T17:11:56.876 [DEBUG] [Thread-2576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:11:56.877 [DEBUG] [Thread-2576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:11:56.877 [DEBUG] [Thread-2576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:11:56.877 [DEBUG] [Thread-2576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:11:56.895 [INFO] [Thread-2576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:11:56.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:11:56.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:11:57.722 [DEBUG] [Thread-2576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:11:57.722 [DEBUG] [Thread-2576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:11:57.770 [DEBUG] [Thread-2576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:11:57.770 [DEBUG] [Thread-2576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:11:57.779 [DEBUG] [Thread-2576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:11:57.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:11:57.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:11:57.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:11:57.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:11:57.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:11:57.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:11:57.816 [DEBUG] [Thread-2576] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:12:09.592 [DEBUG] [Thread-2578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:12:24.652 [DEBUG] [Thread-2579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:12:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:12:27.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:12:27.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:12:28.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 12, 9), 40.0, 6.18, 0.0, 16.75, 27.28, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:12:28.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:12:09
2025-11-25T17:12:28.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:12:28.781 [DEBUG] [Thread-2580] [transport.py] [_log()] starting thread (client mode): 0x7378f2b0
2025-11-25T17:12:28.781 [DEBUG] [Thread-2580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:12:28.801 [DEBUG] [Thread-2580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:12:28.802 [INFO] [Thread-2580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:12:28.805 [DEBUG] [Thread-2580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:12:28.805 [DEBUG] [Thread-2580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:12:28.805 [DEBUG] [Thread-2580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:12:28.805 [DEBUG] [Thread-2580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:12:28.805 [DEBUG] [Thread-2580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] client lang: <none>
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] server lang: <none>
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] kex follows: False
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] Compression: none
2025-11-25T17:12:28.806 [DEBUG] [Thread-2580] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:12:28.824 [DEBUG] [Thread-2580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:12:28.825 [DEBUG] [Thread-2580] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:12:28.825 [DEBUG] [Thread-2580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:12:28.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:12:28.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:12:28.827 [DEBUG] [Thread-2580] [transport.py] [_log()] userauth is OK
2025-11-25T17:12:28.827 [DEBUG] [Thread-2580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:12:28.828 [DEBUG] [Thread-2580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:12:28.828 [DEBUG] [Thread-2580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:12:28.828 [DEBUG] [Thread-2580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:12:28.852 [INFO] [Thread-2580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:12:28.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:12:29.602 [DEBUG] [Thread-2580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:12:29.603 [DEBUG] [Thread-2580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:12:29.603 [DEBUG] [Thread-2580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:12:29.644 [DEBUG] [Thread-2580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:12:29.644 [DEBUG] [Thread-2580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:12:29.647 [DEBUG] [Thread-2580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:12:29.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:12:29.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:12:29.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:12:29.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:12:29.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:12:29.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:12:29.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:12:29.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:12:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:12:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.633086 -999.00  +27.30  15.81     11   -5.10 1 1 1 1 1   887    0 32.41 9.42 ----- 19.8 15.8 282.2 23.6 32.0 -33.2 32.4 -32.2 33.5 -30.3 33.7 -31.2
2025-11-25T17:12:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:12:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:12:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.633086
2025-11-25T17:12:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:12:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:12:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:12:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:12:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:12:29.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:12:09', tmtdew=40.0, humidity=6.18, cloud=0.0, wind=16.75, temperature=27.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:11:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:12:29.669 [DEBUG] [Thread-2580] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:12:29.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:12:29.773 [DEBUG] [Thread-2583] [transport.py] [_log()] starting thread (client mode): 0x7378dab0
2025-11-25T17:12:29.773 [DEBUG] [Thread-2583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:12:29.788 [DEBUG] [Thread-2583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:12:29.788 [INFO] [Thread-2583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:12:29.796 [DEBUG] [Thread-2583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:12:29.796 [DEBUG] [Thread-2583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:12:29.796 [DEBUG] [Thread-2583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:12:29.796 [DEBUG] [Thread-2583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:12:29.796 [DEBUG] [Thread-2583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:12:29.796 [DEBUG] [Thread-2583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:12:29.796 [DEBUG] [Thread-2583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:12:29.797 [DEBUG] [Thread-2583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:12:29.797 [DEBUG] [Thread-2583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:12:29.797 [DEBUG] [Thread-2583] [transport.py] [_log()] client lang: <none>
2025-11-25T17:12:29.797 [DEBUG] [Thread-2583] [transport.py] [_log()] server lang: <none>
2025-11-25T17:12:29.797 [DEBUG] [Thread-2583] [transport.py] [_log()] kex follows: False
2025-11-25T17:12:29.797 [DEBUG] [Thread-2583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:12:29.797 [DEBUG] [Thread-2583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:12:29.797 [DEBUG] [Thread-2583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:12:29.798 [DEBUG] [Thread-2583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:12:29.798 [DEBUG] [Thread-2583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:12:29.798 [DEBUG] [Thread-2583] [transport.py] [_log()] Compression: none
2025-11-25T17:12:29.798 [DEBUG] [Thread-2583] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:12:29.857 [DEBUG] [Thread-2583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:12:29.857 [DEBUG] [Thread-2583] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:12:29.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:12:29.859 [DEBUG] [Thread-2583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:12:29.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:12:29.916 [DEBUG] [Thread-2583] [transport.py] [_log()] userauth is OK
2025-11-25T17:12:29.916 [DEBUG] [Thread-2583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:12:29.917 [DEBUG] [Thread-2583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:12:29.917 [DEBUG] [Thread-2583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:12:29.917 [DEBUG] [Thread-2583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:12:29.946 [INFO] [Thread-2583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:12:29.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:12:29.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:12:30.786 [DEBUG] [Thread-2583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:12:30.786 [DEBUG] [Thread-2583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:12:30.836 [DEBUG] [Thread-2583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:12:30.836 [DEBUG] [Thread-2583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:12:30.845 [DEBUG] [Thread-2583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:12:30.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:12:30.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:12:30.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:12:30.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:12:30.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:12:30.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:12:30.882 [DEBUG] [Thread-2583] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:12:39.518 [DEBUG] [Thread-2585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:12:39.700 [DEBUG] [Thread-2586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:12:54.760 [DEBUG] [Thread-2587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:13:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:13:00.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:13:00.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:13:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 12, 41), 39.93, 6.61, 0.0, 22.34, 27.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:13:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:12:41
2025-11-25T17:13:01.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:13:01.848 [DEBUG] [Thread-2588] [transport.py] [_log()] starting thread (client mode): 0x7374cf70
2025-11-25T17:13:01.848 [DEBUG] [Thread-2588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:13:01.868 [DEBUG] [Thread-2588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:13:01.868 [INFO] [Thread-2588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:13:01.871 [DEBUG] [Thread-2588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] client lang: <none>
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] server lang: <none>
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] kex follows: False
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:13:01.872 [DEBUG] [Thread-2588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:13:01.873 [DEBUG] [Thread-2588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:13:01.873 [DEBUG] [Thread-2588] [transport.py] [_log()] Compression: none
2025-11-25T17:13:01.873 [DEBUG] [Thread-2588] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:13:01.891 [DEBUG] [Thread-2588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:13:01.892 [DEBUG] [Thread-2588] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:13:01.892 [DEBUG] [Thread-2588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:13:01.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:13:01.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:13:01.895 [DEBUG] [Thread-2588] [transport.py] [_log()] userauth is OK
2025-11-25T17:13:01.895 [DEBUG] [Thread-2588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:13:01.895 [DEBUG] [Thread-2588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:13:01.895 [DEBUG] [Thread-2588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:13:01.895 [DEBUG] [Thread-2588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:13:01.920 [INFO] [Thread-2588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:13:01.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:13:02.550 [DEBUG] [Thread-2588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:13:02.550 [DEBUG] [Thread-2588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:13:02.550 [DEBUG] [Thread-2588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:13:02.591 [DEBUG] [Thread-2588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:13:02.591 [DEBUG] [Thread-2588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:13:02.595 [DEBUG] [Thread-2588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:13:02.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:13:02.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:13:02.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:13:02.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:13:02.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:13:02.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:13:02.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:13:02.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:13:02.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:13:02.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.633434 -999.00  +27.20  21.40     11   -5.00 1 1 1 1 1   887    0 32.37 10.21 ----- 21.9 21.4 315.4 25.6 32.0 -32.5 32.4 -32.4 33.4 -30.2 33.5 -31.6
2025-11-25T17:13:02.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:13:02.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:13:02.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.633434
2025-11-25T17:13:02.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:13:02.619 [DEBUG] [Thread-2588] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:13:02.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:13:02.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:13:02.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:13:02.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:13:02.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:12:41', tmtdew=39.93, humidity=6.61, cloud=0.0, wind=22.34, temperature=27.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:12:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:13:02.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:13:02.724 [DEBUG] [Thread-2591] [transport.py] [_log()] starting thread (client mode): 0x737c6530
2025-11-25T17:13:02.724 [DEBUG] [Thread-2591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:13:02.738 [DEBUG] [Thread-2591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:13:02.738 [INFO] [Thread-2591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:13:02.746 [DEBUG] [Thread-2591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:13:02.746 [DEBUG] [Thread-2591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:13:02.746 [DEBUG] [Thread-2591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:13:02.746 [DEBUG] [Thread-2591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:13:02.746 [DEBUG] [Thread-2591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:13:02.746 [DEBUG] [Thread-2591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:13:02.746 [DEBUG] [Thread-2591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] client lang: <none>
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] server lang: <none>
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] kex follows: False
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] Compression: none
2025-11-25T17:13:02.747 [DEBUG] [Thread-2591] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:13:02.809 [DEBUG] [Thread-2591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:13:02.809 [DEBUG] [Thread-2591] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:13:02.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:13:02.810 [DEBUG] [Thread-2591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:13:02.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:13:02.868 [DEBUG] [Thread-2591] [transport.py] [_log()] userauth is OK
2025-11-25T17:13:02.869 [DEBUG] [Thread-2591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:13:02.869 [DEBUG] [Thread-2591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:13:02.869 [DEBUG] [Thread-2591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:13:02.869 [DEBUG] [Thread-2591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:13:02.887 [INFO] [Thread-2591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:13:02.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:13:02.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:13:03.786 [DEBUG] [Thread-2591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:13:03.786 [DEBUG] [Thread-2591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:13:03.834 [DEBUG] [Thread-2591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:13:03.834 [DEBUG] [Thread-2591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:13:03.843 [DEBUG] [Thread-2591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:13:03.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:13:03.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:13:03.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:13:03.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:13:03.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:13:03.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:13:03.877 [DEBUG] [Thread-2591] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:13:09.803 [DEBUG] [Thread-2593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:13:24.871 [DEBUG] [Thread-2594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:13:33.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:13:33.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:13:33.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:13:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 13, 13), 39.92, 6.63, 0.0, 21.33, 27.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:13:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:13:13
2025-11-25T17:13:34.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:13:34.823 [DEBUG] [Thread-2595] [transport.py] [_log()] starting thread (client mode): 0x7378d930
2025-11-25T17:13:34.824 [DEBUG] [Thread-2595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:13:34.844 [DEBUG] [Thread-2595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:13:34.845 [INFO] [Thread-2595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:13:34.847 [DEBUG] [Thread-2595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] client lang: <none>
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] server lang: <none>
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] kex follows: False
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:13:34.848 [DEBUG] [Thread-2595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:13:34.849 [DEBUG] [Thread-2595] [transport.py] [_log()] Compression: none
2025-11-25T17:13:34.849 [DEBUG] [Thread-2595] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:13:34.858 [DEBUG] [Thread-2595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:13:34.858 [DEBUG] [Thread-2595] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:13:34.859 [DEBUG] [Thread-2595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:13:34.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:13:34.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:13:34.861 [DEBUG] [Thread-2595] [transport.py] [_log()] userauth is OK
2025-11-25T17:13:34.861 [DEBUG] [Thread-2595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:13:34.861 [DEBUG] [Thread-2595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:13:34.861 [DEBUG] [Thread-2595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:13:34.862 [DEBUG] [Thread-2595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:13:34.887 [INFO] [Thread-2595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:13:34.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:13:35.686 [DEBUG] [Thread-2595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:13:35.686 [DEBUG] [Thread-2595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:13:35.686 [DEBUG] [Thread-2595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:13:35.727 [DEBUG] [Thread-2595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:13:35.727 [DEBUG] [Thread-2595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:13:35.730 [DEBUG] [Thread-2595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:13:35.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:13:35.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:13:35.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:13:35.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:13:35.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:13:35.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:13:35.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:13:35.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:13:35.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:13:35.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.633781 -999.00  +26.80  21.04     11   -5.20 1 1 1 1 1   887    0 32.47 8.59 ----- 22.1 21.0 305.6 29.4 31.8 -33.2 32.3 -33.2 33.2 -30.7 33.5 -31.7
2025-11-25T17:13:35.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:13:35.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:13:35.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.633781
2025-11-25T17:13:35.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:13:35.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:13:35.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:13:35.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:13:35.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:13:35.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:13:13', tmtdew=39.92, humidity=6.63, cloud=0.0, wind=21.33, temperature=27.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:12:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:13:35.752 [DEBUG] [Thread-2595] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:13:35.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:13:35.855 [DEBUG] [Thread-2598] [transport.py] [_log()] starting thread (client mode): 0x7378d720
2025-11-25T17:13:35.855 [DEBUG] [Thread-2598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:13:35.870 [DEBUG] [Thread-2598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:13:35.870 [INFO] [Thread-2598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:13:35.877 [DEBUG] [Thread-2598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:13:35.878 [DEBUG] [Thread-2598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:13:35.878 [DEBUG] [Thread-2598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:13:35.878 [DEBUG] [Thread-2598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:13:35.878 [DEBUG] [Thread-2598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:13:35.878 [DEBUG] [Thread-2598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:13:35.878 [DEBUG] [Thread-2598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:13:35.879 [DEBUG] [Thread-2598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:13:35.879 [DEBUG] [Thread-2598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:13:35.879 [DEBUG] [Thread-2598] [transport.py] [_log()] client lang: <none>
2025-11-25T17:13:35.879 [DEBUG] [Thread-2598] [transport.py] [_log()] server lang: <none>
2025-11-25T17:13:35.879 [DEBUG] [Thread-2598] [transport.py] [_log()] kex follows: False
2025-11-25T17:13:35.879 [DEBUG] [Thread-2598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:13:35.879 [DEBUG] [Thread-2598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:13:35.879 [DEBUG] [Thread-2598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:13:35.880 [DEBUG] [Thread-2598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:13:35.880 [DEBUG] [Thread-2598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:13:35.880 [DEBUG] [Thread-2598] [transport.py] [_log()] Compression: none
2025-11-25T17:13:35.880 [DEBUG] [Thread-2598] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:13:35.936 [DEBUG] [Thread-2598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:13:35.937 [DEBUG] [Thread-2598] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:13:35.937 [DEBUG] [Thread-2598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:13:35.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:13:35.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:13:36.000 [DEBUG] [Thread-2598] [transport.py] [_log()] userauth is OK
2025-11-25T17:13:36.000 [DEBUG] [Thread-2598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:13:36.000 [DEBUG] [Thread-2598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:13:36.000 [DEBUG] [Thread-2598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:13:36.000 [DEBUG] [Thread-2598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:13:36.020 [INFO] [Thread-2598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:13:36.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:13:36.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:13:36.897 [DEBUG] [Thread-2598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:13:36.897 [DEBUG] [Thread-2598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:13:36.946 [DEBUG] [Thread-2598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:13:36.946 [DEBUG] [Thread-2598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:13:36.955 [DEBUG] [Thread-2598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:13:36.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:13:36.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:13: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') -> 00000000
2025-11-25T17:13:36.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:13:36.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:13:36.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:13:36.992 [DEBUG] [Thread-2598] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:13:39.916 [DEBUG] [Thread-2600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:13:40.023 [DEBUG] [Thread-2601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:13:54.970 [DEBUG] [Thread-2602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:14:07.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:14:07.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:14:07.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:14:07.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 13, 45), 39.84, 6.61, 0.0, 16.64, 27.6, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:14:07.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:13:45
2025-11-25T17:14:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:14:07.992 [DEBUG] [Thread-2603] [transport.py] [_log()] starting thread (client mode): 0x7374c7f0
2025-11-25T17:14:07.992 [DEBUG] [Thread-2603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:14:08.014 [DEBUG] [Thread-2603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:14:08.014 [INFO] [Thread-2603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:14:08.017 [DEBUG] [Thread-2603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:14:08.017 [DEBUG] [Thread-2603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:14:08.017 [DEBUG] [Thread-2603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:14:08.017 [DEBUG] [Thread-2603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] client lang: <none>
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] server lang: <none>
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] kex follows: False
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] Compression: none
2025-11-25T17:14:08.018 [DEBUG] [Thread-2603] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:14:08.033 [DEBUG] [Thread-2603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:14:08.033 [DEBUG] [Thread-2603] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:14:08.033 [DEBUG] [Thread-2603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:14:08.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:14:08.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:14:08.034 [DEBUG] [Thread-2603] [transport.py] [_log()] userauth is OK
2025-11-25T17:14:08.034 [DEBUG] [Thread-2603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:14:08.034 [DEBUG] [Thread-2603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:14:08.034 [DEBUG] [Thread-2603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:14:08.034 [DEBUG] [Thread-2603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:14:08.061 [INFO] [Thread-2603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:14:08.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:14:08.722 [DEBUG] [Thread-2603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:14:08.722 [DEBUG] [Thread-2603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:14:08.722 [DEBUG] [Thread-2603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:14:08.763 [DEBUG] [Thread-2603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:14:08.763 [DEBUG] [Thread-2603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:14:08.765 [DEBUG] [Thread-2603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:14:08.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:14:08.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:14:08.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:14:08.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:14:08.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:14:08.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:14:08.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.634128 -999.00  +26.80  16.75     11   -5.20 1 1 1 1 1   887    0 32.60 7.02 ----- 15.8 16.8 286.3 24.4 31.8 -32.3 32.1 -32.3 33.1 -30.3 33.3 -31.0
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.634128
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:14:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:13:45', tmtdew=39.84, humidity=6.61, cloud=0.0, wind=16.64, temperature=27.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:13:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:14:08.782 [DEBUG] [Thread-2603] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:14:08.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:14:08.873 [DEBUG] [Thread-2606] [transport.py] [_log()] starting thread (client mode): 0x7378ee90
2025-11-25T17:14:08.873 [DEBUG] [Thread-2606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:14:08.887 [DEBUG] [Thread-2606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:14:08.888 [INFO] [Thread-2606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] client lang: <none>
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] server lang: <none>
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] kex follows: False
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] Compression: none
2025-11-25T17:14:08.895 [DEBUG] [Thread-2606] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:14:08.950 [DEBUG] [Thread-2606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:14:08.950 [DEBUG] [Thread-2606] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:14:08.950 [DEBUG] [Thread-2606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:14:08.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:14:08.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:14:09.008 [DEBUG] [Thread-2606] [transport.py] [_log()] userauth is OK
2025-11-25T17:14:09.008 [DEBUG] [Thread-2606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:14:09.008 [DEBUG] [Thread-2606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:14:09.008 [DEBUG] [Thread-2606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:14:09.008 [DEBUG] [Thread-2606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:14:09.021 [INFO] [Thread-2606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:14:09.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:14:09.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:14:09.843 [DEBUG] [Thread-2606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:14:09.843 [DEBUG] [Thread-2606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:14:09.891 [DEBUG] [Thread-2606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:14:09.891 [DEBUG] [Thread-2606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:14:09.899 [DEBUG] [Thread-2606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:14:09.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:14:09.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:14:09.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:14:09.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:14:09.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:14:09.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:14:09.937 [DEBUG] [Thread-2606] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:14:10.010 [DEBUG] [Thread-2608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:14:25.065 [DEBUG] [Thread-2609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:14:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:14:39.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:14:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:14:40.118 [DEBUG] [Thread-2610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:14:40.554 [DEBUG] [Thread-2611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:14:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 14, 17), 39.84, 6.59, 0.0, 13.09, 27.5, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:14:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:14:17
2025-11-25T17:14:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:14:40.971 [DEBUG] [Thread-2612] [transport.py] [_log()] starting thread (client mode): 0x7376ce20
2025-11-25T17:14:40.971 [DEBUG] [Thread-2612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:14:40.991 [DEBUG] [Thread-2612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:14:40.992 [INFO] [Thread-2612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] client lang: <none>
2025-11-25T17:14:40.995 [DEBUG] [Thread-2612] [transport.py] [_log()] server lang: <none>
2025-11-25T17:14:40.996 [DEBUG] [Thread-2612] [transport.py] [_log()] kex follows: False
2025-11-25T17:14:40.996 [DEBUG] [Thread-2612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:14:40.996 [DEBUG] [Thread-2612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:14:40.996 [DEBUG] [Thread-2612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:14:40.996 [DEBUG] [Thread-2612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:14:40.996 [DEBUG] [Thread-2612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:14:40.996 [DEBUG] [Thread-2612] [transport.py] [_log()] Compression: none
2025-11-25T17:14:40.996 [DEBUG] [Thread-2612] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:14:41.014 [DEBUG] [Thread-2612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:14:41.014 [DEBUG] [Thread-2612] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:14:41.015 [DEBUG] [Thread-2612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:14:41.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:14:41.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:14:41.017 [DEBUG] [Thread-2612] [transport.py] [_log()] userauth is OK
2025-11-25T17:14:41.017 [DEBUG] [Thread-2612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:14:41.017 [DEBUG] [Thread-2612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:14:41.017 [DEBUG] [Thread-2612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:14:41.017 [DEBUG] [Thread-2612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:14:41.042 [INFO] [Thread-2612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:14:41.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:14:41.885 [DEBUG] [Thread-2612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:14:41.886 [DEBUG] [Thread-2612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:14:41.886 [DEBUG] [Thread-2612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:14:41.927 [DEBUG] [Thread-2612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:14:41.927 [DEBUG] [Thread-2612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:14:41.930 [DEBUG] [Thread-2612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:14:41.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:14:41.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:14:41.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:14:41.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:14:41.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:14:41.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:14:41.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:14:41.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:14:41.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:14:41.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.634823 -999.00  +26.90  15.47     11   -5.30 1 1 1 1 1   887    0 32.72 3.48 ----- 13.6 15.5 285.5 15.8 31.8 -32.2 32.1 -31.8 33.1 -31.3 33.3 -31.4
2025-11-25T17:14:41.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:14:41.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:14:41.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.634823
2025-11-25T17:14:41.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:14:41.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:14:41.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:14:41.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:14:41.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:14:41.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:14:17', tmtdew=39.84, humidity=6.59, cloud=0.0, wind=13.09, temperature=27.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:14:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:14:41.951 [DEBUG] [Thread-2612] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:14:42.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:14:42.065 [DEBUG] [Thread-2615] [transport.py] [_log()] starting thread (client mode): 0x737810c0
2025-11-25T17:14:42.065 [DEBUG] [Thread-2615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:14:42.080 [DEBUG] [Thread-2615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:14:42.080 [INFO] [Thread-2615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:14:42.088 [DEBUG] [Thread-2615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:14:42.088 [DEBUG] [Thread-2615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:14:42.088 [DEBUG] [Thread-2615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:14:42.088 [DEBUG] [Thread-2615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:14:42.088 [DEBUG] [Thread-2615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:14:42.088 [DEBUG] [Thread-2615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] client lang: <none>
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] server lang: <none>
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] kex follows: False
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] Compression: none
2025-11-25T17:14:42.089 [DEBUG] [Thread-2615] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:14:42.148 [DEBUG] [Thread-2615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:14:42.149 [DEBUG] [Thread-2615] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:14:42.149 [DEBUG] [Thread-2615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:14:42.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:14:42.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:14:42.204 [DEBUG] [Thread-2615] [transport.py] [_log()] userauth is OK
2025-11-25T17:14:42.205 [DEBUG] [Thread-2615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:14:42.205 [DEBUG] [Thread-2615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:14:42.205 [DEBUG] [Thread-2615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:14:42.205 [DEBUG] [Thread-2615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:14:42.223 [INFO] [Thread-2615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:14:42.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:14:42.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:14:43.030 [DEBUG] [Thread-2615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:14:43.030 [DEBUG] [Thread-2615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:14:43.078 [DEBUG] [Thread-2615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:14:43.078 [DEBUG] [Thread-2615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:14:43.088 [DEBUG] [Thread-2615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:14:43.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:14:43.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:14:43.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:14:43.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:14:43.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:14:43.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:14:43.120 [DEBUG] [Thread-2615] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:14:55.157 [DEBUG] [Thread-2617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:15:10.228 [DEBUG] [Thread-2618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:15:13.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:15:13.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:15:13.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:15:13.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 14, 49), 39.88, 6.66, 0.0, 17.59, 27.38, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:15:13.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:14:49
2025-11-25T17:15:13.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:15:14.075 [DEBUG] [Thread-2619] [transport.py] [_log()] starting thread (client mode): 0x7376f220
2025-11-25T17:15:14.075 [DEBUG] [Thread-2619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:15:14.095 [DEBUG] [Thread-2619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:15:14.096 [INFO] [Thread-2619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:15:14.099 [DEBUG] [Thread-2619] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:15:14.099 [DEBUG] [Thread-2619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] client lang: <none>
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] server lang: <none>
2025-11-25T17:15:14.100 [DEBUG] [Thread-2619] [transport.py] [_log()] kex follows: False
2025-11-25T17:15:14.101 [DEBUG] [Thread-2619] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:15:14.101 [DEBUG] [Thread-2619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:15:14.101 [DEBUG] [Thread-2619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:15:14.101 [DEBUG] [Thread-2619] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:15:14.101 [DEBUG] [Thread-2619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:15:14.101 [DEBUG] [Thread-2619] [transport.py] [_log()] Compression: none
2025-11-25T17:15:14.101 [DEBUG] [Thread-2619] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:15:14.120 [DEBUG] [Thread-2619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:15:14.120 [DEBUG] [Thread-2619] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:15:14.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:15:14.121 [DEBUG] [Thread-2619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:15:14.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:15:14.122 [DEBUG] [Thread-2619] [transport.py] [_log()] userauth is OK
2025-11-25T17:15:14.123 [DEBUG] [Thread-2619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:15:14.123 [DEBUG] [Thread-2619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:15:14.123 [DEBUG] [Thread-2619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:15:14.123 [DEBUG] [Thread-2619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:15:14.157 [INFO] [Thread-2619] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:15:14.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:15:16.669 [DEBUG] [Thread-2619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:15:16.670 [DEBUG] [Thread-2619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:15:16.670 [DEBUG] [Thread-2619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:15:16.711 [DEBUG] [Thread-2619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:15:16.711 [DEBUG] [Thread-2619] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:15:16.716 [DEBUG] [Thread-2619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:15:16.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:15:16.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:15:16.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:15:16.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:15:16.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:15:16.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:15:16.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:15:16.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:15:16.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:15:16.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.635517 -999.00  +26.80  17.68     11   -5.20 1 1 1 1 1   887    0 31.79 -0.64 ----- 20.6 17.7 290.6 24.8 31.6 -32.7 32.0 -32.2 32.9 -29.4 33.1 -31.1
2025-11-25T17:15:16.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:15:16.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:15:16.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.635517
2025-11-25T17:15:16.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:15:16.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:15:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:15:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:15:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:15:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:14:49', tmtdew=39.88, humidity=6.66, cloud=0.0, wind=17.59, temperature=27.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:15:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:15:16.931 [DEBUG] [Thread-2619] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:15:17.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:15:17.036 [DEBUG] [Thread-2622] [transport.py] [_log()] starting thread (client mode): 0x737805e0
2025-11-25T17:15:17.036 [DEBUG] [Thread-2622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:15:17.052 [DEBUG] [Thread-2622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:15:17.052 [INFO] [Thread-2622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:15:17.059 [DEBUG] [Thread-2622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:15:17.060 [DEBUG] [Thread-2622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:15:17.060 [DEBUG] [Thread-2622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:15:17.060 [DEBUG] [Thread-2622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:15:17.060 [DEBUG] [Thread-2622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:15:17.060 [DEBUG] [Thread-2622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:15:17.060 [DEBUG] [Thread-2622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:15:17.060 [DEBUG] [Thread-2622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] client lang: <none>
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] server lang: <none>
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] kex follows: False
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] Compression: none
2025-11-25T17:15:17.061 [DEBUG] [Thread-2622] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:15:17.119 [DEBUG] [Thread-2622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:15:17.119 [DEBUG] [Thread-2622] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:15:17.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:15:17.120 [DEBUG] [Thread-2622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:15:17.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:15:17.176 [DEBUG] [Thread-2622] [transport.py] [_log()] userauth is OK
2025-11-25T17:15:17.177 [DEBUG] [Thread-2622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:15:17.177 [DEBUG] [Thread-2622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:15:17.177 [DEBUG] [Thread-2622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:15:17.177 [DEBUG] [Thread-2622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:15:17.196 [INFO] [Thread-2622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:15:17.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:15:17.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:15:18.050 [DEBUG] [Thread-2622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:15:18.051 [DEBUG] [Thread-2622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:15:18.099 [DEBUG] [Thread-2622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:15:18.099 [DEBUG] [Thread-2622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:15:18.108 [DEBUG] [Thread-2622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:15:18.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:15:18.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:15:18.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:15:18.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:15:18.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:15:18.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:15:18.145 [DEBUG] [Thread-2622] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:15:25.270 [DEBUG] [Thread-2624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:15:40.330 [DEBUG] [Thread-2625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:15:41.271 [DEBUG] [Thread-2626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:15:48.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:15:48.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:15:48.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:15:48.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 15, 21), 40.14, 6.56, 0.0, 16.52, 27.6, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:15:48.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:15:21
2025-11-25T17:15:48.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:15:49.084 [DEBUG] [Thread-2627] [transport.py] [_log()] starting thread (client mode): 0x70d0d9c0
2025-11-25T17:15:49.084 [DEBUG] [Thread-2627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:15:49.105 [DEBUG] [Thread-2627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:15:49.106 [INFO] [Thread-2627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:15:49.107 [DEBUG] [Thread-2627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:15:49.107 [DEBUG] [Thread-2627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] client lang: <none>
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] server lang: <none>
2025-11-25T17:15:49.108 [DEBUG] [Thread-2627] [transport.py] [_log()] kex follows: False
2025-11-25T17:15:49.109 [DEBUG] [Thread-2627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:15:49.109 [DEBUG] [Thread-2627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:15:49.109 [DEBUG] [Thread-2627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:15:49.109 [DEBUG] [Thread-2627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:15:49.109 [DEBUG] [Thread-2627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:15:49.109 [DEBUG] [Thread-2627] [transport.py] [_log()] Compression: none
2025-11-25T17:15:49.109 [DEBUG] [Thread-2627] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:15:49.125 [DEBUG] [Thread-2627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:15:49.126 [DEBUG] [Thread-2627] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:15:49.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:15:49.127 [DEBUG] [Thread-2627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:15:49.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:15:49.130 [DEBUG] [Thread-2627] [transport.py] [_log()] userauth is OK
2025-11-25T17:15:49.130 [DEBUG] [Thread-2627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:15:49.130 [DEBUG] [Thread-2627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:15:49.130 [DEBUG] [Thread-2627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:15:49.131 [DEBUG] [Thread-2627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:15:49.155 [INFO] [Thread-2627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:15:49.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:15:49.750 [DEBUG] [Thread-2627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:15:49.750 [DEBUG] [Thread-2627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:15:49.751 [DEBUG] [Thread-2627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:15:49.791 [DEBUG] [Thread-2627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:15:49.791 [DEBUG] [Thread-2627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:15:49.794 [DEBUG] [Thread-2627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:15:49.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:15:49.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:15:49.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:15:49.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:15:49.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:15:49.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:15:49.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:15:49.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:15:49.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:15:49.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.635517 -999.00  +26.80  17.68     11   -5.20 1 1 1 1 1   887    0 31.79 -0.64 ----- 20.6 17.7 290.6 24.8 31.6 -32.7 32.0 -32.2 32.9 -29.4 33.1 -31.1
2025-11-25T17:15:49.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:15:49.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:15:49.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.635517
2025-11-25T17:15:49.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:15:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:15:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:15:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:15:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:15:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:15:21', tmtdew=40.14, humidity=6.56, cloud=0.0, wind=16.52, temperature=27.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:15:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:15:49.822 [DEBUG] [Thread-2627] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:15:49.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:15:49.923 [DEBUG] [Thread-2630] [transport.py] [_log()] starting thread (client mode): 0x70d03460
2025-11-25T17:15:49.923 [DEBUG] [Thread-2630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:15:49.938 [DEBUG] [Thread-2630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:15:49.938 [INFO] [Thread-2630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:15:49.945 [DEBUG] [Thread-2630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:15:49.946 [DEBUG] [Thread-2630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:15:49.946 [DEBUG] [Thread-2630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:15:49.946 [DEBUG] [Thread-2630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:15:49.946 [DEBUG] [Thread-2630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:15:49.946 [DEBUG] [Thread-2630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:15:49.946 [DEBUG] [Thread-2630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:15:49.947 [DEBUG] [Thread-2630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:15:49.947 [DEBUG] [Thread-2630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:15:49.947 [DEBUG] [Thread-2630] [transport.py] [_log()] client lang: <none>
2025-11-25T17:15:49.947 [DEBUG] [Thread-2630] [transport.py] [_log()] server lang: <none>
2025-11-25T17:15:49.947 [DEBUG] [Thread-2630] [transport.py] [_log()] kex follows: False
2025-11-25T17:15:49.947 [DEBUG] [Thread-2630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:15:49.947 [DEBUG] [Thread-2630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:15:49.947 [DEBUG] [Thread-2630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:15:49.948 [DEBUG] [Thread-2630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:15:49.948 [DEBUG] [Thread-2630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:15:49.949 [DEBUG] [Thread-2630] [transport.py] [_log()] Compression: none
2025-11-25T17:15:49.949 [DEBUG] [Thread-2630] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:15:50.005 [DEBUG] [Thread-2630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:15:50.006 [DEBUG] [Thread-2630] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:15:50.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:15:50.007 [DEBUG] [Thread-2630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:15:50.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:15:50.065 [DEBUG] [Thread-2630] [transport.py] [_log()] userauth is OK
2025-11-25T17:15:50.065 [DEBUG] [Thread-2630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:15:50.065 [DEBUG] [Thread-2630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:15:50.065 [DEBUG] [Thread-2630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:15:50.065 [DEBUG] [Thread-2630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:15:50.083 [INFO] [Thread-2630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:15:50.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:15:50.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:15:50.935 [DEBUG] [Thread-2630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:15:50.936 [DEBUG] [Thread-2630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:15:50.984 [DEBUG] [Thread-2630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:15:50.984 [DEBUG] [Thread-2630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:15:50.993 [DEBUG] [Thread-2630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:15:51.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:15:51.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:15:51.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:15:51.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:15:51.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:15:51.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:15:51.029 [DEBUG] [Thread-2630] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:15:55.375 [DEBUG] [Thread-2632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:16:10.430 [DEBUG] [Thread-2633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:16:21.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:16:21.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:16:21.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:16:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 15, 53), 40.11, 6.53, 0.0, 14.49, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:16:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:15:53
2025-11-25T17:16:21.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:16:21.956 [DEBUG] [Thread-2634] [transport.py] [_log()] starting thread (client mode): 0x73782050
2025-11-25T17:16:21.956 [DEBUG] [Thread-2634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:16:21.977 [DEBUG] [Thread-2634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:16:21.977 [INFO] [Thread-2634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:16:21.978 [DEBUG] [Thread-2634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:16:21.979 [DEBUG] [Thread-2634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:16:21.979 [DEBUG] [Thread-2634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:16:21.979 [DEBUG] [Thread-2634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:16:21.979 [DEBUG] [Thread-2634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:16:21.979 [DEBUG] [Thread-2634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:16:21.979 [DEBUG] [Thread-2634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:16:21.979 [DEBUG] [Thread-2634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:16:21.980 [DEBUG] [Thread-2634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:16:21.980 [DEBUG] [Thread-2634] [transport.py] [_log()] client lang: <none>
2025-11-25T17:16:21.980 [DEBUG] [Thread-2634] [transport.py] [_log()] server lang: <none>
2025-11-25T17:16:21.980 [DEBUG] [Thread-2634] [transport.py] [_log()] kex follows: False
2025-11-25T17:16:21.980 [DEBUG] [Thread-2634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:16:21.980 [DEBUG] [Thread-2634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:16:21.980 [DEBUG] [Thread-2634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:16:21.980 [DEBUG] [Thread-2634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:16:21.981 [DEBUG] [Thread-2634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:16:21.981 [DEBUG] [Thread-2634] [transport.py] [_log()] Compression: none
2025-11-25T17:16:21.981 [DEBUG] [Thread-2634] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:16:21.997 [DEBUG] [Thread-2634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:16:21.997 [DEBUG] [Thread-2634] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:16:21.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:16:21.999 [DEBUG] [Thread-2634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:16:22.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:16:22.001 [DEBUG] [Thread-2634] [transport.py] [_log()] userauth is OK
2025-11-25T17:16:22.001 [DEBUG] [Thread-2634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:16:22.002 [DEBUG] [Thread-2634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:16:22.002 [DEBUG] [Thread-2634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:16:22.002 [DEBUG] [Thread-2634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:16:22.027 [INFO] [Thread-2634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:16:22.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:16:22.807 [DEBUG] [Thread-2634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:16:22.808 [DEBUG] [Thread-2634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:16:22.808 [DEBUG] [Thread-2634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:16:22.849 [DEBUG] [Thread-2634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:16:22.849 [DEBUG] [Thread-2634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:16:22.853 [DEBUG] [Thread-2634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:16:22.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:16:22.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:16:22.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:16:22.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:16:22.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:16:22.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:16:22.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:16:22.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:16:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:16:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.635864 -999.00  +26.70  11.44     11   -5.30 1 1 1 1 1   887    0 32.53 -3.40 ----- 5.2 11.4 301.2 24.1 31.6 -31.9 31.9 -32.4 32.9 -29.3 33.0 -30.7
2025-11-25T17:16:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:16:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:16:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.635864
2025-11-25T17:16:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:16:22.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:16:22.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:16:22.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:16:22.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:16:22.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:15:53', tmtdew=40.11, humidity=6.53, cloud=0.0, wind=14.49, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:15:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:16:22.876 [DEBUG] [Thread-2634] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:16:22.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:16:22.977 [DEBUG] [Thread-2637] [transport.py] [_log()] starting thread (client mode): 0x7374d180
2025-11-25T17:16:22.977 [DEBUG] [Thread-2637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:16:22.991 [DEBUG] [Thread-2637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:16:22.991 [INFO] [Thread-2637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:16:22.999 [DEBUG] [Thread-2637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:16:22.999 [DEBUG] [Thread-2637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:16:22.999 [DEBUG] [Thread-2637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:16:22.999 [DEBUG] [Thread-2637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:16:22.999 [DEBUG] [Thread-2637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:16:22.999 [DEBUG] [Thread-2637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] client lang: <none>
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] server lang: <none>
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] kex follows: False
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] Compression: none
2025-11-25T17:16:23.000 [DEBUG] [Thread-2637] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:16:23.057 [DEBUG] [Thread-2637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:16:23.057 [DEBUG] [Thread-2637] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:16:23.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:16:23.059 [DEBUG] [Thread-2637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:16:23.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:16:23.113 [DEBUG] [Thread-2637] [transport.py] [_log()] userauth is OK
2025-11-25T17:16:23.113 [DEBUG] [Thread-2637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:16:23.113 [DEBUG] [Thread-2637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:16:23.113 [DEBUG] [Thread-2637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:16:23.114 [DEBUG] [Thread-2637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:16:23.132 [INFO] [Thread-2637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:16:23.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:16:23.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:16:23.961 [DEBUG] [Thread-2637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:16:23.962 [DEBUG] [Thread-2637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:16:24.010 [DEBUG] [Thread-2637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:16:24.010 [DEBUG] [Thread-2637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:16:24.019 [DEBUG] [Thread-2637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:16:24.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:16: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')
2025-11-25T17:16:24.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:16:24.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:16:24.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:16:24.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:16:24.056 [DEBUG] [Thread-2637] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:16:25.475 [DEBUG] [Thread-2639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:16:40.538 [DEBUG] [Thread-2640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:16:42.017 [DEBUG] [Thread-2641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:16:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:16:54.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:16:54.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:16:54.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 16, 25), 39.72, 6.68, 0.0, 12.7, 27.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:16:54.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:16:25
2025-11-25T17:16:54.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:16:55.002 [DEBUG] [Thread-2642] [transport.py] [_log()] starting thread (client mode): 0x737c4e20
2025-11-25T17:16:55.002 [DEBUG] [Thread-2642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:16:55.021 [DEBUG] [Thread-2642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:16:55.022 [INFO] [Thread-2642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:16:55.024 [DEBUG] [Thread-2642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:16:55.024 [DEBUG] [Thread-2642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:16:55.024 [DEBUG] [Thread-2642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:16:55.024 [DEBUG] [Thread-2642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:16:55.024 [DEBUG] [Thread-2642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:16:55.024 [DEBUG] [Thread-2642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] client lang: <none>
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] server lang: <none>
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] kex follows: False
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] Compression: none
2025-11-25T17:16:55.025 [DEBUG] [Thread-2642] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:16:55.043 [DEBUG] [Thread-2642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:16:55.044 [DEBUG] [Thread-2642] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:16:55.044 [DEBUG] [Thread-2642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:16:55.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:16:55.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:16:55.046 [DEBUG] [Thread-2642] [transport.py] [_log()] userauth is OK
2025-11-25T17:16:55.046 [DEBUG] [Thread-2642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:16:55.046 [DEBUG] [Thread-2642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:16:55.047 [DEBUG] [Thread-2642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:16:55.047 [DEBUG] [Thread-2642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:16:55.071 [INFO] [Thread-2642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:16:55.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:16:55.583 [DEBUG] [Thread-2644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:16:55.740 [DEBUG] [Thread-2642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:16:55.740 [DEBUG] [Thread-2642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:16:55.740 [DEBUG] [Thread-2642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:16:55.781 [DEBUG] [Thread-2642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:16:55.781 [DEBUG] [Thread-2642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:16:55.784 [DEBUG] [Thread-2642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:16:55.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:16:55.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:16:55.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:16:55.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:16:55.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:16:55.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:16:55.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:16:55.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:16:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:16:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.636211 -999.00  +26.80   1.15     11   -5.20 1 1 1 1 1   887    0 31.69 -5.10 ----- 3.7 1.1 190.3 8.2 31.7 -32.0 32.0 -31.5 33.0 -29.1 33.1 -30.6
2025-11-25T17:16:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:16:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:16:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.636211
2025-11-25T17:16:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:16:55.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:16:55.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:16:55.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:16:55.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:16:55.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:16:25', tmtdew=39.72, humidity=6.68, cloud=0.0, wind=12.7, temperature=27.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:16:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:16:55.817 [DEBUG] [Thread-2642] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:16:55.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:17:10.630 [DEBUG] [Thread-2646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:17:25.699 [DEBUG] [Thread-2647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:17:40.743 [DEBUG] [Thread-2648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:17:42.512 [DEBUG] [Thread-2649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:17:55.784 [DEBUG] [Thread-2650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:18:10.829 [DEBUG] [Thread-2651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:18:25.873 [DEBUG] [Thread-2652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:18:40.918 [DEBUG] [Thread-2653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:18:43.014 [DEBUG] [Thread-2654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:18:55.963 [DEBUG] [Thread-2655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:19:07.725 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T17:19:11.005 [DEBUG] [Thread-2656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:19:26.052 [DEBUG] [Thread-2657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:19:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:19:37.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:19:37.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:19:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 19, 5), 39.16, 6.81, 0.0, 13.43, 26.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:19:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:19:05
2025-11-25T17:19:38.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:19:38.775 [DEBUG] [Thread-2658] [transport.py] [_log()] starting thread (client mode): 0x73781810
2025-11-25T17:19:38.775 [DEBUG] [Thread-2658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:19:38.796 [DEBUG] [Thread-2658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:19:38.796 [INFO] [Thread-2658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] client lang: <none>
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] server lang: <none>
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] kex follows: False
2025-11-25T17:19:38.799 [DEBUG] [Thread-2658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:19:38.800 [DEBUG] [Thread-2658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:19:38.800 [DEBUG] [Thread-2658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:19:38.800 [DEBUG] [Thread-2658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:19:38.800 [DEBUG] [Thread-2658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:19:38.800 [DEBUG] [Thread-2658] [transport.py] [_log()] Compression: none
2025-11-25T17:19:38.800 [DEBUG] [Thread-2658] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:19:38.816 [DEBUG] [Thread-2658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:19:38.816 [DEBUG] [Thread-2658] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:19:38.816 [DEBUG] [Thread-2658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:19:38.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:19:38.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:19:38.817 [DEBUG] [Thread-2658] [transport.py] [_log()] userauth is OK
2025-11-25T17:19:38.817 [DEBUG] [Thread-2658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:19:38.817 [DEBUG] [Thread-2658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:19:38.817 [DEBUG] [Thread-2658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:19:38.817 [DEBUG] [Thread-2658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:19:38.836 [INFO] [Thread-2658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:19:38.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:19:39.444 [DEBUG] [Thread-2658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:19:39.444 [DEBUG] [Thread-2658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:19:39.444 [DEBUG] [Thread-2658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:19:39.485 [DEBUG] [Thread-2658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:19:39.486 [DEBUG] [Thread-2658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:19:39.488 [DEBUG] [Thread-2658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:19:39.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:19:39.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:19:39.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:19:39.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:19:39.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:19:39.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:19:39.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:19:39.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:19:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:19:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.638295 -999.00  +27.20  14.93     11   -5.00 1 1 1 1 1   887    0 32.07 -4.95 ----- 15.4 14.9 293.4 20.0 31.6 -32.7 32.0 -31.2 32.9 -30.3 33.2 -31.4
2025-11-25T17:19:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:19:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:19:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.638295
2025-11-25T17:19:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:19:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:19:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:19:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:19:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:19:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:19:05', tmtdew=39.16, humidity=6.81, cloud=0.0, wind=13.43, temperature=26.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:19:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:19:39.506 [DEBUG] [Thread-2658] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:19:39.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:19:39.601 [DEBUG] [Thread-2661] [transport.py] [_log()] starting thread (client mode): 0x70d00fa0
2025-11-25T17:19:39.601 [DEBUG] [Thread-2661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:19:39.615 [DEBUG] [Thread-2661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:19:39.615 [INFO] [Thread-2661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] client lang: <none>
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] server lang: <none>
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] kex follows: False
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] Compression: none
2025-11-25T17:19:39.623 [DEBUG] [Thread-2661] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:19:39.679 [DEBUG] [Thread-2661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:19:39.679 [DEBUG] [Thread-2661] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:19:39.680 [DEBUG] [Thread-2661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:19:39.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:19:39.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:19:39.736 [DEBUG] [Thread-2661] [transport.py] [_log()] userauth is OK
2025-11-25T17:19:39.736 [DEBUG] [Thread-2661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:19:39.736 [DEBUG] [Thread-2661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:19:39.736 [DEBUG] [Thread-2661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:19:39.736 [DEBUG] [Thread-2661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:19:39.750 [INFO] [Thread-2661] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:19:39.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:19:39.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:19:40.589 [DEBUG] [Thread-2661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:19:40.589 [DEBUG] [Thread-2661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:19:40.637 [DEBUG] [Thread-2661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:19:40.637 [DEBUG] [Thread-2661] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:19:40.645 [DEBUG] [Thread-2661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:19:40.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:19:40.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:19:40.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:19:40.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:19:40.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:19:40.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:19:40.677 [DEBUG] [Thread-2661] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:19:41.096 [DEBUG] [Thread-2663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:19:43.546 [DEBUG] [Thread-2664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:19:56.152 [DEBUG] [Thread-2665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:20:10.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:20:10.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:20:10.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:20:11.195 [DEBUG] [Thread-2666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:20:11.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 19, 37), 39.36, 6.76, 0.0, 12.78, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:20:11.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:19:37
2025-11-25T17:20:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:20:11.700 [DEBUG] [Thread-2667] [transport.py] [_log()] starting thread (client mode): 0x7378ca90
2025-11-25T17:20:11.700 [DEBUG] [Thread-2667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:20:11.723 [DEBUG] [Thread-2667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:20:11.723 [INFO] [Thread-2667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] client lang: <none>
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] server lang: <none>
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] kex follows: False
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:20:11.725 [DEBUG] [Thread-2667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:20:11.726 [DEBUG] [Thread-2667] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:20:11.726 [DEBUG] [Thread-2667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:20:11.726 [DEBUG] [Thread-2667] [transport.py] [_log()] Compression: none
2025-11-25T17:20:11.726 [DEBUG] [Thread-2667] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:20:11.742 [DEBUG] [Thread-2667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:20:11.742 [DEBUG] [Thread-2667] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:20:11.742 [DEBUG] [Thread-2667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:20:11.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:20:11.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:20:11.743 [DEBUG] [Thread-2667] [transport.py] [_log()] userauth is OK
2025-11-25T17:20:11.743 [DEBUG] [Thread-2667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:20:11.743 [DEBUG] [Thread-2667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:20:11.743 [DEBUG] [Thread-2667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:20:11.743 [DEBUG] [Thread-2667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:20:11.758 [INFO] [Thread-2667] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:20:11.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:20:17.488 [DEBUG] [Thread-2667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:20:17.488 [DEBUG] [Thread-2667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:20:17.488 [DEBUG] [Thread-2667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:20:17.528 [DEBUG] [Thread-2667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:20:17.528 [DEBUG] [Thread-2667] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:20:17.530 [DEBUG] [Thread-2667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:20:17.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:20:17.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:20:17.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:20:17.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:20:17.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:20:17.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:20:17.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.638989 -999.00  +26.80   9.15     11   -5.10 1 1 1 1 1   887    0 31.79 -6.94 ----- 10.2 9.2 299.2 11.9 31.6 -32.1 31.9 -31.7 33.0 -29.6 33.1 -31.0
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.638989
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:20:17.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:19:37', tmtdew=39.36, humidity=6.76, cloud=0.0, wind=12.78, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:20:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:20:17.610 [DEBUG] [Thread-2667] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:20:17.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:20:17.708 [DEBUG] [Thread-2670] [transport.py] [_log()] starting thread (client mode): 0x7378d1e0
2025-11-25T17:20:17.709 [DEBUG] [Thread-2670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:20:17.723 [DEBUG] [Thread-2670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:20:17.724 [INFO] [Thread-2670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:20:17.731 [DEBUG] [Thread-2670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:20:17.731 [DEBUG] [Thread-2670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:20:17.731 [DEBUG] [Thread-2670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:20:17.731 [DEBUG] [Thread-2670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:20:17.731 [DEBUG] [Thread-2670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] client lang: <none>
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] server lang: <none>
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] kex follows: False
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] Compression: none
2025-11-25T17:20:17.732 [DEBUG] [Thread-2670] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:20:17.787 [DEBUG] [Thread-2670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:20:17.787 [DEBUG] [Thread-2670] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:20:17.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:20:17.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:20:17.788 [DEBUG] [Thread-2670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:20:17.845 [DEBUG] [Thread-2670] [transport.py] [_log()] userauth is OK
2025-11-25T17:20:17.845 [DEBUG] [Thread-2670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:20:17.845 [DEBUG] [Thread-2670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:20:17.846 [DEBUG] [Thread-2670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:20:17.846 [DEBUG] [Thread-2670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:20:17.866 [INFO] [Thread-2670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:20:17.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:20:17.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:20:18.690 [DEBUG] [Thread-2670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:20:18.690 [DEBUG] [Thread-2670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:20:18.738 [DEBUG] [Thread-2670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:20:18.738 [DEBUG] [Thread-2670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:20:18.746 [DEBUG] [Thread-2670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:20:18.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:20:18.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:20:18.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:20:18.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:20:18.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:20:18.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:20:18.780 [DEBUG] [Thread-2670] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:20:26.234 [DEBUG] [Thread-2672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:20:41.308 [DEBUG] [Thread-2673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:20:44.259 [DEBUG] [Thread-2674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:20:48.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:20:48.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:20:48.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:20:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 20, 41), 39.24, 6.79, 0.0, 8.91, 27.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:20:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:20:41
2025-11-25T17:20:49.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:20:49.746 [DEBUG] [Thread-2675] [transport.py] [_log()] starting thread (client mode): 0x70d00520
2025-11-25T17:20:49.746 [DEBUG] [Thread-2675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:20:49.767 [DEBUG] [Thread-2675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:20:49.767 [INFO] [Thread-2675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:20:49.770 [DEBUG] [Thread-2675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:20:49.770 [DEBUG] [Thread-2675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:20:49.770 [DEBUG] [Thread-2675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:20:49.770 [DEBUG] [Thread-2675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:20:49.770 [DEBUG] [Thread-2675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:20:49.770 [DEBUG] [Thread-2675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:20:49.770 [DEBUG] [Thread-2675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:20:49.770 [DEBUG] [Thread-2675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:20:49.770 [DEBUG] [Thread-2675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] client lang: <none>
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] server lang: <none>
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] kex follows: False
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] Compression: none
2025-11-25T17:20:49.771 [DEBUG] [Thread-2675] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:20:49.781 [DEBUG] [Thread-2675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:20:49.782 [DEBUG] [Thread-2675] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:20:49.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:20:49.782 [DEBUG] [Thread-2675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:20:49.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:20:49.785 [DEBUG] [Thread-2675] [transport.py] [_log()] userauth is OK
2025-11-25T17:20:49.785 [DEBUG] [Thread-2675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:20:49.785 [DEBUG] [Thread-2675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:20:49.785 [DEBUG] [Thread-2675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:20:49.785 [DEBUG] [Thread-2675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:20:49.821 [INFO] [Thread-2675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:20:49.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:20:50.420 [DEBUG] [Thread-2675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:20:50.420 [DEBUG] [Thread-2675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:20:50.421 [DEBUG] [Thread-2675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:20:50.462 [DEBUG] [Thread-2675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:20:50.462 [DEBUG] [Thread-2675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:20:50.467 [DEBUG] [Thread-2675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:20:50.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:20:50.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:20:50.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:20:50.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:20:50.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:20:50.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:20:50.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:20:50.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:20:50.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:20:50.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.638989 -999.00  +26.80   9.15     11   -5.10 1 1 1 1 1   887    0 31.79 -6.94 ----- 10.2 9.2 299.2 11.9 31.6 -32.1 31.9 -31.7 33.0 -29.6 33.1 -31.0
2025-11-25T17:20:50.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:20:50.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:20:50.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.638989
2025-11-25T17:20:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:20:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:20:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:20:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:20:50.501 [DEBUG] [Thread-2675] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:20:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:20:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:20:41', tmtdew=39.24, humidity=6.79, cloud=0.0, wind=8.91, temperature=27.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:20:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:20:50.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:20:56.348 [DEBUG] [Thread-2678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:21:11.404 [DEBUG] [Thread-2679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:21:26.447 [DEBUG] [Thread-2680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:21:41.489 [DEBUG] [Thread-2681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:21:44.762 [DEBUG] [Thread-2682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:21:56.535 [DEBUG] [Thread-2683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:22:11.577 [DEBUG] [Thread-2684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:22:26.618 [DEBUG] [Thread-2685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:22:41.663 [DEBUG] [Thread-2686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:22:45.278 [DEBUG] [Thread-2687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:22:56.706 [DEBUG] [Thread-2688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:23:05.293 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T17:23:11.751 [DEBUG] [Thread-2689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:23:26.790 [DEBUG] [Thread-2690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:23:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:23:35.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:23:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:23:36.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 23, 21), 39.23, 6.84, 0.0, 7.24, 27.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:23:36.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:23:21
2025-11-25T17:23:36.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:23:36.289 [DEBUG] [Thread-2691] [transport.py] [_log()] starting thread (client mode): 0x70d00e20
2025-11-25T17:23:36.289 [DEBUG] [Thread-2691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:23:36.311 [DEBUG] [Thread-2691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:23:36.312 [INFO] [Thread-2691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:23:36.313 [DEBUG] [Thread-2691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:23:36.313 [DEBUG] [Thread-2691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:23:36.313 [DEBUG] [Thread-2691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:23:36.313 [DEBUG] [Thread-2691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:23:36.313 [DEBUG] [Thread-2691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:23:36.313 [DEBUG] [Thread-2691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:23:36.313 [DEBUG] [Thread-2691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:23:36.313 [DEBUG] [Thread-2691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] client lang: <none>
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] server lang: <none>
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] kex follows: False
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] Compression: none
2025-11-25T17:23:36.314 [DEBUG] [Thread-2691] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:23:36.334 [DEBUG] [Thread-2691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:23:36.334 [DEBUG] [Thread-2691] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:23:36.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:23:36.335 [DEBUG] [Thread-2691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:23:36.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:23:36.337 [DEBUG] [Thread-2691] [transport.py] [_log()] userauth is OK
2025-11-25T17:23:36.338 [DEBUG] [Thread-2691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:23:36.338 [DEBUG] [Thread-2691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:23:36.338 [DEBUG] [Thread-2691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:23:36.338 [DEBUG] [Thread-2691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:23:36.362 [INFO] [Thread-2691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:23:36.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:23:37.475 [DEBUG] [Thread-2691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:23:37.476 [DEBUG] [Thread-2691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:23:37.476 [DEBUG] [Thread-2691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:23:37.517 [DEBUG] [Thread-2691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:23:37.517 [DEBUG] [Thread-2691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:23:37.521 [DEBUG] [Thread-2691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:23:37.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:23:37.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:23:37.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:23:37.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:23:37.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:23:37.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:23:37.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:23:37.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:23:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:23:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.641072 -999.00  +27.00  12.68     11   -5.10 1 1 1 1 1   887    0 31.57 -11.13 ----- 10.6 12.7 290.8 15.6 31.6 -32.1 32.0 -31.5 33.1 -30.4 33.3 -31.7
2025-11-25T17:23:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:23:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:23:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.641072
2025-11-25T17:23:37.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:23:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:23:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:23:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:23:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:23:37.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:23:21', tmtdew=39.23, humidity=6.84, cloud=0.0, wind=7.24, temperature=27.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:23:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:23:37.545 [DEBUG] [Thread-2691] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:23:37.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:23:37.646 [DEBUG] [Thread-2694] [transport.py] [_log()] starting thread (client mode): 0x70d029e0
2025-11-25T17:23:37.647 [DEBUG] [Thread-2694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:23:37.661 [DEBUG] [Thread-2694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:23:37.662 [INFO] [Thread-2694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:23:37.669 [DEBUG] [Thread-2694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:23:37.670 [DEBUG] [Thread-2694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:23:37.670 [DEBUG] [Thread-2694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:23:37.670 [DEBUG] [Thread-2694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:23:37.670 [DEBUG] [Thread-2694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:23:37.670 [DEBUG] [Thread-2694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:23:37.670 [DEBUG] [Thread-2694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:23:37.670 [DEBUG] [Thread-2694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:23:37.671 [DEBUG] [Thread-2694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:23:37.671 [DEBUG] [Thread-2694] [transport.py] [_log()] client lang: <none>
2025-11-25T17:23:37.671 [DEBUG] [Thread-2694] [transport.py] [_log()] server lang: <none>
2025-11-25T17:23:37.671 [DEBUG] [Thread-2694] [transport.py] [_log()] kex follows: False
2025-11-25T17:23:37.671 [DEBUG] [Thread-2694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:23:37.671 [DEBUG] [Thread-2694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:23:37.671 [DEBUG] [Thread-2694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:23:37.671 [DEBUG] [Thread-2694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:23:37.672 [DEBUG] [Thread-2694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:23:37.672 [DEBUG] [Thread-2694] [transport.py] [_log()] Compression: none
2025-11-25T17:23:37.672 [DEBUG] [Thread-2694] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:23:37.732 [DEBUG] [Thread-2694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:23:37.733 [DEBUG] [Thread-2694] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:23:37.734 [DEBUG] [Thread-2694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:23:37.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:23:37.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:23:37.791 [DEBUG] [Thread-2694] [transport.py] [_log()] userauth is OK
2025-11-25T17:23:37.792 [DEBUG] [Thread-2694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:23:37.792 [DEBUG] [Thread-2694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:23:37.792 [DEBUG] [Thread-2694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:23:37.792 [DEBUG] [Thread-2694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:23:37.810 [INFO] [Thread-2694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:23:37.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:23:37.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:23:38.647 [DEBUG] [Thread-2694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:23:38.647 [DEBUG] [Thread-2694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:23:38.696 [DEBUG] [Thread-2694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:23:38.696 [DEBUG] [Thread-2694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:23:38.705 [DEBUG] [Thread-2694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:23:38.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:23:38.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:23:38.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:23:38.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:23:38.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:23:38.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:23:38.742 [DEBUG] [Thread-2694] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:23:41.832 [DEBUG] [Thread-2696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:23:46.015 [DEBUG] [Thread-2697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:23:56.901 [DEBUG] [Thread-2698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:24:08.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:24:08.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:24: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
2025-11-25T17:24:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 23, 53), 39.75, 6.76, 0.0, 8.29, 27.5, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:24:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:23:53
2025-11-25T17:24:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:24:09.711 [DEBUG] [Thread-2699] [transport.py] [_log()] starting thread (client mode): 0x70d02d70
2025-11-25T17:24:09.711 [DEBUG] [Thread-2699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:24:09.734 [DEBUG] [Thread-2699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:24:09.734 [INFO] [Thread-2699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] client lang: <none>
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] server lang: <none>
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] kex follows: False
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:24:09.737 [DEBUG] [Thread-2699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:24:09.738 [DEBUG] [Thread-2699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:24:09.738 [DEBUG] [Thread-2699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:24:09.738 [DEBUG] [Thread-2699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:24:09.738 [DEBUG] [Thread-2699] [transport.py] [_log()] Compression: none
2025-11-25T17:24:09.738 [DEBUG] [Thread-2699] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:24:09.756 [DEBUG] [Thread-2699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:24:09.757 [DEBUG] [Thread-2699] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:24:09.757 [DEBUG] [Thread-2699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:24:09.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:24:09.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:24:09.760 [DEBUG] [Thread-2699] [transport.py] [_log()] userauth is OK
2025-11-25T17:24:09.760 [DEBUG] [Thread-2699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:24:09.760 [DEBUG] [Thread-2699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:24:09.760 [DEBUG] [Thread-2699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:24:09.760 [DEBUG] [Thread-2699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:24:09.778 [INFO] [Thread-2699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:24:09.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:24:10.364 [DEBUG] [Thread-2699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:24:10.365 [DEBUG] [Thread-2699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:24:10.365 [DEBUG] [Thread-2699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:24:10.406 [DEBUG] [Thread-2699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:24:10.406 [DEBUG] [Thread-2699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:24:10.410 [DEBUG] [Thread-2699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:24:10.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:24:10.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:24:10.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:24:10.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:24:10.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:24:10.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:24:10.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:24:10.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:24:10.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:24:10.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.641767 -999.00  +27.00   9.17     11   -5.20 1 1 1 1 1   887    0 31.48 -11.88 ----- 10.0 9.2 266.9 13.6 31.6 -32.3 32.0 -31.8 33.1 -29.8 33.3 -32.0
2025-11-25T17:24:10.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:24:10.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:24:10.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.641767
2025-11-25T17:24:10.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:24:10.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:24:10.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:24:10.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:24:10.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:24:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:23:53', tmtdew=39.75, humidity=6.76, cloud=0.0, wind=8.29, temperature=27.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:24:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:24:10.439 [DEBUG] [Thread-2699] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:24:10.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:24:10.539 [DEBUG] [Thread-2702] [transport.py] [_log()] starting thread (client mode): 0x70d038e0
2025-11-25T17:24:10.539 [DEBUG] [Thread-2702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:24:10.554 [DEBUG] [Thread-2702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:24:10.554 [INFO] [Thread-2702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:24:10.561 [DEBUG] [Thread-2702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:24:10.561 [DEBUG] [Thread-2702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:24:10.561 [DEBUG] [Thread-2702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:24:10.561 [DEBUG] [Thread-2702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:24:10.561 [DEBUG] [Thread-2702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] client lang: <none>
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] server lang: <none>
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] kex follows: False
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] Compression: none
2025-11-25T17:24:10.562 [DEBUG] [Thread-2702] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:24:10.621 [DEBUG] [Thread-2702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:24:10.622 [DEBUG] [Thread-2702] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:24:10.623 [DEBUG] [Thread-2702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:24:10.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:24:10.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:24:10.677 [DEBUG] [Thread-2702] [transport.py] [_log()] userauth is OK
2025-11-25T17:24:10.678 [DEBUG] [Thread-2702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:24:10.678 [DEBUG] [Thread-2702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:24:10.678 [DEBUG] [Thread-2702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:24:10.678 [DEBUG] [Thread-2702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:24:10.697 [INFO] [Thread-2702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:24:10.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:24:10.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:24:11.534 [DEBUG] [Thread-2702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:24:11.534 [DEBUG] [Thread-2702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:24:11.582 [DEBUG] [Thread-2702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:24:11.582 [DEBUG] [Thread-2702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:24:11.591 [DEBUG] [Thread-2702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:24:11.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:24:11.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:24:11.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:24:11.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:24:11.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:24:11.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:24:11.627 [DEBUG] [Thread-2702] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:24:11.940 [DEBUG] [Thread-2704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:24:27.006 [DEBUG] [Thread-2705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:24:41.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:24:41.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:24:41.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:24:42.045 [DEBUG] [Thread-2706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:24:42.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 24, 25), 39.77, 6.76, 0.0, 8.75, 27.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:24:42.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:24:25
2025-11-25T17:24:42.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:24:42.659 [DEBUG] [Thread-2707] [transport.py] [_log()] starting thread (client mode): 0x70d016f0
2025-11-25T17:24:42.659 [DEBUG] [Thread-2707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:24:42.678 [DEBUG] [Thread-2707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:24:42.678 [INFO] [Thread-2707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] client lang: <none>
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] server lang: <none>
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] kex follows: False
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] Compression: none
2025-11-25T17:24:42.681 [DEBUG] [Thread-2707] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:24:42.698 [DEBUG] [Thread-2707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:24:42.699 [DEBUG] [Thread-2707] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:24:42.699 [DEBUG] [Thread-2707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:24:42.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:24:42.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:24:42.703 [DEBUG] [Thread-2707] [transport.py] [_log()] userauth is OK
2025-11-25T17:24:42.704 [DEBUG] [Thread-2707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:24:42.704 [DEBUG] [Thread-2707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:24:42.704 [DEBUG] [Thread-2707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:24:42.704 [DEBUG] [Thread-2707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:24:42.722 [INFO] [Thread-2707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:24:42.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:24:43.388 [DEBUG] [Thread-2707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:24:43.388 [DEBUG] [Thread-2707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:24:43.388 [DEBUG] [Thread-2707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:24:43.429 [DEBUG] [Thread-2707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:24:43.429 [DEBUG] [Thread-2707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:24:43.431 [DEBUG] [Thread-2707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:24:43.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:24:43.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:24:43.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:24:43.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:24:43.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:24:43.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:24:43.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.642114 -999.00  +27.00  10.44     11   -5.20 1 1 1 1 1   887    0 31.70 -11.26 ----- 11.4 10.4 275.0 11.8 31.6 -32.4 32.0 -31.6 32.9 -30.0 33.1 -31.0
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.642114
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:24:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:24:25', tmtdew=39.77, humidity=6.76, cloud=0.0, wind=8.75, temperature=27.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:24:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:24:43.452 [DEBUG] [Thread-2707] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:24:43.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:24:43.546 [DEBUG] [Thread-2710] [transport.py] [_log()] starting thread (client mode): 0x7376e5c0
2025-11-25T17:24:43.546 [DEBUG] [Thread-2710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:24:43.560 [DEBUG] [Thread-2710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:24:43.560 [INFO] [Thread-2710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] client lang: <none>
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] server lang: <none>
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] kex follows: False
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] Compression: none
2025-11-25T17:24:43.568 [DEBUG] [Thread-2710] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:24:43.624 [DEBUG] [Thread-2710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:24:43.624 [DEBUG] [Thread-2710] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:24:43.624 [DEBUG] [Thread-2710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:24:43.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:24:43.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:24:43.681 [DEBUG] [Thread-2710] [transport.py] [_log()] userauth is OK
2025-11-25T17:24:43.681 [DEBUG] [Thread-2710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:24:43.681 [DEBUG] [Thread-2710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:24:43.681 [DEBUG] [Thread-2710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:24:43.681 [DEBUG] [Thread-2710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:24:43.694 [INFO] [Thread-2710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:24:43.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:24:43.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:24:44.526 [DEBUG] [Thread-2710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:24:44.526 [DEBUG] [Thread-2710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:24:44.575 [DEBUG] [Thread-2710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:24:44.575 [DEBUG] [Thread-2710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:24:44.584 [DEBUG] [Thread-2710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:24:44.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:24:44.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:24:44.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:24:44.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:24:44.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:24:44.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:24:44.622 [DEBUG] [Thread-2710] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:24:46.515 [DEBUG] [Thread-2712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:24:57.085 [DEBUG] [Thread-2713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:25:12.149 [DEBUG] [Thread-2714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:25:14.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:25:14.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:25:14.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:25:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 24, 57), 39.96, 6.21, 0.0, 12.14, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:25:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:24:57
2025-11-25T17:25:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:25:15.601 [DEBUG] [Thread-2715] [transport.py] [_log()] starting thread (client mode): 0x70d00f70
2025-11-25T17:25:15.601 [DEBUG] [Thread-2715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:25:15.620 [DEBUG] [Thread-2715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:25:15.620 [INFO] [Thread-2715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] client lang: <none>
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] server lang: <none>
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] kex follows: False
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] Compression: none
2025-11-25T17:25:15.623 [DEBUG] [Thread-2715] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:25:15.639 [DEBUG] [Thread-2715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:25:15.639 [DEBUG] [Thread-2715] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:25:15.639 [DEBUG] [Thread-2715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:25:15.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:25:15.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:25:15.640 [DEBUG] [Thread-2715] [transport.py] [_log()] userauth is OK
2025-11-25T17:25:15.640 [DEBUG] [Thread-2715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:25:15.640 [DEBUG] [Thread-2715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:25:15.640 [DEBUG] [Thread-2715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:25:15.640 [DEBUG] [Thread-2715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:25:15.650 [INFO] [Thread-2715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:25:15.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:25:16.250 [DEBUG] [Thread-2715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:25:16.250 [DEBUG] [Thread-2715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:25:16.250 [DEBUG] [Thread-2715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:25:16.291 [DEBUG] [Thread-2715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:25:16.291 [DEBUG] [Thread-2715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:25:16.293 [DEBUG] [Thread-2715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:25:16.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:25:16.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:25:16.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:25:16.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:25:16.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:25:16.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:25:16.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.642114 -999.00  +27.00  10.44     11   -5.20 1 1 1 1 1   887    0 31.70 -11.26 ----- 11.4 10.4 275.0 11.8 31.6 -32.4 32.0 -31.6 32.9 -30.0 33.1 -31.0
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.642114
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:25:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:24:57', tmtdew=39.96, humidity=6.21, cloud=0.0, wind=12.14, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:24:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:25:16.308 [DEBUG] [Thread-2715] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:25:16.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:25:16.400 [DEBUG] [Thread-2718] [transport.py] [_log()] starting thread (client mode): 0x70d01d80
2025-11-25T17:25:16.400 [DEBUG] [Thread-2718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:25:16.415 [DEBUG] [Thread-2718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:25:16.415 [INFO] [Thread-2718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:25:16.422 [DEBUG] [Thread-2718] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:25:16.422 [DEBUG] [Thread-2718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:25:16.422 [DEBUG] [Thread-2718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:25:16.422 [DEBUG] [Thread-2718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:25:16.422 [DEBUG] [Thread-2718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:25:16.422 [DEBUG] [Thread-2718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] client lang: <none>
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] server lang: <none>
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] kex follows: False
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] Compression: none
2025-11-25T17:25:16.423 [DEBUG] [Thread-2718] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:25:16.479 [DEBUG] [Thread-2718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:25:16.480 [DEBUG] [Thread-2718] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:25:16.480 [DEBUG] [Thread-2718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:25:16.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:25:16.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:25:16.537 [DEBUG] [Thread-2718] [transport.py] [_log()] userauth is OK
2025-11-25T17:25:16.537 [DEBUG] [Thread-2718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:25:16.537 [DEBUG] [Thread-2718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:25:16.537 [DEBUG] [Thread-2718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:25:16.537 [DEBUG] [Thread-2718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:25:16.555 [INFO] [Thread-2718] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:25:16.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:25:16.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:25:17.439 [DEBUG] [Thread-2718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:25:17.439 [DEBUG] [Thread-2718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:25:17.487 [DEBUG] [Thread-2718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:25:17.487 [DEBUG] [Thread-2718] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:25:17.495 [DEBUG] [Thread-2718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:25:17.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:25:17.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:25:17.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:25:17.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:25:17.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:25:17.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:25:17.527 [DEBUG] [Thread-2718] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:25:27.186 [DEBUG] [Thread-2720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:25:42.261 [DEBUG] [Thread-2721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:25:47.041 [DEBUG] [Thread-2722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:25:47.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:25:47.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:25:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:25:48.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 25, 29), 39.95, 6.23, 0.0, 13.82, 27.5, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:25:48.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:25:29
2025-11-25T17:25:48.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:25:48.488 [DEBUG] [Thread-2723] [transport.py] [_log()] starting thread (client mode): 0x761d9e70
2025-11-25T17:25:48.488 [DEBUG] [Thread-2723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:25:48.506 [DEBUG] [Thread-2723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:25:48.506 [INFO] [Thread-2723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] client lang: <none>
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] server lang: <none>
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] kex follows: False
2025-11-25T17:25:48.510 [DEBUG] [Thread-2723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:25:48.511 [DEBUG] [Thread-2723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:25:48.511 [DEBUG] [Thread-2723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:25:48.511 [DEBUG] [Thread-2723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:25:48.511 [DEBUG] [Thread-2723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:25:48.511 [DEBUG] [Thread-2723] [transport.py] [_log()] Compression: none
2025-11-25T17:25:48.511 [DEBUG] [Thread-2723] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:25:48.528 [DEBUG] [Thread-2723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:25:48.529 [DEBUG] [Thread-2723] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:25:48.529 [DEBUG] [Thread-2723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:25:48.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:25:48.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:25:48.531 [DEBUG] [Thread-2723] [transport.py] [_log()] userauth is OK
2025-11-25T17:25:48.531 [DEBUG] [Thread-2723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:25:48.531 [DEBUG] [Thread-2723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:25:48.531 [DEBUG] [Thread-2723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:25:48.531 [DEBUG] [Thread-2723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:25:48.555 [INFO] [Thread-2723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:25:48.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:25:49.316 [DEBUG] [Thread-2723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:25:49.316 [DEBUG] [Thread-2723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:25:49.317 [DEBUG] [Thread-2723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:25:49.357 [DEBUG] [Thread-2723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:25:49.357 [DEBUG] [Thread-2723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:25:49.360 [DEBUG] [Thread-2723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:25:49.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:25:49.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:25:49.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:25:49.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:25:49.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:25:49.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:25:49.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:25:49.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:25:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:25:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.642461 -999.00  +26.90  20.10     11   -5.60 1 1 1 1 1   887    0 31.96 -9.88 ----- 18.0 20.1 301.4 22.8 31.6 -32.6 31.9 -32.4 32.8 -32.4 33.1 -31.7
2025-11-25T17:25:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:25:49.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:25:49.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.642461
2025-11-25T17:25:49.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:25:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:25:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:25:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:25:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:25:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:25:29', tmtdew=39.95, humidity=6.23, cloud=0.0, wind=13.82, temperature=27.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:25:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:25:49.382 [DEBUG] [Thread-2723] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:25:49.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:25:49.485 [DEBUG] [Thread-2726] [transport.py] [_log()] starting thread (client mode): 0x761dabc0
2025-11-25T17:25:49.485 [DEBUG] [Thread-2726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:25:49.500 [DEBUG] [Thread-2726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:25:49.500 [INFO] [Thread-2726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:25:49.507 [DEBUG] [Thread-2726] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:25:49.508 [DEBUG] [Thread-2726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:25:49.508 [DEBUG] [Thread-2726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:25:49.508 [DEBUG] [Thread-2726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:25:49.508 [DEBUG] [Thread-2726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:25:49.508 [DEBUG] [Thread-2726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:25:49.508 [DEBUG] [Thread-2726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:25:49.508 [DEBUG] [Thread-2726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:25:49.509 [DEBUG] [Thread-2726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:25:49.509 [DEBUG] [Thread-2726] [transport.py] [_log()] client lang: <none>
2025-11-25T17:25:49.509 [DEBUG] [Thread-2726] [transport.py] [_log()] server lang: <none>
2025-11-25T17:25:49.509 [DEBUG] [Thread-2726] [transport.py] [_log()] kex follows: False
2025-11-25T17:25:49.509 [DEBUG] [Thread-2726] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:25:49.509 [DEBUG] [Thread-2726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:25:49.509 [DEBUG] [Thread-2726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:25:49.509 [DEBUG] [Thread-2726] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:25:49.510 [DEBUG] [Thread-2726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:25:49.510 [DEBUG] [Thread-2726] [transport.py] [_log()] Compression: none
2025-11-25T17:25:49.510 [DEBUG] [Thread-2726] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:25:49.566 [DEBUG] [Thread-2726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:25:49.566 [DEBUG] [Thread-2726] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:25:49.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:25:49.567 [DEBUG] [Thread-2726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:25:49.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:25:49.622 [DEBUG] [Thread-2726] [transport.py] [_log()] userauth is OK
2025-11-25T17:25:49.622 [DEBUG] [Thread-2726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:25:49.623 [DEBUG] [Thread-2726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:25:49.623 [DEBUG] [Thread-2726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:25:49.623 [DEBUG] [Thread-2726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:25:49.641 [INFO] [Thread-2726] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:25:49.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:25:49.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:25:50.505 [DEBUG] [Thread-2726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:25:50.506 [DEBUG] [Thread-2726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:25:50.553 [DEBUG] [Thread-2726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:25:50.554 [DEBUG] [Thread-2726] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:25:50.563 [DEBUG] [Thread-2726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:25:50.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:25:50.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:25:50.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:25:50.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:25:50.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:25:50.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:25:50.598 [DEBUG] [Thread-2726] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:25:57.302 [DEBUG] [Thread-2728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:26:12.360 [DEBUG] [Thread-2729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:26:20.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:26:20.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:26:20.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:26:21.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 26, 1), 40.31, 6.08, 0.0, 17.73, 27.71, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:26:21.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:26:01
2025-11-25T17:26:21.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:26:21.551 [DEBUG] [Thread-2730] [transport.py] [_log()] starting thread (client mode): 0x70d01e10
2025-11-25T17:26:21.552 [DEBUG] [Thread-2730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:26:21.571 [DEBUG] [Thread-2730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:26:21.571 [INFO] [Thread-2730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:26:21.574 [DEBUG] [Thread-2730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:26:21.574 [DEBUG] [Thread-2730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] client lang: <none>
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] server lang: <none>
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] kex follows: False
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] Compression: none
2025-11-25T17:26:21.575 [DEBUG] [Thread-2730] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:26:21.592 [DEBUG] [Thread-2730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:26:21.592 [DEBUG] [Thread-2730] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:26:21.593 [DEBUG] [Thread-2730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:26:21.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:26:21.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:26:21.595 [DEBUG] [Thread-2730] [transport.py] [_log()] userauth is OK
2025-11-25T17:26:21.595 [DEBUG] [Thread-2730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:26:21.595 [DEBUG] [Thread-2730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:26:21.595 [DEBUG] [Thread-2730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:26:21.596 [DEBUG] [Thread-2730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:26:21.618 [INFO] [Thread-2730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:26:21.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:26:22.247 [DEBUG] [Thread-2730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:26:22.247 [DEBUG] [Thread-2730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:26:22.248 [DEBUG] [Thread-2730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:26:22.288 [DEBUG] [Thread-2730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:26:22.288 [DEBUG] [Thread-2730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:26:22.291 [DEBUG] [Thread-2730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:26:22.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:26:22.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:26:22.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:26:22.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:26:22.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:26:22.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:26:22.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:26:22.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:26:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:26:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.642809 -999.00  +26.70  16.28     11   -5.60 1 1 1 1 1   887    0 32.17 -8.33 ----- 18.6 16.3 308.6 22.4 31.5 -32.7 31.8 -32.1 32.7 -30.5 33.0 -31.7
2025-11-25T17:26:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:26:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:26:22.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.642809
2025-11-25T17:26:22.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:26:22.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:26:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:26:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:26:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:26:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:26:01', tmtdew=40.31, humidity=6.08, cloud=0.0, wind=17.73, temperature=27.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:25:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:26:22.317 [DEBUG] [Thread-2730] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:26:22.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:26:22.419 [DEBUG] [Thread-2733] [transport.py] [_log()] starting thread (client mode): 0x7374dab0
2025-11-25T17:26:22.419 [DEBUG] [Thread-2733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:26:22.434 [DEBUG] [Thread-2733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:26:22.435 [INFO] [Thread-2733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] client lang: <none>
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] server lang: <none>
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] kex follows: False
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:26:22.442 [DEBUG] [Thread-2733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:26:22.443 [DEBUG] [Thread-2733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:26:22.443 [DEBUG] [Thread-2733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:26:22.443 [DEBUG] [Thread-2733] [transport.py] [_log()] Compression: none
2025-11-25T17:26:22.443 [DEBUG] [Thread-2733] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:26:22.500 [DEBUG] [Thread-2733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:26:22.501 [DEBUG] [Thread-2733] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:26:22.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:26:22.502 [DEBUG] [Thread-2733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:26:22.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:26:22.556 [DEBUG] [Thread-2733] [transport.py] [_log()] userauth is OK
2025-11-25T17:26:22.557 [DEBUG] [Thread-2733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:26:22.557 [DEBUG] [Thread-2733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:26:22.557 [DEBUG] [Thread-2733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:26:22.557 [DEBUG] [Thread-2733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:26:22.576 [INFO] [Thread-2733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:26:22.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:26:22.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:26:23.395 [DEBUG] [Thread-2733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:26:23.395 [DEBUG] [Thread-2733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:26:23.452 [DEBUG] [Thread-2733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:26:23.452 [DEBUG] [Thread-2733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:26:23.461 [DEBUG] [Thread-2733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:26:23.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:26:23.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:26:23.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:26:23.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:26:23.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:26:23.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:26:23.498 [DEBUG] [Thread-2733] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:26:27.406 [DEBUG] [Thread-2735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:26:42.476 [DEBUG] [Thread-2736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:26:47.788 [DEBUG] [Thread-2737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:26:53.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:26:53.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:26:53.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:26:54.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 26, 33), 40.83, 6.12, 0.0, 23.22, 28.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:26:54.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:26:33
2025-11-25T17:26:54.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:26:54.452 [DEBUG] [Thread-2738] [transport.py] [_log()] starting thread (client mode): 0x761db9d0
2025-11-25T17:26:54.452 [DEBUG] [Thread-2738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:26:54.472 [DEBUG] [Thread-2738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:26:54.473 [INFO] [Thread-2738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:26:54.475 [DEBUG] [Thread-2738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:26:54.475 [DEBUG] [Thread-2738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:26:54.476 [DEBUG] [Thread-2738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:26:54.476 [DEBUG] [Thread-2738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:26:54.476 [DEBUG] [Thread-2738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:26:54.476 [DEBUG] [Thread-2738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:26:54.476 [DEBUG] [Thread-2738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:26:54.476 [DEBUG] [Thread-2738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:26:54.476 [DEBUG] [Thread-2738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:26:54.476 [DEBUG] [Thread-2738] [transport.py] [_log()] client lang: <none>
2025-11-25T17:26:54.477 [DEBUG] [Thread-2738] [transport.py] [_log()] server lang: <none>
2025-11-25T17:26:54.477 [DEBUG] [Thread-2738] [transport.py] [_log()] kex follows: False
2025-11-25T17:26:54.477 [DEBUG] [Thread-2738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:26:54.477 [DEBUG] [Thread-2738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:26:54.477 [DEBUG] [Thread-2738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:26:54.477 [DEBUG] [Thread-2738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:26:54.477 [DEBUG] [Thread-2738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:26:54.478 [DEBUG] [Thread-2738] [transport.py] [_log()] Compression: none
2025-11-25T17:26:54.478 [DEBUG] [Thread-2738] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:26:54.496 [DEBUG] [Thread-2738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:26:54.497 [DEBUG] [Thread-2738] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:26:54.498 [DEBUG] [Thread-2738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:26:54.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:26:54.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:26:54.500 [DEBUG] [Thread-2738] [transport.py] [_log()] userauth is OK
2025-11-25T17:26:54.500 [DEBUG] [Thread-2738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:26:54.500 [DEBUG] [Thread-2738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:26:54.500 [DEBUG] [Thread-2738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:26:54.500 [DEBUG] [Thread-2738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:26:54.525 [INFO] [Thread-2738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:26:54.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:26:55.158 [DEBUG] [Thread-2738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:26:55.159 [DEBUG] [Thread-2738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:26:55.159 [DEBUG] [Thread-2738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:26:55.199 [DEBUG] [Thread-2738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:26:55.200 [DEBUG] [Thread-2738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:26:55.203 [DEBUG] [Thread-2738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:26:55.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:26:55.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:26:55.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:26:55.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:26:55.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:26:55.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:26:55.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:26:55.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:26:55.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:26:55.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.643156 -999.00  +26.70  16.99     11   -5.50 1 1 1 1 1   887    0 31.94 -6.67 ----- 17.3 17.0 298.6 23.8 31.4 -33.0 31.7 -32.5 32.6 -32.0 32.8 -31.6
2025-11-25T17:26:55.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:26:55.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:26:55.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.643156
2025-11-25T17:26:55.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:26:55.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:26:55.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:26:55.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:26:55.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:26:55.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:26:33', tmtdew=40.83, humidity=6.12, cloud=0.0, wind=23.22, temperature=28.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:26:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:26:55.229 [DEBUG] [Thread-2738] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:26:55.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:26:55.335 [DEBUG] [Thread-2741] [transport.py] [_log()] starting thread (client mode): 0x7376eb00
2025-11-25T17:26:55.335 [DEBUG] [Thread-2741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:26:55.350 [DEBUG] [Thread-2741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:26:55.350 [INFO] [Thread-2741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:26:55.358 [DEBUG] [Thread-2741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:26:55.358 [DEBUG] [Thread-2741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:26:55.358 [DEBUG] [Thread-2741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:26:55.358 [DEBUG] [Thread-2741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:26:55.358 [DEBUG] [Thread-2741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:26:55.358 [DEBUG] [Thread-2741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:26:55.358 [DEBUG] [Thread-2741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] client lang: <none>
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] server lang: <none>
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] kex follows: False
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] Compression: none
2025-11-25T17:26:55.359 [DEBUG] [Thread-2741] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:26:55.417 [DEBUG] [Thread-2741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:26:55.418 [DEBUG] [Thread-2741] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:26:55.419 [DEBUG] [Thread-2741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:26:55.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:26:55.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:26:55.474 [DEBUG] [Thread-2741] [transport.py] [_log()] userauth is OK
2025-11-25T17:26:55.474 [DEBUG] [Thread-2741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:26:55.474 [DEBUG] [Thread-2741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:26:55.475 [DEBUG] [Thread-2741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:26:55.475 [DEBUG] [Thread-2741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:26:55.493 [INFO] [Thread-2741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:26:55.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:26:55.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:26:56.309 [DEBUG] [Thread-2741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:26:56.309 [DEBUG] [Thread-2741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:26:56.357 [DEBUG] [Thread-2741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:26:56.357 [DEBUG] [Thread-2741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:26:56.367 [DEBUG] [Thread-2741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:26:56.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:26:56.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:26:56.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:26:56.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:26:56.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:26:56.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:26:56.405 [DEBUG] [Thread-2741] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:26:57.521 [DEBUG] [Thread-2743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:27:12.585 [DEBUG] [Thread-2744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:27:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:27:26.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:27:26.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:27:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 27, 5), 40.17, 6.11, 0.0, 15.16, 27.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:27:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:27:05
2025-11-25T17:27:27.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:27:27.356 [DEBUG] [Thread-2745] [transport.py] [_log()] starting thread (client mode): 0x761d93c0
2025-11-25T17:27:27.356 [DEBUG] [Thread-2745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:27:27.379 [DEBUG] [Thread-2745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:27:27.379 [INFO] [Thread-2745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:27:27.381 [DEBUG] [Thread-2745] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:27:27.381 [DEBUG] [Thread-2745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:27:27.381 [DEBUG] [Thread-2745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:27:27.381 [DEBUG] [Thread-2745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:27:27.381 [DEBUG] [Thread-2745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:27:27.382 [DEBUG] [Thread-2745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:27:27.382 [DEBUG] [Thread-2745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:27:27.382 [DEBUG] [Thread-2745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:27:27.382 [DEBUG] [Thread-2745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:27:27.382 [DEBUG] [Thread-2745] [transport.py] [_log()] client lang: <none>
2025-11-25T17:27:27.382 [DEBUG] [Thread-2745] [transport.py] [_log()] server lang: <none>
2025-11-25T17:27:27.382 [DEBUG] [Thread-2745] [transport.py] [_log()] kex follows: False
2025-11-25T17:27:27.382 [DEBUG] [Thread-2745] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:27:27.383 [DEBUG] [Thread-2745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:27:27.383 [DEBUG] [Thread-2745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:27:27.383 [DEBUG] [Thread-2745] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:27:27.383 [DEBUG] [Thread-2745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:27:27.383 [DEBUG] [Thread-2745] [transport.py] [_log()] Compression: none
2025-11-25T17:27:27.383 [DEBUG] [Thread-2745] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:27:27.400 [DEBUG] [Thread-2745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:27:27.401 [DEBUG] [Thread-2745] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:27:27.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:27:27.403 [DEBUG] [Thread-2745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:27:27.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:27:27.405 [DEBUG] [Thread-2745] [transport.py] [_log()] userauth is OK
2025-11-25T17:27:27.405 [DEBUG] [Thread-2745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:27:27.405 [DEBUG] [Thread-2745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:27:27.406 [DEBUG] [Thread-2745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:27:27.406 [DEBUG] [Thread-2745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:27:27.426 [INFO] [Thread-2745] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:27:27.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:27:27.628 [DEBUG] [Thread-2747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:27:28.083 [DEBUG] [Thread-2745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:27:28.083 [DEBUG] [Thread-2745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:27:28.083 [DEBUG] [Thread-2745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:27:28.124 [DEBUG] [Thread-2745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:27:28.124 [DEBUG] [Thread-2745] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:27:28.128 [DEBUG] [Thread-2745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:27:28.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:27:28.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:27:28.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:27:28.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:27:28.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:27:28.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:27:28.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:27:28.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:27:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:27:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.643503 -999.00  +26.80  17.04     11   -5.40 1 1 1 1 1   887    0 31.49 -7.47 ----- 17.2 17.0 291.6 21.4 31.4 -32.4 31.7 -31.9 32.6 -30.9 32.7 -31.2
2025-11-25T17:27:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:27:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:27:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.643503
2025-11-25T17:27:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:27:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:27:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:27:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:27:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:27:28.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:27:05', tmtdew=40.17, humidity=6.11, cloud=0.0, wind=15.16, temperature=27.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:26:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:27:28.155 [DEBUG] [Thread-2745] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:27:28.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:27:28.258 [DEBUG] [Thread-2749] [transport.py] [_log()] starting thread (client mode): 0x737e8490
2025-11-25T17:27:28.258 [DEBUG] [Thread-2749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:27:28.273 [DEBUG] [Thread-2749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:27:28.273 [INFO] [Thread-2749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:27:28.281 [DEBUG] [Thread-2749] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:27:28.281 [DEBUG] [Thread-2749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:27:28.281 [DEBUG] [Thread-2749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:27:28.282 [DEBUG] [Thread-2749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:27:28.282 [DEBUG] [Thread-2749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:27:28.282 [DEBUG] [Thread-2749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:27:28.282 [DEBUG] [Thread-2749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:27:28.282 [DEBUG] [Thread-2749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:27:28.282 [DEBUG] [Thread-2749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:27:28.282 [DEBUG] [Thread-2749] [transport.py] [_log()] client lang: <none>
2025-11-25T17:27:28.282 [DEBUG] [Thread-2749] [transport.py] [_log()] server lang: <none>
2025-11-25T17:27:28.283 [DEBUG] [Thread-2749] [transport.py] [_log()] kex follows: False
2025-11-25T17:27:28.283 [DEBUG] [Thread-2749] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:27:28.283 [DEBUG] [Thread-2749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:27:28.283 [DEBUG] [Thread-2749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:27:28.283 [DEBUG] [Thread-2749] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:27:28.283 [DEBUG] [Thread-2749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:27:28.283 [DEBUG] [Thread-2749] [transport.py] [_log()] Compression: none
2025-11-25T17:27:28.284 [DEBUG] [Thread-2749] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:27:28.343 [DEBUG] [Thread-2749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:27:28.344 [DEBUG] [Thread-2749] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:27:28.345 [DEBUG] [Thread-2749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:27:28.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:27:28.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:27:28.402 [DEBUG] [Thread-2749] [transport.py] [_log()] userauth is OK
2025-11-25T17:27:28.402 [DEBUG] [Thread-2749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:27:28.402 [DEBUG] [Thread-2749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:27:28.402 [DEBUG] [Thread-2749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:27:28.402 [DEBUG] [Thread-2749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:27:28.421 [INFO] [Thread-2749] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:27:28.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:27:28.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:27:29.238 [DEBUG] [Thread-2749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:27:29.239 [DEBUG] [Thread-2749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:27:29.287 [DEBUG] [Thread-2749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:27:29.287 [DEBUG] [Thread-2749] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:27:29.296 [DEBUG] [Thread-2749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:27:29.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:27:29.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:27:29.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:27:29.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:27:29.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:27:29.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:27:29.332 [DEBUG] [Thread-2749] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:27:42.675 [DEBUG] [Thread-2751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:27:48.548 [DEBUG] [Thread-2752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:27:57.745 [DEBUG] [Thread-2753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:27:59.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:27:59.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:27: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
2025-11-25T17:28:00.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 27, 37), 40.16, 6.11, 0.0, 13.18, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:28:00.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:27:37
2025-11-25T17:28:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:28:00.303 [DEBUG] [Thread-2754] [transport.py] [_log()] starting thread (client mode): 0x70d01450
2025-11-25T17:28:00.303 [DEBUG] [Thread-2754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:28:00.324 [DEBUG] [Thread-2754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:28:00.324 [INFO] [Thread-2754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:28:00.328 [DEBUG] [Thread-2754] [transport.py] [_log()] client lang: <none>
2025-11-25T17:28:00.329 [DEBUG] [Thread-2754] [transport.py] [_log()] server lang: <none>
2025-11-25T17:28:00.329 [DEBUG] [Thread-2754] [transport.py] [_log()] kex follows: False
2025-11-25T17:28:00.329 [DEBUG] [Thread-2754] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:28:00.329 [DEBUG] [Thread-2754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:28:00.329 [DEBUG] [Thread-2754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:28:00.329 [DEBUG] [Thread-2754] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:28:00.329 [DEBUG] [Thread-2754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:28:00.329 [DEBUG] [Thread-2754] [transport.py] [_log()] Compression: none
2025-11-25T17:28:00.329 [DEBUG] [Thread-2754] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:28:00.347 [DEBUG] [Thread-2754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:28:00.348 [DEBUG] [Thread-2754] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:28:00.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:28:00.349 [DEBUG] [Thread-2754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:28:00.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:28:00.351 [DEBUG] [Thread-2754] [transport.py] [_log()] userauth is OK
2025-11-25T17:28:00.351 [DEBUG] [Thread-2754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:28:00.351 [DEBUG] [Thread-2754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:28:00.351 [DEBUG] [Thread-2754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:28:00.351 [DEBUG] [Thread-2754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:28:00.370 [INFO] [Thread-2754] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:28:00.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:28:01.001 [DEBUG] [Thread-2754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:28:01.001 [DEBUG] [Thread-2754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:28:01.001 [DEBUG] [Thread-2754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:28:01.041 [DEBUG] [Thread-2754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:28:01.042 [DEBUG] [Thread-2754] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:28:01.045 [DEBUG] [Thread-2754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:28:01.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:28:01.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:28:01.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:28:01.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:28:01.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:28:01.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:28:01.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:28:01.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.643850 -999.00  +26.80  17.78     11   -5.50 1 1 1 1 1   887    0 31.94 -7.18 ----- 16.4 17.8 295.4 21.0 31.3 -32.1 31.6 -31.6 32.5 -31.8 32.7 -31.7
2025-11-25T17:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.643850
2025-11-25T17:28:01.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:28:01.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:28:01.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:28:01.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:28:01.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:28:01.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:27:37', tmtdew=40.16, humidity=6.11, cloud=0.0, wind=13.18, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:27:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:28:01.070 [DEBUG] [Thread-2754] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:28:01.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:28:01.175 [DEBUG] [Thread-2757] [transport.py] [_log()] starting thread (client mode): 0x7374ffa0
2025-11-25T17:28:01.175 [DEBUG] [Thread-2757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:28:01.191 [DEBUG] [Thread-2757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:28:01.191 [INFO] [Thread-2757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:28:01.199 [DEBUG] [Thread-2757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:28:01.199 [DEBUG] [Thread-2757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:28:01.199 [DEBUG] [Thread-2757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:28:01.199 [DEBUG] [Thread-2757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:28:01.199 [DEBUG] [Thread-2757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:28:01.199 [DEBUG] [Thread-2757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:28:01.199 [DEBUG] [Thread-2757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:28:01.199 [DEBUG] [Thread-2757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:28:01.199 [DEBUG] [Thread-2757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] client lang: <none>
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] server lang: <none>
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] kex follows: False
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] Compression: none
2025-11-25T17:28:01.200 [DEBUG] [Thread-2757] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:28:01.263 [DEBUG] [Thread-2757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:28:01.264 [DEBUG] [Thread-2757] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:28:01.264 [DEBUG] [Thread-2757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:28:01.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:28:01.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:28:01.322 [DEBUG] [Thread-2757] [transport.py] [_log()] userauth is OK
2025-11-25T17:28:01.322 [DEBUG] [Thread-2757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:28:01.322 [DEBUG] [Thread-2757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:28:01.323 [DEBUG] [Thread-2757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:28:01.323 [DEBUG] [Thread-2757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:28:01.344 [INFO] [Thread-2757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:28:01.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:28:01.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:28:02.186 [DEBUG] [Thread-2757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:28:02.187 [DEBUG] [Thread-2757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:28:02.238 [DEBUG] [Thread-2757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:28:02.239 [DEBUG] [Thread-2757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:28:02.248 [DEBUG] [Thread-2757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:28:02.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:28:02.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:28:02.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:28:02.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:28:02.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:28:02.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:28:02.284 [DEBUG] [Thread-2757] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:28:12.793 [DEBUG] [Thread-2759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:28:27.859 [DEBUG] [Thread-2760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:28:32.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:28:32.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:28:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:28:32.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 28, 10), 40.07, 6.16, 0.0, 15.76, 27.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:28:32.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:28:10
2025-11-25T17:28:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:28:33.238 [DEBUG] [Thread-2761] [transport.py] [_log()] starting thread (client mode): 0x7374f970
2025-11-25T17:28:33.238 [DEBUG] [Thread-2761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:28:33.253 [DEBUG] [Thread-2761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:28:33.253 [INFO] [Thread-2761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:28:33.256 [DEBUG] [Thread-2761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] client lang: <none>
2025-11-25T17:28:33.257 [DEBUG] [Thread-2761] [transport.py] [_log()] server lang: <none>
2025-11-25T17:28:33.258 [DEBUG] [Thread-2761] [transport.py] [_log()] kex follows: False
2025-11-25T17:28:33.258 [DEBUG] [Thread-2761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:28:33.258 [DEBUG] [Thread-2761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:28:33.258 [DEBUG] [Thread-2761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:28:33.258 [DEBUG] [Thread-2761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:28:33.258 [DEBUG] [Thread-2761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:28:33.258 [DEBUG] [Thread-2761] [transport.py] [_log()] Compression: none
2025-11-25T17:28:33.258 [DEBUG] [Thread-2761] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:28:33.277 [DEBUG] [Thread-2761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:28:33.277 [DEBUG] [Thread-2761] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:28:33.278 [DEBUG] [Thread-2761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:28:33.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:28:33.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:28:33.280 [DEBUG] [Thread-2761] [transport.py] [_log()] userauth is OK
2025-11-25T17:28:33.280 [DEBUG] [Thread-2761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:28:33.280 [DEBUG] [Thread-2761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:28:33.280 [DEBUG] [Thread-2761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:28:33.280 [DEBUG] [Thread-2761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:28:33.304 [INFO] [Thread-2761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:28:33.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:28:33.918 [DEBUG] [Thread-2761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:28:33.918 [DEBUG] [Thread-2761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:28:33.919 [DEBUG] [Thread-2761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:28:33.959 [DEBUG] [Thread-2761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:28:33.959 [DEBUG] [Thread-2761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:28:33.963 [DEBUG] [Thread-2761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:28:33.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:28:33.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:28:33.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:28:33.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:28:33.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:28:33.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:28:33.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:28:33.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:28:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:28:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.644198 -999.00  +26.70  13.99     11   -5.40 1 1 1 1 1   887    0 31.96 -7.60 ----- 12.5 14.0 289.7 18.3 31.3 -32.8 31.6 -32.1 32.5 -30.0 32.6 -31.4
2025-11-25T17:28:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:28:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:28:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.644198
2025-11-25T17:28:33.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:28:33.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:28:33.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:28:33.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:28:33.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:28:33.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:28:10', tmtdew=40.07, humidity=6.16, cloud=0.0, wind=15.76, temperature=27.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:27:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:28:33.992 [DEBUG] [Thread-2761] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:28:34.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:28:34.095 [DEBUG] [Thread-2764] [transport.py] [_log()] starting thread (client mode): 0x70d03520
2025-11-25T17:28:34.096 [DEBUG] [Thread-2764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:28:34.110 [DEBUG] [Thread-2764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:28:34.110 [INFO] [Thread-2764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:28:34.118 [DEBUG] [Thread-2764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:28:34.118 [DEBUG] [Thread-2764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:28:34.118 [DEBUG] [Thread-2764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:28:34.118 [DEBUG] [Thread-2764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:28:34.118 [DEBUG] [Thread-2764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:28:34.118 [DEBUG] [Thread-2764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] client lang: <none>
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] server lang: <none>
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] kex follows: False
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] Compression: none
2025-11-25T17:28:34.119 [DEBUG] [Thread-2764] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:28:34.177 [DEBUG] [Thread-2764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:28:34.178 [DEBUG] [Thread-2764] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:28:34.179 [DEBUG] [Thread-2764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:28:34.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:28:34.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:28:34.233 [DEBUG] [Thread-2764] [transport.py] [_log()] userauth is OK
2025-11-25T17:28:34.234 [DEBUG] [Thread-2764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:28:34.234 [DEBUG] [Thread-2764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:28:34.234 [DEBUG] [Thread-2764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:28:34.234 [DEBUG] [Thread-2764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:28:34.257 [INFO] [Thread-2764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:28:34.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:28:34.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:28:35.111 [DEBUG] [Thread-2764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:28:35.111 [DEBUG] [Thread-2764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:28:35.159 [DEBUG] [Thread-2764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:28:35.159 [DEBUG] [Thread-2764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:28:35.168 [DEBUG] [Thread-2764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:28:35.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:28:35.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:28:35.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:28:35.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:28:35.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:28:35.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:28:35.205 [DEBUG] [Thread-2764] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:28:42.902 [DEBUG] [Thread-2766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:28:49.273 [DEBUG] [Thread-2767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:28:57.958 [DEBUG] [Thread-2768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:29:05.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:29:05.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:29:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:29:05.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 28, 42), 40.2, 6.06, 0.0, 12.9, 27.38, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:29:05.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:28:42
2025-11-25T17:29:06.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:29:06.169 [DEBUG] [Thread-2769] [transport.py] [_log()] starting thread (client mode): 0x7374e590
2025-11-25T17:29:06.169 [DEBUG] [Thread-2769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:29:06.190 [DEBUG] [Thread-2769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:29:06.190 [INFO] [Thread-2769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:29:06.194 [DEBUG] [Thread-2769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:29:06.194 [DEBUG] [Thread-2769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:29:06.194 [DEBUG] [Thread-2769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:29:06.194 [DEBUG] [Thread-2769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:29:06.194 [DEBUG] [Thread-2769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:29:06.194 [DEBUG] [Thread-2769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:29:06.195 [DEBUG] [Thread-2769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:29:06.195 [DEBUG] [Thread-2769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:29:06.195 [DEBUG] [Thread-2769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:29:06.195 [DEBUG] [Thread-2769] [transport.py] [_log()] client lang: <none>
2025-11-25T17:29:06.195 [DEBUG] [Thread-2769] [transport.py] [_log()] server lang: <none>
2025-11-25T17:29:06.195 [DEBUG] [Thread-2769] [transport.py] [_log()] kex follows: False
2025-11-25T17:29:06.195 [DEBUG] [Thread-2769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:29:06.195 [DEBUG] [Thread-2769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:29:06.196 [DEBUG] [Thread-2769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:29:06.196 [DEBUG] [Thread-2769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:29:06.196 [DEBUG] [Thread-2769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:29:06.196 [DEBUG] [Thread-2769] [transport.py] [_log()] Compression: none
2025-11-25T17:29:06.196 [DEBUG] [Thread-2769] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:29:06.216 [DEBUG] [Thread-2769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:29:06.217 [DEBUG] [Thread-2769] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:29:06.217 [DEBUG] [Thread-2769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:29:06.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:29:06.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:29:06.219 [DEBUG] [Thread-2769] [transport.py] [_log()] userauth is OK
2025-11-25T17:29:06.220 [DEBUG] [Thread-2769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:29:06.220 [DEBUG] [Thread-2769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:29:06.220 [DEBUG] [Thread-2769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:29:06.220 [DEBUG] [Thread-2769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:29:06.246 [INFO] [Thread-2769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:29:06.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:29:06.900 [DEBUG] [Thread-2769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:29:06.900 [DEBUG] [Thread-2769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:29:06.901 [DEBUG] [Thread-2769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:29:06.942 [DEBUG] [Thread-2769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:29:06.942 [DEBUG] [Thread-2769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:29:06.946 [DEBUG] [Thread-2769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:29:06.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:29:06.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:29:06.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:29:06.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:29:06.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:29:06.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:29:06.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:29:06.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:29:06.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:29:06.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.644545 -999.00  +26.60  11.53     11   -5.40 1 1 1 1 1   887    0 31.81 -8.72 ----- 11.6 11.5 312.6 14.8 31.2 -32.2 31.6 -31.9 32.6 -29.5 32.6 -30.6
2025-11-25T17:29:06.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:29:06.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:29:06.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.644545
2025-11-25T17:29:06.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:29:06.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:29:06.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:29:06.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:29:06.972 [DEBUG] [Thread-2769] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:29:06.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:29:06.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:28:42', tmtdew=40.2, humidity=6.06, cloud=0.0, wind=12.9, temperature=27.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:28:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:29:07.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:29:07.078 [DEBUG] [Thread-2772] [transport.py] [_log()] starting thread (client mode): 0x737e9090
2025-11-25T17:29:07.079 [DEBUG] [Thread-2772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:29:07.093 [DEBUG] [Thread-2772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:29:07.093 [INFO] [Thread-2772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:29:07.101 [DEBUG] [Thread-2772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:29:07.101 [DEBUG] [Thread-2772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:29:07.101 [DEBUG] [Thread-2772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:29:07.101 [DEBUG] [Thread-2772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:29:07.101 [DEBUG] [Thread-2772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:29:07.101 [DEBUG] [Thread-2772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:29:07.101 [DEBUG] [Thread-2772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] client lang: <none>
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] server lang: <none>
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] kex follows: False
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] Compression: none
2025-11-25T17:29:07.102 [DEBUG] [Thread-2772] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:29:07.165 [DEBUG] [Thread-2772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:29:07.166 [DEBUG] [Thread-2772] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:29:07.166 [DEBUG] [Thread-2772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:29:07.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:29:07.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:29:07.225 [DEBUG] [Thread-2772] [transport.py] [_log()] userauth is OK
2025-11-25T17:29:07.225 [DEBUG] [Thread-2772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:29:07.226 [DEBUG] [Thread-2772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:29:07.226 [DEBUG] [Thread-2772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:29:07.226 [DEBUG] [Thread-2772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:29:07.244 [INFO] [Thread-2772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:29:07.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:29:07.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:29:08.079 [DEBUG] [Thread-2772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:29:08.079 [DEBUG] [Thread-2772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:29:08.128 [DEBUG] [Thread-2772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:29:08.128 [DEBUG] [Thread-2772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:29:08.137 [DEBUG] [Thread-2772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:29:08.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:29:08.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:29:08.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:29:08.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:29:08.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:29:08.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:29:08.174 [DEBUG] [Thread-2772] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:29:12.998 [DEBUG] [Thread-2774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:29:28.063 [DEBUG] [Thread-2775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:29:38.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:29:38.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:29:38.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:29:38.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 29, 14), 40.11, 6.09, 0.0, 15.4, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:29:38.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:29:14
2025-11-25T17:29:39.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:29:39.199 [DEBUG] [Thread-2776] [transport.py] [_log()] starting thread (client mode): 0x737e8490
2025-11-25T17:29:39.199 [DEBUG] [Thread-2776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:29:39.221 [DEBUG] [Thread-2776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:29:39.221 [INFO] [Thread-2776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] client lang: <none>
2025-11-25T17:29:39.225 [DEBUG] [Thread-2776] [transport.py] [_log()] server lang: <none>
2025-11-25T17:29:39.226 [DEBUG] [Thread-2776] [transport.py] [_log()] kex follows: False
2025-11-25T17:29:39.226 [DEBUG] [Thread-2776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:29:39.226 [DEBUG] [Thread-2776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:29:39.226 [DEBUG] [Thread-2776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:29:39.226 [DEBUG] [Thread-2776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:29:39.226 [DEBUG] [Thread-2776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:29:39.226 [DEBUG] [Thread-2776] [transport.py] [_log()] Compression: none
2025-11-25T17:29:39.226 [DEBUG] [Thread-2776] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:29:39.243 [DEBUG] [Thread-2776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:29:39.243 [DEBUG] [Thread-2776] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:29:39.243 [DEBUG] [Thread-2776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:29:39.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:29:39.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:29:39.243 [DEBUG] [Thread-2776] [transport.py] [_log()] userauth is OK
2025-11-25T17:29:39.243 [DEBUG] [Thread-2776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:29:39.244 [DEBUG] [Thread-2776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:29:39.244 [DEBUG] [Thread-2776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:29:39.244 [DEBUG] [Thread-2776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:29:39.252 [INFO] [Thread-2776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:29:39.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:29:39.847 [DEBUG] [Thread-2776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:29:39.847 [DEBUG] [Thread-2776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:29:39.848 [DEBUG] [Thread-2776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:29:39.888 [DEBUG] [Thread-2776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:29:39.888 [DEBUG] [Thread-2776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:29:39.890 [DEBUG] [Thread-2776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:29:39.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:29:39.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:29:39.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:29:39.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:29:39.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:29:39.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:29:39.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.644892 -999.00  +26.90   7.75     11   -5.40 1 1 1 1 1   887    0 32.11 -8.26 ----- 12.7 7.8 288.4 13.3 31.3 -32.2 31.6 -31.3 32.4 -34.2 32.7 -30.9
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.644892
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:29:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:29:14', tmtdew=40.11, humidity=6.09, cloud=0.0, wind=15.4, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:28:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:29:39.900 [DEBUG] [Thread-2776] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:29:39.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:29:39.995 [DEBUG] [Thread-2779] [transport.py] [_log()] starting thread (client mode): 0x737c41c0
2025-11-25T17:29:39.995 [DEBUG] [Thread-2779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:29:40.010 [DEBUG] [Thread-2779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:29:40.010 [INFO] [Thread-2779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:29:40.017 [DEBUG] [Thread-2779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:29:40.017 [DEBUG] [Thread-2779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:29:40.017 [DEBUG] [Thread-2779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] client lang: <none>
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] server lang: <none>
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] kex follows: False
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] Compression: none
2025-11-25T17:29:40.018 [DEBUG] [Thread-2779] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:29:40.075 [DEBUG] [Thread-2779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:29:40.075 [DEBUG] [Thread-2779] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:29:40.075 [DEBUG] [Thread-2779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:29:40.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:29:40.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:29:40.133 [DEBUG] [Thread-2779] [transport.py] [_log()] userauth is OK
2025-11-25T17:29:40.133 [DEBUG] [Thread-2779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:29:40.133 [DEBUG] [Thread-2779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:29:40.133 [DEBUG] [Thread-2779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:29:40.133 [DEBUG] [Thread-2779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:29:40.147 [INFO] [Thread-2779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:29:40.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:29:40.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:29:40.965 [DEBUG] [Thread-2779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:29:40.966 [DEBUG] [Thread-2779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:29:41.013 [DEBUG] [Thread-2779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:29:41.013 [DEBUG] [Thread-2779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:29:41.021 [DEBUG] [Thread-2779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:29:41.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:29:41.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:29:41.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:29:41.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:29:41.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:29:41.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:29:41.054 [DEBUG] [Thread-2779] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:29:43.104 [DEBUG] [Thread-2781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:29:49.769 [DEBUG] [Thread-2782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:29:58.170 [DEBUG] [Thread-2783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:30:11.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:30:11.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:30:11.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:30:11.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 29, 46), 39.86, 6.16, 0.0, 15.11, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:30:11.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:29:46
2025-11-25T17:30:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:30:12.039 [DEBUG] [Thread-2784] [transport.py] [_log()] starting thread (client mode): 0x7376f040
2025-11-25T17:30:12.039 [DEBUG] [Thread-2784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:30:12.058 [DEBUG] [Thread-2784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:30:12.059 [INFO] [Thread-2784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:30:12.060 [DEBUG] [Thread-2784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] client lang: <none>
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] server lang: <none>
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] kex follows: False
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] Compression: none
2025-11-25T17:30:12.061 [DEBUG] [Thread-2784] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:30:12.076 [DEBUG] [Thread-2784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:30:12.076 [DEBUG] [Thread-2784] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:30:12.077 [DEBUG] [Thread-2784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:30:12.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:30:12.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:30:12.079 [DEBUG] [Thread-2784] [transport.py] [_log()] userauth is OK
2025-11-25T17:30:12.079 [DEBUG] [Thread-2784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:30:12.079 [DEBUG] [Thread-2784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:30:12.079 [DEBUG] [Thread-2784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:30:12.079 [DEBUG] [Thread-2784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:30:12.095 [INFO] [Thread-2784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:30:12.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:30:13.214 [DEBUG] [Thread-2786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:30:14.207 [DEBUG] [Thread-2784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:30:14.207 [DEBUG] [Thread-2784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:30:14.207 [DEBUG] [Thread-2784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:30:14.247 [DEBUG] [Thread-2784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:30:14.247 [DEBUG] [Thread-2784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:30:14.250 [DEBUG] [Thread-2784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:30:14.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:30:14.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:30:14.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:30:14.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:30:14.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:30:14.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:30:14.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:30:14.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.645586 -999.00  +27.20  13.43     11   -5.40 1 1 1 1 1   887    0 32.16 -5.36 ----- 11.3 13.4 296.6 17.4 31.3 -31.5 31.7 -31.3 32.5 -29.8 32.6 -30.9
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.645586
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:30:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:29:46', tmtdew=39.86, humidity=6.16, cloud=0.0, wind=15.11, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:29:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:30:14.267 [DEBUG] [Thread-2784] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:30:14.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:30:14.375 [DEBUG] [Thread-2788] [transport.py] [_log()] starting thread (client mode): 0x70d03c40
2025-11-25T17:30:14.375 [DEBUG] [Thread-2788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:30:14.389 [DEBUG] [Thread-2788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:30:14.389 [INFO] [Thread-2788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:30:14.396 [DEBUG] [Thread-2788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] client lang: <none>
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] server lang: <none>
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] kex follows: False
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] Compression: none
2025-11-25T17:30:14.397 [DEBUG] [Thread-2788] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:30:14.455 [DEBUG] [Thread-2788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:30:14.455 [DEBUG] [Thread-2788] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:30:14.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:30:14.455 [DEBUG] [Thread-2788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:30:14.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:30:14.512 [DEBUG] [Thread-2788] [transport.py] [_log()] userauth is OK
2025-11-25T17:30:14.512 [DEBUG] [Thread-2788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:30:14.512 [DEBUG] [Thread-2788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:30:14.512 [DEBUG] [Thread-2788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:30:14.512 [DEBUG] [Thread-2788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:30:14.526 [INFO] [Thread-2788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:30:14.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:30:14.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:30:15.330 [DEBUG] [Thread-2788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:30:15.330 [DEBUG] [Thread-2788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:30:15.378 [DEBUG] [Thread-2788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:30:15.378 [DEBUG] [Thread-2788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:30:15.386 [DEBUG] [Thread-2788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:30:15.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:30:15.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:30:15.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:30:15.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:30:15.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:30:15.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:30:15.418 [DEBUG] [Thread-2788] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:30:28.254 [DEBUG] [Thread-2790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:30:43.326 [DEBUG] [Thread-2791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:30:45.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:30:45.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:30:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:30:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 30, 18), 39.67, 6.26, 0.0, 14.24, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:30:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:30:18
2025-11-25T17:30:46.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:30:46.382 [DEBUG] [Thread-2792] [transport.py] [_log()] starting thread (client mode): 0x737c5450
2025-11-25T17:30:46.382 [DEBUG] [Thread-2792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:30:46.403 [DEBUG] [Thread-2792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:30:46.403 [INFO] [Thread-2792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:30:46.406 [DEBUG] [Thread-2792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:30:46.406 [DEBUG] [Thread-2792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:30:46.407 [DEBUG] [Thread-2792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:30:46.407 [DEBUG] [Thread-2792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:30:46.407 [DEBUG] [Thread-2792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:30:46.407 [DEBUG] [Thread-2792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:30:46.407 [DEBUG] [Thread-2792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:30:46.407 [DEBUG] [Thread-2792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:30:46.407 [DEBUG] [Thread-2792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:30:46.407 [DEBUG] [Thread-2792] [transport.py] [_log()] client lang: <none>
2025-11-25T17:30:46.408 [DEBUG] [Thread-2792] [transport.py] [_log()] server lang: <none>
2025-11-25T17:30:46.408 [DEBUG] [Thread-2792] [transport.py] [_log()] kex follows: False
2025-11-25T17:30:46.408 [DEBUG] [Thread-2792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:30:46.408 [DEBUG] [Thread-2792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:30:46.408 [DEBUG] [Thread-2792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:30:46.408 [DEBUG] [Thread-2792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:30:46.408 [DEBUG] [Thread-2792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:30:46.408 [DEBUG] [Thread-2792] [transport.py] [_log()] Compression: none
2025-11-25T17:30:46.409 [DEBUG] [Thread-2792] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:30:46.427 [DEBUG] [Thread-2792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:30:46.428 [DEBUG] [Thread-2792] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:30:46.428 [DEBUG] [Thread-2792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:30:46.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:30:46.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:30:46.431 [DEBUG] [Thread-2792] [transport.py] [_log()] userauth is OK
2025-11-25T17:30:46.431 [DEBUG] [Thread-2792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:30:46.431 [DEBUG] [Thread-2792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:30:46.431 [DEBUG] [Thread-2792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:30:46.431 [DEBUG] [Thread-2792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:30:46.455 [INFO] [Thread-2792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:30:46.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:30:47.046 [DEBUG] [Thread-2792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:30:47.046 [DEBUG] [Thread-2792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:30:47.047 [DEBUG] [Thread-2792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:30:47.088 [DEBUG] [Thread-2792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:30:47.088 [DEBUG] [Thread-2792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:30:47.091 [DEBUG] [Thread-2792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:30:47.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:30:47.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:30:47.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:30:47.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:30:47.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:30:47.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:30:47.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:30:47.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:30:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:30:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.645933 -999.00  +27.00  19.35     11   -5.70 1 1 1 1 1   887    0 32.05 -3.06 ----- 16.2 19.4 291.8 25.7 31.2 -32.6 31.6 -31.9 32.5 -29.7 32.6 -31.2
2025-11-25T17:30:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:30:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:30:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.645933
2025-11-25T17:30:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:30:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:30:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:30:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:30:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:30:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:30:18', tmtdew=39.67, humidity=6.26, cloud=0.0, wind=14.24, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:30:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:30:47.111 [DEBUG] [Thread-2792] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:30:47.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:30:47.213 [DEBUG] [Thread-2795] [transport.py] [_log()] starting thread (client mode): 0x737e9090
2025-11-25T17:30:47.213 [DEBUG] [Thread-2795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:30:47.229 [DEBUG] [Thread-2795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:30:47.229 [INFO] [Thread-2795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:30:47.237 [DEBUG] [Thread-2795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] client lang: <none>
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] server lang: <none>
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] kex follows: False
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:30:47.238 [DEBUG] [Thread-2795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:30:47.239 [DEBUG] [Thread-2795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:30:47.239 [DEBUG] [Thread-2795] [transport.py] [_log()] Compression: none
2025-11-25T17:30:47.239 [DEBUG] [Thread-2795] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:30:47.298 [DEBUG] [Thread-2795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:30:47.298 [DEBUG] [Thread-2795] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:30:47.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:30:47.300 [DEBUG] [Thread-2795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:30:47.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:30:47.357 [DEBUG] [Thread-2795] [transport.py] [_log()] userauth is OK
2025-11-25T17:30:47.358 [DEBUG] [Thread-2795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:30:47.358 [DEBUG] [Thread-2795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:30:47.358 [DEBUG] [Thread-2795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:30:47.358 [DEBUG] [Thread-2795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:30:47.373 [INFO] [Thread-2795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:30:47.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:30:47.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:30:48.211 [DEBUG] [Thread-2795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:30:48.211 [DEBUG] [Thread-2795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:30:48.260 [DEBUG] [Thread-2795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:30:48.260 [DEBUG] [Thread-2795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:30:48.269 [DEBUG] [Thread-2795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:30:48.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:30:48.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:30:48.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:30:48.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:30:48.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:30:48.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:30:48.306 [DEBUG] [Thread-2795] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:30:50.274 [DEBUG] [Thread-2797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:30:58.365 [DEBUG] [Thread-2798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:31:13.427 [DEBUG] [Thread-2799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:31:18.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:31:18.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:31:18.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:31:19.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 30, 50), 40.27, 6.04, 0.0, 16.15, 27.38, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:31:19.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:30:50
2025-11-25T17:31:19.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:31:19.280 [DEBUG] [Thread-2800] [transport.py] [_log()] starting thread (client mode): 0x70d01570
2025-11-25T17:31:19.280 [DEBUG] [Thread-2800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:31:19.302 [DEBUG] [Thread-2800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:31:19.302 [INFO] [Thread-2800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:31:19.306 [DEBUG] [Thread-2800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:31:19.306 [DEBUG] [Thread-2800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:31:19.307 [DEBUG] [Thread-2800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:31:19.307 [DEBUG] [Thread-2800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:31:19.307 [DEBUG] [Thread-2800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:31:19.307 [DEBUG] [Thread-2800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:31:19.307 [DEBUG] [Thread-2800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:31:19.307 [DEBUG] [Thread-2800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:31:19.307 [DEBUG] [Thread-2800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:31:19.307 [DEBUG] [Thread-2800] [transport.py] [_log()] client lang: <none>
2025-11-25T17:31:19.307 [DEBUG] [Thread-2800] [transport.py] [_log()] server lang: <none>
2025-11-25T17:31:19.308 [DEBUG] [Thread-2800] [transport.py] [_log()] kex follows: False
2025-11-25T17:31:19.308 [DEBUG] [Thread-2800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:31:19.308 [DEBUG] [Thread-2800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:31:19.308 [DEBUG] [Thread-2800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:31:19.308 [DEBUG] [Thread-2800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:31:19.308 [DEBUG] [Thread-2800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:31:19.308 [DEBUG] [Thread-2800] [transport.py] [_log()] Compression: none
2025-11-25T17:31:19.309 [DEBUG] [Thread-2800] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:31:19.324 [DEBUG] [Thread-2800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:31:19.324 [DEBUG] [Thread-2800] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:31:19.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:31:19.325 [DEBUG] [Thread-2800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:31:19.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:31:19.328 [DEBUG] [Thread-2800] [transport.py] [_log()] userauth is OK
2025-11-25T17:31:19.328 [DEBUG] [Thread-2800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:31:19.328 [DEBUG] [Thread-2800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:31:19.328 [DEBUG] [Thread-2800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:31:19.328 [DEBUG] [Thread-2800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:31:19.346 [INFO] [Thread-2800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:31:19.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:31:19.966 [DEBUG] [Thread-2800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:31:19.966 [DEBUG] [Thread-2800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:31:19.967 [DEBUG] [Thread-2800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:31:20.008 [DEBUG] [Thread-2800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:31:20.008 [DEBUG] [Thread-2800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:31:20.011 [DEBUG] [Thread-2800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:31:20.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:31:20.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:31:20.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:31:20.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:31:20.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:31:20.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:31:20.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:31:20.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:31:20.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:31:20.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.646281 -999.00  +27.10  17.32     11   -5.50 1 1 1 1 1   887    0 32.25 -2.28 ----- 20.9 17.3 292.6 22.7 31.1 -32.2 31.5 -31.4 32.5 -29.5 32.6 -30.9
2025-11-25T17:31:20.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:31:20.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:31:20.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.646281
2025-11-25T17:31:20.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:31:20.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:31:20.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:31:20.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:31:20.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:31:20.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:30:50', tmtdew=40.27, humidity=6.04, cloud=0.0, wind=16.15, temperature=27.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:30:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:31:20.035 [DEBUG] [Thread-2800] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:31:20.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:31:20.137 [DEBUG] [Thread-2803] [transport.py] [_log()] starting thread (client mode): 0x70d01660
2025-11-25T17:31:20.137 [DEBUG] [Thread-2803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:31:20.152 [DEBUG] [Thread-2803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:31:20.152 [INFO] [Thread-2803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:31:20.159 [DEBUG] [Thread-2803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:31:20.160 [DEBUG] [Thread-2803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:31:20.160 [DEBUG] [Thread-2803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:31:20.160 [DEBUG] [Thread-2803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:31:20.160 [DEBUG] [Thread-2803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:31:20.160 [DEBUG] [Thread-2803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:31:20.160 [DEBUG] [Thread-2803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:31:20.160 [DEBUG] [Thread-2803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:31:20.161 [DEBUG] [Thread-2803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:31:20.161 [DEBUG] [Thread-2803] [transport.py] [_log()] client lang: <none>
2025-11-25T17:31:20.161 [DEBUG] [Thread-2803] [transport.py] [_log()] server lang: <none>
2025-11-25T17:31:20.161 [DEBUG] [Thread-2803] [transport.py] [_log()] kex follows: False
2025-11-25T17:31:20.161 [DEBUG] [Thread-2803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:31:20.161 [DEBUG] [Thread-2803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:31:20.161 [DEBUG] [Thread-2803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:31:20.161 [DEBUG] [Thread-2803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:31:20.162 [DEBUG] [Thread-2803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:31:20.162 [DEBUG] [Thread-2803] [transport.py] [_log()] Compression: none
2025-11-25T17:31:20.162 [DEBUG] [Thread-2803] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:31:20.221 [DEBUG] [Thread-2803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:31:20.222 [DEBUG] [Thread-2803] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:31:20.223 [DEBUG] [Thread-2803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:31:20.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:31:20.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:31:20.280 [DEBUG] [Thread-2803] [transport.py] [_log()] userauth is OK
2025-11-25T17:31:20.281 [DEBUG] [Thread-2803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:31:20.281 [DEBUG] [Thread-2803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:31:20.281 [DEBUG] [Thread-2803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:31:20.281 [DEBUG] [Thread-2803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:31:20.300 [INFO] [Thread-2803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:31:20.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:31:20.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:31:21.117 [DEBUG] [Thread-2803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:31:21.117 [DEBUG] [Thread-2803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:31:21.165 [DEBUG] [Thread-2803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:31:21.165 [DEBUG] [Thread-2803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:31:21.174 [DEBUG] [Thread-2803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:31:21.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:31:21.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:31: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
2025-11-25T17:31:21.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:31:21.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:31:21.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:31:21.211 [DEBUG] [Thread-2803] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:31:28.468 [DEBUG] [Thread-2805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:31:43.526 [DEBUG] [Thread-2806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:31:50.763 [DEBUG] [Thread-2807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:31:51.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:31:51.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:31:51.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:31:51.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 31, 22), 40.21, 6.04, 0.0, 15.25, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:31:51.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:31:22
2025-11-25T17:31:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:31:52.178 [DEBUG] [Thread-2808] [transport.py] [_log()] starting thread (client mode): 0x737eb8e0
2025-11-25T17:31:52.178 [DEBUG] [Thread-2808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:31:52.198 [DEBUG] [Thread-2808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:31:52.198 [INFO] [Thread-2808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:31:52.202 [DEBUG] [Thread-2808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:31:52.202 [DEBUG] [Thread-2808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:31:52.202 [DEBUG] [Thread-2808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:31:52.202 [DEBUG] [Thread-2808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:31:52.202 [DEBUG] [Thread-2808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:31:52.202 [DEBUG] [Thread-2808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:31:52.202 [DEBUG] [Thread-2808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:31:52.202 [DEBUG] [Thread-2808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:31:52.203 [DEBUG] [Thread-2808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:31:52.203 [DEBUG] [Thread-2808] [transport.py] [_log()] client lang: <none>
2025-11-25T17:31:52.203 [DEBUG] [Thread-2808] [transport.py] [_log()] server lang: <none>
2025-11-25T17:31:52.203 [DEBUG] [Thread-2808] [transport.py] [_log()] kex follows: False
2025-11-25T17:31:52.203 [DEBUG] [Thread-2808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:31:52.203 [DEBUG] [Thread-2808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:31:52.203 [DEBUG] [Thread-2808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:31:52.203 [DEBUG] [Thread-2808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:31:52.204 [DEBUG] [Thread-2808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:31:52.204 [DEBUG] [Thread-2808] [transport.py] [_log()] Compression: none
2025-11-25T17:31:52.204 [DEBUG] [Thread-2808] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:31:52.222 [DEBUG] [Thread-2808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:31:52.223 [DEBUG] [Thread-2808] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:31:52.223 [DEBUG] [Thread-2808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:31:52.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:31:52.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:31:52.225 [DEBUG] [Thread-2808] [transport.py] [_log()] userauth is OK
2025-11-25T17:31:52.225 [DEBUG] [Thread-2808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:31:52.225 [DEBUG] [Thread-2808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:31:52.226 [DEBUG] [Thread-2808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:31:52.226 [DEBUG] [Thread-2808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:31:52.260 [INFO] [Thread-2808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:31:52.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:31:52.937 [DEBUG] [Thread-2808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:31:52.937 [DEBUG] [Thread-2808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:31:52.938 [DEBUG] [Thread-2808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:31:52.979 [DEBUG] [Thread-2808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:31:52.979 [DEBUG] [Thread-2808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:31:52.983 [DEBUG] [Thread-2808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:31:52.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:31:52.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:31:52.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:31:53.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:31:53.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:31:53.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:31:53.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:31:53.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:31:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:31:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.646628 -999.00  +26.90  20.93     11   -5.60 1 1 1 1 1   887    0 32.30 -1.67 ----- 19.7 20.9 294.2 24.7 31.1 -32.2 31.6 -31.4 32.3 -32.1 32.4 -31.3
2025-11-25T17:31:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:31:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:31:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.646628
2025-11-25T17:31:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:31:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:31:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:31:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:31:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:31:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:31:22', tmtdew=40.21, humidity=6.04, cloud=0.0, wind=15.25, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:31:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:31:53.011 [DEBUG] [Thread-2808] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:31:53.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:31:53.114 [DEBUG] [Thread-2811] [transport.py] [_log()] starting thread (client mode): 0x70d01cf0
2025-11-25T17:31:53.114 [DEBUG] [Thread-2811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:31:53.129 [DEBUG] [Thread-2811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:31:53.129 [INFO] [Thread-2811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:31:53.137 [DEBUG] [Thread-2811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:31:53.137 [DEBUG] [Thread-2811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:31:53.137 [DEBUG] [Thread-2811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:31:53.137 [DEBUG] [Thread-2811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:31:53.137 [DEBUG] [Thread-2811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:31:53.137 [DEBUG] [Thread-2811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:31:53.137 [DEBUG] [Thread-2811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] client lang: <none>
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] server lang: <none>
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] kex follows: False
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] Compression: none
2025-11-25T17:31:53.138 [DEBUG] [Thread-2811] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:31:53.197 [DEBUG] [Thread-2811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:31:53.197 [DEBUG] [Thread-2811] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:31:53.198 [DEBUG] [Thread-2811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:31:53.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:31:53.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:31:53.253 [DEBUG] [Thread-2811] [transport.py] [_log()] userauth is OK
2025-11-25T17:31:53.254 [DEBUG] [Thread-2811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:31:53.254 [DEBUG] [Thread-2811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:31:53.254 [DEBUG] [Thread-2811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:31:53.254 [DEBUG] [Thread-2811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:31:53.274 [INFO] [Thread-2811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:31:53.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:31:53.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:31:54.110 [DEBUG] [Thread-2811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:31:54.111 [DEBUG] [Thread-2811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:31:54.159 [DEBUG] [Thread-2811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:31:54.159 [DEBUG] [Thread-2811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:31:54.168 [DEBUG] [Thread-2811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:31:54.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:31:54.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:31:54.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:31:54.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:31:54.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:31:54.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:31:54.206 [DEBUG] [Thread-2811] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:31:58.572 [DEBUG] [Thread-2813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:32:13.637 [DEBUG] [Thread-2814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:32:24.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:32:24.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:32:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:32:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 31, 54), 39.82, 6.16, 0.0, 14.86, 27.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:32:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:31:54
2025-11-25T17:32:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:32:25.161 [DEBUG] [Thread-2815] [transport.py] [_log()] starting thread (client mode): 0x70d1ea40
2025-11-25T17:32:25.161 [DEBUG] [Thread-2815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:32:25.176 [DEBUG] [Thread-2815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:32:25.176 [INFO] [Thread-2815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:32:25.179 [DEBUG] [Thread-2815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] client lang: <none>
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] server lang: <none>
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] kex follows: False
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] Compression: none
2025-11-25T17:32:25.180 [DEBUG] [Thread-2815] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:32:25.198 [DEBUG] [Thread-2815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:32:25.198 [DEBUG] [Thread-2815] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:32:25.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:32:25.199 [DEBUG] [Thread-2815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:32:25.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:32:25.202 [DEBUG] [Thread-2815] [transport.py] [_log()] userauth is OK
2025-11-25T17:32:25.202 [DEBUG] [Thread-2815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:32:25.202 [DEBUG] [Thread-2815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:32:25.202 [DEBUG] [Thread-2815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:32:25.202 [DEBUG] [Thread-2815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:32:25.220 [INFO] [Thread-2815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:32:25.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:32:25.885 [DEBUG] [Thread-2815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:32:25.886 [DEBUG] [Thread-2815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:32:25.886 [DEBUG] [Thread-2815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:32:25.927 [DEBUG] [Thread-2815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:32:25.927 [DEBUG] [Thread-2815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:32:25.930 [DEBUG] [Thread-2815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:32:25.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:32:25.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:32:25.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:32:25.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:32:25.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:32:25.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:32:25.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:32:25.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:32:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:32:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.646975 -999.00  +26.80  14.88     11   -5.60 1 1 1 1 1   887    0 31.79 -1.64 ----- 14.6 14.9 300.4 20.8 31.1 -32.5 31.4 -31.7 32.2 -30.2 32.4 -31.0
2025-11-25T17:32:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:32:25.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:32:25.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.646975
2025-11-25T17:32:25.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:32:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:32:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:32:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:32:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:32:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:31:54', tmtdew=39.82, humidity=6.16, cloud=0.0, wind=14.86, temperature=27.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:31:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:32:25.959 [DEBUG] [Thread-2815] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:32:26.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:32:26.058 [DEBUG] [Thread-2818] [transport.py] [_log()] starting thread (client mode): 0x70d1e830
2025-11-25T17:32:26.058 [DEBUG] [Thread-2818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:32:26.076 [DEBUG] [Thread-2818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:32:26.076 [INFO] [Thread-2818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:32:26.084 [DEBUG] [Thread-2818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:32:26.084 [DEBUG] [Thread-2818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:32:26.084 [DEBUG] [Thread-2818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:32:26.084 [DEBUG] [Thread-2818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:32:26.084 [DEBUG] [Thread-2818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:32:26.084 [DEBUG] [Thread-2818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:32:26.084 [DEBUG] [Thread-2818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] client lang: <none>
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] server lang: <none>
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] kex follows: False
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] Compression: none
2025-11-25T17:32:26.085 [DEBUG] [Thread-2818] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:32:26.144 [DEBUG] [Thread-2818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:32:26.145 [DEBUG] [Thread-2818] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:32:26.146 [DEBUG] [Thread-2818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:32:26.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:32:26.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:32:26.201 [DEBUG] [Thread-2818] [transport.py] [_log()] userauth is OK
2025-11-25T17:32:26.201 [DEBUG] [Thread-2818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:32:26.201 [DEBUG] [Thread-2818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:32:26.201 [DEBUG] [Thread-2818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:32:26.201 [DEBUG] [Thread-2818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:32:26.221 [INFO] [Thread-2818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:32:26.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:32:26.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:32:27.042 [DEBUG] [Thread-2818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:32:27.042 [DEBUG] [Thread-2818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:32:27.090 [DEBUG] [Thread-2818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:32:27.090 [DEBUG] [Thread-2818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:32:27.098 [DEBUG] [Thread-2818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:32:27.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:32:27.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:32:27.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:32:27.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:32:27.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:32:27.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:32:27.130 [DEBUG] [Thread-2818] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:32:28.683 [DEBUG] [Thread-2820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:32:43.759 [DEBUG] [Thread-2821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:32:51.525 [DEBUG] [Thread-2822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:32:57.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:32:57.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:32:57.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:32:57.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 32, 26), 39.84, 6.14, 0.0, 12.0, 26.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:32:57.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:32:26
2025-11-25T17:32:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:32:58.092 [DEBUG] [Thread-2823] [transport.py] [_log()] starting thread (client mode): 0x737e8850
2025-11-25T17:32:58.092 [DEBUG] [Thread-2823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:32:58.112 [DEBUG] [Thread-2823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:32:58.112 [INFO] [Thread-2823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:32:58.115 [DEBUG] [Thread-2823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:32:58.115 [DEBUG] [Thread-2823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:32:58.115 [DEBUG] [Thread-2823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:32:58.115 [DEBUG] [Thread-2823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] client lang: <none>
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] server lang: <none>
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] kex follows: False
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:32:58.116 [DEBUG] [Thread-2823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:32:58.117 [DEBUG] [Thread-2823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:32:58.117 [DEBUG] [Thread-2823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:32:58.117 [DEBUG] [Thread-2823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:32:58.117 [DEBUG] [Thread-2823] [transport.py] [_log()] Compression: none
2025-11-25T17:32:58.117 [DEBUG] [Thread-2823] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:32:58.134 [DEBUG] [Thread-2823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:32:58.135 [DEBUG] [Thread-2823] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:32:58.135 [DEBUG] [Thread-2823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:32:58.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:32:58.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:32:58.137 [DEBUG] [Thread-2823] [transport.py] [_log()] userauth is OK
2025-11-25T17:32:58.138 [DEBUG] [Thread-2823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:32:58.138 [DEBUG] [Thread-2823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:32:58.138 [DEBUG] [Thread-2823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:32:58.138 [DEBUG] [Thread-2823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:32:58.162 [INFO] [Thread-2823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:32:58.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:32:58.799 [DEBUG] [Thread-2825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:32:58.806 [DEBUG] [Thread-2823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:32:58.806 [DEBUG] [Thread-2823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:32:58.806 [DEBUG] [Thread-2823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:32:58.846 [DEBUG] [Thread-2823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:32:58.847 [DEBUG] [Thread-2823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:32:58.849 [DEBUG] [Thread-2823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:32:58.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:32:58.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:32:58.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:32:58.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:32:58.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:32:58.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:32:58.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.647322 -999.00  +26.80  13.52     11   -5.60 1 1 1 1 1   887    0 32.08 -1.63 ----- 9.1 13.5 291.2 19.6 31.0 -32.3 31.4 -31.9 32.3 -30.8 32.4 -31.1
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.647322
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:32:58.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:32:26', tmtdew=39.84, humidity=6.14, cloud=0.0, wind=12.0, temperature=26.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:32:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:32:58.868 [DEBUG] [Thread-2823] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:32:58.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:32:58.960 [DEBUG] [Thread-2827] [transport.py] [_log()] starting thread (client mode): 0x737c41c0
2025-11-25T17:32:58.960 [DEBUG] [Thread-2827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:32:58.979 [DEBUG] [Thread-2827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:32:58.979 [INFO] [Thread-2827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:32:58.986 [DEBUG] [Thread-2827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:32:58.986 [DEBUG] [Thread-2827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:32:58.986 [DEBUG] [Thread-2827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:32:58.986 [DEBUG] [Thread-2827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:32:58.986 [DEBUG] [Thread-2827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:32:58.986 [DEBUG] [Thread-2827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] client lang: <none>
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] server lang: <none>
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] kex follows: False
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] Compression: none
2025-11-25T17:32:58.987 [DEBUG] [Thread-2827] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:32:59.050 [DEBUG] [Thread-2827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:32:59.051 [DEBUG] [Thread-2827] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:32:59.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:32:59.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:32:59.051 [DEBUG] [Thread-2827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:32:59.109 [DEBUG] [Thread-2827] [transport.py] [_log()] userauth is OK
2025-11-25T17:32:59.109 [DEBUG] [Thread-2827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:32:59.109 [DEBUG] [Thread-2827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:32:59.109 [DEBUG] [Thread-2827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:32:59.109 [DEBUG] [Thread-2827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:32:59.124 [INFO] [Thread-2827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:32:59.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:32:59.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:32:59.962 [DEBUG] [Thread-2827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:32:59.963 [DEBUG] [Thread-2827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:33:00.010 [DEBUG] [Thread-2827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:33:00.010 [DEBUG] [Thread-2827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:33:00.018 [DEBUG] [Thread-2827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:33:00.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:33:00.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:33:00.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:33:00.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:33:00.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:33:00.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:33:00.049 [DEBUG] [Thread-2827] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:33:13.843 [DEBUG] [Thread-2829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:33:28.912 [DEBUG] [Thread-2830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:33:30.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:33:30.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:33:30.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:33:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 32, 58), 39.85, 6.19, 0.0, 14.59, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:33:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:32:58
2025-11-25T17:33:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:33:31.081 [DEBUG] [Thread-2831] [transport.py] [_log()] starting thread (client mode): 0x70d01cf0
2025-11-25T17:33:31.081 [DEBUG] [Thread-2831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:33:31.101 [DEBUG] [Thread-2831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:33:31.101 [INFO] [Thread-2831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:33:31.104 [DEBUG] [Thread-2831] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:33:31.104 [DEBUG] [Thread-2831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:33:31.104 [DEBUG] [Thread-2831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:33:31.104 [DEBUG] [Thread-2831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:33:31.104 [DEBUG] [Thread-2831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:33:31.104 [DEBUG] [Thread-2831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] client lang: <none>
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] server lang: <none>
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] kex follows: False
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] Compression: none
2025-11-25T17:33:31.105 [DEBUG] [Thread-2831] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:33:31.122 [DEBUG] [Thread-2831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:33:31.122 [DEBUG] [Thread-2831] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:33:31.122 [DEBUG] [Thread-2831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:33:31.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:33:31.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:33:31.123 [DEBUG] [Thread-2831] [transport.py] [_log()] userauth is OK
2025-11-25T17:33:31.123 [DEBUG] [Thread-2831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:33:31.123 [DEBUG] [Thread-2831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:33:31.123 [DEBUG] [Thread-2831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:33:31.123 [DEBUG] [Thread-2831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:33:31.132 [INFO] [Thread-2831] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:33:31.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:33:31.783 [DEBUG] [Thread-2831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:33:31.783 [DEBUG] [Thread-2831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:33:31.783 [DEBUG] [Thread-2831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:33:31.824 [DEBUG] [Thread-2831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:33:31.824 [DEBUG] [Thread-2831] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:33:31.826 [DEBUG] [Thread-2831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:33:31.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:33:31.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:33:31.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:33:31.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:33:31.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:33:31.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:33:31.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.647670 -999.00  +26.90  15.94     11   -5.50 1 1 1 1 1   887    0 31.93 -1.50 ----- 13.0 15.9 270.2 17.6 31.0 -32.0 31.4 -31.5 32.2 -29.9 32.4 -30.9
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.647670
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:33:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:33:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:32:58', tmtdew=39.85, humidity=6.19, cloud=0.0, wind=14.59, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:32:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:33:31.846 [DEBUG] [Thread-2831] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:33:31.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:33:31.938 [DEBUG] [Thread-2834] [transport.py] [_log()] starting thread (client mode): 0x70d1f430
2025-11-25T17:33:31.938 [DEBUG] [Thread-2834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:33:31.954 [DEBUG] [Thread-2834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:33:31.954 [INFO] [Thread-2834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] client lang: <none>
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] server lang: <none>
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] kex follows: False
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:33:31.962 [DEBUG] [Thread-2834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:33:31.963 [DEBUG] [Thread-2834] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:33:31.963 [DEBUG] [Thread-2834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:33:31.963 [DEBUG] [Thread-2834] [transport.py] [_log()] Compression: none
2025-11-25T17:33:31.963 [DEBUG] [Thread-2834] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:33:32.019 [DEBUG] [Thread-2834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:33:32.019 [DEBUG] [Thread-2834] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:33:32.019 [DEBUG] [Thread-2834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:33:32.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:33:32.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:33:32.077 [DEBUG] [Thread-2834] [transport.py] [_log()] userauth is OK
2025-11-25T17:33:32.077 [DEBUG] [Thread-2834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:33:32.077 [DEBUG] [Thread-2834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:33:32.077 [DEBUG] [Thread-2834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:33:32.077 [DEBUG] [Thread-2834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:33:32.091 [INFO] [Thread-2834] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:33:32.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:33:32.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:33:32.940 [DEBUG] [Thread-2834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:33:32.940 [DEBUG] [Thread-2834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:33:32.990 [DEBUG] [Thread-2834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:33:32.990 [DEBUG] [Thread-2834] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:33:32.999 [DEBUG] [Thread-2834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:33:33.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:33:33.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:33:33.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:33:33.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:33:33.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:33:33.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:33:33.036 [DEBUG] [Thread-2834] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:33:43.956 [DEBUG] [Thread-2836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:33:52.272 [DEBUG] [Thread-2837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:33:59.012 [DEBUG] [Thread-2838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:34:03.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:34:03.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:34:03.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:34:03.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 33, 30), 40.02, 6.11, 0.0, 14.14, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:34:03.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:33:30
2025-11-25T17:34:03.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:34:04.057 [DEBUG] [Thread-2839] [transport.py] [_log()] starting thread (client mode): 0x70d1f250
2025-11-25T17:34:04.058 [DEBUG] [Thread-2839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:34:04.079 [DEBUG] [Thread-2839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:34:04.079 [INFO] [Thread-2839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] client lang: <none>
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] server lang: <none>
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] kex follows: False
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:34:04.082 [DEBUG] [Thread-2839] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:34:04.083 [DEBUG] [Thread-2839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:34:04.083 [DEBUG] [Thread-2839] [transport.py] [_log()] Compression: none
2025-11-25T17:34:04.083 [DEBUG] [Thread-2839] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:34:04.099 [DEBUG] [Thread-2839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:34:04.099 [DEBUG] [Thread-2839] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:34:04.100 [DEBUG] [Thread-2839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:34:04.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:34:04.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:34:04.100 [DEBUG] [Thread-2839] [transport.py] [_log()] userauth is OK
2025-11-25T17:34:04.100 [DEBUG] [Thread-2839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:34:04.101 [DEBUG] [Thread-2839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:34:04.101 [DEBUG] [Thread-2839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:34:04.101 [DEBUG] [Thread-2839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:34:04.111 [INFO] [Thread-2839] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:34:04.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:34:04.747 [DEBUG] [Thread-2839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:34:04.748 [DEBUG] [Thread-2839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:34:04.748 [DEBUG] [Thread-2839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:34:04.789 [DEBUG] [Thread-2839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:34:04.789 [DEBUG] [Thread-2839] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:34:04.792 [DEBUG] [Thread-2839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:34:04.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:34:04.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:34:04.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:34:04.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:34:04.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:34:04.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:34:04.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:34:04.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:34:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:34:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.648017 -999.00  +27.20  12.92     11   -5.30 1 1 1 1 1   887    0 31.94 -1.09 ----- 15.4 12.9 291.6 15.4 30.9 -32.0 31.4 -31.6 32.2 -30.8 32.4 -31.1
2025-11-25T17:34:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:34:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:34:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.648017
2025-11-25T17:34:04.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:34:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:34:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:34:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:34:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:34:04.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:33:30', tmtdew=40.02, humidity=6.11, cloud=0.0, wind=14.14, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:33:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:34:04.820 [DEBUG] [Thread-2839] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:34:04.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:34:04.926 [DEBUG] [Thread-2842] [transport.py] [_log()] starting thread (client mode): 0x70d1c250
2025-11-25T17:34:04.926 [DEBUG] [Thread-2842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:34:04.941 [DEBUG] [Thread-2842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:34:04.941 [INFO] [Thread-2842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:34:04.948 [DEBUG] [Thread-2842] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] client lang: <none>
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] server lang: <none>
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] kex follows: False
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:34:04.949 [DEBUG] [Thread-2842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:34:04.950 [DEBUG] [Thread-2842] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:34:04.950 [DEBUG] [Thread-2842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:34:04.950 [DEBUG] [Thread-2842] [transport.py] [_log()] Compression: none
2025-11-25T17:34:04.950 [DEBUG] [Thread-2842] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:34:05.009 [DEBUG] [Thread-2842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:34:05.010 [DEBUG] [Thread-2842] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:34:05.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:34:05.011 [DEBUG] [Thread-2842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:34:05.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:34:05.068 [DEBUG] [Thread-2842] [transport.py] [_log()] userauth is OK
2025-11-25T17:34:05.069 [DEBUG] [Thread-2842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:34:05.069 [DEBUG] [Thread-2842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:34:05.069 [DEBUG] [Thread-2842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:34:05.069 [DEBUG] [Thread-2842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:34:05.087 [INFO] [Thread-2842] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:34:05.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:34:05.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:34:05.921 [DEBUG] [Thread-2842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:34:05.921 [DEBUG] [Thread-2842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:34:05.970 [DEBUG] [Thread-2842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:34:05.970 [DEBUG] [Thread-2842] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:34:05.979 [DEBUG] [Thread-2842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:34:05.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:34:05.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:34:05.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:34:06.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:34:06.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:34:06.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:34:06.016 [DEBUG] [Thread-2842] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:34:14.053 [DEBUG] [Thread-2844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:34:29.121 [DEBUG] [Thread-2845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:34:36.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:34:36.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:34:36.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
2025-11-25T17:34:36.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 34, 2), 39.92, 6.16, 0.0, 15.95, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:34:36.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:34:02
2025-11-25T17:34:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:34:37.055 [DEBUG] [Thread-2846] [transport.py] [_log()] starting thread (client mode): 0x70d1eb00
2025-11-25T17:34:37.055 [DEBUG] [Thread-2846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:34:37.075 [DEBUG] [Thread-2846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:34:37.075 [INFO] [Thread-2846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] client lang: <none>
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] server lang: <none>
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] kex follows: False
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] Compression: none
2025-11-25T17:34:37.079 [DEBUG] [Thread-2846] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:34:37.095 [DEBUG] [Thread-2846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:34:37.095 [DEBUG] [Thread-2846] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:34:37.095 [DEBUG] [Thread-2846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:34:37.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:34:37.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:34:37.096 [DEBUG] [Thread-2846] [transport.py] [_log()] userauth is OK
2025-11-25T17:34:37.096 [DEBUG] [Thread-2846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:34:37.096 [DEBUG] [Thread-2846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:34:37.096 [DEBUG] [Thread-2846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:34:37.096 [DEBUG] [Thread-2846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:34:37.105 [INFO] [Thread-2846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:34:37.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:34:37.735 [DEBUG] [Thread-2846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:34:37.735 [DEBUG] [Thread-2846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:34:37.735 [DEBUG] [Thread-2846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:34:37.776 [DEBUG] [Thread-2846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:34:37.777 [DEBUG] [Thread-2846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:34:37.779 [DEBUG] [Thread-2846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:34:37.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:34:37.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:34:37.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:34:37.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:34:37.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:34:37.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:34:37.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.648364 -999.00  +27.00  17.16     11   -5.30 1 1 1 1 1   887    0 32.08 0.42 ----- 13.3 17.2 305.8 20.4 30.9 -32.4 31.3 -32.2 32.2 -30.8 32.3 -31.3
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.648364
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:34:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:34:02', tmtdew=39.92, humidity=6.16, cloud=0.0, wind=15.95, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:33:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:34:37.798 [DEBUG] [Thread-2846] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:34:37.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:34:37.892 [DEBUG] [Thread-2849] [transport.py] [_log()] starting thread (client mode): 0x7376f9a0
2025-11-25T17:34:37.892 [DEBUG] [Thread-2849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:34:37.908 [DEBUG] [Thread-2849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:34:37.908 [INFO] [Thread-2849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:34:37.915 [DEBUG] [Thread-2849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] client lang: <none>
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] server lang: <none>
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] kex follows: False
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] Compression: none
2025-11-25T17:34:37.916 [DEBUG] [Thread-2849] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:34:37.974 [DEBUG] [Thread-2849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:34:37.974 [DEBUG] [Thread-2849] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:34:37.974 [DEBUG] [Thread-2849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:34:37.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:34:37.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:34:38.031 [DEBUG] [Thread-2849] [transport.py] [_log()] userauth is OK
2025-11-25T17:34:38.031 [DEBUG] [Thread-2849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:34:38.031 [DEBUG] [Thread-2849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:34:38.031 [DEBUG] [Thread-2849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:34:38.031 [DEBUG] [Thread-2849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:34:38.045 [INFO] [Thread-2849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:34:38.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:34:38.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:34:38.871 [DEBUG] [Thread-2849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:34:38.871 [DEBUG] [Thread-2849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:34:38.920 [DEBUG] [Thread-2849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:34:38.920 [DEBUG] [Thread-2849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:34:38.928 [DEBUG] [Thread-2849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:34:38.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:34:38.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:34:38.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:34:38.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:34:38.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:34:38.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:34:38.960 [DEBUG] [Thread-2849] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:34:44.165 [DEBUG] [Thread-2851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:34:52.778 [DEBUG] [Thread-2852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:34:59.239 [DEBUG] [Thread-2853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:35:08.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:35:08.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:35:08.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:35:09.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 35, 6), 39.73, 6.64, 0.0, 13.39, 26.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:35:09.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:35:06
2025-11-25T17:35:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:35:09.950 [DEBUG] [Thread-2854] [transport.py] [_log()] starting thread (client mode): 0x70d1fe50
2025-11-25T17:35:09.950 [DEBUG] [Thread-2854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:35:09.965 [DEBUG] [Thread-2854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:35:09.965 [INFO] [Thread-2854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] client lang: <none>
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] server lang: <none>
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] kex follows: False
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:35:09.969 [DEBUG] [Thread-2854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:35:09.970 [DEBUG] [Thread-2854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:35:09.970 [DEBUG] [Thread-2854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:35:09.970 [DEBUG] [Thread-2854] [transport.py] [_log()] Compression: none
2025-11-25T17:35:09.970 [DEBUG] [Thread-2854] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:35:09.984 [DEBUG] [Thread-2854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:35:09.985 [DEBUG] [Thread-2854] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:35:09.985 [DEBUG] [Thread-2854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:35:09.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:35:09.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:35:09.987 [DEBUG] [Thread-2854] [transport.py] [_log()] userauth is OK
2025-11-25T17:35:09.988 [DEBUG] [Thread-2854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:35:09.988 [DEBUG] [Thread-2854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:35:09.988 [DEBUG] [Thread-2854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:35:09.988 [DEBUG] [Thread-2854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:35:10.013 [INFO] [Thread-2854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:35:10.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:35:11.178 [DEBUG] [Thread-2854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:35:11.179 [DEBUG] [Thread-2854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:35:11.179 [DEBUG] [Thread-2854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:35:11.219 [DEBUG] [Thread-2854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:35:11.220 [DEBUG] [Thread-2854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:35:11.222 [DEBUG] [Thread-2854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:35:11.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:35:11.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:35:11.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:35:11.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:35:11.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:35:11.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:35:11.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:35:11.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:35:11.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:35:11.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.649059 -999.00  +26.80  14.59     11   -5.30 1 1 1 1 1   887    0 32.10 1.78 ----- 11.6 14.6 275.8 17.6 30.8 -33.1 31.2 -31.8 31.8 -31.9 32.1 -31.3
2025-11-25T17:35:11.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:35:11.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:35:11.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.649059
2025-11-25T17:35:11.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:35:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:35:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:35:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:35:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:35:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:35:06', tmtdew=39.73, humidity=6.64, cloud=0.0, wind=13.39, temperature=26.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:34:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:35:11.246 [DEBUG] [Thread-2854] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:35:11.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:35:11.345 [DEBUG] [Thread-2857] [transport.py] [_log()] starting thread (client mode): 0x70d1f910
2025-11-25T17:35:11.345 [DEBUG] [Thread-2857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:35:11.364 [DEBUG] [Thread-2857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:35:11.364 [INFO] [Thread-2857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:35:11.372 [DEBUG] [Thread-2857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:35:11.372 [DEBUG] [Thread-2857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:35:11.372 [DEBUG] [Thread-2857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:35:11.373 [DEBUG] [Thread-2857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:35:11.373 [DEBUG] [Thread-2857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:35:11.373 [DEBUG] [Thread-2857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:35:11.373 [DEBUG] [Thread-2857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:35:11.373 [DEBUG] [Thread-2857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:35:11.373 [DEBUG] [Thread-2857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:35:11.373 [DEBUG] [Thread-2857] [transport.py] [_log()] client lang: <none>
2025-11-25T17:35:11.373 [DEBUG] [Thread-2857] [transport.py] [_log()] server lang: <none>
2025-11-25T17:35:11.374 [DEBUG] [Thread-2857] [transport.py] [_log()] kex follows: False
2025-11-25T17:35:11.374 [DEBUG] [Thread-2857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:35:11.374 [DEBUG] [Thread-2857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:35:11.374 [DEBUG] [Thread-2857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:35:11.374 [DEBUG] [Thread-2857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:35:11.374 [DEBUG] [Thread-2857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:35:11.374 [DEBUG] [Thread-2857] [transport.py] [_log()] Compression: none
2025-11-25T17:35:11.374 [DEBUG] [Thread-2857] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:35:11.430 [DEBUG] [Thread-2857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:35:11.430 [DEBUG] [Thread-2857] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:35:11.431 [DEBUG] [Thread-2857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:35:11.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:35:11.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:35:11.488 [DEBUG] [Thread-2857] [transport.py] [_log()] userauth is OK
2025-11-25T17:35:11.488 [DEBUG] [Thread-2857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:35:11.488 [DEBUG] [Thread-2857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:35:11.488 [DEBUG] [Thread-2857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:35:11.488 [DEBUG] [Thread-2857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:35:11.502 [INFO] [Thread-2857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:35:11.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:35:11.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:35:12.327 [DEBUG] [Thread-2857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:35:12.328 [DEBUG] [Thread-2857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:35:12.380 [DEBUG] [Thread-2857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:35:12.380 [DEBUG] [Thread-2857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:35:12.389 [DEBUG] [Thread-2857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:35:12.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:35:12.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:35:12.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:35:12.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:35:12.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:35:12.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:35:12.421 [DEBUG] [Thread-2857] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:35:14.284 [DEBUG] [Thread-2859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:35:29.345 [DEBUG] [Thread-2860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:35:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:35:42.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:35:42.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:35:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 35, 38), 39.51, 6.66, 0.0, 10.82, 26.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:35:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:35:38
2025-11-25T17:35:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:35:43.402 [DEBUG] [Thread-2861] [transport.py] [_log()] starting thread (client mode): 0x737c7850
2025-11-25T17:35:43.402 [DEBUG] [Thread-2861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:35:43.422 [DEBUG] [Thread-2861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:35:43.422 [INFO] [Thread-2861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:35:43.425 [DEBUG] [Thread-2861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:35:43.425 [DEBUG] [Thread-2861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:35:43.425 [DEBUG] [Thread-2861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:35:43.425 [DEBUG] [Thread-2861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:35:43.425 [DEBUG] [Thread-2861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:35:43.426 [DEBUG] [Thread-2861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:35:43.426 [DEBUG] [Thread-2861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:35:43.426 [DEBUG] [Thread-2861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:35:43.426 [DEBUG] [Thread-2861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:35:43.426 [DEBUG] [Thread-2861] [transport.py] [_log()] client lang: <none>
2025-11-25T17:35:43.426 [DEBUG] [Thread-2861] [transport.py] [_log()] server lang: <none>
2025-11-25T17:35:43.426 [DEBUG] [Thread-2861] [transport.py] [_log()] kex follows: False
2025-11-25T17:35:43.426 [DEBUG] [Thread-2861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:35:43.426 [DEBUG] [Thread-2861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:35:43.427 [DEBUG] [Thread-2861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:35:43.427 [DEBUG] [Thread-2861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:35:43.427 [DEBUG] [Thread-2861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:35:43.427 [DEBUG] [Thread-2861] [transport.py] [_log()] Compression: none
2025-11-25T17:35:43.427 [DEBUG] [Thread-2861] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:35:43.440 [DEBUG] [Thread-2861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:35:43.441 [DEBUG] [Thread-2861] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:35:43.442 [DEBUG] [Thread-2861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:35:43.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:35:43.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:35:43.444 [DEBUG] [Thread-2861] [transport.py] [_log()] userauth is OK
2025-11-25T17:35:43.444 [DEBUG] [Thread-2861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:35:43.444 [DEBUG] [Thread-2861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:35:43.444 [DEBUG] [Thread-2861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:35:43.444 [DEBUG] [Thread-2861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:35:43.468 [INFO] [Thread-2861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:35:43.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:35:44.088 [DEBUG] [Thread-2861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:35:44.089 [DEBUG] [Thread-2861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:35:44.089 [DEBUG] [Thread-2861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:35:44.129 [DEBUG] [Thread-2861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:35:44.129 [DEBUG] [Thread-2861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:35:44.133 [DEBUG] [Thread-2861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:35:44.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:35:44.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:35:44.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:35:44.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:35:44.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:35:44.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:35:44.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:35:44.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:35:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:35:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.649405 -999.00  +26.90  13.88     11   -5.10 1 1 1 1 1   887    0 32.23 2.42 ----- 14.2 13.9 287.0 16.2 30.8 -32.1 31.3 -31.4 32.0 -31.2 32.1 -31.0
2025-11-25T17:35:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:35:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:35:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.649405
2025-11-25T17:35:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:35:44.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:35:44.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:35:44.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:35:44.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:35:44.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:35:38', tmtdew=39.51, humidity=6.66, cloud=0.0, wind=10.82, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:35:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:35:44.158 [DEBUG] [Thread-2861] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:35:44.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:35:44.262 [DEBUG] [Thread-2864] [transport.py] [_log()] starting thread (client mode): 0x70d0f250
2025-11-25T17:35:44.262 [DEBUG] [Thread-2864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:35:44.277 [DEBUG] [Thread-2864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:35:44.277 [INFO] [Thread-2864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:35:44.284 [DEBUG] [Thread-2864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] client lang: <none>
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] server lang: <none>
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] kex follows: False
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:35:44.285 [DEBUG] [Thread-2864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:35:44.286 [DEBUG] [Thread-2864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:35:44.286 [DEBUG] [Thread-2864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:35:44.286 [DEBUG] [Thread-2864] [transport.py] [_log()] Compression: none
2025-11-25T17:35:44.286 [DEBUG] [Thread-2864] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:35:44.347 [DEBUG] [Thread-2864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:35:44.348 [DEBUG] [Thread-2864] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:35:44.348 [DEBUG] [Thread-2864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:35:44.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:35:44.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:35:44.383 [DEBUG] [Thread-2866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:35:44.405 [DEBUG] [Thread-2864] [transport.py] [_log()] userauth is OK
2025-11-25T17:35:44.405 [DEBUG] [Thread-2864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:35:44.405 [DEBUG] [Thread-2864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:35:44.405 [DEBUG] [Thread-2864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:35:44.405 [DEBUG] [Thread-2864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:35:44.427 [INFO] [Thread-2864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:35:44.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:35:44.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:35:45.267 [DEBUG] [Thread-2864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:35:45.267 [DEBUG] [Thread-2864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:35:45.315 [DEBUG] [Thread-2864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:35:45.315 [DEBUG] [Thread-2864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:35:45.324 [DEBUG] [Thread-2864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:35:45.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:35:45.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:35:45.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:35:45.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:35:45.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:35:45.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:35:45.360 [DEBUG] [Thread-2864] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:35:53.560 [DEBUG] [Thread-2867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:35:59.444 [DEBUG] [Thread-2868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:36:14.490 [DEBUG] [Thread-2869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:36:15.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:36:15.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:36:15.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:36:16.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 36, 10), 39.31, 6.76, 0.0, 10.66, 26.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:36:16.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:36:10
2025-11-25T17:36:16.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:36:16.336 [DEBUG] [Thread-2870] [transport.py] [_log()] starting thread (client mode): 0x70d1e230
2025-11-25T17:36:16.336 [DEBUG] [Thread-2870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:36:16.357 [DEBUG] [Thread-2870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:36:16.358 [INFO] [Thread-2870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:36:16.360 [DEBUG] [Thread-2870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:36:16.360 [DEBUG] [Thread-2870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:36:16.360 [DEBUG] [Thread-2870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] client lang: <none>
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] server lang: <none>
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] kex follows: False
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] Compression: none
2025-11-25T17:36:16.361 [DEBUG] [Thread-2870] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:36:16.381 [DEBUG] [Thread-2870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:36:16.381 [DEBUG] [Thread-2870] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:36:16.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:36:16.382 [DEBUG] [Thread-2870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:36:16.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:36:16.384 [DEBUG] [Thread-2870] [transport.py] [_log()] userauth is OK
2025-11-25T17:36:16.385 [DEBUG] [Thread-2870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:36:16.385 [DEBUG] [Thread-2870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:36:16.385 [DEBUG] [Thread-2870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:36:16.385 [DEBUG] [Thread-2870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:36:16.409 [INFO] [Thread-2870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:36:16.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:36:17.162 [DEBUG] [Thread-2870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:36:17.163 [DEBUG] [Thread-2870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:36:17.163 [DEBUG] [Thread-2870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:36:17.204 [DEBUG] [Thread-2870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:36:17.204 [DEBUG] [Thread-2870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:36:17.207 [DEBUG] [Thread-2870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:36:17.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:36:17.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:36:17.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:36:17.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:36:17.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:36:17.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:36:17.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:36:17.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:36:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:36:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.649753 -999.00  +26.80  10.66     11   -5.20 1 1 1 1 1   887    0 32.20 3.12 ----- 4.1 10.7 275.0 16.7 30.8 -33.2 31.2 -31.5 31.8 -28.8 32.1 -30.8
2025-11-25T17:36:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:36:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:36:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.649753
2025-11-25T17:36:17.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:36:17.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:36:17.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:36:17.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:36:17.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:36:17.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:36:10', tmtdew=39.31, humidity=6.76, cloud=0.0, wind=10.66, temperature=26.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:35:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:36:17.234 [DEBUG] [Thread-2870] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:36:17.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:36:17.340 [DEBUG] [Thread-2873] [transport.py] [_log()] starting thread (client mode): 0x70d1e9e0
2025-11-25T17:36:17.340 [DEBUG] [Thread-2873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:36:17.357 [DEBUG] [Thread-2873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:36:17.357 [INFO] [Thread-2873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] client lang: <none>
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] server lang: <none>
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] kex follows: False
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:36:17.368 [DEBUG] [Thread-2873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:36:17.369 [DEBUG] [Thread-2873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:36:17.369 [DEBUG] [Thread-2873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:36:17.369 [DEBUG] [Thread-2873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:36:17.369 [DEBUG] [Thread-2873] [transport.py] [_log()] Compression: none
2025-11-25T17:36:17.369 [DEBUG] [Thread-2873] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:36:17.429 [DEBUG] [Thread-2873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:36:17.429 [DEBUG] [Thread-2873] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:36:17.430 [DEBUG] [Thread-2873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:36:17.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:36:17.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:36:17.488 [DEBUG] [Thread-2873] [transport.py] [_log()] userauth is OK
2025-11-25T17:36:17.488 [DEBUG] [Thread-2873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:36:17.488 [DEBUG] [Thread-2873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:36:17.488 [DEBUG] [Thread-2873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:36:17.488 [DEBUG] [Thread-2873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:36:17.507 [INFO] [Thread-2873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:36:17.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:36:17.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:36:18.318 [DEBUG] [Thread-2873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:36:18.318 [DEBUG] [Thread-2873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:36:18.366 [DEBUG] [Thread-2873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:36:18.366 [DEBUG] [Thread-2873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:36:18.375 [DEBUG] [Thread-2873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:36:18.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:36:18.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:36:18.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:36:18.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:36:18.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:36:18.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:36:18.412 [DEBUG] [Thread-2873] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:36:29.534 [DEBUG] [Thread-2875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:36:44.589 [DEBUG] [Thread-2876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:36:48.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:36:48.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:36:48.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:36:49.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 36, 42), 39.38, 6.76, 0.0, 12.12, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:36:49.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:36:42
2025-11-25T17:36:49.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:36:49.372 [DEBUG] [Thread-2877] [transport.py] [_log()] starting thread (client mode): 0x70d0cf10
2025-11-25T17:36:49.372 [DEBUG] [Thread-2877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:36:49.393 [DEBUG] [Thread-2877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:36:49.393 [INFO] [Thread-2877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:36:49.396 [DEBUG] [Thread-2877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:36:49.396 [DEBUG] [Thread-2877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] client lang: <none>
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] server lang: <none>
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] kex follows: False
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] Compression: none
2025-11-25T17:36:49.397 [DEBUG] [Thread-2877] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:36:49.415 [DEBUG] [Thread-2877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:36:49.416 [DEBUG] [Thread-2877] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:36:49.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:36:49.417 [DEBUG] [Thread-2877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:36:49.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:36:49.419 [DEBUG] [Thread-2877] [transport.py] [_log()] userauth is OK
2025-11-25T17:36:49.419 [DEBUG] [Thread-2877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:36:49.420 [DEBUG] [Thread-2877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:36:49.420 [DEBUG] [Thread-2877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:36:49.420 [DEBUG] [Thread-2877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:36:49.455 [INFO] [Thread-2877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:36:49.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:36:50.096 [DEBUG] [Thread-2877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:36:50.097 [DEBUG] [Thread-2877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:36:50.097 [DEBUG] [Thread-2877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:36:50.138 [DEBUG] [Thread-2877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:36:50.138 [DEBUG] [Thread-2877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:36:50.141 [DEBUG] [Thread-2877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:36:50.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:36:50.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:36:50.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:36:50.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:36:50.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:36:50.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:36:50.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:36:50.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:36:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:36:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.650100 -999.00  +26.70  16.78     11   -5.30 1 1 1 1 1   887    0 32.29 4.00 ----- 13.7 16.8 263.6 21.2 30.8 -32.4 31.2 -31.7 31.8 -31.7 32.0 -30.8
2025-11-25T17:36:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:36:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:36:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.650100
2025-11-25T17:36:50.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:36:50.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:36:50.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:36:50.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:36:50.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:36:50.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:36:42', tmtdew=39.38, humidity=6.76, cloud=0.0, wind=12.12, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:36:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:36:50.169 [DEBUG] [Thread-2877] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:36:50.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:36:50.274 [DEBUG] [Thread-2880] [transport.py] [_log()] starting thread (client mode): 0x737c74f0
2025-11-25T17:36:50.274 [DEBUG] [Thread-2880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:36:50.288 [DEBUG] [Thread-2880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:36:50.289 [INFO] [Thread-2880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:36:50.296 [DEBUG] [Thread-2880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:36:50.296 [DEBUG] [Thread-2880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:36:50.296 [DEBUG] [Thread-2880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] client lang: <none>
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] server lang: <none>
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] kex follows: False
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:36:50.297 [DEBUG] [Thread-2880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:36:50.298 [DEBUG] [Thread-2880] [transport.py] [_log()] Compression: none
2025-11-25T17:36:50.298 [DEBUG] [Thread-2880] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:36:50.361 [DEBUG] [Thread-2880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:36:50.361 [DEBUG] [Thread-2880] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:36:50.362 [DEBUG] [Thread-2880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:36:50.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:36:50.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:36:50.420 [DEBUG] [Thread-2880] [transport.py] [_log()] userauth is OK
2025-11-25T17:36:50.420 [DEBUG] [Thread-2880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:36:50.421 [DEBUG] [Thread-2880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:36:50.421 [DEBUG] [Thread-2880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:36:50.421 [DEBUG] [Thread-2880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:36:50.439 [INFO] [Thread-2880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:36:50.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:36:50.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:36:51.266 [DEBUG] [Thread-2880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:36:51.266 [DEBUG] [Thread-2880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:36:51.318 [DEBUG] [Thread-2880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:36:51.318 [DEBUG] [Thread-2880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:36:51.330 [DEBUG] [Thread-2880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:36:51.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:36:51.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:36:51.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:36:51.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:36:51.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:36:51.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:36:51.372 [DEBUG] [Thread-2880] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:36:54.277 [DEBUG] [Thread-2882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:36:59.633 [DEBUG] [Thread-2883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:37:14.694 [DEBUG] [Thread-2884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:37:21.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:37:21.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:37:21.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:37:22.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 37, 14), 39.44, 6.73, 0.0, 11.96, 27.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:37:22.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:37:14
2025-11-25T17:37:22.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:37:22.347 [DEBUG] [Thread-2885] [transport.py] [_log()] starting thread (client mode): 0x7376f040
2025-11-25T17:37:22.347 [DEBUG] [Thread-2885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:37:22.367 [DEBUG] [Thread-2885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:37:22.368 [INFO] [Thread-2885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:37:22.371 [DEBUG] [Thread-2885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:37:22.371 [DEBUG] [Thread-2885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:37:22.371 [DEBUG] [Thread-2885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:37:22.371 [DEBUG] [Thread-2885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:37:22.371 [DEBUG] [Thread-2885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] client lang: <none>
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] server lang: <none>
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] kex follows: False
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] Compression: none
2025-11-25T17:37:22.372 [DEBUG] [Thread-2885] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:37:22.390 [DEBUG] [Thread-2885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:37:22.391 [DEBUG] [Thread-2885] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:37:22.391 [DEBUG] [Thread-2885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:37:22.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:37:22.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:37:22.393 [DEBUG] [Thread-2885] [transport.py] [_log()] userauth is OK
2025-11-25T17:37:22.394 [DEBUG] [Thread-2885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:37:22.394 [DEBUG] [Thread-2885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:37:22.394 [DEBUG] [Thread-2885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:37:22.394 [DEBUG] [Thread-2885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:37:22.412 [INFO] [Thread-2885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:37:22.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:37:23.249 [DEBUG] [Thread-2885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:37:23.249 [DEBUG] [Thread-2885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:37:23.250 [DEBUG] [Thread-2885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:37:23.291 [DEBUG] [Thread-2885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:37:23.291 [DEBUG] [Thread-2885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:37:23.294 [DEBUG] [Thread-2885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:37:23.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:37:23.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:37:23.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:37:23.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:37:23.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:37:23.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:37:23.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:37:23.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:37:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:37:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.650447 -999.00  +26.70  19.17     11   -5.30 1 1 1 1 1   887    0 32.27 4.75 ----- 14.8 19.2 275.6 19.9 30.7 -33.0 31.1 -31.9 31.7 -29.6 32.0 -31.3
2025-11-25T17:37:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:37:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:37:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.650447
2025-11-25T17:37:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:37:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:37:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:37:23.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:37:23.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:37:23.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:37:14', tmtdew=39.44, humidity=6.73, cloud=0.0, wind=11.96, temperature=27.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:36:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:37:23.319 [DEBUG] [Thread-2885] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:37:23.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:37:23.422 [DEBUG] [Thread-2888] [transport.py] [_log()] starting thread (client mode): 0x70d0c430
2025-11-25T17:37:23.423 [DEBUG] [Thread-2888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:37:23.437 [DEBUG] [Thread-2888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:37:23.437 [INFO] [Thread-2888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] client lang: <none>
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] server lang: <none>
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] kex follows: False
2025-11-25T17:37:23.445 [DEBUG] [Thread-2888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:37:23.446 [DEBUG] [Thread-2888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:37:23.446 [DEBUG] [Thread-2888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:37:23.446 [DEBUG] [Thread-2888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:37:23.446 [DEBUG] [Thread-2888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:37:23.446 [DEBUG] [Thread-2888] [transport.py] [_log()] Compression: none
2025-11-25T17:37:23.446 [DEBUG] [Thread-2888] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:37:23.504 [DEBUG] [Thread-2888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:37:23.505 [DEBUG] [Thread-2888] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:37:23.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:37:23.506 [DEBUG] [Thread-2888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:37:23.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:37:23.560 [DEBUG] [Thread-2888] [transport.py] [_log()] userauth is OK
2025-11-25T17:37:23.560 [DEBUG] [Thread-2888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:37:23.560 [DEBUG] [Thread-2888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:37:23.561 [DEBUG] [Thread-2888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:37:23.561 [DEBUG] [Thread-2888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:37:23.579 [INFO] [Thread-2888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:37:23.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:37:23.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:37:24.419 [DEBUG] [Thread-2888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:37:24.420 [DEBUG] [Thread-2888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:37:24.468 [DEBUG] [Thread-2888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:37:24.468 [DEBUG] [Thread-2888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:37:24.477 [DEBUG] [Thread-2888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:37:24.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:37:24.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:37:24.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:37:24.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:37:24.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:37:24.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:37:24.517 [DEBUG] [Thread-2888] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:37:29.737 [DEBUG] [Thread-2890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:37:44.802 [DEBUG] [Thread-2891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:37:54.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:37:54.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:37:54.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:37:55.058 [DEBUG] [Thread-2892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:37:55.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 37, 46), 39.36, 6.76, 0.0, 11.81, 26.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:37:55.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:37:46
2025-11-25T17:37:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:37:55.524 [DEBUG] [Thread-2893] [transport.py] [_log()] starting thread (client mode): 0x70d0d240
2025-11-25T17:37:55.524 [DEBUG] [Thread-2893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:37:55.544 [DEBUG] [Thread-2893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:37:55.544 [INFO] [Thread-2893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:37:55.547 [DEBUG] [Thread-2893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:37:55.547 [DEBUG] [Thread-2893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:37:55.547 [DEBUG] [Thread-2893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:37:55.547 [DEBUG] [Thread-2893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:37:55.547 [DEBUG] [Thread-2893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] client lang: <none>
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] server lang: <none>
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] kex follows: False
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] Compression: none
2025-11-25T17:37:55.548 [DEBUG] [Thread-2893] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:37:55.567 [DEBUG] [Thread-2893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:37:55.567 [DEBUG] [Thread-2893] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:37:55.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:37:55.569 [DEBUG] [Thread-2893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:37:55.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:37:55.571 [DEBUG] [Thread-2893] [transport.py] [_log()] userauth is OK
2025-11-25T17:37:55.571 [DEBUG] [Thread-2893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:37:55.571 [DEBUG] [Thread-2893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:37:55.571 [DEBUG] [Thread-2893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:37:55.572 [DEBUG] [Thread-2893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:37:55.596 [INFO] [Thread-2893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:37:55.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:37:56.264 [DEBUG] [Thread-2893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:37:56.264 [DEBUG] [Thread-2893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:37:56.265 [DEBUG] [Thread-2893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:37:56.305 [DEBUG] [Thread-2893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:37:56.305 [DEBUG] [Thread-2893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:37:56.309 [DEBUG] [Thread-2893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:37:56.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:37:56.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:37:56.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:37:56.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:37:56.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:37:56.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:37:56.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:37:56.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:37:56.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:37:56.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.650795 -999.00  +26.80   9.86     11   -5.20 1 1 1 1 1   887    0 31.92 4.94 ----- 11.6 9.9 281.4 16.9 30.7 -32.4 31.1 -31.6 31.8 -29.3 32.0 -30.8
2025-11-25T17:37:56.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:37:56.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:37:56.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.650795
2025-11-25T17:37:56.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:37:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:37:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:37:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:37:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:37:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:37:46', tmtdew=39.36, humidity=6.76, cloud=0.0, wind=11.81, temperature=26.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:37:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:37:56.335 [DEBUG] [Thread-2893] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:37:56.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:37:56.430 [DEBUG] [Thread-2896] [transport.py] [_log()] starting thread (client mode): 0x70d1ee30
2025-11-25T17:37:56.431 [DEBUG] [Thread-2896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:37:56.445 [DEBUG] [Thread-2896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:37:56.445 [INFO] [Thread-2896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:37:56.456 [DEBUG] [Thread-2896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:37:56.456 [DEBUG] [Thread-2896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:37:56.457 [DEBUG] [Thread-2896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:37:56.457 [DEBUG] [Thread-2896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:37:56.457 [DEBUG] [Thread-2896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:37:56.457 [DEBUG] [Thread-2896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:37:56.457 [DEBUG] [Thread-2896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:37:56.457 [DEBUG] [Thread-2896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] client lang: <none>
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] server lang: <none>
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] kex follows: False
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] Compression: none
2025-11-25T17:37:56.458 [DEBUG] [Thread-2896] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:37:56.511 [DEBUG] [Thread-2896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:37:56.512 [DEBUG] [Thread-2896] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:37:56.513 [DEBUG] [Thread-2896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:37:56.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:37:56.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:37:56.568 [DEBUG] [Thread-2896] [transport.py] [_log()] userauth is OK
2025-11-25T17:37:56.568 [DEBUG] [Thread-2896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:37:56.568 [DEBUG] [Thread-2896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:37:56.568 [DEBUG] [Thread-2896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:37:56.568 [DEBUG] [Thread-2896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:37:56.586 [INFO] [Thread-2896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:37:56.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:37:56.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:37:57.393 [DEBUG] [Thread-2896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:37:57.394 [DEBUG] [Thread-2896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:37:57.442 [DEBUG] [Thread-2896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:37:57.442 [DEBUG] [Thread-2896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:37:57.452 [DEBUG] [Thread-2896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:37:57.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:37:57.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:37:57.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:37:57.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:37:57.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:37:57.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:37:57.493 [DEBUG] [Thread-2896] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:37:59.844 [DEBUG] [Thread-2898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:38:14.918 [DEBUG] [Thread-2899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:38:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:38:27.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:38:27.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:38:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 38, 18), 39.37, 6.76, 0.0, 12.74, 27.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:38:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:38:18
2025-11-25T17:38:28.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:38:28.457 [DEBUG] [Thread-2900] [transport.py] [_log()] starting thread (client mode): 0x7376f070
2025-11-25T17:38:28.457 [DEBUG] [Thread-2900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:38:28.479 [DEBUG] [Thread-2900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:38:28.479 [INFO] [Thread-2900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:38:28.482 [DEBUG] [Thread-2900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] client lang: <none>
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] server lang: <none>
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] kex follows: False
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:38:28.483 [DEBUG] [Thread-2900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:38:28.484 [DEBUG] [Thread-2900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:38:28.484 [DEBUG] [Thread-2900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:38:28.484 [DEBUG] [Thread-2900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:38:28.484 [DEBUG] [Thread-2900] [transport.py] [_log()] Compression: none
2025-11-25T17:38:28.484 [DEBUG] [Thread-2900] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:38:28.497 [DEBUG] [Thread-2900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:38:28.497 [DEBUG] [Thread-2900] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:38:28.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:38:28.498 [DEBUG] [Thread-2900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:38:28.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:38:28.500 [DEBUG] [Thread-2900] [transport.py] [_log()] userauth is OK
2025-11-25T17:38:28.500 [DEBUG] [Thread-2900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:38:28.500 [DEBUG] [Thread-2900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:38:28.500 [DEBUG] [Thread-2900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:38:28.500 [DEBUG] [Thread-2900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:38:28.518 [INFO] [Thread-2900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:38:28.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:38:29.324 [DEBUG] [Thread-2900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:38:29.325 [DEBUG] [Thread-2900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:38:29.325 [DEBUG] [Thread-2900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:38:29.366 [DEBUG] [Thread-2900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:38:29.366 [DEBUG] [Thread-2900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:38:29.370 [DEBUG] [Thread-2900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:38:29.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:38:29.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:38:29.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:38:29.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:38:29.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:38:29.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:38:29.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:38:29.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:38:29.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:38:29.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.651142 -999.00  +26.90  10.82     11   -5.20 1 1 1 1 1   887    0 32.59 4.70 ----- 10.9 10.8 279.8 14.1 30.7 -32.3 31.1 -31.5 31.6 -33.1 32.0 -30.7
2025-11-25T17:38:29.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:38:29.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:38:29.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.651142
2025-11-25T17:38:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:38:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:38:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:38:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:38:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:38:29.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:38:18', tmtdew=39.37, humidity=6.76, cloud=0.0, wind=12.74, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:37:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:38:29.396 [DEBUG] [Thread-2900] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:38:29.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:38:29.499 [DEBUG] [Thread-2903] [transport.py] [_log()] starting thread (client mode): 0x761da6b0
2025-11-25T17:38:29.499 [DEBUG] [Thread-2903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:38:29.513 [DEBUG] [Thread-2903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:38:29.513 [INFO] [Thread-2903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:38:29.521 [DEBUG] [Thread-2903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:38:29.521 [DEBUG] [Thread-2903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:38:29.521 [DEBUG] [Thread-2903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:38:29.521 [DEBUG] [Thread-2903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:38:29.521 [DEBUG] [Thread-2903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] client lang: <none>
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] server lang: <none>
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] kex follows: False
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] Compression: none
2025-11-25T17:38:29.522 [DEBUG] [Thread-2903] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:38:29.585 [DEBUG] [Thread-2903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:38:29.585 [DEBUG] [Thread-2903] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:38:29.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:38:29.587 [DEBUG] [Thread-2903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:38:29.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:38:29.643 [DEBUG] [Thread-2903] [transport.py] [_log()] userauth is OK
2025-11-25T17:38:29.644 [DEBUG] [Thread-2903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:38:29.644 [DEBUG] [Thread-2903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:38:29.644 [DEBUG] [Thread-2903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:38:29.644 [DEBUG] [Thread-2903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:38:29.663 [INFO] [Thread-2903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:38:29.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:38:29.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:38:29.963 [DEBUG] [Thread-2905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:38:30.520 [DEBUG] [Thread-2903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:38:30.520 [DEBUG] [Thread-2903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:38:30.568 [DEBUG] [Thread-2903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:38:30.568 [DEBUG] [Thread-2903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:38:30.577 [DEBUG] [Thread-2903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:38:30.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:38:30.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:38: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') -> 00000000
2025-11-25T17:38:30.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:38:30.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:38:30.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:38:30.611 [DEBUG] [Thread-2903] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:38:45.031 [DEBUG] [Thread-2906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:38:55.770 [DEBUG] [Thread-2907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:39:00.070 [DEBUG] [Thread-2908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:39:00.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:39:00.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:39:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:39:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 38, 50), 39.53, 6.74, 0.0, 10.46, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:39:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:38:50
2025-11-25T17:39:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:39:01.604 [DEBUG] [Thread-2909] [transport.py] [_log()] starting thread (client mode): 0x7374e290
2025-11-25T17:39:01.604 [DEBUG] [Thread-2909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:39:01.624 [DEBUG] [Thread-2909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:39:01.624 [INFO] [Thread-2909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:39:01.627 [DEBUG] [Thread-2909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:39:01.627 [DEBUG] [Thread-2909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:39:01.628 [DEBUG] [Thread-2909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:39:01.628 [DEBUG] [Thread-2909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:39:01.628 [DEBUG] [Thread-2909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:39:01.628 [DEBUG] [Thread-2909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:39:01.628 [DEBUG] [Thread-2909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:39:01.628 [DEBUG] [Thread-2909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:39:01.628 [DEBUG] [Thread-2909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:39:01.628 [DEBUG] [Thread-2909] [transport.py] [_log()] client lang: <none>
2025-11-25T17:39:01.628 [DEBUG] [Thread-2909] [transport.py] [_log()] server lang: <none>
2025-11-25T17:39:01.629 [DEBUG] [Thread-2909] [transport.py] [_log()] kex follows: False
2025-11-25T17:39:01.629 [DEBUG] [Thread-2909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:39:01.629 [DEBUG] [Thread-2909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:39:01.629 [DEBUG] [Thread-2909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:39:01.629 [DEBUG] [Thread-2909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:39:01.629 [DEBUG] [Thread-2909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:39:01.629 [DEBUG] [Thread-2909] [transport.py] [_log()] Compression: none
2025-11-25T17:39:01.629 [DEBUG] [Thread-2909] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:39:01.648 [DEBUG] [Thread-2909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:39:01.649 [DEBUG] [Thread-2909] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:39:01.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:39:01.650 [DEBUG] [Thread-2909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:39:01.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:39:01.652 [DEBUG] [Thread-2909] [transport.py] [_log()] userauth is OK
2025-11-25T17:39:01.652 [DEBUG] [Thread-2909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:39:01.653 [DEBUG] [Thread-2909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:39:01.653 [DEBUG] [Thread-2909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:39:01.653 [DEBUG] [Thread-2909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:39:01.688 [INFO] [Thread-2909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:39:01.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:39:02.334 [DEBUG] [Thread-2909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:39:02.335 [DEBUG] [Thread-2909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:39:02.335 [DEBUG] [Thread-2909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:39:02.376 [DEBUG] [Thread-2909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:39:02.376 [DEBUG] [Thread-2909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:39:02.379 [DEBUG] [Thread-2909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:39:02.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:39:02.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:39:02.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:39:02.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:39:02.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:39:02.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:39:02.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:39:02.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:39:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:39:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.651489 -999.00  +26.80   9.93     11   -5.20 1 1 1 1 1   887    0 31.98 2.61 ----- 10.4 9.9 284.0 15.4 30.6 -32.2 31.1 -31.3 31.9 -29.4 32.0 -30.6
2025-11-25T17:39:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:39:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:39:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.651489
2025-11-25T17:39:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:39:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:39:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:39:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:39:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:39:02.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:38:50', tmtdew=39.53, humidity=6.74, cloud=0.0, wind=10.46, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:38:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:39:02.409 [DEBUG] [Thread-2909] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:39:02.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:39:02.526 [DEBUG] [Thread-2912] [transport.py] [_log()] starting thread (client mode): 0x7374f1c0
2025-11-25T17:39:02.527 [DEBUG] [Thread-2912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:39:02.543 [DEBUG] [Thread-2912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:39:02.544 [INFO] [Thread-2912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:39:02.551 [DEBUG] [Thread-2912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:39:02.551 [DEBUG] [Thread-2912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:39:02.551 [DEBUG] [Thread-2912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:39:02.551 [DEBUG] [Thread-2912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] client lang: <none>
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] server lang: <none>
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] kex follows: False
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:39:02.552 [DEBUG] [Thread-2912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:39:02.553 [DEBUG] [Thread-2912] [transport.py] [_log()] Compression: none
2025-11-25T17:39:02.553 [DEBUG] [Thread-2912] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:39:02.612 [DEBUG] [Thread-2912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:39:02.613 [DEBUG] [Thread-2912] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:39:02.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:39:02.614 [DEBUG] [Thread-2912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:39:02.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:39:02.672 [DEBUG] [Thread-2912] [transport.py] [_log()] userauth is OK
2025-11-25T17:39:02.672 [DEBUG] [Thread-2912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:39:02.672 [DEBUG] [Thread-2912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:39:02.673 [DEBUG] [Thread-2912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:39:02.673 [DEBUG] [Thread-2912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:39:02.692 [INFO] [Thread-2912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:39:02.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:39:02.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:39:03.578 [DEBUG] [Thread-2912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:39:03.578 [DEBUG] [Thread-2912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:39:03.626 [DEBUG] [Thread-2912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:39:03.626 [DEBUG] [Thread-2912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:39:03.635 [DEBUG] [Thread-2912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:39:03.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:39:03.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:39:03.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:39:03.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:39:03.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:39:03.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:39:03.673 [DEBUG] [Thread-2912] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:39:15.111 [DEBUG] [Thread-2914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:39:30.183 [DEBUG] [Thread-2915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:39:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:39:33.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:39:33.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:39:34.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 39, 22), 39.57, 6.71, 0.0, 8.26, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:39:34.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:39:22
2025-11-25T17:39:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:39:34.703 [DEBUG] [Thread-2916] [transport.py] [_log()] starting thread (client mode): 0x70d0d570
2025-11-25T17:39:34.703 [DEBUG] [Thread-2916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:39:34.724 [DEBUG] [Thread-2916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:39:34.724 [INFO] [Thread-2916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] client lang: <none>
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] server lang: <none>
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] kex follows: False
2025-11-25T17:39:34.725 [DEBUG] [Thread-2916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:39:34.726 [DEBUG] [Thread-2916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:39:34.726 [DEBUG] [Thread-2916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:39:34.726 [DEBUG] [Thread-2916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:39:34.726 [DEBUG] [Thread-2916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:39:34.726 [DEBUG] [Thread-2916] [transport.py] [_log()] Compression: none
2025-11-25T17:39:34.726 [DEBUG] [Thread-2916] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:39:34.733 [DEBUG] [Thread-2916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:39:34.734 [DEBUG] [Thread-2916] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:39:34.734 [DEBUG] [Thread-2916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:39:34.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:39:34.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:39:34.735 [DEBUG] [Thread-2916] [transport.py] [_log()] userauth is OK
2025-11-25T17:39:34.735 [DEBUG] [Thread-2916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:39:34.735 [DEBUG] [Thread-2916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:39:34.735 [DEBUG] [Thread-2916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:39:34.735 [DEBUG] [Thread-2916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:39:34.744 [INFO] [Thread-2916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:39:34.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:39:35.538 [DEBUG] [Thread-2916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:39:35.538 [DEBUG] [Thread-2916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:39:35.538 [DEBUG] [Thread-2916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:39:35.578 [DEBUG] [Thread-2916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:39:35.578 [DEBUG] [Thread-2916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:39:35.580 [DEBUG] [Thread-2916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:39:35.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:39:35.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:39:35.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:39:35.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:39:35.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:39:35.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:39:35.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:39:35.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:39:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:39:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.651836 -999.00  +26.90  10.56     11   -5.40 1 1 1 1 1   887    0 32.65 1.64 ----- 10.3 10.6 281.6 16.4 30.7 -31.7 31.1 -31.3 31.9 -29.5 32.0 -30.7
2025-11-25T17:39:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:39:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:39:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.651836
2025-11-25T17:39:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:39:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:39:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:39:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:39:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:39:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:39:22', tmtdew=39.57, humidity=6.71, cloud=0.0, wind=8.26, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:38:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:39:35.600 [DEBUG] [Thread-2916] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:39:35.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:39:35.691 [DEBUG] [Thread-2919] [transport.py] [_log()] starting thread (client mode): 0x761db610
2025-11-25T17:39:35.691 [DEBUG] [Thread-2919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:39:35.706 [DEBUG] [Thread-2919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:39:35.706 [INFO] [Thread-2919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] client lang: <none>
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] server lang: <none>
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] kex follows: False
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:39:35.713 [DEBUG] [Thread-2919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:39:35.714 [DEBUG] [Thread-2919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:39:35.714 [DEBUG] [Thread-2919] [transport.py] [_log()] Compression: none
2025-11-25T17:39:35.714 [DEBUG] [Thread-2919] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:39:35.770 [DEBUG] [Thread-2919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:39:35.770 [DEBUG] [Thread-2919] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:39:35.771 [DEBUG] [Thread-2919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:39:35.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:39:35.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:39:35.827 [DEBUG] [Thread-2919] [transport.py] [_log()] userauth is OK
2025-11-25T17:39:35.827 [DEBUG] [Thread-2919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:39:35.827 [DEBUG] [Thread-2919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:39:35.827 [DEBUG] [Thread-2919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:39:35.827 [DEBUG] [Thread-2919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:39:35.845 [INFO] [Thread-2919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:39:35.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:39:35.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:39:36.690 [DEBUG] [Thread-2919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:39:36.690 [DEBUG] [Thread-2919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:39:36.737 [DEBUG] [Thread-2919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:39:36.737 [DEBUG] [Thread-2919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:39:36.746 [DEBUG] [Thread-2919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:39:36.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:39:36.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:39:36.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:39:36.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:39:36.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:39:36.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:39:36.779 [DEBUG] [Thread-2919] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:39:45.235 [DEBUG] [Thread-2921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:39:56.298 [DEBUG] [Thread-2922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:40:00.297 [DEBUG] [Thread-2923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:40:06.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:40:06.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:40:06.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:40:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 39, 54), 39.44, 6.77, 0.0, 7.92, 27.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:40:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:39:54
2025-11-25T17:40:07.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:40:07.753 [DEBUG] [Thread-2924] [transport.py] [_log()] starting thread (client mode): 0x70d1ffd0
2025-11-25T17:40:07.754 [DEBUG] [Thread-2924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:40:07.775 [DEBUG] [Thread-2924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:40:07.775 [INFO] [Thread-2924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:40:07.778 [DEBUG] [Thread-2924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:40:07.778 [DEBUG] [Thread-2924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:40:07.778 [DEBUG] [Thread-2924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] client lang: <none>
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] server lang: <none>
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] kex follows: False
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] Compression: none
2025-11-25T17:40:07.779 [DEBUG] [Thread-2924] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:40:07.798 [DEBUG] [Thread-2924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:40:07.798 [DEBUG] [Thread-2924] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:40:07.799 [DEBUG] [Thread-2924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:40:07.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:40:07.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:40:07.801 [DEBUG] [Thread-2924] [transport.py] [_log()] userauth is OK
2025-11-25T17:40:07.801 [DEBUG] [Thread-2924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:40:07.801 [DEBUG] [Thread-2924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:40:07.801 [DEBUG] [Thread-2924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:40:07.801 [DEBUG] [Thread-2924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:40:07.821 [INFO] [Thread-2924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:40:07.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:40:10.430 [DEBUG] [Thread-2924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:40:10.430 [DEBUG] [Thread-2924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:40:10.430 [DEBUG] [Thread-2924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:40:10.471 [DEBUG] [Thread-2924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:40:10.471 [DEBUG] [Thread-2924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:40:10.473 [DEBUG] [Thread-2924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:40:10.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:40:10.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:40:10.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:40:10.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:40:10.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:40:10.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:40:10.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:40:10.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:40:10.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:40:10.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.652184 -999.00  +26.70   6.85     11   -5.30 1 1 1 1 1   887    0 32.25 0.84 ----- 8.4 6.8 315.6 11.2 30.7 -32.0 31.1 -31.4 32.0 -30.1 32.1 -30.9
2025-11-25T17:40:10.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:40:10.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:40:10.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.652184
2025-11-25T17:40:10.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:40:10.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:40:10.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:40:10.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:40:10.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:40:10.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:39:54', tmtdew=39.44, humidity=6.77, cloud=0.0, wind=7.92, temperature=27.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:39:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:40:10.623 [DEBUG] [Thread-2924] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:40:10.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:40:10.715 [DEBUG] [Thread-2927] [transport.py] [_log()] starting thread (client mode): 0x7378e230
2025-11-25T17:40:10.715 [DEBUG] [Thread-2927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:40:10.730 [DEBUG] [Thread-2927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:40:10.730 [INFO] [Thread-2927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] client lang: <none>
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] server lang: <none>
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] kex follows: False
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] Compression: none
2025-11-25T17:40:10.738 [DEBUG] [Thread-2927] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:40:10.795 [DEBUG] [Thread-2927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:40:10.796 [DEBUG] [Thread-2927] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:40:10.796 [DEBUG] [Thread-2927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:40:10.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:40:10.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:40:10.852 [DEBUG] [Thread-2927] [transport.py] [_log()] userauth is OK
2025-11-25T17:40:10.852 [DEBUG] [Thread-2927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:40:10.852 [DEBUG] [Thread-2927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:40:10.852 [DEBUG] [Thread-2927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:40:10.852 [DEBUG] [Thread-2927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:40:10.866 [INFO] [Thread-2927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:40:10.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:40:10.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:40:11.716 [DEBUG] [Thread-2927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:40:11.716 [DEBUG] [Thread-2927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:40:11.764 [DEBUG] [Thread-2927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:40:11.764 [DEBUG] [Thread-2927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:40:11.776 [DEBUG] [Thread-2927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:40:11.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:40:11.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:40:11.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:40:11.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:40:11.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:40:11.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:40:11.811 [DEBUG] [Thread-2927] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:40:15.332 [DEBUG] [Thread-2929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:40:30.398 [DEBUG] [Thread-2930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:40:41.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:40:41.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:40:41.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:40:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 40, 26), 39.35, 6.81, 0.0, 7.1, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:40:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:40:26
2025-11-25T17:40:42.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:40:42.775 [DEBUG] [Thread-2931] [transport.py] [_log()] starting thread (client mode): 0x7378e7a0
2025-11-25T17:40:42.775 [DEBUG] [Thread-2931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:40:42.786 [DEBUG] [Thread-2931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:40:42.786 [INFO] [Thread-2931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] client lang: <none>
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] server lang: <none>
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] kex follows: False
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] Compression: none
2025-11-25T17:40:42.788 [DEBUG] [Thread-2931] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:40:42.798 [DEBUG] [Thread-2931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:40:42.799 [DEBUG] [Thread-2931] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:40:42.799 [DEBUG] [Thread-2931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:40:42.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:40:42.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:40:42.801 [DEBUG] [Thread-2931] [transport.py] [_log()] userauth is OK
2025-11-25T17:40:42.801 [DEBUG] [Thread-2931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:40:42.801 [DEBUG] [Thread-2931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:40:42.801 [DEBUG] [Thread-2931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:40:42.801 [DEBUG] [Thread-2931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:40:42.826 [INFO] [Thread-2931] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:40:42.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:40:43.486 [DEBUG] [Thread-2931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:40:43.486 [DEBUG] [Thread-2931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:40:43.487 [DEBUG] [Thread-2931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:40:43.527 [DEBUG] [Thread-2931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:40:43.528 [DEBUG] [Thread-2931] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:40:43.532 [DEBUG] [Thread-2931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:40:43.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:40:43.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:40:43.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:40:43.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:40:43.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:40:43.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:40:43.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:40:43.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:40:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:40:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.652878 -999.00  +26.90   5.85     11   -5.20 1 1 1 1 1   887    0 31.83 -0.71 ----- 4.7 5.8 299.4 8.5 30.8 -31.8 31.1 -31.0 32.1 -29.0 32.2 -30.6
2025-11-25T17:40:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:40:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:40:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.652878
2025-11-25T17:40:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:40:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:40:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:40:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:40:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:40:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:40:26', tmtdew=39.35, humidity=6.81, cloud=0.0, wind=7.1, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:40:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:40:43.558 [DEBUG] [Thread-2931] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:40:43.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:40:43.658 [DEBUG] [Thread-2934] [transport.py] [_log()] starting thread (client mode): 0x70d1feb0
2025-11-25T17:40:43.658 [DEBUG] [Thread-2934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:40:43.673 [DEBUG] [Thread-2934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:40:43.674 [INFO] [Thread-2934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:40:43.681 [DEBUG] [Thread-2934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] client lang: <none>
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] server lang: <none>
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] kex follows: False
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:40:43.682 [DEBUG] [Thread-2934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:40:43.683 [DEBUG] [Thread-2934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:40:43.683 [DEBUG] [Thread-2934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:40:43.683 [DEBUG] [Thread-2934] [transport.py] [_log()] Compression: none
2025-11-25T17:40:43.683 [DEBUG] [Thread-2934] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:40:43.739 [DEBUG] [Thread-2934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:40:43.740 [DEBUG] [Thread-2934] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:40:43.741 [DEBUG] [Thread-2934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:40:43.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:40:43.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:40:43.795 [DEBUG] [Thread-2934] [transport.py] [_log()] userauth is OK
2025-11-25T17:40:43.796 [DEBUG] [Thread-2934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:40:43.796 [DEBUG] [Thread-2934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:40:43.796 [DEBUG] [Thread-2934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:40:43.796 [DEBUG] [Thread-2934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:40:43.819 [INFO] [Thread-2934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:40:43.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:40:43.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:40:44.671 [DEBUG] [Thread-2934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:40:44.671 [DEBUG] [Thread-2934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:40:44.720 [DEBUG] [Thread-2934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:40:44.720 [DEBUG] [Thread-2934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:40:44.729 [DEBUG] [Thread-2934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:40:44.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:40:44.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:40:44.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:40:44.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:40:44.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:40:44.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:40:44.766 [DEBUG] [Thread-2934] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:40:45.447 [DEBUG] [Thread-2936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:40:56.825 [DEBUG] [Thread-2937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:41:00.507 [DEBUG] [Thread-2938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:41:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:41:14.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:41:14.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:41:15.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 40, 58), 39.59, 6.29, 0.0, 6.95, 27.09, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:41:15.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:40:58
2025-11-25T17:41:15.548 [DEBUG] [Thread-2939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:41:15.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:41:15.736 [DEBUG] [Thread-2940] [transport.py] [_log()] starting thread (client mode): 0x70d0d570
2025-11-25T17:41:15.736 [DEBUG] [Thread-2940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:41:15.756 [DEBUG] [Thread-2940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:41:15.756 [INFO] [Thread-2940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:41:15.759 [DEBUG] [Thread-2940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:41:15.759 [DEBUG] [Thread-2940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:41:15.759 [DEBUG] [Thread-2940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:41:15.759 [DEBUG] [Thread-2940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:41:15.759 [DEBUG] [Thread-2940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:41:15.759 [DEBUG] [Thread-2940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:41:15.759 [DEBUG] [Thread-2940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:41:15.759 [DEBUG] [Thread-2940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] client lang: <none>
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] server lang: <none>
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] kex follows: False
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] Compression: none
2025-11-25T17:41:15.760 [DEBUG] [Thread-2940] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:41:15.777 [DEBUG] [Thread-2940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:41:15.778 [DEBUG] [Thread-2940] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:41:15.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:41:15.779 [DEBUG] [Thread-2940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:41:15.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:41:15.782 [DEBUG] [Thread-2940] [transport.py] [_log()] userauth is OK
2025-11-25T17:41:15.782 [DEBUG] [Thread-2940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:41:15.782 [DEBUG] [Thread-2940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:41:15.782 [DEBUG] [Thread-2940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:41:15.782 [DEBUG] [Thread-2940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:41:15.806 [INFO] [Thread-2940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:41:15.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:41:16.441 [DEBUG] [Thread-2940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:41:16.441 [DEBUG] [Thread-2940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:41:16.441 [DEBUG] [Thread-2940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:41:16.482 [DEBUG] [Thread-2940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:41:16.482 [DEBUG] [Thread-2940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:41:16.485 [DEBUG] [Thread-2940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:41:16.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:41:16.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:41:16.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:41:16.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:41:16.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:41:16.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:41:16.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:41:16.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:41:16.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:41:16.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.653225 -999.00  +27.00   3.71     11   -5.30 1 1 1 1 1   887    0 32.86 0.34 ----- 5.3 3.7 298.0 5.5 30.8 -32.5 31.2 -31.2 32.2 -29.4 32.4 -30.7
2025-11-25T17:41:16.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:41:16.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:41:16.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.653225
2025-11-25T17:41:16.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:41:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:41:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:41:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:41:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:41:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:40:58', tmtdew=39.59, humidity=6.29, cloud=0.0, wind=6.95, temperature=27.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:40:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:41:16.512 [DEBUG] [Thread-2940] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:41:16.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:41:16.617 [DEBUG] [Thread-2943] [transport.py] [_log()] starting thread (client mode): 0x737c42e0
2025-11-25T17:41:16.617 [DEBUG] [Thread-2943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:41:16.632 [DEBUG] [Thread-2943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:41:16.632 [INFO] [Thread-2943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] client lang: <none>
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] server lang: <none>
2025-11-25T17:41:16.640 [DEBUG] [Thread-2943] [transport.py] [_log()] kex follows: False
2025-11-25T17:41:16.641 [DEBUG] [Thread-2943] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:41:16.641 [DEBUG] [Thread-2943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:41:16.641 [DEBUG] [Thread-2943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:41:16.641 [DEBUG] [Thread-2943] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:41:16.641 [DEBUG] [Thread-2943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:41:16.641 [DEBUG] [Thread-2943] [transport.py] [_log()] Compression: none
2025-11-25T17:41:16.641 [DEBUG] [Thread-2943] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:41:16.696 [DEBUG] [Thread-2943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:41:16.696 [DEBUG] [Thread-2943] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:41:16.697 [DEBUG] [Thread-2943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:41:16.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:41:16.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:41:16.753 [DEBUG] [Thread-2943] [transport.py] [_log()] userauth is OK
2025-11-25T17:41:16.754 [DEBUG] [Thread-2943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:41:16.754 [DEBUG] [Thread-2943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:41:16.754 [DEBUG] [Thread-2943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:41:16.754 [DEBUG] [Thread-2943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:41:16.773 [INFO] [Thread-2943] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:41:16.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:41:16.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:41:17.605 [DEBUG] [Thread-2943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:41:17.605 [DEBUG] [Thread-2943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:41:17.653 [DEBUG] [Thread-2943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:41:17.653 [DEBUG] [Thread-2943] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:41:17.662 [DEBUG] [Thread-2943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:41:17.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:41:17.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:41:17.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:41:17.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:41:17.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:41:17.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:41:17.698 [DEBUG] [Thread-2943] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:41:30.587 [DEBUG] [Thread-2945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:41:45.650 [DEBUG] [Thread-2946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:41:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:41:47.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:41:47.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:41:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 41, 30), 39.58, 6.31, 0.0, 7.5, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:41:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:41:30
2025-11-25T17:41:48.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:41:48.681 [DEBUG] [Thread-2947] [transport.py] [_log()] starting thread (client mode): 0x7378e230
2025-11-25T17:41:48.681 [DEBUG] [Thread-2947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:41:48.701 [DEBUG] [Thread-2947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:41:48.701 [INFO] [Thread-2947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:41:48.704 [DEBUG] [Thread-2947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:41:48.704 [DEBUG] [Thread-2947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:41:48.705 [DEBUG] [Thread-2947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:41:48.705 [DEBUG] [Thread-2947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:41:48.705 [DEBUG] [Thread-2947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:41:48.705 [DEBUG] [Thread-2947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:41:48.705 [DEBUG] [Thread-2947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:41:48.705 [DEBUG] [Thread-2947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:41:48.705 [DEBUG] [Thread-2947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:41:48.705 [DEBUG] [Thread-2947] [transport.py] [_log()] client lang: <none>
2025-11-25T17:41:48.705 [DEBUG] [Thread-2947] [transport.py] [_log()] server lang: <none>
2025-11-25T17:41:48.706 [DEBUG] [Thread-2947] [transport.py] [_log()] kex follows: False
2025-11-25T17:41:48.706 [DEBUG] [Thread-2947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:41:48.706 [DEBUG] [Thread-2947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:41:48.706 [DEBUG] [Thread-2947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:41:48.706 [DEBUG] [Thread-2947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:41:48.706 [DEBUG] [Thread-2947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:41:48.706 [DEBUG] [Thread-2947] [transport.py] [_log()] Compression: none
2025-11-25T17:41:48.706 [DEBUG] [Thread-2947] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:41:48.724 [DEBUG] [Thread-2947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:41:48.725 [DEBUG] [Thread-2947] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:41:48.725 [DEBUG] [Thread-2947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:41:48.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:41:48.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:41:48.727 [DEBUG] [Thread-2947] [transport.py] [_log()] userauth is OK
2025-11-25T17:41:48.728 [DEBUG] [Thread-2947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:41:48.728 [DEBUG] [Thread-2947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:41:48.728 [DEBUG] [Thread-2947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:41:48.728 [DEBUG] [Thread-2947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:41:48.752 [INFO] [Thread-2947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:41:48.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:41:49.533 [DEBUG] [Thread-2947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:41:49.533 [DEBUG] [Thread-2947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:41:49.533 [DEBUG] [Thread-2947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:41:49.574 [DEBUG] [Thread-2947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:41:49.574 [DEBUG] [Thread-2947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:41:49.578 [DEBUG] [Thread-2947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:41:49.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:41:49.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:41:49.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:41:49.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:41:49.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:41:49.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:41:49.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:41:49.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:41:49.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:41:49.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.653572 -999.00  +27.00   9.89     11   -5.30 1 1 1 1 1   887    0 32.48 2.42 ----- 6.0 9.9 262.4 10.2 30.9 -32.5 31.3 -31.5 32.2 -29.2 32.3 -32.5
2025-11-25T17:41:49.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:41:49.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:41:49.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.653572
2025-11-25T17:41:49.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:41:49.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:41:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:41:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:41:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:41:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:41:30', tmtdew=39.58, humidity=6.31, cloud=0.0, wind=7.5, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:41:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:41:49.603 [DEBUG] [Thread-2947] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:41:49.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:41:49.705 [DEBUG] [Thread-2950] [transport.py] [_log()] starting thread (client mode): 0x761d9390
2025-11-25T17:41:49.705 [DEBUG] [Thread-2950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:41:49.721 [DEBUG] [Thread-2950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:41:49.721 [INFO] [Thread-2950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:41:49.728 [DEBUG] [Thread-2950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:41:49.728 [DEBUG] [Thread-2950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:41:49.728 [DEBUG] [Thread-2950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] client lang: <none>
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] server lang: <none>
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] kex follows: False
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:41:49.729 [DEBUG] [Thread-2950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:41:49.730 [DEBUG] [Thread-2950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:41:49.730 [DEBUG] [Thread-2950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:41:49.730 [DEBUG] [Thread-2950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:41:49.730 [DEBUG] [Thread-2950] [transport.py] [_log()] Compression: none
2025-11-25T17:41:49.730 [DEBUG] [Thread-2950] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:41:49.787 [DEBUG] [Thread-2950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:41:49.788 [DEBUG] [Thread-2950] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:41:49.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:41:49.789 [DEBUG] [Thread-2950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:41:49.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:41:49.847 [DEBUG] [Thread-2950] [transport.py] [_log()] userauth is OK
2025-11-25T17:41:49.847 [DEBUG] [Thread-2950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:41:49.847 [DEBUG] [Thread-2950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:41:49.847 [DEBUG] [Thread-2950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:41:49.847 [DEBUG] [Thread-2950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:41:49.866 [INFO] [Thread-2950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:41:49.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:41:49.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:41:50.706 [DEBUG] [Thread-2950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:41:50.706 [DEBUG] [Thread-2950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:41:50.754 [DEBUG] [Thread-2950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:41:50.754 [DEBUG] [Thread-2950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:41:50.763 [DEBUG] [Thread-2950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:41:50.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:41:50.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:41:50.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:41:50.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:41:50.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:41:50.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:41:50.800 [DEBUG] [Thread-2950] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:41:57.529 [DEBUG] [Thread-2952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:42:00.695 [DEBUG] [Thread-2953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:42:15.759 [DEBUG] [Thread-2954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:42:20.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:42:20.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:42:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:42:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 42, 2), 39.85, 6.18, 0.0, 7.99, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:42:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:42:02
2025-11-25T17:42:21.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:42:21.739 [DEBUG] [Thread-2955] [transport.py] [_log()] starting thread (client mode): 0x70d1fb50
2025-11-25T17:42:21.739 [DEBUG] [Thread-2955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:42:21.760 [DEBUG] [Thread-2955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:42:21.760 [INFO] [Thread-2955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:42:21.763 [DEBUG] [Thread-2955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] client lang: <none>
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] server lang: <none>
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] kex follows: False
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:42:21.764 [DEBUG] [Thread-2955] [transport.py] [_log()] Compression: none
2025-11-25T17:42:21.765 [DEBUG] [Thread-2955] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:42:21.783 [DEBUG] [Thread-2955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:42:21.784 [DEBUG] [Thread-2955] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:42:21.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:42:21.785 [DEBUG] [Thread-2955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:42:21.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:42:21.787 [DEBUG] [Thread-2955] [transport.py] [_log()] userauth is OK
2025-11-25T17:42:21.787 [DEBUG] [Thread-2955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:42:21.787 [DEBUG] [Thread-2955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:42:21.788 [DEBUG] [Thread-2955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:42:21.788 [DEBUG] [Thread-2955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:42:21.813 [INFO] [Thread-2955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:42:21.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:42:22.459 [DEBUG] [Thread-2955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:42:22.459 [DEBUG] [Thread-2955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:42:22.460 [DEBUG] [Thread-2955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:42:22.500 [DEBUG] [Thread-2955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:42:22.500 [DEBUG] [Thread-2955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:42:22.503 [DEBUG] [Thread-2955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:42:22.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:42:22.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:42:22.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:42:22.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:42:22.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:42:22.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:42:22.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:42:22.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:42:22.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:42:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.653920 -999.00  +26.90   5.29     11   -5.40 1 1 1 1 1   887    0 32.33 4.02 ----- 3.2 5.3 237.2 9.9 30.8 -33.2 31.3 -31.4 32.2 -29.6 32.4 -31.2
2025-11-25T17:42:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:42:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:42:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.653920
2025-11-25T17:42:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:42:22.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:42:22.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:42:22.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:42:22.527 [DEBUG] [Thread-2955] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:42:22.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:42:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:42:02', tmtdew=39.85, humidity=6.18, cloud=0.0, wind=7.99, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:41:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:42:22.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:42:22.636 [DEBUG] [Thread-2958] [transport.py] [_log()] starting thread (client mode): 0x737c5720
2025-11-25T17:42:22.636 [DEBUG] [Thread-2958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:42:22.657 [DEBUG] [Thread-2958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:42:22.657 [INFO] [Thread-2958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:42:22.664 [DEBUG] [Thread-2958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] client lang: <none>
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] server lang: <none>
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] kex follows: False
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:42:22.665 [DEBUG] [Thread-2958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:42:22.666 [DEBUG] [Thread-2958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:42:22.666 [DEBUG] [Thread-2958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:42:22.666 [DEBUG] [Thread-2958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:42:22.666 [DEBUG] [Thread-2958] [transport.py] [_log()] Compression: none
2025-11-25T17:42:22.666 [DEBUG] [Thread-2958] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:42:22.724 [DEBUG] [Thread-2958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:42:22.725 [DEBUG] [Thread-2958] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:42:22.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:42:22.726 [DEBUG] [Thread-2958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:42:22.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:42:22.780 [DEBUG] [Thread-2958] [transport.py] [_log()] userauth is OK
2025-11-25T17:42:22.780 [DEBUG] [Thread-2958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:42:22.781 [DEBUG] [Thread-2958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:42:22.781 [DEBUG] [Thread-2958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:42:22.781 [DEBUG] [Thread-2958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:42:22.800 [INFO] [Thread-2958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:42:22.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:42:22.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:42:23.671 [DEBUG] [Thread-2958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:42:23.671 [DEBUG] [Thread-2958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:42:23.719 [DEBUG] [Thread-2958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:42:23.719 [DEBUG] [Thread-2958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:42:23.728 [DEBUG] [Thread-2958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:42:23.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:42:23.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:42: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
2025-11-25T17:42:23.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:42:23.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:42:23.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:42:23.765 [DEBUG] [Thread-2958] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:42:30.807 [DEBUG] [Thread-2960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:42:45.881 [DEBUG] [Thread-2961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:42:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:42:53.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:42:53.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:42:54.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 42, 34), 39.82, 6.66, 0.0, 6.53, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:42:54.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:42:34
2025-11-25T17:42:54.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:42:54.726 [DEBUG] [Thread-2962] [transport.py] [_log()] starting thread (client mode): 0x70d1fd30
2025-11-25T17:42:54.726 [DEBUG] [Thread-2962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:42:54.747 [DEBUG] [Thread-2962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:42:54.747 [INFO] [Thread-2962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] client lang: <none>
2025-11-25T17:42:54.750 [DEBUG] [Thread-2962] [transport.py] [_log()] server lang: <none>
2025-11-25T17:42:54.751 [DEBUG] [Thread-2962] [transport.py] [_log()] kex follows: False
2025-11-25T17:42:54.751 [DEBUG] [Thread-2962] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:42:54.751 [DEBUG] [Thread-2962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:42:54.751 [DEBUG] [Thread-2962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:42:54.751 [DEBUG] [Thread-2962] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:42:54.751 [DEBUG] [Thread-2962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:42:54.751 [DEBUG] [Thread-2962] [transport.py] [_log()] Compression: none
2025-11-25T17:42:54.751 [DEBUG] [Thread-2962] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:42:54.770 [DEBUG] [Thread-2962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:42:54.770 [DEBUG] [Thread-2962] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:42:54.771 [DEBUG] [Thread-2962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:42:54.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:42:54.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:42:54.773 [DEBUG] [Thread-2962] [transport.py] [_log()] userauth is OK
2025-11-25T17:42:54.773 [DEBUG] [Thread-2962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:42:54.773 [DEBUG] [Thread-2962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:42:54.773 [DEBUG] [Thread-2962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:42:54.774 [DEBUG] [Thread-2962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:42:54.797 [INFO] [Thread-2962] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:42:54.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:42:55.594 [DEBUG] [Thread-2962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:42:55.594 [DEBUG] [Thread-2962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:42:55.595 [DEBUG] [Thread-2962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:42:55.636 [DEBUG] [Thread-2962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:42:55.636 [DEBUG] [Thread-2962] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:42:55.639 [DEBUG] [Thread-2962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:42:55.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:42:55.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:42:55.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:42:55.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:42:55.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:42:55.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:42:55.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:42:55.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:42:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:42:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.654267 -999.00  +27.10   1.83     11   -5.20 1 1 1 1 1   887    0 32.71 6.06 ----- 1.8 1.8 102.7 3.7 30.9 -31.9 31.2 -32.9 32.3 -29.2 32.5 -31.5
2025-11-25T17:42:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:42:55.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:42:55.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.654267
2025-11-25T17:42:55.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:42:55.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:42:55.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:42:55.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:42:55.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:42:55.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:42:34', tmtdew=39.82, humidity=6.66, cloud=0.0, wind=6.53, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:42:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:42:55.666 [DEBUG] [Thread-2962] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:42:55.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:42:55.770 [DEBUG] [Thread-2965] [transport.py] [_log()] starting thread (client mode): 0x70d1c610
2025-11-25T17:42:55.770 [DEBUG] [Thread-2965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:42:55.788 [DEBUG] [Thread-2965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:42:55.788 [INFO] [Thread-2965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] client lang: <none>
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] server lang: <none>
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] kex follows: False
2025-11-25T17:42:55.796 [DEBUG] [Thread-2965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:42:55.797 [DEBUG] [Thread-2965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:42:55.797 [DEBUG] [Thread-2965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:42:55.797 [DEBUG] [Thread-2965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:42:55.797 [DEBUG] [Thread-2965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:42:55.797 [DEBUG] [Thread-2965] [transport.py] [_log()] Compression: none
2025-11-25T17:42:55.797 [DEBUG] [Thread-2965] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:42:55.854 [DEBUG] [Thread-2965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:42:55.855 [DEBUG] [Thread-2965] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:42:55.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:42:55.856 [DEBUG] [Thread-2965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:42:55.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:42:55.910 [DEBUG] [Thread-2965] [transport.py] [_log()] userauth is OK
2025-11-25T17:42:55.910 [DEBUG] [Thread-2965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:42:55.910 [DEBUG] [Thread-2965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:42:55.910 [DEBUG] [Thread-2965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:42:55.911 [DEBUG] [Thread-2965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:42:55.930 [INFO] [Thread-2965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:42:55.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:42:55.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:42:56.822 [DEBUG] [Thread-2965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:42:56.822 [DEBUG] [Thread-2965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:42:56.870 [DEBUG] [Thread-2965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:42:56.870 [DEBUG] [Thread-2965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:42:56.879 [DEBUG] [Thread-2965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:42:56.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:42:56.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:42:56.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:42:56.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:42:56.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:42:56.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:42:56.917 [DEBUG] [Thread-2965] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:42:58.269 [DEBUG] [Thread-2967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:43:00.925 [DEBUG] [Thread-2968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:43:15.991 [DEBUG] [Thread-2969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:43:26.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:43:26.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:43:26.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
2025-11-25T17:43:27.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 43, 6), 39.74, 6.69, 0.0, 5.67, 27.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:43:27.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:43:06
2025-11-25T17:43:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:43:27.886 [DEBUG] [Thread-2970] [transport.py] [_log()] starting thread (client mode): 0x70d037f0
2025-11-25T17:43:27.886 [DEBUG] [Thread-2970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:43:27.907 [DEBUG] [Thread-2970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:43:27.907 [INFO] [Thread-2970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:43:27.910 [DEBUG] [Thread-2970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:43:27.910 [DEBUG] [Thread-2970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:43:27.910 [DEBUG] [Thread-2970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:43:27.910 [DEBUG] [Thread-2970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:43:27.910 [DEBUG] [Thread-2970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] client lang: <none>
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] server lang: <none>
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] kex follows: False
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] Compression: none
2025-11-25T17:43:27.911 [DEBUG] [Thread-2970] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:43:27.930 [DEBUG] [Thread-2970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:43:27.930 [DEBUG] [Thread-2970] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:43:27.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:43:27.931 [DEBUG] [Thread-2970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:43:27.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:43:27.933 [DEBUG] [Thread-2970] [transport.py] [_log()] userauth is OK
2025-11-25T17:43:27.934 [DEBUG] [Thread-2970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:43:27.934 [DEBUG] [Thread-2970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:43:27.934 [DEBUG] [Thread-2970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:43:27.934 [DEBUG] [Thread-2970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:43:27.969 [INFO] [Thread-2970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:43:27.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:43:28.648 [DEBUG] [Thread-2970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:43:28.648 [DEBUG] [Thread-2970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:43:28.648 [DEBUG] [Thread-2970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:43:28.689 [DEBUG] [Thread-2970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:43:28.689 [DEBUG] [Thread-2970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:43:28.692 [DEBUG] [Thread-2970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:43:28.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:43:28.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:43:28.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:43:28.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:43:28.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:43:28.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:43:28.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:43:28.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:43:28.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:43:28.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.654614 -999.00  +27.20   3.27     11   -5.20 1 1 1 1 1   887    0 33.15 6.39 ----- 1.6 3.3 252.8 4.0 30.9 -32.1 31.3 -31.2 32.5 -29.5 32.6 -31.3
2025-11-25T17:43:28.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:43:28.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:43:28.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.654614
2025-11-25T17:43:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:43:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:43:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:43:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:43:28.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:43:28.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:43:06', tmtdew=39.74, humidity=6.69, cloud=0.0, wind=5.67, temperature=27.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:42:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:43:28.719 [DEBUG] [Thread-2970] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:43:28.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:43:28.825 [DEBUG] [Thread-2973] [transport.py] [_log()] starting thread (client mode): 0x70d015a0
2025-11-25T17:43:28.826 [DEBUG] [Thread-2973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:43:28.840 [DEBUG] [Thread-2973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:43:28.840 [INFO] [Thread-2973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] client lang: <none>
2025-11-25T17:43:28.848 [DEBUG] [Thread-2973] [transport.py] [_log()] server lang: <none>
2025-11-25T17:43:28.849 [DEBUG] [Thread-2973] [transport.py] [_log()] kex follows: False
2025-11-25T17:43:28.849 [DEBUG] [Thread-2973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:43:28.849 [DEBUG] [Thread-2973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:43:28.849 [DEBUG] [Thread-2973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:43:28.849 [DEBUG] [Thread-2973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:43:28.849 [DEBUG] [Thread-2973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:43:28.849 [DEBUG] [Thread-2973] [transport.py] [_log()] Compression: none
2025-11-25T17:43:28.849 [DEBUG] [Thread-2973] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:43:28.907 [DEBUG] [Thread-2973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:43:28.908 [DEBUG] [Thread-2973] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:43:28.908 [DEBUG] [Thread-2973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:43:28.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:43:28.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:43:28.963 [DEBUG] [Thread-2973] [transport.py] [_log()] userauth is OK
2025-11-25T17:43:28.964 [DEBUG] [Thread-2973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:43:28.964 [DEBUG] [Thread-2973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:43:28.964 [DEBUG] [Thread-2973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:43:28.964 [DEBUG] [Thread-2973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:43:28.984 [INFO] [Thread-2973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:43:28.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:43:28.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:43:29.801 [DEBUG] [Thread-2973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:43:29.801 [DEBUG] [Thread-2973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:43:29.850 [DEBUG] [Thread-2973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:43:29.850 [DEBUG] [Thread-2973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:43:29.859 [DEBUG] [Thread-2973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:43:29.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:43:29.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:43:29.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:43:29.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:43:29.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:43:29.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:43:29.896 [DEBUG] [Thread-2973] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:43:31.029 [DEBUG] [Thread-2975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:43:46.098 [DEBUG] [Thread-2976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:43:58.804 [DEBUG] [Thread-2977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:43:59.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:43:59.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:43:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:44:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 43, 38), 39.7, 6.24, 0.0, 5.19, 27.24, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:44:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:43:38
2025-11-25T17:44:00.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:44:00.865 [DEBUG] [Thread-2978] [transport.py] [_log()] starting thread (client mode): 0x737834f0
2025-11-25T17:44:00.866 [DEBUG] [Thread-2978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:44:00.876 [DEBUG] [Thread-2978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:44:00.876 [INFO] [Thread-2978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:44:00.879 [DEBUG] [Thread-2978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] client lang: <none>
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] server lang: <none>
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] kex follows: False
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:44:00.880 [DEBUG] [Thread-2978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:44:00.881 [DEBUG] [Thread-2978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:44:00.881 [DEBUG] [Thread-2978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:44:00.881 [DEBUG] [Thread-2978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:44:00.881 [DEBUG] [Thread-2978] [transport.py] [_log()] Compression: none
2025-11-25T17:44:00.881 [DEBUG] [Thread-2978] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:44:00.894 [DEBUG] [Thread-2978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:44:00.894 [DEBUG] [Thread-2978] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:44:00.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:44:00.895 [DEBUG] [Thread-2978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:44:00.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:44:00.897 [DEBUG] [Thread-2978] [transport.py] [_log()] userauth is OK
2025-11-25T17:44:00.897 [DEBUG] [Thread-2978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:44:00.898 [DEBUG] [Thread-2978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:44:00.898 [DEBUG] [Thread-2978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:44:00.898 [DEBUG] [Thread-2978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:44:00.916 [INFO] [Thread-2978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:44:00.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:44:01.142 [DEBUG] [Thread-2980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:44:01.700 [DEBUG] [Thread-2978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:44:01.701 [DEBUG] [Thread-2978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:44:01.701 [DEBUG] [Thread-2978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:44:01.742 [DEBUG] [Thread-2978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:44:01.742 [DEBUG] [Thread-2978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:44:01.745 [DEBUG] [Thread-2978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:44:01.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:44:01.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:44:01.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:44:01.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:44:01.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:44:01.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:44:01.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:44:01.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:44:01.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:44:01.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.654961 -999.00  +27.20   6.42     11   -5.20 1 1 1 1 1   887    0 32.95 6.30 ----- 2.2 6.4 216.2 7.2 30.9 -32.8 31.4 -31.7 32.6 -29.9 32.6 -32.0
2025-11-25T17:44:01.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:44:01.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:44:01.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.654961
2025-11-25T17:44:01.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:44:01.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:44:01.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:44:01.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:44:01.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:44:01.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:43:38', tmtdew=39.7, humidity=6.24, cloud=0.0, wind=5.19, temperature=27.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:43:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:44:01.774 [DEBUG] [Thread-2978] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:44:01.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:44:01.898 [DEBUG] [Thread-2982] [transport.py] [_log()] starting thread (client mode): 0x737c7c40
2025-11-25T17:44:01.898 [DEBUG] [Thread-2982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:44:01.918 [DEBUG] [Thread-2982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:44:01.919 [INFO] [Thread-2982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:44:01.926 [DEBUG] [Thread-2982] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:44:01.926 [DEBUG] [Thread-2982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:44:01.926 [DEBUG] [Thread-2982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:44:01.926 [DEBUG] [Thread-2982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:44:01.926 [DEBUG] [Thread-2982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:44:01.926 [DEBUG] [Thread-2982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:44:01.926 [DEBUG] [Thread-2982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:44:01.926 [DEBUG] [Thread-2982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:44:01.926 [DEBUG] [Thread-2982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:44:01.927 [DEBUG] [Thread-2982] [transport.py] [_log()] client lang: <none>
2025-11-25T17:44:01.927 [DEBUG] [Thread-2982] [transport.py] [_log()] server lang: <none>
2025-11-25T17:44:01.927 [DEBUG] [Thread-2982] [transport.py] [_log()] kex follows: False
2025-11-25T17:44:01.927 [DEBUG] [Thread-2982] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:44:01.927 [DEBUG] [Thread-2982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:44:01.927 [DEBUG] [Thread-2982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:44:01.927 [DEBUG] [Thread-2982] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:44:01.928 [DEBUG] [Thread-2982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:44:01.928 [DEBUG] [Thread-2982] [transport.py] [_log()] Compression: none
2025-11-25T17:44:01.928 [DEBUG] [Thread-2982] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:44:01.985 [DEBUG] [Thread-2982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:44:01.985 [DEBUG] [Thread-2982] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:44:01.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:44:01.986 [DEBUG] [Thread-2982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:44:01.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:44:02.041 [DEBUG] [Thread-2982] [transport.py] [_log()] userauth is OK
2025-11-25T17:44:02.041 [DEBUG] [Thread-2982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:44:02.041 [DEBUG] [Thread-2982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:44:02.041 [DEBUG] [Thread-2982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:44:02.041 [DEBUG] [Thread-2982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:44:02.060 [INFO] [Thread-2982] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:44:02.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:44:02.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:44:02.926 [DEBUG] [Thread-2982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:44:02.927 [DEBUG] [Thread-2982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:44:02.975 [DEBUG] [Thread-2982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:44:02.975 [DEBUG] [Thread-2982] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:44:02.984 [DEBUG] [Thread-2982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:44:02.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:44:02.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:44: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') -> 00000000
2025-11-25T17:44:03.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:44:03.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:44:03.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:44:03.025 [DEBUG] [Thread-2982] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:44:16.186 [DEBUG] [Thread-2984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:44:31.246 [DEBUG] [Thread-2985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:44:33.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:44:33.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:44:33.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:44:33.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 44, 10), 39.63, 6.27, 0.0, 4.61, 27.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:44:33.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:44:10
2025-11-25T17:44:33.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:44:34.030 [DEBUG] [Thread-2986] [transport.py] [_log()] starting thread (client mode): 0x70d1f670
2025-11-25T17:44:34.030 [DEBUG] [Thread-2986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:44:34.040 [DEBUG] [Thread-2986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:44:34.040 [INFO] [Thread-2986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:44:34.043 [DEBUG] [Thread-2986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] client lang: <none>
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] server lang: <none>
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] kex follows: False
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] Compression: none
2025-11-25T17:44:34.044 [DEBUG] [Thread-2986] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:44:34.052 [DEBUG] [Thread-2986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:44:34.052 [DEBUG] [Thread-2986] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:44:34.052 [DEBUG] [Thread-2986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:44:34.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:44:34.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:44:34.053 [DEBUG] [Thread-2986] [transport.py] [_log()] userauth is OK
2025-11-25T17:44:34.053 [DEBUG] [Thread-2986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:44:34.053 [DEBUG] [Thread-2986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:44:34.053 [DEBUG] [Thread-2986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:44:34.053 [DEBUG] [Thread-2986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:44:34.064 [INFO] [Thread-2986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:44:34.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:44:34.686 [DEBUG] [Thread-2986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:44:34.686 [DEBUG] [Thread-2986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:44:34.686 [DEBUG] [Thread-2986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:44:34.727 [DEBUG] [Thread-2986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:44:34.727 [DEBUG] [Thread-2986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:44:34.729 [DEBUG] [Thread-2986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:44:34.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:44:34.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:44:34.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:44:34.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:44:34.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:44:34.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:44:34.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.655308 -999.00  +27.30   3.41     11   -5.10 1 1 1 1 1   887    0 32.24 6.42 ----- 1.8 3.4 184.2 3.9 30.9 -32.3 31.4 -31.3 32.5 -29.6 32.7 -31.6
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.655308
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:44:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:44:10', tmtdew=39.63, humidity=6.27, cloud=0.0, wind=4.61, temperature=27.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:43:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:44:34.741 [DEBUG] [Thread-2986] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:44:34.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:44:34.835 [DEBUG] [Thread-2989] [transport.py] [_log()] starting thread (client mode): 0x70d02f80
2025-11-25T17:44:34.835 [DEBUG] [Thread-2989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:44:34.850 [DEBUG] [Thread-2989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:44:34.850 [INFO] [Thread-2989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] client lang: <none>
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] server lang: <none>
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] kex follows: False
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:44:34.858 [DEBUG] [Thread-2989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:44:34.859 [DEBUG] [Thread-2989] [transport.py] [_log()] Compression: none
2025-11-25T17:44:34.859 [DEBUG] [Thread-2989] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:44:34.916 [DEBUG] [Thread-2989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:44:34.916 [DEBUG] [Thread-2989] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:44:34.916 [DEBUG] [Thread-2989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:44:34.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:44:34.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:44:34.974 [DEBUG] [Thread-2989] [transport.py] [_log()] userauth is OK
2025-11-25T17:44:34.974 [DEBUG] [Thread-2989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:44:34.974 [DEBUG] [Thread-2989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:44:34.974 [DEBUG] [Thread-2989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:44:34.974 [DEBUG] [Thread-2989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:44:34.987 [INFO] [Thread-2989] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:44:34.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:44:34.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:44:35.799 [DEBUG] [Thread-2989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:44:35.799 [DEBUG] [Thread-2989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:44:35.848 [DEBUG] [Thread-2989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:44:35.848 [DEBUG] [Thread-2989] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:44:35.856 [DEBUG] [Thread-2989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:44:35.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:44:35.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:44:35.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:44:35.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:44:35.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:44:35.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:44:35.888 [DEBUG] [Thread-2989] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:44:46.285 [DEBUG] [Thread-2991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:44:59.518 [DEBUG] [Thread-2992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:45:01.352 [DEBUG] [Thread-2993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:45:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:45:05.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:45:05.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:45:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 44, 42), 39.76, 6.24, 0.0, 8.45, 27.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:45:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:44:42
2025-11-25T17:45:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:45:06.866 [DEBUG] [Thread-2994] [transport.py] [_log()] starting thread (client mode): 0x7378d8a0
2025-11-25T17:45:06.867 [DEBUG] [Thread-2994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:45:06.887 [DEBUG] [Thread-2994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:45:06.888 [INFO] [Thread-2994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:45:06.891 [DEBUG] [Thread-2994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:45:06.897 [DEBUG] [Thread-2994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:45:06.897 [DEBUG] [Thread-2994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:45:06.897 [DEBUG] [Thread-2994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:45:06.897 [DEBUG] [Thread-2994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:45:06.897 [DEBUG] [Thread-2994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:45:06.897 [DEBUG] [Thread-2994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:45:06.897 [DEBUG] [Thread-2994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:45:06.897 [DEBUG] [Thread-2994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:45:06.897 [DEBUG] [Thread-2994] [transport.py] [_log()] client lang: <none>
2025-11-25T17:45:06.898 [DEBUG] [Thread-2994] [transport.py] [_log()] server lang: <none>
2025-11-25T17:45:06.898 [DEBUG] [Thread-2994] [transport.py] [_log()] kex follows: False
2025-11-25T17:45:06.898 [DEBUG] [Thread-2994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:45:06.898 [DEBUG] [Thread-2994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:45:06.898 [DEBUG] [Thread-2994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:45:06.898 [DEBUG] [Thread-2994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:45:06.898 [DEBUG] [Thread-2994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:45:06.898 [DEBUG] [Thread-2994] [transport.py] [_log()] Compression: none
2025-11-25T17:45:06.898 [DEBUG] [Thread-2994] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:45:06.915 [DEBUG] [Thread-2994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:45:06.916 [DEBUG] [Thread-2994] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:45:06.916 [DEBUG] [Thread-2994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:45:06.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:45:06.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:45:06.918 [DEBUG] [Thread-2994] [transport.py] [_log()] userauth is OK
2025-11-25T17:45:06.918 [DEBUG] [Thread-2994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:45:06.918 [DEBUG] [Thread-2994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:45:06.918 [DEBUG] [Thread-2994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:45:06.918 [DEBUG] [Thread-2994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:45:06.942 [INFO] [Thread-2994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:45:06.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:45:08.758 [DEBUG] [Thread-2994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:45:08.758 [DEBUG] [Thread-2994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:45:08.758 [DEBUG] [Thread-2994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:45:08.798 [DEBUG] [Thread-2994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:45:08.798 [DEBUG] [Thread-2994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:45:08.800 [DEBUG] [Thread-2994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:45:08.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:45:08.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:45:08.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:45:08.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:45:08.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:45:08.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:45:08.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.655656 -999.00  +27.30   3.67     11   -5.10 1 1 1 1 1   887    0 32.77 6.71 ----- 3.5 3.7 177.0 4.4 31.1 -32.1 31.4 -31.5 32.7 -29.5 32.8 -31.4
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.655656
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:45:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:44:42', tmtdew=39.76, humidity=6.24, cloud=0.0, wind=8.45, temperature=27.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:44:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:45:08.842 [DEBUG] [Thread-2994] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:45:08.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:45:08.937 [DEBUG] [Thread-2997] [transport.py] [_log()] starting thread (client mode): 0x7378f730
2025-11-25T17:45:08.937 [DEBUG] [Thread-2997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:45:08.951 [DEBUG] [Thread-2997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:45:08.951 [INFO] [Thread-2997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:45:08.959 [DEBUG] [Thread-2997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:45:08.959 [DEBUG] [Thread-2997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:45:08.959 [DEBUG] [Thread-2997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:45:08.959 [DEBUG] [Thread-2997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:45:08.959 [DEBUG] [Thread-2997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:45:08.959 [DEBUG] [Thread-2997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:45:08.959 [DEBUG] [Thread-2997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:45:08.959 [DEBUG] [Thread-2997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:45:08.959 [DEBUG] [Thread-2997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] client lang: <none>
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] server lang: <none>
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] kex follows: False
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] Compression: none
2025-11-25T17:45:08.960 [DEBUG] [Thread-2997] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:45:09.018 [DEBUG] [Thread-2997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:45:09.018 [DEBUG] [Thread-2997] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:45:09.019 [DEBUG] [Thread-2997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:45:09.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:45:09.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:45:09.075 [DEBUG] [Thread-2997] [transport.py] [_log()] userauth is OK
2025-11-25T17:45:09.075 [DEBUG] [Thread-2997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:45:09.075 [DEBUG] [Thread-2997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:45:09.075 [DEBUG] [Thread-2997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:45:09.075 [DEBUG] [Thread-2997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:45:09.088 [INFO] [Thread-2997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:45:09.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:45:09.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:45:09.907 [DEBUG] [Thread-2997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:45:09.907 [DEBUG] [Thread-2997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:45:09.955 [DEBUG] [Thread-2997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:45:09.955 [DEBUG] [Thread-2997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:45:09.964 [DEBUG] [Thread-2997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:45:09.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:45:09.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:45:09.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:45:09.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:45:09.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:45:09.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:45:09.995 [DEBUG] [Thread-2997] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:45:16.389 [DEBUG] [Thread-2999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:45:31.447 [DEBUG] [Thread-3000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:45:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:45:40.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:45:40.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:45:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 45, 14), 39.78, 6.23, 0.0, 8.08, 27.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:45:40.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:45:14
2025-11-25T17:45:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:45:40.942 [DEBUG] [Thread-3001] [transport.py] [_log()] starting thread (client mode): 0x70d00160
2025-11-25T17:45:40.942 [DEBUG] [Thread-3001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:45:40.962 [DEBUG] [Thread-3001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:45:40.963 [INFO] [Thread-3001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] client lang: <none>
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] server lang: <none>
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] kex follows: False
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:45:40.966 [DEBUG] [Thread-3001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:45:40.967 [DEBUG] [Thread-3001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:45:40.967 [DEBUG] [Thread-3001] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:45:40.967 [DEBUG] [Thread-3001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:45:40.967 [DEBUG] [Thread-3001] [transport.py] [_log()] Compression: none
2025-11-25T17:45:40.967 [DEBUG] [Thread-3001] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:45:40.986 [DEBUG] [Thread-3001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:45:40.986 [DEBUG] [Thread-3001] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:45:40.987 [DEBUG] [Thread-3001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:45:40.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:45:40.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:45:40.989 [DEBUG] [Thread-3001] [transport.py] [_log()] userauth is OK
2025-11-25T17:45:40.989 [DEBUG] [Thread-3001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:45:40.989 [DEBUG] [Thread-3001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:45:40.989 [DEBUG] [Thread-3001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:45:40.989 [DEBUG] [Thread-3001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:45:41.007 [INFO] [Thread-3001] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:45:41.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:45:41.675 [DEBUG] [Thread-3001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:45:41.676 [DEBUG] [Thread-3001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:45:41.676 [DEBUG] [Thread-3001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:45:41.717 [DEBUG] [Thread-3001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:45:41.717 [DEBUG] [Thread-3001] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:45:41.721 [DEBUG] [Thread-3001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:45:41.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:45:41.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:45:41.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:45:41.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:45:41.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:45:41.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:45:41.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:45:41.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:45:41.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:45:41.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.656350 -999.00  +27.30   5.70     11   -5.00 1 1 1 1 1   887    0 32.47 9.25 ----- 7.5 5.7 206.0 8.8 31.1 -32.3 31.3 -31.6 32.7 -30.1 32.8 -32.4
2025-11-25T17:45:41.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:45:41.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:45:41.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.656350
2025-11-25T17:45:41.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:45:41.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:45:41.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:45:41.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:45:41.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:45:41.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:45:14', tmtdew=39.78, humidity=6.23, cloud=0.0, wind=8.08, temperature=27.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:45:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:45:41.747 [DEBUG] [Thread-3001] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:45:41.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:45:41.849 [DEBUG] [Thread-3004] [transport.py] [_log()] starting thread (client mode): 0x73781510
2025-11-25T17:45:41.849 [DEBUG] [Thread-3004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:45:41.863 [DEBUG] [Thread-3004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:45:41.863 [INFO] [Thread-3004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] client lang: <none>
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] server lang: <none>
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] kex follows: False
2025-11-25T17:45:41.872 [DEBUG] [Thread-3004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:45:41.873 [DEBUG] [Thread-3004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:45:41.873 [DEBUG] [Thread-3004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:45:41.873 [DEBUG] [Thread-3004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:45:41.873 [DEBUG] [Thread-3004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:45:41.873 [DEBUG] [Thread-3004] [transport.py] [_log()] Compression: none
2025-11-25T17:45:41.873 [DEBUG] [Thread-3004] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:45:41.928 [DEBUG] [Thread-3004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:45:41.929 [DEBUG] [Thread-3004] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:45:41.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:45:41.930 [DEBUG] [Thread-3004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:45:41.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:45:41.989 [DEBUG] [Thread-3004] [transport.py] [_log()] userauth is OK
2025-11-25T17:45:41.990 [DEBUG] [Thread-3004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:45:41.990 [DEBUG] [Thread-3004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:45:41.990 [DEBUG] [Thread-3004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:45:41.990 [DEBUG] [Thread-3004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:45:42.008 [INFO] [Thread-3004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:45:42.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:45:42.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:45:42.852 [DEBUG] [Thread-3004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:45:42.853 [DEBUG] [Thread-3004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:45:42.902 [DEBUG] [Thread-3004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:45:42.903 [DEBUG] [Thread-3004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:45:42.915 [DEBUG] [Thread-3004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:45:42.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:45:42.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:45:42.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:45:42.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:45:42.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:45:42.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:45:42.954 [DEBUG] [Thread-3004] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:45:46.492 [DEBUG] [Thread-3006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:46:00.010 [DEBUG] [Thread-3007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:46:01.552 [DEBUG] [Thread-3008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:46:12.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:46:12.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:46:12.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:46:13.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 45, 46), 39.85, 6.64, 0.0, 6.72, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:46:13.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:45:46
2025-11-25T17:46:13.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:46:13.887 [DEBUG] [Thread-3009] [transport.py] [_log()] starting thread (client mode): 0x73781f30
2025-11-25T17:46:13.887 [DEBUG] [Thread-3009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:46:13.909 [DEBUG] [Thread-3009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:46:13.909 [INFO] [Thread-3009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:46:13.912 [DEBUG] [Thread-3009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:46:13.912 [DEBUG] [Thread-3009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:46:13.912 [DEBUG] [Thread-3009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] client lang: <none>
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] server lang: <none>
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] kex follows: False
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] Compression: none
2025-11-25T17:46:13.913 [DEBUG] [Thread-3009] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:46:13.932 [DEBUG] [Thread-3009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:46:13.932 [DEBUG] [Thread-3009] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:46:13.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:46:13.934 [DEBUG] [Thread-3009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:46:13.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:46:13.936 [DEBUG] [Thread-3009] [transport.py] [_log()] userauth is OK
2025-11-25T17:46:13.936 [DEBUG] [Thread-3009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:46:13.936 [DEBUG] [Thread-3009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:46:13.936 [DEBUG] [Thread-3009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:46:13.936 [DEBUG] [Thread-3009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:46:13.961 [INFO] [Thread-3009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:46:13.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:46:14.727 [DEBUG] [Thread-3009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:46:14.727 [DEBUG] [Thread-3009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:46:14.727 [DEBUG] [Thread-3009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:46:14.768 [DEBUG] [Thread-3009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:46:14.768 [DEBUG] [Thread-3009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:46:14.773 [DEBUG] [Thread-3009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:46:14.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:46:14.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:46:14.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:46:14.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:46:14.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:46:14.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:46:14.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:46:14.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:46:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:46:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.656697 -999.00  +27.40   7.12     11   -5.00 1 1 1 1 1   887    0 32.30 9.16 ----- 5.1 7.1 254.4 11.1 31.0 -32.6 31.1 -33.4 32.7 -30.5 32.9 -31.6
2025-11-25T17:46:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:46:14.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:46:14.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.656697
2025-11-25T17:46:14.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:46:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:46:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:46:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:46:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:46:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:45:46', tmtdew=39.85, humidity=6.64, cloud=0.0, wind=6.72, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:45:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:46:14.799 [DEBUG] [Thread-3009] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:46:14.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:46:14.902 [DEBUG] [Thread-3012] [transport.py] [_log()] starting thread (client mode): 0x70d02260
2025-11-25T17:46:14.903 [DEBUG] [Thread-3012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:46:14.917 [DEBUG] [Thread-3012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:46:14.917 [INFO] [Thread-3012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:46:14.925 [DEBUG] [Thread-3012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:46:14.925 [DEBUG] [Thread-3012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:46:14.925 [DEBUG] [Thread-3012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:46:14.925 [DEBUG] [Thread-3012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:46:14.925 [DEBUG] [Thread-3012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:46:14.925 [DEBUG] [Thread-3012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:46:14.925 [DEBUG] [Thread-3012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] client lang: <none>
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] server lang: <none>
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] kex follows: False
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] Compression: none
2025-11-25T17:46:14.926 [DEBUG] [Thread-3012] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:46:14.981 [DEBUG] [Thread-3012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:46:14.982 [DEBUG] [Thread-3012] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:46:14.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:46:14.983 [DEBUG] [Thread-3012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:46:14.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:46:15.037 [DEBUG] [Thread-3012] [transport.py] [_log()] userauth is OK
2025-11-25T17:46:15.038 [DEBUG] [Thread-3012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:46:15.038 [DEBUG] [Thread-3012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:46:15.038 [DEBUG] [Thread-3012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:46:15.038 [DEBUG] [Thread-3012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:46:15.057 [INFO] [Thread-3012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:46:15.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:46:15.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:46:15.865 [DEBUG] [Thread-3012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:46:15.865 [DEBUG] [Thread-3012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:46:15.914 [DEBUG] [Thread-3012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:46:15.914 [DEBUG] [Thread-3012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:46:15.923 [DEBUG] [Thread-3012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:46:15.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:46:15.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:46:15.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:46:15.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:46:15.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:46:15.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:46:15.958 [DEBUG] [Thread-3012] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:46:16.597 [DEBUG] [Thread-3014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:46:31.661 [DEBUG] [Thread-3015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:46:45.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:46:45.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:46:45.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:46:46.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 46, 18), 39.78, 6.69, 0.0, 7.11, 27.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:46:46.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:46:18
2025-11-25T17:46:46.706 [DEBUG] [Thread-3016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:46:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:46:46.899 [DEBUG] [Thread-3017] [transport.py] [_log()] starting thread (client mode): 0x70d0d570
2025-11-25T17:46:46.899 [DEBUG] [Thread-3017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:46:46.920 [DEBUG] [Thread-3017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:46:46.920 [INFO] [Thread-3017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:46:46.923 [DEBUG] [Thread-3017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:46:46.923 [DEBUG] [Thread-3017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:46:46.923 [DEBUG] [Thread-3017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:46:46.923 [DEBUG] [Thread-3017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] client lang: <none>
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] server lang: <none>
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] kex follows: False
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] Compression: none
2025-11-25T17:46:46.924 [DEBUG] [Thread-3017] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:46:46.942 [DEBUG] [Thread-3017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:46:46.942 [DEBUG] [Thread-3017] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:46:46.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:46:46.944 [DEBUG] [Thread-3017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:46:46.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:46:46.946 [DEBUG] [Thread-3017] [transport.py] [_log()] userauth is OK
2025-11-25T17:46:46.946 [DEBUG] [Thread-3017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:46:46.946 [DEBUG] [Thread-3017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:46:46.946 [DEBUG] [Thread-3017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:46:46.946 [DEBUG] [Thread-3017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:46:46.981 [INFO] [Thread-3017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:46:46.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:46:47.634 [DEBUG] [Thread-3017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:46:47.635 [DEBUG] [Thread-3017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:46:47.635 [DEBUG] [Thread-3017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:46:47.676 [DEBUG] [Thread-3017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:46:47.676 [DEBUG] [Thread-3017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:46:47.679 [DEBUG] [Thread-3017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:46:47.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:46:47.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:46:47.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:46:47.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:46:47.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:46:47.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:46:47.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:46:47.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:46:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:46:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.657045 -999.00  +27.50   6.69     11   -4.90 1 1 1 1 1   887    0 31.90 8.44 ----- 14.3 6.7 227.9 10.3 31.1 -32.1 31.3 -32.9 32.7 -29.9 32.8 -31.6
2025-11-25T17:46:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:46:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:46:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.657045
2025-11-25T17:46:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:46:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:46:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:46:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:46:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:46:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:46:18', tmtdew=39.78, humidity=6.69, cloud=0.0, wind=7.11, temperature=27.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:46:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:46:47.705 [DEBUG] [Thread-3017] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:46:47.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:46:47.809 [DEBUG] [Thread-3020] [transport.py] [_log()] starting thread (client mode): 0x7376c790
2025-11-25T17:46:47.809 [DEBUG] [Thread-3020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:46:47.824 [DEBUG] [Thread-3020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:46:47.824 [INFO] [Thread-3020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:46:47.832 [DEBUG] [Thread-3020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:46:47.832 [DEBUG] [Thread-3020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:46:47.832 [DEBUG] [Thread-3020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:46:47.833 [DEBUG] [Thread-3020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:46:47.833 [DEBUG] [Thread-3020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:46:47.833 [DEBUG] [Thread-3020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:46:47.833 [DEBUG] [Thread-3020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:46:47.833 [DEBUG] [Thread-3020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:46:47.833 [DEBUG] [Thread-3020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:46:47.833 [DEBUG] [Thread-3020] [transport.py] [_log()] client lang: <none>
2025-11-25T17:46:47.833 [DEBUG] [Thread-3020] [transport.py] [_log()] server lang: <none>
2025-11-25T17:46:47.834 [DEBUG] [Thread-3020] [transport.py] [_log()] kex follows: False
2025-11-25T17:46:47.834 [DEBUG] [Thread-3020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:46:47.834 [DEBUG] [Thread-3020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:46:47.834 [DEBUG] [Thread-3020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:46:47.834 [DEBUG] [Thread-3020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:46:47.834 [DEBUG] [Thread-3020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:46:47.834 [DEBUG] [Thread-3020] [transport.py] [_log()] Compression: none
2025-11-25T17:46:47.835 [DEBUG] [Thread-3020] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:46:47.892 [DEBUG] [Thread-3020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:46:47.892 [DEBUG] [Thread-3020] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:46:47.893 [DEBUG] [Thread-3020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:46:47.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:46:47.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:46:47.951 [DEBUG] [Thread-3020] [transport.py] [_log()] userauth is OK
2025-11-25T17:46:47.951 [DEBUG] [Thread-3020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:46:47.952 [DEBUG] [Thread-3020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:46:47.952 [DEBUG] [Thread-3020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:46:47.952 [DEBUG] [Thread-3020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:46:47.971 [INFO] [Thread-3020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:46:47.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:46:47.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:46:48.786 [DEBUG] [Thread-3020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:46:48.787 [DEBUG] [Thread-3020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:46:48.835 [DEBUG] [Thread-3020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:46:48.835 [DEBUG] [Thread-3020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:46:48.844 [DEBUG] [Thread-3020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:46:48.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:46:48.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:46:48.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:46:48.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:46:48.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:46:48.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:46:48.881 [DEBUG] [Thread-3020] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:47:00.545 [DEBUG] [Thread-3022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:47:01.747 [DEBUG] [Thread-3023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:47:16.809 [DEBUG] [Thread-3024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:47:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:47:18.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:47:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:47:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 46, 50), 40.13, 6.14, 0.0, 6.0, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:47:19.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:46:50
2025-11-25T17:47:19.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:47:19.817 [DEBUG] [Thread-3025] [transport.py] [_log()] starting thread (client mode): 0x7378f790
2025-11-25T17:47:19.817 [DEBUG] [Thread-3025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:47:19.837 [DEBUG] [Thread-3025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:47:19.837 [INFO] [Thread-3025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:47:19.840 [DEBUG] [Thread-3025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:47:19.841 [DEBUG] [Thread-3025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:47:19.841 [DEBUG] [Thread-3025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:47:19.841 [DEBUG] [Thread-3025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:47:19.841 [DEBUG] [Thread-3025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:47:19.841 [DEBUG] [Thread-3025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:47:19.841 [DEBUG] [Thread-3025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:47:19.841 [DEBUG] [Thread-3025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:47:19.841 [DEBUG] [Thread-3025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:47:19.841 [DEBUG] [Thread-3025] [transport.py] [_log()] client lang: <none>
2025-11-25T17:47:19.842 [DEBUG] [Thread-3025] [transport.py] [_log()] server lang: <none>
2025-11-25T17:47:19.842 [DEBUG] [Thread-3025] [transport.py] [_log()] kex follows: False
2025-11-25T17:47:19.842 [DEBUG] [Thread-3025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:47:19.842 [DEBUG] [Thread-3025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:47:19.842 [DEBUG] [Thread-3025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:47:19.842 [DEBUG] [Thread-3025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:47:19.842 [DEBUG] [Thread-3025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:47:19.843 [DEBUG] [Thread-3025] [transport.py] [_log()] Compression: none
2025-11-25T17:47:19.843 [DEBUG] [Thread-3025] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:47:19.861 [DEBUG] [Thread-3025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:47:19.862 [DEBUG] [Thread-3025] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:47:19.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:47:19.863 [DEBUG] [Thread-3025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:47:19.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:47:19.865 [DEBUG] [Thread-3025] [transport.py] [_log()] userauth is OK
2025-11-25T17:47:19.865 [DEBUG] [Thread-3025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:47:19.866 [DEBUG] [Thread-3025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:47:19.866 [DEBUG] [Thread-3025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:47:19.866 [DEBUG] [Thread-3025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:47:19.902 [INFO] [Thread-3025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:47:19.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:47:20.735 [DEBUG] [Thread-3025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:47:20.735 [DEBUG] [Thread-3025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:47:20.736 [DEBUG] [Thread-3025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:47:20.776 [DEBUG] [Thread-3025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:47:20.776 [DEBUG] [Thread-3025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:47:20.779 [DEBUG] [Thread-3025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:47:20.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:47:20.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:47:20.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:47:20.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:47:20.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:47:20.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:47:20.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:47:20.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:47:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:47:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.657392 -999.00  +27.70   7.43     11   -5.00 1 1 1 1 1   887    0 32.06 9.89 ----- 6.5 7.4 284.5 22.8 30.9 -32.1 31.4 -31.3 32.7 -32.6 32.8 -32.9
2025-11-25T17:47:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:47:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:47:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.657392
2025-11-25T17:47:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:47:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:47:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:47:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:47:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:47:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:46:50', tmtdew=40.13, humidity=6.14, cloud=0.0, wind=6.0, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:46:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:47:20.806 [DEBUG] [Thread-3025] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:47:20.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:47:20.909 [DEBUG] [Thread-3028] [transport.py] [_log()] starting thread (client mode): 0x70d03820
2025-11-25T17:47:20.909 [DEBUG] [Thread-3028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:47:20.928 [DEBUG] [Thread-3028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:47:20.928 [INFO] [Thread-3028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:47:20.939 [DEBUG] [Thread-3028] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:47:20.940 [DEBUG] [Thread-3028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:47:20.940 [DEBUG] [Thread-3028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:47:20.940 [DEBUG] [Thread-3028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:47:20.940 [DEBUG] [Thread-3028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:47:20.940 [DEBUG] [Thread-3028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:47:20.940 [DEBUG] [Thread-3028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:47:20.940 [DEBUG] [Thread-3028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:47:20.941 [DEBUG] [Thread-3028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:47:20.941 [DEBUG] [Thread-3028] [transport.py] [_log()] client lang: <none>
2025-11-25T17:47:20.941 [DEBUG] [Thread-3028] [transport.py] [_log()] server lang: <none>
2025-11-25T17:47:20.941 [DEBUG] [Thread-3028] [transport.py] [_log()] kex follows: False
2025-11-25T17:47:20.941 [DEBUG] [Thread-3028] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:47:20.941 [DEBUG] [Thread-3028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:47:20.941 [DEBUG] [Thread-3028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:47:20.941 [DEBUG] [Thread-3028] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:47:20.941 [DEBUG] [Thread-3028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:47:20.942 [DEBUG] [Thread-3028] [transport.py] [_log()] Compression: none
2025-11-25T17:47:20.942 [DEBUG] [Thread-3028] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:47:20.996 [DEBUG] [Thread-3028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:47:20.996 [DEBUG] [Thread-3028] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:47:20.997 [DEBUG] [Thread-3028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:47:20.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:47:20.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:47:21.052 [DEBUG] [Thread-3028] [transport.py] [_log()] userauth is OK
2025-11-25T17:47:21.052 [DEBUG] [Thread-3028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:47:21.052 [DEBUG] [Thread-3028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:47:21.052 [DEBUG] [Thread-3028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:47:21.053 [DEBUG] [Thread-3028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:47:21.071 [INFO] [Thread-3028] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:47:21.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:47:21.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:47:21.908 [DEBUG] [Thread-3028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:47:21.908 [DEBUG] [Thread-3028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:47:21.956 [DEBUG] [Thread-3028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:47:21.956 [DEBUG] [Thread-3028] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:47:21.965 [DEBUG] [Thread-3028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:47:21.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:47:21.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:47:21.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:47:21.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:47:21.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:47:21.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:47:22.002 [DEBUG] [Thread-3028] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:47:31.852 [DEBUG] [Thread-3030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:47:46.914 [DEBUG] [Thread-3031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:47:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:47:52.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:47:52.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:47:52.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 47, 22), 40.03, 6.19, 0.0, 6.32, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:47:52.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:47:22
2025-11-25T17:47:52.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:47:52.936 [DEBUG] [Thread-3032] [transport.py] [_log()] starting thread (client mode): 0x7376e5c0
2025-11-25T17:47:52.936 [DEBUG] [Thread-3032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:47:52.957 [DEBUG] [Thread-3032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:47:52.957 [INFO] [Thread-3032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:47:52.960 [DEBUG] [Thread-3032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:47:52.961 [DEBUG] [Thread-3032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:47:52.961 [DEBUG] [Thread-3032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:47:52.961 [DEBUG] [Thread-3032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:47:52.961 [DEBUG] [Thread-3032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:47:52.961 [DEBUG] [Thread-3032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:47:52.961 [DEBUG] [Thread-3032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:47:52.961 [DEBUG] [Thread-3032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:47:52.962 [DEBUG] [Thread-3032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:47:52.962 [DEBUG] [Thread-3032] [transport.py] [_log()] client lang: <none>
2025-11-25T17:47:52.962 [DEBUG] [Thread-3032] [transport.py] [_log()] server lang: <none>
2025-11-25T17:47:52.962 [DEBUG] [Thread-3032] [transport.py] [_log()] kex follows: False
2025-11-25T17:47:52.962 [DEBUG] [Thread-3032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:47:52.962 [DEBUG] [Thread-3032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:47:52.962 [DEBUG] [Thread-3032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:47:52.962 [DEBUG] [Thread-3032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:47:52.963 [DEBUG] [Thread-3032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:47:52.963 [DEBUG] [Thread-3032] [transport.py] [_log()] Compression: none
2025-11-25T17:47:52.963 [DEBUG] [Thread-3032] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:47:52.982 [DEBUG] [Thread-3032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:47:52.982 [DEBUG] [Thread-3032] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:47:52.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:47:52.984 [DEBUG] [Thread-3032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:47:52.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:47:52.985 [DEBUG] [Thread-3032] [transport.py] [_log()] userauth is OK
2025-11-25T17:47:52.985 [DEBUG] [Thread-3032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:47:52.986 [DEBUG] [Thread-3032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:47:52.986 [DEBUG] [Thread-3032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:47:52.986 [DEBUG] [Thread-3032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:47:53.010 [INFO] [Thread-3032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:47:53.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:47:53.669 [DEBUG] [Thread-3032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:47:53.670 [DEBUG] [Thread-3032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:47:53.670 [DEBUG] [Thread-3032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:47:53.711 [DEBUG] [Thread-3032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:47:53.711 [DEBUG] [Thread-3032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:47:53.714 [DEBUG] [Thread-3032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:47:53.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:47:53.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:47:53.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:47:53.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:47:53.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:47:53.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:47:53.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:47:53.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:47:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:47:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.657739 -999.00  +27.70   5.90     11   -5.00 1 1 1 1 1   887    0 32.24 12.78 ----- 9.5 5.9 296.0 7.7 31.1 -31.9 31.4 -31.3 32.7 -30.0 32.9 -31.4
2025-11-25T17:47:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:47:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:47:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.657739
2025-11-25T17:47:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:47:53.738 [DEBUG] [Thread-3032] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:47:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:47:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:47:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:47:53.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:47:53.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:47:22', tmtdew=40.03, humidity=6.19, cloud=0.0, wind=6.32, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:47:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:47:53.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:47:53.857 [DEBUG] [Thread-3035] [transport.py] [_log()] starting thread (client mode): 0x70d03610
2025-11-25T17:47:53.857 [DEBUG] [Thread-3035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:47:53.876 [DEBUG] [Thread-3035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:47:53.877 [INFO] [Thread-3035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:47:53.885 [DEBUG] [Thread-3035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:47:53.885 [DEBUG] [Thread-3035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:47:53.885 [DEBUG] [Thread-3035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:47:53.885 [DEBUG] [Thread-3035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:47:53.885 [DEBUG] [Thread-3035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:47:53.885 [DEBUG] [Thread-3035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:47:53.886 [DEBUG] [Thread-3035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:47:53.886 [DEBUG] [Thread-3035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:47:53.886 [DEBUG] [Thread-3035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:47:53.886 [DEBUG] [Thread-3035] [transport.py] [_log()] client lang: <none>
2025-11-25T17:47:53.886 [DEBUG] [Thread-3035] [transport.py] [_log()] server lang: <none>
2025-11-25T17:47:53.886 [DEBUG] [Thread-3035] [transport.py] [_log()] kex follows: False
2025-11-25T17:47:53.886 [DEBUG] [Thread-3035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:47:53.886 [DEBUG] [Thread-3035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:47:53.887 [DEBUG] [Thread-3035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:47:53.887 [DEBUG] [Thread-3035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:47:53.887 [DEBUG] [Thread-3035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:47:53.887 [DEBUG] [Thread-3035] [transport.py] [_log()] Compression: none
2025-11-25T17:47:53.887 [DEBUG] [Thread-3035] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:47:53.945 [DEBUG] [Thread-3035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:47:53.946 [DEBUG] [Thread-3035] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:47:53.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:47:53.948 [DEBUG] [Thread-3035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:47:53.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:47:54.005 [DEBUG] [Thread-3035] [transport.py] [_log()] userauth is OK
2025-11-25T17:47:54.005 [DEBUG] [Thread-3035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:47:54.005 [DEBUG] [Thread-3035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:47:54.006 [DEBUG] [Thread-3035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:47:54.006 [DEBUG] [Thread-3035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:47:54.024 [INFO] [Thread-3035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:47:54.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:47:54.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:47:54.858 [DEBUG] [Thread-3035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:47:54.858 [DEBUG] [Thread-3035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:47:54.905 [DEBUG] [Thread-3035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:47:54.905 [DEBUG] [Thread-3035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:47:54.914 [DEBUG] [Thread-3035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:47:54.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:47:54.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:47: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') -> 00000000
2025-11-25T17:47:54.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:47:54.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:47:54.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:47:54.946 [DEBUG] [Thread-3035] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:48:01.273 [DEBUG] [Thread-3037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:48:01.961 [DEBUG] [Thread-3038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:48:17.012 [DEBUG] [Thread-3039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:48:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:48:24.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:48:24.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:48:25.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 47, 54), 40.26, 6.16, 0.0, 6.44, 27.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:48:25.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:47:54
2025-11-25T17:48:25.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:48:25.898 [DEBUG] [Thread-3040] [transport.py] [_log()] starting thread (client mode): 0x7378cfa0
2025-11-25T17:48:25.898 [DEBUG] [Thread-3040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:48:25.919 [DEBUG] [Thread-3040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:48:25.919 [INFO] [Thread-3040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:48:25.922 [DEBUG] [Thread-3040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:48:25.922 [DEBUG] [Thread-3040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:48:25.922 [DEBUG] [Thread-3040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:48:25.922 [DEBUG] [Thread-3040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:48:25.922 [DEBUG] [Thread-3040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:48:25.922 [DEBUG] [Thread-3040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:48:25.923 [DEBUG] [Thread-3040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:48:25.923 [DEBUG] [Thread-3040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:48:25.923 [DEBUG] [Thread-3040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:48:25.923 [DEBUG] [Thread-3040] [transport.py] [_log()] client lang: <none>
2025-11-25T17:48:25.923 [DEBUG] [Thread-3040] [transport.py] [_log()] server lang: <none>
2025-11-25T17:48:25.923 [DEBUG] [Thread-3040] [transport.py] [_log()] kex follows: False
2025-11-25T17:48:25.923 [DEBUG] [Thread-3040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:48:25.923 [DEBUG] [Thread-3040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:48:25.923 [DEBUG] [Thread-3040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:48:25.924 [DEBUG] [Thread-3040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:48:25.924 [DEBUG] [Thread-3040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:48:25.924 [DEBUG] [Thread-3040] [transport.py] [_log()] Compression: none
2025-11-25T17:48:25.924 [DEBUG] [Thread-3040] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:48:25.947 [DEBUG] [Thread-3040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:48:25.948 [DEBUG] [Thread-3040] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:48:25.948 [DEBUG] [Thread-3040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:48:25.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:48:25.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:48:25.950 [DEBUG] [Thread-3040] [transport.py] [_log()] userauth is OK
2025-11-25T17:48:25.950 [DEBUG] [Thread-3040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:48:25.950 [DEBUG] [Thread-3040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:48:25.950 [DEBUG] [Thread-3040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:48:25.950 [DEBUG] [Thread-3040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:48:25.968 [INFO] [Thread-3040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:48:25.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:48:26.766 [DEBUG] [Thread-3040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:48:26.767 [DEBUG] [Thread-3040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:48:26.767 [DEBUG] [Thread-3040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:48:26.807 [DEBUG] [Thread-3040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:48:26.808 [DEBUG] [Thread-3040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:48:26.811 [DEBUG] [Thread-3040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:48:26.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:48:26.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:48:26.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:48:26.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:48:26.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:48:26.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:48:26.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:48:26.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:48:26.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:48:26.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.658086 -999.00  +27.80   3.58     11   -4.90 1 1 1 1 1   887    0 33.20 15.50 ----- 6.1 3.6 248.6 11.9 31.1 -31.7 31.5 -31.3 32.7 -29.5 32.9 -31.3
2025-11-25T17:48:26.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:48:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:48:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.658086
2025-11-25T17:48:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:48:26.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:48:26.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:48:26.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:48:26.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:48:26.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:47:54', tmtdew=40.26, humidity=6.16, cloud=0.0, wind=6.44, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:47:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:48:26.836 [DEBUG] [Thread-3040] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:48:26.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:48:26.940 [DEBUG] [Thread-3043] [transport.py] [_log()] starting thread (client mode): 0x73783f40
2025-11-25T17:48:26.940 [DEBUG] [Thread-3043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:48:26.954 [DEBUG] [Thread-3043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:48:26.954 [INFO] [Thread-3043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] client lang: <none>
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] server lang: <none>
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] kex follows: False
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] Compression: none
2025-11-25T17:48:26.962 [DEBUG] [Thread-3043] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:48:27.020 [DEBUG] [Thread-3043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:48:27.020 [DEBUG] [Thread-3043] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:48:27.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:48:27.020 [DEBUG] [Thread-3043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:48:27.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:48:27.077 [DEBUG] [Thread-3043] [transport.py] [_log()] userauth is OK
2025-11-25T17:48:27.077 [DEBUG] [Thread-3043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:48:27.077 [DEBUG] [Thread-3043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:48:27.077 [DEBUG] [Thread-3043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:48:27.078 [DEBUG] [Thread-3043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:48:27.092 [INFO] [Thread-3043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:48:27.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:48:27.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:48:27.904 [DEBUG] [Thread-3043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:48:27.904 [DEBUG] [Thread-3043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:48:27.952 [DEBUG] [Thread-3043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:48:27.952 [DEBUG] [Thread-3043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:48:27.960 [DEBUG] [Thread-3043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:48:27.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:48:27.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:48:27.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:48:27.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:48:27.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:48:27.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:48:27.992 [DEBUG] [Thread-3043] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:48:32.052 [DEBUG] [Thread-3045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:48:47.120 [DEBUG] [Thread-3046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:48:58.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:48:58.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:48:58.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:48:58.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 48, 26), 40.31, 6.14, 0.0, 6.72, 27.7, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:48:58.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:48:26
2025-11-25T17:48:58.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:48:58.950 [DEBUG] [Thread-3047] [transport.py] [_log()] starting thread (client mode): 0x73782350
2025-11-25T17:48:58.950 [DEBUG] [Thread-3047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:48:58.970 [DEBUG] [Thread-3047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:48:58.970 [INFO] [Thread-3047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:48:58.973 [DEBUG] [Thread-3047] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] client lang: <none>
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] server lang: <none>
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] kex follows: False
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] Compression: none
2025-11-25T17:48:58.974 [DEBUG] [Thread-3047] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:48:58.990 [DEBUG] [Thread-3047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:48:58.990 [DEBUG] [Thread-3047] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:48:58.991 [DEBUG] [Thread-3047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:48:58.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:48:58.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:48:58.992 [DEBUG] [Thread-3047] [transport.py] [_log()] userauth is OK
2025-11-25T17:48:58.992 [DEBUG] [Thread-3047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:48:58.992 [DEBUG] [Thread-3047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:48:58.992 [DEBUG] [Thread-3047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:48:58.992 [DEBUG] [Thread-3047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:48:59.005 [INFO] [Thread-3047] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:48:59.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:48:59.662 [DEBUG] [Thread-3047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:48:59.663 [DEBUG] [Thread-3047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:48:59.663 [DEBUG] [Thread-3047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:48:59.703 [DEBUG] [Thread-3047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:48:59.703 [DEBUG] [Thread-3047] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:48:59.706 [DEBUG] [Thread-3047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:48:59.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:48:59.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:48:59.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:48:59.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:48:59.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:48:59.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:48:59.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.658433 -999.00  +27.70   7.45     11   -5.00 1 1 1 1 1   887    0 33.11 18.07 ----- 10.7 7.5 267.6 9.2 31.1 -32.9 31.5 -31.6 32.8 -30.3 32.8 -32.7
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.658433
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:48:59.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:48:26', tmtdew=40.31, humidity=6.14, cloud=0.0, wind=6.72, temperature=27.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:48:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:48:59.727 [DEBUG] [Thread-3047] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:48:59.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:48:59.822 [DEBUG] [Thread-3050] [transport.py] [_log()] starting thread (client mode): 0x70d00a00
2025-11-25T17:48:59.822 [DEBUG] [Thread-3050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:48:59.838 [DEBUG] [Thread-3050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:48:59.838 [INFO] [Thread-3050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:48:59.845 [DEBUG] [Thread-3050] [transport.py] [_log()] client lang: <none>
2025-11-25T17:48:59.846 [DEBUG] [Thread-3050] [transport.py] [_log()] server lang: <none>
2025-11-25T17:48:59.846 [DEBUG] [Thread-3050] [transport.py] [_log()] kex follows: False
2025-11-25T17:48:59.846 [DEBUG] [Thread-3050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:48:59.846 [DEBUG] [Thread-3050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:48:59.846 [DEBUG] [Thread-3050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:48:59.846 [DEBUG] [Thread-3050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:48:59.846 [DEBUG] [Thread-3050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:48:59.846 [DEBUG] [Thread-3050] [transport.py] [_log()] Compression: none
2025-11-25T17:48:59.846 [DEBUG] [Thread-3050] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:48:59.900 [DEBUG] [Thread-3050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:48:59.901 [DEBUG] [Thread-3050] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:48:59.901 [DEBUG] [Thread-3050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:48:59.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:48:59.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:48:59.958 [DEBUG] [Thread-3050] [transport.py] [_log()] userauth is OK
2025-11-25T17:48:59.958 [DEBUG] [Thread-3050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:48:59.958 [DEBUG] [Thread-3050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:48:59.958 [DEBUG] [Thread-3050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:48:59.958 [DEBUG] [Thread-3050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:48:59.976 [INFO] [Thread-3050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:48:59.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:48:59.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:49:00.809 [DEBUG] [Thread-3050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:49:00.809 [DEBUG] [Thread-3050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:49:00.856 [DEBUG] [Thread-3050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:49:00.856 [DEBUG] [Thread-3050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:49:00.865 [DEBUG] [Thread-3050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:49:00.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:49: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')
2025-11-25T17:49:00.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:49:00.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:49:00.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:49:00.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:49:00.899 [DEBUG] [Thread-3050] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:49:02.027 [DEBUG] [Thread-3052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:49:02.165 [DEBUG] [Thread-3053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:49:17.239 [DEBUG] [Thread-3054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:49:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:49:30.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:49:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:49:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 48, 58), 40.18, 6.06, 0.0, 5.26, 27.55, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:49:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:48:58
2025-11-25T17:49:31.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:49:31.930 [DEBUG] [Thread-3055] [transport.py] [_log()] starting thread (client mode): 0x70d0ce20
2025-11-25T17:49:31.930 [DEBUG] [Thread-3055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:49:31.951 [DEBUG] [Thread-3055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:49:31.951 [INFO] [Thread-3055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] client lang: <none>
2025-11-25T17:49:31.954 [DEBUG] [Thread-3055] [transport.py] [_log()] server lang: <none>
2025-11-25T17:49:31.955 [DEBUG] [Thread-3055] [transport.py] [_log()] kex follows: False
2025-11-25T17:49:31.955 [DEBUG] [Thread-3055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:49:31.955 [DEBUG] [Thread-3055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:49:31.955 [DEBUG] [Thread-3055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:49:31.955 [DEBUG] [Thread-3055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:49:31.955 [DEBUG] [Thread-3055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:49:31.955 [DEBUG] [Thread-3055] [transport.py] [_log()] Compression: none
2025-11-25T17:49:31.955 [DEBUG] [Thread-3055] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:49:31.969 [DEBUG] [Thread-3055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:49:31.969 [DEBUG] [Thread-3055] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:49:31.969 [DEBUG] [Thread-3055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:49:31.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:49:31.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:49:31.970 [DEBUG] [Thread-3055] [transport.py] [_log()] userauth is OK
2025-11-25T17:49:31.970 [DEBUG] [Thread-3055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:49:31.970 [DEBUG] [Thread-3055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:49:31.970 [DEBUG] [Thread-3055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:49:31.970 [DEBUG] [Thread-3055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:49:31.996 [INFO] [Thread-3055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:49:31.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:49:32.279 [DEBUG] [Thread-3057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:49:32.740 [DEBUG] [Thread-3055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:49:32.741 [DEBUG] [Thread-3055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:49:32.741 [DEBUG] [Thread-3055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:49:32.781 [DEBUG] [Thread-3055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:49:32.781 [DEBUG] [Thread-3055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:49:32.784 [DEBUG] [Thread-3055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:49:32.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:49:32.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:49:32.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:49:32.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:49:32.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:49:32.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:49:32.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:49:32.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:49:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:49:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.658781 -999.00  +27.50   6.75     11   -5.10 1 1 1 1 1   887    0 33.19 20.26 ----- 6.1 6.8 269.2 12.6 31.1 -32.7 31.5 -31.8 32.6 -29.8 32.8 -31.8
2025-11-25T17:49:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:49:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:49:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.658781
2025-11-25T17:49:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:49:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:49:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:49:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:49:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:49:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:48:58', tmtdew=40.18, humidity=6.06, cloud=0.0, wind=5.26, temperature=27.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:48:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:49:32.801 [DEBUG] [Thread-3055] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:49:32.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:49:32.897 [DEBUG] [Thread-3059] [transport.py] [_log()] starting thread (client mode): 0x70d1f0d0
2025-11-25T17:49:32.898 [DEBUG] [Thread-3059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:49:32.912 [DEBUG] [Thread-3059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:49:32.912 [INFO] [Thread-3059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] client lang: <none>
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] server lang: <none>
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] kex follows: False
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] Compression: none
2025-11-25T17:49:32.920 [DEBUG] [Thread-3059] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:49:32.978 [DEBUG] [Thread-3059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:49:32.978 [DEBUG] [Thread-3059] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:49:32.978 [DEBUG] [Thread-3059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:49:32.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:49:32.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:49:33.038 [DEBUG] [Thread-3059] [transport.py] [_log()] userauth is OK
2025-11-25T17:49:33.038 [DEBUG] [Thread-3059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:49:33.038 [DEBUG] [Thread-3059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:49:33.038 [DEBUG] [Thread-3059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:49:33.038 [DEBUG] [Thread-3059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:49:33.055 [INFO] [Thread-3059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:49:33.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:49:33.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:49:33.890 [DEBUG] [Thread-3059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:49:33.890 [DEBUG] [Thread-3059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:49:33.938 [DEBUG] [Thread-3059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:49:33.938 [DEBUG] [Thread-3059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:49:33.947 [DEBUG] [Thread-3059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:49:33.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:49:33.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:49:33.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:49:33.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:49:33.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:49:33.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:49:33.988 [DEBUG] [Thread-3059] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:49:47.321 [DEBUG] [Thread-3061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:50:02.387 [DEBUG] [Thread-3062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:50:02.779 [DEBUG] [Thread-3063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:50:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:50:04.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:50:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:50:04.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 49, 30), 39.96, 6.16, 0.0, 6.25, 27.48, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:50:04.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:49:30
2025-11-25T17:50:04.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:50:05.000 [DEBUG] [Thread-3064] [transport.py] [_log()] starting thread (client mode): 0x70d01660
2025-11-25T17:50:05.000 [DEBUG] [Thread-3064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:50:05.021 [DEBUG] [Thread-3064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:50:05.022 [INFO] [Thread-3064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] client lang: <none>
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] server lang: <none>
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] kex follows: False
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:50:05.025 [DEBUG] [Thread-3064] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:50:05.026 [DEBUG] [Thread-3064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:50:05.026 [DEBUG] [Thread-3064] [transport.py] [_log()] Compression: none
2025-11-25T17:50:05.026 [DEBUG] [Thread-3064] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:50:05.041 [DEBUG] [Thread-3064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:50:05.042 [DEBUG] [Thread-3064] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:50:05.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:50:05.042 [DEBUG] [Thread-3064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:50:05.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:50:05.044 [DEBUG] [Thread-3064] [transport.py] [_log()] userauth is OK
2025-11-25T17:50:05.044 [DEBUG] [Thread-3064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:50:05.044 [DEBUG] [Thread-3064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:50:05.044 [DEBUG] [Thread-3064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:50:05.044 [DEBUG] [Thread-3064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:50:05.065 [INFO] [Thread-3064] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:50:05.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:50:05.934 [DEBUG] [Thread-3064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:50:05.934 [DEBUG] [Thread-3064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:50:05.934 [DEBUG] [Thread-3064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:50:05.975 [DEBUG] [Thread-3064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:50:05.975 [DEBUG] [Thread-3064] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:50:05.978 [DEBUG] [Thread-3064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:50:05.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:50:05.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:50:05.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:50:05.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:50:05.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:50:05.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:50:05.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:50:05.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:50:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:50:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.659128 -999.00  +27.60   4.99     11   -5.00 1 1 1 1 1   887    0 32.83 19.91 ----- 5.9 5.0 256.2 9.7 31.1 -32.2 31.6 -31.3 32.6 -31.2 32.8 -32.4
2025-11-25T17:50:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:50:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:50:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.659128
2025-11-25T17:50:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:50:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:50:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:50:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:50:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:50:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:49:30', tmtdew=39.96, humidity=6.16, cloud=0.0, wind=6.25, temperature=27.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:49:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:50:06.000 [DEBUG] [Thread-3064] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:50:06.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:50:06.093 [DEBUG] [Thread-3067] [transport.py] [_log()] starting thread (client mode): 0x7374db70
2025-11-25T17:50:06.094 [DEBUG] [Thread-3067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:50:06.109 [DEBUG] [Thread-3067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:50:06.109 [INFO] [Thread-3067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:50:06.116 [DEBUG] [Thread-3067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:50:06.116 [DEBUG] [Thread-3067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:50:06.116 [DEBUG] [Thread-3067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] client lang: <none>
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] server lang: <none>
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] kex follows: False
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] Compression: none
2025-11-25T17:50:06.117 [DEBUG] [Thread-3067] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:50:06.178 [DEBUG] [Thread-3067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:50:06.178 [DEBUG] [Thread-3067] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:50:06.178 [DEBUG] [Thread-3067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:50:06.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:50:06.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:50:06.239 [DEBUG] [Thread-3067] [transport.py] [_log()] userauth is OK
2025-11-25T17:50:06.240 [DEBUG] [Thread-3067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:50:06.240 [DEBUG] [Thread-3067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:50:06.240 [DEBUG] [Thread-3067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:50:06.240 [DEBUG] [Thread-3067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:50:06.254 [INFO] [Thread-3067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:50:06.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:50:06.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:50:07.097 [DEBUG] [Thread-3067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:50:07.097 [DEBUG] [Thread-3067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:50:07.149 [DEBUG] [Thread-3067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:50:07.149 [DEBUG] [Thread-3067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:50:07.157 [DEBUG] [Thread-3067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:50:07.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:50:07.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')
2025-11-25T17:50:07.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:50:07.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:50:07.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:50:07.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:50:07.189 [DEBUG] [Thread-3067] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:50:17.427 [DEBUG] [Thread-3069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:50:32.495 [DEBUG] [Thread-3070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:50:37.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:50:37.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:50:37.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:50:37.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 50, 34), 39.88, 6.66, 0.0, 10.47, 27.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:50:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:50:34
2025-11-25T17:50:37.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:50:38.131 [DEBUG] [Thread-3071] [transport.py] [_log()] starting thread (client mode): 0x7374e650
2025-11-25T17:50:38.132 [DEBUG] [Thread-3071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:50:38.151 [DEBUG] [Thread-3071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:50:38.151 [INFO] [Thread-3071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] client lang: <none>
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] server lang: <none>
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] kex follows: False
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:50:38.153 [DEBUG] [Thread-3071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:50:38.154 [DEBUG] [Thread-3071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:50:38.154 [DEBUG] [Thread-3071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:50:38.154 [DEBUG] [Thread-3071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:50:38.154 [DEBUG] [Thread-3071] [transport.py] [_log()] Compression: none
2025-11-25T17:50:38.154 [DEBUG] [Thread-3071] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:50:38.167 [DEBUG] [Thread-3071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:50:38.167 [DEBUG] [Thread-3071] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:50:38.168 [DEBUG] [Thread-3071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:50:38.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:50:38.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:50:38.170 [DEBUG] [Thread-3071] [transport.py] [_log()] userauth is OK
2025-11-25T17:50:38.170 [DEBUG] [Thread-3071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:50:38.170 [DEBUG] [Thread-3071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:50:38.170 [DEBUG] [Thread-3071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:50:38.171 [DEBUG] [Thread-3071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:50:38.184 [INFO] [Thread-3071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:50:38.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:50:38.833 [DEBUG] [Thread-3071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:50:38.833 [DEBUG] [Thread-3071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:50:38.833 [DEBUG] [Thread-3071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:50:38.873 [DEBUG] [Thread-3071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:50:38.874 [DEBUG] [Thread-3071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:50:38.877 [DEBUG] [Thread-3071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:50:38.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:50:38.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:50:38.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:50:38.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:50:38.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:50:38.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:50:38.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:50:38.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:50:38.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:50:38.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.659475 -999.00  +27.70  11.48     11   -5.00 1 1 1 1 1   887    0 33.16 21.50 ----- 11.4 11.5 284.2 14.3 31.1 -32.3 31.6 -31.4 32.5 -31.1 32.8 -31.4
2025-11-25T17:50:38.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:50:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:50:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.659475
2025-11-25T17:50:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:50:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:50:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:50:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:50:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:50:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:50:34', tmtdew=39.88, humidity=6.66, cloud=0.0, wind=10.47, temperature=27.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:49:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:50:38.903 [DEBUG] [Thread-3071] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:50:38.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:50:39.008 [DEBUG] [Thread-3074] [transport.py] [_log()] starting thread (client mode): 0x70d1f130
2025-11-25T17:50:39.009 [DEBUG] [Thread-3074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:50:39.023 [DEBUG] [Thread-3074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:50:39.024 [INFO] [Thread-3074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:50:39.031 [DEBUG] [Thread-3074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:50:39.031 [DEBUG] [Thread-3074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:50:39.031 [DEBUG] [Thread-3074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:50:39.031 [DEBUG] [Thread-3074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:50:39.031 [DEBUG] [Thread-3074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:50:39.031 [DEBUG] [Thread-3074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:50:39.031 [DEBUG] [Thread-3074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:50:39.031 [DEBUG] [Thread-3074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] client lang: <none>
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] server lang: <none>
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] kex follows: False
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] Compression: none
2025-11-25T17:50:39.032 [DEBUG] [Thread-3074] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:50:39.088 [DEBUG] [Thread-3074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:50:39.088 [DEBUG] [Thread-3074] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:50:39.089 [DEBUG] [Thread-3074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:50:39.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:50:39.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:50:39.145 [DEBUG] [Thread-3074] [transport.py] [_log()] userauth is OK
2025-11-25T17:50:39.145 [DEBUG] [Thread-3074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:50:39.145 [DEBUG] [Thread-3074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:50:39.145 [DEBUG] [Thread-3074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:50:39.145 [DEBUG] [Thread-3074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:50:39.169 [INFO] [Thread-3074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:50:39.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:50:39.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:50:40.005 [DEBUG] [Thread-3074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:50:40.005 [DEBUG] [Thread-3074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:50:40.052 [DEBUG] [Thread-3074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:50:40.052 [DEBUG] [Thread-3074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:50:40.061 [DEBUG] [Thread-3074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:50:40.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:50:40.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:50:40.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:50:40.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:50:40.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:50:40.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:50:40.095 [DEBUG] [Thread-3074] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:50:47.532 [DEBUG] [Thread-3076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:51:02.591 [DEBUG] [Thread-3077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:51:03.538 [DEBUG] [Thread-3078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:51:10.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:51:10.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:51:10.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:51:10.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 51, 6), 39.76, 6.71, 0.0, 9.94, 27.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:51:10.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:51:06
2025-11-25T17:51:10.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:51:11.028 [DEBUG] [Thread-3079] [transport.py] [_log()] starting thread (client mode): 0x7376c7f0
2025-11-25T17:51:11.028 [DEBUG] [Thread-3079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:51:11.049 [DEBUG] [Thread-3079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:51:11.049 [INFO] [Thread-3079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] client lang: <none>
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] server lang: <none>
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] kex follows: False
2025-11-25T17:51:11.050 [DEBUG] [Thread-3079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:51:11.051 [DEBUG] [Thread-3079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:51:11.051 [DEBUG] [Thread-3079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:51:11.051 [DEBUG] [Thread-3079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:51:11.051 [DEBUG] [Thread-3079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:51:11.051 [DEBUG] [Thread-3079] [transport.py] [_log()] Compression: none
2025-11-25T17:51:11.051 [DEBUG] [Thread-3079] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:51:11.060 [DEBUG] [Thread-3079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:51:11.061 [DEBUG] [Thread-3079] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:51:11.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:51:11.062 [DEBUG] [Thread-3079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:51:11.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:51:11.064 [DEBUG] [Thread-3079] [transport.py] [_log()] userauth is OK
2025-11-25T17:51:11.064 [DEBUG] [Thread-3079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:51:11.064 [DEBUG] [Thread-3079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:51:11.065 [DEBUG] [Thread-3079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:51:11.065 [DEBUG] [Thread-3079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:51:11.089 [INFO] [Thread-3079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:51:11.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:51:11.726 [DEBUG] [Thread-3079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:51:11.726 [DEBUG] [Thread-3079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:51:11.727 [DEBUG] [Thread-3079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:51:11.767 [DEBUG] [Thread-3079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:51:11.767 [DEBUG] [Thread-3079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:51:11.770 [DEBUG] [Thread-3079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:51:11.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:51:11.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:51:11.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:51:11.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:51:11.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:51:11.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:51:11.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:51:11.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:51:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:51:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.660170 -999.00  +27.70  10.78     11   -5.00 1 1 1 1 1   887    0 33.16 24.51 ----- 11.3 10.8 281.4 14.6 31.2 -32.5 31.6 -31.7 32.6 -30.1 32.8 -31.5
2025-11-25T17:51:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:51:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:51:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.660170
2025-11-25T17:51:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:51:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:51:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:51:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:51:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:51:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:51:06', tmtdew=39.76, humidity=6.71, cloud=0.0, wind=9.94, temperature=27.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:50:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:51:11.793 [DEBUG] [Thread-3079] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:51:11.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:51:11.899 [DEBUG] [Thread-3082] [transport.py] [_log()] starting thread (client mode): 0x737c7fd0
2025-11-25T17:51:11.899 [DEBUG] [Thread-3082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:51:11.914 [DEBUG] [Thread-3082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:51:11.914 [INFO] [Thread-3082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:51:11.922 [DEBUG] [Thread-3082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:51:11.922 [DEBUG] [Thread-3082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:51:11.922 [DEBUG] [Thread-3082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:51:11.922 [DEBUG] [Thread-3082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:51:11.922 [DEBUG] [Thread-3082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:51:11.923 [DEBUG] [Thread-3082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:51:11.923 [DEBUG] [Thread-3082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:51:11.923 [DEBUG] [Thread-3082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:51:11.923 [DEBUG] [Thread-3082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:51:11.923 [DEBUG] [Thread-3082] [transport.py] [_log()] client lang: <none>
2025-11-25T17:51:11.923 [DEBUG] [Thread-3082] [transport.py] [_log()] server lang: <none>
2025-11-25T17:51:11.923 [DEBUG] [Thread-3082] [transport.py] [_log()] kex follows: False
2025-11-25T17:51:11.924 [DEBUG] [Thread-3082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:51:11.924 [DEBUG] [Thread-3082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:51:11.924 [DEBUG] [Thread-3082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:51:11.924 [DEBUG] [Thread-3082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:51:11.924 [DEBUG] [Thread-3082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:51:11.925 [DEBUG] [Thread-3082] [transport.py] [_log()] Compression: none
2025-11-25T17:51:11.925 [DEBUG] [Thread-3082] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:51:11.981 [DEBUG] [Thread-3082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:51:11.982 [DEBUG] [Thread-3082] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:51:11.982 [DEBUG] [Thread-3082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:51:11.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:51:11.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:51:12.037 [DEBUG] [Thread-3082] [transport.py] [_log()] userauth is OK
2025-11-25T17:51:12.037 [DEBUG] [Thread-3082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:51:12.037 [DEBUG] [Thread-3082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:51:12.037 [DEBUG] [Thread-3082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:51:12.038 [DEBUG] [Thread-3082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:51:12.057 [INFO] [Thread-3082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:51:12.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:51:12.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:51:12.926 [DEBUG] [Thread-3082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:51:12.926 [DEBUG] [Thread-3082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:51:12.979 [DEBUG] [Thread-3082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:51:12.979 [DEBUG] [Thread-3082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:51:12.988 [DEBUG] [Thread-3082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:51:12.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:51:12.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:51:13.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:51:13.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:51:13.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:51:13.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:51:13.027 [DEBUG] [Thread-3082] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:51:17.639 [DEBUG] [Thread-3084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:51:32.706 [DEBUG] [Thread-3085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:51:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:51:43.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:51:43.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:51:43.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 51, 38), 39.75, 6.26, 0.0, 7.18, 27.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:51:43.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:51:38
2025-11-25T17:51:43.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:51:43.970 [DEBUG] [Thread-3086] [transport.py] [_log()] starting thread (client mode): 0x70d01120
2025-11-25T17:51:43.970 [DEBUG] [Thread-3086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:51:43.990 [DEBUG] [Thread-3086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:51:43.990 [INFO] [Thread-3086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] client lang: <none>
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] server lang: <none>
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] kex follows: False
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] Compression: none
2025-11-25T17:51:43.992 [DEBUG] [Thread-3086] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:51:44.010 [DEBUG] [Thread-3086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:51:44.010 [DEBUG] [Thread-3086] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:51:44.010 [DEBUG] [Thread-3086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:51:44.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:51:44.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:51:44.011 [DEBUG] [Thread-3086] [transport.py] [_log()] userauth is OK
2025-11-25T17:51:44.012 [DEBUG] [Thread-3086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:51:44.012 [DEBUG] [Thread-3086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:51:44.012 [DEBUG] [Thread-3086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:51:44.012 [DEBUG] [Thread-3086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:51:44.034 [INFO] [Thread-3086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:51:44.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:51:44.648 [DEBUG] [Thread-3086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:51:44.649 [DEBUG] [Thread-3086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:51:44.649 [DEBUG] [Thread-3086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:51:44.690 [DEBUG] [Thread-3086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:51:44.690 [DEBUG] [Thread-3086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:51:44.693 [DEBUG] [Thread-3086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:51:44.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:51:44.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:51:44.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:51:44.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:51:44.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:51:44.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:51:44.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:51:44.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:51:44.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:51:44.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.660517 -999.00  +27.70   8.73     11   -5.00 1 1 1 1 1   887    0 33.31 22.47 ----- 9.4 8.7 287.0 12.5 31.1 -32.5 31.6 -31.5 32.6 -30.6 32.7 -31.8
2025-11-25T17:51:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:51:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:51:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.660517
2025-11-25T17:51:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:51:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:51:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:51:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:51:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:51:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:51:38', tmtdew=39.75, humidity=6.26, cloud=0.0, wind=7.18, temperature=27.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:51:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:51:44.720 [DEBUG] [Thread-3086] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:51:44.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:51:44.831 [DEBUG] [Thread-3089] [transport.py] [_log()] starting thread (client mode): 0x70d038e0
2025-11-25T17:51:44.831 [DEBUG] [Thread-3089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:51:44.846 [DEBUG] [Thread-3089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:51:44.846 [INFO] [Thread-3089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:51:44.854 [DEBUG] [Thread-3089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:51:44.854 [DEBUG] [Thread-3089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:51:44.854 [DEBUG] [Thread-3089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:51:44.854 [DEBUG] [Thread-3089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:51:44.854 [DEBUG] [Thread-3089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:51:44.855 [DEBUG] [Thread-3089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:51:44.855 [DEBUG] [Thread-3089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:51:44.855 [DEBUG] [Thread-3089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:51:44.855 [DEBUG] [Thread-3089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:51:44.855 [DEBUG] [Thread-3089] [transport.py] [_log()] client lang: <none>
2025-11-25T17:51:44.855 [DEBUG] [Thread-3089] [transport.py] [_log()] server lang: <none>
2025-11-25T17:51:44.855 [DEBUG] [Thread-3089] [transport.py] [_log()] kex follows: False
2025-11-25T17:51:44.855 [DEBUG] [Thread-3089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:51:44.855 [DEBUG] [Thread-3089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:51:44.856 [DEBUG] [Thread-3089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:51:44.856 [DEBUG] [Thread-3089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:51:44.856 [DEBUG] [Thread-3089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:51:44.856 [DEBUG] [Thread-3089] [transport.py] [_log()] Compression: none
2025-11-25T17:51:44.856 [DEBUG] [Thread-3089] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:51:44.914 [DEBUG] [Thread-3089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:51:44.915 [DEBUG] [Thread-3089] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:51:44.915 [DEBUG] [Thread-3089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:51:44.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:51:44.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:51:44.970 [DEBUG] [Thread-3089] [transport.py] [_log()] userauth is OK
2025-11-25T17:51:44.971 [DEBUG] [Thread-3089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:51:44.971 [DEBUG] [Thread-3089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:51:44.971 [DEBUG] [Thread-3089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:51:44.971 [DEBUG] [Thread-3089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:51:44.989 [INFO] [Thread-3089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:51:44.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:51:44.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:51:45.774 [DEBUG] [Thread-3089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:51:45.774 [DEBUG] [Thread-3089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:51:45.821 [DEBUG] [Thread-3089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:51:45.822 [DEBUG] [Thread-3089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:51:45.831 [DEBUG] [Thread-3089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:51:45.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:51:45.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:51:45.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:51:45.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:51:45.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:51:45.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:51:45.867 [DEBUG] [Thread-3089] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:51:47.749 [DEBUG] [Thread-3091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:52:02.825 [DEBUG] [Thread-3092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:52:04.266 [DEBUG] [Thread-3093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:52:15.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:52:15.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:52:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:52:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 52, 10), 39.67, 6.29, 0.0, 6.49, 27.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:52:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:52:10
2025-11-25T17:52:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:52:16.814 [DEBUG] [Thread-3094] [transport.py] [_log()] starting thread (client mode): 0x7378d390
2025-11-25T17:52:16.814 [DEBUG] [Thread-3094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:52:16.835 [DEBUG] [Thread-3094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:52:16.835 [INFO] [Thread-3094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:52:16.838 [DEBUG] [Thread-3094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] client lang: <none>
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] server lang: <none>
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] kex follows: False
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:52:16.839 [DEBUG] [Thread-3094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:52:16.840 [DEBUG] [Thread-3094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:52:16.840 [DEBUG] [Thread-3094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:52:16.840 [DEBUG] [Thread-3094] [transport.py] [_log()] Compression: none
2025-11-25T17:52:16.840 [DEBUG] [Thread-3094] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:52:16.858 [DEBUG] [Thread-3094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:52:16.859 [DEBUG] [Thread-3094] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:52:16.860 [DEBUG] [Thread-3094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:52:16.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:52:16.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:52:16.861 [DEBUG] [Thread-3094] [transport.py] [_log()] userauth is OK
2025-11-25T17:52:16.862 [DEBUG] [Thread-3094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:52:16.862 [DEBUG] [Thread-3094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:52:16.862 [DEBUG] [Thread-3094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:52:16.862 [DEBUG] [Thread-3094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:52:16.886 [INFO] [Thread-3094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:52:16.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:52:17.527 [DEBUG] [Thread-3094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:52:17.527 [DEBUG] [Thread-3094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:52:17.528 [DEBUG] [Thread-3094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:52:17.568 [DEBUG] [Thread-3094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:52:17.568 [DEBUG] [Thread-3094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:52:17.571 [DEBUG] [Thread-3094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:52:17.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:52:17.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:52:17.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:52:17.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:52:17.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:52:17.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:52:17.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:52:17.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:52:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:52:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.660864 -999.00  +27.60  12.91     11   -5.10 1 1 1 1 1   887    0 32.57 22.10 ----- 7.7 12.9 273.4 15.1 31.2 -32.3 31.6 -31.9 32.6 -31.3 32.7 -31.7
2025-11-25T17:52:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:52:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:52:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.660864
2025-11-25T17:52:17.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:52:17.597 [DEBUG] [Thread-3094] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:52:17.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:52:17.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:52:17.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:52:17.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:52:17.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:52:10', tmtdew=39.67, humidity=6.29, cloud=0.0, wind=6.49, temperature=27.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:51:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:52:17.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:52:17.703 [DEBUG] [Thread-3097] [transport.py] [_log()] starting thread (client mode): 0x70d1e650
2025-11-25T17:52:17.704 [DEBUG] [Thread-3097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:52:17.718 [DEBUG] [Thread-3097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:52:17.718 [INFO] [Thread-3097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:52:17.726 [DEBUG] [Thread-3097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:52:17.726 [DEBUG] [Thread-3097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:52:17.726 [DEBUG] [Thread-3097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:52:17.726 [DEBUG] [Thread-3097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:52:17.726 [DEBUG] [Thread-3097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:52:17.726 [DEBUG] [Thread-3097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] client lang: <none>
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] server lang: <none>
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] kex follows: False
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] Compression: none
2025-11-25T17:52:17.727 [DEBUG] [Thread-3097] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:52:17.783 [DEBUG] [Thread-3097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:52:17.784 [DEBUG] [Thread-3097] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:52:17.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:52:17.785 [DEBUG] [Thread-3097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:52:17.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:52:17.839 [DEBUG] [Thread-3097] [transport.py] [_log()] userauth is OK
2025-11-25T17:52:17.839 [DEBUG] [Thread-3097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:52:17.839 [DEBUG] [Thread-3097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:52:17.840 [DEBUG] [Thread-3097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:52:17.840 [DEBUG] [Thread-3097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:52:17.858 [INFO] [Thread-3097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:52:17.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:52:17.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:52:17.875 [DEBUG] [Thread-3099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:52:18.698 [DEBUG] [Thread-3097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:52:18.698 [DEBUG] [Thread-3097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:52:18.746 [DEBUG] [Thread-3097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:52:18.746 [DEBUG] [Thread-3097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:52:18.755 [DEBUG] [Thread-3097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:52:18.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:52:18.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:52:18.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:52:18.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:52:18.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:52:18.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:52:18.792 [DEBUG] [Thread-3097] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:52:32.941 [DEBUG] [Thread-3100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:52:47.979 [DEBUG] [Thread-3101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:52:48.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:52:48.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:52:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:52:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 52, 42), 39.97, 6.27, 0.0, 7.06, 27.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:52:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:52:42
2025-11-25T17:52:49.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:52:49.750 [DEBUG] [Thread-3102] [transport.py] [_log()] starting thread (client mode): 0x737c4160
2025-11-25T17:52:49.750 [DEBUG] [Thread-3102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:52:49.771 [DEBUG] [Thread-3102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:52:49.771 [INFO] [Thread-3102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:52:49.774 [DEBUG] [Thread-3102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:52:49.774 [DEBUG] [Thread-3102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] client lang: <none>
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] server lang: <none>
2025-11-25T17:52:49.775 [DEBUG] [Thread-3102] [transport.py] [_log()] kex follows: False
2025-11-25T17:52:49.776 [DEBUG] [Thread-3102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:52:49.776 [DEBUG] [Thread-3102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:52:49.776 [DEBUG] [Thread-3102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:52:49.776 [DEBUG] [Thread-3102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:52:49.776 [DEBUG] [Thread-3102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:52:49.776 [DEBUG] [Thread-3102] [transport.py] [_log()] Compression: none
2025-11-25T17:52:49.776 [DEBUG] [Thread-3102] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:52:49.794 [DEBUG] [Thread-3102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:52:49.795 [DEBUG] [Thread-3102] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:52:49.796 [DEBUG] [Thread-3102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:52:49.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:52:49.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:52:49.798 [DEBUG] [Thread-3102] [transport.py] [_log()] userauth is OK
2025-11-25T17:52:49.798 [DEBUG] [Thread-3102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:52:49.798 [DEBUG] [Thread-3102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:52:49.798 [DEBUG] [Thread-3102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:52:49.798 [DEBUG] [Thread-3102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:52:49.822 [INFO] [Thread-3102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:52:49.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:52:50.488 [DEBUG] [Thread-3102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:52:50.488 [DEBUG] [Thread-3102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:52:50.489 [DEBUG] [Thread-3102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:52:50.529 [DEBUG] [Thread-3102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:52:50.530 [DEBUG] [Thread-3102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:52:50.533 [DEBUG] [Thread-3102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:52:50.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:52:50.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:52:50.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:52:50.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:52:50.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:52:50.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:52:50.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:52:50.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:52:50.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:52:50.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.661211 -999.00  +27.50   7.40     11   -5.00 1 1 1 1 1   887    0 33.19 22.03 ----- 8.9 7.4 267.6 10.1 31.1 -32.8 31.6 -31.6 32.6 -29.8 32.7 -31.5
2025-11-25T17:52:50.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:52:50.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:52:50.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.661211
2025-11-25T17:52:50.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:52:50.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:52:50.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:52:50.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:52:50.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:52:50.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:52:42', tmtdew=39.97, humidity=6.27, cloud=0.0, wind=7.06, temperature=27.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:52:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:52:50.558 [DEBUG] [Thread-3102] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:52:50.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:52:50.665 [DEBUG] [Thread-3105] [transport.py] [_log()] starting thread (client mode): 0x70d02800
2025-11-25T17:52:50.665 [DEBUG] [Thread-3105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:52:50.680 [DEBUG] [Thread-3105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:52:50.680 [INFO] [Thread-3105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] client lang: <none>
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] server lang: <none>
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] kex follows: False
2025-11-25T17:52:50.688 [DEBUG] [Thread-3105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:52:50.689 [DEBUG] [Thread-3105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:52:50.689 [DEBUG] [Thread-3105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:52:50.689 [DEBUG] [Thread-3105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:52:50.689 [DEBUG] [Thread-3105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:52:50.689 [DEBUG] [Thread-3105] [transport.py] [_log()] Compression: none
2025-11-25T17:52:50.690 [DEBUG] [Thread-3105] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:52:50.747 [DEBUG] [Thread-3105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:52:50.748 [DEBUG] [Thread-3105] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:52:50.748 [DEBUG] [Thread-3105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:52:50.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:52:50.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:52:50.803 [DEBUG] [Thread-3105] [transport.py] [_log()] userauth is OK
2025-11-25T17:52:50.803 [DEBUG] [Thread-3105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:52:50.803 [DEBUG] [Thread-3105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:52:50.804 [DEBUG] [Thread-3105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:52:50.804 [DEBUG] [Thread-3105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:52:50.827 [INFO] [Thread-3105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:52:50.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:52:50.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:52:51.673 [DEBUG] [Thread-3105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:52:51.673 [DEBUG] [Thread-3105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:52:51.721 [DEBUG] [Thread-3105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:52:51.721 [DEBUG] [Thread-3105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:52:51.730 [DEBUG] [Thread-3105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:52:51.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:52:51.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:52:51.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:52:51.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:52:51.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:52:51.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:52:51.764 [DEBUG] [Thread-3105] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:53:03.021 [DEBUG] [Thread-3107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:53:04.766 [DEBUG] [Thread-3108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:53:18.086 [DEBUG] [Thread-3109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:53:21.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:53:21.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:53:21.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:53:22.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 53, 14), 40.07, 6.23, 0.0, 7.55, 27.55, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:53:22.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:53:14
2025-11-25T17:53:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:53:22.696 [DEBUG] [Thread-3110] [transport.py] [_log()] starting thread (client mode): 0x70d019c0
2025-11-25T17:53:22.697 [DEBUG] [Thread-3110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:53:22.720 [DEBUG] [Thread-3110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:53:22.720 [INFO] [Thread-3110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:53:22.723 [DEBUG] [Thread-3110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:53:22.723 [DEBUG] [Thread-3110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:53:22.723 [DEBUG] [Thread-3110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:53:22.723 [DEBUG] [Thread-3110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] client lang: <none>
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] server lang: <none>
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] kex follows: False
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] Compression: none
2025-11-25T17:53:22.724 [DEBUG] [Thread-3110] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:53:22.738 [DEBUG] [Thread-3110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:53:22.738 [DEBUG] [Thread-3110] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:53:22.739 [DEBUG] [Thread-3110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:53:22.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:53:22.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:53:22.741 [DEBUG] [Thread-3110] [transport.py] [_log()] userauth is OK
2025-11-25T17:53:22.741 [DEBUG] [Thread-3110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:53:22.741 [DEBUG] [Thread-3110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:53:22.741 [DEBUG] [Thread-3110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:53:22.741 [DEBUG] [Thread-3110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:53:22.765 [INFO] [Thread-3110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:53:22.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:53:23.403 [DEBUG] [Thread-3110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:53:23.403 [DEBUG] [Thread-3110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:53:23.404 [DEBUG] [Thread-3110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:53:23.445 [DEBUG] [Thread-3110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:53:23.445 [DEBUG] [Thread-3110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:53:23.448 [DEBUG] [Thread-3110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:53:23.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:53:23.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:53:23.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:53:23.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:53:23.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:53:23.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:53:23.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:53:23.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:53:23.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:53:23.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.661558 -999.00  +27.60   8.10     11   -4.90 1 1 1 1 1   887    0 33.11 21.08 ----- 7.6 8.1 273.8 10.5 31.2 -32.7 31.6 -31.5 32.4 -32.7 32.6 -31.9
2025-11-25T17:53:23.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:53:23.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:53:23.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.661558
2025-11-25T17:53:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:53:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:53:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:53:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:53:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:53:23.474 [DEBUG] [Thread-3110] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:53:23.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:53:14', tmtdew=40.07, humidity=6.23, cloud=0.0, wind=7.55, temperature=27.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:52:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:53:23.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:53:23.579 [DEBUG] [Thread-3113] [transport.py] [_log()] starting thread (client mode): 0x70d01f90
2025-11-25T17:53:23.579 [DEBUG] [Thread-3113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:53:23.597 [DEBUG] [Thread-3113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:53:23.597 [INFO] [Thread-3113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:53:23.605 [DEBUG] [Thread-3113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:53:23.605 [DEBUG] [Thread-3113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:53:23.605 [DEBUG] [Thread-3113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:53:23.605 [DEBUG] [Thread-3113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:53:23.605 [DEBUG] [Thread-3113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:53:23.605 [DEBUG] [Thread-3113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] client lang: <none>
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] server lang: <none>
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] kex follows: False
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] Compression: none
2025-11-25T17:53:23.606 [DEBUG] [Thread-3113] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:53:23.664 [DEBUG] [Thread-3113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:53:23.665 [DEBUG] [Thread-3113] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:53:23.665 [DEBUG] [Thread-3113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:53:23.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:53:23.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:53:23.720 [DEBUG] [Thread-3113] [transport.py] [_log()] userauth is OK
2025-11-25T17:53:23.721 [DEBUG] [Thread-3113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:53:23.721 [DEBUG] [Thread-3113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:53:23.721 [DEBUG] [Thread-3113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:53:23.721 [DEBUG] [Thread-3113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:53:23.740 [INFO] [Thread-3113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:53:23.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:53:23.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:53:24.563 [DEBUG] [Thread-3113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:53:24.563 [DEBUG] [Thread-3113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:53:24.611 [DEBUG] [Thread-3113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:53:24.611 [DEBUG] [Thread-3113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:53:24.621 [DEBUG] [Thread-3113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:53:24.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:53:24.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:53:24.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:53:24.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:53:24.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:53:24.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:53:24.661 [DEBUG] [Thread-3113] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:53:33.131 [DEBUG] [Thread-3115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:53:48.196 [DEBUG] [Thread-3116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:53:54.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:53:54.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:53:54.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:53:55.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 53, 47), 40.02, 6.26, 0.0, 7.41, 27.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:53:55.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:53:47
2025-11-25T17:53:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:53:55.618 [DEBUG] [Thread-3117] [transport.py] [_log()] starting thread (client mode): 0x70d01d50
2025-11-25T17:53:55.618 [DEBUG] [Thread-3117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:53:55.633 [DEBUG] [Thread-3117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:53:55.634 [INFO] [Thread-3117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] client lang: <none>
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] server lang: <none>
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] kex follows: False
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] Compression: none
2025-11-25T17:53:55.637 [DEBUG] [Thread-3117] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:53:55.654 [DEBUG] [Thread-3117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:53:55.655 [DEBUG] [Thread-3117] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:53:55.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:53:55.656 [DEBUG] [Thread-3117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:53:55.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:53:55.658 [DEBUG] [Thread-3117] [transport.py] [_log()] userauth is OK
2025-11-25T17:53:55.658 [DEBUG] [Thread-3117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:53:55.658 [DEBUG] [Thread-3117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:53:55.658 [DEBUG] [Thread-3117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:53:55.658 [DEBUG] [Thread-3117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:53:55.680 [INFO] [Thread-3117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:53:55.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:53:56.328 [DEBUG] [Thread-3117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:53:56.329 [DEBUG] [Thread-3117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:53:56.329 [DEBUG] [Thread-3117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:53:56.370 [DEBUG] [Thread-3117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:53:56.370 [DEBUG] [Thread-3117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:53:56.373 [DEBUG] [Thread-3117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:53:56.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:53:56.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:53:56.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:53:56.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:53:56.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:53:56.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:53:56.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:53:56.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:53:56.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:53:56.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.661906 -999.00  +27.60  14.34     11   -5.10 1 1 1 1 1   887    0 32.75 21.58 ----- 12.5 14.3 276.2 17.1 31.1 -32.5 31.6 -31.7 32.5 -29.9 32.7 -31.6
2025-11-25T17:53:56.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:53:56.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:53:56.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.661906
2025-11-25T17:53:56.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:53:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:53:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:53:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:53:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:53:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:53:47', tmtdew=40.02, humidity=6.26, cloud=0.0, wind=7.41, temperature=27.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:53:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:53:56.399 [DEBUG] [Thread-3117] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:53:56.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:53:56.503 [DEBUG] [Thread-3120] [transport.py] [_log()] starting thread (client mode): 0x70d000a0
2025-11-25T17:53:56.503 [DEBUG] [Thread-3120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:53:56.517 [DEBUG] [Thread-3120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:53:56.517 [INFO] [Thread-3120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:53:56.525 [DEBUG] [Thread-3120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:53:56.525 [DEBUG] [Thread-3120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:53:56.525 [DEBUG] [Thread-3120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:53:56.525 [DEBUG] [Thread-3120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:53:56.525 [DEBUG] [Thread-3120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:53:56.525 [DEBUG] [Thread-3120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:53:56.525 [DEBUG] [Thread-3120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:53:56.525 [DEBUG] [Thread-3120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] client lang: <none>
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] server lang: <none>
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] kex follows: False
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] Compression: none
2025-11-25T17:53:56.526 [DEBUG] [Thread-3120] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:53:56.585 [DEBUG] [Thread-3120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:53:56.586 [DEBUG] [Thread-3120] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:53:56.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:53:56.587 [DEBUG] [Thread-3120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:53:56.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:53:56.648 [DEBUG] [Thread-3120] [transport.py] [_log()] userauth is OK
2025-11-25T17:53:56.648 [DEBUG] [Thread-3120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:53:56.648 [DEBUG] [Thread-3120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:53:56.649 [DEBUG] [Thread-3120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:53:56.649 [DEBUG] [Thread-3120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:53:56.671 [INFO] [Thread-3120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:53:56.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:53:56.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:53:57.489 [DEBUG] [Thread-3120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:53:57.490 [DEBUG] [Thread-3120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:53:57.538 [DEBUG] [Thread-3120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:53:57.538 [DEBUG] [Thread-3120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:53:57.547 [DEBUG] [Thread-3120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:53:57.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:53:57.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:53:57.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:53:57.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:53:57.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:53:57.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:53:57.584 [DEBUG] [Thread-3120] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:54:03.233 [DEBUG] [Thread-3122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:54:05.272 [DEBUG] [Thread-3123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:54:18.309 [DEBUG] [Thread-3124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:54:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:54:27.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:54:27.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:54:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 54, 19), 40.02, 6.26, 0.0, 7.85, 27.5, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:54:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:54:19
2025-11-25T17:54:28.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:54:28.573 [DEBUG] [Thread-3125] [transport.py] [_log()] starting thread (client mode): 0x70d1e650
2025-11-25T17:54:28.573 [DEBUG] [Thread-3125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:54:28.593 [DEBUG] [Thread-3125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:54:28.593 [INFO] [Thread-3125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:54:28.594 [DEBUG] [Thread-3125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:54:28.594 [DEBUG] [Thread-3125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:54:28.594 [DEBUG] [Thread-3125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:54:28.594 [DEBUG] [Thread-3125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] client lang: <none>
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] server lang: <none>
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] kex follows: False
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] Compression: none
2025-11-25T17:54:28.595 [DEBUG] [Thread-3125] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:54:28.602 [DEBUG] [Thread-3125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:54:28.602 [DEBUG] [Thread-3125] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:54:28.602 [DEBUG] [Thread-3125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:54:28.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:54:28.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:54:28.603 [DEBUG] [Thread-3125] [transport.py] [_log()] userauth is OK
2025-11-25T17:54:28.603 [DEBUG] [Thread-3125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:54:28.603 [DEBUG] [Thread-3125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:54:28.603 [DEBUG] [Thread-3125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:54:28.603 [DEBUG] [Thread-3125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:54:28.612 [INFO] [Thread-3125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:54:28.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:54:29.279 [DEBUG] [Thread-3125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:54:29.279 [DEBUG] [Thread-3125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:54:29.279 [DEBUG] [Thread-3125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:54:29.321 [DEBUG] [Thread-3125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:54:29.321 [DEBUG] [Thread-3125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:54:29.323 [DEBUG] [Thread-3125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:54:29.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:54:29.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:54:29.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:54:29.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:54:29.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:54:29.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:54:29.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:54:29.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:54:29.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:54:29.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.662253 -999.00  +27.40   7.08     11   -5.10 1 1 1 1 1   887    0 32.64 20.79 ----- 6.4 7.1 267.4 14.2 31.1 -33.0 31.6 -31.7 32.2 -31.2 32.6 -31.7
2025-11-25T17:54:29.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:54:29.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:54:29.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.662253
2025-11-25T17:54:29.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:54:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:54:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:54:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:54:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:54:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:54:19', tmtdew=40.02, humidity=6.26, cloud=0.0, wind=7.85, temperature=27.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:53:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:54:29.342 [DEBUG] [Thread-3125] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:54:29.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:54:29.441 [DEBUG] [Thread-3128] [transport.py] [_log()] starting thread (client mode): 0x70d1d720
2025-11-25T17:54:29.441 [DEBUG] [Thread-3128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:54:29.455 [DEBUG] [Thread-3128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:54:29.455 [INFO] [Thread-3128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:54:29.463 [DEBUG] [Thread-3128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:54:29.463 [DEBUG] [Thread-3128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:54:29.463 [DEBUG] [Thread-3128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:54:29.463 [DEBUG] [Thread-3128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:54:29.463 [DEBUG] [Thread-3128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] client lang: <none>
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] server lang: <none>
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] kex follows: False
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] Compression: none
2025-11-25T17:54:29.464 [DEBUG] [Thread-3128] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:54:29.519 [DEBUG] [Thread-3128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:54:29.519 [DEBUG] [Thread-3128] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:54:29.519 [DEBUG] [Thread-3128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:54:29.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:54:29.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:54:29.576 [DEBUG] [Thread-3128] [transport.py] [_log()] userauth is OK
2025-11-25T17:54:29.576 [DEBUG] [Thread-3128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:54:29.577 [DEBUG] [Thread-3128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:54:29.577 [DEBUG] [Thread-3128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:54:29.577 [DEBUG] [Thread-3128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:54:29.591 [INFO] [Thread-3128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:54:29.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:54:29.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:54:30.439 [DEBUG] [Thread-3128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:54:30.439 [DEBUG] [Thread-3128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:54:30.487 [DEBUG] [Thread-3128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:54:30.487 [DEBUG] [Thread-3128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:54:30.495 [DEBUG] [Thread-3128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:54:30.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:54:30.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:54:30.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:54:30.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:54:30.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:54:30.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:54:30.527 [DEBUG] [Thread-3128] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:54:33.355 [DEBUG] [Thread-3130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:54:48.424 [DEBUG] [Thread-3131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:55:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:55:00.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:55:00.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:55:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 54, 51), 39.96, 6.27, 0.0, 4.22, 27.58, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:55:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:54:51
2025-11-25T17:55:01.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:55:01.500 [DEBUG] [Thread-3132] [transport.py] [_log()] starting thread (client mode): 0x737c4b50
2025-11-25T17:55:01.500 [DEBUG] [Thread-3132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:55:01.520 [DEBUG] [Thread-3132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:55:01.520 [INFO] [Thread-3132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:55:01.523 [DEBUG] [Thread-3132] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:55:01.524 [DEBUG] [Thread-3132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:55:01.524 [DEBUG] [Thread-3132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:55:01.524 [DEBUG] [Thread-3132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:55:01.524 [DEBUG] [Thread-3132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:55:01.524 [DEBUG] [Thread-3132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:55:01.524 [DEBUG] [Thread-3132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:55:01.524 [DEBUG] [Thread-3132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:55:01.524 [DEBUG] [Thread-3132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:55:01.524 [DEBUG] [Thread-3132] [transport.py] [_log()] client lang: <none>
2025-11-25T17:55:01.525 [DEBUG] [Thread-3132] [transport.py] [_log()] server lang: <none>
2025-11-25T17:55:01.525 [DEBUG] [Thread-3132] [transport.py] [_log()] kex follows: False
2025-11-25T17:55:01.525 [DEBUG] [Thread-3132] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:55:01.525 [DEBUG] [Thread-3132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:55:01.525 [DEBUG] [Thread-3132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:55:01.525 [DEBUG] [Thread-3132] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:55:01.525 [DEBUG] [Thread-3132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:55:01.525 [DEBUG] [Thread-3132] [transport.py] [_log()] Compression: none
2025-11-25T17:55:01.525 [DEBUG] [Thread-3132] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:55:01.544 [DEBUG] [Thread-3132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:55:01.544 [DEBUG] [Thread-3132] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:55:01.545 [DEBUG] [Thread-3132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:55:01.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:55:01.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:55:01.546 [DEBUG] [Thread-3132] [transport.py] [_log()] userauth is OK
2025-11-25T17:55:01.547 [DEBUG] [Thread-3132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:55:01.547 [DEBUG] [Thread-3132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:55:01.547 [DEBUG] [Thread-3132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:55:01.547 [DEBUG] [Thread-3132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:55:01.570 [INFO] [Thread-3132] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:55:01.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:55:02.208 [DEBUG] [Thread-3132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:55:02.208 [DEBUG] [Thread-3132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:55:02.209 [DEBUG] [Thread-3132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:55:02.250 [DEBUG] [Thread-3132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:55:02.250 [DEBUG] [Thread-3132] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:55:02.254 [DEBUG] [Thread-3132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:55:02.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:55:02.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:55:02.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:55:02.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:55:02.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:55:02.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:55:02.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:55:02.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:55:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:55:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.662600 -999.00  +27.30   6.54     11   -5.20 1 1 1 1 1   887    0 33.03 19.28 ----- 8.0 6.5 314.8 7.0 31.2 -32.4 31.6 -31.6 32.5 -29.6 32.6 -31.4
2025-11-25T17:55:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:55:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:55:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.662600
2025-11-25T17:55:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:55:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:55:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:55:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:55:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:55:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:54:51', tmtdew=39.96, humidity=6.27, cloud=0.0, wind=4.22, temperature=27.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:54:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:55:02.279 [DEBUG] [Thread-3132] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:55:02.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:55:02.382 [DEBUG] [Thread-3135] [transport.py] [_log()] starting thread (client mode): 0x70d2a6e0
2025-11-25T17:55:02.382 [DEBUG] [Thread-3135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:55:02.400 [DEBUG] [Thread-3135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:55:02.401 [INFO] [Thread-3135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:55:02.408 [DEBUG] [Thread-3135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:55:02.408 [DEBUG] [Thread-3135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:55:02.408 [DEBUG] [Thread-3135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:55:02.408 [DEBUG] [Thread-3135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:55:02.408 [DEBUG] [Thread-3135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:55:02.408 [DEBUG] [Thread-3135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:55:02.408 [DEBUG] [Thread-3135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:55:02.408 [DEBUG] [Thread-3135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] client lang: <none>
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] server lang: <none>
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] kex follows: False
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] Compression: none
2025-11-25T17:55:02.409 [DEBUG] [Thread-3135] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:55:02.465 [DEBUG] [Thread-3135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:55:02.466 [DEBUG] [Thread-3135] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:55:02.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:55:02.466 [DEBUG] [Thread-3135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:55:02.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:55:02.521 [DEBUG] [Thread-3135] [transport.py] [_log()] userauth is OK
2025-11-25T17:55:02.522 [DEBUG] [Thread-3135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:55:02.522 [DEBUG] [Thread-3135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:55:02.522 [DEBUG] [Thread-3135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:55:02.522 [DEBUG] [Thread-3135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:55:02.540 [INFO] [Thread-3135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:55:02.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:55:02.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:55:03.412 [DEBUG] [Thread-3135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:55:03.412 [DEBUG] [Thread-3135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:55:03.460 [DEBUG] [Thread-3135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:55:03.460 [DEBUG] [Thread-3135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:55:03.465 [DEBUG] [Thread-3137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:55:03.468 [DEBUG] [Thread-3135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:55:03.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:55:03.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:55:03.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:55:03.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:55:03.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:55:03.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:55:03.499 [DEBUG] [Thread-3135] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:55:06.063 [DEBUG] [Thread-3138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:55:18.524 [DEBUG] [Thread-3139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:55:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:55:33.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:55:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:55:33.568 [DEBUG] [Thread-3140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:55:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 55, 23), 40.11, 6.21, 0.0, 2.82, 27.65, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:55:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:55:23
2025-11-25T17:55:34.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:55:34.436 [DEBUG] [Thread-3141] [transport.py] [_log()] starting thread (client mode): 0x70d1ee00
2025-11-25T17:55:34.436 [DEBUG] [Thread-3141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:55:34.456 [DEBUG] [Thread-3141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:55:34.456 [INFO] [Thread-3141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:55:34.459 [DEBUG] [Thread-3141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:55:34.460 [DEBUG] [Thread-3141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:55:34.460 [DEBUG] [Thread-3141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:55:34.460 [DEBUG] [Thread-3141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:55:34.460 [DEBUG] [Thread-3141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:55:34.460 [DEBUG] [Thread-3141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:55:34.460 [DEBUG] [Thread-3141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:55:34.460 [DEBUG] [Thread-3141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:55:34.460 [DEBUG] [Thread-3141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] client lang: <none>
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] server lang: <none>
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] kex follows: False
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] Compression: none
2025-11-25T17:55:34.461 [DEBUG] [Thread-3141] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:55:34.479 [DEBUG] [Thread-3141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:55:34.480 [DEBUG] [Thread-3141] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:55:34.480 [DEBUG] [Thread-3141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:55:34.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:55:34.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:55:34.483 [DEBUG] [Thread-3141] [transport.py] [_log()] userauth is OK
2025-11-25T17:55:34.483 [DEBUG] [Thread-3141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:55:34.483 [DEBUG] [Thread-3141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:55:34.483 [DEBUG] [Thread-3141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:55:34.483 [DEBUG] [Thread-3141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:55:34.519 [INFO] [Thread-3141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:55:34.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:55:35.185 [DEBUG] [Thread-3141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:55:35.186 [DEBUG] [Thread-3141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:55:35.186 [DEBUG] [Thread-3141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:55:35.227 [DEBUG] [Thread-3141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:55:35.227 [DEBUG] [Thread-3141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:55:35.230 [DEBUG] [Thread-3141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:55:35.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:55:35.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:55:35.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:55:35.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:55:35.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:55:35.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:55:35.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:55:35.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:55:35.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:55:35.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.662947 -999.00  +27.30   8.41     11   -5.10 1 1 1 1 1   887    0 33.47 18.89 ----- 7.0 8.4 289.2 10.6 31.2 -32.3 31.6 -31.8 32.5 -29.9 32.6 -31.6
2025-11-25T17:55:35.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:55:35.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:55:35.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.662947
2025-11-25T17:55:35.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:55:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:55:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:55:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:55:35.258 [DEBUG] [Thread-3141] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:55:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:55:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:55:23', tmtdew=40.11, humidity=6.21, cloud=0.0, wind=2.82, temperature=27.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:54:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:55:35.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:55:35.366 [DEBUG] [Thread-3144] [transport.py] [_log()] starting thread (client mode): 0x70d01120
2025-11-25T17:55:35.366 [DEBUG] [Thread-3144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:55:35.381 [DEBUG] [Thread-3144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:55:35.381 [INFO] [Thread-3144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:55:35.389 [DEBUG] [Thread-3144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:55:35.389 [DEBUG] [Thread-3144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:55:35.389 [DEBUG] [Thread-3144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:55:35.389 [DEBUG] [Thread-3144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:55:35.389 [DEBUG] [Thread-3144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:55:35.389 [DEBUG] [Thread-3144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:55:35.389 [DEBUG] [Thread-3144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:55:35.389 [DEBUG] [Thread-3144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:55:35.389 [DEBUG] [Thread-3144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:55:35.390 [DEBUG] [Thread-3144] [transport.py] [_log()] client lang: <none>
2025-11-25T17:55:35.390 [DEBUG] [Thread-3144] [transport.py] [_log()] server lang: <none>
2025-11-25T17:55:35.390 [DEBUG] [Thread-3144] [transport.py] [_log()] kex follows: False
2025-11-25T17:55:35.390 [DEBUG] [Thread-3144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:55:35.390 [DEBUG] [Thread-3144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:55:35.390 [DEBUG] [Thread-3144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:55:35.390 [DEBUG] [Thread-3144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:55:35.390 [DEBUG] [Thread-3144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:55:35.390 [DEBUG] [Thread-3144] [transport.py] [_log()] Compression: none
2025-11-25T17:55:35.392 [DEBUG] [Thread-3144] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:55:35.446 [DEBUG] [Thread-3144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:55:35.446 [DEBUG] [Thread-3144] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:55:35.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:55:35.448 [DEBUG] [Thread-3144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:55:35.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:55:35.503 [DEBUG] [Thread-3144] [transport.py] [_log()] userauth is OK
2025-11-25T17:55:35.503 [DEBUG] [Thread-3144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:55:35.503 [DEBUG] [Thread-3144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:55:35.503 [DEBUG] [Thread-3144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:55:35.503 [DEBUG] [Thread-3144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:55:35.521 [INFO] [Thread-3144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:55:35.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:55:35.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:55:36.362 [DEBUG] [Thread-3144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:55:36.362 [DEBUG] [Thread-3144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:55:36.411 [DEBUG] [Thread-3144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:55:36.411 [DEBUG] [Thread-3144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:55:36.420 [DEBUG] [Thread-3144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:55:36.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:55:36.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')
2025-11-25T17:55:36.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:55:36.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:55:36.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:55:36.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:55:36.456 [DEBUG] [Thread-3144] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:55:48.607 [DEBUG] [Thread-3146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:56:03.674 [DEBUG] [Thread-3147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:56:06.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:56:06.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:56:06.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:56:06.809 [DEBUG] [Thread-3148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:56:07.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 55, 55), 40.09, 6.18, 0.0, 0.95, 27.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:56:07.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:55:55
2025-11-25T17:56:07.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:56:07.436 [DEBUG] [Thread-3149] [transport.py] [_log()] starting thread (client mode): 0x70d2ba30
2025-11-25T17:56:07.436 [DEBUG] [Thread-3149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:56:07.456 [DEBUG] [Thread-3149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:56:07.456 [INFO] [Thread-3149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:56:07.459 [DEBUG] [Thread-3149] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] client lang: <none>
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] server lang: <none>
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] kex follows: False
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:56:07.460 [DEBUG] [Thread-3149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:56:07.461 [DEBUG] [Thread-3149] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:56:07.461 [DEBUG] [Thread-3149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:56:07.461 [DEBUG] [Thread-3149] [transport.py] [_log()] Compression: none
2025-11-25T17:56:07.461 [DEBUG] [Thread-3149] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:56:07.479 [DEBUG] [Thread-3149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:56:07.479 [DEBUG] [Thread-3149] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:56:07.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:56:07.480 [DEBUG] [Thread-3149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:56:07.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:56:07.483 [DEBUG] [Thread-3149] [transport.py] [_log()] userauth is OK
2025-11-25T17:56:07.483 [DEBUG] [Thread-3149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:56:07.483 [DEBUG] [Thread-3149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:56:07.483 [DEBUG] [Thread-3149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:56:07.483 [DEBUG] [Thread-3149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:56:07.517 [INFO] [Thread-3149] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:56:07.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:56:08.194 [DEBUG] [Thread-3149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:56:08.194 [DEBUG] [Thread-3149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:56:08.195 [DEBUG] [Thread-3149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:56:08.235 [DEBUG] [Thread-3149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:56:08.235 [DEBUG] [Thread-3149] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:56:08.238 [DEBUG] [Thread-3149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:56:08.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:56:08.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:56:08.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:56:08.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:56:08.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:56:08.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:56:08.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:56:08.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:56:08.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:56:08.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.663642 -999.00  +27.50   1.81     11   -5.00 1 1 1 1 1   887    0 32.36 17.96 ----- 4.5 1.8 274.9 5.2 31.2 -32.1 31.6 -31.7 32.6 -29.7 32.6 -31.4
2025-11-25T17:56:08.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:56:08.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:56:08.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.663642
2025-11-25T17:56:08.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:56:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:56:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:56:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:56:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:56:08.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:55:55', tmtdew=40.09, humidity=6.18, cloud=0.0, wind=0.95, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:55:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:56:08.265 [DEBUG] [Thread-3149] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:56:08.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:56:08.366 [DEBUG] [Thread-3152] [transport.py] [_log()] starting thread (client mode): 0x70d2b760
2025-11-25T17:56:08.366 [DEBUG] [Thread-3152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:56:08.381 [DEBUG] [Thread-3152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:56:08.382 [INFO] [Thread-3152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:56:08.389 [DEBUG] [Thread-3152] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:56:08.390 [DEBUG] [Thread-3152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:56:08.390 [DEBUG] [Thread-3152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:56:08.390 [DEBUG] [Thread-3152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:56:08.390 [DEBUG] [Thread-3152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:56:08.390 [DEBUG] [Thread-3152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:56:08.390 [DEBUG] [Thread-3152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:56:08.390 [DEBUG] [Thread-3152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] client lang: <none>
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] server lang: <none>
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] kex follows: False
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] Compression: none
2025-11-25T17:56:08.391 [DEBUG] [Thread-3152] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:56:08.447 [DEBUG] [Thread-3152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:56:08.447 [DEBUG] [Thread-3152] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:56:08.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:56:08.448 [DEBUG] [Thread-3152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:56:08.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:56:08.503 [DEBUG] [Thread-3152] [transport.py] [_log()] userauth is OK
2025-11-25T17:56:08.503 [DEBUG] [Thread-3152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:56:08.503 [DEBUG] [Thread-3152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:56:08.504 [DEBUG] [Thread-3152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:56:08.504 [DEBUG] [Thread-3152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:56:08.522 [INFO] [Thread-3152] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:56:08.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:56:08.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:56:09.328 [DEBUG] [Thread-3152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:56:09.328 [DEBUG] [Thread-3152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:56:09.376 [DEBUG] [Thread-3152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:56:09.376 [DEBUG] [Thread-3152] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:56:09.385 [DEBUG] [Thread-3152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:56:09.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:56:09.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:56:09.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:56:09.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:56:09.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:56:09.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:56:09.423 [DEBUG] [Thread-3152] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:56:18.717 [DEBUG] [Thread-3154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:56:33.777 [DEBUG] [Thread-3155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:56:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:56:39.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:56:39.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:56:40.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 56, 27), 40.56, 5.94, 0.0, 2.24, 27.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:56:40.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:56:27
2025-11-25T17:56:40.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:56:40.364 [DEBUG] [Thread-3156] [transport.py] [_log()] starting thread (client mode): 0x70d29c90
2025-11-25T17:56:40.364 [DEBUG] [Thread-3156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:56:40.384 [DEBUG] [Thread-3156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:56:40.385 [INFO] [Thread-3156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:56:40.387 [DEBUG] [Thread-3156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:56:40.387 [DEBUG] [Thread-3156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] client lang: <none>
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] server lang: <none>
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] kex follows: False
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] Compression: none
2025-11-25T17:56:40.388 [DEBUG] [Thread-3156] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:56:40.407 [DEBUG] [Thread-3156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:56:40.408 [DEBUG] [Thread-3156] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:56:40.408 [DEBUG] [Thread-3156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:56:40.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:56:40.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:56:40.410 [DEBUG] [Thread-3156] [transport.py] [_log()] userauth is OK
2025-11-25T17:56:40.410 [DEBUG] [Thread-3156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:56:40.411 [DEBUG] [Thread-3156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:56:40.411 [DEBUG] [Thread-3156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:56:40.411 [DEBUG] [Thread-3156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:56:40.435 [INFO] [Thread-3156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:56:40.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:56:41.100 [DEBUG] [Thread-3156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:56:41.101 [DEBUG] [Thread-3156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:56:41.101 [DEBUG] [Thread-3156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:56:41.142 [DEBUG] [Thread-3156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:56:41.142 [DEBUG] [Thread-3156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:56:41.146 [DEBUG] [Thread-3156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:56:41.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:56:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:56:41.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:56:41.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:56:41.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:56:41.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:56:41.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:56:41.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:56:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:56:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.663989 -999.00  +27.60   5.00     11   -5.10 1 1 1 1 1   887    0 32.62 18.61 ----- 4.1 5.0 172.2 6.5 31.2 -32.6 31.5 -33.9 32.6 -30.0 32.6 -32.0
2025-11-25T17:56:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:56:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:56:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.663989
2025-11-25T17:56:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:56:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:56:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:56:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:56:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:56:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:56:27', tmtdew=40.56, humidity=5.94, cloud=0.0, wind=2.24, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:56:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:56:41.166 [DEBUG] [Thread-3156] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:56:41.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:56:41.270 [DEBUG] [Thread-3159] [transport.py] [_log()] starting thread (client mode): 0x737c51e0
2025-11-25T17:56:41.270 [DEBUG] [Thread-3159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:56:41.284 [DEBUG] [Thread-3159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:56:41.285 [INFO] [Thread-3159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:56:41.292 [DEBUG] [Thread-3159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:56:41.292 [DEBUG] [Thread-3159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:56:41.292 [DEBUG] [Thread-3159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:56:41.292 [DEBUG] [Thread-3159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] client lang: <none>
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] server lang: <none>
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] kex follows: False
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] Compression: none
2025-11-25T17:56:41.293 [DEBUG] [Thread-3159] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:56:41.351 [DEBUG] [Thread-3159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:56:41.352 [DEBUG] [Thread-3159] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:56:41.353 [DEBUG] [Thread-3159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:56:41.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:56:41.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:56:41.408 [DEBUG] [Thread-3159] [transport.py] [_log()] userauth is OK
2025-11-25T17:56:41.408 [DEBUG] [Thread-3159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:56:41.408 [DEBUG] [Thread-3159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:56:41.408 [DEBUG] [Thread-3159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:56:41.408 [DEBUG] [Thread-3159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:56:41.427 [INFO] [Thread-3159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:56:41.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:56:41.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:56:42.251 [DEBUG] [Thread-3159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:56:42.251 [DEBUG] [Thread-3159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:56:42.299 [DEBUG] [Thread-3159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:56:42.299 [DEBUG] [Thread-3159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:56:42.308 [DEBUG] [Thread-3159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:56:42.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:56:42.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:56:42.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:56:42.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:56:42.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:56:42.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:56:42.345 [DEBUG] [Thread-3159] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:56:48.822 [DEBUG] [Thread-3161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:57:03.889 [DEBUG] [Thread-3162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:57:07.523 [DEBUG] [Thread-3163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:57:12.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:57:12.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:57:12.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:57:13.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 56, 59), 40.38, 6.06, 0.0, 4.15, 27.67, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:57:13.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:56:59
2025-11-25T17:57:13.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:57:13.294 [DEBUG] [Thread-3164] [transport.py] [_log()] starting thread (client mode): 0x70d2bee0
2025-11-25T17:57:13.295 [DEBUG] [Thread-3164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:57:13.314 [DEBUG] [Thread-3164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:57:13.314 [INFO] [Thread-3164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:57:13.317 [DEBUG] [Thread-3164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:57:13.317 [DEBUG] [Thread-3164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:57:13.317 [DEBUG] [Thread-3164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:57:13.317 [DEBUG] [Thread-3164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] client lang: <none>
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] server lang: <none>
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] kex follows: False
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] Compression: none
2025-11-25T17:57:13.318 [DEBUG] [Thread-3164] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:57:13.336 [DEBUG] [Thread-3164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:57:13.337 [DEBUG] [Thread-3164] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:57:13.337 [DEBUG] [Thread-3164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:57:13.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:57:13.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:57:13.339 [DEBUG] [Thread-3164] [transport.py] [_log()] userauth is OK
2025-11-25T17:57:13.340 [DEBUG] [Thread-3164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:57:13.340 [DEBUG] [Thread-3164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:57:13.340 [DEBUG] [Thread-3164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:57:13.340 [DEBUG] [Thread-3164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:57:13.380 [INFO] [Thread-3164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:57:13.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:57:14.037 [DEBUG] [Thread-3164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:57:14.037 [DEBUG] [Thread-3164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:57:14.037 [DEBUG] [Thread-3164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:57:14.078 [DEBUG] [Thread-3164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:57:14.078 [DEBUG] [Thread-3164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:57:14.081 [DEBUG] [Thread-3164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:57:14.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:57:14.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:57:14.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:57:14.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:57:14.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:57:14.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:57:14.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:57:14.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:57:14.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:57:14.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.664336 -999.00  +27.60   3.56     11   -5.00 1 1 1 1 1   887    0 32.96 19.08 ----- 4.6 3.6 152.8 4.6 31.2 -32.4 31.6 -31.7 32.7 -29.8 32.8 -31.9
2025-11-25T17:57:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:57:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:57:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.664336
2025-11-25T17:57:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:57:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:57:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:57:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:57:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:57:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:56:59', tmtdew=40.38, humidity=6.06, cloud=0.0, wind=4.15, temperature=27.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:56:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:57:14.107 [DEBUG] [Thread-3164] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:57:14.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:57:14.209 [DEBUG] [Thread-3167] [transport.py] [_log()] starting thread (client mode): 0x70d2bd90
2025-11-25T17:57:14.209 [DEBUG] [Thread-3167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:57:14.223 [DEBUG] [Thread-3167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:57:14.223 [INFO] [Thread-3167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:57:14.230 [DEBUG] [Thread-3167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:57:14.230 [DEBUG] [Thread-3167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] client lang: <none>
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] server lang: <none>
2025-11-25T17:57:14.231 [DEBUG] [Thread-3167] [transport.py] [_log()] kex follows: False
2025-11-25T17:57:14.232 [DEBUG] [Thread-3167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:57:14.232 [DEBUG] [Thread-3167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:57:14.232 [DEBUG] [Thread-3167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:57:14.232 [DEBUG] [Thread-3167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:57:14.232 [DEBUG] [Thread-3167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:57:14.232 [DEBUG] [Thread-3167] [transport.py] [_log()] Compression: none
2025-11-25T17:57:14.232 [DEBUG] [Thread-3167] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:57:14.288 [DEBUG] [Thread-3167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:57:14.289 [DEBUG] [Thread-3167] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:57:14.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:57:14.290 [DEBUG] [Thread-3167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:57:14.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:57:14.343 [DEBUG] [Thread-3167] [transport.py] [_log()] userauth is OK
2025-11-25T17:57:14.344 [DEBUG] [Thread-3167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:57:14.344 [DEBUG] [Thread-3167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:57:14.344 [DEBUG] [Thread-3167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:57:14.344 [DEBUG] [Thread-3167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:57:14.363 [INFO] [Thread-3167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:57:14.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:57:14.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:57:15.183 [DEBUG] [Thread-3167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:57:15.183 [DEBUG] [Thread-3167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:57:15.231 [DEBUG] [Thread-3167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:57:15.231 [DEBUG] [Thread-3167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:57:15.240 [DEBUG] [Thread-3167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:57:15.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:57:15.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:57:15.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:57:15.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:57:15.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:57:15.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:57:15.274 [DEBUG] [Thread-3167] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:57:18.933 [DEBUG] [Thread-3169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:57:33.999 [DEBUG] [Thread-3170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:57:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:57:45.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:57:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:57:45.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 57, 31), 40.17, 6.16, 0.0, 5.24, 27.6, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:57:45.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:57:31
2025-11-25T17:57:46.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:57:46.232 [DEBUG] [Thread-3171] [transport.py] [_log()] starting thread (client mode): 0x73781030
2025-11-25T17:57:46.232 [DEBUG] [Thread-3171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:57:46.254 [DEBUG] [Thread-3171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:57:46.254 [INFO] [Thread-3171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:57:46.258 [DEBUG] [Thread-3171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:57:46.258 [DEBUG] [Thread-3171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:57:46.258 [DEBUG] [Thread-3171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:57:46.258 [DEBUG] [Thread-3171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:57:46.258 [DEBUG] [Thread-3171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:57:46.259 [DEBUG] [Thread-3171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:57:46.259 [DEBUG] [Thread-3171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:57:46.259 [DEBUG] [Thread-3171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:57:46.259 [DEBUG] [Thread-3171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:57:46.259 [DEBUG] [Thread-3171] [transport.py] [_log()] client lang: <none>
2025-11-25T17:57:46.259 [DEBUG] [Thread-3171] [transport.py] [_log()] server lang: <none>
2025-11-25T17:57:46.259 [DEBUG] [Thread-3171] [transport.py] [_log()] kex follows: False
2025-11-25T17:57:46.259 [DEBUG] [Thread-3171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:57:46.259 [DEBUG] [Thread-3171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:57:46.260 [DEBUG] [Thread-3171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:57:46.260 [DEBUG] [Thread-3171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:57:46.260 [DEBUG] [Thread-3171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:57:46.260 [DEBUG] [Thread-3171] [transport.py] [_log()] Compression: none
2025-11-25T17:57:46.260 [DEBUG] [Thread-3171] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:57:46.275 [DEBUG] [Thread-3171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:57:46.276 [DEBUG] [Thread-3171] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:57:46.276 [DEBUG] [Thread-3171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:57:46.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:57:46.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:57:46.279 [DEBUG] [Thread-3171] [transport.py] [_log()] userauth is OK
2025-11-25T17:57:46.280 [DEBUG] [Thread-3171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:57:46.280 [DEBUG] [Thread-3171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:57:46.280 [DEBUG] [Thread-3171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:57:46.280 [DEBUG] [Thread-3171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:57:46.301 [INFO] [Thread-3171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:57:46.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:57:46.942 [DEBUG] [Thread-3171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:57:46.942 [DEBUG] [Thread-3171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:57:46.942 [DEBUG] [Thread-3171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:57:46.983 [DEBUG] [Thread-3171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:57:46.983 [DEBUG] [Thread-3171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:57:46.987 [DEBUG] [Thread-3171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:57:47.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:57:47.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:57:47.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:57:47.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:57:47.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:57:47.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:57:47.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:57:47.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:57:47.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:57:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.664683 -999.00  +27.60   4.77     11   -5.10 1 1 1 1 1   887    0 33.16 19.51 ----- 3.5 4.8 134.0 6.0 31.2 -32.4 31.6 -31.7 32.8 -30.1 32.9 -32.0
2025-11-25T17:57:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:57:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:57:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.664683
2025-11-25T17:57:47.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:57:47.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:57:47.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:57:47.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:57:47.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:57:47.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:57:31', tmtdew=40.17, humidity=6.16, cloud=0.0, wind=5.24, temperature=27.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:57:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:57:47.015 [DEBUG] [Thread-3171] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:57:47.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:57:47.121 [DEBUG] [Thread-3174] [transport.py] [_log()] starting thread (client mode): 0x73783a90
2025-11-25T17:57:47.121 [DEBUG] [Thread-3174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:57:47.135 [DEBUG] [Thread-3174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:57:47.136 [INFO] [Thread-3174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:57:47.143 [DEBUG] [Thread-3174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] client lang: <none>
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] server lang: <none>
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] kex follows: False
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:57:47.144 [DEBUG] [Thread-3174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:57:47.145 [DEBUG] [Thread-3174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:57:47.145 [DEBUG] [Thread-3174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:57:47.145 [DEBUG] [Thread-3174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:57:47.145 [DEBUG] [Thread-3174] [transport.py] [_log()] Compression: none
2025-11-25T17:57:47.145 [DEBUG] [Thread-3174] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:57:47.204 [DEBUG] [Thread-3174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:57:47.205 [DEBUG] [Thread-3174] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:57:47.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:57:47.206 [DEBUG] [Thread-3174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:57:47.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:57:47.261 [DEBUG] [Thread-3174] [transport.py] [_log()] userauth is OK
2025-11-25T17:57:47.261 [DEBUG] [Thread-3174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:57:47.261 [DEBUG] [Thread-3174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:57:47.261 [DEBUG] [Thread-3174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:57:47.261 [DEBUG] [Thread-3174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:57:47.280 [INFO] [Thread-3174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:57:47.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:57:47.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:57:48.095 [DEBUG] [Thread-3174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:57:48.095 [DEBUG] [Thread-3174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:57:48.143 [DEBUG] [Thread-3174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:57:48.144 [DEBUG] [Thread-3174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:57:48.152 [DEBUG] [Thread-3174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:57:48.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:57:48.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:57:48.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:57:48.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:57:48.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:57:48.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:57:48.187 [DEBUG] [Thread-3174] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:57:49.037 [DEBUG] [Thread-3176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:58:04.103 [DEBUG] [Thread-3177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:58:08.262 [DEBUG] [Thread-3178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:58:18.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:58:18.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:58:18.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:58:18.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 58, 3), 40.12, 6.18, 0.0, 3.55, 27.55, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:58:18.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:58:03
2025-11-25T17:58:18.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:58:19.110 [DEBUG] [Thread-3179] [transport.py] [_log()] starting thread (client mode): 0x70d2b610
2025-11-25T17:58:19.110 [DEBUG] [Thread-3179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:58:19.138 [DEBUG] [Thread-3179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:58:19.138 [INFO] [Thread-3179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:58:19.141 [DEBUG] [Thread-3179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:58:19.141 [DEBUG] [Thread-3179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:58:19.142 [DEBUG] [Thread-3179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:58:19.142 [DEBUG] [Thread-3179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:58:19.142 [DEBUG] [Thread-3179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:58:19.142 [DEBUG] [Thread-3179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:58:19.142 [DEBUG] [Thread-3179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:58:19.142 [DEBUG] [Thread-3179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:58:19.142 [DEBUG] [Thread-3179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:58:19.142 [DEBUG] [Thread-3179] [transport.py] [_log()] client lang: <none>
2025-11-25T17:58:19.142 [DEBUG] [Thread-3179] [transport.py] [_log()] server lang: <none>
2025-11-25T17:58:19.143 [DEBUG] [Thread-3181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:58:19.144 [DEBUG] [Thread-3179] [transport.py] [_log()] kex follows: False
2025-11-25T17:58:19.145 [DEBUG] [Thread-3179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:58:19.145 [DEBUG] [Thread-3179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:58:19.145 [DEBUG] [Thread-3179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:58:19.145 [DEBUG] [Thread-3179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:58:19.146 [DEBUG] [Thread-3179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:58:19.146 [DEBUG] [Thread-3179] [transport.py] [_log()] Compression: none
2025-11-25T17:58:19.146 [DEBUG] [Thread-3179] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:58:19.164 [DEBUG] [Thread-3179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:58:19.165 [DEBUG] [Thread-3179] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:58:19.165 [DEBUG] [Thread-3179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:58:19.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:58:19.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:58:19.168 [DEBUG] [Thread-3179] [transport.py] [_log()] userauth is OK
2025-11-25T17:58:19.168 [DEBUG] [Thread-3179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:58:19.168 [DEBUG] [Thread-3179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:58:19.168 [DEBUG] [Thread-3179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:58:19.168 [DEBUG] [Thread-3179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:58:19.189 [INFO] [Thread-3179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:58:19.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:58:19.878 [DEBUG] [Thread-3179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:58:19.878 [DEBUG] [Thread-3179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:58:19.878 [DEBUG] [Thread-3179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:58:19.919 [DEBUG] [Thread-3179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:58:19.919 [DEBUG] [Thread-3179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:58:19.922 [DEBUG] [Thread-3179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:58:19.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:58:19.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:58:19.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:58:19.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:58:19.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:58:19.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:58:19.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:58:19.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:58:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:58:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.665031 -999.00  +27.50   1.59     11   -5.10 1 1 1 1 1   887    0 33.10 17.49 ----- 2.4 1.6 145.1 3.8 31.3 -32.6 31.6 -32.5 32.9 -30.0 32.9 -32.0
2025-11-25T17:58:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:58:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:58:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.665031
2025-11-25T17:58:19.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:58:19.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:58:19.947 [DEBUG] [Thread-3179] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:58:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:58:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:58:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:58:19.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:58:03', tmtdew=40.12, humidity=6.18, cloud=0.0, wind=3.55, temperature=27.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:57:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:58:20.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:58:20.052 [DEBUG] [Thread-3183] [transport.py] [_log()] starting thread (client mode): 0x737c5a80
2025-11-25T17:58:20.052 [DEBUG] [Thread-3183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:58:20.066 [DEBUG] [Thread-3183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:58:20.066 [INFO] [Thread-3183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:58:20.074 [DEBUG] [Thread-3183] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:58:20.074 [DEBUG] [Thread-3183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:58:20.074 [DEBUG] [Thread-3183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:58:20.074 [DEBUG] [Thread-3183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:58:20.074 [DEBUG] [Thread-3183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:58:20.074 [DEBUG] [Thread-3183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:58:20.074 [DEBUG] [Thread-3183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:58:20.074 [DEBUG] [Thread-3183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:58:20.074 [DEBUG] [Thread-3183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:58:20.075 [DEBUG] [Thread-3183] [transport.py] [_log()] client lang: <none>
2025-11-25T17:58:20.075 [DEBUG] [Thread-3183] [transport.py] [_log()] server lang: <none>
2025-11-25T17:58:20.075 [DEBUG] [Thread-3183] [transport.py] [_log()] kex follows: False
2025-11-25T17:58:20.075 [DEBUG] [Thread-3183] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:58:20.075 [DEBUG] [Thread-3183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:58:20.075 [DEBUG] [Thread-3183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:58:20.075 [DEBUG] [Thread-3183] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:58:20.075 [DEBUG] [Thread-3183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:58:20.075 [DEBUG] [Thread-3183] [transport.py] [_log()] Compression: none
2025-11-25T17:58:20.076 [DEBUG] [Thread-3183] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:58:20.133 [DEBUG] [Thread-3183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:58:20.134 [DEBUG] [Thread-3183] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:58:20.135 [DEBUG] [Thread-3183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:58:20.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:58:20.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:58:20.190 [DEBUG] [Thread-3183] [transport.py] [_log()] userauth is OK
2025-11-25T17:58:20.191 [DEBUG] [Thread-3183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:58:20.191 [DEBUG] [Thread-3183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:58:20.191 [DEBUG] [Thread-3183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:58:20.191 [DEBUG] [Thread-3183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:58:20.211 [INFO] [Thread-3183] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:58:20.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:58:20.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:58:21.034 [DEBUG] [Thread-3183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:58:21.034 [DEBUG] [Thread-3183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:58:21.082 [DEBUG] [Thread-3183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:58:21.082 [DEBUG] [Thread-3183] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:58:21.091 [DEBUG] [Thread-3183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:58:21.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:58:21.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:58:21.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:58:21.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:58:21.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:58:21.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:58:21.133 [DEBUG] [Thread-3183] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:58:34.193 [DEBUG] [Thread-3185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:58:49.255 [DEBUG] [Thread-3186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:58:51.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:58:51.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:58:51.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:58:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 58, 35), 40.06, 6.13, 0.0, 7.52, 27.55, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:58:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:58:35
2025-11-25T17:58:51.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:58:52.088 [DEBUG] [Thread-3187] [transport.py] [_log()] starting thread (client mode): 0x73780f40
2025-11-25T17:58:52.088 [DEBUG] [Thread-3187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:58:52.104 [DEBUG] [Thread-3187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:58:52.105 [INFO] [Thread-3187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] client lang: <none>
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] server lang: <none>
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] kex follows: False
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:58:52.106 [DEBUG] [Thread-3187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:58:52.107 [DEBUG] [Thread-3187] [transport.py] [_log()] Compression: none
2025-11-25T17:58:52.107 [DEBUG] [Thread-3187] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:58:52.117 [DEBUG] [Thread-3187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:58:52.118 [DEBUG] [Thread-3187] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:58:52.118 [DEBUG] [Thread-3187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:58:52.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:58:52.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:58:52.120 [DEBUG] [Thread-3187] [transport.py] [_log()] userauth is OK
2025-11-25T17:58:52.121 [DEBUG] [Thread-3187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:58:52.121 [DEBUG] [Thread-3187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:58:52.121 [DEBUG] [Thread-3187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:58:52.121 [DEBUG] [Thread-3187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:58:52.140 [INFO] [Thread-3187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:58:52.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:58:52.785 [DEBUG] [Thread-3187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:58:52.785 [DEBUG] [Thread-3187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:58:52.785 [DEBUG] [Thread-3187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:58:52.826 [DEBUG] [Thread-3187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:58:52.826 [DEBUG] [Thread-3187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:58:52.829 [DEBUG] [Thread-3187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:58:52.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:58:52.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:58:52.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:58:52.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:58:52.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:58:52.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:58:52.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:58:52.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:58:52.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:58:52.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.665379 -999.00  +27.60   0.97     11   -5.00 1 1 1 1 1   887    0 32.57 18.42 ----- 1.4 1.0 217.4 2.7 31.4 -32.8 31.7 -31.7 33.0 -30.0 33.0 -32.3
2025-11-25T17:58:52.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:58:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:58:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.665379
2025-11-25T17:58:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:58:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:58:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:58:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:58:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:58:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:58:35', tmtdew=40.06, humidity=6.13, cloud=0.0, wind=7.52, temperature=27.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:58:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:58:52.854 [DEBUG] [Thread-3187] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:58:52.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:58:52.956 [DEBUG] [Thread-3190] [transport.py] [_log()] starting thread (client mode): 0x73781030
2025-11-25T17:58:52.957 [DEBUG] [Thread-3190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:58:52.970 [DEBUG] [Thread-3190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:58:52.971 [INFO] [Thread-3190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:58:52.978 [DEBUG] [Thread-3190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:58:52.978 [DEBUG] [Thread-3190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:58:52.979 [DEBUG] [Thread-3190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:58:52.979 [DEBUG] [Thread-3190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:58:52.979 [DEBUG] [Thread-3190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:58:52.979 [DEBUG] [Thread-3190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:58:52.979 [DEBUG] [Thread-3190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:58:52.979 [DEBUG] [Thread-3190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] client lang: <none>
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] server lang: <none>
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] kex follows: False
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] Compression: none
2025-11-25T17:58:52.980 [DEBUG] [Thread-3190] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:58:53.040 [DEBUG] [Thread-3190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:58:53.040 [DEBUG] [Thread-3190] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:58:53.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:58:53.041 [DEBUG] [Thread-3190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:58:53.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:58:53.097 [DEBUG] [Thread-3190] [transport.py] [_log()] userauth is OK
2025-11-25T17:58:53.098 [DEBUG] [Thread-3190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:58:53.098 [DEBUG] [Thread-3190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:58:53.098 [DEBUG] [Thread-3190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:58:53.098 [DEBUG] [Thread-3190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:58:53.117 [INFO] [Thread-3190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:58:53.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:58:53.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:58:53.950 [DEBUG] [Thread-3190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:58:53.950 [DEBUG] [Thread-3190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:58:54.002 [DEBUG] [Thread-3190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:58:54.003 [DEBUG] [Thread-3190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:58:54.012 [DEBUG] [Thread-3190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:58:54.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:58:54.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:58:54.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:58:54.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:58:54.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:58:54.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:58:54.048 [DEBUG] [Thread-3190] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:59:04.296 [DEBUG] [Thread-3192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:59:08.805 [DEBUG] [Thread-3193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:59:19.360 [DEBUG] [Thread-3194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:59:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:59:24.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:59:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:59:24.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 59, 7), 40.16, 6.09, 0.0, 5.95, 27.7, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:59:24.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:59:07
2025-11-25T17:59:24.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:59:25.074 [DEBUG] [Thread-3195] [transport.py] [_log()] starting thread (client mode): 0x70d2b3d0
2025-11-25T17:59:25.074 [DEBUG] [Thread-3195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:59:25.096 [DEBUG] [Thread-3195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:59:25.096 [INFO] [Thread-3195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] client lang: <none>
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] server lang: <none>
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] kex follows: False
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:59:25.099 [DEBUG] [Thread-3195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:59:25.100 [DEBUG] [Thread-3195] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:59:25.100 [DEBUG] [Thread-3195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:59:25.100 [DEBUG] [Thread-3195] [transport.py] [_log()] Compression: none
2025-11-25T17:59:25.100 [DEBUG] [Thread-3195] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:59:25.120 [DEBUG] [Thread-3195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:59:25.120 [DEBUG] [Thread-3195] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:59:25.121 [DEBUG] [Thread-3195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:59:25.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:59:25.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:59:25.122 [DEBUG] [Thread-3195] [transport.py] [_log()] userauth is OK
2025-11-25T17:59:25.122 [DEBUG] [Thread-3195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:59:25.122 [DEBUG] [Thread-3195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:59:25.122 [DEBUG] [Thread-3195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:59:25.122 [DEBUG] [Thread-3195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:59:25.139 [INFO] [Thread-3195] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:59:25.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:59:25.741 [DEBUG] [Thread-3195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:59:25.741 [DEBUG] [Thread-3195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:59:25.741 [DEBUG] [Thread-3195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:59:25.782 [DEBUG] [Thread-3195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:59:25.782 [DEBUG] [Thread-3195] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:59:25.784 [DEBUG] [Thread-3195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:59:25.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:59:25.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:59:25.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:59:25.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:59:25.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:59:25.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:59:25.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:59:25.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:59:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:59:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.665725 -999.00  +27.60   5.43     11   -5.00 1 1 1 1 1   887    0 33.05 17.63 ----- 3.6 5.4 114.2 7.2 31.4 -32.3 31.8 -31.7 33.0 -30.1 33.1 -31.9
2025-11-25T17:59:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:59:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:59:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.665725
2025-11-25T17:59:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:59:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:59:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:59:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:59:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:59:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:59:07', tmtdew=40.16, humidity=6.09, cloud=0.0, wind=5.95, temperature=27.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:58:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:59:25.804 [DEBUG] [Thread-3195] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:59:25.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:59:25.889 [DEBUG] [Thread-3198] [transport.py] [_log()] starting thread (client mode): 0x70d1e410
2025-11-25T17:59:25.889 [DEBUG] [Thread-3198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:59:25.904 [DEBUG] [Thread-3198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:59:25.904 [INFO] [Thread-3198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] client lang: <none>
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] server lang: <none>
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] kex follows: False
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] Compression: none
2025-11-25T17:59:25.911 [DEBUG] [Thread-3198] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:59:25.971 [DEBUG] [Thread-3198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:59:25.971 [DEBUG] [Thread-3198] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:59:25.971 [DEBUG] [Thread-3198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:59:25.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:59:25.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:59:26.035 [DEBUG] [Thread-3198] [transport.py] [_log()] userauth is OK
2025-11-25T17:59:26.035 [DEBUG] [Thread-3198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:59:26.035 [DEBUG] [Thread-3198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:59:26.035 [DEBUG] [Thread-3198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:59:26.035 [DEBUG] [Thread-3198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:59:26.049 [INFO] [Thread-3198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:59:26.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:59:26.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:59:26.931 [DEBUG] [Thread-3198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:59:26.931 [DEBUG] [Thread-3198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:59:26.979 [DEBUG] [Thread-3198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:59:26.979 [DEBUG] [Thread-3198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:59:26.987 [DEBUG] [Thread-3198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:59:26.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:59:26.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:59:27.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:59:27.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:59:27.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:59:27.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:59:27.017 [DEBUG] [Thread-3198] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:59:34.393 [DEBUG] [Thread-3200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:59:49.457 [DEBUG] [Thread-3201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T17:59:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T17:59:57.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T17:59:57.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T17:59:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 17, 59, 39), 40.29, 6.08, 0.0, 6.46, 27.73, 0, 0, 0, 2, 0, 0),)
2025-11-25T17:59:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 17:59:39
2025-11-25T17:59:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T17:59:57.968 [DEBUG] [Thread-3202] [transport.py] [_log()] starting thread (client mode): 0x70d1f610
2025-11-25T17:59:57.969 [DEBUG] [Thread-3202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:59:57.981 [DEBUG] [Thread-3202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T17:59:57.981 [INFO] [Thread-3202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] client lang: <none>
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] server lang: <none>
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] kex follows: False
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] Compression: none
2025-11-25T17:59:57.983 [DEBUG] [Thread-3202] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:59:57.996 [DEBUG] [Thread-3202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:59:57.997 [DEBUG] [Thread-3202] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:59:57.997 [DEBUG] [Thread-3202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T17:59:57.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T17:59:57.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:59:57.999 [DEBUG] [Thread-3202] [transport.py] [_log()] userauth is OK
2025-11-25T17:59:57.999 [DEBUG] [Thread-3202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:59:57.999 [DEBUG] [Thread-3202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:59:57.999 [DEBUG] [Thread-3202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T17:59:57.999 [DEBUG] [Thread-3202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:59:58.021 [INFO] [Thread-3202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:59:58.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:59:58.672 [DEBUG] [Thread-3202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:59:58.672 [DEBUG] [Thread-3202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:59:58.673 [DEBUG] [Thread-3202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T17:59:58.713 [DEBUG] [Thread-3202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:59:58.713 [DEBUG] [Thread-3202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:59:58.716 [DEBUG] [Thread-3202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:59:58.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:59:58.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T17:59:58.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T17:59:58.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T17:59:58.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:59:58.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T17:59:58.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:59:58.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:59:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T17:59:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.666072 -999.00  +27.60   4.26     11   -5.10 1 1 1 1 1   887    0 33.35 18.75 ----- 7.7 4.3 97.8 6.3 31.3 -33.5 31.9 -32.2 33.1 -30.4 33.2 -32.5
2025-11-25T17:59:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T17:59:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T17:59:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.666072
2025-11-25T17:59:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T17:59:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T17:59:58.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T17:59:58.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T17:59:58.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T17:59:58.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T17:59:39', tmtdew=40.29, humidity=6.08, cloud=0.0, wind=6.46, temperature=27.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:59:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T17:59:58.741 [DEBUG] [Thread-3202] [transport.py] [_log()] EOF in transport thread
2025-11-25T17:59:58.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T17:59:58.839 [DEBUG] [Thread-3205] [transport.py] [_log()] starting thread (client mode): 0x737c5720
2025-11-25T17:59:58.839 [DEBUG] [Thread-3205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T17:59:58.853 [DEBUG] [Thread-3205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T17:59:58.853 [INFO] [Thread-3205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T17:59:58.860 [DEBUG] [Thread-3205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] client lang: <none>
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] server lang: <none>
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] kex follows: False
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] Compression: none
2025-11-25T17:59:58.861 [DEBUG] [Thread-3205] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T17:59:58.916 [DEBUG] [Thread-3205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T17:59:58.916 [DEBUG] [Thread-3205] [transport.py] [_log()] Switch to new keys ...
2025-11-25T17:59:58.916 [DEBUG] [Thread-3205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T17:59:58.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T17:59:58.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T17:59:58.974 [DEBUG] [Thread-3205] [transport.py] [_log()] userauth is OK
2025-11-25T17:59:58.975 [DEBUG] [Thread-3205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T17:59:58.975 [DEBUG] [Thread-3205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T17:59:58.975 [DEBUG] [Thread-3205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T17:59:58.975 [DEBUG] [Thread-3205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T17:59:58.993 [INFO] [Thread-3205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T17:59:58.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T17:59:58.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T17:59:59.815 [DEBUG] [Thread-3205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T17:59:59.815 [DEBUG] [Thread-3205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T17:59:59.863 [DEBUG] [Thread-3205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T17:59:59.864 [DEBUG] [Thread-3205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T17:59:59.873 [DEBUG] [Thread-3205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T17:59:59.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T17:59:59.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T17:59:59.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T17:59:59.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T17:59:59.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T17:59:59.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T17:59:59.909 [DEBUG] [Thread-3205] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:00:04.491 [DEBUG] [Thread-3207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:00:09.541 [DEBUG] [Thread-3208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:00:19.532 [DEBUG] [Thread-3209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:00:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:00:29.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:00:29.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:00:30.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 0, 11), 40.33, 6.04, 0.0, 7.34, 27.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:00:30.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:00:11
2025-11-25T18:00:30.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:00:30.882 [DEBUG] [Thread-3210] [transport.py] [_log()] starting thread (client mode): 0x7376c0a0
2025-11-25T18:00:30.883 [DEBUG] [Thread-3210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:00:30.903 [DEBUG] [Thread-3210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:00:30.903 [INFO] [Thread-3210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:00:30.904 [DEBUG] [Thread-3210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] client lang: <none>
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] server lang: <none>
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] kex follows: False
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:00:30.905 [DEBUG] [Thread-3210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:00:30.906 [DEBUG] [Thread-3210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:00:30.906 [DEBUG] [Thread-3210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:00:30.906 [DEBUG] [Thread-3210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:00:30.906 [DEBUG] [Thread-3210] [transport.py] [_log()] Compression: none
2025-11-25T18:00:30.906 [DEBUG] [Thread-3210] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:00:30.925 [DEBUG] [Thread-3210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:00:30.926 [DEBUG] [Thread-3210] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:00:30.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:00:30.927 [DEBUG] [Thread-3210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:00:30.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:00:30.929 [DEBUG] [Thread-3210] [transport.py] [_log()] userauth is OK
2025-11-25T18:00:30.929 [DEBUG] [Thread-3210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:00:30.930 [DEBUG] [Thread-3210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:00:30.930 [DEBUG] [Thread-3210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:00:30.930 [DEBUG] [Thread-3210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:00:30.956 [INFO] [Thread-3210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:00:30.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:00:31.576 [DEBUG] [Thread-3210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:00:31.576 [DEBUG] [Thread-3210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:00:31.576 [DEBUG] [Thread-3210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:00:31.617 [DEBUG] [Thread-3210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:00:31.617 [DEBUG] [Thread-3210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:00:31.621 [DEBUG] [Thread-3210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:00:31.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:00:31.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:00:31.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:00:31.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:00:31.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:00:31.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:00:31.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:00:31.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:00:31.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:00:31.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.666419 -999.00  +27.50   5.61     11   -5.10 1 1 1 1 1   887    0 32.99 20.11 ----- 6.8 5.6 85.6 9.1 31.4 -32.6 31.9 -32.2 33.1 -30.5 33.2 -32.5
2025-11-25T18:00:31.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:00:31.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:00:31.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.666419
2025-11-25T18:00:31.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:00:31.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:00:31.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:00:31.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:00:31.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:00:31.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:00:11', tmtdew=40.33, humidity=6.04, cloud=0.0, wind=7.34, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T15:59:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:00:31.647 [DEBUG] [Thread-3210] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:00:31.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:00:31.745 [DEBUG] [Thread-3213] [transport.py] [_log()] starting thread (client mode): 0x70d29960
2025-11-25T18:00:31.745 [DEBUG] [Thread-3213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:00:31.759 [DEBUG] [Thread-3213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:00:31.759 [INFO] [Thread-3213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] client lang: <none>
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] server lang: <none>
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] kex follows: False
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:00:31.767 [DEBUG] [Thread-3213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:00:31.768 [DEBUG] [Thread-3213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:00:31.768 [DEBUG] [Thread-3213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:00:31.768 [DEBUG] [Thread-3213] [transport.py] [_log()] Compression: none
2025-11-25T18:00:31.768 [DEBUG] [Thread-3213] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:00:31.826 [DEBUG] [Thread-3213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:00:31.827 [DEBUG] [Thread-3213] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:00:31.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:00:31.828 [DEBUG] [Thread-3213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:00:31.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:00:31.883 [DEBUG] [Thread-3213] [transport.py] [_log()] userauth is OK
2025-11-25T18:00:31.883 [DEBUG] [Thread-3213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:00:31.883 [DEBUG] [Thread-3213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:00:31.883 [DEBUG] [Thread-3213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:00:31.884 [DEBUG] [Thread-3213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:00:31.903 [INFO] [Thread-3213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:00:31.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:00:31.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:00:32.699 [DEBUG] [Thread-3213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:00:32.699 [DEBUG] [Thread-3213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:00:32.748 [DEBUG] [Thread-3213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:00:32.748 [DEBUG] [Thread-3213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:00:32.758 [DEBUG] [Thread-3213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:00:32.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:00:32.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:00:32.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:00:32.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:00:32.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:00:32.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:00:32.794 [DEBUG] [Thread-3213] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:00:34.574 [DEBUG] [Thread-3215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:00:49.621 [DEBUG] [Thread-3216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:01:02.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:01:02.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:01:02.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
2025-11-25T18:01:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 0, 43), 40.15, 6.11, 0.0, 7.2, 27.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:01:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:00:43
2025-11-25T18:01:03.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:01:03.757 [DEBUG] [Thread-3217] [transport.py] [_log()] starting thread (client mode): 0x70d1c7f0
2025-11-25T18:01:03.757 [DEBUG] [Thread-3217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:01:03.776 [DEBUG] [Thread-3217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:01:03.776 [INFO] [Thread-3217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:01:03.779 [DEBUG] [Thread-3217] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:01:03.779 [DEBUG] [Thread-3217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:01:03.779 [DEBUG] [Thread-3217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:01:03.779 [DEBUG] [Thread-3217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:01:03.779 [DEBUG] [Thread-3217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:01:03.779 [DEBUG] [Thread-3217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:01:03.779 [DEBUG] [Thread-3217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:01:03.779 [DEBUG] [Thread-3217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] client lang: <none>
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] server lang: <none>
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] kex follows: False
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] Compression: none
2025-11-25T18:01:03.780 [DEBUG] [Thread-3217] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:01:03.797 [DEBUG] [Thread-3217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:01:03.797 [DEBUG] [Thread-3217] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:01:03.798 [DEBUG] [Thread-3217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:01:03.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:01:03.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:01:03.800 [DEBUG] [Thread-3217] [transport.py] [_log()] userauth is OK
2025-11-25T18:01:03.800 [DEBUG] [Thread-3217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:01:03.800 [DEBUG] [Thread-3217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:01:03.800 [DEBUG] [Thread-3217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:01:03.800 [DEBUG] [Thread-3217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:01:03.824 [INFO] [Thread-3217] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:01:03.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:01:04.423 [DEBUG] [Thread-3217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:01:04.424 [DEBUG] [Thread-3217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:01:04.424 [DEBUG] [Thread-3217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:01:04.465 [DEBUG] [Thread-3217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:01:04.465 [DEBUG] [Thread-3217] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:01:04.468 [DEBUG] [Thread-3217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:01:04.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:01:04.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:01:04.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:01:04.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:01:04.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:01:04.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:01:04.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:01:04.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:01:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:01:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.666767 -999.00  +27.50   3.54     11   -5.20 1 1 1 1 1   887    0 33.42 21.83 ----- 6.0 3.5 111.2 7.8 31.4 -32.7 31.9 -32.2 33.1 -31.0 33.2 -32.4
2025-11-25T18:01:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:01:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:01:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.666767
2025-11-25T18:01:04.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:01:04.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:01:04.494 [DEBUG] [Thread-3217] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:01:04.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:01:04.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:01:04.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:01:04.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:00:43', tmtdew=40.15, humidity=6.11, cloud=0.0, wind=7.2, temperature=27.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:00:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:01:04.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:01:04.594 [DEBUG] [Thread-3220] [transport.py] [_log()] starting thread (client mode): 0x70d1f6d0
2025-11-25T18:01:04.594 [DEBUG] [Thread-3220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:01:04.611 [DEBUG] [Thread-3220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:01:04.612 [INFO] [Thread-3220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:01:04.621 [DEBUG] [Thread-3220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:01:04.621 [DEBUG] [Thread-3220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:01:04.621 [DEBUG] [Thread-3220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] client lang: <none>
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] server lang: <none>
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] kex follows: False
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] Compression: none
2025-11-25T18:01:04.622 [DEBUG] [Thread-3220] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:01:04.658 [DEBUG] [Thread-3222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:01:04.682 [DEBUG] [Thread-3220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:01:04.683 [DEBUG] [Thread-3220] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:01:04.683 [DEBUG] [Thread-3220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:01:04.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:01:04.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:01:04.743 [DEBUG] [Thread-3220] [transport.py] [_log()] userauth is OK
2025-11-25T18:01:04.743 [DEBUG] [Thread-3220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:01:04.744 [DEBUG] [Thread-3220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:01:04.744 [DEBUG] [Thread-3220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:01:04.744 [DEBUG] [Thread-3220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:01:04.762 [INFO] [Thread-3220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:01:04.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:01:04.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:01:05.589 [DEBUG] [Thread-3220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:01:05.589 [DEBUG] [Thread-3220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:01:05.638 [DEBUG] [Thread-3220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:01:05.638 [DEBUG] [Thread-3220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:01:05.648 [DEBUG] [Thread-3220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:01:05.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:01:05.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:01:05.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:01:05.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:01:05.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:01:05.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:01:05.684 [DEBUG] [Thread-3220] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:01:10.274 [DEBUG] [Thread-3223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:01:19.707 [DEBUG] [Thread-3224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:01:34.742 [DEBUG] [Thread-3225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:01:35.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:01:35.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:01:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:01:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 1, 15), 40.08, 6.14, 0.0, 5.1, 27.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:01:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:01:15
2025-11-25T18:01:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:01:36.624 [DEBUG] [Thread-3226] [transport.py] [_log()] starting thread (client mode): 0x70d02a10
2025-11-25T18:01:36.624 [DEBUG] [Thread-3226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:01:36.647 [DEBUG] [Thread-3226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:01:36.647 [INFO] [Thread-3226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:01:36.649 [DEBUG] [Thread-3226] [transport.py] [_log()] client lang: <none>
2025-11-25T18:01:36.650 [DEBUG] [Thread-3226] [transport.py] [_log()] server lang: <none>
2025-11-25T18:01:36.650 [DEBUG] [Thread-3226] [transport.py] [_log()] kex follows: False
2025-11-25T18:01:36.650 [DEBUG] [Thread-3226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:01:36.650 [DEBUG] [Thread-3226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:01:36.650 [DEBUG] [Thread-3226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:01:36.650 [DEBUG] [Thread-3226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:01:36.650 [DEBUG] [Thread-3226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:01:36.650 [DEBUG] [Thread-3226] [transport.py] [_log()] Compression: none
2025-11-25T18:01:36.650 [DEBUG] [Thread-3226] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:01:36.662 [DEBUG] [Thread-3226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:01:36.663 [DEBUG] [Thread-3226] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:01:36.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:01:36.664 [DEBUG] [Thread-3226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:01:36.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:01:36.666 [DEBUG] [Thread-3226] [transport.py] [_log()] userauth is OK
2025-11-25T18:01:36.666 [DEBUG] [Thread-3226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:01:36.666 [DEBUG] [Thread-3226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:01:36.666 [DEBUG] [Thread-3226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:01:36.666 [DEBUG] [Thread-3226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:01:36.690 [INFO] [Thread-3226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:01:36.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:01:37.309 [DEBUG] [Thread-3226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:01:37.310 [DEBUG] [Thread-3226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:01:37.310 [DEBUG] [Thread-3226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:01:37.351 [DEBUG] [Thread-3226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:01:37.351 [DEBUG] [Thread-3226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:01:37.355 [DEBUG] [Thread-3226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:01:37.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:01:37.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:01:37.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:01:37.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:01:37.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:01:37.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:01:37.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:01:37.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:01:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:01:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.667461 -999.00  +27.30   9.39     11   -5.30 1 1 1 1 1   887    0 33.36 23.82 ----- 5.6 9.4 87.6 13.5 31.3 -32.7 31.9 -32.3 33.2 -31.3 33.3 -32.6
2025-11-25T18:01:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:01:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:01:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.667461
2025-11-25T18:01:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:01:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:01:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:01:37.380 [DEBUG] [Thread-3226] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:01:37.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:01:37.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:01:37.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:01:15', tmtdew=40.08, humidity=6.14, cloud=0.0, wind=5.1, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:01:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:01:37.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:01:37.478 [DEBUG] [Thread-3229] [transport.py] [_log()] starting thread (client mode): 0x70d01cf0
2025-11-25T18:01:37.478 [DEBUG] [Thread-3229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:01:37.493 [DEBUG] [Thread-3229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:01:37.494 [INFO] [Thread-3229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:01:37.501 [DEBUG] [Thread-3229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:01:37.501 [DEBUG] [Thread-3229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:01:37.501 [DEBUG] [Thread-3229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:01:37.501 [DEBUG] [Thread-3229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:01:37.501 [DEBUG] [Thread-3229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:01:37.501 [DEBUG] [Thread-3229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] client lang: <none>
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] server lang: <none>
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] kex follows: False
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] Compression: none
2025-11-25T18:01:37.502 [DEBUG] [Thread-3229] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:01:37.560 [DEBUG] [Thread-3229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:01:37.560 [DEBUG] [Thread-3229] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:01:37.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:01:37.562 [DEBUG] [Thread-3229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:01:37.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:01:37.619 [DEBUG] [Thread-3229] [transport.py] [_log()] userauth is OK
2025-11-25T18:01:37.619 [DEBUG] [Thread-3229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:01:37.620 [DEBUG] [Thread-3229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:01:37.620 [DEBUG] [Thread-3229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:01:37.620 [DEBUG] [Thread-3229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:01:37.639 [INFO] [Thread-3229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:01:37.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:01:37.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:01:38.480 [DEBUG] [Thread-3229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:01:38.481 [DEBUG] [Thread-3229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:01:38.529 [DEBUG] [Thread-3229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:01:38.529 [DEBUG] [Thread-3229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:01:38.538 [DEBUG] [Thread-3229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:01:38.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:01: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')
2025-11-25T18:01:38.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:01:38.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:01:38.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:01:38.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:01:38.576 [DEBUG] [Thread-3229] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:01:49.776 [DEBUG] [Thread-3231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:02:04.842 [DEBUG] [Thread-3232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:02:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:02:08.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:02:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:02:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 1, 47), 39.96, 6.14, 0.0, 4.87, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:02:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:01:47
2025-11-25T18:02:09.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:02:09.548 [DEBUG] [Thread-3233] [transport.py] [_log()] starting thread (client mode): 0x70d1e500
2025-11-25T18:02:09.549 [DEBUG] [Thread-3233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:02:09.561 [DEBUG] [Thread-3233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:02:09.561 [INFO] [Thread-3233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] client lang: <none>
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] server lang: <none>
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] kex follows: False
2025-11-25T18:02:09.565 [DEBUG] [Thread-3233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:02:09.566 [DEBUG] [Thread-3233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:02:09.566 [DEBUG] [Thread-3233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:02:09.566 [DEBUG] [Thread-3233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:02:09.566 [DEBUG] [Thread-3233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:02:09.566 [DEBUG] [Thread-3233] [transport.py] [_log()] Compression: none
2025-11-25T18:02:09.566 [DEBUG] [Thread-3233] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:02:09.583 [DEBUG] [Thread-3233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:02:09.584 [DEBUG] [Thread-3233] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:02:09.584 [DEBUG] [Thread-3233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:02:09.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:02:09.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:02:09.586 [DEBUG] [Thread-3233] [transport.py] [_log()] userauth is OK
2025-11-25T18:02:09.586 [DEBUG] [Thread-3233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:02:09.586 [DEBUG] [Thread-3233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:02:09.586 [DEBUG] [Thread-3233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:02:09.586 [DEBUG] [Thread-3233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:02:09.618 [INFO] [Thread-3233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:02:09.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:02:10.361 [DEBUG] [Thread-3233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:02:10.361 [DEBUG] [Thread-3233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:02:10.361 [DEBUG] [Thread-3233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:02:10.403 [DEBUG] [Thread-3233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:02:10.403 [DEBUG] [Thread-3233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:02:10.407 [DEBUG] [Thread-3233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:02:10.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:02:10.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:02:10.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:02:10.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:02:10.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:02:10.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:02:10.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:02:10.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:02:10.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:02:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.667808 -999.00  +27.30   7.26     11   -5.40 1 1 1 1 1   887    0 33.84 25.58 ----- 6.5 7.3 23.8 12.0 31.3 -32.6 31.9 -32.1 33.2 -30.9 33.2 -32.4
2025-11-25T18:02:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:02:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:02:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.667808
2025-11-25T18:02:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:02:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:02:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:02:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:02:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:02:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:01:47', tmtdew=39.96, humidity=6.14, cloud=0.0, wind=4.87, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:01:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:02:10.425 [DEBUG] [Thread-3233] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:02:10.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:02:10.521 [DEBUG] [Thread-3236] [transport.py] [_log()] starting thread (client mode): 0x70d0c670
2025-11-25T18:02:10.521 [DEBUG] [Thread-3236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:02:10.535 [DEBUG] [Thread-3236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:02:10.535 [INFO] [Thread-3236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] client lang: <none>
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] server lang: <none>
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] kex follows: False
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:02:10.543 [DEBUG] [Thread-3236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:02:10.544 [DEBUG] [Thread-3236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:02:10.544 [DEBUG] [Thread-3236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:02:10.544 [DEBUG] [Thread-3236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:02:10.544 [DEBUG] [Thread-3236] [transport.py] [_log()] Compression: none
2025-11-25T18:02:10.544 [DEBUG] [Thread-3236] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:02:10.603 [DEBUG] [Thread-3236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:02:10.604 [DEBUG] [Thread-3236] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:02:10.604 [DEBUG] [Thread-3236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:02:10.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:02:10.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:02:10.660 [DEBUG] [Thread-3236] [transport.py] [_log()] userauth is OK
2025-11-25T18:02:10.660 [DEBUG] [Thread-3236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:02:10.660 [DEBUG] [Thread-3236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:02:10.660 [DEBUG] [Thread-3236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:02:10.661 [DEBUG] [Thread-3236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:02:10.679 [INFO] [Thread-3236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:02:10.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:02:10.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:02:11.033 [DEBUG] [Thread-3238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:02:11.486 [DEBUG] [Thread-3236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:02:11.486 [DEBUG] [Thread-3236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:02:11.534 [DEBUG] [Thread-3236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:02:11.534 [DEBUG] [Thread-3236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:02:11.542 [DEBUG] [Thread-3236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:02:11.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:02:11.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:02:11.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:02:11.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:02:11.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:02:11.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:02:11.574 [DEBUG] [Thread-3236] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:02:19.877 [DEBUG] [Thread-3239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:02:34.916 [DEBUG] [Thread-3240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:02:41.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:02:41.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:02:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:02:42.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 2, 19), 39.9, 6.18, 0.0, 4.57, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:02:42.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:02:19
2025-11-25T18:02:42.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:02:42.528 [DEBUG] [Thread-3241] [transport.py] [_log()] starting thread (client mode): 0x70d281f0
2025-11-25T18:02:42.528 [DEBUG] [Thread-3241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:02:42.552 [DEBUG] [Thread-3241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:02:42.552 [INFO] [Thread-3241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:02:42.555 [DEBUG] [Thread-3241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:02:42.555 [DEBUG] [Thread-3241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:02:42.555 [DEBUG] [Thread-3241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] client lang: <none>
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] server lang: <none>
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] kex follows: False
2025-11-25T18:02:42.556 [DEBUG] [Thread-3241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:02:42.557 [DEBUG] [Thread-3241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:02:42.557 [DEBUG] [Thread-3241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:02:42.557 [DEBUG] [Thread-3241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:02:42.557 [DEBUG] [Thread-3241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:02:42.557 [DEBUG] [Thread-3241] [transport.py] [_log()] Compression: none
2025-11-25T18:02:42.557 [DEBUG] [Thread-3241] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:02:42.570 [DEBUG] [Thread-3241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:02:42.570 [DEBUG] [Thread-3241] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:02:42.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:02:42.571 [DEBUG] [Thread-3241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:02:42.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:02:42.573 [DEBUG] [Thread-3241] [transport.py] [_log()] userauth is OK
2025-11-25T18:02:42.574 [DEBUG] [Thread-3241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:02:42.574 [DEBUG] [Thread-3241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:02:42.574 [DEBUG] [Thread-3241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:02:42.574 [DEBUG] [Thread-3241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:02:42.610 [INFO] [Thread-3241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:02:42.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:02:43.302 [DEBUG] [Thread-3241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:02:43.303 [DEBUG] [Thread-3241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:02:43.303 [DEBUG] [Thread-3241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:02:43.344 [DEBUG] [Thread-3241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:02:43.344 [DEBUG] [Thread-3241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:02:43.348 [DEBUG] [Thread-3241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:02:43.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:02:43.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:02:43.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:02:43.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:02:43.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:02:43.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:02:43.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:02:43.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:02:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:02:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.668156 -999.00  +27.20   3.79     11   -5.40 1 1 1 1 1   887    0 33.66 27.28 ----- 5.1 3.8 17.8 7.8 31.3 -32.7 31.8 -32.7 33.2 -31.2 33.1 -32.7
2025-11-25T18:02:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:02:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:02:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.668156
2025-11-25T18:02:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:02:43.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:02:43.375 [DEBUG] [Thread-3241] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:02:43.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:02:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:02:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:02:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:02:19', tmtdew=39.9, humidity=6.18, cloud=0.0, wind=4.57, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:02:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:02:43.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:02:43.471 [DEBUG] [Thread-3244] [transport.py] [_log()] starting thread (client mode): 0x70d1efe0
2025-11-25T18:02:43.472 [DEBUG] [Thread-3244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:02:43.486 [DEBUG] [Thread-3244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:02:43.486 [INFO] [Thread-3244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] client lang: <none>
2025-11-25T18:02:43.494 [DEBUG] [Thread-3244] [transport.py] [_log()] server lang: <none>
2025-11-25T18:02:43.495 [DEBUG] [Thread-3244] [transport.py] [_log()] kex follows: False
2025-11-25T18:02:43.495 [DEBUG] [Thread-3244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:02:43.495 [DEBUG] [Thread-3244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:02:43.495 [DEBUG] [Thread-3244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:02:43.495 [DEBUG] [Thread-3244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:02:43.495 [DEBUG] [Thread-3244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:02:43.495 [DEBUG] [Thread-3244] [transport.py] [_log()] Compression: none
2025-11-25T18:02:43.495 [DEBUG] [Thread-3244] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:02:43.553 [DEBUG] [Thread-3244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:02:43.554 [DEBUG] [Thread-3244] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:02:43.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:02:43.555 [DEBUG] [Thread-3244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:02:43.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:02:43.612 [DEBUG] [Thread-3244] [transport.py] [_log()] userauth is OK
2025-11-25T18:02:43.612 [DEBUG] [Thread-3244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:02:43.613 [DEBUG] [Thread-3244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:02:43.613 [DEBUG] [Thread-3244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:02:43.613 [DEBUG] [Thread-3244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:02:43.630 [INFO] [Thread-3244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:02:43.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:02:43.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:02:44.419 [DEBUG] [Thread-3244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:02:44.419 [DEBUG] [Thread-3244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:02:44.467 [DEBUG] [Thread-3244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:02:44.467 [DEBUG] [Thread-3244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:02:44.476 [DEBUG] [Thread-3244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:02:44.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:02:44.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:02:44.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:02:44.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:02:44.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:02:44.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:02:44.511 [DEBUG] [Thread-3244] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:02:49.954 [DEBUG] [Thread-3246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:03:05.015 [DEBUG] [Thread-3247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:03:11.805 [DEBUG] [Thread-3248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:03:14.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:03:14.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:03:14.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:03:15.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 2, 51), 39.97, 6.16, 0.0, 5.72, 27.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:03:15.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:02:51
2025-11-25T18:03:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:03:15.475 [DEBUG] [Thread-3249] [transport.py] [_log()] starting thread (client mode): 0x70d02860
2025-11-25T18:03:15.475 [DEBUG] [Thread-3249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:03:15.490 [DEBUG] [Thread-3249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:03:15.491 [INFO] [Thread-3249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] client lang: <none>
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] server lang: <none>
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] kex follows: False
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:03:15.493 [DEBUG] [Thread-3249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:03:15.494 [DEBUG] [Thread-3249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:03:15.494 [DEBUG] [Thread-3249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:03:15.494 [DEBUG] [Thread-3249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:03:15.494 [DEBUG] [Thread-3249] [transport.py] [_log()] Compression: none
2025-11-25T18:03:15.494 [DEBUG] [Thread-3249] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:03:15.511 [DEBUG] [Thread-3249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:03:15.511 [DEBUG] [Thread-3249] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:03:15.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:03:15.513 [DEBUG] [Thread-3249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:03:15.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:03:15.514 [DEBUG] [Thread-3249] [transport.py] [_log()] userauth is OK
2025-11-25T18:03:15.514 [DEBUG] [Thread-3249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:03:15.515 [DEBUG] [Thread-3249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:03:15.515 [DEBUG] [Thread-3249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:03:15.515 [DEBUG] [Thread-3249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:03:15.530 [INFO] [Thread-3249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:03:15.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:03:16.290 [DEBUG] [Thread-3249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:03:16.290 [DEBUG] [Thread-3249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:03:16.291 [DEBUG] [Thread-3249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:03:16.332 [DEBUG] [Thread-3249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:03:16.332 [DEBUG] [Thread-3249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:03:16.335 [DEBUG] [Thread-3249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:03:16.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:03:16.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:03:16.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:03:16.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:03:16.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:03:16.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:03:16.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:03:16.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:03:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:03:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.668503 -999.00  +27.30   2.03     11   -5.50 1 1 1 1 1   887    0 33.35 28.03 ----- 3.6 2.0 13.5 5.7 31.4 -32.7 31.9 -32.5 33.2 -30.9 33.1 -32.4
2025-11-25T18:03:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:03:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:03:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.668503
2025-11-25T18:03:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:03:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:03:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:03:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:03:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:03:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:02:51', tmtdew=39.97, humidity=6.16, cloud=0.0, wind=5.72, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:02:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:03:16.356 [DEBUG] [Thread-3249] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:03:16.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:03:16.451 [DEBUG] [Thread-3252] [transport.py] [_log()] starting thread (client mode): 0x70d01bd0
2025-11-25T18:03:16.451 [DEBUG] [Thread-3252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:03:16.466 [DEBUG] [Thread-3252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:03:16.466 [INFO] [Thread-3252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:03:16.474 [DEBUG] [Thread-3252] [transport.py] [_log()] client lang: <none>
2025-11-25T18:03:16.475 [DEBUG] [Thread-3252] [transport.py] [_log()] server lang: <none>
2025-11-25T18:03:16.475 [DEBUG] [Thread-3252] [transport.py] [_log()] kex follows: False
2025-11-25T18:03:16.475 [DEBUG] [Thread-3252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:03:16.475 [DEBUG] [Thread-3252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:03:16.475 [DEBUG] [Thread-3252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:03:16.475 [DEBUG] [Thread-3252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:03:16.475 [DEBUG] [Thread-3252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:03:16.475 [DEBUG] [Thread-3252] [transport.py] [_log()] Compression: none
2025-11-25T18:03:16.475 [DEBUG] [Thread-3252] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:03:16.532 [DEBUG] [Thread-3252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:03:16.533 [DEBUG] [Thread-3252] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:03:16.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:03:16.534 [DEBUG] [Thread-3252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:03:16.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:03:16.588 [DEBUG] [Thread-3252] [transport.py] [_log()] userauth is OK
2025-11-25T18:03:16.589 [DEBUG] [Thread-3252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:03:16.589 [DEBUG] [Thread-3252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:03:16.589 [DEBUG] [Thread-3252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:03:16.589 [DEBUG] [Thread-3252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:03:16.607 [INFO] [Thread-3252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:03:16.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:03:16.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:03:17.459 [DEBUG] [Thread-3252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:03:17.459 [DEBUG] [Thread-3252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:03:17.507 [DEBUG] [Thread-3252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:03:17.507 [DEBUG] [Thread-3252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:03:17.521 [DEBUG] [Thread-3252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:03:17.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:03: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')
2025-11-25T18:03:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:03:17.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:03:17.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:03:17.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:03:17.558 [DEBUG] [Thread-3252] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:03:20.049 [DEBUG] [Thread-3254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:03:35.107 [DEBUG] [Thread-3255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:03:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:03:47.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:03:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:03:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 3, 23), 40.09, 6.11, 0.0, 10.66, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:03:48.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:03:23
2025-11-25T18:03:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:03:48.562 [DEBUG] [Thread-3256] [transport.py] [_log()] starting thread (client mode): 0x70d2b550
2025-11-25T18:03:48.562 [DEBUG] [Thread-3256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:03:48.580 [DEBUG] [Thread-3256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:03:48.580 [INFO] [Thread-3256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] client lang: <none>
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] server lang: <none>
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] kex follows: False
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] Compression: none
2025-11-25T18:03:48.584 [DEBUG] [Thread-3256] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:03:48.598 [DEBUG] [Thread-3256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:03:48.599 [DEBUG] [Thread-3256] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:03:48.599 [DEBUG] [Thread-3256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:03:48.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:03:48.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:03:48.600 [DEBUG] [Thread-3256] [transport.py] [_log()] userauth is OK
2025-11-25T18:03:48.600 [DEBUG] [Thread-3256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:03:48.600 [DEBUG] [Thread-3256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:03:48.600 [DEBUG] [Thread-3256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:03:48.600 [DEBUG] [Thread-3256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:03:48.615 [INFO] [Thread-3256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:03:48.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:03:49.266 [DEBUG] [Thread-3256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:03:49.266 [DEBUG] [Thread-3256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:03:49.266 [DEBUG] [Thread-3256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:03:49.306 [DEBUG] [Thread-3256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:03:49.306 [DEBUG] [Thread-3256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:03:49.309 [DEBUG] [Thread-3256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:03:49.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:03:49.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:03:49.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:03:49.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:03:49.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:03:49.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:03:49.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:03:49.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:03:49.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:03:49.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.668850 -999.00  +27.30   2.57     11   -5.40 1 1 1 1 1   887    0 33.41 29.00 ----- 1.8 2.6 49.1 4.5 31.4 -32.6 31.9 -32.3 33.2 -30.5 33.1 -32.7
2025-11-25T18:03:49.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:03:49.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:03:49.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.668850
2025-11-25T18:03:49.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:03:49.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:03:49.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:03:49.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:03:49.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:03:49.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:03:23', tmtdew=40.09, humidity=6.11, cloud=0.0, wind=10.66, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:03:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:03:49.326 [DEBUG] [Thread-3256] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:03:49.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:03:49.411 [DEBUG] [Thread-3259] [transport.py] [_log()] starting thread (client mode): 0x70d2b730
2025-11-25T18:03:49.411 [DEBUG] [Thread-3259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:03:49.426 [DEBUG] [Thread-3259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:03:49.426 [INFO] [Thread-3259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] client lang: <none>
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] server lang: <none>
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] kex follows: False
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] Compression: none
2025-11-25T18:03:49.434 [DEBUG] [Thread-3259] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:03:49.490 [DEBUG] [Thread-3259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:03:49.491 [DEBUG] [Thread-3259] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:03:49.491 [DEBUG] [Thread-3259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:03:49.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:03:49.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:03:49.552 [DEBUG] [Thread-3259] [transport.py] [_log()] userauth is OK
2025-11-25T18:03:49.552 [DEBUG] [Thread-3259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:03:49.552 [DEBUG] [Thread-3259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:03:49.552 [DEBUG] [Thread-3259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:03:49.552 [DEBUG] [Thread-3259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:03:49.566 [INFO] [Thread-3259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:03:49.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:03:49.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:03:50.137 [DEBUG] [Thread-3261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:03:50.426 [DEBUG] [Thread-3259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:03:50.426 [DEBUG] [Thread-3259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:03:50.477 [DEBUG] [Thread-3259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:03:50.477 [DEBUG] [Thread-3259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:03:50.490 [DEBUG] [Thread-3259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:03:50.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:03:50.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:03:50.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:03:50.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:03:50.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:03:50.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:03:50.535 [DEBUG] [Thread-3259] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:04:05.191 [DEBUG] [Thread-3262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:04:12.536 [DEBUG] [Thread-3263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:04:20.229 [DEBUG] [Thread-3264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:04:20.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:04:20.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:04:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:04:21.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 3, 55), 40.04, 6.06, 0.0, 9.83, 27.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:04:21.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:03:55
2025-11-25T18:04:21.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:04:21.492 [DEBUG] [Thread-3265] [transport.py] [_log()] starting thread (client mode): 0x70d2b430
2025-11-25T18:04:21.492 [DEBUG] [Thread-3265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:04:21.513 [DEBUG] [Thread-3265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:04:21.513 [INFO] [Thread-3265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] client lang: <none>
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] server lang: <none>
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] kex follows: False
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:04:21.516 [DEBUG] [Thread-3265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:04:21.517 [DEBUG] [Thread-3265] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:04:21.517 [DEBUG] [Thread-3265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:04:21.517 [DEBUG] [Thread-3265] [transport.py] [_log()] Compression: none
2025-11-25T18:04:21.517 [DEBUG] [Thread-3265] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:04:21.534 [DEBUG] [Thread-3265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:04:21.534 [DEBUG] [Thread-3265] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:04:21.535 [DEBUG] [Thread-3265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:04:21.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:04:21.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:04:21.536 [DEBUG] [Thread-3265] [transport.py] [_log()] userauth is OK
2025-11-25T18:04:21.537 [DEBUG] [Thread-3265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:04:21.537 [DEBUG] [Thread-3265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:04:21.537 [DEBUG] [Thread-3265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:04:21.537 [DEBUG] [Thread-3265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:04:21.560 [INFO] [Thread-3265] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:04:21.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:04:22.346 [DEBUG] [Thread-3265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:04:22.346 [DEBUG] [Thread-3265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:04:22.346 [DEBUG] [Thread-3265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:04:22.387 [DEBUG] [Thread-3265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:04:22.387 [DEBUG] [Thread-3265] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:04:22.389 [DEBUG] [Thread-3265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:04:22.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:04:22.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:04:22.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:04:22.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:04:22.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:04:22.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:04:22.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:04:22.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:04:22.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:04:22.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.669197 -999.00  +27.50   2.02     11   -5.40 1 1 1 1 1   887    0 33.13 33.33 ----- 1.0 2.0 328.6 4.2 31.5 -32.6 32.0 -32.0 33.2 -30.5 33.1 -32.3
2025-11-25T18:04:22.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:04:22.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:04:22.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.669197
2025-11-25T18:04:22.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:04:22.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:04:22.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:04:22.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:04:22.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:04:22.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:03:55', tmtdew=40.04, humidity=6.06, cloud=0.0, wind=9.83, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:03:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:04:22.408 [DEBUG] [Thread-3265] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:04:22.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:04:22.494 [DEBUG] [Thread-3268] [transport.py] [_log()] starting thread (client mode): 0x70d2ba00
2025-11-25T18:04:22.494 [DEBUG] [Thread-3268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:04:22.508 [DEBUG] [Thread-3268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:04:22.508 [INFO] [Thread-3268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] client lang: <none>
2025-11-25T18:04:22.516 [DEBUG] [Thread-3268] [transport.py] [_log()] server lang: <none>
2025-11-25T18:04:22.517 [DEBUG] [Thread-3268] [transport.py] [_log()] kex follows: False
2025-11-25T18:04:22.517 [DEBUG] [Thread-3268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:04:22.517 [DEBUG] [Thread-3268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:04:22.517 [DEBUG] [Thread-3268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:04:22.517 [DEBUG] [Thread-3268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:04:22.517 [DEBUG] [Thread-3268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:04:22.517 [DEBUG] [Thread-3268] [transport.py] [_log()] Compression: none
2025-11-25T18:04:22.517 [DEBUG] [Thread-3268] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:04:22.571 [DEBUG] [Thread-3268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:04:22.571 [DEBUG] [Thread-3268] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:04:22.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:04:22.572 [DEBUG] [Thread-3268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:04:22.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:04:22.629 [DEBUG] [Thread-3268] [transport.py] [_log()] userauth is OK
2025-11-25T18:04:22.629 [DEBUG] [Thread-3268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:04:22.629 [DEBUG] [Thread-3268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:04:22.629 [DEBUG] [Thread-3268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:04:22.629 [DEBUG] [Thread-3268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:04:22.643 [INFO] [Thread-3268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:04:22.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:04:22.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:04:23.485 [DEBUG] [Thread-3268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:04:23.485 [DEBUG] [Thread-3268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:04:23.533 [DEBUG] [Thread-3268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:04:23.533 [DEBUG] [Thread-3268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:04:23.542 [DEBUG] [Thread-3268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:04:23.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:04:23.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:04:23.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:04:23.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:04:23.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:04:23.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:04:23.573 [DEBUG] [Thread-3268] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:04:35.261 [DEBUG] [Thread-3270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:04:50.315 [DEBUG] [Thread-3271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:04:53.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:04:53.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:04:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:04:54.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 4, 27), 40.05, 6.06, 0.0, 8.81, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:04:54.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:04:27
2025-11-25T18:04:54.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:04:54.526 [DEBUG] [Thread-3272] [transport.py] [_log()] starting thread (client mode): 0x70d2b8e0
2025-11-25T18:04:54.526 [DEBUG] [Thread-3272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:04:54.547 [DEBUG] [Thread-3272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:04:54.548 [INFO] [Thread-3272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] client lang: <none>
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] server lang: <none>
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] kex follows: False
2025-11-25T18:04:54.552 [DEBUG] [Thread-3272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:04:54.553 [DEBUG] [Thread-3272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:04:54.553 [DEBUG] [Thread-3272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:04:54.553 [DEBUG] [Thread-3272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:04:54.553 [DEBUG] [Thread-3272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:04:54.553 [DEBUG] [Thread-3272] [transport.py] [_log()] Compression: none
2025-11-25T18:04:54.553 [DEBUG] [Thread-3272] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:04:54.570 [DEBUG] [Thread-3272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:04:54.570 [DEBUG] [Thread-3272] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:04:54.571 [DEBUG] [Thread-3272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:04:54.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:04:54.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:04:54.572 [DEBUG] [Thread-3272] [transport.py] [_log()] userauth is OK
2025-11-25T18:04:54.573 [DEBUG] [Thread-3272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:04:54.573 [DEBUG] [Thread-3272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:04:54.573 [DEBUG] [Thread-3272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:04:54.573 [DEBUG] [Thread-3272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:04:54.591 [INFO] [Thread-3272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:04:54.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:04:55.245 [DEBUG] [Thread-3272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:04:55.246 [DEBUG] [Thread-3272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:04:55.247 [DEBUG] [Thread-3272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:04:55.287 [DEBUG] [Thread-3272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:04:55.287 [DEBUG] [Thread-3272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:04:55.290 [DEBUG] [Thread-3272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:04:55.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:04:55.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:04:55.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:04:55.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:04:55.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:04:55.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:04:55.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:04:55.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:04:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:04:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.669544 -999.00  +27.60   6.70     11   -5.40 1 1 1 1 1   887    0 33.43 35.48 ----- 6.3 6.7 35.0 8.4 31.5 -32.6 32.0 -32.4 33.3 -30.5 33.2 -32.8
2025-11-25T18:04:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:04:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:04:55.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.669544
2025-11-25T18:04:55.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:04:55.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:04:55.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:04:55.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:04:55.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:04:55.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:04:27', tmtdew=40.05, humidity=6.06, cloud=0.0, wind=8.81, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:04:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:04:55.316 [DEBUG] [Thread-3272] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:04:55.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:04:55.411 [DEBUG] [Thread-3275] [transport.py] [_log()] starting thread (client mode): 0x70d1fbb0
2025-11-25T18:04:55.411 [DEBUG] [Thread-3275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:04:55.428 [DEBUG] [Thread-3275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:04:55.428 [INFO] [Thread-3275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:04:55.436 [DEBUG] [Thread-3275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:04:55.436 [DEBUG] [Thread-3275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:04:55.436 [DEBUG] [Thread-3275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:04:55.436 [DEBUG] [Thread-3275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:04:55.436 [DEBUG] [Thread-3275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:04:55.437 [DEBUG] [Thread-3275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:04:55.437 [DEBUG] [Thread-3275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:04:55.437 [DEBUG] [Thread-3275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:04:55.437 [DEBUG] [Thread-3275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:04:55.437 [DEBUG] [Thread-3275] [transport.py] [_log()] client lang: <none>
2025-11-25T18:04:55.437 [DEBUG] [Thread-3275] [transport.py] [_log()] server lang: <none>
2025-11-25T18:04:55.437 [DEBUG] [Thread-3275] [transport.py] [_log()] kex follows: False
2025-11-25T18:04:55.437 [DEBUG] [Thread-3275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:04:55.438 [DEBUG] [Thread-3275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:04:55.438 [DEBUG] [Thread-3275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:04:55.438 [DEBUG] [Thread-3275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:04:55.438 [DEBUG] [Thread-3275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:04:55.438 [DEBUG] [Thread-3275] [transport.py] [_log()] Compression: none
2025-11-25T18:04:55.438 [DEBUG] [Thread-3275] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:04:55.494 [DEBUG] [Thread-3275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:04:55.494 [DEBUG] [Thread-3275] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:04:55.495 [DEBUG] [Thread-3275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:04:55.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:04:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:04:55.549 [DEBUG] [Thread-3275] [transport.py] [_log()] userauth is OK
2025-11-25T18:04:55.549 [DEBUG] [Thread-3275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:04:55.549 [DEBUG] [Thread-3275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:04:55.550 [DEBUG] [Thread-3275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:04:55.550 [DEBUG] [Thread-3275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:04:55.569 [INFO] [Thread-3275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:04:55.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:04:55.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:04:56.434 [DEBUG] [Thread-3275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:04:56.434 [DEBUG] [Thread-3275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:04:56.482 [DEBUG] [Thread-3275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:04:56.482 [DEBUG] [Thread-3275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:04:56.491 [DEBUG] [Thread-3275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:04:56.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:04:56.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:04:56.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:04:56.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:04:56.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:04:56.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:04:56.527 [DEBUG] [Thread-3275] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:05:05.352 [DEBUG] [Thread-3277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:05:13.264 [DEBUG] [Thread-3278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:05:20.405 [DEBUG] [Thread-3279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:05:26.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:05:26.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:05:26.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:05:27.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 4, 59), 39.97, 6.58, 0.0, 8.28, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:05:27.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:04:59
2025-11-25T18:05:27.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:05:27.451 [DEBUG] [Thread-3280] [transport.py] [_log()] starting thread (client mode): 0x70d03580
2025-11-25T18:05:27.451 [DEBUG] [Thread-3280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:05:27.470 [DEBUG] [Thread-3280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:05:27.470 [INFO] [Thread-3280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] client lang: <none>
2025-11-25T18:05:27.472 [DEBUG] [Thread-3280] [transport.py] [_log()] server lang: <none>
2025-11-25T18:05:27.473 [DEBUG] [Thread-3280] [transport.py] [_log()] kex follows: False
2025-11-25T18:05:27.473 [DEBUG] [Thread-3280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:05:27.473 [DEBUG] [Thread-3280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:05:27.473 [DEBUG] [Thread-3280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:05:27.473 [DEBUG] [Thread-3280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:05:27.473 [DEBUG] [Thread-3280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:05:27.473 [DEBUG] [Thread-3280] [transport.py] [_log()] Compression: none
2025-11-25T18:05:27.473 [DEBUG] [Thread-3280] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:05:27.480 [DEBUG] [Thread-3280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:05:27.481 [DEBUG] [Thread-3280] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:05:27.481 [DEBUG] [Thread-3280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:05:27.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:05:27.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:05:27.482 [DEBUG] [Thread-3280] [transport.py] [_log()] userauth is OK
2025-11-25T18:05:27.482 [DEBUG] [Thread-3280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:05:27.482 [DEBUG] [Thread-3280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:05:27.482 [DEBUG] [Thread-3280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:05:27.482 [DEBUG] [Thread-3280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:05:27.512 [INFO] [Thread-3280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:05:27.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:05:28.367 [DEBUG] [Thread-3280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:05:28.368 [DEBUG] [Thread-3280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:05:28.368 [DEBUG] [Thread-3280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:05:28.409 [DEBUG] [Thread-3280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:05:28.409 [DEBUG] [Thread-3280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:05:28.411 [DEBUG] [Thread-3280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:05:28.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:05:28.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:05:28.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:05:28.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:05:28.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:05:28.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:05:28.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:05:28.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:05:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:05:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.669892 -999.00  +27.50   6.38     11   -5.40 1 1 1 1 1   887    0 33.58 35.45 ----- 9.6 6.4 337.8 8.5 31.4 -32.8 32.0 -32.9 33.2 -30.8 33.2 -32.3
2025-11-25T18:05:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:05:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:05:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.669892
2025-11-25T18:05:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:05:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:05:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:05:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:05:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:05:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:04:59', tmtdew=39.97, humidity=6.58, cloud=0.0, wind=8.28, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:04:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:05:28.438 [DEBUG] [Thread-3280] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:05:28.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:05:28.534 [DEBUG] [Thread-3283] [transport.py] [_log()] starting thread (client mode): 0x70d1f490
2025-11-25T18:05:28.534 [DEBUG] [Thread-3283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:05:28.552 [DEBUG] [Thread-3283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:05:28.553 [INFO] [Thread-3283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:05:28.560 [DEBUG] [Thread-3283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:05:28.561 [DEBUG] [Thread-3283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:05:28.561 [DEBUG] [Thread-3283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:05:28.561 [DEBUG] [Thread-3283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:05:28.561 [DEBUG] [Thread-3283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:05:28.561 [DEBUG] [Thread-3283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:05:28.561 [DEBUG] [Thread-3283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:05:28.561 [DEBUG] [Thread-3283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:05:28.562 [DEBUG] [Thread-3283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:05:28.562 [DEBUG] [Thread-3283] [transport.py] [_log()] client lang: <none>
2025-11-25T18:05:28.562 [DEBUG] [Thread-3283] [transport.py] [_log()] server lang: <none>
2025-11-25T18:05:28.562 [DEBUG] [Thread-3283] [transport.py] [_log()] kex follows: False
2025-11-25T18:05:28.562 [DEBUG] [Thread-3283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:05:28.562 [DEBUG] [Thread-3283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:05:28.562 [DEBUG] [Thread-3283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:05:28.562 [DEBUG] [Thread-3283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:05:28.563 [DEBUG] [Thread-3283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:05:28.563 [DEBUG] [Thread-3283] [transport.py] [_log()] Compression: none
2025-11-25T18:05:28.563 [DEBUG] [Thread-3283] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:05:28.618 [DEBUG] [Thread-3283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:05:28.619 [DEBUG] [Thread-3283] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:05:28.620 [DEBUG] [Thread-3283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:05:28.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:05:28.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:05:28.678 [DEBUG] [Thread-3283] [transport.py] [_log()] userauth is OK
2025-11-25T18:05:28.678 [DEBUG] [Thread-3283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:05:28.678 [DEBUG] [Thread-3283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:05:28.679 [DEBUG] [Thread-3283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:05:28.679 [DEBUG] [Thread-3283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:05:28.697 [INFO] [Thread-3283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:05:28.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:05:28.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:05:29.505 [DEBUG] [Thread-3283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:05:29.506 [DEBUG] [Thread-3283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:05:29.554 [DEBUG] [Thread-3283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:05:29.554 [DEBUG] [Thread-3283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:05:29.563 [DEBUG] [Thread-3283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:05:29.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:05:29.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')
2025-11-25T18:05:29.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:05:29.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:05:29.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:05:29.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:05:29.600 [DEBUG] [Thread-3283] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:05:35.440 [DEBUG] [Thread-3285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:05:50.489 [DEBUG] [Thread-3286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:05:59.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:05:59.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:05: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
2025-11-25T18:06:00.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 5, 31), 39.97, 6.58, 0.0, 8.45, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:06:00.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:05:31
2025-11-25T18:06:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:06:00.528 [DEBUG] [Thread-3287] [transport.py] [_log()] starting thread (client mode): 0x70d1f220
2025-11-25T18:06:00.528 [DEBUG] [Thread-3287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:06:00.548 [DEBUG] [Thread-3287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:06:00.548 [INFO] [Thread-3287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:06:00.551 [DEBUG] [Thread-3287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:06:00.551 [DEBUG] [Thread-3287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:06:00.551 [DEBUG] [Thread-3287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:06:00.551 [DEBUG] [Thread-3287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] client lang: <none>
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] server lang: <none>
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] kex follows: False
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] Compression: none
2025-11-25T18:06:00.552 [DEBUG] [Thread-3287] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:06:00.568 [DEBUG] [Thread-3287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:06:00.569 [DEBUG] [Thread-3287] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:06:00.569 [DEBUG] [Thread-3287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:06:00.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:06:00.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:06:00.571 [DEBUG] [Thread-3287] [transport.py] [_log()] userauth is OK
2025-11-25T18:06:00.571 [DEBUG] [Thread-3287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:06:00.572 [DEBUG] [Thread-3287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:06:00.572 [DEBUG] [Thread-3287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:06:00.572 [DEBUG] [Thread-3287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:06:00.596 [INFO] [Thread-3287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:06:00.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:06:01.244 [DEBUG] [Thread-3287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:06:01.244 [DEBUG] [Thread-3287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:06:01.245 [DEBUG] [Thread-3287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:06:01.284 [DEBUG] [Thread-3287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:06:01.285 [DEBUG] [Thread-3287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:06:01.287 [DEBUG] [Thread-3287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:06:01.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:06:01.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:06:01.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:06:01.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:06:01.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:06:01.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:06:01.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:06:01.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.670239 -999.00  +27.20  14.00     11   -5.50 1 1 1 1 1   887    0 33.36 35.65 ----- 12.2 14.0 23.6 15.1 31.4 -33.1 32.0 -33.8 33.1 -32.1 33.1 -32.8
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.670239
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:06:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:05:31', tmtdew=39.97, humidity=6.58, cloud=0.0, wind=8.45, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:05:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:06:01.306 [DEBUG] [Thread-3287] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:06:01.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:06:01.393 [DEBUG] [Thread-3290] [transport.py] [_log()] starting thread (client mode): 0x70d39a20
2025-11-25T18:06:01.393 [DEBUG] [Thread-3290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:06:01.413 [DEBUG] [Thread-3290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:06:01.413 [INFO] [Thread-3290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:06:01.420 [DEBUG] [Thread-3290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:06:01.420 [DEBUG] [Thread-3290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] client lang: <none>
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] server lang: <none>
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] kex follows: False
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:06:01.421 [DEBUG] [Thread-3290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:06:01.422 [DEBUG] [Thread-3290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:06:01.422 [DEBUG] [Thread-3290] [transport.py] [_log()] Compression: none
2025-11-25T18:06:01.422 [DEBUG] [Thread-3290] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:06:01.483 [DEBUG] [Thread-3290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:06:01.484 [DEBUG] [Thread-3290] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:06:01.484 [DEBUG] [Thread-3290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:06:01.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:06:01.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:06:01.544 [DEBUG] [Thread-3290] [transport.py] [_log()] userauth is OK
2025-11-25T18:06:01.544 [DEBUG] [Thread-3290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:06:01.544 [DEBUG] [Thread-3290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:06:01.545 [DEBUG] [Thread-3290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:06:01.545 [DEBUG] [Thread-3290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:06:01.565 [INFO] [Thread-3290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:06:01.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:06:01.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:06:02.433 [DEBUG] [Thread-3290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:06:02.434 [DEBUG] [Thread-3290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:06:02.482 [DEBUG] [Thread-3290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:06:02.482 [DEBUG] [Thread-3290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:06:02.491 [DEBUG] [Thread-3290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:06:02.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:06:02.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:06:02.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:06:02.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:06:02.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:06:02.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:06:02.536 [DEBUG] [Thread-3290] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:06:05.525 [DEBUG] [Thread-3292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:06:13.798 [DEBUG] [Thread-3293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:06:20.563 [DEBUG] [Thread-3294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:06:32.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:06:32.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:06:32.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:06:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 6, 3), 40.05, 6.53, 0.0, 8.05, 27.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:06:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:06:03
2025-11-25T18:06:33.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:06:33.492 [DEBUG] [Thread-3295] [transport.py] [_log()] starting thread (client mode): 0x70d00160
2025-11-25T18:06:33.492 [DEBUG] [Thread-3295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:06:33.513 [DEBUG] [Thread-3295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:06:33.514 [INFO] [Thread-3295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:06:33.517 [DEBUG] [Thread-3295] [transport.py] [_log()] client lang: <none>
2025-11-25T18:06:33.518 [DEBUG] [Thread-3295] [transport.py] [_log()] server lang: <none>
2025-11-25T18:06:33.518 [DEBUG] [Thread-3295] [transport.py] [_log()] kex follows: False
2025-11-25T18:06:33.518 [DEBUG] [Thread-3295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:06:33.518 [DEBUG] [Thread-3295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:06:33.518 [DEBUG] [Thread-3295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:06:33.518 [DEBUG] [Thread-3295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:06:33.518 [DEBUG] [Thread-3295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:06:33.518 [DEBUG] [Thread-3295] [transport.py] [_log()] Compression: none
2025-11-25T18:06:33.518 [DEBUG] [Thread-3295] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:06:33.535 [DEBUG] [Thread-3295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:06:33.536 [DEBUG] [Thread-3295] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:06:33.537 [DEBUG] [Thread-3295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:06:33.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:06:33.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:06:33.539 [DEBUG] [Thread-3295] [transport.py] [_log()] userauth is OK
2025-11-25T18:06:33.539 [DEBUG] [Thread-3295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:06:33.539 [DEBUG] [Thread-3295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:06:33.539 [DEBUG] [Thread-3295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:06:33.539 [DEBUG] [Thread-3295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:06:33.553 [INFO] [Thread-3295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:06:33.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:06:34.369 [DEBUG] [Thread-3295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:06:34.369 [DEBUG] [Thread-3295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:06:34.369 [DEBUG] [Thread-3295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:06:34.410 [DEBUG] [Thread-3295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:06:34.410 [DEBUG] [Thread-3295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:06:34.414 [DEBUG] [Thread-3295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:06:34.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:06:34.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:06:34.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:06:34.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:06:34.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:06:34.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:06:34.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:06:34.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:06:34.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:06:34.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.670933 -999.00  +27.10  12.87     11   -5.50 1 1 1 1 1   887    0 34.12 39.41 ----- 11.5 12.9 48.6 14.9 31.3 -33.3 31.8 -33.5 33.0 -32.6 32.8 -32.4
2025-11-25T18:06:34.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:06:34.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:06:34.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.670933
2025-11-25T18:06:34.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:06:34.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:06:34.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:06:34.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:06:34.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:06:34.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:06:03', tmtdew=40.05, humidity=6.53, cloud=0.0, wind=8.05, temperature=27.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:06:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:06:34.441 [DEBUG] [Thread-3295] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:06:34.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:06:34.536 [DEBUG] [Thread-3298] [transport.py] [_log()] starting thread (client mode): 0x70d2a7d0
2025-11-25T18:06:34.537 [DEBUG] [Thread-3298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:06:34.551 [DEBUG] [Thread-3298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:06:34.551 [INFO] [Thread-3298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:06:34.558 [DEBUG] [Thread-3298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:06:34.558 [DEBUG] [Thread-3298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:06:34.558 [DEBUG] [Thread-3298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:06:34.558 [DEBUG] [Thread-3298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:06:34.558 [DEBUG] [Thread-3298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:06:34.558 [DEBUG] [Thread-3298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:06:34.558 [DEBUG] [Thread-3298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] client lang: <none>
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] server lang: <none>
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] kex follows: False
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] Compression: none
2025-11-25T18:06:34.559 [DEBUG] [Thread-3298] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:06:34.620 [DEBUG] [Thread-3298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:06:34.620 [DEBUG] [Thread-3298] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:06:34.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:06:34.621 [DEBUG] [Thread-3298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:06:34.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:06:34.678 [DEBUG] [Thread-3298] [transport.py] [_log()] userauth is OK
2025-11-25T18:06:34.679 [DEBUG] [Thread-3298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:06:34.679 [DEBUG] [Thread-3298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:06:34.679 [DEBUG] [Thread-3298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:06:34.679 [DEBUG] [Thread-3298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:06:34.697 [INFO] [Thread-3298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:06:34.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:06:34.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:06:35.506 [DEBUG] [Thread-3298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:06:35.506 [DEBUG] [Thread-3298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:06:35.553 [DEBUG] [Thread-3298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:06:35.554 [DEBUG] [Thread-3298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:06:35.563 [DEBUG] [Thread-3298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:06:35.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:06:35.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:06:35.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:06:35.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:06:35.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:06:35.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:06:35.599 [DEBUG] [Thread-3298] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:06:35.602 [DEBUG] [Thread-3300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:06:50.653 [DEBUG] [Thread-3301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:07:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:07:05.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:07:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:07:05.683 [DEBUG] [Thread-3302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:07:06.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 6, 35), 40.12, 6.09, 0.0, 6.02, 27.28, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:07:06.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:06:35
2025-11-25T18:07:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:07:06.558 [DEBUG] [Thread-3303] [transport.py] [_log()] starting thread (client mode): 0x737837c0
2025-11-25T18:07:06.558 [DEBUG] [Thread-3303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:07:06.579 [DEBUG] [Thread-3303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:07:06.579 [INFO] [Thread-3303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:07:06.583 [DEBUG] [Thread-3303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:07:06.583 [DEBUG] [Thread-3303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:07:06.583 [DEBUG] [Thread-3303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:07:06.583 [DEBUG] [Thread-3303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:07:06.583 [DEBUG] [Thread-3303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:07:06.583 [DEBUG] [Thread-3303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:07:06.583 [DEBUG] [Thread-3303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:07:06.583 [DEBUG] [Thread-3303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:07:06.583 [DEBUG] [Thread-3303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] client lang: <none>
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] server lang: <none>
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] kex follows: False
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] Compression: none
2025-11-25T18:07:06.584 [DEBUG] [Thread-3303] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:07:06.605 [DEBUG] [Thread-3303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:07:06.606 [DEBUG] [Thread-3303] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:07:06.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:07:06.607 [DEBUG] [Thread-3303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:07:06.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:07:06.610 [DEBUG] [Thread-3303] [transport.py] [_log()] userauth is OK
2025-11-25T18:07:06.610 [DEBUG] [Thread-3303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:07:06.610 [DEBUG] [Thread-3303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:07:06.610 [DEBUG] [Thread-3303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:07:06.610 [DEBUG] [Thread-3303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:07:06.636 [INFO] [Thread-3303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:07:06.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:07:07.268 [DEBUG] [Thread-3303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:07:07.269 [DEBUG] [Thread-3303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:07:07.269 [DEBUG] [Thread-3303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:07:07.310 [DEBUG] [Thread-3303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:07:07.310 [DEBUG] [Thread-3303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:07:07.314 [DEBUG] [Thread-3303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:07:07.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:07:07.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:07:07.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:07:07.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:07:07.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:07:07.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:07:07.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:07:07.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:07:07.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:07:07.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.671281 -999.00  +27.00  12.66     11   -5.60 1 1 1 1 1   887    0 34.06 35.19 ----- 10.6 12.7 45.2 18.9 31.2 -33.3 31.7 -33.7 32.8 -32.3 32.6 -32.9
2025-11-25T18:07:07.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:07:07.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:07:07.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.671281
2025-11-25T18:07:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:07:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:07:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:07:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:07:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:07:07.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:06:35', tmtdew=40.12, humidity=6.09, cloud=0.0, wind=6.02, temperature=27.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:06:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:07:07.342 [DEBUG] [Thread-3303] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:07:07.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:07:07.438 [DEBUG] [Thread-3306] [transport.py] [_log()] starting thread (client mode): 0x70d0e140
2025-11-25T18:07:07.438 [DEBUG] [Thread-3306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:07:07.453 [DEBUG] [Thread-3306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:07:07.453 [INFO] [Thread-3306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:07:07.460 [DEBUG] [Thread-3306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:07:07.460 [DEBUG] [Thread-3306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:07:07.461 [DEBUG] [Thread-3306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:07:07.461 [DEBUG] [Thread-3306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:07:07.461 [DEBUG] [Thread-3306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:07:07.461 [DEBUG] [Thread-3306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:07:07.461 [DEBUG] [Thread-3306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:07:07.461 [DEBUG] [Thread-3306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:07:07.461 [DEBUG] [Thread-3306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:07:07.461 [DEBUG] [Thread-3306] [transport.py] [_log()] client lang: <none>
2025-11-25T18:07:07.462 [DEBUG] [Thread-3306] [transport.py] [_log()] server lang: <none>
2025-11-25T18:07:07.462 [DEBUG] [Thread-3306] [transport.py] [_log()] kex follows: False
2025-11-25T18:07:07.462 [DEBUG] [Thread-3306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:07:07.462 [DEBUG] [Thread-3306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:07:07.462 [DEBUG] [Thread-3306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:07:07.462 [DEBUG] [Thread-3306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:07:07.462 [DEBUG] [Thread-3306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:07:07.463 [DEBUG] [Thread-3306] [transport.py] [_log()] Compression: none
2025-11-25T18:07:07.463 [DEBUG] [Thread-3306] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:07:07.523 [DEBUG] [Thread-3306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:07:07.524 [DEBUG] [Thread-3306] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:07:07.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:07:07.525 [DEBUG] [Thread-3306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:07:07.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:07:07.579 [DEBUG] [Thread-3306] [transport.py] [_log()] userauth is OK
2025-11-25T18:07:07.579 [DEBUG] [Thread-3306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:07:07.579 [DEBUG] [Thread-3306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:07:07.579 [DEBUG] [Thread-3306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:07:07.579 [DEBUG] [Thread-3306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:07:07.600 [INFO] [Thread-3306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:07:07.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:07:07.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:07:08.463 [DEBUG] [Thread-3306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:07:08.464 [DEBUG] [Thread-3306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:07:08.515 [DEBUG] [Thread-3306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:07:08.515 [DEBUG] [Thread-3306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:07:08.523 [DEBUG] [Thread-3306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:07:08.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:07:08.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:07:08.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:07:08.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:07:08.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:07:08.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:07:08.558 [DEBUG] [Thread-3306] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:07:14.534 [DEBUG] [Thread-3308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:07:20.715 [DEBUG] [Thread-3309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:07:35.765 [DEBUG] [Thread-3310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:07:38.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:07:38.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:07: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
2025-11-25T18:07:39.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 7, 7), 40.14, 6.09, 0.0, 7.48, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:07:39.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:07:07
2025-11-25T18:07:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:07:39.491 [DEBUG] [Thread-3311] [transport.py] [_log()] starting thread (client mode): 0x73782830
2025-11-25T18:07:39.491 [DEBUG] [Thread-3311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:07:39.511 [DEBUG] [Thread-3311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:07:39.511 [INFO] [Thread-3311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] client lang: <none>
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] server lang: <none>
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] kex follows: False
2025-11-25T18:07:39.513 [DEBUG] [Thread-3311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:07:39.514 [DEBUG] [Thread-3311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:07:39.514 [DEBUG] [Thread-3311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:07:39.514 [DEBUG] [Thread-3311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:07:39.514 [DEBUG] [Thread-3311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:07:39.514 [DEBUG] [Thread-3311] [transport.py] [_log()] Compression: none
2025-11-25T18:07:39.514 [DEBUG] [Thread-3311] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:07:39.528 [DEBUG] [Thread-3311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:07:39.529 [DEBUG] [Thread-3311] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:07:39.529 [DEBUG] [Thread-3311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:07:39.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:07:39.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:07:39.531 [DEBUG] [Thread-3311] [transport.py] [_log()] userauth is OK
2025-11-25T18:07:39.532 [DEBUG] [Thread-3311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:07:39.532 [DEBUG] [Thread-3311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:07:39.532 [DEBUG] [Thread-3311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:07:39.532 [DEBUG] [Thread-3311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:07:39.551 [INFO] [Thread-3311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:07:39.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:07:40.357 [DEBUG] [Thread-3311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:07:40.357 [DEBUG] [Thread-3311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:07:40.357 [DEBUG] [Thread-3311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:07:40.398 [DEBUG] [Thread-3311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:07:40.398 [DEBUG] [Thread-3311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:07:40.400 [DEBUG] [Thread-3311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:07:40.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:07:40.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:07:40.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:07:40.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:07:40.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:07:40.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:07:40.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:07:40.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:07:40.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:07:40.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.671628 -999.00  +26.80  12.26     11   -5.60 1 1 1 1 1   887    0 33.10 31.56 ----- 11.6 12.3 26.0 13.2 31.1 -33.2 31.6 -33.2 32.6 -31.4 32.6 -32.5
2025-11-25T18:07:40.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:07:40.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:07:40.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.671628
2025-11-25T18:07:40.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:07:40.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:07:40.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:07:40.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:07:40.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:07:40.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:07:07', tmtdew=40.14, humidity=6.09, cloud=0.0, wind=7.48, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:07:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:07:40.422 [DEBUG] [Thread-3311] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:07:40.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:07:40.511 [DEBUG] [Thread-3314] [transport.py] [_log()] starting thread (client mode): 0x73782800
2025-11-25T18:07:40.512 [DEBUG] [Thread-3314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:07:40.528 [DEBUG] [Thread-3314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:07:40.528 [INFO] [Thread-3314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] client lang: <none>
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] server lang: <none>
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] kex follows: False
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] Compression: none
2025-11-25T18:07:40.536 [DEBUG] [Thread-3314] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:07:40.593 [DEBUG] [Thread-3314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:07:40.593 [DEBUG] [Thread-3314] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:07:40.593 [DEBUG] [Thread-3314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:07:40.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:07:40.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:07:40.650 [DEBUG] [Thread-3314] [transport.py] [_log()] userauth is OK
2025-11-25T18:07:40.650 [DEBUG] [Thread-3314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:07:40.650 [DEBUG] [Thread-3314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:07:40.650 [DEBUG] [Thread-3314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:07:40.650 [DEBUG] [Thread-3314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:07:40.668 [INFO] [Thread-3314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:07:40.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:07:40.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:07:41.505 [DEBUG] [Thread-3314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:07:41.505 [DEBUG] [Thread-3314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:07:41.553 [DEBUG] [Thread-3314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:07:41.553 [DEBUG] [Thread-3314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:07:41.561 [DEBUG] [Thread-3314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:07:41.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:07:41.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:07:41.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:07:41.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:07:41.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:07:41.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:07:41.593 [DEBUG] [Thread-3314] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:07:50.801 [DEBUG] [Thread-3316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:08:05.852 [DEBUG] [Thread-3317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:08:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:08:11.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:08:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:08:12.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 7, 39), 40.14, 6.06, 0.0, 9.35, 27.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:08:12.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:07:39
2025-11-25T18:08:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:08:12.647 [DEBUG] [Thread-3318] [transport.py] [_log()] starting thread (client mode): 0x70d2b5e0
2025-11-25T18:08:12.647 [DEBUG] [Thread-3318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:08:12.668 [DEBUG] [Thread-3318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:08:12.668 [INFO] [Thread-3318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] client lang: <none>
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] server lang: <none>
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] kex follows: False
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:08:12.671 [DEBUG] [Thread-3318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:08:12.672 [DEBUG] [Thread-3318] [transport.py] [_log()] Compression: none
2025-11-25T18:08:12.672 [DEBUG] [Thread-3318] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:08:12.688 [DEBUG] [Thread-3318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:08:12.688 [DEBUG] [Thread-3318] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:08:12.689 [DEBUG] [Thread-3318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:08:12.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:08:12.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:08:12.689 [DEBUG] [Thread-3318] [transport.py] [_log()] userauth is OK
2025-11-25T18:08:12.689 [DEBUG] [Thread-3318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:08:12.689 [DEBUG] [Thread-3318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:08:12.689 [DEBUG] [Thread-3318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:08:12.689 [DEBUG] [Thread-3318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:08:12.699 [INFO] [Thread-3318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:08:12.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:08:13.359 [DEBUG] [Thread-3318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:08:13.359 [DEBUG] [Thread-3318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:08:13.359 [DEBUG] [Thread-3318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:08:13.400 [DEBUG] [Thread-3318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:08:13.400 [DEBUG] [Thread-3318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:08:13.402 [DEBUG] [Thread-3318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:08:13.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:08:13.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:08:13.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:08:13.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:08:13.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:08:13.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:08:13.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.671975 -999.00  +26.80  10.30     11   -5.60 1 1 1 1 1   887    0 33.72 26.77 ----- 9.6 10.3 46.2 13.1 31.1 -32.8 31.6 -33.1 32.5 -31.5 32.4 -32.3
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.671975
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:08:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:07:39', tmtdew=40.14, humidity=6.06, cloud=0.0, wind=9.35, temperature=27.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:07:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:08:13.420 [DEBUG] [Thread-3318] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:08:13.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:08:13.506 [DEBUG] [Thread-3321] [transport.py] [_log()] starting thread (client mode): 0x70d2a950
2025-11-25T18:08:13.506 [DEBUG] [Thread-3321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:08:13.521 [DEBUG] [Thread-3321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:08:13.521 [INFO] [Thread-3321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:08:13.528 [DEBUG] [Thread-3321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:08:13.528 [DEBUG] [Thread-3321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:08:13.528 [DEBUG] [Thread-3321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:08:13.528 [DEBUG] [Thread-3321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:08:13.528 [DEBUG] [Thread-3321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:08:13.528 [DEBUG] [Thread-3321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:08:13.528 [DEBUG] [Thread-3321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] client lang: <none>
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] server lang: <none>
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] kex follows: False
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] Compression: none
2025-11-25T18:08:13.529 [DEBUG] [Thread-3321] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:08:13.585 [DEBUG] [Thread-3321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:08:13.585 [DEBUG] [Thread-3321] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:08:13.585 [DEBUG] [Thread-3321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:08:13.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:08:13.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:08:13.643 [DEBUG] [Thread-3321] [transport.py] [_log()] userauth is OK
2025-11-25T18:08:13.643 [DEBUG] [Thread-3321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:08:13.643 [DEBUG] [Thread-3321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:08:13.643 [DEBUG] [Thread-3321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:08:13.643 [DEBUG] [Thread-3321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:08:13.661 [INFO] [Thread-3321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:08:13.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:08:13.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:08:14.537 [DEBUG] [Thread-3321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:08:14.537 [DEBUG] [Thread-3321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:08:14.584 [DEBUG] [Thread-3321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:08:14.584 [DEBUG] [Thread-3321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:08:14.593 [DEBUG] [Thread-3321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:08:14.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:08:14.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:08:14.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:08:14.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:08:14.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:08:14.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:08:14.625 [DEBUG] [Thread-3321] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:08:15.266 [DEBUG] [Thread-3323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:08:20.883 [DEBUG] [Thread-3324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:08:35.944 [DEBUG] [Thread-3325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:08:44.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:08:44.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:08:44.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:08:45.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 8, 11), 40.17, 6.04, 0.0, 10.69, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:08:45.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:08:11
2025-11-25T18:08:45.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:08:45.630 [DEBUG] [Thread-3326] [transport.py] [_log()] starting thread (client mode): 0x73782ef0
2025-11-25T18:08:45.631 [DEBUG] [Thread-3326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:08:45.651 [DEBUG] [Thread-3326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:08:45.651 [INFO] [Thread-3326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] client lang: <none>
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] server lang: <none>
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] kex follows: False
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] Compression: none
2025-11-25T18:08:45.654 [DEBUG] [Thread-3326] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:08:45.670 [DEBUG] [Thread-3326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:08:45.670 [DEBUG] [Thread-3326] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:08:45.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:08:45.670 [DEBUG] [Thread-3326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:08:45.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:08:45.671 [DEBUG] [Thread-3326] [transport.py] [_log()] userauth is OK
2025-11-25T18:08:45.671 [DEBUG] [Thread-3326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:08:45.671 [DEBUG] [Thread-3326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:08:45.671 [DEBUG] [Thread-3326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:08:45.671 [DEBUG] [Thread-3326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:08:45.684 [INFO] [Thread-3326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:08:45.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:08:46.484 [DEBUG] [Thread-3326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:08:46.484 [DEBUG] [Thread-3326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:08:46.484 [DEBUG] [Thread-3326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:08:46.525 [DEBUG] [Thread-3326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:08:46.525 [DEBUG] [Thread-3326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:08:46.528 [DEBUG] [Thread-3326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:08:46.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:08:46.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:08:46.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:08:46.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:08:46.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:08:46.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:08:46.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.672322 -999.00  +26.80   9.98     11   -5.60 1 1 1 1 1   887    0 33.36 23.80 ----- 6.4 10.0 48.6 10.8 31.1 -33.0 31.6 -33.1 32.5 -30.4 32.4 -32.0
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.672322
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:08:46.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:08:11', tmtdew=40.17, humidity=6.04, cloud=0.0, wind=10.69, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:08:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:08:46.547 [DEBUG] [Thread-3326] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:08:46.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:08:46.632 [DEBUG] [Thread-3329] [transport.py] [_log()] starting thread (client mode): 0x70d28c40
2025-11-25T18:08:46.632 [DEBUG] [Thread-3329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:08:46.647 [DEBUG] [Thread-3329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:08:46.647 [INFO] [Thread-3329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] client lang: <none>
2025-11-25T18:08:46.654 [DEBUG] [Thread-3329] [transport.py] [_log()] server lang: <none>
2025-11-25T18:08:46.655 [DEBUG] [Thread-3329] [transport.py] [_log()] kex follows: False
2025-11-25T18:08:46.655 [DEBUG] [Thread-3329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:08:46.655 [DEBUG] [Thread-3329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:08:46.655 [DEBUG] [Thread-3329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:08:46.655 [DEBUG] [Thread-3329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:08:46.655 [DEBUG] [Thread-3329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:08:46.655 [DEBUG] [Thread-3329] [transport.py] [_log()] Compression: none
2025-11-25T18:08:46.655 [DEBUG] [Thread-3329] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:08:46.710 [DEBUG] [Thread-3329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:08:46.710 [DEBUG] [Thread-3329] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:08:46.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:08:46.710 [DEBUG] [Thread-3329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:08:46.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:08:46.767 [DEBUG] [Thread-3329] [transport.py] [_log()] userauth is OK
2025-11-25T18:08:46.767 [DEBUG] [Thread-3329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:08:46.767 [DEBUG] [Thread-3329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:08:46.767 [DEBUG] [Thread-3329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:08:46.767 [DEBUG] [Thread-3329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:08:46.781 [INFO] [Thread-3329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:08:46.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:08:46.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:08:47.600 [DEBUG] [Thread-3329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:08:47.601 [DEBUG] [Thread-3329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:08:47.649 [DEBUG] [Thread-3329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:08:47.649 [DEBUG] [Thread-3329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:08:47.658 [DEBUG] [Thread-3329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:08:47.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:08:47.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:08:47.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:08:47.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:08:47.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:08:47.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:08:47.705 [DEBUG] [Thread-3329] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:08:50.982 [DEBUG] [Thread-3331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:09:06.037 [DEBUG] [Thread-3332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:09:15.764 [DEBUG] [Thread-3333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:09:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:09:17.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:09:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:09:18.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 8, 43), 39.94, 6.56, 0.0, 9.92, 27.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:09:18.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:08:43
2025-11-25T18:09:18.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:09:18.660 [DEBUG] [Thread-3334] [transport.py] [_log()] starting thread (client mode): 0x70d2bb20
2025-11-25T18:09:18.660 [DEBUG] [Thread-3334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:09:18.679 [DEBUG] [Thread-3334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:09:18.679 [INFO] [Thread-3334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] client lang: <none>
2025-11-25T18:09:18.682 [DEBUG] [Thread-3334] [transport.py] [_log()] server lang: <none>
2025-11-25T18:09:18.683 [DEBUG] [Thread-3334] [transport.py] [_log()] kex follows: False
2025-11-25T18:09:18.683 [DEBUG] [Thread-3334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:09:18.683 [DEBUG] [Thread-3334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:09:18.683 [DEBUG] [Thread-3334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:09:18.683 [DEBUG] [Thread-3334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:09:18.683 [DEBUG] [Thread-3334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:09:18.683 [DEBUG] [Thread-3334] [transport.py] [_log()] Compression: none
2025-11-25T18:09:18.683 [DEBUG] [Thread-3334] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:09:18.700 [DEBUG] [Thread-3334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:09:18.701 [DEBUG] [Thread-3334] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:09:18.701 [DEBUG] [Thread-3334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:09:18.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:09:18.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:09:18.703 [DEBUG] [Thread-3334] [transport.py] [_log()] userauth is OK
2025-11-25T18:09:18.703 [DEBUG] [Thread-3334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:09:18.703 [DEBUG] [Thread-3334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:09:18.704 [DEBUG] [Thread-3334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:09:18.704 [DEBUG] [Thread-3334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:09:18.728 [INFO] [Thread-3334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:09:18.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:09:19.350 [DEBUG] [Thread-3334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:09:19.350 [DEBUG] [Thread-3334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:09:19.350 [DEBUG] [Thread-3334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:09:19.391 [DEBUG] [Thread-3334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:09:19.391 [DEBUG] [Thread-3334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:09:19.393 [DEBUG] [Thread-3334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:09:19.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:09:19.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:09:19.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:09:19.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:09:19.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:09:19.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:09:19.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:09:19.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:09:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:09:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.672669 -999.00  +26.80   5.72     11   -5.60 1 1 1 1 1   887    0 33.81 21.26 ----- 4.5 5.7 43.0 7.7 31.0 -32.9 31.5 -32.4 32.4 -30.4 32.4 -32.0
2025-11-25T18:09:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:09:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:09:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.672669
2025-11-25T18:09:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:09:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:09:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:09:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:09:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:09:19.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:08:43', tmtdew=39.94, humidity=6.56, cloud=0.0, wind=9.92, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:08:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:09:19.411 [DEBUG] [Thread-3334] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:09:19.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:09:19.497 [DEBUG] [Thread-3337] [transport.py] [_log()] starting thread (client mode): 0x70d2ba90
2025-11-25T18:09:19.497 [DEBUG] [Thread-3337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:09:19.517 [DEBUG] [Thread-3337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:09:19.517 [INFO] [Thread-3337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] client lang: <none>
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] server lang: <none>
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] kex follows: False
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] Compression: none
2025-11-25T18:09:19.525 [DEBUG] [Thread-3337] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:09:19.582 [DEBUG] [Thread-3337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:09:19.582 [DEBUG] [Thread-3337] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:09:19.582 [DEBUG] [Thread-3337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:09:19.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:09:19.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:09:19.639 [DEBUG] [Thread-3337] [transport.py] [_log()] userauth is OK
2025-11-25T18:09:19.639 [DEBUG] [Thread-3337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:09:19.639 [DEBUG] [Thread-3337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:09:19.639 [DEBUG] [Thread-3337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:09:19.639 [DEBUG] [Thread-3337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:09:19.653 [INFO] [Thread-3337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:09:19.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:09:19.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:09:20.468 [DEBUG] [Thread-3337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:09:20.468 [DEBUG] [Thread-3337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:09:20.516 [DEBUG] [Thread-3337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:09:20.516 [DEBUG] [Thread-3337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:09:20.527 [DEBUG] [Thread-3337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:09:20.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:09:20.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:09:20.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:09:20.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:09:20.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:09:20.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:09:20.558 [DEBUG] [Thread-3337] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:09:21.069 [DEBUG] [Thread-3339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:09:36.119 [DEBUG] [Thread-3340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:09:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:09:50.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:09:50.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:09:51.157 [DEBUG] [Thread-3341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:09:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 9, 47), 39.74, 6.56, 0.0, 3.2, 26.77, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:09:51.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:09:47
2025-11-25T18:09:51.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:09:51.520 [DEBUG] [Thread-3342] [transport.py] [_log()] starting thread (client mode): 0x70d0c670
2025-11-25T18:09:51.520 [DEBUG] [Thread-3342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:09:51.541 [DEBUG] [Thread-3342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:09:51.541 [INFO] [Thread-3342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:09:51.544 [DEBUG] [Thread-3342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:09:51.544 [DEBUG] [Thread-3342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:09:51.544 [DEBUG] [Thread-3342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:09:51.544 [DEBUG] [Thread-3342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] client lang: <none>
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] server lang: <none>
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] kex follows: False
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:09:51.545 [DEBUG] [Thread-3342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:09:51.546 [DEBUG] [Thread-3342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:09:51.546 [DEBUG] [Thread-3342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:09:51.546 [DEBUG] [Thread-3342] [transport.py] [_log()] Compression: none
2025-11-25T18:09:51.546 [DEBUG] [Thread-3342] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:09:51.564 [DEBUG] [Thread-3342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:09:51.565 [DEBUG] [Thread-3342] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:09:51.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:09:51.566 [DEBUG] [Thread-3342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:09:51.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:09:51.568 [DEBUG] [Thread-3342] [transport.py] [_log()] userauth is OK
2025-11-25T18:09:51.569 [DEBUG] [Thread-3342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:09:51.569 [DEBUG] [Thread-3342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:09:51.569 [DEBUG] [Thread-3342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:09:51.569 [DEBUG] [Thread-3342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:09:51.586 [INFO] [Thread-3342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:09:51.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:09:52.385 [DEBUG] [Thread-3342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:09:52.386 [DEBUG] [Thread-3342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:09:52.386 [DEBUG] [Thread-3342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:09:52.427 [DEBUG] [Thread-3342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:09:52.427 [DEBUG] [Thread-3342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:09:52.431 [DEBUG] [Thread-3342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:09:52.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:09:52.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:09:52.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:09:52.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:09:52.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:09:52.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:09:52.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:09:52.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:09:52.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:09:52.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.673017 -999.00  +26.90   3.10     11   -5.50 1 1 1 1 1   887    0 33.03 17.45 ----- 2.6 3.1 128.2 5.3 31.0 -32.5 31.5 -31.9 32.5 -30.7 32.4 -31.9
2025-11-25T18:09:52.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:09:52.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:09:52.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.673017
2025-11-25T18:09:52.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:09:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:09:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:09:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:09:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:09:52.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:09:47', tmtdew=39.74, humidity=6.56, cloud=0.0, wind=3.2, temperature=26.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:09:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:09:52.454 [DEBUG] [Thread-3342] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:09:52.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:09:52.543 [DEBUG] [Thread-3345] [transport.py] [_log()] starting thread (client mode): 0x737834f0
2025-11-25T18:09:52.543 [DEBUG] [Thread-3345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:09:52.558 [DEBUG] [Thread-3345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:09:52.559 [INFO] [Thread-3345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:09:52.566 [DEBUG] [Thread-3345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:09:52.566 [DEBUG] [Thread-3345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] client lang: <none>
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] server lang: <none>
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] kex follows: False
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] Compression: none
2025-11-25T18:09:52.567 [DEBUG] [Thread-3345] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:09:52.624 [DEBUG] [Thread-3345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:09:52.624 [DEBUG] [Thread-3345] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:09:52.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:09:52.626 [DEBUG] [Thread-3345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:09:52.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:09:52.680 [DEBUG] [Thread-3345] [transport.py] [_log()] userauth is OK
2025-11-25T18:09:52.680 [DEBUG] [Thread-3345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:09:52.680 [DEBUG] [Thread-3345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:09:52.681 [DEBUG] [Thread-3345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:09:52.681 [DEBUG] [Thread-3345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:09:52.700 [INFO] [Thread-3345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:09:52.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:09:52.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:09:53.580 [DEBUG] [Thread-3345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:09:53.580 [DEBUG] [Thread-3345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:09:53.629 [DEBUG] [Thread-3345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:09:53.629 [DEBUG] [Thread-3345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:09:53.638 [DEBUG] [Thread-3345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:09:53.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:09:53.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:09:53.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:09:53.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:09:53.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:09:53.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:09:53.675 [DEBUG] [Thread-3345] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:10:06.189 [DEBUG] [Thread-3347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:10:16.265 [DEBUG] [Thread-3348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:10:21.235 [DEBUG] [Thread-3349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:10:23.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:10:23.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:10: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
2025-11-25T18:10:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 10, 19), 39.58, 6.64, 0.0, 5.19, 26.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:10:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:10:19
2025-11-25T18:10:24.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:10:24.626 [DEBUG] [Thread-3350] [transport.py] [_log()] starting thread (client mode): 0x70d3b7c0
2025-11-25T18:10:24.626 [DEBUG] [Thread-3350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:10:24.645 [DEBUG] [Thread-3350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:10:24.646 [INFO] [Thread-3350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:10:24.648 [DEBUG] [Thread-3350] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:10:24.648 [DEBUG] [Thread-3350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:10:24.648 [DEBUG] [Thread-3350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:10:24.648 [DEBUG] [Thread-3350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] client lang: <none>
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] server lang: <none>
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] kex follows: False
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] Compression: none
2025-11-25T18:10:24.649 [DEBUG] [Thread-3350] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:10:24.667 [DEBUG] [Thread-3350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:10:24.668 [DEBUG] [Thread-3350] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:10:24.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:10:24.669 [DEBUG] [Thread-3350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:10:24.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:10:24.671 [DEBUG] [Thread-3350] [transport.py] [_log()] userauth is OK
2025-11-25T18:10:24.671 [DEBUG] [Thread-3350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:10:24.671 [DEBUG] [Thread-3350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:10:24.671 [DEBUG] [Thread-3350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:10:24.671 [DEBUG] [Thread-3350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:10:24.689 [INFO] [Thread-3350] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:10:24.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:10:25.311 [DEBUG] [Thread-3350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:10:25.312 [DEBUG] [Thread-3350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:10:25.312 [DEBUG] [Thread-3350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:10:25.353 [DEBUG] [Thread-3350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:10:25.353 [DEBUG] [Thread-3350] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:10:25.357 [DEBUG] [Thread-3350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:10:25.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:10:25.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:10:25.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:10:25.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:10:25.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:10:25.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:10:25.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:10:25.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:10:25.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:10:25.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.673364 -999.00  +27.00   6.80     11   -5.50 1 1 1 1 1   887    0 32.79 14.08 ----- 2.8 6.8 70.4 9.3 31.0 -32.4 31.6 -32.2 32.5 -30.3 32.5 -31.8
2025-11-25T18:10:25.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:10:25.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:10:25.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.673364
2025-11-25T18:10:25.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:10:25.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:10:25.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:10:25.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:10:25.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:10:25.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:10:19', tmtdew=39.58, humidity=6.64, cloud=0.0, wind=5.19, temperature=26.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:09:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:10:25.383 [DEBUG] [Thread-3350] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:10:25.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:10:25.478 [DEBUG] [Thread-3353] [transport.py] [_log()] starting thread (client mode): 0x7378ee60
2025-11-25T18:10:25.478 [DEBUG] [Thread-3353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:10:25.493 [DEBUG] [Thread-3353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:10:25.493 [INFO] [Thread-3353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:10:25.501 [DEBUG] [Thread-3353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:10:25.501 [DEBUG] [Thread-3353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:10:25.501 [DEBUG] [Thread-3353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:10:25.501 [DEBUG] [Thread-3353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:10:25.502 [DEBUG] [Thread-3353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:10:25.502 [DEBUG] [Thread-3353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:10:25.502 [DEBUG] [Thread-3353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:10:25.502 [DEBUG] [Thread-3353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:10:25.502 [DEBUG] [Thread-3353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:10:25.502 [DEBUG] [Thread-3353] [transport.py] [_log()] client lang: <none>
2025-11-25T18:10:25.502 [DEBUG] [Thread-3353] [transport.py] [_log()] server lang: <none>
2025-11-25T18:10:25.502 [DEBUG] [Thread-3353] [transport.py] [_log()] kex follows: False
2025-11-25T18:10:25.502 [DEBUG] [Thread-3353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:10:25.503 [DEBUG] [Thread-3353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:10:25.503 [DEBUG] [Thread-3353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:10:25.503 [DEBUG] [Thread-3353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:10:25.503 [DEBUG] [Thread-3353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:10:25.503 [DEBUG] [Thread-3353] [transport.py] [_log()] Compression: none
2025-11-25T18:10:25.503 [DEBUG] [Thread-3353] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:10:25.566 [DEBUG] [Thread-3353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:10:25.566 [DEBUG] [Thread-3353] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:10:25.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:10:25.568 [DEBUG] [Thread-3353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:10:25.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:10:25.625 [DEBUG] [Thread-3353] [transport.py] [_log()] userauth is OK
2025-11-25T18:10:25.625 [DEBUG] [Thread-3353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:10:25.625 [DEBUG] [Thread-3353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:10:25.625 [DEBUG] [Thread-3353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:10:25.625 [DEBUG] [Thread-3353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:10:25.644 [INFO] [Thread-3353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:10:25.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:10:25.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:10:26.470 [DEBUG] [Thread-3353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:10:26.471 [DEBUG] [Thread-3353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:10:26.519 [DEBUG] [Thread-3353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:10:26.519 [DEBUG] [Thread-3353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:10:26.528 [DEBUG] [Thread-3353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:10:26.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:10:26.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:10:26.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:10:26.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:10:26.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:10:26.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:10:26.565 [DEBUG] [Thread-3353] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:10:36.263 [DEBUG] [Thread-3355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:10:51.305 [DEBUG] [Thread-3356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:10:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:10:56.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:10:56.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:10:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 10, 51), 39.85, 6.56, 0.0, 3.71, 26.92, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:10:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:10:51
2025-11-25T18:10:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:10:57.536 [DEBUG] [Thread-3357] [transport.py] [_log()] starting thread (client mode): 0x7378f790
2025-11-25T18:10:57.536 [DEBUG] [Thread-3357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:10:57.557 [DEBUG] [Thread-3357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:10:57.558 [INFO] [Thread-3357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:10:57.561 [DEBUG] [Thread-3357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] client lang: <none>
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] server lang: <none>
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] kex follows: False
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:10:57.562 [DEBUG] [Thread-3357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:10:57.563 [DEBUG] [Thread-3357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:10:57.563 [DEBUG] [Thread-3357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:10:57.563 [DEBUG] [Thread-3357] [transport.py] [_log()] Compression: none
2025-11-25T18:10:57.563 [DEBUG] [Thread-3357] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:10:57.580 [DEBUG] [Thread-3357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:10:57.581 [DEBUG] [Thread-3357] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:10:57.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:10:57.582 [DEBUG] [Thread-3357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:10:57.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:10:57.585 [DEBUG] [Thread-3357] [transport.py] [_log()] userauth is OK
2025-11-25T18:10:57.585 [DEBUG] [Thread-3357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:10:57.585 [DEBUG] [Thread-3357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:10:57.585 [DEBUG] [Thread-3357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:10:57.585 [DEBUG] [Thread-3357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:10:57.607 [INFO] [Thread-3357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:10:57.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:10:58.393 [DEBUG] [Thread-3357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:10:58.394 [DEBUG] [Thread-3357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:10:58.394 [DEBUG] [Thread-3357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:10:58.435 [DEBUG] [Thread-3357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:10:58.435 [DEBUG] [Thread-3357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:10:58.439 [DEBUG] [Thread-3357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:10:58.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:10:58.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:10:58.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:10:58.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:10:58.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:10:58.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:10:58.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:10:58.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:10:58.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:10:58.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.673711 -999.00  +27.00  11.20     11   -5.50 1 1 1 1 1   887    0 33.05 11.11 ----- 11.9 11.2 64.5 13.8 31.1 -32.7 31.6 -31.9 32.6 -30.2 32.5 -32.0
2025-11-25T18:10:58.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:10:58.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:10:58.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.673711
2025-11-25T18:10:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:10:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:10:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:10:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:10:58.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:10:58.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:10:51', tmtdew=39.85, humidity=6.56, cloud=0.0, wind=3.71, temperature=26.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:10:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:10:58.467 [DEBUG] [Thread-3357] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:10:58.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:10:58.561 [DEBUG] [Thread-3360] [transport.py] [_log()] starting thread (client mode): 0x7378c520
2025-11-25T18:10:58.561 [DEBUG] [Thread-3360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:10:58.577 [DEBUG] [Thread-3360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:10:58.577 [INFO] [Thread-3360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:10:58.585 [DEBUG] [Thread-3360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:10:58.585 [DEBUG] [Thread-3360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:10:58.585 [DEBUG] [Thread-3360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:10:58.585 [DEBUG] [Thread-3360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:10:58.585 [DEBUG] [Thread-3360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:10:58.585 [DEBUG] [Thread-3360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:10:58.586 [DEBUG] [Thread-3360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:10:58.586 [DEBUG] [Thread-3360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:10:58.586 [DEBUG] [Thread-3360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:10:58.586 [DEBUG] [Thread-3360] [transport.py] [_log()] client lang: <none>
2025-11-25T18:10:58.586 [DEBUG] [Thread-3360] [transport.py] [_log()] server lang: <none>
2025-11-25T18:10:58.586 [DEBUG] [Thread-3360] [transport.py] [_log()] kex follows: False
2025-11-25T18:10:58.586 [DEBUG] [Thread-3360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:10:58.586 [DEBUG] [Thread-3360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:10:58.587 [DEBUG] [Thread-3360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:10:58.587 [DEBUG] [Thread-3360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:10:58.587 [DEBUG] [Thread-3360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:10:58.587 [DEBUG] [Thread-3360] [transport.py] [_log()] Compression: none
2025-11-25T18:10:58.587 [DEBUG] [Thread-3360] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:10:58.645 [DEBUG] [Thread-3360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:10:58.646 [DEBUG] [Thread-3360] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:10:58.647 [DEBUG] [Thread-3360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:10:58.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:10:58.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:10:58.705 [DEBUG] [Thread-3360] [transport.py] [_log()] userauth is OK
2025-11-25T18:10:58.705 [DEBUG] [Thread-3360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:10:58.706 [DEBUG] [Thread-3360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:10:58.706 [DEBUG] [Thread-3360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:10:58.706 [DEBUG] [Thread-3360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:10:58.728 [INFO] [Thread-3360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:10:58.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:10:58.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:10:59.533 [DEBUG] [Thread-3360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:10:59.533 [DEBUG] [Thread-3360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:10:59.584 [DEBUG] [Thread-3360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:10:59.584 [DEBUG] [Thread-3360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:10:59.597 [DEBUG] [Thread-3360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:10:59.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:10:59.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:10:59.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:10:59.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:10:59.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:10:59.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:10:59.638 [DEBUG] [Thread-3360] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:11:06.339 [DEBUG] [Thread-3362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:11:16.770 [DEBUG] [Thread-3363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:11:21.391 [DEBUG] [Thread-3364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:11:29.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:11:29.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:11:29.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:11:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 11, 23), 39.83, 6.59, 0.0, 3.42, 27.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:11:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:11:23
2025-11-25T18:11:30.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:11:30.580 [DEBUG] [Thread-3365] [transport.py] [_log()] starting thread (client mode): 0x70d3bca0
2025-11-25T18:11:30.580 [DEBUG] [Thread-3365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:11:30.601 [DEBUG] [Thread-3365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:11:30.601 [INFO] [Thread-3365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:11:30.604 [DEBUG] [Thread-3365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:11:30.604 [DEBUG] [Thread-3365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] client lang: <none>
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] server lang: <none>
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] kex follows: False
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] Compression: none
2025-11-25T18:11:30.605 [DEBUG] [Thread-3365] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:11:30.622 [DEBUG] [Thread-3365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:11:30.622 [DEBUG] [Thread-3365] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:11:30.623 [DEBUG] [Thread-3365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:11:30.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:11:30.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:11:30.625 [DEBUG] [Thread-3365] [transport.py] [_log()] userauth is OK
2025-11-25T18:11:30.625 [DEBUG] [Thread-3365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:11:30.625 [DEBUG] [Thread-3365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:11:30.625 [DEBUG] [Thread-3365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:11:30.625 [DEBUG] [Thread-3365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:11:30.640 [INFO] [Thread-3365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:11:30.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:11:31.305 [DEBUG] [Thread-3365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:11:31.306 [DEBUG] [Thread-3365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:11:31.306 [DEBUG] [Thread-3365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:11:31.347 [DEBUG] [Thread-3365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:11:31.347 [DEBUG] [Thread-3365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:11:31.351 [DEBUG] [Thread-3365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:11:31.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:11:31.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:11:31.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:11:31.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:11:31.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:11:31.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:11:31.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:11:31.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:11:31.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:11:31.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.674406 -999.00  +26.80   8.52     11   -5.60 1 1 1 1 1   887    0 32.32 6.17 ----- 5.8 8.5 72.8 13.0 30.8 -32.7 31.4 -32.7 32.3 -30.9 32.4 -32.3
2025-11-25T18:11:31.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:11:31.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:11:31.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.674406
2025-11-25T18:11:31.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:11:31.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:11:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:11:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:11:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:11:31.378 [DEBUG] [Thread-3365] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:11:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:11:23', tmtdew=39.83, humidity=6.59, cloud=0.0, wind=3.42, temperature=27.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:11:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:11:31.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:11:31.474 [DEBUG] [Thread-3368] [transport.py] [_log()] starting thread (client mode): 0x70d3a1d0
2025-11-25T18:11:31.474 [DEBUG] [Thread-3368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:11:31.490 [DEBUG] [Thread-3368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:11:31.490 [INFO] [Thread-3368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:11:31.497 [DEBUG] [Thread-3368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:11:31.497 [DEBUG] [Thread-3368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] client lang: <none>
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] server lang: <none>
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] kex follows: False
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] Compression: none
2025-11-25T18:11:31.498 [DEBUG] [Thread-3368] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:11:31.557 [DEBUG] [Thread-3368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:11:31.557 [DEBUG] [Thread-3368] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:11:31.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:11:31.559 [DEBUG] [Thread-3368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:11:31.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:11:31.613 [DEBUG] [Thread-3368] [transport.py] [_log()] userauth is OK
2025-11-25T18:11:31.613 [DEBUG] [Thread-3368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:11:31.614 [DEBUG] [Thread-3368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:11:31.614 [DEBUG] [Thread-3368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:11:31.614 [DEBUG] [Thread-3368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:11:31.633 [INFO] [Thread-3368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:11:31.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:11:31.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:11:32.523 [DEBUG] [Thread-3368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:11:32.524 [DEBUG] [Thread-3368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:11:32.572 [DEBUG] [Thread-3368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:11:32.572 [DEBUG] [Thread-3368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:11:32.581 [DEBUG] [Thread-3368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:11:32.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:11:32.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:11:32.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:11:32.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:11:32.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:11:32.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:11:32.618 [DEBUG] [Thread-3368] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:11:36.431 [DEBUG] [Thread-3370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:11:51.481 [DEBUG] [Thread-3371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:12:02.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:12:02.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:12:02.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:12:03.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 11, 55), 39.83, 6.58, 0.0, 5.81, 27.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:12:03.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:11:55
2025-11-25T18:12:03.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:12:03.578 [DEBUG] [Thread-3372] [transport.py] [_log()] starting thread (client mode): 0x70d39cc0
2025-11-25T18:12:03.579 [DEBUG] [Thread-3372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:12:03.598 [DEBUG] [Thread-3372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:12:03.598 [INFO] [Thread-3372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:12:03.599 [DEBUG] [Thread-3372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] client lang: <none>
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] server lang: <none>
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] kex follows: False
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] Compression: none
2025-11-25T18:12:03.600 [DEBUG] [Thread-3372] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:12:03.608 [DEBUG] [Thread-3372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:12:03.608 [DEBUG] [Thread-3372] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:12:03.608 [DEBUG] [Thread-3372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:12:03.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:12:03.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:12:03.610 [DEBUG] [Thread-3372] [transport.py] [_log()] userauth is OK
2025-11-25T18:12:03.610 [DEBUG] [Thread-3372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:12:03.610 [DEBUG] [Thread-3372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:12:03.610 [DEBUG] [Thread-3372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:12:03.610 [DEBUG] [Thread-3372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:12:03.622 [INFO] [Thread-3372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:12:03.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:12:04.398 [DEBUG] [Thread-3372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:12:04.398 [DEBUG] [Thread-3372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:12:04.399 [DEBUG] [Thread-3372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:12:04.440 [DEBUG] [Thread-3372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:12:04.440 [DEBUG] [Thread-3372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:12:04.442 [DEBUG] [Thread-3372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:12:04.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:12:04.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:12:04.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:12:04.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:12:04.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:12:04.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:12:04.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:12:04.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:12:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:12:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.674753 -999.00  +26.70   7.62     11   -5.60 1 1 1 1 1   887    0 32.44 3.84 ----- 4.8 7.6 123.6 12.1 30.7 -33.1 31.4 -31.9 32.4 -30.8 32.3 -32.6
2025-11-25T18:12:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:12:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:12:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.674753
2025-11-25T18:12:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:12:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:12:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:12:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:12:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:12:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:11:55', tmtdew=39.83, humidity=6.58, cloud=0.0, wind=5.81, temperature=27.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:11:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:12:04.470 [DEBUG] [Thread-3372] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:12:04.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:12:04.565 [DEBUG] [Thread-3375] [transport.py] [_log()] starting thread (client mode): 0x70d28af0
2025-11-25T18:12:04.565 [DEBUG] [Thread-3375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:12:04.580 [DEBUG] [Thread-3375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:12:04.580 [INFO] [Thread-3375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:12:04.588 [DEBUG] [Thread-3375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:12:04.588 [DEBUG] [Thread-3375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:12:04.588 [DEBUG] [Thread-3375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:12:04.588 [DEBUG] [Thread-3375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:12:04.588 [DEBUG] [Thread-3375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:12:04.589 [DEBUG] [Thread-3375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:12:04.589 [DEBUG] [Thread-3375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:12:04.589 [DEBUG] [Thread-3375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:12:04.589 [DEBUG] [Thread-3375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:12:04.589 [DEBUG] [Thread-3375] [transport.py] [_log()] client lang: <none>
2025-11-25T18:12:04.589 [DEBUG] [Thread-3375] [transport.py] [_log()] server lang: <none>
2025-11-25T18:12:04.589 [DEBUG] [Thread-3375] [transport.py] [_log()] kex follows: False
2025-11-25T18:12:04.589 [DEBUG] [Thread-3375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:12:04.589 [DEBUG] [Thread-3375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:12:04.590 [DEBUG] [Thread-3375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:12:04.590 [DEBUG] [Thread-3375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:12:04.590 [DEBUG] [Thread-3375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:12:04.590 [DEBUG] [Thread-3375] [transport.py] [_log()] Compression: none
2025-11-25T18:12:04.590 [DEBUG] [Thread-3375] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:12:04.646 [DEBUG] [Thread-3375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:12:04.646 [DEBUG] [Thread-3375] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:12:04.647 [DEBUG] [Thread-3375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:12:04.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:12:04.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:12:04.701 [DEBUG] [Thread-3375] [transport.py] [_log()] userauth is OK
2025-11-25T18:12:04.702 [DEBUG] [Thread-3375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:12:04.702 [DEBUG] [Thread-3375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:12:04.702 [DEBUG] [Thread-3375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:12:04.702 [DEBUG] [Thread-3375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:12:04.720 [INFO] [Thread-3375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:12:04.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:12:04.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:12:05.545 [DEBUG] [Thread-3375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:12:05.545 [DEBUG] [Thread-3375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:12:05.594 [DEBUG] [Thread-3375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:12:05.594 [DEBUG] [Thread-3375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:12:05.603 [DEBUG] [Thread-3375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:12:05.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:12:05.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:12:05.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:12:05.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:12:05.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:12:05.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:12:05.639 [DEBUG] [Thread-3375] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:12:06.515 [DEBUG] [Thread-3377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:12:17.257 [DEBUG] [Thread-3378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:12:21.571 [DEBUG] [Thread-3379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:12:35.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:12:35.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:12:35.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
2025-11-25T18:12:36.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 12, 27), 39.82, 6.58, 0.0, 7.57, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:12:36.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:12:27
2025-11-25T18:12:36.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:12:36.601 [DEBUG] [Thread-3380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:12:36.604 [DEBUG] [Thread-3381] [transport.py] [_log()] starting thread (client mode): 0x7376d060
2025-11-25T18:12:36.604 [DEBUG] [Thread-3381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:12:36.624 [DEBUG] [Thread-3381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:12:36.624 [INFO] [Thread-3381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:12:36.627 [DEBUG] [Thread-3381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] client lang: <none>
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] server lang: <none>
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] kex follows: False
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] Compression: none
2025-11-25T18:12:36.628 [DEBUG] [Thread-3381] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:12:36.647 [DEBUG] [Thread-3381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:12:36.648 [DEBUG] [Thread-3381] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:12:36.648 [DEBUG] [Thread-3381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:12:36.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:12:36.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:12:36.650 [DEBUG] [Thread-3381] [transport.py] [_log()] userauth is OK
2025-11-25T18:12:36.651 [DEBUG] [Thread-3381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:12:36.651 [DEBUG] [Thread-3381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:12:36.651 [DEBUG] [Thread-3381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:12:36.651 [DEBUG] [Thread-3381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:12:36.675 [INFO] [Thread-3381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:12:36.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:12:37.307 [DEBUG] [Thread-3381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:12:37.308 [DEBUG] [Thread-3381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:12:37.308 [DEBUG] [Thread-3381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:12:37.348 [DEBUG] [Thread-3381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:12:37.349 [DEBUG] [Thread-3381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:12:37.352 [DEBUG] [Thread-3381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:12:37.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:12:37.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:12:37.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:12:37.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:12:37.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:12:37.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:12:37.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:12:37.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:12:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:12:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.675100 -999.00  +26.80   2.03     11   -5.60 1 1 1 1 1   887    0 32.42 1.38 ----- 2.2 2.0 128.4 6.9 30.7 -32.3 31.4 -32.0 32.5 -30.2 32.4 -32.3
2025-11-25T18:12:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:12:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:12:37.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.675100
2025-11-25T18:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:12:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:12:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:12:27', tmtdew=39.82, humidity=6.58, cloud=0.0, wind=7.57, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:12:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:12:37.379 [DEBUG] [Thread-3381] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:12:37.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:12:37.473 [DEBUG] [Thread-3384] [transport.py] [_log()] starting thread (client mode): 0x7378ee90
2025-11-25T18:12:37.474 [DEBUG] [Thread-3384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:12:37.494 [DEBUG] [Thread-3384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:12:37.494 [INFO] [Thread-3384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] client lang: <none>
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] server lang: <none>
2025-11-25T18:12:37.502 [DEBUG] [Thread-3384] [transport.py] [_log()] kex follows: False
2025-11-25T18:12:37.503 [DEBUG] [Thread-3384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:12:37.503 [DEBUG] [Thread-3384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:12:37.503 [DEBUG] [Thread-3384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:12:37.503 [DEBUG] [Thread-3384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:12:37.503 [DEBUG] [Thread-3384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:12:37.503 [DEBUG] [Thread-3384] [transport.py] [_log()] Compression: none
2025-11-25T18:12:37.503 [DEBUG] [Thread-3384] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:12:37.562 [DEBUG] [Thread-3384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:12:37.562 [DEBUG] [Thread-3384] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:12:37.563 [DEBUG] [Thread-3384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:12:37.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:12:37.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:12:37.618 [DEBUG] [Thread-3384] [transport.py] [_log()] userauth is OK
2025-11-25T18:12:37.618 [DEBUG] [Thread-3384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:12:37.618 [DEBUG] [Thread-3384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:12:37.618 [DEBUG] [Thread-3384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:12:37.618 [DEBUG] [Thread-3384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:12:37.638 [INFO] [Thread-3384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:12:37.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:12:37.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:12:38.489 [DEBUG] [Thread-3384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:12:38.490 [DEBUG] [Thread-3384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:12:38.538 [DEBUG] [Thread-3384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:12:38.538 [DEBUG] [Thread-3384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:12:38.547 [DEBUG] [Thread-3384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:12:38.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:12:38.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:12:38.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:12:38.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:12:38.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:12:38.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:12:38.584 [DEBUG] [Thread-3384] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:12:51.636 [DEBUG] [Thread-3386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:13:06.692 [DEBUG] [Thread-3387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:13:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:13:08.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:13:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:13:09.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 12, 59), 39.86, 6.58, 0.0, 5.68, 27.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:13:09.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:12:59
2025-11-25T18:13:09.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:13:09.526 [DEBUG] [Thread-3388] [transport.py] [_log()] starting thread (client mode): 0x70d1e260
2025-11-25T18:13:09.526 [DEBUG] [Thread-3388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:13:09.547 [DEBUG] [Thread-3388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:13:09.548 [INFO] [Thread-3388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] client lang: <none>
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] server lang: <none>
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] kex follows: False
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:13:09.551 [DEBUG] [Thread-3388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:13:09.552 [DEBUG] [Thread-3388] [transport.py] [_log()] Compression: none
2025-11-25T18:13:09.552 [DEBUG] [Thread-3388] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:13:09.569 [DEBUG] [Thread-3388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:13:09.570 [DEBUG] [Thread-3388] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:13:09.570 [DEBUG] [Thread-3388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:13:09.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:13:09.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:13:09.572 [DEBUG] [Thread-3388] [transport.py] [_log()] userauth is OK
2025-11-25T18:13:09.573 [DEBUG] [Thread-3388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:13:09.573 [DEBUG] [Thread-3388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:13:09.573 [DEBUG] [Thread-3388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:13:09.573 [DEBUG] [Thread-3388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:13:09.598 [INFO] [Thread-3388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:13:09.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:13:10.414 [DEBUG] [Thread-3388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:13:10.414 [DEBUG] [Thread-3388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:13:10.415 [DEBUG] [Thread-3388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:13:10.455 [DEBUG] [Thread-3388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:13:10.455 [DEBUG] [Thread-3388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:13:10.459 [DEBUG] [Thread-3388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:13:10.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:13:10.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:13:10.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:13:10.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:13:10.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:13:10.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:13:10.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:13:10.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:13:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:13:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.675447 -999.00  +26.80   2.06     11   -5.50 1 1 1 1 1   887    0 32.53 -0.72 ----- 5.3 2.1 179.4 3.3 30.8 -32.3 31.4 -32.1 32.6 -30.5 32.4 -32.1
2025-11-25T18:13:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:13:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:13:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.675447
2025-11-25T18:13:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:13:10.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:13:10.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:13:10.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:13:10.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:13:10.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:12:59', tmtdew=39.86, humidity=6.58, cloud=0.0, wind=5.68, temperature=27.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:12:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:13:10.486 [DEBUG] [Thread-3388] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:13:10.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:13:10.577 [DEBUG] [Thread-3391] [transport.py] [_log()] starting thread (client mode): 0x737c5fc0
2025-11-25T18:13:10.577 [DEBUG] [Thread-3391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:13:10.592 [DEBUG] [Thread-3391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:13:10.592 [INFO] [Thread-3391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:13:10.600 [DEBUG] [Thread-3391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:13:10.600 [DEBUG] [Thread-3391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:13:10.600 [DEBUG] [Thread-3391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] client lang: <none>
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] server lang: <none>
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] kex follows: False
2025-11-25T18:13:10.601 [DEBUG] [Thread-3391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:13:10.602 [DEBUG] [Thread-3391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:13:10.602 [DEBUG] [Thread-3391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:13:10.602 [DEBUG] [Thread-3391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:13:10.602 [DEBUG] [Thread-3391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:13:10.602 [DEBUG] [Thread-3391] [transport.py] [_log()] Compression: none
2025-11-25T18:13:10.602 [DEBUG] [Thread-3391] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:13:10.658 [DEBUG] [Thread-3391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:13:10.658 [DEBUG] [Thread-3391] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:13:10.659 [DEBUG] [Thread-3391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:13:10.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:13:10.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:13:10.713 [DEBUG] [Thread-3391] [transport.py] [_log()] userauth is OK
2025-11-25T18:13:10.714 [DEBUG] [Thread-3391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:13:10.714 [DEBUG] [Thread-3391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:13:10.714 [DEBUG] [Thread-3391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:13:10.714 [DEBUG] [Thread-3391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:13:10.732 [INFO] [Thread-3391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:13:10.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:13:10.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:13:11.554 [DEBUG] [Thread-3391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:13:11.554 [DEBUG] [Thread-3391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:13:11.602 [DEBUG] [Thread-3391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:13:11.602 [DEBUG] [Thread-3391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:13:11.611 [DEBUG] [Thread-3391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:13:11.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:13:11.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:13:11.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:13:11.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:13:11.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:13:11.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:13:11.646 [DEBUG] [Thread-3391] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:13:17.768 [DEBUG] [Thread-3393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:13:21.726 [DEBUG] [Thread-3394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:13:36.780 [DEBUG] [Thread-3395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:13:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:13:41.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:13:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:13:42.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 13, 31), 39.88, 6.58, 0.0, 5.84, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:13:42.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:13:31
2025-11-25T18:13:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:13:42.623 [DEBUG] [Thread-3396] [transport.py] [_log()] starting thread (client mode): 0x70d1c130
2025-11-25T18:13:42.623 [DEBUG] [Thread-3396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:13:42.643 [DEBUG] [Thread-3396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:13:42.643 [INFO] [Thread-3396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] client lang: <none>
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] server lang: <none>
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] kex follows: False
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] Compression: none
2025-11-25T18:13:42.647 [DEBUG] [Thread-3396] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:13:42.663 [DEBUG] [Thread-3396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:13:42.663 [DEBUG] [Thread-3396] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:13:42.663 [DEBUG] [Thread-3396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:13:42.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:13:42.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:13:42.664 [DEBUG] [Thread-3396] [transport.py] [_log()] userauth is OK
2025-11-25T18:13:42.664 [DEBUG] [Thread-3396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:13:42.664 [DEBUG] [Thread-3396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:13:42.664 [DEBUG] [Thread-3396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:13:42.664 [DEBUG] [Thread-3396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:13:42.675 [INFO] [Thread-3396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:13:42.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:13:43.311 [DEBUG] [Thread-3396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:13:43.311 [DEBUG] [Thread-3396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:13:43.311 [DEBUG] [Thread-3396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:13:43.352 [DEBUG] [Thread-3396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:13:43.353 [DEBUG] [Thread-3396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:13:43.355 [DEBUG] [Thread-3396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:13:43.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:13:43.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:13:43.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:13:43.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:13:43.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:13:43.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:13:43.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:13:43.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:13:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:13:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.675794 -999.00  +26.90   3.30     11   -5.50 1 1 1 1 1   887    0 32.43 -2.52 ----- 4.0 3.3 132.6 8.1 30.7 -34.1 31.4 -31.9 32.5 -30.4 32.5 -32.5
2025-11-25T18:13:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:13:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:13:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.675794
2025-11-25T18:13:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:13:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:13:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:13:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:13:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:13:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:13:31', tmtdew=39.88, humidity=6.58, cloud=0.0, wind=5.84, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:13:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:13:43.373 [DEBUG] [Thread-3396] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:13:43.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:13:43.463 [DEBUG] [Thread-3399] [transport.py] [_log()] starting thread (client mode): 0x70d1ef20
2025-11-25T18:13:43.463 [DEBUG] [Thread-3399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:13:43.478 [DEBUG] [Thread-3399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:13:43.478 [INFO] [Thread-3399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] client lang: <none>
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] server lang: <none>
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] kex follows: False
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] Compression: none
2025-11-25T18:13:43.485 [DEBUG] [Thread-3399] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:13:43.541 [DEBUG] [Thread-3399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:13:43.541 [DEBUG] [Thread-3399] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:13:43.541 [DEBUG] [Thread-3399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:13:43.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:13:43.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:13:43.597 [DEBUG] [Thread-3399] [transport.py] [_log()] userauth is OK
2025-11-25T18:13:43.598 [DEBUG] [Thread-3399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:13:43.598 [DEBUG] [Thread-3399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:13:43.598 [DEBUG] [Thread-3399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:13:43.598 [DEBUG] [Thread-3399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:13:43.611 [INFO] [Thread-3399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:13:43.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:13:43.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:13:44.457 [DEBUG] [Thread-3399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:13:44.457 [DEBUG] [Thread-3399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:13:44.507 [DEBUG] [Thread-3399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:13:44.507 [DEBUG] [Thread-3399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:13:44.515 [DEBUG] [Thread-3399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:13:44.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:13:44.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:13:44.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:13:44.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:13:44.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:13:44.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:13:44.547 [DEBUG] [Thread-3399] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:13:51.812 [DEBUG] [Thread-3401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:14:06.862 [DEBUG] [Thread-3402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:14:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:14:14.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:14:14.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:14:15.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 14, 3), 39.92, 6.56, 0.0, 5.35, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:14:15.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:14:03
2025-11-25T18:14:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:14:15.509 [DEBUG] [Thread-3403] [transport.py] [_log()] starting thread (client mode): 0x70d1c250
2025-11-25T18:14:15.509 [DEBUG] [Thread-3403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:14:15.528 [DEBUG] [Thread-3403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:14:15.528 [INFO] [Thread-3403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:14:15.532 [DEBUG] [Thread-3403] [transport.py] [_log()] client lang: <none>
2025-11-25T18:14:15.533 [DEBUG] [Thread-3403] [transport.py] [_log()] server lang: <none>
2025-11-25T18:14:15.533 [DEBUG] [Thread-3403] [transport.py] [_log()] kex follows: False
2025-11-25T18:14:15.533 [DEBUG] [Thread-3403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:14:15.533 [DEBUG] [Thread-3403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:14:15.533 [DEBUG] [Thread-3403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:14:15.533 [DEBUG] [Thread-3403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:14:15.533 [DEBUG] [Thread-3403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:14:15.533 [DEBUG] [Thread-3403] [transport.py] [_log()] Compression: none
2025-11-25T18:14:15.533 [DEBUG] [Thread-3403] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:14:15.552 [DEBUG] [Thread-3403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:14:15.553 [DEBUG] [Thread-3403] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:14:15.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:14:15.555 [DEBUG] [Thread-3403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:14:15.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:14:15.557 [DEBUG] [Thread-3403] [transport.py] [_log()] userauth is OK
2025-11-25T18:14:15.557 [DEBUG] [Thread-3403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:14:15.557 [DEBUG] [Thread-3403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:14:15.558 [DEBUG] [Thread-3403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:14:15.558 [DEBUG] [Thread-3403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:14:15.581 [INFO] [Thread-3403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:14:15.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:14:16.403 [DEBUG] [Thread-3403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:14:16.403 [DEBUG] [Thread-3403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:14:16.404 [DEBUG] [Thread-3403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:14:16.444 [DEBUG] [Thread-3403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:14:16.444 [DEBUG] [Thread-3403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:14:16.446 [DEBUG] [Thread-3403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:14:16.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:14:16.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:14:16.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:14:16.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:14:16.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:14:16.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:14:16.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.676142 -999.00  +26.80   8.59     11   -5.60 1 1 1 1 1   887    0 32.08 -3.96 ----- 6.4 8.6 111.6 10.8 30.8 -33.8 31.5 -31.9 32.6 -30.5 32.5 -32.4
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.676142
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:14:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:14:03', tmtdew=39.92, humidity=6.56, cloud=0.0, wind=5.35, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:13:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:14:16.463 [DEBUG] [Thread-3403] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:14:16.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:14:16.546 [DEBUG] [Thread-3406] [transport.py] [_log()] starting thread (client mode): 0x761da710
2025-11-25T18:14:16.546 [DEBUG] [Thread-3406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:14:16.560 [DEBUG] [Thread-3406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:14:16.561 [INFO] [Thread-3406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] client lang: <none>
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] server lang: <none>
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] kex follows: False
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] Compression: none
2025-11-25T18:14:16.568 [DEBUG] [Thread-3406] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:14:16.625 [DEBUG] [Thread-3406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:14:16.625 [DEBUG] [Thread-3406] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:14:16.625 [DEBUG] [Thread-3406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:14:16.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:14:16.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:14:16.681 [DEBUG] [Thread-3406] [transport.py] [_log()] userauth is OK
2025-11-25T18:14:16.681 [DEBUG] [Thread-3406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:14:16.681 [DEBUG] [Thread-3406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:14:16.681 [DEBUG] [Thread-3406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:14:16.681 [DEBUG] [Thread-3406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:14:16.695 [INFO] [Thread-3406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:14:16.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:14:16.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:14:17.541 [DEBUG] [Thread-3406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:14:17.541 [DEBUG] [Thread-3406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:14:17.588 [DEBUG] [Thread-3406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:14:17.588 [DEBUG] [Thread-3406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:14:17.596 [DEBUG] [Thread-3406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:14:17.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:14:17.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:14: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
2025-11-25T18:14:17.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:14:17.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:14:17.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:14:17.628 [DEBUG] [Thread-3406] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:14:18.306 [DEBUG] [Thread-3408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:14:21.896 [DEBUG] [Thread-3409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:14:36.945 [DEBUG] [Thread-3410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:14:47.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:14:47.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:14:47.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:14:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 14, 35), 39.95, 6.51, 0.0, 6.94, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:14:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:14:35
2025-11-25T18:14:48.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:14:48.551 [DEBUG] [Thread-3411] [transport.py] [_log()] starting thread (client mode): 0x70d38e20
2025-11-25T18:14:48.551 [DEBUG] [Thread-3411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:14:48.571 [DEBUG] [Thread-3411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:14:48.572 [INFO] [Thread-3411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:14:48.574 [DEBUG] [Thread-3411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] client lang: <none>
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] server lang: <none>
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] kex follows: False
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] Compression: none
2025-11-25T18:14:48.575 [DEBUG] [Thread-3411] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:14:48.594 [DEBUG] [Thread-3411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:14:48.594 [DEBUG] [Thread-3411] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:14:48.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:14:48.595 [DEBUG] [Thread-3411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:14:48.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:14:48.597 [DEBUG] [Thread-3411] [transport.py] [_log()] userauth is OK
2025-11-25T18:14:48.597 [DEBUG] [Thread-3411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:14:48.598 [DEBUG] [Thread-3411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:14:48.598 [DEBUG] [Thread-3411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:14:48.598 [DEBUG] [Thread-3411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:14:48.621 [INFO] [Thread-3411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:14:48.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:14:49.242 [DEBUG] [Thread-3411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:14:49.242 [DEBUG] [Thread-3411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:14:49.243 [DEBUG] [Thread-3411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:14:49.283 [DEBUG] [Thread-3411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:14:49.283 [DEBUG] [Thread-3411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:14:49.286 [DEBUG] [Thread-3411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:14:49.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:14:49.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:14:49.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:14:49.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:14:49.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:14:49.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:14:49.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:14:49.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:14:49.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:14:49.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.676489 -999.00  +26.90   1.18     11   -5.50 1 1 1 1 1   887    0 32.41 -5.57 ----- 1.5 1.2 222.7 7.5 30.7 -32.2 31.4 -32.3 32.6 -30.9 32.5 -32.1
2025-11-25T18:14:49.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:14:49.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:14:49.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.676489
2025-11-25T18:14:49.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:14:49.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:14:49.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:14:49.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:14:49.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:14:49.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:14:35', tmtdew=39.95, humidity=6.51, cloud=0.0, wind=6.94, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:14:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:14:49.316 [DEBUG] [Thread-3411] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:14:49.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:14:49.411 [DEBUG] [Thread-3414] [transport.py] [_log()] starting thread (client mode): 0x70d2a4a0
2025-11-25T18:14:49.411 [DEBUG] [Thread-3414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:14:49.425 [DEBUG] [Thread-3414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:14:49.426 [INFO] [Thread-3414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:14:49.436 [DEBUG] [Thread-3414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:14:49.437 [DEBUG] [Thread-3414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:14:49.437 [DEBUG] [Thread-3414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:14:49.437 [DEBUG] [Thread-3414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:14:49.437 [DEBUG] [Thread-3414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:14:49.437 [DEBUG] [Thread-3414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:14:49.437 [DEBUG] [Thread-3414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:14:49.438 [DEBUG] [Thread-3414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:14:49.438 [DEBUG] [Thread-3414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:14:49.438 [DEBUG] [Thread-3414] [transport.py] [_log()] client lang: <none>
2025-11-25T18:14:49.438 [DEBUG] [Thread-3414] [transport.py] [_log()] server lang: <none>
2025-11-25T18:14:49.438 [DEBUG] [Thread-3414] [transport.py] [_log()] kex follows: False
2025-11-25T18:14:49.438 [DEBUG] [Thread-3414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:14:49.438 [DEBUG] [Thread-3414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:14:49.438 [DEBUG] [Thread-3414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:14:49.439 [DEBUG] [Thread-3414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:14:49.439 [DEBUG] [Thread-3414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:14:49.439 [DEBUG] [Thread-3414] [transport.py] [_log()] Compression: none
2025-11-25T18:14:49.439 [DEBUG] [Thread-3414] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:14:49.493 [DEBUG] [Thread-3414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:14:49.494 [DEBUG] [Thread-3414] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:14:49.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:14:49.495 [DEBUG] [Thread-3414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:14:49.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:14:49.551 [DEBUG] [Thread-3414] [transport.py] [_log()] userauth is OK
2025-11-25T18:14:49.551 [DEBUG] [Thread-3414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:14:49.551 [DEBUG] [Thread-3414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:14:49.552 [DEBUG] [Thread-3414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:14:49.552 [DEBUG] [Thread-3414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:14:49.570 [INFO] [Thread-3414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:14:49.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:14:49.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:14:50.406 [DEBUG] [Thread-3414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:14:50.407 [DEBUG] [Thread-3414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:14:50.456 [DEBUG] [Thread-3414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:14:50.456 [DEBUG] [Thread-3414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:14:50.465 [DEBUG] [Thread-3414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:14:50.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:14:50.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:14:50.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:14:50.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:14:50.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:14:50.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:14:50.502 [DEBUG] [Thread-3414] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:14:51.976 [DEBUG] [Thread-3416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:15:07.015 [DEBUG] [Thread-3417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:15:19.025 [DEBUG] [Thread-3418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:15:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:15:20.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:15:20.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:15:21.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 15, 7), 39.76, 6.59, 0.0, 5.86, 26.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:15:21.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:15:07
2025-11-25T18:15:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:15:21.467 [DEBUG] [Thread-3419] [transport.py] [_log()] starting thread (client mode): 0x7378f5e0
2025-11-25T18:15:21.468 [DEBUG] [Thread-3419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:15:21.494 [DEBUG] [Thread-3419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:15:21.495 [INFO] [Thread-3419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] client lang: <none>
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] server lang: <none>
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] kex follows: False
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:15:21.498 [DEBUG] [Thread-3419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:15:21.499 [DEBUG] [Thread-3419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:15:21.499 [DEBUG] [Thread-3419] [transport.py] [_log()] Compression: none
2025-11-25T18:15:21.499 [DEBUG] [Thread-3419] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:15:21.515 [DEBUG] [Thread-3419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:15:21.516 [DEBUG] [Thread-3419] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:15:21.516 [DEBUG] [Thread-3419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:15:21.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:15:21.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:15:21.518 [DEBUG] [Thread-3419] [transport.py] [_log()] userauth is OK
2025-11-25T18:15:21.518 [DEBUG] [Thread-3419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:15:21.519 [DEBUG] [Thread-3419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:15:21.519 [DEBUG] [Thread-3419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:15:21.519 [DEBUG] [Thread-3419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:15:21.541 [INFO] [Thread-3419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:15:21.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:15:22.052 [DEBUG] [Thread-3421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:15:22.170 [DEBUG] [Thread-3419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:15:22.171 [DEBUG] [Thread-3419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:15:22.171 [DEBUG] [Thread-3419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:15:22.212 [DEBUG] [Thread-3419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:15:22.212 [DEBUG] [Thread-3419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:15:22.215 [DEBUG] [Thread-3419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:15:22.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:15:22.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:15:22.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:15:22.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:15:22.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:15:22.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:15:22.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:15:22.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:15:22.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:15:22.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.676836 -999.00  +27.00   3.11     11   -5.60 1 1 1 1 1   887    0 32.47 -6.09 ----- 2.3 3.1 91.9 3.4 30.8 -32.3 31.5 -31.8 32.7 -30.3 32.6 -32.0
2025-11-25T18:15:22.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:15:22.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:15:22.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.676836
2025-11-25T18:15:22.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:15:22.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:15:22.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:15:22.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:15:22.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:15:22.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:15:07', tmtdew=39.76, humidity=6.59, cloud=0.0, wind=5.86, temperature=26.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:14:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:15:22.242 [DEBUG] [Thread-3419] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:15:22.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:15:22.339 [DEBUG] [Thread-3423] [transport.py] [_log()] starting thread (client mode): 0x737c43a0
2025-11-25T18:15:22.339 [DEBUG] [Thread-3423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:15:22.354 [DEBUG] [Thread-3423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:15:22.354 [INFO] [Thread-3423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:15:22.362 [DEBUG] [Thread-3423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:15:22.362 [DEBUG] [Thread-3423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:15:22.363 [DEBUG] [Thread-3423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:15:22.363 [DEBUG] [Thread-3423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:15:22.363 [DEBUG] [Thread-3423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:15:22.363 [DEBUG] [Thread-3423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:15:22.363 [DEBUG] [Thread-3423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:15:22.363 [DEBUG] [Thread-3423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:15:22.363 [DEBUG] [Thread-3423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:15:22.363 [DEBUG] [Thread-3423] [transport.py] [_log()] client lang: <none>
2025-11-25T18:15:22.363 [DEBUG] [Thread-3423] [transport.py] [_log()] server lang: <none>
2025-11-25T18:15:22.364 [DEBUG] [Thread-3423] [transport.py] [_log()] kex follows: False
2025-11-25T18:15:22.364 [DEBUG] [Thread-3423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:15:22.364 [DEBUG] [Thread-3423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:15:22.364 [DEBUG] [Thread-3423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:15:22.364 [DEBUG] [Thread-3423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:15:22.364 [DEBUG] [Thread-3423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:15:22.364 [DEBUG] [Thread-3423] [transport.py] [_log()] Compression: none
2025-11-25T18:15:22.364 [DEBUG] [Thread-3423] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:15:22.419 [DEBUG] [Thread-3423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:15:22.419 [DEBUG] [Thread-3423] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:15:22.420 [DEBUG] [Thread-3423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:15:22.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:15:22.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:15:22.475 [DEBUG] [Thread-3423] [transport.py] [_log()] userauth is OK
2025-11-25T18:15:22.475 [DEBUG] [Thread-3423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:15:22.475 [DEBUG] [Thread-3423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:15:22.475 [DEBUG] [Thread-3423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:15:22.475 [DEBUG] [Thread-3423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:15:22.494 [INFO] [Thread-3423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:15:22.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:15:22.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:15:23.316 [DEBUG] [Thread-3423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:15:23.317 [DEBUG] [Thread-3423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:15:23.365 [DEBUG] [Thread-3423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:15:23.365 [DEBUG] [Thread-3423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:15:23.374 [DEBUG] [Thread-3423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:15:23.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:15:23.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:15:23.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:15:23.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:15:23.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:15:23.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:15:23.411 [DEBUG] [Thread-3423] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:15:37.088 [DEBUG] [Thread-3425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:15:52.139 [DEBUG] [Thread-3426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:15:53.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:15:53.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:15:53.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:15:54.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 15, 39), 39.85, 6.58, 0.0, 5.14, 27.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:15:54.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:15:39
2025-11-25T18:15:54.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:15:54.358 [DEBUG] [Thread-3427] [transport.py] [_log()] starting thread (client mode): 0x737c5870
2025-11-25T18:15:54.358 [DEBUG] [Thread-3427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:15:54.379 [DEBUG] [Thread-3427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:15:54.379 [INFO] [Thread-3427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] client lang: <none>
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] server lang: <none>
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] kex follows: False
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:15:54.382 [DEBUG] [Thread-3427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:15:54.383 [DEBUG] [Thread-3427] [transport.py] [_log()] Compression: none
2025-11-25T18:15:54.383 [DEBUG] [Thread-3427] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:15:54.400 [DEBUG] [Thread-3427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:15:54.400 [DEBUG] [Thread-3427] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:15:54.401 [DEBUG] [Thread-3427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:15:54.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:15:54.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:15:54.403 [DEBUG] [Thread-3427] [transport.py] [_log()] userauth is OK
2025-11-25T18:15:54.403 [DEBUG] [Thread-3427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:15:54.403 [DEBUG] [Thread-3427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:15:54.403 [DEBUG] [Thread-3427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:15:54.403 [DEBUG] [Thread-3427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:15:54.428 [INFO] [Thread-3427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:15:54.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:15:55.062 [DEBUG] [Thread-3427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:15:55.063 [DEBUG] [Thread-3427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:15:55.063 [DEBUG] [Thread-3427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:15:55.104 [DEBUG] [Thread-3427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:15:55.104 [DEBUG] [Thread-3427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:15:55.108 [DEBUG] [Thread-3427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:15:55.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:15:55.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:15:55.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:15:55.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:15:55.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:15:55.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:15:55.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:15:55.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:15:55.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:15:55.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.677183 -999.00  +27.00   2.87     11   -5.40 1 1 1 1 1   887    0 32.45 -6.57 ----- 4.3 2.9 109.4 5.4 30.9 -33.4 31.5 -31.9 32.8 -30.2 32.6 -32.5
2025-11-25T18:15:55.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:15:55.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:15:55.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.677183
2025-11-25T18:15:55.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:15:55.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:15:55.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:15:55.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:15:55.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:15:55.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:15:39', tmtdew=39.85, humidity=6.58, cloud=0.0, wind=5.14, temperature=27.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:15:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:15:55.136 [DEBUG] [Thread-3427] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:15:55.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:15:55.232 [DEBUG] [Thread-3430] [transport.py] [_log()] starting thread (client mode): 0x70d0f6a0
2025-11-25T18:15:55.232 [DEBUG] [Thread-3430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:15:55.247 [DEBUG] [Thread-3430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:15:55.247 [INFO] [Thread-3430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:15:55.254 [DEBUG] [Thread-3430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:15:55.255 [DEBUG] [Thread-3430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:15:55.255 [DEBUG] [Thread-3430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:15:55.255 [DEBUG] [Thread-3430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:15:55.255 [DEBUG] [Thread-3430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:15:55.255 [DEBUG] [Thread-3430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:15:55.255 [DEBUG] [Thread-3430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:15:55.256 [DEBUG] [Thread-3430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:15:55.256 [DEBUG] [Thread-3430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:15:55.256 [DEBUG] [Thread-3430] [transport.py] [_log()] client lang: <none>
2025-11-25T18:15:55.256 [DEBUG] [Thread-3430] [transport.py] [_log()] server lang: <none>
2025-11-25T18:15:55.256 [DEBUG] [Thread-3430] [transport.py] [_log()] kex follows: False
2025-11-25T18:15:55.256 [DEBUG] [Thread-3430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:15:55.256 [DEBUG] [Thread-3430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:15:55.256 [DEBUG] [Thread-3430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:15:55.257 [DEBUG] [Thread-3430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:15:55.257 [DEBUG] [Thread-3430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:15:55.257 [DEBUG] [Thread-3430] [transport.py] [_log()] Compression: none
2025-11-25T18:15:55.257 [DEBUG] [Thread-3430] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:15:55.316 [DEBUG] [Thread-3430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:15:55.316 [DEBUG] [Thread-3430] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:15:55.317 [DEBUG] [Thread-3430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:15:55.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:15:55.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:15:55.371 [DEBUG] [Thread-3430] [transport.py] [_log()] userauth is OK
2025-11-25T18:15:55.372 [DEBUG] [Thread-3430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:15:55.372 [DEBUG] [Thread-3430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:15:55.372 [DEBUG] [Thread-3430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:15:55.372 [DEBUG] [Thread-3430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:15:55.394 [INFO] [Thread-3430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:15:55.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:15:55.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:15:56.278 [DEBUG] [Thread-3430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:15:56.278 [DEBUG] [Thread-3430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:15:56.329 [DEBUG] [Thread-3430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:15:56.329 [DEBUG] [Thread-3430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:15:56.341 [DEBUG] [Thread-3430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:15:56.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:15:56.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:15:56.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:15:56.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:15:56.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:15:56.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:15:56.385 [DEBUG] [Thread-3430] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:16:07.178 [DEBUG] [Thread-3432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:16:19.769 [DEBUG] [Thread-3433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:16:22.228 [DEBUG] [Thread-3434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:16:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:16:26.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:16:26.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:16:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 16, 11), 39.85, 6.58, 0.0, 8.4, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:16:27.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:16:11
2025-11-25T18:16:27.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:16:27.341 [DEBUG] [Thread-3435] [transport.py] [_log()] starting thread (client mode): 0x70d399c0
2025-11-25T18:16:27.342 [DEBUG] [Thread-3435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:16:27.356 [DEBUG] [Thread-3435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:16:27.357 [INFO] [Thread-3435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] client lang: <none>
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] server lang: <none>
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] kex follows: False
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:16:27.360 [DEBUG] [Thread-3435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:16:27.361 [DEBUG] [Thread-3435] [transport.py] [_log()] Compression: none
2025-11-25T18:16:27.361 [DEBUG] [Thread-3435] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:16:27.377 [DEBUG] [Thread-3435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:16:27.377 [DEBUG] [Thread-3435] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:16:27.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:16:27.378 [DEBUG] [Thread-3435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:16:27.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:16:27.379 [DEBUG] [Thread-3435] [transport.py] [_log()] userauth is OK
2025-11-25T18:16:27.379 [DEBUG] [Thread-3435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:16:27.379 [DEBUG] [Thread-3435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:16:27.379 [DEBUG] [Thread-3435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:16:27.380 [DEBUG] [Thread-3435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:16:27.399 [INFO] [Thread-3435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:16:27.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:16:28.037 [DEBUG] [Thread-3435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:16:28.037 [DEBUG] [Thread-3435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:16:28.038 [DEBUG] [Thread-3435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:16:28.079 [DEBUG] [Thread-3435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:16:28.079 [DEBUG] [Thread-3435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:16:28.081 [DEBUG] [Thread-3435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:16:28.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:16:28.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:16:28.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:16:28.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:16:28.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:16:28.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:16:28.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:16:28.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:16:28.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:16:28.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.677531 -999.00  +27.00  12.33     11   -5.50 1 1 1 1 1   887    0 32.24 -8.16 ----- 10.9 12.3 56.8 14.3 30.9 -32.4 31.5 -32.9 32.7 -30.3 32.6 -32.4
2025-11-25T18:16:28.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:16:28.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:16:28.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.677531
2025-11-25T18:16:28.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:16:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:16:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:16:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:16:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:16:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:16:11', tmtdew=39.85, humidity=6.58, cloud=0.0, wind=8.4, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:15:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:16:28.103 [DEBUG] [Thread-3435] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:16:28.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:16:28.201 [DEBUG] [Thread-3438] [transport.py] [_log()] starting thread (client mode): 0x70d38f70
2025-11-25T18:16:28.201 [DEBUG] [Thread-3438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:16:28.216 [DEBUG] [Thread-3438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:16:28.216 [INFO] [Thread-3438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:16:28.223 [DEBUG] [Thread-3438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] client lang: <none>
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] server lang: <none>
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] kex follows: False
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] Compression: none
2025-11-25T18:16:28.224 [DEBUG] [Thread-3438] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:16:28.282 [DEBUG] [Thread-3438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:16:28.283 [DEBUG] [Thread-3438] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:16:28.283 [DEBUG] [Thread-3438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:16:28.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:16:28.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:16:28.340 [DEBUG] [Thread-3438] [transport.py] [_log()] userauth is OK
2025-11-25T18:16:28.340 [DEBUG] [Thread-3438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:16:28.340 [DEBUG] [Thread-3438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:16:28.340 [DEBUG] [Thread-3438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:16:28.340 [DEBUG] [Thread-3438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:16:28.358 [INFO] [Thread-3438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:16:28.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:16:28.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:16:29.229 [DEBUG] [Thread-3438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:16:29.229 [DEBUG] [Thread-3438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:16:29.276 [DEBUG] [Thread-3438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:16:29.276 [DEBUG] [Thread-3438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:16:29.285 [DEBUG] [Thread-3438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:16:29.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:16:29.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:16:29.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:16:29.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:16:29.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:16:29.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:16:29.318 [DEBUG] [Thread-3438] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:16:37.264 [DEBUG] [Thread-3440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:16:52.314 [DEBUG] [Thread-3441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:16:59.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:16:59.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:16:59.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:16:59.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 16, 43), 39.87, 6.59, 0.0, 6.0, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:16:59.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:16:43
2025-11-25T18:17:00.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:17:00.250 [DEBUG] [Thread-3442] [transport.py] [_log()] starting thread (client mode): 0x70d3a2c0
2025-11-25T18:17:00.250 [DEBUG] [Thread-3442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:17:00.269 [DEBUG] [Thread-3442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:17:00.270 [INFO] [Thread-3442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] client lang: <none>
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] server lang: <none>
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] kex follows: False
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:17:00.271 [DEBUG] [Thread-3442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:17:00.272 [DEBUG] [Thread-3442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:17:00.272 [DEBUG] [Thread-3442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:17:00.272 [DEBUG] [Thread-3442] [transport.py] [_log()] Compression: none
2025-11-25T18:17:00.272 [DEBUG] [Thread-3442] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:17:00.285 [DEBUG] [Thread-3442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:17:00.286 [DEBUG] [Thread-3442] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:17:00.286 [DEBUG] [Thread-3442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:17:00.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:17:00.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:17:00.288 [DEBUG] [Thread-3442] [transport.py] [_log()] userauth is OK
2025-11-25T18:17:00.288 [DEBUG] [Thread-3442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:17:00.288 [DEBUG] [Thread-3442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:17:00.288 [DEBUG] [Thread-3442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:17:00.288 [DEBUG] [Thread-3442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:17:00.306 [INFO] [Thread-3442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:17:00.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:17:00.932 [DEBUG] [Thread-3442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:17:00.932 [DEBUG] [Thread-3442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:17:00.932 [DEBUG] [Thread-3442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:17:00.973 [DEBUG] [Thread-3442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:17:00.973 [DEBUG] [Thread-3442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:17:00.976 [DEBUG] [Thread-3442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:17:00.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:17:00.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:17:00.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:17:00.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:17:00.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:17:00.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:17:00.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:17:00.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:17:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:17:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.678225 -999.00  +26.90   7.94     11   -5.50 1 1 1 1 1   887    0 32.24 -10.01 ----- 5.6 7.9 66.6 9.6 30.8 -32.3 31.4 -32.6 32.6 -31.2 32.5 -32.5
2025-11-25T18:17:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:17:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:17:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.678225
2025-11-25T18:17:01.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:17:01.001 [DEBUG] [Thread-3442] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:17:01.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:17:01.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:17:01.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:17:01.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:17:01.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:16:43', tmtdew=39.87, humidity=6.59, cloud=0.0, wind=6.0, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:16:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:17:01.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:17:01.098 [DEBUG] [Thread-3445] [transport.py] [_log()] starting thread (client mode): 0x70d382b0
2025-11-25T18:17:01.099 [DEBUG] [Thread-3445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:17:01.113 [DEBUG] [Thread-3445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:17:01.113 [INFO] [Thread-3445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:17:01.121 [DEBUG] [Thread-3445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:17:01.121 [DEBUG] [Thread-3445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:17:01.121 [DEBUG] [Thread-3445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:17:01.122 [DEBUG] [Thread-3445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:17:01.122 [DEBUG] [Thread-3445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:17:01.122 [DEBUG] [Thread-3445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:17:01.122 [DEBUG] [Thread-3445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:17:01.122 [DEBUG] [Thread-3445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:17:01.122 [DEBUG] [Thread-3445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:17:01.122 [DEBUG] [Thread-3445] [transport.py] [_log()] client lang: <none>
2025-11-25T18:17:01.122 [DEBUG] [Thread-3445] [transport.py] [_log()] server lang: <none>
2025-11-25T18:17:01.123 [DEBUG] [Thread-3445] [transport.py] [_log()] kex follows: False
2025-11-25T18:17:01.123 [DEBUG] [Thread-3445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:17:01.123 [DEBUG] [Thread-3445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:17:01.123 [DEBUG] [Thread-3445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:17:01.123 [DEBUG] [Thread-3445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:17:01.123 [DEBUG] [Thread-3445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:17:01.123 [DEBUG] [Thread-3445] [transport.py] [_log()] Compression: none
2025-11-25T18:17:01.124 [DEBUG] [Thread-3445] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:17:01.180 [DEBUG] [Thread-3445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:17:01.181 [DEBUG] [Thread-3445] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:17:01.182 [DEBUG] [Thread-3445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:17:01.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:17:01.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:17:01.239 [DEBUG] [Thread-3445] [transport.py] [_log()] userauth is OK
2025-11-25T18:17:01.239 [DEBUG] [Thread-3445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:17:01.239 [DEBUG] [Thread-3445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:17:01.239 [DEBUG] [Thread-3445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:17:01.239 [DEBUG] [Thread-3445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:17:01.257 [INFO] [Thread-3445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:17:01.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:17:01.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:17:02.157 [DEBUG] [Thread-3445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:17:02.157 [DEBUG] [Thread-3445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:17:02.205 [DEBUG] [Thread-3445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:17:02.206 [DEBUG] [Thread-3445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:17:02.216 [DEBUG] [Thread-3445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:17:02.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:17:02.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:17:02.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:17:02.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:17:02.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:17:02.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:17:02.257 [DEBUG] [Thread-3445] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:17:07.354 [DEBUG] [Thread-3447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:17:20.269 [DEBUG] [Thread-3448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:17:22.405 [DEBUG] [Thread-3449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:17:32.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:17:32.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:17:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:17:32.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 17, 15), 39.76, 6.64, 0.0, 7.22, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:17:32.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:17:15
2025-11-25T18:17:33.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:17:33.203 [DEBUG] [Thread-3450] [transport.py] [_log()] starting thread (client mode): 0x70d40a00
2025-11-25T18:17:33.203 [DEBUG] [Thread-3450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:17:33.223 [DEBUG] [Thread-3450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:17:33.223 [INFO] [Thread-3450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:17:33.226 [DEBUG] [Thread-3450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:17:33.226 [DEBUG] [Thread-3450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:17:33.226 [DEBUG] [Thread-3450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:17:33.226 [DEBUG] [Thread-3450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:17:33.226 [DEBUG] [Thread-3450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:17:33.226 [DEBUG] [Thread-3450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:17:33.226 [DEBUG] [Thread-3450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] client lang: <none>
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] server lang: <none>
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] kex follows: False
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] Compression: none
2025-11-25T18:17:33.227 [DEBUG] [Thread-3450] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:17:33.247 [DEBUG] [Thread-3450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:17:33.247 [DEBUG] [Thread-3450] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:17:33.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:17:33.249 [DEBUG] [Thread-3450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:17:33.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:17:33.292 [DEBUG] [Thread-3450] [transport.py] [_log()] userauth is OK
2025-11-25T18:17:33.293 [DEBUG] [Thread-3450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:17:33.293 [DEBUG] [Thread-3450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:17:33.293 [DEBUG] [Thread-3450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:17:33.293 [DEBUG] [Thread-3450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:17:33.324 [INFO] [Thread-3450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:17:33.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:17:33.962 [DEBUG] [Thread-3450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:17:33.963 [DEBUG] [Thread-3450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:17:33.963 [DEBUG] [Thread-3450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:17:34.003 [DEBUG] [Thread-3450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:17:34.003 [DEBUG] [Thread-3450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:17:34.006 [DEBUG] [Thread-3450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:17:34.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:17:34.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:17:34.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:17:34.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:17:34.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:17:34.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:17:34.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:17:34.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:17:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:17:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.678572 -999.00  +26.90   5.36     11   -5.50 1 1 1 1 1   887    0 32.39 -9.85 ----- 6.9 5.4 89.5 7.7 30.7 -32.4 31.4 -31.8 32.5 -31.1 32.5 -32.7
2025-11-25T18:17:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:17:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:17:34.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.678572
2025-11-25T18:17:34.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:17:34.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:17:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:17:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:17:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:17:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:17:15', tmtdew=39.76, humidity=6.64, cloud=0.0, wind=7.22, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:17:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:17:34.030 [DEBUG] [Thread-3450] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:17:34.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:17:34.128 [DEBUG] [Thread-3453] [transport.py] [_log()] starting thread (client mode): 0x70d43250
2025-11-25T18:17:34.128 [DEBUG] [Thread-3453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:17:34.143 [DEBUG] [Thread-3453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:17:34.143 [INFO] [Thread-3453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] client lang: <none>
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] server lang: <none>
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] kex follows: False
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:17:34.151 [DEBUG] [Thread-3453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:17:34.152 [DEBUG] [Thread-3453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:17:34.152 [DEBUG] [Thread-3453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:17:34.152 [DEBUG] [Thread-3453] [transport.py] [_log()] Compression: none
2025-11-25T18:17:34.152 [DEBUG] [Thread-3453] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:17:34.208 [DEBUG] [Thread-3453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:17:34.209 [DEBUG] [Thread-3453] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:17:34.209 [DEBUG] [Thread-3453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:17:34.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:17:34.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:17:34.264 [DEBUG] [Thread-3453] [transport.py] [_log()] userauth is OK
2025-11-25T18:17:34.264 [DEBUG] [Thread-3453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:17:34.264 [DEBUG] [Thread-3453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:17:34.265 [DEBUG] [Thread-3453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:17:34.265 [DEBUG] [Thread-3453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:17:34.287 [INFO] [Thread-3453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:17:34.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:17:34.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:17:35.116 [DEBUG] [Thread-3453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:17:35.117 [DEBUG] [Thread-3453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:17:35.165 [DEBUG] [Thread-3453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:17:35.165 [DEBUG] [Thread-3453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:17:35.174 [DEBUG] [Thread-3453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:17:35.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:17:35.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:17:35.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:17:35.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:17:35.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:17:35.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:17:35.211 [DEBUG] [Thread-3453] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:17:37.440 [DEBUG] [Thread-3455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:17:52.497 [DEBUG] [Thread-3456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:18:05.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:18:05.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:18:05.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:18:05.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 17, 47), 39.72, 6.64, 0.0, 7.16, 26.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:18:05.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:17:47
2025-11-25T18:18:06.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:18:06.158 [DEBUG] [Thread-3457] [transport.py] [_log()] starting thread (client mode): 0x7378dba0
2025-11-25T18:18:06.158 [DEBUG] [Thread-3457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:18:06.180 [DEBUG] [Thread-3457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:18:06.180 [INFO] [Thread-3457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:18:06.183 [DEBUG] [Thread-3457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] client lang: <none>
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] server lang: <none>
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] kex follows: False
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:18:06.184 [DEBUG] [Thread-3457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:18:06.185 [DEBUG] [Thread-3457] [transport.py] [_log()] Compression: none
2025-11-25T18:18:06.185 [DEBUG] [Thread-3457] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:18:06.201 [DEBUG] [Thread-3457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:18:06.202 [DEBUG] [Thread-3457] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:18:06.202 [DEBUG] [Thread-3457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:18:06.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:18:06.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:18:06.205 [DEBUG] [Thread-3457] [transport.py] [_log()] userauth is OK
2025-11-25T18:18:06.205 [DEBUG] [Thread-3457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:18:06.205 [DEBUG] [Thread-3457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:18:06.205 [DEBUG] [Thread-3457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:18:06.205 [DEBUG] [Thread-3457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:18:06.228 [INFO] [Thread-3457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:18:06.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:18:06.876 [DEBUG] [Thread-3457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:18:06.876 [DEBUG] [Thread-3457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:18:06.877 [DEBUG] [Thread-3457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:18:06.918 [DEBUG] [Thread-3457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:18:06.918 [DEBUG] [Thread-3457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:18:06.921 [DEBUG] [Thread-3457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:18:06.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:18:06.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:18:06.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:18:06.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:18:06.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:18:06.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:18:06.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:18:06.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:18:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:18:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.678919 -999.00  +27.00   9.82     11   -5.30 1 1 1 1 1   887    0 31.74 -10.59 ----- 9.2 9.8 58.0 11.0 30.8 -32.1 31.4 -31.8 32.7 -31.1 32.6 -32.3
2025-11-25T18:18:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:18:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:18:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.678919
2025-11-25T18:18:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:18:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:18:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:18:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:18:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:18:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:17:47', tmtdew=39.72, humidity=6.64, cloud=0.0, wind=7.16, temperature=26.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:17:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:18:06.946 [DEBUG] [Thread-3457] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:18:07.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:18:07.041 [DEBUG] [Thread-3460] [transport.py] [_log()] starting thread (client mode): 0x73781420
2025-11-25T18:18:07.041 [DEBUG] [Thread-3460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:18:07.055 [DEBUG] [Thread-3460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:18:07.056 [INFO] [Thread-3460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:18:07.063 [DEBUG] [Thread-3460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] client lang: <none>
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] server lang: <none>
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] kex follows: False
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] Compression: none
2025-11-25T18:18:07.064 [DEBUG] [Thread-3460] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:18:07.133 [DEBUG] [Thread-3460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:18:07.134 [DEBUG] [Thread-3460] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:18:07.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:18:07.135 [DEBUG] [Thread-3460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:18:07.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:18:07.192 [DEBUG] [Thread-3460] [transport.py] [_log()] userauth is OK
2025-11-25T18:18:07.192 [DEBUG] [Thread-3460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:18:07.192 [DEBUG] [Thread-3460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:18:07.193 [DEBUG] [Thread-3460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:18:07.193 [DEBUG] [Thread-3460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:18:07.211 [INFO] [Thread-3460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:18:07.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:18:07.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:18:07.536 [DEBUG] [Thread-3462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:18:08.065 [DEBUG] [Thread-3460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:18:08.066 [DEBUG] [Thread-3460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:18:08.114 [DEBUG] [Thread-3460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:18:08.114 [DEBUG] [Thread-3460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:18:08.123 [DEBUG] [Thread-3460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:18:08.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:18:08.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:18:08.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:18:08.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:18:08.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:18:08.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:18:08.159 [DEBUG] [Thread-3460] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:18:20.775 [DEBUG] [Thread-3463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:18:22.588 [DEBUG] [Thread-3464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:18:37.619 [DEBUG] [Thread-3465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:18:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:18:38.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:18:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:18:38.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 18, 20), 39.69, 6.66, 0.0, 7.78, 26.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:18:38.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:18:20
2025-11-25T18:18:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:18:39.144 [DEBUG] [Thread-3466] [transport.py] [_log()] starting thread (client mode): 0x7376ca30
2025-11-25T18:18:39.144 [DEBUG] [Thread-3466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:18:39.164 [DEBUG] [Thread-3466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:18:39.164 [INFO] [Thread-3466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] client lang: <none>
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] server lang: <none>
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] kex follows: False
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] Compression: none
2025-11-25T18:18:39.167 [DEBUG] [Thread-3466] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:18:39.183 [DEBUG] [Thread-3466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:18:39.183 [DEBUG] [Thread-3466] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:18:39.183 [DEBUG] [Thread-3466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:18:39.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:18:39.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:18:39.184 [DEBUG] [Thread-3466] [transport.py] [_log()] userauth is OK
2025-11-25T18:18:39.184 [DEBUG] [Thread-3466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:18:39.184 [DEBUG] [Thread-3466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:18:39.184 [DEBUG] [Thread-3466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:18:39.184 [DEBUG] [Thread-3466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:18:39.194 [INFO] [Thread-3466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:18:39.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:18:39.838 [DEBUG] [Thread-3466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:18:39.838 [DEBUG] [Thread-3466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:18:39.838 [DEBUG] [Thread-3466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:18:39.880 [DEBUG] [Thread-3466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:18:39.880 [DEBUG] [Thread-3466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:18:39.882 [DEBUG] [Thread-3466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:18:39.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:18:39.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:18:39.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:18:39.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:18:39.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:18:39.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:18:39.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:18:39.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.679267 -999.00  +27.10   9.84     11   -5.30 1 1 1 1 1   887    0 32.29 -10.24 ----- 8.8 9.8 44.2 16.4 30.8 -32.3 31.4 -31.9 32.6 -30.7 32.5 -32.4
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.679267
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:18:39.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:18:20', tmtdew=39.69, humidity=6.66, cloud=0.0, wind=7.78, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:18:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:18:39.896 [DEBUG] [Thread-3466] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:18:39.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:18:39.981 [DEBUG] [Thread-3469] [transport.py] [_log()] starting thread (client mode): 0x7378ebc0
2025-11-25T18:18:39.981 [DEBUG] [Thread-3469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:18:39.997 [DEBUG] [Thread-3469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:18:39.997 [INFO] [Thread-3469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] client lang: <none>
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] server lang: <none>
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] kex follows: False
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] Compression: none
2025-11-25T18:18:40.005 [DEBUG] [Thread-3469] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:18:40.066 [DEBUG] [Thread-3469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:18:40.067 [DEBUG] [Thread-3469] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:18:40.067 [DEBUG] [Thread-3469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:18:40.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:18:40.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:18:40.124 [DEBUG] [Thread-3469] [transport.py] [_log()] userauth is OK
2025-11-25T18:18:40.124 [DEBUG] [Thread-3469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:18:40.124 [DEBUG] [Thread-3469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:18:40.124 [DEBUG] [Thread-3469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:18:40.124 [DEBUG] [Thread-3469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:18:40.138 [INFO] [Thread-3469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:18:40.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:18:40.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:18:40.958 [DEBUG] [Thread-3469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:18:40.958 [DEBUG] [Thread-3469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:18:41.006 [DEBUG] [Thread-3469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:18:41.006 [DEBUG] [Thread-3469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:18:41.015 [DEBUG] [Thread-3469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:18:41.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:18:41.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:18:41.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:18:41.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:18:41.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:18:41.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:18:41.047 [DEBUG] [Thread-3469] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:18:52.652 [DEBUG] [Thread-3471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:19:07.704 [DEBUG] [Thread-3472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:19:11.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:19:11.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:19:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:19:11.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 18, 52), 39.55, 6.68, 0.0, 9.83, 26.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:19:11.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:18:52
2025-11-25T18:19:11.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:19:12.019 [DEBUG] [Thread-3473] [transport.py] [_log()] starting thread (client mode): 0x7378c5e0
2025-11-25T18:19:12.019 [DEBUG] [Thread-3473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:19:12.039 [DEBUG] [Thread-3473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:19:12.039 [INFO] [Thread-3473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:19:12.042 [DEBUG] [Thread-3473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] client lang: <none>
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] server lang: <none>
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] kex follows: False
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] Compression: none
2025-11-25T18:19:12.043 [DEBUG] [Thread-3473] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:19:12.059 [DEBUG] [Thread-3473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:19:12.060 [DEBUG] [Thread-3473] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:19:12.060 [DEBUG] [Thread-3473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:19:12.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:19:12.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:19:12.104 [DEBUG] [Thread-3473] [transport.py] [_log()] userauth is OK
2025-11-25T18:19:12.104 [DEBUG] [Thread-3473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:19:12.105 [DEBUG] [Thread-3473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:19:12.105 [DEBUG] [Thread-3473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:19:12.105 [DEBUG] [Thread-3473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:19:12.137 [INFO] [Thread-3473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:19:12.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:19:12.778 [DEBUG] [Thread-3473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:19:12.778 [DEBUG] [Thread-3473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:19:12.779 [DEBUG] [Thread-3473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:19:12.819 [DEBUG] [Thread-3473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:19:12.819 [DEBUG] [Thread-3473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:19:12.823 [DEBUG] [Thread-3473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:19:12.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:19:12.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:19:12.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:19:12.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:19:12.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:19:12.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:19:12.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:19:12.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:19:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:19:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.679614 -999.00  +27.10   7.24     11   -5.40 1 1 1 1 1   887    0 32.11 -9.94 ----- 4.5 7.2 9.2 10.7 30.8 -32.3 31.5 -32.3 32.6 -30.4 32.5 -32.0
2025-11-25T18:19:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:19:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:19:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.679614
2025-11-25T18:19:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:19:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:19:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:19:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:19:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:19:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:18:52', tmtdew=39.55, humidity=6.68, cloud=0.0, wind=9.83, temperature=26.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:18:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:19:12.852 [DEBUG] [Thread-3473] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:19:12.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:19:12.952 [DEBUG] [Thread-3476] [transport.py] [_log()] starting thread (client mode): 0x7378f520
2025-11-25T18:19:12.952 [DEBUG] [Thread-3476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:19:12.972 [DEBUG] [Thread-3476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:19:12.972 [INFO] [Thread-3476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:19:12.983 [DEBUG] [Thread-3476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:19:12.983 [DEBUG] [Thread-3476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:19:12.983 [DEBUG] [Thread-3476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:19:12.983 [DEBUG] [Thread-3476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] client lang: <none>
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] server lang: <none>
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] kex follows: False
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:19:12.984 [DEBUG] [Thread-3476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:19:12.985 [DEBUG] [Thread-3476] [transport.py] [_log()] Compression: none
2025-11-25T18:19:12.985 [DEBUG] [Thread-3476] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:19:13.040 [DEBUG] [Thread-3476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:19:13.041 [DEBUG] [Thread-3476] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:19:13.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:19:13.042 [DEBUG] [Thread-3476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:19:13.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:19:13.097 [DEBUG] [Thread-3476] [transport.py] [_log()] userauth is OK
2025-11-25T18:19:13.097 [DEBUG] [Thread-3476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:19:13.097 [DEBUG] [Thread-3476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:19:13.098 [DEBUG] [Thread-3476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:19:13.098 [DEBUG] [Thread-3476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:19:13.122 [INFO] [Thread-3476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:19:13.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:19:13.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:19:13.977 [DEBUG] [Thread-3476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:19:13.977 [DEBUG] [Thread-3476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:19:14.025 [DEBUG] [Thread-3476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:19:14.025 [DEBUG] [Thread-3476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:19:14.034 [DEBUG] [Thread-3476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:19:14.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:19:14.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:19:14.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:19:14.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:19:14.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:19:14.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:19:14.066 [DEBUG] [Thread-3476] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:19:21.515 [DEBUG] [Thread-3478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:19:22.736 [DEBUG] [Thread-3479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:19:37.792 [DEBUG] [Thread-3480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:19:44.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:19:44.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:19:44.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:19:44.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 19, 24), 39.53, 6.69, 0.0, 8.12, 26.92, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:19:44.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:19:24
2025-11-25T18:19:44.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:19:45.028 [DEBUG] [Thread-3481] [transport.py] [_log()] starting thread (client mode): 0x7374e950
2025-11-25T18:19:45.028 [DEBUG] [Thread-3481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:19:45.050 [DEBUG] [Thread-3481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:19:45.050 [INFO] [Thread-3481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:19:45.053 [DEBUG] [Thread-3481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:19:45.053 [DEBUG] [Thread-3481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:19:45.053 [DEBUG] [Thread-3481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:19:45.053 [DEBUG] [Thread-3481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:19:45.053 [DEBUG] [Thread-3481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:19:45.053 [DEBUG] [Thread-3481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:19:45.053 [DEBUG] [Thread-3481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:19:45.053 [DEBUG] [Thread-3481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] client lang: <none>
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] server lang: <none>
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] kex follows: False
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] Compression: none
2025-11-25T18:19:45.054 [DEBUG] [Thread-3481] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:19:45.073 [DEBUG] [Thread-3481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:19:45.074 [DEBUG] [Thread-3481] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:19:45.075 [DEBUG] [Thread-3481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:19:45.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:19:45.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:19:45.077 [DEBUG] [Thread-3481] [transport.py] [_log()] userauth is OK
2025-11-25T18:19:45.077 [DEBUG] [Thread-3481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:19:45.077 [DEBUG] [Thread-3481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:19:45.077 [DEBUG] [Thread-3481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:19:45.077 [DEBUG] [Thread-3481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:19:45.091 [INFO] [Thread-3481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:19:45.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:19:45.727 [DEBUG] [Thread-3481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:19:45.728 [DEBUG] [Thread-3481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:19:45.728 [DEBUG] [Thread-3481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:19:45.769 [DEBUG] [Thread-3481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:19:45.769 [DEBUG] [Thread-3481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:19:45.772 [DEBUG] [Thread-3481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:19:45.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:19:45.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:19:45.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:19:45.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:19:45.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:19:45.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:19:45.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:19:45.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:19:45.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:19:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.679961 -999.00  +27.00   6.73     11   -5.30 1 1 1 1 1   887    0 31.96 -10.81 ----- 6.2 6.7 34.4 10.3 30.8 -32.7 31.4 -32.7 32.5 -31.0 32.4 -32.4
2025-11-25T18:19:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:19:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:19:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.679961
2025-11-25T18:19:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:19:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:19:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:19:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:19:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:19:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:19:24', tmtdew=39.53, humidity=6.69, cloud=0.0, wind=8.12, temperature=26.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:19:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:19:45.796 [DEBUG] [Thread-3481] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:19:45.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:19:45.895 [DEBUG] [Thread-3484] [transport.py] [_log()] starting thread (client mode): 0x7374dab0
2025-11-25T18:19:45.895 [DEBUG] [Thread-3484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:19:45.909 [DEBUG] [Thread-3484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:19:45.909 [INFO] [Thread-3484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:19:45.917 [DEBUG] [Thread-3484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:19:45.917 [DEBUG] [Thread-3484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:19:45.917 [DEBUG] [Thread-3484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:19:45.917 [DEBUG] [Thread-3484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:19:45.917 [DEBUG] [Thread-3484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:19:45.918 [DEBUG] [Thread-3484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:19:45.918 [DEBUG] [Thread-3484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:19:45.918 [DEBUG] [Thread-3484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:19:45.918 [DEBUG] [Thread-3484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:19:45.918 [DEBUG] [Thread-3484] [transport.py] [_log()] client lang: <none>
2025-11-25T18:19:45.918 [DEBUG] [Thread-3484] [transport.py] [_log()] server lang: <none>
2025-11-25T18:19:45.918 [DEBUG] [Thread-3484] [transport.py] [_log()] kex follows: False
2025-11-25T18:19:45.918 [DEBUG] [Thread-3484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:19:45.918 [DEBUG] [Thread-3484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:19:45.919 [DEBUG] [Thread-3484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:19:45.919 [DEBUG] [Thread-3484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:19:45.919 [DEBUG] [Thread-3484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:19:45.919 [DEBUG] [Thread-3484] [transport.py] [_log()] Compression: none
2025-11-25T18:19:45.919 [DEBUG] [Thread-3484] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:19:45.977 [DEBUG] [Thread-3484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:19:45.978 [DEBUG] [Thread-3484] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:19:45.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:19:45.979 [DEBUG] [Thread-3484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:19:45.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:19:46.037 [DEBUG] [Thread-3484] [transport.py] [_log()] userauth is OK
2025-11-25T18:19:46.037 [DEBUG] [Thread-3484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:19:46.037 [DEBUG] [Thread-3484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:19:46.038 [DEBUG] [Thread-3484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:19:46.038 [DEBUG] [Thread-3484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:19:46.056 [INFO] [Thread-3484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:19:46.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:19:46.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:19:46.878 [DEBUG] [Thread-3484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:19:46.879 [DEBUG] [Thread-3484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:19:46.927 [DEBUG] [Thread-3484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:19:46.927 [DEBUG] [Thread-3484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:19:46.936 [DEBUG] [Thread-3484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:19:46.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:19:46.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:19:46.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:19:46.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:19:46.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:19:46.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:19:46.973 [DEBUG] [Thread-3484] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:19:52.830 [DEBUG] [Thread-3486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:20:07.882 [DEBUG] [Thread-3487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:20:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:20:16.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:20:16.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:20:17.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 19, 56), 39.62, 6.68, 0.0, 8.24, 27.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:20:17.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:19:56
2025-11-25T18:20:17.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:20:17.929 [DEBUG] [Thread-3488] [transport.py] [_log()] starting thread (client mode): 0x70d41660
2025-11-25T18:20:17.929 [DEBUG] [Thread-3488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:20:17.949 [DEBUG] [Thread-3488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:20:17.949 [INFO] [Thread-3488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:20:17.952 [DEBUG] [Thread-3488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:20:17.952 [DEBUG] [Thread-3488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:20:17.952 [DEBUG] [Thread-3488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:20:17.952 [DEBUG] [Thread-3488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:20:17.952 [DEBUG] [Thread-3488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:20:17.952 [DEBUG] [Thread-3488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] client lang: <none>
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] server lang: <none>
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] kex follows: False
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:20:17.953 [DEBUG] [Thread-3488] [transport.py] [_log()] Compression: none
2025-11-25T18:20:17.954 [DEBUG] [Thread-3488] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:20:17.973 [DEBUG] [Thread-3488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:20:17.974 [DEBUG] [Thread-3488] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:20:17.974 [DEBUG] [Thread-3488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:20:17.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:20:17.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:20:17.977 [DEBUG] [Thread-3488] [transport.py] [_log()] userauth is OK
2025-11-25T18:20:17.977 [DEBUG] [Thread-3488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:20:17.977 [DEBUG] [Thread-3488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:20:17.977 [DEBUG] [Thread-3488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:20:17.977 [DEBUG] [Thread-3488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:20:18.000 [INFO] [Thread-3488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:20:18.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:20:18.660 [DEBUG] [Thread-3488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:20:18.660 [DEBUG] [Thread-3488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:20:18.660 [DEBUG] [Thread-3488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:20:18.701 [DEBUG] [Thread-3488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:20:18.701 [DEBUG] [Thread-3488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:20:18.705 [DEBUG] [Thread-3488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:20:18.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:20:18.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:20:18.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:20:18.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:20:18.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:20:18.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:20:18.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:20:18.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:20:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:20:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.680308 -999.00  +26.80   7.81     11   -5.40 1 1 1 1 1   887    0 32.03 -11.82 ----- 7.7 7.8 17.0 9.4 30.8 -32.5 31.4 -32.3 32.4 -30.5 32.2 -32.0
2025-11-25T18:20:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:20:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:20:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.680308
2025-11-25T18:20:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:20:18.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:20:18.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:20:18.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:20:18.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:20:18.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:19:56', tmtdew=39.62, humidity=6.68, cloud=0.0, wind=8.24, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:19:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:20:18.728 [DEBUG] [Thread-3488] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:20:18.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:20:18.826 [DEBUG] [Thread-3491] [transport.py] [_log()] starting thread (client mode): 0x70d40eb0
2025-11-25T18:20:18.826 [DEBUG] [Thread-3491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:20:18.841 [DEBUG] [Thread-3491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:20:18.841 [INFO] [Thread-3491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:20:18.848 [DEBUG] [Thread-3491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] client lang: <none>
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] server lang: <none>
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] kex follows: False
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:20:18.849 [DEBUG] [Thread-3491] [transport.py] [_log()] Compression: none
2025-11-25T18:20:18.850 [DEBUG] [Thread-3491] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:20:18.909 [DEBUG] [Thread-3491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:20:18.910 [DEBUG] [Thread-3491] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:20:18.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:20:18.911 [DEBUG] [Thread-3491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:20:18.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:20:18.972 [DEBUG] [Thread-3491] [transport.py] [_log()] userauth is OK
2025-11-25T18:20:18.972 [DEBUG] [Thread-3491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:20:18.972 [DEBUG] [Thread-3491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:20:18.973 [DEBUG] [Thread-3491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:20:18.973 [DEBUG] [Thread-3491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:20:18.999 [INFO] [Thread-3491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:20:18.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:20:18.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:20:19.935 [DEBUG] [Thread-3491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:20:19.935 [DEBUG] [Thread-3491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:20:19.984 [DEBUG] [Thread-3491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:20:19.984 [DEBUG] [Thread-3491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:20:19.993 [DEBUG] [Thread-3491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:20:20.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:20:20.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:20:20.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:20:20.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:20:20.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:20:20.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:20:20.031 [DEBUG] [Thread-3491] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:20:22.018 [DEBUG] [Thread-3493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:20:22.923 [DEBUG] [Thread-3494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:20:37.975 [DEBUG] [Thread-3495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:20:50.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:20:50.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:20:50.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:20:50.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 20, 28), 39.77, 6.61, 0.0, 8.98, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:20:50.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:20:28
2025-11-25T18:20:50.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:20:50.987 [DEBUG] [Thread-3496] [transport.py] [_log()] starting thread (client mode): 0x7376d390
2025-11-25T18:20:50.987 [DEBUG] [Thread-3496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:20:51.007 [DEBUG] [Thread-3496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:20:51.007 [INFO] [Thread-3496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] client lang: <none>
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] server lang: <none>
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] kex follows: False
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:20:51.010 [DEBUG] [Thread-3496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:20:51.011 [DEBUG] [Thread-3496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:20:51.011 [DEBUG] [Thread-3496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:20:51.011 [DEBUG] [Thread-3496] [transport.py] [_log()] Compression: none
2025-11-25T18:20:51.011 [DEBUG] [Thread-3496] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:20:51.028 [DEBUG] [Thread-3496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:20:51.029 [DEBUG] [Thread-3496] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:20:51.030 [DEBUG] [Thread-3496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:20:51.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:20:51.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:20:51.032 [DEBUG] [Thread-3496] [transport.py] [_log()] userauth is OK
2025-11-25T18:20:51.032 [DEBUG] [Thread-3496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:20:51.032 [DEBUG] [Thread-3496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:20:51.032 [DEBUG] [Thread-3496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:20:51.032 [DEBUG] [Thread-3496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:20:51.057 [INFO] [Thread-3496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:20:51.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:20:51.692 [DEBUG] [Thread-3496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:20:51.693 [DEBUG] [Thread-3496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:20:51.693 [DEBUG] [Thread-3496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:20:51.734 [DEBUG] [Thread-3496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:20:51.734 [DEBUG] [Thread-3496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:20:51.737 [DEBUG] [Thread-3496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:20:51.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:20:51.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:20:51.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:20:51.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:20:51.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:20:51.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:20:51.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:20:51.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:20:51.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:20:51.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.680655 -999.00  +26.80   5.27     11   -5.30 1 1 1 1 1   887    0 32.22 -12.76 ----- 6.4 5.3 20.0 8.9 30.7 -32.4 31.3 -32.6 32.4 -30.6 32.2 -32.4
2025-11-25T18:20:51.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:20:51.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:20:51.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.680655
2025-11-25T18:20:51.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:20:51.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:20:51.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:20:51.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:20:51.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:20:51.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:20:28', tmtdew=39.77, humidity=6.61, cloud=0.0, wind=8.98, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:20:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:20:51.764 [DEBUG] [Thread-3496] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:20:51.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:20:51.860 [DEBUG] [Thread-3499] [transport.py] [_log()] starting thread (client mode): 0x737834f0
2025-11-25T18:20:51.861 [DEBUG] [Thread-3499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:20:51.875 [DEBUG] [Thread-3499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:20:51.875 [INFO] [Thread-3499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] client lang: <none>
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] server lang: <none>
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] kex follows: False
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:20:51.883 [DEBUG] [Thread-3499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:20:51.884 [DEBUG] [Thread-3499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:20:51.884 [DEBUG] [Thread-3499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:20:51.884 [DEBUG] [Thread-3499] [transport.py] [_log()] Compression: none
2025-11-25T18:20:51.884 [DEBUG] [Thread-3499] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:20:51.942 [DEBUG] [Thread-3499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:20:51.943 [DEBUG] [Thread-3499] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:20:51.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:20:51.944 [DEBUG] [Thread-3499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:20:51.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:20:52.001 [DEBUG] [Thread-3499] [transport.py] [_log()] userauth is OK
2025-11-25T18:20:52.002 [DEBUG] [Thread-3499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:20:52.002 [DEBUG] [Thread-3499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:20:52.002 [DEBUG] [Thread-3499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:20:52.002 [DEBUG] [Thread-3499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:20:52.021 [INFO] [Thread-3499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:20:52.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:20:52.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:20:52.844 [DEBUG] [Thread-3499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:20:52.844 [DEBUG] [Thread-3499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:20:52.892 [DEBUG] [Thread-3499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:20:52.892 [DEBUG] [Thread-3499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:20:52.901 [DEBUG] [Thread-3499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:20:52.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:20:52.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:20:52.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:20:52.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:20:52.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:20:52.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:20:52.940 [DEBUG] [Thread-3499] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:20:53.009 [DEBUG] [Thread-3501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:21:08.067 [DEBUG] [Thread-3502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:21:22.778 [DEBUG] [Thread-3503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:21:22.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:21:22.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:21:22.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:21:23.099 [DEBUG] [Thread-3504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:21:23.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 21), 39.96, 6.56, 0.0, 9.81, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:21:23.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:21:00
2025-11-25T18:21:23.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:21:23.886 [DEBUG] [Thread-3505] [transport.py] [_log()] starting thread (client mode): 0x70d0cf10
2025-11-25T18:21:23.886 [DEBUG] [Thread-3505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:21:23.906 [DEBUG] [Thread-3505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:21:23.906 [INFO] [Thread-3505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] client lang: <none>
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] server lang: <none>
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] kex follows: False
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] Compression: none
2025-11-25T18:21:23.910 [DEBUG] [Thread-3505] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:21:23.928 [DEBUG] [Thread-3505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:21:23.929 [DEBUG] [Thread-3505] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:21:23.930 [DEBUG] [Thread-3505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:21:23.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:21:23.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:21:23.931 [DEBUG] [Thread-3505] [transport.py] [_log()] userauth is OK
2025-11-25T18:21:23.932 [DEBUG] [Thread-3505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:21:23.932 [DEBUG] [Thread-3505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:21:23.932 [DEBUG] [Thread-3505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:21:23.932 [DEBUG] [Thread-3505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:21:23.956 [INFO] [Thread-3505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:21:23.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:21:24.603 [DEBUG] [Thread-3505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:21:24.604 [DEBUG] [Thread-3505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:21:24.604 [DEBUG] [Thread-3505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:21:24.645 [DEBUG] [Thread-3505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:21:24.645 [DEBUG] [Thread-3505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:21:24.649 [DEBUG] [Thread-3505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:21:24.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:21:24.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:21:24.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:21:24.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:21:24.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:21:24.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:21:24.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:21:24.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:21:24.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:21:24.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.681003 -999.00  +26.90   7.18     11   -5.20 1 1 1 1 1   887    0 31.98 -13.41 ----- 7.9 7.2 348.6 9.6 30.7 -32.1 31.3 -32.5 32.3 -30.2 32.2 -31.8
2025-11-25T18:21:24.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:21:24.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:21:24.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.681003
2025-11-25T18:21:24.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:21:24.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:21:24.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:21:24.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:21:24.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:21:24.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:21:00', tmtdew=39.96, humidity=6.56, cloud=0.0, wind=9.81, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:20:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:21:24.676 [DEBUG] [Thread-3505] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:21:24.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:21:24.772 [DEBUG] [Thread-3508] [transport.py] [_log()] starting thread (client mode): 0x737ea590
2025-11-25T18:21:24.772 [DEBUG] [Thread-3508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:21:24.787 [DEBUG] [Thread-3508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:21:24.787 [INFO] [Thread-3508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] client lang: <none>
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] server lang: <none>
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] kex follows: False
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:21:24.795 [DEBUG] [Thread-3508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:21:24.796 [DEBUG] [Thread-3508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:21:24.796 [DEBUG] [Thread-3508] [transport.py] [_log()] Compression: none
2025-11-25T18:21:24.796 [DEBUG] [Thread-3508] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:21:24.854 [DEBUG] [Thread-3508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:21:24.855 [DEBUG] [Thread-3508] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:21:24.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:21:24.856 [DEBUG] [Thread-3508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:21:24.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:21:24.909 [DEBUG] [Thread-3508] [transport.py] [_log()] userauth is OK
2025-11-25T18:21:24.910 [DEBUG] [Thread-3508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:21:24.910 [DEBUG] [Thread-3508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:21:24.910 [DEBUG] [Thread-3508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:21:24.910 [DEBUG] [Thread-3508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:21:24.929 [INFO] [Thread-3508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:21:24.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:21:24.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:21:25.764 [DEBUG] [Thread-3508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:21:25.764 [DEBUG] [Thread-3508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:21:25.812 [DEBUG] [Thread-3508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:21:25.812 [DEBUG] [Thread-3508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:21:25.821 [DEBUG] [Thread-3508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:21:25.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:21:25.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:21:25.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:21:25.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:21:25.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:21:25.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:21:25.858 [DEBUG] [Thread-3508] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:21:38.138 [DEBUG] [Thread-3510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:21:53.187 [DEBUG] [Thread-3511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:21:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:21:55.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:21:55.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:21:56.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 21, 32), 39.86, 6.61, 0.0, 11.17, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:21:56.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:21:32
2025-11-25T18:21:56.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:21:56.805 [DEBUG] [Thread-3512] [transport.py] [_log()] starting thread (client mode): 0x7376c100
2025-11-25T18:21:56.806 [DEBUG] [Thread-3512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:21:56.827 [DEBUG] [Thread-3512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:21:56.827 [INFO] [Thread-3512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] client lang: <none>
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] server lang: <none>
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] kex follows: False
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:21:56.829 [DEBUG] [Thread-3512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:21:56.830 [DEBUG] [Thread-3512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:21:56.830 [DEBUG] [Thread-3512] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:21:56.830 [DEBUG] [Thread-3512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:21:56.830 [DEBUG] [Thread-3512] [transport.py] [_log()] Compression: none
2025-11-25T18:21:56.830 [DEBUG] [Thread-3512] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:21:56.838 [DEBUG] [Thread-3512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:21:56.839 [DEBUG] [Thread-3512] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:21:56.839 [DEBUG] [Thread-3512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:21:56.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:21:56.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:21:56.841 [DEBUG] [Thread-3512] [transport.py] [_log()] userauth is OK
2025-11-25T18:21:56.841 [DEBUG] [Thread-3512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:21:56.841 [DEBUG] [Thread-3512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:21:56.841 [DEBUG] [Thread-3512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:21:56.841 [DEBUG] [Thread-3512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:21:56.877 [INFO] [Thread-3512] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:21:56.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:21:57.516 [DEBUG] [Thread-3512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:21:57.516 [DEBUG] [Thread-3512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:21:57.516 [DEBUG] [Thread-3512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:21:57.557 [DEBUG] [Thread-3512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:21:57.557 [DEBUG] [Thread-3512] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:21:57.561 [DEBUG] [Thread-3512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:21:57.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:21:57.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:21:57.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:21:57.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:21:57.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:21:57.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:21:57.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:21:57.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:21:57.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:21:57.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.681697 -999.00  +27.20   7.01     11   -5.20 1 1 1 1 1   887    0 32.04 -14.21 ----- 11.2 7.0 6.1 9.6 30.7 -32.1 31.3 -31.7 32.3 -30.1 32.1 -31.6
2025-11-25T18:21:57.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:21:57.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:21:57.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.681697
2025-11-25T18:21:57.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:21:57.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:21:57.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:21:57.586 [DEBUG] [Thread-3512] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:21:57.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:21:57.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:21:57.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:21:32', tmtdew=39.86, humidity=6.61, cloud=0.0, wind=11.17, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:21:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:21:57.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:21:57.685 [DEBUG] [Thread-3515] [transport.py] [_log()] starting thread (client mode): 0x7378c5e0
2025-11-25T18:21:57.685 [DEBUG] [Thread-3515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:21:57.700 [DEBUG] [Thread-3515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:21:57.700 [INFO] [Thread-3515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:21:57.707 [DEBUG] [Thread-3515] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] client lang: <none>
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] server lang: <none>
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] kex follows: False
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:21:57.708 [DEBUG] [Thread-3515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:21:57.709 [DEBUG] [Thread-3515] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:21:57.709 [DEBUG] [Thread-3515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:21:57.709 [DEBUG] [Thread-3515] [transport.py] [_log()] Compression: none
2025-11-25T18:21:57.709 [DEBUG] [Thread-3515] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:21:57.765 [DEBUG] [Thread-3515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:21:57.766 [DEBUG] [Thread-3515] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:21:57.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:21:57.767 [DEBUG] [Thread-3515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:21:57.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:21:57.822 [DEBUG] [Thread-3515] [transport.py] [_log()] userauth is OK
2025-11-25T18:21:57.822 [DEBUG] [Thread-3515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:21:57.823 [DEBUG] [Thread-3515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:21:57.823 [DEBUG] [Thread-3515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:21:57.823 [DEBUG] [Thread-3515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:21:57.843 [INFO] [Thread-3515] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:21:57.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:21:57.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:21:58.707 [DEBUG] [Thread-3515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:21:58.708 [DEBUG] [Thread-3515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:21:58.756 [DEBUG] [Thread-3515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:21:58.756 [DEBUG] [Thread-3515] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:21:58.765 [DEBUG] [Thread-3515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:21:58.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:21:58.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:21:58.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:21:58.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:21:58.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:21:58.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:21:58.803 [DEBUG] [Thread-3515] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:22:08.226 [DEBUG] [Thread-3517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:22:23.283 [DEBUG] [Thread-3518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:22:23.540 [DEBUG] [Thread-3519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:22:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:22:28.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:22:28.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:22:29.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 22, 4), 39.95, 6.56, 0.0, 8.59, 27.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:22:29.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:22:04
2025-11-25T18:22:29.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:22:29.752 [DEBUG] [Thread-3520] [transport.py] [_log()] starting thread (client mode): 0x737c6710
2025-11-25T18:22:29.752 [DEBUG] [Thread-3520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:22:29.774 [DEBUG] [Thread-3520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:22:29.774 [INFO] [Thread-3520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:22:29.778 [DEBUG] [Thread-3520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:22:29.778 [DEBUG] [Thread-3520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:22:29.778 [DEBUG] [Thread-3520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:22:29.778 [DEBUG] [Thread-3520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] client lang: <none>
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] server lang: <none>
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] kex follows: False
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] Compression: none
2025-11-25T18:22:29.779 [DEBUG] [Thread-3520] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:22:29.797 [DEBUG] [Thread-3520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:22:29.797 [DEBUG] [Thread-3520] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:22:29.798 [DEBUG] [Thread-3520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:22:29.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:22:29.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:22:29.800 [DEBUG] [Thread-3520] [transport.py] [_log()] userauth is OK
2025-11-25T18:22:29.800 [DEBUG] [Thread-3520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:22:29.800 [DEBUG] [Thread-3520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:22:29.800 [DEBUG] [Thread-3520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:22:29.800 [DEBUG] [Thread-3520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:22:29.833 [INFO] [Thread-3520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:22:29.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:22:30.473 [DEBUG] [Thread-3520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:22:30.473 [DEBUG] [Thread-3520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:22:30.474 [DEBUG] [Thread-3520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:22:30.514 [DEBUG] [Thread-3520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:22:30.514 [DEBUG] [Thread-3520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:22:30.517 [DEBUG] [Thread-3520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:22:30.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:22:30.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:22:30.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:22:30.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:22:30.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:22:30.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:22:30.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:22:30.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:22:30.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:22:30.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.682044 -999.00  +27.30   6.10     11   -5.30 1 1 1 1 1   887    0 32.16 -14.27 ----- 6.7 6.1 4.0 11.7 30.7 -32.1 31.2 -32.5 32.2 -30.5 32.0 -32.0
2025-11-25T18:22:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:22:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:22:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.682044
2025-11-25T18:22:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:22:30.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:22:30.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:22:30.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:22:30.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:22:30.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:22:04', tmtdew=39.95, humidity=6.56, cloud=0.0, wind=8.59, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:22:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:22:30.544 [DEBUG] [Thread-3520] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:22:30.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:22:30.640 [DEBUG] [Thread-3523] [transport.py] [_log()] starting thread (client mode): 0x7374ff70
2025-11-25T18:22:30.640 [DEBUG] [Thread-3523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:22:30.657 [DEBUG] [Thread-3523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:22:30.658 [INFO] [Thread-3523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:22:30.668 [DEBUG] [Thread-3523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] client lang: <none>
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] server lang: <none>
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] kex follows: False
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:22:30.669 [DEBUG] [Thread-3523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:22:30.670 [DEBUG] [Thread-3523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:22:30.670 [DEBUG] [Thread-3523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:22:30.670 [DEBUG] [Thread-3523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:22:30.670 [DEBUG] [Thread-3523] [transport.py] [_log()] Compression: none
2025-11-25T18:22:30.670 [DEBUG] [Thread-3523] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:22:30.722 [DEBUG] [Thread-3523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:22:30.723 [DEBUG] [Thread-3523] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:22:30.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:22:30.724 [DEBUG] [Thread-3523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:22:30.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:22:30.778 [DEBUG] [Thread-3523] [transport.py] [_log()] userauth is OK
2025-11-25T18:22:30.779 [DEBUG] [Thread-3523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:22:30.779 [DEBUG] [Thread-3523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:22:30.779 [DEBUG] [Thread-3523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:22:30.779 [DEBUG] [Thread-3523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:22:30.804 [INFO] [Thread-3523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:22:30.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:22:30.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:22:31.619 [DEBUG] [Thread-3523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:22:31.619 [DEBUG] [Thread-3523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:22:31.667 [DEBUG] [Thread-3523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:22:31.667 [DEBUG] [Thread-3523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:22:31.676 [DEBUG] [Thread-3523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:22:31.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:22:31.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:22:31.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:22:31.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:22:31.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:22:31.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:22:31.713 [DEBUG] [Thread-3523] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:22:38.313 [DEBUG] [Thread-3525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:22:53.351 [DEBUG] [Thread-3526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:23:01.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:23:01.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:23:01.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:23:02.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 22, 36), 40.32, 6.11, 0.0, 6.42, 27.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:23:02.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:22:36
2025-11-25T18:23:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:23:02.675 [DEBUG] [Thread-3527] [transport.py] [_log()] starting thread (client mode): 0x70d01b10
2025-11-25T18:23:02.675 [DEBUG] [Thread-3527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:23:02.690 [DEBUG] [Thread-3527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:23:02.690 [INFO] [Thread-3527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:23:02.693 [DEBUG] [Thread-3527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:23:02.693 [DEBUG] [Thread-3527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:23:02.693 [DEBUG] [Thread-3527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:23:02.693 [DEBUG] [Thread-3527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:23:02.693 [DEBUG] [Thread-3527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] client lang: <none>
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] server lang: <none>
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] kex follows: False
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] Compression: none
2025-11-25T18:23:02.694 [DEBUG] [Thread-3527] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:23:02.712 [DEBUG] [Thread-3527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:23:02.713 [DEBUG] [Thread-3527] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:23:02.714 [DEBUG] [Thread-3527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:23:02.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:23:02.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:23:02.756 [DEBUG] [Thread-3527] [transport.py] [_log()] userauth is OK
2025-11-25T18:23:02.757 [DEBUG] [Thread-3527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:23:02.757 [DEBUG] [Thread-3527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:23:02.757 [DEBUG] [Thread-3527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:23:02.757 [DEBUG] [Thread-3527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:23:02.779 [INFO] [Thread-3527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:23:02.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:23:03.429 [DEBUG] [Thread-3527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:23:03.430 [DEBUG] [Thread-3527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:23:03.430 [DEBUG] [Thread-3527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:23:03.471 [DEBUG] [Thread-3527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:23:03.471 [DEBUG] [Thread-3527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:23:03.475 [DEBUG] [Thread-3527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:23:03.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:23:03.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:23:03.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:23:03.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:23:03.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:23:03.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:23:03.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:23:03.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:23:03.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:23:03.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.682392 -999.00  +27.30   6.47     11   -5.40 1 1 1 1 1   887    0 31.84 -13.32 ----- 6.7 6.5 4.8 9.1 30.7 -32.5 31.3 -32.2 32.2 -30.5 32.0 -33.1
2025-11-25T18:23:03.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:23:03.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:23:03.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.682392
2025-11-25T18:23:03.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:23:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:23:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:23:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:23:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:23:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:22:36', tmtdew=40.32, humidity=6.11, cloud=0.0, wind=6.42, temperature=27.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:22:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:23:03.502 [DEBUG] [Thread-3527] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:23:03.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:23:03.607 [DEBUG] [Thread-3530] [transport.py] [_log()] starting thread (client mode): 0x70d40910
2025-11-25T18:23:03.607 [DEBUG] [Thread-3530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:23:03.622 [DEBUG] [Thread-3530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:23:03.622 [INFO] [Thread-3530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] client lang: <none>
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] server lang: <none>
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] kex follows: False
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:23:03.630 [DEBUG] [Thread-3530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:23:03.631 [DEBUG] [Thread-3530] [transport.py] [_log()] Compression: none
2025-11-25T18:23:03.631 [DEBUG] [Thread-3530] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:23:03.687 [DEBUG] [Thread-3530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:23:03.687 [DEBUG] [Thread-3530] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:23:03.688 [DEBUG] [Thread-3530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:23:03.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:23:03.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:23:03.743 [DEBUG] [Thread-3530] [transport.py] [_log()] userauth is OK
2025-11-25T18:23:03.743 [DEBUG] [Thread-3530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:23:03.743 [DEBUG] [Thread-3530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:23:03.743 [DEBUG] [Thread-3530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:23:03.743 [DEBUG] [Thread-3530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:23:03.762 [INFO] [Thread-3530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:23:03.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:23:03.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:23:04.604 [DEBUG] [Thread-3530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:23:04.605 [DEBUG] [Thread-3530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:23:04.652 [DEBUG] [Thread-3530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:23:04.652 [DEBUG] [Thread-3530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:23:04.661 [DEBUG] [Thread-3530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:23:04.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:23:04.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:23:04.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:23:04.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:23:04.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:23:04.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:23:04.698 [DEBUG] [Thread-3530] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:23:08.385 [DEBUG] [Thread-3532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:23:23.449 [DEBUG] [Thread-3533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:23:24.276 [DEBUG] [Thread-3534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:23:34.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:23:34.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:23:34.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:23:35.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 23, 8), 40.53, 6.01, 0.0, 9.28, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:23:35.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:23:08
2025-11-25T18:23:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:23:35.695 [DEBUG] [Thread-3535] [transport.py] [_log()] starting thread (client mode): 0x70d0df90
2025-11-25T18:23:35.695 [DEBUG] [Thread-3535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:23:35.716 [DEBUG] [Thread-3535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:23:35.716 [INFO] [Thread-3535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] client lang: <none>
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] server lang: <none>
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] kex follows: False
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] Compression: none
2025-11-25T18:23:35.718 [DEBUG] [Thread-3535] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:23:35.735 [DEBUG] [Thread-3535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:23:35.735 [DEBUG] [Thread-3535] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:23:35.735 [DEBUG] [Thread-3535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:23:35.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:23:35.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:23:35.736 [DEBUG] [Thread-3535] [transport.py] [_log()] userauth is OK
2025-11-25T18:23:35.737 [DEBUG] [Thread-3535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:23:35.737 [DEBUG] [Thread-3535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:23:35.737 [DEBUG] [Thread-3535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:23:35.737 [DEBUG] [Thread-3535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:23:35.753 [INFO] [Thread-3535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:23:35.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:23:36.410 [DEBUG] [Thread-3535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:23:36.410 [DEBUG] [Thread-3535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:23:36.410 [DEBUG] [Thread-3535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:23:36.451 [DEBUG] [Thread-3535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:23:36.451 [DEBUG] [Thread-3535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:23:36.453 [DEBUG] [Thread-3535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:23:36.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:23:36.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:23:36.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:23:36.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:23:36.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:23:36.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:23:36.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:23:36.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:23:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:23:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.682739 -999.00  +27.30   6.09     11   -5.40 1 1 1 1 1   887    0 32.31 -12.32 ----- 11.0 6.1 354.4 10.3 30.6 -32.6 31.2 -33.0 32.2 -30.9 31.9 -35.7
2025-11-25T18:23:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:23:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:23:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.682739
2025-11-25T18:23:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:23:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:23:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:23:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:23:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:23:36.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:23:08', tmtdew=40.53, humidity=6.01, cloud=0.0, wind=9.28, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:23:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:23:36.473 [DEBUG] [Thread-3535] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:23:36.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:23:36.557 [DEBUG] [Thread-3538] [transport.py] [_log()] starting thread (client mode): 0x737c4fd0
2025-11-25T18:23:36.557 [DEBUG] [Thread-3538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:23:36.573 [DEBUG] [Thread-3538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:23:36.573 [INFO] [Thread-3538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:23:36.580 [DEBUG] [Thread-3538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] client lang: <none>
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] server lang: <none>
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] kex follows: False
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] Compression: none
2025-11-25T18:23:36.581 [DEBUG] [Thread-3538] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:23:36.637 [DEBUG] [Thread-3538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:23:36.637 [DEBUG] [Thread-3538] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:23:36.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:23:36.637 [DEBUG] [Thread-3538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:23:36.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:23:36.694 [DEBUG] [Thread-3538] [transport.py] [_log()] userauth is OK
2025-11-25T18:23:36.694 [DEBUG] [Thread-3538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:23:36.694 [DEBUG] [Thread-3538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:23:36.694 [DEBUG] [Thread-3538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:23:36.694 [DEBUG] [Thread-3538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:23:36.708 [INFO] [Thread-3538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:23:36.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:23:36.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:23:37.528 [DEBUG] [Thread-3538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:23:37.528 [DEBUG] [Thread-3538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:23:37.576 [DEBUG] [Thread-3538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:23:37.576 [DEBUG] [Thread-3538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:23:37.584 [DEBUG] [Thread-3538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:23:37.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:23:37.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:23:37.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:23:37.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:23:37.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:23:37.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:23:37.617 [DEBUG] [Thread-3538] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:23:38.481 [DEBUG] [Thread-3540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:23:53.521 [DEBUG] [Thread-3541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:24:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:24:07.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:24:07.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:24:08.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 23, 40), 40.33, 6.06, 0.0, 12.71, 27.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:24:08.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:23:40
2025-11-25T18:24:08.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:24:08.559 [DEBUG] [Thread-3542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:24:08.574 [DEBUG] [Thread-3543] [transport.py] [_log()] starting thread (client mode): 0x737c43d0
2025-11-25T18:24:08.574 [DEBUG] [Thread-3543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:24:08.593 [DEBUG] [Thread-3543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:24:08.593 [INFO] [Thread-3543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:24:08.596 [DEBUG] [Thread-3543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] client lang: <none>
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] server lang: <none>
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] kex follows: False
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:24:08.597 [DEBUG] [Thread-3543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:24:08.598 [DEBUG] [Thread-3543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:24:08.598 [DEBUG] [Thread-3543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:24:08.598 [DEBUG] [Thread-3543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:24:08.598 [DEBUG] [Thread-3543] [transport.py] [_log()] Compression: none
2025-11-25T18:24:08.598 [DEBUG] [Thread-3543] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:24:08.617 [DEBUG] [Thread-3543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:24:08.618 [DEBUG] [Thread-3543] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:24:08.618 [DEBUG] [Thread-3543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:24:08.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:24:08.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:24:08.620 [DEBUG] [Thread-3543] [transport.py] [_log()] userauth is OK
2025-11-25T18:24:08.620 [DEBUG] [Thread-3543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:24:08.621 [DEBUG] [Thread-3543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:24:08.621 [DEBUG] [Thread-3543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:24:08.621 [DEBUG] [Thread-3543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:24:08.644 [INFO] [Thread-3543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:24:08.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:24:09.286 [DEBUG] [Thread-3543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:24:09.287 [DEBUG] [Thread-3543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:24:09.287 [DEBUG] [Thread-3543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:24:09.327 [DEBUG] [Thread-3543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:24:09.328 [DEBUG] [Thread-3543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:24:09.330 [DEBUG] [Thread-3543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:24:09.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:24:09.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:24:09.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:24:09.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:24:09.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:24:09.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:24:09.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:24:09.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:24:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:24:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.683086 -999.00  +27.30   9.70     11   -5.20 1 1 1 1 1   887    0 32.00 -11.26 ----- 16.8 9.7 308.4 15.7 30.6 -32.5 31.2 -32.5 32.1 -30.8 31.9 -32.2
2025-11-25T18:24:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:24:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:24:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.683086
2025-11-25T18:24:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:24:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:24:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:24:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:24:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:24:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:23:40', tmtdew=40.33, humidity=6.06, cloud=0.0, wind=12.71, temperature=27.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:23:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:24:09.355 [DEBUG] [Thread-3543] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:24:09.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:24:09.450 [DEBUG] [Thread-3546] [transport.py] [_log()] starting thread (client mode): 0x73781630
2025-11-25T18:24:09.450 [DEBUG] [Thread-3546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:24:09.465 [DEBUG] [Thread-3546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:24:09.466 [INFO] [Thread-3546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:24:09.473 [DEBUG] [Thread-3546] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:24:09.474 [DEBUG] [Thread-3546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:24:09.474 [DEBUG] [Thread-3546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:24:09.474 [DEBUG] [Thread-3546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:24:09.474 [DEBUG] [Thread-3546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:24:09.474 [DEBUG] [Thread-3546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:24:09.474 [DEBUG] [Thread-3546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:24:09.474 [DEBUG] [Thread-3546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:24:09.474 [DEBUG] [Thread-3546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:24:09.474 [DEBUG] [Thread-3546] [transport.py] [_log()] client lang: <none>
2025-11-25T18:24:09.475 [DEBUG] [Thread-3546] [transport.py] [_log()] server lang: <none>
2025-11-25T18:24:09.475 [DEBUG] [Thread-3546] [transport.py] [_log()] kex follows: False
2025-11-25T18:24:09.475 [DEBUG] [Thread-3546] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:24:09.475 [DEBUG] [Thread-3546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:24:09.475 [DEBUG] [Thread-3546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:24:09.475 [DEBUG] [Thread-3546] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:24:09.475 [DEBUG] [Thread-3546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:24:09.476 [DEBUG] [Thread-3546] [transport.py] [_log()] Compression: none
2025-11-25T18:24:09.476 [DEBUG] [Thread-3546] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:24:09.536 [DEBUG] [Thread-3546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:24:09.536 [DEBUG] [Thread-3546] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:24:09.537 [DEBUG] [Thread-3546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:24:09.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:24:09.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:24:09.595 [DEBUG] [Thread-3546] [transport.py] [_log()] userauth is OK
2025-11-25T18:24:09.595 [DEBUG] [Thread-3546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:24:09.596 [DEBUG] [Thread-3546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:24:09.596 [DEBUG] [Thread-3546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:24:09.596 [DEBUG] [Thread-3546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:24:09.614 [INFO] [Thread-3546] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:24:09.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:24:09.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:24:10.445 [DEBUG] [Thread-3546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:24:10.445 [DEBUG] [Thread-3546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:24:10.498 [DEBUG] [Thread-3546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:24:10.498 [DEBUG] [Thread-3546] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:24:10.506 [DEBUG] [Thread-3546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:24:10.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:24:10.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:24:10.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:24:10.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:24:10.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:24:10.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:24:10.538 [DEBUG] [Thread-3546] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:24:23.591 [DEBUG] [Thread-3548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:24:25.014 [DEBUG] [Thread-3549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:24:38.657 [DEBUG] [Thread-3550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:24:40.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:24:40.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:24:40.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:24:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 24, 13), 40.24, 6.09, 0.0, 13.08, 27.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:24:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:24:13
2025-11-25T18:24:41.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:24:41.474 [DEBUG] [Thread-3551] [transport.py] [_log()] starting thread (client mode): 0x7374f8e0
2025-11-25T18:24:41.474 [DEBUG] [Thread-3551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:24:41.495 [DEBUG] [Thread-3551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:24:41.495 [INFO] [Thread-3551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:24:41.498 [DEBUG] [Thread-3551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:24:41.498 [DEBUG] [Thread-3551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:24:41.498 [DEBUG] [Thread-3551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] client lang: <none>
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] server lang: <none>
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] kex follows: False
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:24:41.499 [DEBUG] [Thread-3551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:24:41.500 [DEBUG] [Thread-3551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:24:41.500 [DEBUG] [Thread-3551] [transport.py] [_log()] Compression: none
2025-11-25T18:24:41.500 [DEBUG] [Thread-3551] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:24:41.519 [DEBUG] [Thread-3551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:24:41.519 [DEBUG] [Thread-3551] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:24:41.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:24:41.520 [DEBUG] [Thread-3551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:24:41.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:24:41.522 [DEBUG] [Thread-3551] [transport.py] [_log()] userauth is OK
2025-11-25T18:24:41.523 [DEBUG] [Thread-3551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:24:41.523 [DEBUG] [Thread-3551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:24:41.523 [DEBUG] [Thread-3551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:24:41.523 [DEBUG] [Thread-3551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:24:41.545 [INFO] [Thread-3551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:24:41.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:24:42.159 [DEBUG] [Thread-3551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:24:42.160 [DEBUG] [Thread-3551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:24:42.160 [DEBUG] [Thread-3551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:24:42.201 [DEBUG] [Thread-3551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:24:42.201 [DEBUG] [Thread-3551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:24:42.204 [DEBUG] [Thread-3551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:24:42.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:24:42.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:24:42.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:24:42.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:24:42.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:24:42.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:24:42.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:24:42.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:24:42.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:24:42.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.683433 -999.00  +27.20  15.56     11   -5.20 1 1 1 1 1   887    0 31.44 -11.59 ----- 14.9 15.6 311.2 20.0 30.5 -32.6 31.1 -32.6 32.0 -32.1 31.8 -32.3
2025-11-25T18:24:42.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:24:42.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:24:42.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.683433
2025-11-25T18:24:42.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:24:42.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:24:42.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:24:42.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:24:42.232 [DEBUG] [Thread-3551] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:24:42.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:24:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:24:13', tmtdew=40.24, humidity=6.09, cloud=0.0, wind=13.08, temperature=27.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:24:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:24:42.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:24:42.328 [DEBUG] [Thread-3554] [transport.py] [_log()] starting thread (client mode): 0x737c54b0
2025-11-25T18:24:42.328 [DEBUG] [Thread-3554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:24:42.342 [DEBUG] [Thread-3554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:24:42.343 [INFO] [Thread-3554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:24:42.350 [DEBUG] [Thread-3554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:24:42.350 [DEBUG] [Thread-3554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:24:42.350 [DEBUG] [Thread-3554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:24:42.350 [DEBUG] [Thread-3554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] client lang: <none>
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] server lang: <none>
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] kex follows: False
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] Compression: none
2025-11-25T18:24:42.351 [DEBUG] [Thread-3554] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:24:42.407 [DEBUG] [Thread-3554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:24:42.407 [DEBUG] [Thread-3554] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:24:42.408 [DEBUG] [Thread-3554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:24:42.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:24:42.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:24:42.463 [DEBUG] [Thread-3554] [transport.py] [_log()] userauth is OK
2025-11-25T18:24:42.464 [DEBUG] [Thread-3554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:24:42.464 [DEBUG] [Thread-3554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:24:42.464 [DEBUG] [Thread-3554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:24:42.464 [DEBUG] [Thread-3554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:24:42.483 [INFO] [Thread-3554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:24:42.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:24:42.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:24:43.278 [DEBUG] [Thread-3554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:24:43.279 [DEBUG] [Thread-3554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:24:43.327 [DEBUG] [Thread-3554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:24:43.327 [DEBUG] [Thread-3554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:24:43.336 [DEBUG] [Thread-3554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:24:43.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:24:43.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:24:43.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:24:43.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:24:43.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:24:43.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:24:43.372 [DEBUG] [Thread-3554] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:24:53.691 [DEBUG] [Thread-3556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:25:08.743 [DEBUG] [Thread-3557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:25:13.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:25:13.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:25:13.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:25:14.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 24, 45), 39.94, 6.18, 0.0, 18.74, 27.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:25:14.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:24:45
2025-11-25T18:25:14.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:25:14.320 [DEBUG] [Thread-3558] [transport.py] [_log()] starting thread (client mode): 0x737c6170
2025-11-25T18:25:14.320 [DEBUG] [Thread-3558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:25:14.340 [DEBUG] [Thread-3558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:25:14.341 [INFO] [Thread-3558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:25:14.343 [DEBUG] [Thread-3558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:25:14.343 [DEBUG] [Thread-3558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] client lang: <none>
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] server lang: <none>
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] kex follows: False
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] Compression: none
2025-11-25T18:25:14.344 [DEBUG] [Thread-3558] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:25:14.361 [DEBUG] [Thread-3558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:25:14.362 [DEBUG] [Thread-3558] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:25:14.362 [DEBUG] [Thread-3558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:25:14.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:25:14.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:25:14.365 [DEBUG] [Thread-3558] [transport.py] [_log()] userauth is OK
2025-11-25T18:25:14.365 [DEBUG] [Thread-3558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:25:14.365 [DEBUG] [Thread-3558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:25:14.365 [DEBUG] [Thread-3558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:25:14.365 [DEBUG] [Thread-3558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:25:14.392 [INFO] [Thread-3558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:25:14.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:25:15.098 [DEBUG] [Thread-3558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:25:15.098 [DEBUG] [Thread-3558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:25:15.098 [DEBUG] [Thread-3558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:25:15.139 [DEBUG] [Thread-3558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:25:15.139 [DEBUG] [Thread-3558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:25:15.143 [DEBUG] [Thread-3558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:25:15.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:25:15.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:25:15.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:25:15.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:25:15.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:25:15.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:25:15.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:25:15.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:25:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:25:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.683780 -999.00  +27.10  14.34     11   -5.40 1 1 1 1 1   887    0 32.20 -11.78 ----- 13.0 14.3 315.7 18.9 30.4 -32.4 31.1 -32.3 31.8 -32.6 31.7 -32.2
2025-11-25T18:25:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:25:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:25:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.683780
2025-11-25T18:25:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:25:15.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:25:15.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:25:15.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:25:15.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:25:15.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:24:45', tmtdew=39.94, humidity=6.18, cloud=0.0, wind=18.74, temperature=27.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:24:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:25:15.169 [DEBUG] [Thread-3558] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:25:15.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:25:15.265 [DEBUG] [Thread-3561] [transport.py] [_log()] starting thread (client mode): 0x737c6a40
2025-11-25T18:25:15.265 [DEBUG] [Thread-3561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:25:15.280 [DEBUG] [Thread-3561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:25:15.281 [INFO] [Thread-3561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:25:15.288 [DEBUG] [Thread-3561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:25:15.288 [DEBUG] [Thread-3561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] client lang: <none>
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] server lang: <none>
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] kex follows: False
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] Compression: none
2025-11-25T18:25:15.289 [DEBUG] [Thread-3561] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:25:15.347 [DEBUG] [Thread-3561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:25:15.348 [DEBUG] [Thread-3561] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:25:15.348 [DEBUG] [Thread-3561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:25:15.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:25:15.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:25:15.404 [DEBUG] [Thread-3561] [transport.py] [_log()] userauth is OK
2025-11-25T18:25:15.404 [DEBUG] [Thread-3561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:25:15.404 [DEBUG] [Thread-3561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:25:15.404 [DEBUG] [Thread-3561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:25:15.404 [DEBUG] [Thread-3561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:25:15.423 [INFO] [Thread-3561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:25:15.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:25:15.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:25:16.251 [DEBUG] [Thread-3561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:25:16.251 [DEBUG] [Thread-3561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:25:16.299 [DEBUG] [Thread-3561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:25:16.299 [DEBUG] [Thread-3561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:25:16.308 [DEBUG] [Thread-3561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:25:16.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:25:16.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:25:16.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:25:16.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:25:16.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:25:16.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:25:16.342 [DEBUG] [Thread-3561] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:25:23.776 [DEBUG] [Thread-3563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:25:25.549 [DEBUG] [Thread-3564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:25:38.827 [DEBUG] [Thread-3565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:25:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:25:46.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:25:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:25:47.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 25, 17), 39.88, 6.19, 0.0, 17.49, 27.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:25:47.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:25:17
2025-11-25T18:25:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:25:47.303 [DEBUG] [Thread-3566] [transport.py] [_log()] starting thread (client mode): 0x70d0d570
2025-11-25T18:25:47.303 [DEBUG] [Thread-3566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:25:47.323 [DEBUG] [Thread-3566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:25:47.323 [INFO] [Thread-3566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] client lang: <none>
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] server lang: <none>
2025-11-25T18:25:47.325 [DEBUG] [Thread-3566] [transport.py] [_log()] kex follows: False
2025-11-25T18:25:47.326 [DEBUG] [Thread-3566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:25:47.326 [DEBUG] [Thread-3566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:25:47.326 [DEBUG] [Thread-3566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:25:47.326 [DEBUG] [Thread-3566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:25:47.326 [DEBUG] [Thread-3566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:25:47.326 [DEBUG] [Thread-3566] [transport.py] [_log()] Compression: none
2025-11-25T18:25:47.326 [DEBUG] [Thread-3566] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:25:47.338 [DEBUG] [Thread-3566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:25:47.339 [DEBUG] [Thread-3566] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:25:47.339 [DEBUG] [Thread-3566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:25:47.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:25:47.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:25:47.341 [DEBUG] [Thread-3566] [transport.py] [_log()] userauth is OK
2025-11-25T18:25:47.341 [DEBUG] [Thread-3566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:25:47.341 [DEBUG] [Thread-3566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:25:47.341 [DEBUG] [Thread-3566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:25:47.341 [DEBUG] [Thread-3566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:25:47.365 [INFO] [Thread-3566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:25:47.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:25:47.986 [DEBUG] [Thread-3566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:25:47.987 [DEBUG] [Thread-3566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:25:47.987 [DEBUG] [Thread-3566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:25:48.028 [DEBUG] [Thread-3566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:25:48.028 [DEBUG] [Thread-3566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:25:48.031 [DEBUG] [Thread-3566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:25:48.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:25:48.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:25:48.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:25:48.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:25:48.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:25:48.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:25:48.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:25:48.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:25:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:25:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.684127 -999.00  +27.10  15.84     11   -5.20 1 1 1 1 1   887    0 32.36 -14.20 ----- 15.8 15.8 307.4 19.8 30.4 -32.6 30.9 -32.1 31.7 -32.5 31.6 -32.1
2025-11-25T18:25:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:25:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:25:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.684127
2025-11-25T18:25:48.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:25:48.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:25:48.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:25:48.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:25:48.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:25:48.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:25:17', tmtdew=39.88, humidity=6.19, cloud=0.0, wind=17.49, temperature=27.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:25:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:25:48.060 [DEBUG] [Thread-3566] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:25:48.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:25:48.156 [DEBUG] [Thread-3569] [transport.py] [_log()] starting thread (client mode): 0x70d2b7c0
2025-11-25T18:25:48.156 [DEBUG] [Thread-3569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:25:48.171 [DEBUG] [Thread-3569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:25:48.172 [INFO] [Thread-3569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:25:48.179 [DEBUG] [Thread-3569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:25:48.179 [DEBUG] [Thread-3569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:25:48.180 [DEBUG] [Thread-3569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:25:48.180 [DEBUG] [Thread-3569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:25:48.180 [DEBUG] [Thread-3569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:25:48.180 [DEBUG] [Thread-3569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:25:48.180 [DEBUG] [Thread-3569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:25:48.180 [DEBUG] [Thread-3569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:25:48.180 [DEBUG] [Thread-3569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:25:48.180 [DEBUG] [Thread-3569] [transport.py] [_log()] client lang: <none>
2025-11-25T18:25:48.181 [DEBUG] [Thread-3569] [transport.py] [_log()] server lang: <none>
2025-11-25T18:25:48.181 [DEBUG] [Thread-3569] [transport.py] [_log()] kex follows: False
2025-11-25T18:25:48.181 [DEBUG] [Thread-3569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:25:48.181 [DEBUG] [Thread-3569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:25:48.181 [DEBUG] [Thread-3569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:25:48.181 [DEBUG] [Thread-3569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:25:48.181 [DEBUG] [Thread-3569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:25:48.182 [DEBUG] [Thread-3569] [transport.py] [_log()] Compression: none
2025-11-25T18:25:48.182 [DEBUG] [Thread-3569] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:25:48.240 [DEBUG] [Thread-3569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:25:48.240 [DEBUG] [Thread-3569] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:25:48.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:25:48.241 [DEBUG] [Thread-3569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:25:48.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:25:48.296 [DEBUG] [Thread-3569] [transport.py] [_log()] userauth is OK
2025-11-25T18:25:48.296 [DEBUG] [Thread-3569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:25:48.296 [DEBUG] [Thread-3569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:25:48.296 [DEBUG] [Thread-3569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:25:48.296 [DEBUG] [Thread-3569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:25:48.318 [INFO] [Thread-3569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:25:48.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:25:48.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:25:49.139 [DEBUG] [Thread-3569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:25:49.140 [DEBUG] [Thread-3569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:25:49.188 [DEBUG] [Thread-3569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:25:49.188 [DEBUG] [Thread-3569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:25:49.197 [DEBUG] [Thread-3569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:25:49.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:25:49.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:25:49.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:25:49.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:25:49.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:25:49.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:25:49.231 [DEBUG] [Thread-3569] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:25:53.867 [DEBUG] [Thread-3571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:26:08.914 [DEBUG] [Thread-3572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:26:19.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:26:19.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:26:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:26:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 25, 50), 39.62, 6.24, 0.0, 18.84, 26.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:26:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:25:50
2025-11-25T18:26:20.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:26:20.182 [DEBUG] [Thread-3573] [transport.py] [_log()] starting thread (client mode): 0x7374fa60
2025-11-25T18:26:20.182 [DEBUG] [Thread-3573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:26:20.195 [DEBUG] [Thread-3573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:26:20.195 [INFO] [Thread-3573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:26:20.196 [DEBUG] [Thread-3573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:26:20.196 [DEBUG] [Thread-3573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:26:20.196 [DEBUG] [Thread-3573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] client lang: <none>
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] server lang: <none>
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] kex follows: False
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] Compression: none
2025-11-25T18:26:20.197 [DEBUG] [Thread-3573] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:26:20.205 [DEBUG] [Thread-3573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:26:20.205 [DEBUG] [Thread-3573] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:26:20.205 [DEBUG] [Thread-3573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:26:20.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:26:20.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:26:20.206 [DEBUG] [Thread-3573] [transport.py] [_log()] userauth is OK
2025-11-25T18:26:20.206 [DEBUG] [Thread-3573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:26:20.206 [DEBUG] [Thread-3573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:26:20.207 [DEBUG] [Thread-3573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:26:20.207 [DEBUG] [Thread-3573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:26:20.227 [INFO] [Thread-3573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:26:20.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:26:20.896 [DEBUG] [Thread-3573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:26:20.896 [DEBUG] [Thread-3573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:26:20.896 [DEBUG] [Thread-3573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:26:20.937 [DEBUG] [Thread-3573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:26:20.937 [DEBUG] [Thread-3573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:26:20.941 [DEBUG] [Thread-3573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:26:20.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:26:20.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:26:20.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:26:20.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:26:20.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:26:20.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:26:20.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:26:20.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:26:20.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:26:20.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.684475 -999.00  +27.00  14.93     11   -5.30 1 1 1 1 1   887    0 32.06 -16.04 ----- 15.1 14.9 305.9 19.6 30.4 -32.6 30.9 -32.0 31.6 -30.2 31.5 -31.9
2025-11-25T18:26:20.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:26:20.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:26:20.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.684475
2025-11-25T18:26:20.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:26:20.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:26:20.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:26:20.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:26:20.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:26:20.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:25:50', tmtdew=39.62, humidity=6.24, cloud=0.0, wind=18.84, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:25:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:26:20.969 [DEBUG] [Thread-3573] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:26:21.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:26:21.070 [DEBUG] [Thread-3576] [transport.py] [_log()] starting thread (client mode): 0x70d2a680
2025-11-25T18:26:21.070 [DEBUG] [Thread-3576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:26:21.086 [DEBUG] [Thread-3576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:26:21.087 [INFO] [Thread-3576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:26:21.094 [DEBUG] [Thread-3576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:26:21.094 [DEBUG] [Thread-3576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:26:21.094 [DEBUG] [Thread-3576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:26:21.094 [DEBUG] [Thread-3576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:26:21.094 [DEBUG] [Thread-3576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:26:21.094 [DEBUG] [Thread-3576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:26:21.094 [DEBUG] [Thread-3576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:26:21.094 [DEBUG] [Thread-3576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] client lang: <none>
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] server lang: <none>
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] kex follows: False
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] Compression: none
2025-11-25T18:26:21.095 [DEBUG] [Thread-3576] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:26:21.152 [DEBUG] [Thread-3576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:26:21.152 [DEBUG] [Thread-3576] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:26:21.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:26:21.153 [DEBUG] [Thread-3576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:26:21.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:26:21.208 [DEBUG] [Thread-3576] [transport.py] [_log()] userauth is OK
2025-11-25T18:26:21.209 [DEBUG] [Thread-3576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:26:21.209 [DEBUG] [Thread-3576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:26:21.209 [DEBUG] [Thread-3576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:26:21.209 [DEBUG] [Thread-3576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:26:21.229 [INFO] [Thread-3576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:26:21.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:26:21.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:26:22.141 [DEBUG] [Thread-3576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:26:22.141 [DEBUG] [Thread-3576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:26:22.189 [DEBUG] [Thread-3576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:26:22.190 [DEBUG] [Thread-3576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:26:22.199 [DEBUG] [Thread-3576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:26:22.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:26:22.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:26:22.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:26:22.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:26:22.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:26:22.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:26:22.243 [DEBUG] [Thread-3576] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:26:23.952 [DEBUG] [Thread-3578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:26:26.272 [DEBUG] [Thread-3579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:26:38.993 [DEBUG] [Thread-3580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:26:52.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:26:52.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:26:52.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:26:52.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 26, 23), 39.54, 6.26, 0.0, 15.9, 26.76, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:26:52.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:26:23
2025-11-25T18:26:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:26:53.211 [DEBUG] [Thread-3581] [transport.py] [_log()] starting thread (client mode): 0x737c7d60
2025-11-25T18:26:53.211 [DEBUG] [Thread-3581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:26:53.226 [DEBUG] [Thread-3581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:26:53.226 [INFO] [Thread-3581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:26:53.230 [DEBUG] [Thread-3581] [transport.py] [_log()] client lang: <none>
2025-11-25T18:26:53.231 [DEBUG] [Thread-3581] [transport.py] [_log()] server lang: <none>
2025-11-25T18:26:53.231 [DEBUG] [Thread-3581] [transport.py] [_log()] kex follows: False
2025-11-25T18:26:53.231 [DEBUG] [Thread-3581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:26:53.231 [DEBUG] [Thread-3581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:26:53.231 [DEBUG] [Thread-3581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:26:53.231 [DEBUG] [Thread-3581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:26:53.231 [DEBUG] [Thread-3581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:26:53.231 [DEBUG] [Thread-3581] [transport.py] [_log()] Compression: none
2025-11-25T18:26:53.231 [DEBUG] [Thread-3581] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:26:53.248 [DEBUG] [Thread-3581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:26:53.249 [DEBUG] [Thread-3581] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:26:53.249 [DEBUG] [Thread-3581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:26:53.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:26:53.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:26:53.293 [DEBUG] [Thread-3581] [transport.py] [_log()] userauth is OK
2025-11-25T18:26:53.293 [DEBUG] [Thread-3581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:26:53.293 [DEBUG] [Thread-3581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:26:53.293 [DEBUG] [Thread-3581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:26:53.293 [DEBUG] [Thread-3581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:26:53.325 [INFO] [Thread-3581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:26:53.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:26:54.026 [DEBUG] [Thread-3583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:26:54.059 [DEBUG] [Thread-3581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:26:54.059 [DEBUG] [Thread-3581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:26:54.059 [DEBUG] [Thread-3581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:26:54.100 [DEBUG] [Thread-3581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:26:54.100 [DEBUG] [Thread-3581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:26:54.103 [DEBUG] [Thread-3581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:26:54.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:26:54.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:26:54.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:26:54.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:26:54.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:26:54.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:26:54.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:26:54.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:26:54.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:26:54.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.684822 -999.00  +26.80  15.63     11   -5.40 1 1 1 1 1   887    0 31.96 -15.27 ----- 14.4 15.6 319.2 19.6 30.2 -32.6 30.9 -32.1 31.5 -31.8 31.5 -31.7
2025-11-25T18:26:54.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:26:54.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:26:54.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.684822
2025-11-25T18:26:54.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:26:54.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:26:54.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:26:54.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:26:54.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:26:54.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:26:23', tmtdew=39.54, humidity=6.26, cloud=0.0, wind=15.9, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:26:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:26:54.124 [DEBUG] [Thread-3581] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:26:54.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:26:54.221 [DEBUG] [Thread-3585] [transport.py] [_log()] starting thread (client mode): 0x737c5480
2025-11-25T18:26:54.221 [DEBUG] [Thread-3585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:26:54.238 [DEBUG] [Thread-3585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:26:54.238 [INFO] [Thread-3585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:26:54.246 [DEBUG] [Thread-3585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:26:54.246 [DEBUG] [Thread-3585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:26:54.246 [DEBUG] [Thread-3585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:26:54.246 [DEBUG] [Thread-3585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:26:54.246 [DEBUG] [Thread-3585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:26:54.246 [DEBUG] [Thread-3585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] client lang: <none>
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] server lang: <none>
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] kex follows: False
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] Compression: none
2025-11-25T18:26:54.247 [DEBUG] [Thread-3585] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:26:54.304 [DEBUG] [Thread-3585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:26:54.305 [DEBUG] [Thread-3585] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:26:54.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:26:54.306 [DEBUG] [Thread-3585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:26:54.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:26:54.361 [DEBUG] [Thread-3585] [transport.py] [_log()] userauth is OK
2025-11-25T18:26:54.361 [DEBUG] [Thread-3585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:26:54.361 [DEBUG] [Thread-3585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:26:54.361 [DEBUG] [Thread-3585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:26:54.361 [DEBUG] [Thread-3585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:26:54.381 [INFO] [Thread-3585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:26:54.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:26:54.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:26:55.264 [DEBUG] [Thread-3585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:26:55.264 [DEBUG] [Thread-3585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:26:55.312 [DEBUG] [Thread-3585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:26:55.312 [DEBUG] [Thread-3585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:26:55.321 [DEBUG] [Thread-3585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:26:55.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:26:55.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:26:55.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:26:55.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:26:55.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:26:55.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:26:55.358 [DEBUG] [Thread-3585] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:27:09.060 [DEBUG] [Thread-3587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:27:24.110 [DEBUG] [Thread-3588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:27:25.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:27:25.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:27:25.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:27:26.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 26, 55), 39.34, 6.78, 0.0, 10.71, 26.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:27:26.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:26:55
2025-11-25T18:27:26.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:27:26.320 [DEBUG] [Thread-3589] [transport.py] [_log()] starting thread (client mode): 0x70d2ac50
2025-11-25T18:27:26.320 [DEBUG] [Thread-3589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:27:26.340 [DEBUG] [Thread-3589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:27:26.340 [INFO] [Thread-3589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] client lang: <none>
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] server lang: <none>
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] kex follows: False
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] Compression: none
2025-11-25T18:27:26.344 [DEBUG] [Thread-3589] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:27:26.360 [DEBUG] [Thread-3589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:27:26.360 [DEBUG] [Thread-3589] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:27:26.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:27:26.360 [DEBUG] [Thread-3589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:27:26.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:27:26.362 [DEBUG] [Thread-3589] [transport.py] [_log()] userauth is OK
2025-11-25T18:27:26.362 [DEBUG] [Thread-3589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:27:26.362 [DEBUG] [Thread-3589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:27:26.362 [DEBUG] [Thread-3589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:27:26.362 [DEBUG] [Thread-3589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:27:26.377 [INFO] [Thread-3589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:27:26.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:27:26.763 [DEBUG] [Thread-3591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:27:27.004 [DEBUG] [Thread-3589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:27:27.005 [DEBUG] [Thread-3589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:27:27.005 [DEBUG] [Thread-3589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:27:27.046 [DEBUG] [Thread-3589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:27:27.046 [DEBUG] [Thread-3589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:27:27.049 [DEBUG] [Thread-3589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:27:27.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:27:27.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:27:27.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:27:27.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:27:27.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:27:27.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:27:27.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:27:27.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:27:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:27:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.685517 -999.00  +26.80  14.96     11   -5.30 1 1 1 1 1   887    0 31.99 -17.49 ----- 11.4 15.0 308.0 17.9 30.1 -32.4 30.7 -32.1 31.4 -30.5 31.3 -32.1
2025-11-25T18:27:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:27:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:27:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.685517
2025-11-25T18:27:27.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:27:27.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:27:27.079 [DEBUG] [Thread-3589] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:27:27.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:27:27.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:27:27.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:27:27.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:26:55', tmtdew=39.34, humidity=6.78, cloud=0.0, wind=10.71, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:27:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:27:27.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:27:27.176 [DEBUG] [Thread-3593] [transport.py] [_log()] starting thread (client mode): 0x70d39360
2025-11-25T18:27:27.176 [DEBUG] [Thread-3593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:27:27.190 [DEBUG] [Thread-3593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:27:27.190 [INFO] [Thread-3593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] client lang: <none>
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] server lang: <none>
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] kex follows: False
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:27:27.198 [DEBUG] [Thread-3593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:27:27.199 [DEBUG] [Thread-3593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:27:27.199 [DEBUG] [Thread-3593] [transport.py] [_log()] Compression: none
2025-11-25T18:27:27.199 [DEBUG] [Thread-3593] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:27:27.261 [DEBUG] [Thread-3593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:27:27.261 [DEBUG] [Thread-3593] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:27:27.262 [DEBUG] [Thread-3593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:27:27.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:27:27.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:27:27.320 [DEBUG] [Thread-3593] [transport.py] [_log()] userauth is OK
2025-11-25T18:27:27.321 [DEBUG] [Thread-3593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:27:27.321 [DEBUG] [Thread-3593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:27:27.321 [DEBUG] [Thread-3593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:27:27.321 [DEBUG] [Thread-3593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:27:27.340 [INFO] [Thread-3593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:27:27.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:27:27.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:27:28.161 [DEBUG] [Thread-3593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:27:28.161 [DEBUG] [Thread-3593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:27:28.208 [DEBUG] [Thread-3593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:27:28.208 [DEBUG] [Thread-3593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:27:28.216 [DEBUG] [Thread-3593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:27:28.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:27:28.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:27:28.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:27:28.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:27:28.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:27:28.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:27:28.248 [DEBUG] [Thread-3593] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:27:39.148 [DEBUG] [Thread-3595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:27:54.200 [DEBUG] [Thread-3596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:27:58.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:27:58.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:27:58.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:27:58.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 27, 27), 39.28, 6.81, 0.0, 11.42, 26.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:27:58.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:27:27
2025-11-25T18:27:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:27:59.215 [DEBUG] [Thread-3597] [transport.py] [_log()] starting thread (client mode): 0x70d3b9a0
2025-11-25T18:27:59.215 [DEBUG] [Thread-3597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:27:59.236 [DEBUG] [Thread-3597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:27:59.236 [INFO] [Thread-3597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:27:59.240 [DEBUG] [Thread-3597] [transport.py] [_log()] client lang: <none>
2025-11-25T18:27:59.241 [DEBUG] [Thread-3597] [transport.py] [_log()] server lang: <none>
2025-11-25T18:27:59.241 [DEBUG] [Thread-3597] [transport.py] [_log()] kex follows: False
2025-11-25T18:27:59.241 [DEBUG] [Thread-3597] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:27:59.241 [DEBUG] [Thread-3597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:27:59.241 [DEBUG] [Thread-3597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:27:59.241 [DEBUG] [Thread-3597] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:27:59.241 [DEBUG] [Thread-3597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:27:59.241 [DEBUG] [Thread-3597] [transport.py] [_log()] Compression: none
2025-11-25T18:27:59.241 [DEBUG] [Thread-3597] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:27:59.254 [DEBUG] [Thread-3597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:27:59.255 [DEBUG] [Thread-3597] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:27:59.255 [DEBUG] [Thread-3597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:27:59.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:27:59.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:27:59.257 [DEBUG] [Thread-3597] [transport.py] [_log()] userauth is OK
2025-11-25T18:27:59.257 [DEBUG] [Thread-3597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:27:59.257 [DEBUG] [Thread-3597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:27:59.257 [DEBUG] [Thread-3597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:27:59.257 [DEBUG] [Thread-3597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:27:59.281 [INFO] [Thread-3597] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:27:59.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:28:00.041 [DEBUG] [Thread-3597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:28:00.041 [DEBUG] [Thread-3597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:28:00.042 [DEBUG] [Thread-3597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:28:00.082 [DEBUG] [Thread-3597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:28:00.082 [DEBUG] [Thread-3597] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:28:00.084 [DEBUG] [Thread-3597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:28:00.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:28:00.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:28:00.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:28:00.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:28:00.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:28:00.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:28:00.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:28:00.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:28:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:28:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.685864 -999.00  +26.80  12.00     11   -5.60 1 1 1 1 1   887    0 32.10 -19.87 ----- 9.3 12.0 303.6 18.7 30.1 -32.5 30.7 -32.1 31.3 -30.6 31.2 -31.8
2025-11-25T18:28:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:28:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:28:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.685864
2025-11-25T18:28:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:28:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:28:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:28:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:28:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:28:00.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:27:27', tmtdew=39.28, humidity=6.81, cloud=0.0, wind=11.42, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:27:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:28:00.110 [DEBUG] [Thread-3597] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:28:00.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:28:00.205 [DEBUG] [Thread-3600] [transport.py] [_log()] starting thread (client mode): 0x737c6e00
2025-11-25T18:28:00.205 [DEBUG] [Thread-3600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:28:00.220 [DEBUG] [Thread-3600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:28:00.220 [INFO] [Thread-3600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] client lang: <none>
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] server lang: <none>
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] kex follows: False
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:28:00.228 [DEBUG] [Thread-3600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:28:00.229 [DEBUG] [Thread-3600] [transport.py] [_log()] Compression: none
2025-11-25T18:28:00.229 [DEBUG] [Thread-3600] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:28:00.284 [DEBUG] [Thread-3600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:28:00.285 [DEBUG] [Thread-3600] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:28:00.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:28:00.286 [DEBUG] [Thread-3600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:28:00.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:28:00.340 [DEBUG] [Thread-3600] [transport.py] [_log()] userauth is OK
2025-11-25T18:28:00.340 [DEBUG] [Thread-3600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:28:00.340 [DEBUG] [Thread-3600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:28:00.340 [DEBUG] [Thread-3600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:28:00.340 [DEBUG] [Thread-3600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:28:00.353 [INFO] [Thread-3600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:28:00.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:28:00.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:28:01.189 [DEBUG] [Thread-3600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:28:01.189 [DEBUG] [Thread-3600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:28:01.237 [DEBUG] [Thread-3600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:28:01.237 [DEBUG] [Thread-3600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:28:01.245 [DEBUG] [Thread-3600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:28:01.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:28:01.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:28:01.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:28:01.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:28:01.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:28:01.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:28:01.277 [DEBUG] [Thread-3600] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:28:09.231 [DEBUG] [Thread-3602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:28:24.287 [DEBUG] [Thread-3603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:28:27.265 [DEBUG] [Thread-3604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:28:31.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:28:31.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:28:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:28:31.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 27, 59), 39.39, 6.79, 0.0, 10.8, 26.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:28:31.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:27:59
2025-11-25T18:28:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:28:32.274 [DEBUG] [Thread-3605] [transport.py] [_log()] starting thread (client mode): 0x70d3b280
2025-11-25T18:28:32.274 [DEBUG] [Thread-3605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:28:32.295 [DEBUG] [Thread-3605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:28:32.295 [INFO] [Thread-3605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:28:32.298 [DEBUG] [Thread-3605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:28:32.298 [DEBUG] [Thread-3605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:28:32.298 [DEBUG] [Thread-3605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:28:32.298 [DEBUG] [Thread-3605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:28:32.298 [DEBUG] [Thread-3605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:28:32.298 [DEBUG] [Thread-3605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:28:32.298 [DEBUG] [Thread-3605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] client lang: <none>
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] server lang: <none>
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] kex follows: False
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] Compression: none
2025-11-25T18:28:32.299 [DEBUG] [Thread-3605] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:28:32.315 [DEBUG] [Thread-3605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:28:32.315 [DEBUG] [Thread-3605] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:28:32.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:28:32.316 [DEBUG] [Thread-3605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:28:32.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:28:32.316 [DEBUG] [Thread-3605] [transport.py] [_log()] userauth is OK
2025-11-25T18:28:32.316 [DEBUG] [Thread-3605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:28:32.316 [DEBUG] [Thread-3605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:28:32.316 [DEBUG] [Thread-3605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:28:32.317 [DEBUG] [Thread-3605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:28:32.336 [INFO] [Thread-3605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:28:32.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:28:32.999 [DEBUG] [Thread-3605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:28:32.999 [DEBUG] [Thread-3605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:28:32.999 [DEBUG] [Thread-3605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:28:33.040 [DEBUG] [Thread-3605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:28:33.040 [DEBUG] [Thread-3605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:28:33.042 [DEBUG] [Thread-3605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:28:33.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:28:33.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:28:33.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:28:33.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:28:33.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:28:33.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:28:33.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.686211 -999.00  +26.70   6.22     11   -5.70 1 1 1 1 1   887    0 31.79 -18.92 ----- 7.2 6.2 317.0 10.9 30.1 -32.4 30.6 -31.8 31.3 -31.0 31.2 -31.6
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.686211
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:28:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:27:59', tmtdew=39.39, humidity=6.79, cloud=0.0, wind=10.8, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:28:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:28:33.061 [DEBUG] [Thread-3605] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:28:33.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:28:33.150 [DEBUG] [Thread-3608] [transport.py] [_log()] starting thread (client mode): 0x70d3a320
2025-11-25T18:28:33.151 [DEBUG] [Thread-3608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:28:33.165 [DEBUG] [Thread-3608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:28:33.165 [INFO] [Thread-3608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:28:33.173 [DEBUG] [Thread-3608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:28:33.173 [DEBUG] [Thread-3608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] client lang: <none>
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] server lang: <none>
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] kex follows: False
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] Compression: none
2025-11-25T18:28:33.174 [DEBUG] [Thread-3608] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:28:33.231 [DEBUG] [Thread-3608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:28:33.231 [DEBUG] [Thread-3608] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:28:33.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:28:33.232 [DEBUG] [Thread-3608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:28:33.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:28:33.288 [DEBUG] [Thread-3608] [transport.py] [_log()] userauth is OK
2025-11-25T18:28:33.289 [DEBUG] [Thread-3608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:28:33.289 [DEBUG] [Thread-3608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:28:33.289 [DEBUG] [Thread-3608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:28:33.289 [DEBUG] [Thread-3608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:28:33.304 [INFO] [Thread-3608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:28:33.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:28:33.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:28:34.128 [DEBUG] [Thread-3608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:28:34.129 [DEBUG] [Thread-3608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:28:34.177 [DEBUG] [Thread-3608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:28:34.177 [DEBUG] [Thread-3608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:28:34.186 [DEBUG] [Thread-3608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:28:34.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:28: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')
2025-11-25T18:28:34.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:28:34.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:28:34.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:28:34.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:28:34.218 [DEBUG] [Thread-3608] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:28:39.322 [DEBUG] [Thread-3610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:28:54.374 [DEBUG] [Thread-3611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:29:04.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:29:04.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:29:04.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:29:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 28, 32), 39.46, 6.74, 0.0, 11.08, 26.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:29:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:28:32
2025-11-25T18:29:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:29:05.232 [DEBUG] [Thread-3612] [transport.py] [_log()] starting thread (client mode): 0x7376f5e0
2025-11-25T18:29:05.233 [DEBUG] [Thread-3612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:29:05.253 [DEBUG] [Thread-3612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:29:05.253 [INFO] [Thread-3612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] client lang: <none>
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] server lang: <none>
2025-11-25T18:29:05.256 [DEBUG] [Thread-3612] [transport.py] [_log()] kex follows: False
2025-11-25T18:29:05.257 [DEBUG] [Thread-3612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:29:05.257 [DEBUG] [Thread-3612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:29:05.257 [DEBUG] [Thread-3612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:29:05.257 [DEBUG] [Thread-3612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:29:05.257 [DEBUG] [Thread-3612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:29:05.257 [DEBUG] [Thread-3612] [transport.py] [_log()] Compression: none
2025-11-25T18:29:05.257 [DEBUG] [Thread-3612] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:29:05.272 [DEBUG] [Thread-3612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:29:05.272 [DEBUG] [Thread-3612] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:29:05.272 [DEBUG] [Thread-3612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:29:05.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:29:05.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:29:05.272 [DEBUG] [Thread-3612] [transport.py] [_log()] userauth is OK
2025-11-25T18:29:05.272 [DEBUG] [Thread-3612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:29:05.272 [DEBUG] [Thread-3612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:29:05.272 [DEBUG] [Thread-3612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:29:05.272 [DEBUG] [Thread-3612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:29:05.281 [INFO] [Thread-3612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:29:05.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:29:06.002 [DEBUG] [Thread-3612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:29:06.002 [DEBUG] [Thread-3612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:29:06.002 [DEBUG] [Thread-3612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:29:06.043 [DEBUG] [Thread-3612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:29:06.043 [DEBUG] [Thread-3612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:29:06.044 [DEBUG] [Thread-3612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:29:06.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:29:06.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:29:06.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:29:06.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:29:06.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:29:06.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:29:06.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:29:06.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.686558 -999.00  +26.60  10.89     11   -5.40 1 1 1 1 1   887    0 31.75 -18.15 ----- 12.6 10.9 301.4 13.6 30.1 -32.6 30.6 -31.9 31.3 -31.6 31.2 -31.8
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.686558
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:29:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:28:32', tmtdew=39.46, humidity=6.74, cloud=0.0, wind=11.08, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:28:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:29:06.054 [DEBUG] [Thread-3612] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:29:06.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:29:06.140 [DEBUG] [Thread-3615] [transport.py] [_log()] starting thread (client mode): 0x7378cd90
2025-11-25T18:29:06.140 [DEBUG] [Thread-3615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:29:06.155 [DEBUG] [Thread-3615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:29:06.155 [INFO] [Thread-3615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:29:06.162 [DEBUG] [Thread-3615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:29:06.162 [DEBUG] [Thread-3615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] client lang: <none>
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] server lang: <none>
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] kex follows: False
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] Compression: none
2025-11-25T18:29:06.163 [DEBUG] [Thread-3615] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:29:06.223 [DEBUG] [Thread-3615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:29:06.223 [DEBUG] [Thread-3615] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:29:06.223 [DEBUG] [Thread-3615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:29:06.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:29:06.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:29:06.281 [DEBUG] [Thread-3615] [transport.py] [_log()] userauth is OK
2025-11-25T18:29:06.282 [DEBUG] [Thread-3615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:29:06.282 [DEBUG] [Thread-3615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:29:06.282 [DEBUG] [Thread-3615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:29:06.282 [DEBUG] [Thread-3615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:29:06.302 [INFO] [Thread-3615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:29:06.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:29:06.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:29:07.171 [DEBUG] [Thread-3615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:29:07.171 [DEBUG] [Thread-3615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:29:07.221 [DEBUG] [Thread-3615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:29:07.221 [DEBUG] [Thread-3615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:29:07.230 [DEBUG] [Thread-3615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:29:07.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:29:07.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:29:07.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:29:07.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:29:07.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:29:07.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:29:07.263 [DEBUG] [Thread-3615] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:29:09.406 [DEBUG] [Thread-3617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:29:24.444 [DEBUG] [Thread-3618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:29:27.768 [DEBUG] [Thread-3619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:29:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:29:37.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:29:37.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:29:37.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 29, 4), 39.4, 6.78, 0.0, 12.33, 26.69, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:29:37.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:29:04
2025-11-25T18:29:38.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:29:38.241 [DEBUG] [Thread-3620] [transport.py] [_log()] starting thread (client mode): 0x7378d5d0
2025-11-25T18:29:38.241 [DEBUG] [Thread-3620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:29:38.261 [DEBUG] [Thread-3620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:29:38.261 [INFO] [Thread-3620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] client lang: <none>
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] server lang: <none>
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] kex follows: False
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:29:38.264 [DEBUG] [Thread-3620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:29:38.265 [DEBUG] [Thread-3620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:29:38.265 [DEBUG] [Thread-3620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:29:38.265 [DEBUG] [Thread-3620] [transport.py] [_log()] Compression: none
2025-11-25T18:29:38.265 [DEBUG] [Thread-3620] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:29:38.279 [DEBUG] [Thread-3620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:29:38.279 [DEBUG] [Thread-3620] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:29:38.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:29:38.280 [DEBUG] [Thread-3620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:29:38.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:29:38.280 [DEBUG] [Thread-3620] [transport.py] [_log()] userauth is OK
2025-11-25T18:29:38.280 [DEBUG] [Thread-3620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:29:38.280 [DEBUG] [Thread-3620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:29:38.280 [DEBUG] [Thread-3620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:29:38.281 [DEBUG] [Thread-3620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:29:38.295 [INFO] [Thread-3620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:29:38.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:29:38.946 [DEBUG] [Thread-3620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:29:38.946 [DEBUG] [Thread-3620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:29:38.947 [DEBUG] [Thread-3620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:29:38.988 [DEBUG] [Thread-3620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:29:38.988 [DEBUG] [Thread-3620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:29:38.992 [DEBUG] [Thread-3620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:29:39.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:29:39.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:29:39.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:29:39.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:29:39.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:29:39.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:29:39.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:29:39.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:29:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:29:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.686905 -999.00  +26.60  21.79     11   -5.70 1 1 1 1 1   887    0 31.43 -21.31 ----- 19.1 21.8 310.6 22.6 30.0 -32.7 30.5 -32.1 31.1 -31.0 31.1 -31.7
2025-11-25T18:29:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:29:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:29:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.686905
2025-11-25T18:29:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:29:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:29:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:29:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:29:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:29:39.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:29:04', tmtdew=39.4, humidity=6.78, cloud=0.0, wind=12.33, temperature=26.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:29:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:29:39.018 [DEBUG] [Thread-3620] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:29:39.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:29:39.113 [DEBUG] [Thread-3623] [transport.py] [_log()] starting thread (client mode): 0x70d0f6a0
2025-11-25T18:29:39.113 [DEBUG] [Thread-3623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:29:39.131 [DEBUG] [Thread-3623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:29:39.131 [INFO] [Thread-3623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:29:39.138 [DEBUG] [Thread-3623] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] client lang: <none>
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] server lang: <none>
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] kex follows: False
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:29:39.139 [DEBUG] [Thread-3623] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:29:39.140 [DEBUG] [Thread-3623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:29:39.140 [DEBUG] [Thread-3623] [transport.py] [_log()] Compression: none
2025-11-25T18:29:39.140 [DEBUG] [Thread-3623] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:29:39.197 [DEBUG] [Thread-3623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:29:39.198 [DEBUG] [Thread-3623] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:29:39.199 [DEBUG] [Thread-3623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:29:39.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:29:39.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:29:39.257 [DEBUG] [Thread-3623] [transport.py] [_log()] userauth is OK
2025-11-25T18:29:39.258 [DEBUG] [Thread-3623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:29:39.258 [DEBUG] [Thread-3623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:29:39.258 [DEBUG] [Thread-3623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:29:39.258 [DEBUG] [Thread-3623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:29:39.277 [INFO] [Thread-3623] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:29:39.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:29:39.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:29:39.481 [DEBUG] [Thread-3625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:29:40.112 [DEBUG] [Thread-3623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:29:40.112 [DEBUG] [Thread-3623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:29:40.160 [DEBUG] [Thread-3623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:29:40.160 [DEBUG] [Thread-3623] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:29:40.169 [DEBUG] [Thread-3623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:29:40.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:29:40.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:29:40.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:29:40.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:29:40.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:29:40.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:29:40.206 [DEBUG] [Thread-3623] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:29:54.529 [DEBUG] [Thread-3626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:30:09.563 [DEBUG] [Thread-3627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:30:10.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:30:10.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:30:10.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:30:10.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 29, 35), 39.75, 6.23, 0.0, 13.9, 26.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:30:10.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:29:35
2025-11-25T18:30:11.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:30:11.152 [DEBUG] [Thread-3628] [transport.py] [_log()] starting thread (client mode): 0x7378f5e0
2025-11-25T18:30:11.152 [DEBUG] [Thread-3628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:30:11.173 [DEBUG] [Thread-3628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:30:11.173 [INFO] [Thread-3628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] client lang: <none>
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] server lang: <none>
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] kex follows: False
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] Compression: none
2025-11-25T18:30:11.177 [DEBUG] [Thread-3628] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:30:11.194 [DEBUG] [Thread-3628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:30:11.195 [DEBUG] [Thread-3628] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:30:11.196 [DEBUG] [Thread-3628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:30:11.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:30:11.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:30:11.200 [DEBUG] [Thread-3628] [transport.py] [_log()] userauth is OK
2025-11-25T18:30:11.200 [DEBUG] [Thread-3628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:30:11.200 [DEBUG] [Thread-3628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:30:11.200 [DEBUG] [Thread-3628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:30:11.200 [DEBUG] [Thread-3628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:30:11.224 [INFO] [Thread-3628] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:30:11.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:30:12.430 [DEBUG] [Thread-3628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:30:12.430 [DEBUG] [Thread-3628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:30:12.431 [DEBUG] [Thread-3628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:30:12.472 [DEBUG] [Thread-3628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:30:12.472 [DEBUG] [Thread-3628] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:30:12.475 [DEBUG] [Thread-3628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:30:12.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:30:12.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:30:12.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:30:12.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:30:12.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:30:12.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:30:12.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:30:12.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:30:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:30:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.687253 -999.00  +26.40  17.63     11   -5.80 1 1 1 1 1   887    0 31.76 -24.04 ----- 16.4 17.6 314.0 19.9 29.9 -32.7 30.4 -32.3 31.1 -30.5 31.0 -31.8
2025-11-25T18:30:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:30:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:30:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.687253
2025-11-25T18:30:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:30:12.501 [DEBUG] [Thread-3628] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:30:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:30:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:30:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:30:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:30:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:29:35', tmtdew=39.75, humidity=6.23, cloud=0.0, wind=13.9, temperature=26.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:29:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:30:12.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:30:12.597 [DEBUG] [Thread-3631] [transport.py] [_log()] starting thread (client mode): 0x70d3bac0
2025-11-25T18:30:12.597 [DEBUG] [Thread-3631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:30:12.616 [DEBUG] [Thread-3631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:30:12.616 [INFO] [Thread-3631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:30:12.624 [DEBUG] [Thread-3631] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:30:12.624 [DEBUG] [Thread-3631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:30:12.624 [DEBUG] [Thread-3631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:30:12.624 [DEBUG] [Thread-3631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:30:12.624 [DEBUG] [Thread-3631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:30:12.624 [DEBUG] [Thread-3631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:30:12.625 [DEBUG] [Thread-3631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:30:12.625 [DEBUG] [Thread-3631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:30:12.625 [DEBUG] [Thread-3631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:30:12.625 [DEBUG] [Thread-3631] [transport.py] [_log()] client lang: <none>
2025-11-25T18:30:12.625 [DEBUG] [Thread-3631] [transport.py] [_log()] server lang: <none>
2025-11-25T18:30:12.625 [DEBUG] [Thread-3631] [transport.py] [_log()] kex follows: False
2025-11-25T18:30:12.625 [DEBUG] [Thread-3631] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:30:12.625 [DEBUG] [Thread-3631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:30:12.626 [DEBUG] [Thread-3631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:30:12.626 [DEBUG] [Thread-3631] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:30:12.626 [DEBUG] [Thread-3631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:30:12.626 [DEBUG] [Thread-3631] [transport.py] [_log()] Compression: none
2025-11-25T18:30:12.626 [DEBUG] [Thread-3631] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:30:12.687 [DEBUG] [Thread-3631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:30:12.688 [DEBUG] [Thread-3631] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:30:12.688 [DEBUG] [Thread-3631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:30:12.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:30:12.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:30:12.746 [DEBUG] [Thread-3631] [transport.py] [_log()] userauth is OK
2025-11-25T18:30:12.746 [DEBUG] [Thread-3631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:30:12.746 [DEBUG] [Thread-3631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:30:12.746 [DEBUG] [Thread-3631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:30:12.747 [DEBUG] [Thread-3631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:30:12.768 [INFO] [Thread-3631] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:30:12.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:30:12.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:30:13.654 [DEBUG] [Thread-3631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:30:13.654 [DEBUG] [Thread-3631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:30:13.702 [DEBUG] [Thread-3631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:30:13.702 [DEBUG] [Thread-3631] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:30:13.712 [DEBUG] [Thread-3631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:30:13.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:30:13.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:30:13.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:30:13.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:30:13.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:30:13.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:30:13.749 [DEBUG] [Thread-3631] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:30:24.595 [DEBUG] [Thread-3633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:30:28.285 [DEBUG] [Thread-3634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:30:39.637 [DEBUG] [Thread-3635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:30:43.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:30:43.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:30:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:30:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 30, 40), 39.66, 6.21, 0.0, 14.66, 26.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:30:44.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:30:40
2025-11-25T18:30:44.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:30:44.700 [DEBUG] [Thread-3636] [transport.py] [_log()] starting thread (client mode): 0x70d3a740
2025-11-25T18:30:44.700 [DEBUG] [Thread-3636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:30:44.721 [DEBUG] [Thread-3636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:30:44.721 [INFO] [Thread-3636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:30:44.724 [DEBUG] [Thread-3636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] client lang: <none>
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] server lang: <none>
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] kex follows: False
2025-11-25T18:30:44.725 [DEBUG] [Thread-3636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:30:44.726 [DEBUG] [Thread-3636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:30:44.726 [DEBUG] [Thread-3636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:30:44.726 [DEBUG] [Thread-3636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:30:44.726 [DEBUG] [Thread-3636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:30:44.726 [DEBUG] [Thread-3636] [transport.py] [_log()] Compression: none
2025-11-25T18:30:44.726 [DEBUG] [Thread-3636] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:30:44.746 [DEBUG] [Thread-3636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:30:44.747 [DEBUG] [Thread-3636] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:30:44.747 [DEBUG] [Thread-3636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:30:44.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:30:44.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:30:44.749 [DEBUG] [Thread-3636] [transport.py] [_log()] userauth is OK
2025-11-25T18:30:44.749 [DEBUG] [Thread-3636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:30:44.749 [DEBUG] [Thread-3636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:30:44.749 [DEBUG] [Thread-3636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:30:44.750 [DEBUG] [Thread-3636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:30:44.775 [INFO] [Thread-3636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:30:44.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:30:45.418 [DEBUG] [Thread-3636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:30:45.419 [DEBUG] [Thread-3636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:30:45.419 [DEBUG] [Thread-3636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:30:45.459 [DEBUG] [Thread-3636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:30:45.459 [DEBUG] [Thread-3636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:30:45.463 [DEBUG] [Thread-3636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:30:45.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:30:45.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:30:45.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:30:45.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:30:45.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:30:45.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:30:45.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:30:45.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:30:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:30:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.687600 -999.00  +26.50  13.33     11   -5.50 1 1 1 1 1   887    0 31.70 -25.10 ----- 14.1 13.3 312.4 20.3 29.8 -32.2 30.3 -31.9 31.0 -30.2 30.9 -31.6
2025-11-25T18:30:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:30:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:30:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.687600
2025-11-25T18:30:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:30:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:30:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:30:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:30:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:30:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:30:40', tmtdew=39.66, humidity=6.21, cloud=0.0, wind=14.66, temperature=26.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:30:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:30:45.487 [DEBUG] [Thread-3636] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:30:45.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:30:45.582 [DEBUG] [Thread-3639] [transport.py] [_log()] starting thread (client mode): 0x70d28c40
2025-11-25T18:30:45.582 [DEBUG] [Thread-3639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:30:45.596 [DEBUG] [Thread-3639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:30:45.596 [INFO] [Thread-3639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:30:45.604 [DEBUG] [Thread-3639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:30:45.604 [DEBUG] [Thread-3639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:30:45.604 [DEBUG] [Thread-3639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:30:45.604 [DEBUG] [Thread-3639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:30:45.604 [DEBUG] [Thread-3639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:30:45.604 [DEBUG] [Thread-3639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:30:45.604 [DEBUG] [Thread-3639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:30:45.604 [DEBUG] [Thread-3639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:30:45.604 [DEBUG] [Thread-3639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] client lang: <none>
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] server lang: <none>
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] kex follows: False
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] Compression: none
2025-11-25T18:30:45.605 [DEBUG] [Thread-3639] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:30:45.662 [DEBUG] [Thread-3639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:30:45.663 [DEBUG] [Thread-3639] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:30:45.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:30:45.664 [DEBUG] [Thread-3639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:30:45.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:30:45.718 [DEBUG] [Thread-3639] [transport.py] [_log()] userauth is OK
2025-11-25T18:30:45.718 [DEBUG] [Thread-3639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:30:45.719 [DEBUG] [Thread-3639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:30:45.719 [DEBUG] [Thread-3639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:30:45.719 [DEBUG] [Thread-3639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:30:45.737 [INFO] [Thread-3639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:30:45.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:30:45.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:30:46.589 [DEBUG] [Thread-3639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:30:46.590 [DEBUG] [Thread-3639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:30:46.638 [DEBUG] [Thread-3639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:30:46.638 [DEBUG] [Thread-3639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:30:46.650 [DEBUG] [Thread-3639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:30:46.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:30:46.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:30:46.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:30:46.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:30:46.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:30:46.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:30:46.688 [DEBUG] [Thread-3639] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:30:54.671 [DEBUG] [Thread-3641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:31:09.718 [DEBUG] [Thread-3642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:31:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:31:16.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:31:16.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:31:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 31, 12), 39.75, 6.16, 0.0, 14.98, 26.77, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:31:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:31:12
2025-11-25T18:31:17.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:31:17.668 [DEBUG] [Thread-3643] [transport.py] [_log()] starting thread (client mode): 0x70d2aef0
2025-11-25T18:31:17.668 [DEBUG] [Thread-3643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:31:17.688 [DEBUG] [Thread-3643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:31:17.688 [INFO] [Thread-3643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:31:17.691 [DEBUG] [Thread-3643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:31:17.691 [DEBUG] [Thread-3643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:31:17.691 [DEBUG] [Thread-3643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:31:17.691 [DEBUG] [Thread-3643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:31:17.691 [DEBUG] [Thread-3643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:31:17.691 [DEBUG] [Thread-3643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:31:17.691 [DEBUG] [Thread-3643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:31:17.691 [DEBUG] [Thread-3643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:31:17.691 [DEBUG] [Thread-3643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] client lang: <none>
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] server lang: <none>
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] kex follows: False
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] Compression: none
2025-11-25T18:31:17.692 [DEBUG] [Thread-3643] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:31:17.710 [DEBUG] [Thread-3643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:31:17.711 [DEBUG] [Thread-3643] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:31:17.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:31:17.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:31:17.712 [DEBUG] [Thread-3643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:31:17.713 [DEBUG] [Thread-3643] [transport.py] [_log()] userauth is OK
2025-11-25T18:31:17.713 [DEBUG] [Thread-3643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:31:17.713 [DEBUG] [Thread-3643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:31:17.713 [DEBUG] [Thread-3643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:31:17.713 [DEBUG] [Thread-3643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:31:17.730 [INFO] [Thread-3643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:31:17.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:31:18.503 [DEBUG] [Thread-3643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:31:18.503 [DEBUG] [Thread-3643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:31:18.504 [DEBUG] [Thread-3643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:31:18.544 [DEBUG] [Thread-3643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:31:18.544 [DEBUG] [Thread-3643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:31:18.547 [DEBUG] [Thread-3643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:31:18.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:31:18.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:31:18.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:31:18.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:31:18.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:31:18.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:31:18.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:31:18.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:31:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:31:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.687947 -999.00  +26.50  17.11     11   -5.80 1 1 1 1 1   887    0 32.10 -29.24 ----- 15.3 17.1 324.6 20.1 29.7 -32.5 30.4 -32.0 30.9 -30.3 30.9 -31.6
2025-11-25T18:31:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:31:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:31:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.687947
2025-11-25T18:31:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:31:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:31:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:31:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:31:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:31:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:31:12', tmtdew=39.75, humidity=6.16, cloud=0.0, wind=14.98, temperature=26.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:30:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:31:18.571 [DEBUG] [Thread-3643] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:31:18.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:31:18.670 [DEBUG] [Thread-3646] [transport.py] [_log()] starting thread (client mode): 0x70d3b6d0
2025-11-25T18:31:18.670 [DEBUG] [Thread-3646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:31:18.688 [DEBUG] [Thread-3646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:31:18.688 [INFO] [Thread-3646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:31:18.695 [DEBUG] [Thread-3646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] client lang: <none>
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] server lang: <none>
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] kex follows: False
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:31:18.696 [DEBUG] [Thread-3646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:31:18.697 [DEBUG] [Thread-3646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:31:18.697 [DEBUG] [Thread-3646] [transport.py] [_log()] Compression: none
2025-11-25T18:31:18.697 [DEBUG] [Thread-3646] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:31:18.755 [DEBUG] [Thread-3646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:31:18.755 [DEBUG] [Thread-3646] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:31:18.756 [DEBUG] [Thread-3646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:31:18.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:31:18.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:31:18.822 [DEBUG] [Thread-3646] [transport.py] [_log()] userauth is OK
2025-11-25T18:31:18.822 [DEBUG] [Thread-3646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:31:18.822 [DEBUG] [Thread-3646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:31:18.822 [DEBUG] [Thread-3646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:31:18.822 [DEBUG] [Thread-3646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:31:18.842 [INFO] [Thread-3646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:31:18.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:31:18.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:31:19.660 [DEBUG] [Thread-3646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:31:19.661 [DEBUG] [Thread-3646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:31:19.711 [DEBUG] [Thread-3646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:31:19.712 [DEBUG] [Thread-3646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:31:19.720 [DEBUG] [Thread-3646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:31:19.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:31:19.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:31:19.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:31:19.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:31:19.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:31:19.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:31:19.754 [DEBUG] [Thread-3646] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:31:24.755 [DEBUG] [Thread-3648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:31:29.016 [DEBUG] [Thread-3649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:31:39.806 [DEBUG] [Thread-3650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:31:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:31:49.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:31:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:31:50.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 31, 44), 39.75, 6.19, 0.0, 12.99, 26.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:31:50.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:31:44
2025-11-25T18:31:50.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:31:50.714 [DEBUG] [Thread-3651] [transport.py] [_log()] starting thread (client mode): 0x7378f550
2025-11-25T18:31:50.714 [DEBUG] [Thread-3651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:31:50.735 [DEBUG] [Thread-3651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:31:50.735 [INFO] [Thread-3651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:31:50.738 [DEBUG] [Thread-3651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:31:50.738 [DEBUG] [Thread-3651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:31:50.738 [DEBUG] [Thread-3651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] client lang: <none>
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] server lang: <none>
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] kex follows: False
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] Compression: none
2025-11-25T18:31:50.739 [DEBUG] [Thread-3651] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:31:50.756 [DEBUG] [Thread-3651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:31:50.757 [DEBUG] [Thread-3651] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:31:50.757 [DEBUG] [Thread-3651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:31:50.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:31:50.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:31:50.759 [DEBUG] [Thread-3651] [transport.py] [_log()] userauth is OK
2025-11-25T18:31:50.760 [DEBUG] [Thread-3651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:31:50.760 [DEBUG] [Thread-3651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:31:50.760 [DEBUG] [Thread-3651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:31:50.760 [DEBUG] [Thread-3651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:31:50.784 [INFO] [Thread-3651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:31:50.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:31:51.412 [DEBUG] [Thread-3651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:31:51.413 [DEBUG] [Thread-3651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:31:51.413 [DEBUG] [Thread-3651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:31:51.454 [DEBUG] [Thread-3651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:31:51.454 [DEBUG] [Thread-3651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:31:51.458 [DEBUG] [Thread-3651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:31:51.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:31:51.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:31:51.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:31:51.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:31:51.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:31:51.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:31:51.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:31:51.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:31:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:31:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.688294 -999.00  +26.50  12.91     11   -5.70 1 1 1 1 1   887    0 32.05 -27.37 ----- 13.6 12.9 314.2 16.3 29.6 -32.4 30.3 -32.0 30.9 -31.6 30.8 -31.7
2025-11-25T18:31:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:31:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:31:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.688294
2025-11-25T18:31:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:31:51.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:31:51.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:31:51.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:31:51.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:31:51.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:31:44', tmtdew=39.75, humidity=6.19, cloud=0.0, wind=12.99, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:31:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:31:51.485 [DEBUG] [Thread-3651] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:31:51.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:31:51.579 [DEBUG] [Thread-3654] [transport.py] [_log()] starting thread (client mode): 0x70d0d870
2025-11-25T18:31:51.579 [DEBUG] [Thread-3654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:31:51.596 [DEBUG] [Thread-3654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:31:51.597 [INFO] [Thread-3654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:31:51.604 [DEBUG] [Thread-3654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:31:51.604 [DEBUG] [Thread-3654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:31:51.605 [DEBUG] [Thread-3654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:31:51.605 [DEBUG] [Thread-3654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:31:51.605 [DEBUG] [Thread-3654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:31:51.605 [DEBUG] [Thread-3654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:31:51.605 [DEBUG] [Thread-3654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:31:51.605 [DEBUG] [Thread-3654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:31:51.605 [DEBUG] [Thread-3654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:31:51.605 [DEBUG] [Thread-3654] [transport.py] [_log()] client lang: <none>
2025-11-25T18:31:51.606 [DEBUG] [Thread-3654] [transport.py] [_log()] server lang: <none>
2025-11-25T18:31:51.606 [DEBUG] [Thread-3654] [transport.py] [_log()] kex follows: False
2025-11-25T18:31:51.606 [DEBUG] [Thread-3654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:31:51.606 [DEBUG] [Thread-3654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:31:51.606 [DEBUG] [Thread-3654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:31:51.606 [DEBUG] [Thread-3654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:31:51.606 [DEBUG] [Thread-3654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:31:51.606 [DEBUG] [Thread-3654] [transport.py] [_log()] Compression: none
2025-11-25T18:31:51.607 [DEBUG] [Thread-3654] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:31:51.664 [DEBUG] [Thread-3654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:31:51.665 [DEBUG] [Thread-3654] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:31:51.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:31:51.666 [DEBUG] [Thread-3654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:31:51.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:31:51.723 [DEBUG] [Thread-3654] [transport.py] [_log()] userauth is OK
2025-11-25T18:31:51.723 [DEBUG] [Thread-3654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:31:51.723 [DEBUG] [Thread-3654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:31:51.723 [DEBUG] [Thread-3654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:31:51.723 [DEBUG] [Thread-3654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:31:51.743 [INFO] [Thread-3654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:31:51.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:31:51.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:31:52.609 [DEBUG] [Thread-3654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:31:52.609 [DEBUG] [Thread-3654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:31:52.658 [DEBUG] [Thread-3654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:31:52.658 [DEBUG] [Thread-3654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:31:52.667 [DEBUG] [Thread-3654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:31:52.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:31:52.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:31:52.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:31:52.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:31:52.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:31:52.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:31:52.703 [DEBUG] [Thread-3654] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:31:54.839 [DEBUG] [Thread-3656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:32:09.898 [DEBUG] [Thread-3657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:32:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:32:22.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:32:22.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:32:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 32, 16), 39.67, 6.23, 0.0, 12.19, 26.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:32:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:32:16
2025-11-25T18:32:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:32:23.644 [DEBUG] [Thread-3658] [transport.py] [_log()] starting thread (client mode): 0x70d2b670
2025-11-25T18:32:23.645 [DEBUG] [Thread-3658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:32:23.664 [DEBUG] [Thread-3658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:32:23.665 [INFO] [Thread-3658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] client lang: <none>
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] server lang: <none>
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] kex follows: False
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] Compression: none
2025-11-25T18:32:23.668 [DEBUG] [Thread-3658] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:32:23.685 [DEBUG] [Thread-3658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:32:23.685 [DEBUG] [Thread-3658] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:32:23.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:32:23.686 [DEBUG] [Thread-3658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:32:23.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:32:23.688 [DEBUG] [Thread-3658] [transport.py] [_log()] userauth is OK
2025-11-25T18:32:23.688 [DEBUG] [Thread-3658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:32:23.689 [DEBUG] [Thread-3658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:32:23.689 [DEBUG] [Thread-3658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:32:23.689 [DEBUG] [Thread-3658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:32:23.704 [INFO] [Thread-3658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:32:23.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:32:24.421 [DEBUG] [Thread-3658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:32:24.421 [DEBUG] [Thread-3658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:32:24.421 [DEBUG] [Thread-3658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:32:24.462 [DEBUG] [Thread-3658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:32:24.462 [DEBUG] [Thread-3658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:32:24.465 [DEBUG] [Thread-3658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:32:24.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:32:24.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:32:24.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:32:24.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:32:24.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:32:24.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:32:24.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:32:24.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:32:24.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:32:24.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.688642 -999.00  +26.50  11.90     11   -5.80 1 1 1 1 1   887    0 31.80 -27.48 ----- 13.6 11.9 288.0 17.5 29.6 -32.4 30.2 -31.9 30.8 -30.4 30.7 -31.5
2025-11-25T18:32:24.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:32:24.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:32:24.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.688642
2025-11-25T18:32:24.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:32:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:32:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:32:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:32:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:32:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:32:16', tmtdew=39.67, humidity=6.23, cloud=0.0, wind=12.19, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:31:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:32:24.486 [DEBUG] [Thread-3658] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:32:24.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:32:24.587 [DEBUG] [Thread-3661] [transport.py] [_log()] starting thread (client mode): 0x70d00850
2025-11-25T18:32:24.587 [DEBUG] [Thread-3661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:32:24.604 [DEBUG] [Thread-3661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:32:24.604 [INFO] [Thread-3661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:32:24.615 [DEBUG] [Thread-3661] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:32:24.615 [DEBUG] [Thread-3661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] client lang: <none>
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] server lang: <none>
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] kex follows: False
2025-11-25T18:32:24.616 [DEBUG] [Thread-3661] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:32:24.617 [DEBUG] [Thread-3661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:32:24.617 [DEBUG] [Thread-3661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:32:24.617 [DEBUG] [Thread-3661] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:32:24.617 [DEBUG] [Thread-3661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:32:24.617 [DEBUG] [Thread-3661] [transport.py] [_log()] Compression: none
2025-11-25T18:32:24.617 [DEBUG] [Thread-3661] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:32:24.675 [DEBUG] [Thread-3661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:32:24.676 [DEBUG] [Thread-3661] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:32:24.676 [DEBUG] [Thread-3661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:32:24.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:32:24.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:32:24.732 [DEBUG] [Thread-3661] [transport.py] [_log()] userauth is OK
2025-11-25T18:32:24.732 [DEBUG] [Thread-3661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:32:24.732 [DEBUG] [Thread-3661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:32:24.732 [DEBUG] [Thread-3661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:32:24.732 [DEBUG] [Thread-3661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:32:24.753 [INFO] [Thread-3661] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:32:24.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:32:24.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:32:24.931 [DEBUG] [Thread-3663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:32:25.696 [DEBUG] [Thread-3661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:32:25.696 [DEBUG] [Thread-3661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:32:25.744 [DEBUG] [Thread-3661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:32:25.744 [DEBUG] [Thread-3661] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:32:25.754 [DEBUG] [Thread-3661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:32:25.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:32:25.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:32:25.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:32:25.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:32:25.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:32:25.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:32:25.792 [DEBUG] [Thread-3661] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:32:29.761 [DEBUG] [Thread-3664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:32:39.993 [DEBUG] [Thread-3665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:32:55.027 [DEBUG] [Thread-3666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:32:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:32:55.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:32:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:32:56.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 32, 48), 39.61, 6.24, 0.0, 10.57, 26.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:32:56.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:32:48
2025-11-25T18:32:56.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:32:56.773 [DEBUG] [Thread-3667] [transport.py] [_log()] starting thread (client mode): 0x70d2a4a0
2025-11-25T18:32:56.773 [DEBUG] [Thread-3667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:32:56.793 [DEBUG] [Thread-3667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:32:56.793 [INFO] [Thread-3667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] client lang: <none>
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] server lang: <none>
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] kex follows: False
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:32:56.796 [DEBUG] [Thread-3667] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:32:56.797 [DEBUG] [Thread-3667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:32:56.797 [DEBUG] [Thread-3667] [transport.py] [_log()] Compression: none
2025-11-25T18:32:56.797 [DEBUG] [Thread-3667] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:32:56.813 [DEBUG] [Thread-3667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:32:56.813 [DEBUG] [Thread-3667] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:32:56.813 [DEBUG] [Thread-3667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:32:56.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:32:56.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:32:56.814 [DEBUG] [Thread-3667] [transport.py] [_log()] userauth is OK
2025-11-25T18:32:56.814 [DEBUG] [Thread-3667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:32:56.814 [DEBUG] [Thread-3667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:32:56.814 [DEBUG] [Thread-3667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:32:56.814 [DEBUG] [Thread-3667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:32:56.825 [INFO] [Thread-3667] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:32:56.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:32:57.482 [DEBUG] [Thread-3667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:32:57.482 [DEBUG] [Thread-3667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:32:57.483 [DEBUG] [Thread-3667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:32:57.523 [DEBUG] [Thread-3667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:32:57.523 [DEBUG] [Thread-3667] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:32:57.527 [DEBUG] [Thread-3667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:32:57.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:32:57.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:32:57.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:32:57.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:32:57.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:32:57.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:32:57.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:32:57.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:32:57.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:32:57.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.689336 -999.00  +26.50  10.56     11   -5.70 1 1 1 1 1   887    0 32.06 -25.42 ----- 9.1 10.6 310.4 13.1 29.5 -32.1 30.1 -31.4 30.7 -29.6 30.6 -31.4
2025-11-25T18:32:57.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:32:57.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:32:57.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.689336
2025-11-25T18:32:57.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:32:57.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:32:57.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:32:57.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:32:57.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:32:57.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:32:48', tmtdew=39.61, humidity=6.24, cloud=0.0, wind=10.57, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:32:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:32:57.555 [DEBUG] [Thread-3667] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:32:57.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:32:57.660 [DEBUG] [Thread-3670] [transport.py] [_log()] starting thread (client mode): 0x70d2b760
2025-11-25T18:32:57.661 [DEBUG] [Thread-3670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:32:57.675 [DEBUG] [Thread-3670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:32:57.675 [INFO] [Thread-3670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:32:57.683 [DEBUG] [Thread-3670] [transport.py] [_log()] client lang: <none>
2025-11-25T18:32:57.684 [DEBUG] [Thread-3670] [transport.py] [_log()] server lang: <none>
2025-11-25T18:32:57.684 [DEBUG] [Thread-3670] [transport.py] [_log()] kex follows: False
2025-11-25T18:32:57.684 [DEBUG] [Thread-3670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:32:57.684 [DEBUG] [Thread-3670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:32:57.684 [DEBUG] [Thread-3670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:32:57.684 [DEBUG] [Thread-3670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:32:57.684 [DEBUG] [Thread-3670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:32:57.684 [DEBUG] [Thread-3670] [transport.py] [_log()] Compression: none
2025-11-25T18:32:57.684 [DEBUG] [Thread-3670] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:32:57.743 [DEBUG] [Thread-3670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:32:57.743 [DEBUG] [Thread-3670] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:32:57.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:32:57.745 [DEBUG] [Thread-3670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:32:57.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:32:57.799 [DEBUG] [Thread-3670] [transport.py] [_log()] userauth is OK
2025-11-25T18:32:57.800 [DEBUG] [Thread-3670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:32:57.800 [DEBUG] [Thread-3670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:32:57.800 [DEBUG] [Thread-3670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:32:57.800 [DEBUG] [Thread-3670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:32:57.819 [INFO] [Thread-3670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:32:57.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:32:57.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:32:58.667 [DEBUG] [Thread-3670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:32:58.667 [DEBUG] [Thread-3670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:32:58.716 [DEBUG] [Thread-3670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:32:58.716 [DEBUG] [Thread-3670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:32:58.725 [DEBUG] [Thread-3670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:32:58.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:32: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')
2025-11-25T18:32:58.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:32:58.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:32:58.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:32:58.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:32:58.762 [DEBUG] [Thread-3670] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:33:10.063 [DEBUG] [Thread-3672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:33:25.118 [DEBUG] [Thread-3673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:33:28.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:33:28.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:33:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:33:29.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 33, 20), 39.69, 6.19, 0.0, 10.2, 26.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:33:29.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:33:20
2025-11-25T18:33:29.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:33:29.766 [DEBUG] [Thread-3674] [transport.py] [_log()] starting thread (client mode): 0x73780cd0
2025-11-25T18:33:29.766 [DEBUG] [Thread-3674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:33:29.795 [DEBUG] [Thread-3674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:33:29.795 [INFO] [Thread-3674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] client lang: <none>
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] server lang: <none>
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] kex follows: False
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] Compression: none
2025-11-25T18:33:29.797 [DEBUG] [Thread-3674] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:33:29.806 [DEBUG] [Thread-3674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:33:29.806 [DEBUG] [Thread-3674] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:33:29.806 [DEBUG] [Thread-3674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:33:29.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:33:29.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:33:29.807 [DEBUG] [Thread-3674] [transport.py] [_log()] userauth is OK
2025-11-25T18:33:29.807 [DEBUG] [Thread-3674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:33:29.807 [DEBUG] [Thread-3674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:33:29.807 [DEBUG] [Thread-3674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:33:29.807 [DEBUG] [Thread-3674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:33:29.820 [INFO] [Thread-3674] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:33:29.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:33:30.305 [DEBUG] [Thread-3676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:33:30.361 [DEBUG] [Thread-3674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:33:30.361 [DEBUG] [Thread-3674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:33:30.362 [DEBUG] [Thread-3674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:33:30.402 [DEBUG] [Thread-3674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:33:30.402 [DEBUG] [Thread-3674] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:33:30.406 [DEBUG] [Thread-3674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:33:30.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:33:30.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:33:30.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:33:30.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:33:30.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:33:30.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:33:30.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.689683 -999.00  +26.60   9.58     11   -5.70 1 1 1 1 1   887    0 32.03 -23.73 ----- 9.9 9.6 281.1 12.5 29.6 -31.9 30.1 -31.5 30.7 -30.0 30.6 -31.2
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.689683
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:33:30.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:33:30.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:33:30.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:33:20', tmtdew=39.69, humidity=6.19, cloud=0.0, wind=10.2, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:33:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:33:30.423 [DEBUG] [Thread-3674] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:33:30.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:33:30.506 [DEBUG] [Thread-3678] [transport.py] [_log()] starting thread (client mode): 0x737834f0
2025-11-25T18:33:30.507 [DEBUG] [Thread-3678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:33:30.520 [DEBUG] [Thread-3678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:33:30.520 [INFO] [Thread-3678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:33:30.527 [DEBUG] [Thread-3678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:33:30.527 [DEBUG] [Thread-3678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:33:30.527 [DEBUG] [Thread-3678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] client lang: <none>
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] server lang: <none>
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] kex follows: False
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] Compression: none
2025-11-25T18:33:30.528 [DEBUG] [Thread-3678] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:33:30.585 [DEBUG] [Thread-3678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:33:30.585 [DEBUG] [Thread-3678] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:33:30.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:33:30.586 [DEBUG] [Thread-3678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:33:30.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:33:30.642 [DEBUG] [Thread-3678] [transport.py] [_log()] userauth is OK
2025-11-25T18:33:30.642 [DEBUG] [Thread-3678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:33:30.642 [DEBUG] [Thread-3678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:33:30.642 [DEBUG] [Thread-3678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:33:30.642 [DEBUG] [Thread-3678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:33:30.660 [INFO] [Thread-3678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:33:30.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:33:30.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:33:31.467 [DEBUG] [Thread-3678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:33:31.467 [DEBUG] [Thread-3678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:33:31.515 [DEBUG] [Thread-3678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:33:31.515 [DEBUG] [Thread-3678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:33:31.523 [DEBUG] [Thread-3678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:33:31.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:33:31.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:33:31.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:33:31.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:33:31.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:33:31.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:33:31.554 [DEBUG] [Thread-3678] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:33:40.148 [DEBUG] [Thread-3680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:33:55.197 [DEBUG] [Thread-3681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:34:01.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:34:01.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:34:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:34:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 33, 52), 39.62, 6.21, 0.0, 14.82, 26.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:34:02.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:33:52
2025-11-25T18:34:02.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:34:02.515 [DEBUG] [Thread-3682] [transport.py] [_log()] starting thread (client mode): 0x70d3aa40
2025-11-25T18:34:02.515 [DEBUG] [Thread-3682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:34:02.536 [DEBUG] [Thread-3682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:34:02.536 [INFO] [Thread-3682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:34:02.539 [DEBUG] [Thread-3682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:34:02.539 [DEBUG] [Thread-3682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:34:02.539 [DEBUG] [Thread-3682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:34:02.539 [DEBUG] [Thread-3682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] client lang: <none>
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] server lang: <none>
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] kex follows: False
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:34:02.540 [DEBUG] [Thread-3682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:34:02.541 [DEBUG] [Thread-3682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:34:02.541 [DEBUG] [Thread-3682] [transport.py] [_log()] Compression: none
2025-11-25T18:34:02.541 [DEBUG] [Thread-3682] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:34:02.560 [DEBUG] [Thread-3682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:34:02.561 [DEBUG] [Thread-3682] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:34:02.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:34:02.563 [DEBUG] [Thread-3682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:34:02.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:34:02.564 [DEBUG] [Thread-3682] [transport.py] [_log()] userauth is OK
2025-11-25T18:34:02.565 [DEBUG] [Thread-3682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:34:02.565 [DEBUG] [Thread-3682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:34:02.565 [DEBUG] [Thread-3682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:34:02.565 [DEBUG] [Thread-3682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:34:02.589 [INFO] [Thread-3682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:34:02.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:34:03.223 [DEBUG] [Thread-3682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:34:03.223 [DEBUG] [Thread-3682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:34:03.223 [DEBUG] [Thread-3682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:34:03.264 [DEBUG] [Thread-3682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:34:03.264 [DEBUG] [Thread-3682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:34:03.268 [DEBUG] [Thread-3682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:34:03.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:34:03.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:34:03.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:34:03.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:34:03.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:34:03.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:34:03.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:34:03.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:34:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:34:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.690030 -999.00  +26.70   8.80     11   -5.60 1 1 1 1 1   887    0 31.17 -23.39 ----- 7.9 8.8 316.6 12.2 29.6 -32.3 30.1 -31.6 30.7 -29.6 30.6 -31.0
2025-11-25T18:34:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:34:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:34:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.690030
2025-11-25T18:34:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:34:03.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:34:03.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:34:03.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:34:03.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:34:03.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:33:52', tmtdew=39.62, humidity=6.21, cloud=0.0, wind=14.82, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:33:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:34:03.295 [DEBUG] [Thread-3682] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:34:03.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:34:03.385 [DEBUG] [Thread-3685] [transport.py] [_log()] starting thread (client mode): 0x70d380d0
2025-11-25T18:34:03.385 [DEBUG] [Thread-3685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:34:03.399 [DEBUG] [Thread-3685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:34:03.399 [INFO] [Thread-3685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:34:03.407 [DEBUG] [Thread-3685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:34:03.407 [DEBUG] [Thread-3685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:34:03.407 [DEBUG] [Thread-3685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:34:03.407 [DEBUG] [Thread-3685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:34:03.408 [DEBUG] [Thread-3685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:34:03.408 [DEBUG] [Thread-3685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:34:03.408 [DEBUG] [Thread-3685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:34:03.408 [DEBUG] [Thread-3685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:34:03.408 [DEBUG] [Thread-3685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:34:03.408 [DEBUG] [Thread-3685] [transport.py] [_log()] client lang: <none>
2025-11-25T18:34:03.408 [DEBUG] [Thread-3685] [transport.py] [_log()] server lang: <none>
2025-11-25T18:34:03.408 [DEBUG] [Thread-3685] [transport.py] [_log()] kex follows: False
2025-11-25T18:34:03.408 [DEBUG] [Thread-3685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:34:03.409 [DEBUG] [Thread-3685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:34:03.409 [DEBUG] [Thread-3685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:34:03.409 [DEBUG] [Thread-3685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:34:03.409 [DEBUG] [Thread-3685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:34:03.409 [DEBUG] [Thread-3685] [transport.py] [_log()] Compression: none
2025-11-25T18:34:03.409 [DEBUG] [Thread-3685] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:34:03.470 [DEBUG] [Thread-3685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:34:03.471 [DEBUG] [Thread-3685] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:34:03.472 [DEBUG] [Thread-3685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:34:03.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:34:03.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:34:03.532 [DEBUG] [Thread-3685] [transport.py] [_log()] userauth is OK
2025-11-25T18:34:03.532 [DEBUG] [Thread-3685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:34:03.532 [DEBUG] [Thread-3685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:34:03.532 [DEBUG] [Thread-3685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:34:03.532 [DEBUG] [Thread-3685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:34:03.551 [INFO] [Thread-3685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:34:03.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:34:03.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:34:04.391 [DEBUG] [Thread-3685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:34:04.392 [DEBUG] [Thread-3685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:34:04.440 [DEBUG] [Thread-3685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:34:04.440 [DEBUG] [Thread-3685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:34:04.449 [DEBUG] [Thread-3685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:34:04.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:34: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')
2025-11-25T18:34: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
2025-11-25T18:34:04.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:34:04.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:34:04.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:34:04.488 [DEBUG] [Thread-3685] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:34:10.229 [DEBUG] [Thread-3687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:34:25.270 [DEBUG] [Thread-3688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:34:31.014 [DEBUG] [Thread-3689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:34:34.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:34:34.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:34:34.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:34:35.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 34, 24), 39.62, 6.21, 0.0, 13.43, 26.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:34:35.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:34:24
2025-11-25T18:34:35.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:34:35.463 [DEBUG] [Thread-3690] [transport.py] [_log()] starting thread (client mode): 0x70d28d30
2025-11-25T18:34:35.464 [DEBUG] [Thread-3690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:34:35.484 [DEBUG] [Thread-3690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:34:35.484 [INFO] [Thread-3690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] client lang: <none>
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] server lang: <none>
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] kex follows: False
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] Compression: none
2025-11-25T18:34:35.488 [DEBUG] [Thread-3690] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:34:35.506 [DEBUG] [Thread-3690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:34:35.506 [DEBUG] [Thread-3690] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:34:35.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:34:35.508 [DEBUG] [Thread-3690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:34:35.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:34:35.510 [DEBUG] [Thread-3690] [transport.py] [_log()] userauth is OK
2025-11-25T18:34:35.510 [DEBUG] [Thread-3690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:34:35.510 [DEBUG] [Thread-3690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:34:35.510 [DEBUG] [Thread-3690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:34:35.510 [DEBUG] [Thread-3690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:34:35.534 [INFO] [Thread-3690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:34:35.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:34:36.288 [DEBUG] [Thread-3690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:34:36.288 [DEBUG] [Thread-3690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:34:36.288 [DEBUG] [Thread-3690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:34:36.331 [DEBUG] [Thread-3690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:34:36.331 [DEBUG] [Thread-3690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:34:36.334 [DEBUG] [Thread-3690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:34:36.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:34:36.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:34:36.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:34:36.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:34:36.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:34:36.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:34:36.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:34:36.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.690378 -999.00  +26.50  11.28     11   -5.90 1 1 1 1 1   887    0 31.19 -20.09 ----- 11.1 11.3 310.0 16.6 29.5 -32.3 30.0 -31.9 30.6 -30.6 30.6 -31.8
2025-11-25T18:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.690378
2025-11-25T18:34:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:34:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:34:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:34:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:34:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:34:36.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:34:24', tmtdew=39.62, humidity=6.21, cloud=0.0, wind=13.43, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:34:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:34:36.359 [DEBUG] [Thread-3690] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:34:36.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:34:36.458 [DEBUG] [Thread-3693] [transport.py] [_log()] starting thread (client mode): 0x70d026b0
2025-11-25T18:34:36.458 [DEBUG] [Thread-3693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:34:36.472 [DEBUG] [Thread-3693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:34:36.472 [INFO] [Thread-3693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:34:36.480 [DEBUG] [Thread-3693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:34:36.480 [DEBUG] [Thread-3693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:34:36.480 [DEBUG] [Thread-3693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:34:36.480 [DEBUG] [Thread-3693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:34:36.480 [DEBUG] [Thread-3693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:34:36.480 [DEBUG] [Thread-3693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:34:36.481 [DEBUG] [Thread-3693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:34:36.481 [DEBUG] [Thread-3693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:34:36.481 [DEBUG] [Thread-3693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:34:36.481 [DEBUG] [Thread-3693] [transport.py] [_log()] client lang: <none>
2025-11-25T18:34:36.481 [DEBUG] [Thread-3693] [transport.py] [_log()] server lang: <none>
2025-11-25T18:34:36.481 [DEBUG] [Thread-3693] [transport.py] [_log()] kex follows: False
2025-11-25T18:34:36.481 [DEBUG] [Thread-3693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:34:36.481 [DEBUG] [Thread-3693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:34:36.481 [DEBUG] [Thread-3693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:34:36.482 [DEBUG] [Thread-3693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:34:36.482 [DEBUG] [Thread-3693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:34:36.482 [DEBUG] [Thread-3693] [transport.py] [_log()] Compression: none
2025-11-25T18:34:36.482 [DEBUG] [Thread-3693] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:34:36.540 [DEBUG] [Thread-3693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:34:36.540 [DEBUG] [Thread-3693] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:34:36.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:34:36.541 [DEBUG] [Thread-3693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:34:36.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:34:36.596 [DEBUG] [Thread-3693] [transport.py] [_log()] userauth is OK
2025-11-25T18:34:36.596 [DEBUG] [Thread-3693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:34:36.596 [DEBUG] [Thread-3693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:34:36.596 [DEBUG] [Thread-3693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:34:36.596 [DEBUG] [Thread-3693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:34:36.615 [INFO] [Thread-3693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:34:36.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:34:36.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:34:37.440 [DEBUG] [Thread-3693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:34:37.441 [DEBUG] [Thread-3693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:34:37.490 [DEBUG] [Thread-3693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:34:37.490 [DEBUG] [Thread-3693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:34:37.500 [DEBUG] [Thread-3693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:34:37.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:34:37.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:34:37.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:34:37.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:34:37.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:34:37.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:34:37.537 [DEBUG] [Thread-3693] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:34:40.307 [DEBUG] [Thread-3695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:34:55.360 [DEBUG] [Thread-3696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:35:07.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:35:07.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:35: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
2025-11-25T18:35:08.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 34, 56), 39.66, 6.19, 0.0, 13.2, 26.69, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:35:08.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:34:56
2025-11-25T18:35:08.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:35:08.507 [DEBUG] [Thread-3697] [transport.py] [_log()] starting thread (client mode): 0x70d2a320
2025-11-25T18:35:08.507 [DEBUG] [Thread-3697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:35:08.528 [DEBUG] [Thread-3697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:35:08.528 [INFO] [Thread-3697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] client lang: <none>
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] server lang: <none>
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] kex follows: False
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:35:08.531 [DEBUG] [Thread-3697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:35:08.532 [DEBUG] [Thread-3697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:35:08.532 [DEBUG] [Thread-3697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:35:08.532 [DEBUG] [Thread-3697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:35:08.532 [DEBUG] [Thread-3697] [transport.py] [_log()] Compression: none
2025-11-25T18:35:08.532 [DEBUG] [Thread-3697] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:35:08.549 [DEBUG] [Thread-3697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:35:08.549 [DEBUG] [Thread-3697] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:35:08.550 [DEBUG] [Thread-3697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:35:08.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:35:08.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:35:08.552 [DEBUG] [Thread-3697] [transport.py] [_log()] userauth is OK
2025-11-25T18:35:08.552 [DEBUG] [Thread-3697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:35:08.552 [DEBUG] [Thread-3697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:35:08.552 [DEBUG] [Thread-3697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:35:08.552 [DEBUG] [Thread-3697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:35:08.575 [INFO] [Thread-3697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:35:08.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:35:10.396 [DEBUG] [Thread-3699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:35:12.295 [DEBUG] [Thread-3697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:35:12.295 [DEBUG] [Thread-3697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:35:12.295 [DEBUG] [Thread-3697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:35:12.336 [DEBUG] [Thread-3697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:35:12.336 [DEBUG] [Thread-3697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:35:12.338 [DEBUG] [Thread-3697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:35:12.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:35:12.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:35:12.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:35:12.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:35:12.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:35:12.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:35:12.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:35:12.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:35:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:35:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.690725 -999.00  +26.40  13.45     11   -5.70 1 1 1 1 1   887    0 32.32 -15.51 ----- 10.4 13.4 318.2 14.9 29.4 -32.3 30.0 -31.6 30.5 -30.4 30.4 -31.4
2025-11-25T18:35:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:35:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:35:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.690725
2025-11-25T18:35:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:35:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:35:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:35:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:35:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:35:12.418 [DEBUG] [Thread-3697] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:35:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:34:56', tmtdew=39.66, humidity=6.19, cloud=0.0, wind=13.2, temperature=26.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:34:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:35:12.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:35:12.514 [DEBUG] [Thread-3701] [transport.py] [_log()] starting thread (client mode): 0x7374cd60
2025-11-25T18:35:12.514 [DEBUG] [Thread-3701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:35:12.529 [DEBUG] [Thread-3701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:35:12.530 [INFO] [Thread-3701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:35:12.537 [DEBUG] [Thread-3701] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:35:12.538 [DEBUG] [Thread-3701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:35:12.538 [DEBUG] [Thread-3701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:35:12.538 [DEBUG] [Thread-3701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:35:12.538 [DEBUG] [Thread-3701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:35:12.538 [DEBUG] [Thread-3701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:35:12.538 [DEBUG] [Thread-3701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:35:12.538 [DEBUG] [Thread-3701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:35:12.538 [DEBUG] [Thread-3701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:35:12.539 [DEBUG] [Thread-3701] [transport.py] [_log()] client lang: <none>
2025-11-25T18:35:12.539 [DEBUG] [Thread-3701] [transport.py] [_log()] server lang: <none>
2025-11-25T18:35:12.539 [DEBUG] [Thread-3701] [transport.py] [_log()] kex follows: False
2025-11-25T18:35:12.539 [DEBUG] [Thread-3701] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:35:12.539 [DEBUG] [Thread-3701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:35:12.539 [DEBUG] [Thread-3701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:35:12.539 [DEBUG] [Thread-3701] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:35:12.540 [DEBUG] [Thread-3701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:35:12.540 [DEBUG] [Thread-3701] [transport.py] [_log()] Compression: none
2025-11-25T18:35:12.540 [DEBUG] [Thread-3701] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:35:12.597 [DEBUG] [Thread-3701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:35:12.597 [DEBUG] [Thread-3701] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:35:12.598 [DEBUG] [Thread-3701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:35:12.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:35:12.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:35:12.656 [DEBUG] [Thread-3701] [transport.py] [_log()] userauth is OK
2025-11-25T18:35:12.656 [DEBUG] [Thread-3701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:35:12.656 [DEBUG] [Thread-3701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:35:12.657 [DEBUG] [Thread-3701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:35:12.657 [DEBUG] [Thread-3701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:35:12.675 [INFO] [Thread-3701] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:35:12.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:35:12.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:35:13.490 [DEBUG] [Thread-3701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:35:13.491 [DEBUG] [Thread-3701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:35:13.539 [DEBUG] [Thread-3701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:35:13.539 [DEBUG] [Thread-3701] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:35:13.548 [DEBUG] [Thread-3701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:35:13.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:35:13.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:35:13.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:35:13.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:35:13.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:35:13.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:35:13.585 [DEBUG] [Thread-3701] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:35:25.429 [DEBUG] [Thread-3703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:35:31.770 [DEBUG] [Thread-3704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:35:40.470 [DEBUG] [Thread-3705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:35:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:35:43.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:35:43.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:35:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 35, 28), 39.59, 6.23, 0.0, 13.34, 26.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:35:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:35:28
2025-11-25T18:35:44.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:35:44.550 [DEBUG] [Thread-3706] [transport.py] [_log()] starting thread (client mode): 0x737c5ff0
2025-11-25T18:35:44.550 [DEBUG] [Thread-3706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:35:44.572 [DEBUG] [Thread-3706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:35:44.572 [INFO] [Thread-3706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:35:44.575 [DEBUG] [Thread-3706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:35:44.575 [DEBUG] [Thread-3706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:35:44.575 [DEBUG] [Thread-3706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:35:44.575 [DEBUG] [Thread-3706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:35:44.575 [DEBUG] [Thread-3706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:35:44.575 [DEBUG] [Thread-3706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:35:44.575 [DEBUG] [Thread-3706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:35:44.575 [DEBUG] [Thread-3706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:35:44.575 [DEBUG] [Thread-3706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] client lang: <none>
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] server lang: <none>
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] kex follows: False
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] Compression: none
2025-11-25T18:35:44.576 [DEBUG] [Thread-3706] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:35:44.601 [DEBUG] [Thread-3706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:35:44.601 [DEBUG] [Thread-3706] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:35:44.602 [DEBUG] [Thread-3706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:35:44.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:35:44.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:35:44.604 [DEBUG] [Thread-3706] [transport.py] [_log()] userauth is OK
2025-11-25T18:35:44.604 [DEBUG] [Thread-3706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:35:44.604 [DEBUG] [Thread-3706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:35:44.604 [DEBUG] [Thread-3706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:35:44.604 [DEBUG] [Thread-3706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:35:44.628 [INFO] [Thread-3706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:35:44.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:35:45.251 [DEBUG] [Thread-3706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:35:45.251 [DEBUG] [Thread-3706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:35:45.252 [DEBUG] [Thread-3706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:35:45.292 [DEBUG] [Thread-3706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:35:45.292 [DEBUG] [Thread-3706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:35:45.295 [DEBUG] [Thread-3706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:35:45.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:35:45.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:35:45.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:35:45.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:35:45.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:35:45.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:35:45.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:35:45.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:35:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:35:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.691072 -999.00  +26.50   7.63     11   -5.70 1 1 1 1 1   887    0 31.91 -14.23 ----- 10.2 7.6 6.0 14.9 29.4 -32.0 30.0 -31.4 30.5 -29.6 30.4 -31.2
2025-11-25T18:35:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:35:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:35:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.691072
2025-11-25T18:35:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:35:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:35:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:35:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:35:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:35:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:35:28', tmtdew=39.59, humidity=6.23, cloud=0.0, wind=13.34, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:35:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:35:45.314 [DEBUG] [Thread-3706] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:35:45.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:35:45.400 [DEBUG] [Thread-3709] [transport.py] [_log()] starting thread (client mode): 0x70d295d0
2025-11-25T18:35:45.400 [DEBUG] [Thread-3709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:35:45.413 [DEBUG] [Thread-3709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:35:45.413 [INFO] [Thread-3709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] client lang: <none>
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] server lang: <none>
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] kex follows: False
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:35:45.421 [DEBUG] [Thread-3709] [transport.py] [_log()] Compression: none
2025-11-25T18:35:45.422 [DEBUG] [Thread-3709] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:35:45.478 [DEBUG] [Thread-3709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:35:45.478 [DEBUG] [Thread-3709] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:35:45.478 [DEBUG] [Thread-3709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:35:45.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:35:45.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:35:45.535 [DEBUG] [Thread-3709] [transport.py] [_log()] userauth is OK
2025-11-25T18:35:45.536 [DEBUG] [Thread-3709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:35:45.536 [DEBUG] [Thread-3709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:35:45.536 [DEBUG] [Thread-3709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:35:45.536 [DEBUG] [Thread-3709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:35:45.551 [INFO] [Thread-3709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:35:45.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:35:45.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:35:46.342 [DEBUG] [Thread-3709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:35:46.342 [DEBUG] [Thread-3709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:35:46.390 [DEBUG] [Thread-3709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:35:46.390 [DEBUG] [Thread-3709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:35:46.399 [DEBUG] [Thread-3709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:35:46.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:35:46.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:35:46.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:35:46.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:35:46.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:35:46.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:35:46.436 [DEBUG] [Thread-3709] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:35:55.508 [DEBUG] [Thread-3711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:36:10.560 [DEBUG] [Thread-3712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:36:16.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:36:16.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:36:16.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
2025-11-25T18:36:17.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 36), 39.85, 6.19, 0.0, 17.13, 26.86, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:36:17.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:36:00
2025-11-25T18:36:17.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:36:17.402 [DEBUG] [Thread-3713] [transport.py] [_log()] starting thread (client mode): 0x7378ee90
2025-11-25T18:36:17.402 [DEBUG] [Thread-3713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:36:17.423 [DEBUG] [Thread-3713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:36:17.423 [INFO] [Thread-3713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:36:17.426 [DEBUG] [Thread-3713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:36:17.426 [DEBUG] [Thread-3713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:36:17.426 [DEBUG] [Thread-3713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:36:17.426 [DEBUG] [Thread-3713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] client lang: <none>
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] server lang: <none>
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] kex follows: False
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:36:17.427 [DEBUG] [Thread-3713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:36:17.428 [DEBUG] [Thread-3713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:36:17.428 [DEBUG] [Thread-3713] [transport.py] [_log()] Compression: none
2025-11-25T18:36:17.428 [DEBUG] [Thread-3713] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:36:17.445 [DEBUG] [Thread-3713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:36:17.446 [DEBUG] [Thread-3713] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:36:17.446 [DEBUG] [Thread-3713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:36:17.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:36:17.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:36:17.448 [DEBUG] [Thread-3713] [transport.py] [_log()] userauth is OK
2025-11-25T18:36:17.448 [DEBUG] [Thread-3713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:36:17.448 [DEBUG] [Thread-3713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:36:17.448 [DEBUG] [Thread-3713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:36:17.448 [DEBUG] [Thread-3713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:36:17.467 [INFO] [Thread-3713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:36:17.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:36:18.091 [DEBUG] [Thread-3713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:36:18.091 [DEBUG] [Thread-3713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:36:18.092 [DEBUG] [Thread-3713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:36:18.132 [DEBUG] [Thread-3713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:36:18.132 [DEBUG] [Thread-3713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:36:18.136 [DEBUG] [Thread-3713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:36:18.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:36:18.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:36:18.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:36:18.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:36:18.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:36:18.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:36:18.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:36:18.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:36:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:36:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.691419 -999.00  +26.60  10.77     11   -5.70 1 1 1 1 1   887    0 31.56 -13.37 ----- 11.2 10.8 335.4 15.2 29.4 -32.0 29.9 -32.0 30.5 -30.0 30.4 -31.3
2025-11-25T18:36:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:36:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:36:18.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.691419
2025-11-25T18:36:18.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:36:18.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:36:18.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:36:18.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:36:18.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:36:18.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:36:00', tmtdew=39.85, humidity=6.19, cloud=0.0, wind=17.13, temperature=26.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:35:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:36:18.158 [DEBUG] [Thread-3713] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:36:18.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:36:18.254 [DEBUG] [Thread-3716] [transport.py] [_log()] starting thread (client mode): 0x70d1c4f0
2025-11-25T18:36:18.255 [DEBUG] [Thread-3716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:36:18.268 [DEBUG] [Thread-3716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:36:18.269 [INFO] [Thread-3716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:36:18.276 [DEBUG] [Thread-3716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:36:18.276 [DEBUG] [Thread-3716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:36:18.276 [DEBUG] [Thread-3716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:36:18.276 [DEBUG] [Thread-3716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:36:18.276 [DEBUG] [Thread-3716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] client lang: <none>
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] server lang: <none>
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] kex follows: False
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] Compression: none
2025-11-25T18:36:18.277 [DEBUG] [Thread-3716] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:36:18.336 [DEBUG] [Thread-3716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:36:18.337 [DEBUG] [Thread-3716] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:36:18.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:36:18.338 [DEBUG] [Thread-3716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:36:18.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:36:18.393 [DEBUG] [Thread-3716] [transport.py] [_log()] userauth is OK
2025-11-25T18:36:18.393 [DEBUG] [Thread-3716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:36:18.393 [DEBUG] [Thread-3716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:36:18.393 [DEBUG] [Thread-3716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:36:18.393 [DEBUG] [Thread-3716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:36:18.412 [INFO] [Thread-3716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:36:18.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:36:18.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:36:19.236 [DEBUG] [Thread-3716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:36:19.237 [DEBUG] [Thread-3716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:36:19.285 [DEBUG] [Thread-3716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:36:19.285 [DEBUG] [Thread-3716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:36:19.294 [DEBUG] [Thread-3716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:36:19.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:36:19.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:36:19.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:36:19.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:36:19.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:36:19.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:36:19.332 [DEBUG] [Thread-3716] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:36:25.597 [DEBUG] [Thread-3718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:36:32.273 [DEBUG] [Thread-3719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:36:40.647 [DEBUG] [Thread-3720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:36:49.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:36:49.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:36:49.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:36:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 36, 32), 39.93, 6.18, 0.0, 17.61, 27.01, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:36:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:36:32
2025-11-25T18:36:50.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:36:50.257 [DEBUG] [Thread-3721] [transport.py] [_log()] starting thread (client mode): 0x737c7970
2025-11-25T18:36:50.257 [DEBUG] [Thread-3721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:36:50.277 [DEBUG] [Thread-3721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:36:50.277 [INFO] [Thread-3721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:36:50.280 [DEBUG] [Thread-3721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] client lang: <none>
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] server lang: <none>
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] kex follows: False
2025-11-25T18:36:50.281 [DEBUG] [Thread-3721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:36:50.282 [DEBUG] [Thread-3721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:36:50.282 [DEBUG] [Thread-3721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:36:50.282 [DEBUG] [Thread-3721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:36:50.282 [DEBUG] [Thread-3721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:36:50.282 [DEBUG] [Thread-3721] [transport.py] [_log()] Compression: none
2025-11-25T18:36:50.282 [DEBUG] [Thread-3721] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:36:50.299 [DEBUG] [Thread-3721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:36:50.300 [DEBUG] [Thread-3721] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:36:50.301 [DEBUG] [Thread-3721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:36:50.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:36:50.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:36:50.303 [DEBUG] [Thread-3721] [transport.py] [_log()] userauth is OK
2025-11-25T18:36:50.303 [DEBUG] [Thread-3721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:36:50.303 [DEBUG] [Thread-3721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:36:50.303 [DEBUG] [Thread-3721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:36:50.303 [DEBUG] [Thread-3721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:36:50.328 [INFO] [Thread-3721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:36:50.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:36:50.969 [DEBUG] [Thread-3721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:36:50.970 [DEBUG] [Thread-3721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:36:50.970 [DEBUG] [Thread-3721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:36:51.011 [DEBUG] [Thread-3721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:36:51.011 [DEBUG] [Thread-3721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:36:51.014 [DEBUG] [Thread-3721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:36:51.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:36:51.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:36:51.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:36:51.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:36:51.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:36:51.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:36:51.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:36:51.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:36:51.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:36:51.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.691767 -999.00  +26.60   9.71     11   -5.80 1 1 1 1 1   887    0 31.95 -10.83 ----- 14.2 9.7 9.4 18.5 29.3 -32.3 29.8 -32.4 30.5 -30.2 30.3 -31.8
2025-11-25T18:36:51.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:36:51.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:36:51.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.691767
2025-11-25T18:36:51.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:36:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:36:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:36:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:36:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:36:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:36:32', tmtdew=39.93, humidity=6.18, cloud=0.0, wind=17.61, temperature=27.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:36:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:36:51.043 [DEBUG] [Thread-3721] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:36:51.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:36:51.147 [DEBUG] [Thread-3724] [transport.py] [_log()] starting thread (client mode): 0x7374df30
2025-11-25T18:36:51.147 [DEBUG] [Thread-3724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:36:51.163 [DEBUG] [Thread-3724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:36:51.163 [INFO] [Thread-3724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:36:51.170 [DEBUG] [Thread-3724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] client lang: <none>
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] server lang: <none>
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] kex follows: False
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] Compression: none
2025-11-25T18:36:51.171 [DEBUG] [Thread-3724] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:36:51.229 [DEBUG] [Thread-3724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:36:51.230 [DEBUG] [Thread-3724] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:36:51.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:36:51.231 [DEBUG] [Thread-3724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:36:51.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:36:51.285 [DEBUG] [Thread-3724] [transport.py] [_log()] userauth is OK
2025-11-25T18:36:51.285 [DEBUG] [Thread-3724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:36:51.285 [DEBUG] [Thread-3724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:36:51.285 [DEBUG] [Thread-3724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:36:51.285 [DEBUG] [Thread-3724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:36:51.304 [INFO] [Thread-3724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:36:51.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:36:51.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:36:52.222 [DEBUG] [Thread-3724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:36:52.222 [DEBUG] [Thread-3724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:36:52.270 [DEBUG] [Thread-3724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:36:52.270 [DEBUG] [Thread-3724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:36:52.279 [DEBUG] [Thread-3724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:36:52.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:36: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')
2025-11-25T18:36:52.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:36:52.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:36:52.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:36:52.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:36:52.314 [DEBUG] [Thread-3724] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:36:55.687 [DEBUG] [Thread-3726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:37:10.740 [DEBUG] [Thread-3727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:37:22.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:37:22.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:37:22.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:37:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 37, 4), 40.01, 6.13, 0.0, 14.17, 26.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:37:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:37:04
2025-11-25T18:37:23.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:37:23.276 [DEBUG] [Thread-3728] [transport.py] [_log()] starting thread (client mode): 0x737c7970
2025-11-25T18:37:23.276 [DEBUG] [Thread-3728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:37:23.296 [DEBUG] [Thread-3728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:37:23.296 [INFO] [Thread-3728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:37:23.297 [DEBUG] [Thread-3728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] client lang: <none>
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] server lang: <none>
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] kex follows: False
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] Compression: none
2025-11-25T18:37:23.298 [DEBUG] [Thread-3728] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:37:23.315 [DEBUG] [Thread-3728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:37:23.316 [DEBUG] [Thread-3728] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:37:23.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:37:23.317 [DEBUG] [Thread-3728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:37:23.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:37:23.319 [DEBUG] [Thread-3728] [transport.py] [_log()] userauth is OK
2025-11-25T18:37:23.319 [DEBUG] [Thread-3728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:37:23.319 [DEBUG] [Thread-3728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:37:23.319 [DEBUG] [Thread-3728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:37:23.319 [DEBUG] [Thread-3728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:37:23.360 [INFO] [Thread-3728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:37:23.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:37:23.998 [DEBUG] [Thread-3728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:37:23.998 [DEBUG] [Thread-3728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:37:23.999 [DEBUG] [Thread-3728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:37:24.039 [DEBUG] [Thread-3728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:37:24.039 [DEBUG] [Thread-3728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:37:24.043 [DEBUG] [Thread-3728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:37:24.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:37:24.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:37:24.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:37:24.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:37:24.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:37:24.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:37:24.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:37:24.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:37:24.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:37:24.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.692114 -999.00  +26.50  11.84     11   -5.90 1 1 1 1 1   887    0 32.08 -8.83 ----- 11.9 11.8 344.2 23.2 29.2 -32.4 29.8 -32.3 30.4 -30.4 30.2 -31.8
2025-11-25T18:37:24.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:37:24.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:37:24.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.692114
2025-11-25T18:37:24.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:37:24.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:37:24.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:37:24.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:37:24.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:37:24.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:37:04', tmtdew=40.01, humidity=6.13, cloud=0.0, wind=14.17, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:36:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:37:24.069 [DEBUG] [Thread-3728] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:37:24.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:37:24.165 [DEBUG] [Thread-3731] [transport.py] [_log()] starting thread (client mode): 0x70d02890
2025-11-25T18:37:24.165 [DEBUG] [Thread-3731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:37:24.180 [DEBUG] [Thread-3731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:37:24.180 [INFO] [Thread-3731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:37:24.189 [DEBUG] [Thread-3731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] client lang: <none>
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] server lang: <none>
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] kex follows: False
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:37:24.190 [DEBUG] [Thread-3731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:37:24.191 [DEBUG] [Thread-3731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:37:24.191 [DEBUG] [Thread-3731] [transport.py] [_log()] Compression: none
2025-11-25T18:37:24.191 [DEBUG] [Thread-3731] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:37:24.255 [DEBUG] [Thread-3731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:37:24.256 [DEBUG] [Thread-3731] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:37:24.256 [DEBUG] [Thread-3731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:37:24.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:37:24.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:37:24.320 [DEBUG] [Thread-3731] [transport.py] [_log()] userauth is OK
2025-11-25T18:37:24.321 [DEBUG] [Thread-3731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:37:24.321 [DEBUG] [Thread-3731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:37:24.321 [DEBUG] [Thread-3731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:37:24.321 [DEBUG] [Thread-3731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:37:24.340 [INFO] [Thread-3731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:37:24.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:37:24.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:37:25.189 [DEBUG] [Thread-3731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:37:25.190 [DEBUG] [Thread-3731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:37:25.237 [DEBUG] [Thread-3731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:37:25.237 [DEBUG] [Thread-3731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:37:25.246 [DEBUG] [Thread-3731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:37:25.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:37:25.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:37:25.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:37:25.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:37:25.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:37:25.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:37:25.283 [DEBUG] [Thread-3731] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:37:25.778 [DEBUG] [Thread-3733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:37:33.015 [DEBUG] [Thread-3734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:37:40.834 [DEBUG] [Thread-3735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:37:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:37:55.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:37:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:37:55.864 [DEBUG] [Thread-3736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:37:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 37, 36), 40.11, 6.09, 0.0, 13.41, 26.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:37:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:37:36
2025-11-25T18:37:56.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:37:56.218 [DEBUG] [Thread-3737] [transport.py] [_log()] starting thread (client mode): 0x737c5420
2025-11-25T18:37:56.218 [DEBUG] [Thread-3737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:37:56.238 [DEBUG] [Thread-3737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:37:56.238 [INFO] [Thread-3737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:37:56.242 [DEBUG] [Thread-3737] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:37:56.242 [DEBUG] [Thread-3737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:37:56.242 [DEBUG] [Thread-3737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:37:56.242 [DEBUG] [Thread-3737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:37:56.242 [DEBUG] [Thread-3737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:37:56.242 [DEBUG] [Thread-3737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:37:56.242 [DEBUG] [Thread-3737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:37:56.242 [DEBUG] [Thread-3737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] client lang: <none>
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] server lang: <none>
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] kex follows: False
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] Compression: none
2025-11-25T18:37:56.243 [DEBUG] [Thread-3737] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:37:56.261 [DEBUG] [Thread-3737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:37:56.262 [DEBUG] [Thread-3737] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:37:56.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:37:56.263 [DEBUG] [Thread-3737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:37:56.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:37:56.265 [DEBUG] [Thread-3737] [transport.py] [_log()] userauth is OK
2025-11-25T18:37:56.266 [DEBUG] [Thread-3737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:37:56.266 [DEBUG] [Thread-3737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:37:56.266 [DEBUG] [Thread-3737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:37:56.266 [DEBUG] [Thread-3737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:37:56.289 [INFO] [Thread-3737] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:37:56.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:37:56.929 [DEBUG] [Thread-3737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:37:56.929 [DEBUG] [Thread-3737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:37:56.929 [DEBUG] [Thread-3737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:37:56.970 [DEBUG] [Thread-3737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:37:56.970 [DEBUG] [Thread-3737] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:37:56.974 [DEBUG] [Thread-3737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:37:56.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:37:56.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:37:56.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:37:56.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:37:56.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:37:56.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:37:56.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:37:56.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:37:56.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:37:56.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.692808 -999.00  +26.20  14.34     11   -6.10 1 1 1 1 1   887    0 31.80 -8.80 ----- 13.4 14.3 337.7 20.3 29.0 -32.8 29.5 -32.3 30.2 -30.0 29.9 -31.3
2025-11-25T18:37:56.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:37:56.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:37:56.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.692808
2025-11-25T18:37:56.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:37:57.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:37:57.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:37:57.000 [DEBUG] [Thread-3737] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:37:57.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:37:57.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:37:57.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:37:36', tmtdew=40.11, humidity=6.09, cloud=0.0, wind=13.41, temperature=26.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:37:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:37:57.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:37:57.097 [DEBUG] [Thread-3740] [transport.py] [_log()] starting thread (client mode): 0x7374e590
2025-11-25T18:37:57.097 [DEBUG] [Thread-3740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:37:57.114 [DEBUG] [Thread-3740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:37:57.114 [INFO] [Thread-3740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:37:57.121 [DEBUG] [Thread-3740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] client lang: <none>
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] server lang: <none>
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] kex follows: False
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:37:57.122 [DEBUG] [Thread-3740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:37:57.123 [DEBUG] [Thread-3740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:37:57.123 [DEBUG] [Thread-3740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:37:57.123 [DEBUG] [Thread-3740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:37:57.123 [DEBUG] [Thread-3740] [transport.py] [_log()] Compression: none
2025-11-25T18:37:57.123 [DEBUG] [Thread-3740] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:37:57.181 [DEBUG] [Thread-3740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:37:57.181 [DEBUG] [Thread-3740] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:37:57.182 [DEBUG] [Thread-3740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:37:57.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:37:57.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:37:57.237 [DEBUG] [Thread-3740] [transport.py] [_log()] userauth is OK
2025-11-25T18:37:57.238 [DEBUG] [Thread-3740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:37:57.238 [DEBUG] [Thread-3740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:37:57.238 [DEBUG] [Thread-3740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:37:57.238 [DEBUG] [Thread-3740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:37:57.257 [INFO] [Thread-3740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:37:57.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:37:57.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:37:58.135 [DEBUG] [Thread-3740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:37:58.135 [DEBUG] [Thread-3740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:37:58.183 [DEBUG] [Thread-3740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:37:58.183 [DEBUG] [Thread-3740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:37:58.193 [DEBUG] [Thread-3740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:37:58.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:37:58.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:37:58.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:37:58.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:37:58.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:37:58.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:37:58.231 [DEBUG] [Thread-3740] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:38:10.901 [DEBUG] [Thread-3742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:38:25.953 [DEBUG] [Thread-3743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:38:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:38:28.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:38:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:38:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 38, 8), 40.11, 6.09, 0.0, 11.58, 26.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:38:28.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:38:08
2025-11-25T18:38:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:38:29.223 [DEBUG] [Thread-3744] [transport.py] [_log()] starting thread (client mode): 0x70d1c370
2025-11-25T18:38:29.223 [DEBUG] [Thread-3744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:38:29.246 [DEBUG] [Thread-3744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:38:29.246 [INFO] [Thread-3744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] client lang: <none>
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] server lang: <none>
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] kex follows: False
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] Compression: none
2025-11-25T18:38:29.249 [DEBUG] [Thread-3744] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:38:29.264 [DEBUG] [Thread-3744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:38:29.264 [DEBUG] [Thread-3744] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:38:29.264 [DEBUG] [Thread-3744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:38:29.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:38:29.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:38:29.265 [DEBUG] [Thread-3744] [transport.py] [_log()] userauth is OK
2025-11-25T18:38:29.265 [DEBUG] [Thread-3744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:38:29.265 [DEBUG] [Thread-3744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:38:29.265 [DEBUG] [Thread-3744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:38:29.265 [DEBUG] [Thread-3744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:38:29.274 [INFO] [Thread-3744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:38:29.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:38:29.919 [DEBUG] [Thread-3744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:38:29.919 [DEBUG] [Thread-3744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:38:29.919 [DEBUG] [Thread-3744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:38:29.960 [DEBUG] [Thread-3744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:38:29.960 [DEBUG] [Thread-3744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:38:29.962 [DEBUG] [Thread-3744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:38:29.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:38:29.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:38:29.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:38:29.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:38:29.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:38:29.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:38:29.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.693155 -999.00  +26.20   8.92     11   -6.00 1 1 1 1 1   887    0 32.09 -9.71 ----- 15.1 8.9 351.1 15.3 29.0 -32.0 29.5 -31.6 30.2 -30.2 29.9 -31.3
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.693155
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:38:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:38:08', tmtdew=40.11, humidity=6.09, cloud=0.0, wind=11.58, temperature=26.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:38:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:38:29.981 [DEBUG] [Thread-3744] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:38:30.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:38:33.527 [DEBUG] [Thread-3747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:38:40.984 [DEBUG] [Thread-3748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:38:56.027 [DEBUG] [Thread-3749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:39:11.060 [DEBUG] [Thread-3750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:39:26.097 [DEBUG] [Thread-3751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:39:34.262 [DEBUG] [Thread-3752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:39:41.132 [DEBUG] [Thread-3753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:39:56.164 [DEBUG] [Thread-3754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:40:11.201 [DEBUG] [Thread-3755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:40:26.234 [DEBUG] [Thread-3756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:40:34.784 [DEBUG] [Thread-3757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:40:41.272 [DEBUG] [Thread-3758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:40:42.445 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T18:40:56.307 [DEBUG] [Thread-3759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:41:11.341 [DEBUG] [Thread-3760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:41:12.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:41:12.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:41:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:41:13.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 40, 48), 39.59, 6.23, 0.0, 12.26, 26.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:41:13.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:40:48
2025-11-25T18:41:13.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:41:13.418 [DEBUG] [Thread-3761] [transport.py] [_log()] starting thread (client mode): 0x70d412d0
2025-11-25T18:41:13.418 [DEBUG] [Thread-3761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:41:13.436 [DEBUG] [Thread-3761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:41:13.436 [INFO] [Thread-3761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:41:13.439 [DEBUG] [Thread-3761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:41:13.439 [DEBUG] [Thread-3761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:41:13.439 [DEBUG] [Thread-3761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:41:13.439 [DEBUG] [Thread-3761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:41:13.439 [DEBUG] [Thread-3761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:41:13.439 [DEBUG] [Thread-3761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:41:13.439 [DEBUG] [Thread-3761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] client lang: <none>
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] server lang: <none>
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] kex follows: False
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] Compression: none
2025-11-25T18:41:13.440 [DEBUG] [Thread-3761] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:41:13.458 [DEBUG] [Thread-3761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:41:13.459 [DEBUG] [Thread-3761] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:41:13.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:41:13.460 [DEBUG] [Thread-3761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:41:13.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:41:13.462 [DEBUG] [Thread-3761] [transport.py] [_log()] userauth is OK
2025-11-25T18:41:13.462 [DEBUG] [Thread-3761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:41:13.462 [DEBUG] [Thread-3761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:41:13.463 [DEBUG] [Thread-3761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:41:13.463 [DEBUG] [Thread-3761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:41:13.486 [INFO] [Thread-3761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:41:13.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:41:14.115 [DEBUG] [Thread-3761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:41:14.115 [DEBUG] [Thread-3761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:41:14.115 [DEBUG] [Thread-3761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:41:14.156 [DEBUG] [Thread-3761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:41:14.156 [DEBUG] [Thread-3761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:41:14.159 [DEBUG] [Thread-3761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:41:14.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:41:14.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:41:14.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:41:14.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:41:14.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:41:14.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:41:14.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:41:14.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:41:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:41:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.694891 -999.00  +26.20   9.14     11   -5.80 1 1 1 1 1   887    0 32.50 -13.12 ----- 9.2 9.1 12.8 12.1 28.8 -31.7 29.4 -31.9 30.0 -29.5 29.8 -31.2
2025-11-25T18:41:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:41:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:41:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.694891
2025-11-25T18:41:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:41:14.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:41:14.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:41:14.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:41:14.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:41:14.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:40:48', tmtdew=39.59, humidity=6.23, cloud=0.0, wind=12.26, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:40:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:41:14.187 [DEBUG] [Thread-3761] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:41:14.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:41:14.282 [DEBUG] [Thread-3764] [transport.py] [_log()] starting thread (client mode): 0x737c7940
2025-11-25T18:41:14.283 [DEBUG] [Thread-3764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:41:14.299 [DEBUG] [Thread-3764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:41:14.299 [INFO] [Thread-3764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:41:14.306 [DEBUG] [Thread-3764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:41:14.306 [DEBUG] [Thread-3764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:41:14.306 [DEBUG] [Thread-3764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:41:14.306 [DEBUG] [Thread-3764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:41:14.306 [DEBUG] [Thread-3764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:41:14.306 [DEBUG] [Thread-3764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] client lang: <none>
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] server lang: <none>
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] kex follows: False
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] Compression: none
2025-11-25T18:41:14.307 [DEBUG] [Thread-3764] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:41:14.367 [DEBUG] [Thread-3764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:41:14.368 [DEBUG] [Thread-3764] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:41:14.368 [DEBUG] [Thread-3764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:41:14.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:41:14.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:41:14.423 [DEBUG] [Thread-3764] [transport.py] [_log()] userauth is OK
2025-11-25T18:41:14.423 [DEBUG] [Thread-3764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:41:14.423 [DEBUG] [Thread-3764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:41:14.423 [DEBUG] [Thread-3764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:41:14.423 [DEBUG] [Thread-3764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:41:14.442 [INFO] [Thread-3764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:41:14.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:41:14.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:41:15.271 [DEBUG] [Thread-3764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:41:15.271 [DEBUG] [Thread-3764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:41:15.318 [DEBUG] [Thread-3764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:41:15.318 [DEBUG] [Thread-3764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:41:15.327 [DEBUG] [Thread-3764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:41:15.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:41:15.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:41:15.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:41:15.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:41:15.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:41:15.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:41:15.363 [DEBUG] [Thread-3764] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:41:26.383 [DEBUG] [Thread-3766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:41:35.530 [DEBUG] [Thread-3767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:41:41.435 [DEBUG] [Thread-3768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:41:45.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:41:45.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:41:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:41:46.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 41, 20), 39.54, 6.26, 0.0, 11.93, 26.46, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:41:46.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:41:20
2025-11-25T18:41:46.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:41:46.330 [DEBUG] [Thread-3769] [transport.py] [_log()] starting thread (client mode): 0x70d41ab0
2025-11-25T18:41:46.330 [DEBUG] [Thread-3769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:41:46.345 [DEBUG] [Thread-3769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:41:46.345 [INFO] [Thread-3769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] client lang: <none>
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] server lang: <none>
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] kex follows: False
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] Compression: none
2025-11-25T18:41:46.348 [DEBUG] [Thread-3769] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:41:46.365 [DEBUG] [Thread-3769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:41:46.366 [DEBUG] [Thread-3769] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:41:46.366 [DEBUG] [Thread-3769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:41:46.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:41:46.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:41:46.368 [DEBUG] [Thread-3769] [transport.py] [_log()] userauth is OK
2025-11-25T18:41:46.368 [DEBUG] [Thread-3769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:41:46.369 [DEBUG] [Thread-3769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:41:46.369 [DEBUG] [Thread-3769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:41:46.369 [DEBUG] [Thread-3769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:41:46.389 [INFO] [Thread-3769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:41:46.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:41:47.026 [DEBUG] [Thread-3769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:41:47.026 [DEBUG] [Thread-3769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:41:47.027 [DEBUG] [Thread-3769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:41:47.068 [DEBUG] [Thread-3769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:41:47.068 [DEBUG] [Thread-3769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:41:47.072 [DEBUG] [Thread-3769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:41:47.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:41:47.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:41:47.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:41:47.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:41:47.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:41:47.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:41:47.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:41:47.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:41:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:41:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.695239 -999.00  +26.20   9.53     11   -5.80 1 1 1 1 1   887    0 31.73 -13.48 ----- 10.6 9.5 27.4 10.9 28.8 -31.5 29.3 -31.8 29.9 -29.8 29.6 -31.1
2025-11-25T18:41:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:41:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:41:47.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.695239
2025-11-25T18:41:47.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:41:47.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:41:47.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:41:47.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:41:47.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:41:47.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:41:20', tmtdew=39.54, humidity=6.26, cloud=0.0, wind=11.93, temperature=26.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:41:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:41:47.100 [DEBUG] [Thread-3769] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:41:47.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:41:47.196 [DEBUG] [Thread-3772] [transport.py] [_log()] starting thread (client mode): 0x70d41360
2025-11-25T18:41:47.196 [DEBUG] [Thread-3772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:41:47.211 [DEBUG] [Thread-3772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:41:47.211 [INFO] [Thread-3772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] client lang: <none>
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] server lang: <none>
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] kex follows: False
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:41:47.219 [DEBUG] [Thread-3772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:41:47.220 [DEBUG] [Thread-3772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:41:47.220 [DEBUG] [Thread-3772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:41:47.220 [DEBUG] [Thread-3772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:41:47.220 [DEBUG] [Thread-3772] [transport.py] [_log()] Compression: none
2025-11-25T18:41:47.220 [DEBUG] [Thread-3772] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:41:47.279 [DEBUG] [Thread-3772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:41:47.279 [DEBUG] [Thread-3772] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:41:47.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:41:47.280 [DEBUG] [Thread-3772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:41:47.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:41:47.335 [DEBUG] [Thread-3772] [transport.py] [_log()] userauth is OK
2025-11-25T18:41:47.335 [DEBUG] [Thread-3772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:41:47.336 [DEBUG] [Thread-3772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:41:47.336 [DEBUG] [Thread-3772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:41:47.336 [DEBUG] [Thread-3772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:41:47.354 [INFO] [Thread-3772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:41:47.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:41:47.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:41:48.198 [DEBUG] [Thread-3772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:41:48.198 [DEBUG] [Thread-3772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:41:48.246 [DEBUG] [Thread-3772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:41:48.246 [DEBUG] [Thread-3772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:41:48.255 [DEBUG] [Thread-3772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:41:48.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:41:48.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:41:48.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:41:48.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:41:48.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:41:48.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:41:48.290 [DEBUG] [Thread-3772] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:41:56.472 [DEBUG] [Thread-3774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:42:11.518 [DEBUG] [Thread-3775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:42:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:42:18.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:42:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:42:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 41, 52), 39.41, 6.29, 0.0, 9.56, 26.43, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:42:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:41:52
2025-11-25T18:42:19.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:42:19.272 [DEBUG] [Thread-3776] [transport.py] [_log()] starting thread (client mode): 0x70d40610
2025-11-25T18:42:19.272 [DEBUG] [Thread-3776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:42:19.291 [DEBUG] [Thread-3776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:42:19.291 [INFO] [Thread-3776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] client lang: <none>
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] server lang: <none>
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] kex follows: False
2025-11-25T18:42:19.294 [DEBUG] [Thread-3776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:42:19.295 [DEBUG] [Thread-3776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:42:19.295 [DEBUG] [Thread-3776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:42:19.295 [DEBUG] [Thread-3776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:42:19.295 [DEBUG] [Thread-3776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:42:19.295 [DEBUG] [Thread-3776] [transport.py] [_log()] Compression: none
2025-11-25T18:42:19.295 [DEBUG] [Thread-3776] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:42:19.311 [DEBUG] [Thread-3776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:42:19.312 [DEBUG] [Thread-3776] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:42:19.312 [DEBUG] [Thread-3776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:42:19.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:42:19.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:42:19.314 [DEBUG] [Thread-3776] [transport.py] [_log()] userauth is OK
2025-11-25T18:42:19.314 [DEBUG] [Thread-3776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:42:19.315 [DEBUG] [Thread-3776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:42:19.315 [DEBUG] [Thread-3776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:42:19.315 [DEBUG] [Thread-3776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:42:19.332 [INFO] [Thread-3776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:42:19.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:42:19.981 [DEBUG] [Thread-3776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:42:19.981 [DEBUG] [Thread-3776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:42:19.981 [DEBUG] [Thread-3776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:42:20.022 [DEBUG] [Thread-3776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:42:20.022 [DEBUG] [Thread-3776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:42:20.025 [DEBUG] [Thread-3776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:42:20.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:42:20.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:42:20.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:42:20.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:42:20.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:42:20.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:42:20.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:42:20.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:42:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:42:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.695586 -999.00  +26.20  10.92     11   -5.80 1 1 1 1 1   887    0 32.05 -15.21 ----- 10.3 10.9 8.2 11.7 28.7 -31.8 29.3 -31.5 29.9 -29.6 29.6 -31.2
2025-11-25T18:42:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:42:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:42:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.695586
2025-11-25T18:42:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:42:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:42:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:42:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:42:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:42:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:41:52', tmtdew=39.41, humidity=6.29, cloud=0.0, wind=9.56, temperature=26.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:41:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:42:20.052 [DEBUG] [Thread-3776] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:42:20.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:42:20.148 [DEBUG] [Thread-3779] [transport.py] [_log()] starting thread (client mode): 0x7376d810
2025-11-25T18:42:20.148 [DEBUG] [Thread-3779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:42:20.164 [DEBUG] [Thread-3779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:42:20.164 [INFO] [Thread-3779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:42:20.172 [DEBUG] [Thread-3779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:42:20.172 [DEBUG] [Thread-3779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:42:20.172 [DEBUG] [Thread-3779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:42:20.172 [DEBUG] [Thread-3779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:42:20.173 [DEBUG] [Thread-3779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:42:20.173 [DEBUG] [Thread-3779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:42:20.173 [DEBUG] [Thread-3779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:42:20.173 [DEBUG] [Thread-3779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:42:20.173 [DEBUG] [Thread-3779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:42:20.173 [DEBUG] [Thread-3779] [transport.py] [_log()] client lang: <none>
2025-11-25T18:42:20.173 [DEBUG] [Thread-3779] [transport.py] [_log()] server lang: <none>
2025-11-25T18:42:20.173 [DEBUG] [Thread-3779] [transport.py] [_log()] kex follows: False
2025-11-25T18:42:20.173 [DEBUG] [Thread-3779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:42:20.174 [DEBUG] [Thread-3779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:42:20.174 [DEBUG] [Thread-3779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:42:20.174 [DEBUG] [Thread-3779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:42:20.174 [DEBUG] [Thread-3779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:42:20.174 [DEBUG] [Thread-3779] [transport.py] [_log()] Compression: none
2025-11-25T18:42:20.174 [DEBUG] [Thread-3779] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:42:20.232 [DEBUG] [Thread-3779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:42:20.233 [DEBUG] [Thread-3779] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:42:20.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:42:20.235 [DEBUG] [Thread-3779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:42:20.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:42:20.291 [DEBUG] [Thread-3779] [transport.py] [_log()] userauth is OK
2025-11-25T18:42:20.292 [DEBUG] [Thread-3779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:42:20.292 [DEBUG] [Thread-3779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:42:20.292 [DEBUG] [Thread-3779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:42:20.293 [DEBUG] [Thread-3779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:42:20.312 [INFO] [Thread-3779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:42:20.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:42:20.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:42:21.157 [DEBUG] [Thread-3779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:42:21.157 [DEBUG] [Thread-3779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:42:21.205 [DEBUG] [Thread-3779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:42:21.205 [DEBUG] [Thread-3779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:42:21.214 [DEBUG] [Thread-3779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:42:21.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:42:21.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:42:21.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
2025-11-25T18:42:21.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:42:21.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:42:21.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:42:21.252 [DEBUG] [Thread-3779] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:42:26.549 [DEBUG] [Thread-3781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:42:36.269 [DEBUG] [Thread-3782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:42:41.601 [DEBUG] [Thread-3783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:42:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:42:51.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:42:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:42:51.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 42, 24), 39.42, 6.29, 0.0, 10.99, 26.46, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:42:51.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:42:24
2025-11-25T18:42:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:42:52.191 [DEBUG] [Thread-3784] [transport.py] [_log()] starting thread (client mode): 0x70d40fd0
2025-11-25T18:42:52.191 [DEBUG] [Thread-3784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:42:52.211 [DEBUG] [Thread-3784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:42:52.211 [INFO] [Thread-3784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:42:52.214 [DEBUG] [Thread-3784] [transport.py] [_log()] client lang: <none>
2025-11-25T18:42:52.215 [DEBUG] [Thread-3784] [transport.py] [_log()] server lang: <none>
2025-11-25T18:42:52.215 [DEBUG] [Thread-3784] [transport.py] [_log()] kex follows: False
2025-11-25T18:42:52.215 [DEBUG] [Thread-3784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:42:52.215 [DEBUG] [Thread-3784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:42:52.215 [DEBUG] [Thread-3784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:42:52.215 [DEBUG] [Thread-3784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:42:52.215 [DEBUG] [Thread-3784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:42:52.215 [DEBUG] [Thread-3784] [transport.py] [_log()] Compression: none
2025-11-25T18:42:52.215 [DEBUG] [Thread-3784] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:42:52.234 [DEBUG] [Thread-3784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:42:52.235 [DEBUG] [Thread-3784] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:42:52.235 [DEBUG] [Thread-3784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:42:52.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:42:52.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:42:52.276 [DEBUG] [Thread-3784] [transport.py] [_log()] userauth is OK
2025-11-25T18:42:52.277 [DEBUG] [Thread-3784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:42:52.277 [DEBUG] [Thread-3784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:42:52.277 [DEBUG] [Thread-3784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:42:52.277 [DEBUG] [Thread-3784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:42:52.299 [INFO] [Thread-3784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:42:52.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:42:52.923 [DEBUG] [Thread-3784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:42:52.924 [DEBUG] [Thread-3784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:42:52.924 [DEBUG] [Thread-3784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:42:52.965 [DEBUG] [Thread-3784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:42:52.965 [DEBUG] [Thread-3784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:42:52.969 [DEBUG] [Thread-3784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:42:52.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:42:52.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:42:52.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:42:52.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:42:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:42:52.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:42:52.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:42:52.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:42:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:42:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.696280 -999.00  +26.20   8.34     11   -5.80 1 1 1 1 1   887    0 31.83 -16.62 ----- 8.3 8.3 350.8 11.1 28.7 -31.5 29.2 -31.4 29.8 -29.2 29.6 -30.7
2025-11-25T18:42:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:42:52.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:42:52.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.696280
2025-11-25T18:42:52.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:42:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:42:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:42:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:42:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:42:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:42:24', tmtdew=39.42, humidity=6.29, cloud=0.0, wind=10.99, temperature=26.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:42:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:42:52.998 [DEBUG] [Thread-3784] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:42:53.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:42:53.095 [DEBUG] [Thread-3787] [transport.py] [_log()] starting thread (client mode): 0x70d437f0
2025-11-25T18:42:53.095 [DEBUG] [Thread-3787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:42:53.110 [DEBUG] [Thread-3787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:42:53.110 [INFO] [Thread-3787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:42:53.118 [DEBUG] [Thread-3787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:42:53.118 [DEBUG] [Thread-3787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] client lang: <none>
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] server lang: <none>
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] kex follows: False
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:42:53.119 [DEBUG] [Thread-3787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:42:53.120 [DEBUG] [Thread-3787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:42:53.120 [DEBUG] [Thread-3787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:42:53.120 [DEBUG] [Thread-3787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:42:53.120 [DEBUG] [Thread-3787] [transport.py] [_log()] Compression: none
2025-11-25T18:42:53.120 [DEBUG] [Thread-3787] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:42:53.176 [DEBUG] [Thread-3787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:42:53.177 [DEBUG] [Thread-3787] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:42:53.178 [DEBUG] [Thread-3787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:42:53.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:42:53.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:42:53.235 [DEBUG] [Thread-3787] [transport.py] [_log()] userauth is OK
2025-11-25T18:42:53.236 [DEBUG] [Thread-3787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:42:53.236 [DEBUG] [Thread-3787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:42:53.236 [DEBUG] [Thread-3787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:42:53.236 [DEBUG] [Thread-3787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:42:53.254 [INFO] [Thread-3787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:42:53.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:42:53.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:42:54.094 [DEBUG] [Thread-3787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:42:54.094 [DEBUG] [Thread-3787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:42:54.141 [DEBUG] [Thread-3787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:42:54.141 [DEBUG] [Thread-3787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:42:54.150 [DEBUG] [Thread-3787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:42:54.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:42:54.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:42:54.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:42:54.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:42:54.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:42:54.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:42:54.187 [DEBUG] [Thread-3787] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:42:56.639 [DEBUG] [Thread-3789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:43:11.687 [DEBUG] [Thread-3790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:43:24.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:43:24.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:43:24.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:43:24.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 42, 56), 39.47, 6.26, 0.0, 10.29, 26.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:43:24.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:42:56
2025-11-25T18:43:25.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:43:25.209 [DEBUG] [Thread-3791] [transport.py] [_log()] starting thread (client mode): 0x70d43790
2025-11-25T18:43:25.209 [DEBUG] [Thread-3791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:43:25.224 [DEBUG] [Thread-3791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:43:25.224 [INFO] [Thread-3791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] client lang: <none>
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] server lang: <none>
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] kex follows: False
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:43:25.227 [DEBUG] [Thread-3791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:43:25.228 [DEBUG] [Thread-3791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:43:25.228 [DEBUG] [Thread-3791] [transport.py] [_log()] Compression: none
2025-11-25T18:43:25.228 [DEBUG] [Thread-3791] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:43:25.234 [DEBUG] [Thread-3791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:43:25.235 [DEBUG] [Thread-3791] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:43:25.235 [DEBUG] [Thread-3791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:43:25.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:43:25.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:43:25.235 [DEBUG] [Thread-3791] [transport.py] [_log()] userauth is OK
2025-11-25T18:43:25.235 [DEBUG] [Thread-3791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:43:25.235 [DEBUG] [Thread-3791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:43:25.235 [DEBUG] [Thread-3791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:43:25.236 [DEBUG] [Thread-3791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:43:25.251 [INFO] [Thread-3791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:43:25.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:43:25.855 [DEBUG] [Thread-3791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:43:25.855 [DEBUG] [Thread-3791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:43:25.855 [DEBUG] [Thread-3791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:43:25.896 [DEBUG] [Thread-3791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:43:25.896 [DEBUG] [Thread-3791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:43:25.899 [DEBUG] [Thread-3791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:43:25.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:43:25.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:43:25.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:43:25.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:43:25.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:43:25.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:43:25.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.696628 -999.00  +26.20   8.00     11   -5.80 1 1 1 1 1   887    0 31.79 -18.50 ----- 9.3 8.0 17.6 10.9 28.6 -31.5 29.1 -31.7 29.8 -29.6 29.4 -31.5
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.696628
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:43:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:42:56', tmtdew=39.47, humidity=6.26, cloud=0.0, wind=10.29, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:43:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:43:25.918 [DEBUG] [Thread-3791] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:43:25.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:43:26.004 [DEBUG] [Thread-3794] [transport.py] [_log()] starting thread (client mode): 0x70d439d0
2025-11-25T18:43:26.004 [DEBUG] [Thread-3794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:43:26.018 [DEBUG] [Thread-3794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:43:26.018 [INFO] [Thread-3794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] client lang: <none>
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] server lang: <none>
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] kex follows: False
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] Compression: none
2025-11-25T18:43:26.026 [DEBUG] [Thread-3794] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:43:26.082 [DEBUG] [Thread-3794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:43:26.082 [DEBUG] [Thread-3794] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:43:26.082 [DEBUG] [Thread-3794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:43:26.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:43:26.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:43:26.139 [DEBUG] [Thread-3794] [transport.py] [_log()] userauth is OK
2025-11-25T18:43:26.139 [DEBUG] [Thread-3794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:43:26.139 [DEBUG] [Thread-3794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:43:26.139 [DEBUG] [Thread-3794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:43:26.139 [DEBUG] [Thread-3794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:43:26.156 [INFO] [Thread-3794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:43:26.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:43:26.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:43:26.719 [DEBUG] [Thread-3796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:43:27.007 [DEBUG] [Thread-3794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:43:27.007 [DEBUG] [Thread-3794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:43:27.054 [DEBUG] [Thread-3794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:43:27.054 [DEBUG] [Thread-3794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:43:27.063 [DEBUG] [Thread-3794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:43:27.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:43:27.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:43:27.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:43:27.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:43:27.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:43:27.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:43:27.094 [DEBUG] [Thread-3794] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:43:36.769 [DEBUG] [Thread-3797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:43:41.766 [DEBUG] [Thread-3798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:43:56.809 [DEBUG] [Thread-3799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:43:57.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:43:57.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:43:57.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:43:57.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 43, 28), 39.39, 6.31, 0.0, 9.26, 26.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:43:57.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:43:28
2025-11-25T18:43:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:43:58.061 [DEBUG] [Thread-3800] [transport.py] [_log()] starting thread (client mode): 0x7376ca30
2025-11-25T18:43:58.061 [DEBUG] [Thread-3800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:43:58.081 [DEBUG] [Thread-3800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:43:58.081 [INFO] [Thread-3800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] client lang: <none>
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] server lang: <none>
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] kex follows: False
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] Compression: none
2025-11-25T18:43:58.083 [DEBUG] [Thread-3800] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:43:58.100 [DEBUG] [Thread-3800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:43:58.100 [DEBUG] [Thread-3800] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:43:58.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:43:58.101 [DEBUG] [Thread-3800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:43:58.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:43:58.103 [DEBUG] [Thread-3800] [transport.py] [_log()] userauth is OK
2025-11-25T18:43:58.103 [DEBUG] [Thread-3800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:43:58.104 [DEBUG] [Thread-3800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:43:58.104 [DEBUG] [Thread-3800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:43:58.104 [DEBUG] [Thread-3800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:43:58.139 [INFO] [Thread-3800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:43:58.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:43:58.771 [DEBUG] [Thread-3800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:43:58.771 [DEBUG] [Thread-3800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:43:58.772 [DEBUG] [Thread-3800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:43:58.812 [DEBUG] [Thread-3800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:43:58.812 [DEBUG] [Thread-3800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:43:58.815 [DEBUG] [Thread-3800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:43:58.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:43:58.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:43:58.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:43:58.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:43:58.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:43:58.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:43:58.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:43:58.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:43:58.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:43:58.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.696974 -999.00  +26.20  13.26     11   -5.80 1 1 1 1 1   887    0 31.66 -18.78 ----- 14.3 13.3 27.0 14.4 28.6 -31.4 29.1 -31.7 29.8 -29.8 29.5 -32.0
2025-11-25T18:43:58.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:43:58.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:43:58.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.696974
2025-11-25T18:43:58.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:43:58.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:43:58.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:43:58.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:43:58.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:43:58.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:43:28', tmtdew=39.39, humidity=6.31, cloud=0.0, wind=9.26, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:43:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:43:58.842 [DEBUG] [Thread-3800] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:43:58.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:43:58.937 [DEBUG] [Thread-3803] [transport.py] [_log()] starting thread (client mode): 0x7378ee00
2025-11-25T18:43:58.937 [DEBUG] [Thread-3803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:43:58.952 [DEBUG] [Thread-3803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:43:58.952 [INFO] [Thread-3803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] client lang: <none>
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] server lang: <none>
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] kex follows: False
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] Compression: none
2025-11-25T18:43:58.960 [DEBUG] [Thread-3803] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:43:59.020 [DEBUG] [Thread-3803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:43:59.021 [DEBUG] [Thread-3803] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:43:59.021 [DEBUG] [Thread-3803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:43:59.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:43:59.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:43:59.076 [DEBUG] [Thread-3803] [transport.py] [_log()] userauth is OK
2025-11-25T18:43:59.076 [DEBUG] [Thread-3803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:43:59.076 [DEBUG] [Thread-3803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:43:59.077 [DEBUG] [Thread-3803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:43:59.077 [DEBUG] [Thread-3803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:43:59.095 [INFO] [Thread-3803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:43:59.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:43:59.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:43:59.925 [DEBUG] [Thread-3803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:43:59.925 [DEBUG] [Thread-3803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:43:59.974 [DEBUG] [Thread-3803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:43:59.974 [DEBUG] [Thread-3803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:43:59.983 [DEBUG] [Thread-3803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:43:59.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:43:59.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:44:00.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:44:00.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:44:00.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:44:00.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:44:00.020 [DEBUG] [Thread-3803] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:44:11.842 [DEBUG] [Thread-3805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:44:26.896 [DEBUG] [Thread-3806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:44:30.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:44:30.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:44:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:44:30.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 44), 39.36, 6.79, 0.0, 7.57, 26.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:44:30.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:44:00
2025-11-25T18:44:30.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:44:30.980 [DEBUG] [Thread-3807] [transport.py] [_log()] starting thread (client mode): 0x7374f220
2025-11-25T18:44:30.980 [DEBUG] [Thread-3807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:44:31.001 [DEBUG] [Thread-3807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:44:31.001 [INFO] [Thread-3807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:44:31.004 [DEBUG] [Thread-3807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:44:31.004 [DEBUG] [Thread-3807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:44:31.004 [DEBUG] [Thread-3807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:44:31.004 [DEBUG] [Thread-3807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:44:31.004 [DEBUG] [Thread-3807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] client lang: <none>
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] server lang: <none>
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] kex follows: False
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:44:31.005 [DEBUG] [Thread-3807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:44:31.006 [DEBUG] [Thread-3807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:44:31.006 [DEBUG] [Thread-3807] [transport.py] [_log()] Compression: none
2025-11-25T18:44:31.006 [DEBUG] [Thread-3807] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:44:31.025 [DEBUG] [Thread-3807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:44:31.026 [DEBUG] [Thread-3807] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:44:31.027 [DEBUG] [Thread-3807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:44:31.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:44:31.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:44:31.029 [DEBUG] [Thread-3807] [transport.py] [_log()] userauth is OK
2025-11-25T18:44:31.029 [DEBUG] [Thread-3807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:44:31.029 [DEBUG] [Thread-3807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:44:31.029 [DEBUG] [Thread-3807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:44:31.030 [DEBUG] [Thread-3807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:44:31.049 [INFO] [Thread-3807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:44:31.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:44:31.672 [DEBUG] [Thread-3807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:44:31.672 [DEBUG] [Thread-3807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:44:31.673 [DEBUG] [Thread-3807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:44:31.712 [DEBUG] [Thread-3807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:44:31.713 [DEBUG] [Thread-3807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:44:31.716 [DEBUG] [Thread-3807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:44:31.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:44:31.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:44:31.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:44:31.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:44:31.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:44:31.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:44:31.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:44:31.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:44:31.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:44:31.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.697322 -999.00  +26.20   9.72     11   -5.80 1 1 1 1 1   887    0 31.32 -21.67 ----- 8.4 9.7 34.2 15.8 28.6 -31.6 29.1 -31.7 29.6 -29.5 29.4 -30.9
2025-11-25T18:44:31.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:44:31.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:44:31.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.697322
2025-11-25T18:44:31.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:44:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:44:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:44:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:44:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:44:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:44:00', tmtdew=39.36, humidity=6.79, cloud=0.0, wind=7.57, temperature=26.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:44:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:44:31.741 [DEBUG] [Thread-3807] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:44:31.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:44:31.838 [DEBUG] [Thread-3810] [transport.py] [_log()] starting thread (client mode): 0x7374dd80
2025-11-25T18:44:31.838 [DEBUG] [Thread-3810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:44:31.853 [DEBUG] [Thread-3810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:44:31.854 [INFO] [Thread-3810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:44:31.861 [DEBUG] [Thread-3810] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:44:31.861 [DEBUG] [Thread-3810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] client lang: <none>
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] server lang: <none>
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] kex follows: False
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:44:31.862 [DEBUG] [Thread-3810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:44:31.863 [DEBUG] [Thread-3810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:44:31.863 [DEBUG] [Thread-3810] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:44:31.863 [DEBUG] [Thread-3810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:44:31.863 [DEBUG] [Thread-3810] [transport.py] [_log()] Compression: none
2025-11-25T18:44:31.863 [DEBUG] [Thread-3810] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:44:31.920 [DEBUG] [Thread-3810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:44:31.921 [DEBUG] [Thread-3810] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:44:31.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:44:31.922 [DEBUG] [Thread-3810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:44:31.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:44:31.976 [DEBUG] [Thread-3810] [transport.py] [_log()] userauth is OK
2025-11-25T18:44:31.976 [DEBUG] [Thread-3810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:44:31.977 [DEBUG] [Thread-3810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:44:31.977 [DEBUG] [Thread-3810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:44:31.977 [DEBUG] [Thread-3810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:44:31.995 [INFO] [Thread-3810] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:44:31.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:44:31.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:44:32.825 [DEBUG] [Thread-3810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:44:32.825 [DEBUG] [Thread-3810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:44:32.873 [DEBUG] [Thread-3810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:44:32.873 [DEBUG] [Thread-3810] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:44:32.882 [DEBUG] [Thread-3810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:44:32.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:44: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')
2025-11-25T18:44: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
2025-11-25T18:44:32.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:44:32.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:44:32.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:44:32.916 [DEBUG] [Thread-3810] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:44:37.259 [DEBUG] [Thread-3812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:44:41.928 [DEBUG] [Thread-3813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:44:56.977 [DEBUG] [Thread-3814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:45:02.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:45:02.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:45:02.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:45:03.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 44, 32), 39.29, 6.82, 0.0, 7.84, 26.33, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:45:03.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:44:32
2025-11-25T18:45:03.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:45:03.879 [DEBUG] [Thread-3815] [transport.py] [_log()] starting thread (client mode): 0x70d43a60
2025-11-25T18:45:03.879 [DEBUG] [Thread-3815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:45:03.900 [DEBUG] [Thread-3815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:45:03.900 [INFO] [Thread-3815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:45:03.903 [DEBUG] [Thread-3815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] client lang: <none>
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] server lang: <none>
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] kex follows: False
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] Compression: none
2025-11-25T18:45:03.904 [DEBUG] [Thread-3815] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:45:03.919 [DEBUG] [Thread-3815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:45:03.919 [DEBUG] [Thread-3815] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:45:03.919 [DEBUG] [Thread-3815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:45:03.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:45:03.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:45:03.920 [DEBUG] [Thread-3815] [transport.py] [_log()] userauth is OK
2025-11-25T18:45:03.920 [DEBUG] [Thread-3815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:45:03.920 [DEBUG] [Thread-3815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:45:03.920 [DEBUG] [Thread-3815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:45:03.920 [DEBUG] [Thread-3815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:45:03.936 [INFO] [Thread-3815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:45:03.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:45:04.667 [DEBUG] [Thread-3815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:45:04.668 [DEBUG] [Thread-3815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:45:04.668 [DEBUG] [Thread-3815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:45:04.709 [DEBUG] [Thread-3815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:45:04.709 [DEBUG] [Thread-3815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:45:04.712 [DEBUG] [Thread-3815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:45:04.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:45:04.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:45:04.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:45:04.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:45:04.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:45:04.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:45:04.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:45:04.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:45:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:45:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.697669 -999.00  +26.20   9.35     11   -5.80 1 1 1 1 1   887    0 31.33 -23.39 ----- 10.9 9.3 13.6 11.4 28.6 -31.6 29.1 -31.4 29.6 -29.2 29.4 -30.6
2025-11-25T18:45:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:45:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:45:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.697669
2025-11-25T18:45:04.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:45:04.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:45:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:45:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:45:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:45:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:44:32', tmtdew=39.29, humidity=6.82, cloud=0.0, wind=7.84, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:44:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:45:04.739 [DEBUG] [Thread-3815] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:45:04.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:45:04.835 [DEBUG] [Thread-3818] [transport.py] [_log()] starting thread (client mode): 0x70d1fa60
2025-11-25T18:45:04.835 [DEBUG] [Thread-3818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:45:04.850 [DEBUG] [Thread-3818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:45:04.850 [INFO] [Thread-3818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:45:04.858 [DEBUG] [Thread-3818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] client lang: <none>
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] server lang: <none>
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] kex follows: False
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] Compression: none
2025-11-25T18:45:04.859 [DEBUG] [Thread-3818] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:45:04.916 [DEBUG] [Thread-3818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:45:04.916 [DEBUG] [Thread-3818] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:45:04.916 [DEBUG] [Thread-3818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:45:04.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:45:04.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:45:04.972 [DEBUG] [Thread-3818] [transport.py] [_log()] userauth is OK
2025-11-25T18:45:04.972 [DEBUG] [Thread-3818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:45:04.972 [DEBUG] [Thread-3818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:45:04.972 [DEBUG] [Thread-3818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:45:04.972 [DEBUG] [Thread-3818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:45:04.991 [INFO] [Thread-3818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:45:04.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:45:04.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:45:05.848 [DEBUG] [Thread-3818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:45:05.849 [DEBUG] [Thread-3818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:45:05.897 [DEBUG] [Thread-3818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:45:05.897 [DEBUG] [Thread-3818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:45:05.906 [DEBUG] [Thread-3818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:45:05.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:45:05.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:45:05.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:45:05.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:45:05.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:45:05.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:45:05.942 [DEBUG] [Thread-3818] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:45:12.017 [DEBUG] [Thread-3820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:45:27.065 [DEBUG] [Thread-3821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:45:35.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:45:35.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:45: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
2025-11-25T18:45:36.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 45, 4), 39.31, 6.82, 0.0, 8.52, 26.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:45:36.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:45:04
2025-11-25T18:45:36.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:45:36.905 [DEBUG] [Thread-3822] [transport.py] [_log()] starting thread (client mode): 0x70d1e320
2025-11-25T18:45:36.905 [DEBUG] [Thread-3822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:45:36.925 [DEBUG] [Thread-3822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:45:36.925 [INFO] [Thread-3822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:45:36.928 [DEBUG] [Thread-3822] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:45:36.928 [DEBUG] [Thread-3822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:45:36.928 [DEBUG] [Thread-3822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:45:36.928 [DEBUG] [Thread-3822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:45:36.928 [DEBUG] [Thread-3822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:45:36.928 [DEBUG] [Thread-3822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:45:36.928 [DEBUG] [Thread-3822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:45:36.928 [DEBUG] [Thread-3822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:45:36.928 [DEBUG] [Thread-3822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] client lang: <none>
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] server lang: <none>
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] kex follows: False
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] Compression: none
2025-11-25T18:45:36.929 [DEBUG] [Thread-3822] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:45:36.947 [DEBUG] [Thread-3822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:45:36.948 [DEBUG] [Thread-3822] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:45:36.949 [DEBUG] [Thread-3822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:45:36.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:45:36.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:45:36.950 [DEBUG] [Thread-3822] [transport.py] [_log()] userauth is OK
2025-11-25T18:45:36.951 [DEBUG] [Thread-3822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:45:36.951 [DEBUG] [Thread-3822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:45:36.951 [DEBUG] [Thread-3822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:45:36.951 [DEBUG] [Thread-3822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:45:36.975 [INFO] [Thread-3822] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:45:36.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:45:37.573 [DEBUG] [Thread-3822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:45:37.574 [DEBUG] [Thread-3822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:45:37.574 [DEBUG] [Thread-3822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:45:37.614 [DEBUG] [Thread-3822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:45:37.614 [DEBUG] [Thread-3822] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:45:37.616 [DEBUG] [Thread-3822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:45:37.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:45:37.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:45:37.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:45:37.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:45:37.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:45:37.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:45:37.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:45:37.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:45:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:45:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.698016 -999.00  +26.20   6.55     11   -5.80 1 1 1 1 1   887    0 31.84 -22.13 ----- 8.3 6.5 6.2 14.0 28.5 -31.6 29.1 -31.2 29.5 -29.1 29.4 -30.7
2025-11-25T18:45:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:45:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:45:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.698016
2025-11-25T18:45:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:45:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:45:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:45:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:45:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:45:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:45:04', tmtdew=39.31, humidity=6.82, cloud=0.0, wind=8.52, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:45:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:45:37.628 [DEBUG] [Thread-3822] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:45:37.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:45:37.711 [DEBUG] [Thread-3825] [transport.py] [_log()] starting thread (client mode): 0x70d42140
2025-11-25T18:45:37.711 [DEBUG] [Thread-3825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:45:37.725 [DEBUG] [Thread-3825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:45:37.725 [INFO] [Thread-3825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] client lang: <none>
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] server lang: <none>
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] kex follows: False
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] Compression: none
2025-11-25T18:45:37.733 [DEBUG] [Thread-3825] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:45:37.780 [DEBUG] [Thread-3827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:45:37.791 [DEBUG] [Thread-3825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:45:37.791 [DEBUG] [Thread-3825] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:45:37.791 [DEBUG] [Thread-3825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:45:37.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:45:37.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:45:37.848 [DEBUG] [Thread-3825] [transport.py] [_log()] userauth is OK
2025-11-25T18:45:37.849 [DEBUG] [Thread-3825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:45:37.849 [DEBUG] [Thread-3825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:45:37.849 [DEBUG] [Thread-3825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:45:37.849 [DEBUG] [Thread-3825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:45:37.868 [INFO] [Thread-3825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:45:37.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:45:37.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:45:38.706 [DEBUG] [Thread-3825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:45:38.707 [DEBUG] [Thread-3825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:45:38.754 [DEBUG] [Thread-3825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:45:38.754 [DEBUG] [Thread-3825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:45:38.763 [DEBUG] [Thread-3825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:45:38.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:45:38.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:45: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
2025-11-25T18:45:38.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:45:38.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:45:38.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:45:38.806 [DEBUG] [Thread-3825] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:45:42.101 [DEBUG] [Thread-3828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:45:57.149 [DEBUG] [Thread-3829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:46:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:46:08.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:46:08.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:46:09.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 45, 38), 39.36, 6.79, 0.0, 8.54, 26.41, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:46:09.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:45:38
2025-11-25T18:46:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:46:09.795 [DEBUG] [Thread-3830] [transport.py] [_log()] starting thread (client mode): 0x73780e50
2025-11-25T18:46:09.795 [DEBUG] [Thread-3830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:46:09.809 [DEBUG] [Thread-3830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:46:09.809 [INFO] [Thread-3830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] client lang: <none>
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] server lang: <none>
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] kex follows: False
2025-11-25T18:46:09.812 [DEBUG] [Thread-3830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:46:09.813 [DEBUG] [Thread-3830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:46:09.813 [DEBUG] [Thread-3830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:46:09.813 [DEBUG] [Thread-3830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:46:09.813 [DEBUG] [Thread-3830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:46:09.813 [DEBUG] [Thread-3830] [transport.py] [_log()] Compression: none
2025-11-25T18:46:09.813 [DEBUG] [Thread-3830] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:46:09.829 [DEBUG] [Thread-3830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:46:09.830 [DEBUG] [Thread-3830] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:46:09.830 [DEBUG] [Thread-3830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:46:09.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:46:09.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:46:09.832 [DEBUG] [Thread-3830] [transport.py] [_log()] userauth is OK
2025-11-25T18:46:09.832 [DEBUG] [Thread-3830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:46:09.833 [DEBUG] [Thread-3830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:46:09.833 [DEBUG] [Thread-3830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:46:09.833 [DEBUG] [Thread-3830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:46:09.851 [INFO] [Thread-3830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:46:09.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:46:10.496 [DEBUG] [Thread-3830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:46:10.496 [DEBUG] [Thread-3830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:46:10.496 [DEBUG] [Thread-3830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:46:10.537 [DEBUG] [Thread-3830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:46:10.537 [DEBUG] [Thread-3830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:46:10.540 [DEBUG] [Thread-3830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:46:10.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:46:10.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:46:10.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:46:10.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:46:10.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:46:10.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:46:10.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.698364 -999.00  +26.20  12.82     11   -5.80 1 1 1 1 1   887    0 31.76 -21.94 ----- 13.4 12.8 332.1 16.9 28.5 -31.4 29.1 -30.7 29.6 -29.2 29.4 -30.6
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.698364
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:46:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:45:38', tmtdew=39.36, humidity=6.79, cloud=0.0, wind=8.54, temperature=26.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:45:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:46:10.558 [DEBUG] [Thread-3830] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:46:10.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:46:10.652 [DEBUG] [Thread-3833] [transport.py] [_log()] starting thread (client mode): 0x7374f3a0
2025-11-25T18:46:10.652 [DEBUG] [Thread-3833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:46:10.666 [DEBUG] [Thread-3833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:46:10.667 [INFO] [Thread-3833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] client lang: <none>
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] server lang: <none>
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] kex follows: False
2025-11-25T18:46:10.674 [DEBUG] [Thread-3833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:46:10.675 [DEBUG] [Thread-3833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:46:10.675 [DEBUG] [Thread-3833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:46:10.675 [DEBUG] [Thread-3833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:46:10.675 [DEBUG] [Thread-3833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:46:10.675 [DEBUG] [Thread-3833] [transport.py] [_log()] Compression: none
2025-11-25T18:46:10.675 [DEBUG] [Thread-3833] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:46:10.732 [DEBUG] [Thread-3833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:46:10.732 [DEBUG] [Thread-3833] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:46:10.733 [DEBUG] [Thread-3833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:46:10.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:46:10.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:46:10.788 [DEBUG] [Thread-3833] [transport.py] [_log()] userauth is OK
2025-11-25T18:46:10.789 [DEBUG] [Thread-3833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:46:10.789 [DEBUG] [Thread-3833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:46:10.789 [DEBUG] [Thread-3833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:46:10.789 [DEBUG] [Thread-3833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:46:10.808 [INFO] [Thread-3833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:46:10.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:46:10.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:46:11.629 [DEBUG] [Thread-3833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:46:11.629 [DEBUG] [Thread-3833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:46:11.677 [DEBUG] [Thread-3833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:46:11.677 [DEBUG] [Thread-3833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:46:11.685 [DEBUG] [Thread-3833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:46:11.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:46:11.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:46:11.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
2025-11-25T18:46:11.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:46:11.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:46:11.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:46:11.716 [DEBUG] [Thread-3833] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:46:12.178 [DEBUG] [Thread-3835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:46:27.218 [DEBUG] [Thread-3836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:46:38.524 [DEBUG] [Thread-3837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:46:41.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:46:41.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:46:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:46:42.250 [DEBUG] [Thread-3838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:46:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 46, 10), 39.37, 6.79, 0.0, 12.03, 26.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:46:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:46:10
2025-11-25T18:46:42.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:46:42.664 [DEBUG] [Thread-3839] [transport.py] [_log()] starting thread (client mode): 0x737c4640
2025-11-25T18:46:42.664 [DEBUG] [Thread-3839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:46:42.684 [DEBUG] [Thread-3839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:46:42.685 [INFO] [Thread-3839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:46:42.688 [DEBUG] [Thread-3839] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:46:42.688 [DEBUG] [Thread-3839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:46:42.688 [DEBUG] [Thread-3839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:46:42.688 [DEBUG] [Thread-3839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:46:42.688 [DEBUG] [Thread-3839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:46:42.688 [DEBUG] [Thread-3839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:46:42.688 [DEBUG] [Thread-3839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:46:42.688 [DEBUG] [Thread-3839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] client lang: <none>
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] server lang: <none>
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] kex follows: False
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] Compression: none
2025-11-25T18:46:42.689 [DEBUG] [Thread-3839] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:46:42.703 [DEBUG] [Thread-3839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:46:42.704 [DEBUG] [Thread-3839] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:46:42.704 [DEBUG] [Thread-3839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:46:42.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:46:42.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:46:42.706 [DEBUG] [Thread-3839] [transport.py] [_log()] userauth is OK
2025-11-25T18:46:42.706 [DEBUG] [Thread-3839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:46:42.707 [DEBUG] [Thread-3839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:46:42.707 [DEBUG] [Thread-3839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:46:42.707 [DEBUG] [Thread-3839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:46:42.724 [INFO] [Thread-3839] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:46:42.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:46:43.376 [DEBUG] [Thread-3839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:46:43.376 [DEBUG] [Thread-3839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:46:43.376 [DEBUG] [Thread-3839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:46:43.417 [DEBUG] [Thread-3839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:46:43.417 [DEBUG] [Thread-3839] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:46:43.418 [DEBUG] [Thread-3839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:46:43.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:46:43.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:46:43.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:46:43.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:46:43.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:46:43.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:46:43.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.698711 -999.00  +26.20   9.24     11   -5.80 1 1 1 1 1   887    0 31.24 -21.04 ----- 10.9 9.2 3.4 16.2 28.5 -31.3 29.0 -30.9 29.5 -29.3 29.4 -30.7
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.698711
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:46:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:46:10', tmtdew=39.37, humidity=6.79, cloud=0.0, wind=12.03, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:46:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:46:43.436 [DEBUG] [Thread-3839] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:46:43.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:46:43.522 [DEBUG] [Thread-3842] [transport.py] [_log()] starting thread (client mode): 0x7378d390
2025-11-25T18:46:43.522 [DEBUG] [Thread-3842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:46:43.536 [DEBUG] [Thread-3842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:46:43.536 [INFO] [Thread-3842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:46:43.543 [DEBUG] [Thread-3842] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] client lang: <none>
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] server lang: <none>
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] kex follows: False
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] Compression: none
2025-11-25T18:46:43.544 [DEBUG] [Thread-3842] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:46:43.599 [DEBUG] [Thread-3842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:46:43.599 [DEBUG] [Thread-3842] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:46:43.600 [DEBUG] [Thread-3842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:46:43.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:46:43.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:46:43.656 [DEBUG] [Thread-3842] [transport.py] [_log()] userauth is OK
2025-11-25T18:46:43.657 [DEBUG] [Thread-3842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:46:43.657 [DEBUG] [Thread-3842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:46:43.657 [DEBUG] [Thread-3842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:46:43.657 [DEBUG] [Thread-3842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:46:43.674 [INFO] [Thread-3842] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:46:43.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:46:43.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:46:44.483 [DEBUG] [Thread-3842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:46:44.483 [DEBUG] [Thread-3842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:46:44.532 [DEBUG] [Thread-3842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:46:44.532 [DEBUG] [Thread-3842] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:46:44.540 [DEBUG] [Thread-3842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:46:44.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:46:44.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:46:44.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:46:44.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:46:44.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:46:44.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:46:44.572 [DEBUG] [Thread-3842] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:46:57.286 [DEBUG] [Thread-3844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:47:12.336 [DEBUG] [Thread-3845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:47:14.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:47:14.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:47:14.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:47:15.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 46, 42), 39.41, 6.78, 0.0, 14.72, 26.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:47:15.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:46:42
2025-11-25T18:47:15.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:47:15.572 [DEBUG] [Thread-3846] [transport.py] [_log()] starting thread (client mode): 0x7374ffd0
2025-11-25T18:47:15.572 [DEBUG] [Thread-3846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:47:15.593 [DEBUG] [Thread-3846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:47:15.593 [INFO] [Thread-3846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:47:15.596 [DEBUG] [Thread-3846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:47:15.596 [DEBUG] [Thread-3846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:47:15.596 [DEBUG] [Thread-3846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:47:15.596 [DEBUG] [Thread-3846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:47:15.596 [DEBUG] [Thread-3846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] client lang: <none>
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] server lang: <none>
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] kex follows: False
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] Compression: none
2025-11-25T18:47:15.597 [DEBUG] [Thread-3846] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:47:15.613 [DEBUG] [Thread-3846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:47:15.613 [DEBUG] [Thread-3846] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:47:15.613 [DEBUG] [Thread-3846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:47:15.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:47:15.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:47:15.614 [DEBUG] [Thread-3846] [transport.py] [_log()] userauth is OK
2025-11-25T18:47:15.614 [DEBUG] [Thread-3846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:47:15.614 [DEBUG] [Thread-3846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:47:15.614 [DEBUG] [Thread-3846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:47:15.614 [DEBUG] [Thread-3846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:47:15.642 [INFO] [Thread-3846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:47:15.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:47:16.284 [DEBUG] [Thread-3846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:47:16.284 [DEBUG] [Thread-3846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:47:16.284 [DEBUG] [Thread-3846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:47:16.325 [DEBUG] [Thread-3846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:47:16.325 [DEBUG] [Thread-3846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:47:16.327 [DEBUG] [Thread-3846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:47:16.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:47:16.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:47:16.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:47:16.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:47:16.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:47:16.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:47:16.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:47:16.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:47:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:47:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.699058 -999.00  +26.20   8.42     11   -5.80 1 1 1 1 1   887    0 31.48 -21.29 ----- 8.3 8.4 2.2 14.4 28.5 -31.3 28.9 -31.3 29.4 -29.1 29.3 -30.6
2025-11-25T18:47:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:47:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:47:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.699058
2025-11-25T18:47:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:47:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:47:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:47:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:47:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:47:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:46:42', tmtdew=39.41, humidity=6.78, cloud=0.0, wind=14.72, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:46:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:47:16.345 [DEBUG] [Thread-3846] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:47:16.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:47:16.429 [DEBUG] [Thread-3849] [transport.py] [_log()] starting thread (client mode): 0x737c4070
2025-11-25T18:47:16.430 [DEBUG] [Thread-3849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:47:16.444 [DEBUG] [Thread-3849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:47:16.444 [INFO] [Thread-3849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] client lang: <none>
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] server lang: <none>
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] kex follows: False
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] Compression: none
2025-11-25T18:47:16.452 [DEBUG] [Thread-3849] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:47:16.507 [DEBUG] [Thread-3849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:47:16.508 [DEBUG] [Thread-3849] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:47:16.508 [DEBUG] [Thread-3849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:47:16.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:47:16.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:47:16.565 [DEBUG] [Thread-3849] [transport.py] [_log()] userauth is OK
2025-11-25T18:47:16.565 [DEBUG] [Thread-3849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:47:16.565 [DEBUG] [Thread-3849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:47:16.565 [DEBUG] [Thread-3849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:47:16.565 [DEBUG] [Thread-3849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:47:16.578 [INFO] [Thread-3849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:47:16.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:47:16.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:47:17.415 [DEBUG] [Thread-3849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:47:17.415 [DEBUG] [Thread-3849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:47:17.463 [DEBUG] [Thread-3849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:47:17.463 [DEBUG] [Thread-3849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:47:17.472 [DEBUG] [Thread-3849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:47:17.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:47:17.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:47:17.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:47:17.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:47:17.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:47:17.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:47:17.507 [DEBUG] [Thread-3849] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:47:27.374 [DEBUG] [Thread-3851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:47:39.272 [DEBUG] [Thread-3852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:47:42.425 [DEBUG] [Thread-3853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:47:47.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:47:47.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:47:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:47:48.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 47, 14), 39.39, 6.79, 0.0, 16.39, 26.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:47:48.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:47:14
2025-11-25T18:47:48.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:47:48.570 [DEBUG] [Thread-3854] [transport.py] [_log()] starting thread (client mode): 0x7374dab0
2025-11-25T18:47:48.571 [DEBUG] [Thread-3854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:47:48.589 [DEBUG] [Thread-3854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:47:48.589 [INFO] [Thread-3854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] client lang: <none>
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] server lang: <none>
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] kex follows: False
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:47:48.591 [DEBUG] [Thread-3854] [transport.py] [_log()] Compression: none
2025-11-25T18:47:48.592 [DEBUG] [Thread-3854] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:47:48.599 [DEBUG] [Thread-3854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:47:48.599 [DEBUG] [Thread-3854] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:47:48.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:47:48.599 [DEBUG] [Thread-3854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:47:48.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:47:48.600 [DEBUG] [Thread-3854] [transport.py] [_log()] userauth is OK
2025-11-25T18:47:48.600 [DEBUG] [Thread-3854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:47:48.600 [DEBUG] [Thread-3854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:47:48.600 [DEBUG] [Thread-3854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:47:48.600 [DEBUG] [Thread-3854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:47:48.611 [INFO] [Thread-3854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:47:48.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:47:49.263 [DEBUG] [Thread-3854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:47:49.263 [DEBUG] [Thread-3854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:47:49.263 [DEBUG] [Thread-3854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:47:49.304 [DEBUG] [Thread-3854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:47:49.304 [DEBUG] [Thread-3854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:47:49.307 [DEBUG] [Thread-3854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:47:49.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:47:49.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:47:49.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:47:49.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:47:49.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:47:49.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:47:49.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:47:49.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:47:49.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:47:49.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.699405 -999.00  +26.30   7.89     11   -5.70 1 1 1 1 1   887    0 31.78 -23.70 ----- 8.3 7.9 325.5 11.7 28.4 -31.3 29.0 -30.4 29.5 -29.1 29.3 -30.3
2025-11-25T18:47:49.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:47:49.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:47:49.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.699405
2025-11-25T18:47:49.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:47:49.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:47:49.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:47:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:47:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:47:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:47:14', tmtdew=39.39, humidity=6.79, cloud=0.0, wind=16.39, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:47:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:47:49.334 [DEBUG] [Thread-3854] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:47:49.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:47:49.422 [DEBUG] [Thread-3857] [transport.py] [_log()] starting thread (client mode): 0x70d29990
2025-11-25T18:47:49.422 [DEBUG] [Thread-3857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:47:49.436 [DEBUG] [Thread-3857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:47:49.436 [INFO] [Thread-3857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] client lang: <none>
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] server lang: <none>
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] kex follows: False
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:47:49.444 [DEBUG] [Thread-3857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:47:49.445 [DEBUG] [Thread-3857] [transport.py] [_log()] Compression: none
2025-11-25T18:47:49.445 [DEBUG] [Thread-3857] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:47:49.501 [DEBUG] [Thread-3857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:47:49.502 [DEBUG] [Thread-3857] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:47:49.503 [DEBUG] [Thread-3857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:47:49.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:47:49.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:47:49.558 [DEBUG] [Thread-3857] [transport.py] [_log()] userauth is OK
2025-11-25T18:47:49.558 [DEBUG] [Thread-3857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:47:49.558 [DEBUG] [Thread-3857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:47:49.558 [DEBUG] [Thread-3857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:47:49.558 [DEBUG] [Thread-3857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:47:49.577 [INFO] [Thread-3857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:47:49.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:47:49.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:47:50.486 [DEBUG] [Thread-3857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:47:50.486 [DEBUG] [Thread-3857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:47:50.534 [DEBUG] [Thread-3857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:47:50.535 [DEBUG] [Thread-3857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:47:50.543 [DEBUG] [Thread-3857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:47:50.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:47:50.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:47:50.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:47:50.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:47:50.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:47:50.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:47:50.578 [DEBUG] [Thread-3857] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:47:57.459 [DEBUG] [Thread-3859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:48:12.520 [DEBUG] [Thread-3860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:48:20.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:48:20.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:48:20.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:48:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 47, 46), 39.46, 6.29, 0.0, 14.4, 26.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:48:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:47:46
2025-11-25T18:48:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:48:21.630 [DEBUG] [Thread-3861] [transport.py] [_log()] starting thread (client mode): 0x70d1ca90
2025-11-25T18:48:21.630 [DEBUG] [Thread-3861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:48:21.651 [DEBUG] [Thread-3861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:48:21.652 [INFO] [Thread-3861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] client lang: <none>
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] server lang: <none>
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] kex follows: False
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] Compression: none
2025-11-25T18:48:21.655 [DEBUG] [Thread-3861] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:48:21.670 [DEBUG] [Thread-3861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:48:21.670 [DEBUG] [Thread-3861] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:48:21.671 [DEBUG] [Thread-3861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:48:21.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:48:21.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:48:21.671 [DEBUG] [Thread-3861] [transport.py] [_log()] userauth is OK
2025-11-25T18:48:21.672 [DEBUG] [Thread-3861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:48:21.672 [DEBUG] [Thread-3861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:48:21.672 [DEBUG] [Thread-3861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:48:21.672 [DEBUG] [Thread-3861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:48:21.682 [INFO] [Thread-3861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:48:21.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:48:22.309 [DEBUG] [Thread-3861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:48:22.309 [DEBUG] [Thread-3861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:48:22.309 [DEBUG] [Thread-3861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:48:22.350 [DEBUG] [Thread-3861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:48:22.350 [DEBUG] [Thread-3861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:48:22.352 [DEBUG] [Thread-3861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:48:22.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:48:22.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:48:22.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:48:22.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:48:22.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:48:22.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:48:22.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.700100 -999.00  +26.20  12.97     11   -5.70 1 1 1 1 1   887    0 31.60 -22.91 ----- 4.2 13.0 325.2 19.9 28.4 -31.1 28.9 -30.8 29.4 -29.2 29.2 -30.6
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.700100
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:48:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:47:46', tmtdew=39.46, humidity=6.29, cloud=0.0, wind=14.4, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:48:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:48:22.370 [DEBUG] [Thread-3861] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:48:22.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:48:22.456 [DEBUG] [Thread-3864] [transport.py] [_log()] starting thread (client mode): 0x70d1ece0
2025-11-25T18:48:22.456 [DEBUG] [Thread-3864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:48:22.470 [DEBUG] [Thread-3864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:48:22.470 [INFO] [Thread-3864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] client lang: <none>
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] server lang: <none>
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] kex follows: False
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] Compression: none
2025-11-25T18:48:22.478 [DEBUG] [Thread-3864] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:48:22.532 [DEBUG] [Thread-3864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:48:22.533 [DEBUG] [Thread-3864] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:48:22.533 [DEBUG] [Thread-3864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:48:22.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:48:22.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:48:22.590 [DEBUG] [Thread-3864] [transport.py] [_log()] userauth is OK
2025-11-25T18:48:22.590 [DEBUG] [Thread-3864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:48:22.590 [DEBUG] [Thread-3864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:48:22.590 [DEBUG] [Thread-3864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:48:22.590 [DEBUG] [Thread-3864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:48:22.606 [INFO] [Thread-3864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:48:22.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:48:22.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:48:23.480 [DEBUG] [Thread-3864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:48:23.481 [DEBUG] [Thread-3864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:48:23.528 [DEBUG] [Thread-3864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:48:23.528 [DEBUG] [Thread-3864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:48:23.536 [DEBUG] [Thread-3864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:48:23.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:48:23.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:48:23.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:48:23.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:48:23.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:48:23.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:48:23.568 [DEBUG] [Thread-3864] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:48:27.550 [DEBUG] [Thread-3866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:48:39.776 [DEBUG] [Thread-3867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:48:42.603 [DEBUG] [Thread-3868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:48:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:48:53.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:48:53.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:48:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 48, 50), 39.2, 6.84, 0.0, 15.05, 26.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:48:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:48:50
2025-11-25T18:48:54.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:48:54.544 [DEBUG] [Thread-3869] [transport.py] [_log()] starting thread (client mode): 0x70d1ef20
2025-11-25T18:48:54.545 [DEBUG] [Thread-3869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:48:54.565 [DEBUG] [Thread-3869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:48:54.565 [INFO] [Thread-3869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] client lang: <none>
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] server lang: <none>
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] kex follows: False
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] Compression: none
2025-11-25T18:48:54.567 [DEBUG] [Thread-3869] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:48:54.581 [DEBUG] [Thread-3869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:48:54.582 [DEBUG] [Thread-3869] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:48:54.582 [DEBUG] [Thread-3869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:48:54.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:48:54.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:48:54.584 [DEBUG] [Thread-3869] [transport.py] [_log()] userauth is OK
2025-11-25T18:48:54.584 [DEBUG] [Thread-3869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:48:54.585 [DEBUG] [Thread-3869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:48:54.585 [DEBUG] [Thread-3869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:48:54.585 [DEBUG] [Thread-3869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:48:54.621 [INFO] [Thread-3869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:48:54.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:48:55.217 [DEBUG] [Thread-3869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:48:55.217 [DEBUG] [Thread-3869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:48:55.218 [DEBUG] [Thread-3869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:48:55.259 [DEBUG] [Thread-3869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:48:55.259 [DEBUG] [Thread-3869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:48:55.263 [DEBUG] [Thread-3869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:48:55.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:48:55.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:48:55.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:48:55.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:48:55.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:48:55.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:48:55.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:48:55.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:48:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:48:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.700447 -999.00  +26.20  12.93     11   -5.70 1 1 1 1 1   887    0 31.28 -23.70 ----- 10.5 12.9 317.2 14.7 28.4 -31.1 28.9 -30.7 29.3 -29.3 29.2 -30.5
2025-11-25T18:48:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:48:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:48:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.700447
2025-11-25T18:48:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:48:50', tmtdew=39.2, humidity=6.84, cloud=0.0, wind=15.05, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:48:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:48:55.290 [DEBUG] [Thread-3869] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:48:55.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:48:55.396 [DEBUG] [Thread-3872] [transport.py] [_log()] starting thread (client mode): 0x737c7b50
2025-11-25T18:48:55.396 [DEBUG] [Thread-3872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:48:55.410 [DEBUG] [Thread-3872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:48:55.411 [INFO] [Thread-3872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:48:55.419 [DEBUG] [Thread-3872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:48:55.419 [DEBUG] [Thread-3872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:48:55.419 [DEBUG] [Thread-3872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:48:55.419 [DEBUG] [Thread-3872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:48:55.419 [DEBUG] [Thread-3872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:48:55.419 [DEBUG] [Thread-3872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:48:55.419 [DEBUG] [Thread-3872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:48:55.419 [DEBUG] [Thread-3872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:48:55.419 [DEBUG] [Thread-3872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] client lang: <none>
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] server lang: <none>
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] kex follows: False
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] Compression: none
2025-11-25T18:48:55.420 [DEBUG] [Thread-3872] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:48:55.480 [DEBUG] [Thread-3872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:48:55.480 [DEBUG] [Thread-3872] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:48:55.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:48:55.481 [DEBUG] [Thread-3872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:48:55.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:48:55.535 [DEBUG] [Thread-3872] [transport.py] [_log()] userauth is OK
2025-11-25T18:48:55.535 [DEBUG] [Thread-3872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:48:55.535 [DEBUG] [Thread-3872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:48:55.535 [DEBUG] [Thread-3872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:48:55.535 [DEBUG] [Thread-3872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:48:55.554 [INFO] [Thread-3872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:48:55.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:48:55.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:48:56.400 [DEBUG] [Thread-3872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:48:56.400 [DEBUG] [Thread-3872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:48:56.449 [DEBUG] [Thread-3872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:48:56.449 [DEBUG] [Thread-3872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:48:56.458 [DEBUG] [Thread-3872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:48:56.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:48:56.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:48:56.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:48:56.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:48:56.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:48:56.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:48:56.496 [DEBUG] [Thread-3872] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:48:57.642 [DEBUG] [Thread-3874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:49:12.689 [DEBUG] [Thread-3875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:49:26.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:49:26.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:49:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:49:27.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 49, 22), 39.1, 6.89, 0.0, 12.58, 26.38, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:49:27.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:49:22
2025-11-25T18:49:27.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:49:27.455 [DEBUG] [Thread-3876] [transport.py] [_log()] starting thread (client mode): 0x70d02680
2025-11-25T18:49:27.456 [DEBUG] [Thread-3876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:49:27.476 [DEBUG] [Thread-3876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:49:27.476 [INFO] [Thread-3876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:49:27.479 [DEBUG] [Thread-3876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] client lang: <none>
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] server lang: <none>
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] kex follows: False
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:49:27.480 [DEBUG] [Thread-3876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:49:27.481 [DEBUG] [Thread-3876] [transport.py] [_log()] Compression: none
2025-11-25T18:49:27.481 [DEBUG] [Thread-3876] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:49:27.490 [DEBUG] [Thread-3876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:49:27.491 [DEBUG] [Thread-3876] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:49:27.491 [DEBUG] [Thread-3876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:49:27.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:49:27.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:49:27.493 [DEBUG] [Thread-3876] [transport.py] [_log()] userauth is OK
2025-11-25T18:49:27.494 [DEBUG] [Thread-3876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:49:27.494 [DEBUG] [Thread-3876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:49:27.494 [DEBUG] [Thread-3876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:49:27.494 [DEBUG] [Thread-3876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:49:27.519 [INFO] [Thread-3876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:49:27.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:49:27.725 [DEBUG] [Thread-3878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:49:28.137 [DEBUG] [Thread-3876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:49:28.137 [DEBUG] [Thread-3876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:49:28.138 [DEBUG] [Thread-3876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:49:28.178 [DEBUG] [Thread-3876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:49:28.178 [DEBUG] [Thread-3876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:49:28.181 [DEBUG] [Thread-3876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:49:28.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:49:28.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:49:28.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:49:28.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:49:28.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:49:28.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:49:28.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:49:28.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:49:28.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:49:28.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.700794 -999.00  +26.40  13.18     11   -5.40 1 1 1 1 1   887    0 30.95 -24.16 ----- 13.0 13.2 301.6 14.9 28.4 -31.0 28.9 -30.4 29.3 -29.3 29.2 -30.5
2025-11-25T18:49:28.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:49:28.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:49:28.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.700794
2025-11-25T18:49:28.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:49:28.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:49:28.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:49:28.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:49:28.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:49:28.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:49:22', tmtdew=39.1, humidity=6.89, cloud=0.0, wind=12.58, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:49:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:49:28.209 [DEBUG] [Thread-3876] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:49:28.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:49:28.295 [DEBUG] [Thread-3880] [transport.py] [_log()] starting thread (client mode): 0x70d1ef20
2025-11-25T18:49:28.295 [DEBUG] [Thread-3880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:49:28.310 [DEBUG] [Thread-3880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:49:28.310 [INFO] [Thread-3880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:49:28.318 [DEBUG] [Thread-3880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:49:28.318 [DEBUG] [Thread-3880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:49:28.318 [DEBUG] [Thread-3880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] client lang: <none>
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] server lang: <none>
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] kex follows: False
2025-11-25T18:49:28.319 [DEBUG] [Thread-3880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:49:28.320 [DEBUG] [Thread-3880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:49:28.320 [DEBUG] [Thread-3880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:49:28.320 [DEBUG] [Thread-3880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:49:28.320 [DEBUG] [Thread-3880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:49:28.320 [DEBUG] [Thread-3880] [transport.py] [_log()] Compression: none
2025-11-25T18:49:28.320 [DEBUG] [Thread-3880] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:49:28.376 [DEBUG] [Thread-3880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:49:28.376 [DEBUG] [Thread-3880] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:49:28.377 [DEBUG] [Thread-3880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:49:28.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:49:28.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:49:28.432 [DEBUG] [Thread-3880] [transport.py] [_log()] userauth is OK
2025-11-25T18:49:28.433 [DEBUG] [Thread-3880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:49:28.433 [DEBUG] [Thread-3880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:49:28.433 [DEBUG] [Thread-3880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:49:28.433 [DEBUG] [Thread-3880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:49:28.454 [INFO] [Thread-3880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:49:28.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:49:28.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:49:29.291 [DEBUG] [Thread-3880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:49:29.291 [DEBUG] [Thread-3880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:49:29.339 [DEBUG] [Thread-3880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:49:29.339 [DEBUG] [Thread-3880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:49:29.352 [DEBUG] [Thread-3880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:49:29.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:49:29.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:49:29.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:49:29.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:49:29.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:49:29.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:49:29.389 [DEBUG] [Thread-3880] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:49:40.553 [DEBUG] [Thread-3882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:49:42.760 [DEBUG] [Thread-3883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:49:57.815 [DEBUG] [Thread-3884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:49:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:49:59.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:49:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:50:00.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 49, 54), 39.07, 6.91, 0.0, 9.88, 26.41, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:50:00.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:49:54
2025-11-25T18:50:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:50:00.341 [DEBUG] [Thread-3885] [transport.py] [_log()] starting thread (client mode): 0x70d024d0
2025-11-25T18:50:00.341 [DEBUG] [Thread-3885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:50:00.361 [DEBUG] [Thread-3885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:50:00.362 [INFO] [Thread-3885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] client lang: <none>
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] server lang: <none>
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] kex follows: False
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:50:00.365 [DEBUG] [Thread-3885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:50:00.366 [DEBUG] [Thread-3885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:50:00.366 [DEBUG] [Thread-3885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:50:00.366 [DEBUG] [Thread-3885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:50:00.366 [DEBUG] [Thread-3885] [transport.py] [_log()] Compression: none
2025-11-25T18:50:00.366 [DEBUG] [Thread-3885] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:50:00.383 [DEBUG] [Thread-3885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:50:00.384 [DEBUG] [Thread-3885] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:50:00.384 [DEBUG] [Thread-3885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:50:00.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:50:00.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:50:00.386 [DEBUG] [Thread-3885] [transport.py] [_log()] userauth is OK
2025-11-25T18:50:00.386 [DEBUG] [Thread-3885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:50:00.386 [DEBUG] [Thread-3885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:50:00.387 [DEBUG] [Thread-3885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:50:00.387 [DEBUG] [Thread-3885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:50:00.411 [INFO] [Thread-3885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:50:00.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:50:01.069 [DEBUG] [Thread-3885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:50:01.069 [DEBUG] [Thread-3885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:50:01.069 [DEBUG] [Thread-3885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:50:01.110 [DEBUG] [Thread-3885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:50:01.110 [DEBUG] [Thread-3885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:50:01.113 [DEBUG] [Thread-3885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:50:01.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:50:01.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:50:01.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:50:01.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:50:01.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:50:01.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:50:01.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:50:01.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:50:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:50:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.701141 -999.00  +26.50  19.51     11   -5.50 1 1 1 1 1   887    0 31.10 -24.30 ----- 12.6 19.5 306.8 25.6 28.3 -31.1 28.8 -30.8 29.3 -29.6 29.2 -30.5
2025-11-25T18:50:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:50:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:50:01.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.701141
2025-11-25T18:50:01.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:50:01.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:50:01.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:50:01.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:50:01.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:50:01.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:49:54', tmtdew=39.07, humidity=6.91, cloud=0.0, wind=9.88, temperature=26.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:49:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:50:01.138 [DEBUG] [Thread-3885] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:50:01.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:50:01.242 [DEBUG] [Thread-3888] [transport.py] [_log()] starting thread (client mode): 0x70d00c10
2025-11-25T18:50:01.242 [DEBUG] [Thread-3888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:50:01.257 [DEBUG] [Thread-3888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:50:01.258 [INFO] [Thread-3888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] client lang: <none>
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] server lang: <none>
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] kex follows: False
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:50:01.269 [DEBUG] [Thread-3888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:50:01.270 [DEBUG] [Thread-3888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:50:01.270 [DEBUG] [Thread-3888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:50:01.270 [DEBUG] [Thread-3888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:50:01.270 [DEBUG] [Thread-3888] [transport.py] [_log()] Compression: none
2025-11-25T18:50:01.270 [DEBUG] [Thread-3888] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:50:01.324 [DEBUG] [Thread-3888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:50:01.325 [DEBUG] [Thread-3888] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:50:01.326 [DEBUG] [Thread-3888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:50:01.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:50:01.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:50:01.384 [DEBUG] [Thread-3888] [transport.py] [_log()] userauth is OK
2025-11-25T18:50:01.384 [DEBUG] [Thread-3888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:50:01.384 [DEBUG] [Thread-3888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:50:01.384 [DEBUG] [Thread-3888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:50:01.384 [DEBUG] [Thread-3888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:50:01.406 [INFO] [Thread-3888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:50:01.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:50:01.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:50:02.274 [DEBUG] [Thread-3888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:50:02.274 [DEBUG] [Thread-3888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:50:02.322 [DEBUG] [Thread-3888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:50:02.322 [DEBUG] [Thread-3888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:50:02.331 [DEBUG] [Thread-3888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:50:02.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:50:02.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:50: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') -> 00000000
2025-11-25T18:50:02.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:50:02.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:50:02.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:50:02.367 [DEBUG] [Thread-3888] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:50:12.850 [DEBUG] [Thread-3890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:50:27.896 [DEBUG] [Thread-3891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:50:32.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:50:32.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:50:32.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:50:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 50, 26), 39.11, 6.89, 0.0, 12.42, 26.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:50:33.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:50:26
2025-11-25T18:50:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:50:33.335 [DEBUG] [Thread-3892] [transport.py] [_log()] starting thread (client mode): 0x70d3a830
2025-11-25T18:50:33.335 [DEBUG] [Thread-3892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:50:33.353 [DEBUG] [Thread-3892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:50:33.354 [INFO] [Thread-3892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:50:33.357 [DEBUG] [Thread-3892] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:50:33.357 [DEBUG] [Thread-3892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:50:33.357 [DEBUG] [Thread-3892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:50:33.357 [DEBUG] [Thread-3892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:50:33.357 [DEBUG] [Thread-3892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:50:33.357 [DEBUG] [Thread-3892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:50:33.357 [DEBUG] [Thread-3892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] client lang: <none>
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] server lang: <none>
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] kex follows: False
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] Compression: none
2025-11-25T18:50:33.358 [DEBUG] [Thread-3892] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:50:33.377 [DEBUG] [Thread-3892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:50:33.377 [DEBUG] [Thread-3892] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:50:33.378 [DEBUG] [Thread-3892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:50:33.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:50:33.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:50:33.380 [DEBUG] [Thread-3892] [transport.py] [_log()] userauth is OK
2025-11-25T18:50:33.380 [DEBUG] [Thread-3892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:50:33.380 [DEBUG] [Thread-3892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:50:33.380 [DEBUG] [Thread-3892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:50:33.380 [DEBUG] [Thread-3892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:50:33.397 [INFO] [Thread-3892] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:50:33.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:50:34.095 [DEBUG] [Thread-3892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:50:34.095 [DEBUG] [Thread-3892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:50:34.095 [DEBUG] [Thread-3892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:50:34.136 [DEBUG] [Thread-3892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:50:34.136 [DEBUG] [Thread-3892] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:50:34.139 [DEBUG] [Thread-3892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:50:34.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:50:34.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:50:34.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:50:34.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:50:34.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:50:34.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:50:34.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:50:34.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:50:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:50:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.701488 -999.00  +26.40  15.94     11   -5.50 1 1 1 1 1   887    0 31.16 -26.06 ----- 16.2 15.9 307.0 19.6 28.3 -30.8 28.8 -30.5 29.2 -29.7 29.1 -30.4
2025-11-25T18:50:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:50:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:50:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.701488
2025-11-25T18:50:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:50:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:50:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:50:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:50:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:50:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:50:26', tmtdew=39.11, humidity=6.89, cloud=0.0, wind=12.42, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:50:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:50:34.167 [DEBUG] [Thread-3892] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:50:34.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:50:34.262 [DEBUG] [Thread-3895] [transport.py] [_log()] starting thread (client mode): 0x7374d000
2025-11-25T18:50:34.262 [DEBUG] [Thread-3895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:50:34.277 [DEBUG] [Thread-3895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:50:34.277 [INFO] [Thread-3895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:50:34.284 [DEBUG] [Thread-3895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] client lang: <none>
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] server lang: <none>
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] kex follows: False
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] Compression: none
2025-11-25T18:50:34.285 [DEBUG] [Thread-3895] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:50:34.344 [DEBUG] [Thread-3895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:50:34.345 [DEBUG] [Thread-3895] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:50:34.345 [DEBUG] [Thread-3895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:50:34.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:50:34.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:50:34.401 [DEBUG] [Thread-3895] [transport.py] [_log()] userauth is OK
2025-11-25T18:50:34.401 [DEBUG] [Thread-3895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:50:34.401 [DEBUG] [Thread-3895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:50:34.402 [DEBUG] [Thread-3895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:50:34.402 [DEBUG] [Thread-3895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:50:34.420 [INFO] [Thread-3895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:50:34.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:50:34.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:50:35.251 [DEBUG] [Thread-3895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:50:35.251 [DEBUG] [Thread-3895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:50:35.301 [DEBUG] [Thread-3895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:50:35.301 [DEBUG] [Thread-3895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:50:35.310 [DEBUG] [Thread-3895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:50:35.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:50:35.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:50:35.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:50:35.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:50:35.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:50:35.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:50:35.347 [DEBUG] [Thread-3895] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:50:41.271 [DEBUG] [Thread-3897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:50:42.931 [DEBUG] [Thread-3898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:50:57.980 [DEBUG] [Thread-3899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:51:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:51:05.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:51:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:51:06.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 50, 59), 39.21, 6.87, 0.0, 16.3, 26.43, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:51:06.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:50:59
2025-11-25T18:51:06.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:51:06.275 [DEBUG] [Thread-3900] [transport.py] [_log()] starting thread (client mode): 0x70d0d3c0
2025-11-25T18:51:06.275 [DEBUG] [Thread-3900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:51:06.297 [DEBUG] [Thread-3900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:51:06.297 [INFO] [Thread-3900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:51:06.300 [DEBUG] [Thread-3900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] client lang: <none>
2025-11-25T18:51:06.301 [DEBUG] [Thread-3900] [transport.py] [_log()] server lang: <none>
2025-11-25T18:51:06.302 [DEBUG] [Thread-3900] [transport.py] [_log()] kex follows: False
2025-11-25T18:51:06.302 [DEBUG] [Thread-3900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:51:06.302 [DEBUG] [Thread-3900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:51:06.302 [DEBUG] [Thread-3900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:51:06.302 [DEBUG] [Thread-3900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:51:06.302 [DEBUG] [Thread-3900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:51:06.302 [DEBUG] [Thread-3900] [transport.py] [_log()] Compression: none
2025-11-25T18:51:06.302 [DEBUG] [Thread-3900] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:51:06.322 [DEBUG] [Thread-3900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:51:06.323 [DEBUG] [Thread-3900] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:51:06.323 [DEBUG] [Thread-3900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:51:06.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:51:06.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:51:06.325 [DEBUG] [Thread-3900] [transport.py] [_log()] userauth is OK
2025-11-25T18:51:06.325 [DEBUG] [Thread-3900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:51:06.325 [DEBUG] [Thread-3900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:51:06.325 [DEBUG] [Thread-3900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:51:06.326 [DEBUG] [Thread-3900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:51:06.348 [INFO] [Thread-3900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:51:06.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:51:06.988 [DEBUG] [Thread-3900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:51:06.988 [DEBUG] [Thread-3900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:51:06.989 [DEBUG] [Thread-3900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:51:07.029 [DEBUG] [Thread-3900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:51:07.029 [DEBUG] [Thread-3900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:51:07.032 [DEBUG] [Thread-3900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:51:07.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:51:07.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:51:07.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:51:07.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:51:07.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:51:07.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:51:07.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:51:07.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:51:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:51:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.701836 -999.00  +26.50  15.38     11   -5.50 1 1 1 1 1   887    0 31.45 -25.44 ----- 12.0 15.4 295.8 20.2 28.3 -31.0 28.8 -30.5 29.1 -29.6 29.1 -30.6
2025-11-25T18:51:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:51:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:51:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.701836
2025-11-25T18:51:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:51:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:51:07.060 [DEBUG] [Thread-3900] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:51:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:51:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:51:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:51:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:50:59', tmtdew=39.21, humidity=6.87, cloud=0.0, wind=16.3, temperature=26.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:50:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:51:07.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:51:07.155 [DEBUG] [Thread-3903] [transport.py] [_log()] starting thread (client mode): 0x70d43b20
2025-11-25T18:51:07.155 [DEBUG] [Thread-3903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:51:07.169 [DEBUG] [Thread-3903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:51:07.169 [INFO] [Thread-3903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] client lang: <none>
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] server lang: <none>
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] kex follows: False
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:51:07.177 [DEBUG] [Thread-3903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:51:07.178 [DEBUG] [Thread-3903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:51:07.178 [DEBUG] [Thread-3903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:51:07.178 [DEBUG] [Thread-3903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:51:07.178 [DEBUG] [Thread-3903] [transport.py] [_log()] Compression: none
2025-11-25T18:51:07.178 [DEBUG] [Thread-3903] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:51:07.234 [DEBUG] [Thread-3903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:51:07.235 [DEBUG] [Thread-3903] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:51:07.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:51:07.236 [DEBUG] [Thread-3903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:51:07.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:51:07.290 [DEBUG] [Thread-3903] [transport.py] [_log()] userauth is OK
2025-11-25T18:51:07.291 [DEBUG] [Thread-3903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:51:07.291 [DEBUG] [Thread-3903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:51:07.291 [DEBUG] [Thread-3903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:51:07.291 [DEBUG] [Thread-3903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:51:07.309 [INFO] [Thread-3903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:51:07.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:51:07.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:51:08.164 [DEBUG] [Thread-3903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:51:08.165 [DEBUG] [Thread-3903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:51:08.213 [DEBUG] [Thread-3903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:51:08.213 [DEBUG] [Thread-3903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:51:08.222 [DEBUG] [Thread-3903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:51:08.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:51:08.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:51:08.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:51:08.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:51:08.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:51:08.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:51:08.260 [DEBUG] [Thread-3903] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:51:13.017 [DEBUG] [Thread-3905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:51:28.077 [DEBUG] [Thread-3906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:51:38.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:51:38.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:51:38.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:51:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 51, 31), 39.26, 6.86, 0.0, 16.25, 26.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:51:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:51:31
2025-11-25T18:51:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:51:39.212 [DEBUG] [Thread-3907] [transport.py] [_log()] starting thread (client mode): 0x70d1e0e0
2025-11-25T18:51:39.212 [DEBUG] [Thread-3907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:51:39.232 [DEBUG] [Thread-3907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:51:39.233 [INFO] [Thread-3907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] client lang: <none>
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] server lang: <none>
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] kex follows: False
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] Compression: none
2025-11-25T18:51:39.236 [DEBUG] [Thread-3907] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:51:39.258 [DEBUG] [Thread-3907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:51:39.259 [DEBUG] [Thread-3907] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:51:39.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:51:39.260 [DEBUG] [Thread-3907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:51:39.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:51:39.262 [DEBUG] [Thread-3907] [transport.py] [_log()] userauth is OK
2025-11-25T18:51:39.262 [DEBUG] [Thread-3907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:51:39.262 [DEBUG] [Thread-3907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:51:39.262 [DEBUG] [Thread-3907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:51:39.262 [DEBUG] [Thread-3907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:51:39.281 [INFO] [Thread-3907] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:51:39.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:51:39.948 [DEBUG] [Thread-3907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:51:39.948 [DEBUG] [Thread-3907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:51:39.948 [DEBUG] [Thread-3907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:51:39.989 [DEBUG] [Thread-3907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:51:39.989 [DEBUG] [Thread-3907] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:51:39.993 [DEBUG] [Thread-3907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:51:40.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:51:40.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:51:40.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:51:40.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:51:40.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:51:40.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:51:40.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:51:40.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:51:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:51:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.702183 -999.00  +26.50  15.20     11   -5.40 1 1 1 1 1   887    0 31.49 -25.96 ----- 20.8 15.2 308.4 20.4 28.2 -31.0 28.8 -30.6 29.1 -29.4 29.1 -30.5
2025-11-25T18:51:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:51:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:51:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.702183
2025-11-25T18:51:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:51:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:51:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:51:40.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:51:40.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:51:40.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:51:31', tmtdew=39.26, humidity=6.86, cloud=0.0, wind=16.25, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:51:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:51:40.020 [DEBUG] [Thread-3907] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:51:40.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:51:40.115 [DEBUG] [Thread-3910] [transport.py] [_log()] starting thread (client mode): 0x70d2b580
2025-11-25T18:51:40.115 [DEBUG] [Thread-3910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:51:40.130 [DEBUG] [Thread-3910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:51:40.130 [INFO] [Thread-3910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] client lang: <none>
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] server lang: <none>
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] kex follows: False
2025-11-25T18:51:40.140 [DEBUG] [Thread-3910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:51:40.141 [DEBUG] [Thread-3910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:51:40.141 [DEBUG] [Thread-3910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:51:40.141 [DEBUG] [Thread-3910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:51:40.141 [DEBUG] [Thread-3910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:51:40.141 [DEBUG] [Thread-3910] [transport.py] [_log()] Compression: none
2025-11-25T18:51:40.141 [DEBUG] [Thread-3910] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:51:40.199 [DEBUG] [Thread-3910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:51:40.200 [DEBUG] [Thread-3910] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:51:40.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:51:40.201 [DEBUG] [Thread-3910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:51:40.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:51:40.255 [DEBUG] [Thread-3910] [transport.py] [_log()] userauth is OK
2025-11-25T18:51:40.255 [DEBUG] [Thread-3910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:51:40.255 [DEBUG] [Thread-3910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:51:40.256 [DEBUG] [Thread-3910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:51:40.256 [DEBUG] [Thread-3910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:51:40.274 [INFO] [Thread-3910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:51:40.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:51:40.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:51:41.076 [DEBUG] [Thread-3910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:51:41.076 [DEBUG] [Thread-3910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:51:41.124 [DEBUG] [Thread-3910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:51:41.125 [DEBUG] [Thread-3910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:51:41.134 [DEBUG] [Thread-3910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:51:41.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:51:41.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:51:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:51:41.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:51:41.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:51:41.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:51:41.170 [DEBUG] [Thread-3910] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:51:41.775 [DEBUG] [Thread-3912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:51:43.109 [DEBUG] [Thread-3913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:51:58.167 [DEBUG] [Thread-3914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:52:11.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:52:11.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:52:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:52:11.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 52, 3), 39.33, 6.83, 0.0, 17.93, 26.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:52:11.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:52:03
2025-11-25T18:52:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:52:12.123 [DEBUG] [Thread-3915] [transport.py] [_log()] starting thread (client mode): 0x70d3abf0
2025-11-25T18:52:12.123 [DEBUG] [Thread-3915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:52:12.138 [DEBUG] [Thread-3915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:52:12.138 [INFO] [Thread-3915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:52:12.142 [DEBUG] [Thread-3915] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:52:12.142 [DEBUG] [Thread-3915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:52:12.142 [DEBUG] [Thread-3915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:52:12.142 [DEBUG] [Thread-3915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:52:12.142 [DEBUG] [Thread-3915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:52:12.142 [DEBUG] [Thread-3915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:52:12.142 [DEBUG] [Thread-3915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] client lang: <none>
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] server lang: <none>
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] kex follows: False
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] Compression: none
2025-11-25T18:52:12.143 [DEBUG] [Thread-3915] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:52:12.161 [DEBUG] [Thread-3915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:52:12.162 [DEBUG] [Thread-3915] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:52:12.162 [DEBUG] [Thread-3915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:52:12.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:52:12.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:52:12.164 [DEBUG] [Thread-3915] [transport.py] [_log()] userauth is OK
2025-11-25T18:52:12.164 [DEBUG] [Thread-3915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:52:12.165 [DEBUG] [Thread-3915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:52:12.165 [DEBUG] [Thread-3915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:52:12.165 [DEBUG] [Thread-3915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:52:12.187 [INFO] [Thread-3915] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:52:12.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:52:12.823 [DEBUG] [Thread-3915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:52:12.823 [DEBUG] [Thread-3915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:52:12.823 [DEBUG] [Thread-3915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:52:12.864 [DEBUG] [Thread-3915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:52:12.864 [DEBUG] [Thread-3915] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:52:12.867 [DEBUG] [Thread-3915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:52:12.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:52:12.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:52:12.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:52:12.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:52:12.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:52:12.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:52:12.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:52:12.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:52:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:52:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.702531 -999.00  +26.40  15.70     11   -5.50 1 1 1 1 1   887    0 31.33 -27.30 ----- 13.1 15.7 310.8 25.7 28.2 -31.0 28.7 -30.6 29.1 -28.9 29.0 -30.4
2025-11-25T18:52:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:52:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:52:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.702531
2025-11-25T18:52:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:52:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:52:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:52:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:52:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:52:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:52:03', tmtdew=39.33, humidity=6.83, cloud=0.0, wind=17.93, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:51:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:52:12.895 [DEBUG] [Thread-3915] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:52:12.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:52:12.991 [DEBUG] [Thread-3918] [transport.py] [_log()] starting thread (client mode): 0x70d1db40
2025-11-25T18:52:12.991 [DEBUG] [Thread-3918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:52:13.005 [DEBUG] [Thread-3918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:52:13.005 [INFO] [Thread-3918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] client lang: <none>
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] server lang: <none>
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] kex follows: False
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:52:13.013 [DEBUG] [Thread-3918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:52:13.014 [DEBUG] [Thread-3918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:52:13.014 [DEBUG] [Thread-3918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:52:13.014 [DEBUG] [Thread-3918] [transport.py] [_log()] Compression: none
2025-11-25T18:52:13.014 [DEBUG] [Thread-3918] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:52:13.073 [DEBUG] [Thread-3918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:52:13.073 [DEBUG] [Thread-3918] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:52:13.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:52:13.074 [DEBUG] [Thread-3918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:52:13.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:52:13.128 [DEBUG] [Thread-3918] [transport.py] [_log()] userauth is OK
2025-11-25T18:52:13.129 [DEBUG] [Thread-3918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:52:13.129 [DEBUG] [Thread-3918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:52:13.129 [DEBUG] [Thread-3918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:52:13.129 [DEBUG] [Thread-3918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:52:13.151 [INFO] [Thread-3918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:52:13.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:52:13.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:52:13.200 [DEBUG] [Thread-3920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:52:13.968 [DEBUG] [Thread-3918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:52:13.968 [DEBUG] [Thread-3918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:52:14.017 [DEBUG] [Thread-3918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:52:14.017 [DEBUG] [Thread-3918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:52:14.027 [DEBUG] [Thread-3918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:52:14.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:52:14.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:52:14.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:52:14.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:52:14.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:52:14.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:52:14.063 [DEBUG] [Thread-3918] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:52:28.252 [DEBUG] [Thread-3921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:52:42.533 [DEBUG] [Thread-3922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:52:43.286 [DEBUG] [Thread-3923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:52:44.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:52:44.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:52:44.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:52:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 52, 35), 39.39, 6.79, 0.0, 19.78, 26.48, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:52:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:52:35
2025-11-25T18:52:44.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:52:45.045 [DEBUG] [Thread-3924] [transport.py] [_log()] starting thread (client mode): 0x7378ee00
2025-11-25T18:52:45.045 [DEBUG] [Thread-3924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:52:45.066 [DEBUG] [Thread-3924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:52:45.066 [INFO] [Thread-3924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:52:45.069 [DEBUG] [Thread-3924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:52:45.069 [DEBUG] [Thread-3924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:52:45.069 [DEBUG] [Thread-3924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:52:45.069 [DEBUG] [Thread-3924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] client lang: <none>
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] server lang: <none>
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] kex follows: False
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] Compression: none
2025-11-25T18:52:45.070 [DEBUG] [Thread-3924] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:52:45.085 [DEBUG] [Thread-3924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:52:45.086 [DEBUG] [Thread-3924] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:52:45.086 [DEBUG] [Thread-3924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:52:45.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:52:45.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:52:45.087 [DEBUG] [Thread-3924] [transport.py] [_log()] userauth is OK
2025-11-25T18:52:45.087 [DEBUG] [Thread-3924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:52:45.087 [DEBUG] [Thread-3924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:52:45.087 [DEBUG] [Thread-3924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:52:45.087 [DEBUG] [Thread-3924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:52:45.099 [INFO] [Thread-3924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:52:45.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:52:45.709 [DEBUG] [Thread-3924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:52:45.709 [DEBUG] [Thread-3924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:52:45.709 [DEBUG] [Thread-3924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:52:45.749 [DEBUG] [Thread-3924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:52:45.750 [DEBUG] [Thread-3924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:52:45.752 [DEBUG] [Thread-3924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:52:45.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:52:45.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:52:45.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:52:45.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:52:45.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:52:45.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:52:45.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.702878 -999.00  +26.30  21.57     11   -5.60 1 1 1 1 1   887    0 31.49 -24.39 ----- 19.5 21.6 313.0 26.0 28.2 -31.0 28.7 -30.8 29.0 -29.2 29.0 -30.4
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.702878
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:52:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:52:35', tmtdew=39.39, humidity=6.79, cloud=0.0, wind=19.78, temperature=26.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:52:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:52:45.773 [DEBUG] [Thread-3924] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:52:45.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:52:45.857 [DEBUG] [Thread-3927] [transport.py] [_log()] starting thread (client mode): 0x70d39180
2025-11-25T18:52:45.857 [DEBUG] [Thread-3927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:52:45.876 [DEBUG] [Thread-3927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:52:45.876 [INFO] [Thread-3927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] client lang: <none>
2025-11-25T18:52:45.884 [DEBUG] [Thread-3927] [transport.py] [_log()] server lang: <none>
2025-11-25T18:52:45.885 [DEBUG] [Thread-3927] [transport.py] [_log()] kex follows: False
2025-11-25T18:52:45.885 [DEBUG] [Thread-3927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:52:45.885 [DEBUG] [Thread-3927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:52:45.885 [DEBUG] [Thread-3927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:52:45.885 [DEBUG] [Thread-3927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:52:45.885 [DEBUG] [Thread-3927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:52:45.885 [DEBUG] [Thread-3927] [transport.py] [_log()] Compression: none
2025-11-25T18:52:45.885 [DEBUG] [Thread-3927] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:52:45.941 [DEBUG] [Thread-3927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:52:45.941 [DEBUG] [Thread-3927] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:52:45.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:52:45.942 [DEBUG] [Thread-3927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:52:45.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:52:45.998 [DEBUG] [Thread-3927] [transport.py] [_log()] userauth is OK
2025-11-25T18:52:45.998 [DEBUG] [Thread-3927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:52:45.998 [DEBUG] [Thread-3927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:52:45.998 [DEBUG] [Thread-3927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:52:45.998 [DEBUG] [Thread-3927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:52:46.013 [INFO] [Thread-3927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:52:46.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:52:46.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:52:46.859 [DEBUG] [Thread-3927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:52:46.859 [DEBUG] [Thread-3927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:52:46.908 [DEBUG] [Thread-3927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:52:46.908 [DEBUG] [Thread-3927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:52:46.917 [DEBUG] [Thread-3927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:52:46.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:52:46.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:52:46.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:52:46.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:52:46.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:52:46.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:52:46.954 [DEBUG] [Thread-3927] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:52:58.321 [DEBUG] [Thread-3929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:53:13.374 [DEBUG] [Thread-3930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:53:16.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:53:16.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:53:16.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:53:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 53, 7), 39.4, 6.79, 0.0, 20.08, 26.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:53:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:53:07
2025-11-25T18:53:17.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:53:17.886 [DEBUG] [Thread-3931] [transport.py] [_log()] starting thread (client mode): 0x7378f790
2025-11-25T18:53:17.887 [DEBUG] [Thread-3931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:53:17.905 [DEBUG] [Thread-3931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:53:17.906 [INFO] [Thread-3931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] client lang: <none>
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] server lang: <none>
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] kex follows: False
2025-11-25T18:53:17.910 [DEBUG] [Thread-3931] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:53:17.911 [DEBUG] [Thread-3931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:53:17.911 [DEBUG] [Thread-3931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:53:17.911 [DEBUG] [Thread-3931] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:53:17.911 [DEBUG] [Thread-3931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:53:17.911 [DEBUG] [Thread-3931] [transport.py] [_log()] Compression: none
2025-11-25T18:53:17.911 [DEBUG] [Thread-3931] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:53:17.929 [DEBUG] [Thread-3931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:53:17.929 [DEBUG] [Thread-3931] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:53:17.930 [DEBUG] [Thread-3931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:53:17.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:53:17.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:53:17.932 [DEBUG] [Thread-3931] [transport.py] [_log()] userauth is OK
2025-11-25T18:53:17.933 [DEBUG] [Thread-3931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:53:17.933 [DEBUG] [Thread-3931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:53:17.933 [DEBUG] [Thread-3931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:53:17.933 [DEBUG] [Thread-3931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:53:17.969 [INFO] [Thread-3931] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:53:17.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:53:18.609 [DEBUG] [Thread-3931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:53:18.609 [DEBUG] [Thread-3931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:53:18.609 [DEBUG] [Thread-3931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:53:18.650 [DEBUG] [Thread-3931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:53:18.650 [DEBUG] [Thread-3931] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:53:18.653 [DEBUG] [Thread-3931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:53:18.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:53:18.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:53:18.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:53:18.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:53:18.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:53:18.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:53:18.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.703572 -999.00  +26.20  17.05     11   -5.70 1 1 1 1 1   887    0 31.30 -23.71 ----- 19.6 17.1 311.6 20.6 28.1 -31.1 28.6 -30.6 28.8 -29.8 28.8 -30.4
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.703572
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:53:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:53:07', tmtdew=39.4, humidity=6.79, cloud=0.0, wind=20.08, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:53:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:53:18.675 [DEBUG] [Thread-3931] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:53:18.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:53:18.759 [DEBUG] [Thread-3934] [transport.py] [_log()] starting thread (client mode): 0x70d578e0
2025-11-25T18:53:18.759 [DEBUG] [Thread-3934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:53:18.774 [DEBUG] [Thread-3934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:53:18.774 [INFO] [Thread-3934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] client lang: <none>
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] server lang: <none>
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] kex follows: False
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] Compression: none
2025-11-25T18:53:18.781 [DEBUG] [Thread-3934] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:53:18.838 [DEBUG] [Thread-3934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:53:18.839 [DEBUG] [Thread-3934] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:53:18.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:53:18.839 [DEBUG] [Thread-3934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:53:18.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:53:18.899 [DEBUG] [Thread-3934] [transport.py] [_log()] userauth is OK
2025-11-25T18:53:18.899 [DEBUG] [Thread-3934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:53:18.899 [DEBUG] [Thread-3934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:53:18.899 [DEBUG] [Thread-3934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:53:18.899 [DEBUG] [Thread-3934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:53:18.913 [INFO] [Thread-3934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:53:18.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:53:18.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:53:19.744 [DEBUG] [Thread-3934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:53:19.744 [DEBUG] [Thread-3934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:53:19.792 [DEBUG] [Thread-3934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:53:19.792 [DEBUG] [Thread-3934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:53:19.800 [DEBUG] [Thread-3934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:53:19.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:53:19.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:53:19.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:53:19.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:53:19.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:53:19.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:53:19.832 [DEBUG] [Thread-3934] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:53:28.406 [DEBUG] [Thread-3936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:53:43.271 [DEBUG] [Thread-3937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:53:43.455 [DEBUG] [Thread-3938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:53:49.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:53:49.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:53:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:53:50.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 53, 39), 39.36, 6.76, 0.0, 19.48, 26.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:53:50.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:53:39
2025-11-25T18:53:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:53:50.779 [DEBUG] [Thread-3939] [transport.py] [_log()] starting thread (client mode): 0x70d54a90
2025-11-25T18:53:50.779 [DEBUG] [Thread-3939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:53:50.800 [DEBUG] [Thread-3939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:53:50.800 [INFO] [Thread-3939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:53:50.803 [DEBUG] [Thread-3939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:53:50.803 [DEBUG] [Thread-3939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:53:50.803 [DEBUG] [Thread-3939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:53:50.803 [DEBUG] [Thread-3939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:53:50.803 [DEBUG] [Thread-3939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:53:50.803 [DEBUG] [Thread-3939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:53:50.803 [DEBUG] [Thread-3939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:53:50.803 [DEBUG] [Thread-3939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] client lang: <none>
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] server lang: <none>
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] kex follows: False
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] Compression: none
2025-11-25T18:53:50.804 [DEBUG] [Thread-3939] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:53:50.823 [DEBUG] [Thread-3939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:53:50.824 [DEBUG] [Thread-3939] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:53:50.824 [DEBUG] [Thread-3939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:53:50.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:53:50.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:53:50.869 [DEBUG] [Thread-3939] [transport.py] [_log()] userauth is OK
2025-11-25T18:53:50.869 [DEBUG] [Thread-3939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:53:50.869 [DEBUG] [Thread-3939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:53:50.869 [DEBUG] [Thread-3939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:53:50.870 [DEBUG] [Thread-3939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:53:50.902 [INFO] [Thread-3939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:53:50.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:53:51.541 [DEBUG] [Thread-3939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:53:51.541 [DEBUG] [Thread-3939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:53:51.541 [DEBUG] [Thread-3939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:53:51.582 [DEBUG] [Thread-3939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:53:51.582 [DEBUG] [Thread-3939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:53:51.586 [DEBUG] [Thread-3939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:53:51.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:53:51.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:53:51.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:53:51.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:53:51.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:53:51.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:53:51.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:53:51.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:53:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:53:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.703919 -999.00  +26.20  13.38     11   -5.70 1 1 1 1 1   887    0 31.30 -25.28 ----- 14.8 13.4 329.2 20.5 28.1 -31.0 28.6 -30.7 28.8 -29.6 28.8 -30.5
2025-11-25T18:53:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:53:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:53:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.703919
2025-11-25T18:53:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:53:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:53:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:53:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:53:51.611 [DEBUG] [Thread-3939] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:53:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:53:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:53:39', tmtdew=39.36, humidity=6.76, cloud=0.0, wind=19.48, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:53:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:53:51.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:53:51.705 [DEBUG] [Thread-3942] [transport.py] [_log()] starting thread (client mode): 0x70d56890
2025-11-25T18:53:51.705 [DEBUG] [Thread-3942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:53:51.719 [DEBUG] [Thread-3942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:53:51.720 [INFO] [Thread-3942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:53:51.727 [DEBUG] [Thread-3942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] client lang: <none>
2025-11-25T18:53:51.728 [DEBUG] [Thread-3942] [transport.py] [_log()] server lang: <none>
2025-11-25T18:53:51.729 [DEBUG] [Thread-3942] [transport.py] [_log()] kex follows: False
2025-11-25T18:53:51.729 [DEBUG] [Thread-3942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:53:51.729 [DEBUG] [Thread-3942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:53:51.729 [DEBUG] [Thread-3942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:53:51.729 [DEBUG] [Thread-3942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:53:51.729 [DEBUG] [Thread-3942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:53:51.729 [DEBUG] [Thread-3942] [transport.py] [_log()] Compression: none
2025-11-25T18:53:51.730 [DEBUG] [Thread-3942] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:53:51.786 [DEBUG] [Thread-3942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:53:51.786 [DEBUG] [Thread-3942] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:53:51.787 [DEBUG] [Thread-3942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:53:51.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:53:51.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:53:51.845 [DEBUG] [Thread-3942] [transport.py] [_log()] userauth is OK
2025-11-25T18:53:51.846 [DEBUG] [Thread-3942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:53:51.846 [DEBUG] [Thread-3942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:53:51.846 [DEBUG] [Thread-3942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:53:51.846 [DEBUG] [Thread-3942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:53:51.864 [INFO] [Thread-3942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:53:51.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:53:51.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:53:52.710 [DEBUG] [Thread-3942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:53:52.710 [DEBUG] [Thread-3942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:53:52.758 [DEBUG] [Thread-3942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:53:52.758 [DEBUG] [Thread-3942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:53:52.768 [DEBUG] [Thread-3942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:53:52.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:53:52.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:53:52.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:53:52.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:53:52.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:53:52.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:53:52.805 [DEBUG] [Thread-3942] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:53:58.493 [DEBUG] [Thread-3944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:54:13.531 [DEBUG] [Thread-3945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:54:22.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:54:22.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:54:22.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:54:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 54, 11), 39.37, 6.74, 0.0, 16.94, 26.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:54:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:54:11
2025-11-25T18:54:23.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:54:23.767 [DEBUG] [Thread-3946] [transport.py] [_log()] starting thread (client mode): 0x70d0d7e0
2025-11-25T18:54:23.767 [DEBUG] [Thread-3946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:54:23.787 [DEBUG] [Thread-3946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:54:23.787 [INFO] [Thread-3946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:54:23.790 [DEBUG] [Thread-3946] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] client lang: <none>
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] server lang: <none>
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] kex follows: False
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] Compression: none
2025-11-25T18:54:23.791 [DEBUG] [Thread-3946] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:54:23.807 [DEBUG] [Thread-3946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:54:23.807 [DEBUG] [Thread-3946] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:54:23.808 [DEBUG] [Thread-3946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:54:23.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:54:23.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:54:23.853 [DEBUG] [Thread-3946] [transport.py] [_log()] userauth is OK
2025-11-25T18:54:23.853 [DEBUG] [Thread-3946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:54:23.853 [DEBUG] [Thread-3946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:54:23.853 [DEBUG] [Thread-3946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:54:23.853 [DEBUG] [Thread-3946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:54:23.886 [INFO] [Thread-3946] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:54:23.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:54:24.533 [DEBUG] [Thread-3946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:54:24.533 [DEBUG] [Thread-3946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:54:24.533 [DEBUG] [Thread-3946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:54:24.574 [DEBUG] [Thread-3946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:54:24.574 [DEBUG] [Thread-3946] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:54:24.578 [DEBUG] [Thread-3946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:54:24.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:54:24.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:54:24.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:54:24.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:54:24.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:54:24.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:54:24.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:54:24.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:54:24.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:54:24.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.704266 -999.00  +26.20  14.98     11   -5.70 1 1 1 1 1   887    0 31.19 -25.40 ----- 20.4 15.0 306.8 18.0 28.1 -30.9 28.5 -30.4 28.8 -29.0 28.8 -30.4
2025-11-25T18:54:24.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:54:24.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:54:24.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.704266
2025-11-25T18:54:24.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:54:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:54:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:54:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:54:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:54:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:54:11', tmtdew=39.37, humidity=6.74, cloud=0.0, wind=16.94, temperature=26.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:54:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:54:24.605 [DEBUG] [Thread-3946] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:54:24.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:54:24.702 [DEBUG] [Thread-3949] [transport.py] [_log()] starting thread (client mode): 0x7378d330
2025-11-25T18:54:24.702 [DEBUG] [Thread-3949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:54:24.720 [DEBUG] [Thread-3949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:54:24.720 [INFO] [Thread-3949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:54:24.728 [DEBUG] [Thread-3949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:54:24.729 [DEBUG] [Thread-3949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:54:24.729 [DEBUG] [Thread-3949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:54:24.729 [DEBUG] [Thread-3949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:54:24.729 [DEBUG] [Thread-3949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:54:24.729 [DEBUG] [Thread-3949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:54:24.729 [DEBUG] [Thread-3949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:54:24.729 [DEBUG] [Thread-3949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] client lang: <none>
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] server lang: <none>
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] kex follows: False
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] Compression: none
2025-11-25T18:54:24.730 [DEBUG] [Thread-3949] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:54:24.789 [DEBUG] [Thread-3949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:54:24.790 [DEBUG] [Thread-3949] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:54:24.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:54:24.791 [DEBUG] [Thread-3949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:54:24.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:54:24.851 [DEBUG] [Thread-3949] [transport.py] [_log()] userauth is OK
2025-11-25T18:54:24.852 [DEBUG] [Thread-3949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:54:24.852 [DEBUG] [Thread-3949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:54:24.852 [DEBUG] [Thread-3949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:54:24.852 [DEBUG] [Thread-3949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:54:24.871 [INFO] [Thread-3949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:54:24.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:54:24.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:54:25.707 [DEBUG] [Thread-3949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:54:25.707 [DEBUG] [Thread-3949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:54:25.756 [DEBUG] [Thread-3949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:54:25.756 [DEBUG] [Thread-3949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:54:25.765 [DEBUG] [Thread-3949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:54:25.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:54:25.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:54:25.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:54:25.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:54:25.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:54:25.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:54:25.802 [DEBUG] [Thread-3949] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:54:28.564 [DEBUG] [Thread-3951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:54:43.612 [DEBUG] [Thread-3952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:54:44.025 [DEBUG] [Thread-3953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:54:55.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:54:55.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:54:55.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:54:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 54, 43), 39.32, 6.81, 0.0, 17.49, 26.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:54:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:54:43
2025-11-25T18:54:56.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:54:56.730 [DEBUG] [Thread-3954] [transport.py] [_log()] starting thread (client mode): 0x70d560b0
2025-11-25T18:54:56.730 [DEBUG] [Thread-3954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:54:56.751 [DEBUG] [Thread-3954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:54:56.751 [INFO] [Thread-3954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] client lang: <none>
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] server lang: <none>
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] kex follows: False
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] Compression: none
2025-11-25T18:54:56.753 [DEBUG] [Thread-3954] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:54:56.770 [DEBUG] [Thread-3954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:54:56.771 [DEBUG] [Thread-3954] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:54:56.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:54:56.772 [DEBUG] [Thread-3954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:54:56.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:54:56.773 [DEBUG] [Thread-3954] [transport.py] [_log()] userauth is OK
2025-11-25T18:54:56.774 [DEBUG] [Thread-3954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:54:56.774 [DEBUG] [Thread-3954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:54:56.774 [DEBUG] [Thread-3954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:54:56.774 [DEBUG] [Thread-3954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:54:56.796 [INFO] [Thread-3954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:54:56.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:54:57.435 [DEBUG] [Thread-3954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:54:57.435 [DEBUG] [Thread-3954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:54:57.436 [DEBUG] [Thread-3954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:54:57.476 [DEBUG] [Thread-3954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:54:57.476 [DEBUG] [Thread-3954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:54:57.479 [DEBUG] [Thread-3954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:54:57.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:54:57.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:54:57.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:54:57.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:54:57.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:54:57.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:54:57.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:54:57.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:54:57.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:54:57.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.704614 -999.00  +26.20  19.22     11   -5.60 1 1 1 1 1   887    0 31.38 -25.17 ----- 17.2 19.2 309.0 24.6 28.0 -31.0 28.4 -30.8 28.7 -29.5 28.6 -30.5
2025-11-25T18:54:57.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:54:57.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:54:57.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.704614
2025-11-25T18:54:57.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:54:57.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:54:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:54:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:54:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:54:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:54:43', tmtdew=39.32, humidity=6.81, cloud=0.0, wind=17.49, temperature=26.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:54:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:54:57.506 [DEBUG] [Thread-3954] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:54:57.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:54:57.609 [DEBUG] [Thread-3957] [transport.py] [_log()] starting thread (client mode): 0x70d1efe0
2025-11-25T18:54:57.609 [DEBUG] [Thread-3957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:54:57.624 [DEBUG] [Thread-3957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:54:57.625 [INFO] [Thread-3957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:54:57.632 [DEBUG] [Thread-3957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:54:57.632 [DEBUG] [Thread-3957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:54:57.632 [DEBUG] [Thread-3957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:54:57.632 [DEBUG] [Thread-3957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:54:57.632 [DEBUG] [Thread-3957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:54:57.632 [DEBUG] [Thread-3957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:54:57.632 [DEBUG] [Thread-3957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:54:57.632 [DEBUG] [Thread-3957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:54:57.632 [DEBUG] [Thread-3957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] client lang: <none>
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] server lang: <none>
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] kex follows: False
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] Compression: none
2025-11-25T18:54:57.633 [DEBUG] [Thread-3957] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:54:57.693 [DEBUG] [Thread-3957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:54:57.694 [DEBUG] [Thread-3957] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:54:57.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:54:57.695 [DEBUG] [Thread-3957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:54:57.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:54:57.749 [DEBUG] [Thread-3957] [transport.py] [_log()] userauth is OK
2025-11-25T18:54:57.749 [DEBUG] [Thread-3957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:54:57.749 [DEBUG] [Thread-3957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:54:57.749 [DEBUG] [Thread-3957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:54:57.749 [DEBUG] [Thread-3957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:54:57.768 [INFO] [Thread-3957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:54:57.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:54:57.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:54:58.614 [DEBUG] [Thread-3957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:54:58.615 [DEBUG] [Thread-3957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:54:58.650 [DEBUG] [Thread-3959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:54:58.662 [DEBUG] [Thread-3957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:54:58.663 [DEBUG] [Thread-3957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:54:58.671 [DEBUG] [Thread-3957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:54:58.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:54:58.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:54:58.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:54:58.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:54:58.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:54:58.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:54:58.706 [DEBUG] [Thread-3957] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:55:13.703 [DEBUG] [Thread-3960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:55:28.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:55:28.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:55:28.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:55:28.735 [DEBUG] [Thread-3961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:55:29.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 55, 15), 39.26, 6.84, 0.0, 16.27, 26.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:55:29.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:55:15
2025-11-25T18:55:29.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:55:29.668 [DEBUG] [Thread-3962] [transport.py] [_log()] starting thread (client mode): 0x7378ca00
2025-11-25T18:55:29.668 [DEBUG] [Thread-3962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:55:29.689 [DEBUG] [Thread-3962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:55:29.689 [INFO] [Thread-3962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:55:29.693 [DEBUG] [Thread-3962] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:55:29.693 [DEBUG] [Thread-3962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:55:29.693 [DEBUG] [Thread-3962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:55:29.693 [DEBUG] [Thread-3962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:55:29.693 [DEBUG] [Thread-3962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:55:29.693 [DEBUG] [Thread-3962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:55:29.693 [DEBUG] [Thread-3962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] client lang: <none>
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] server lang: <none>
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] kex follows: False
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] Compression: none
2025-11-25T18:55:29.694 [DEBUG] [Thread-3962] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:55:29.713 [DEBUG] [Thread-3962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:55:29.714 [DEBUG] [Thread-3962] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:55:29.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:55:29.715 [DEBUG] [Thread-3962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:55:29.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:55:29.716 [DEBUG] [Thread-3962] [transport.py] [_log()] userauth is OK
2025-11-25T18:55:29.717 [DEBUG] [Thread-3962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:55:29.717 [DEBUG] [Thread-3962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:55:29.717 [DEBUG] [Thread-3962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:55:29.717 [DEBUG] [Thread-3962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:55:29.732 [INFO] [Thread-3962] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:55:29.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:55:30.377 [DEBUG] [Thread-3962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:55:30.377 [DEBUG] [Thread-3962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:55:30.378 [DEBUG] [Thread-3962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:55:30.418 [DEBUG] [Thread-3962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:55:30.419 [DEBUG] [Thread-3962] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:55:30.421 [DEBUG] [Thread-3962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:55:30.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:55:30.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:55:30.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:55:30.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:55:30.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:55:30.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:55:30.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:55:30.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:55:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:55:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.704961 -999.00  +26.20  14.48     11   -5.60 1 1 1 1 1   887    0 31.52 -25.97 ----- 13.0 14.5 308.6 19.3 27.9 -31.0 28.4 -30.5 28.7 -29.0 28.6 -30.5
2025-11-25T18:55:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:55:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:55:30.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.704961
2025-11-25T18:55:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:55:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:55:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:55:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:55:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:55:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:55:15', tmtdew=39.26, humidity=6.84, cloud=0.0, wind=16.27, temperature=26.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:55:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:55:30.447 [DEBUG] [Thread-3962] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:55:30.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:55:30.542 [DEBUG] [Thread-3965] [transport.py] [_log()] starting thread (client mode): 0x70d1db40
2025-11-25T18:55:30.542 [DEBUG] [Thread-3965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:55:30.557 [DEBUG] [Thread-3965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:55:30.557 [INFO] [Thread-3965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:55:30.564 [DEBUG] [Thread-3965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] client lang: <none>
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] server lang: <none>
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] kex follows: False
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:55:30.565 [DEBUG] [Thread-3965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:55:30.574 [DEBUG] [Thread-3965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:55:30.574 [DEBUG] [Thread-3965] [transport.py] [_log()] Compression: none
2025-11-25T18:55:30.574 [DEBUG] [Thread-3965] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:55:30.623 [DEBUG] [Thread-3965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:55:30.623 [DEBUG] [Thread-3965] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:55:30.624 [DEBUG] [Thread-3965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:55:30.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:55:30.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:55:30.679 [DEBUG] [Thread-3965] [transport.py] [_log()] userauth is OK
2025-11-25T18:55:30.680 [DEBUG] [Thread-3965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:55:30.680 [DEBUG] [Thread-3965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:55:30.680 [DEBUG] [Thread-3965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:55:30.680 [DEBUG] [Thread-3965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:55:30.699 [INFO] [Thread-3965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:55:30.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:55:30.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:55:31.510 [DEBUG] [Thread-3965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:55:31.510 [DEBUG] [Thread-3965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:55:31.559 [DEBUG] [Thread-3965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:55:31.559 [DEBUG] [Thread-3965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:55:31.568 [DEBUG] [Thread-3965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:55:31.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:55:31.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:55:31.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:55:31.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:55:31.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:55:31.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:55:31.612 [DEBUG] [Thread-3965] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:55:43.778 [DEBUG] [Thread-3967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:55:44.762 [DEBUG] [Thread-3968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:55:58.837 [DEBUG] [Thread-3969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:56:01.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:56:01.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:56:01.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:56:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 55, 47), 39.16, 6.83, 0.0, 15.85, 26.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:56:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:55:47
2025-11-25T18:56:02.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:56:02.564 [DEBUG] [Thread-3970] [transport.py] [_log()] starting thread (client mode): 0x70d568c0
2025-11-25T18:56:02.564 [DEBUG] [Thread-3970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:56:02.584 [DEBUG] [Thread-3970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:56:02.584 [INFO] [Thread-3970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:56:02.587 [DEBUG] [Thread-3970] [transport.py] [_log()] client lang: <none>
2025-11-25T18:56:02.588 [DEBUG] [Thread-3970] [transport.py] [_log()] server lang: <none>
2025-11-25T18:56:02.588 [DEBUG] [Thread-3970] [transport.py] [_log()] kex follows: False
2025-11-25T18:56:02.588 [DEBUG] [Thread-3970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:56:02.588 [DEBUG] [Thread-3970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:56:02.588 [DEBUG] [Thread-3970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:56:02.588 [DEBUG] [Thread-3970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:56:02.588 [DEBUG] [Thread-3970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:56:02.588 [DEBUG] [Thread-3970] [transport.py] [_log()] Compression: none
2025-11-25T18:56:02.588 [DEBUG] [Thread-3970] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:56:02.607 [DEBUG] [Thread-3970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:56:02.608 [DEBUG] [Thread-3970] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:56:02.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:56:02.609 [DEBUG] [Thread-3970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:56:02.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:56:02.611 [DEBUG] [Thread-3970] [transport.py] [_log()] userauth is OK
2025-11-25T18:56:02.611 [DEBUG] [Thread-3970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:56:02.611 [DEBUG] [Thread-3970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:56:02.611 [DEBUG] [Thread-3970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:56:02.611 [DEBUG] [Thread-3970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:56:02.627 [INFO] [Thread-3970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:56:02.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:56:03.243 [DEBUG] [Thread-3970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:56:03.244 [DEBUG] [Thread-3970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:56:03.244 [DEBUG] [Thread-3970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:56:03.285 [DEBUG] [Thread-3970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:56:03.285 [DEBUG] [Thread-3970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:56:03.288 [DEBUG] [Thread-3970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:56:03.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:56:03.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:56:03.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:56:03.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:56:03.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:56:03.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:56:03.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:56:03.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:56:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:56:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.705308 -999.00  +26.20  13.40     11   -5.60 1 1 1 1 1   887    0 31.09 -24.36 ----- 16.4 13.4 308.8 15.5 27.9 -30.7 28.4 -30.4 28.6 -29.5 28.6 -30.3
2025-11-25T18:56:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:56:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:56:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.705308
2025-11-25T18:56:03.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:56:03.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:56:03.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:56:03.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:56:03.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:56:03.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:55:47', tmtdew=39.16, humidity=6.83, cloud=0.0, wind=15.85, temperature=26.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:55:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:56:03.309 [DEBUG] [Thread-3970] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:56:03.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:56:03.408 [DEBUG] [Thread-3973] [transport.py] [_log()] starting thread (client mode): 0x7374e9e0
2025-11-25T18:56:03.409 [DEBUG] [Thread-3973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:56:03.424 [DEBUG] [Thread-3973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:56:03.424 [INFO] [Thread-3973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:56:03.431 [DEBUG] [Thread-3973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] client lang: <none>
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] server lang: <none>
2025-11-25T18:56:03.432 [DEBUG] [Thread-3973] [transport.py] [_log()] kex follows: False
2025-11-25T18:56:03.433 [DEBUG] [Thread-3973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:56:03.433 [DEBUG] [Thread-3973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:56:03.433 [DEBUG] [Thread-3973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:56:03.433 [DEBUG] [Thread-3973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:56:03.433 [DEBUG] [Thread-3973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:56:03.433 [DEBUG] [Thread-3973] [transport.py] [_log()] Compression: none
2025-11-25T18:56:03.433 [DEBUG] [Thread-3973] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:56:03.489 [DEBUG] [Thread-3973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:56:03.490 [DEBUG] [Thread-3973] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:56:03.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:56:03.491 [DEBUG] [Thread-3973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:56:03.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:56:03.545 [DEBUG] [Thread-3973] [transport.py] [_log()] userauth is OK
2025-11-25T18:56:03.546 [DEBUG] [Thread-3973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:56:03.546 [DEBUG] [Thread-3973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:56:03.546 [DEBUG] [Thread-3973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:56:03.546 [DEBUG] [Thread-3973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:56:03.568 [INFO] [Thread-3973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:56:03.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:56:03.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:56:04.431 [DEBUG] [Thread-3973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:56:04.431 [DEBUG] [Thread-3973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:56:04.479 [DEBUG] [Thread-3973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:56:04.479 [DEBUG] [Thread-3973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:56:04.488 [DEBUG] [Thread-3973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:56:04.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:56:04.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:56:04.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:56:04.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:56:04.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:56:04.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:56:04.531 [DEBUG] [Thread-3973] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:56:13.874 [DEBUG] [Thread-3975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:56:28.932 [DEBUG] [Thread-3976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:56:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:56:34.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:56:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:56:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 56, 20), 39.16, 6.83, 0.0, 15.69, 26.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:56:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:56:20
2025-11-25T18:56:35.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:56:35.466 [DEBUG] [Thread-3977] [transport.py] [_log()] starting thread (client mode): 0x70d56f20
2025-11-25T18:56:35.466 [DEBUG] [Thread-3977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:56:35.486 [DEBUG] [Thread-3977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:56:35.487 [INFO] [Thread-3977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:56:35.489 [DEBUG] [Thread-3977] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] client lang: <none>
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] server lang: <none>
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] kex follows: False
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] Compression: none
2025-11-25T18:56:35.490 [DEBUG] [Thread-3977] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:56:35.506 [DEBUG] [Thread-3977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:56:35.507 [DEBUG] [Thread-3977] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:56:35.507 [DEBUG] [Thread-3977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:56:35.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:56:35.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:56:35.510 [DEBUG] [Thread-3977] [transport.py] [_log()] userauth is OK
2025-11-25T18:56:35.510 [DEBUG] [Thread-3977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:56:35.510 [DEBUG] [Thread-3977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:56:35.510 [DEBUG] [Thread-3977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:56:35.510 [DEBUG] [Thread-3977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:56:35.530 [INFO] [Thread-3977] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:56:35.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:56:36.190 [DEBUG] [Thread-3977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:56:36.191 [DEBUG] [Thread-3977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:56:36.191 [DEBUG] [Thread-3977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:56:36.232 [DEBUG] [Thread-3977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:56:36.232 [DEBUG] [Thread-3977] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:56:36.235 [DEBUG] [Thread-3977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:56:36.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:56:36.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:56:36.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:56:36.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:56:36.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:56:36.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:56:36.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:56:36.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:56:36.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:56:36.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.705655 -999.00  +26.20  18.45     11   -5.80 1 1 1 1 1   887    0 30.47 -23.33 ----- 18.9 18.4 311.8 20.8 27.9 -31.1 28.3 -30.5 28.6 -28.7 28.6 -30.2
2025-11-25T18:56:36.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:56:36.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:56:36.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.705655
2025-11-25T18:56:36.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:56:36.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:56:36.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:56:36.261 [DEBUG] [Thread-3977] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:56:36.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:56:36.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:56:36.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:56:20', tmtdew=39.16, humidity=6.83, cloud=0.0, wind=15.69, temperature=26.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:56:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:56:36.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:56:36.357 [DEBUG] [Thread-3980] [transport.py] [_log()] starting thread (client mode): 0x70d0f250
2025-11-25T18:56:36.357 [DEBUG] [Thread-3980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:56:36.372 [DEBUG] [Thread-3980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:56:36.372 [INFO] [Thread-3980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:56:36.379 [DEBUG] [Thread-3980] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] client lang: <none>
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] server lang: <none>
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] kex follows: False
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] Compression: none
2025-11-25T18:56:36.380 [DEBUG] [Thread-3980] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:56:36.440 [DEBUG] [Thread-3980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:56:36.440 [DEBUG] [Thread-3980] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:56:36.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:56:36.441 [DEBUG] [Thread-3980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:56:36.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:56:36.495 [DEBUG] [Thread-3980] [transport.py] [_log()] userauth is OK
2025-11-25T18:56:36.496 [DEBUG] [Thread-3980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:56:36.496 [DEBUG] [Thread-3980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:56:36.496 [DEBUG] [Thread-3980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:56:36.496 [DEBUG] [Thread-3980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:56:36.515 [INFO] [Thread-3980] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:56:36.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:56:36.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:56:37.358 [DEBUG] [Thread-3980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:56:37.358 [DEBUG] [Thread-3980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:56:37.406 [DEBUG] [Thread-3980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:56:37.406 [DEBUG] [Thread-3980] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:56:37.415 [DEBUG] [Thread-3980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:56:37.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:56:37.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:56:37.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:56:37.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:56:37.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:56:37.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:56:37.452 [DEBUG] [Thread-3980] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:56:43.968 [DEBUG] [Thread-3982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:56:45.269 [DEBUG] [Thread-3983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:56:59.032 [DEBUG] [Thread-3984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:57:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:57:07.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:57:07.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:57:08.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 56, 52), 39.34, 6.31, 0.0, 13.16, 26.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:57:08.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:56:52
2025-11-25T18:57:08.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:57:08.402 [DEBUG] [Thread-3985] [transport.py] [_log()] starting thread (client mode): 0x70d1f910
2025-11-25T18:57:08.402 [DEBUG] [Thread-3985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:57:08.422 [DEBUG] [Thread-3985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:57:08.422 [INFO] [Thread-3985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] client lang: <none>
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] server lang: <none>
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] kex follows: False
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] Compression: none
2025-11-25T18:57:08.426 [DEBUG] [Thread-3985] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:57:08.455 [DEBUG] [Thread-3985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:57:08.456 [DEBUG] [Thread-3985] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:57:08.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:57:08.457 [DEBUG] [Thread-3985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:57:08.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:57:08.459 [DEBUG] [Thread-3985] [transport.py] [_log()] userauth is OK
2025-11-25T18:57:08.459 [DEBUG] [Thread-3985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:57:08.459 [DEBUG] [Thread-3985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:57:08.459 [DEBUG] [Thread-3985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:57:08.459 [DEBUG] [Thread-3985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:57:08.477 [INFO] [Thread-3985] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:57:08.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:57:09.052 [DEBUG] [Thread-3985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:57:09.053 [DEBUG] [Thread-3985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:57:09.053 [DEBUG] [Thread-3985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:57:09.094 [DEBUG] [Thread-3985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:57:09.094 [DEBUG] [Thread-3985] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:57:09.098 [DEBUG] [Thread-3985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:57:09.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:57:09.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:57:09.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:57:09.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:57:09.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:57:09.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:57:09.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:57:09.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:57:09.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:57:09.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.706003 -999.00  +26.10  15.94     11   -5.80 1 1 1 1 1   887    0 31.36 -23.26 ----- 14.4 15.9 314.6 20.6 27.8 -30.9 28.2 -30.4 28.6 -29.3 28.5 -30.3
2025-11-25T18:57:09.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:57:09.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:57:09.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.706003
2025-11-25T18:57:09.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:57:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:57:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:57:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:57:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:57:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:56:52', tmtdew=39.34, humidity=6.31, cloud=0.0, wind=13.16, temperature=26.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:56:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:57:09.122 [DEBUG] [Thread-3985] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:57:09.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:57:09.231 [DEBUG] [Thread-3988] [transport.py] [_log()] starting thread (client mode): 0x70d0d480
2025-11-25T18:57:09.231 [DEBUG] [Thread-3988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:57:09.245 [DEBUG] [Thread-3988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:57:09.246 [INFO] [Thread-3988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:57:09.253 [DEBUG] [Thread-3988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:57:09.253 [DEBUG] [Thread-3988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:57:09.254 [DEBUG] [Thread-3988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:57:09.254 [DEBUG] [Thread-3988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:57:09.254 [DEBUG] [Thread-3988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:57:09.254 [DEBUG] [Thread-3988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:57:09.254 [DEBUG] [Thread-3988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:57:09.254 [DEBUG] [Thread-3988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:57:09.254 [DEBUG] [Thread-3988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:57:09.254 [DEBUG] [Thread-3988] [transport.py] [_log()] client lang: <none>
2025-11-25T18:57:09.255 [DEBUG] [Thread-3988] [transport.py] [_log()] server lang: <none>
2025-11-25T18:57:09.255 [DEBUG] [Thread-3988] [transport.py] [_log()] kex follows: False
2025-11-25T18:57:09.255 [DEBUG] [Thread-3988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:57:09.255 [DEBUG] [Thread-3988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:57:09.255 [DEBUG] [Thread-3988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:57:09.255 [DEBUG] [Thread-3988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:57:09.255 [DEBUG] [Thread-3988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:57:09.255 [DEBUG] [Thread-3988] [transport.py] [_log()] Compression: none
2025-11-25T18:57:09.256 [DEBUG] [Thread-3988] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:57:09.314 [DEBUG] [Thread-3988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:57:09.314 [DEBUG] [Thread-3988] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:57:09.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:57:09.316 [DEBUG] [Thread-3988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:57:09.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:57:09.370 [DEBUG] [Thread-3988] [transport.py] [_log()] userauth is OK
2025-11-25T18:57:09.370 [DEBUG] [Thread-3988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:57:09.371 [DEBUG] [Thread-3988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:57:09.371 [DEBUG] [Thread-3988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:57:09.371 [DEBUG] [Thread-3988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:57:09.392 [INFO] [Thread-3988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:57:09.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:57:09.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:57:10.234 [DEBUG] [Thread-3988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:57:10.234 [DEBUG] [Thread-3988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:57:10.283 [DEBUG] [Thread-3988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:57:10.283 [DEBUG] [Thread-3988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:57:10.293 [DEBUG] [Thread-3988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:57:10.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:57:10.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:57:10.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:57:10.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:57:10.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:57:10.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:57:10.337 [DEBUG] [Thread-3988] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:57:14.065 [DEBUG] [Thread-3990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:57:29.118 [DEBUG] [Thread-3991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:57:40.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:57:40.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:57:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:57:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 57, 24), 39.19, 6.37, 0.0, 12.46, 26.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:57:41.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:57:24
2025-11-25T18:57:41.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:57:41.320 [DEBUG] [Thread-3992] [transport.py] [_log()] starting thread (client mode): 0x70d56e00
2025-11-25T18:57:41.320 [DEBUG] [Thread-3992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:57:41.338 [DEBUG] [Thread-3992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:57:41.338 [INFO] [Thread-3992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] client lang: <none>
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] server lang: <none>
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] kex follows: False
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] Compression: none
2025-11-25T18:57:41.341 [DEBUG] [Thread-3992] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:57:41.348 [DEBUG] [Thread-3992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:57:41.349 [DEBUG] [Thread-3992] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:57:41.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:57:41.349 [DEBUG] [Thread-3992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:57:41.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:57:41.350 [DEBUG] [Thread-3992] [transport.py] [_log()] userauth is OK
2025-11-25T18:57:41.350 [DEBUG] [Thread-3992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:57:41.350 [DEBUG] [Thread-3992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:57:41.350 [DEBUG] [Thread-3992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:57:41.350 [DEBUG] [Thread-3992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:57:41.362 [INFO] [Thread-3992] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:57:41.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:57:42.038 [DEBUG] [Thread-3992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:57:42.038 [DEBUG] [Thread-3992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:57:42.038 [DEBUG] [Thread-3992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:57:42.079 [DEBUG] [Thread-3992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:57:42.079 [DEBUG] [Thread-3992] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:57:42.082 [DEBUG] [Thread-3992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:57:42.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:57:42.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:57:42.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:57:42.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:57:42.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:57:42.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:57:42.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.706350 -999.00  +26.20  11.86     11   -5.70 1 1 1 1 1   887    0 31.51 -22.35 ----- 13.7 11.9 309.4 15.7 27.9 -30.8 28.2 -30.4 28.6 -29.0 28.5 -30.1
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.706350
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:57:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:57:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:57:24', tmtdew=39.19, humidity=6.37, cloud=0.0, wind=12.46, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:57:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:57:42.102 [DEBUG] [Thread-3992] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:57:42.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:57:42.188 [DEBUG] [Thread-3995] [transport.py] [_log()] starting thread (client mode): 0x70d1ecb0
2025-11-25T18:57:42.188 [DEBUG] [Thread-3995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:57:42.203 [DEBUG] [Thread-3995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T18:57:42.203 [INFO] [Thread-3995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] client lang: <none>
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] server lang: <none>
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] kex follows: False
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] Compression: none
2025-11-25T18:57:42.211 [DEBUG] [Thread-3995] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:57:42.267 [DEBUG] [Thread-3995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:57:42.267 [DEBUG] [Thread-3995] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:57:42.267 [DEBUG] [Thread-3995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T18:57:42.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T18:57:42.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:57:42.323 [DEBUG] [Thread-3995] [transport.py] [_log()] userauth is OK
2025-11-25T18:57:42.324 [DEBUG] [Thread-3995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:57:42.324 [DEBUG] [Thread-3995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:57:42.324 [DEBUG] [Thread-3995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T18:57:42.324 [DEBUG] [Thread-3995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:57:42.339 [INFO] [Thread-3995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:57:42.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T18:57:42.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:57:43.186 [DEBUG] [Thread-3995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:57:43.186 [DEBUG] [Thread-3995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:57:43.234 [DEBUG] [Thread-3995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:57:43.234 [DEBUG] [Thread-3995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:57:43.242 [DEBUG] [Thread-3995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:57:43.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:57:43.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T18:57:43.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T18:57:43.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:57:43.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:57:43.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:57:43.273 [DEBUG] [Thread-3995] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:57:44.151 [DEBUG] [Thread-3997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:57:45.762 [DEBUG] [Thread-3998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:57:59.205 [DEBUG] [Thread-3999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:58:13.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T18:58:13.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T18:58:13.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T18:58:13.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 18, 57, 56), 39.11, 6.89, 0.0, 12.58, 26.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T18:58:13.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 18:57:56
2025-11-25T18:58:14.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T18:58:14.238 [DEBUG] [Thread-4000] [transport.py] [_log()] starting thread (client mode): 0x7378cd60
2025-11-25T18:58:14.238 [DEBUG] [Thread-4000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T18:58:14.240 [DEBUG] [Thread-4001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:58:14.258 [DEBUG] [Thread-4000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T18:58:14.259 [INFO] [Thread-4000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] client lang: <none>
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] server lang: <none>
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] kex follows: False
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] Compression: none
2025-11-25T18:58:14.262 [DEBUG] [Thread-4000] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T18:58:14.277 [DEBUG] [Thread-4000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T18:58:14.277 [DEBUG] [Thread-4000] [transport.py] [_log()] Switch to new keys ...
2025-11-25T18:58:14.277 [DEBUG] [Thread-4000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T18:58:14.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T18:58:14.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T18:58:14.279 [DEBUG] [Thread-4000] [transport.py] [_log()] userauth is OK
2025-11-25T18:58:14.279 [DEBUG] [Thread-4000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T18:58:14.279 [DEBUG] [Thread-4000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T18:58:14.279 [DEBUG] [Thread-4000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T18:58:14.279 [DEBUG] [Thread-4000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T18:58:14.307 [INFO] [Thread-4000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T18:58:14.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T18:58:14.922 [DEBUG] [Thread-4000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T18:58:14.923 [DEBUG] [Thread-4000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T18:58:14.923 [DEBUG] [Thread-4000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T18:58:14.964 [DEBUG] [Thread-4000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T18:58:14.964 [DEBUG] [Thread-4000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T18:58:14.967 [DEBUG] [Thread-4000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T18:58:14.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T18:58:14.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T18:58:14.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T18:58:14.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T18:58:14.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T18:58:14.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T18:58:14.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T18:58:14.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T18:58:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T18:58:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.706697 -999.00  +26.10  14.67     11   -5.70 1 1 1 1 1   887    0 31.59 -22.42 ----- 15.5 14.7 306.4 19.1 27.8 -30.9 28.2 -30.5 28.4 -30.1 28.4 -30.3
2025-11-25T18:58:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T18:58:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T18:58:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.706697
2025-11-25T18:58:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T18:58:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T18:58:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T18:58:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T18:58:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T18:58:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T18:57:56', tmtdew=39.11, humidity=6.89, cloud=0.0, wind=12.58, temperature=26.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T16:57:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T18:58:14.993 [DEBUG] [Thread-4000] [transport.py] [_log()] EOF in transport thread
2025-11-25T18:58:15.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T18:58:29.270 [DEBUG] [Thread-4004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:58:44.313 [DEBUG] [Thread-4005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:58:46.275 [DEBUG] [Thread-4006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:58:59.347 [DEBUG] [Thread-4007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:59:14.383 [DEBUG] [Thread-4008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:59:29.429 [DEBUG] [Thread-4009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:59:44.462 [DEBUG] [Thread-4010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:59:47.021 [DEBUG] [Thread-4011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T18:59:59.504 [DEBUG] [Thread-4012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:00:14.538 [DEBUG] [Thread-4013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:00:29.576 [DEBUG] [Thread-4014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:00:30.285 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T19:00:44.612 [DEBUG] [Thread-4015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:00:47.800 [DEBUG] [Thread-4016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:00:59.642 [DEBUG] [Thread-4017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:01:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:01:00.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:01:00.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:01:00.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 0, 36), 39.11, 6.87, 0.0, 13.55, 26.31, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:01:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:00:36
2025-11-25T19:01:01.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:01:01.267 [DEBUG] [Thread-4018] [transport.py] [_log()] starting thread (client mode): 0x70d56680
2025-11-25T19:01:01.267 [DEBUG] [Thread-4018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:01:01.287 [DEBUG] [Thread-4018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:01:01.288 [INFO] [Thread-4018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] client lang: <none>
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] server lang: <none>
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] kex follows: False
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] Compression: none
2025-11-25T19:01:01.291 [DEBUG] [Thread-4018] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:01:01.310 [DEBUG] [Thread-4018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:01:01.311 [DEBUG] [Thread-4018] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:01:01.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:01:01.312 [DEBUG] [Thread-4018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:01:01.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:01:01.352 [DEBUG] [Thread-4018] [transport.py] [_log()] userauth is OK
2025-11-25T19:01:01.352 [DEBUG] [Thread-4018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:01:01.353 [DEBUG] [Thread-4018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:01:01.353 [DEBUG] [Thread-4018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:01:01.353 [DEBUG] [Thread-4018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:01:01.388 [INFO] [Thread-4018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:01:01.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:01:02.040 [DEBUG] [Thread-4018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:01:02.040 [DEBUG] [Thread-4018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:01:02.040 [DEBUG] [Thread-4018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:01:02.081 [DEBUG] [Thread-4018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:01:02.081 [DEBUG] [Thread-4018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:01:02.084 [DEBUG] [Thread-4018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:01:02.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:01:02.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:01:02.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:01:02.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:01:02.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:01:02.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:01:02.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:01:02.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:01:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:01:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.708780 -999.00  +26.20  14.82     11   -5.70 1 1 1 1 1   887    0 31.76 -19.64 ----- 15.4 14.8 294.6 18.4 27.6 -30.6 28.0 -30.2 28.2 -29.5 28.2 -30.1
2025-11-25T19:01:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:01:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:01:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.708780
2025-11-25T19:01:02.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:01:02.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:01:02.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:01:02.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:01:02.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:01:02.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:00:36', tmtdew=39.11, humidity=6.87, cloud=0.0, wind=13.55, temperature=26.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:00:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:01:02.111 [DEBUG] [Thread-4018] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:01:02.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:01:02.206 [DEBUG] [Thread-4021] [transport.py] [_log()] starting thread (client mode): 0x7374ff70
2025-11-25T19:01:02.206 [DEBUG] [Thread-4021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:01:02.220 [DEBUG] [Thread-4021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:01:02.221 [INFO] [Thread-4021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:01:02.228 [DEBUG] [Thread-4021] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:01:02.228 [DEBUG] [Thread-4021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:01:02.228 [DEBUG] [Thread-4021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:01:02.228 [DEBUG] [Thread-4021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] client lang: <none>
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] server lang: <none>
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] kex follows: False
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] Compression: none
2025-11-25T19:01:02.229 [DEBUG] [Thread-4021] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:01:02.292 [DEBUG] [Thread-4021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:01:02.293 [DEBUG] [Thread-4021] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:01:02.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:01:02.294 [DEBUG] [Thread-4021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:01:02.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:01:02.352 [DEBUG] [Thread-4021] [transport.py] [_log()] userauth is OK
2025-11-25T19:01:02.352 [DEBUG] [Thread-4021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:01:02.352 [DEBUG] [Thread-4021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:01:02.352 [DEBUG] [Thread-4021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:01:02.352 [DEBUG] [Thread-4021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:01:02.375 [INFO] [Thread-4021] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:01:02.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:01:02.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:01:03.192 [DEBUG] [Thread-4021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:01:03.192 [DEBUG] [Thread-4021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:01:03.239 [DEBUG] [Thread-4021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:01:03.239 [DEBUG] [Thread-4021] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:01:03.248 [DEBUG] [Thread-4021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:01:03.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:01:03.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:01:03.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:01:03.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:01:03.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:01:03.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:01:03.282 [DEBUG] [Thread-4021] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:01:14.675 [DEBUG] [Thread-4023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:01:29.736 [DEBUG] [Thread-4024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:01:33.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:01:33.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:01:33.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:01:33.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 1, 8), 39.11, 6.87, 0.0, 14.86, 26.31, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:01:33.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:01:08
2025-11-25T19:01:34.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:01:34.240 [DEBUG] [Thread-4025] [transport.py] [_log()] starting thread (client mode): 0x70d3b850
2025-11-25T19:01:34.241 [DEBUG] [Thread-4025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:01:34.261 [DEBUG] [Thread-4025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:01:34.261 [INFO] [Thread-4025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] client lang: <none>
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] server lang: <none>
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] kex follows: False
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] Compression: none
2025-11-25T19:01:34.265 [DEBUG] [Thread-4025] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:01:34.283 [DEBUG] [Thread-4025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:01:34.284 [DEBUG] [Thread-4025] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:01:34.285 [DEBUG] [Thread-4025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:01:34.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:01:34.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:01:34.287 [DEBUG] [Thread-4025] [transport.py] [_log()] userauth is OK
2025-11-25T19:01:34.287 [DEBUG] [Thread-4025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:01:34.288 [DEBUG] [Thread-4025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:01:34.288 [DEBUG] [Thread-4025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:01:34.288 [DEBUG] [Thread-4025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:01:34.312 [INFO] [Thread-4025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:01:34.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:01:34.916 [DEBUG] [Thread-4025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:01:34.917 [DEBUG] [Thread-4025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:01:34.917 [DEBUG] [Thread-4025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:01:34.958 [DEBUG] [Thread-4025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:01:34.958 [DEBUG] [Thread-4025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:01:34.961 [DEBUG] [Thread-4025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:01:34.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:01:34.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:01:34.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:01:34.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:01:34.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:01:34.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:01:34.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:01:34.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:01:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:01:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.709127 -999.00  +26.20  13.44     11   -5.70 1 1 1 1 1   887    0 31.29 -20.28 ----- 10.8 13.4 308.2 17.4 27.6 -30.7 28.0 -30.2 28.1 -28.8 28.2 -30.0
2025-11-25T19:01:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:01:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:01:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.709127
2025-11-25T19:01:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:01:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:01:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:01:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:01:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:01:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:01:08', tmtdew=39.11, humidity=6.87, cloud=0.0, wind=14.86, temperature=26.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:01:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:01:34.988 [DEBUG] [Thread-4025] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:01:35.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:01:35.082 [DEBUG] [Thread-4028] [transport.py] [_log()] starting thread (client mode): 0x70d39b70
2025-11-25T19:01:35.082 [DEBUG] [Thread-4028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:01:35.097 [DEBUG] [Thread-4028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:01:35.097 [INFO] [Thread-4028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] client lang: <none>
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] server lang: <none>
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] kex follows: False
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:01:35.105 [DEBUG] [Thread-4028] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:01:35.106 [DEBUG] [Thread-4028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:01:35.106 [DEBUG] [Thread-4028] [transport.py] [_log()] Compression: none
2025-11-25T19:01:35.106 [DEBUG] [Thread-4028] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:01:35.163 [DEBUG] [Thread-4028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:01:35.163 [DEBUG] [Thread-4028] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:01:35.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:01:35.165 [DEBUG] [Thread-4028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:01:35.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:01:35.219 [DEBUG] [Thread-4028] [transport.py] [_log()] userauth is OK
2025-11-25T19:01:35.219 [DEBUG] [Thread-4028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:01:35.219 [DEBUG] [Thread-4028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:01:35.220 [DEBUG] [Thread-4028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:01:35.220 [DEBUG] [Thread-4028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:01:35.239 [INFO] [Thread-4028] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:01:35.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:01:35.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:01:36.066 [DEBUG] [Thread-4028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:01:36.066 [DEBUG] [Thread-4028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:01:36.115 [DEBUG] [Thread-4028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:01:36.115 [DEBUG] [Thread-4028] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:01:36.124 [DEBUG] [Thread-4028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:01:36.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:01:36.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:01:36.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:01:36.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:01:36.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:01:36.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:01:36.161 [DEBUG] [Thread-4028] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:01:44.770 [DEBUG] [Thread-4030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:01:48.523 [DEBUG] [Thread-4031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:01:59.823 [DEBUG] [Thread-4032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:02:06.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:02:06.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:02:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:02:06.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 1, 40), 39.26, 6.81, 0.0, 13.96, 26.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:02:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:01:40
2025-11-25T19:02:06.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:02:07.131 [DEBUG] [Thread-4033] [transport.py] [_log()] starting thread (client mode): 0x70d57ac0
2025-11-25T19:02:07.131 [DEBUG] [Thread-4033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:02:07.152 [DEBUG] [Thread-4033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:02:07.153 [INFO] [Thread-4033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] client lang: <none>
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] server lang: <none>
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] kex follows: False
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] Compression: none
2025-11-25T19:02:07.156 [DEBUG] [Thread-4033] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:02:07.174 [DEBUG] [Thread-4033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:02:07.175 [DEBUG] [Thread-4033] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:02:07.175 [DEBUG] [Thread-4033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:02:07.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:02:07.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:02:07.177 [DEBUG] [Thread-4033] [transport.py] [_log()] userauth is OK
2025-11-25T19:02:07.178 [DEBUG] [Thread-4033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:02:07.178 [DEBUG] [Thread-4033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:02:07.178 [DEBUG] [Thread-4033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:02:07.178 [DEBUG] [Thread-4033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:02:07.196 [INFO] [Thread-4033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:02:07.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:02:07.801 [DEBUG] [Thread-4033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:02:07.802 [DEBUG] [Thread-4033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:02:07.802 [DEBUG] [Thread-4033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:02:07.842 [DEBUG] [Thread-4033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:02:07.843 [DEBUG] [Thread-4033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:02:07.846 [DEBUG] [Thread-4033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:02:07.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:02:07.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:02:07.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:02:07.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:02:07.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:02:07.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:02:07.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:02:07.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:02:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:02:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.709475 -999.00  +26.20  13.15     11   -5.70 1 1 1 1 1   887    0 31.53 -19.71 ----- 12.6 13.2 292.4 16.3 27.6 -30.7 28.0 -30.2 28.2 -29.0 28.1 -30.0
2025-11-25T19:02:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:02:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:02:07.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.709475
2025-11-25T19:02:07.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:02:07.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:02:07.871 [DEBUG] [Thread-4033] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:02:07.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:02:07.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:02:07.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:02:07.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:01:40', tmtdew=39.26, humidity=6.81, cloud=0.0, wind=13.96, temperature=26.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:01:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:02:07.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:02:07.966 [DEBUG] [Thread-4036] [transport.py] [_log()] starting thread (client mode): 0x7376d810
2025-11-25T19:02:07.966 [DEBUG] [Thread-4036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:02:07.981 [DEBUG] [Thread-4036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:02:07.981 [INFO] [Thread-4036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:02:07.988 [DEBUG] [Thread-4036] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:02:07.988 [DEBUG] [Thread-4036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:02:07.988 [DEBUG] [Thread-4036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:02:07.988 [DEBUG] [Thread-4036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:02:07.988 [DEBUG] [Thread-4036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:02:07.988 [DEBUG] [Thread-4036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] client lang: <none>
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] server lang: <none>
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] kex follows: False
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] Compression: none
2025-11-25T19:02:07.989 [DEBUG] [Thread-4036] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:02:08.047 [DEBUG] [Thread-4036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:02:08.048 [DEBUG] [Thread-4036] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:02:08.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:02:08.049 [DEBUG] [Thread-4036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:02:08.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:02:08.107 [DEBUG] [Thread-4036] [transport.py] [_log()] userauth is OK
2025-11-25T19:02:08.107 [DEBUG] [Thread-4036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:02:08.107 [DEBUG] [Thread-4036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:02:08.107 [DEBUG] [Thread-4036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:02:08.107 [DEBUG] [Thread-4036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:02:08.126 [INFO] [Thread-4036] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:02:08.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:02:08.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:02:09.003 [DEBUG] [Thread-4036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:02:09.003 [DEBUG] [Thread-4036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:02:09.051 [DEBUG] [Thread-4036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:02:09.051 [DEBUG] [Thread-4036] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:02:09.061 [DEBUG] [Thread-4036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:02:09.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:02:09.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:02:09.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:02:09.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:02:09.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:02:09.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:02:09.098 [DEBUG] [Thread-4036] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:02:14.850 [DEBUG] [Thread-4038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:02:29.905 [DEBUG] [Thread-4039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:02:39.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:02:39.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:02:39.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:02:39.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 2, 12), 39.1, 6.89, 0.0, 12.21, 26.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:02:39.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:02:12
2025-11-25T19:02:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:02:40.115 [DEBUG] [Thread-4040] [transport.py] [_log()] starting thread (client mode): 0x70d555d0
2025-11-25T19:02:40.115 [DEBUG] [Thread-4040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:02:40.127 [DEBUG] [Thread-4040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:02:40.128 [INFO] [Thread-4040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] client lang: <none>
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] server lang: <none>
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] kex follows: False
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] Compression: none
2025-11-25T19:02:40.131 [DEBUG] [Thread-4040] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:02:40.147 [DEBUG] [Thread-4040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:02:40.147 [DEBUG] [Thread-4040] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:02:40.147 [DEBUG] [Thread-4040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:02:40.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:02:40.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:02:40.192 [DEBUG] [Thread-4040] [transport.py] [_log()] userauth is OK
2025-11-25T19:02:40.192 [DEBUG] [Thread-4040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:02:40.192 [DEBUG] [Thread-4040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:02:40.192 [DEBUG] [Thread-4040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:02:40.192 [DEBUG] [Thread-4040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:02:40.207 [INFO] [Thread-4040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:02:40.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:02:40.825 [DEBUG] [Thread-4040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:02:40.825 [DEBUG] [Thread-4040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:02:40.825 [DEBUG] [Thread-4040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:02:40.866 [DEBUG] [Thread-4040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:02:40.866 [DEBUG] [Thread-4040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:02:40.871 [DEBUG] [Thread-4040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:02:40.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:02:40.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:02:40.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:02:40.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:02:40.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:02:40.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:02:40.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.709822 -999.00  +26.20   8.92     11   -5.70 1 1 1 1 1   887    0 31.77 -18.27 ----- 9.6 8.9 309.2 15.6 27.5 -30.4 27.9 -29.9 28.1 -29.0 28.1 -29.8
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.709822
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:02:40.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:02:12', tmtdew=39.1, humidity=6.89, cloud=0.0, wind=12.21, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:02:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:02:40.888 [DEBUG] [Thread-4040] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:02:40.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:02:40.976 [DEBUG] [Thread-4043] [transport.py] [_log()] starting thread (client mode): 0x70d571c0
2025-11-25T19:02:40.976 [DEBUG] [Thread-4043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:02:40.991 [DEBUG] [Thread-4043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:02:40.991 [INFO] [Thread-4043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] client lang: <none>
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] server lang: <none>
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] kex follows: False
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] Compression: none
2025-11-25T19:02:41.003 [DEBUG] [Thread-4043] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:02:41.063 [DEBUG] [Thread-4043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:02:41.063 [DEBUG] [Thread-4043] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:02:41.063 [DEBUG] [Thread-4043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:02:41.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:02:41.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:02:41.122 [DEBUG] [Thread-4043] [transport.py] [_log()] userauth is OK
2025-11-25T19:02:41.123 [DEBUG] [Thread-4043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:02:41.123 [DEBUG] [Thread-4043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:02:41.123 [DEBUG] [Thread-4043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:02:41.123 [DEBUG] [Thread-4043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:02:41.140 [INFO] [Thread-4043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:02:41.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:02:41.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:02:42.002 [DEBUG] [Thread-4043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:02:42.003 [DEBUG] [Thread-4043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:02:42.050 [DEBUG] [Thread-4043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:02:42.050 [DEBUG] [Thread-4043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:02:42.058 [DEBUG] [Thread-4043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:02:42.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:02:42.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:02:42.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:02:42.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:02:42.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:02:42.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:02:42.090 [DEBUG] [Thread-4043] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:02:44.937 [DEBUG] [Thread-4045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:02:49.269 [DEBUG] [Thread-4046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:02:59.989 [DEBUG] [Thread-4047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:03:12.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:03:12.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:03:12.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:03:12.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 2, 45), 39.22, 6.83, 0.0, 14.26, 26.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:03:12.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:02:45
2025-11-25T19:03:12.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:03:13.082 [DEBUG] [Thread-4048] [transport.py] [_log()] starting thread (client mode): 0x7374fcd0
2025-11-25T19:03:13.082 [DEBUG] [Thread-4048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:03:13.102 [DEBUG] [Thread-4048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:03:13.102 [INFO] [Thread-4048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] client lang: <none>
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] server lang: <none>
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] kex follows: False
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] Compression: none
2025-11-25T19:03:13.106 [DEBUG] [Thread-4048] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:03:13.122 [DEBUG] [Thread-4048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:03:13.123 [DEBUG] [Thread-4048] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:03:13.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:03:13.123 [DEBUG] [Thread-4048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:03:13.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:03:13.125 [DEBUG] [Thread-4048] [transport.py] [_log()] userauth is OK
2025-11-25T19:03:13.125 [DEBUG] [Thread-4048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:03:13.125 [DEBUG] [Thread-4048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:03:13.126 [DEBUG] [Thread-4048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:03:13.126 [DEBUG] [Thread-4048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:03:13.143 [INFO] [Thread-4048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:03:13.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:03:13.771 [DEBUG] [Thread-4048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:03:13.772 [DEBUG] [Thread-4048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:03:13.772 [DEBUG] [Thread-4048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:03:13.812 [DEBUG] [Thread-4048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:03:13.812 [DEBUG] [Thread-4048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:03:13.814 [DEBUG] [Thread-4048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:03:13.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:03:13.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:03:13.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:03:13.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:03:13.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:03:13.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:03:13.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:03:13.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:03:13.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.710169 -999.00  +26.20   9.77     11   -5.70 1 1 1 1 1   887    0 31.91 -19.37 ----- 11.3 9.8 295.0 15.9 27.5 -30.4 27.9 -30.0 28.1 -28.7 28.1 -30.1
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.710169
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:03:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:02:45', tmtdew=39.22, humidity=6.83, cloud=0.0, wind=14.26, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:02:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:03:13.831 [DEBUG] [Thread-4048] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:03:13.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:03:13.917 [DEBUG] [Thread-4051] [transport.py] [_log()] starting thread (client mode): 0x70d3a9e0
2025-11-25T19:03:13.918 [DEBUG] [Thread-4051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:03:13.932 [DEBUG] [Thread-4051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:03:13.932 [INFO] [Thread-4051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] client lang: <none>
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] server lang: <none>
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] kex follows: False
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] Compression: none
2025-11-25T19:03:13.939 [DEBUG] [Thread-4051] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:03:13.994 [DEBUG] [Thread-4051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:03:13.994 [DEBUG] [Thread-4051] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:03:13.994 [DEBUG] [Thread-4051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:03:13.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:03:13.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:03:14.052 [DEBUG] [Thread-4051] [transport.py] [_log()] userauth is OK
2025-11-25T19:03:14.052 [DEBUG] [Thread-4051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:03:14.052 [DEBUG] [Thread-4051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:03:14.052 [DEBUG] [Thread-4051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:03:14.052 [DEBUG] [Thread-4051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:03:14.068 [INFO] [Thread-4051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:03:14.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:03:14.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:03:14.909 [DEBUG] [Thread-4051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:03:14.909 [DEBUG] [Thread-4051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:03:14.957 [DEBUG] [Thread-4051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:03:14.957 [DEBUG] [Thread-4051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:03:14.965 [DEBUG] [Thread-4051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:03:14.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:03:14.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:03:14.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:03:14.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:03:14.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:03:14.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:03:14.997 [DEBUG] [Thread-4051] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:03:15.021 [DEBUG] [Thread-4053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:03:30.070 [DEBUG] [Thread-4054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:03:45.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:03:45.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:03: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
2025-11-25T19:03:45.113 [DEBUG] [Thread-4055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:03:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 3, 17), 39.11, 6.89, 0.0, 14.73, 26.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:03:45.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:03:17
2025-11-25T19:03:45.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:03:45.961 [DEBUG] [Thread-4056] [transport.py] [_log()] starting thread (client mode): 0x70d57d30
2025-11-25T19:03:45.961 [DEBUG] [Thread-4056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:03:45.981 [DEBUG] [Thread-4056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:03:45.981 [INFO] [Thread-4056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] client lang: <none>
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] server lang: <none>
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] kex follows: False
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] Compression: none
2025-11-25T19:03:45.985 [DEBUG] [Thread-4056] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:03:46.003 [DEBUG] [Thread-4056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:03:46.004 [DEBUG] [Thread-4056] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:03:46.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:03:46.005 [DEBUG] [Thread-4056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:03:46.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:03:46.007 [DEBUG] [Thread-4056] [transport.py] [_log()] userauth is OK
2025-11-25T19:03:46.007 [DEBUG] [Thread-4056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:03:46.007 [DEBUG] [Thread-4056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:03:46.007 [DEBUG] [Thread-4056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:03:46.007 [DEBUG] [Thread-4056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:03:46.024 [INFO] [Thread-4056] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:03:46.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:03:46.659 [DEBUG] [Thread-4056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:03:46.660 [DEBUG] [Thread-4056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:03:46.660 [DEBUG] [Thread-4056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:03:46.701 [DEBUG] [Thread-4056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:03:46.701 [DEBUG] [Thread-4056] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:03:46.705 [DEBUG] [Thread-4056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:03:46.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:03:46.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:03:46.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:03:46.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:03:46.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:03:46.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:03:46.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:03:46.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:03:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:03:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.710864 -999.00  +26.10  17.80     13   -4.30 1 1 1 1 1   887    0 31.27 -26.18 ----- 22.6 17.8 300.0 22.2 27.5 -30.7 27.8 -30.1 27.9 -28.5 27.9 -29.9
2025-11-25T19:03:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:03:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:03:46.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.710864
2025-11-25T19:03:46.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:03:46.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:03:46.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:03:46.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:03:46.739 [DEBUG] [Thread-4056] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:03:46.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:03:46.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:03:17', tmtdew=39.11, humidity=6.89, cloud=0.0, wind=14.73, temperature=26.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:03:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:03:46.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:03:46.835 [DEBUG] [Thread-4059] [transport.py] [_log()] starting thread (client mode): 0x70d1db40
2025-11-25T19:03:46.836 [DEBUG] [Thread-4059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:03:46.850 [DEBUG] [Thread-4059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:03:46.851 [INFO] [Thread-4059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:03:46.858 [DEBUG] [Thread-4059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:03:46.858 [DEBUG] [Thread-4059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:03:46.858 [DEBUG] [Thread-4059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] client lang: <none>
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] server lang: <none>
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] kex follows: False
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] Compression: none
2025-11-25T19:03:46.859 [DEBUG] [Thread-4059] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:03:46.919 [DEBUG] [Thread-4059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:03:46.920 [DEBUG] [Thread-4059] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:03:46.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:03:46.921 [DEBUG] [Thread-4059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:03:46.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:03:46.975 [DEBUG] [Thread-4059] [transport.py] [_log()] userauth is OK
2025-11-25T19:03:46.976 [DEBUG] [Thread-4059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:03:46.976 [DEBUG] [Thread-4059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:03:46.976 [DEBUG] [Thread-4059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:03:46.976 [DEBUG] [Thread-4059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:03:46.998 [INFO] [Thread-4059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:03:46.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:03:46.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:03:47.857 [DEBUG] [Thread-4059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:03:47.857 [DEBUG] [Thread-4059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:03:47.905 [DEBUG] [Thread-4059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:03:47.905 [DEBUG] [Thread-4059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:03:47.914 [DEBUG] [Thread-4059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:03:47.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:03:47.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:03:47.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:03:47.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:03:47.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:03:47.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:03:47.951 [DEBUG] [Thread-4059] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:03:50.014 [DEBUG] [Thread-4061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:04:00.146 [DEBUG] [Thread-4062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:04:15.198 [DEBUG] [Thread-4063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:04:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:04:17.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:04:17.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:04:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 3, 49), 38.38, 7.37, 0.0, 18.51, 26.28, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:04:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:03:49
2025-11-25T19:04:18.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:04:18.907 [DEBUG] [Thread-4064] [transport.py] [_log()] starting thread (client mode): 0x70d29ea0
2025-11-25T19:04:18.907 [DEBUG] [Thread-4064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:04:18.926 [DEBUG] [Thread-4064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:04:18.927 [INFO] [Thread-4064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] client lang: <none>
2025-11-25T19:04:18.930 [DEBUG] [Thread-4064] [transport.py] [_log()] server lang: <none>
2025-11-25T19:04:18.931 [DEBUG] [Thread-4064] [transport.py] [_log()] kex follows: False
2025-11-25T19:04:18.931 [DEBUG] [Thread-4064] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:04:18.931 [DEBUG] [Thread-4064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:04:18.931 [DEBUG] [Thread-4064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:04:18.931 [DEBUG] [Thread-4064] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:04:18.931 [DEBUG] [Thread-4064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:04:18.931 [DEBUG] [Thread-4064] [transport.py] [_log()] Compression: none
2025-11-25T19:04:18.931 [DEBUG] [Thread-4064] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:04:18.951 [DEBUG] [Thread-4064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:04:18.952 [DEBUG] [Thread-4064] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:04:18.952 [DEBUG] [Thread-4064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:04:18.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:04:18.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:04:18.997 [DEBUG] [Thread-4064] [transport.py] [_log()] userauth is OK
2025-11-25T19:04:18.997 [DEBUG] [Thread-4064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:04:18.997 [DEBUG] [Thread-4064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:04:18.997 [DEBUG] [Thread-4064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:04:18.997 [DEBUG] [Thread-4064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:04:19.019 [INFO] [Thread-4064] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:04:19.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:04:19.656 [DEBUG] [Thread-4064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:04:19.656 [DEBUG] [Thread-4064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:04:19.657 [DEBUG] [Thread-4064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:04:19.697 [DEBUG] [Thread-4064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:04:19.697 [DEBUG] [Thread-4064] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:04:19.700 [DEBUG] [Thread-4064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:04:19.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:04:19.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:04:19.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:04:19.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:04:19.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:04:19.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:04:19.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:04:19.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:04:19.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:04:19.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.711211 -999.00  +25.80  20.09     13   -3.70 1 1 1 1 1   887    0 30.49 -32.81 ----- 21.0 20.1 294.6 27.0 27.4 -30.4 27.7 -30.1 27.8 -29.7 27.9 -29.8
2025-11-25T19:04:19.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:04:19.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:04:19.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.711211
2025-11-25T19:04:19.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:04:19.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:04:19.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:04:19.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:04:19.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:04:19.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:03:49', tmtdew=38.38, humidity=7.37, cloud=0.0, wind=18.51, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:04:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:04:19.728 [DEBUG] [Thread-4064] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:04:19.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:04:19.824 [DEBUG] [Thread-4067] [transport.py] [_log()] starting thread (client mode): 0x70d55150
2025-11-25T19:04:19.824 [DEBUG] [Thread-4067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:04:19.839 [DEBUG] [Thread-4067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:04:19.839 [INFO] [Thread-4067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:04:19.846 [DEBUG] [Thread-4067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:04:19.847 [DEBUG] [Thread-4067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:04:19.847 [DEBUG] [Thread-4067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:04:19.847 [DEBUG] [Thread-4067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:04:19.847 [DEBUG] [Thread-4067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:04:19.847 [DEBUG] [Thread-4067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:04:19.847 [DEBUG] [Thread-4067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:04:19.847 [DEBUG] [Thread-4067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:04:19.848 [DEBUG] [Thread-4067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:04:19.848 [DEBUG] [Thread-4067] [transport.py] [_log()] client lang: <none>
2025-11-25T19:04:19.848 [DEBUG] [Thread-4067] [transport.py] [_log()] server lang: <none>
2025-11-25T19:04:19.848 [DEBUG] [Thread-4067] [transport.py] [_log()] kex follows: False
2025-11-25T19:04:19.848 [DEBUG] [Thread-4067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:04:19.848 [DEBUG] [Thread-4067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:04:19.848 [DEBUG] [Thread-4067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:04:19.849 [DEBUG] [Thread-4067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:04:19.849 [DEBUG] [Thread-4067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:04:19.849 [DEBUG] [Thread-4067] [transport.py] [_log()] Compression: none
2025-11-25T19:04:19.849 [DEBUG] [Thread-4067] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:04:19.907 [DEBUG] [Thread-4067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:04:19.908 [DEBUG] [Thread-4067] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:04:19.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:04:19.910 [DEBUG] [Thread-4067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:04:19.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:04:19.966 [DEBUG] [Thread-4067] [transport.py] [_log()] userauth is OK
2025-11-25T19:04:19.966 [DEBUG] [Thread-4067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:04:19.967 [DEBUG] [Thread-4067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:04:19.967 [DEBUG] [Thread-4067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:04:19.967 [DEBUG] [Thread-4067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:04:19.987 [INFO] [Thread-4067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:04:19.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:04:19.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:04:20.813 [DEBUG] [Thread-4067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:04:20.813 [DEBUG] [Thread-4067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:04:20.862 [DEBUG] [Thread-4067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:04:20.862 [DEBUG] [Thread-4067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:04:20.871 [DEBUG] [Thread-4067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:04:20.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:04: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')
2025-11-25T19:04:20.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:04:20.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:04:20.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:04:20.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:04:20.908 [DEBUG] [Thread-4067] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:04:30.229 [DEBUG] [Thread-4069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:04:45.269 [DEBUG] [Thread-4070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:04:50.520 [DEBUG] [Thread-4071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:04:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:04:50.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:04:50.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:04:51.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 4, 21), 37.84, 7.67, 0.0, 18.65, 26.23, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:04:51.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:04:21
2025-11-25T19:04:51.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:04:51.837 [DEBUG] [Thread-4072] [transport.py] [_log()] starting thread (client mode): 0x70d018a0
2025-11-25T19:04:51.837 [DEBUG] [Thread-4072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:04:51.858 [DEBUG] [Thread-4072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:04:51.858 [INFO] [Thread-4072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:04:51.862 [DEBUG] [Thread-4072] [transport.py] [_log()] client lang: <none>
2025-11-25T19:04:51.863 [DEBUG] [Thread-4072] [transport.py] [_log()] server lang: <none>
2025-11-25T19:04:51.863 [DEBUG] [Thread-4072] [transport.py] [_log()] kex follows: False
2025-11-25T19:04:51.863 [DEBUG] [Thread-4072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:04:51.863 [DEBUG] [Thread-4072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:04:51.863 [DEBUG] [Thread-4072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:04:51.863 [DEBUG] [Thread-4072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:04:51.863 [DEBUG] [Thread-4072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:04:51.863 [DEBUG] [Thread-4072] [transport.py] [_log()] Compression: none
2025-11-25T19:04:51.863 [DEBUG] [Thread-4072] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:04:51.873 [DEBUG] [Thread-4072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:04:51.874 [DEBUG] [Thread-4072] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:04:51.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:04:51.876 [DEBUG] [Thread-4072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:04:51.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:04:51.878 [DEBUG] [Thread-4072] [transport.py] [_log()] userauth is OK
2025-11-25T19:04:51.878 [DEBUG] [Thread-4072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:04:51.878 [DEBUG] [Thread-4072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:04:51.878 [DEBUG] [Thread-4072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:04:51.878 [DEBUG] [Thread-4072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:04:51.903 [INFO] [Thread-4072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:04:51.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:04:52.503 [DEBUG] [Thread-4072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:04:52.503 [DEBUG] [Thread-4072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:04:52.503 [DEBUG] [Thread-4072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:04:52.545 [DEBUG] [Thread-4072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:04:52.545 [DEBUG] [Thread-4072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:04:52.548 [DEBUG] [Thread-4072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:04:52.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:04:52.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:04:52.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:04:52.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:04:52.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:04:52.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:04:52.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:04:52.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:04:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:04:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.711558 -999.00  +25.70  20.16     14   -3.50 1 1 1 1 1   887    0 30.43 -42.97 ----- 22.2 20.2 297.4 22.6 27.3 -30.4 27.7 -29.9 27.8 -29.5 27.8 -29.8
2025-11-25T19:04:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:04:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:04:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.711558
2025-11-25T19:04:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:04:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:04:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:04:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:04:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:04:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:04:21', tmtdew=37.84, humidity=7.67, cloud=0.0, wind=18.65, temperature=26.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:04:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:04:52.574 [DEBUG] [Thread-4072] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:04:52.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:04:52.669 [DEBUG] [Thread-4075] [transport.py] [_log()] starting thread (client mode): 0x70d28d30
2025-11-25T19:04:52.669 [DEBUG] [Thread-4075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:04:52.683 [DEBUG] [Thread-4075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:04:52.684 [INFO] [Thread-4075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:04:52.691 [DEBUG] [Thread-4075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:04:52.692 [DEBUG] [Thread-4075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:04:52.692 [DEBUG] [Thread-4075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:04:52.692 [DEBUG] [Thread-4075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:04:52.692 [DEBUG] [Thread-4075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:04:52.692 [DEBUG] [Thread-4075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:04:52.692 [DEBUG] [Thread-4075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:04:52.692 [DEBUG] [Thread-4075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:04:52.692 [DEBUG] [Thread-4075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:04:52.692 [DEBUG] [Thread-4075] [transport.py] [_log()] client lang: <none>
2025-11-25T19:04:52.693 [DEBUG] [Thread-4075] [transport.py] [_log()] server lang: <none>
2025-11-25T19:04:52.693 [DEBUG] [Thread-4075] [transport.py] [_log()] kex follows: False
2025-11-25T19:04:52.693 [DEBUG] [Thread-4075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:04:52.693 [DEBUG] [Thread-4075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:04:52.693 [DEBUG] [Thread-4075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:04:52.693 [DEBUG] [Thread-4075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:04:52.693 [DEBUG] [Thread-4075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:04:52.694 [DEBUG] [Thread-4075] [transport.py] [_log()] Compression: none
2025-11-25T19:04:52.694 [DEBUG] [Thread-4075] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:04:52.749 [DEBUG] [Thread-4075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:04:52.750 [DEBUG] [Thread-4075] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:04:52.750 [DEBUG] [Thread-4075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:04:52.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:04:52.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:04:52.805 [DEBUG] [Thread-4075] [transport.py] [_log()] userauth is OK
2025-11-25T19:04:52.806 [DEBUG] [Thread-4075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:04:52.806 [DEBUG] [Thread-4075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:04:52.806 [DEBUG] [Thread-4075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:04:52.806 [DEBUG] [Thread-4075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:04:52.825 [INFO] [Thread-4075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:04:52.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:04:52.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:04:53.662 [DEBUG] [Thread-4075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:04:53.662 [DEBUG] [Thread-4075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:04:53.711 [DEBUG] [Thread-4075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:04:53.711 [DEBUG] [Thread-4075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:04:53.721 [DEBUG] [Thread-4075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:04:53.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:04:53.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:04:53.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:04:53.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:04:53.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:04:53.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:04:53.758 [DEBUG] [Thread-4075] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:05:00.314 [DEBUG] [Thread-4077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:05:15.366 [DEBUG] [Thread-4078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:05:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:05:23.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:05: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
2025-11-25T19:05:24.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 4, 53), 36.28, 8.49, 0.0, 21.01, 26.03, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:05:24.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:04:53
2025-11-25T19:05:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:05:24.726 [DEBUG] [Thread-4079] [transport.py] [_log()] starting thread (client mode): 0x7374dcc0
2025-11-25T19:05:24.726 [DEBUG] [Thread-4079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:05:24.748 [DEBUG] [Thread-4079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:05:24.748 [INFO] [Thread-4079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] client lang: <none>
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] server lang: <none>
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] kex follows: False
2025-11-25T19:05:24.752 [DEBUG] [Thread-4079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:05:24.753 [DEBUG] [Thread-4079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:05:24.753 [DEBUG] [Thread-4079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:05:24.753 [DEBUG] [Thread-4079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:05:24.753 [DEBUG] [Thread-4079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:05:24.753 [DEBUG] [Thread-4079] [transport.py] [_log()] Compression: none
2025-11-25T19:05:24.753 [DEBUG] [Thread-4079] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:05:24.770 [DEBUG] [Thread-4079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:05:24.771 [DEBUG] [Thread-4079] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:05:24.771 [DEBUG] [Thread-4079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:05:24.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:05:24.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:05:24.774 [DEBUG] [Thread-4079] [transport.py] [_log()] userauth is OK
2025-11-25T19:05:24.774 [DEBUG] [Thread-4079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:05:24.774 [DEBUG] [Thread-4079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:05:24.774 [DEBUG] [Thread-4079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:05:24.774 [DEBUG] [Thread-4079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:05:24.795 [INFO] [Thread-4079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:05:24.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:05:25.458 [DEBUG] [Thread-4079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:05:25.458 [DEBUG] [Thread-4079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:05:25.458 [DEBUG] [Thread-4079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:05:25.499 [DEBUG] [Thread-4079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:05:25.499 [DEBUG] [Thread-4079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:05:25.502 [DEBUG] [Thread-4079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:05:25.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:05:25.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:05:25.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:05:25.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:05:25.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:05:25.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:05:25.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:05:25.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:05:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:05:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.711905 -999.00  +25.60  21.86     14   -3.30 1 1 1 1 1   887    0 30.24 -48.13 ----- 23.3 21.9 292.6 27.9 27.3 -30.4 27.6 -29.9 27.7 -28.9 27.7 -29.5
2025-11-25T19:05:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:05:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:05:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.711905
2025-11-25T19:05:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:05:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:05:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:05:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:05:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:05:25.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:04:53', tmtdew=36.28, humidity=8.49, cloud=0.0, wind=21.01, temperature=26.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:05:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:05:25.529 [DEBUG] [Thread-4079] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:05:25.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:05:25.625 [DEBUG] [Thread-4082] [transport.py] [_log()] starting thread (client mode): 0x70d00400
2025-11-25T19:05:25.625 [DEBUG] [Thread-4082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:05:25.639 [DEBUG] [Thread-4082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:05:25.640 [INFO] [Thread-4082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:05:25.647 [DEBUG] [Thread-4082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:05:25.647 [DEBUG] [Thread-4082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:05:25.648 [DEBUG] [Thread-4082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:05:25.648 [DEBUG] [Thread-4082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:05:25.648 [DEBUG] [Thread-4082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:05:25.648 [DEBUG] [Thread-4082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:05:25.648 [DEBUG] [Thread-4082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:05:25.648 [DEBUG] [Thread-4082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:05:25.648 [DEBUG] [Thread-4082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:05:25.648 [DEBUG] [Thread-4082] [transport.py] [_log()] client lang: <none>
2025-11-25T19:05:25.649 [DEBUG] [Thread-4082] [transport.py] [_log()] server lang: <none>
2025-11-25T19:05:25.649 [DEBUG] [Thread-4082] [transport.py] [_log()] kex follows: False
2025-11-25T19:05:25.649 [DEBUG] [Thread-4082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:05:25.649 [DEBUG] [Thread-4082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:05:25.649 [DEBUG] [Thread-4082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:05:25.649 [DEBUG] [Thread-4082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:05:25.649 [DEBUG] [Thread-4082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:05:25.650 [DEBUG] [Thread-4082] [transport.py] [_log()] Compression: none
2025-11-25T19:05:25.650 [DEBUG] [Thread-4082] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:05:25.709 [DEBUG] [Thread-4082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:05:25.709 [DEBUG] [Thread-4082] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:05:25.710 [DEBUG] [Thread-4082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:05:25.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:05:25.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:05:25.765 [DEBUG] [Thread-4082] [transport.py] [_log()] userauth is OK
2025-11-25T19:05:25.765 [DEBUG] [Thread-4082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:05:25.766 [DEBUG] [Thread-4082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:05:25.766 [DEBUG] [Thread-4082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:05:25.766 [DEBUG] [Thread-4082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:05:25.791 [INFO] [Thread-4082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:05:25.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:05:25.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:05:26.605 [DEBUG] [Thread-4082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:05:26.605 [DEBUG] [Thread-4082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:05:26.653 [DEBUG] [Thread-4082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:05:26.653 [DEBUG] [Thread-4082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:05:26.661 [DEBUG] [Thread-4082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:05:26.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:05: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')
2025-11-25T19:05:26.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:05:26.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:05:26.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:05:26.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:05:26.693 [DEBUG] [Thread-4082] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:05:30.401 [DEBUG] [Thread-4084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:05:45.451 [DEBUG] [Thread-4085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:05:51.267 [DEBUG] [Thread-4086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:05:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:05:56.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:05:56.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:05:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 5, 25), 35.51, 8.98, 0.0, 20.03, 25.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:05:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:05:25
2025-11-25T19:05:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:05:57.623 [DEBUG] [Thread-4087] [transport.py] [_log()] starting thread (client mode): 0x7374d450
2025-11-25T19:05:57.623 [DEBUG] [Thread-4087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:05:57.643 [DEBUG] [Thread-4087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:05:57.644 [INFO] [Thread-4087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] client lang: <none>
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] server lang: <none>
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] kex follows: False
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] Compression: none
2025-11-25T19:05:57.647 [DEBUG] [Thread-4087] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:05:57.665 [DEBUG] [Thread-4087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:05:57.665 [DEBUG] [Thread-4087] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:05:57.666 [DEBUG] [Thread-4087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:05:57.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:05:57.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:05:57.709 [DEBUG] [Thread-4087] [transport.py] [_log()] userauth is OK
2025-11-25T19:05:57.709 [DEBUG] [Thread-4087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:05:57.709 [DEBUG] [Thread-4087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:05:57.709 [DEBUG] [Thread-4087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:05:57.709 [DEBUG] [Thread-4087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:05:57.742 [INFO] [Thread-4087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:05:57.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:05:58.392 [DEBUG] [Thread-4087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:05:58.392 [DEBUG] [Thread-4087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:05:58.392 [DEBUG] [Thread-4087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:05:58.433 [DEBUG] [Thread-4087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:05:58.433 [DEBUG] [Thread-4087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:05:58.436 [DEBUG] [Thread-4087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:05:58.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:05:58.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:05:58.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:05:58.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:05:58.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:05:58.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:05:58.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:05:58.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:05:58.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.712253 -999.00  +25.60  17.85     14   -3.40 1 1 1 1 1   887    0 29.78 -57.33 ----- 17.3 17.9 296.2 25.0 27.2 -30.2 27.6 -29.5 27.6 -28.1 27.7 -29.4
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.712253
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:05:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:05:25', tmtdew=35.51, humidity=8.98, cloud=0.0, wind=20.03, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:05:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:05:58.455 [DEBUG] [Thread-4087] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:05:58.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:05:58.542 [DEBUG] [Thread-4090] [transport.py] [_log()] starting thread (client mode): 0x70d56b60
2025-11-25T19:05:58.542 [DEBUG] [Thread-4090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:05:58.557 [DEBUG] [Thread-4090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:05:58.557 [INFO] [Thread-4090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:05:58.564 [DEBUG] [Thread-4090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:05:58.564 [DEBUG] [Thread-4090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:05:58.564 [DEBUG] [Thread-4090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:05:58.564 [DEBUG] [Thread-4090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:05:58.564 [DEBUG] [Thread-4090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:05:58.564 [DEBUG] [Thread-4090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] client lang: <none>
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] server lang: <none>
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] kex follows: False
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] Compression: none
2025-11-25T19:05:58.565 [DEBUG] [Thread-4090] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:05:58.621 [DEBUG] [Thread-4090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:05:58.622 [DEBUG] [Thread-4090] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:05:58.622 [DEBUG] [Thread-4090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:05:58.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:05:58.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:05:58.679 [DEBUG] [Thread-4090] [transport.py] [_log()] userauth is OK
2025-11-25T19:05:58.679 [DEBUG] [Thread-4090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:05:58.679 [DEBUG] [Thread-4090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:05:58.679 [DEBUG] [Thread-4090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:05:58.679 [DEBUG] [Thread-4090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:05:58.692 [INFO] [Thread-4090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:05:58.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:05:58.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:05:59.505 [DEBUG] [Thread-4090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:05:59.505 [DEBUG] [Thread-4090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:05:59.552 [DEBUG] [Thread-4090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:05:59.552 [DEBUG] [Thread-4090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:05:59.560 [DEBUG] [Thread-4090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:05:59.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:05:59.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:05:59.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:05:59.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:05:59.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:05:59.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:05:59.592 [DEBUG] [Thread-4090] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:06:00.483 [DEBUG] [Thread-4092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:06:15.544 [DEBUG] [Thread-4093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:06:29.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:06:29.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:06:29.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:06:30.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 5, 57), 35.1, 9.05, 0.0, 23.79, 25.75, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:06:30.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:05:57
2025-11-25T19:06:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:06:30.573 [DEBUG] [Thread-4094] [transport.py] [_log()] starting thread (client mode): 0x70d55900
2025-11-25T19:06:30.573 [DEBUG] [Thread-4094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:06:30.577 [DEBUG] [Thread-4095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:06:30.593 [DEBUG] [Thread-4094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:06:30.593 [INFO] [Thread-4094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] client lang: <none>
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] server lang: <none>
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] kex follows: False
2025-11-25T19:06:30.596 [DEBUG] [Thread-4094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:06:30.597 [DEBUG] [Thread-4094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:06:30.597 [DEBUG] [Thread-4094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:06:30.597 [DEBUG] [Thread-4094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:06:30.597 [DEBUG] [Thread-4094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:06:30.597 [DEBUG] [Thread-4094] [transport.py] [_log()] Compression: none
2025-11-25T19:06:30.597 [DEBUG] [Thread-4094] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:06:30.610 [DEBUG] [Thread-4094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:06:30.611 [DEBUG] [Thread-4094] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:06:30.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:06:30.611 [DEBUG] [Thread-4094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:06:30.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:06:30.612 [DEBUG] [Thread-4094] [transport.py] [_log()] userauth is OK
2025-11-25T19:06:30.612 [DEBUG] [Thread-4094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:06:30.612 [DEBUG] [Thread-4094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:06:30.612 [DEBUG] [Thread-4094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:06:30.612 [DEBUG] [Thread-4094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:06:30.631 [INFO] [Thread-4094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:06:30.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:06:31.216 [DEBUG] [Thread-4094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:06:31.216 [DEBUG] [Thread-4094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:06:31.217 [DEBUG] [Thread-4094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:06:31.257 [DEBUG] [Thread-4094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:06:31.257 [DEBUG] [Thread-4094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:06:31.260 [DEBUG] [Thread-4094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:06:31.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:06:31.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:06:31.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:06:31.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:06:31.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:06:31.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:06:31.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.712600 -999.00  +25.70  15.83     14   -3.40 1 1 1 1 1   887    0 29.91 -62.39 ----- 11.9 15.8 279.0 19.9 27.2 -30.4 27.5 -29.5 27.5 -28.1 27.6 -29.1
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.712600
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:06:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:05:57', tmtdew=35.1, humidity=9.05, cloud=0.0, wind=23.79, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:06:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:06:31.280 [DEBUG] [Thread-4094] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:06:31.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:06:31.365 [DEBUG] [Thread-4098] [transport.py] [_log()] starting thread (client mode): 0x7378cd60
2025-11-25T19:06:31.365 [DEBUG] [Thread-4098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:06:31.380 [DEBUG] [Thread-4098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:06:31.380 [INFO] [Thread-4098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] client lang: <none>
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] server lang: <none>
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] kex follows: False
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:06:31.387 [DEBUG] [Thread-4098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:06:31.388 [DEBUG] [Thread-4098] [transport.py] [_log()] Compression: none
2025-11-25T19:06:31.388 [DEBUG] [Thread-4098] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:06:31.449 [DEBUG] [Thread-4098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:06:31.450 [DEBUG] [Thread-4098] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:06:31.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:06:31.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:06:31.450 [DEBUG] [Thread-4098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:06:31.506 [DEBUG] [Thread-4098] [transport.py] [_log()] userauth is OK
2025-11-25T19:06:31.506 [DEBUG] [Thread-4098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:06:31.506 [DEBUG] [Thread-4098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:06:31.506 [DEBUG] [Thread-4098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:06:31.506 [DEBUG] [Thread-4098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:06:31.522 [INFO] [Thread-4098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:06:31.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:06:31.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:06:32.404 [DEBUG] [Thread-4098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:06:32.405 [DEBUG] [Thread-4098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:06:32.453 [DEBUG] [Thread-4098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:06:32.453 [DEBUG] [Thread-4098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:06:32.462 [DEBUG] [Thread-4098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:06:32.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:06:32.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:06:32.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:06:32.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:06:32.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:06:32.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:06:32.499 [DEBUG] [Thread-4098] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:06:45.612 [DEBUG] [Thread-4100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:06:51.615 [DEBUG] [Thread-4101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:07:00.674 [DEBUG] [Thread-4102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:07:02.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:07:02.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:07:02.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:07:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 6, 29), 34.94, 9.15, 0.0, 26.57, 25.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:07:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:06:29
2025-11-25T19:07:03.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:07:03.522 [DEBUG] [Thread-4103] [transport.py] [_log()] starting thread (client mode): 0x70d41a80
2025-11-25T19:07:03.522 [DEBUG] [Thread-4103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:07:03.542 [DEBUG] [Thread-4103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:07:03.542 [INFO] [Thread-4103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] client lang: <none>
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] server lang: <none>
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] kex follows: False
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] Compression: none
2025-11-25T19:07:03.544 [DEBUG] [Thread-4103] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:07:03.560 [DEBUG] [Thread-4103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:07:03.560 [DEBUG] [Thread-4103] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:07:03.560 [DEBUG] [Thread-4103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:07:03.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:07:03.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:07:03.562 [DEBUG] [Thread-4103] [transport.py] [_log()] userauth is OK
2025-11-25T19:07:03.562 [DEBUG] [Thread-4103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:07:03.562 [DEBUG] [Thread-4103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:07:03.562 [DEBUG] [Thread-4103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:07:03.562 [DEBUG] [Thread-4103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:07:03.571 [INFO] [Thread-4103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:07:03.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:07:04.203 [DEBUG] [Thread-4103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:07:04.203 [DEBUG] [Thread-4103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:07:04.204 [DEBUG] [Thread-4103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:07:04.244 [DEBUG] [Thread-4103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:07:04.244 [DEBUG] [Thread-4103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:07:04.249 [DEBUG] [Thread-4103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:07:04.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:07:04.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:07:04.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:07:04.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:07:04.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:07:04.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:07:04.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:07:04.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:07:04.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:07:04.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.712947 -999.00  +25.80  14.67     14   -3.40 1 1 1 1 1   887    0 29.39 -66.64 ----- 14.2 14.7 295.4 18.2 27.2 -30.0 27.5 -29.4 27.5 -28.4 27.6 -29.3
2025-11-25T19:07:04.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:07:04.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:07:04.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.712947
2025-11-25T19:07:04.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:07:04.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:07:04.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:07:04.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:07:04.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:07:04.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:06:29', tmtdew=34.94, humidity=9.15, cloud=0.0, wind=26.57, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:06:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:07:04.277 [DEBUG] [Thread-4103] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:07:04.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:07:04.373 [DEBUG] [Thread-4106] [transport.py] [_log()] starting thread (client mode): 0x70d42cb0
2025-11-25T19:07:04.373 [DEBUG] [Thread-4106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:07:04.387 [DEBUG] [Thread-4106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:07:04.388 [INFO] [Thread-4106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:07:04.395 [DEBUG] [Thread-4106] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] client lang: <none>
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] server lang: <none>
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] kex follows: False
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:07:04.396 [DEBUG] [Thread-4106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:07:04.397 [DEBUG] [Thread-4106] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:07:04.397 [DEBUG] [Thread-4106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:07:04.397 [DEBUG] [Thread-4106] [transport.py] [_log()] Compression: none
2025-11-25T19:07:04.397 [DEBUG] [Thread-4106] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:07:04.454 [DEBUG] [Thread-4106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:07:04.455 [DEBUG] [Thread-4106] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:07:04.456 [DEBUG] [Thread-4106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:07:04.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:07:04.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:07:04.510 [DEBUG] [Thread-4106] [transport.py] [_log()] userauth is OK
2025-11-25T19:07:04.510 [DEBUG] [Thread-4106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:07:04.511 [DEBUG] [Thread-4106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:07:04.511 [DEBUG] [Thread-4106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:07:04.511 [DEBUG] [Thread-4106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:07:04.529 [INFO] [Thread-4106] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:07:04.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:07:04.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:07:05.336 [DEBUG] [Thread-4106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:07:05.337 [DEBUG] [Thread-4106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:07:05.385 [DEBUG] [Thread-4106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:07:05.385 [DEBUG] [Thread-4106] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:07:05.394 [DEBUG] [Thread-4106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:07:05.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:07:05.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:07:05.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:07:05.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:07:05.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:07:05.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:07:05.431 [DEBUG] [Thread-4106] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:07:15.706 [DEBUG] [Thread-4108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:07:30.764 [DEBUG] [Thread-4109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:07:35.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:07:35.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:07:35.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:07:36.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 7, 1), 34.88, 9.2, 0.0, 26.18, 25.69, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:07:36.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:07:01
2025-11-25T19:07:36.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:07:36.476 [DEBUG] [Thread-4110] [transport.py] [_log()] starting thread (client mode): 0x70d43bb0
2025-11-25T19:07:36.476 [DEBUG] [Thread-4110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:07:36.495 [DEBUG] [Thread-4110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:07:36.495 [INFO] [Thread-4110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:07:36.498 [DEBUG] [Thread-4110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] client lang: <none>
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] server lang: <none>
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] kex follows: False
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] Compression: none
2025-11-25T19:07:36.499 [DEBUG] [Thread-4110] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:07:36.516 [DEBUG] [Thread-4110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:07:36.516 [DEBUG] [Thread-4110] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:07:36.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:07:36.517 [DEBUG] [Thread-4110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:07:36.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:07:36.518 [DEBUG] [Thread-4110] [transport.py] [_log()] userauth is OK
2025-11-25T19:07:36.518 [DEBUG] [Thread-4110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:07:36.518 [DEBUG] [Thread-4110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:07:36.518 [DEBUG] [Thread-4110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:07:36.518 [DEBUG] [Thread-4110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:07:36.534 [INFO] [Thread-4110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:07:36.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:07:37.180 [DEBUG] [Thread-4110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:07:37.180 [DEBUG] [Thread-4110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:07:37.180 [DEBUG] [Thread-4110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:07:37.221 [DEBUG] [Thread-4110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:07:37.221 [DEBUG] [Thread-4110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:07:37.223 [DEBUG] [Thread-4110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:07:37.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:07:37.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:07:37.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:07:37.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:07:37.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:07:37.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:07:37.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:07:37.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:07:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:07:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.713294 -999.00  +25.70  17.85     14   -3.30 1 1 1 1 1   887    0 29.15 -77.40 ----- 19.8 17.9 279.4 22.2 27.1 -30.2 27.4 -29.5 27.4 -29.0 27.5 -29.7
2025-11-25T19:07:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:07:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:07:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.713294
2025-11-25T19:07:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:07:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:07:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:07:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:07:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:07:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:07:01', tmtdew=34.88, humidity=9.2, cloud=0.0, wind=26.18, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:07:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:07:37.244 [DEBUG] [Thread-4110] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:07:37.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:07:37.344 [DEBUG] [Thread-4113] [transport.py] [_log()] starting thread (client mode): 0x737c6aa0
2025-11-25T19:07:37.344 [DEBUG] [Thread-4113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:07:37.359 [DEBUG] [Thread-4113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:07:37.359 [INFO] [Thread-4113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:07:37.366 [DEBUG] [Thread-4113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:07:37.366 [DEBUG] [Thread-4113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:07:37.366 [DEBUG] [Thread-4113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:07:37.366 [DEBUG] [Thread-4113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:07:37.366 [DEBUG] [Thread-4113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:07:37.366 [DEBUG] [Thread-4113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:07:37.366 [DEBUG] [Thread-4113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:07:37.366 [DEBUG] [Thread-4113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] client lang: <none>
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] server lang: <none>
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] kex follows: False
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] Compression: none
2025-11-25T19:07:37.367 [DEBUG] [Thread-4113] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:07:37.423 [DEBUG] [Thread-4113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:07:37.424 [DEBUG] [Thread-4113] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:07:37.424 [DEBUG] [Thread-4113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:07:37.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:07:37.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:07:37.480 [DEBUG] [Thread-4113] [transport.py] [_log()] userauth is OK
2025-11-25T19:07:37.481 [DEBUG] [Thread-4113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:07:37.481 [DEBUG] [Thread-4113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:07:37.481 [DEBUG] [Thread-4113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:07:37.481 [DEBUG] [Thread-4113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:07:37.494 [INFO] [Thread-4113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:07:37.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:07:37.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:07:38.328 [DEBUG] [Thread-4113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:07:38.328 [DEBUG] [Thread-4113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:07:38.376 [DEBUG] [Thread-4113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:07:38.376 [DEBUG] [Thread-4113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:07:38.389 [DEBUG] [Thread-4113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:07:38.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:07: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')
2025-11-25T19:07:38.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:07:38.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:07:38.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:07:38.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:07:38.429 [DEBUG] [Thread-4113] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:07:45.797 [DEBUG] [Thread-4115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:07:51.647 [DEBUG] [Thread-4116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:08:00.853 [DEBUG] [Thread-4117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:08:08.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:08:08.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:08:08.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:08:09.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 7, 33), 34.44, 9.76, 0.0, 23.91, 25.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:08:09.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:07:33
2025-11-25T19:08:09.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:08:09.367 [DEBUG] [Thread-4118] [transport.py] [_log()] starting thread (client mode): 0x70d40760
2025-11-25T19:08:09.367 [DEBUG] [Thread-4118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:08:09.388 [DEBUG] [Thread-4118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:08:09.388 [INFO] [Thread-4118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] client lang: <none>
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] server lang: <none>
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] kex follows: False
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:08:09.391 [DEBUG] [Thread-4118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:08:09.392 [DEBUG] [Thread-4118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:08:09.392 [DEBUG] [Thread-4118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:08:09.392 [DEBUG] [Thread-4118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:08:09.392 [DEBUG] [Thread-4118] [transport.py] [_log()] Compression: none
2025-11-25T19:08:09.392 [DEBUG] [Thread-4118] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:08:09.403 [DEBUG] [Thread-4118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:08:09.404 [DEBUG] [Thread-4118] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:08:09.404 [DEBUG] [Thread-4118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:08:09.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:08:09.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:08:09.407 [DEBUG] [Thread-4118] [transport.py] [_log()] userauth is OK
2025-11-25T19:08:09.407 [DEBUG] [Thread-4118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:08:09.407 [DEBUG] [Thread-4118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:08:09.407 [DEBUG] [Thread-4118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:08:09.407 [DEBUG] [Thread-4118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:08:09.444 [INFO] [Thread-4118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:08:09.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:08:10.108 [DEBUG] [Thread-4118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:08:10.108 [DEBUG] [Thread-4118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:08:10.109 [DEBUG] [Thread-4118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:08:10.150 [DEBUG] [Thread-4118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:08:10.150 [DEBUG] [Thread-4118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:08:10.153 [DEBUG] [Thread-4118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:08:10.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:08:10.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:08:10.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:08:10.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:08:10.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:08:10.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:08:10.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:08:10.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:08:10.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:08:10.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.713641 -999.00  +25.60  19.07     14   -3.30 1 1 1 1 1   887    0 28.66 -88.41 ----- 21.0 19.1 277.9 23.9 27.0 -30.4 27.3 -29.4 27.2 -29.7 27.4 -29.6
2025-11-25T19:08:10.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:08:10.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:08:10.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.713641
2025-11-25T19:08:10.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:08:10.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:08:10.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:08:10.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:08:10.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:08:10.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:07:33', tmtdew=34.44, humidity=9.76, cloud=0.0, wind=23.91, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:07:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:08:10.174 [DEBUG] [Thread-4118] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:08:10.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:08:10.258 [DEBUG] [Thread-4121] [transport.py] [_log()] starting thread (client mode): 0x70d42dd0
2025-11-25T19:08:10.259 [DEBUG] [Thread-4121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:08:10.274 [DEBUG] [Thread-4121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:08:10.274 [INFO] [Thread-4121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] client lang: <none>
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] server lang: <none>
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] kex follows: False
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:08:10.282 [DEBUG] [Thread-4121] [transport.py] [_log()] Compression: none
2025-11-25T19:08:10.283 [DEBUG] [Thread-4121] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:08:10.340 [DEBUG] [Thread-4121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:08:10.341 [DEBUG] [Thread-4121] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:08:10.342 [DEBUG] [Thread-4121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:08:10.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:08:10.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:08:10.396 [DEBUG] [Thread-4121] [transport.py] [_log()] userauth is OK
2025-11-25T19:08:10.397 [DEBUG] [Thread-4121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:08:10.397 [DEBUG] [Thread-4121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:08:10.397 [DEBUG] [Thread-4121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:08:10.397 [DEBUG] [Thread-4121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:08:10.416 [INFO] [Thread-4121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:08:10.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:08:10.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:08:11.236 [DEBUG] [Thread-4121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:08:11.236 [DEBUG] [Thread-4121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:08:11.283 [DEBUG] [Thread-4121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:08:11.284 [DEBUG] [Thread-4121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:08:11.293 [DEBUG] [Thread-4121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:08:11.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:08:11.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:08:11.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:08:11.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:08:11.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:08:11.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:08:11.327 [DEBUG] [Thread-4121] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:08:15.200 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:08:15.201 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:08:15.886 [DEBUG] [Thread-4124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:08:26.032 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:08:26.033 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:08:30.939 [DEBUG] [Thread-4125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:08:41.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:08:41.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:08:41.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:08:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 8, 38), 34.46, 9.73, 0.0, 23.24, 25.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:08:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:08:38
2025-11-25T19:08:42.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:08:42.262 [DEBUG] [Thread-4126] [transport.py] [_log()] starting thread (client mode): 0x7374dab0
2025-11-25T19:08:42.262 [DEBUG] [Thread-4126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:08:42.283 [DEBUG] [Thread-4126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:08:42.283 [INFO] [Thread-4126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] client lang: <none>
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] server lang: <none>
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] kex follows: False
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:08:42.284 [DEBUG] [Thread-4126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:08:42.285 [DEBUG] [Thread-4126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:08:42.285 [DEBUG] [Thread-4126] [transport.py] [_log()] Compression: none
2025-11-25T19:08:42.285 [DEBUG] [Thread-4126] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:08:42.293 [DEBUG] [Thread-4126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:08:42.293 [DEBUG] [Thread-4126] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:08:42.294 [DEBUG] [Thread-4126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:08:42.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:08:42.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:08:42.296 [DEBUG] [Thread-4126] [transport.py] [_log()] userauth is OK
2025-11-25T19:08:42.296 [DEBUG] [Thread-4126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:08:42.296 [DEBUG] [Thread-4126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:08:42.296 [DEBUG] [Thread-4126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:08:42.296 [DEBUG] [Thread-4126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:08:42.331 [INFO] [Thread-4126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:08:42.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:08:42.964 [DEBUG] [Thread-4126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:08:42.965 [DEBUG] [Thread-4126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:08:42.965 [DEBUG] [Thread-4126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:08:43.006 [DEBUG] [Thread-4126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:08:43.006 [DEBUG] [Thread-4126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:08:43.010 [DEBUG] [Thread-4126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:08:43.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:08:43.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:08:43.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:08:43.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:08:43.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:08:43.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:08:43.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:08:43.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:08:43.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:08:43.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.713989 -999.00  +25.60  14.05     14   -3.30 1 1 1 1 1   887    0 28.70 -92.29 ----- 17.2 14.1 289.8 25.7 26.9 -30.1 27.3 -29.2 27.2 -28.2 27.4 -29.2
2025-11-25T19:08:43.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:08:43.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:08:43.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.713989
2025-11-25T19:08:43.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:08:43.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:08:43.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:08:43.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:08:43.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:08:43.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:08:38', tmtdew=34.46, humidity=9.73, cloud=0.0, wind=23.24, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:08:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:08:43.038 [DEBUG] [Thread-4126] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:08:43.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:08:43.134 [DEBUG] [Thread-4129] [transport.py] [_log()] starting thread (client mode): 0x70d409d0
2025-11-25T19:08:43.134 [DEBUG] [Thread-4129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:08:43.149 [DEBUG] [Thread-4129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:08:43.149 [INFO] [Thread-4129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:08:43.156 [DEBUG] [Thread-4129] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:08:43.156 [DEBUG] [Thread-4129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:08:43.156 [DEBUG] [Thread-4129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:08:43.156 [DEBUG] [Thread-4129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:08:43.156 [DEBUG] [Thread-4129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:08:43.156 [DEBUG] [Thread-4129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] client lang: <none>
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] server lang: <none>
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] kex follows: False
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] Compression: none
2025-11-25T19:08:43.157 [DEBUG] [Thread-4129] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:08:43.216 [DEBUG] [Thread-4129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:08:43.217 [DEBUG] [Thread-4129] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:08:43.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:08:43.218 [DEBUG] [Thread-4129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:08:43.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:08:43.272 [DEBUG] [Thread-4129] [transport.py] [_log()] userauth is OK
2025-11-25T19:08:43.272 [DEBUG] [Thread-4129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:08:43.272 [DEBUG] [Thread-4129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:08:43.273 [DEBUG] [Thread-4129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:08:43.273 [DEBUG] [Thread-4129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:08:43.291 [INFO] [Thread-4129] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:08:43.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:08:43.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:08:44.110 [DEBUG] [Thread-4129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:08:44.111 [DEBUG] [Thread-4129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:08:44.158 [DEBUG] [Thread-4129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:08:44.158 [DEBUG] [Thread-4129] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:08:44.167 [DEBUG] [Thread-4129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:08:44.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:08:44.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:08:44.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:08:44.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:08:44.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:08:44.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:08:44.205 [DEBUG] [Thread-4129] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:08:45.980 [DEBUG] [Thread-4131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:08:51.695 [DEBUG] [Thread-4132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:09:01.034 [DEBUG] [Thread-4133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:09:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:09:14.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:09:14.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:09:14.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 9, 10), 34.49, 9.72, 0.0, 25.5, 25.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:09:14.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:09:10
2025-11-25T19:09:14.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:09:15.143 [DEBUG] [Thread-4134] [transport.py] [_log()] starting thread (client mode): 0x70d430d0
2025-11-25T19:09:15.144 [DEBUG] [Thread-4134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:09:15.164 [DEBUG] [Thread-4134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:09:15.164 [INFO] [Thread-4134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] client lang: <none>
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] server lang: <none>
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] kex follows: False
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:09:15.167 [DEBUG] [Thread-4134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:09:15.168 [DEBUG] [Thread-4134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:09:15.168 [DEBUG] [Thread-4134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:09:15.168 [DEBUG] [Thread-4134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:09:15.168 [DEBUG] [Thread-4134] [transport.py] [_log()] Compression: none
2025-11-25T19:09:15.168 [DEBUG] [Thread-4134] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:09:15.185 [DEBUG] [Thread-4134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:09:15.186 [DEBUG] [Thread-4134] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:09:15.186 [DEBUG] [Thread-4134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:09:15.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:09:15.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:09:15.188 [DEBUG] [Thread-4134] [transport.py] [_log()] userauth is OK
2025-11-25T19:09:15.189 [DEBUG] [Thread-4134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:09:15.189 [DEBUG] [Thread-4134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:09:15.189 [DEBUG] [Thread-4134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:09:15.189 [DEBUG] [Thread-4134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:09:15.204 [INFO] [Thread-4134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:09:15.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:09:15.840 [DEBUG] [Thread-4134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:09:15.840 [DEBUG] [Thread-4134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:09:15.841 [DEBUG] [Thread-4134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:09:15.881 [DEBUG] [Thread-4134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:09:15.881 [DEBUG] [Thread-4134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:09:15.885 [DEBUG] [Thread-4134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:09:15.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:09:15.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:09:15.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:09:15.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:09:15.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:09:15.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:09:15.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:09:15.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:09:15.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:09:15.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.714683 -999.00  +25.50  16.09     14   -3.20 1 1 1 1 1   887    0 28.14 -111.77 ----- 20.6 16.1 286.0 19.1 26.8 -29.9 27.2 -29.3 27.1 -27.9 27.2 -29.0
2025-11-25T19:09:15.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:09:15.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:09:15.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.714683
2025-11-25T19:09:15.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:09:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:09:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:09:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:09:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:09:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:09:10', tmtdew=34.49, humidity=9.72, cloud=0.0, wind=25.5, temperature=25.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:09:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:09:15.930 [DEBUG] [Thread-4134] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:09:16.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:09:16.027 [DEBUG] [Thread-4137] [transport.py] [_log()] starting thread (client mode): 0x70d00400
2025-11-25T19:09:16.027 [DEBUG] [Thread-4137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:09:16.041 [DEBUG] [Thread-4137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:09:16.041 [INFO] [Thread-4137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:09:16.049 [DEBUG] [Thread-4137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:09:16.049 [DEBUG] [Thread-4137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:09:16.049 [DEBUG] [Thread-4137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] client lang: <none>
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] server lang: <none>
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] kex follows: False
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:09:16.050 [DEBUG] [Thread-4137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:09:16.051 [DEBUG] [Thread-4137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:09:16.051 [DEBUG] [Thread-4137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:09:16.051 [DEBUG] [Thread-4137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:09:16.051 [DEBUG] [Thread-4137] [transport.py] [_log()] Compression: none
2025-11-25T19:09:16.051 [DEBUG] [Thread-4137] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:09:16.073 [DEBUG] [Thread-4139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:09:16.107 [DEBUG] [Thread-4137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:09:16.107 [DEBUG] [Thread-4137] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:09:16.108 [DEBUG] [Thread-4137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:09:16.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:09:16.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:09:16.163 [DEBUG] [Thread-4137] [transport.py] [_log()] userauth is OK
2025-11-25T19:09:16.163 [DEBUG] [Thread-4137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:09:16.164 [DEBUG] [Thread-4137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:09:16.164 [DEBUG] [Thread-4137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:09:16.164 [DEBUG] [Thread-4137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:09:16.183 [INFO] [Thread-4137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:09:16.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:09:16.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:09:17.036 [DEBUG] [Thread-4137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:09:17.037 [DEBUG] [Thread-4137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:09:17.088 [DEBUG] [Thread-4137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:09:17.089 [DEBUG] [Thread-4137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:09:17.098 [DEBUG] [Thread-4137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:09:17.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:09:17.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:09:17.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:09:17.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:09:17.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:09:17.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:09:17.134 [DEBUG] [Thread-4137] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:09:26.184 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:09:26.185 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:09:31.119 [DEBUG] [Thread-4140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:09:46.153 [DEBUG] [Thread-4141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:09:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:09:47.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:09:47.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:09:47.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 9, 42), 34.23, 9.8, 0.0, 23.22, 25.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:09:47.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:09:42
2025-11-25T19:09:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:09:48.090 [DEBUG] [Thread-4142] [transport.py] [_log()] starting thread (client mode): 0x7374f010
2025-11-25T19:09:48.091 [DEBUG] [Thread-4142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:09:48.106 [DEBUG] [Thread-4142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:09:48.106 [INFO] [Thread-4142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:09:48.107 [DEBUG] [Thread-4142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:09:48.107 [DEBUG] [Thread-4142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:09:48.107 [DEBUG] [Thread-4142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:09:48.107 [DEBUG] [Thread-4142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:09:48.107 [DEBUG] [Thread-4142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] client lang: <none>
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] server lang: <none>
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] kex follows: False
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] Compression: none
2025-11-25T19:09:48.108 [DEBUG] [Thread-4142] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:09:48.121 [DEBUG] [Thread-4142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:09:48.122 [DEBUG] [Thread-4142] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:09:48.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:09:48.122 [DEBUG] [Thread-4142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:09:48.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:09:48.124 [DEBUG] [Thread-4142] [transport.py] [_log()] userauth is OK
2025-11-25T19:09:48.125 [DEBUG] [Thread-4142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:09:48.125 [DEBUG] [Thread-4142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:09:48.125 [DEBUG] [Thread-4142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:09:48.125 [DEBUG] [Thread-4142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:09:48.143 [INFO] [Thread-4142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:09:48.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:09:48.770 [DEBUG] [Thread-4142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:09:48.771 [DEBUG] [Thread-4142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:09:48.771 [DEBUG] [Thread-4142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:09:48.812 [DEBUG] [Thread-4142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:09:48.813 [DEBUG] [Thread-4142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:09:48.817 [DEBUG] [Thread-4142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:09:48.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:09:48.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:09:48.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:09:48.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:09:48.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:09:48.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:09:48.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:09:48.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:09:48.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:09:48.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.715030 -999.00  +25.40  19.75     14   -3.20 1 1 1 1 1   887    0 27.78 -118.61 ----- 23.2 19.8 298.8 29.2 26.8 -29.9 27.1 -29.2 27.1 -28.7 27.2 -28.8
2025-11-25T19:09:48.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:09:48.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:09:48.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.715030
2025-11-25T19:09:48.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:09:48.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:09:48.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:09:48.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:09:48.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:09:48.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:09:42', tmtdew=34.23, humidity=9.8, cloud=0.0, wind=23.22, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:09:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:09:48.845 [DEBUG] [Thread-4142] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:09:48.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:09:48.941 [DEBUG] [Thread-4145] [transport.py] [_log()] starting thread (client mode): 0x737c5300
2025-11-25T19:09:48.941 [DEBUG] [Thread-4145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:09:48.955 [DEBUG] [Thread-4145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:09:48.956 [INFO] [Thread-4145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:09:48.963 [DEBUG] [Thread-4145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:09:48.963 [DEBUG] [Thread-4145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:09:48.963 [DEBUG] [Thread-4145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:09:48.963 [DEBUG] [Thread-4145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:09:48.963 [DEBUG] [Thread-4145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:09:48.963 [DEBUG] [Thread-4145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] client lang: <none>
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] server lang: <none>
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] kex follows: False
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] Compression: none
2025-11-25T19:09:48.964 [DEBUG] [Thread-4145] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:09:49.022 [DEBUG] [Thread-4145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:09:49.023 [DEBUG] [Thread-4145] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:09:49.024 [DEBUG] [Thread-4145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:09:49.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:09:49.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:09:49.078 [DEBUG] [Thread-4145] [transport.py] [_log()] userauth is OK
2025-11-25T19:09:49.079 [DEBUG] [Thread-4145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:09:49.079 [DEBUG] [Thread-4145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:09:49.079 [DEBUG] [Thread-4145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:09:49.079 [DEBUG] [Thread-4145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:09:49.099 [INFO] [Thread-4145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:09:49.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:09:49.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:09:49.936 [DEBUG] [Thread-4145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:09:49.937 [DEBUG] [Thread-4145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:09:49.985 [DEBUG] [Thread-4145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:09:49.985 [DEBUG] [Thread-4145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:09:49.994 [DEBUG] [Thread-4145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:09:50.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:09:50.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:09:50.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:09:50.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:09:50.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:09:50.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:09:50.030 [DEBUG] [Thread-4145] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:09:51.756 [DEBUG] [Thread-4147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:10:01.193 [DEBUG] [Thread-4148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:10:16.241 [DEBUG] [Thread-4149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:10:20.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:10:20.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:10:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:10:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 10, 14), 34.18, 9.83, 0.0, 21.12, 25.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:10:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:10:14
2025-11-25T19:10:20.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:10:20.977 [DEBUG] [Thread-4150] [transport.py] [_log()] starting thread (client mode): 0x70d0e440
2025-11-25T19:10:20.977 [DEBUG] [Thread-4150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:10:20.991 [DEBUG] [Thread-4150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:10:20.991 [INFO] [Thread-4150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:10:20.993 [DEBUG] [Thread-4150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:10:20.993 [DEBUG] [Thread-4150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] client lang: <none>
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] server lang: <none>
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] kex follows: False
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] Compression: none
2025-11-25T19:10:20.994 [DEBUG] [Thread-4150] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:10:21.004 [DEBUG] [Thread-4150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:10:21.005 [DEBUG] [Thread-4150] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:10:21.005 [DEBUG] [Thread-4150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:10:21.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:10:21.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:10:21.007 [DEBUG] [Thread-4150] [transport.py] [_log()] userauth is OK
2025-11-25T19:10:21.007 [DEBUG] [Thread-4150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:10:21.007 [DEBUG] [Thread-4150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:10:21.007 [DEBUG] [Thread-4150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:10:21.007 [DEBUG] [Thread-4150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:10:21.031 [INFO] [Thread-4150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:10:21.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:10:21.704 [DEBUG] [Thread-4150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:10:21.704 [DEBUG] [Thread-4150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:10:21.705 [DEBUG] [Thread-4150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:10:21.746 [DEBUG] [Thread-4150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:10:21.746 [DEBUG] [Thread-4150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:10:21.749 [DEBUG] [Thread-4150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:10:21.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:10:21.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:10:21.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:10:21.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:10:21.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:10:21.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:10:21.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:10:21.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:10:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:10:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.715377 -999.00  +25.40  20.40     14   -3.10 1 1 1 1 1   887    0 26.99 -127.85 ----- 18.4 20.4 280.1 24.5 26.8 -30.0 27.1 -29.5 26.9 -28.7 27.1 -29.2
2025-11-25T19:10:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:10:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:10:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.715377
2025-11-25T19:10:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:10:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:10:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:10:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:10:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:10:21.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:10:14', tmtdew=34.18, humidity=9.83, cloud=0.0, wind=21.12, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:10:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:10:21.777 [DEBUG] [Thread-4150] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:10:21.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:10:21.872 [DEBUG] [Thread-4153] [transport.py] [_log()] starting thread (client mode): 0x70d0e560
2025-11-25T19:10:21.872 [DEBUG] [Thread-4153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:10:21.887 [DEBUG] [Thread-4153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:10:21.887 [INFO] [Thread-4153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:10:21.895 [DEBUG] [Thread-4153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:10:21.895 [DEBUG] [Thread-4153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:10:21.896 [DEBUG] [Thread-4153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:10:21.896 [DEBUG] [Thread-4153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:10:21.896 [DEBUG] [Thread-4153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:10:21.896 [DEBUG] [Thread-4153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:10:21.896 [DEBUG] [Thread-4153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:10:21.896 [DEBUG] [Thread-4153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:10:21.896 [DEBUG] [Thread-4153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:10:21.896 [DEBUG] [Thread-4153] [transport.py] [_log()] client lang: <none>
2025-11-25T19:10:21.897 [DEBUG] [Thread-4153] [transport.py] [_log()] server lang: <none>
2025-11-25T19:10:21.897 [DEBUG] [Thread-4153] [transport.py] [_log()] kex follows: False
2025-11-25T19:10:21.897 [DEBUG] [Thread-4153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:10:21.897 [DEBUG] [Thread-4153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:10:21.897 [DEBUG] [Thread-4153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:10:21.897 [DEBUG] [Thread-4153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:10:21.897 [DEBUG] [Thread-4153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:10:21.897 [DEBUG] [Thread-4153] [transport.py] [_log()] Compression: none
2025-11-25T19:10:21.898 [DEBUG] [Thread-4153] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:10:21.953 [DEBUG] [Thread-4153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:10:21.954 [DEBUG] [Thread-4153] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:10:21.954 [DEBUG] [Thread-4153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:10:21.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:10:21.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:10:22.009 [DEBUG] [Thread-4153] [transport.py] [_log()] userauth is OK
2025-11-25T19:10:22.009 [DEBUG] [Thread-4153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:10:22.009 [DEBUG] [Thread-4153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:10:22.009 [DEBUG] [Thread-4153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:10:22.010 [DEBUG] [Thread-4153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:10:22.032 [INFO] [Thread-4153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:10:22.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:10:22.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:10:22.865 [DEBUG] [Thread-4153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:10:22.865 [DEBUG] [Thread-4153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:10:22.913 [DEBUG] [Thread-4153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:10:22.913 [DEBUG] [Thread-4153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:10:22.922 [DEBUG] [Thread-4153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:10:22.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:10:22.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')
2025-11-25T19:10:22.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
2025-11-25T19:10:22.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:10:22.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:10:22.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:10:22.957 [DEBUG] [Thread-4153] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:10:26.328 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:10:26.330 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:10:31.274 [DEBUG] [Thread-4155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:10:46.324 [DEBUG] [Thread-4156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:10:51.825 [DEBUG] [Thread-4158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:10:52.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:10:52.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:10:52.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:10:53.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 10, 46), 34.14, 9.81, 0.0, 25.36, 25.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:10:53.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:10:46
2025-11-25T19:10:53.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:10:53.881 [DEBUG] [Thread-4159] [transport.py] [_log()] starting thread (client mode): 0x70d41ed0
2025-11-25T19:10:53.881 [DEBUG] [Thread-4159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:10:53.902 [DEBUG] [Thread-4159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:10:53.902 [INFO] [Thread-4159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:10:53.903 [DEBUG] [Thread-4159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] client lang: <none>
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] server lang: <none>
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] kex follows: False
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:10:53.904 [DEBUG] [Thread-4159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:10:53.905 [DEBUG] [Thread-4159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:10:53.905 [DEBUG] [Thread-4159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:10:53.905 [DEBUG] [Thread-4159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:10:53.905 [DEBUG] [Thread-4159] [transport.py] [_log()] Compression: none
2025-11-25T19:10:53.905 [DEBUG] [Thread-4159] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:10:53.922 [DEBUG] [Thread-4159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:10:53.922 [DEBUG] [Thread-4159] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:10:53.923 [DEBUG] [Thread-4159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:10:53.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:10:53.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:10:53.924 [DEBUG] [Thread-4159] [transport.py] [_log()] userauth is OK
2025-11-25T19:10:53.925 [DEBUG] [Thread-4159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:10:53.925 [DEBUG] [Thread-4159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:10:53.925 [DEBUG] [Thread-4159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:10:53.925 [DEBUG] [Thread-4159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:10:53.948 [INFO] [Thread-4159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:10:53.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:10:54.568 [DEBUG] [Thread-4159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:10:54.568 [DEBUG] [Thread-4159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:10:54.569 [DEBUG] [Thread-4159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:10:54.608 [DEBUG] [Thread-4159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:10:54.609 [DEBUG] [Thread-4159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:10:54.611 [DEBUG] [Thread-4159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:10:54.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:10:54.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:10:54.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:10:54.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:10:54.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:10:54.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:10:54.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:10:54.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:10:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:10:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.715725 -999.00  +25.30  18.60     14   -3.20 1 1 1 1 1   886    0 26.60 -130.46 ----- 19.7 18.6 283.0 23.7 26.7 -29.9 27.0 -29.3 26.8 -28.2 27.0 -29.0
2025-11-25T19:10:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:10:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:10:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.715725
2025-11-25T19:10:54.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:10:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:10:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:10:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:10:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:10:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:10:46', tmtdew=34.14, humidity=9.81, cloud=0.0, wind=25.36, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:10:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:10:54.636 [DEBUG] [Thread-4159] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:10:54.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:10:54.732 [DEBUG] [Thread-4162] [transport.py] [_log()] starting thread (client mode): 0x7374e9e0
2025-11-25T19:10:54.732 [DEBUG] [Thread-4162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:10:54.746 [DEBUG] [Thread-4162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:10:54.746 [INFO] [Thread-4162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] client lang: <none>
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] server lang: <none>
2025-11-25T19:10:54.754 [DEBUG] [Thread-4162] [transport.py] [_log()] kex follows: False
2025-11-25T19:10:54.755 [DEBUG] [Thread-4162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:10:54.755 [DEBUG] [Thread-4162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:10:54.755 [DEBUG] [Thread-4162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:10:54.755 [DEBUG] [Thread-4162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:10:54.755 [DEBUG] [Thread-4162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:10:54.755 [DEBUG] [Thread-4162] [transport.py] [_log()] Compression: none
2025-11-25T19:10:54.755 [DEBUG] [Thread-4162] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:10:54.813 [DEBUG] [Thread-4162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:10:54.814 [DEBUG] [Thread-4162] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:10:54.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:10:54.815 [DEBUG] [Thread-4162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:10:54.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:10:54.869 [DEBUG] [Thread-4162] [transport.py] [_log()] userauth is OK
2025-11-25T19:10:54.869 [DEBUG] [Thread-4162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:10:54.869 [DEBUG] [Thread-4162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:10:54.869 [DEBUG] [Thread-4162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:10:54.869 [DEBUG] [Thread-4162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:10:54.888 [INFO] [Thread-4162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:10:54.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:10:54.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:10:55.707 [DEBUG] [Thread-4162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:10:55.707 [DEBUG] [Thread-4162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:10:55.755 [DEBUG] [Thread-4162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:10:55.755 [DEBUG] [Thread-4162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:10:55.764 [DEBUG] [Thread-4162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:10:55.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:10:55.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:10:55.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:10:55.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:10:55.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:10:55.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:10:55.801 [DEBUG] [Thread-4162] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:11:01.365 [DEBUG] [Thread-4164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:11:10.838 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:11:16.416 [DEBUG] [Thread-4165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:11:25.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:11:25.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:11:25.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:11:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 11, 18), 34.12, 9.83, 0.0, 24.67, 25.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:11:26.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:11:18
2025-11-25T19:11:26.470 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:11:26.470 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:11:26.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:11:26.732 [DEBUG] [Thread-4166] [transport.py] [_log()] starting thread (client mode): 0x737c7ca0
2025-11-25T19:11:26.732 [DEBUG] [Thread-4166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:11:26.750 [DEBUG] [Thread-4166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:11:26.750 [INFO] [Thread-4166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] client lang: <none>
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] server lang: <none>
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] kex follows: False
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] Compression: none
2025-11-25T19:11:26.753 [DEBUG] [Thread-4166] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:11:26.770 [DEBUG] [Thread-4166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:11:26.771 [DEBUG] [Thread-4166] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:11:26.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:11:26.771 [DEBUG] [Thread-4166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:11:26.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:11:26.773 [DEBUG] [Thread-4166] [transport.py] [_log()] userauth is OK
2025-11-25T19:11:26.774 [DEBUG] [Thread-4166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:11:26.774 [DEBUG] [Thread-4166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:11:26.774 [DEBUG] [Thread-4166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:11:26.774 [DEBUG] [Thread-4166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:11:26.797 [INFO] [Thread-4166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:11:26.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:11:27.428 [DEBUG] [Thread-4166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:11:27.428 [DEBUG] [Thread-4166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:11:27.429 [DEBUG] [Thread-4166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:11:27.469 [DEBUG] [Thread-4166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:11:27.469 [DEBUG] [Thread-4166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:11:27.472 [DEBUG] [Thread-4166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:11:27.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:11:27.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:11:27.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:11:27.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:11:27.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:11:27.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:11:27.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:11:27.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:11:27.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:11:27.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.716072 -999.00  +25.30  17.92     14   -3.20 1 1 1 1 1   886    0 26.55 -149.64 ----- 17.1 17.9 285.4 25.8 26.6 -29.9 26.9 -29.0 26.8 -28.2 26.9 -29.0
2025-11-25T19:11:27.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:11:27.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:11:27.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.716072
2025-11-25T19:11:27.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:11:27.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:11:27.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:11:27.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:11:27.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:11:27.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:11:18', tmtdew=34.12, humidity=9.83, cloud=0.0, wind=24.67, temperature=25.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:11:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:11:27.493 [DEBUG] [Thread-4166] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:11:27.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:11:27.588 [DEBUG] [Thread-4169] [transport.py] [_log()] starting thread (client mode): 0x70d03850
2025-11-25T19:11:27.588 [DEBUG] [Thread-4169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:11:27.601 [DEBUG] [Thread-4169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:11:27.602 [INFO] [Thread-4169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] client lang: <none>
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] server lang: <none>
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] kex follows: False
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:11:27.609 [DEBUG] [Thread-4169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:11:27.610 [DEBUG] [Thread-4169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:11:27.610 [DEBUG] [Thread-4169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:11:27.610 [DEBUG] [Thread-4169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:11:27.610 [DEBUG] [Thread-4169] [transport.py] [_log()] Compression: none
2025-11-25T19:11:27.610 [DEBUG] [Thread-4169] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:11:27.668 [DEBUG] [Thread-4169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:11:27.668 [DEBUG] [Thread-4169] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:11:27.669 [DEBUG] [Thread-4169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:11:27.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:11:27.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:11:27.725 [DEBUG] [Thread-4169] [transport.py] [_log()] userauth is OK
2025-11-25T19:11:27.725 [DEBUG] [Thread-4169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:11:27.725 [DEBUG] [Thread-4169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:11:27.725 [DEBUG] [Thread-4169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:11:27.725 [DEBUG] [Thread-4169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:11:27.750 [INFO] [Thread-4169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:11:27.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:11:27.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:11:28.605 [DEBUG] [Thread-4169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:11:28.605 [DEBUG] [Thread-4169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:11:28.656 [DEBUG] [Thread-4169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:11:28.656 [DEBUG] [Thread-4169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:11:28.666 [DEBUG] [Thread-4169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:11:28.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:11:28.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:11:28.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:11:28.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:11:28.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:11:28.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:11:28.703 [DEBUG] [Thread-4169] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:11:31.451 [DEBUG] [Thread-4171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:11:46.502 [DEBUG] [Thread-4172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:11:51.394 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:11:51.859 [DEBUG] [Thread-4173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:11:58.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:11:58.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:11:58.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:11:59.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 11, 50), 34.09, 9.85, 0.0, 20.96, 25.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:11:59.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:11:50
2025-11-25T19:11:59.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:11:59.690 [DEBUG] [Thread-4174] [transport.py] [_log()] starting thread (client mode): 0x70d403d0
2025-11-25T19:11:59.691 [DEBUG] [Thread-4174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:11:59.711 [DEBUG] [Thread-4174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:11:59.711 [INFO] [Thread-4174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] client lang: <none>
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] server lang: <none>
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] kex follows: False
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:11:59.714 [DEBUG] [Thread-4174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:11:59.715 [DEBUG] [Thread-4174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:11:59.715 [DEBUG] [Thread-4174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:11:59.715 [DEBUG] [Thread-4174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:11:59.715 [DEBUG] [Thread-4174] [transport.py] [_log()] Compression: none
2025-11-25T19:11:59.715 [DEBUG] [Thread-4174] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:11:59.729 [DEBUG] [Thread-4174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:11:59.729 [DEBUG] [Thread-4174] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:11:59.729 [DEBUG] [Thread-4174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:11:59.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:11:59.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:11:59.730 [DEBUG] [Thread-4174] [transport.py] [_log()] userauth is OK
2025-11-25T19:11:59.730 [DEBUG] [Thread-4174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:11:59.730 [DEBUG] [Thread-4174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:11:59.730 [DEBUG] [Thread-4174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:11:59.730 [DEBUG] [Thread-4174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:11:59.739 [INFO] [Thread-4174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:11:59.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:12:00.320 [DEBUG] [Thread-4174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:12:00.320 [DEBUG] [Thread-4174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:12:00.321 [DEBUG] [Thread-4174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:12:00.361 [DEBUG] [Thread-4174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:12:00.361 [DEBUG] [Thread-4174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:12:00.364 [DEBUG] [Thread-4174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:12:00.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:12:00.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:12:00.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:12:00.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:12:00.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:12:00.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:12:00.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:12:00.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:12:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:12:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.716419 -999.00  +25.30  16.86     14   -3.20 1 1 1 1 1   886    0 25.94 -166.54 ----- 18.5 16.9 290.4 20.9 26.6 -29.6 26.9 -29.0 26.8 -28.3 26.9 -28.9
2025-11-25T19:12:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:12:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:12:00.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.716419
2025-11-25T19:12:00.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:12:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:12:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:12:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:12:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:12:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:11:50', tmtdew=34.09, humidity=9.85, cloud=0.0, wind=20.96, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:11:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:12:00.388 [DEBUG] [Thread-4174] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:12:00.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:12:00.485 [DEBUG] [Thread-4177] [transport.py] [_log()] starting thread (client mode): 0x70d0dae0
2025-11-25T19:12:00.485 [DEBUG] [Thread-4177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:12:00.502 [DEBUG] [Thread-4177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:12:00.502 [INFO] [Thread-4177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:12:00.509 [DEBUG] [Thread-4177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] client lang: <none>
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] server lang: <none>
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] kex follows: False
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:12:00.510 [DEBUG] [Thread-4177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:12:00.511 [DEBUG] [Thread-4177] [transport.py] [_log()] Compression: none
2025-11-25T19:12:00.511 [DEBUG] [Thread-4177] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:12:00.567 [DEBUG] [Thread-4177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:12:00.568 [DEBUG] [Thread-4177] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:12:00.568 [DEBUG] [Thread-4177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:12:00.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:12:00.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:12:00.624 [DEBUG] [Thread-4177] [transport.py] [_log()] userauth is OK
2025-11-25T19:12:00.624 [DEBUG] [Thread-4177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:12:00.624 [DEBUG] [Thread-4177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:12:00.625 [DEBUG] [Thread-4177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:12:00.625 [DEBUG] [Thread-4177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:12:00.643 [INFO] [Thread-4177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:12:00.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:12:00.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:12:01.521 [DEBUG] [Thread-4177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:12:01.521 [DEBUG] [Thread-4177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:12:01.535 [DEBUG] [Thread-4179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:12:01.568 [DEBUG] [Thread-4177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:12:01.569 [DEBUG] [Thread-4177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:12:01.578 [DEBUG] [Thread-4177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:12:01.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:12:01.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:12:01.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:12:01.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:12:01.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:12:01.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:12:01.613 [DEBUG] [Thread-4177] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:12:16.585 [DEBUG] [Thread-4180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:12:26.611 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:12:26.612 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:12:31.621 [DEBUG] [Thread-4181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:12:31.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:12:31.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:12: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
2025-11-25T19:12:32.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 12, 22), 34.14, 9.8, 0.0, 22.32, 25.24, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:12:32.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:12:22
2025-11-25T19:12:32.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:12:32.619 [DEBUG] [Thread-4182] [transport.py] [_log()] starting thread (client mode): 0x70d43400
2025-11-25T19:12:32.619 [DEBUG] [Thread-4182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:12:32.639 [DEBUG] [Thread-4182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:12:32.639 [INFO] [Thread-4182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] client lang: <none>
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] server lang: <none>
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] kex follows: False
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] Compression: none
2025-11-25T19:12:32.641 [DEBUG] [Thread-4182] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:12:32.650 [DEBUG] [Thread-4182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:12:32.650 [DEBUG] [Thread-4182] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:12:32.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:12:32.650 [DEBUG] [Thread-4182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:12:32.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:12:32.651 [DEBUG] [Thread-4182] [transport.py] [_log()] userauth is OK
2025-11-25T19:12:32.651 [DEBUG] [Thread-4182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:12:32.651 [DEBUG] [Thread-4182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:12:32.651 [DEBUG] [Thread-4182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:12:32.651 [DEBUG] [Thread-4182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:12:32.660 [INFO] [Thread-4182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:12:32.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:12:33.255 [DEBUG] [Thread-4182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:12:33.255 [DEBUG] [Thread-4182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:12:33.255 [DEBUG] [Thread-4182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:12:33.296 [DEBUG] [Thread-4182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:12:33.296 [DEBUG] [Thread-4182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:12:33.299 [DEBUG] [Thread-4182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:12:33.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:12:33.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:12:33.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:12:33.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:12:33.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:12:33.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:12:33.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.716766 -999.00  +25.30  17.63     14   -3.20 1 1 1 1 1   886    0 25.91 -180.33 ----- 12.8 17.6 273.4 21.2 26.6 -29.8 26.8 -28.9 26.6 -28.6 26.8 -29.1
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.716766
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:12:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:12:22', tmtdew=34.14, humidity=9.8, cloud=0.0, wind=22.32, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:12:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:12:33.320 [DEBUG] [Thread-4182] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:12:33.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:12:33.405 [DEBUG] [Thread-4185] [transport.py] [_log()] starting thread (client mode): 0x70d43310
2025-11-25T19:12:33.406 [DEBUG] [Thread-4185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:12:33.420 [DEBUG] [Thread-4185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:12:33.420 [INFO] [Thread-4185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] client lang: <none>
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] server lang: <none>
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] kex follows: False
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] Compression: none
2025-11-25T19:12:33.427 [DEBUG] [Thread-4185] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:12:33.486 [DEBUG] [Thread-4185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:12:33.486 [DEBUG] [Thread-4185] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:12:33.486 [DEBUG] [Thread-4185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:12:33.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:12:33.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:12:33.543 [DEBUG] [Thread-4185] [transport.py] [_log()] userauth is OK
2025-11-25T19:12:33.543 [DEBUG] [Thread-4185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:12:33.543 [DEBUG] [Thread-4185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:12:33.543 [DEBUG] [Thread-4185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:12:33.543 [DEBUG] [Thread-4185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:12:33.557 [INFO] [Thread-4185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:12:33.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:12:33.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:12:34.437 [DEBUG] [Thread-4185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:12:34.437 [DEBUG] [Thread-4185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:12:34.485 [DEBUG] [Thread-4185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:12:34.485 [DEBUG] [Thread-4185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:12:34.493 [DEBUG] [Thread-4185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:12:34.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:12:34.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:12:34.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:12:34.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:12:34.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:12:34.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:12:34.528 [DEBUG] [Thread-4185] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:12:46.649 [DEBUG] [Thread-4187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:12:51.893 [DEBUG] [Thread-4188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:12:54.371 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:13:01.703 [DEBUG] [Thread-4189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:13:04.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:13:04.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:13:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:13:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 12, 54), 34.06, 9.83, 0.0, 23.34, 25.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:13:05.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:12:54
2025-11-25T19:13:05.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:13:05.471 [DEBUG] [Thread-4190] [transport.py] [_log()] starting thread (client mode): 0x70d3a8f0
2025-11-25T19:13:05.471 [DEBUG] [Thread-4190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:13:05.488 [DEBUG] [Thread-4190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:13:05.488 [INFO] [Thread-4190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:13:05.490 [DEBUG] [Thread-4190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:13:05.490 [DEBUG] [Thread-4190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] client lang: <none>
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] server lang: <none>
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] kex follows: False
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] Compression: none
2025-11-25T19:13:05.491 [DEBUG] [Thread-4190] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:13:05.507 [DEBUG] [Thread-4190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:13:05.507 [DEBUG] [Thread-4190] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:13:05.508 [DEBUG] [Thread-4190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:13:05.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:13:05.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:13:05.510 [DEBUG] [Thread-4190] [transport.py] [_log()] userauth is OK
2025-11-25T19:13:05.510 [DEBUG] [Thread-4190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:13:05.510 [DEBUG] [Thread-4190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:13:05.510 [DEBUG] [Thread-4190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:13:05.510 [DEBUG] [Thread-4190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:13:05.535 [INFO] [Thread-4190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:13:05.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:13:06.154 [DEBUG] [Thread-4190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:13:06.154 [DEBUG] [Thread-4190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:13:06.155 [DEBUG] [Thread-4190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:13:06.196 [DEBUG] [Thread-4190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:13:06.196 [DEBUG] [Thread-4190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:13:06.198 [DEBUG] [Thread-4190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:13:06.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:13:06.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:13:06.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:13:06.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:13:06.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:13:06.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:13:06.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:13:06.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:13:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:13:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.717114 -999.00  +25.30  16.13     15   -3.10 1 1 1 1 1   886    0 24.81 -194.81 ----- 12.5 16.1 296.7 18.9 26.6 -29.4 26.8 -28.9 26.7 -27.9 26.8 -28.7
2025-11-25T19:13:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:13:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:13:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.717114
2025-11-25T19:13:06.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:13:06.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:13:06.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:13:06.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:13:06.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:13:06.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:12:54', tmtdew=34.06, humidity=9.83, cloud=0.0, wind=23.34, temperature=25.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:12:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:13:06.224 [DEBUG] [Thread-4190] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:13:06.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:13:06.320 [DEBUG] [Thread-4193] [transport.py] [_log()] starting thread (client mode): 0x70d39900
2025-11-25T19:13:06.321 [DEBUG] [Thread-4193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:13:06.337 [DEBUG] [Thread-4193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:13:06.337 [INFO] [Thread-4193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:13:06.345 [DEBUG] [Thread-4193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:13:06.345 [DEBUG] [Thread-4193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] client lang: <none>
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] server lang: <none>
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] kex follows: False
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:13:06.346 [DEBUG] [Thread-4193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:13:06.347 [DEBUG] [Thread-4193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:13:06.347 [DEBUG] [Thread-4193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:13:06.347 [DEBUG] [Thread-4193] [transport.py] [_log()] Compression: none
2025-11-25T19:13:06.347 [DEBUG] [Thread-4193] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:13:06.406 [DEBUG] [Thread-4193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:13:06.407 [DEBUG] [Thread-4193] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:13:06.407 [DEBUG] [Thread-4193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:13:06.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:13:06.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:13:06.467 [DEBUG] [Thread-4193] [transport.py] [_log()] userauth is OK
2025-11-25T19:13:06.467 [DEBUG] [Thread-4193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:13:06.467 [DEBUG] [Thread-4193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:13:06.467 [DEBUG] [Thread-4193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:13:06.467 [DEBUG] [Thread-4193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:13:06.487 [INFO] [Thread-4193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:13:06.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:13:06.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:13:07.393 [DEBUG] [Thread-4193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:13:07.393 [DEBUG] [Thread-4193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:13:07.441 [DEBUG] [Thread-4193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:13:07.441 [DEBUG] [Thread-4193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:13:07.449 [DEBUG] [Thread-4193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:13:07.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:13:07.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:13:07.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:13:07.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:13:07.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:13:07.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:13:07.481 [DEBUG] [Thread-4193] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:13:16.732 [DEBUG] [Thread-4195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:13:18.924 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:13:26.780 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:13:26.781 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:13:31.782 [DEBUG] [Thread-4196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:13:37.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:13:37.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:13:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:13:38.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 13, 26), 33.96, 9.91, 0.0, 20.77, 25.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:13:38.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:13:26
2025-11-25T19:13:38.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:13:38.440 [DEBUG] [Thread-4197] [transport.py] [_log()] starting thread (client mode): 0x70d022c0
2025-11-25T19:13:38.440 [DEBUG] [Thread-4197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:13:38.460 [DEBUG] [Thread-4197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:13:38.460 [INFO] [Thread-4197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:13:38.463 [DEBUG] [Thread-4197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:13:38.463 [DEBUG] [Thread-4197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:13:38.463 [DEBUG] [Thread-4197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:13:38.463 [DEBUG] [Thread-4197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] client lang: <none>
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] server lang: <none>
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] kex follows: False
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:13:38.464 [DEBUG] [Thread-4197] [transport.py] [_log()] Compression: none
2025-11-25T19:13:38.465 [DEBUG] [Thread-4197] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:13:38.475 [DEBUG] [Thread-4197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:13:38.476 [DEBUG] [Thread-4197] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:13:38.476 [DEBUG] [Thread-4197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:13:38.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:13:38.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:13:38.478 [DEBUG] [Thread-4197] [transport.py] [_log()] userauth is OK
2025-11-25T19:13:38.479 [DEBUG] [Thread-4197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:13:38.479 [DEBUG] [Thread-4197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:13:38.479 [DEBUG] [Thread-4197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:13:38.479 [DEBUG] [Thread-4197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:13:38.504 [INFO] [Thread-4197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:13:38.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:13:39.131 [DEBUG] [Thread-4197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:13:39.132 [DEBUG] [Thread-4197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:13:39.132 [DEBUG] [Thread-4197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:13:39.173 [DEBUG] [Thread-4197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:13:39.173 [DEBUG] [Thread-4197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:13:39.176 [DEBUG] [Thread-4197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:13:39.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:13:39.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:13:39.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:13:39.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:13:39.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:13:39.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:13:39.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:13:39.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:13:39.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:13:39.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.717461 -999.00  +25.30  19.39     15   -3.10 1 1 1 1 1   886    0 24.75 -201.92 ----- 21.1 19.4 283.4 21.4 26.5 -29.7 26.7 -29.1 26.6 -27.6 26.7 -28.8
2025-11-25T19:13:39.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:13:39.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:13:39.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.717461
2025-11-25T19:13:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:13:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:13:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:13:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:13:39.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:13:39.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:13:26', tmtdew=33.96, humidity=9.91, cloud=0.0, wind=20.77, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:13:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:13:39.201 [DEBUG] [Thread-4197] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:13:39.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:13:39.296 [DEBUG] [Thread-4200] [transport.py] [_log()] starting thread (client mode): 0x70d02530
2025-11-25T19:13:39.296 [DEBUG] [Thread-4200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:13:39.310 [DEBUG] [Thread-4200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:13:39.311 [INFO] [Thread-4200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] client lang: <none>
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] server lang: <none>
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] kex follows: False
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:13:39.319 [DEBUG] [Thread-4200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:13:39.320 [DEBUG] [Thread-4200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:13:39.320 [DEBUG] [Thread-4200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:13:39.320 [DEBUG] [Thread-4200] [transport.py] [_log()] Compression: none
2025-11-25T19:13:39.320 [DEBUG] [Thread-4200] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:13:39.378 [DEBUG] [Thread-4200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:13:39.379 [DEBUG] [Thread-4200] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:13:39.380 [DEBUG] [Thread-4200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:13:39.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:13:39.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:13:39.434 [DEBUG] [Thread-4200] [transport.py] [_log()] userauth is OK
2025-11-25T19:13:39.434 [DEBUG] [Thread-4200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:13:39.435 [DEBUG] [Thread-4200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:13:39.435 [DEBUG] [Thread-4200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:13:39.435 [DEBUG] [Thread-4200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:13:39.454 [INFO] [Thread-4200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:13:39.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:13:39.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:13:40.312 [DEBUG] [Thread-4200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:13:40.312 [DEBUG] [Thread-4200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:13:40.360 [DEBUG] [Thread-4200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:13:40.360 [DEBUG] [Thread-4200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:13:40.369 [DEBUG] [Thread-4200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:13:40.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:13:40.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:13:40.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:13:40.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:13:40.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:13:40.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:13:40.405 [DEBUG] [Thread-4200] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:13:41.492 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:13:46.815 [DEBUG] [Thread-4202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:13:51.947 [DEBUG] [Thread-4203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:01.858 [DEBUG] [Thread-4204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:04.122 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:10.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:14:10.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:14:10.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:14:11.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 13, 58), 33.94, 9.93, 0.0, 20.77, 25.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:14:11.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:13:58
2025-11-25T19:14:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:14:11.368 [DEBUG] [Thread-4205] [transport.py] [_log()] starting thread (client mode): 0x70d02c80
2025-11-25T19:14:11.368 [DEBUG] [Thread-4205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:14:11.382 [DEBUG] [Thread-4205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:14:11.382 [INFO] [Thread-4205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] client lang: <none>
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] server lang: <none>
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] kex follows: False
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] Compression: none
2025-11-25T19:14:11.385 [DEBUG] [Thread-4205] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:14:11.402 [DEBUG] [Thread-4205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:14:11.403 [DEBUG] [Thread-4205] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:14:11.403 [DEBUG] [Thread-4205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:14:11.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:14:11.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:14:11.405 [DEBUG] [Thread-4205] [transport.py] [_log()] userauth is OK
2025-11-25T19:14:11.405 [DEBUG] [Thread-4205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:14:11.406 [DEBUG] [Thread-4205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:14:11.406 [DEBUG] [Thread-4205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:14:11.406 [DEBUG] [Thread-4205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:14:11.431 [INFO] [Thread-4205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:14:11.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:14:12.019 [DEBUG] [Thread-4205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:14:12.020 [DEBUG] [Thread-4205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:14:12.020 [DEBUG] [Thread-4205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:14:12.061 [DEBUG] [Thread-4205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:14:12.061 [DEBUG] [Thread-4205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:14:12.064 [DEBUG] [Thread-4205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:14:12.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:14:12.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:14:12.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:14:12.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:14:12.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:14:12.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:14:12.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:14:12.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.718155 -999.00  +25.10  17.76     15   -3.10 1 1 1 1 1   886    0 24.21 -218.71 ----- 17.7 17.8 278.8 24.3 26.4 -29.5 26.6 -29.0 26.4 -28.9 26.6 -28.8
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.718155
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:14:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:13:58', tmtdew=33.94, humidity=9.93, cloud=0.0, wind=20.77, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:14:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:14:12.084 [DEBUG] [Thread-4205] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:14:12.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:14:12.177 [DEBUG] [Thread-4208] [transport.py] [_log()] starting thread (client mode): 0x70d1efe0
2025-11-25T19:14:12.177 [DEBUG] [Thread-4208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:14:12.195 [DEBUG] [Thread-4208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:14:12.195 [INFO] [Thread-4208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:14:12.203 [DEBUG] [Thread-4208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:14:12.203 [DEBUG] [Thread-4208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:14:12.203 [DEBUG] [Thread-4208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:14:12.203 [DEBUG] [Thread-4208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:14:12.203 [DEBUG] [Thread-4208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:14:12.203 [DEBUG] [Thread-4208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:14:12.203 [DEBUG] [Thread-4208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:14:12.204 [DEBUG] [Thread-4208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:14:12.204 [DEBUG] [Thread-4208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:14:12.204 [DEBUG] [Thread-4208] [transport.py] [_log()] client lang: <none>
2025-11-25T19:14:12.204 [DEBUG] [Thread-4208] [transport.py] [_log()] server lang: <none>
2025-11-25T19:14:12.204 [DEBUG] [Thread-4208] [transport.py] [_log()] kex follows: False
2025-11-25T19:14:12.204 [DEBUG] [Thread-4208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:14:12.204 [DEBUG] [Thread-4208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:14:12.204 [DEBUG] [Thread-4208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:14:12.204 [DEBUG] [Thread-4208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:14:12.205 [DEBUG] [Thread-4208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:14:12.205 [DEBUG] [Thread-4208] [transport.py] [_log()] Compression: none
2025-11-25T19:14:12.205 [DEBUG] [Thread-4208] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:14:12.264 [DEBUG] [Thread-4208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:14:12.265 [DEBUG] [Thread-4208] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:14:12.265 [DEBUG] [Thread-4208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:14:12.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:14:12.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:14:12.321 [DEBUG] [Thread-4208] [transport.py] [_log()] userauth is OK
2025-11-25T19:14:12.321 [DEBUG] [Thread-4208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:14:12.321 [DEBUG] [Thread-4208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:14:12.321 [DEBUG] [Thread-4208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:14:12.321 [DEBUG] [Thread-4208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:14:12.335 [INFO] [Thread-4208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:14:12.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:14:12.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:14:13.170 [DEBUG] [Thread-4208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:14:13.170 [DEBUG] [Thread-4208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:14:13.218 [DEBUG] [Thread-4208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:14:13.218 [DEBUG] [Thread-4208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:14:13.228 [DEBUG] [Thread-4208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:14:13.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:14:13.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:14:13.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:14:13.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:14:13.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:14:13.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:14:13.264 [DEBUG] [Thread-4208] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:14:16.894 [DEBUG] [Thread-4210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:26.671 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:26.918 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:26.919 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:31.941 [DEBUG] [Thread-4211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:14:43.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:14:43.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:14:43.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 14, 30), 33.86, 9.98, 0.0, 21.0, 25.26, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:14:43.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:14:30
2025-11-25T19:14:44.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:14:44.187 [DEBUG] [Thread-4212] [transport.py] [_log()] starting thread (client mode): 0x70d3b3d0
2025-11-25T19:14:44.187 [DEBUG] [Thread-4212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:14:44.204 [DEBUG] [Thread-4212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:14:44.204 [INFO] [Thread-4212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:14:44.205 [DEBUG] [Thread-4212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] client lang: <none>
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] server lang: <none>
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] kex follows: False
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:14:44.206 [DEBUG] [Thread-4212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:14:44.207 [DEBUG] [Thread-4212] [transport.py] [_log()] Compression: none
2025-11-25T19:14:44.207 [DEBUG] [Thread-4212] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:14:44.217 [DEBUG] [Thread-4212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:14:44.218 [DEBUG] [Thread-4212] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:14:44.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:14:44.219 [DEBUG] [Thread-4212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:14:44.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:14:44.221 [DEBUG] [Thread-4212] [transport.py] [_log()] userauth is OK
2025-11-25T19:14:44.222 [DEBUG] [Thread-4212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:14:44.222 [DEBUG] [Thread-4212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:14:44.222 [DEBUG] [Thread-4212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:14:44.222 [DEBUG] [Thread-4212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:14:44.241 [INFO] [Thread-4212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:14:44.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:14:44.879 [DEBUG] [Thread-4212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:14:44.880 [DEBUG] [Thread-4212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:14:44.880 [DEBUG] [Thread-4212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:14:44.921 [DEBUG] [Thread-4212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:14:44.921 [DEBUG] [Thread-4212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:14:44.923 [DEBUG] [Thread-4212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:14:44.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:14:44.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:14:44.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:14:44.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:14:44.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:14:44.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:14:44.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:14:44.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:14:44.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:14:44.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.718502 -999.00  +25.00  21.47     15   -3.10 1 1 1 1 1   885    0 24.40 -231.34 ----- 17.9 21.5 276.2 23.0 26.3 -29.7 26.5 -28.7 26.3 -28.0 26.5 -29.1
2025-11-25T19:14:44.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:14:44.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:14:44.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.718502
2025-11-25T19:14:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:14:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:14:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:14:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:14:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:14:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:14:30', tmtdew=33.86, humidity=9.98, cloud=0.0, wind=21.0, temperature=25.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:14:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:14:44.947 [DEBUG] [Thread-4212] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:14:45.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:14:45.041 [DEBUG] [Thread-4215] [transport.py] [_log()] starting thread (client mode): 0x70d02c80
2025-11-25T19:14:45.041 [DEBUG] [Thread-4215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:14:45.056 [DEBUG] [Thread-4215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:14:45.056 [INFO] [Thread-4215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:14:45.063 [DEBUG] [Thread-4215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:14:45.064 [DEBUG] [Thread-4215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:14:45.064 [DEBUG] [Thread-4215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:14:45.064 [DEBUG] [Thread-4215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:14:45.064 [DEBUG] [Thread-4215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:14:45.064 [DEBUG] [Thread-4215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:14:45.064 [DEBUG] [Thread-4215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:14:45.064 [DEBUG] [Thread-4215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:14:45.064 [DEBUG] [Thread-4215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:14:45.064 [DEBUG] [Thread-4215] [transport.py] [_log()] client lang: <none>
2025-11-25T19:14:45.065 [DEBUG] [Thread-4215] [transport.py] [_log()] server lang: <none>
2025-11-25T19:14:45.065 [DEBUG] [Thread-4215] [transport.py] [_log()] kex follows: False
2025-11-25T19:14:45.065 [DEBUG] [Thread-4215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:14:45.065 [DEBUG] [Thread-4215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:14:45.065 [DEBUG] [Thread-4215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:14:45.065 [DEBUG] [Thread-4215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:14:45.065 [DEBUG] [Thread-4215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:14:45.065 [DEBUG] [Thread-4215] [transport.py] [_log()] Compression: none
2025-11-25T19:14:45.065 [DEBUG] [Thread-4215] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:14:45.124 [DEBUG] [Thread-4215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:14:45.124 [DEBUG] [Thread-4215] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:14:45.124 [DEBUG] [Thread-4215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:14:45.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:14:45.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:14:45.181 [DEBUG] [Thread-4215] [transport.py] [_log()] userauth is OK
2025-11-25T19:14:45.181 [DEBUG] [Thread-4215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:14:45.181 [DEBUG] [Thread-4215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:14:45.181 [DEBUG] [Thread-4215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:14:45.181 [DEBUG] [Thread-4215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:14:45.194 [INFO] [Thread-4215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:14:45.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:14:45.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:14:46.087 [DEBUG] [Thread-4215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:14:46.087 [DEBUG] [Thread-4215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:14:46.134 [DEBUG] [Thread-4215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:14:46.135 [DEBUG] [Thread-4215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:14:46.144 [DEBUG] [Thread-4215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:14:46.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:14:46.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:14:46.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:14:46.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:14:46.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:14:46.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:14:46.183 [DEBUG] [Thread-4215] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:14:46.977 [DEBUG] [Thread-4217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:49.229 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:14:51.999 [DEBUG] [Thread-4218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:02.030 [DEBUG] [Thread-4219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:11.814 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:16.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:15:16.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:15:16.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:15:16.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 15, 2), 33.89, 9.95, 0.0, 20.13, 25.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:15:16.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:15:02
2025-11-25T19:15:16.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:15:17.060 [DEBUG] [Thread-4220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:17.104 [DEBUG] [Thread-4221] [transport.py] [_log()] starting thread (client mode): 0x70d43d90
2025-11-25T19:15:17.104 [DEBUG] [Thread-4221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:15:17.125 [DEBUG] [Thread-4221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:15:17.125 [INFO] [Thread-4221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:15:17.126 [DEBUG] [Thread-4221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:15:17.126 [DEBUG] [Thread-4221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:15:17.126 [DEBUG] [Thread-4221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:15:17.126 [DEBUG] [Thread-4221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] client lang: <none>
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] server lang: <none>
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] kex follows: False
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] Compression: none
2025-11-25T19:15:17.127 [DEBUG] [Thread-4221] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:15:17.136 [DEBUG] [Thread-4221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:15:17.137 [DEBUG] [Thread-4221] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:15:17.137 [DEBUG] [Thread-4221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:15:17.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:15:17.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:15:17.140 [DEBUG] [Thread-4221] [transport.py] [_log()] userauth is OK
2025-11-25T19:15:17.140 [DEBUG] [Thread-4221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:15:17.140 [DEBUG] [Thread-4221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:15:17.140 [DEBUG] [Thread-4221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:15:17.140 [DEBUG] [Thread-4221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:15:17.158 [INFO] [Thread-4221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:15:17.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:15:17.760 [DEBUG] [Thread-4221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:15:17.761 [DEBUG] [Thread-4221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:15:17.761 [DEBUG] [Thread-4221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:15:17.801 [DEBUG] [Thread-4221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:15:17.802 [DEBUG] [Thread-4221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:15:17.805 [DEBUG] [Thread-4221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:15:17.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:15:17.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:15:17.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:15:17.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:15:17.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:15:17.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:15:17.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:15:17.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:15:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:15:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.718849 -999.00  +25.10  16.17     15   -3.10 1 1 1 1 1   885    0 23.68 -231.33 ----- 17.4 16.2 275.4 20.8 26.2 -29.4 26.5 -28.7 26.4 -27.3 26.4 -28.7
2025-11-25T19:15:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:15:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:15:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.718849
2025-11-25T19:15:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:15:17.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:15:17.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:15:17.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:15:17.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:15:17.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:15:02', tmtdew=33.89, humidity=9.95, cloud=0.0, wind=20.13, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:15:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:15:17.825 [DEBUG] [Thread-4221] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:15:17.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:15:17.922 [DEBUG] [Thread-4224] [transport.py] [_log()] starting thread (client mode): 0x70d39240
2025-11-25T19:15:17.922 [DEBUG] [Thread-4224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:15:17.940 [DEBUG] [Thread-4224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:15:17.940 [INFO] [Thread-4224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:15:17.947 [DEBUG] [Thread-4224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:15:17.947 [DEBUG] [Thread-4224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:15:17.948 [DEBUG] [Thread-4224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:15:17.948 [DEBUG] [Thread-4224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:15:17.948 [DEBUG] [Thread-4224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:15:17.948 [DEBUG] [Thread-4224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:15:17.948 [DEBUG] [Thread-4224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:15:17.948 [DEBUG] [Thread-4224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:15:17.948 [DEBUG] [Thread-4224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:15:17.948 [DEBUG] [Thread-4224] [transport.py] [_log()] client lang: <none>
2025-11-25T19:15:17.948 [DEBUG] [Thread-4224] [transport.py] [_log()] server lang: <none>
2025-11-25T19:15:17.949 [DEBUG] [Thread-4224] [transport.py] [_log()] kex follows: False
2025-11-25T19:15:17.949 [DEBUG] [Thread-4224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:15:17.949 [DEBUG] [Thread-4224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:15:17.949 [DEBUG] [Thread-4224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:15:17.949 [DEBUG] [Thread-4224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:15:17.949 [DEBUG] [Thread-4224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:15:17.949 [DEBUG] [Thread-4224] [transport.py] [_log()] Compression: none
2025-11-25T19:15:17.950 [DEBUG] [Thread-4224] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:15:18.006 [DEBUG] [Thread-4224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:15:18.007 [DEBUG] [Thread-4224] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:15:18.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:15:18.008 [DEBUG] [Thread-4224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:15:18.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:15:18.065 [DEBUG] [Thread-4224] [transport.py] [_log()] userauth is OK
2025-11-25T19:15:18.065 [DEBUG] [Thread-4224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:15:18.065 [DEBUG] [Thread-4224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:15:18.066 [DEBUG] [Thread-4224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:15:18.066 [DEBUG] [Thread-4224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:15:18.084 [INFO] [Thread-4224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:15:18.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:15:18.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:15:18.925 [DEBUG] [Thread-4224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:15:18.925 [DEBUG] [Thread-4224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:15:18.973 [DEBUG] [Thread-4224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:15:18.973 [DEBUG] [Thread-4224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:15:18.982 [DEBUG] [Thread-4224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:15:18.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:15: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')
2025-11-25T19:15: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
2025-11-25T19:15:19.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:15:19.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:15:19.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:15:19.021 [DEBUG] [Thread-4224] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:15:27.060 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:27.061 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:32.102 [DEBUG] [Thread-4226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:34.411 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:47.147 [DEBUG] [Thread-4227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:15:49.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:15:49.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:15:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 15, 35), 33.86, 9.93, 0.0, 19.96, 25.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:15:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:15:35
2025-11-25T19:15:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:15:49.931 [DEBUG] [Thread-4228] [transport.py] [_log()] starting thread (client mode): 0x70d39510
2025-11-25T19:15:49.931 [DEBUG] [Thread-4228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:15:49.951 [DEBUG] [Thread-4228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:15:49.951 [INFO] [Thread-4228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:15:49.952 [DEBUG] [Thread-4228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] client lang: <none>
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] server lang: <none>
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] kex follows: False
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:15:49.953 [DEBUG] [Thread-4228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:15:49.954 [DEBUG] [Thread-4228] [transport.py] [_log()] Compression: none
2025-11-25T19:15:49.954 [DEBUG] [Thread-4228] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:15:49.968 [DEBUG] [Thread-4228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:15:49.968 [DEBUG] [Thread-4228] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:15:49.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:15:49.969 [DEBUG] [Thread-4228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:15:49.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:15:49.971 [DEBUG] [Thread-4228] [transport.py] [_log()] userauth is OK
2025-11-25T19:15:49.971 [DEBUG] [Thread-4228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:15:49.971 [DEBUG] [Thread-4228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:15:49.971 [DEBUG] [Thread-4228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:15:49.971 [DEBUG] [Thread-4228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:15:49.990 [INFO] [Thread-4228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:15:49.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:15:50.593 [DEBUG] [Thread-4228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:15:50.594 [DEBUG] [Thread-4228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:15:50.594 [DEBUG] [Thread-4228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:15:50.634 [DEBUG] [Thread-4228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:15:50.635 [DEBUG] [Thread-4228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:15:50.637 [DEBUG] [Thread-4228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:15:50.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:15:50.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:15:50.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:15:50.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:15:50.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:15:50.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:15:50.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:15:50.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:15:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:15:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.719197 -999.00  +25.00  17.52     15   -3.10 1 1 1 1 1   885    0 23.87 -230.71 ----- 15.9 17.5 276.5 20.9 26.2 -29.7 26.4 -28.7 26.2 -27.9 26.4 -28.6
2025-11-25T19:15:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:15:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:15:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.719197
2025-11-25T19:15:50.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:15:50.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:15:50.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:15:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:15:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:15:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:15:35', tmtdew=33.86, humidity=9.93, cloud=0.0, wind=19.96, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:15:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:15:50.663 [DEBUG] [Thread-4228] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:15:50.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:15:50.759 [DEBUG] [Thread-4231] [transport.py] [_log()] starting thread (client mode): 0x70d39900
2025-11-25T19:15:50.759 [DEBUG] [Thread-4231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:15:50.773 [DEBUG] [Thread-4231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:15:50.774 [INFO] [Thread-4231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:15:50.781 [DEBUG] [Thread-4231] [transport.py] [_log()] client lang: <none>
2025-11-25T19:15:50.782 [DEBUG] [Thread-4231] [transport.py] [_log()] server lang: <none>
2025-11-25T19:15:50.782 [DEBUG] [Thread-4231] [transport.py] [_log()] kex follows: False
2025-11-25T19:15:50.782 [DEBUG] [Thread-4231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:15:50.782 [DEBUG] [Thread-4231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:15:50.782 [DEBUG] [Thread-4231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:15:50.782 [DEBUG] [Thread-4231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:15:50.782 [DEBUG] [Thread-4231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:15:50.782 [DEBUG] [Thread-4231] [transport.py] [_log()] Compression: none
2025-11-25T19:15:50.782 [DEBUG] [Thread-4231] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:15:50.840 [DEBUG] [Thread-4231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:15:50.841 [DEBUG] [Thread-4231] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:15:50.841 [DEBUG] [Thread-4231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:15:50.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:15:50.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:15:50.896 [DEBUG] [Thread-4231] [transport.py] [_log()] userauth is OK
2025-11-25T19:15:50.896 [DEBUG] [Thread-4231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:15:50.896 [DEBUG] [Thread-4231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:15:50.896 [DEBUG] [Thread-4231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:15:50.896 [DEBUG] [Thread-4231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:15:50.915 [INFO] [Thread-4231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:15:50.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:15:50.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:15:51.779 [DEBUG] [Thread-4231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:15:51.779 [DEBUG] [Thread-4231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:15:51.826 [DEBUG] [Thread-4231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:15:51.827 [DEBUG] [Thread-4231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:15:51.836 [DEBUG] [Thread-4231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:15:51.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:15:51.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:15:51.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:15:51.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:15:51.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:15:51.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:15:51.870 [DEBUG] [Thread-4231] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:15:52.052 [DEBUG] [Thread-4233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:15:56.982 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:02.182 [DEBUG] [Thread-4234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:17.230 [DEBUG] [Thread-4235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:19.538 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:21.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:16:21.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:16:21.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:16:22.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 16, 7), 33.81, 9.96, 0.0, 19.5, 25.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:16:22.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:16:07
2025-11-25T19:16:22.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:16:22.796 [DEBUG] [Thread-4236] [transport.py] [_log()] starting thread (client mode): 0x70d001c0
2025-11-25T19:16:22.796 [DEBUG] [Thread-4236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:16:22.815 [DEBUG] [Thread-4236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:16:22.815 [INFO] [Thread-4236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:16:22.818 [DEBUG] [Thread-4236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:16:22.818 [DEBUG] [Thread-4236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:16:22.818 [DEBUG] [Thread-4236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:16:22.818 [DEBUG] [Thread-4236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] client lang: <none>
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] server lang: <none>
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] kex follows: False
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] Compression: none
2025-11-25T19:16:22.819 [DEBUG] [Thread-4236] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:16:22.835 [DEBUG] [Thread-4236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:16:22.836 [DEBUG] [Thread-4236] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:16:22.836 [DEBUG] [Thread-4236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:16:22.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:16:22.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:16:22.838 [DEBUG] [Thread-4236] [transport.py] [_log()] userauth is OK
2025-11-25T19:16:22.838 [DEBUG] [Thread-4236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:16:22.838 [DEBUG] [Thread-4236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:16:22.839 [DEBUG] [Thread-4236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:16:22.839 [DEBUG] [Thread-4236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:16:22.857 [INFO] [Thread-4236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:16:22.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:16:23.528 [DEBUG] [Thread-4236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:16:23.528 [DEBUG] [Thread-4236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:16:23.528 [DEBUG] [Thread-4236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:16:23.568 [DEBUG] [Thread-4236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:16:23.569 [DEBUG] [Thread-4236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:16:23.571 [DEBUG] [Thread-4236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:16:23.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:16:23.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:16:23.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:16:23.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:16:23.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:16:23.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:16:23.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:16:23.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:16:23.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:16:23.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.719544 -999.00  +25.00  15.03     15   -3.10 1 1 1 1 1   885    0 23.33 -221.21 ----- 12.8 15.0 275.4 20.6 26.2 -29.4 26.4 -28.7 26.2 -28.1 26.3 -28.6
2025-11-25T19:16:23.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:16:23.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:16:23.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.719544
2025-11-25T19:16:23.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:16:23.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:16:23.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:16:23.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:16:23.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:16:23.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:16:07', tmtdew=33.81, humidity=9.96, cloud=0.0, wind=19.5, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:16:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:16:23.596 [DEBUG] [Thread-4236] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:16:23.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:16:23.694 [DEBUG] [Thread-4239] [transport.py] [_log()] starting thread (client mode): 0x70d0e560
2025-11-25T19:16:23.694 [DEBUG] [Thread-4239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:16:23.712 [DEBUG] [Thread-4239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:16:23.712 [INFO] [Thread-4239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] client lang: <none>
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] server lang: <none>
2025-11-25T19:16:23.720 [DEBUG] [Thread-4239] [transport.py] [_log()] kex follows: False
2025-11-25T19:16:23.721 [DEBUG] [Thread-4239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:16:23.721 [DEBUG] [Thread-4239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:16:23.721 [DEBUG] [Thread-4239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:16:23.721 [DEBUG] [Thread-4239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:16:23.721 [DEBUG] [Thread-4239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:16:23.721 [DEBUG] [Thread-4239] [transport.py] [_log()] Compression: none
2025-11-25T19:16:23.721 [DEBUG] [Thread-4239] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:16:23.780 [DEBUG] [Thread-4239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:16:23.780 [DEBUG] [Thread-4239] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:16:23.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:16:23.782 [DEBUG] [Thread-4239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:16:23.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:16:23.836 [DEBUG] [Thread-4239] [transport.py] [_log()] userauth is OK
2025-11-25T19:16:23.836 [DEBUG] [Thread-4239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:16:23.837 [DEBUG] [Thread-4239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:16:23.837 [DEBUG] [Thread-4239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:16:23.837 [DEBUG] [Thread-4239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:16:23.855 [INFO] [Thread-4239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:16:23.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:16:23.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:16:24.725 [DEBUG] [Thread-4239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:16:24.725 [DEBUG] [Thread-4239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:16:24.773 [DEBUG] [Thread-4239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:16:24.773 [DEBUG] [Thread-4239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:16:24.782 [DEBUG] [Thread-4239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:16:24.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:16:24.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:16:24.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:16:24.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:16:24.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:16:24.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:16:24.819 [DEBUG] [Thread-4239] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:16:27.243 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:27.244 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:32.262 [DEBUG] [Thread-4241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:42.132 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:43.208 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:45.704 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:47.225 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:47.322 [DEBUG] [Thread-4242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:47.702 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:49.200 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:50.701 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:52.101 [DEBUG] [Thread-4243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:52.203 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:53.684 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:54.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:16:54.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:16:54.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:16:55.167 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:55.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 16, 38), 33.78, 9.95, 0.0, 20.91, 25.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:16:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:16:38
2025-11-25T19:16:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:16:55.805 [DEBUG] [Thread-4244] [transport.py] [_log()] starting thread (client mode): 0x70d1fd30
2025-11-25T19:16:55.806 [DEBUG] [Thread-4244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:16:55.816 [DEBUG] [Thread-4244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:16:55.816 [INFO] [Thread-4244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] client lang: <none>
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] server lang: <none>
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] kex follows: False
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:16:55.819 [DEBUG] [Thread-4244] [transport.py] [_log()] Compression: none
2025-11-25T19:16:55.820 [DEBUG] [Thread-4244] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:16:55.834 [DEBUG] [Thread-4244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:16:55.834 [DEBUG] [Thread-4244] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:16:55.834 [DEBUG] [Thread-4244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:16:55.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:16:55.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:16:55.835 [DEBUG] [Thread-4244] [transport.py] [_log()] userauth is OK
2025-11-25T19:16:55.835 [DEBUG] [Thread-4244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:16:55.835 [DEBUG] [Thread-4244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:16:55.835 [DEBUG] [Thread-4244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:16:55.835 [DEBUG] [Thread-4244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:16:55.848 [INFO] [Thread-4244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:16:55.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:16:56.486 [DEBUG] [Thread-4244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:16:56.486 [DEBUG] [Thread-4244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:16:56.486 [DEBUG] [Thread-4244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:16:56.527 [DEBUG] [Thread-4244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:16:56.527 [DEBUG] [Thread-4244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:16:56.532 [DEBUG] [Thread-4244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:16:56.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:16:56.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:16:56.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:16:56.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:16:56.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:16:56.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:16:56.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:16:56.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.719891 -999.00  +25.00  19.16     15   -3.10 1 1 1 1 1   884    0 23.26 -222.49 ----- 17.6 19.2 277.0 22.4 26.1 -29.5 26.3 -28.7 26.1 -28.3 26.3 -28.6
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.719891
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:16:56.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:16:38', tmtdew=33.78, humidity=9.95, cloud=0.0, wind=20.91, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:16:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:16:56.548 [DEBUG] [Thread-4244] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:16:56.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:16:56.635 [DEBUG] [Thread-4247] [transport.py] [_log()] starting thread (client mode): 0x70d3a290
2025-11-25T19:16:56.635 [DEBUG] [Thread-4247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:16:56.650 [DEBUG] [Thread-4247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:16:56.650 [INFO] [Thread-4247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:16:56.656 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:56.657 [DEBUG] [Thread-4247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:16:56.657 [DEBUG] [Thread-4247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] client lang: <none>
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] server lang: <none>
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] kex follows: False
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] Compression: none
2025-11-25T19:16:56.658 [DEBUG] [Thread-4247] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:16:56.714 [DEBUG] [Thread-4247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:16:56.714 [DEBUG] [Thread-4247] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:16:56.714 [DEBUG] [Thread-4247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:16:56.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:16:56.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:16:56.771 [DEBUG] [Thread-4247] [transport.py] [_log()] userauth is OK
2025-11-25T19:16:56.771 [DEBUG] [Thread-4247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:16:56.771 [DEBUG] [Thread-4247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:16:56.771 [DEBUG] [Thread-4247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:16:56.771 [DEBUG] [Thread-4247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:16:56.786 [INFO] [Thread-4247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:16:56.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:16:56.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:16:57.619 [DEBUG] [Thread-4247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:16:57.619 [DEBUG] [Thread-4247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:16:57.666 [DEBUG] [Thread-4247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:16:57.667 [DEBUG] [Thread-4247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:16:57.675 [DEBUG] [Thread-4247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:16:57.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:16:57.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:16:57.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:16:57.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:16:57.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:16:57.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:16:57.710 [DEBUG] [Thread-4247] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:16:58.145 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:16:58.723 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:02.360 [DEBUG] [Thread-4249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:07.245 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:13.743 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:17.410 [DEBUG] [Thread-4250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:20.264 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:26.781 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:27.385 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:27.386 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:17:27.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:17:27.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:17:28.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 17, 10), 33.76, 9.96, 0.0, 19.96, 25.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:17:28.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:17:10
2025-11-25T19:17:28.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:17:28.653 [DEBUG] [Thread-4251] [transport.py] [_log()] starting thread (client mode): 0x70d3b100
2025-11-25T19:17:28.653 [DEBUG] [Thread-4251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:17:28.674 [DEBUG] [Thread-4251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:17:28.674 [INFO] [Thread-4251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] client lang: <none>
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] server lang: <none>
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] kex follows: False
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] Compression: none
2025-11-25T19:17:28.677 [DEBUG] [Thread-4251] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:17:28.692 [DEBUG] [Thread-4251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:17:28.692 [DEBUG] [Thread-4251] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:17:28.692 [DEBUG] [Thread-4251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:17:28.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:17:28.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:17:28.693 [DEBUG] [Thread-4251] [transport.py] [_log()] userauth is OK
2025-11-25T19:17:28.693 [DEBUG] [Thread-4251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:17:28.693 [DEBUG] [Thread-4251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:17:28.693 [DEBUG] [Thread-4251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:17:28.693 [DEBUG] [Thread-4251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:17:28.702 [INFO] [Thread-4251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:17:28.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:17:29.314 [DEBUG] [Thread-4251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:17:29.314 [DEBUG] [Thread-4251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:17:29.314 [DEBUG] [Thread-4251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:17:29.355 [DEBUG] [Thread-4251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:17:29.355 [DEBUG] [Thread-4251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:17:29.357 [DEBUG] [Thread-4251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:17:29.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:17:29.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:17:29.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:17:29.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:17:29.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:17:29.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:17:29.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:17:29.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:17:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:17:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.720239 -999.00  +24.90  15.47     15   -3.10 1 1 1 1 1   884    0 23.10 -229.29 ----- 15.3 15.5 277.4 22.6 26.1 -29.6 26.2 -28.6 26.0 -28.4 26.2 -28.5
2025-11-25T19:17:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:17:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:17:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.720239
2025-11-25T19:17:29.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:17:29.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:17:29.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:17:29.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:17:29.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:17:29.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:17:10', tmtdew=33.76, humidity=9.96, cloud=0.0, wind=19.96, temperature=25.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:17:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:17:29.378 [DEBUG] [Thread-4251] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:17:29.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:17:29.461 [DEBUG] [Thread-4254] [transport.py] [_log()] starting thread (client mode): 0x7378d720
2025-11-25T19:17:29.461 [DEBUG] [Thread-4254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:17:29.475 [DEBUG] [Thread-4254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:17:29.476 [INFO] [Thread-4254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] client lang: <none>
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] server lang: <none>
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] kex follows: False
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] Compression: none
2025-11-25T19:17:29.483 [DEBUG] [Thread-4254] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:17:29.541 [DEBUG] [Thread-4254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:17:29.541 [DEBUG] [Thread-4254] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:17:29.541 [DEBUG] [Thread-4254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:17:29.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:17:29.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:17:29.598 [DEBUG] [Thread-4254] [transport.py] [_log()] userauth is OK
2025-11-25T19:17:29.598 [DEBUG] [Thread-4254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:17:29.598 [DEBUG] [Thread-4254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:17:29.598 [DEBUG] [Thread-4254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:17:29.598 [DEBUG] [Thread-4254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:17:29.612 [INFO] [Thread-4254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:17:29.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:17:29.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:17:30.466 [DEBUG] [Thread-4254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:17:30.466 [DEBUG] [Thread-4254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:17:30.514 [DEBUG] [Thread-4254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:17:30.514 [DEBUG] [Thread-4254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:17:30.522 [DEBUG] [Thread-4254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:17:30.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:17:30.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:17:30.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:17:30.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:17:30.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:17:30.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:17:30.553 [DEBUG] [Thread-4254] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:17:32.440 [DEBUG] [Thread-4256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:33.273 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:39.705 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:46.238 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:47.490 [DEBUG] [Thread-4257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:52.151 [DEBUG] [Thread-4258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:52.761 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:17:59.288 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:18:00.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:18:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:18:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 17, 42), 33.76, 9.96, 0.0, 15.26, 25.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:18:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:17:42
2025-11-25T19:18:01.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:18:01.524 [DEBUG] [Thread-4259] [transport.py] [_log()] starting thread (client mode): 0x70d544f0
2025-11-25T19:18:01.524 [DEBUG] [Thread-4259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:18:01.544 [DEBUG] [Thread-4259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:18:01.544 [INFO] [Thread-4259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:18:01.547 [DEBUG] [Thread-4259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:18:01.547 [DEBUG] [Thread-4259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:18:01.547 [DEBUG] [Thread-4259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:18:01.547 [DEBUG] [Thread-4259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:18:01.547 [DEBUG] [Thread-4259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:18:01.547 [DEBUG] [Thread-4259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:18:01.547 [DEBUG] [Thread-4259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:18:01.547 [DEBUG] [Thread-4259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] client lang: <none>
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] server lang: <none>
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] kex follows: False
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] Compression: none
2025-11-25T19:18:01.548 [DEBUG] [Thread-4259] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:18:01.556 [DEBUG] [Thread-4259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:18:01.557 [DEBUG] [Thread-4259] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:18:01.557 [DEBUG] [Thread-4259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:18:01.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:18:01.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:18:01.559 [DEBUG] [Thread-4259] [transport.py] [_log()] userauth is OK
2025-11-25T19:18:01.559 [DEBUG] [Thread-4259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:18:01.559 [DEBUG] [Thread-4259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:18:01.559 [DEBUG] [Thread-4259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:18:01.559 [DEBUG] [Thread-4259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:18:01.584 [INFO] [Thread-4259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:18:01.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:18:02.196 [DEBUG] [Thread-4259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:18:02.196 [DEBUG] [Thread-4259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:18:02.196 [DEBUG] [Thread-4259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:18:02.237 [DEBUG] [Thread-4259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:18:02.237 [DEBUG] [Thread-4259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:18:02.240 [DEBUG] [Thread-4259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:18:02.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:18:02.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:18:02.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:18:02.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:18:02.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:18:02.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:18:02.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:18:02.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:18:02.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:18:02.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.720586 -999.00  +24.90  13.25     15   -3.20 1 1 1 1 1   884    0 22.71 -235.29 ----- 17.0 13.2 274.8 19.6 26.0 -29.2 26.2 -28.4 26.0 -27.8 26.2 -28.5
2025-11-25T19:18:02.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:18:02.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:18:02.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.720586
2025-11-25T19:18:02.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:18:02.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:18:02.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:18:02.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:18:02.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:18:02.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:17:42', tmtdew=33.76, humidity=9.96, cloud=0.0, wind=15.26, temperature=25.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:17:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:18:02.262 [DEBUG] [Thread-4259] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:18:02.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:18:02.353 [DEBUG] [Thread-4262] [transport.py] [_log()] starting thread (client mode): 0x70d546d0
2025-11-25T19:18:02.353 [DEBUG] [Thread-4262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:18:02.369 [DEBUG] [Thread-4262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:18:02.369 [INFO] [Thread-4262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] client lang: <none>
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] server lang: <none>
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] kex follows: False
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:18:02.377 [DEBUG] [Thread-4262] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:18:02.378 [DEBUG] [Thread-4262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:18:02.378 [DEBUG] [Thread-4262] [transport.py] [_log()] Compression: none
2025-11-25T19:18:02.378 [DEBUG] [Thread-4262] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:18:02.435 [DEBUG] [Thread-4262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:18:02.436 [DEBUG] [Thread-4262] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:18:02.436 [DEBUG] [Thread-4262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:18:02.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:18:02.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:18:02.491 [DEBUG] [Thread-4262] [transport.py] [_log()] userauth is OK
2025-11-25T19:18:02.491 [DEBUG] [Thread-4262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:18:02.491 [DEBUG] [Thread-4262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:18:02.491 [DEBUG] [Thread-4262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:18:02.491 [DEBUG] [Thread-4262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:18:02.509 [INFO] [Thread-4262] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:18:02.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:18:02.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:18:02.524 [DEBUG] [Thread-4264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:03.357 [DEBUG] [Thread-4262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:18:03.358 [DEBUG] [Thread-4262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:18:03.405 [DEBUG] [Thread-4262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:18:03.406 [DEBUG] [Thread-4262] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:18:03.414 [DEBUG] [Thread-4262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:18:03.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:18:03.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:18:03.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:18:03.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:18:03.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:18:03.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:18:03.448 [DEBUG] [Thread-4262] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:18:05.827 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:06.320 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:07.750 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:08.246 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:08.733 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:09.237 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:09.713 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:10.197 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:10.709 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:11.178 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:11.675 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:12.184 [DEBUG] [Thread-4157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:17.568 [DEBUG] [Thread-4265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:27.525 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:27.527 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:32.608 [DEBUG] [Thread-4266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:33.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:18:33.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:18:33.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:18:34.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 18, 14), 33.39, 10.24, 0.0, 14.06, 25.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:18:34.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:18:14
2025-11-25T19:18:34.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:18:34.396 [DEBUG] [Thread-4267] [transport.py] [_log()] starting thread (client mode): 0x70d556c0
2025-11-25T19:18:34.396 [DEBUG] [Thread-4267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:18:34.416 [DEBUG] [Thread-4267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:18:34.417 [INFO] [Thread-4267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:18:34.420 [DEBUG] [Thread-4267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:18:34.420 [DEBUG] [Thread-4267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:18:34.420 [DEBUG] [Thread-4267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:18:34.420 [DEBUG] [Thread-4267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:18:34.420 [DEBUG] [Thread-4267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:18:34.420 [DEBUG] [Thread-4267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:18:34.420 [DEBUG] [Thread-4267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] client lang: <none>
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] server lang: <none>
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] kex follows: False
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] Compression: none
2025-11-25T19:18:34.421 [DEBUG] [Thread-4267] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:18:34.435 [DEBUG] [Thread-4267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:18:34.436 [DEBUG] [Thread-4267] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:18:34.436 [DEBUG] [Thread-4267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:18:34.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:18:34.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:18:34.439 [DEBUG] [Thread-4267] [transport.py] [_log()] userauth is OK
2025-11-25T19:18:34.439 [DEBUG] [Thread-4267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:18:34.439 [DEBUG] [Thread-4267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:18:34.439 [DEBUG] [Thread-4267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:18:34.439 [DEBUG] [Thread-4267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:18:34.459 [INFO] [Thread-4267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:18:34.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:18:35.048 [DEBUG] [Thread-4267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:18:35.048 [DEBUG] [Thread-4267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:18:35.049 [DEBUG] [Thread-4267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:18:35.089 [DEBUG] [Thread-4267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:18:35.089 [DEBUG] [Thread-4267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:18:35.092 [DEBUG] [Thread-4267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:18:35.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:18:35.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:18:35.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:18:35.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:18:35.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:18:35.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:18:35.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:18:35.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:18:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:18:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.720933 -999.00  +24.90  18.40     15   -3.20 1 1 1 1 1   883    0 23.84 -226.75 ----- 16.9 18.4 278.8 21.7 25.9 -29.3 26.1 -28.4 25.9 -27.5 26.1 -28.3
2025-11-25T19:18:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:18:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:18:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.720933
2025-11-25T19:18:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:18:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:18:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:18:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:18:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:18:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:18:14', tmtdew=33.39, humidity=10.24, cloud=0.0, wind=14.06, temperature=25.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:18:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:18:35.120 [DEBUG] [Thread-4267] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:18:35.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:18:35.215 [DEBUG] [Thread-4270] [transport.py] [_log()] starting thread (client mode): 0x70d57850
2025-11-25T19:18:35.215 [DEBUG] [Thread-4270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:18:35.230 [DEBUG] [Thread-4270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:18:35.230 [INFO] [Thread-4270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:18:35.240 [DEBUG] [Thread-4270] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:18:35.240 [DEBUG] [Thread-4270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:18:35.240 [DEBUG] [Thread-4270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:18:35.240 [DEBUG] [Thread-4270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:18:35.240 [DEBUG] [Thread-4270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:18:35.240 [DEBUG] [Thread-4270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] client lang: <none>
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] server lang: <none>
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] kex follows: False
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] Compression: none
2025-11-25T19:18:35.241 [DEBUG] [Thread-4270] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:18:35.298 [DEBUG] [Thread-4270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:18:35.298 [DEBUG] [Thread-4270] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:18:35.299 [DEBUG] [Thread-4270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:18:35.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:18:35.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:18:35.354 [DEBUG] [Thread-4270] [transport.py] [_log()] userauth is OK
2025-11-25T19:18:35.354 [DEBUG] [Thread-4270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:18:35.354 [DEBUG] [Thread-4270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:18:35.354 [DEBUG] [Thread-4270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:18:35.354 [DEBUG] [Thread-4270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:18:35.374 [INFO] [Thread-4270] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:18:35.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:18:35.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:18:36.188 [DEBUG] [Thread-4270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:18:36.188 [DEBUG] [Thread-4270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:18:36.236 [DEBUG] [Thread-4270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:18:36.236 [DEBUG] [Thread-4270] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:18:36.246 [DEBUG] [Thread-4270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:18:36.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:18:36.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:18:36.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:18:36.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:18:36.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:18:36.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:18:36.281 [DEBUG] [Thread-4270] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:18:47.641 [DEBUG] [Thread-4272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:18:52.202 [DEBUG] [Thread-4273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:19:02.686 [DEBUG] [Thread-4274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:19:06.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:19:06.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:19:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:19:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 18, 46), 33.64, 10.01, 0.0, 15.14, 25.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:19:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:18:46
2025-11-25T19:19:07.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:19:07.222 [DEBUG] [Thread-4275] [transport.py] [_log()] starting thread (client mode): 0x70d55e40
2025-11-25T19:19:07.222 [DEBUG] [Thread-4275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:19:07.241 [DEBUG] [Thread-4275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:19:07.242 [INFO] [Thread-4275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:19:07.244 [DEBUG] [Thread-4275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] client lang: <none>
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] server lang: <none>
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] kex follows: False
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] Compression: none
2025-11-25T19:19:07.245 [DEBUG] [Thread-4275] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:19:07.262 [DEBUG] [Thread-4275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:19:07.263 [DEBUG] [Thread-4275] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:19:07.272 [DEBUG] [Thread-4275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:19:07.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:19:07.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:19:07.274 [DEBUG] [Thread-4275] [transport.py] [_log()] userauth is OK
2025-11-25T19:19:07.274 [DEBUG] [Thread-4275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:19:07.274 [DEBUG] [Thread-4275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:19:07.274 [DEBUG] [Thread-4275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:19:07.274 [DEBUG] [Thread-4275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:19:07.310 [INFO] [Thread-4275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:19:07.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:19:07.920 [DEBUG] [Thread-4275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:19:07.920 [DEBUG] [Thread-4275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:19:07.920 [DEBUG] [Thread-4275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:19:07.961 [DEBUG] [Thread-4275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:19:07.961 [DEBUG] [Thread-4275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:19:07.964 [DEBUG] [Thread-4275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:19:07.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:19:07.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:19:07.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:19:07.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:19:07.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:19:07.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:19:07.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:19:07.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:19:07.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:19:07.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.720933 -999.00  +24.90  18.40     15   -3.20 1 1 1 1 1   883    0 23.84 -226.75 ----- 16.9 18.4 278.8 21.7 25.9 -29.3 26.1 -28.4 25.9 -27.5 26.1 -28.3
2025-11-25T19:19:07.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:19:07.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:19:07.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.720933
2025-11-25T19:19:07.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:19:07.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:19:07.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:19:07.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:19:07.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:19:07.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:18:46', tmtdew=33.64, humidity=10.01, cloud=0.0, wind=15.14, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:18:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:19:07.991 [DEBUG] [Thread-4275] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:19:08.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:19:08.089 [DEBUG] [Thread-4278] [transport.py] [_log()] starting thread (client mode): 0x70d570d0
2025-11-25T19:19:08.089 [DEBUG] [Thread-4278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:19:08.103 [DEBUG] [Thread-4278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:19:08.103 [INFO] [Thread-4278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:19:08.111 [DEBUG] [Thread-4278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:19:08.111 [DEBUG] [Thread-4278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:19:08.111 [DEBUG] [Thread-4278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:19:08.111 [DEBUG] [Thread-4278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:19:08.112 [DEBUG] [Thread-4278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:19:08.112 [DEBUG] [Thread-4278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:19:08.112 [DEBUG] [Thread-4278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:19:08.112 [DEBUG] [Thread-4278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:19:08.112 [DEBUG] [Thread-4278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:19:08.112 [DEBUG] [Thread-4278] [transport.py] [_log()] client lang: <none>
2025-11-25T19:19:08.112 [DEBUG] [Thread-4278] [transport.py] [_log()] server lang: <none>
2025-11-25T19:19:08.112 [DEBUG] [Thread-4278] [transport.py] [_log()] kex follows: False
2025-11-25T19:19:08.113 [DEBUG] [Thread-4278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:19:08.113 [DEBUG] [Thread-4278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:19:08.113 [DEBUG] [Thread-4278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:19:08.113 [DEBUG] [Thread-4278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:19:08.113 [DEBUG] [Thread-4278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:19:08.113 [DEBUG] [Thread-4278] [transport.py] [_log()] Compression: none
2025-11-25T19:19:08.113 [DEBUG] [Thread-4278] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:19:08.169 [DEBUG] [Thread-4278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:19:08.170 [DEBUG] [Thread-4278] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:19:08.171 [DEBUG] [Thread-4278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:19:08.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:19:08.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:19:08.225 [DEBUG] [Thread-4278] [transport.py] [_log()] userauth is OK
2025-11-25T19:19:08.225 [DEBUG] [Thread-4278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:19:08.225 [DEBUG] [Thread-4278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:19:08.225 [DEBUG] [Thread-4278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:19:08.226 [DEBUG] [Thread-4278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:19:08.244 [INFO] [Thread-4278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:19:08.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:19:08.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:19:09.055 [DEBUG] [Thread-4278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:19:09.055 [DEBUG] [Thread-4278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:19:09.103 [DEBUG] [Thread-4278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:19:09.103 [DEBUG] [Thread-4278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:19:09.112 [DEBUG] [Thread-4278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:19:09.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:19:09.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:19:09.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:19:09.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:19:09.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:19:09.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:19:09.149 [DEBUG] [Thread-4278] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:19:17.722 [DEBUG] [Thread-4280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:19:27.669 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:19:27.671 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:19:32.770 [DEBUG] [Thread-4281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:19:39.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:19:39.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:19:39.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:19:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 19, 19), 33.66, 10.0, 0.0, 16.2, 25.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:19:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:19:19
2025-11-25T19:19:39.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:19:40.085 [DEBUG] [Thread-4282] [transport.py] [_log()] starting thread (client mode): 0x70d1c4f0
2025-11-25T19:19:40.085 [DEBUG] [Thread-4282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:19:40.105 [DEBUG] [Thread-4282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:19:40.105 [INFO] [Thread-4282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:19:40.108 [DEBUG] [Thread-4282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:19:40.108 [DEBUG] [Thread-4282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] client lang: <none>
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] server lang: <none>
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] kex follows: False
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] Compression: none
2025-11-25T19:19:40.109 [DEBUG] [Thread-4282] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:19:40.126 [DEBUG] [Thread-4282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:19:40.127 [DEBUG] [Thread-4282] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:19:40.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:19:40.128 [DEBUG] [Thread-4282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:19:40.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:19:40.130 [DEBUG] [Thread-4282] [transport.py] [_log()] userauth is OK
2025-11-25T19:19:40.130 [DEBUG] [Thread-4282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:19:40.130 [DEBUG] [Thread-4282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:19:40.130 [DEBUG] [Thread-4282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:19:40.130 [DEBUG] [Thread-4282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:19:40.155 [INFO] [Thread-4282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:19:40.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:19:40.747 [DEBUG] [Thread-4282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:19:40.747 [DEBUG] [Thread-4282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:19:40.747 [DEBUG] [Thread-4282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:19:40.788 [DEBUG] [Thread-4282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:19:40.788 [DEBUG] [Thread-4282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:19:40.791 [DEBUG] [Thread-4282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:19:40.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:19:40.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:19:40.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:19:40.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:19:40.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:19:40.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:19:40.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:19:40.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:19:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:19:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.721280 -999.00  +24.90  11.51     15   -3.20 1 1 1 1 1   883    0 22.99 -226.16 ----- 11.4 11.5 277.6 19.3 25.9 -29.1 26.1 -28.3 25.9 -27.0 26.1 -28.5
2025-11-25T19:19:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:19:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:19:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.721280
2025-11-25T19:19:40.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:19:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:19:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:19:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:19:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:19:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:19:19', tmtdew=33.66, humidity=10.0, cloud=0.0, wind=16.2, temperature=25.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:18:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:19:40.817 [DEBUG] [Thread-4282] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:19:40.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:19:40.916 [DEBUG] [Thread-4285] [transport.py] [_log()] starting thread (client mode): 0x70d1df30
2025-11-25T19:19:40.916 [DEBUG] [Thread-4285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:19:40.931 [DEBUG] [Thread-4285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:19:40.931 [INFO] [Thread-4285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:19:40.939 [DEBUG] [Thread-4285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:19:40.939 [DEBUG] [Thread-4285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:19:40.939 [DEBUG] [Thread-4285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:19:40.939 [DEBUG] [Thread-4285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:19:40.939 [DEBUG] [Thread-4285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:19:40.939 [DEBUG] [Thread-4285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:19:40.939 [DEBUG] [Thread-4285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] client lang: <none>
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] server lang: <none>
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] kex follows: False
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] Compression: none
2025-11-25T19:19:40.940 [DEBUG] [Thread-4285] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:19:40.998 [DEBUG] [Thread-4285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:19:40.998 [DEBUG] [Thread-4285] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:19:40.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:19:40.999 [DEBUG] [Thread-4285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:19:41.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:19:41.053 [DEBUG] [Thread-4285] [transport.py] [_log()] userauth is OK
2025-11-25T19:19:41.054 [DEBUG] [Thread-4285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:19:41.054 [DEBUG] [Thread-4285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:19:41.054 [DEBUG] [Thread-4285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:19:41.054 [DEBUG] [Thread-4285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:19:41.073 [INFO] [Thread-4285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:19:41.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:19:41.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:19:41.922 [DEBUG] [Thread-4285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:19:41.923 [DEBUG] [Thread-4285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:19:41.972 [DEBUG] [Thread-4285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:19:41.972 [DEBUG] [Thread-4285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:19:41.981 [DEBUG] [Thread-4285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:19:41.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:19:41.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:19:42.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:19:42.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:19:42.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:19:42.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:19:42.026 [DEBUG] [Thread-4285] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:19:47.808 [DEBUG] [Thread-4287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:19:52.254 [DEBUG] [Thread-4288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:20:02.855 [DEBUG] [Thread-4289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:20:12.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:20:12.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:20:12.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:20:12.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 19, 51), 33.62, 9.98, 0.0, 17.86, 24.96, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:20:12.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:19:51
2025-11-25T19:20:12.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:20:12.994 [DEBUG] [Thread-4290] [transport.py] [_log()] starting thread (client mode): 0x70d54670
2025-11-25T19:20:12.994 [DEBUG] [Thread-4290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:20:13.015 [DEBUG] [Thread-4290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:20:13.015 [INFO] [Thread-4290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:20:13.018 [DEBUG] [Thread-4290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:20:13.018 [DEBUG] [Thread-4290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:20:13.018 [DEBUG] [Thread-4290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:20:13.018 [DEBUG] [Thread-4290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:20:13.018 [DEBUG] [Thread-4290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] client lang: <none>
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] server lang: <none>
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] kex follows: False
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:20:13.019 [DEBUG] [Thread-4290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:20:13.020 [DEBUG] [Thread-4290] [transport.py] [_log()] Compression: none
2025-11-25T19:20:13.020 [DEBUG] [Thread-4290] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:20:13.041 [DEBUG] [Thread-4290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:20:13.041 [DEBUG] [Thread-4290] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:20:13.042 [DEBUG] [Thread-4290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:20:13.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:20:13.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:20:13.043 [DEBUG] [Thread-4290] [transport.py] [_log()] userauth is OK
2025-11-25T19:20:13.044 [DEBUG] [Thread-4290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:20:13.044 [DEBUG] [Thread-4290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:20:13.044 [DEBUG] [Thread-4290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:20:13.044 [DEBUG] [Thread-4290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:20:13.067 [INFO] [Thread-4290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:20:13.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:20:14.424 [DEBUG] [Thread-4290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:20:14.425 [DEBUG] [Thread-4290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:20:14.425 [DEBUG] [Thread-4290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:20:14.465 [DEBUG] [Thread-4290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:20:14.465 [DEBUG] [Thread-4290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:20:14.468 [DEBUG] [Thread-4290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:20:14.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:20:14.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:20:14.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:20:14.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:20:14.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:20:14.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:20:14.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.722322 -999.00  +24.90  12.28     15   -3.10 1 1 1 1 1   881    0 22.34 -243.64 ----- 14.1 12.3 278.3 18.0 25.9 -29.0 26.0 -28.3 25.8 -28.0 25.9 -28.3
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.722322
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:20:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:20:14.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:19:51', tmtdew=33.62, humidity=9.98, cloud=0.0, wind=17.86, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:20:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:20:14.491 [DEBUG] [Thread-4290] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:20:14.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:20:14.576 [DEBUG] [Thread-4293] [transport.py] [_log()] starting thread (client mode): 0x70d56290
2025-11-25T19:20:14.576 [DEBUG] [Thread-4293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:20:14.591 [DEBUG] [Thread-4293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:20:14.591 [INFO] [Thread-4293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:20:14.598 [DEBUG] [Thread-4293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] client lang: <none>
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] server lang: <none>
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] kex follows: False
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:20:14.599 [DEBUG] [Thread-4293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:20:14.600 [DEBUG] [Thread-4293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:20:14.600 [DEBUG] [Thread-4293] [transport.py] [_log()] Compression: none
2025-11-25T19:20:14.600 [DEBUG] [Thread-4293] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:20:14.657 [DEBUG] [Thread-4293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:20:14.657 [DEBUG] [Thread-4293] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:20:14.658 [DEBUG] [Thread-4293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:20:14.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:20:14.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:20:14.713 [DEBUG] [Thread-4293] [transport.py] [_log()] userauth is OK
2025-11-25T19:20:14.713 [DEBUG] [Thread-4293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:20:14.713 [DEBUG] [Thread-4293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:20:14.713 [DEBUG] [Thread-4293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:20:14.713 [DEBUG] [Thread-4293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:20:14.738 [INFO] [Thread-4293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:20:14.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:20:14.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:20:15.571 [DEBUG] [Thread-4293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:20:15.571 [DEBUG] [Thread-4293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:20:15.619 [DEBUG] [Thread-4293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:20:15.620 [DEBUG] [Thread-4293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:20:15.629 [DEBUG] [Thread-4293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:20:15.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:20:15.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:20:15.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:20:15.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:20:15.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:20:15.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:20:15.664 [DEBUG] [Thread-4293] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:20:17.891 [DEBUG] [Thread-4295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:20:27.813 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:20:27.814 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:20:32.953 [DEBUG] [Thread-4296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:20:45.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:20:45.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:20:45.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:20:46.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 20, 23), 33.54, 10.05, 0.0, 20.4, 24.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:20:46.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:20:23
2025-11-25T19:20:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:20:46.592 [DEBUG] [Thread-4297] [transport.py] [_log()] starting thread (client mode): 0x7376ca30
2025-11-25T19:20:46.592 [DEBUG] [Thread-4297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:20:46.612 [DEBUG] [Thread-4297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:20:46.612 [INFO] [Thread-4297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:20:46.615 [DEBUG] [Thread-4297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] client lang: <none>
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] server lang: <none>
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] kex follows: False
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:20:46.616 [DEBUG] [Thread-4297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:20:46.617 [DEBUG] [Thread-4297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:20:46.617 [DEBUG] [Thread-4297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:20:46.617 [DEBUG] [Thread-4297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:20:46.617 [DEBUG] [Thread-4297] [transport.py] [_log()] Compression: none
2025-11-25T19:20:46.617 [DEBUG] [Thread-4297] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:20:46.634 [DEBUG] [Thread-4297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:20:46.635 [DEBUG] [Thread-4297] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:20:46.635 [DEBUG] [Thread-4297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:20:46.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:20:46.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:20:46.637 [DEBUG] [Thread-4297] [transport.py] [_log()] userauth is OK
2025-11-25T19:20:46.637 [DEBUG] [Thread-4297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:20:46.637 [DEBUG] [Thread-4297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:20:46.638 [DEBUG] [Thread-4297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:20:46.638 [DEBUG] [Thread-4297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:20:46.661 [INFO] [Thread-4297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:20:46.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:20:47.296 [DEBUG] [Thread-4297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:20:47.296 [DEBUG] [Thread-4297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:20:47.297 [DEBUG] [Thread-4297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:20:47.337 [DEBUG] [Thread-4297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:20:47.338 [DEBUG] [Thread-4297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:20:47.340 [DEBUG] [Thread-4297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:20:47.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:20:47.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:20:47.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:20:47.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:20:47.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:20:47.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:20:47.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:20:47.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:20:47.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:20:47.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.722322 -999.00  +24.90  12.28     15   -3.10 1 1 1 1 1   881    0 22.34 -243.64 ----- 14.1 12.3 278.3 18.0 25.9 -29.0 26.0 -28.3 25.8 -28.0 25.9 -28.3
2025-11-25T19:20:47.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:20:47.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:20:47.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.722322
2025-11-25T19:20:47.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:20:47.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:20:47.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:20:47.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:20:47.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:20:47.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:20:23', tmtdew=33.54, humidity=10.05, cloud=0.0, wind=20.4, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:20:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:20:47.367 [DEBUG] [Thread-4297] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:20:47.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:20:47.462 [DEBUG] [Thread-4300] [transport.py] [_log()] starting thread (client mode): 0x70d1c130
2025-11-25T19:20:47.462 [DEBUG] [Thread-4300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:20:47.476 [DEBUG] [Thread-4300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:20:47.476 [INFO] [Thread-4300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] client lang: <none>
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] server lang: <none>
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] kex follows: False
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:20:47.484 [DEBUG] [Thread-4300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:20:47.485 [DEBUG] [Thread-4300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:20:47.485 [DEBUG] [Thread-4300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:20:47.485 [DEBUG] [Thread-4300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:20:47.485 [DEBUG] [Thread-4300] [transport.py] [_log()] Compression: none
2025-11-25T19:20:47.485 [DEBUG] [Thread-4300] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:20:47.543 [DEBUG] [Thread-4300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:20:47.543 [DEBUG] [Thread-4300] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:20:47.543 [DEBUG] [Thread-4300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:20:47.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:20:47.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:20:47.603 [DEBUG] [Thread-4300] [transport.py] [_log()] userauth is OK
2025-11-25T19:20:47.604 [DEBUG] [Thread-4300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:20:47.604 [DEBUG] [Thread-4300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:20:47.604 [DEBUG] [Thread-4300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:20:47.604 [DEBUG] [Thread-4300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:20:47.618 [INFO] [Thread-4300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:20:47.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:20:47.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:20:47.989 [DEBUG] [Thread-4302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:20:48.504 [DEBUG] [Thread-4300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:20:48.505 [DEBUG] [Thread-4300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:20:48.552 [DEBUG] [Thread-4300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:20:48.552 [DEBUG] [Thread-4300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:20:48.561 [DEBUG] [Thread-4300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:20:48.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:20:48.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:20:48.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:20:48.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:20:48.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:20:48.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:20:48.595 [DEBUG] [Thread-4300] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:20:52.335 [DEBUG] [Thread-4303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:21:03.037 [DEBUG] [Thread-4304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:21:18.069 [DEBUG] [Thread-4305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:21:18.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:21:18.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:21:18.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:21:19.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 20, 55), 33.48, 10.05, 0.0, 19.6, 24.86, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:21:19.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:20:55
2025-11-25T19:21:19.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:21:19.543 [DEBUG] [Thread-4306] [transport.py] [_log()] starting thread (client mode): 0x70d57280
2025-11-25T19:21:19.543 [DEBUG] [Thread-4306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:21:19.564 [DEBUG] [Thread-4306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:21:19.564 [INFO] [Thread-4306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:21:19.567 [DEBUG] [Thread-4306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] client lang: <none>
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] server lang: <none>
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] kex follows: False
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:21:19.568 [DEBUG] [Thread-4306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:21:19.569 [DEBUG] [Thread-4306] [transport.py] [_log()] Compression: none
2025-11-25T19:21:19.569 [DEBUG] [Thread-4306] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:21:19.588 [DEBUG] [Thread-4306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:21:19.589 [DEBUG] [Thread-4306] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:21:19.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:21:19.590 [DEBUG] [Thread-4306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:21:19.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:21:19.593 [DEBUG] [Thread-4306] [transport.py] [_log()] userauth is OK
2025-11-25T19:21:19.593 [DEBUG] [Thread-4306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:21:19.593 [DEBUG] [Thread-4306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:21:19.593 [DEBUG] [Thread-4306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:21:19.593 [DEBUG] [Thread-4306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:21:19.629 [INFO] [Thread-4306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:21:19.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:21:20.274 [DEBUG] [Thread-4306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:21:20.274 [DEBUG] [Thread-4306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:21:20.274 [DEBUG] [Thread-4306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:21:20.315 [DEBUG] [Thread-4306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:21:20.315 [DEBUG] [Thread-4306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:21:20.318 [DEBUG] [Thread-4306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:21:20.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:21:20.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:21:20.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:21:20.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:21:20.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:21:20.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:21:20.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:21:20.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:21:20.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:21:20.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.722670 -999.00  +24.90  11.71     15   -3.10 1 1 1 1 1   881    0 22.23 -235.84 ----- 13.8 11.7 271.2 16.5 25.8 -28.9 26.0 -28.2 25.8 -27.6 25.9 -28.2
2025-11-25T19:21:20.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:21:20.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:21:20.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.722670
2025-11-25T19:21:20.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:21:20.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:21:20.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:21:20.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:21:20.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:21:20.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:20:55', tmtdew=33.48, humidity=10.05, cloud=0.0, wind=19.6, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:20:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:21:20.343 [DEBUG] [Thread-4306] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:21:20.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:21:20.435 [DEBUG] [Thread-4309] [transport.py] [_log()] starting thread (client mode): 0x7374dc90
2025-11-25T19:21:20.435 [DEBUG] [Thread-4309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:21:20.450 [DEBUG] [Thread-4309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:21:20.450 [INFO] [Thread-4309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:21:20.458 [DEBUG] [Thread-4309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:21:20.458 [DEBUG] [Thread-4309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:21:20.458 [DEBUG] [Thread-4309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:21:20.458 [DEBUG] [Thread-4309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:21:20.458 [DEBUG] [Thread-4309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:21:20.458 [DEBUG] [Thread-4309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] client lang: <none>
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] server lang: <none>
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] kex follows: False
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:21:20.459 [DEBUG] [Thread-4309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:21:20.460 [DEBUG] [Thread-4309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:21:20.460 [DEBUG] [Thread-4309] [transport.py] [_log()] Compression: none
2025-11-25T19:21:20.460 [DEBUG] [Thread-4309] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:21:20.516 [DEBUG] [Thread-4309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:21:20.517 [DEBUG] [Thread-4309] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:21:20.517 [DEBUG] [Thread-4309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:21:20.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:21:20.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:21:20.571 [DEBUG] [Thread-4309] [transport.py] [_log()] userauth is OK
2025-11-25T19:21:20.571 [DEBUG] [Thread-4309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:21:20.572 [DEBUG] [Thread-4309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:21:20.572 [DEBUG] [Thread-4309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:21:20.572 [DEBUG] [Thread-4309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:21:20.591 [INFO] [Thread-4309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:21:20.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:21:20.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:21:21.439 [DEBUG] [Thread-4309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:21:21.439 [DEBUG] [Thread-4309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:21:21.486 [DEBUG] [Thread-4309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:21:21.487 [DEBUG] [Thread-4309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:21:21.495 [DEBUG] [Thread-4309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:21:21.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:21:21.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:21:21.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:21:21.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:21:21.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:21:21.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:21:21.531 [DEBUG] [Thread-4309] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:21:33.102 [DEBUG] [Thread-4311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:21:35.833 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:21:35.834 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:21:48.161 [DEBUG] [Thread-4312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:21:51.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:21:51.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:21:51.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:21:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 21, 27), 33.46, 10.06, 0.0, 18.33, 24.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:21:52.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:21:27
2025-11-25T19:21:52.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:21:52.406 [DEBUG] [Thread-4313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:21:52.520 [DEBUG] [Thread-4314] [transport.py] [_log()] starting thread (client mode): 0x7374ef50
2025-11-25T19:21:52.520 [DEBUG] [Thread-4314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:21:52.543 [DEBUG] [Thread-4314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:21:52.543 [INFO] [Thread-4314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] client lang: <none>
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] server lang: <none>
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] kex follows: False
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:21:52.546 [DEBUG] [Thread-4314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:21:52.547 [DEBUG] [Thread-4314] [transport.py] [_log()] Compression: none
2025-11-25T19:21:52.547 [DEBUG] [Thread-4314] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:21:52.563 [DEBUG] [Thread-4314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:21:52.563 [DEBUG] [Thread-4314] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:21:52.563 [DEBUG] [Thread-4314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:21:52.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:21:52.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:21:52.564 [DEBUG] [Thread-4314] [transport.py] [_log()] userauth is OK
2025-11-25T19:21:52.564 [DEBUG] [Thread-4314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:21:52.564 [DEBUG] [Thread-4314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:21:52.564 [DEBUG] [Thread-4314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:21:52.564 [DEBUG] [Thread-4314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:21:52.573 [INFO] [Thread-4314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:21:52.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:21:53.216 [DEBUG] [Thread-4314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:21:53.216 [DEBUG] [Thread-4314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:21:53.216 [DEBUG] [Thread-4314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:21:53.257 [DEBUG] [Thread-4314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:21:53.257 [DEBUG] [Thread-4314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:21:53.260 [DEBUG] [Thread-4314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:21:53.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:21:53.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:21:53.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:21:53.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:21:53.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:21:53.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:21:53.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.723016 -999.00  +24.90   7.99     15   -3.10 1 1 1 1 1   880    0 23.04 -234.74 ----- 10.1 8.0 269.4 15.5 25.8 -29.0 25.9 -28.2 25.8 -27.4 25.8 -28.1
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.723016
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:21:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:21:27', tmtdew=33.46, humidity=10.06, cloud=0.0, wind=18.33, temperature=24.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:21:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:21:53.279 [DEBUG] [Thread-4314] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:21:53.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:21:53.366 [DEBUG] [Thread-4317] [transport.py] [_log()] starting thread (client mode): 0x7374db70
2025-11-25T19:21:53.366 [DEBUG] [Thread-4317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:21:53.381 [DEBUG] [Thread-4317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:21:53.381 [INFO] [Thread-4317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:21:53.388 [DEBUG] [Thread-4317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:21:53.388 [DEBUG] [Thread-4317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:21:53.388 [DEBUG] [Thread-4317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:21:53.388 [DEBUG] [Thread-4317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:21:53.388 [DEBUG] [Thread-4317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:21:53.388 [DEBUG] [Thread-4317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] client lang: <none>
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] server lang: <none>
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] kex follows: False
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] Compression: none
2025-11-25T19:21:53.389 [DEBUG] [Thread-4317] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:21:53.446 [DEBUG] [Thread-4317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:21:53.446 [DEBUG] [Thread-4317] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:21:53.446 [DEBUG] [Thread-4317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:21:53.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:21:53.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:21:53.503 [DEBUG] [Thread-4317] [transport.py] [_log()] userauth is OK
2025-11-25T19:21:53.503 [DEBUG] [Thread-4317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:21:53.503 [DEBUG] [Thread-4317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:21:53.503 [DEBUG] [Thread-4317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:21:53.503 [DEBUG] [Thread-4317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:21:53.517 [INFO] [Thread-4317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:21:53.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:21:53.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:21:54.353 [DEBUG] [Thread-4317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:21:54.353 [DEBUG] [Thread-4317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:21:54.400 [DEBUG] [Thread-4317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:21:54.401 [DEBUG] [Thread-4317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:21:54.410 [DEBUG] [Thread-4317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:21:54.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:21:54.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:21:54.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:21:54.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:21:54.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:21:54.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:21:54.444 [DEBUG] [Thread-4317] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:22:03.191 [DEBUG] [Thread-4319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:22:18.243 [DEBUG] [Thread-4320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:22:24.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:22:24.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:22:24.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:22:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 21, 59), 33.47, 10.05, 0.0, 15.0, 24.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:22:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:21:59
2025-11-25T19:22:25.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:22:25.403 [DEBUG] [Thread-4321] [transport.py] [_log()] starting thread (client mode): 0x70d54640
2025-11-25T19:22:25.404 [DEBUG] [Thread-4321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:22:25.423 [DEBUG] [Thread-4321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:22:25.423 [INFO] [Thread-4321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] client lang: <none>
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] server lang: <none>
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] kex follows: False
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] Compression: none
2025-11-25T19:22:25.426 [DEBUG] [Thread-4321] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:22:25.444 [DEBUG] [Thread-4321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:22:25.444 [DEBUG] [Thread-4321] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:22:25.444 [DEBUG] [Thread-4321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:22:25.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:22:25.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:22:25.445 [DEBUG] [Thread-4321] [transport.py] [_log()] userauth is OK
2025-11-25T19:22:25.445 [DEBUG] [Thread-4321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:22:25.445 [DEBUG] [Thread-4321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:22:25.445 [DEBUG] [Thread-4321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:22:25.445 [DEBUG] [Thread-4321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:22:25.456 [INFO] [Thread-4321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:22:25.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:22:26.094 [DEBUG] [Thread-4321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:22:26.094 [DEBUG] [Thread-4321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:22:26.094 [DEBUG] [Thread-4321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:22:26.135 [DEBUG] [Thread-4321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:22:26.135 [DEBUG] [Thread-4321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:22:26.137 [DEBUG] [Thread-4321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:22:26.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:22:26.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:22:26.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:22:26.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:22:26.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:22:26.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:22:26.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:22:26.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:22:26.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:22:26.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.723364 -999.00  +24.80  13.57     15   -3.10 1 1 1 1 1   879    0 23.27 -209.27 ----- 17.3 13.6 282.4 17.5 25.7 -29.1 25.9 -28.3 25.7 -28.1 25.8 -28.2
2025-11-25T19:22:26.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:22:26.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:22:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.723364
2025-11-25T19:22:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:22:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:22:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:22:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:22:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:22:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:21:59', tmtdew=33.47, humidity=10.05, cloud=0.0, wind=15.0, temperature=24.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:21:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:22:26.155 [DEBUG] [Thread-4321] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:22:26.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:22:26.242 [DEBUG] [Thread-4324] [transport.py] [_log()] starting thread (client mode): 0x70d1f790
2025-11-25T19:22:26.242 [DEBUG] [Thread-4324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:22:26.257 [DEBUG] [Thread-4324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:22:26.257 [INFO] [Thread-4324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] client lang: <none>
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] server lang: <none>
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] kex follows: False
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] Compression: none
2025-11-25T19:22:26.264 [DEBUG] [Thread-4324] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:22:26.322 [DEBUG] [Thread-4324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:22:26.322 [DEBUG] [Thread-4324] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:22:26.322 [DEBUG] [Thread-4324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:22:26.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:22:26.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:22:26.379 [DEBUG] [Thread-4324] [transport.py] [_log()] userauth is OK
2025-11-25T19:22:26.379 [DEBUG] [Thread-4324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:22:26.379 [DEBUG] [Thread-4324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:22:26.379 [DEBUG] [Thread-4324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:22:26.379 [DEBUG] [Thread-4324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:22:26.393 [INFO] [Thread-4324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:22:26.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:22:26.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:22:27.223 [DEBUG] [Thread-4324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:22:27.223 [DEBUG] [Thread-4324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:22:27.271 [DEBUG] [Thread-4324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:22:27.271 [DEBUG] [Thread-4324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:22:27.279 [DEBUG] [Thread-4324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:22:27.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:22:27.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:22:27.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:22:27.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:22:27.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:22:27.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:22:27.311 [DEBUG] [Thread-4324] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:22:33.273 [DEBUG] [Thread-4326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:22:42.839 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:22:42.840 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:22:48.323 [DEBUG] [Thread-4327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:22:52.484 [DEBUG] [Thread-4328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:22:57.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:22:57.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:22:57.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:22:57.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 22, 31), 33.42, 10.08, 0.0, 14.93, 24.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:22:57.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:22:31
2025-11-25T19:22:58.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:22:58.246 [DEBUG] [Thread-4329] [transport.py] [_log()] starting thread (client mode): 0x70d56650
2025-11-25T19:22:58.246 [DEBUG] [Thread-4329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:22:58.266 [DEBUG] [Thread-4329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:22:58.266 [INFO] [Thread-4329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:22:58.269 [DEBUG] [Thread-4329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:22:58.269 [DEBUG] [Thread-4329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] client lang: <none>
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] server lang: <none>
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] kex follows: False
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] Compression: none
2025-11-25T19:22:58.270 [DEBUG] [Thread-4329] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:22:58.288 [DEBUG] [Thread-4329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:22:58.288 [DEBUG] [Thread-4329] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:22:58.289 [DEBUG] [Thread-4329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:22:58.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:22:58.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:22:58.291 [DEBUG] [Thread-4329] [transport.py] [_log()] userauth is OK
2025-11-25T19:22:58.291 [DEBUG] [Thread-4329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:22:58.291 [DEBUG] [Thread-4329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:22:58.291 [DEBUG] [Thread-4329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:22:58.291 [DEBUG] [Thread-4329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:22:58.315 [INFO] [Thread-4329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:22:58.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:22:58.966 [DEBUG] [Thread-4329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:22:58.967 [DEBUG] [Thread-4329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:22:58.967 [DEBUG] [Thread-4329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:22:59.008 [DEBUG] [Thread-4329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:22:59.008 [DEBUG] [Thread-4329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:22:59.012 [DEBUG] [Thread-4329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:22:59.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:22:59.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:22:59.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:22:59.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:22:59.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:22:59.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:22:59.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:22:59.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:22:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:22:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.723711 -999.00  +24.80  10.32     15   -3.10 1 1 1 1 1   878    0 23.06 -227.78 ----- 8.1 10.3 275.4 20.7 25.7 -29.1 25.9 -28.2 25.6 -27.0 25.8 -28.1
2025-11-25T19:22:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:22:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:22:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.723711
2025-11-25T19:22:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:22:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:22:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:22:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:22:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:22:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:22:31', tmtdew=33.42, humidity=10.08, cloud=0.0, wind=14.93, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:22:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:22:59.040 [DEBUG] [Thread-4329] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:22:59.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:22:59.133 [DEBUG] [Thread-4332] [transport.py] [_log()] starting thread (client mode): 0x7374e920
2025-11-25T19:22:59.133 [DEBUG] [Thread-4332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:22:59.147 [DEBUG] [Thread-4332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:22:59.147 [INFO] [Thread-4332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:22:59.155 [DEBUG] [Thread-4332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:22:59.155 [DEBUG] [Thread-4332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:22:59.155 [DEBUG] [Thread-4332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:22:59.155 [DEBUG] [Thread-4332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:22:59.155 [DEBUG] [Thread-4332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:22:59.155 [DEBUG] [Thread-4332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:22:59.155 [DEBUG] [Thread-4332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:22:59.155 [DEBUG] [Thread-4332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:22:59.155 [DEBUG] [Thread-4332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:22:59.156 [DEBUG] [Thread-4332] [transport.py] [_log()] client lang: <none>
2025-11-25T19:22:59.156 [DEBUG] [Thread-4332] [transport.py] [_log()] server lang: <none>
2025-11-25T19:22:59.156 [DEBUG] [Thread-4332] [transport.py] [_log()] kex follows: False
2025-11-25T19:22:59.156 [DEBUG] [Thread-4332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:22:59.156 [DEBUG] [Thread-4332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:22:59.156 [DEBUG] [Thread-4332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:22:59.156 [DEBUG] [Thread-4332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:22:59.156 [DEBUG] [Thread-4332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:22:59.156 [DEBUG] [Thread-4332] [transport.py] [_log()] Compression: none
2025-11-25T19:22:59.157 [DEBUG] [Thread-4332] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:22:59.213 [DEBUG] [Thread-4332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:22:59.214 [DEBUG] [Thread-4332] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:22:59.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:22:59.215 [DEBUG] [Thread-4332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:22:59.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:22:59.268 [DEBUG] [Thread-4332] [transport.py] [_log()] userauth is OK
2025-11-25T19:22:59.269 [DEBUG] [Thread-4332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:22:59.269 [DEBUG] [Thread-4332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:22:59.269 [DEBUG] [Thread-4332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:22:59.269 [DEBUG] [Thread-4332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:22:59.294 [INFO] [Thread-4332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:22:59.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:22:59.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:23:00.133 [DEBUG] [Thread-4332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:23:00.133 [DEBUG] [Thread-4332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:23:00.180 [DEBUG] [Thread-4332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:23:00.181 [DEBUG] [Thread-4332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:23:00.190 [DEBUG] [Thread-4332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:23:00.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:23:00.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:23:00.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:23:00.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:23:00.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:23:00.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:23:00.226 [DEBUG] [Thread-4332] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:23:03.360 [DEBUG] [Thread-4334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:23:13.777 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:23:18.399 [DEBUG] [Thread-4336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:23:30.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:23:30.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:23:30.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:23:30.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 23, 3), 33.37, 10.11, 0.0, 14.5, 24.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:23:30.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:23:03
2025-11-25T19:23:31.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:23:31.160 [DEBUG] [Thread-4337] [transport.py] [_log()] starting thread (client mode): 0x70d570d0
2025-11-25T19:23:31.160 [DEBUG] [Thread-4337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:23:31.181 [DEBUG] [Thread-4337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:23:31.181 [INFO] [Thread-4337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:23:31.182 [DEBUG] [Thread-4337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:23:31.182 [DEBUG] [Thread-4337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:23:31.182 [DEBUG] [Thread-4337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:23:31.182 [DEBUG] [Thread-4337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:23:31.182 [DEBUG] [Thread-4337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:23:31.182 [DEBUG] [Thread-4337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:23:31.182 [DEBUG] [Thread-4337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:23:31.182 [DEBUG] [Thread-4337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:23:31.182 [DEBUG] [Thread-4337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] client lang: <none>
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] server lang: <none>
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] kex follows: False
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] Compression: none
2025-11-25T19:23:31.183 [DEBUG] [Thread-4337] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:23:31.191 [DEBUG] [Thread-4337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:23:31.191 [DEBUG] [Thread-4337] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:23:31.192 [DEBUG] [Thread-4337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:23:31.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:23:31.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:23:31.193 [DEBUG] [Thread-4337] [transport.py] [_log()] userauth is OK
2025-11-25T19:23:31.194 [DEBUG] [Thread-4337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:23:31.194 [DEBUG] [Thread-4337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:23:31.194 [DEBUG] [Thread-4337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:23:31.194 [DEBUG] [Thread-4337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:23:31.217 [INFO] [Thread-4337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:23:31.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:23:31.860 [DEBUG] [Thread-4337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:23:31.860 [DEBUG] [Thread-4337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:23:31.860 [DEBUG] [Thread-4337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:23:31.901 [DEBUG] [Thread-4337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:23:31.901 [DEBUG] [Thread-4337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:23:31.904 [DEBUG] [Thread-4337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:23:31.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:23:31.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:23:31.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:23:31.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:23:31.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:23:31.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:23:31.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:23:31.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:23:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:23:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.724058 -999.00  +24.80  11.46     15   -3.10 1 1 1 1 1   878    0 22.51 -228.72 ----- 10.2 11.5 273.2 15.0 25.7 -28.8 25.8 -28.1 25.6 -26.8 25.7 -28.1
2025-11-25T19:23:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:23:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:23:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.724058
2025-11-25T19:23:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:23:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:23:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:23:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:23:31.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:23:31.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:23:03', tmtdew=33.37, humidity=10.11, cloud=0.0, wind=14.5, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:22:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:23:31.931 [DEBUG] [Thread-4337] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:23:32.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:23:32.026 [DEBUG] [Thread-4340] [transport.py] [_log()] starting thread (client mode): 0x70d57490
2025-11-25T19:23:32.026 [DEBUG] [Thread-4340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:23:32.041 [DEBUG] [Thread-4340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:23:32.042 [INFO] [Thread-4340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] client lang: <none>
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] server lang: <none>
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] kex follows: False
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:23:32.049 [DEBUG] [Thread-4340] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:23:32.050 [DEBUG] [Thread-4340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:23:32.050 [DEBUG] [Thread-4340] [transport.py] [_log()] Compression: none
2025-11-25T19:23:32.050 [DEBUG] [Thread-4340] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:23:32.111 [DEBUG] [Thread-4340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:23:32.111 [DEBUG] [Thread-4340] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:23:32.112 [DEBUG] [Thread-4340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:23:32.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:23:32.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:23:32.170 [DEBUG] [Thread-4340] [transport.py] [_log()] userauth is OK
2025-11-25T19:23:32.170 [DEBUG] [Thread-4340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:23:32.170 [DEBUG] [Thread-4340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:23:32.170 [DEBUG] [Thread-4340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:23:32.170 [DEBUG] [Thread-4340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:23:32.189 [INFO] [Thread-4340] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:23:32.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:23:32.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:23:33.023 [DEBUG] [Thread-4340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:23:33.024 [DEBUG] [Thread-4340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:23:33.072 [DEBUG] [Thread-4340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:23:33.072 [DEBUG] [Thread-4340] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:23:33.081 [DEBUG] [Thread-4340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:23:33.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:23:33.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:23:33.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:23:33.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:23:33.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:23:33.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:23:33.118 [DEBUG] [Thread-4340] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:23:33.435 [DEBUG] [Thread-4342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:23:48.128 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:23:48.130 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:23:48.484 [DEBUG] [Thread-4343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:23:52.564 [DEBUG] [Thread-4344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:24:03.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:24:03.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:24:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:24:03.519 [DEBUG] [Thread-4345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:24:03.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 23, 35), 33.3, 10.13, 0.0, 14.35, 24.73, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:24:03.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:23:35
2025-11-25T19:24:03.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:24:04.072 [DEBUG] [Thread-4346] [transport.py] [_log()] starting thread (client mode): 0x70d39870
2025-11-25T19:24:04.072 [DEBUG] [Thread-4346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:24:04.092 [DEBUG] [Thread-4346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:24:04.092 [INFO] [Thread-4346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:24:04.095 [DEBUG] [Thread-4346] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:24:04.095 [DEBUG] [Thread-4346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:24:04.095 [DEBUG] [Thread-4346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] client lang: <none>
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] server lang: <none>
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] kex follows: False
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:24:04.096 [DEBUG] [Thread-4346] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:24:04.097 [DEBUG] [Thread-4346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:24:04.097 [DEBUG] [Thread-4346] [transport.py] [_log()] Compression: none
2025-11-25T19:24:04.097 [DEBUG] [Thread-4346] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:24:04.113 [DEBUG] [Thread-4346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:24:04.114 [DEBUG] [Thread-4346] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:24:04.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:24:04.115 [DEBUG] [Thread-4346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:24:04.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:24:04.117 [DEBUG] [Thread-4346] [transport.py] [_log()] userauth is OK
2025-11-25T19:24:04.117 [DEBUG] [Thread-4346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:24:04.117 [DEBUG] [Thread-4346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:24:04.117 [DEBUG] [Thread-4346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:24:04.117 [DEBUG] [Thread-4346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:24:04.135 [INFO] [Thread-4346] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:24:04.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:24:04.822 [DEBUG] [Thread-4346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:24:04.822 [DEBUG] [Thread-4346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:24:04.823 [DEBUG] [Thread-4346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:24:04.863 [DEBUG] [Thread-4346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:24:04.863 [DEBUG] [Thread-4346] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:24:04.866 [DEBUG] [Thread-4346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:24:04.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:24:04.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:24:04.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:24:04.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:24:04.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:24:04.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:24:04.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:24:04.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:24:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:24:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.724405 -999.00  +24.80  10.07     15   -3.20 1 1 1 1 1   877    0 22.56 -216.11 ----- 10.4 10.1 272.8 11.7 25.7 -28.9 25.8 -28.2 25.6 -26.9 25.7 -28.0
2025-11-25T19:24:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:24:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:24:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.724405
2025-11-25T19:24:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:24:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:24:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:24:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:24:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:24:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:23:35', tmtdew=33.3, humidity=10.13, cloud=0.0, wind=14.35, temperature=24.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:23:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:24:04.889 [DEBUG] [Thread-4346] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:24:04.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:24:04.984 [DEBUG] [Thread-4349] [transport.py] [_log()] starting thread (client mode): 0x70d3bb50
2025-11-25T19:24:04.985 [DEBUG] [Thread-4349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:24:04.999 [DEBUG] [Thread-4349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:24:04.999 [INFO] [Thread-4349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:24:05.006 [DEBUG] [Thread-4349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] client lang: <none>
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] server lang: <none>
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] kex follows: False
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] Compression: none
2025-11-25T19:24:05.007 [DEBUG] [Thread-4349] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:24:05.062 [DEBUG] [Thread-4349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:24:05.063 [DEBUG] [Thread-4349] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:24:05.063 [DEBUG] [Thread-4349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:24:05.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:24:05.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:24:05.119 [DEBUG] [Thread-4349] [transport.py] [_log()] userauth is OK
2025-11-25T19:24:05.119 [DEBUG] [Thread-4349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:24:05.119 [DEBUG] [Thread-4349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:24:05.119 [DEBUG] [Thread-4349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:24:05.120 [DEBUG] [Thread-4349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:24:05.138 [INFO] [Thread-4349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:24:05.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:24:05.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:24:05.986 [DEBUG] [Thread-4349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:24:05.986 [DEBUG] [Thread-4349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:24:06.033 [DEBUG] [Thread-4349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:24:06.033 [DEBUG] [Thread-4349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:24:06.042 [DEBUG] [Thread-4349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:24:06.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:24:06.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:24:06.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:24:06.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:24:06.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:24:06.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:24:06.077 [DEBUG] [Thread-4349] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:24:18.550 [DEBUG] [Thread-4351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:24:33.594 [DEBUG] [Thread-4352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:24:36.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:24:36.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:24:36.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:24:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 24, 7), 33.27, 10.15, 0.0, 16.13, 24.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:24:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:24:07
2025-11-25T19:24:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:24:37.002 [DEBUG] [Thread-4353] [transport.py] [_log()] starting thread (client mode): 0x70d38940
2025-11-25T19:24:37.002 [DEBUG] [Thread-4353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:24:37.023 [DEBUG] [Thread-4353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:24:37.023 [INFO] [Thread-4353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:24:37.026 [DEBUG] [Thread-4353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:24:37.026 [DEBUG] [Thread-4353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:24:37.026 [DEBUG] [Thread-4353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:24:37.026 [DEBUG] [Thread-4353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] client lang: <none>
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] server lang: <none>
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] kex follows: False
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:24:37.027 [DEBUG] [Thread-4353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:24:37.028 [DEBUG] [Thread-4353] [transport.py] [_log()] Compression: none
2025-11-25T19:24:37.028 [DEBUG] [Thread-4353] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:24:37.046 [DEBUG] [Thread-4353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:24:37.046 [DEBUG] [Thread-4353] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:24:37.047 [DEBUG] [Thread-4353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:24:37.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:24:37.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:24:37.049 [DEBUG] [Thread-4353] [transport.py] [_log()] userauth is OK
2025-11-25T19:24:37.049 [DEBUG] [Thread-4353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:24:37.049 [DEBUG] [Thread-4353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:24:37.049 [DEBUG] [Thread-4353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:24:37.050 [DEBUG] [Thread-4353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:24:37.074 [INFO] [Thread-4353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:24:37.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:24:37.738 [DEBUG] [Thread-4353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:24:37.738 [DEBUG] [Thread-4353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:24:37.738 [DEBUG] [Thread-4353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:24:37.779 [DEBUG] [Thread-4353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:24:37.779 [DEBUG] [Thread-4353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:24:37.783 [DEBUG] [Thread-4353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:24:37.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:24:37.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:24:37.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:24:37.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:24:37.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:24:37.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:24:37.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:24:37.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:24:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:24:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.724752 -999.00  +24.80   6.16     15   -3.10 1 1 1 1 1   875    0 22.91 -211.20 ----- 6.6 6.2 272.3 15.3 25.6 -28.8 25.8 -28.2 25.5 -26.9 25.7 -28.1
2025-11-25T19:24:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:24:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:24:37.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.724752
2025-11-25T19:24:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:24:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:24:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:24:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:24:37.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:24:37.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:24:07', tmtdew=33.27, humidity=10.15, cloud=0.0, wind=16.13, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:23:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:24:37.811 [DEBUG] [Thread-4353] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:24:37.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:24:37.906 [DEBUG] [Thread-4356] [transport.py] [_log()] starting thread (client mode): 0x70d391b0
2025-11-25T19:24:37.906 [DEBUG] [Thread-4356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:24:37.920 [DEBUG] [Thread-4356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:24:37.920 [INFO] [Thread-4356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:24:37.927 [DEBUG] [Thread-4356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] client lang: <none>
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] server lang: <none>
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] kex follows: False
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] Compression: none
2025-11-25T19:24:37.928 [DEBUG] [Thread-4356] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:24:37.988 [DEBUG] [Thread-4356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:24:37.988 [DEBUG] [Thread-4356] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:24:37.989 [DEBUG] [Thread-4356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:24:37.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:24:37.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:24:38.044 [DEBUG] [Thread-4356] [transport.py] [_log()] userauth is OK
2025-11-25T19:24:38.045 [DEBUG] [Thread-4356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:24:38.045 [DEBUG] [Thread-4356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:24:38.045 [DEBUG] [Thread-4356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:24:38.045 [DEBUG] [Thread-4356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:24:38.069 [INFO] [Thread-4356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:24:38.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:24:38.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:24:38.907 [DEBUG] [Thread-4356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:24:38.908 [DEBUG] [Thread-4356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:24:38.955 [DEBUG] [Thread-4356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:24:38.955 [DEBUG] [Thread-4356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:24:38.964 [DEBUG] [Thread-4356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:24:38.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:24:38.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:24:38.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:24:38.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:24:38.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:24:38.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:24:38.998 [DEBUG] [Thread-4356] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:24:48.631 [DEBUG] [Thread-4358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:24:52.619 [DEBUG] [Thread-4359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:24:53.210 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:24:53.211 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:25:03.681 [DEBUG] [Thread-4360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:25:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:25:09.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:25:09.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:25:09.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 24, 39), 33.13, 10.18, 0.0, 15.49, 24.61, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:25:09.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:24:39
2025-11-25T19:25:09.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:25:09.948 [DEBUG] [Thread-4361] [transport.py] [_log()] starting thread (client mode): 0x70d56a70
2025-11-25T19:25:09.948 [DEBUG] [Thread-4361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:25:09.968 [DEBUG] [Thread-4361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:25:09.968 [INFO] [Thread-4361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] client lang: <none>
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] server lang: <none>
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] kex follows: False
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] Compression: none
2025-11-25T19:25:09.971 [DEBUG] [Thread-4361] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:25:09.987 [DEBUG] [Thread-4361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:25:09.987 [DEBUG] [Thread-4361] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:25:09.988 [DEBUG] [Thread-4361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:25:09.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:25:09.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:25:09.989 [DEBUG] [Thread-4361] [transport.py] [_log()] userauth is OK
2025-11-25T19:25:09.990 [DEBUG] [Thread-4361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:25:09.990 [DEBUG] [Thread-4361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:25:09.990 [DEBUG] [Thread-4361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:25:09.990 [DEBUG] [Thread-4361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:25:10.013 [INFO] [Thread-4361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:25:10.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:25:13.924 [DEBUG] [Thread-4361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:25:13.924 [DEBUG] [Thread-4361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:25:13.925 [DEBUG] [Thread-4361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:25:13.965 [DEBUG] [Thread-4361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:25:13.966 [DEBUG] [Thread-4361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:25:13.969 [DEBUG] [Thread-4361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:25:13.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:25:13.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:25:13.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:25:13.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:25:13.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:25:13.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:25:13.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:25:13.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:25:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:25:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.725794 -999.00  +24.60  12.62     15   -3.10 1 1 1 1 1   872    0 22.94 -202.13 ----- 12.1 12.6 266.2 22.3 25.5 -28.9 25.6 -28.2 25.3 -26.9 25.5 -28.1
2025-11-25T19:25:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:25:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:25:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.725794
2025-11-25T19:25:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:24:39', tmtdew=33.13, humidity=10.18, cloud=0.0, wind=15.49, temperature=24.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:25:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:25:13.999 [DEBUG] [Thread-4361] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:25:14.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:25:14.093 [DEBUG] [Thread-4364] [transport.py] [_log()] starting thread (client mode): 0x70d296c0
2025-11-25T19:25:14.093 [DEBUG] [Thread-4364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:25:14.107 [DEBUG] [Thread-4364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:25:14.108 [INFO] [Thread-4364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:25:14.116 [DEBUG] [Thread-4364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:25:14.116 [DEBUG] [Thread-4364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:25:14.116 [DEBUG] [Thread-4364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:25:14.116 [DEBUG] [Thread-4364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:25:14.116 [DEBUG] [Thread-4364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:25:14.116 [DEBUG] [Thread-4364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:25:14.116 [DEBUG] [Thread-4364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:25:14.116 [DEBUG] [Thread-4364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:25:14.116 [DEBUG] [Thread-4364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] client lang: <none>
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] server lang: <none>
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] kex follows: False
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] Compression: none
2025-11-25T19:25:14.117 [DEBUG] [Thread-4364] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:25:14.172 [DEBUG] [Thread-4364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:25:14.173 [DEBUG] [Thread-4364] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:25:14.173 [DEBUG] [Thread-4364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:25:14.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:25:14.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:25:14.229 [DEBUG] [Thread-4364] [transport.py] [_log()] userauth is OK
2025-11-25T19:25:14.230 [DEBUG] [Thread-4364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:25:14.230 [DEBUG] [Thread-4364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:25:14.230 [DEBUG] [Thread-4364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:25:14.230 [DEBUG] [Thread-4364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:25:14.251 [INFO] [Thread-4364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:25:14.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:25:14.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:25:15.088 [DEBUG] [Thread-4364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:25:15.089 [DEBUG] [Thread-4364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:25:15.137 [DEBUG] [Thread-4364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:25:15.138 [DEBUG] [Thread-4364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:25:15.147 [DEBUG] [Thread-4364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:25:15.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:25: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')
2025-11-25T19:25: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
2025-11-25T19:25:15.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:25:15.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:25:15.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:25:15.181 [DEBUG] [Thread-4364] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:25:18.717 [DEBUG] [Thread-4366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:25:33.780 [DEBUG] [Thread-4367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:25:45.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:25:45.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:25:45.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:25:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 25, 11), 33.08, 10.21, 0.0, 14.5, 24.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:25:45.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:25:11
2025-11-25T19:25:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:25:46.154 [DEBUG] [Thread-4368] [transport.py] [_log()] starting thread (client mode): 0x70d54f10
2025-11-25T19:25:46.154 [DEBUG] [Thread-4368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:25:46.173 [DEBUG] [Thread-4368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:25:46.173 [INFO] [Thread-4368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:25:46.176 [DEBUG] [Thread-4368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:25:46.176 [DEBUG] [Thread-4368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:25:46.176 [DEBUG] [Thread-4368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:25:46.176 [DEBUG] [Thread-4368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] client lang: <none>
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] server lang: <none>
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] kex follows: False
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] Compression: none
2025-11-25T19:25:46.177 [DEBUG] [Thread-4368] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:25:46.194 [DEBUG] [Thread-4368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:25:46.194 [DEBUG] [Thread-4368] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:25:46.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:25:46.195 [DEBUG] [Thread-4368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:25:46.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:25:46.197 [DEBUG] [Thread-4368] [transport.py] [_log()] userauth is OK
2025-11-25T19:25:46.197 [DEBUG] [Thread-4368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:25:46.197 [DEBUG] [Thread-4368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:25:46.197 [DEBUG] [Thread-4368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:25:46.197 [DEBUG] [Thread-4368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:25:46.215 [INFO] [Thread-4368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:25:46.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:25:46.832 [DEBUG] [Thread-4368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:25:46.833 [DEBUG] [Thread-4368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:25:46.833 [DEBUG] [Thread-4368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:25:46.874 [DEBUG] [Thread-4368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:25:46.874 [DEBUG] [Thread-4368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:25:46.876 [DEBUG] [Thread-4368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:25:46.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:25:46.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:25:46.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:25:46.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:25:46.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:25:46.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:25:46.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:25:46.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:25:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:25:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.725794 -999.00  +24.60  12.62     15   -3.10 1 1 1 1 1   872    0 22.94 -202.13 ----- 12.1 12.6 266.2 22.3 25.5 -28.9 25.6 -28.2 25.3 -26.9 25.5 -28.1
2025-11-25T19:25:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:25:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:25:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.725794
2025-11-25T19:25:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:25:46.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:25:46.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:25:46.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:25:46.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:25:46.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:25:11', tmtdew=33.08, humidity=10.21, cloud=0.0, wind=14.5, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:25:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:25:46.905 [DEBUG] [Thread-4368] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:25:46.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:25:47.008 [DEBUG] [Thread-4371] [transport.py] [_log()] starting thread (client mode): 0x70d3ae90
2025-11-25T19:25:47.008 [DEBUG] [Thread-4371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:25:47.024 [DEBUG] [Thread-4371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:25:47.024 [INFO] [Thread-4371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:25:47.032 [DEBUG] [Thread-4371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:25:47.032 [DEBUG] [Thread-4371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:25:47.032 [DEBUG] [Thread-4371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:25:47.032 [DEBUG] [Thread-4371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:25:47.032 [DEBUG] [Thread-4371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:25:47.032 [DEBUG] [Thread-4371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:25:47.032 [DEBUG] [Thread-4371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:25:47.032 [DEBUG] [Thread-4371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:25:47.032 [DEBUG] [Thread-4371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] client lang: <none>
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] server lang: <none>
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] kex follows: False
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] Compression: none
2025-11-25T19:25:47.033 [DEBUG] [Thread-4371] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:25:47.089 [DEBUG] [Thread-4371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:25:47.090 [DEBUG] [Thread-4371] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:25:47.090 [DEBUG] [Thread-4371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:25:47.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:25:47.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:25:47.150 [DEBUG] [Thread-4371] [transport.py] [_log()] userauth is OK
2025-11-25T19:25:47.150 [DEBUG] [Thread-4371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:25:47.150 [DEBUG] [Thread-4371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:25:47.151 [DEBUG] [Thread-4371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:25:47.151 [DEBUG] [Thread-4371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:25:47.170 [INFO] [Thread-4371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:25:47.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:25:47.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:25:48.019 [DEBUG] [Thread-4371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:25:48.019 [DEBUG] [Thread-4371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:25:48.066 [DEBUG] [Thread-4371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:25:48.067 [DEBUG] [Thread-4371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:25:48.075 [DEBUG] [Thread-4371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:25:48.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:25:48.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:25:48.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:25:48.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:25:48.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:25:48.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:25:48.112 [DEBUG] [Thread-4371] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:25:48.811 [DEBUG] [Thread-4373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:25:52.702 [DEBUG] [Thread-4374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:25:58.298 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:25:58.299 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:26:03.867 [DEBUG] [Thread-4375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:26:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:26:18.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:26:18.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:26:18.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 26, 15), 32.96, 10.76, 0.0, 16.71, 24.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:26:18.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:26:15
2025-11-25T19:26:18.900 [DEBUG] [Thread-4376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:26:18.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:26:19.061 [DEBUG] [Thread-4377] [transport.py] [_log()] starting thread (client mode): 0x70d28280
2025-11-25T19:26:19.062 [DEBUG] [Thread-4377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:26:19.081 [DEBUG] [Thread-4377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:26:19.081 [INFO] [Thread-4377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] client lang: <none>
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] server lang: <none>
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] kex follows: False
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:26:19.085 [DEBUG] [Thread-4377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:26:19.086 [DEBUG] [Thread-4377] [transport.py] [_log()] Compression: none
2025-11-25T19:26:19.086 [DEBUG] [Thread-4377] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:26:19.103 [DEBUG] [Thread-4377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:26:19.104 [DEBUG] [Thread-4377] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:26:19.104 [DEBUG] [Thread-4377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:26:19.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:26:19.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:26:19.106 [DEBUG] [Thread-4377] [transport.py] [_log()] userauth is OK
2025-11-25T19:26:19.107 [DEBUG] [Thread-4377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:26:19.107 [DEBUG] [Thread-4377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:26:19.107 [DEBUG] [Thread-4377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:26:19.107 [DEBUG] [Thread-4377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:26:19.131 [INFO] [Thread-4377] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:26:19.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:26:19.899 [DEBUG] [Thread-4377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:26:19.900 [DEBUG] [Thread-4377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:26:19.900 [DEBUG] [Thread-4377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:26:19.940 [DEBUG] [Thread-4377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:26:19.941 [DEBUG] [Thread-4377] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:26:19.943 [DEBUG] [Thread-4377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:26:19.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:26:19.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:26:19.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:26:19.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:26:19.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:26:19.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:26:19.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:26:19.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:26:19.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:26:19.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.726141 -999.00  +24.60   9.36     15   -3.10 1 1 1 1 1   870    0 23.11 -196.47 ----- 11.2 9.4 255.3 19.1 25.5 -28.7 25.6 -28.1 25.2 -27.1 25.4 -28.0
2025-11-25T19:26:19.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:26:19.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:26:19.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.726141
2025-11-25T19:26:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:26:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:26:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:26:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:26:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:26:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:26:15', tmtdew=32.96, humidity=10.76, cloud=0.0, wind=16.71, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:25:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:26:19.976 [DEBUG] [Thread-4377] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:26:20.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:26:20.073 [DEBUG] [Thread-4380] [transport.py] [_log()] starting thread (client mode): 0x70d39690
2025-11-25T19:26:20.073 [DEBUG] [Thread-4380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:26:20.087 [DEBUG] [Thread-4380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:26:20.087 [INFO] [Thread-4380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] client lang: <none>
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] server lang: <none>
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] kex follows: False
2025-11-25T19:26:20.095 [DEBUG] [Thread-4380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:26:20.096 [DEBUG] [Thread-4380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:26:20.096 [DEBUG] [Thread-4380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:26:20.096 [DEBUG] [Thread-4380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:26:20.096 [DEBUG] [Thread-4380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:26:20.096 [DEBUG] [Thread-4380] [transport.py] [_log()] Compression: none
2025-11-25T19:26:20.096 [DEBUG] [Thread-4380] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:26:20.154 [DEBUG] [Thread-4380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:26:20.155 [DEBUG] [Thread-4380] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:26:20.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:26:20.156 [DEBUG] [Thread-4380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:26:20.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:26:20.211 [DEBUG] [Thread-4380] [transport.py] [_log()] userauth is OK
2025-11-25T19:26:20.211 [DEBUG] [Thread-4380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:26:20.212 [DEBUG] [Thread-4380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:26:20.212 [DEBUG] [Thread-4380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:26:20.212 [DEBUG] [Thread-4380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:26:20.230 [INFO] [Thread-4380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:26:20.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:26:20.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:26:21.106 [DEBUG] [Thread-4380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:26:21.106 [DEBUG] [Thread-4380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:26:21.154 [DEBUG] [Thread-4380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:26:21.154 [DEBUG] [Thread-4380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:26:21.163 [DEBUG] [Thread-4380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:26:21.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:26:21.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:26: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') -> 00000000
2025-11-25T19:26:21.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:26:21.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:26:21.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:26:21.202 [DEBUG] [Thread-4380] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:26:33.931 [DEBUG] [Thread-4382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:26:48.979 [DEBUG] [Thread-4383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:26:51.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:26:51.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:26:51.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:26:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 26, 47), 32.82, 10.83, 0.0, 15.58, 24.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:26:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:26:47
2025-11-25T19:26:52.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:26:52.150 [DEBUG] [Thread-4384] [transport.py] [_log()] starting thread (client mode): 0x70d39510
2025-11-25T19:26:52.150 [DEBUG] [Thread-4384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:26:52.170 [DEBUG] [Thread-4384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:26:52.170 [INFO] [Thread-4384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:26:52.173 [DEBUG] [Thread-4384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] client lang: <none>
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] server lang: <none>
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] kex follows: False
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] Compression: none
2025-11-25T19:26:52.174 [DEBUG] [Thread-4384] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:26:52.183 [DEBUG] [Thread-4384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:26:52.183 [DEBUG] [Thread-4384] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:26:52.184 [DEBUG] [Thread-4384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:26:52.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:26:52.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:26:52.186 [DEBUG] [Thread-4384] [transport.py] [_log()] userauth is OK
2025-11-25T19:26:52.186 [DEBUG] [Thread-4384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:26:52.186 [DEBUG] [Thread-4384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:26:52.186 [DEBUG] [Thread-4384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:26:52.186 [DEBUG] [Thread-4384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:26:52.210 [INFO] [Thread-4384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:26:52.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:26:52.776 [DEBUG] [Thread-4386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:26:52.880 [DEBUG] [Thread-4384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:26:52.881 [DEBUG] [Thread-4384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:26:52.881 [DEBUG] [Thread-4384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:26:52.922 [DEBUG] [Thread-4384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:26:52.922 [DEBUG] [Thread-4384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:26:52.924 [DEBUG] [Thread-4384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:26:52.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:26:52.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:26:52.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:26:52.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:26:52.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:26:52.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:26:52.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:26:52.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:26:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:26:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.726489 -999.00  +24.50   9.04     15   -3.10 1 1 1 1 1   868    0 23.13 -196.74 ----- 11.0 9.0 273.8 14.8 25.4 -28.7 25.5 -28.2 25.2 -26.7 25.4 -27.9
2025-11-25T19:26:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:26:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:26:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.726489
2025-11-25T19:26:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:26:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:26:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:26:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:26:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:26:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:26:47', tmtdew=32.82, humidity=10.83, cloud=0.0, wind=15.58, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:26:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:26:52.950 [DEBUG] [Thread-4384] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:26:53.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:26:53.045 [DEBUG] [Thread-4388] [transport.py] [_log()] starting thread (client mode): 0x70d3a4a0
2025-11-25T19:26:53.045 [DEBUG] [Thread-4388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:26:53.060 [DEBUG] [Thread-4388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:26:53.060 [INFO] [Thread-4388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:26:53.067 [DEBUG] [Thread-4388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] client lang: <none>
2025-11-25T19:26:53.068 [DEBUG] [Thread-4388] [transport.py] [_log()] server lang: <none>
2025-11-25T19:26:53.069 [DEBUG] [Thread-4388] [transport.py] [_log()] kex follows: False
2025-11-25T19:26:53.069 [DEBUG] [Thread-4388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:26:53.069 [DEBUG] [Thread-4388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:26:53.069 [DEBUG] [Thread-4388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:26:53.069 [DEBUG] [Thread-4388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:26:53.069 [DEBUG] [Thread-4388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:26:53.069 [DEBUG] [Thread-4388] [transport.py] [_log()] Compression: none
2025-11-25T19:26:53.069 [DEBUG] [Thread-4388] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:26:53.129 [DEBUG] [Thread-4388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:26:53.130 [DEBUG] [Thread-4388] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:26:53.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:26:53.131 [DEBUG] [Thread-4388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:26:53.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:26:53.187 [DEBUG] [Thread-4388] [transport.py] [_log()] userauth is OK
2025-11-25T19:26:53.188 [DEBUG] [Thread-4388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:26:53.188 [DEBUG] [Thread-4388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:26:53.188 [DEBUG] [Thread-4388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:26:53.188 [DEBUG] [Thread-4388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:26:53.207 [INFO] [Thread-4388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:26:53.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:26:53.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:26:54.061 [DEBUG] [Thread-4388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:26:54.062 [DEBUG] [Thread-4388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:26:54.110 [DEBUG] [Thread-4388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:26:54.110 [DEBUG] [Thread-4388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:26:54.119 [DEBUG] [Thread-4388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:26:54.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:26:54.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:26:54.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:26:54.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:26:54.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:26:54.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:26:54.155 [DEBUG] [Thread-4388] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:27:02.548 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:27:02.550 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:27:04.014 [DEBUG] [Thread-4390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:27:19.069 [DEBUG] [Thread-4391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:27:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:27:24.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:27:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:27:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 27, 19), 32.83, 10.81, 0.0, 14.58, 24.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:27:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:27:19
2025-11-25T19:27:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:27:25.136 [DEBUG] [Thread-4392] [transport.py] [_log()] starting thread (client mode): 0x70d3be80
2025-11-25T19:27:25.136 [DEBUG] [Thread-4392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:27:25.156 [DEBUG] [Thread-4392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:27:25.156 [INFO] [Thread-4392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] client lang: <none>
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] server lang: <none>
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] kex follows: False
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] Compression: none
2025-11-25T19:27:25.158 [DEBUG] [Thread-4392] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:27:25.169 [DEBUG] [Thread-4392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:27:25.169 [DEBUG] [Thread-4392] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:27:25.169 [DEBUG] [Thread-4392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:27:25.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:27:25.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:27:25.169 [DEBUG] [Thread-4392] [transport.py] [_log()] userauth is OK
2025-11-25T19:27:25.169 [DEBUG] [Thread-4392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:27:25.169 [DEBUG] [Thread-4392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:27:25.170 [DEBUG] [Thread-4392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:27:25.170 [DEBUG] [Thread-4392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:27:25.178 [INFO] [Thread-4392] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:27:25.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:27:25.939 [DEBUG] [Thread-4392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:27:25.939 [DEBUG] [Thread-4392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:27:25.939 [DEBUG] [Thread-4392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:27:25.980 [DEBUG] [Thread-4392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:27:25.980 [DEBUG] [Thread-4392] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:27:25.983 [DEBUG] [Thread-4392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:27:25.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:27:25.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:27:25.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:27:25.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:27:25.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:27:26.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:27:26.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:27:26.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:27:26.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:27:26.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.726836 -999.00  +24.50   5.50     15   -3.10 1 1 1 1 1   866    0 23.49 -185.42 ----- 12.7 5.5 246.4 12.7 25.4 -28.7 25.5 -28.0 25.1 -26.8 25.3 -27.9
2025-11-25T19:27:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:27:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:27:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.726836
2025-11-25T19:27:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:27:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:27:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:27:26.001 [DEBUG] [Thread-4392] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:27:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:27:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:27:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:27:19', tmtdew=32.83, humidity=10.81, cloud=0.0, wind=14.58, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:26:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:27:26.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:27:26.087 [DEBUG] [Thread-4395] [transport.py] [_log()] starting thread (client mode): 0x70d41b70
2025-11-25T19:27:26.088 [DEBUG] [Thread-4395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:27:26.102 [DEBUG] [Thread-4395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:27:26.102 [INFO] [Thread-4395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] client lang: <none>
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] server lang: <none>
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] kex follows: False
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] Compression: none
2025-11-25T19:27:26.110 [DEBUG] [Thread-4395] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:27:26.166 [DEBUG] [Thread-4395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:27:26.166 [DEBUG] [Thread-4395] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:27:26.166 [DEBUG] [Thread-4395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:27:26.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:27:26.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:27:26.224 [DEBUG] [Thread-4395] [transport.py] [_log()] userauth is OK
2025-11-25T19:27:26.224 [DEBUG] [Thread-4395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:27:26.224 [DEBUG] [Thread-4395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:27:26.224 [DEBUG] [Thread-4395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:27:26.224 [DEBUG] [Thread-4395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:27:26.237 [INFO] [Thread-4395] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:27:26.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:27:26.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:27:27.079 [DEBUG] [Thread-4395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:27:27.079 [DEBUG] [Thread-4395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:27:27.126 [DEBUG] [Thread-4395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:27:27.126 [DEBUG] [Thread-4395] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:27:27.134 [DEBUG] [Thread-4395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:27:27.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:27:27.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:27:27.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:27:27.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:27:27.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:27:27.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:27:27.166 [DEBUG] [Thread-4395] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:27:34.103 [DEBUG] [Thread-4397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:27:49.160 [DEBUG] [Thread-4398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:27:52.828 [DEBUG] [Thread-4399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:27:57.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:27:57.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:27:57.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:27:57.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 27, 51), 32.73, 10.84, 0.0, 13.29, 24.26, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:27:57.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:27:51
2025-11-25T19:27:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:27:58.108 [DEBUG] [Thread-4400] [transport.py] [_log()] starting thread (client mode): 0x70d00be0
2025-11-25T19:27:58.108 [DEBUG] [Thread-4400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:27:58.128 [DEBUG] [Thread-4400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:27:58.128 [INFO] [Thread-4400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:27:58.132 [DEBUG] [Thread-4400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:27:58.132 [DEBUG] [Thread-4400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:27:58.132 [DEBUG] [Thread-4400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:27:58.132 [DEBUG] [Thread-4400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:27:58.132 [DEBUG] [Thread-4400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:27:58.132 [DEBUG] [Thread-4400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:27:58.132 [DEBUG] [Thread-4400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:27:58.132 [DEBUG] [Thread-4400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] client lang: <none>
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] server lang: <none>
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] kex follows: False
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:27:58.133 [DEBUG] [Thread-4400] [transport.py] [_log()] Compression: none
2025-11-25T19:27:58.134 [DEBUG] [Thread-4400] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:27:58.152 [DEBUG] [Thread-4400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:27:58.152 [DEBUG] [Thread-4400] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:27:58.153 [DEBUG] [Thread-4400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:27:58.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:27:58.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:27:58.155 [DEBUG] [Thread-4400] [transport.py] [_log()] userauth is OK
2025-11-25T19:27:58.155 [DEBUG] [Thread-4400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:27:58.155 [DEBUG] [Thread-4400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:27:58.155 [DEBUG] [Thread-4400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:27:58.155 [DEBUG] [Thread-4400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:27:58.178 [INFO] [Thread-4400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:27:58.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:27:58.802 [DEBUG] [Thread-4400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:27:58.802 [DEBUG] [Thread-4400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:27:58.803 [DEBUG] [Thread-4400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:27:58.844 [DEBUG] [Thread-4400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:27:58.844 [DEBUG] [Thread-4400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:27:58.847 [DEBUG] [Thread-4400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:27:58.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:27:58.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:27:58.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:27:58.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:27:58.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:27:58.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:27:58.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:27:58.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:27:58.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:27:58.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.727183 -999.00  +24.40  12.43     15   -3.20 1 1 1 1 1   864    0 23.72 -180.41 ----- 7.2 12.4 267.2 17.8 25.3 -28.6 25.4 -28.0 25.1 -26.7 25.2 -27.8
2025-11-25T19:27:58.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:27:58.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:27:58.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.727183
2025-11-25T19:27:58.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:27:58.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:27:58.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:27:58.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:27:58.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:27:58.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:27:51', tmtdew=32.73, humidity=10.84, cloud=0.0, wind=13.29, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:27:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:27:58.874 [DEBUG] [Thread-4400] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:27:58.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:27:58.980 [DEBUG] [Thread-4403] [transport.py] [_log()] starting thread (client mode): 0x70d2b430
2025-11-25T19:27:58.980 [DEBUG] [Thread-4403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:27:58.996 [DEBUG] [Thread-4403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:27:58.996 [INFO] [Thread-4403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:27:59.003 [DEBUG] [Thread-4403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:27:59.004 [DEBUG] [Thread-4403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:27:59.004 [DEBUG] [Thread-4403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:27:59.004 [DEBUG] [Thread-4403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:27:59.004 [DEBUG] [Thread-4403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:27:59.004 [DEBUG] [Thread-4403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:27:59.004 [DEBUG] [Thread-4403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:27:59.004 [DEBUG] [Thread-4403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:27:59.004 [DEBUG] [Thread-4403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:27:59.005 [DEBUG] [Thread-4403] [transport.py] [_log()] client lang: <none>
2025-11-25T19:27:59.005 [DEBUG] [Thread-4403] [transport.py] [_log()] server lang: <none>
2025-11-25T19:27:59.005 [DEBUG] [Thread-4403] [transport.py] [_log()] kex follows: False
2025-11-25T19:27:59.005 [DEBUG] [Thread-4403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:27:59.005 [DEBUG] [Thread-4403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:27:59.005 [DEBUG] [Thread-4403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:27:59.005 [DEBUG] [Thread-4403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:27:59.005 [DEBUG] [Thread-4403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:27:59.005 [DEBUG] [Thread-4403] [transport.py] [_log()] Compression: none
2025-11-25T19:27:59.006 [DEBUG] [Thread-4403] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:27:59.059 [DEBUG] [Thread-4403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:27:59.059 [DEBUG] [Thread-4403] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:27:59.059 [DEBUG] [Thread-4403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:27:59.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:27:59.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:27:59.116 [DEBUG] [Thread-4403] [transport.py] [_log()] userauth is OK
2025-11-25T19:27:59.116 [DEBUG] [Thread-4403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:27:59.116 [DEBUG] [Thread-4403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:27:59.116 [DEBUG] [Thread-4403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:27:59.116 [DEBUG] [Thread-4403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:27:59.134 [INFO] [Thread-4403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:27:59.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:27:59.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:27:59.952 [DEBUG] [Thread-4403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:27:59.952 [DEBUG] [Thread-4403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:28:00.000 [DEBUG] [Thread-4403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:28:00.000 [DEBUG] [Thread-4403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:28:00.008 [DEBUG] [Thread-4403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:28:00.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:28:00.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:28:00.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:28:00.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:28:00.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:28:00.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:28:00.040 [DEBUG] [Thread-4403] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:28:04.189 [DEBUG] [Thread-4405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:28:08.508 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:28:08.509 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:28:19.242 [DEBUG] [Thread-4406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:28:30.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:28:30.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:28:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:28:30.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 28, 23), 32.74, 10.83, 0.0, 14.72, 24.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:28:30.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:28:23
2025-11-25T19:28:30.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:28:30.964 [DEBUG] [Thread-4407] [transport.py] [_log()] starting thread (client mode): 0x70d41510
2025-11-25T19:28:30.964 [DEBUG] [Thread-4407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:28:30.984 [DEBUG] [Thread-4407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:28:30.984 [INFO] [Thread-4407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:28:30.987 [DEBUG] [Thread-4407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:28:30.987 [DEBUG] [Thread-4407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:28:30.987 [DEBUG] [Thread-4407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] client lang: <none>
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] server lang: <none>
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] kex follows: False
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:28:30.988 [DEBUG] [Thread-4407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:28:30.989 [DEBUG] [Thread-4407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:28:30.989 [DEBUG] [Thread-4407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:28:30.989 [DEBUG] [Thread-4407] [transport.py] [_log()] Compression: none
2025-11-25T19:28:30.989 [DEBUG] [Thread-4407] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:28:31.007 [DEBUG] [Thread-4407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:28:31.008 [DEBUG] [Thread-4407] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:28:31.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:28:31.009 [DEBUG] [Thread-4407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:28:31.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:28:31.011 [DEBUG] [Thread-4407] [transport.py] [_log()] userauth is OK
2025-11-25T19:28:31.012 [DEBUG] [Thread-4407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:28:31.012 [DEBUG] [Thread-4407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:28:31.012 [DEBUG] [Thread-4407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:28:31.012 [DEBUG] [Thread-4407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:28:31.042 [INFO] [Thread-4407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:28:31.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:28:31.829 [DEBUG] [Thread-4407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:28:31.830 [DEBUG] [Thread-4407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:28:31.830 [DEBUG] [Thread-4407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:28:31.871 [DEBUG] [Thread-4407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:28:31.871 [DEBUG] [Thread-4407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:28:31.874 [DEBUG] [Thread-4407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:28:31.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:28:31.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:28:31.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:28:31.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:28:31.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:28:31.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:28:31.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:28:31.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:28:31.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:28:31.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.727530 -999.00  +24.40  15.90     15   -3.20 1 1 1 1 1   862    0 23.46 -182.66 ----- 13.1 15.9 265.0 16.9 25.3 -28.6 25.4 -27.8 25.0 -26.7 25.2 -27.7
2025-11-25T19:28:31.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:28:31.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:28:31.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.727530
2025-11-25T19:28:31.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:28:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:28:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:28:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:28:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:28:31.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:28:23', tmtdew=32.74, humidity=10.83, cloud=0.0, wind=14.72, temperature=24.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:27:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:28:31.896 [DEBUG] [Thread-4407] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:28:31.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:28:31.992 [DEBUG] [Thread-4410] [transport.py] [_log()] starting thread (client mode): 0x70d42d10
2025-11-25T19:28:31.992 [DEBUG] [Thread-4410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:28:32.007 [DEBUG] [Thread-4410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:28:32.007 [INFO] [Thread-4410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] client lang: <none>
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] server lang: <none>
2025-11-25T19:28:32.014 [DEBUG] [Thread-4410] [transport.py] [_log()] kex follows: False
2025-11-25T19:28:32.015 [DEBUG] [Thread-4410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:28:32.015 [DEBUG] [Thread-4410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:28:32.015 [DEBUG] [Thread-4410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:28:32.015 [DEBUG] [Thread-4410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:28:32.015 [DEBUG] [Thread-4410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:28:32.015 [DEBUG] [Thread-4410] [transport.py] [_log()] Compression: none
2025-11-25T19:28:32.015 [DEBUG] [Thread-4410] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:28:32.073 [DEBUG] [Thread-4410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:28:32.073 [DEBUG] [Thread-4410] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:28:32.074 [DEBUG] [Thread-4410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:28:32.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:28:32.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:28:32.129 [DEBUG] [Thread-4410] [transport.py] [_log()] userauth is OK
2025-11-25T19:28:32.130 [DEBUG] [Thread-4410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:28:32.130 [DEBUG] [Thread-4410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:28:32.130 [DEBUG] [Thread-4410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:28:32.130 [DEBUG] [Thread-4410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:28:32.149 [INFO] [Thread-4410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:28:32.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:28:32.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:28:32.997 [DEBUG] [Thread-4410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:28:32.997 [DEBUG] [Thread-4410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:28:33.045 [DEBUG] [Thread-4410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:28:33.045 [DEBUG] [Thread-4410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:28:33.054 [DEBUG] [Thread-4410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:28:33.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:28:33.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:28:33.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:28:33.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:28:33.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:28:33.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:28:33.089 [DEBUG] [Thread-4410] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:28:34.279 [DEBUG] [Thread-4412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:28:46.126 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:28:49.323 [DEBUG] [Thread-4413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:28:52.889 [DEBUG] [Thread-4414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:28:54.926 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:29:03.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:29:03.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:29:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:29:03.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 28, 55), 32.81, 10.81, 0.0, 14.1, 24.23, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:29:03.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:28:55
2025-11-25T19:29:03.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:29:04.001 [DEBUG] [Thread-4415] [transport.py] [_log()] starting thread (client mode): 0x70d03520
2025-11-25T19:29:04.001 [DEBUG] [Thread-4415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:29:04.022 [DEBUG] [Thread-4415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:29:04.022 [INFO] [Thread-4415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:29:04.025 [DEBUG] [Thread-4415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:29:04.025 [DEBUG] [Thread-4415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:29:04.025 [DEBUG] [Thread-4415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] client lang: <none>
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] server lang: <none>
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] kex follows: False
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] Compression: none
2025-11-25T19:29:04.026 [DEBUG] [Thread-4415] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:29:04.043 [DEBUG] [Thread-4415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:29:04.043 [DEBUG] [Thread-4415] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:29:04.044 [DEBUG] [Thread-4415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:29:04.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:29:04.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:29:04.045 [DEBUG] [Thread-4415] [transport.py] [_log()] userauth is OK
2025-11-25T19:29:04.046 [DEBUG] [Thread-4415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:29:04.046 [DEBUG] [Thread-4415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:29:04.046 [DEBUG] [Thread-4415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:29:04.046 [DEBUG] [Thread-4415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:29:04.083 [INFO] [Thread-4415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:29:04.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:29:04.363 [DEBUG] [Thread-4417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:29:04.759 [DEBUG] [Thread-4415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:29:04.760 [DEBUG] [Thread-4415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:29:04.760 [DEBUG] [Thread-4415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:29:04.800 [DEBUG] [Thread-4415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:29:04.801 [DEBUG] [Thread-4415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:29:04.804 [DEBUG] [Thread-4415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:29:04.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:29:04.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:29:04.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:29:04.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:29:04.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:29:04.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:29:04.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:29:04.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:29:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:29:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.727877 -999.00  +24.40  12.53     15   -3.20 1 1 1 1 1   860    0 23.69 -176.25 ----- 9.1 12.5 255.2 16.5 25.2 -28.6 25.3 -27.9 24.9 -26.5 25.1 -27.6
2025-11-25T19:29:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:29:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:29:04.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.727877
2025-11-25T19:29:04.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:29:04.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:29:04.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:29:04.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:29:04.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:29:04.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:28:55', tmtdew=32.81, humidity=10.81, cloud=0.0, wind=14.1, temperature=24.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:28:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:29:04.829 [DEBUG] [Thread-4415] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:29:04.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:29:04.924 [DEBUG] [Thread-4419] [transport.py] [_log()] starting thread (client mode): 0x70d03280
2025-11-25T19:29:04.924 [DEBUG] [Thread-4419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:29:04.939 [DEBUG] [Thread-4419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:29:04.939 [INFO] [Thread-4419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] client lang: <none>
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] server lang: <none>
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] kex follows: False
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:29:04.947 [DEBUG] [Thread-4419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:29:04.948 [DEBUG] [Thread-4419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:29:04.948 [DEBUG] [Thread-4419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:29:04.948 [DEBUG] [Thread-4419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:29:04.948 [DEBUG] [Thread-4419] [transport.py] [_log()] Compression: none
2025-11-25T19:29:04.948 [DEBUG] [Thread-4419] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:29:05.006 [DEBUG] [Thread-4419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:29:05.007 [DEBUG] [Thread-4419] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:29:05.007 [DEBUG] [Thread-4419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:29:05.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:29:05.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:29:05.062 [DEBUG] [Thread-4419] [transport.py] [_log()] userauth is OK
2025-11-25T19:29:05.062 [DEBUG] [Thread-4419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:29:05.062 [DEBUG] [Thread-4419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:29:05.063 [DEBUG] [Thread-4419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:29:05.063 [DEBUG] [Thread-4419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:29:05.083 [INFO] [Thread-4419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:29:05.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:29:05.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:29:05.948 [DEBUG] [Thread-4419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:29:05.949 [DEBUG] [Thread-4419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:29:05.996 [DEBUG] [Thread-4419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:29:05.996 [DEBUG] [Thread-4419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:29:06.005 [DEBUG] [Thread-4419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:29:06.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:29:06.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:29:06.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:29:06.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:29:06.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:29:06.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:29:06.042 [DEBUG] [Thread-4419] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:29:12.579 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:29:12.580 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:29:19.397 [DEBUG] [Thread-4421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:29:34.461 [DEBUG] [Thread-4422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:29:36.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:29:36.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:29:36.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:29:36.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 29, 27), 32.76, 10.86, 0.0, 12.51, 24.28, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:29:36.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:29:27
2025-11-25T19:29:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:29:36.952 [DEBUG] [Thread-4423] [transport.py] [_log()] starting thread (client mode): 0x70d412d0
2025-11-25T19:29:36.953 [DEBUG] [Thread-4423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:29:36.973 [DEBUG] [Thread-4423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:29:36.973 [INFO] [Thread-4423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] client lang: <none>
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] server lang: <none>
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] kex follows: False
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] Compression: none
2025-11-25T19:29:36.976 [DEBUG] [Thread-4423] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:29:36.990 [DEBUG] [Thread-4423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:29:36.990 [DEBUG] [Thread-4423] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:29:36.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:29:36.991 [DEBUG] [Thread-4423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:29:36.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:29:36.993 [DEBUG] [Thread-4423] [transport.py] [_log()] userauth is OK
2025-11-25T19:29:36.993 [DEBUG] [Thread-4423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:29:36.993 [DEBUG] [Thread-4423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:29:36.993 [DEBUG] [Thread-4423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:29:36.993 [DEBUG] [Thread-4423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:29:37.011 [INFO] [Thread-4423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:29:37.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:29:37.846 [DEBUG] [Thread-4423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:29:37.846 [DEBUG] [Thread-4423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:29:37.846 [DEBUG] [Thread-4423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:29:37.887 [DEBUG] [Thread-4423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:29:37.887 [DEBUG] [Thread-4423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:29:37.890 [DEBUG] [Thread-4423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:29:37.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:29:37.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:29:37.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:29:37.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:29:37.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:29:37.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:29:37.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:29:37.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:29:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:29:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.728225 -999.00  +24.30   8.80     15   -3.20 1 1 1 1 1   857    0 23.30 -169.82 ----- 11.3 8.8 243.2 11.8 25.2 -28.4 25.3 -27.9 24.9 -26.5 25.1 -27.7
2025-11-25T19:29:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:29:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:29:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.728225
2025-11-25T19:29:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:29:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:29:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:29:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:29:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:29:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:29:27', tmtdew=32.76, humidity=10.86, cloud=0.0, wind=12.51, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:28:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:29:37.916 [DEBUG] [Thread-4423] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:29:37.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:29:38.010 [DEBUG] [Thread-4426] [transport.py] [_log()] starting thread (client mode): 0x70d2a050
2025-11-25T19:29:38.011 [DEBUG] [Thread-4426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:29:38.030 [DEBUG] [Thread-4426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:29:38.030 [INFO] [Thread-4426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:29:38.037 [DEBUG] [Thread-4426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] client lang: <none>
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] server lang: <none>
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] kex follows: False
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:29:38.038 [DEBUG] [Thread-4426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:29:38.039 [DEBUG] [Thread-4426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:29:38.039 [DEBUG] [Thread-4426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:29:38.039 [DEBUG] [Thread-4426] [transport.py] [_log()] Compression: none
2025-11-25T19:29:38.039 [DEBUG] [Thread-4426] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:29:38.098 [DEBUG] [Thread-4426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:29:38.099 [DEBUG] [Thread-4426] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:29:38.099 [DEBUG] [Thread-4426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:29:38.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:29:38.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:29:38.154 [DEBUG] [Thread-4426] [transport.py] [_log()] userauth is OK
2025-11-25T19:29:38.155 [DEBUG] [Thread-4426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:29:38.155 [DEBUG] [Thread-4426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:29:38.155 [DEBUG] [Thread-4426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:29:38.155 [DEBUG] [Thread-4426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:29:38.178 [INFO] [Thread-4426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:29:38.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:29:38.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:29:39.011 [DEBUG] [Thread-4426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:29:39.011 [DEBUG] [Thread-4426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:29:39.059 [DEBUG] [Thread-4426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:29:39.059 [DEBUG] [Thread-4426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:29:39.068 [DEBUG] [Thread-4426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:29:39.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:29:39.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:29:39.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:29:39.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:29:39.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:29:39.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:29:39.102 [DEBUG] [Thread-4426] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:29:49.496 [DEBUG] [Thread-4428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:29:52.941 [DEBUG] [Thread-4429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:30:04.535 [DEBUG] [Thread-4430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:30:09.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:30:09.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:30:09.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:30:09.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 29, 59), 32.69, 10.83, 0.0, 14.43, 24.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:30:09.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:29:59
2025-11-25T19:30:09.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:30:10.010 [DEBUG] [Thread-4431] [transport.py] [_log()] starting thread (client mode): 0x70d031c0
2025-11-25T19:30:10.010 [DEBUG] [Thread-4431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:30:10.033 [DEBUG] [Thread-4431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:30:10.033 [INFO] [Thread-4431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:30:10.037 [DEBUG] [Thread-4431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:30:10.037 [DEBUG] [Thread-4431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:30:10.037 [DEBUG] [Thread-4431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:30:10.037 [DEBUG] [Thread-4431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] client lang: <none>
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] server lang: <none>
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] kex follows: False
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] Compression: none
2025-11-25T19:30:10.038 [DEBUG] [Thread-4431] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:30:10.054 [DEBUG] [Thread-4431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:30:10.055 [DEBUG] [Thread-4431] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:30:10.055 [DEBUG] [Thread-4431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:30:10.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:30:10.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:30:10.057 [DEBUG] [Thread-4431] [transport.py] [_log()] userauth is OK
2025-11-25T19:30:10.057 [DEBUG] [Thread-4431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:30:10.058 [DEBUG] [Thread-4431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:30:10.058 [DEBUG] [Thread-4431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:30:10.058 [DEBUG] [Thread-4431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:30:10.082 [INFO] [Thread-4431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:30:10.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:30:11.605 [DEBUG] [Thread-4431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:30:11.606 [DEBUG] [Thread-4431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:30:11.606 [DEBUG] [Thread-4431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:30:11.646 [DEBUG] [Thread-4431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:30:11.646 [DEBUG] [Thread-4431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:30:11.648 [DEBUG] [Thread-4431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:30:11.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:30:11.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:30:11.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:30:11.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:30:11.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:30:11.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:30:11.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:30:11.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:30:11.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:30:11.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.728572 -999.00  +24.30   9.22     15   -3.20 1 1 1 1 1   854    0 23.70 -160.76 ----- 10.4 9.2 253.4 12.3 25.2 -28.4 25.2 -27.8 24.9 -26.6 25.0 -27.6
2025-11-25T19:30:11.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:30:11.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:30:11.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.728572
2025-11-25T19:30:11.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:30:11.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:30:11.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:30:11.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:30:11.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:30:11.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:29:59', tmtdew=32.69, humidity=10.83, cloud=0.0, wind=14.43, temperature=24.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:29:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:30:11.668 [DEBUG] [Thread-4431] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:30:11.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:30:11.754 [DEBUG] [Thread-4434] [transport.py] [_log()] starting thread (client mode): 0x70d012a0
2025-11-25T19:30:11.755 [DEBUG] [Thread-4434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:30:11.770 [DEBUG] [Thread-4434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:30:11.770 [INFO] [Thread-4434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] client lang: <none>
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] server lang: <none>
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] kex follows: False
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] Compression: none
2025-11-25T19:30:11.777 [DEBUG] [Thread-4434] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:30:11.834 [DEBUG] [Thread-4434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:30:11.835 [DEBUG] [Thread-4434] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:30:11.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:30:11.835 [DEBUG] [Thread-4434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:30:11.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:30:11.894 [DEBUG] [Thread-4434] [transport.py] [_log()] userauth is OK
2025-11-25T19:30:11.894 [DEBUG] [Thread-4434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:30:11.894 [DEBUG] [Thread-4434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:30:11.895 [DEBUG] [Thread-4434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:30:11.895 [DEBUG] [Thread-4434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:30:11.913 [INFO] [Thread-4434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:30:11.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:30:11.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:30:12.753 [DEBUG] [Thread-4434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:30:12.753 [DEBUG] [Thread-4434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:30:12.801 [DEBUG] [Thread-4434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:30:12.801 [DEBUG] [Thread-4434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:30:12.810 [DEBUG] [Thread-4434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:30:12.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:30:12.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:30:12.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:30:12.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:30:12.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:30:12.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:30:12.846 [DEBUG] [Thread-4434] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:30:18.762 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:30:18.763 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:30:19.571 [DEBUG] [Thread-4436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:30:34.627 [DEBUG] [Thread-4437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:30:42.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:30:42.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:30:42.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:30:43.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 30, 31), 32.69, 10.83, 0.0, 15.79, 24.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:30:43.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:30:31
2025-11-25T19:30:43.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:30:43.768 [DEBUG] [Thread-4438] [transport.py] [_log()] starting thread (client mode): 0x70d412a0
2025-11-25T19:30:43.769 [DEBUG] [Thread-4438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:30:43.788 [DEBUG] [Thread-4438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:30:43.789 [INFO] [Thread-4438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] client lang: <none>
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] server lang: <none>
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] kex follows: False
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] Compression: none
2025-11-25T19:30:43.790 [DEBUG] [Thread-4438] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:30:43.798 [DEBUG] [Thread-4438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:30:43.798 [DEBUG] [Thread-4438] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:30:43.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:30:43.799 [DEBUG] [Thread-4438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:30:43.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:30:43.800 [DEBUG] [Thread-4438] [transport.py] [_log()] userauth is OK
2025-11-25T19:30:43.800 [DEBUG] [Thread-4438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:30:43.800 [DEBUG] [Thread-4438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:30:43.800 [DEBUG] [Thread-4438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:30:43.800 [DEBUG] [Thread-4438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:30:43.820 [INFO] [Thread-4438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:30:43.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:30:44.446 [DEBUG] [Thread-4438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:30:44.446 [DEBUG] [Thread-4438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:30:44.446 [DEBUG] [Thread-4438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:30:44.487 [DEBUG] [Thread-4438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:30:44.488 [DEBUG] [Thread-4438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:30:44.490 [DEBUG] [Thread-4438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:30:44.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:30:44.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:30:44.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:30:44.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:30:44.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:30:44.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:30:44.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:30:44.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:30:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:30:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.729266 -999.00  +24.30  10.15     15   -3.20 1 1 1 1 1   847    0 24.30 -150.33 ----- 8.5 10.2 262.1 12.5 25.1 -28.3 25.1 -27.6 24.8 -26.4 24.9 -27.5
2025-11-25T19:30:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:30:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:30:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.729266
2025-11-25T19:30:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:30:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:30:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:30:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:30:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:30:44.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:30:31', tmtdew=32.69, humidity=10.83, cloud=0.0, wind=15.79, temperature=24.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:30:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:30:44.511 [DEBUG] [Thread-4438] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:30:44.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:30:44.604 [DEBUG] [Thread-4441] [transport.py] [_log()] starting thread (client mode): 0x70d40df0
2025-11-25T19:30:44.604 [DEBUG] [Thread-4441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:30:44.620 [DEBUG] [Thread-4441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:30:44.620 [INFO] [Thread-4441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] client lang: <none>
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] server lang: <none>
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] kex follows: False
2025-11-25T19:30:44.628 [DEBUG] [Thread-4441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:30:44.629 [DEBUG] [Thread-4441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:30:44.629 [DEBUG] [Thread-4441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:30:44.629 [DEBUG] [Thread-4441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:30:44.629 [DEBUG] [Thread-4441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:30:44.629 [DEBUG] [Thread-4441] [transport.py] [_log()] Compression: none
2025-11-25T19:30:44.629 [DEBUG] [Thread-4441] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:30:44.686 [DEBUG] [Thread-4441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:30:44.687 [DEBUG] [Thread-4441] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:30:44.687 [DEBUG] [Thread-4441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:30:44.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:30:44.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:30:44.743 [DEBUG] [Thread-4441] [transport.py] [_log()] userauth is OK
2025-11-25T19:30:44.743 [DEBUG] [Thread-4441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:30:44.743 [DEBUG] [Thread-4441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:30:44.743 [DEBUG] [Thread-4441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:30:44.743 [DEBUG] [Thread-4441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:30:44.762 [INFO] [Thread-4441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:30:44.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:30:44.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:30:45.597 [DEBUG] [Thread-4441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:30:45.597 [DEBUG] [Thread-4441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:30:45.644 [DEBUG] [Thread-4441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:30:45.644 [DEBUG] [Thread-4441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:30:45.653 [DEBUG] [Thread-4441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:30:45.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:30:45.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:30:45.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:30:45.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:30:45.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:30:45.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:30:45.686 [DEBUG] [Thread-4441] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:30:49.665 [DEBUG] [Thread-4443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:30:52.999 [DEBUG] [Thread-4444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:31:04.709 [DEBUG] [Thread-4445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:31:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:31:15.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:31:15.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:31:16.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 31, 3), 32.61, 10.89, 0.0, 13.87, 24.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:31:16.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:31:03
2025-11-25T19:31:16.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:31:16.625 [DEBUG] [Thread-4446] [transport.py] [_log()] starting thread (client mode): 0x70d02c80
2025-11-25T19:31:16.625 [DEBUG] [Thread-4446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:31:16.645 [DEBUG] [Thread-4446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:31:16.645 [INFO] [Thread-4446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:31:16.646 [DEBUG] [Thread-4446] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] client lang: <none>
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] server lang: <none>
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] kex follows: False
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] Compression: none
2025-11-25T19:31:16.647 [DEBUG] [Thread-4446] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:31:16.655 [DEBUG] [Thread-4446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:31:16.656 [DEBUG] [Thread-4446] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:31:16.656 [DEBUG] [Thread-4446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:31:16.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:31:16.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:31:16.658 [DEBUG] [Thread-4446] [transport.py] [_log()] userauth is OK
2025-11-25T19:31:16.658 [DEBUG] [Thread-4446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:31:16.658 [DEBUG] [Thread-4446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:31:16.658 [DEBUG] [Thread-4446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:31:16.658 [DEBUG] [Thread-4446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:31:16.681 [INFO] [Thread-4446] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:31:16.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:31:17.317 [DEBUG] [Thread-4446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:31:17.318 [DEBUG] [Thread-4446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:31:17.318 [DEBUG] [Thread-4446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:31:17.359 [DEBUG] [Thread-4446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:31:17.359 [DEBUG] [Thread-4446] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:31:17.362 [DEBUG] [Thread-4446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:31:17.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:31:17.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:31:17.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:31:17.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:31:17.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:31:17.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:31:17.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:31:17.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:31:17.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:31:17.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.729614 -999.00  +24.30   9.36     15   -3.20 1 1 1 1 1   844    0 23.90 -141.58 ----- 5.3 9.4 231.8 10.6 25.0 -28.3 25.1 -27.7 24.7 -26.3 24.9 -27.5
2025-11-25T19:31:17.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:31:17.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:31:17.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.729614
2025-11-25T19:31:17.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:31:17.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:31:17.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:31:17.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:31:17.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:31:17.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:31:03', tmtdew=32.61, humidity=10.89, cloud=0.0, wind=13.87, temperature=24.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:30:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:31:17.389 [DEBUG] [Thread-4446] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:31:17.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:31:17.484 [DEBUG] [Thread-4449] [transport.py] [_log()] starting thread (client mode): 0x70d2b910
2025-11-25T19:31:17.484 [DEBUG] [Thread-4449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:31:17.503 [DEBUG] [Thread-4449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:31:17.504 [INFO] [Thread-4449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:31:17.511 [DEBUG] [Thread-4449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:31:17.511 [DEBUG] [Thread-4449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] client lang: <none>
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] server lang: <none>
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] kex follows: False
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:31:17.512 [DEBUG] [Thread-4449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:31:17.513 [DEBUG] [Thread-4449] [transport.py] [_log()] Compression: none
2025-11-25T19:31:17.513 [DEBUG] [Thread-4449] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:31:17.572 [DEBUG] [Thread-4449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:31:17.573 [DEBUG] [Thread-4449] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:31:17.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:31:17.574 [DEBUG] [Thread-4449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:31:17.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:31:17.628 [DEBUG] [Thread-4449] [transport.py] [_log()] userauth is OK
2025-11-25T19:31:17.628 [DEBUG] [Thread-4449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:31:17.628 [DEBUG] [Thread-4449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:31:17.628 [DEBUG] [Thread-4449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:31:17.628 [DEBUG] [Thread-4449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:31:17.647 [INFO] [Thread-4449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:31:17.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:31:17.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:31:18.489 [DEBUG] [Thread-4449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:31:18.489 [DEBUG] [Thread-4449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:31:18.536 [DEBUG] [Thread-4449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:31:18.537 [DEBUG] [Thread-4449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:31:18.545 [DEBUG] [Thread-4449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:31:18.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:31:18.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:31:18.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:31:18.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:31:18.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:31:18.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:31:18.579 [DEBUG] [Thread-4449] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:31:19.742 [DEBUG] [Thread-4451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:31:23.732 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:31:23.733 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:31:34.800 [DEBUG] [Thread-4452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:31:48.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:31:48.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:31:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:31:49.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 31, 35), 32.53, 10.88, 0.0, 14.63, 24.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:31:49.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:31:35
2025-11-25T19:31:49.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:31:49.505 [DEBUG] [Thread-4453] [transport.py] [_log()] starting thread (client mode): 0x70d2b5e0
2025-11-25T19:31:49.505 [DEBUG] [Thread-4453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:31:49.527 [DEBUG] [Thread-4453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:31:49.527 [INFO] [Thread-4453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] client lang: <none>
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] server lang: <none>
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] kex follows: False
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:31:49.530 [DEBUG] [Thread-4453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:31:49.531 [DEBUG] [Thread-4453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:31:49.531 [DEBUG] [Thread-4453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:31:49.531 [DEBUG] [Thread-4453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:31:49.531 [DEBUG] [Thread-4453] [transport.py] [_log()] Compression: none
2025-11-25T19:31:49.531 [DEBUG] [Thread-4453] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:31:49.545 [DEBUG] [Thread-4453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:31:49.545 [DEBUG] [Thread-4453] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:31:49.546 [DEBUG] [Thread-4453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:31:49.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:31:49.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:31:49.548 [DEBUG] [Thread-4453] [transport.py] [_log()] userauth is OK
2025-11-25T19:31:49.548 [DEBUG] [Thread-4453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:31:49.548 [DEBUG] [Thread-4453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:31:49.548 [DEBUG] [Thread-4453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:31:49.548 [DEBUG] [Thread-4453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:31:49.568 [INFO] [Thread-4453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:31:49.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:31:49.832 [DEBUG] [Thread-4455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:31:50.180 [DEBUG] [Thread-4453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:31:50.180 [DEBUG] [Thread-4453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:31:50.181 [DEBUG] [Thread-4453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:31:50.221 [DEBUG] [Thread-4453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:31:50.222 [DEBUG] [Thread-4453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:31:50.225 [DEBUG] [Thread-4453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:31:50.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:31:50.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:31:50.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:31:50.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:31:50.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:31:50.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:31:50.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:31:50.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:31:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:31:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.729961 -999.00  +24.20   9.74     15   -3.20 1 1 1 1 1   840    0 24.43 -138.30 ----- 11.2 9.7 264.6 12.6 24.9 -28.3 25.1 -27.6 24.6 -26.3 24.8 -27.5
2025-11-25T19:31:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:31:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:31:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.729961
2025-11-25T19:31:50.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:31:50.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:31:50.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:31:50.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:31:50.260 [DEBUG] [Thread-4453] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:31:50.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:31:50.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:31:35', tmtdew=32.53, humidity=10.88, cloud=0.0, wind=14.63, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:31:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:31:50.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:31:50.356 [DEBUG] [Thread-4457] [transport.py] [_log()] starting thread (client mode): 0x70d01060
2025-11-25T19:31:50.356 [DEBUG] [Thread-4457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:31:50.370 [DEBUG] [Thread-4457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:31:50.370 [INFO] [Thread-4457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:31:50.377 [DEBUG] [Thread-4457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] client lang: <none>
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] server lang: <none>
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] kex follows: False
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:31:50.378 [DEBUG] [Thread-4457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:31:50.379 [DEBUG] [Thread-4457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:31:50.379 [DEBUG] [Thread-4457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:31:50.379 [DEBUG] [Thread-4457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:31:50.379 [DEBUG] [Thread-4457] [transport.py] [_log()] Compression: none
2025-11-25T19:31:50.379 [DEBUG] [Thread-4457] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:31:50.435 [DEBUG] [Thread-4457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:31:50.436 [DEBUG] [Thread-4457] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:31:50.436 [DEBUG] [Thread-4457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:31:50.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:31:50.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:31:50.492 [DEBUG] [Thread-4457] [transport.py] [_log()] userauth is OK
2025-11-25T19:31:50.493 [DEBUG] [Thread-4457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:31:50.493 [DEBUG] [Thread-4457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:31:50.493 [DEBUG] [Thread-4457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:31:50.493 [DEBUG] [Thread-4457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:31:50.511 [INFO] [Thread-4457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:31:50.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:31:50.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:31:51.389 [DEBUG] [Thread-4457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:31:51.389 [DEBUG] [Thread-4457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:31:51.438 [DEBUG] [Thread-4457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:31:51.438 [DEBUG] [Thread-4457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:31:51.447 [DEBUG] [Thread-4457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:31:51.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:31:51.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:31: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') -> 00000000
2025-11-25T19:31:51.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:31:51.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:31:51.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:31:51.484 [DEBUG] [Thread-4457] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:31:53.068 [DEBUG] [Thread-4459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:32:04.873 [DEBUG] [Thread-4460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:32:19.926 [DEBUG] [Thread-4461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:32:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:32:21.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:32:21.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:32:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 32, 7), 32.48, 10.91, 0.0, 14.89, 24.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:32:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:32:07
2025-11-25T19:32:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:32:22.433 [DEBUG] [Thread-4462] [transport.py] [_log()] starting thread (client mode): 0x70d39270
2025-11-25T19:32:22.433 [DEBUG] [Thread-4462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:32:22.455 [DEBUG] [Thread-4462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:32:22.455 [INFO] [Thread-4462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] client lang: <none>
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] server lang: <none>
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] kex follows: False
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:32:22.458 [DEBUG] [Thread-4462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:32:22.459 [DEBUG] [Thread-4462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:32:22.459 [DEBUG] [Thread-4462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:32:22.459 [DEBUG] [Thread-4462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:32:22.459 [DEBUG] [Thread-4462] [transport.py] [_log()] Compression: none
2025-11-25T19:32:22.459 [DEBUG] [Thread-4462] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:32:22.474 [DEBUG] [Thread-4462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:32:22.474 [DEBUG] [Thread-4462] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:32:22.474 [DEBUG] [Thread-4462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:32:22.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:32:22.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:32:22.475 [DEBUG] [Thread-4462] [transport.py] [_log()] userauth is OK
2025-11-25T19:32:22.475 [DEBUG] [Thread-4462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:32:22.475 [DEBUG] [Thread-4462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:32:22.475 [DEBUG] [Thread-4462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:32:22.475 [DEBUG] [Thread-4462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:32:22.490 [INFO] [Thread-4462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:32:22.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:32:23.118 [DEBUG] [Thread-4462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:32:23.118 [DEBUG] [Thread-4462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:32:23.118 [DEBUG] [Thread-4462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:32:23.159 [DEBUG] [Thread-4462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:32:23.159 [DEBUG] [Thread-4462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:32:23.162 [DEBUG] [Thread-4462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:32:23.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:32:23.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:32:23.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:32:23.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:32:23.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:32:23.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:32:23.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:32:23.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:32:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:32:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.730308 -999.00  +24.20   9.47     15   -3.20 1 1 1 1 1   835    0 24.49 -121.89 ----- 12.8 9.5 268.6 14.4 24.9 -28.2 25.0 -27.6 24.6 -26.2 24.8 -27.5
2025-11-25T19:32:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:32:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:32:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.730308
2025-11-25T19:32:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:32:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:32:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:32:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:32:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:32:23.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:32:07', tmtdew=32.48, humidity=10.91, cloud=0.0, wind=14.89, temperature=24.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:31:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:32:23.180 [DEBUG] [Thread-4462] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:32:23.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:32:23.265 [DEBUG] [Thread-4465] [transport.py] [_log()] starting thread (client mode): 0x70d28280
2025-11-25T19:32:23.266 [DEBUG] [Thread-4465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:32:23.280 [DEBUG] [Thread-4465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:32:23.280 [INFO] [Thread-4465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] client lang: <none>
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] server lang: <none>
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] kex follows: False
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:32:23.287 [DEBUG] [Thread-4465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:32:23.288 [DEBUG] [Thread-4465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:32:23.288 [DEBUG] [Thread-4465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:32:23.288 [DEBUG] [Thread-4465] [transport.py] [_log()] Compression: none
2025-11-25T19:32:23.288 [DEBUG] [Thread-4465] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:32:23.343 [DEBUG] [Thread-4465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:32:23.343 [DEBUG] [Thread-4465] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:32:23.343 [DEBUG] [Thread-4465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:32:23.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:32:23.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:32:23.400 [DEBUG] [Thread-4465] [transport.py] [_log()] userauth is OK
2025-11-25T19:32:23.400 [DEBUG] [Thread-4465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:32:23.400 [DEBUG] [Thread-4465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:32:23.400 [DEBUG] [Thread-4465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:32:23.400 [DEBUG] [Thread-4465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:32:23.414 [INFO] [Thread-4465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:32:23.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:32:23.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:32:24.269 [DEBUG] [Thread-4465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:32:24.269 [DEBUG] [Thread-4465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:32:24.320 [DEBUG] [Thread-4465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:32:24.320 [DEBUG] [Thread-4465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:32:24.331 [DEBUG] [Thread-4465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:32:24.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:32:24.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:32:24.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:32:24.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:32:24.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:32:24.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:32:24.379 [DEBUG] [Thread-4465] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:32:27.742 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:32:27.743 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:32:34.956 [DEBUG] [Thread-4467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:32:50.006 [DEBUG] [Thread-4468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:32:53.125 [DEBUG] [Thread-4469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:32:54.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:32:54.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:32:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:32:55.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 32, 39), 32.6, 10.84, 0.0, 13.3, 24.03, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:32:55.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:32:39
2025-11-25T19:32:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:32:55.325 [DEBUG] [Thread-4470] [transport.py] [_log()] starting thread (client mode): 0x70d3a7d0
2025-11-25T19:32:55.325 [DEBUG] [Thread-4470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:32:55.345 [DEBUG] [Thread-4470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:32:55.345 [INFO] [Thread-4470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:32:55.348 [DEBUG] [Thread-4470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] client lang: <none>
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] server lang: <none>
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] kex follows: False
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] Compression: none
2025-11-25T19:32:55.349 [DEBUG] [Thread-4470] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:32:55.368 [DEBUG] [Thread-4470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:32:55.368 [DEBUG] [Thread-4470] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:32:55.369 [DEBUG] [Thread-4470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:32:55.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:32:55.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:32:55.371 [DEBUG] [Thread-4470] [transport.py] [_log()] userauth is OK
2025-11-25T19:32:55.371 [DEBUG] [Thread-4470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:32:55.371 [DEBUG] [Thread-4470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:32:55.371 [DEBUG] [Thread-4470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:32:55.371 [DEBUG] [Thread-4470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:32:55.405 [INFO] [Thread-4470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:32:55.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:32:56.061 [DEBUG] [Thread-4470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:32:56.061 [DEBUG] [Thread-4470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:32:56.061 [DEBUG] [Thread-4470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:32:56.102 [DEBUG] [Thread-4470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:32:56.102 [DEBUG] [Thread-4470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:32:56.104 [DEBUG] [Thread-4470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:32:56.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:32:56.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:32:56.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:32:56.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:32:56.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:32:56.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:32:56.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.730655 -999.00  +24.10  11.47     16   -3.20 1 1 1 1 1   830    0 24.11 -114.14 ----- 11.1 11.5 267.8 16.6 24.9 -28.2 25.0 -27.6 24.6 -26.3 24.8 -27.4
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.730655
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:32:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:32:39', tmtdew=32.6, humidity=10.84, cloud=0.0, wind=13.3, temperature=24.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:32:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:32:56.123 [DEBUG] [Thread-4470] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:32:56.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:32:56.207 [DEBUG] [Thread-4473] [transport.py] [_log()] starting thread (client mode): 0x70d38580
2025-11-25T19:32:56.208 [DEBUG] [Thread-4473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:32:56.222 [DEBUG] [Thread-4473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:32:56.222 [INFO] [Thread-4473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] client lang: <none>
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] server lang: <none>
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] kex follows: False
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] Compression: none
2025-11-25T19:32:56.229 [DEBUG] [Thread-4473] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:32:56.287 [DEBUG] [Thread-4473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:32:56.287 [DEBUG] [Thread-4473] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:32:56.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:32:56.287 [DEBUG] [Thread-4473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:32:56.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:32:56.344 [DEBUG] [Thread-4473] [transport.py] [_log()] userauth is OK
2025-11-25T19:32:56.344 [DEBUG] [Thread-4473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:32:56.344 [DEBUG] [Thread-4473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:32:56.344 [DEBUG] [Thread-4473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:32:56.344 [DEBUG] [Thread-4473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:32:56.357 [INFO] [Thread-4473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:32:56.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:32:56.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:32:57.181 [DEBUG] [Thread-4473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:32:57.181 [DEBUG] [Thread-4473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:32:57.229 [DEBUG] [Thread-4473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:32:57.229 [DEBUG] [Thread-4473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:32:57.237 [DEBUG] [Thread-4473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:32:57.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:32:57.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:32:57.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:32:57.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:32:57.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:32:57.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:32:57.268 [DEBUG] [Thread-4473] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:33:05.043 [DEBUG] [Thread-4475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:33:20.097 [DEBUG] [Thread-4476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:33:27.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:33:27.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:33:27.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:33:27.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 33, 11), 32.5, 10.93, 0.0, 12.51, 24.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:33:27.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:33:11
2025-11-25T19:33:28.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:33:28.179 [DEBUG] [Thread-4477] [transport.py] [_log()] starting thread (client mode): 0x70d0ee60
2025-11-25T19:33:28.179 [DEBUG] [Thread-4477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:33:28.202 [DEBUG] [Thread-4477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:33:28.202 [INFO] [Thread-4477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:33:28.205 [DEBUG] [Thread-4477] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] client lang: <none>
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] server lang: <none>
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] kex follows: False
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] Compression: none
2025-11-25T19:33:28.206 [DEBUG] [Thread-4477] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:33:28.224 [DEBUG] [Thread-4477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:33:28.225 [DEBUG] [Thread-4477] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:33:28.225 [DEBUG] [Thread-4477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:33:28.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:33:28.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:33:28.227 [DEBUG] [Thread-4477] [transport.py] [_log()] userauth is OK
2025-11-25T19:33:28.227 [DEBUG] [Thread-4477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:33:28.227 [DEBUG] [Thread-4477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:33:28.227 [DEBUG] [Thread-4477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:33:28.227 [DEBUG] [Thread-4477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:33:28.249 [INFO] [Thread-4477] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:33:28.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:33:29.070 [DEBUG] [Thread-4477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:33:29.070 [DEBUG] [Thread-4477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:33:29.071 [DEBUG] [Thread-4477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:33:29.111 [DEBUG] [Thread-4477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:33:29.112 [DEBUG] [Thread-4477] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:33:29.115 [DEBUG] [Thread-4477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:33:29.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:33:29.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:33:29.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:33:29.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:33:29.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:33:29.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:33:29.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:33:29.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:33:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:33:29.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.731002 -999.00  +24.10  10.30     16   -3.20 1 1 1 1 1   825    0 24.63 -104.29 ----- 9.7 10.3 272.6 13.8 24.9 -28.3 24.9 -27.5 24.6 -26.3 24.7 -27.3
2025-11-25T19:33:29.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:33:29.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:33:29.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.731002
2025-11-25T19:33:29.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:33:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:33:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:33:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:33:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:33:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:33:11', tmtdew=32.5, humidity=10.93, cloud=0.0, wind=12.51, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:32:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:33:29.140 [DEBUG] [Thread-4477] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:33:29.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:33:29.236 [DEBUG] [Thread-4480] [transport.py] [_log()] starting thread (client mode): 0x70d0d780
2025-11-25T19:33:29.236 [DEBUG] [Thread-4480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:33:29.251 [DEBUG] [Thread-4480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:33:29.252 [INFO] [Thread-4480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:33:29.259 [DEBUG] [Thread-4480] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:33:29.259 [DEBUG] [Thread-4480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:33:29.259 [DEBUG] [Thread-4480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:33:29.259 [DEBUG] [Thread-4480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:33:29.259 [DEBUG] [Thread-4480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] client lang: <none>
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] server lang: <none>
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] kex follows: False
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:33:29.260 [DEBUG] [Thread-4480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:33:29.261 [DEBUG] [Thread-4480] [transport.py] [_log()] Compression: none
2025-11-25T19:33:29.261 [DEBUG] [Thread-4480] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:33:29.321 [DEBUG] [Thread-4480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:33:29.321 [DEBUG] [Thread-4480] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:33:29.322 [DEBUG] [Thread-4480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:33:29.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:33:29.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:33:29.377 [DEBUG] [Thread-4480] [transport.py] [_log()] userauth is OK
2025-11-25T19:33:29.377 [DEBUG] [Thread-4480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:33:29.377 [DEBUG] [Thread-4480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:33:29.378 [DEBUG] [Thread-4480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:33:29.378 [DEBUG] [Thread-4480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:33:29.396 [INFO] [Thread-4480] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:33:29.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:33:29.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:33:30.249 [DEBUG] [Thread-4480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:33:30.249 [DEBUG] [Thread-4480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:33:30.298 [DEBUG] [Thread-4480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:33:30.298 [DEBUG] [Thread-4480] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:33:30.307 [DEBUG] [Thread-4480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:33:30.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:33:30.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:33:30.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:33:30.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:33:30.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:33:30.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:33:30.343 [DEBUG] [Thread-4480] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:33:35.131 [DEBUG] [Thread-4482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:33:36.170 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:33:36.171 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:33:50.171 [DEBUG] [Thread-4483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:33:53.194 [DEBUG] [Thread-4484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:34:00.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:34:00.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:34:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:34:01.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 33, 43), 32.39, 10.93, 0.0, 12.6, 23.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:34:01.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:33:43
2025-11-25T19:34:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:34:01.306 [DEBUG] [Thread-4485] [transport.py] [_log()] starting thread (client mode): 0x70d00310
2025-11-25T19:34:01.306 [DEBUG] [Thread-4485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:34:01.326 [DEBUG] [Thread-4485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:34:01.326 [INFO] [Thread-4485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:34:01.329 [DEBUG] [Thread-4485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:34:01.329 [DEBUG] [Thread-4485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:34:01.330 [DEBUG] [Thread-4485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:34:01.330 [DEBUG] [Thread-4485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:34:01.330 [DEBUG] [Thread-4485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:34:01.330 [DEBUG] [Thread-4485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:34:01.330 [DEBUG] [Thread-4485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:34:01.330 [DEBUG] [Thread-4485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:34:01.330 [DEBUG] [Thread-4485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:34:01.330 [DEBUG] [Thread-4485] [transport.py] [_log()] client lang: <none>
2025-11-25T19:34:01.330 [DEBUG] [Thread-4485] [transport.py] [_log()] server lang: <none>
2025-11-25T19:34:01.331 [DEBUG] [Thread-4485] [transport.py] [_log()] kex follows: False
2025-11-25T19:34:01.331 [DEBUG] [Thread-4485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:34:01.331 [DEBUG] [Thread-4485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:34:01.331 [DEBUG] [Thread-4485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:34:01.331 [DEBUG] [Thread-4485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:34:01.331 [DEBUG] [Thread-4485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:34:01.331 [DEBUG] [Thread-4485] [transport.py] [_log()] Compression: none
2025-11-25T19:34:01.331 [DEBUG] [Thread-4485] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:34:01.350 [DEBUG] [Thread-4485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:34:01.351 [DEBUG] [Thread-4485] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:34:01.352 [DEBUG] [Thread-4485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:34:01.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:34:01.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:34:01.354 [DEBUG] [Thread-4485] [transport.py] [_log()] userauth is OK
2025-11-25T19:34:01.354 [DEBUG] [Thread-4485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:34:01.354 [DEBUG] [Thread-4485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:34:01.354 [DEBUG] [Thread-4485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:34:01.354 [DEBUG] [Thread-4485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:34:01.379 [INFO] [Thread-4485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:34:01.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:34:02.031 [DEBUG] [Thread-4485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:34:02.032 [DEBUG] [Thread-4485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:34:02.032 [DEBUG] [Thread-4485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:34:02.073 [DEBUG] [Thread-4485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:34:02.073 [DEBUG] [Thread-4485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:34:02.076 [DEBUG] [Thread-4485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:34:02.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:34:02.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:34:02.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:34:02.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:34:02.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:34:02.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:34:02.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:34:02.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:34:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:34:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.731350 -999.00  +24.00  10.02     16   -3.20 1 1 1 1 1   819    0 25.59 -90.57 ----- 9.8 10.0 271.6 14.0 24.8 -28.2 24.9 -27.4 24.4 -26.2 24.7 -27.3
2025-11-25T19:34:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:34:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:34:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.731350
2025-11-25T19:34:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:34:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:34:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:34:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:34:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:34:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:33:43', tmtdew=32.39, humidity=10.93, cloud=0.0, wind=12.6, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:33:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:34:02.102 [DEBUG] [Thread-4485] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:34:02.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:34:02.198 [DEBUG] [Thread-4488] [transport.py] [_log()] starting thread (client mode): 0x70d39660
2025-11-25T19:34:02.198 [DEBUG] [Thread-4488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:34:02.212 [DEBUG] [Thread-4488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:34:02.213 [INFO] [Thread-4488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:34:02.220 [DEBUG] [Thread-4488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:34:02.220 [DEBUG] [Thread-4488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:34:02.220 [DEBUG] [Thread-4488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] client lang: <none>
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] server lang: <none>
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] kex follows: False
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:34:02.221 [DEBUG] [Thread-4488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:34:02.222 [DEBUG] [Thread-4488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:34:02.222 [DEBUG] [Thread-4488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:34:02.222 [DEBUG] [Thread-4488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:34:02.222 [DEBUG] [Thread-4488] [transport.py] [_log()] Compression: none
2025-11-25T19:34:02.222 [DEBUG] [Thread-4488] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:34:02.282 [DEBUG] [Thread-4488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:34:02.283 [DEBUG] [Thread-4488] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:34:02.284 [DEBUG] [Thread-4488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:34:02.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:34:02.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:34:02.341 [DEBUG] [Thread-4488] [transport.py] [_log()] userauth is OK
2025-11-25T19:34:02.342 [DEBUG] [Thread-4488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:34:02.342 [DEBUG] [Thread-4488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:34:02.342 [DEBUG] [Thread-4488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:34:02.342 [DEBUG] [Thread-4488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:34:02.365 [INFO] [Thread-4488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:34:02.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:34:02.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:34:03.228 [DEBUG] [Thread-4488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:34:03.228 [DEBUG] [Thread-4488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:34:03.276 [DEBUG] [Thread-4488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:34:03.276 [DEBUG] [Thread-4488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:34:03.285 [DEBUG] [Thread-4488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:34:03.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:34:03.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:34:03.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:34:03.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:34:03.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:34:03.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:34:03.322 [DEBUG] [Thread-4488] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:34:05.212 [DEBUG] [Thread-4490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:34:20.262 [DEBUG] [Thread-4491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:34:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:34:33.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:34:33.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:34:33.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 34, 16), 32.35, 10.96, 0.0, 12.0, 23.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:34:33.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:34:16
2025-11-25T19:34:34.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:34:34.238 [DEBUG] [Thread-4492] [transport.py] [_log()] starting thread (client mode): 0x70d41d80
2025-11-25T19:34:34.238 [DEBUG] [Thread-4492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:34:34.253 [DEBUG] [Thread-4492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:34:34.253 [INFO] [Thread-4492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:34:34.256 [DEBUG] [Thread-4492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:34:34.256 [DEBUG] [Thread-4492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:34:34.256 [DEBUG] [Thread-4492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:34:34.256 [DEBUG] [Thread-4492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:34:34.256 [DEBUG] [Thread-4492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:34:34.256 [DEBUG] [Thread-4492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:34:34.256 [DEBUG] [Thread-4492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] client lang: <none>
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] server lang: <none>
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] kex follows: False
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] Compression: none
2025-11-25T19:34:34.257 [DEBUG] [Thread-4492] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:34:34.274 [DEBUG] [Thread-4492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:34:34.274 [DEBUG] [Thread-4492] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:34:34.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:34:34.275 [DEBUG] [Thread-4492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:34:34.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:34:34.276 [DEBUG] [Thread-4492] [transport.py] [_log()] userauth is OK
2025-11-25T19:34:34.277 [DEBUG] [Thread-4492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:34:34.277 [DEBUG] [Thread-4492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:34:34.277 [DEBUG] [Thread-4492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:34:34.277 [DEBUG] [Thread-4492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:34:34.301 [INFO] [Thread-4492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:34:34.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:34:35.106 [DEBUG] [Thread-4492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:34:35.107 [DEBUG] [Thread-4492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:34:35.107 [DEBUG] [Thread-4492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:34:35.148 [DEBUG] [Thread-4492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:34:35.148 [DEBUG] [Thread-4492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:34:35.151 [DEBUG] [Thread-4492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:34:35.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:34:35.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:34:35.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:34:35.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:34:35.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:34:35.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:34:35.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:34:35.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:34:35.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:34:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.731697 -999.00  +24.00  14.85     16   -3.20 1 1 1 1 1   813    0 25.61 -86.16 ----- 10.0 14.8 262.4 17.4 24.8 -28.2 24.8 -27.5 24.4 -26.1 24.6 -27.2
2025-11-25T19:34:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:34:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:34:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.731697
2025-11-25T19:34:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:34:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:34:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:34:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:34:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:34:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:34:16', tmtdew=32.35, humidity=10.96, cloud=0.0, wind=12.0, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:33:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:34:35.179 [DEBUG] [Thread-4492] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:34:35.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:34:35.277 [DEBUG] [Thread-4495] [transport.py] [_log()] starting thread (client mode): 0x70d41810
2025-11-25T19:34:35.278 [DEBUG] [Thread-4495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:34:35.292 [DEBUG] [Thread-4495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:34:35.292 [INFO] [Thread-4495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:34:35.299 [DEBUG] [Thread-4497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] client lang: <none>
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] server lang: <none>
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] kex follows: False
2025-11-25T19:34:35.300 [DEBUG] [Thread-4495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:34:35.301 [DEBUG] [Thread-4495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:34:35.301 [DEBUG] [Thread-4495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:34:35.301 [DEBUG] [Thread-4495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:34:35.301 [DEBUG] [Thread-4495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:34:35.301 [DEBUG] [Thread-4495] [transport.py] [_log()] Compression: none
2025-11-25T19:34:35.301 [DEBUG] [Thread-4495] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:34:35.357 [DEBUG] [Thread-4495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:34:35.357 [DEBUG] [Thread-4495] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:34:35.358 [DEBUG] [Thread-4495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:34:35.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:34:35.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:34:35.413 [DEBUG] [Thread-4495] [transport.py] [_log()] userauth is OK
2025-11-25T19:34:35.414 [DEBUG] [Thread-4495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:34:35.414 [DEBUG] [Thread-4495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:34:35.414 [DEBUG] [Thread-4495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:34:35.414 [DEBUG] [Thread-4495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:34:35.437 [INFO] [Thread-4495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:34:35.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:34:35.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:34:36.262 [DEBUG] [Thread-4495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:34:36.263 [DEBUG] [Thread-4495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:34:36.311 [DEBUG] [Thread-4495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:34:36.311 [DEBUG] [Thread-4495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:34:36.320 [DEBUG] [Thread-4495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:34:36.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:34:36.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:34:36.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:34:36.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:34:36.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:34:36.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:34:36.356 [DEBUG] [Thread-4495] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:34:40.208 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:34:40.209 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:34:50.341 [DEBUG] [Thread-4498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:34:53.250 [DEBUG] [Thread-4499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:35:05.373 [DEBUG] [Thread-4500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:35:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:35:06.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:35:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:35:07.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 34, 48), 32.35, 10.94, 0.0, 11.93, 23.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:35:07.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:34:48
2025-11-25T19:35:07.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:35:07.284 [DEBUG] [Thread-4501] [transport.py] [_log()] starting thread (client mode): 0x70d3bc10
2025-11-25T19:35:07.284 [DEBUG] [Thread-4501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:35:07.305 [DEBUG] [Thread-4501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:35:07.305 [INFO] [Thread-4501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:35:07.308 [DEBUG] [Thread-4501] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:35:07.308 [DEBUG] [Thread-4501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:35:07.308 [DEBUG] [Thread-4501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:35:07.308 [DEBUG] [Thread-4501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:35:07.308 [DEBUG] [Thread-4501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] client lang: <none>
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] server lang: <none>
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] kex follows: False
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:35:07.309 [DEBUG] [Thread-4501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:35:07.310 [DEBUG] [Thread-4501] [transport.py] [_log()] Compression: none
2025-11-25T19:35:07.310 [DEBUG] [Thread-4501] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:35:07.328 [DEBUG] [Thread-4501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:35:07.329 [DEBUG] [Thread-4501] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:35:07.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:35:07.330 [DEBUG] [Thread-4501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:35:07.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:35:07.332 [DEBUG] [Thread-4501] [transport.py] [_log()] userauth is OK
2025-11-25T19:35:07.332 [DEBUG] [Thread-4501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:35:07.332 [DEBUG] [Thread-4501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:35:07.332 [DEBUG] [Thread-4501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:35:07.332 [DEBUG] [Thread-4501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:35:07.351 [INFO] [Thread-4501] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:35:07.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:35:08.646 [DEBUG] [Thread-4501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:35:08.647 [DEBUG] [Thread-4501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:35:08.647 [DEBUG] [Thread-4501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:35:08.688 [DEBUG] [Thread-4501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:35:08.688 [DEBUG] [Thread-4501] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:35:08.692 [DEBUG] [Thread-4501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:35:08.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:35:08.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:35:08.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:35:08.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:35:08.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:35:08.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:35:08.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:35:08.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:35:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:35:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.732044 -999.00  +24.00   5.95     16   -3.20 1 1 1 1 1   806    0 25.75 -77.24 ----- 7.9 6.0 270.6 11.3 24.8 -28.2 24.8 -27.4 24.4 -26.2 24.6 -27.3
2025-11-25T19:35:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:35:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:35:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.732044
2025-11-25T19:35:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:35:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:35:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:35:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:35:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:35:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:34:48', tmtdew=32.35, humidity=10.94, cloud=0.0, wind=11.93, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:34:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:35:08.725 [DEBUG] [Thread-4501] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:35:08.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:35:08.821 [DEBUG] [Thread-4504] [transport.py] [_log()] starting thread (client mode): 0x70d2a830
2025-11-25T19:35:08.821 [DEBUG] [Thread-4504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:35:08.836 [DEBUG] [Thread-4504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:35:08.837 [INFO] [Thread-4504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] client lang: <none>
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] server lang: <none>
2025-11-25T19:35:08.844 [DEBUG] [Thread-4504] [transport.py] [_log()] kex follows: False
2025-11-25T19:35:08.845 [DEBUG] [Thread-4504] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:35:08.845 [DEBUG] [Thread-4504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:35:08.845 [DEBUG] [Thread-4504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:35:08.845 [DEBUG] [Thread-4504] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:35:08.845 [DEBUG] [Thread-4504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:35:08.845 [DEBUG] [Thread-4504] [transport.py] [_log()] Compression: none
2025-11-25T19:35:08.845 [DEBUG] [Thread-4504] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:35:08.902 [DEBUG] [Thread-4504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:35:08.902 [DEBUG] [Thread-4504] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:35:08.903 [DEBUG] [Thread-4504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:35:08.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:35:08.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:35:08.958 [DEBUG] [Thread-4504] [transport.py] [_log()] userauth is OK
2025-11-25T19:35:08.958 [DEBUG] [Thread-4504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:35:08.958 [DEBUG] [Thread-4504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:35:08.958 [DEBUG] [Thread-4504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:35:08.959 [DEBUG] [Thread-4504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:35:08.977 [INFO] [Thread-4504] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:35:08.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:35:08.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:35:09.831 [DEBUG] [Thread-4504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:35:09.831 [DEBUG] [Thread-4504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:35:09.879 [DEBUG] [Thread-4504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:35:09.880 [DEBUG] [Thread-4504] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:35:09.889 [DEBUG] [Thread-4504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:35:09.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:35:09.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:35:09.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:35:09.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:35:09.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:35:09.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:35:09.926 [DEBUG] [Thread-4504] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:35:20.407 [DEBUG] [Thread-4506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:35:35.458 [DEBUG] [Thread-4507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:35:39.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:35:39.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:35:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:35:40.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 35, 20), 32.32, 10.98, 0.0, 11.73, 23.83, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:35:40.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:35:20
2025-11-25T19:35:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:35:40.861 [DEBUG] [Thread-4508] [transport.py] [_log()] starting thread (client mode): 0x70d2a740
2025-11-25T19:35:40.861 [DEBUG] [Thread-4508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:35:40.881 [DEBUG] [Thread-4508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:35:40.882 [INFO] [Thread-4508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:35:40.884 [DEBUG] [Thread-4508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:35:40.884 [DEBUG] [Thread-4508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:35:40.884 [DEBUG] [Thread-4508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:35:40.884 [DEBUG] [Thread-4508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] client lang: <none>
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] server lang: <none>
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] kex follows: False
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] Compression: none
2025-11-25T19:35:40.885 [DEBUG] [Thread-4508] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:35:40.904 [DEBUG] [Thread-4508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:35:40.904 [DEBUG] [Thread-4508] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:35:40.905 [DEBUG] [Thread-4508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:35:40.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:35:40.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:35:40.907 [DEBUG] [Thread-4508] [transport.py] [_log()] userauth is OK
2025-11-25T19:35:40.907 [DEBUG] [Thread-4508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:35:40.907 [DEBUG] [Thread-4508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:35:40.907 [DEBUG] [Thread-4508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:35:40.908 [DEBUG] [Thread-4508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:35:40.944 [INFO] [Thread-4508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:35:40.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:35:41.715 [DEBUG] [Thread-4508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:35:41.715 [DEBUG] [Thread-4508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:35:41.715 [DEBUG] [Thread-4508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:35:41.756 [DEBUG] [Thread-4508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:35:41.756 [DEBUG] [Thread-4508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:35:41.759 [DEBUG] [Thread-4508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:35:41.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:35:41.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:35:41.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:35:41.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:35:41.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:35:41.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:35:41.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:35:41.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:35:41.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:35:41.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.732738 -999.00  +24.00   6.32     16   -3.20 1 1 1 1 1   791    0 25.50 -71.81 ----- 5.1 6.3 271.2 9.7 24.6 -27.9 24.7 -27.4 24.4 -26.1 24.6 -27.2
2025-11-25T19:35:41.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:35:41.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:35:41.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.732738
2025-11-25T19:35:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:35:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:35:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:35:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:35:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:35:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:35:20', tmtdew=32.32, humidity=10.98, cloud=0.0, wind=11.73, temperature=23.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:35:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:35:41.788 [DEBUG] [Thread-4508] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:35:41.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:35:41.880 [DEBUG] [Thread-4511] [transport.py] [_log()] starting thread (client mode): 0x70d3b670
2025-11-25T19:35:41.881 [DEBUG] [Thread-4511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:35:41.895 [DEBUG] [Thread-4511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:35:41.895 [INFO] [Thread-4511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:35:41.902 [DEBUG] [Thread-4511] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] client lang: <none>
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] server lang: <none>
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] kex follows: False
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:35:41.903 [DEBUG] [Thread-4511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:35:41.904 [DEBUG] [Thread-4511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:35:41.904 [DEBUG] [Thread-4511] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:35:41.904 [DEBUG] [Thread-4511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:35:41.904 [DEBUG] [Thread-4511] [transport.py] [_log()] Compression: none
2025-11-25T19:35:41.904 [DEBUG] [Thread-4511] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:35:41.962 [DEBUG] [Thread-4511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:35:41.962 [DEBUG] [Thread-4511] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:35:41.963 [DEBUG] [Thread-4511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:35:41.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:35:41.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:35:42.018 [DEBUG] [Thread-4511] [transport.py] [_log()] userauth is OK
2025-11-25T19:35:42.018 [DEBUG] [Thread-4511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:35:42.018 [DEBUG] [Thread-4511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:35:42.019 [DEBUG] [Thread-4511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:35:42.019 [DEBUG] [Thread-4511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:35:42.038 [INFO] [Thread-4511] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:35:42.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:35:42.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:35:42.857 [DEBUG] [Thread-4511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:35:42.857 [DEBUG] [Thread-4511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:35:42.906 [DEBUG] [Thread-4511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:35:42.906 [DEBUG] [Thread-4511] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:35:42.915 [DEBUG] [Thread-4511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:35:42.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:35:42.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:35:42.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:35:42.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:35:42.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:35:42.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:35:42.951 [DEBUG] [Thread-4511] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:35:48.500 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:35:48.501 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:35:50.495 [DEBUG] [Thread-4513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:35:53.304 [DEBUG] [Thread-4514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:36:05.538 [DEBUG] [Thread-4515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:36:12.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:36:12.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:36: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
2025-11-25T19:36:13.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 35, 52), 32.22, 11.01, 0.0, 11.38, 23.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:36:13.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:35:52
2025-11-25T19:36:13.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:36:13.893 [DEBUG] [Thread-4516] [transport.py] [_log()] starting thread (client mode): 0x70d42650
2025-11-25T19:36:13.893 [DEBUG] [Thread-4516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:36:13.912 [DEBUG] [Thread-4516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:36:13.912 [INFO] [Thread-4516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:36:13.915 [DEBUG] [Thread-4516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:36:13.915 [DEBUG] [Thread-4516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:36:13.915 [DEBUG] [Thread-4516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:36:13.915 [DEBUG] [Thread-4516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:36:13.915 [DEBUG] [Thread-4516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:36:13.915 [DEBUG] [Thread-4516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] client lang: <none>
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] server lang: <none>
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] kex follows: False
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] Compression: none
2025-11-25T19:36:13.916 [DEBUG] [Thread-4516] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:36:13.935 [DEBUG] [Thread-4516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:36:13.935 [DEBUG] [Thread-4516] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:36:13.936 [DEBUG] [Thread-4516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:36:13.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:36:13.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:36:13.938 [DEBUG] [Thread-4516] [transport.py] [_log()] userauth is OK
2025-11-25T19:36:13.938 [DEBUG] [Thread-4516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:36:13.938 [DEBUG] [Thread-4516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:36:13.938 [DEBUG] [Thread-4516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:36:13.939 [DEBUG] [Thread-4516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:36:13.962 [INFO] [Thread-4516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:36:13.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:36:14.609 [DEBUG] [Thread-4516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:36:14.609 [DEBUG] [Thread-4516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:36:14.610 [DEBUG] [Thread-4516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:36:14.650 [DEBUG] [Thread-4516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:36:14.650 [DEBUG] [Thread-4516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:36:14.653 [DEBUG] [Thread-4516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:36:14.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:36:14.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:36:14.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:36:14.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:36:14.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:36:14.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:36:14.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:36:14.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:36:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:36:14.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.733086 -999.00  +23.90   6.62     16   -3.20 1 1 1 1 1   783    0 25.81 -69.49 ----- 9.5 6.6 265.6 8.3 24.6 -28.1 24.7 -27.4 24.3 -26.1 24.4 -27.2
2025-11-25T19:36:14.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:36:14.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:36:14.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.733086
2025-11-25T19:36:14.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:36:14.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:36:14.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:36:14.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:36:14.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:36:14.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:35:52', tmtdew=32.22, humidity=11.01, cloud=0.0, wind=11.38, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:35:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:36:14.680 [DEBUG] [Thread-4516] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:36:14.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:36:14.778 [DEBUG] [Thread-4519] [transport.py] [_log()] starting thread (client mode): 0x70d56200
2025-11-25T19:36:14.778 [DEBUG] [Thread-4519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:36:14.792 [DEBUG] [Thread-4519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:36:14.792 [INFO] [Thread-4519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:36:14.799 [DEBUG] [Thread-4519] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:36:14.800 [DEBUG] [Thread-4519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:36:14.800 [DEBUG] [Thread-4519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:36:14.800 [DEBUG] [Thread-4519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:36:14.800 [DEBUG] [Thread-4519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:36:14.800 [DEBUG] [Thread-4519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:36:14.800 [DEBUG] [Thread-4519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:36:14.800 [DEBUG] [Thread-4519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:36:14.800 [DEBUG] [Thread-4519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:36:14.801 [DEBUG] [Thread-4519] [transport.py] [_log()] client lang: <none>
2025-11-25T19:36:14.801 [DEBUG] [Thread-4519] [transport.py] [_log()] server lang: <none>
2025-11-25T19:36:14.801 [DEBUG] [Thread-4519] [transport.py] [_log()] kex follows: False
2025-11-25T19:36:14.801 [DEBUG] [Thread-4519] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:36:14.801 [DEBUG] [Thread-4519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:36:14.801 [DEBUG] [Thread-4519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:36:14.801 [DEBUG] [Thread-4519] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:36:14.801 [DEBUG] [Thread-4519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:36:14.802 [DEBUG] [Thread-4519] [transport.py] [_log()] Compression: none
2025-11-25T19:36:14.802 [DEBUG] [Thread-4519] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:36:14.859 [DEBUG] [Thread-4519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:36:14.859 [DEBUG] [Thread-4519] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:36:14.860 [DEBUG] [Thread-4519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:36:14.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:36:14.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:36:14.914 [DEBUG] [Thread-4519] [transport.py] [_log()] userauth is OK
2025-11-25T19:36:14.914 [DEBUG] [Thread-4519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:36:14.914 [DEBUG] [Thread-4519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:36:14.914 [DEBUG] [Thread-4519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:36:14.914 [DEBUG] [Thread-4519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:36:14.937 [INFO] [Thread-4519] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:36:14.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:36:14.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:36:15.756 [DEBUG] [Thread-4519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:36:15.756 [DEBUG] [Thread-4519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:36:15.803 [DEBUG] [Thread-4519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:36:15.804 [DEBUG] [Thread-4519] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:36:15.813 [DEBUG] [Thread-4519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:36:15.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:36:15.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:36:15.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:36:15.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:36:15.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:36:15.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:36:15.849 [DEBUG] [Thread-4519] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:36:20.572 [DEBUG] [Thread-4521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:36:35.623 [DEBUG] [Thread-4522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:36:45.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:36:45.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:36:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:36:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 36, 24), 32.18, 11.04, 0.0, 12.14, 23.78, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:36:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:36:24
2025-11-25T19:36:46.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:36:46.793 [DEBUG] [Thread-4523] [transport.py] [_log()] starting thread (client mode): 0x70d03ca0
2025-11-25T19:36:46.793 [DEBUG] [Thread-4523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:36:46.814 [DEBUG] [Thread-4523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:36:46.814 [INFO] [Thread-4523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:36:46.818 [DEBUG] [Thread-4523] [transport.py] [_log()] client lang: <none>
2025-11-25T19:36:46.819 [DEBUG] [Thread-4523] [transport.py] [_log()] server lang: <none>
2025-11-25T19:36:46.819 [DEBUG] [Thread-4523] [transport.py] [_log()] kex follows: False
2025-11-25T19:36:46.819 [DEBUG] [Thread-4523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:36:46.819 [DEBUG] [Thread-4523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:36:46.819 [DEBUG] [Thread-4523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:36:46.819 [DEBUG] [Thread-4523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:36:46.819 [DEBUG] [Thread-4523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:36:46.819 [DEBUG] [Thread-4523] [transport.py] [_log()] Compression: none
2025-11-25T19:36:46.819 [DEBUG] [Thread-4523] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:36:46.837 [DEBUG] [Thread-4523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:36:46.838 [DEBUG] [Thread-4523] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:36:46.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:36:46.839 [DEBUG] [Thread-4523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:36:46.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:36:46.841 [DEBUG] [Thread-4523] [transport.py] [_log()] userauth is OK
2025-11-25T19:36:46.841 [DEBUG] [Thread-4523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:36:46.842 [DEBUG] [Thread-4523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:36:46.842 [DEBUG] [Thread-4523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:36:46.842 [DEBUG] [Thread-4523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:36:46.858 [INFO] [Thread-4523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:36:46.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:36:47.676 [DEBUG] [Thread-4523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:36:47.676 [DEBUG] [Thread-4523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:36:47.677 [DEBUG] [Thread-4523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:36:47.718 [DEBUG] [Thread-4523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:36:47.718 [DEBUG] [Thread-4523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:36:47.721 [DEBUG] [Thread-4523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:36:47.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:36:47.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:36:47.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:36:47.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:36:47.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:36:47.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:36:47.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:36:47.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:36:47.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:36:47.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.733433 -999.00  +23.90   9.12     16   -3.20 1 1 1 1 1   774    0 25.77 -63.56 ----- 5.1 9.1 273.9 11.3 24.6 -27.9 24.6 -27.4 24.2 -26.0 24.4 -27.1
2025-11-25T19:36:47.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:36:47.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:36:47.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.733433
2025-11-25T19:36:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:36:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:36:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:36:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:36:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:36:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:36:24', tmtdew=32.18, humidity=11.04, cloud=0.0, wind=12.14, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:36:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:36:47.743 [DEBUG] [Thread-4523] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:36:47.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:36:47.840 [DEBUG] [Thread-4526] [transport.py] [_log()] starting thread (client mode): 0x70d38310
2025-11-25T19:36:47.840 [DEBUG] [Thread-4526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:36:47.855 [DEBUG] [Thread-4526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:36:47.855 [INFO] [Thread-4526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:36:47.863 [DEBUG] [Thread-4526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:36:47.863 [DEBUG] [Thread-4526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:36:47.863 [DEBUG] [Thread-4526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:36:47.864 [DEBUG] [Thread-4526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:36:47.864 [DEBUG] [Thread-4526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:36:47.864 [DEBUG] [Thread-4526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:36:47.864 [DEBUG] [Thread-4526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:36:47.864 [DEBUG] [Thread-4526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:36:47.864 [DEBUG] [Thread-4526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:36:47.864 [DEBUG] [Thread-4526] [transport.py] [_log()] client lang: <none>
2025-11-25T19:36:47.865 [DEBUG] [Thread-4526] [transport.py] [_log()] server lang: <none>
2025-11-25T19:36:47.865 [DEBUG] [Thread-4526] [transport.py] [_log()] kex follows: False
2025-11-25T19:36:47.865 [DEBUG] [Thread-4526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:36:47.865 [DEBUG] [Thread-4526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:36:47.865 [DEBUG] [Thread-4526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:36:47.865 [DEBUG] [Thread-4526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:36:47.865 [DEBUG] [Thread-4526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:36:47.865 [DEBUG] [Thread-4526] [transport.py] [_log()] Compression: none
2025-11-25T19:36:47.865 [DEBUG] [Thread-4526] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:36:47.923 [DEBUG] [Thread-4526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:36:47.923 [DEBUG] [Thread-4526] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:36:47.924 [DEBUG] [Thread-4526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:36:47.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:36:47.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:36:47.982 [DEBUG] [Thread-4526] [transport.py] [_log()] userauth is OK
2025-11-25T19:36:47.983 [DEBUG] [Thread-4526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:36:47.983 [DEBUG] [Thread-4526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:36:47.983 [DEBUG] [Thread-4526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:36:47.983 [DEBUG] [Thread-4526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:36:48.000 [INFO] [Thread-4526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:36:48.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:36:48.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:36:48.864 [DEBUG] [Thread-4526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:36:48.864 [DEBUG] [Thread-4526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:36:48.912 [DEBUG] [Thread-4526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:36:48.912 [DEBUG] [Thread-4526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:36:48.921 [DEBUG] [Thread-4526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:36:48.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:36:48.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:36:48.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:36:48.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:36:48.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:36:48.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:36:48.957 [DEBUG] [Thread-4526] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:36:50.659 [DEBUG] [Thread-4528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:36:53.362 [DEBUG] [Thread-4529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:36:55.552 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:36:55.553 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:37:05.711 [DEBUG] [Thread-4530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:37:18.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:37:18.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:37:18.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:37:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 36, 56), 32.13, 11.04, 0.0, 13.25, 23.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:37:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:36:56
2025-11-25T19:37:19.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:37:19.924 [DEBUG] [Thread-4531] [transport.py] [_log()] starting thread (client mode): 0x70d2a740
2025-11-25T19:37:19.924 [DEBUG] [Thread-4531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:37:19.944 [DEBUG] [Thread-4531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:37:19.944 [INFO] [Thread-4531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:37:19.947 [DEBUG] [Thread-4531] [transport.py] [_log()] client lang: <none>
2025-11-25T19:37:19.948 [DEBUG] [Thread-4531] [transport.py] [_log()] server lang: <none>
2025-11-25T19:37:19.948 [DEBUG] [Thread-4531] [transport.py] [_log()] kex follows: False
2025-11-25T19:37:19.948 [DEBUG] [Thread-4531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:37:19.948 [DEBUG] [Thread-4531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:37:19.948 [DEBUG] [Thread-4531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:37:19.948 [DEBUG] [Thread-4531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:37:19.948 [DEBUG] [Thread-4531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:37:19.948 [DEBUG] [Thread-4531] [transport.py] [_log()] Compression: none
2025-11-25T19:37:19.948 [DEBUG] [Thread-4531] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:37:19.965 [DEBUG] [Thread-4531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:37:19.966 [DEBUG] [Thread-4531] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:37:19.966 [DEBUG] [Thread-4531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:37:19.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:37:19.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:37:19.967 [DEBUG] [Thread-4531] [transport.py] [_log()] userauth is OK
2025-11-25T19:37:19.967 [DEBUG] [Thread-4531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:37:19.967 [DEBUG] [Thread-4531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:37:19.967 [DEBUG] [Thread-4531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:37:19.967 [DEBUG] [Thread-4531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:37:19.976 [INFO] [Thread-4531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:37:19.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:37:20.595 [DEBUG] [Thread-4531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:37:20.595 [DEBUG] [Thread-4531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:37:20.595 [DEBUG] [Thread-4531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:37:20.636 [DEBUG] [Thread-4531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:37:20.636 [DEBUG] [Thread-4531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:37:20.639 [DEBUG] [Thread-4531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:37:20.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:37:20.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:37:20.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:37:20.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:37:20.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:37:20.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:37:20.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:37:20.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.733780 -999.00  +23.90   7.60     16   -3.20 1 1 1 1 1   765    0 25.83 -64.98 ----- 6.2 7.6 278.6 9.5 24.5 -27.8 24.6 -27.3 24.2 -26.1 24.4 -27.0
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.733780
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:37:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:36:56', tmtdew=32.13, humidity=11.04, cloud=0.0, wind=13.25, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:36:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:37:20.659 [DEBUG] [Thread-4531] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:37:20.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:37:20.739 [DEBUG] [Thread-4534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:37:20.748 [DEBUG] [Thread-4535] [transport.py] [_log()] starting thread (client mode): 0x7378c5e0
2025-11-25T19:37:20.748 [DEBUG] [Thread-4535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:37:20.762 [DEBUG] [Thread-4535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:37:20.762 [INFO] [Thread-4535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] client lang: <none>
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] server lang: <none>
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] kex follows: False
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] Compression: none
2025-11-25T19:37:20.770 [DEBUG] [Thread-4535] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:37:20.826 [DEBUG] [Thread-4535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:37:20.826 [DEBUG] [Thread-4535] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:37:20.827 [DEBUG] [Thread-4535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:37:20.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:37:20.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:37:20.882 [DEBUG] [Thread-4535] [transport.py] [_log()] userauth is OK
2025-11-25T19:37:20.883 [DEBUG] [Thread-4535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:37:20.883 [DEBUG] [Thread-4535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:37:20.883 [DEBUG] [Thread-4535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:37:20.883 [DEBUG] [Thread-4535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:37:20.907 [INFO] [Thread-4535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:37:20.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:37:20.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:37:21.745 [DEBUG] [Thread-4535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:37:21.745 [DEBUG] [Thread-4535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:37:21.793 [DEBUG] [Thread-4535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:37:21.794 [DEBUG] [Thread-4535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:37:21.802 [DEBUG] [Thread-4535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:37:21.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:37:21.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:37:21.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:37:21.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:37:21.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:37:21.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:37:21.839 [DEBUG] [Thread-4535] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:37:35.780 [DEBUG] [Thread-4537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:37:50.814 [DEBUG] [Thread-4538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:37:51.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:37:51.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:37:51.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:37:52.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 37, 28), 32.07, 11.09, 0.0, 13.34, 23.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:37:52.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:37:28
2025-11-25T19:37:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:37:52.811 [DEBUG] [Thread-4539] [transport.py] [_log()] starting thread (client mode): 0x70d437f0
2025-11-25T19:37:52.811 [DEBUG] [Thread-4539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:37:52.831 [DEBUG] [Thread-4539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:37:52.831 [INFO] [Thread-4539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] client lang: <none>
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] server lang: <none>
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] kex follows: False
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] Compression: none
2025-11-25T19:37:52.833 [DEBUG] [Thread-4539] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:37:52.841 [DEBUG] [Thread-4539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:37:52.841 [DEBUG] [Thread-4539] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:37:52.841 [DEBUG] [Thread-4539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:37:52.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:37:52.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:37:52.842 [DEBUG] [Thread-4539] [transport.py] [_log()] userauth is OK
2025-11-25T19:37:52.842 [DEBUG] [Thread-4539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:37:52.842 [DEBUG] [Thread-4539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:37:52.842 [DEBUG] [Thread-4539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:37:52.842 [DEBUG] [Thread-4539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:37:52.858 [INFO] [Thread-4539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:37:52.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:37:53.415 [DEBUG] [Thread-4541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:37:53.626 [DEBUG] [Thread-4539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:37:53.626 [DEBUG] [Thread-4539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:37:53.626 [DEBUG] [Thread-4539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:37:53.667 [DEBUG] [Thread-4539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:37:53.667 [DEBUG] [Thread-4539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:37:53.669 [DEBUG] [Thread-4539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:37:53.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:37:53.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:37:53.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:37:53.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:37:53.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:37:53.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:37:53.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.734127 -999.00  +23.90   9.19     16   -3.20 1 1 1 1 1   754    0 26.13 -61.99 ----- 6.8 9.2 277.6 10.3 24.5 -28.0 24.6 -27.3 24.1 -25.9 24.4 -27.0
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.734127
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:37:28', tmtdew=32.07, humidity=11.09, cloud=0.0, wind=13.34, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:37:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:37:53.687 [DEBUG] [Thread-4539] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:37:53.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:37:53.774 [DEBUG] [Thread-4543] [transport.py] [_log()] starting thread (client mode): 0x737c43a0
2025-11-25T19:37:53.774 [DEBUG] [Thread-4543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:37:53.788 [DEBUG] [Thread-4543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:37:53.788 [INFO] [Thread-4543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] client lang: <none>
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] server lang: <none>
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] kex follows: False
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] Compression: none
2025-11-25T19:37:53.796 [DEBUG] [Thread-4543] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:37:53.852 [DEBUG] [Thread-4543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:37:53.852 [DEBUG] [Thread-4543] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:37:53.852 [DEBUG] [Thread-4543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:37:53.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:37:53.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:37:53.910 [DEBUG] [Thread-4543] [transport.py] [_log()] userauth is OK
2025-11-25T19:37:53.910 [DEBUG] [Thread-4543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:37:53.910 [DEBUG] [Thread-4543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:37:53.910 [DEBUG] [Thread-4543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:37:53.910 [DEBUG] [Thread-4543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:37:53.924 [INFO] [Thread-4543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:37:53.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:37:53.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:37:54.759 [DEBUG] [Thread-4543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:37:54.760 [DEBUG] [Thread-4543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:37:54.807 [DEBUG] [Thread-4543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:37:54.807 [DEBUG] [Thread-4543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:37:54.815 [DEBUG] [Thread-4543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:37:54.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:37: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')
2025-11-25T19:37:54.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:37:54.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:37:54.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:37:54.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:37:54.847 [DEBUG] [Thread-4543] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:38:00.734 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:38:00.735 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:38:05.854 [DEBUG] [Thread-4545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:38:20.905 [DEBUG] [Thread-4546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:38:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:38:24.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:38:24.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:38:25.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 37, 28), 32.02, 11.09, 0.0, 13.34, 23.67, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:38:25.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:37:28
2025-11-25T19:38:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:38:25.807 [DEBUG] [Thread-4547] [transport.py] [_log()] starting thread (client mode): 0x7374fa60
2025-11-25T19:38:25.807 [DEBUG] [Thread-4547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:38:25.826 [DEBUG] [Thread-4547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:38:25.827 [INFO] [Thread-4547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:38:25.830 [DEBUG] [Thread-4547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:38:25.830 [DEBUG] [Thread-4547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:38:25.830 [DEBUG] [Thread-4547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:38:25.830 [DEBUG] [Thread-4547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:38:25.830 [DEBUG] [Thread-4547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:38:25.830 [DEBUG] [Thread-4547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:38:25.830 [DEBUG] [Thread-4547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:38:25.830 [DEBUG] [Thread-4547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] client lang: <none>
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] server lang: <none>
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] kex follows: False
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] Compression: none
2025-11-25T19:38:25.831 [DEBUG] [Thread-4547] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:38:25.849 [DEBUG] [Thread-4547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:38:25.850 [DEBUG] [Thread-4547] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:38:25.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:38:25.851 [DEBUG] [Thread-4547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:38:25.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:38:25.892 [DEBUG] [Thread-4547] [transport.py] [_log()] userauth is OK
2025-11-25T19:38:25.893 [DEBUG] [Thread-4547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:38:25.893 [DEBUG] [Thread-4547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:38:25.893 [DEBUG] [Thread-4547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:38:25.893 [DEBUG] [Thread-4547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:38:25.921 [INFO] [Thread-4547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:38:25.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:38:26.573 [DEBUG] [Thread-4547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:38:26.573 [DEBUG] [Thread-4547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:38:26.574 [DEBUG] [Thread-4547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:38:26.614 [DEBUG] [Thread-4547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:38:26.614 [DEBUG] [Thread-4547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:38:26.618 [DEBUG] [Thread-4547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:38:26.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:38:26.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:38:26.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:38:26.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:38:26.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:38:26.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:38:26.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:38:26.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:38:26.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:38:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.734475 -999.00  +23.90   6.03     16   -3.20 1 1 1 1 1   743    0 25.71 -58.75 ----- 6.8 6.0 270.6 9.0 24.5 -27.8 24.5 -27.3 24.1 -26.1 24.4 -27.1
2025-11-25T19:38:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:38:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:38:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.734475
2025-11-25T19:38:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:38:26.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:38:26.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:38:26.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:38:26.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:38:26.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:37:28', tmtdew=32.02, humidity=11.09, cloud=0.0, wind=13.34, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:37:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:38:26.644 [DEBUG] [Thread-4547] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:38:26.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:38:26.739 [DEBUG] [Thread-4550] [transport.py] [_log()] starting thread (client mode): 0x70d2a920
2025-11-25T19:38:26.740 [DEBUG] [Thread-4550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:38:26.755 [DEBUG] [Thread-4550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:38:26.755 [INFO] [Thread-4550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:38:26.763 [DEBUG] [Thread-4550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:38:26.764 [DEBUG] [Thread-4550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:38:26.764 [DEBUG] [Thread-4550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:38:26.764 [DEBUG] [Thread-4550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:38:26.764 [DEBUG] [Thread-4550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:38:26.764 [DEBUG] [Thread-4550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:38:26.764 [DEBUG] [Thread-4550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:38:26.764 [DEBUG] [Thread-4550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:38:26.765 [DEBUG] [Thread-4550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:38:26.765 [DEBUG] [Thread-4550] [transport.py] [_log()] client lang: <none>
2025-11-25T19:38:26.765 [DEBUG] [Thread-4550] [transport.py] [_log()] server lang: <none>
2025-11-25T19:38:26.765 [DEBUG] [Thread-4550] [transport.py] [_log()] kex follows: False
2025-11-25T19:38:26.765 [DEBUG] [Thread-4550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:38:26.765 [DEBUG] [Thread-4550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:38:26.765 [DEBUG] [Thread-4550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:38:26.765 [DEBUG] [Thread-4550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:38:26.765 [DEBUG] [Thread-4550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:38:26.766 [DEBUG] [Thread-4550] [transport.py] [_log()] Compression: none
2025-11-25T19:38:26.766 [DEBUG] [Thread-4550] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:38:26.824 [DEBUG] [Thread-4550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:38:26.824 [DEBUG] [Thread-4550] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:38:26.825 [DEBUG] [Thread-4550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:38:26.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:38:26.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:38:26.883 [DEBUG] [Thread-4550] [transport.py] [_log()] userauth is OK
2025-11-25T19:38:26.883 [DEBUG] [Thread-4550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:38:26.884 [DEBUG] [Thread-4550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:38:26.884 [DEBUG] [Thread-4550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:38:26.884 [DEBUG] [Thread-4550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:38:26.903 [INFO] [Thread-4550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:38:26.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:38:26.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:38:27.749 [DEBUG] [Thread-4550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:38:27.749 [DEBUG] [Thread-4550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:38:27.796 [DEBUG] [Thread-4550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:38:27.796 [DEBUG] [Thread-4550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:38:27.805 [DEBUG] [Thread-4550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:38:27.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:38:27.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:38:27.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:38:27.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:38:27.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:38:27.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:38:27.839 [DEBUG] [Thread-4550] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:38:35.941 [DEBUG] [Thread-4552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:38:50.992 [DEBUG] [Thread-4553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:38:53.482 [DEBUG] [Thread-4554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:38:57.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:38:57.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:38:57.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:38:58.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 38, 32), 31.99, 11.11, 0.0, 12.83, 23.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:38:58.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:38:32
2025-11-25T19:38:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:38:58.777 [DEBUG] [Thread-4555] [transport.py] [_log()] starting thread (client mode): 0x7374fa60
2025-11-25T19:38:58.778 [DEBUG] [Thread-4555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:38:58.797 [DEBUG] [Thread-4555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:38:58.797 [INFO] [Thread-4555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] client lang: <none>
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] server lang: <none>
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] kex follows: False
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:38:58.800 [DEBUG] [Thread-4555] [transport.py] [_log()] Compression: none
2025-11-25T19:38:58.801 [DEBUG] [Thread-4555] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:38:58.819 [DEBUG] [Thread-4555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:38:58.820 [DEBUG] [Thread-4555] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:38:58.820 [DEBUG] [Thread-4555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:38:58.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:38:58.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:38:58.822 [DEBUG] [Thread-4555] [transport.py] [_log()] userauth is OK
2025-11-25T19:38:58.823 [DEBUG] [Thread-4555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:38:58.823 [DEBUG] [Thread-4555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:38:58.823 [DEBUG] [Thread-4555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:38:58.823 [DEBUG] [Thread-4555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:38:58.847 [INFO] [Thread-4555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:38:58.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:38:59.703 [DEBUG] [Thread-4555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:38:59.703 [DEBUG] [Thread-4555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:38:59.703 [DEBUG] [Thread-4555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:38:59.743 [DEBUG] [Thread-4555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:38:59.743 [DEBUG] [Thread-4555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:38:59.745 [DEBUG] [Thread-4555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:38:59.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:38:59.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:38:59.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:38:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:38:59.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:38:59.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:38:59.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.734822 -999.00  +23.90   6.83     16   -3.20 1 1 1 1 1   732    0 25.69 -58.51 ----- 11.4 6.8 280.4 10.2 24.4 -27.9 24.4 -27.3 24.1 -26.1 24.3 -27.1
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.734822
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:38:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:38:32', tmtdew=31.99, humidity=11.11, cloud=0.0, wind=12.83, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:38:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:38:59.756 [DEBUG] [Thread-4555] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:38:59.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:38:59.841 [DEBUG] [Thread-4558] [transport.py] [_log()] starting thread (client mode): 0x70d2af80
2025-11-25T19:38:59.841 [DEBUG] [Thread-4558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:38:59.856 [DEBUG] [Thread-4558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:38:59.857 [INFO] [Thread-4558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:38:59.864 [DEBUG] [Thread-4558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:38:59.864 [DEBUG] [Thread-4558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:38:59.864 [DEBUG] [Thread-4558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:38:59.864 [DEBUG] [Thread-4558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] client lang: <none>
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] server lang: <none>
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] kex follows: False
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:38:59.865 [DEBUG] [Thread-4558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:38:59.866 [DEBUG] [Thread-4558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:38:59.866 [DEBUG] [Thread-4558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:38:59.866 [DEBUG] [Thread-4558] [transport.py] [_log()] Compression: none
2025-11-25T19:38:59.866 [DEBUG] [Thread-4558] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:38:59.922 [DEBUG] [Thread-4558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:38:59.923 [DEBUG] [Thread-4558] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:38:59.923 [DEBUG] [Thread-4558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:38:59.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:38:59.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:38:59.980 [DEBUG] [Thread-4558] [transport.py] [_log()] userauth is OK
2025-11-25T19:38:59.980 [DEBUG] [Thread-4558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:38:59.980 [DEBUG] [Thread-4558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:38:59.980 [DEBUG] [Thread-4558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:38:59.980 [DEBUG] [Thread-4558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:38:59.999 [INFO] [Thread-4558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:38:59.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:39:00.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:39:00.843 [DEBUG] [Thread-4558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:39:00.843 [DEBUG] [Thread-4558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:39:00.892 [DEBUG] [Thread-4558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:39:00.892 [DEBUG] [Thread-4558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:39:00.901 [DEBUG] [Thread-4558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:39:00.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:39:00.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:39:00.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:39:00.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:39:00.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:39:00.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:39:00.936 [DEBUG] [Thread-4558] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:39:06.026 [DEBUG] [Thread-4560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:39:06.141 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:39:06.142 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:39:21.061 [DEBUG] [Thread-4561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:39:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:39:30.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:39:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:39:31.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 39, 4), 31.99, 11.11, 0.0, 13.09, 23.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:39:31.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:39:04
2025-11-25T19:39:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:39:31.851 [DEBUG] [Thread-4562] [transport.py] [_log()] starting thread (client mode): 0x70d1fca0
2025-11-25T19:39:31.851 [DEBUG] [Thread-4562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:39:31.871 [DEBUG] [Thread-4562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:39:31.871 [INFO] [Thread-4562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:39:31.874 [DEBUG] [Thread-4562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:39:31.874 [DEBUG] [Thread-4562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:39:31.874 [DEBUG] [Thread-4562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:39:31.874 [DEBUG] [Thread-4562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] client lang: <none>
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] server lang: <none>
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] kex follows: False
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] Compression: none
2025-11-25T19:39:31.875 [DEBUG] [Thread-4562] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:39:31.894 [DEBUG] [Thread-4562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:39:31.895 [DEBUG] [Thread-4562] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:39:31.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:39:31.896 [DEBUG] [Thread-4562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:39:31.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:39:31.936 [DEBUG] [Thread-4562] [transport.py] [_log()] userauth is OK
2025-11-25T19:39:31.936 [DEBUG] [Thread-4562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:39:31.936 [DEBUG] [Thread-4562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:39:31.936 [DEBUG] [Thread-4562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:39:31.937 [DEBUG] [Thread-4562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:39:31.960 [INFO] [Thread-4562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:39:31.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:39:32.565 [DEBUG] [Thread-4562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:39:32.566 [DEBUG] [Thread-4562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:39:32.566 [DEBUG] [Thread-4562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:39:32.607 [DEBUG] [Thread-4562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:39:32.607 [DEBUG] [Thread-4562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:39:32.610 [DEBUG] [Thread-4562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:39:32.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:39:32.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:39:32.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:39:32.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:39:32.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:39:32.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:39:32.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:39:32.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:39:32.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:39:32.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.735169 -999.00  +23.80  10.08     16   -3.30 1 1 1 1 1   719    0 26.22 -57.86 ----- 9.3 10.1 278.8 15.2 24.4 -27.9 24.4 -27.2 24.1 -26.1 24.3 -27.1
2025-11-25T19:39:32.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:39:32.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:39:32.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.735169
2025-11-25T19:39:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:39:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:39:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:39:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:39:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:39:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:39:04', tmtdew=31.99, humidity=11.11, cloud=0.0, wind=13.09, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:38:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:39:32.634 [DEBUG] [Thread-4562] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:39:32.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:39:32.737 [DEBUG] [Thread-4565] [transport.py] [_log()] starting thread (client mode): 0x70d1f8e0
2025-11-25T19:39:32.737 [DEBUG] [Thread-4565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:39:32.754 [DEBUG] [Thread-4565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:39:32.755 [INFO] [Thread-4565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] client lang: <none>
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] server lang: <none>
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] kex follows: False
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:39:32.762 [DEBUG] [Thread-4565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:39:32.763 [DEBUG] [Thread-4565] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:39:32.763 [DEBUG] [Thread-4565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:39:32.763 [DEBUG] [Thread-4565] [transport.py] [_log()] Compression: none
2025-11-25T19:39:32.763 [DEBUG] [Thread-4565] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:39:32.822 [DEBUG] [Thread-4565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:39:32.822 [DEBUG] [Thread-4565] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:39:32.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:39:32.823 [DEBUG] [Thread-4565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:39:32.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:39:32.879 [DEBUG] [Thread-4565] [transport.py] [_log()] userauth is OK
2025-11-25T19:39:32.881 [DEBUG] [Thread-4565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:39:32.881 [DEBUG] [Thread-4565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:39:32.881 [DEBUG] [Thread-4565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:39:32.882 [DEBUG] [Thread-4565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:39:32.899 [INFO] [Thread-4565] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:39:32.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:39:32.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:39:33.787 [DEBUG] [Thread-4565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:39:33.787 [DEBUG] [Thread-4565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:39:33.836 [DEBUG] [Thread-4565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:39:33.836 [DEBUG] [Thread-4565] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:39:33.845 [DEBUG] [Thread-4565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:39:33.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:39: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')
2025-11-25T19:39: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
2025-11-25T19:39:33.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:39:33.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:39:33.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:39:33.885 [DEBUG] [Thread-4565] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:39:36.097 [DEBUG] [Thread-4567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:39:51.150 [DEBUG] [Thread-4568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:39:53.547 [DEBUG] [Thread-4569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:40:03.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:40:03.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:40:03.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:40:04.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 39, 36), 32.0, 11.09, 0.0, 12.05, 23.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:40:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:39:36
2025-11-25T19:40:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:40:04.841 [DEBUG] [Thread-4570] [transport.py] [_log()] starting thread (client mode): 0x737c5ea0
2025-11-25T19:40:04.841 [DEBUG] [Thread-4570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:40:04.861 [DEBUG] [Thread-4570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:40:04.861 [INFO] [Thread-4570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] client lang: <none>
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] server lang: <none>
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] kex follows: False
2025-11-25T19:40:04.864 [DEBUG] [Thread-4570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:40:04.865 [DEBUG] [Thread-4570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:40:04.865 [DEBUG] [Thread-4570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:40:04.865 [DEBUG] [Thread-4570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:40:04.865 [DEBUG] [Thread-4570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:40:04.865 [DEBUG] [Thread-4570] [transport.py] [_log()] Compression: none
2025-11-25T19:40:04.865 [DEBUG] [Thread-4570] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:40:04.882 [DEBUG] [Thread-4570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:40:04.883 [DEBUG] [Thread-4570] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:40:04.884 [DEBUG] [Thread-4570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:40:04.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:40:04.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:40:04.885 [DEBUG] [Thread-4570] [transport.py] [_log()] userauth is OK
2025-11-25T19:40:04.886 [DEBUG] [Thread-4570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:40:04.886 [DEBUG] [Thread-4570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:40:04.886 [DEBUG] [Thread-4570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:40:04.886 [DEBUG] [Thread-4570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:40:04.902 [INFO] [Thread-4570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:40:04.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:40:05.888 [DEBUG] [Thread-4570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:40:05.888 [DEBUG] [Thread-4570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:40:05.889 [DEBUG] [Thread-4570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:40:05.929 [DEBUG] [Thread-4570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:40:05.929 [DEBUG] [Thread-4570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:40:05.932 [DEBUG] [Thread-4570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:40:05.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:40:05.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:40:05.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:40:05.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:40:05.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:40:05.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:40:05.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:40:05.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:40:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:40:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.735516 -999.00  +23.80  10.54     16   -3.20 1 1 1 1 1   706    0 26.04 -58.91 ----- 8.4 10.5 274.4 13.2 24.4 -27.9 24.4 -27.3 24.1 -25.9 24.2 -27.0
2025-11-25T19:40:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:40:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:40:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.735516
2025-11-25T19:40:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:40:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:40:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:40:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:40:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:40:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:39:36', tmtdew=32.0, humidity=11.09, cloud=0.0, wind=12.05, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:39:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:40:05.963 [DEBUG] [Thread-4570] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:40:06.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:40:06.063 [DEBUG] [Thread-4573] [transport.py] [_log()] starting thread (client mode): 0x70d1e410
2025-11-25T19:40:06.063 [DEBUG] [Thread-4573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:40:06.077 [DEBUG] [Thread-4573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:40:06.078 [INFO] [Thread-4573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:40:06.085 [DEBUG] [Thread-4573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:40:06.085 [DEBUG] [Thread-4573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] client lang: <none>
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] server lang: <none>
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] kex follows: False
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:40:06.086 [DEBUG] [Thread-4573] [transport.py] [_log()] Compression: none
2025-11-25T19:40:06.087 [DEBUG] [Thread-4573] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:40:06.142 [DEBUG] [Thread-4573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:40:06.143 [DEBUG] [Thread-4573] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:40:06.143 [DEBUG] [Thread-4573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:40:06.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:40:06.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:40:06.190 [DEBUG] [Thread-4575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:40:06.198 [DEBUG] [Thread-4573] [transport.py] [_log()] userauth is OK
2025-11-25T19:40:06.199 [DEBUG] [Thread-4573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:40:06.199 [DEBUG] [Thread-4573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:40:06.199 [DEBUG] [Thread-4573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:40:06.199 [DEBUG] [Thread-4573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:40:06.222 [INFO] [Thread-4573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:40:06.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:40:06.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:40:07.044 [DEBUG] [Thread-4573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:40:07.044 [DEBUG] [Thread-4573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:40:07.093 [DEBUG] [Thread-4573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:40:07.094 [DEBUG] [Thread-4573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:40:07.103 [DEBUG] [Thread-4573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:40:07.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:40:07.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:40:07.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:40:07.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:40:07.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:40:07.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:40:07.140 [DEBUG] [Thread-4573] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:40:13.979 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:40:13.981 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:40:21.241 [DEBUG] [Thread-4576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:40:36.271 [DEBUG] [Thread-4577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:40:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:40:37.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:40:37.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:40:37.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 40, 8), 31.97, 11.13, 0.0, 13.02, 23.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:40:37.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:40:08
2025-11-25T19:40:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:40:38.079 [DEBUG] [Thread-4578] [transport.py] [_log()] starting thread (client mode): 0x70d1c820
2025-11-25T19:40:38.080 [DEBUG] [Thread-4578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:40:38.098 [DEBUG] [Thread-4578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:40:38.098 [INFO] [Thread-4578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] client lang: <none>
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] server lang: <none>
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] kex follows: False
2025-11-25T19:40:38.100 [DEBUG] [Thread-4578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:40:38.101 [DEBUG] [Thread-4578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:40:38.101 [DEBUG] [Thread-4578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:40:38.101 [DEBUG] [Thread-4578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:40:38.101 [DEBUG] [Thread-4578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:40:38.101 [DEBUG] [Thread-4578] [transport.py] [_log()] Compression: none
2025-11-25T19:40:38.101 [DEBUG] [Thread-4578] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:40:38.109 [DEBUG] [Thread-4578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:40:38.109 [DEBUG] [Thread-4578] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:40:38.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:40:38.110 [DEBUG] [Thread-4578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:40:38.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:40:38.111 [DEBUG] [Thread-4578] [transport.py] [_log()] userauth is OK
2025-11-25T19:40:38.111 [DEBUG] [Thread-4578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:40:38.112 [DEBUG] [Thread-4578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:40:38.112 [DEBUG] [Thread-4578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:40:38.112 [DEBUG] [Thread-4578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:40:38.135 [INFO] [Thread-4578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:40:38.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:40:38.731 [DEBUG] [Thread-4578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:40:38.732 [DEBUG] [Thread-4578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:40:38.732 [DEBUG] [Thread-4578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:40:38.773 [DEBUG] [Thread-4578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:40:38.773 [DEBUG] [Thread-4578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:40:38.776 [DEBUG] [Thread-4578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:40:38.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:40:38.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:40:38.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:40:38.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:40:38.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:40:38.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:40:38.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:40:38.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:40:38.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:40:38.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.735863 -999.00  +23.80  10.74     16   -3.20 1 1 1 1 1   692    0 26.27 -56.64 ----- 11.1 10.7 280.6 14.7 24.4 -27.9 24.4 -27.2 24.0 -26.1 24.2 -26.9
2025-11-25T19:40:38.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:40:38.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:40:38.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.735863
2025-11-25T19:40:38.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:40:38.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:40:38.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:40:38.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:40:38.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:40:38.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:40:08', tmtdew=31.97, humidity=11.13, cloud=0.0, wind=13.02, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:39:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:40:38.800 [DEBUG] [Thread-4578] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:40:38.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:40:38.891 [DEBUG] [Thread-4581] [transport.py] [_log()] starting thread (client mode): 0x737c4d00
2025-11-25T19:40:38.891 [DEBUG] [Thread-4581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:40:38.906 [DEBUG] [Thread-4581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:40:38.906 [INFO] [Thread-4581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:40:38.913 [DEBUG] [Thread-4581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] client lang: <none>
2025-11-25T19:40:38.914 [DEBUG] [Thread-4581] [transport.py] [_log()] server lang: <none>
2025-11-25T19:40:38.915 [DEBUG] [Thread-4581] [transport.py] [_log()] kex follows: False
2025-11-25T19:40:38.915 [DEBUG] [Thread-4581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:40:38.915 [DEBUG] [Thread-4581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:40:38.915 [DEBUG] [Thread-4581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:40:38.915 [DEBUG] [Thread-4581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:40:38.915 [DEBUG] [Thread-4581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:40:38.915 [DEBUG] [Thread-4581] [transport.py] [_log()] Compression: none
2025-11-25T19:40:38.915 [DEBUG] [Thread-4581] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:40:38.971 [DEBUG] [Thread-4581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:40:38.972 [DEBUG] [Thread-4581] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:40:38.973 [DEBUG] [Thread-4581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:40:38.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:40:38.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:40:39.027 [DEBUG] [Thread-4581] [transport.py] [_log()] userauth is OK
2025-11-25T19:40:39.028 [DEBUG] [Thread-4581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:40:39.028 [DEBUG] [Thread-4581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:40:39.028 [DEBUG] [Thread-4581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:40:39.028 [DEBUG] [Thread-4581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:40:39.048 [INFO] [Thread-4581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:40:39.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:40:39.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:40:39.893 [DEBUG] [Thread-4581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:40:39.894 [DEBUG] [Thread-4581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:40:39.942 [DEBUG] [Thread-4581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:40:39.942 [DEBUG] [Thread-4581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:40:39.951 [DEBUG] [Thread-4581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:40:39.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:40:39.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:40:39.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:40:39.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:40:39.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:40:39.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:40:39.987 [DEBUG] [Thread-4581] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:40:51.305 [DEBUG] [Thread-4583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:40:53.602 [DEBUG] [Thread-4584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:41:06.355 [DEBUG] [Thread-4585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:41:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:41:09.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:41:10.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:41:10.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 40, 40), 31.91, 11.14, 0.0, 12.48, 23.6, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:41:10.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:40:40
2025-11-25T19:41:10.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:41:10.931 [DEBUG] [Thread-4586] [transport.py] [_log()] starting thread (client mode): 0x70d0de40
2025-11-25T19:41:10.931 [DEBUG] [Thread-4586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:41:10.951 [DEBUG] [Thread-4586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:41:10.951 [INFO] [Thread-4586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:41:10.954 [DEBUG] [Thread-4586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:41:10.954 [DEBUG] [Thread-4586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:41:10.954 [DEBUG] [Thread-4586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:41:10.954 [DEBUG] [Thread-4586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:41:10.954 [DEBUG] [Thread-4586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:41:10.954 [DEBUG] [Thread-4586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:41:10.954 [DEBUG] [Thread-4586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] client lang: <none>
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] server lang: <none>
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] kex follows: False
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] Compression: none
2025-11-25T19:41:10.955 [DEBUG] [Thread-4586] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:41:10.972 [DEBUG] [Thread-4586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:41:10.973 [DEBUG] [Thread-4586] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:41:10.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:41:10.974 [DEBUG] [Thread-4586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:41:10.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:41:11.017 [DEBUG] [Thread-4586] [transport.py] [_log()] userauth is OK
2025-11-25T19:41:11.017 [DEBUG] [Thread-4586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:41:11.017 [DEBUG] [Thread-4586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:41:11.017 [DEBUG] [Thread-4586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:41:11.017 [DEBUG] [Thread-4586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:41:11.037 [INFO] [Thread-4586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:41:11.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:41:11.790 [DEBUG] [Thread-4586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:41:11.791 [DEBUG] [Thread-4586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:41:11.791 [DEBUG] [Thread-4586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:41:11.831 [DEBUG] [Thread-4586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:41:11.832 [DEBUG] [Thread-4586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:41:11.834 [DEBUG] [Thread-4586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:41:11.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:41:11.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:41:11.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:41:11.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:41:11.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:41:11.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:41:11.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:41:11.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.736558 -999.00  +23.70  10.30     16   -3.30 1 1 1 1 1   662    0 25.91 -60.00 ----- 9.5 10.3 271.6 13.5 24.3 -27.8 24.3 -27.1 24.0 -26.0 24.1 -26.9
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.736558
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:41:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:40:40', tmtdew=31.91, humidity=11.14, cloud=0.0, wind=12.48, temperature=23.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:40:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:41:11.850 [DEBUG] [Thread-4586] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:41:11.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:41:11.936 [DEBUG] [Thread-4589] [transport.py] [_log()] starting thread (client mode): 0x70d54520
2025-11-25T19:41:11.936 [DEBUG] [Thread-4589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:41:11.951 [DEBUG] [Thread-4589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:41:11.951 [INFO] [Thread-4589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:41:11.958 [DEBUG] [Thread-4589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] client lang: <none>
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] server lang: <none>
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] kex follows: False
2025-11-25T19:41:11.959 [DEBUG] [Thread-4589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:41:11.960 [DEBUG] [Thread-4589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:41:11.960 [DEBUG] [Thread-4589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:41:11.960 [DEBUG] [Thread-4589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:41:11.960 [DEBUG] [Thread-4589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:41:11.960 [DEBUG] [Thread-4589] [transport.py] [_log()] Compression: none
2025-11-25T19:41:11.960 [DEBUG] [Thread-4589] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:41:12.018 [DEBUG] [Thread-4589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:41:12.019 [DEBUG] [Thread-4589] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:41:12.019 [DEBUG] [Thread-4589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:41:12.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:41:12.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:41:12.075 [DEBUG] [Thread-4589] [transport.py] [_log()] userauth is OK
2025-11-25T19:41:12.076 [DEBUG] [Thread-4589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:41:12.076 [DEBUG] [Thread-4589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:41:12.076 [DEBUG] [Thread-4589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:41:12.076 [DEBUG] [Thread-4589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:41:12.099 [INFO] [Thread-4589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:41:12.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:41:12.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:41:12.945 [DEBUG] [Thread-4589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:41:12.945 [DEBUG] [Thread-4589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:41:12.993 [DEBUG] [Thread-4589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:41:12.993 [DEBUG] [Thread-4589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:41:13.001 [DEBUG] [Thread-4589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:41:13.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:41:13.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:41:13.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:41:13.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:41:13.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:41:13.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:41:13.032 [DEBUG] [Thread-4589] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:41:19.114 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:41:19.115 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:41:21.389 [DEBUG] [Thread-4591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:41:36.436 [DEBUG] [Thread-4592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:41:43.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:41:43.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:41:43.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:41:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 41, 12), 31.96, 11.08, 0.0, 11.77, 23.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:41:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:41:12
2025-11-25T19:41:43.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:41:43.969 [DEBUG] [Thread-4593] [transport.py] [_log()] starting thread (client mode): 0x7374efb0
2025-11-25T19:41:43.969 [DEBUG] [Thread-4593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:41:43.988 [DEBUG] [Thread-4593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:41:43.989 [INFO] [Thread-4593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] client lang: <none>
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] server lang: <none>
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] kex follows: False
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] Compression: none
2025-11-25T19:41:43.992 [DEBUG] [Thread-4593] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:41:44.001 [DEBUG] [Thread-4593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:41:44.001 [DEBUG] [Thread-4593] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:41:44.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:41:44.002 [DEBUG] [Thread-4593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:41:44.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:41:44.004 [DEBUG] [Thread-4593] [transport.py] [_log()] userauth is OK
2025-11-25T19:41:44.004 [DEBUG] [Thread-4593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:41:44.004 [DEBUG] [Thread-4593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:41:44.004 [DEBUG] [Thread-4593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:41:44.004 [DEBUG] [Thread-4593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:41:44.028 [INFO] [Thread-4593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:41:44.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:41:44.668 [DEBUG] [Thread-4593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:41:44.669 [DEBUG] [Thread-4593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:41:44.669 [DEBUG] [Thread-4593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:41:44.709 [DEBUG] [Thread-4593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:41:44.709 [DEBUG] [Thread-4593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:41:44.711 [DEBUG] [Thread-4593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:41:44.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:41:44.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:41:44.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:41:44.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:41:44.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:41:44.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:41:44.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.736905 -999.00  +23.70  11.11     16   -3.20 1 1 1 1 1   646    0 26.06 -59.58 ----- 11.5 11.1 270.2 13.5 24.2 -27.8 24.3 -27.1 23.9 -25.8 24.1 -26.9
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.736905
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:41:12', tmtdew=31.96, humidity=11.08, cloud=0.0, wind=11.77, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:41:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:41:44.732 [DEBUG] [Thread-4593] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:41:44.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:41:44.816 [DEBUG] [Thread-4596] [transport.py] [_log()] starting thread (client mode): 0x7374cd30
2025-11-25T19:41:44.816 [DEBUG] [Thread-4596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:41:44.834 [DEBUG] [Thread-4596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:41:44.834 [INFO] [Thread-4596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:41:44.841 [DEBUG] [Thread-4596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:41:44.841 [DEBUG] [Thread-4596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:41:44.841 [DEBUG] [Thread-4596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:41:44.841 [DEBUG] [Thread-4596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:41:44.841 [DEBUG] [Thread-4596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:41:44.841 [DEBUG] [Thread-4596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:41:44.841 [DEBUG] [Thread-4596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:41:44.841 [DEBUG] [Thread-4596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] client lang: <none>
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] server lang: <none>
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] kex follows: False
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] Compression: none
2025-11-25T19:41:44.842 [DEBUG] [Thread-4596] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:41:44.901 [DEBUG] [Thread-4596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:41:44.901 [DEBUG] [Thread-4596] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:41:44.902 [DEBUG] [Thread-4596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:41:44.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:41:44.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:41:44.963 [DEBUG] [Thread-4596] [transport.py] [_log()] userauth is OK
2025-11-25T19:41:44.963 [DEBUG] [Thread-4596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:41:44.963 [DEBUG] [Thread-4596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:41:44.963 [DEBUG] [Thread-4596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:41:44.963 [DEBUG] [Thread-4596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:41:44.979 [INFO] [Thread-4596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:41:44.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:41:44.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:41:45.796 [DEBUG] [Thread-4596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:41:45.796 [DEBUG] [Thread-4596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:41:45.844 [DEBUG] [Thread-4596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:41:45.844 [DEBUG] [Thread-4596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:41:45.852 [DEBUG] [Thread-4596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:41:45.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:41:45.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:41:45.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:41:45.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:41:45.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:41:45.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:41:45.884 [DEBUG] [Thread-4596] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:41:51.466 [DEBUG] [Thread-4598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:41:53.657 [DEBUG] [Thread-4599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:42:06.522 [DEBUG] [Thread-4600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:42:15.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:42:15.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:42:15.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:42:16.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 41, 44), 31.93, 11.11, 0.0, 11.79, 23.55, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:42:16.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:41:44
2025-11-25T19:42:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:42:16.840 [DEBUG] [Thread-4601] [transport.py] [_log()] starting thread (client mode): 0x70d55ba0
2025-11-25T19:42:16.840 [DEBUG] [Thread-4601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:42:16.861 [DEBUG] [Thread-4601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:42:16.861 [INFO] [Thread-4601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] client lang: <none>
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] server lang: <none>
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] kex follows: False
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] Compression: none
2025-11-25T19:42:16.864 [DEBUG] [Thread-4601] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:42:16.882 [DEBUG] [Thread-4601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:42:16.882 [DEBUG] [Thread-4601] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:42:16.883 [DEBUG] [Thread-4601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:42:16.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:42:16.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:42:16.883 [DEBUG] [Thread-4601] [transport.py] [_log()] userauth is OK
2025-11-25T19:42:16.884 [DEBUG] [Thread-4601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:42:16.884 [DEBUG] [Thread-4601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:42:16.884 [DEBUG] [Thread-4601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:42:16.884 [DEBUG] [Thread-4601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:42:16.894 [INFO] [Thread-4601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:42:16.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:42:17.686 [DEBUG] [Thread-4601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:42:17.686 [DEBUG] [Thread-4601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:42:17.686 [DEBUG] [Thread-4601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:42:17.728 [DEBUG] [Thread-4601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:42:17.728 [DEBUG] [Thread-4601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:42:17.732 [DEBUG] [Thread-4601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:42:17.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:42:17.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:42:17.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:42:17.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:42:17.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:42:17.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:42:17.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:42:17.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:42:17.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:42:17.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.737252 -999.00  +23.70   8.21     16   -3.30 1 1 1 1 1   630    0 25.43 -65.41 ----- 6.4 8.2 273.2 12.7 24.2 -27.7 24.2 -27.1 23.9 -25.8 24.1 -27.0
2025-11-25T19:42:17.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:42:17.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:42:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.737252
2025-11-25T19:42:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:42:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:42:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:42:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:42:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:42:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:41:44', tmtdew=31.93, humidity=11.11, cloud=0.0, wind=11.79, temperature=23.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:41:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:42:17.758 [DEBUG] [Thread-4601] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:42:17.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:42:17.856 [DEBUG] [Thread-4604] [transport.py] [_log()] starting thread (client mode): 0x70d55bd0
2025-11-25T19:42:17.856 [DEBUG] [Thread-4604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:42:17.870 [DEBUG] [Thread-4604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:42:17.871 [INFO] [Thread-4604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] client lang: <none>
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] server lang: <none>
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] kex follows: False
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:42:17.882 [DEBUG] [Thread-4604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:42:17.883 [DEBUG] [Thread-4604] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:42:17.883 [DEBUG] [Thread-4604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:42:17.883 [DEBUG] [Thread-4604] [transport.py] [_log()] Compression: none
2025-11-25T19:42:17.883 [DEBUG] [Thread-4604] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:42:17.939 [DEBUG] [Thread-4604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:42:17.940 [DEBUG] [Thread-4604] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:42:17.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:42:17.940 [DEBUG] [Thread-4604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:42:17.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:42:17.996 [DEBUG] [Thread-4604] [transport.py] [_log()] userauth is OK
2025-11-25T19:42:17.996 [DEBUG] [Thread-4604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:42:17.996 [DEBUG] [Thread-4604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:42:17.996 [DEBUG] [Thread-4604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:42:17.996 [DEBUG] [Thread-4604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:42:18.016 [INFO] [Thread-4604] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:42:18.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:42:18.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:42:18.862 [DEBUG] [Thread-4604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:42:18.862 [DEBUG] [Thread-4604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:42:18.909 [DEBUG] [Thread-4604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:42:18.909 [DEBUG] [Thread-4604] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:42:18.917 [DEBUG] [Thread-4604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:42:18.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:42:18.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:42:18.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:42:18.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:42:18.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:42:18.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:42:18.948 [DEBUG] [Thread-4604] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:42:21.554 [DEBUG] [Thread-4606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:42:23.532 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:42:23.533 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:42:36.604 [DEBUG] [Thread-4607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:42:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:42:48.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:42:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:42:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 42, 16), 31.9, 11.14, 0.0, 12.44, 23.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:42:49.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:42:16
2025-11-25T19:42:49.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:42:49.955 [DEBUG] [Thread-4608] [transport.py] [_log()] starting thread (client mode): 0x70d0f250
2025-11-25T19:42:49.955 [DEBUG] [Thread-4608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:42:49.975 [DEBUG] [Thread-4608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:42:49.975 [INFO] [Thread-4608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:42:49.978 [DEBUG] [Thread-4608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:42:49.978 [DEBUG] [Thread-4608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] client lang: <none>
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] server lang: <none>
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] kex follows: False
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] Compression: none
2025-11-25T19:42:49.979 [DEBUG] [Thread-4608] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:42:49.995 [DEBUG] [Thread-4608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:42:49.995 [DEBUG] [Thread-4608] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:42:49.995 [DEBUG] [Thread-4608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:42:49.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:42:49.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:42:50.040 [DEBUG] [Thread-4608] [transport.py] [_log()] userauth is OK
2025-11-25T19:42:50.040 [DEBUG] [Thread-4608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:42:50.040 [DEBUG] [Thread-4608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:42:50.040 [DEBUG] [Thread-4608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:42:50.040 [DEBUG] [Thread-4608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:42:50.055 [INFO] [Thread-4608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:42:50.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:42:50.698 [DEBUG] [Thread-4608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:42:50.699 [DEBUG] [Thread-4608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:42:50.699 [DEBUG] [Thread-4608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:42:50.739 [DEBUG] [Thread-4608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:42:50.740 [DEBUG] [Thread-4608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:42:50.742 [DEBUG] [Thread-4608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:42:50.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:42:50.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:42:50.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:42:50.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:42:50.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:42:50.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:42:50.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:42:50.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:42:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:42:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.737600 -999.00  +23.70   9.97     16   -3.20 1 1 1 1 1   612    0 25.98 -67.14 ----- 6.3 10.0 264.4 10.6 24.2 -27.7 24.2 -27.0 23.9 -25.8 24.0 -26.8
2025-11-25T19:42:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:42:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:42:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.737600
2025-11-25T19:42:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:42:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:42:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:42:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:42:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:42:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:42:16', tmtdew=31.9, humidity=11.14, cloud=0.0, wind=12.44, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:42:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:42:50.762 [DEBUG] [Thread-4608] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:42:50.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:42:50.847 [DEBUG] [Thread-4611] [transport.py] [_log()] starting thread (client mode): 0x737c6740
2025-11-25T19:42:50.847 [DEBUG] [Thread-4611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:42:50.861 [DEBUG] [Thread-4611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:42:50.861 [INFO] [Thread-4611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:42:50.869 [DEBUG] [Thread-4611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:42:50.869 [DEBUG] [Thread-4611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:42:50.869 [DEBUG] [Thread-4611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:42:50.869 [DEBUG] [Thread-4611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:42:50.869 [DEBUG] [Thread-4611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:42:50.869 [DEBUG] [Thread-4611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:42:50.869 [DEBUG] [Thread-4611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:42:50.869 [DEBUG] [Thread-4611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] client lang: <none>
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] server lang: <none>
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] kex follows: False
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] Compression: none
2025-11-25T19:42:50.870 [DEBUG] [Thread-4611] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:42:50.925 [DEBUG] [Thread-4611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:42:50.925 [DEBUG] [Thread-4611] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:42:50.925 [DEBUG] [Thread-4611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:42:50.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:42:50.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:42:50.983 [DEBUG] [Thread-4611] [transport.py] [_log()] userauth is OK
2025-11-25T19:42:50.983 [DEBUG] [Thread-4611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:42:50.983 [DEBUG] [Thread-4611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:42:50.983 [DEBUG] [Thread-4611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:42:50.983 [DEBUG] [Thread-4611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:42:50.997 [INFO] [Thread-4611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:42:50.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:42:50.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:42:51.641 [DEBUG] [Thread-4613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:42:51.885 [DEBUG] [Thread-4611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:42:51.885 [DEBUG] [Thread-4611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:42:51.935 [DEBUG] [Thread-4611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:42:51.935 [DEBUG] [Thread-4611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:42:51.942 [DEBUG] [Thread-4611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:42:51.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:42:51.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:42:51.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:42:51.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:42:51.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:42:51.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:42:51.973 [DEBUG] [Thread-4611] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:42:53.708 [DEBUG] [Thread-4614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:43:06.685 [DEBUG] [Thread-4615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:43:21.726 [DEBUG] [Thread-4616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:43:21.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:43:21.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:43:21.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:43:22.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 42, 50), 31.83, 11.16, 0.0, 13.0, 23.5, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:43:22.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:42:50
2025-11-25T19:43:22.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:43:22.952 [DEBUG] [Thread-4617] [transport.py] [_log()] starting thread (client mode): 0x737c7730
2025-11-25T19:43:22.952 [DEBUG] [Thread-4617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:43:22.973 [DEBUG] [Thread-4617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:43:22.973 [INFO] [Thread-4617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:43:22.976 [DEBUG] [Thread-4617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:43:22.976 [DEBUG] [Thread-4617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:43:22.976 [DEBUG] [Thread-4617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:43:22.976 [DEBUG] [Thread-4617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:43:22.976 [DEBUG] [Thread-4617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:43:22.976 [DEBUG] [Thread-4617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:43:22.976 [DEBUG] [Thread-4617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] client lang: <none>
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] server lang: <none>
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] kex follows: False
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] Compression: none
2025-11-25T19:43:22.977 [DEBUG] [Thread-4617] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:43:22.993 [DEBUG] [Thread-4617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:43:22.993 [DEBUG] [Thread-4617] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:43:22.993 [DEBUG] [Thread-4617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:43:22.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:43:22.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:43:22.994 [DEBUG] [Thread-4617] [transport.py] [_log()] userauth is OK
2025-11-25T19:43:22.994 [DEBUG] [Thread-4617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:43:22.994 [DEBUG] [Thread-4617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:43:22.994 [DEBUG] [Thread-4617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:43:22.994 [DEBUG] [Thread-4617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:43:23.005 [INFO] [Thread-4617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:43:23.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:43:23.825 [DEBUG] [Thread-4617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:43:23.825 [DEBUG] [Thread-4617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:43:23.825 [DEBUG] [Thread-4617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:43:23.866 [DEBUG] [Thread-4617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:43:23.866 [DEBUG] [Thread-4617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:43:23.868 [DEBUG] [Thread-4617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:43:23.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:43:23.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:43:23.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:43:23.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:43:23.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:43:23.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:43:23.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.737947 -999.00  +23.60   5.62     16   -3.30 1 1 1 1 1   594    0 25.64 -67.84 ----- 5.7 5.6 273.4 8.0 24.1 -27.7 24.2 -27.1 23.8 -25.7 24.0 -26.8
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.737947
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:43:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:42:50', tmtdew=31.83, humidity=11.16, cloud=0.0, wind=13.0, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:42:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:43:23.884 [DEBUG] [Thread-4617] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:43:23.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:43:23.967 [DEBUG] [Thread-4620] [transport.py] [_log()] starting thread (client mode): 0x70d01e10
2025-11-25T19:43:23.967 [DEBUG] [Thread-4620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:43:23.982 [DEBUG] [Thread-4620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:43:23.982 [INFO] [Thread-4620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] client lang: <none>
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] server lang: <none>
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] kex follows: False
2025-11-25T19:43:23.989 [DEBUG] [Thread-4620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:43:23.990 [DEBUG] [Thread-4620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:43:23.990 [DEBUG] [Thread-4620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:43:23.990 [DEBUG] [Thread-4620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:43:23.990 [DEBUG] [Thread-4620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:43:23.990 [DEBUG] [Thread-4620] [transport.py] [_log()] Compression: none
2025-11-25T19:43:23.990 [DEBUG] [Thread-4620] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:43:24.050 [DEBUG] [Thread-4620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:43:24.050 [DEBUG] [Thread-4620] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:43:24.050 [DEBUG] [Thread-4620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:43:24.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:43:24.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:43:24.107 [DEBUG] [Thread-4620] [transport.py] [_log()] userauth is OK
2025-11-25T19:43:24.107 [DEBUG] [Thread-4620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:43:24.107 [DEBUG] [Thread-4620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:43:24.107 [DEBUG] [Thread-4620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:43:24.107 [DEBUG] [Thread-4620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:43:24.120 [INFO] [Thread-4620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:43:24.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:43:24.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:43:24.992 [DEBUG] [Thread-4620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:43:24.992 [DEBUG] [Thread-4620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:43:25.039 [DEBUG] [Thread-4620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:43:25.040 [DEBUG] [Thread-4620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:43:25.048 [DEBUG] [Thread-4620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:43:25.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:43:25.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:43:25.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:43:25.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:43:25.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:43:25.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:43:25.082 [DEBUG] [Thread-4620] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:43:29.052 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:43:29.053 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:43:36.754 [DEBUG] [Thread-4622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:43:51.806 [DEBUG] [Thread-4623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:43:53.765 [DEBUG] [Thread-4624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:43:55.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:43:55.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:43:55.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:43:55.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 43, 22), 31.77, 11.19, 0.0, 11.79, 23.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:43:55.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:43:22
2025-11-25T19:43:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:43:56.092 [DEBUG] [Thread-4625] [transport.py] [_log()] starting thread (client mode): 0x70d1ffa0
2025-11-25T19:43:56.092 [DEBUG] [Thread-4625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:43:56.112 [DEBUG] [Thread-4625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:43:56.112 [INFO] [Thread-4625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:43:56.115 [DEBUG] [Thread-4625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] client lang: <none>
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] server lang: <none>
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] kex follows: False
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] Compression: none
2025-11-25T19:43:56.116 [DEBUG] [Thread-4625] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:43:56.134 [DEBUG] [Thread-4625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:43:56.134 [DEBUG] [Thread-4625] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:43:56.135 [DEBUG] [Thread-4625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:43:56.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:43:56.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:43:56.135 [DEBUG] [Thread-4625] [transport.py] [_log()] userauth is OK
2025-11-25T19:43:56.135 [DEBUG] [Thread-4625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:43:56.135 [DEBUG] [Thread-4625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:43:56.135 [DEBUG] [Thread-4625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:43:56.135 [DEBUG] [Thread-4625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:43:56.150 [INFO] [Thread-4625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:43:56.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:43:56.750 [DEBUG] [Thread-4625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:43:56.751 [DEBUG] [Thread-4625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:43:56.751 [DEBUG] [Thread-4625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:43:56.792 [DEBUG] [Thread-4625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:43:56.792 [DEBUG] [Thread-4625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:43:56.795 [DEBUG] [Thread-4625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:43:56.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:43:56.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:43:56.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:43:56.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:43:56.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:43:56.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:43:56.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:43:56.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:43:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:43:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.738294 -999.00  +23.60   3.79     16   -3.30 1 1 1 1 1   576    0 25.31 -70.15 ----- 4.8 3.8 286.0 8.0 24.1 -27.7 24.1 -27.0 23.8 -25.8 24.0 -26.8
2025-11-25T19:43:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:43:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:43:56.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.738294
2025-11-25T19:43:56.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:43:56.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:43:56.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:43:56.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:43:56.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:43:56.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:43:22', tmtdew=31.77, humidity=11.19, cloud=0.0, wind=11.79, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:43:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:43:56.820 [DEBUG] [Thread-4625] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:43:56.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:43:56.922 [DEBUG] [Thread-4628] [transport.py] [_log()] starting thread (client mode): 0x7374e4a0
2025-11-25T19:43:56.922 [DEBUG] [Thread-4628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:43:56.937 [DEBUG] [Thread-4628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:43:56.937 [INFO] [Thread-4628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:43:56.945 [DEBUG] [Thread-4628] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:43:56.945 [DEBUG] [Thread-4628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:43:56.945 [DEBUG] [Thread-4628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:43:56.945 [DEBUG] [Thread-4628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:43:56.945 [DEBUG] [Thread-4628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:43:56.945 [DEBUG] [Thread-4628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:43:56.945 [DEBUG] [Thread-4628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] client lang: <none>
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] server lang: <none>
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] kex follows: False
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] Compression: none
2025-11-25T19:43:56.946 [DEBUG] [Thread-4628] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:43:57.003 [DEBUG] [Thread-4628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:43:57.003 [DEBUG] [Thread-4628] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:43:57.004 [DEBUG] [Thread-4628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:43:57.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:43:57.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:43:57.059 [DEBUG] [Thread-4628] [transport.py] [_log()] userauth is OK
2025-11-25T19:43:57.060 [DEBUG] [Thread-4628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:43:57.060 [DEBUG] [Thread-4628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:43:57.060 [DEBUG] [Thread-4628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:43:57.060 [DEBUG] [Thread-4628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:43:57.079 [INFO] [Thread-4628] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:43:57.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:43:57.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:43:57.903 [DEBUG] [Thread-4628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:43:57.903 [DEBUG] [Thread-4628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:43:57.952 [DEBUG] [Thread-4628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:43:57.952 [DEBUG] [Thread-4628] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:43:57.961 [DEBUG] [Thread-4628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:43:57.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:43:57.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:43:57.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:43:57.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:43:57.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:43:57.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:43:57.998 [DEBUG] [Thread-4628] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:44:06.839 [DEBUG] [Thread-4630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:44:21.881 [DEBUG] [Thread-4631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:44:28.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:44:28.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:44:28.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:44:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 43, 54), 31.76, 11.21, 0.0, 12.18, 23.46, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:44:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:43:54
2025-11-25T19:44:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:44:28.981 [DEBUG] [Thread-4632] [transport.py] [_log()] starting thread (client mode): 0x70d1ecb0
2025-11-25T19:44:28.981 [DEBUG] [Thread-4632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:44:28.998 [DEBUG] [Thread-4632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:44:28.998 [INFO] [Thread-4632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:44:29.002 [DEBUG] [Thread-4632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:44:29.002 [DEBUG] [Thread-4632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:44:29.002 [DEBUG] [Thread-4632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:44:29.002 [DEBUG] [Thread-4632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] client lang: <none>
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] server lang: <none>
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] kex follows: False
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:44:29.003 [DEBUG] [Thread-4632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:44:29.004 [DEBUG] [Thread-4632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:44:29.004 [DEBUG] [Thread-4632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:44:29.004 [DEBUG] [Thread-4632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:44:29.004 [DEBUG] [Thread-4632] [transport.py] [_log()] Compression: none
2025-11-25T19:44:29.004 [DEBUG] [Thread-4632] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:44:29.018 [DEBUG] [Thread-4632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:44:29.018 [DEBUG] [Thread-4632] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:44:29.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:44:29.019 [DEBUG] [Thread-4632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:44:29.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:44:29.020 [DEBUG] [Thread-4632] [transport.py] [_log()] userauth is OK
2025-11-25T19:44:29.021 [DEBUG] [Thread-4632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:44:29.021 [DEBUG] [Thread-4632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:44:29.021 [DEBUG] [Thread-4632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:44:29.021 [DEBUG] [Thread-4632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:44:29.035 [INFO] [Thread-4632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:44:29.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:44:29.800 [DEBUG] [Thread-4632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:44:29.800 [DEBUG] [Thread-4632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:44:29.800 [DEBUG] [Thread-4632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:44:29.840 [DEBUG] [Thread-4632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:44:29.841 [DEBUG] [Thread-4632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:44:29.844 [DEBUG] [Thread-4632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:44:29.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:44:29.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:44:29.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:44:29.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:44:29.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:44:29.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:44:29.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:44:29.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:44:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:44:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.738641 -999.00  +23.60   7.14     16   -3.30 1 1 1 1 1   557    0 25.48 -66.15 ----- 5.2 7.1 282.6 9.7 24.1 -27.6 24.1 -27.0 23.8 -25.8 23.9 -26.8
2025-11-25T19:44:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:44:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:44:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.738641
2025-11-25T19:44:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:44:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:44:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:44:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:44:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:44:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:43:54', tmtdew=31.76, humidity=11.21, cloud=0.0, wind=12.18, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:43:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:44:29.867 [DEBUG] [Thread-4632] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:44:29.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:44:29.962 [DEBUG] [Thread-4635] [transport.py] [_log()] starting thread (client mode): 0x70d41450
2025-11-25T19:44:29.962 [DEBUG] [Thread-4635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:44:29.976 [DEBUG] [Thread-4635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:44:29.977 [INFO] [Thread-4635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] client lang: <none>
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] server lang: <none>
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] kex follows: False
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:44:29.984 [DEBUG] [Thread-4635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:44:29.985 [DEBUG] [Thread-4635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:44:29.985 [DEBUG] [Thread-4635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:44:29.985 [DEBUG] [Thread-4635] [transport.py] [_log()] Compression: none
2025-11-25T19:44:29.985 [DEBUG] [Thread-4635] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:44:30.043 [DEBUG] [Thread-4635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:44:30.044 [DEBUG] [Thread-4635] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:44:30.045 [DEBUG] [Thread-4635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:44:30.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:44:30.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:44:30.100 [DEBUG] [Thread-4635] [transport.py] [_log()] userauth is OK
2025-11-25T19:44:30.101 [DEBUG] [Thread-4635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:44:30.101 [DEBUG] [Thread-4635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:44:30.101 [DEBUG] [Thread-4635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:44:30.101 [DEBUG] [Thread-4635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:44:30.119 [INFO] [Thread-4635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:44:30.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:44:30.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:44:30.931 [DEBUG] [Thread-4635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:44:30.931 [DEBUG] [Thread-4635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:44:30.980 [DEBUG] [Thread-4635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:44:30.980 [DEBUG] [Thread-4635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:44:30.989 [DEBUG] [Thread-4635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:44:30.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:44:30.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:44:31.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:44:31.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:44:31.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:44:31.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:44:31.025 [DEBUG] [Thread-4635] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:44:33.583 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:44:33.584 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:44:36.915 [DEBUG] [Thread-4637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:44:51.964 [DEBUG] [Thread-4638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:44:53.835 [DEBUG] [Thread-4639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:45:01.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:45:01.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:45:01.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:45:01.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 44, 58), 31.74, 11.18, 0.0, 9.44, 23.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:45:01.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:44:58
2025-11-25T19:45:01.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:45:02.001 [DEBUG] [Thread-4640] [transport.py] [_log()] starting thread (client mode): 0x70d56110
2025-11-25T19:45:02.002 [DEBUG] [Thread-4640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:45:02.011 [DEBUG] [Thread-4640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:45:02.011 [INFO] [Thread-4640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] client lang: <none>
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] server lang: <none>
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] kex follows: False
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:45:02.013 [DEBUG] [Thread-4640] [transport.py] [_log()] Compression: none
2025-11-25T19:45:02.014 [DEBUG] [Thread-4640] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:45:02.021 [DEBUG] [Thread-4640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:45:02.021 [DEBUG] [Thread-4640] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:45:02.021 [DEBUG] [Thread-4640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:45:02.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:45:02.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:45:02.022 [DEBUG] [Thread-4640] [transport.py] [_log()] userauth is OK
2025-11-25T19:45:02.022 [DEBUG] [Thread-4640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:45:02.022 [DEBUG] [Thread-4640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:45:02.022 [DEBUG] [Thread-4640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:45:02.022 [DEBUG] [Thread-4640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:45:02.030 [INFO] [Thread-4640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:45:02.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:45:02.649 [DEBUG] [Thread-4640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:45:02.649 [DEBUG] [Thread-4640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:45:02.649 [DEBUG] [Thread-4640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:45:02.690 [DEBUG] [Thread-4640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:45:02.690 [DEBUG] [Thread-4640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:45:02.693 [DEBUG] [Thread-4640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:45:02.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:45:02.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:45:02.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:45:02.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:45:02.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:45:02.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:45:02.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:45:02.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:45:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:45:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.738988 -999.00  +23.60   6.80     16   -3.30 1 1 1 1 1   537    0 25.52 -63.51 ----- 7.5 6.8 262.6 8.5 24.1 -27.6 24.1 -27.0 23.7 -25.7 23.9 -26.9
2025-11-25T19:45:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:45:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:45:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.738988
2025-11-25T19:45:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:45:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:45:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:45:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:45:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:45:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:44:58', tmtdew=31.74, humidity=11.18, cloud=0.0, wind=9.44, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:44:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:45:02.717 [DEBUG] [Thread-4640] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:45:02.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:45:02.822 [DEBUG] [Thread-4643] [transport.py] [_log()] starting thread (client mode): 0x7374c7f0
2025-11-25T19:45:02.822 [DEBUG] [Thread-4643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:45:02.837 [DEBUG] [Thread-4643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:45:02.837 [INFO] [Thread-4643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:45:02.845 [DEBUG] [Thread-4643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:45:02.845 [DEBUG] [Thread-4643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:45:02.846 [DEBUG] [Thread-4643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:45:02.846 [DEBUG] [Thread-4643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:45:02.846 [DEBUG] [Thread-4643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:45:02.846 [DEBUG] [Thread-4643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:45:02.846 [DEBUG] [Thread-4643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:45:02.846 [DEBUG] [Thread-4643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:45:02.846 [DEBUG] [Thread-4643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:45:02.846 [DEBUG] [Thread-4643] [transport.py] [_log()] client lang: <none>
2025-11-25T19:45:02.846 [DEBUG] [Thread-4643] [transport.py] [_log()] server lang: <none>
2025-11-25T19:45:02.847 [DEBUG] [Thread-4643] [transport.py] [_log()] kex follows: False
2025-11-25T19:45:02.847 [DEBUG] [Thread-4643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:45:02.847 [DEBUG] [Thread-4643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:45:02.847 [DEBUG] [Thread-4643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:45:02.847 [DEBUG] [Thread-4643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:45:02.847 [DEBUG] [Thread-4643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:45:02.847 [DEBUG] [Thread-4643] [transport.py] [_log()] Compression: none
2025-11-25T19:45:02.848 [DEBUG] [Thread-4643] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:45:02.908 [DEBUG] [Thread-4643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:45:02.909 [DEBUG] [Thread-4643] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:45:02.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:45:02.910 [DEBUG] [Thread-4643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:45:02.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:45:02.963 [DEBUG] [Thread-4643] [transport.py] [_log()] userauth is OK
2025-11-25T19:45:02.964 [DEBUG] [Thread-4643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:45:02.964 [DEBUG] [Thread-4643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:45:02.964 [DEBUG] [Thread-4643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:45:02.964 [DEBUG] [Thread-4643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:45:02.984 [INFO] [Thread-4643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:45:02.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:45:02.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:45:03.833 [DEBUG] [Thread-4643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:45:03.834 [DEBUG] [Thread-4643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:45:03.881 [DEBUG] [Thread-4643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:45:03.882 [DEBUG] [Thread-4643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:45:03.890 [DEBUG] [Thread-4643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:45:03.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:45: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')
2025-11-25T19:45:03.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:45:03.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:45:03.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:45:03.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:45:03.927 [DEBUG] [Thread-4643] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:45:07.001 [DEBUG] [Thread-4645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:45:22.051 [DEBUG] [Thread-4646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:45:33.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:45:33.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:45:33.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:45:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 45, 30), 31.71, 11.19, 0.0, 10.89, 23.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:45:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:45:30
2025-11-25T19:45:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:45:34.897 [DEBUG] [Thread-4647] [transport.py] [_log()] starting thread (client mode): 0x70d1fa00
2025-11-25T19:45:34.897 [DEBUG] [Thread-4647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:45:34.919 [DEBUG] [Thread-4647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:45:34.919 [INFO] [Thread-4647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:45:34.922 [DEBUG] [Thread-4647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:45:34.922 [DEBUG] [Thread-4647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] client lang: <none>
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] server lang: <none>
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] kex follows: False
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] Compression: none
2025-11-25T19:45:34.923 [DEBUG] [Thread-4647] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:45:34.940 [DEBUG] [Thread-4647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:45:34.941 [DEBUG] [Thread-4647] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:45:34.941 [DEBUG] [Thread-4647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:45:34.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:45:34.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:45:34.943 [DEBUG] [Thread-4647] [transport.py] [_log()] userauth is OK
2025-11-25T19:45:34.943 [DEBUG] [Thread-4647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:45:34.943 [DEBUG] [Thread-4647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:45:34.943 [DEBUG] [Thread-4647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:45:34.943 [DEBUG] [Thread-4647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:45:34.967 [INFO] [Thread-4647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:45:34.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:45:35.772 [DEBUG] [Thread-4647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:45:35.773 [DEBUG] [Thread-4647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:45:35.773 [DEBUG] [Thread-4647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:45:35.813 [DEBUG] [Thread-4647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:45:35.814 [DEBUG] [Thread-4647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:45:35.816 [DEBUG] [Thread-4647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:45:35.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:45:35.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:45:35.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:45:35.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:45:35.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:45:35.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:45:35.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:45:35.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:45:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:45:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.739336 -999.00  +23.50   6.65     16   -3.20 1 1 1 1 1   517    0 25.37 -59.57 ----- 5.2 6.7 274.4 9.0 24.1 -27.7 24.1 -27.0 23.7 -25.9 23.9 -26.8
2025-11-25T19:45:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:45:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:45:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.739336
2025-11-25T19:45:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:45:35.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:45:35.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:45:35.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:45:35.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:45:35.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:45:30', tmtdew=31.71, humidity=11.19, cloud=0.0, wind=10.89, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:44:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:45:35.842 [DEBUG] [Thread-4647] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:45:35.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:45:35.937 [DEBUG] [Thread-4650] [transport.py] [_log()] starting thread (client mode): 0x70d1e740
2025-11-25T19:45:35.937 [DEBUG] [Thread-4650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:45:35.951 [DEBUG] [Thread-4650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:45:35.952 [INFO] [Thread-4650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:45:35.959 [DEBUG] [Thread-4650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:45:35.959 [DEBUG] [Thread-4650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:45:35.959 [DEBUG] [Thread-4650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:45:35.959 [DEBUG] [Thread-4650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:45:35.959 [DEBUG] [Thread-4650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] client lang: <none>
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] server lang: <none>
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] kex follows: False
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:45:35.960 [DEBUG] [Thread-4650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:45:35.961 [DEBUG] [Thread-4650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:45:35.961 [DEBUG] [Thread-4650] [transport.py] [_log()] Compression: none
2025-11-25T19:45:35.961 [DEBUG] [Thread-4650] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:45:36.019 [DEBUG] [Thread-4650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:45:36.020 [DEBUG] [Thread-4650] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:45:36.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:45:36.021 [DEBUG] [Thread-4650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:45:36.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:45:36.076 [DEBUG] [Thread-4650] [transport.py] [_log()] userauth is OK
2025-11-25T19:45:36.076 [DEBUG] [Thread-4650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:45:36.076 [DEBUG] [Thread-4650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:45:36.076 [DEBUG] [Thread-4650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:45:36.076 [DEBUG] [Thread-4650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:45:36.094 [INFO] [Thread-4650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:45:36.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:45:36.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:45:36.913 [DEBUG] [Thread-4650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:45:36.913 [DEBUG] [Thread-4650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:45:36.961 [DEBUG] [Thread-4650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:45:36.961 [DEBUG] [Thread-4650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:45:36.970 [DEBUG] [Thread-4650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:45:36.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:45:36.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:45:36.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:45:36.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:45:36.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:45:36.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:45:37.007 [DEBUG] [Thread-4650] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:45:37.083 [DEBUG] [Thread-4652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:45:43.572 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:45:43.573 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:45:52.133 [DEBUG] [Thread-4653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:45:53.905 [DEBUG] [Thread-4654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:46:07.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:46:07.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:46:07.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:46:07.170 [DEBUG] [Thread-4655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:46:07.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 46, 2), 31.69, 11.21, 0.0, 10.04, 23.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:46:07.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:46:02
2025-11-25T19:46:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:46:07.968 [DEBUG] [Thread-4656] [transport.py] [_log()] starting thread (client mode): 0x737c6ef0
2025-11-25T19:46:07.968 [DEBUG] [Thread-4656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:46:07.988 [DEBUG] [Thread-4656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:46:07.988 [INFO] [Thread-4656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:46:07.991 [DEBUG] [Thread-4656] [transport.py] [_log()] client lang: <none>
2025-11-25T19:46:07.992 [DEBUG] [Thread-4656] [transport.py] [_log()] server lang: <none>
2025-11-25T19:46:07.992 [DEBUG] [Thread-4656] [transport.py] [_log()] kex follows: False
2025-11-25T19:46:07.992 [DEBUG] [Thread-4656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:46:07.992 [DEBUG] [Thread-4656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:46:07.992 [DEBUG] [Thread-4656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:46:07.992 [DEBUG] [Thread-4656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:46:07.992 [DEBUG] [Thread-4656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:46:07.992 [DEBUG] [Thread-4656] [transport.py] [_log()] Compression: none
2025-11-25T19:46:07.992 [DEBUG] [Thread-4656] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:46:08.011 [DEBUG] [Thread-4656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:46:08.011 [DEBUG] [Thread-4656] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:46:08.012 [DEBUG] [Thread-4656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:46:08.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:46:08.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:46:08.015 [DEBUG] [Thread-4656] [transport.py] [_log()] userauth is OK
2025-11-25T19:46:08.015 [DEBUG] [Thread-4656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:46:08.015 [DEBUG] [Thread-4656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:46:08.015 [DEBUG] [Thread-4656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:46:08.015 [DEBUG] [Thread-4656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:46:08.038 [INFO] [Thread-4656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:46:08.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:46:08.650 [DEBUG] [Thread-4656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:46:08.650 [DEBUG] [Thread-4656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:46:08.650 [DEBUG] [Thread-4656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:46:08.691 [DEBUG] [Thread-4656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:46:08.691 [DEBUG] [Thread-4656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:46:08.694 [DEBUG] [Thread-4656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:46:08.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:46:08.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:46:08.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:46:08.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:46:08.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:46:08.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:46:08.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:46:08.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:46:08.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:46:08.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.740030 -999.00  +23.50   8.91     16   -3.20 1 1 1 1 1   477    0 25.59 -60.74 ----- 7.7 8.9 262.0 12.7 23.9 -27.6 24.0 -26.9 23.6 -25.5 23.9 -26.8
2025-11-25T19:46:08.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:46:08.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:46:08.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.740030
2025-11-25T19:46:08.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:46:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:46:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:46:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:46:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:46:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:46:02', tmtdew=31.69, humidity=11.21, cloud=0.0, wind=10.04, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:45:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:46:08.720 [DEBUG] [Thread-4656] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:46:08.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:46:08.817 [DEBUG] [Thread-4659] [transport.py] [_log()] starting thread (client mode): 0x70d1cb20
2025-11-25T19:46:08.817 [DEBUG] [Thread-4659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:46:08.831 [DEBUG] [Thread-4659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:46:08.831 [INFO] [Thread-4659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:46:08.841 [DEBUG] [Thread-4659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:46:08.841 [DEBUG] [Thread-4659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:46:08.841 [DEBUG] [Thread-4659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:46:08.841 [DEBUG] [Thread-4659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:46:08.841 [DEBUG] [Thread-4659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:46:08.841 [DEBUG] [Thread-4659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:46:08.841 [DEBUG] [Thread-4659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:46:08.841 [DEBUG] [Thread-4659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] client lang: <none>
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] server lang: <none>
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] kex follows: False
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] Compression: none
2025-11-25T19:46:08.842 [DEBUG] [Thread-4659] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:46:08.900 [DEBUG] [Thread-4659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:46:08.900 [DEBUG] [Thread-4659] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:46:08.901 [DEBUG] [Thread-4659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:46:08.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:46:08.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:46:08.955 [DEBUG] [Thread-4659] [transport.py] [_log()] userauth is OK
2025-11-25T19:46:08.956 [DEBUG] [Thread-4659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:46:08.956 [DEBUG] [Thread-4659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:46:08.956 [DEBUG] [Thread-4659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:46:08.956 [DEBUG] [Thread-4659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:46:08.977 [INFO] [Thread-4659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:46:08.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:46:08.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:46:09.862 [DEBUG] [Thread-4659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:46:09.862 [DEBUG] [Thread-4659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:46:09.909 [DEBUG] [Thread-4659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:46:09.910 [DEBUG] [Thread-4659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:46:09.918 [DEBUG] [Thread-4659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:46:09.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:46:09.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:46:09.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:46:09.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:46:09.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:46:09.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:46:09.953 [DEBUG] [Thread-4659] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:46:22.205 [DEBUG] [Thread-4661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:46:37.251 [DEBUG] [Thread-4662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:46:39.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:46:39.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:46:39.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:46:40.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 46, 34), 31.53, 11.76, 0.0, 11.26, 23.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:46:40.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:46:34
2025-11-25T19:46:40.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:46:40.885 [DEBUG] [Thread-4663] [transport.py] [_log()] starting thread (client mode): 0x737c6170
2025-11-25T19:46:40.885 [DEBUG] [Thread-4663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:46:40.901 [DEBUG] [Thread-4663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:46:40.901 [INFO] [Thread-4663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] client lang: <none>
2025-11-25T19:46:40.902 [DEBUG] [Thread-4663] [transport.py] [_log()] server lang: <none>
2025-11-25T19:46:40.903 [DEBUG] [Thread-4663] [transport.py] [_log()] kex follows: False
2025-11-25T19:46:40.903 [DEBUG] [Thread-4663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:46:40.903 [DEBUG] [Thread-4663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:46:40.903 [DEBUG] [Thread-4663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:46:40.903 [DEBUG] [Thread-4663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:46:40.903 [DEBUG] [Thread-4663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:46:40.903 [DEBUG] [Thread-4663] [transport.py] [_log()] Compression: none
2025-11-25T19:46:40.903 [DEBUG] [Thread-4663] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:46:40.924 [DEBUG] [Thread-4663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:46:40.924 [DEBUG] [Thread-4663] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:46:40.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:46:40.925 [DEBUG] [Thread-4663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:46:40.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:46:40.928 [DEBUG] [Thread-4663] [transport.py] [_log()] userauth is OK
2025-11-25T19:46:40.928 [DEBUG] [Thread-4663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:46:40.928 [DEBUG] [Thread-4663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:46:40.928 [DEBUG] [Thread-4663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:46:40.928 [DEBUG] [Thread-4663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:46:40.963 [INFO] [Thread-4663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:46:40.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:46:41.770 [DEBUG] [Thread-4663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:46:41.770 [DEBUG] [Thread-4663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:46:41.771 [DEBUG] [Thread-4663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:46:41.812 [DEBUG] [Thread-4663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:46:41.813 [DEBUG] [Thread-4663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:46:41.816 [DEBUG] [Thread-4663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:46:41.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:46:41.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:46:41.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:46:41.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:46:41.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:46:41.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:46:41.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:46:41.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:46:41.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:46:41.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.740377 -999.00  +23.50  10.69     16   -3.20 1 1 1 1 1   456    0 25.74 -57.16 ----- 8.4 10.7 272.2 14.3 23.9 -27.5 24.0 -26.9 23.7 -25.8 23.9 -26.8
2025-11-25T19:46:41.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:46:41.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:46:41.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.740377
2025-11-25T19:46:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:46:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:46:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:46:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:46:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:46:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:46:34', tmtdew=31.53, humidity=11.76, cloud=0.0, wind=11.26, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:46:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:46:41.846 [DEBUG] [Thread-4663] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:46:41.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:46:41.936 [DEBUG] [Thread-4666] [transport.py] [_log()] starting thread (client mode): 0x70d57c40
2025-11-25T19:46:41.936 [DEBUG] [Thread-4666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:46:41.950 [DEBUG] [Thread-4666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:46:41.951 [INFO] [Thread-4666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:46:41.958 [DEBUG] [Thread-4666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:46:41.958 [DEBUG] [Thread-4666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:46:41.958 [DEBUG] [Thread-4666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:46:41.958 [DEBUG] [Thread-4666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:46:41.958 [DEBUG] [Thread-4666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] client lang: <none>
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] server lang: <none>
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] kex follows: False
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] Compression: none
2025-11-25T19:46:41.959 [DEBUG] [Thread-4666] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:46:42.015 [DEBUG] [Thread-4666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:46:42.015 [DEBUG] [Thread-4666] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:46:42.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:46:42.017 [DEBUG] [Thread-4666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:46:42.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:46:42.071 [DEBUG] [Thread-4666] [transport.py] [_log()] userauth is OK
2025-11-25T19:46:42.072 [DEBUG] [Thread-4666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:46:42.072 [DEBUG] [Thread-4666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:46:42.072 [DEBUG] [Thread-4666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:46:42.072 [DEBUG] [Thread-4666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:46:42.092 [INFO] [Thread-4666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:46:42.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:46:42.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:46:42.941 [DEBUG] [Thread-4666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:46:42.941 [DEBUG] [Thread-4666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:46:42.989 [DEBUG] [Thread-4666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:46:42.989 [DEBUG] [Thread-4666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:46:42.998 [DEBUG] [Thread-4666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:46:43.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:46:43.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:46:43.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:46:43.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:46:43.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:46:43.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:46:43.033 [DEBUG] [Thread-4666] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:46:48.927 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:46:48.928 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:46:52.284 [DEBUG] [Thread-4668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:46:53.971 [DEBUG] [Thread-4669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:47:07.333 [DEBUG] [Thread-4670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:47:13.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:47:13.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:47:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:47:13.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 47, 6), 31.56, 11.73, 0.0, 11.51, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:47:13.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:47:06
2025-11-25T19:47:13.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:47:14.034 [DEBUG] [Thread-4671] [transport.py] [_log()] starting thread (client mode): 0x70d41a20
2025-11-25T19:47:14.035 [DEBUG] [Thread-4671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:47:14.054 [DEBUG] [Thread-4671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:47:14.054 [INFO] [Thread-4671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] client lang: <none>
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] server lang: <none>
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] kex follows: False
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] Compression: none
2025-11-25T19:47:14.058 [DEBUG] [Thread-4671] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:47:14.075 [DEBUG] [Thread-4671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:47:14.075 [DEBUG] [Thread-4671] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:47:14.075 [DEBUG] [Thread-4671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:47:14.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:47:14.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:47:14.076 [DEBUG] [Thread-4671] [transport.py] [_log()] userauth is OK
2025-11-25T19:47:14.076 [DEBUG] [Thread-4671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:47:14.076 [DEBUG] [Thread-4671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:47:14.076 [DEBUG] [Thread-4671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:47:14.076 [DEBUG] [Thread-4671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:47:14.084 [INFO] [Thread-4671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:47:14.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:47:14.733 [DEBUG] [Thread-4671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:47:14.733 [DEBUG] [Thread-4671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:47:14.733 [DEBUG] [Thread-4671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:47:14.774 [DEBUG] [Thread-4671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:47:14.774 [DEBUG] [Thread-4671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:47:14.777 [DEBUG] [Thread-4671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:47:14.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:47:14.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:47:14.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:47:14.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:47:14.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:47:14.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:47:14.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:47:14.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:47:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:47:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.740724 -999.00  +23.50   6.47     16   -3.20 1 1 1 1 1   436    0 25.69 -60.42 ----- 11.5 6.5 263.2 11.0 23.9 -27.5 23.9 -26.8 23.6 -25.7 23.8 -26.8
2025-11-25T19:47:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:47:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:47:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.740724
2025-11-25T19:47:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:47:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:47:14.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:47:14.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:47:14.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:47:14.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:47:06', tmtdew=31.56, humidity=11.73, cloud=0.0, wind=11.51, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:46:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:47:14.796 [DEBUG] [Thread-4671] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:47:14.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:47:14.881 [DEBUG] [Thread-4674] [transport.py] [_log()] starting thread (client mode): 0x70d43040
2025-11-25T19:47:14.881 [DEBUG] [Thread-4674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:47:14.896 [DEBUG] [Thread-4674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:47:14.896 [INFO] [Thread-4674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:47:14.903 [DEBUG] [Thread-4674] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:47:14.903 [DEBUG] [Thread-4674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:47:14.903 [DEBUG] [Thread-4674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] client lang: <none>
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] server lang: <none>
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] kex follows: False
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] Compression: none
2025-11-25T19:47:14.904 [DEBUG] [Thread-4674] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:47:14.962 [DEBUG] [Thread-4674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:47:14.962 [DEBUG] [Thread-4674] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:47:14.962 [DEBUG] [Thread-4674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:47:14.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:47:14.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:47:15.019 [DEBUG] [Thread-4674] [transport.py] [_log()] userauth is OK
2025-11-25T19:47:15.019 [DEBUG] [Thread-4674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:47:15.019 [DEBUG] [Thread-4674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:47:15.019 [DEBUG] [Thread-4674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:47:15.019 [DEBUG] [Thread-4674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:47:15.033 [INFO] [Thread-4674] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:47:15.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:47:15.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:47:15.863 [DEBUG] [Thread-4674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:47:15.864 [DEBUG] [Thread-4674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:47:15.911 [DEBUG] [Thread-4674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:47:15.912 [DEBUG] [Thread-4674] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:47:15.920 [DEBUG] [Thread-4674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:47:15.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:47:15.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:47:15.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:47:15.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:47:15.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:47:15.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:47:15.955 [DEBUG] [Thread-4674] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:47:22.366 [DEBUG] [Thread-4676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:47:37.418 [DEBUG] [Thread-4677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:47:45.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:47:45.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:47:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:47:46.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 47, 38), 31.62, 11.71, 0.0, 11.45, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:47:46.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:47:38
2025-11-25T19:47:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:47:46.938 [DEBUG] [Thread-4678] [transport.py] [_log()] starting thread (client mode): 0x70d3ad40
2025-11-25T19:47:46.938 [DEBUG] [Thread-4678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:47:46.958 [DEBUG] [Thread-4678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:47:46.958 [INFO] [Thread-4678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:47:46.961 [DEBUG] [Thread-4678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:47:46.961 [DEBUG] [Thread-4678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:47:46.961 [DEBUG] [Thread-4678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] client lang: <none>
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] server lang: <none>
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] kex follows: False
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] Compression: none
2025-11-25T19:47:46.962 [DEBUG] [Thread-4678] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:47:46.969 [DEBUG] [Thread-4678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:47:46.969 [DEBUG] [Thread-4678] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:47:46.969 [DEBUG] [Thread-4678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:47:46.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:47:46.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:47:46.970 [DEBUG] [Thread-4678] [transport.py] [_log()] userauth is OK
2025-11-25T19:47:46.970 [DEBUG] [Thread-4678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:47:46.970 [DEBUG] [Thread-4678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:47:46.970 [DEBUG] [Thread-4678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:47:46.970 [DEBUG] [Thread-4678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:47:46.981 [INFO] [Thread-4678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:47:46.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:47:47.772 [DEBUG] [Thread-4678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:47:47.772 [DEBUG] [Thread-4678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:47:47.772 [DEBUG] [Thread-4678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:47:47.813 [DEBUG] [Thread-4678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:47:47.813 [DEBUG] [Thread-4678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:47:47.815 [DEBUG] [Thread-4678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:47:47.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:47:47.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:47:47.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:47:47.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:47:47.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:47:47.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:47:47.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:47:47.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:47:47.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:47:47.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.741072 -999.00  +23.50   8.75     16   -3.10 1 1 1 1 1   415    0 25.67 -58.96 ----- 8.0 8.8 262.2 16.7 23.9 -27.5 23.9 -26.9 23.6 -25.6 23.8 -26.7
2025-11-25T19:47:47.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:47:47.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:47:47.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.741072
2025-11-25T19:47:47.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:47:47.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:47:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:47:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:47:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:47:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:47:38', tmtdew=31.62, humidity=11.71, cloud=0.0, wind=11.45, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:47:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:47:47.834 [DEBUG] [Thread-4678] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:47:47.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:47:47.921 [DEBUG] [Thread-4681] [transport.py] [_log()] starting thread (client mode): 0x70d00400
2025-11-25T19:47:47.921 [DEBUG] [Thread-4681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:47:47.935 [DEBUG] [Thread-4681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:47:47.935 [INFO] [Thread-4681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] client lang: <none>
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] server lang: <none>
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] kex follows: False
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] Compression: none
2025-11-25T19:47:47.943 [DEBUG] [Thread-4681] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:47:47.997 [DEBUG] [Thread-4681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:47:47.997 [DEBUG] [Thread-4681] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:47:47.997 [DEBUG] [Thread-4681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:47:47.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:47:47.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:47:48.054 [DEBUG] [Thread-4681] [transport.py] [_log()] userauth is OK
2025-11-25T19:47:48.055 [DEBUG] [Thread-4681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:47:48.055 [DEBUG] [Thread-4681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:47:48.055 [DEBUG] [Thread-4681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:47:48.055 [DEBUG] [Thread-4681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:47:48.072 [INFO] [Thread-4681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:47:48.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:47:48.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:47:48.952 [DEBUG] [Thread-4681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:47:48.953 [DEBUG] [Thread-4681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:47:49.000 [DEBUG] [Thread-4681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:47:49.000 [DEBUG] [Thread-4681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:47:49.008 [DEBUG] [Thread-4681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:47:49.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:47:49.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:47:49.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:47:49.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:47:49.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:47:49.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:47:49.039 [DEBUG] [Thread-4681] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:47:52.445 [DEBUG] [Thread-4683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:47:54.061 [DEBUG] [Thread-4684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:47:54.552 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:47:54.553 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:47:55.505 [DEBUG] [Thread-4685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:48:07.489 [DEBUG] [Thread-4686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:48:19.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:48:19.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:48:19.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:48:19.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 48, 12), 31.56, 11.76, 0.0, 12.72, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:48:19.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:48:12
2025-11-25T19:48:19.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:48:19.994 [DEBUG] [Thread-4687] [transport.py] [_log()] starting thread (client mode): 0x70d022c0
2025-11-25T19:48:19.994 [DEBUG] [Thread-4687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:48:20.013 [DEBUG] [Thread-4687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:48:20.014 [INFO] [Thread-4687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] client lang: <none>
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] server lang: <none>
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] kex follows: False
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] Compression: none
2025-11-25T19:48:20.017 [DEBUG] [Thread-4687] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:48:20.036 [DEBUG] [Thread-4687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:48:20.036 [DEBUG] [Thread-4687] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:48:20.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:48:20.037 [DEBUG] [Thread-4687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:48:20.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:48:20.040 [DEBUG] [Thread-4687] [transport.py] [_log()] userauth is OK
2025-11-25T19:48:20.040 [DEBUG] [Thread-4687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:48:20.040 [DEBUG] [Thread-4687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:48:20.040 [DEBUG] [Thread-4687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:48:20.040 [DEBUG] [Thread-4687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:48:20.058 [INFO] [Thread-4687] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:48:20.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:48:20.647 [DEBUG] [Thread-4687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:48:20.648 [DEBUG] [Thread-4687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:48:20.648 [DEBUG] [Thread-4687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:48:20.689 [DEBUG] [Thread-4687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:48:20.689 [DEBUG] [Thread-4687] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:48:20.693 [DEBUG] [Thread-4687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:48:20.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:48:20.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:48:20.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:48:20.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:48:20.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:48:20.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:48:20.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:48:20.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:48:20.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:48:20.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.741419 -999.00  +23.50   9.30     16   -3.10 1 1 1 1 1   395    0 25.31 -57.60 ----- 8.8 9.3 270.6 13.0 23.8 -27.5 23.9 -26.8 23.6 -25.7 23.7 -26.7
2025-11-25T19:48:20.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:48:20.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:48:20.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.741419
2025-11-25T19:48:20.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:48:20.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:48:20.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:48:20.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:48:20.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:48:20.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:48:12', tmtdew=31.56, humidity=11.76, cloud=0.0, wind=12.72, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:47:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:48:20.719 [DEBUG] [Thread-4687] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:48:20.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:48:20.814 [DEBUG] [Thread-4690] [transport.py] [_log()] starting thread (client mode): 0x70d38670
2025-11-25T19:48:20.815 [DEBUG] [Thread-4690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:48:20.828 [DEBUG] [Thread-4690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:48:20.829 [INFO] [Thread-4690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] client lang: <none>
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] server lang: <none>
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] kex follows: False
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:48:20.836 [DEBUG] [Thread-4690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:48:20.837 [DEBUG] [Thread-4690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:48:20.837 [DEBUG] [Thread-4690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:48:20.837 [DEBUG] [Thread-4690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:48:20.837 [DEBUG] [Thread-4690] [transport.py] [_log()] Compression: none
2025-11-25T19:48:20.837 [DEBUG] [Thread-4690] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:48:20.895 [DEBUG] [Thread-4690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:48:20.896 [DEBUG] [Thread-4690] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:48:20.897 [DEBUG] [Thread-4690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:48:20.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:48:20.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:48:20.953 [DEBUG] [Thread-4690] [transport.py] [_log()] userauth is OK
2025-11-25T19:48:20.954 [DEBUG] [Thread-4690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:48:20.954 [DEBUG] [Thread-4690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:48:20.954 [DEBUG] [Thread-4690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:48:20.954 [DEBUG] [Thread-4690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:48:20.973 [INFO] [Thread-4690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:48:20.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:48:20.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:48:21.775 [DEBUG] [Thread-4690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:48:21.776 [DEBUG] [Thread-4690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:48:21.823 [DEBUG] [Thread-4690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:48:21.823 [DEBUG] [Thread-4690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:48:21.832 [DEBUG] [Thread-4690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:48:21.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:48:21.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:48:21.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:48:21.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:48:21.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:48:21.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:48:21.866 [DEBUG] [Thread-4690] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:48:22.525 [DEBUG] [Thread-4692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:48:37.575 [DEBUG] [Thread-4693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:48:51.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:48:51.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:48:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:48:52.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 48, 44), 31.47, 11.84, 0.0, 12.23, 23.23, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:48:52.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:48:44
2025-11-25T19:48:52.609 [DEBUG] [Thread-4694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:48:52.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:48:52.831 [DEBUG] [Thread-4695] [transport.py] [_log()] starting thread (client mode): 0x70d3bd00
2025-11-25T19:48:52.831 [DEBUG] [Thread-4695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:48:52.852 [DEBUG] [Thread-4695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:48:52.853 [INFO] [Thread-4695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:48:52.856 [DEBUG] [Thread-4695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:48:52.856 [DEBUG] [Thread-4695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] client lang: <none>
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] server lang: <none>
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] kex follows: False
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:48:52.857 [DEBUG] [Thread-4695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:48:52.858 [DEBUG] [Thread-4695] [transport.py] [_log()] Compression: none
2025-11-25T19:48:52.858 [DEBUG] [Thread-4695] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:48:52.874 [DEBUG] [Thread-4695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:48:52.874 [DEBUG] [Thread-4695] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:48:52.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:48:52.876 [DEBUG] [Thread-4695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:48:52.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:48:52.878 [DEBUG] [Thread-4695] [transport.py] [_log()] userauth is OK
2025-11-25T19:48:52.878 [DEBUG] [Thread-4695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:48:52.878 [DEBUG] [Thread-4695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:48:52.879 [DEBUG] [Thread-4695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:48:52.879 [DEBUG] [Thread-4695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:48:52.903 [INFO] [Thread-4695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:48:52.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:48:53.717 [DEBUG] [Thread-4695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:48:53.717 [DEBUG] [Thread-4695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:48:53.718 [DEBUG] [Thread-4695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:48:53.758 [DEBUG] [Thread-4695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:48:53.758 [DEBUG] [Thread-4695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:48:53.761 [DEBUG] [Thread-4695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:48:53.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:48:53.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:48:53.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:48:53.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:48:53.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:48:53.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:48:53.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:48:53.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:48:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:48:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.741766 -999.00  +23.50   9.64     16   -3.10 1 1 1 1 1   375    0 25.62 -59.90 ----- 6.6 9.6 291.4 14.1 23.8 -27.4 23.9 -26.9 23.6 -25.7 23.7 -26.7
2025-11-25T19:48:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:48:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:48:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.741766
2025-11-25T19:48:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:48:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:48:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:48:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:48:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:48:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:48:44', tmtdew=31.47, humidity=11.84, cloud=0.0, wind=12.23, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:48:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:48:53.786 [DEBUG] [Thread-4695] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:48:53.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:48:53.880 [DEBUG] [Thread-4698] [transport.py] [_log()] starting thread (client mode): 0x70d0d570
2025-11-25T19:48:53.880 [DEBUG] [Thread-4698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:48:53.894 [DEBUG] [Thread-4698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:48:53.894 [INFO] [Thread-4698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:48:53.902 [DEBUG] [Thread-4698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:48:53.902 [DEBUG] [Thread-4698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:48:53.902 [DEBUG] [Thread-4698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:48:53.902 [DEBUG] [Thread-4698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:48:53.902 [DEBUG] [Thread-4698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:48:53.902 [DEBUG] [Thread-4698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] client lang: <none>
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] server lang: <none>
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] kex follows: False
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] Compression: none
2025-11-25T19:48:53.903 [DEBUG] [Thread-4698] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:48:53.958 [DEBUG] [Thread-4698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:48:53.959 [DEBUG] [Thread-4698] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:48:53.959 [DEBUG] [Thread-4698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:48:53.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:48:53.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:48:54.015 [DEBUG] [Thread-4698] [transport.py] [_log()] userauth is OK
2025-11-25T19:48:54.015 [DEBUG] [Thread-4698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:48:54.015 [DEBUG] [Thread-4698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:48:54.015 [DEBUG] [Thread-4698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:48:54.015 [DEBUG] [Thread-4698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:48:54.034 [INFO] [Thread-4698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:48:54.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:48:54.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:48:54.128 [DEBUG] [Thread-4700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:48:54.877 [DEBUG] [Thread-4698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:48:54.878 [DEBUG] [Thread-4698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:48:54.925 [DEBUG] [Thread-4698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:48:54.925 [DEBUG] [Thread-4698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:48:54.934 [DEBUG] [Thread-4698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:48:54.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:48:54.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:48:54.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:48:54.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:48:54.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:48:54.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:48:54.969 [DEBUG] [Thread-4698] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:49:01.104 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:01.106 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:07.642 [DEBUG] [Thread-4701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:22.691 [DEBUG] [Thread-4702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:24.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:49:24.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:49:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:49:25.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 49, 16), 31.47, 11.84, 0.0, 11.15, 23.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:49:25.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:49:16
2025-11-25T19:49:25.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:49:25.935 [DEBUG] [Thread-4685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:25.939 [DEBUG] [Thread-4703] [transport.py] [_log()] starting thread (client mode): 0x70d2ada0
2025-11-25T19:49:25.939 [DEBUG] [Thread-4703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:49:25.959 [DEBUG] [Thread-4703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:49:25.960 [INFO] [Thread-4703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:49:25.963 [DEBUG] [Thread-4703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:49:25.963 [DEBUG] [Thread-4703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:49:25.963 [DEBUG] [Thread-4703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:49:25.963 [DEBUG] [Thread-4703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:49:25.963 [DEBUG] [Thread-4703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:49:25.963 [DEBUG] [Thread-4703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:49:25.963 [DEBUG] [Thread-4703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] client lang: <none>
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] server lang: <none>
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] kex follows: False
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] Compression: none
2025-11-25T19:49:25.964 [DEBUG] [Thread-4703] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:49:25.983 [DEBUG] [Thread-4703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:49:25.984 [DEBUG] [Thread-4703] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:49:25.985 [DEBUG] [Thread-4703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:49:25.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:49:25.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:49:26.028 [DEBUG] [Thread-4703] [transport.py] [_log()] userauth is OK
2025-11-25T19:49:26.029 [DEBUG] [Thread-4703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:49:26.029 [DEBUG] [Thread-4703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:49:26.029 [DEBUG] [Thread-4703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:49:26.029 [DEBUG] [Thread-4703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:49:26.051 [INFO] [Thread-4703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:49:26.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:49:26.717 [DEBUG] [Thread-4703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:49:26.717 [DEBUG] [Thread-4703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:49:26.718 [DEBUG] [Thread-4703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:49:26.757 [DEBUG] [Thread-4703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:49:26.758 [DEBUG] [Thread-4703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:49:26.761 [DEBUG] [Thread-4703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:49:26.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:49:26.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:49:26.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:49:26.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:49:26.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:49:26.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:49:26.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:49:26.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:49:26.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:49:26.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.742113 -999.00  +23.50   5.67     16   -3.10 1 1 1 1 1   355    0 25.29 -63.79 ----- 8.6 5.7 275.6 11.4 23.8 -27.5 23.8 -26.8 23.5 -25.7 23.7 -26.7
2025-11-25T19:49:26.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:49:26.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:49:26.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.742113
2025-11-25T19:49:26.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:49:26.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:49:26.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:49:26.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:49:26.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:49:26.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:49:16', tmtdew=31.47, humidity=11.84, cloud=0.0, wind=11.15, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:48:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:49:26.787 [DEBUG] [Thread-4703] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:49:26.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:49:26.894 [DEBUG] [Thread-4706] [transport.py] [_log()] starting thread (client mode): 0x70d2be80
2025-11-25T19:49:26.894 [DEBUG] [Thread-4706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:49:26.910 [DEBUG] [Thread-4706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:49:26.910 [INFO] [Thread-4706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:49:26.917 [DEBUG] [Thread-4706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:49:26.918 [DEBUG] [Thread-4706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:49:26.918 [DEBUG] [Thread-4706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:49:26.918 [DEBUG] [Thread-4706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:49:26.918 [DEBUG] [Thread-4706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:49:26.918 [DEBUG] [Thread-4706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:49:26.918 [DEBUG] [Thread-4706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:49:26.918 [DEBUG] [Thread-4706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:49:26.919 [DEBUG] [Thread-4706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:49:26.919 [DEBUG] [Thread-4706] [transport.py] [_log()] client lang: <none>
2025-11-25T19:49:26.919 [DEBUG] [Thread-4706] [transport.py] [_log()] server lang: <none>
2025-11-25T19:49:26.919 [DEBUG] [Thread-4706] [transport.py] [_log()] kex follows: False
2025-11-25T19:49:26.919 [DEBUG] [Thread-4706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:49:26.919 [DEBUG] [Thread-4706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:49:26.919 [DEBUG] [Thread-4706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:49:26.919 [DEBUG] [Thread-4706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:49:26.920 [DEBUG] [Thread-4706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:49:26.920 [DEBUG] [Thread-4706] [transport.py] [_log()] Compression: none
2025-11-25T19:49:26.920 [DEBUG] [Thread-4706] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:49:26.975 [DEBUG] [Thread-4706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:49:26.976 [DEBUG] [Thread-4706] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:49:26.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:49:26.977 [DEBUG] [Thread-4706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:49:26.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:49:27.031 [DEBUG] [Thread-4706] [transport.py] [_log()] userauth is OK
2025-11-25T19:49:27.032 [DEBUG] [Thread-4706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:49:27.032 [DEBUG] [Thread-4706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:49:27.032 [DEBUG] [Thread-4706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:49:27.032 [DEBUG] [Thread-4706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:49:27.054 [INFO] [Thread-4706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:49:27.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:49:27.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:49:27.956 [DEBUG] [Thread-4706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:49:27.957 [DEBUG] [Thread-4706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:49:28.005 [DEBUG] [Thread-4706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:49:28.005 [DEBUG] [Thread-4706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:49:28.014 [DEBUG] [Thread-4706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:49:28.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:49:28.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:49:28.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:49:28.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:49:28.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:49:28.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:49:28.050 [DEBUG] [Thread-4706] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:49:37.729 [DEBUG] [Thread-4708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:52.015 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:52.779 [DEBUG] [Thread-4710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:54.192 [DEBUG] [Thread-4711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:49:58.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:49:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:49:58.075 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:49:58.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 49, 48), 31.45, 11.81, 0.0, 13.11, 23.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:49:58.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:49:48
2025-11-25T19:49:58.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:49:59.002 [DEBUG] [Thread-4712] [transport.py] [_log()] starting thread (client mode): 0x70d2a5c0
2025-11-25T19:49:59.002 [DEBUG] [Thread-4712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:49:59.023 [DEBUG] [Thread-4712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:49:59.023 [INFO] [Thread-4712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:49:59.026 [DEBUG] [Thread-4712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:49:59.026 [DEBUG] [Thread-4712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:49:59.026 [DEBUG] [Thread-4712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] client lang: <none>
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] server lang: <none>
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] kex follows: False
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] Compression: none
2025-11-25T19:49:59.027 [DEBUG] [Thread-4712] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:49:59.046 [DEBUG] [Thread-4712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:49:59.046 [DEBUG] [Thread-4712] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:49:59.047 [DEBUG] [Thread-4712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:49:59.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:49:59.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:49:59.049 [DEBUG] [Thread-4712] [transport.py] [_log()] userauth is OK
2025-11-25T19:49:59.049 [DEBUG] [Thread-4712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:49:59.049 [DEBUG] [Thread-4712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:49:59.049 [DEBUG] [Thread-4712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:49:59.049 [DEBUG] [Thread-4712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:49:59.072 [INFO] [Thread-4712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:49:59.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:49:59.854 [DEBUG] [Thread-4712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:49:59.855 [DEBUG] [Thread-4712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:49:59.855 [DEBUG] [Thread-4712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:49:59.896 [DEBUG] [Thread-4712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:49:59.896 [DEBUG] [Thread-4712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:49:59.902 [DEBUG] [Thread-4712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:49:59.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:49:59.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:49:59.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:49:59.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:49:59.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:49:59.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:49:59.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:49:59.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:49:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:49:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.742461 -999.00  +23.50   8.87     16   -3.10 1 1 1 1 1   335    0 25.24 -63.57 ----- 11.5 8.9 275.9 12.3 23.8 -27.4 23.8 -26.9 23.5 -25.4 23.7 -26.7
2025-11-25T19:49:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:49:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:49:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.742461
2025-11-25T19:49:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:49:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:49:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:49:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:49:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:49:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:49:48', tmtdew=31.45, humidity=11.81, cloud=0.0, wind=13.11, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:49:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:49:59.925 [DEBUG] [Thread-4712] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:50:00.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:50:00.024 [DEBUG] [Thread-4715] [transport.py] [_log()] starting thread (client mode): 0x70d2baf0
2025-11-25T19:50:00.024 [DEBUG] [Thread-4715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:50:00.041 [DEBUG] [Thread-4715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:50:00.041 [INFO] [Thread-4715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:50:00.050 [DEBUG] [Thread-4715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:50:00.050 [DEBUG] [Thread-4715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:50:00.050 [DEBUG] [Thread-4715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] client lang: <none>
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] server lang: <none>
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] kex follows: False
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] Compression: none
2025-11-25T19:50:00.051 [DEBUG] [Thread-4715] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:50:00.107 [DEBUG] [Thread-4715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:50:00.108 [DEBUG] [Thread-4715] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:50:00.108 [DEBUG] [Thread-4715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:50:00.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:50:00.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:50:00.163 [DEBUG] [Thread-4715] [transport.py] [_log()] userauth is OK
2025-11-25T19:50:00.164 [DEBUG] [Thread-4715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:50:00.164 [DEBUG] [Thread-4715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:50:00.164 [DEBUG] [Thread-4715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:50:00.164 [DEBUG] [Thread-4715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:50:00.182 [INFO] [Thread-4715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:50:00.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:50:00.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:50:01.019 [DEBUG] [Thread-4715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:50:01.019 [DEBUG] [Thread-4715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:50:01.067 [DEBUG] [Thread-4715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:50:01.068 [DEBUG] [Thread-4715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:50:01.077 [DEBUG] [Thread-4715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:50:01.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:50:01.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:50:01.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:50:01.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:50:01.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:50:01.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:50:01.112 [DEBUG] [Thread-4715] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:50:07.811 [DEBUG] [Thread-4717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:50:08.084 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:50:08.085 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:50:22.858 [DEBUG] [Thread-4718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:50:25.472 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:50:31.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:50:31.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:50:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:50:31.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 50, 20), 31.42, 11.84, 0.0, 13.64, 23.23, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:50:31.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:50:20
2025-11-25T19:50:31.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:50:32.051 [DEBUG] [Thread-4719] [transport.py] [_log()] starting thread (client mode): 0x70d54fd0
2025-11-25T19:50:32.051 [DEBUG] [Thread-4719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:50:32.070 [DEBUG] [Thread-4719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:50:32.070 [INFO] [Thread-4719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:50:32.073 [DEBUG] [Thread-4719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:50:32.073 [DEBUG] [Thread-4719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:50:32.073 [DEBUG] [Thread-4719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:50:32.073 [DEBUG] [Thread-4719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] client lang: <none>
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] server lang: <none>
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] kex follows: False
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] Compression: none
2025-11-25T19:50:32.074 [DEBUG] [Thread-4719] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:50:32.085 [DEBUG] [Thread-4719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:50:32.085 [DEBUG] [Thread-4719] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:50:32.086 [DEBUG] [Thread-4719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:50:32.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:50:32.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:50:32.087 [DEBUG] [Thread-4719] [transport.py] [_log()] userauth is OK
2025-11-25T19:50:32.088 [DEBUG] [Thread-4719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:50:32.088 [DEBUG] [Thread-4719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:50:32.088 [DEBUG] [Thread-4719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:50:32.088 [DEBUG] [Thread-4719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:50:32.112 [INFO] [Thread-4719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:50:32.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:50:32.744 [DEBUG] [Thread-4719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:50:32.744 [DEBUG] [Thread-4719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:50:32.744 [DEBUG] [Thread-4719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:50:32.785 [DEBUG] [Thread-4719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:50:32.785 [DEBUG] [Thread-4719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:50:32.788 [DEBUG] [Thread-4719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:50:32.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:50:32.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:50:32.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:50:32.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:50:32.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:50:32.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:50:32.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:50:32.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:50:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:50:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.742808 -999.00  +23.50   8.48     16   -3.10 1 1 1 1 1   316    0 24.76 -71.31 ----- 7.2 8.5 263.8 14.2 23.8 -27.4 23.8 -26.9 23.5 -25.6 23.6 -26.4
2025-11-25T19:50:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:50:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:50:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.742808
2025-11-25T19:50:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:50:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:50:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:50:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:50:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:50:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:50:20', tmtdew=31.42, humidity=11.84, cloud=0.0, wind=13.64, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:49:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:50:32.813 [DEBUG] [Thread-4719] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:50:32.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:50:32.909 [DEBUG] [Thread-4722] [transport.py] [_log()] starting thread (client mode): 0x70d6ad70
2025-11-25T19:50:32.909 [DEBUG] [Thread-4722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:50:32.923 [DEBUG] [Thread-4722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:50:32.923 [INFO] [Thread-4722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:50:32.930 [DEBUG] [Thread-4722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:50:32.930 [DEBUG] [Thread-4722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:50:32.930 [DEBUG] [Thread-4722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:50:32.930 [DEBUG] [Thread-4722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:50:32.930 [DEBUG] [Thread-4722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:50:32.930 [DEBUG] [Thread-4722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:50:32.930 [DEBUG] [Thread-4722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:50:32.930 [DEBUG] [Thread-4722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] client lang: <none>
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] server lang: <none>
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] kex follows: False
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] Compression: none
2025-11-25T19:50:32.931 [DEBUG] [Thread-4722] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:50:32.991 [DEBUG] [Thread-4722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:50:32.992 [DEBUG] [Thread-4722] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:50:32.992 [DEBUG] [Thread-4722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:50:32.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:50:32.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:50:33.047 [DEBUG] [Thread-4722] [transport.py] [_log()] userauth is OK
2025-11-25T19:50:33.048 [DEBUG] [Thread-4722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:50:33.048 [DEBUG] [Thread-4722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:50:33.048 [DEBUG] [Thread-4722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:50:33.048 [DEBUG] [Thread-4722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:50:33.066 [INFO] [Thread-4722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:50:33.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:50:33.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:50:33.878 [DEBUG] [Thread-4722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:50:33.879 [DEBUG] [Thread-4722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:50:33.926 [DEBUG] [Thread-4722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:50:33.927 [DEBUG] [Thread-4722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:50:33.935 [DEBUG] [Thread-4722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:50:33.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:50:33.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:50:33.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:50:33.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:50:33.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:50:33.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:50:33.970 [DEBUG] [Thread-4722] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:50:37.893 [DEBUG] [Thread-4724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:50:50.169 [DEBUG] [Thread-4685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:50:50.918 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:50:52.943 [DEBUG] [Thread-4725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:50:54.244 [DEBUG] [Thread-4726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:01.522 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:03.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:51:03.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:51:03.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:51:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 50, 52), 31.38, 11.84, 0.0, 12.44, 23.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:51:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:50:52
2025-11-25T19:51:04.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:51:04.900 [DEBUG] [Thread-4727] [transport.py] [_log()] starting thread (client mode): 0x737c5420
2025-11-25T19:51:04.900 [DEBUG] [Thread-4727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:51:04.919 [DEBUG] [Thread-4727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:51:04.919 [INFO] [Thread-4727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] client lang: <none>
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] server lang: <none>
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] kex follows: False
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] Compression: none
2025-11-25T19:51:04.921 [DEBUG] [Thread-4727] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:51:04.933 [DEBUG] [Thread-4727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:51:04.933 [DEBUG] [Thread-4727] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:51:04.934 [DEBUG] [Thread-4727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:51:04.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:51:04.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:51:04.935 [DEBUG] [Thread-4727] [transport.py] [_log()] userauth is OK
2025-11-25T19:51:04.935 [DEBUG] [Thread-4727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:51:04.936 [DEBUG] [Thread-4727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:51:04.936 [DEBUG] [Thread-4727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:51:04.936 [DEBUG] [Thread-4727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:51:04.960 [INFO] [Thread-4727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:51:04.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:51:05.753 [DEBUG] [Thread-4727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:51:05.753 [DEBUG] [Thread-4727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:51:05.754 [DEBUG] [Thread-4727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:51:05.795 [DEBUG] [Thread-4727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:51:05.795 [DEBUG] [Thread-4727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:51:05.798 [DEBUG] [Thread-4727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:51:05.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:51:05.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:51:05.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:51:05.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:51:05.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:51:05.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:51:05.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:51:05.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:51:05.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:51:05.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.743502 -999.00  +23.30   8.68     16   -3.20 1 1 1 1 1   280    0 25.04 -73.30 ----- 8.2 8.7 268.6 14.8 23.7 -27.4 23.7 -26.7 23.4 -25.5 23.6 -26.6
2025-11-25T19:51:05.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:51:05.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:51:05.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.743502
2025-11-25T19:51:05.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:51:05.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:51:05.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:51:05.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:51:05.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:51:05.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:50:52', tmtdew=31.38, humidity=11.84, cloud=0.0, wind=12.44, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:50:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:51:05.822 [DEBUG] [Thread-4727] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:51:05.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:51:05.919 [DEBUG] [Thread-4730] [transport.py] [_log()] starting thread (client mode): 0x737c54b0
2025-11-25T19:51:05.919 [DEBUG] [Thread-4730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:51:05.936 [DEBUG] [Thread-4730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:51:05.937 [INFO] [Thread-4730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] client lang: <none>
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] server lang: <none>
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] kex follows: False
2025-11-25T19:51:05.944 [DEBUG] [Thread-4730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:51:05.945 [DEBUG] [Thread-4730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:51:05.945 [DEBUG] [Thread-4730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:51:05.945 [DEBUG] [Thread-4730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:51:05.945 [DEBUG] [Thread-4730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:51:05.945 [DEBUG] [Thread-4730] [transport.py] [_log()] Compression: none
2025-11-25T19:51:05.945 [DEBUG] [Thread-4730] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:51:06.004 [DEBUG] [Thread-4730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:51:06.004 [DEBUG] [Thread-4730] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:51:06.005 [DEBUG] [Thread-4730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:51:06.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:51:06.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:51:06.063 [DEBUG] [Thread-4730] [transport.py] [_log()] userauth is OK
2025-11-25T19:51:06.063 [DEBUG] [Thread-4730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:51:06.064 [DEBUG] [Thread-4730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:51:06.064 [DEBUG] [Thread-4730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:51:06.064 [DEBUG] [Thread-4730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:51:06.083 [INFO] [Thread-4730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:51:06.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:51:06.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:51:07.039 [DEBUG] [Thread-4730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:51:07.039 [DEBUG] [Thread-4730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:51:07.086 [DEBUG] [Thread-4730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:51:07.087 [DEBUG] [Thread-4730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:51:07.097 [DEBUG] [Thread-4730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:51:07.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:51:07.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:51:07.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:51:07.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:51:07.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:51:07.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:51:07.133 [DEBUG] [Thread-4730] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:51:07.619 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:07.975 [DEBUG] [Thread-4732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:14.264 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:14.265 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:23.033 [DEBUG] [Thread-4733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:32.109 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:51:37.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:51:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:51:37.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 51, 25), 31.39, 11.83, 0.0, 13.27, 23.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:51:37.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:51:25
2025-11-25T19:51:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:51:38.041 [DEBUG] [Thread-4734] [transport.py] [_log()] starting thread (client mode): 0x70d68790
2025-11-25T19:51:38.041 [DEBUG] [Thread-4734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:51:38.062 [DEBUG] [Thread-4734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:51:38.062 [INFO] [Thread-4734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:51:38.065 [DEBUG] [Thread-4734] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] client lang: <none>
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] server lang: <none>
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] kex follows: False
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] Compression: none
2025-11-25T19:51:38.066 [DEBUG] [Thread-4734] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:51:38.067 [DEBUG] [Thread-4736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:38.086 [DEBUG] [Thread-4734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:51:38.086 [DEBUG] [Thread-4734] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:51:38.087 [DEBUG] [Thread-4734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:51:38.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:51:38.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:51:38.089 [DEBUG] [Thread-4734] [transport.py] [_log()] userauth is OK
2025-11-25T19:51:38.089 [DEBUG] [Thread-4734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:51:38.089 [DEBUG] [Thread-4734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:51:38.089 [DEBUG] [Thread-4734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:51:38.089 [DEBUG] [Thread-4734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:51:38.125 [INFO] [Thread-4734] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:51:38.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:51:38.764 [DEBUG] [Thread-4734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:51:38.764 [DEBUG] [Thread-4734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:51:38.764 [DEBUG] [Thread-4734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:51:38.805 [DEBUG] [Thread-4734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:51:38.805 [DEBUG] [Thread-4734] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:51:38.808 [DEBUG] [Thread-4734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:51:38.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:51:38.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:51:38.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:51:38.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:51:38.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:51:38.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:51:38.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:51:38.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:51:38.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:51:38.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.743849 -999.00  +23.30  11.46     16   -3.20 1 1 1 1 1   262    0 24.08 -76.03 ----- 11.3 11.5 275.6 15.8 23.7 -27.4 23.8 -26.8 23.4 -25.5 23.6 -26.5
2025-11-25T19:51:38.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:51:38.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:51:38.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.743849
2025-11-25T19:51:38.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:51:38.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:51:38.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:51:38.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:51:38.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:51:38.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:51:25', tmtdew=31.39, humidity=11.83, cloud=0.0, wind=13.27, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:51:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:51:38.829 [DEBUG] [Thread-4734] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:51:38.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:51:38.926 [DEBUG] [Thread-4738] [transport.py] [_log()] starting thread (client mode): 0x70d2b310
2025-11-25T19:51:38.926 [DEBUG] [Thread-4738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:51:38.942 [DEBUG] [Thread-4738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:51:38.942 [INFO] [Thread-4738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:51:38.949 [DEBUG] [Thread-4738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:51:38.950 [DEBUG] [Thread-4738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:51:38.950 [DEBUG] [Thread-4738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:51:38.950 [DEBUG] [Thread-4738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:51:38.950 [DEBUG] [Thread-4738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:51:38.950 [DEBUG] [Thread-4738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:51:38.950 [DEBUG] [Thread-4738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:51:38.950 [DEBUG] [Thread-4738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:51:38.951 [DEBUG] [Thread-4738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:51:38.951 [DEBUG] [Thread-4738] [transport.py] [_log()] client lang: <none>
2025-11-25T19:51:38.951 [DEBUG] [Thread-4738] [transport.py] [_log()] server lang: <none>
2025-11-25T19:51:38.951 [DEBUG] [Thread-4738] [transport.py] [_log()] kex follows: False
2025-11-25T19:51:38.951 [DEBUG] [Thread-4738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:51:38.951 [DEBUG] [Thread-4738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:51:38.951 [DEBUG] [Thread-4738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:51:38.951 [DEBUG] [Thread-4738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:51:38.951 [DEBUG] [Thread-4738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:51:38.952 [DEBUG] [Thread-4738] [transport.py] [_log()] Compression: none
2025-11-25T19:51:38.952 [DEBUG] [Thread-4738] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:51:39.008 [DEBUG] [Thread-4738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:51:39.009 [DEBUG] [Thread-4738] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:51:39.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:51:39.011 [DEBUG] [Thread-4738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:51:39.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:51:39.067 [DEBUG] [Thread-4738] [transport.py] [_log()] userauth is OK
2025-11-25T19:51:39.068 [DEBUG] [Thread-4738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:51:39.068 [DEBUG] [Thread-4738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:51:39.068 [DEBUG] [Thread-4738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:51:39.068 [DEBUG] [Thread-4738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:51:39.092 [INFO] [Thread-4738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:51:39.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:51:39.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:51:39.931 [DEBUG] [Thread-4738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:51:39.931 [DEBUG] [Thread-4738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:51:39.979 [DEBUG] [Thread-4738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:51:39.979 [DEBUG] [Thread-4738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:51:39.988 [DEBUG] [Thread-4738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:51:39.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:51:39.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:51:40.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:51:40.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:51:40.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:51:40.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:51:40.024 [DEBUG] [Thread-4738] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:51:53.101 [DEBUG] [Thread-4740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:54.302 [DEBUG] [Thread-4741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:51:55.621 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:04.077 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:08.153 [DEBUG] [Thread-4742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:10.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:52:10.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:52:10.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:52:10.228 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:10.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 51, 56), 31.33, 11.88, 0.0, 13.45, 23.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:52:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:51:56
2025-11-25T19:52:10.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:52:11.011 [DEBUG] [Thread-4743] [transport.py] [_log()] starting thread (client mode): 0x70d68340
2025-11-25T19:52:11.011 [DEBUG] [Thread-4743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:52:11.032 [DEBUG] [Thread-4743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:52:11.032 [INFO] [Thread-4743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] client lang: <none>
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] server lang: <none>
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] kex follows: False
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:52:11.035 [DEBUG] [Thread-4743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:52:11.036 [DEBUG] [Thread-4743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:52:11.036 [DEBUG] [Thread-4743] [transport.py] [_log()] Compression: none
2025-11-25T19:52:11.036 [DEBUG] [Thread-4743] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:52:11.051 [DEBUG] [Thread-4743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:52:11.051 [DEBUG] [Thread-4743] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:52:11.051 [DEBUG] [Thread-4743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:52:11.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:52:11.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:52:11.052 [DEBUG] [Thread-4743] [transport.py] [_log()] userauth is OK
2025-11-25T19:52:11.052 [DEBUG] [Thread-4743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:52:11.052 [DEBUG] [Thread-4743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:52:11.052 [DEBUG] [Thread-4743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:52:11.052 [DEBUG] [Thread-4743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:52:11.062 [INFO] [Thread-4743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:52:11.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:52:11.788 [DEBUG] [Thread-4743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:52:11.788 [DEBUG] [Thread-4743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:52:11.788 [DEBUG] [Thread-4743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:52:11.829 [DEBUG] [Thread-4743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:52:11.829 [DEBUG] [Thread-4743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:52:11.831 [DEBUG] [Thread-4743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:52:11.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:52:11.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:52:11.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:52:11.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:52:11.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:52:11.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:52:11.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.744197 -999.00  +23.30   8.96     16   -3.10 1 1 1 1 1   246    0 24.36 -82.18 ----- 8.0 9.0 271.8 17.6 23.7 -27.3 23.7 -26.8 23.4 -25.5 23.6 -26.4
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.744197
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:52:11.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:51:56', tmtdew=31.33, humidity=11.88, cloud=0.0, wind=13.45, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:51:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:52:11.859 [DEBUG] [Thread-4743] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:52:11.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:52:11.945 [DEBUG] [Thread-4746] [transport.py] [_log()] starting thread (client mode): 0x70d6ae30
2025-11-25T19:52:11.945 [DEBUG] [Thread-4746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:52:11.960 [DEBUG] [Thread-4746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:52:11.960 [INFO] [Thread-4746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] client lang: <none>
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] server lang: <none>
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] kex follows: False
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] Compression: none
2025-11-25T19:52:11.968 [DEBUG] [Thread-4746] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:52:12.025 [DEBUG] [Thread-4746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:52:12.025 [DEBUG] [Thread-4746] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:52:12.025 [DEBUG] [Thread-4746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:52:12.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:52:12.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:52:12.082 [DEBUG] [Thread-4746] [transport.py] [_log()] userauth is OK
2025-11-25T19:52:12.083 [DEBUG] [Thread-4746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:52:12.083 [DEBUG] [Thread-4746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:52:12.083 [DEBUG] [Thread-4746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:52:12.083 [DEBUG] [Thread-4746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:52:12.100 [INFO] [Thread-4746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:52:12.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:52:12.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:52:12.932 [DEBUG] [Thread-4746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:52:12.932 [DEBUG] [Thread-4746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:52:12.979 [DEBUG] [Thread-4746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:52:12.979 [DEBUG] [Thread-4746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:52:12.988 [DEBUG] [Thread-4746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:52:12.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:52:12.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:52:13.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:52:13.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:52:13.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:52:13.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:52:13.019 [DEBUG] [Thread-4746] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:52:21.686 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:21.687 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:23.184 [DEBUG] [Thread-4748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:33.727 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:38.248 [DEBUG] [Thread-4749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:52:43.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:52:43.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:52:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 52, 29), 31.28, 11.93, 0.0, 12.18, 23.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:52:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:52:29
2025-11-25T19:52:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:52:43.956 [DEBUG] [Thread-4750] [transport.py] [_log()] starting thread (client mode): 0x70d1efe0
2025-11-25T19:52:43.956 [DEBUG] [Thread-4750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:52:43.976 [DEBUG] [Thread-4750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:52:43.976 [INFO] [Thread-4750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:52:43.979 [DEBUG] [Thread-4750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] client lang: <none>
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] server lang: <none>
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] kex follows: False
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] Compression: none
2025-11-25T19:52:43.980 [DEBUG] [Thread-4750] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:52:43.999 [DEBUG] [Thread-4750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:52:43.999 [DEBUG] [Thread-4750] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:52:43.999 [DEBUG] [Thread-4750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:52:43.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:52:43.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:52:44.000 [DEBUG] [Thread-4750] [transport.py] [_log()] userauth is OK
2025-11-25T19:52:44.000 [DEBUG] [Thread-4750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:52:44.000 [DEBUG] [Thread-4750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:52:44.000 [DEBUG] [Thread-4750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:52:44.000 [DEBUG] [Thread-4750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:52:44.010 [INFO] [Thread-4750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:52:44.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:52:44.623 [DEBUG] [Thread-4750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:52:44.623 [DEBUG] [Thread-4750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:52:44.623 [DEBUG] [Thread-4750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:52:44.664 [DEBUG] [Thread-4750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:52:44.664 [DEBUG] [Thread-4750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:52:44.667 [DEBUG] [Thread-4750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:52:44.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:52:44.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:52:44.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:52:44.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:52:44.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:52:44.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:52:44.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:52:44.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:52:44.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:52:44.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.744544 -999.00  +23.30   7.81     16   -3.10 1 1 1 1 1   230    0 24.31 -82.10 ----- 13.1 7.8 258.4 9.2 23.7 -27.4 23.7 -26.7 23.4 -25.5 23.6 -26.5
2025-11-25T19:52:44.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:52:44.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:52:44.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.744544
2025-11-25T19:52:44.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:52:44.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:52:44.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:52:44.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:52:44.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:52:44.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:52:29', tmtdew=31.28, humidity=11.93, cloud=0.0, wind=12.18, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:52:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:52:44.694 [DEBUG] [Thread-4750] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:52:44.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:52:44.789 [DEBUG] [Thread-4753] [transport.py] [_log()] starting thread (client mode): 0x70d1c700
2025-11-25T19:52:44.789 [DEBUG] [Thread-4753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:52:44.803 [DEBUG] [Thread-4753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:52:44.803 [INFO] [Thread-4753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:52:44.810 [DEBUG] [Thread-4753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:52:44.810 [DEBUG] [Thread-4753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] client lang: <none>
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] server lang: <none>
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] kex follows: False
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] Compression: none
2025-11-25T19:52:44.811 [DEBUG] [Thread-4753] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:52:44.865 [DEBUG] [Thread-4753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:52:44.865 [DEBUG] [Thread-4753] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:52:44.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:52:44.866 [DEBUG] [Thread-4753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:52:44.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:52:44.923 [DEBUG] [Thread-4753] [transport.py] [_log()] userauth is OK
2025-11-25T19:52:44.923 [DEBUG] [Thread-4753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:52:44.923 [DEBUG] [Thread-4753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:52:44.923 [DEBUG] [Thread-4753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:52:44.923 [DEBUG] [Thread-4753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:52:44.936 [INFO] [Thread-4753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:52:44.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:52:44.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:52:45.764 [DEBUG] [Thread-4753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:52:45.764 [DEBUG] [Thread-4753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:52:45.812 [DEBUG] [Thread-4753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:52:45.812 [DEBUG] [Thread-4753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:52:45.820 [DEBUG] [Thread-4753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:52:45.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:52:45.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:52:45.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:52:45.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:52:45.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:52:45.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:52:45.851 [DEBUG] [Thread-4753] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:52:53.284 [DEBUG] [Thread-4755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:54.358 [DEBUG] [Thread-4756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:52:57.194 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:05.705 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:08.334 [DEBUG] [Thread-4757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:11.820 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:15.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:53:15.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:53:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:53:16.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 53, 1), 31.31, 11.91, 0.0, 14.49, 23.23, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:53:16.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:53:01
2025-11-25T19:53:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:53:16.764 [DEBUG] [Thread-4758] [transport.py] [_log()] starting thread (client mode): 0x70d680a0
2025-11-25T19:53:16.765 [DEBUG] [Thread-4758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:53:16.785 [DEBUG] [Thread-4758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:53:16.785 [INFO] [Thread-4758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:53:16.788 [DEBUG] [Thread-4758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:53:16.788 [DEBUG] [Thread-4758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:53:16.788 [DEBUG] [Thread-4758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:53:16.788 [DEBUG] [Thread-4758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:53:16.788 [DEBUG] [Thread-4758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:53:16.788 [DEBUG] [Thread-4758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:53:16.788 [DEBUG] [Thread-4758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:53:16.788 [DEBUG] [Thread-4758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] client lang: <none>
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] server lang: <none>
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] kex follows: False
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] Compression: none
2025-11-25T19:53:16.789 [DEBUG] [Thread-4758] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:53:16.805 [DEBUG] [Thread-4758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:53:16.805 [DEBUG] [Thread-4758] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:53:16.806 [DEBUG] [Thread-4758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:53:16.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:53:16.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:53:16.807 [DEBUG] [Thread-4758] [transport.py] [_log()] userauth is OK
2025-11-25T19:53:16.808 [DEBUG] [Thread-4758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:53:16.808 [DEBUG] [Thread-4758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:53:16.808 [DEBUG] [Thread-4758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:53:16.808 [DEBUG] [Thread-4758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:53:16.826 [INFO] [Thread-4758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:53:16.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:53:17.562 [DEBUG] [Thread-4758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:53:17.562 [DEBUG] [Thread-4758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:53:17.562 [DEBUG] [Thread-4758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:53:17.603 [DEBUG] [Thread-4758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:53:17.603 [DEBUG] [Thread-4758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:53:17.606 [DEBUG] [Thread-4758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:53:17.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:53:17.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:53:17.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:53:17.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:53:17.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:53:17.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:53:17.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:53:17.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:53:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:53:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.744891 -999.00  +23.30   8.46     16   -3.10 1 1 1 1 1   214    0 24.22 -76.95 ----- 8.8 8.5 252.6 14.7 23.6 -27.3 23.6 -26.7 23.4 -25.5 23.5 -26.5
2025-11-25T19:53:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:53:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:53:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.744891
2025-11-25T19:53:17.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:53:17.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:53:17.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:53:17.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:53:17.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:53:17.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:53:01', tmtdew=31.31, humidity=11.91, cloud=0.0, wind=14.49, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:52:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:53:17.644 [DEBUG] [Thread-4758] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:53:17.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:53:17.735 [DEBUG] [Thread-4761] [transport.py] [_log()] starting thread (client mode): 0x70d29d80
2025-11-25T19:53:17.735 [DEBUG] [Thread-4761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:53:17.751 [DEBUG] [Thread-4761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:53:17.751 [INFO] [Thread-4761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] client lang: <none>
2025-11-25T19:53:17.758 [DEBUG] [Thread-4761] [transport.py] [_log()] server lang: <none>
2025-11-25T19:53:17.759 [DEBUG] [Thread-4761] [transport.py] [_log()] kex follows: False
2025-11-25T19:53:17.759 [DEBUG] [Thread-4761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:53:17.759 [DEBUG] [Thread-4761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:53:17.759 [DEBUG] [Thread-4761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:53:17.759 [DEBUG] [Thread-4761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:53:17.759 [DEBUG] [Thread-4761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:53:17.759 [DEBUG] [Thread-4761] [transport.py] [_log()] Compression: none
2025-11-25T19:53:17.759 [DEBUG] [Thread-4761] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:53:17.819 [DEBUG] [Thread-4761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:53:17.819 [DEBUG] [Thread-4761] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:53:17.820 [DEBUG] [Thread-4761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:53:17.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:53:17.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:53:17.876 [DEBUG] [Thread-4761] [transport.py] [_log()] userauth is OK
2025-11-25T19:53:17.877 [DEBUG] [Thread-4761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:53:17.877 [DEBUG] [Thread-4761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:53:17.877 [DEBUG] [Thread-4761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:53:17.877 [DEBUG] [Thread-4761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:53:17.895 [INFO] [Thread-4761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:53:17.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:53:17.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:53:18.727 [DEBUG] [Thread-4761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:53:18.727 [DEBUG] [Thread-4761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:53:18.775 [DEBUG] [Thread-4761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:53:18.776 [DEBUG] [Thread-4761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:53:18.784 [DEBUG] [Thread-4761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:53:18.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:53:18.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:53:18.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:53:18.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:53:18.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:53:18.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:53:18.827 [DEBUG] [Thread-4761] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:53:23.369 [DEBUG] [Thread-4763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:29.804 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:29.806 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:35.234 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:38.407 [DEBUG] [Thread-4764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:53:48.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:53:48.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:53:49.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 53, 33), 31.3, 11.91, 0.0, 14.65, 23.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:53:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:53:33
2025-11-25T19:53:49.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:53:49.767 [DEBUG] [Thread-4765] [transport.py] [_log()] starting thread (client mode): 0x70d2a710
2025-11-25T19:53:49.767 [DEBUG] [Thread-4765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:53:49.790 [DEBUG] [Thread-4765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:53:49.790 [INFO] [Thread-4765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:53:49.794 [DEBUG] [Thread-4765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:53:49.794 [DEBUG] [Thread-4765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:53:49.794 [DEBUG] [Thread-4765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] client lang: <none>
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] server lang: <none>
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] kex follows: False
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] Compression: none
2025-11-25T19:53:49.795 [DEBUG] [Thread-4765] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:53:49.814 [DEBUG] [Thread-4765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:53:49.815 [DEBUG] [Thread-4765] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:53:49.815 [DEBUG] [Thread-4765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:53:49.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:53:49.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:53:49.817 [DEBUG] [Thread-4765] [transport.py] [_log()] userauth is OK
2025-11-25T19:53:49.817 [DEBUG] [Thread-4765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:53:49.817 [DEBUG] [Thread-4765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:53:49.818 [DEBUG] [Thread-4765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:53:49.818 [DEBUG] [Thread-4765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:53:49.840 [INFO] [Thread-4765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:53:49.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:53:50.515 [DEBUG] [Thread-4765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:53:50.515 [DEBUG] [Thread-4765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:53:50.515 [DEBUG] [Thread-4765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:53:50.555 [DEBUG] [Thread-4765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:53:50.556 [DEBUG] [Thread-4765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:53:50.559 [DEBUG] [Thread-4765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:53:50.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:53:50.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:53:50.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:53:50.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:53:50.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:53:50.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:53:50.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:53:50.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:53:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:53:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.745238 -999.00  +23.20   6.88     16   -3.20 1 1 1 1 1   200    0 24.96 -73.64 ----- 7.8 6.9 261.0 14.4 23.6 -27.3 23.6 -26.7 23.3 -25.4 23.5 -26.5
2025-11-25T19:53:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:53:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:53:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.745238
2025-11-25T19:53:50.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:53:50.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:53:50.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:53:50.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:53:50.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:53:50.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:53:33', tmtdew=31.3, humidity=11.91, cloud=0.0, wind=14.65, temperature=23.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:53:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:53:50.588 [DEBUG] [Thread-4765] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:53:50.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:53:50.685 [DEBUG] [Thread-4768] [transport.py] [_log()] starting thread (client mode): 0x70d2a050
2025-11-25T19:53:50.686 [DEBUG] [Thread-4768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:53:50.701 [DEBUG] [Thread-4768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:53:50.701 [INFO] [Thread-4768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] client lang: <none>
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] server lang: <none>
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] kex follows: False
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:53:50.709 [DEBUG] [Thread-4768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:53:50.710 [DEBUG] [Thread-4768] [transport.py] [_log()] Compression: none
2025-11-25T19:53:50.710 [DEBUG] [Thread-4768] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:53:50.767 [DEBUG] [Thread-4768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:53:50.767 [DEBUG] [Thread-4768] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:53:50.768 [DEBUG] [Thread-4768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:53:50.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:53:50.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:53:50.826 [DEBUG] [Thread-4768] [transport.py] [_log()] userauth is OK
2025-11-25T19:53:50.826 [DEBUG] [Thread-4768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:53:50.826 [DEBUG] [Thread-4768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:53:50.826 [DEBUG] [Thread-4768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:53:50.826 [DEBUG] [Thread-4768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:53:50.845 [INFO] [Thread-4768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:53:50.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:53:50.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:53:51.693 [DEBUG] [Thread-4768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:53:51.693 [DEBUG] [Thread-4768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:53:51.741 [DEBUG] [Thread-4768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:53:51.741 [DEBUG] [Thread-4768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:53:51.749 [DEBUG] [Thread-4768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:53:51.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:53:51.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:53:51.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:53:51.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:53:51.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:53:51.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:53:51.793 [DEBUG] [Thread-4768] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:53:53.442 [DEBUG] [Thread-4770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:54.418 [DEBUG] [Thread-4771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:53:58.705 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:07.158 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:08.487 [DEBUG] [Thread-4772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:13.313 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:21.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:54:21.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:54:21.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:54:22.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 54, 5), 31.28, 11.93, 0.0, 14.79, 23.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:54:22.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:54:05
2025-11-25T19:54:22.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:54:22.733 [DEBUG] [Thread-4773] [transport.py] [_log()] starting thread (client mode): 0x737c7580
2025-11-25T19:54:22.733 [DEBUG] [Thread-4773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:54:22.753 [DEBUG] [Thread-4773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:54:22.753 [INFO] [Thread-4773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] client lang: <none>
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] server lang: <none>
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] kex follows: False
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] Compression: none
2025-11-25T19:54:22.757 [DEBUG] [Thread-4773] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:54:22.774 [DEBUG] [Thread-4773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:54:22.775 [DEBUG] [Thread-4773] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:54:22.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:54:22.776 [DEBUG] [Thread-4773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:54:22.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:54:22.778 [DEBUG] [Thread-4773] [transport.py] [_log()] userauth is OK
2025-11-25T19:54:22.778 [DEBUG] [Thread-4773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:54:22.778 [DEBUG] [Thread-4773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:54:22.778 [DEBUG] [Thread-4773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:54:22.778 [DEBUG] [Thread-4773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:54:22.796 [INFO] [Thread-4773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:54:22.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:54:23.520 [DEBUG] [Thread-4775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:23.579 [DEBUG] [Thread-4773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:54:23.579 [DEBUG] [Thread-4773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:54:23.579 [DEBUG] [Thread-4773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:54:23.620 [DEBUG] [Thread-4773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:54:23.620 [DEBUG] [Thread-4773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:54:23.622 [DEBUG] [Thread-4773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:54:23.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:54:23.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:54:23.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:54:23.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:54:23.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:54:23.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:54:23.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:54:23.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:54:23.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:54:23.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.745586 -999.00  +23.20   8.06     16   -3.20 1 1 1 1 1   186    0 24.94 -68.82 ----- 6.0 8.1 271.8 11.3 23.6 -27.2 23.6 -26.7 23.2 -25.4 23.5 -26.5
2025-11-25T19:54:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:54:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:54:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.745586
2025-11-25T19:54:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:54:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:54:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:54:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:54:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:54:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:54:05', tmtdew=31.28, humidity=11.93, cloud=0.0, wind=14.79, temperature=23.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:53:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:54:23.643 [DEBUG] [Thread-4773] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:54:23.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:54:23.740 [DEBUG] [Thread-4777] [transport.py] [_log()] starting thread (client mode): 0x7374fa00
2025-11-25T19:54:23.740 [DEBUG] [Thread-4777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:54:23.755 [DEBUG] [Thread-4777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:54:23.755 [INFO] [Thread-4777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:54:23.763 [DEBUG] [Thread-4777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:54:23.763 [DEBUG] [Thread-4777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:54:23.764 [DEBUG] [Thread-4777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:54:23.764 [DEBUG] [Thread-4777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:54:23.764 [DEBUG] [Thread-4777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:54:23.764 [DEBUG] [Thread-4777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:54:23.764 [DEBUG] [Thread-4777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:54:23.764 [DEBUG] [Thread-4777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:54:23.764 [DEBUG] [Thread-4777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:54:23.764 [DEBUG] [Thread-4777] [transport.py] [_log()] client lang: <none>
2025-11-25T19:54:23.765 [DEBUG] [Thread-4777] [transport.py] [_log()] server lang: <none>
2025-11-25T19:54:23.765 [DEBUG] [Thread-4777] [transport.py] [_log()] kex follows: False
2025-11-25T19:54:23.765 [DEBUG] [Thread-4777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:54:23.765 [DEBUG] [Thread-4777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:54:23.765 [DEBUG] [Thread-4777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:54:23.765 [DEBUG] [Thread-4777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:54:23.765 [DEBUG] [Thread-4777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:54:23.765 [DEBUG] [Thread-4777] [transport.py] [_log()] Compression: none
2025-11-25T19:54:23.766 [DEBUG] [Thread-4777] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:54:23.827 [DEBUG] [Thread-4777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:54:23.828 [DEBUG] [Thread-4777] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:54:23.829 [DEBUG] [Thread-4777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:54:23.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:54:23.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:54:23.887 [DEBUG] [Thread-4777] [transport.py] [_log()] userauth is OK
2025-11-25T19:54:23.887 [DEBUG] [Thread-4777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:54:23.887 [DEBUG] [Thread-4777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:54:23.887 [DEBUG] [Thread-4777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:54:23.888 [DEBUG] [Thread-4777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:54:23.907 [INFO] [Thread-4777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:54:23.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:54:23.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:54:24.749 [DEBUG] [Thread-4777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:54:24.749 [DEBUG] [Thread-4777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:54:24.798 [DEBUG] [Thread-4777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:54:24.798 [DEBUG] [Thread-4777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:54:24.807 [DEBUG] [Thread-4777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:54:24.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:54:24.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:54:24.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:54:24.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:54:24.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:54:24.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:54:24.848 [DEBUG] [Thread-4777] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:54:36.752 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:36.962 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:36.963 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:38.552 [DEBUG] [Thread-4779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:53.594 [DEBUG] [Thread-4780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:54.478 [DEBUG] [Thread-4781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:54:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:54:54.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:54:54.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:54:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 54, 37), 31.18, 11.93, 0.0, 12.81, 23.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:54:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:54:37
2025-11-25T19:54:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:54:55.770 [DEBUG] [Thread-4782] [transport.py] [_log()] starting thread (client mode): 0x70d42230
2025-11-25T19:54:55.770 [DEBUG] [Thread-4782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:54:55.791 [DEBUG] [Thread-4782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:54:55.791 [INFO] [Thread-4782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:54:55.794 [DEBUG] [Thread-4782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:54:55.794 [DEBUG] [Thread-4782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] client lang: <none>
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] server lang: <none>
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] kex follows: False
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:54:55.795 [DEBUG] [Thread-4782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:54:55.796 [DEBUG] [Thread-4782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:54:55.796 [DEBUG] [Thread-4782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:54:55.796 [DEBUG] [Thread-4782] [transport.py] [_log()] Compression: none
2025-11-25T19:54:55.796 [DEBUG] [Thread-4782] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:54:55.814 [DEBUG] [Thread-4782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:54:55.815 [DEBUG] [Thread-4782] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:54:55.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:54:55.816 [DEBUG] [Thread-4782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:54:55.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:54:55.818 [DEBUG] [Thread-4782] [transport.py] [_log()] userauth is OK
2025-11-25T19:54:55.818 [DEBUG] [Thread-4782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:54:55.819 [DEBUG] [Thread-4782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:54:55.819 [DEBUG] [Thread-4782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:54:55.819 [DEBUG] [Thread-4782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:54:55.839 [INFO] [Thread-4782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:54:55.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:54:56.466 [DEBUG] [Thread-4782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:54:56.467 [DEBUG] [Thread-4782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:54:56.467 [DEBUG] [Thread-4782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:54:56.508 [DEBUG] [Thread-4782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:54:56.508 [DEBUG] [Thread-4782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:54:56.511 [DEBUG] [Thread-4782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:54:56.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:54:56.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:54:56.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:54:56.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:54:56.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:54:56.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:54:56.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:54:56.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:54:56.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:54:56.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.745933 -999.00  +23.20   5.77     16   -3.20 1 1 1 1 1   173    0 24.65 -74.84 ----- 7.9 5.8 268.0 8.1 23.5 -27.3 23.6 -26.7 23.2 -25.4 23.4 -26.6
2025-11-25T19:54:56.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:54:56.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:54:56.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.745933
2025-11-25T19:54:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:54:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:54:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:54:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:54:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:54:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:54:37', tmtdew=31.18, humidity=11.93, cloud=0.0, wind=12.81, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:54:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:54:56.538 [DEBUG] [Thread-4782] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:54:56.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:54:56.633 [DEBUG] [Thread-4785] [transport.py] [_log()] starting thread (client mode): 0x70d2be80
2025-11-25T19:54:56.633 [DEBUG] [Thread-4785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:54:56.647 [DEBUG] [Thread-4785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:54:56.647 [INFO] [Thread-4785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:54:56.655 [DEBUG] [Thread-4785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:54:56.655 [DEBUG] [Thread-4785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:54:56.655 [DEBUG] [Thread-4785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:54:56.655 [DEBUG] [Thread-4785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:54:56.655 [DEBUG] [Thread-4785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:54:56.655 [DEBUG] [Thread-4785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:54:56.655 [DEBUG] [Thread-4785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:54:56.655 [DEBUG] [Thread-4785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:54:56.655 [DEBUG] [Thread-4785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] client lang: <none>
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] server lang: <none>
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] kex follows: False
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] Compression: none
2025-11-25T19:54:56.656 [DEBUG] [Thread-4785] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:54:56.715 [DEBUG] [Thread-4785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:54:56.716 [DEBUG] [Thread-4785] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:54:56.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:54:56.717 [DEBUG] [Thread-4785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:54:56.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:54:56.771 [DEBUG] [Thread-4785] [transport.py] [_log()] userauth is OK
2025-11-25T19:54:56.772 [DEBUG] [Thread-4785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:54:56.772 [DEBUG] [Thread-4785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:54:56.772 [DEBUG] [Thread-4785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:54:56.772 [DEBUG] [Thread-4785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:54:56.792 [INFO] [Thread-4785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:54:56.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:54:56.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:54:57.613 [DEBUG] [Thread-4785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:54:57.614 [DEBUG] [Thread-4785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:54:57.662 [DEBUG] [Thread-4785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:54:57.662 [DEBUG] [Thread-4785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:54:57.671 [DEBUG] [Thread-4785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:54:57.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:54:57.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:54:57.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:54:57.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:54:57.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:54:57.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:54:57.708 [DEBUG] [Thread-4785] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:55:00.186 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:08.633 [DEBUG] [Thread-4787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:11.856 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:16.929 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:23.677 [DEBUG] [Thread-4788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:27.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:55:27.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:55:27.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:55:28.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 55, 9), 31.18, 11.93, 0.0, 12.19, 23.13, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:55:28.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:55:09
2025-11-25T19:55:28.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:55:28.638 [DEBUG] [Thread-4789] [transport.py] [_log()] starting thread (client mode): 0x70d2bac0
2025-11-25T19:55:28.638 [DEBUG] [Thread-4789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:55:28.654 [DEBUG] [Thread-4789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:55:28.654 [INFO] [Thread-4789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:55:28.657 [DEBUG] [Thread-4789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:55:28.657 [DEBUG] [Thread-4789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] client lang: <none>
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] server lang: <none>
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] kex follows: False
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] Compression: none
2025-11-25T19:55:28.658 [DEBUG] [Thread-4789] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:55:28.676 [DEBUG] [Thread-4789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:55:28.676 [DEBUG] [Thread-4789] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:55:28.677 [DEBUG] [Thread-4789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:55:28.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:55:28.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:55:28.679 [DEBUG] [Thread-4789] [transport.py] [_log()] userauth is OK
2025-11-25T19:55:28.679 [DEBUG] [Thread-4789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:55:28.679 [DEBUG] [Thread-4789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:55:28.679 [DEBUG] [Thread-4789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:55:28.679 [DEBUG] [Thread-4789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:55:28.714 [INFO] [Thread-4789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:55:28.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:55:29.497 [DEBUG] [Thread-4789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:55:29.497 [DEBUG] [Thread-4789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:55:29.497 [DEBUG] [Thread-4789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:55:29.538 [DEBUG] [Thread-4789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:55:29.538 [DEBUG] [Thread-4789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:55:29.541 [DEBUG] [Thread-4789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:55:29.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:55:29.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:55:29.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:55:29.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:55:29.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:55:29.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:55:29.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:55:29.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:55:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:55:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.746280 -999.00  +23.20   9.92     17   -3.10 1 1 1 1 1   160    0 24.46 -72.27 ----- 9.3 9.9 269.2 11.3 23.5 -27.3 23.6 -26.7 23.2 -25.5 23.4 -26.4
2025-11-25T19:55:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:55:29.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:55:29.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.746280
2025-11-25T19:55:29.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:55:29.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:55:29.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:55:29.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:55:29.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:55:29.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:55:09', tmtdew=31.18, humidity=11.93, cloud=0.0, wind=12.19, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:54:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:55:29.568 [DEBUG] [Thread-4789] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:55:29.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:55:29.665 [DEBUG] [Thread-4792] [transport.py] [_log()] starting thread (client mode): 0x70d2b520
2025-11-25T19:55:29.665 [DEBUG] [Thread-4792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:55:29.680 [DEBUG] [Thread-4792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:55:29.680 [INFO] [Thread-4792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:55:29.688 [DEBUG] [Thread-4792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:55:29.688 [DEBUG] [Thread-4792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:55:29.688 [DEBUG] [Thread-4792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:55:29.688 [DEBUG] [Thread-4792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:55:29.688 [DEBUG] [Thread-4792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:55:29.688 [DEBUG] [Thread-4792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:55:29.689 [DEBUG] [Thread-4792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:55:29.689 [DEBUG] [Thread-4792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:55:29.689 [DEBUG] [Thread-4792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:55:29.689 [DEBUG] [Thread-4792] [transport.py] [_log()] client lang: <none>
2025-11-25T19:55:29.689 [DEBUG] [Thread-4792] [transport.py] [_log()] server lang: <none>
2025-11-25T19:55:29.689 [DEBUG] [Thread-4792] [transport.py] [_log()] kex follows: False
2025-11-25T19:55:29.689 [DEBUG] [Thread-4792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:55:29.689 [DEBUG] [Thread-4792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:55:29.689 [DEBUG] [Thread-4792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:55:29.690 [DEBUG] [Thread-4792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:55:29.690 [DEBUG] [Thread-4792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:55:29.690 [DEBUG] [Thread-4792] [transport.py] [_log()] Compression: none
2025-11-25T19:55:29.690 [DEBUG] [Thread-4792] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:55:29.748 [DEBUG] [Thread-4792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:55:29.749 [DEBUG] [Thread-4792] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:55:29.750 [DEBUG] [Thread-4792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:55:29.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:55:29.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:55:29.807 [DEBUG] [Thread-4792] [transport.py] [_log()] userauth is OK
2025-11-25T19:55:29.807 [DEBUG] [Thread-4792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:55:29.807 [DEBUG] [Thread-4792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:55:29.807 [DEBUG] [Thread-4792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:55:29.807 [DEBUG] [Thread-4792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:55:29.828 [INFO] [Thread-4792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:55:29.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:55:29.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:55:30.678 [DEBUG] [Thread-4792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:55:30.679 [DEBUG] [Thread-4792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:55:30.727 [DEBUG] [Thread-4792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:55:30.727 [DEBUG] [Thread-4792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:55:30.736 [DEBUG] [Thread-4792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:55:30.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:55:30.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:55:30.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:55:30.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:55:30.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:55:30.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:55:30.773 [DEBUG] [Thread-4792] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:55:38.716 [DEBUG] [Thread-4794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:40.360 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:41.373 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:41.374 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:53.764 [DEBUG] [Thread-4795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:55:54.529 [DEBUG] [Thread-4796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:00.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:56:00.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:56:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:56:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 55, 41), 31.12, 11.93, 0.0, 13.99, 23.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:56:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:55:41
2025-11-25T19:56:01.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:56:01.704 [DEBUG] [Thread-4797] [transport.py] [_log()] starting thread (client mode): 0x737c5d50
2025-11-25T19:56:01.704 [DEBUG] [Thread-4797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:56:01.724 [DEBUG] [Thread-4797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:56:01.725 [INFO] [Thread-4797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] client lang: <none>
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] server lang: <none>
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] kex follows: False
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] Compression: none
2025-11-25T19:56:01.728 [DEBUG] [Thread-4797] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:56:01.742 [DEBUG] [Thread-4797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:56:01.743 [DEBUG] [Thread-4797] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:56:01.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:56:01.744 [DEBUG] [Thread-4797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:56:01.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:56:01.746 [DEBUG] [Thread-4797] [transport.py] [_log()] userauth is OK
2025-11-25T19:56:01.746 [DEBUG] [Thread-4797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:56:01.746 [DEBUG] [Thread-4797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:56:01.746 [DEBUG] [Thread-4797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:56:01.746 [DEBUG] [Thread-4797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:56:01.764 [INFO] [Thread-4797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:56:01.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:56:02.377 [DEBUG] [Thread-4797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:56:02.377 [DEBUG] [Thread-4797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:56:02.377 [DEBUG] [Thread-4797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:56:02.418 [DEBUG] [Thread-4797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:56:02.418 [DEBUG] [Thread-4797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:56:02.421 [DEBUG] [Thread-4797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:56:02.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:56:02.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:56:02.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:56:02.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:56:02.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:56:02.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:56:02.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:56:02.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:56:02.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:56:02.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.746974 -999.00  +23.10   8.52     17   -3.10 1 1 1 1 1   138    0 24.42 -76.75 ----- 6.4 8.5 278.4 14.1 23.5 -27.3 23.5 -26.5 23.2 -25.3 23.4 -26.3
2025-11-25T19:56:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:56:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:56:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.746974
2025-11-25T19:56:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:56:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:56:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:56:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:56:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:56:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:55:41', tmtdew=31.12, humidity=11.93, cloud=0.0, wind=13.99, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:55:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:56:02.446 [DEBUG] [Thread-4797] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:56:02.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:56:02.545 [DEBUG] [Thread-4800] [transport.py] [_log()] starting thread (client mode): 0x70d427d0
2025-11-25T19:56:02.545 [DEBUG] [Thread-4800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:56:02.560 [DEBUG] [Thread-4800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:56:02.560 [INFO] [Thread-4800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:56:02.567 [DEBUG] [Thread-4800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] client lang: <none>
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] server lang: <none>
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] kex follows: False
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:56:02.568 [DEBUG] [Thread-4800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:56:02.569 [DEBUG] [Thread-4800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:56:02.569 [DEBUG] [Thread-4800] [transport.py] [_log()] Compression: none
2025-11-25T19:56:02.569 [DEBUG] [Thread-4800] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:56:02.627 [DEBUG] [Thread-4800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:56:02.628 [DEBUG] [Thread-4800] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:56:02.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:56:02.629 [DEBUG] [Thread-4800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:56:02.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:56:02.686 [DEBUG] [Thread-4800] [transport.py] [_log()] userauth is OK
2025-11-25T19:56:02.687 [DEBUG] [Thread-4800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:56:02.687 [DEBUG] [Thread-4800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:56:02.687 [DEBUG] [Thread-4800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:56:02.687 [DEBUG] [Thread-4800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:56:02.711 [INFO] [Thread-4800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:56:02.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:56:02.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:56:03.550 [DEBUG] [Thread-4800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:56:03.550 [DEBUG] [Thread-4800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:56:03.598 [DEBUG] [Thread-4800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:56:03.598 [DEBUG] [Thread-4800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:56:03.608 [DEBUG] [Thread-4800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:56:03.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:56:03.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:56:03.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:56:03.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:56:03.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:56:03.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:56:03.644 [DEBUG] [Thread-4800] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:56:03.794 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:08.799 [DEBUG] [Thread-4802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:09.237 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:14.290 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:23.843 [DEBUG] [Thread-4803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:33.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:56:33.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:56:33.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:56:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 56, 13), 31.02, 12.01, 0.0, 14.22, 23.01, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:56:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:56:13
2025-11-25T19:56:34.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:56:34.533 [DEBUG] [Thread-4804] [transport.py] [_log()] starting thread (client mode): 0x70d42740
2025-11-25T19:56:34.533 [DEBUG] [Thread-4804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:56:34.554 [DEBUG] [Thread-4804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:56:34.554 [INFO] [Thread-4804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] client lang: <none>
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] server lang: <none>
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] kex follows: False
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:56:34.557 [DEBUG] [Thread-4804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:56:34.558 [DEBUG] [Thread-4804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:56:34.558 [DEBUG] [Thread-4804] [transport.py] [_log()] Compression: none
2025-11-25T19:56:34.558 [DEBUG] [Thread-4804] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:56:34.566 [DEBUG] [Thread-4804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:56:34.566 [DEBUG] [Thread-4804] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:56:34.567 [DEBUG] [Thread-4804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:56:34.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:56:34.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:56:34.569 [DEBUG] [Thread-4804] [transport.py] [_log()] userauth is OK
2025-11-25T19:56:34.569 [DEBUG] [Thread-4804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:56:34.569 [DEBUG] [Thread-4804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:56:34.569 [DEBUG] [Thread-4804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:56:34.569 [DEBUG] [Thread-4804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:56:34.593 [INFO] [Thread-4804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:56:34.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:56:35.346 [DEBUG] [Thread-4804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:56:35.346 [DEBUG] [Thread-4804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:56:35.347 [DEBUG] [Thread-4804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:56:35.387 [DEBUG] [Thread-4804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:56:35.387 [DEBUG] [Thread-4804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:56:35.391 [DEBUG] [Thread-4804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:56:35.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:56:35.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:56:35.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:56:35.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:56:35.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:56:35.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:56:35.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:56:35.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:56:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:56:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.747322 -999.00  +23.10   9.14     17   -3.10 1 1 1 1 1   127    0 24.80 -86.28 ----- 6.3 9.1 265.2 12.0 23.5 -27.2 23.5 -26.7 23.2 -25.4 23.3 -26.4
2025-11-25T19:56:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:56:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:56:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.747322
2025-11-25T19:56:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:56:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:56:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:56:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:56:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:56:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:56:13', tmtdew=31.02, humidity=12.01, cloud=0.0, wind=14.22, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:56:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:56:35.421 [DEBUG] [Thread-4804] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:56:35.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:56:35.519 [DEBUG] [Thread-4807] [transport.py] [_log()] starting thread (client mode): 0x70d42e60
2025-11-25T19:56:35.519 [DEBUG] [Thread-4807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:56:35.532 [DEBUG] [Thread-4807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:56:35.533 [INFO] [Thread-4807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] client lang: <none>
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] server lang: <none>
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] kex follows: False
2025-11-25T19:56:35.540 [DEBUG] [Thread-4807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:56:35.541 [DEBUG] [Thread-4807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:56:35.541 [DEBUG] [Thread-4807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:56:35.541 [DEBUG] [Thread-4807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:56:35.541 [DEBUG] [Thread-4807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:56:35.541 [DEBUG] [Thread-4807] [transport.py] [_log()] Compression: none
2025-11-25T19:56:35.541 [DEBUG] [Thread-4807] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:56:35.599 [DEBUG] [Thread-4807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:56:35.600 [DEBUG] [Thread-4807] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:56:35.600 [DEBUG] [Thread-4807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:56:35.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:56:35.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:56:35.655 [DEBUG] [Thread-4807] [transport.py] [_log()] userauth is OK
2025-11-25T19:56:35.655 [DEBUG] [Thread-4807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:56:35.656 [DEBUG] [Thread-4807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:56:35.656 [DEBUG] [Thread-4807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:56:35.656 [DEBUG] [Thread-4807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:56:35.680 [INFO] [Thread-4807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:56:35.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:56:35.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:56:36.494 [DEBUG] [Thread-4807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:56:36.494 [DEBUG] [Thread-4807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:56:36.541 [DEBUG] [Thread-4807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:56:36.542 [DEBUG] [Thread-4807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:56:36.551 [DEBUG] [Thread-4807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:56:36.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:56:36.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:56:36.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:56:36.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:56:36.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:56:36.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:56:36.585 [DEBUG] [Thread-4807] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:56:37.700 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:38.882 [DEBUG] [Thread-4809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:50.530 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:50.531 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:53.937 [DEBUG] [Thread-4810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:56:54.597 [DEBUG] [Thread-4811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:57:01.091 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:57:06.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:57:06.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:57:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:57:07.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 56, 45), 31.11, 11.98, 0.0, 11.7, 23.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:57:07.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:56:45
2025-11-25T19:57:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:57:07.542 [DEBUG] [Thread-4812] [transport.py] [_log()] starting thread (client mode): 0x70d020e0
2025-11-25T19:57:07.542 [DEBUG] [Thread-4812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:57:07.562 [DEBUG] [Thread-4812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:57:07.562 [INFO] [Thread-4812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] client lang: <none>
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] server lang: <none>
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] kex follows: False
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] Compression: none
2025-11-25T19:57:07.566 [DEBUG] [Thread-4812] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:57:07.583 [DEBUG] [Thread-4812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:57:07.583 [DEBUG] [Thread-4812] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:57:07.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:57:07.584 [DEBUG] [Thread-4812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:57:07.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:57:07.584 [DEBUG] [Thread-4812] [transport.py] [_log()] userauth is OK
2025-11-25T19:57:07.584 [DEBUG] [Thread-4812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:57:07.584 [DEBUG] [Thread-4812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:57:07.584 [DEBUG] [Thread-4812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:57:07.585 [DEBUG] [Thread-4812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:57:07.600 [INFO] [Thread-4812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:57:07.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:57:08.222 [DEBUG] [Thread-4812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:57:08.222 [DEBUG] [Thread-4812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:57:08.222 [DEBUG] [Thread-4812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:57:08.262 [DEBUG] [Thread-4812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:57:08.262 [DEBUG] [Thread-4812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:57:08.264 [DEBUG] [Thread-4812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:57:08.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:57:08.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:57:08.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:57:08.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:57:08.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:57:08.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:57:08.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.747669 -999.00  +23.10   9.55     17   -3.10 1 1 1 1 1   118    0 24.43 -86.52 ----- 10.1 9.6 264.2 11.5 23.4 -27.2 23.4 -26.6 23.1 -25.4 23.3 -26.4
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.747669
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:57:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:57:08.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:57:08.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:56:45', tmtdew=31.11, humidity=11.98, cloud=0.0, wind=11.7, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:56:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:57:08.284 [DEBUG] [Thread-4812] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:57:08.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:57:08.370 [DEBUG] [Thread-4815] [transport.py] [_log()] starting thread (client mode): 0x70d01fc0
2025-11-25T19:57:08.370 [DEBUG] [Thread-4815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:57:08.385 [DEBUG] [Thread-4815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:57:08.385 [INFO] [Thread-4815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:57:08.392 [DEBUG] [Thread-4815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:57:08.392 [DEBUG] [Thread-4815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:57:08.392 [DEBUG] [Thread-4815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:57:08.392 [DEBUG] [Thread-4815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:57:08.392 [DEBUG] [Thread-4815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] client lang: <none>
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] server lang: <none>
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] kex follows: False
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] Compression: none
2025-11-25T19:57:08.393 [DEBUG] [Thread-4815] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:57:08.449 [DEBUG] [Thread-4815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:57:08.449 [DEBUG] [Thread-4815] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:57:08.449 [DEBUG] [Thread-4815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:57:08.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:57:08.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:57:08.507 [DEBUG] [Thread-4815] [transport.py] [_log()] userauth is OK
2025-11-25T19:57:08.507 [DEBUG] [Thread-4815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:57:08.507 [DEBUG] [Thread-4815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:57:08.507 [DEBUG] [Thread-4815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:57:08.507 [DEBUG] [Thread-4815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:57:08.520 [INFO] [Thread-4815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:57:08.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:57:08.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:57:08.969 [DEBUG] [Thread-4817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:57:09.327 [DEBUG] [Thread-4815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:57:09.327 [DEBUG] [Thread-4815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:57:09.376 [DEBUG] [Thread-4815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:57:09.376 [DEBUG] [Thread-4815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:57:09.384 [DEBUG] [Thread-4815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:57:09.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:57:09.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')
2025-11-25T19:57:09.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:57:09.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:57:09.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:57:09.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:57:09.421 [DEBUG] [Thread-4815] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:57:24.011 [DEBUG] [Thread-4818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:57:39.051 [DEBUG] [Thread-4819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:57:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:57:39.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:57:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:57:40.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 57, 17), 31.06, 12.02, 0.0, 12.47, 23.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:57:40.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:57:17
2025-11-25T19:57:40.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:57:40.367 [DEBUG] [Thread-4820] [transport.py] [_log()] starting thread (client mode): 0x70d1ded0
2025-11-25T19:57:40.367 [DEBUG] [Thread-4820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:57:40.386 [DEBUG] [Thread-4820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:57:40.386 [INFO] [Thread-4820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:57:40.389 [DEBUG] [Thread-4820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] client lang: <none>
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] server lang: <none>
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] kex follows: False
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] Compression: none
2025-11-25T19:57:40.390 [DEBUG] [Thread-4820] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:57:40.408 [DEBUG] [Thread-4820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:57:40.408 [DEBUG] [Thread-4820] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:57:40.409 [DEBUG] [Thread-4820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:57:40.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:57:40.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:57:40.411 [DEBUG] [Thread-4820] [transport.py] [_log()] userauth is OK
2025-11-25T19:57:40.411 [DEBUG] [Thread-4820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:57:40.411 [DEBUG] [Thread-4820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:57:40.411 [DEBUG] [Thread-4820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:57:40.411 [DEBUG] [Thread-4820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:57:40.436 [INFO] [Thread-4820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:57:40.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:57:41.229 [DEBUG] [Thread-4820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:57:41.229 [DEBUG] [Thread-4820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:57:41.229 [DEBUG] [Thread-4820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:57:41.270 [DEBUG] [Thread-4820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:57:41.270 [DEBUG] [Thread-4820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:57:41.273 [DEBUG] [Thread-4820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:57:41.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:57:41.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:57:41.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:57:41.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:57:41.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:57:41.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:57:41.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:57:41.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:57:41.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:57:41.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.748016 -999.00  +23.10   6.96     17   -3.20 1 1 1 1 1   109    0 24.16 -88.98 ----- 7.5 7.0 281.0 11.8 23.4 -27.4 23.4 -26.5 23.1 -25.3 23.2 -26.3
2025-11-25T19:57:41.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:57:41.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:57:41.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.748016
2025-11-25T19:57:41.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:57:41.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:57:41.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:57:41.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:57:41.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:57:41.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:57:17', tmtdew=31.06, humidity=12.02, cloud=0.0, wind=12.47, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:57:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:57:41.299 [DEBUG] [Thread-4820] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:57:41.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:57:41.400 [DEBUG] [Thread-4823] [transport.py] [_log()] starting thread (client mode): 0x70d397b0
2025-11-25T19:57:41.401 [DEBUG] [Thread-4823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:57:41.415 [DEBUG] [Thread-4823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T19:57:41.415 [INFO] [Thread-4823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T19:57:41.423 [DEBUG] [Thread-4823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] client lang: <none>
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] server lang: <none>
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] kex follows: False
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] Compression: none
2025-11-25T19:57:41.424 [DEBUG] [Thread-4823] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:57:41.484 [DEBUG] [Thread-4823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:57:41.484 [DEBUG] [Thread-4823] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:57:41.485 [DEBUG] [Thread-4823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T19:57:41.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T19:57:41.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:57:41.540 [DEBUG] [Thread-4823] [transport.py] [_log()] userauth is OK
2025-11-25T19:57:41.541 [DEBUG] [Thread-4823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:57:41.541 [DEBUG] [Thread-4823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:57:41.541 [DEBUG] [Thread-4823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T19:57:41.541 [DEBUG] [Thread-4823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:57:41.564 [INFO] [Thread-4823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:57:41.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T19:57:41.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:57:42.387 [DEBUG] [Thread-4823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:57:42.387 [DEBUG] [Thread-4823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:57:42.435 [DEBUG] [Thread-4823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:57:42.435 [DEBUG] [Thread-4823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:57:42.443 [DEBUG] [Thread-4823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:57:42.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:57:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T19:57:42.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T19:57:42.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:57:42.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:57:42.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:57:42.480 [DEBUG] [Thread-4823] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:57:54.082 [DEBUG] [Thread-4825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:57:54.655 [DEBUG] [Thread-4826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:57:55.952 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:57:55.953 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:02.729 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:08.858 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:09.144 [DEBUG] [Thread-4827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T19:58:12.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T19:58:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T19:58:13.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 19, 57, 49), 31.0, 11.99, 0.0, 12.05, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T19:58:13.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 19:57:49
2025-11-25T19:58:13.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T19:58:13.411 [DEBUG] [Thread-4828] [transport.py] [_log()] starting thread (client mode): 0x70d40d00
2025-11-25T19:58:13.411 [DEBUG] [Thread-4828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T19:58:13.432 [DEBUG] [Thread-4828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T19:58:13.432 [INFO] [Thread-4828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T19:58:13.435 [DEBUG] [Thread-4828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] client lang: <none>
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] server lang: <none>
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] kex follows: False
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] Compression: none
2025-11-25T19:58:13.436 [DEBUG] [Thread-4828] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T19:58:13.454 [DEBUG] [Thread-4828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T19:58:13.455 [DEBUG] [Thread-4828] [transport.py] [_log()] Switch to new keys ...
2025-11-25T19:58:13.455 [DEBUG] [Thread-4828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T19:58:13.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T19:58:13.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T19:58:13.457 [DEBUG] [Thread-4828] [transport.py] [_log()] userauth is OK
2025-11-25T19:58:13.457 [DEBUG] [Thread-4828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T19:58:13.458 [DEBUG] [Thread-4828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T19:58:13.458 [DEBUG] [Thread-4828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T19:58:13.458 [DEBUG] [Thread-4828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T19:58:13.482 [INFO] [Thread-4828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T19:58:13.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T19:58:14.126 [DEBUG] [Thread-4828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T19:58:14.127 [DEBUG] [Thread-4828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T19:58:14.136 [DEBUG] [Thread-4828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T19:58:14.168 [DEBUG] [Thread-4828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T19:58:14.168 [DEBUG] [Thread-4828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T19:58:14.171 [DEBUG] [Thread-4828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T19:58:14.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T19:58:14.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T19:58:14.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T19:58:14.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T19:58:14.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T19:58:14.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T19:58:14.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T19:58:14.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T19:58:14.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T19:58:14.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.748363 -999.00  +23.00   6.74     17   -3.20 1 1 1 1 1   100    0 24.44 -86.59 ----- 6.9 6.7 265.6 11.1 23.4 -27.1 23.4 -26.6 23.1 -25.3 23.3 -26.2
2025-11-25T19:58:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T19:58:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T19:58:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.748363
2025-11-25T19:58:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T19:58:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T19:58:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T19:58:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T19:58:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T19:58:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T19:57:49', tmtdew=31.0, humidity=11.99, cloud=0.0, wind=12.05, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T17:57:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T19:58:14.195 [DEBUG] [Thread-4828] [transport.py] [_log()] EOF in transport thread
2025-11-25T19:58:14.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T19:58:19.328 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:24.174 [DEBUG] [Thread-4831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:28.840 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:39.218 [DEBUG] [Thread-4832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:39.370 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:45.483 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:53.876 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:54.257 [DEBUG] [Thread-4833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:58:54.719 [DEBUG] [Thread-4834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:00.781 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:00.782 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:01.260 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:09.290 [DEBUG] [Thread-4835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:11.652 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:17.749 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:24.330 [DEBUG] [Thread-4836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:25.214 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:32.696 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:39.360 [DEBUG] [Thread-4837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:40.148 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:46.250 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:53.642 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:54.400 [DEBUG] [Thread-4838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T19:59:54.777 [DEBUG] [Thread-4839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:01.010 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:05.088 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:05.090 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:07.485 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:09.439 [DEBUG] [Thread-4840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:13.583 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:20.939 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:24.476 [DEBUG] [Thread-4841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:26.573 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T20:00:28.387 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:39.093 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:39.509 [DEBUG] [Thread-4842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:44.150 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:51.569 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:54.542 [DEBUG] [Thread-4843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:54.833 [DEBUG] [Thread-4844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:56.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:00:56.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:00:56.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:00:57.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 0, 29), 30.75, 12.12, 0.0, 14.26, 22.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:00:57.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:00:29
2025-11-25T20:00:57.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:00:57.554 [DEBUG] [Thread-4845] [transport.py] [_log()] starting thread (client mode): 0x70d6b700
2025-11-25T20:00:57.555 [DEBUG] [Thread-4845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:00:57.575 [DEBUG] [Thread-4845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:00:57.575 [INFO] [Thread-4845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:00:57.578 [DEBUG] [Thread-4845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] client lang: <none>
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] server lang: <none>
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] kex follows: False
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] Compression: none
2025-11-25T20:00:57.579 [DEBUG] [Thread-4845] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:00:57.596 [DEBUG] [Thread-4845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:00:57.597 [DEBUG] [Thread-4845] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:00:57.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:00:57.598 [DEBUG] [Thread-4845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:00:57.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:00:57.600 [DEBUG] [Thread-4845] [transport.py] [_log()] userauth is OK
2025-11-25T20:00:57.600 [DEBUG] [Thread-4845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:00:57.600 [DEBUG] [Thread-4845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:00:57.600 [DEBUG] [Thread-4845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:00:57.600 [DEBUG] [Thread-4845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:00:57.618 [INFO] [Thread-4845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:00:57.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:00:58.391 [DEBUG] [Thread-4845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:00:58.391 [DEBUG] [Thread-4845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:00:58.392 [DEBUG] [Thread-4845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:00:58.432 [DEBUG] [Thread-4845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:00:58.432 [DEBUG] [Thread-4845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:00:58.436 [DEBUG] [Thread-4845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:00:58.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:00:58.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:00:58.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:00:58.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:00:58.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:00:58.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:00:58.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:00:58.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:00:58.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:00:58.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.750447 -999.00  +23.10   8.57     17   -2.80 1 1 1 1 1    61    0 24.44 -76.02 ----- 7.7 8.6 277.8 16.5 23.2 -27.0 23.3 -26.5 23.0 -25.3 23.2 -26.2
2025-11-25T20:00:58.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:00:58.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:00:58.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.750447
2025-11-25T20:00:58.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:00:58.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:00:58.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:00:58.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:00:58.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:00:58.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:00:29', tmtdew=30.75, humidity=12.12, cloud=0.0, wind=14.26, temperature=22.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:00:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:00:58.463 [DEBUG] [Thread-4845] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:00:58.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:00:58.555 [DEBUG] [Thread-4848] [transport.py] [_log()] starting thread (client mode): 0x70d6b220
2025-11-25T20:00:58.555 [DEBUG] [Thread-4848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:00:58.570 [DEBUG] [Thread-4848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:00:58.570 [INFO] [Thread-4848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:00:58.577 [DEBUG] [Thread-4848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] client lang: <none>
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] server lang: <none>
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] kex follows: False
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] Compression: none
2025-11-25T20:00:58.578 [DEBUG] [Thread-4848] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:00:58.636 [DEBUG] [Thread-4848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:00:58.637 [DEBUG] [Thread-4848] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:00:58.638 [DEBUG] [Thread-4848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:00:58.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:00:58.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:00:58.693 [DEBUG] [Thread-4848] [transport.py] [_log()] userauth is OK
2025-11-25T20:00:58.693 [DEBUG] [Thread-4848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:00:58.693 [DEBUG] [Thread-4848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:00:58.693 [DEBUG] [Thread-4848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:00:58.693 [DEBUG] [Thread-4848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:00:58.712 [INFO] [Thread-4848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:00:58.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:00:58.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:00:59.353 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:00:59.541 [DEBUG] [Thread-4848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:00:59.542 [DEBUG] [Thread-4848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:00:59.590 [DEBUG] [Thread-4848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:00:59.590 [DEBUG] [Thread-4848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:00:59.599 [DEBUG] [Thread-4848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:00:59.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:00:59.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:00:59.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:00:59.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:00:59.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:00:59.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:00:59.644 [DEBUG] [Thread-4848] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:01:03.347 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:08.402 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:09.389 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:09.390 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:09.578 [DEBUG] [Thread-4850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:15.805 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:23.212 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:24.631 [DEBUG] [Thread-4851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:29.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:01:29.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:01:29.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
2025-11-25T20:01:30.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 1, 1), 30.76, 12.11, 0.0, 13.32, 23.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:01:30.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:01:01
2025-11-25T20:01:30.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:01:30.635 [DEBUG] [Thread-4852] [transport.py] [_log()] starting thread (client mode): 0x70d3a020
2025-11-25T20:01:30.635 [DEBUG] [Thread-4852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:01:30.655 [DEBUG] [Thread-4852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:01:30.655 [INFO] [Thread-4852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] client lang: <none>
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] server lang: <none>
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] kex follows: False
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] Compression: none
2025-11-25T20:01:30.659 [DEBUG] [Thread-4852] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:01:30.678 [DEBUG] [Thread-4852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:01:30.678 [DEBUG] [Thread-4852] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:01:30.679 [DEBUG] [Thread-4852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:01:30.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:01:30.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:01:30.721 [DEBUG] [Thread-4852] [transport.py] [_log()] userauth is OK
2025-11-25T20:01:30.721 [DEBUG] [Thread-4852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:01:30.721 [DEBUG] [Thread-4852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:01:30.721 [DEBUG] [Thread-4852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:01:30.722 [DEBUG] [Thread-4852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:01:30.754 [INFO] [Thread-4852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:01:30.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:01:31.403 [DEBUG] [Thread-4852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:01:31.404 [DEBUG] [Thread-4852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:01:31.404 [DEBUG] [Thread-4852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:01:31.445 [DEBUG] [Thread-4852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:01:31.445 [DEBUG] [Thread-4852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:01:31.449 [DEBUG] [Thread-4852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:01:31.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:01:31.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:01:31.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:01:31.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:01:31.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:01:31.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:01:31.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:01:31.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:01:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:01:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.750794 -999.00  +23.10   8.37     17   -2.80 1 1 1 1 1    56    0 24.10 -84.87 ----- 9.1 8.4 256.2 10.2 23.2 -27.0 23.3 -26.5 23.0 -25.4 23.2 -26.3
2025-11-25T20:01:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:01:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:01:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.750794
2025-11-25T20:01:31.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:01:31.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:01:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:01:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:01:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:01:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:01:01', tmtdew=30.76, humidity=12.11, cloud=0.0, wind=13.32, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:01:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:01:31.478 [DEBUG] [Thread-4852] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:01:31.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:01:31.573 [DEBUG] [Thread-4855] [transport.py] [_log()] starting thread (client mode): 0x7374ff70
2025-11-25T20:01:31.573 [DEBUG] [Thread-4855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:01:31.588 [DEBUG] [Thread-4855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:01:31.589 [INFO] [Thread-4855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:01:31.596 [DEBUG] [Thread-4855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:01:31.596 [DEBUG] [Thread-4855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:01:31.596 [DEBUG] [Thread-4855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:01:31.596 [DEBUG] [Thread-4855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:01:31.596 [DEBUG] [Thread-4855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:01:31.596 [DEBUG] [Thread-4855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] client lang: <none>
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] server lang: <none>
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] kex follows: False
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] Compression: none
2025-11-25T20:01:31.597 [DEBUG] [Thread-4855] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:01:31.662 [DEBUG] [Thread-4855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:01:31.662 [DEBUG] [Thread-4855] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:01:31.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:01:31.664 [DEBUG] [Thread-4855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:01:31.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:01:31.721 [DEBUG] [Thread-4855] [transport.py] [_log()] userauth is OK
2025-11-25T20:01:31.722 [DEBUG] [Thread-4855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:01:31.722 [DEBUG] [Thread-4855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:01:31.722 [DEBUG] [Thread-4855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:01:31.722 [DEBUG] [Thread-4855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:01:31.741 [INFO] [Thread-4855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:01:31.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:01:31.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:01:32.577 [DEBUG] [Thread-4855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:01:32.578 [DEBUG] [Thread-4855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:01:32.626 [DEBUG] [Thread-4855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:01:32.626 [DEBUG] [Thread-4855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:01:32.635 [DEBUG] [Thread-4855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:01:32.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:01:32.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:01:32.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:01:32.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:01:32.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:01:32.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:01:32.671 [DEBUG] [Thread-4855] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:01:39.660 [DEBUG] [Thread-4857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:54.716 [DEBUG] [Thread-4858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:01:54.901 [DEBUG] [Thread-4859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:02:02.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:02:02.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:02:02.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:02:03.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 1, 33), 30.73, 12.14, 0.0, 13.85, 23.01, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:02:03.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:01:33
2025-11-25T20:02:03.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:02:03.662 [DEBUG] [Thread-4860] [transport.py] [_log()] starting thread (client mode): 0x70d3a8f0
2025-11-25T20:02:03.662 [DEBUG] [Thread-4860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:02:03.683 [DEBUG] [Thread-4860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:02:03.684 [INFO] [Thread-4860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] client lang: <none>
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] server lang: <none>
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] kex follows: False
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:02:03.687 [DEBUG] [Thread-4860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:02:03.688 [DEBUG] [Thread-4860] [transport.py] [_log()] Compression: none
2025-11-25T20:02:03.688 [DEBUG] [Thread-4860] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:02:03.703 [DEBUG] [Thread-4860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:02:03.703 [DEBUG] [Thread-4860] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:02:03.704 [DEBUG] [Thread-4860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:02:03.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:02:03.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:02:03.705 [DEBUG] [Thread-4860] [transport.py] [_log()] userauth is OK
2025-11-25T20:02:03.705 [DEBUG] [Thread-4860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:02:03.705 [DEBUG] [Thread-4860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:02:03.705 [DEBUG] [Thread-4860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:02:03.705 [DEBUG] [Thread-4860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:02:03.714 [INFO] [Thread-4860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:02:03.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:02:04.507 [DEBUG] [Thread-4860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:02:04.507 [DEBUG] [Thread-4860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:02:04.507 [DEBUG] [Thread-4860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:02:04.548 [DEBUG] [Thread-4860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:02:04.548 [DEBUG] [Thread-4860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:02:04.551 [DEBUG] [Thread-4860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:02:04.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:02:04.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:02:04.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:02:04.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:02:04.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:02:04.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:02:04.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:02:04.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.751141 -999.00  +23.00  10.71     17   -2.90 1 1 1 1 1    51    0 23.88 -80.80 ----- 10.9 10.7 262.8 14.3 23.2 -27.0 23.3 -26.4 22.9 -25.2 23.1 -26.1
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.751141
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:02:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:01:33', tmtdew=30.73, humidity=12.14, cloud=0.0, wind=13.85, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:01:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:02:04.571 [DEBUG] [Thread-4860] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:02:04.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:02:04.655 [DEBUG] [Thread-4863] [transport.py] [_log()] starting thread (client mode): 0x70d39510
2025-11-25T20:02:04.656 [DEBUG] [Thread-4863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:02:04.670 [DEBUG] [Thread-4863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:02:04.670 [INFO] [Thread-4863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] client lang: <none>
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] server lang: <none>
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] kex follows: False
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] Compression: none
2025-11-25T20:02:04.678 [DEBUG] [Thread-4863] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:02:04.735 [DEBUG] [Thread-4863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:02:04.735 [DEBUG] [Thread-4863] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:02:04.736 [DEBUG] [Thread-4863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:02:04.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:02:04.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:02:04.792 [DEBUG] [Thread-4863] [transport.py] [_log()] userauth is OK
2025-11-25T20:02:04.792 [DEBUG] [Thread-4863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:02:04.793 [DEBUG] [Thread-4863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:02:04.793 [DEBUG] [Thread-4863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:02:04.793 [DEBUG] [Thread-4863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:02:04.807 [INFO] [Thread-4863] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:02:04.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:02:04.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:02:05.650 [DEBUG] [Thread-4863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:02:05.650 [DEBUG] [Thread-4863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:02:05.698 [DEBUG] [Thread-4863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:02:05.698 [DEBUG] [Thread-4863] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:02:05.706 [DEBUG] [Thread-4863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:02:05.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:02: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')
2025-11-25T20:02:05.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:02:05.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:02:05.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:02:05.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:02:05.737 [DEBUG] [Thread-4863] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:02:09.750 [DEBUG] [Thread-4865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:02:15.723 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:02:15.724 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:02:24.805 [DEBUG] [Thread-4866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:02:35.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:02:35.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:02:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:02:36.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 2, 5), 30.74, 12.12, 0.0, 12.05, 22.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:02:36.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:02:05
2025-11-25T20:02:36.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:02:36.708 [DEBUG] [Thread-4867] [transport.py] [_log()] starting thread (client mode): 0x70d572b0
2025-11-25T20:02:36.708 [DEBUG] [Thread-4867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:02:36.728 [DEBUG] [Thread-4867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:02:36.728 [INFO] [Thread-4867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] client lang: <none>
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] server lang: <none>
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] kex follows: False
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] Compression: none
2025-11-25T20:02:36.732 [DEBUG] [Thread-4867] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:02:36.749 [DEBUG] [Thread-4867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:02:36.749 [DEBUG] [Thread-4867] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:02:36.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:02:36.750 [DEBUG] [Thread-4867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:02:36.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:02:36.753 [DEBUG] [Thread-4867] [transport.py] [_log()] userauth is OK
2025-11-25T20:02:36.753 [DEBUG] [Thread-4867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:02:36.753 [DEBUG] [Thread-4867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:02:36.753 [DEBUG] [Thread-4867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:02:36.753 [DEBUG] [Thread-4867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:02:36.778 [INFO] [Thread-4867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:02:36.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:02:37.399 [DEBUG] [Thread-4867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:02:37.400 [DEBUG] [Thread-4867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:02:37.400 [DEBUG] [Thread-4867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:02:37.441 [DEBUG] [Thread-4867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:02:37.441 [DEBUG] [Thread-4867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:02:37.444 [DEBUG] [Thread-4867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:02:37.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:02:37.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:02:37.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:02:37.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:02:37.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:02:37.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:02:37.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:02:37.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:02:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:02:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.751488 -999.00  +23.00   8.57     17   -2.90 1 1 1 1 1    47    0 23.93 -74.11 ----- 9.3 8.6 268.4 11.5 23.2 -26.9 23.2 -26.5 22.9 -25.2 23.1 -26.1
2025-11-25T20:02:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:02:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:02:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.751488
2025-11-25T20:02:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:02:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:02:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:02:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:02:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:02:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:02:05', tmtdew=30.74, humidity=12.12, cloud=0.0, wind=12.05, temperature=22.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:02:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:02:37.467 [DEBUG] [Thread-4867] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:02:37.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:02:37.552 [DEBUG] [Thread-4870] [transport.py] [_log()] starting thread (client mode): 0x70d56dd0
2025-11-25T20:02:37.553 [DEBUG] [Thread-4870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:02:37.568 [DEBUG] [Thread-4870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:02:37.568 [INFO] [Thread-4870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] client lang: <none>
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] server lang: <none>
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] kex follows: False
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:02:37.575 [DEBUG] [Thread-4870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:02:37.576 [DEBUG] [Thread-4870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:02:37.576 [DEBUG] [Thread-4870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:02:37.576 [DEBUG] [Thread-4870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:02:37.576 [DEBUG] [Thread-4870] [transport.py] [_log()] Compression: none
2025-11-25T20:02:37.576 [DEBUG] [Thread-4870] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:02:37.633 [DEBUG] [Thread-4870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:02:37.633 [DEBUG] [Thread-4870] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:02:37.633 [DEBUG] [Thread-4870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:02:37.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:02:37.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:02:37.689 [DEBUG] [Thread-4870] [transport.py] [_log()] userauth is OK
2025-11-25T20:02:37.689 [DEBUG] [Thread-4870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:02:37.689 [DEBUG] [Thread-4870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:02:37.689 [DEBUG] [Thread-4870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:02:37.689 [DEBUG] [Thread-4870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:02:37.703 [INFO] [Thread-4870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:02:37.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:02:37.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:02:38.541 [DEBUG] [Thread-4870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:02:38.541 [DEBUG] [Thread-4870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:02:38.590 [DEBUG] [Thread-4870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:02:38.590 [DEBUG] [Thread-4870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:02:38.598 [DEBUG] [Thread-4870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:02:38.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:02:38.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:02:38.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:02:38.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:02:38.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:02:38.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:02:38.641 [DEBUG] [Thread-4870] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:02:39.839 [DEBUG] [Thread-4872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:02:54.879 [DEBUG] [Thread-4873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:02:54.961 [DEBUG] [Thread-4874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:02:55.474 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:02:58.528 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:03:08.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:03:08.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:03:08.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:03:09.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 2, 37), 30.7, 12.11, 0.0, 11.4, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:03:09.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:02:37
2025-11-25T20:03:09.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:03:09.605 [DEBUG] [Thread-4875] [transport.py] [_log()] starting thread (client mode): 0x70d38880
2025-11-25T20:03:09.605 [DEBUG] [Thread-4875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:03:09.621 [DEBUG] [Thread-4875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:03:09.621 [INFO] [Thread-4875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] client lang: <none>
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] server lang: <none>
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] kex follows: False
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:03:09.624 [DEBUG] [Thread-4875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:03:09.625 [DEBUG] [Thread-4875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:03:09.625 [DEBUG] [Thread-4875] [transport.py] [_log()] Compression: none
2025-11-25T20:03:09.625 [DEBUG] [Thread-4875] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:03:09.640 [DEBUG] [Thread-4875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:03:09.640 [DEBUG] [Thread-4875] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:03:09.640 [DEBUG] [Thread-4875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:03:09.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:03:09.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:03:09.641 [DEBUG] [Thread-4875] [transport.py] [_log()] userauth is OK
2025-11-25T20:03:09.641 [DEBUG] [Thread-4875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:03:09.641 [DEBUG] [Thread-4875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:03:09.641 [DEBUG] [Thread-4875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:03:09.641 [DEBUG] [Thread-4875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:03:09.650 [INFO] [Thread-4875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:03:09.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:03:09.916 [DEBUG] [Thread-4877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:03:10.468 [DEBUG] [Thread-4875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:03:10.468 [DEBUG] [Thread-4875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:03:10.468 [DEBUG] [Thread-4875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:03:10.509 [DEBUG] [Thread-4875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:03:10.509 [DEBUG] [Thread-4875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:03:10.512 [DEBUG] [Thread-4875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:03:10.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:03:10.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:03:10.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:03:10.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:03:10.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:03:10.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:03:10.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:03:10.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:03:10.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:03:10.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.751836 -999.00  +23.00   8.16     17   -3.00 1 1 1 1 1    43    0 24.35 -73.93 ----- 9.0 8.2 282.0 10.4 23.2 -27.1 23.2 -26.5 22.9 -25.3 23.1 -26.1
2025-11-25T20:03:10.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:03:10.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:03:10.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.751836
2025-11-25T20:03:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:03:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:03:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:03:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:03:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:03:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:02:37', tmtdew=30.7, humidity=12.11, cloud=0.0, wind=11.4, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:02:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:03:10.529 [DEBUG] [Thread-4875] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:03:10.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:03:10.615 [DEBUG] [Thread-4879] [transport.py] [_log()] starting thread (client mode): 0x70d6a560
2025-11-25T20:03:10.615 [DEBUG] [Thread-4879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:03:10.629 [DEBUG] [Thread-4879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:03:10.630 [INFO] [Thread-4879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:03:10.637 [DEBUG] [Thread-4879] [transport.py] [_log()] client lang: <none>
2025-11-25T20:03:10.638 [DEBUG] [Thread-4879] [transport.py] [_log()] server lang: <none>
2025-11-25T20:03:10.638 [DEBUG] [Thread-4879] [transport.py] [_log()] kex follows: False
2025-11-25T20:03:10.638 [DEBUG] [Thread-4879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:03:10.638 [DEBUG] [Thread-4879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:03:10.638 [DEBUG] [Thread-4879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:03:10.638 [DEBUG] [Thread-4879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:03:10.638 [DEBUG] [Thread-4879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:03:10.638 [DEBUG] [Thread-4879] [transport.py] [_log()] Compression: none
2025-11-25T20:03:10.638 [DEBUG] [Thread-4879] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:03:10.695 [DEBUG] [Thread-4879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:03:10.695 [DEBUG] [Thread-4879] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:03:10.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:03:10.695 [DEBUG] [Thread-4879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:03:10.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:03:10.752 [DEBUG] [Thread-4879] [transport.py] [_log()] userauth is OK
2025-11-25T20:03:10.752 [DEBUG] [Thread-4879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:03:10.752 [DEBUG] [Thread-4879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:03:10.752 [DEBUG] [Thread-4879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:03:10.752 [DEBUG] [Thread-4879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:03:10.766 [INFO] [Thread-4879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:03:10.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:03:10.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:03:11.607 [DEBUG] [Thread-4879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:03:11.607 [DEBUG] [Thread-4879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:03:11.654 [DEBUG] [Thread-4879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:03:11.654 [DEBUG] [Thread-4879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:03:11.662 [DEBUG] [Thread-4879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:03:11.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:03: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')
2025-11-25T20:03:11.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
2025-11-25T20:03:11.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:03:11.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:03:11.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:03:11.696 [DEBUG] [Thread-4879] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:03:21.170 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:03:21.172 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:03:24.944 [DEBUG] [Thread-4881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:03:26.990 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:03:40.008 [DEBUG] [Thread-4882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:03:41.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:03:41.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:03: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
2025-11-25T20:03:42.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 3, 9), 30.65, 12.16, 0.0, 12.28, 22.88, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:03:42.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:03:09
2025-11-25T20:03:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:03:42.728 [DEBUG] [Thread-4883] [transport.py] [_log()] starting thread (client mode): 0x70d38a00
2025-11-25T20:03:42.728 [DEBUG] [Thread-4883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:03:42.749 [DEBUG] [Thread-4883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:03:42.749 [INFO] [Thread-4883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] client lang: <none>
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] server lang: <none>
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] kex follows: False
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] Compression: none
2025-11-25T20:03:42.752 [DEBUG] [Thread-4883] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:03:42.769 [DEBUG] [Thread-4883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:03:42.769 [DEBUG] [Thread-4883] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:03:42.769 [DEBUG] [Thread-4883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:03:42.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:03:42.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:03:42.770 [DEBUG] [Thread-4883] [transport.py] [_log()] userauth is OK
2025-11-25T20:03:42.770 [DEBUG] [Thread-4883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:03:42.770 [DEBUG] [Thread-4883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:03:42.770 [DEBUG] [Thread-4883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:03:42.770 [DEBUG] [Thread-4883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:03:42.779 [INFO] [Thread-4883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:03:42.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:03:43.415 [DEBUG] [Thread-4883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:03:43.415 [DEBUG] [Thread-4883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:03:43.415 [DEBUG] [Thread-4883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:03:43.456 [DEBUG] [Thread-4883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:03:43.457 [DEBUG] [Thread-4883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:03:43.459 [DEBUG] [Thread-4883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:03:43.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:03:43.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:03:43.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:03:43.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:03:43.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:03:43.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:03:43.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:03:43.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:03:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:03:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.752183 -999.00  +23.00   9.99     17   -3.00 1 1 1 1 1    39    0 24.53 -71.48 ----- 6.3 10.0 274.8 11.1 23.2 -27.0 23.2 -26.4 22.9 -25.2 23.1 -26.2
2025-11-25T20:03:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:03:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:03:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.752183
2025-11-25T20:03:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:03:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:03:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:03:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:03:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:03:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:03:09', tmtdew=30.65, humidity=12.16, cloud=0.0, wind=12.28, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:03:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:03:43.485 [DEBUG] [Thread-4883] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:03:43.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:03:43.580 [DEBUG] [Thread-4886] [transport.py] [_log()] starting thread (client mode): 0x70d3aec0
2025-11-25T20:03:43.580 [DEBUG] [Thread-4886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:03:43.601 [DEBUG] [Thread-4886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:03:43.601 [INFO] [Thread-4886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:03:43.609 [DEBUG] [Thread-4886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:03:43.609 [DEBUG] [Thread-4886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:03:43.609 [DEBUG] [Thread-4886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:03:43.609 [DEBUG] [Thread-4886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:03:43.609 [DEBUG] [Thread-4886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:03:43.609 [DEBUG] [Thread-4886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:03:43.609 [DEBUG] [Thread-4886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:03:43.610 [DEBUG] [Thread-4886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:03:43.610 [DEBUG] [Thread-4886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:03:43.610 [DEBUG] [Thread-4886] [transport.py] [_log()] client lang: <none>
2025-11-25T20:03:43.610 [DEBUG] [Thread-4886] [transport.py] [_log()] server lang: <none>
2025-11-25T20:03:43.610 [DEBUG] [Thread-4886] [transport.py] [_log()] kex follows: False
2025-11-25T20:03:43.610 [DEBUG] [Thread-4886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:03:43.610 [DEBUG] [Thread-4886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:03:43.610 [DEBUG] [Thread-4886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:03:43.611 [DEBUG] [Thread-4886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:03:43.611 [DEBUG] [Thread-4886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:03:43.611 [DEBUG] [Thread-4886] [transport.py] [_log()] Compression: none
2025-11-25T20:03:43.611 [DEBUG] [Thread-4886] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:03:43.670 [DEBUG] [Thread-4886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:03:43.670 [DEBUG] [Thread-4886] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:03:43.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:03:43.671 [DEBUG] [Thread-4886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:03:43.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:03:43.726 [DEBUG] [Thread-4886] [transport.py] [_log()] userauth is OK
2025-11-25T20:03:43.726 [DEBUG] [Thread-4886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:03:43.726 [DEBUG] [Thread-4886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:03:43.726 [DEBUG] [Thread-4886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:03:43.726 [DEBUG] [Thread-4886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:03:43.748 [INFO] [Thread-4886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:03:43.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:03:43.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:03:44.657 [DEBUG] [Thread-4886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:03:44.658 [DEBUG] [Thread-4886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:03:44.710 [DEBUG] [Thread-4886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:03:44.710 [DEBUG] [Thread-4886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:03:44.723 [DEBUG] [Thread-4886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:03:44.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:03:44.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:03:44.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:03:44.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:03:44.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:03:44.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:03:44.758 [DEBUG] [Thread-4886] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:03:54.393 [DEBUG] [Thread-4709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:03:55.014 [DEBUG] [Thread-4888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:03:55.044 [DEBUG] [Thread-4889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:04:10.084 [DEBUG] [Thread-4890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:04:14.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:04:14.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:04:14.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:04:15.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 3, 41), 30.71, 12.16, 0.0, 10.85, 22.91, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:04:15.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:03:41
2025-11-25T20:04:15.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:04:15.763 [DEBUG] [Thread-4891] [transport.py] [_log()] starting thread (client mode): 0x70d39b70
2025-11-25T20:04:15.763 [DEBUG] [Thread-4891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:04:15.785 [DEBUG] [Thread-4891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:04:15.785 [INFO] [Thread-4891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:04:15.788 [DEBUG] [Thread-4891] [transport.py] [_log()] client lang: <none>
2025-11-25T20:04:15.789 [DEBUG] [Thread-4891] [transport.py] [_log()] server lang: <none>
2025-11-25T20:04:15.789 [DEBUG] [Thread-4891] [transport.py] [_log()] kex follows: False
2025-11-25T20:04:15.789 [DEBUG] [Thread-4891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:04:15.789 [DEBUG] [Thread-4891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:04:15.789 [DEBUG] [Thread-4891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:04:15.789 [DEBUG] [Thread-4891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:04:15.789 [DEBUG] [Thread-4891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:04:15.789 [DEBUG] [Thread-4891] [transport.py] [_log()] Compression: none
2025-11-25T20:04:15.789 [DEBUG] [Thread-4891] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:04:15.805 [DEBUG] [Thread-4891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:04:15.806 [DEBUG] [Thread-4891] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:04:15.807 [DEBUG] [Thread-4891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:04:15.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:04:15.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:04:15.809 [DEBUG] [Thread-4891] [transport.py] [_log()] userauth is OK
2025-11-25T20:04:15.809 [DEBUG] [Thread-4891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:04:15.809 [DEBUG] [Thread-4891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:04:15.809 [DEBUG] [Thread-4891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:04:15.809 [DEBUG] [Thread-4891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:04:15.830 [INFO] [Thread-4891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:04:15.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:04:16.658 [DEBUG] [Thread-4891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:04:16.658 [DEBUG] [Thread-4891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:04:16.659 [DEBUG] [Thread-4891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:04:16.699 [DEBUG] [Thread-4891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:04:16.699 [DEBUG] [Thread-4891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:04:16.703 [DEBUG] [Thread-4891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:04:16.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:04:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:04:16.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:04:16.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:04:16.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:04:16.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:04:16.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:04:16.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:04:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:04:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.752530 -999.00  +23.00   7.81     17   -3.10 1 1 1 1 1    36    0 24.37 -70.81 ----- 7.3 7.8 274.2 10.2 23.2 -27.0 23.2 -26.4 22.9 -25.2 23.1 -26.0
2025-11-25T20:04:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:04:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:04:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.752530
2025-11-25T20:04:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:04:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:04:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:04:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:04:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:04:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:03:41', tmtdew=30.71, humidity=12.16, cloud=0.0, wind=10.85, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:03:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:04:16.732 [DEBUG] [Thread-4891] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:04:16.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:04:16.827 [DEBUG] [Thread-4894] [transport.py] [_log()] starting thread (client mode): 0x70d1cbe0
2025-11-25T20:04:16.827 [DEBUG] [Thread-4894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:04:16.841 [DEBUG] [Thread-4894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:04:16.841 [INFO] [Thread-4894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:04:16.848 [DEBUG] [Thread-4894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] client lang: <none>
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] server lang: <none>
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] kex follows: False
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] Compression: none
2025-11-25T20:04:16.849 [DEBUG] [Thread-4894] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:04:16.909 [DEBUG] [Thread-4894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:04:16.910 [DEBUG] [Thread-4894] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:04:16.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:04:16.911 [DEBUG] [Thread-4894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:04:16.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:04:16.965 [DEBUG] [Thread-4894] [transport.py] [_log()] userauth is OK
2025-11-25T20:04:16.965 [DEBUG] [Thread-4894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:04:16.965 [DEBUG] [Thread-4894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:04:16.965 [DEBUG] [Thread-4894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:04:16.965 [DEBUG] [Thread-4894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:04:16.983 [INFO] [Thread-4894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:04:16.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:04:16.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:04:17.817 [DEBUG] [Thread-4894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:04:17.817 [DEBUG] [Thread-4894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:04:17.866 [DEBUG] [Thread-4894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:04:17.866 [DEBUG] [Thread-4894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:04:17.875 [DEBUG] [Thread-4894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:04:17.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:04:17.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:04:17.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:04:17.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:04:17.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:04:17.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:04:17.910 [DEBUG] [Thread-4894] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:04:25.119 [DEBUG] [Thread-4896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:04:27.478 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:04:27.479 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:04:40.177 [DEBUG] [Thread-4897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:04:47.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:04:47.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:04:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:04:48.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 4, 45), 30.64, 12.21, 0.0, 11.35, 22.85, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:04:48.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:04:45
2025-11-25T20:04:48.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:04:48.902 [DEBUG] [Thread-4898] [transport.py] [_log()] starting thread (client mode): 0x70d56350
2025-11-25T20:04:48.902 [DEBUG] [Thread-4898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:04:48.922 [DEBUG] [Thread-4898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:04:48.922 [INFO] [Thread-4898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:04:48.925 [DEBUG] [Thread-4898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:04:48.925 [DEBUG] [Thread-4898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:04:48.925 [DEBUG] [Thread-4898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:04:48.925 [DEBUG] [Thread-4898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] client lang: <none>
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] server lang: <none>
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] kex follows: False
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] Compression: none
2025-11-25T20:04:48.926 [DEBUG] [Thread-4898] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:04:48.945 [DEBUG] [Thread-4898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:04:48.945 [DEBUG] [Thread-4898] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:04:48.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:04:48.946 [DEBUG] [Thread-4898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:04:48.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:04:48.948 [DEBUG] [Thread-4898] [transport.py] [_log()] userauth is OK
2025-11-25T20:04:48.948 [DEBUG] [Thread-4898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:04:48.948 [DEBUG] [Thread-4898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:04:48.948 [DEBUG] [Thread-4898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:04:48.948 [DEBUG] [Thread-4898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:04:48.983 [INFO] [Thread-4898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:04:48.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:04:49.639 [DEBUG] [Thread-4898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:04:49.639 [DEBUG] [Thread-4898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:04:49.640 [DEBUG] [Thread-4898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:04:49.680 [DEBUG] [Thread-4898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:04:49.680 [DEBUG] [Thread-4898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:04:49.683 [DEBUG] [Thread-4898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:04:49.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:04:49.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:04:49.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:04:49.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:04:49.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:04:49.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:04:49.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:04:49.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.752877 -999.00  +23.00  13.54     17   -3.10 1 1 1 1 1    33    0 24.01 -75.18 ----- 11.8 13.5 258.2 15.3 23.1 -26.8 23.2 -26.4 22.9 -25.1 23.1 -26.2
2025-11-25T20:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.752877
2025-11-25T20:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:04:45', tmtdew=30.64, humidity=12.21, cloud=0.0, wind=11.35, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:04:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:04:49.709 [DEBUG] [Thread-4898] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:04:49.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:04:49.810 [DEBUG] [Thread-4901] [transport.py] [_log()] starting thread (client mode): 0x70d565f0
2025-11-25T20:04:49.810 [DEBUG] [Thread-4901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:04:49.824 [DEBUG] [Thread-4901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:04:49.824 [INFO] [Thread-4901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:04:49.831 [DEBUG] [Thread-4901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:04:49.832 [DEBUG] [Thread-4901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:04:49.832 [DEBUG] [Thread-4901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:04:49.832 [DEBUG] [Thread-4901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:04:49.832 [DEBUG] [Thread-4901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:04:49.832 [DEBUG] [Thread-4901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:04:49.832 [DEBUG] [Thread-4901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:04:49.832 [DEBUG] [Thread-4901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:04:49.832 [DEBUG] [Thread-4901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:04:49.833 [DEBUG] [Thread-4901] [transport.py] [_log()] client lang: <none>
2025-11-25T20:04:49.833 [DEBUG] [Thread-4901] [transport.py] [_log()] server lang: <none>
2025-11-25T20:04:49.833 [DEBUG] [Thread-4901] [transport.py] [_log()] kex follows: False
2025-11-25T20:04:49.833 [DEBUG] [Thread-4901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:04:49.833 [DEBUG] [Thread-4901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:04:49.833 [DEBUG] [Thread-4901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:04:49.833 [DEBUG] [Thread-4901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:04:49.834 [DEBUG] [Thread-4901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:04:49.834 [DEBUG] [Thread-4901] [transport.py] [_log()] Compression: none
2025-11-25T20:04:49.834 [DEBUG] [Thread-4901] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:04:49.890 [DEBUG] [Thread-4901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:04:49.891 [DEBUG] [Thread-4901] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:04:49.891 [DEBUG] [Thread-4901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:04:49.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:04:49.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:04:49.945 [DEBUG] [Thread-4901] [transport.py] [_log()] userauth is OK
2025-11-25T20:04:49.945 [DEBUG] [Thread-4901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:04:49.946 [DEBUG] [Thread-4901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:04:49.946 [DEBUG] [Thread-4901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:04:49.946 [DEBUG] [Thread-4901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:04:49.964 [INFO] [Thread-4901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:04:49.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:04:49.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:04:50.770 [DEBUG] [Thread-4901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:04:50.770 [DEBUG] [Thread-4901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:04:50.818 [DEBUG] [Thread-4901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:04:50.818 [DEBUG] [Thread-4901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:04:50.827 [DEBUG] [Thread-4901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:04:50.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:04:50.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:04:50.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:04:50.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:04:50.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:04:50.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:04:50.861 [DEBUG] [Thread-4901] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:04:55.071 [DEBUG] [Thread-4903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:04:55.212 [DEBUG] [Thread-4904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:05:10.269 [DEBUG] [Thread-4905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:05:20.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:05:20.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:05:20.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:05:21.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 5, 17), 30.68, 12.17, 0.0, 9.88, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:05:21.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:05:17
2025-11-25T20:05:21.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:05:21.841 [DEBUG] [Thread-4906] [transport.py] [_log()] starting thread (client mode): 0x70d54eb0
2025-11-25T20:05:21.842 [DEBUG] [Thread-4906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:05:21.864 [DEBUG] [Thread-4906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:05:21.864 [INFO] [Thread-4906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:05:21.867 [DEBUG] [Thread-4906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:05:21.867 [DEBUG] [Thread-4906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:05:21.867 [DEBUG] [Thread-4906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:05:21.867 [DEBUG] [Thread-4906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:05:21.867 [DEBUG] [Thread-4906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:05:21.867 [DEBUG] [Thread-4906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:05:21.867 [DEBUG] [Thread-4906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:05:21.867 [DEBUG] [Thread-4906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:05:21.867 [DEBUG] [Thread-4906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] client lang: <none>
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] server lang: <none>
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] kex follows: False
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] Compression: none
2025-11-25T20:05:21.868 [DEBUG] [Thread-4906] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:05:21.888 [DEBUG] [Thread-4906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:05:21.888 [DEBUG] [Thread-4906] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:05:21.888 [DEBUG] [Thread-4906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:05:21.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:05:21.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:05:21.889 [DEBUG] [Thread-4906] [transport.py] [_log()] userauth is OK
2025-11-25T20:05:21.889 [DEBUG] [Thread-4906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:05:21.889 [DEBUG] [Thread-4906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:05:21.889 [DEBUG] [Thread-4906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:05:21.889 [DEBUG] [Thread-4906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:05:21.903 [INFO] [Thread-4906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:05:21.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:05:22.750 [DEBUG] [Thread-4906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:05:22.751 [DEBUG] [Thread-4906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:05:22.751 [DEBUG] [Thread-4906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:05:22.792 [DEBUG] [Thread-4906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:05:22.792 [DEBUG] [Thread-4906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:05:22.794 [DEBUG] [Thread-4906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:05:22.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:05:22.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:05:22.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:05:22.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:05:22.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:05:22.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:05:22.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:05:22.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:05:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:05:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.753224 -999.00  +23.00  10.81     17   -3.10 1 1 1 1 1    30    0 24.48 -68.92 ----- 5.0 10.8 257.8 13.7 23.1 -27.0 23.2 -26.4 22.9 -25.1 23.0 -26.1
2025-11-25T20:05:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:05:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:05:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.753224
2025-11-25T20:05:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:05:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:05:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:05:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:05:22.821 [DEBUG] [Thread-4906] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:05:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:05:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:05:17', tmtdew=30.68, humidity=12.17, cloud=0.0, wind=9.88, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:04:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:05:22.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:05:22.918 [DEBUG] [Thread-4909] [transport.py] [_log()] starting thread (client mode): 0x70d54940
2025-11-25T20:05:22.918 [DEBUG] [Thread-4909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:05:22.933 [DEBUG] [Thread-4909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:05:22.933 [INFO] [Thread-4909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:05:22.940 [DEBUG] [Thread-4909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:05:22.940 [DEBUG] [Thread-4909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] client lang: <none>
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] server lang: <none>
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] kex follows: False
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:05:22.941 [DEBUG] [Thread-4909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:05:22.942 [DEBUG] [Thread-4909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:05:22.942 [DEBUG] [Thread-4909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:05:22.942 [DEBUG] [Thread-4909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:05:22.942 [DEBUG] [Thread-4909] [transport.py] [_log()] Compression: none
2025-11-25T20:05:22.942 [DEBUG] [Thread-4909] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:05:22.996 [DEBUG] [Thread-4909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:05:22.997 [DEBUG] [Thread-4909] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:05:22.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:05:22.998 [DEBUG] [Thread-4909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:05:22.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:05:23.053 [DEBUG] [Thread-4909] [transport.py] [_log()] userauth is OK
2025-11-25T20:05:23.053 [DEBUG] [Thread-4909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:05:23.053 [DEBUG] [Thread-4909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:05:23.053 [DEBUG] [Thread-4909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:05:23.053 [DEBUG] [Thread-4909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:05:23.072 [INFO] [Thread-4909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:05:23.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:05:23.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:05:23.904 [DEBUG] [Thread-4909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:05:23.905 [DEBUG] [Thread-4909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:05:23.953 [DEBUG] [Thread-4909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:05:23.953 [DEBUG] [Thread-4909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:05:23.962 [DEBUG] [Thread-4909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:05:23.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:05:23.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:05:23.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:05:23.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:05:23.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:05:23.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:05:23.999 [DEBUG] [Thread-4909] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:05:25.298 [DEBUG] [Thread-4911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:05:33.558 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:05:33.559 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:05:40.352 [DEBUG] [Thread-4912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:05:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:05:54.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:05:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:05:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 5, 49), 30.66, 12.14, 0.0, 11.24, 22.85, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:05:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:05:49
2025-11-25T20:05:54.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:05:54.947 [DEBUG] [Thread-4913] [transport.py] [_log()] starting thread (client mode): 0x70d55ed0
2025-11-25T20:05:54.947 [DEBUG] [Thread-4913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:05:54.963 [DEBUG] [Thread-4913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:05:54.963 [INFO] [Thread-4913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:05:54.966 [DEBUG] [Thread-4913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:05:54.966 [DEBUG] [Thread-4913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:05:54.966 [DEBUG] [Thread-4913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:05:54.966 [DEBUG] [Thread-4913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:05:54.966 [DEBUG] [Thread-4913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:05:54.966 [DEBUG] [Thread-4913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:05:54.966 [DEBUG] [Thread-4913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] client lang: <none>
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] server lang: <none>
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] kex follows: False
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] Compression: none
2025-11-25T20:05:54.967 [DEBUG] [Thread-4913] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:05:54.987 [DEBUG] [Thread-4913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:05:54.988 [DEBUG] [Thread-4913] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:05:54.988 [DEBUG] [Thread-4913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:05:54.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:05:54.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:05:55.033 [DEBUG] [Thread-4913] [transport.py] [_log()] userauth is OK
2025-11-25T20:05:55.033 [DEBUG] [Thread-4913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:05:55.033 [DEBUG] [Thread-4913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:05:55.034 [DEBUG] [Thread-4913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:05:55.034 [DEBUG] [Thread-4913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:05:55.072 [INFO] [Thread-4913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:05:55.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:05:55.134 [DEBUG] [Thread-4915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:05:55.389 [DEBUG] [Thread-4916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:05:55.729 [DEBUG] [Thread-4913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:05:55.729 [DEBUG] [Thread-4913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:05:55.730 [DEBUG] [Thread-4913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:05:55.771 [DEBUG] [Thread-4913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:05:55.771 [DEBUG] [Thread-4913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:05:55.775 [DEBUG] [Thread-4913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:05:55.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:05:55.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:05:55.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:05:55.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:05:55.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:05:55.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:05:55.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:05:55.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:05:55.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:05:55.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.753571 -999.00  +23.00   6.43     17   -3.00 1 1 1 1 1    28    0 24.33 -76.44 ----- 7.5 6.4 239.8 8.6 23.1 -26.9 23.1 -26.4 22.8 -25.1 23.0 -26.2
2025-11-25T20:05:55.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:05:55.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:05:55.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.753571
2025-11-25T20:05:55.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:05:55.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:05:55.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:05:55.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:05:55.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:05:55.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:05:49', tmtdew=30.66, humidity=12.14, cloud=0.0, wind=11.24, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:05:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:05:55.802 [DEBUG] [Thread-4913] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:05:55.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:05:55.901 [DEBUG] [Thread-4918] [transport.py] [_log()] starting thread (client mode): 0x70d56c80
2025-11-25T20:05:55.901 [DEBUG] [Thread-4918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:05:55.921 [DEBUG] [Thread-4918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:05:55.922 [INFO] [Thread-4918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:05:55.932 [DEBUG] [Thread-4918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] client lang: <none>
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] server lang: <none>
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] kex follows: False
2025-11-25T20:05:55.933 [DEBUG] [Thread-4918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:05:55.934 [DEBUG] [Thread-4918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:05:55.934 [DEBUG] [Thread-4918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:05:55.934 [DEBUG] [Thread-4918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:05:55.934 [DEBUG] [Thread-4918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:05:55.934 [DEBUG] [Thread-4918] [transport.py] [_log()] Compression: none
2025-11-25T20:05:55.934 [DEBUG] [Thread-4918] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:05:55.990 [DEBUG] [Thread-4918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:05:55.990 [DEBUG] [Thread-4918] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:05:55.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:05:55.991 [DEBUG] [Thread-4918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:05:55.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:05:56.045 [DEBUG] [Thread-4918] [transport.py] [_log()] userauth is OK
2025-11-25T20:05:56.046 [DEBUG] [Thread-4918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:05:56.046 [DEBUG] [Thread-4918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:05:56.046 [DEBUG] [Thread-4918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:05:56.046 [DEBUG] [Thread-4918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:05:56.064 [INFO] [Thread-4918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:05:56.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:05:56.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:05:56.955 [DEBUG] [Thread-4918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:05:56.956 [DEBUG] [Thread-4918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:05:57.004 [DEBUG] [Thread-4918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:05:57.004 [DEBUG] [Thread-4918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:05:57.013 [DEBUG] [Thread-4918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:05:57.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:05:57.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:05:57.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:05:57.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:05:57.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:05:57.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:05:57.050 [DEBUG] [Thread-4918] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:06:10.428 [DEBUG] [Thread-4920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:06:25.477 [DEBUG] [Thread-4921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:06:27.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:06:27.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:06:27.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:06:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 6, 21), 30.66, 12.14, 0.0, 10.59, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:06:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:06:21
2025-11-25T20:06:27.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:06:28.047 [DEBUG] [Thread-4922] [transport.py] [_log()] starting thread (client mode): 0x70d1c700
2025-11-25T20:06:28.047 [DEBUG] [Thread-4922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:06:28.067 [DEBUG] [Thread-4922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:06:28.067 [INFO] [Thread-4922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] client lang: <none>
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] server lang: <none>
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] kex follows: False
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] Compression: none
2025-11-25T20:06:28.071 [DEBUG] [Thread-4922] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:06:28.088 [DEBUG] [Thread-4922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:06:28.088 [DEBUG] [Thread-4922] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:06:28.088 [DEBUG] [Thread-4922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:06:28.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:06:28.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:06:28.089 [DEBUG] [Thread-4922] [transport.py] [_log()] userauth is OK
2025-11-25T20:06:28.089 [DEBUG] [Thread-4922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:06:28.089 [DEBUG] [Thread-4922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:06:28.089 [DEBUG] [Thread-4922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:06:28.089 [DEBUG] [Thread-4922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:06:28.099 [INFO] [Thread-4922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:06:28.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:06:28.875 [DEBUG] [Thread-4922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:06:28.875 [DEBUG] [Thread-4922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:06:28.875 [DEBUG] [Thread-4922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:06:28.915 [DEBUG] [Thread-4922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:06:28.915 [DEBUG] [Thread-4922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:06:28.917 [DEBUG] [Thread-4922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:06:28.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:06:28.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:06:28.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:06:28.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:06:28.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:06:28.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:06:28.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.754266 -999.00  +23.00   7.24     17   -3.00 1 1 1 1 1    23    0 23.83 -69.02 ----- 6.6 7.2 256.4 13.2 23.1 -27.0 23.1 -26.5 22.8 -24.9 23.0 -26.0
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.754266
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:06:28.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:06:21', tmtdew=30.66, humidity=12.14, cloud=0.0, wind=10.59, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:06:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:06:28.936 [DEBUG] [Thread-4922] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:06:29.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:06:29.024 [DEBUG] [Thread-4925] [transport.py] [_log()] starting thread (client mode): 0x70d1e5f0
2025-11-25T20:06:29.024 [DEBUG] [Thread-4925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:06:29.039 [DEBUG] [Thread-4925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:06:29.039 [INFO] [Thread-4925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] client lang: <none>
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] server lang: <none>
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] kex follows: False
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] Compression: none
2025-11-25T20:06:29.047 [DEBUG] [Thread-4925] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:06:29.104 [DEBUG] [Thread-4925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:06:29.104 [DEBUG] [Thread-4925] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:06:29.104 [DEBUG] [Thread-4925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:06:29.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:06:29.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:06:29.161 [DEBUG] [Thread-4925] [transport.py] [_log()] userauth is OK
2025-11-25T20:06:29.161 [DEBUG] [Thread-4925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:06:29.161 [DEBUG] [Thread-4925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:06:29.161 [DEBUG] [Thread-4925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:06:29.161 [DEBUG] [Thread-4925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:06:29.176 [INFO] [Thread-4925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:06:29.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:06:29.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:06:30.020 [DEBUG] [Thread-4925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:06:30.020 [DEBUG] [Thread-4925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:06:30.068 [DEBUG] [Thread-4925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:06:30.068 [DEBUG] [Thread-4925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:06:30.077 [DEBUG] [Thread-4925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:06:30.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:06:30.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:06:30.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:06:30.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:06:30.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:06:30.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:06:30.114 [DEBUG] [Thread-4925] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:06:39.597 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:06:39.599 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:06:40.508 [DEBUG] [Thread-4927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:06:55.185 [DEBUG] [Thread-4928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:06:55.554 [DEBUG] [Thread-4929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:07:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:07:00.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:07:00.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:07:00.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 6, 54), 30.66, 12.14, 0.0, 14.75, 22.83, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:07:00.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:06:54
2025-11-25T20:07:00.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:07:01.048 [DEBUG] [Thread-4930] [transport.py] [_log()] starting thread (client mode): 0x70d57430
2025-11-25T20:07:01.048 [DEBUG] [Thread-4930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:07:01.068 [DEBUG] [Thread-4930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:07:01.068 [INFO] [Thread-4930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:07:01.071 [DEBUG] [Thread-4930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:07:01.071 [DEBUG] [Thread-4930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:07:01.071 [DEBUG] [Thread-4930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:07:01.071 [DEBUG] [Thread-4930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:07:01.071 [DEBUG] [Thread-4930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:07:01.071 [DEBUG] [Thread-4930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:07:01.071 [DEBUG] [Thread-4930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] client lang: <none>
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] server lang: <none>
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] kex follows: False
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] Compression: none
2025-11-25T20:07:01.072 [DEBUG] [Thread-4930] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:07:01.087 [DEBUG] [Thread-4930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:07:01.087 [DEBUG] [Thread-4930] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:07:01.088 [DEBUG] [Thread-4930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:07:01.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:07:01.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:07:01.089 [DEBUG] [Thread-4930] [transport.py] [_log()] userauth is OK
2025-11-25T20:07:01.089 [DEBUG] [Thread-4930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:07:01.089 [DEBUG] [Thread-4930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:07:01.089 [DEBUG] [Thread-4930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:07:01.089 [DEBUG] [Thread-4930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:07:01.117 [INFO] [Thread-4930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:07:01.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:07:01.767 [DEBUG] [Thread-4930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:07:01.767 [DEBUG] [Thread-4930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:07:01.768 [DEBUG] [Thread-4930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:07:01.808 [DEBUG] [Thread-4930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:07:01.808 [DEBUG] [Thread-4930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:07:01.810 [DEBUG] [Thread-4930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:07:01.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:07:01.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:07:01.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:07:01.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:07:01.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:07:01.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:07:01.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:07:01.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:07:01.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:07:01.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.754613 -999.00  +23.00  11.58     17   -2.90 1 1 1 1 1    21    0 24.47 -61.42 ----- 9.8 11.6 257.6 13.9 23.1 -26.8 23.1 -26.3 22.8 -25.0 23.0 -26.1
2025-11-25T20:07:01.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:07:01.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:07:01.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.754613
2025-11-25T20:07:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:07:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:07:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:07:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:07:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:07:01.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:06:54', tmtdew=30.66, humidity=12.14, cloud=0.0, wind=14.75, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:06:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:07:01.822 [DEBUG] [Thread-4930] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:07:01.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:07:01.909 [DEBUG] [Thread-4933] [transport.py] [_log()] starting thread (client mode): 0x70d3b2e0
2025-11-25T20:07:01.909 [DEBUG] [Thread-4933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:07:01.923 [DEBUG] [Thread-4933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:07:01.923 [INFO] [Thread-4933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] client lang: <none>
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] server lang: <none>
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] kex follows: False
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] Compression: none
2025-11-25T20:07:01.931 [DEBUG] [Thread-4933] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:07:01.988 [DEBUG] [Thread-4933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:07:01.988 [DEBUG] [Thread-4933] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:07:01.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:07:01.988 [DEBUG] [Thread-4933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:07:01.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:07:02.045 [DEBUG] [Thread-4933] [transport.py] [_log()] userauth is OK
2025-11-25T20:07:02.045 [DEBUG] [Thread-4933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:07:02.045 [DEBUG] [Thread-4933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:07:02.045 [DEBUG] [Thread-4933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:07:02.045 [DEBUG] [Thread-4933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:07:02.063 [INFO] [Thread-4933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:07:02.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:07:02.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:07:02.924 [DEBUG] [Thread-4933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:07:02.924 [DEBUG] [Thread-4933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:07:02.972 [DEBUG] [Thread-4933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:07:02.972 [DEBUG] [Thread-4933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:07:02.981 [DEBUG] [Thread-4933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:07:02.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:07:02.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:07:02.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:07:03.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:07:03.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:07:03.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:07:03.013 [DEBUG] [Thread-4933] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:07:10.585 [DEBUG] [Thread-4935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:07:25.636 [DEBUG] [Thread-4936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:07:33.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:07:33.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:07:33.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:07:33.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 7, 26), 30.65, 12.16, 0.0, 15.3, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:07:33.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:07:26
2025-11-25T20:07:33.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:07:33.959 [DEBUG] [Thread-4937] [transport.py] [_log()] starting thread (client mode): 0x70d1ffa0
2025-11-25T20:07:33.959 [DEBUG] [Thread-4937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:07:33.978 [DEBUG] [Thread-4937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:07:33.978 [INFO] [Thread-4937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:07:33.979 [DEBUG] [Thread-4937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] client lang: <none>
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] server lang: <none>
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] kex follows: False
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:07:33.980 [DEBUG] [Thread-4937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:07:33.981 [DEBUG] [Thread-4937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:07:33.981 [DEBUG] [Thread-4937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:07:33.981 [DEBUG] [Thread-4937] [transport.py] [_log()] Compression: none
2025-11-25T20:07:33.981 [DEBUG] [Thread-4937] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:07:33.990 [DEBUG] [Thread-4937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:07:33.991 [DEBUG] [Thread-4937] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:07:33.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:07:33.993 [DEBUG] [Thread-4937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:07:33.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:07:33.995 [DEBUG] [Thread-4937] [transport.py] [_log()] userauth is OK
2025-11-25T20:07:33.995 [DEBUG] [Thread-4937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:07:33.996 [DEBUG] [Thread-4937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:07:33.996 [DEBUG] [Thread-4937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:07:33.996 [DEBUG] [Thread-4937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:07:34.022 [INFO] [Thread-4937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:07:34.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:07:34.803 [DEBUG] [Thread-4937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:07:34.804 [DEBUG] [Thread-4937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:07:34.804 [DEBUG] [Thread-4937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:07:34.845 [DEBUG] [Thread-4937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:07:34.845 [DEBUG] [Thread-4937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:07:34.848 [DEBUG] [Thread-4937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:07:34.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:07:34.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:07:34.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:07:34.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:07:34.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:07:34.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:07:34.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:07:34.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:07:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:07:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.754961 -999.00  +23.00  11.76     17   -3.00 1 1 1 1 1    19    0 24.87 -63.92 ----- 10.0 11.8 252.0 13.4 23.1 -26.8 23.1 -26.3 22.8 -25.1 23.0 -26.1
2025-11-25T20:07:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:07:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:07:34.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.754961
2025-11-25T20:07:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:07:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:07:34.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:07:34.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:07:34.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:07:34.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:07:26', tmtdew=30.65, humidity=12.16, cloud=0.0, wind=15.3, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:07:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:07:34.868 [DEBUG] [Thread-4937] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:07:34.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:07:34.965 [DEBUG] [Thread-4940] [transport.py] [_log()] starting thread (client mode): 0x70d1ee00
2025-11-25T20:07:34.965 [DEBUG] [Thread-4940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:07:34.979 [DEBUG] [Thread-4940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:07:34.979 [INFO] [Thread-4940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:07:34.986 [DEBUG] [Thread-4940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] client lang: <none>
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] server lang: <none>
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] kex follows: False
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:07:34.987 [DEBUG] [Thread-4940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:07:34.988 [DEBUG] [Thread-4940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:07:34.988 [DEBUG] [Thread-4940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:07:34.988 [DEBUG] [Thread-4940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:07:34.988 [DEBUG] [Thread-4940] [transport.py] [_log()] Compression: none
2025-11-25T20:07:34.988 [DEBUG] [Thread-4940] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:07:35.045 [DEBUG] [Thread-4940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:07:35.045 [DEBUG] [Thread-4940] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:07:35.046 [DEBUG] [Thread-4940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:07:35.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:07:35.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:07:35.102 [DEBUG] [Thread-4940] [transport.py] [_log()] userauth is OK
2025-11-25T20:07:35.102 [DEBUG] [Thread-4940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:07:35.102 [DEBUG] [Thread-4940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:07:35.102 [DEBUG] [Thread-4940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:07:35.102 [DEBUG] [Thread-4940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:07:35.121 [INFO] [Thread-4940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:07:35.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:07:35.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:07:35.964 [DEBUG] [Thread-4940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:07:35.965 [DEBUG] [Thread-4940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:07:36.017 [DEBUG] [Thread-4940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:07:36.017 [DEBUG] [Thread-4940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:07:36.026 [DEBUG] [Thread-4940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:07:36.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:07:36.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')
2025-11-25T20:07:36.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:07:36.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:07:36.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:07:36.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:07:36.063 [DEBUG] [Thread-4940] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:07:40.667 [DEBUG] [Thread-4942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:07:44.059 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:07:44.060 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:07:55.252 [DEBUG] [Thread-4943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:07:55.721 [DEBUG] [Thread-4944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:08:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:08:06.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:08:06.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:08:06.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 7, 58), 30.72, 12.14, 0.0, 13.82, 22.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:08:06.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:07:58
2025-11-25T20:08:06.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:08:07.002 [DEBUG] [Thread-4945] [transport.py] [_log()] starting thread (client mode): 0x70d02380
2025-11-25T20:08:07.003 [DEBUG] [Thread-4945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:08:07.022 [DEBUG] [Thread-4945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:08:07.022 [INFO] [Thread-4945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] client lang: <none>
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] server lang: <none>
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] kex follows: False
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:08:07.025 [DEBUG] [Thread-4945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:08:07.026 [DEBUG] [Thread-4945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:08:07.026 [DEBUG] [Thread-4945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:08:07.026 [DEBUG] [Thread-4945] [transport.py] [_log()] Compression: none
2025-11-25T20:08:07.026 [DEBUG] [Thread-4945] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:08:07.041 [DEBUG] [Thread-4945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:08:07.042 [DEBUG] [Thread-4945] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:08:07.042 [DEBUG] [Thread-4945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:08:07.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:08:07.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:08:07.044 [DEBUG] [Thread-4945] [transport.py] [_log()] userauth is OK
2025-11-25T20:08:07.044 [DEBUG] [Thread-4945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:08:07.044 [DEBUG] [Thread-4945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:08:07.044 [DEBUG] [Thread-4945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:08:07.044 [DEBUG] [Thread-4945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:08:07.064 [INFO] [Thread-4945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:08:07.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:08:07.716 [DEBUG] [Thread-4945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:08:07.716 [DEBUG] [Thread-4945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:08:07.726 [DEBUG] [Thread-4945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:08:07.758 [DEBUG] [Thread-4945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:08:07.758 [DEBUG] [Thread-4945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:08:07.761 [DEBUG] [Thread-4945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:08:07.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:08:07.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:08:07.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:08:07.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:08:07.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:08:07.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:08:07.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:08:07.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:08:07.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:08:07.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.755308 -999.00  +23.00   7.53     17   -3.00 1 1 1 1 1    18    0 23.77 -63.61 ----- 4.9 7.5 252.8 11.8 23.0 -26.9 23.1 -26.5 22.8 -25.1 22.9 -26.1
2025-11-25T20:08:07.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:08:07.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:08:07.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.755308
2025-11-25T20:08:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:08:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:08:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:08:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:08:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:08:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:07:58', tmtdew=30.72, humidity=12.14, cloud=0.0, wind=13.82, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:07:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:08:07.788 [DEBUG] [Thread-4945] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:08:07.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:08:07.885 [DEBUG] [Thread-4948] [transport.py] [_log()] starting thread (client mode): 0x7374e4a0
2025-11-25T20:08:07.886 [DEBUG] [Thread-4948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:08:07.902 [DEBUG] [Thread-4948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:08:07.903 [INFO] [Thread-4948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:08:07.910 [DEBUG] [Thread-4948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:08:07.910 [DEBUG] [Thread-4948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:08:07.910 [DEBUG] [Thread-4948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] client lang: <none>
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] server lang: <none>
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] kex follows: False
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:08:07.911 [DEBUG] [Thread-4948] [transport.py] [_log()] Compression: none
2025-11-25T20:08:07.912 [DEBUG] [Thread-4948] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:08:07.970 [DEBUG] [Thread-4948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:08:07.971 [DEBUG] [Thread-4948] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:08:07.971 [DEBUG] [Thread-4948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:08:07.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:08:07.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:08:08.030 [DEBUG] [Thread-4948] [transport.py] [_log()] userauth is OK
2025-11-25T20:08:08.030 [DEBUG] [Thread-4948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:08:08.030 [DEBUG] [Thread-4948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:08:08.031 [DEBUG] [Thread-4948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:08:08.031 [DEBUG] [Thread-4948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:08:08.050 [INFO] [Thread-4948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:08:08.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:08:08.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:08:08.874 [DEBUG] [Thread-4948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:08:08.874 [DEBUG] [Thread-4948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:08:08.924 [DEBUG] [Thread-4948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:08:08.924 [DEBUG] [Thread-4948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:08:08.936 [DEBUG] [Thread-4948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:08:08.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:08:08.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:08:08.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:08:08.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:08:08.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:08:08.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:08:08.975 [DEBUG] [Thread-4948] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:08:10.759 [DEBUG] [Thread-4950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:08:25.817 [DEBUG] [Thread-4951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:08:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:08:38.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:08:38.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:08:39.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 8, 30), 30.76, 12.11, 0.0, 12.26, 22.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:08:39.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:08:30
2025-11-25T20:08:39.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:08:39.925 [DEBUG] [Thread-4952] [transport.py] [_log()] starting thread (client mode): 0x70d01fc0
2025-11-25T20:08:39.926 [DEBUG] [Thread-4952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:08:39.947 [DEBUG] [Thread-4952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:08:39.947 [INFO] [Thread-4952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:08:39.949 [DEBUG] [Thread-4952] [transport.py] [_log()] client lang: <none>
2025-11-25T20:08:39.950 [DEBUG] [Thread-4952] [transport.py] [_log()] server lang: <none>
2025-11-25T20:08:39.950 [DEBUG] [Thread-4952] [transport.py] [_log()] kex follows: False
2025-11-25T20:08:39.950 [DEBUG] [Thread-4952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:08:39.950 [DEBUG] [Thread-4952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:08:39.950 [DEBUG] [Thread-4952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:08:39.950 [DEBUG] [Thread-4952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:08:39.950 [DEBUG] [Thread-4952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:08:39.950 [DEBUG] [Thread-4952] [transport.py] [_log()] Compression: none
2025-11-25T20:08:39.950 [DEBUG] [Thread-4952] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:08:39.964 [DEBUG] [Thread-4952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:08:39.964 [DEBUG] [Thread-4952] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:08:39.965 [DEBUG] [Thread-4952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:08:39.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:08:39.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:08:39.967 [DEBUG] [Thread-4952] [transport.py] [_log()] userauth is OK
2025-11-25T20:08:39.967 [DEBUG] [Thread-4952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:08:39.967 [DEBUG] [Thread-4952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:08:39.967 [DEBUG] [Thread-4952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:08:39.967 [DEBUG] [Thread-4952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:08:39.990 [INFO] [Thread-4952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:08:39.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:08:40.775 [DEBUG] [Thread-4952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:08:40.776 [DEBUG] [Thread-4952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:08:40.776 [DEBUG] [Thread-4952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:08:40.817 [DEBUG] [Thread-4952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:08:40.817 [DEBUG] [Thread-4952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:08:40.820 [DEBUG] [Thread-4952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:08:40.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:08:40.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:08:40.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:08:40.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:08:40.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:08:40.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:08:40.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:08:40.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:08:40.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:08:40.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.755655 -999.00  +22.90   4.73     17   -3.10 1 1 1 1 1    16    0 24.12 -65.51 ----- 6.1 4.7 228.5 9.1 23.0 -27.1 23.0 -26.5 22.8 -25.3 22.9 -26.2
2025-11-25T20:08:40.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:08:40.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:08:40.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.755655
2025-11-25T20:08:40.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:08:40.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:08:40.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:08:40.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:08:40.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:08:40.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:08:30', tmtdew=30.76, humidity=12.11, cloud=0.0, wind=12.26, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:08:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:08:40.848 [DEBUG] [Thread-4952] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:08:40.857 [DEBUG] [Thread-4955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:08:40.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:08:40.943 [DEBUG] [Thread-4956] [transport.py] [_log()] starting thread (client mode): 0x7374c7f0
2025-11-25T20:08:40.943 [DEBUG] [Thread-4956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:08:40.958 [DEBUG] [Thread-4956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:08:40.958 [INFO] [Thread-4956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:08:40.965 [DEBUG] [Thread-4956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:08:40.966 [DEBUG] [Thread-4956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:08:40.966 [DEBUG] [Thread-4956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:08:40.966 [DEBUG] [Thread-4956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:08:40.966 [DEBUG] [Thread-4956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:08:40.966 [DEBUG] [Thread-4956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:08:40.966 [DEBUG] [Thread-4956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:08:40.966 [DEBUG] [Thread-4956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:08:40.966 [DEBUG] [Thread-4956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:08:40.966 [DEBUG] [Thread-4956] [transport.py] [_log()] client lang: <none>
2025-11-25T20:08:40.967 [DEBUG] [Thread-4956] [transport.py] [_log()] server lang: <none>
2025-11-25T20:08:40.967 [DEBUG] [Thread-4956] [transport.py] [_log()] kex follows: False
2025-11-25T20:08:40.967 [DEBUG] [Thread-4956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:08:40.967 [DEBUG] [Thread-4956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:08:40.967 [DEBUG] [Thread-4956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:08:40.967 [DEBUG] [Thread-4956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:08:40.967 [DEBUG] [Thread-4956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:08:40.968 [DEBUG] [Thread-4956] [transport.py] [_log()] Compression: none
2025-11-25T20:08:40.968 [DEBUG] [Thread-4956] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:08:41.026 [DEBUG] [Thread-4956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:08:41.027 [DEBUG] [Thread-4956] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:08:41.028 [DEBUG] [Thread-4956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:08:41.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:08:41.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:08:41.082 [DEBUG] [Thread-4956] [transport.py] [_log()] userauth is OK
2025-11-25T20:08:41.082 [DEBUG] [Thread-4956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:08:41.083 [DEBUG] [Thread-4956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:08:41.083 [DEBUG] [Thread-4956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:08:41.083 [DEBUG] [Thread-4956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:08:41.102 [INFO] [Thread-4956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:08:41.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:08:41.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:08:41.934 [DEBUG] [Thread-4956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:08:41.934 [DEBUG] [Thread-4956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:08:41.982 [DEBUG] [Thread-4956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:08:41.982 [DEBUG] [Thread-4956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:08:41.992 [DEBUG] [Thread-4956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:08:42.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:08:42.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:08:42.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:08:42.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:08:42.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:08:42.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:08:42.029 [DEBUG] [Thread-4956] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:08:50.259 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:08:50.260 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:08:55.306 [DEBUG] [Thread-4958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:08:55.901 [DEBUG] [Thread-4959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:09:10.930 [DEBUG] [Thread-4960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:09:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:09:12.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:09:12.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:09:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 9, 2), 30.78, 12.09, 0.0, 10.29, 22.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:09:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:09:02
2025-11-25T20:09:12.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:09:13.009 [DEBUG] [Thread-4961] [transport.py] [_log()] starting thread (client mode): 0x70d380a0
2025-11-25T20:09:13.010 [DEBUG] [Thread-4961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:09:13.029 [DEBUG] [Thread-4961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:09:13.029 [INFO] [Thread-4961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:09:13.030 [DEBUG] [Thread-4961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:09:13.030 [DEBUG] [Thread-4961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:09:13.030 [DEBUG] [Thread-4961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:09:13.030 [DEBUG] [Thread-4961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] client lang: <none>
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] server lang: <none>
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] kex follows: False
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] Compression: none
2025-11-25T20:09:13.031 [DEBUG] [Thread-4961] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:09:13.044 [DEBUG] [Thread-4961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:09:13.044 [DEBUG] [Thread-4961] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:09:13.045 [DEBUG] [Thread-4961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:09:13.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:09:13.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:09:13.047 [DEBUG] [Thread-4961] [transport.py] [_log()] userauth is OK
2025-11-25T20:09:13.047 [DEBUG] [Thread-4961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:09:13.047 [DEBUG] [Thread-4961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:09:13.047 [DEBUG] [Thread-4961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:09:13.047 [DEBUG] [Thread-4961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:09:13.072 [INFO] [Thread-4961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:09:13.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:09:13.713 [DEBUG] [Thread-4961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:09:13.713 [DEBUG] [Thread-4961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:09:13.714 [DEBUG] [Thread-4961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:09:13.754 [DEBUG] [Thread-4961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:09:13.754 [DEBUG] [Thread-4961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:09:13.758 [DEBUG] [Thread-4961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:09:13.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:09:13.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:09:13.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:09:13.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:09:13.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:09:13.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:09:13.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:09:13.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:09:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:09:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.756002 -999.00  +22.90   4.95     17   -3.10 1 1 1 1 1    15    0 24.15 -64.06 ----- 6.7 5.0 234.6 9.8 23.0 -27.1 23.0 -26.4 22.7 -25.2 22.9 -26.3
2025-11-25T20:09:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:09:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:09:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.756002
2025-11-25T20:09:13.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:09:13.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:09:13.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:09:13.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:09:13.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:09:13.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:09:02', tmtdew=30.78, humidity=12.09, cloud=0.0, wind=10.29, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:08:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:09:13.784 [DEBUG] [Thread-4961] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:09:13.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:09:13.879 [DEBUG] [Thread-4964] [transport.py] [_log()] starting thread (client mode): 0x70d39360
2025-11-25T20:09:13.879 [DEBUG] [Thread-4964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:09:13.894 [DEBUG] [Thread-4964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:09:13.894 [INFO] [Thread-4964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:09:13.901 [DEBUG] [Thread-4964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:09:13.901 [DEBUG] [Thread-4964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:09:13.901 [DEBUG] [Thread-4964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:09:13.901 [DEBUG] [Thread-4964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:09:13.901 [DEBUG] [Thread-4964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] client lang: <none>
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] server lang: <none>
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] kex follows: False
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:09:13.902 [DEBUG] [Thread-4964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:09:13.903 [DEBUG] [Thread-4964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:09:13.903 [DEBUG] [Thread-4964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:09:13.903 [DEBUG] [Thread-4964] [transport.py] [_log()] Compression: none
2025-11-25T20:09:13.903 [DEBUG] [Thread-4964] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:09:13.963 [DEBUG] [Thread-4964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:09:13.964 [DEBUG] [Thread-4964] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:09:13.965 [DEBUG] [Thread-4964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:09:13.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:09:13.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:09:14.022 [DEBUG] [Thread-4964] [transport.py] [_log()] userauth is OK
2025-11-25T20:09:14.022 [DEBUG] [Thread-4964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:09:14.022 [DEBUG] [Thread-4964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:09:14.022 [DEBUG] [Thread-4964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:09:14.022 [DEBUG] [Thread-4964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:09:14.047 [INFO] [Thread-4964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:09:14.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:09:14.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:09:14.870 [DEBUG] [Thread-4964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:09:14.870 [DEBUG] [Thread-4964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:09:14.917 [DEBUG] [Thread-4964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:09:14.918 [DEBUG] [Thread-4964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:09:14.927 [DEBUG] [Thread-4964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:09:14.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:09:14.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:09:14.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:09:14.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:09:14.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:09:14.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:09:14.964 [DEBUG] [Thread-4964] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:09:25.968 [DEBUG] [Thread-4966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:09:41.018 [DEBUG] [Thread-4967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:09:44.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:09:44.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:09:44.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:09:45.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 9, 34), 30.71, 12.11, 0.0, 11.17, 22.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:09:45.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:09:34
2025-11-25T20:09:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:09:45.926 [DEBUG] [Thread-4968] [transport.py] [_log()] starting thread (client mode): 0x7374ff70
2025-11-25T20:09:45.926 [DEBUG] [Thread-4968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:09:45.946 [DEBUG] [Thread-4968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:09:45.946 [INFO] [Thread-4968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:09:45.949 [DEBUG] [Thread-4968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] client lang: <none>
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] server lang: <none>
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] kex follows: False
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] Compression: none
2025-11-25T20:09:45.950 [DEBUG] [Thread-4968] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:09:45.968 [DEBUG] [Thread-4968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:09:45.968 [DEBUG] [Thread-4968] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:09:45.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:09:45.969 [DEBUG] [Thread-4968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:09:45.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:09:45.971 [DEBUG] [Thread-4968] [transport.py] [_log()] userauth is OK
2025-11-25T20:09:45.971 [DEBUG] [Thread-4968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:09:45.972 [DEBUG] [Thread-4968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:09:45.972 [DEBUG] [Thread-4968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:09:45.972 [DEBUG] [Thread-4968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:09:45.987 [INFO] [Thread-4968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:09:45.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:09:46.740 [DEBUG] [Thread-4968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:09:46.740 [DEBUG] [Thread-4968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:09:46.740 [DEBUG] [Thread-4968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:09:46.781 [DEBUG] [Thread-4968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:09:46.781 [DEBUG] [Thread-4968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:09:46.785 [DEBUG] [Thread-4968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:09:46.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:09:46.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:09:46.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:09:46.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:09:46.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:09:46.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:09:46.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:09:46.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:09:46.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:09:46.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.756349 -999.00  +22.80   6.41     17   -3.20 1 1 1 1 1    14    0 24.71 -60.84 ----- 3.6 6.4 235.2 8.0 23.0 -27.1 23.0 -26.4 22.7 -25.3 22.9 -26.2
2025-11-25T20:09:46.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:09:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:09:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.756349
2025-11-25T20:09:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:09:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:09:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:09:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:09:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:09:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:09:34', tmtdew=30.71, humidity=12.11, cloud=0.0, wind=11.17, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:09:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:09:46.811 [DEBUG] [Thread-4968] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:09:46.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:09:46.908 [DEBUG] [Thread-4971] [transport.py] [_log()] starting thread (client mode): 0x70d43430
2025-11-25T20:09:46.908 [DEBUG] [Thread-4971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:09:46.922 [DEBUG] [Thread-4971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:09:46.923 [INFO] [Thread-4971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:09:46.930 [DEBUG] [Thread-4971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:09:46.930 [DEBUG] [Thread-4971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] client lang: <none>
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] server lang: <none>
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] kex follows: False
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] Compression: none
2025-11-25T20:09:46.931 [DEBUG] [Thread-4971] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:09:46.990 [DEBUG] [Thread-4971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:09:46.991 [DEBUG] [Thread-4971] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:09:46.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:09:46.992 [DEBUG] [Thread-4971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:09:46.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:09:47.046 [DEBUG] [Thread-4971] [transport.py] [_log()] userauth is OK
2025-11-25T20:09:47.046 [DEBUG] [Thread-4971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:09:47.046 [DEBUG] [Thread-4971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:09:47.046 [DEBUG] [Thread-4971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:09:47.047 [DEBUG] [Thread-4971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:09:47.065 [INFO] [Thread-4971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:09:47.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:09:47.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:09:47.921 [DEBUG] [Thread-4971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:09:47.922 [DEBUG] [Thread-4971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:09:47.969 [DEBUG] [Thread-4971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:09:47.970 [DEBUG] [Thread-4971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:09:47.979 [DEBUG] [Thread-4971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:09:47.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:09:47.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:09:47.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:09:48.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:09:48.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:09:48.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:09:48.016 [DEBUG] [Thread-4971] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:09:55.370 [DEBUG] [Thread-4973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:09:56.056 [DEBUG] [Thread-4974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:09:58.418 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:09:58.419 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:10:11.103 [DEBUG] [Thread-4975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:10:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:10:18.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:10:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:10:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 10, 6), 30.72, 12.08, 0.0, 10.18, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:10:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:10:06
2025-11-25T20:10:18.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:10:18.961 [DEBUG] [Thread-4976] [transport.py] [_log()] starting thread (client mode): 0x70d018a0
2025-11-25T20:10:18.961 [DEBUG] [Thread-4976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:10:18.981 [DEBUG] [Thread-4976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:10:18.981 [INFO] [Thread-4976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:10:18.984 [DEBUG] [Thread-4976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:10:18.984 [DEBUG] [Thread-4976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:10:18.984 [DEBUG] [Thread-4976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:10:18.984 [DEBUG] [Thread-4976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:10:18.984 [DEBUG] [Thread-4976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:10:18.984 [DEBUG] [Thread-4976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:10:18.984 [DEBUG] [Thread-4976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:10:18.984 [DEBUG] [Thread-4976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] client lang: <none>
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] server lang: <none>
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] kex follows: False
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] Compression: none
2025-11-25T20:10:18.985 [DEBUG] [Thread-4976] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:10:18.997 [DEBUG] [Thread-4976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:10:18.998 [DEBUG] [Thread-4976] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:10:18.998 [DEBUG] [Thread-4976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:10:18.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:10:18.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:10:19.000 [DEBUG] [Thread-4976] [transport.py] [_log()] userauth is OK
2025-11-25T20:10:19.000 [DEBUG] [Thread-4976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:10:19.001 [DEBUG] [Thread-4976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:10:19.001 [DEBUG] [Thread-4976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:10:19.001 [DEBUG] [Thread-4976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:10:19.027 [INFO] [Thread-4976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:10:19.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:10:19.658 [DEBUG] [Thread-4976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:10:19.659 [DEBUG] [Thread-4976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:10:19.659 [DEBUG] [Thread-4976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:10:19.700 [DEBUG] [Thread-4976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:10:19.700 [DEBUG] [Thread-4976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:10:19.703 [DEBUG] [Thread-4976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:10:19.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:10:19.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:10:19.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:10:19.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:10:19.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:10:19.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:10:19.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:10:19.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:10:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:10:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.756697 -999.00  +22.80   3.04     17   -3.10 1 1 1 1 1    12    0 24.68 -58.21 ----- 7.0 3.0 280.2 8.8 23.0 -26.9 23.0 -26.3 22.7 -25.2 22.9 -26.1
2025-11-25T20:10:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:10:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:10:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.756697
2025-11-25T20:10:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:10:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:10:19.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:10:19.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:10:19.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:10:19.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:10:06', tmtdew=30.72, humidity=12.08, cloud=0.0, wind=10.18, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:09:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:10:19.731 [DEBUG] [Thread-4976] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:10:19.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:10:19.826 [DEBUG] [Thread-4979] [transport.py] [_log()] starting thread (client mode): 0x70d56890
2025-11-25T20:10:19.826 [DEBUG] [Thread-4979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:10:19.842 [DEBUG] [Thread-4979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:10:19.842 [INFO] [Thread-4979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:10:19.850 [DEBUG] [Thread-4979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:10:19.851 [DEBUG] [Thread-4979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:10:19.851 [DEBUG] [Thread-4979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:10:19.851 [DEBUG] [Thread-4979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:10:19.851 [DEBUG] [Thread-4979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:10:19.851 [DEBUG] [Thread-4979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:10:19.851 [DEBUG] [Thread-4979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:10:19.851 [DEBUG] [Thread-4979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:10:19.851 [DEBUG] [Thread-4979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:10:19.852 [DEBUG] [Thread-4979] [transport.py] [_log()] client lang: <none>
2025-11-25T20:10:19.852 [DEBUG] [Thread-4979] [transport.py] [_log()] server lang: <none>
2025-11-25T20:10:19.852 [DEBUG] [Thread-4979] [transport.py] [_log()] kex follows: False
2025-11-25T20:10:19.852 [DEBUG] [Thread-4979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:10:19.852 [DEBUG] [Thread-4979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:10:19.852 [DEBUG] [Thread-4979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:10:19.852 [DEBUG] [Thread-4979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:10:19.852 [DEBUG] [Thread-4979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:10:19.853 [DEBUG] [Thread-4979] [transport.py] [_log()] Compression: none
2025-11-25T20:10:19.853 [DEBUG] [Thread-4979] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:10:19.910 [DEBUG] [Thread-4979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:10:19.911 [DEBUG] [Thread-4979] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:10:19.912 [DEBUG] [Thread-4979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:10:19.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:10:19.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:10:19.970 [DEBUG] [Thread-4979] [transport.py] [_log()] userauth is OK
2025-11-25T20:10:19.970 [DEBUG] [Thread-4979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:10:19.970 [DEBUG] [Thread-4979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:10:19.970 [DEBUG] [Thread-4979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:10:19.971 [DEBUG] [Thread-4979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:10:19.989 [INFO] [Thread-4979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:10:19.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:10:19.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:10:20.830 [DEBUG] [Thread-4979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:10:20.830 [DEBUG] [Thread-4979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:10:20.879 [DEBUG] [Thread-4979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:10:20.879 [DEBUG] [Thread-4979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:10:20.888 [DEBUG] [Thread-4979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:10:20.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:10:20.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:10:20.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:10:20.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:10:20.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:10:20.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:10:20.925 [DEBUG] [Thread-4979] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:10:26.136 [DEBUG] [Thread-4981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:10:41.189 [DEBUG] [Thread-4982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:10:50.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:10:50.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:10:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:10:51.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 10, 38), 30.7, 12.09, 0.0, 11.86, 22.68, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:10:51.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:10:38
2025-11-25T20:10:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:10:51.893 [DEBUG] [Thread-4983] [transport.py] [_log()] starting thread (client mode): 0x70d55db0
2025-11-25T20:10:51.893 [DEBUG] [Thread-4983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:10:51.912 [DEBUG] [Thread-4983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:10:51.912 [INFO] [Thread-4983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] client lang: <none>
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] server lang: <none>
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] kex follows: False
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] Compression: none
2025-11-25T20:10:51.914 [DEBUG] [Thread-4983] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:10:51.933 [DEBUG] [Thread-4983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:10:51.933 [DEBUG] [Thread-4983] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:10:51.934 [DEBUG] [Thread-4983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:10:51.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:10:51.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:10:51.936 [DEBUG] [Thread-4983] [transport.py] [_log()] userauth is OK
2025-11-25T20:10:51.936 [DEBUG] [Thread-4983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:10:51.936 [DEBUG] [Thread-4983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:10:51.936 [DEBUG] [Thread-4983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:10:51.936 [DEBUG] [Thread-4983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:10:51.961 [INFO] [Thread-4983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:10:51.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:10:52.750 [DEBUG] [Thread-4983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:10:52.750 [DEBUG] [Thread-4983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:10:52.751 [DEBUG] [Thread-4983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:10:52.792 [DEBUG] [Thread-4983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:10:52.792 [DEBUG] [Thread-4983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:10:52.795 [DEBUG] [Thread-4983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:10:52.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:10:52.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:10:52.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:10:52.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:10:52.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:10:52.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:10:52.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:10:52.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:10:52.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:10:52.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.757043 -999.00  +22.70   6.60     17   -3.20 1 1 1 1 1    11    0 24.82 -55.78 ----- 5.2 6.6 247.4 8.2 22.9 -26.8 22.9 -26.2 22.7 -25.1 22.9 -26.1
2025-11-25T20:10:52.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:10:52.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:10:52.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.757043
2025-11-25T20:10:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:10:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:10:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:10:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:10:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:10:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:10:38', tmtdew=30.7, humidity=12.09, cloud=0.0, wind=11.86, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T04:13:36', seeing=0.99, atlas_timestamp='2025-11-25T18:10:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:10:52.822 [DEBUG] [Thread-4983] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:10:52.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:10:52.917 [DEBUG] [Thread-4986] [transport.py] [_log()] starting thread (client mode): 0x70d55540
2025-11-25T20:10:52.917 [DEBUG] [Thread-4986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:10:52.932 [DEBUG] [Thread-4986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:10:52.932 [INFO] [Thread-4986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:10:52.939 [DEBUG] [Thread-4986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:10:52.939 [DEBUG] [Thread-4986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:10:52.939 [DEBUG] [Thread-4986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] client lang: <none>
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] server lang: <none>
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] kex follows: False
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:10:52.940 [DEBUG] [Thread-4986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:10:52.941 [DEBUG] [Thread-4986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:10:52.941 [DEBUG] [Thread-4986] [transport.py] [_log()] Compression: none
2025-11-25T20:10:52.941 [DEBUG] [Thread-4986] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:10:53.003 [DEBUG] [Thread-4986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:10:53.003 [DEBUG] [Thread-4986] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:10:53.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:10:53.004 [DEBUG] [Thread-4986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:10:53.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:10:53.062 [DEBUG] [Thread-4986] [transport.py] [_log()] userauth is OK
2025-11-25T20:10:53.062 [DEBUG] [Thread-4986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:10:53.062 [DEBUG] [Thread-4986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:10:53.063 [DEBUG] [Thread-4986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:10:53.063 [DEBUG] [Thread-4986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:10:53.082 [INFO] [Thread-4986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:10:53.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:10:53.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:10:53.930 [DEBUG] [Thread-4986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:10:53.931 [DEBUG] [Thread-4986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:10:53.979 [DEBUG] [Thread-4986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:10:53.980 [DEBUG] [Thread-4986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:10:53.989 [DEBUG] [Thread-4986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:10:53.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:10:53.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:10:54.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:10:54.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:10:54.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:10:54.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:10:54.026 [DEBUG] [Thread-4986] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:10:55.427 [DEBUG] [Thread-4988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:10:56.222 [DEBUG] [Thread-4989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:11:05.841 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:11:05.842 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:11:11.272 [DEBUG] [Thread-4990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:11:24.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:11:24.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:11:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:11:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 11, 10), 30.62, 12.17, 0.0, 10.87, 22.7, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:11:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:11:10
2025-11-25T20:11:24.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:11:25.027 [DEBUG] [Thread-4991] [transport.py] [_log()] starting thread (client mode): 0x7374d780
2025-11-25T20:11:25.027 [DEBUG] [Thread-4991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:11:25.047 [DEBUG] [Thread-4991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:11:25.048 [INFO] [Thread-4991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:11:25.049 [DEBUG] [Thread-4991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:11:25.049 [DEBUG] [Thread-4991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:11:25.049 [DEBUG] [Thread-4991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] client lang: <none>
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] server lang: <none>
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] kex follows: False
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] Compression: none
2025-11-25T20:11:25.050 [DEBUG] [Thread-4991] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:11:25.061 [DEBUG] [Thread-4991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:11:25.061 [DEBUG] [Thread-4991] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:11:25.061 [DEBUG] [Thread-4991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:11:25.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:11:25.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:11:25.062 [DEBUG] [Thread-4991] [transport.py] [_log()] userauth is OK
2025-11-25T20:11:25.062 [DEBUG] [Thread-4991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:11:25.062 [DEBUG] [Thread-4991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:11:25.062 [DEBUG] [Thread-4991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:11:25.062 [DEBUG] [Thread-4991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:11:25.075 [INFO] [Thread-4991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:11:25.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:11:25.699 [DEBUG] [Thread-4991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:11:25.700 [DEBUG] [Thread-4991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:11:25.700 [DEBUG] [Thread-4991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:11:25.740 [DEBUG] [Thread-4991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:11:25.740 [DEBUG] [Thread-4991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:11:25.742 [DEBUG] [Thread-4991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:11:25.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:11:25.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:11:25.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:11:25.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:11:25.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:11:25.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:11:25.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.757738 -999.00  +22.70   6.47     17   -3.30 1 1 1 1 1     9    0 25.00 -51.97 ----- 7.1 6.5 235.1 10.3 22.9 -26.6 22.9 -26.0 22.6 -24.9 22.8 -26.0
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.757738
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:11:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:11:10', tmtdew=30.62, humidity=12.17, cloud=0.0, wind=10.87, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:11:10', seeing=2.49, atlas_timestamp='2025-11-25T18:11:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:11:25.754 [DEBUG] [Thread-4991] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:11:25.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:11:25.841 [DEBUG] [Thread-4994] [transport.py] [_log()] starting thread (client mode): 0x70d41d80
2025-11-25T20:11:25.841 [DEBUG] [Thread-4994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:11:25.856 [DEBUG] [Thread-4994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:11:25.856 [INFO] [Thread-4994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] client lang: <none>
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] server lang: <none>
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] kex follows: False
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] Compression: none
2025-11-25T20:11:25.864 [DEBUG] [Thread-4994] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:11:25.924 [DEBUG] [Thread-4994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:11:25.924 [DEBUG] [Thread-4994] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:11:25.924 [DEBUG] [Thread-4994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:11:25.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:11:25.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:11:25.981 [DEBUG] [Thread-4994] [transport.py] [_log()] userauth is OK
2025-11-25T20:11:25.981 [DEBUG] [Thread-4994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:11:25.981 [DEBUG] [Thread-4994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:11:25.981 [DEBUG] [Thread-4994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:11:25.981 [DEBUG] [Thread-4994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:11:25.999 [INFO] [Thread-4994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:11:25.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:11:25.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:11:26.298 [DEBUG] [Thread-4996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:11:26.874 [DEBUG] [Thread-4994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:11:26.874 [DEBUG] [Thread-4994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:11:26.922 [DEBUG] [Thread-4994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:11:26.922 [DEBUG] [Thread-4994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:11:26.931 [DEBUG] [Thread-4994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:11:26.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:11:26.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:11:26.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:11:26.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:11:26.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:11:26.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:11:26.966 [DEBUG] [Thread-4994] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:11:41.343 [DEBUG] [Thread-4997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:11:55.479 [DEBUG] [Thread-4998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:11:56.369 [DEBUG] [Thread-4999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:11:56.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:11:56.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:11:56.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:11:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 11, 42), 30.69, 12.14, 0.0, 10.08, 22.65, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:11:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:11:42
2025-11-25T20:11:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:11:57.914 [DEBUG] [Thread-5000] [transport.py] [_log()] starting thread (client mode): 0x70d02410
2025-11-25T20:11:57.914 [DEBUG] [Thread-5000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:11:57.934 [DEBUG] [Thread-5000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:11:57.935 [INFO] [Thread-5000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] client lang: <none>
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] server lang: <none>
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] kex follows: False
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] Compression: none
2025-11-25T20:11:57.936 [DEBUG] [Thread-5000] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:11:57.954 [DEBUG] [Thread-5000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:11:57.954 [DEBUG] [Thread-5000] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:11:57.954 [DEBUG] [Thread-5000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:11:57.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:11:57.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:11:57.955 [DEBUG] [Thread-5000] [transport.py] [_log()] userauth is OK
2025-11-25T20:11:57.955 [DEBUG] [Thread-5000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:11:57.955 [DEBUG] [Thread-5000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:11:57.955 [DEBUG] [Thread-5000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:11:57.955 [DEBUG] [Thread-5000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:11:57.969 [INFO] [Thread-5000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:11:57.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:11:58.735 [DEBUG] [Thread-5000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:11:58.735 [DEBUG] [Thread-5000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:11:58.735 [DEBUG] [Thread-5000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:11:58.776 [DEBUG] [Thread-5000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:11:58.777 [DEBUG] [Thread-5000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:11:58.779 [DEBUG] [Thread-5000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:11:58.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:11:58.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:11:58.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:11:58.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:11:58.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:11:58.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:11:58.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.758085 -999.00  +22.70   7.58     17   -3.30 1 1 1 1 1     9    0 24.76 -49.19 ----- 9.4 7.6 249.8 10.7 22.9 -26.6 22.9 -26.0 22.6 -24.8 22.9 -26.0
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.758085
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:11:58.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:11:42', tmtdew=30.69, humidity=12.14, cloud=0.0, wind=10.08, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:11:42', seeing=1.52, atlas_timestamp='2025-11-25T18:11:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:11:58.799 [DEBUG] [Thread-5000] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:11:58.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:11:58.883 [DEBUG] [Thread-5003] [transport.py] [_log()] starting thread (client mode): 0x70d41870
2025-11-25T20:11:58.883 [DEBUG] [Thread-5003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:11:58.898 [DEBUG] [Thread-5003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:11:58.898 [INFO] [Thread-5003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:11:58.905 [DEBUG] [Thread-5003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:11:58.905 [DEBUG] [Thread-5003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:11:58.905 [DEBUG] [Thread-5003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] client lang: <none>
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] server lang: <none>
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] kex follows: False
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] Compression: none
2025-11-25T20:11:58.906 [DEBUG] [Thread-5003] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:11:58.964 [DEBUG] [Thread-5003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:11:58.964 [DEBUG] [Thread-5003] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:11:58.964 [DEBUG] [Thread-5003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:11:58.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:11:58.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:11:59.021 [DEBUG] [Thread-5003] [transport.py] [_log()] userauth is OK
2025-11-25T20:11:59.021 [DEBUG] [Thread-5003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:11:59.021 [DEBUG] [Thread-5003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:11:59.021 [DEBUG] [Thread-5003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:11:59.021 [DEBUG] [Thread-5003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:11:59.035 [INFO] [Thread-5003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:11:59.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:11:59.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:11:59.852 [DEBUG] [Thread-5003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:11:59.852 [DEBUG] [Thread-5003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:11:59.900 [DEBUG] [Thread-5003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:11:59.900 [DEBUG] [Thread-5003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:11:59.909 [DEBUG] [Thread-5003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:11:59.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:11:59.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:11:59.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:11:59.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:11:59.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:11:59.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:11:59.946 [DEBUG] [Thread-5003] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:12:09.764 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:12:09.765 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:12:11.393 [DEBUG] [Thread-5005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:12:26.427 [DEBUG] [Thread-5006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:12:29.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:12:29.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:12:29.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:12:30.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 12, 14), 30.68, 12.16, 0.0, 10.6, 22.67, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:12:30.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:12:14
2025-11-25T20:12:30.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:12:30.895 [DEBUG] [Thread-5007] [transport.py] [_log()] starting thread (client mode): 0x70d380a0
2025-11-25T20:12:30.895 [DEBUG] [Thread-5007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:12:30.914 [DEBUG] [Thread-5007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:12:30.914 [INFO] [Thread-5007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:12:30.917 [DEBUG] [Thread-5007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:12:30.917 [DEBUG] [Thread-5007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:12:30.917 [DEBUG] [Thread-5007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] client lang: <none>
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] server lang: <none>
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] kex follows: False
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] Compression: none
2025-11-25T20:12:30.918 [DEBUG] [Thread-5007] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:12:30.935 [DEBUG] [Thread-5007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:12:30.935 [DEBUG] [Thread-5007] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:12:30.935 [DEBUG] [Thread-5007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:12:30.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:12:30.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:12:30.936 [DEBUG] [Thread-5007] [transport.py] [_log()] userauth is OK
2025-11-25T20:12:30.936 [DEBUG] [Thread-5007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:12:30.936 [DEBUG] [Thread-5007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:12:30.936 [DEBUG] [Thread-5007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:12:30.936 [DEBUG] [Thread-5007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:12:30.951 [INFO] [Thread-5007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:12:30.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:12:31.542 [DEBUG] [Thread-5007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:12:31.542 [DEBUG] [Thread-5007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:12:31.543 [DEBUG] [Thread-5007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:12:31.583 [DEBUG] [Thread-5007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:12:31.583 [DEBUG] [Thread-5007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:12:31.586 [DEBUG] [Thread-5007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:12:31.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:12:31.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:12:31.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:12:31.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:12:31.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:12:31.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:12:31.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:12:31.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:12:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:12:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.758433 -999.00  +22.70   8.94     17   -3.30 1 1 1 1 1     8    0 24.96 -44.27 ----- 12.5 8.9 266.7 13.5 22.9 -26.4 22.9 -25.9 22.6 -24.8 22.8 -25.9
2025-11-25T20:12:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:12:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:12:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.758433
2025-11-25T20:12:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:12:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:12:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:12:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:12:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:12:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:12:14', tmtdew=30.68, humidity=12.16, cloud=0.0, wind=10.6, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:12:14', seeing=1.83, atlas_timestamp='2025-11-25T18:12:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:12:31.607 [DEBUG] [Thread-5007] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:12:31.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:12:31.689 [DEBUG] [Thread-5010] [transport.py] [_log()] starting thread (client mode): 0x7374eb90
2025-11-25T20:12:31.689 [DEBUG] [Thread-5010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:12:31.704 [DEBUG] [Thread-5010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:12:31.704 [INFO] [Thread-5010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:12:31.712 [DEBUG] [Thread-5010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:12:31.712 [DEBUG] [Thread-5010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:12:31.712 [DEBUG] [Thread-5010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] client lang: <none>
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] server lang: <none>
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] kex follows: False
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] Compression: none
2025-11-25T20:12:31.713 [DEBUG] [Thread-5010] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:12:31.768 [DEBUG] [Thread-5010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:12:31.768 [DEBUG] [Thread-5010] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:12:31.768 [DEBUG] [Thread-5010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:12:31.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:12:31.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:12:31.825 [DEBUG] [Thread-5010] [transport.py] [_log()] userauth is OK
2025-11-25T20:12:31.825 [DEBUG] [Thread-5010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:12:31.825 [DEBUG] [Thread-5010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:12:31.825 [DEBUG] [Thread-5010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:12:31.825 [DEBUG] [Thread-5010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:12:31.839 [INFO] [Thread-5010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:12:31.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:12:31.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:12:32.678 [DEBUG] [Thread-5010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:12:32.678 [DEBUG] [Thread-5010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:12:32.726 [DEBUG] [Thread-5010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:12:32.726 [DEBUG] [Thread-5010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:12:32.734 [DEBUG] [Thread-5010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:12:32.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:12:32.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:12:32.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:12:32.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:12:32.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:12:32.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:12:32.766 [DEBUG] [Thread-5010] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:12:41.452 [DEBUG] [Thread-5012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:12:55.530 [DEBUG] [Thread-5013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:12:56.492 [DEBUG] [Thread-5014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:13:02.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:13:02.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:13:02.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:13:03.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 12, 46), 30.73, 12.16, 0.0, 16.45, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:13:03.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:12:46
2025-11-25T20:13:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:13:03.725 [DEBUG] [Thread-5015] [transport.py] [_log()] starting thread (client mode): 0x7374e590
2025-11-25T20:13:03.725 [DEBUG] [Thread-5015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:13:03.746 [DEBUG] [Thread-5015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:13:03.746 [INFO] [Thread-5015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] client lang: <none>
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] server lang: <none>
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] kex follows: False
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] Compression: none
2025-11-25T20:13:03.749 [DEBUG] [Thread-5015] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:13:03.765 [DEBUG] [Thread-5015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:13:03.765 [DEBUG] [Thread-5015] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:13:03.765 [DEBUG] [Thread-5015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:13:03.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:13:03.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:13:03.766 [DEBUG] [Thread-5015] [transport.py] [_log()] userauth is OK
2025-11-25T20:13:03.766 [DEBUG] [Thread-5015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:13:03.766 [DEBUG] [Thread-5015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:13:03.766 [DEBUG] [Thread-5015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:13:03.766 [DEBUG] [Thread-5015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:13:03.775 [INFO] [Thread-5015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:13:03.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:13:04.556 [DEBUG] [Thread-5015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:13:04.556 [DEBUG] [Thread-5015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:13:04.556 [DEBUG] [Thread-5015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:13:04.596 [DEBUG] [Thread-5015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:13:04.596 [DEBUG] [Thread-5015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:13:04.599 [DEBUG] [Thread-5015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:13:04.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:13:04.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:13:04.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:13:04.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:13:04.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:13:04.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:13:04.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.758780 -999.00  +22.70  13.77     17   -3.00 1 1 1 1 1     7    0 24.89 -44.60 ----- 13.3 13.8 259.2 15.8 22.9 -26.4 22.9 -26.1 22.6 -24.7 22.8 -25.6
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.758780
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:13:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:12:46', tmtdew=30.73, humidity=12.16, cloud=0.0, wind=16.45, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:12:46', seeing=1.83, atlas_timestamp='2025-11-25T18:12:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:13:04.619 [DEBUG] [Thread-5015] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:13:04.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:13:04.702 [DEBUG] [Thread-5018] [transport.py] [_log()] starting thread (client mode): 0x70d6b280
2025-11-25T20:13:04.702 [DEBUG] [Thread-5018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:13:04.717 [DEBUG] [Thread-5018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:13:04.717 [INFO] [Thread-5018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] client lang: <none>
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] server lang: <none>
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] kex follows: False
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] Compression: none
2025-11-25T20:13:04.725 [DEBUG] [Thread-5018] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:13:04.783 [DEBUG] [Thread-5018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:13:04.783 [DEBUG] [Thread-5018] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:13:04.783 [DEBUG] [Thread-5018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:13:04.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:13:04.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:13:04.841 [DEBUG] [Thread-5018] [transport.py] [_log()] userauth is OK
2025-11-25T20:13:04.841 [DEBUG] [Thread-5018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:13:04.841 [DEBUG] [Thread-5018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:13:04.841 [DEBUG] [Thread-5018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:13:04.841 [DEBUG] [Thread-5018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:13:04.855 [INFO] [Thread-5018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:13:04.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:13:04.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:13:05.685 [DEBUG] [Thread-5018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:13:05.685 [DEBUG] [Thread-5018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:13:05.733 [DEBUG] [Thread-5018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:13:05.733 [DEBUG] [Thread-5018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:13:05.742 [DEBUG] [Thread-5018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:13:05.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:13:05.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:13:05.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:13:05.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:13:05.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:13:05.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:13:05.774 [DEBUG] [Thread-5018] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:13:11.517 [DEBUG] [Thread-5020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:13:16.953 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:13:16.954 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:13:26.548 [DEBUG] [Thread-5021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:13:35.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:13:35.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:13:35.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:13:36.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 13, 18), 30.67, 12.21, 0.0, 16.22, 22.7, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:13:36.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:13:18
2025-11-25T20:13:36.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:13:36.726 [DEBUG] [Thread-5022] [transport.py] [_log()] starting thread (client mode): 0x70d295d0
2025-11-25T20:13:36.726 [DEBUG] [Thread-5022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:13:36.745 [DEBUG] [Thread-5022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:13:36.745 [INFO] [Thread-5022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] client lang: <none>
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] server lang: <none>
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] kex follows: False
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:13:36.748 [DEBUG] [Thread-5022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:13:36.749 [DEBUG] [Thread-5022] [transport.py] [_log()] Compression: none
2025-11-25T20:13:36.749 [DEBUG] [Thread-5022] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:13:36.765 [DEBUG] [Thread-5022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:13:36.765 [DEBUG] [Thread-5022] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:13:36.765 [DEBUG] [Thread-5022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:13:36.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:13:36.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:13:36.766 [DEBUG] [Thread-5022] [transport.py] [_log()] userauth is OK
2025-11-25T20:13:36.766 [DEBUG] [Thread-5022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:13:36.766 [DEBUG] [Thread-5022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:13:36.766 [DEBUG] [Thread-5022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:13:36.766 [DEBUG] [Thread-5022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:13:36.781 [INFO] [Thread-5022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:13:36.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:13:37.405 [DEBUG] [Thread-5022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:13:37.405 [DEBUG] [Thread-5022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:13:37.405 [DEBUG] [Thread-5022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:13:37.445 [DEBUG] [Thread-5022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:13:37.445 [DEBUG] [Thread-5022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:13:37.448 [DEBUG] [Thread-5022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:13:37.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:13:37.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:13:37.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:13:37.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:13:37.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:13:37.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:13:37.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.759127 -999.00  +22.80   8.77     17   -3.20 1 1 1 1 1     6    0 24.90 -44.25 ----- 8.2 8.8 226.6 16.8 22.9 -26.6 22.8 -26.0 22.6 -24.9 22.8 -25.7
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.759127
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:13:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:13:18', tmtdew=30.67, humidity=12.21, cloud=0.0, wind=16.22, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:13:18', seeing=2.38, atlas_timestamp='2025-11-25T18:13:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:13:37.467 [DEBUG] [Thread-5022] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:13:37.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:13:37.550 [DEBUG] [Thread-5025] [transport.py] [_log()] starting thread (client mode): 0x70d2b670
2025-11-25T20:13:37.550 [DEBUG] [Thread-5025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:13:37.563 [DEBUG] [Thread-5025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:13:37.563 [INFO] [Thread-5025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] client lang: <none>
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] server lang: <none>
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] kex follows: False
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] Compression: none
2025-11-25T20:13:37.571 [DEBUG] [Thread-5025] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:13:37.632 [DEBUG] [Thread-5025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:13:37.632 [DEBUG] [Thread-5025] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:13:37.632 [DEBUG] [Thread-5025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:13:37.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:13:37.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:13:37.689 [DEBUG] [Thread-5025] [transport.py] [_log()] userauth is OK
2025-11-25T20:13:37.689 [DEBUG] [Thread-5025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:13:37.689 [DEBUG] [Thread-5025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:13:37.689 [DEBUG] [Thread-5025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:13:37.689 [DEBUG] [Thread-5025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:13:37.702 [INFO] [Thread-5025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:13:37.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:13:37.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:13:38.519 [DEBUG] [Thread-5025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:13:38.519 [DEBUG] [Thread-5025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:13:38.567 [DEBUG] [Thread-5025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:13:38.567 [DEBUG] [Thread-5025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:13:38.575 [DEBUG] [Thread-5025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:13:38.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:13:38.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:13:38.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:13:38.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:13:38.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:13:38.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:13:38.607 [DEBUG] [Thread-5025] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:13:41.574 [DEBUG] [Thread-5027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:13:55.582 [DEBUG] [Thread-5028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:13:56.629 [DEBUG] [Thread-5029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:14:08.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:14:08.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:14:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:14:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 13, 50), 29.91, 13.02, 0.0, 16.18, 22.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:14:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:13:50
2025-11-25T20:14:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:14:09.557 [DEBUG] [Thread-5030] [transport.py] [_log()] starting thread (client mode): 0x70d411b0
2025-11-25T20:14:09.557 [DEBUG] [Thread-5030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:14:09.578 [DEBUG] [Thread-5030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:14:09.578 [INFO] [Thread-5030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] client lang: <none>
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] server lang: <none>
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] kex follows: False
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:14:09.581 [DEBUG] [Thread-5030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:14:09.582 [DEBUG] [Thread-5030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:14:09.582 [DEBUG] [Thread-5030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:14:09.582 [DEBUG] [Thread-5030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:14:09.582 [DEBUG] [Thread-5030] [transport.py] [_log()] Compression: none
2025-11-25T20:14:09.582 [DEBUG] [Thread-5030] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:14:09.597 [DEBUG] [Thread-5030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:14:09.597 [DEBUG] [Thread-5030] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:14:09.597 [DEBUG] [Thread-5030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:14:09.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:14:09.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:14:09.598 [DEBUG] [Thread-5030] [transport.py] [_log()] userauth is OK
2025-11-25T20:14:09.598 [DEBUG] [Thread-5030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:14:09.598 [DEBUG] [Thread-5030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:14:09.598 [DEBUG] [Thread-5030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:14:09.598 [DEBUG] [Thread-5030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:14:09.626 [INFO] [Thread-5030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:14:09.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:14:10.489 [DEBUG] [Thread-5030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:14:10.489 [DEBUG] [Thread-5030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:14:10.489 [DEBUG] [Thread-5030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:14:10.530 [DEBUG] [Thread-5030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:14:10.530 [DEBUG] [Thread-5030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:14:10.532 [DEBUG] [Thread-5030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:14:10.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:14:10.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:14:10.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:14:10.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:14:10.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:14:10.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:14:10.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:14:10.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:14:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:14:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.759474 -999.00  +22.80   7.61     18   -2.70 1 1 1 1 1     6    0 25.24 -42.16 ----- 6.0 7.6 257.0 12.2 22.8 -26.5 22.8 -25.9 22.6 -24.8 22.8 -25.7
2025-11-25T20:14:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:14:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:14:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.759474
2025-11-25T20:14:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:14:10.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:14:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:14:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:14:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:14:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:13:50', tmtdew=29.91, humidity=13.02, cloud=0.0, wind=16.18, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:13:50', seeing=1.41, atlas_timestamp='2025-11-25T18:13:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:14:10.550 [DEBUG] [Thread-5030] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:14:10.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:14:10.633 [DEBUG] [Thread-5033] [transport.py] [_log()] starting thread (client mode): 0x70d421a0
2025-11-25T20:14:10.633 [DEBUG] [Thread-5033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:14:10.647 [DEBUG] [Thread-5033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:14:10.647 [INFO] [Thread-5033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] client lang: <none>
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] server lang: <none>
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] kex follows: False
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] Compression: none
2025-11-25T20:14:10.655 [DEBUG] [Thread-5033] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:14:10.712 [DEBUG] [Thread-5033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:14:10.712 [DEBUG] [Thread-5033] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:14:10.712 [DEBUG] [Thread-5033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:14:10.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:14:10.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:14:10.769 [DEBUG] [Thread-5033] [transport.py] [_log()] userauth is OK
2025-11-25T20:14:10.769 [DEBUG] [Thread-5033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:14:10.769 [DEBUG] [Thread-5033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:14:10.769 [DEBUG] [Thread-5033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:14:10.769 [DEBUG] [Thread-5033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:14:10.782 [INFO] [Thread-5033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:14:10.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:14:10.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:14:11.601 [DEBUG] [Thread-5033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:14:11.601 [DEBUG] [Thread-5033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:14:11.649 [DEBUG] [Thread-5033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:14:11.649 [DEBUG] [Thread-5033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:14:11.655 [DEBUG] [Thread-5035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:14:11.657 [DEBUG] [Thread-5033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:14:11.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:14:11.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:14:11.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:14:11.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:14:11.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:14:11.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:14:11.689 [DEBUG] [Thread-5033] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:14:22.199 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:14:22.200 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:14:26.688 [DEBUG] [Thread-5036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:14:41.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:14:41.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:14:41.712 [DEBUG] [Thread-5037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:14:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:14:42.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 14, 22), 30.17, 12.77, 0.0, 15.16, 22.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:14:42.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:14:22
2025-11-25T20:14:42.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:14:42.642 [DEBUG] [Thread-5038] [transport.py] [_log()] starting thread (client mode): 0x70d54340
2025-11-25T20:14:42.642 [DEBUG] [Thread-5038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:14:42.665 [DEBUG] [Thread-5038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:14:42.665 [INFO] [Thread-5038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] client lang: <none>
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] server lang: <none>
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] kex follows: False
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] Compression: none
2025-11-25T20:14:42.669 [DEBUG] [Thread-5038] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:14:42.683 [DEBUG] [Thread-5038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:14:42.684 [DEBUG] [Thread-5038] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:14:42.684 [DEBUG] [Thread-5038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:14:42.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:14:42.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:14:42.685 [DEBUG] [Thread-5038] [transport.py] [_log()] userauth is OK
2025-11-25T20:14:42.685 [DEBUG] [Thread-5038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:14:42.685 [DEBUG] [Thread-5038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:14:42.685 [DEBUG] [Thread-5038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:14:42.685 [DEBUG] [Thread-5038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:14:42.712 [INFO] [Thread-5038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:14:42.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:14:43.369 [DEBUG] [Thread-5038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:14:43.369 [DEBUG] [Thread-5038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:14:43.369 [DEBUG] [Thread-5038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:14:43.410 [DEBUG] [Thread-5038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:14:43.411 [DEBUG] [Thread-5038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:14:43.413 [DEBUG] [Thread-5038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:14:43.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:14:43.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:14:43.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:14:43.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:14:43.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:14:43.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:14:43.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:14:43.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:14:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:14:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.759821 -999.00  +22.80   7.12     18   -2.60 1 1 1 1 1     5    0 24.49 -47.69 ----- 8.0 7.1 237.6 12.0 22.8 -26.5 22.9 -26.0 22.6 -24.8 22.8 -25.8
2025-11-25T20:14:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:14:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:14:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.759821
2025-11-25T20:14:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:14:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:14:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:14:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:14:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:14:43.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:14:22', tmtdew=30.17, humidity=12.77, cloud=0.0, wind=15.16, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:14:22', seeing=1.83, atlas_timestamp='2025-11-25T18:14:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:14:43.431 [DEBUG] [Thread-5038] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:14:43.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:14:43.515 [DEBUG] [Thread-5041] [transport.py] [_log()] starting thread (client mode): 0x70d39cf0
2025-11-25T20:14:43.515 [DEBUG] [Thread-5041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:14:43.530 [DEBUG] [Thread-5041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:14:43.530 [INFO] [Thread-5041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] client lang: <none>
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] server lang: <none>
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] kex follows: False
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] Compression: none
2025-11-25T20:14:43.538 [DEBUG] [Thread-5041] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:14:43.596 [DEBUG] [Thread-5041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:14:43.596 [DEBUG] [Thread-5041] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:14:43.596 [DEBUG] [Thread-5041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:14:43.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:14:43.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:14:43.653 [DEBUG] [Thread-5041] [transport.py] [_log()] userauth is OK
2025-11-25T20:14:43.653 [DEBUG] [Thread-5041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:14:43.653 [DEBUG] [Thread-5041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:14:43.653 [DEBUG] [Thread-5041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:14:43.653 [DEBUG] [Thread-5041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:14:43.667 [INFO] [Thread-5041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:14:43.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:14:43.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:14:44.508 [DEBUG] [Thread-5041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:14:44.508 [DEBUG] [Thread-5041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:14:44.556 [DEBUG] [Thread-5041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:14:44.556 [DEBUG] [Thread-5041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:14:44.564 [DEBUG] [Thread-5041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:14:44.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:14:44.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:14:44.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:14:44.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:14:44.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:14:44.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:14:44.596 [DEBUG] [Thread-5041] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:14:55.643 [DEBUG] [Thread-5043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:14:56.738 [DEBUG] [Thread-5044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:15:11.770 [DEBUG] [Thread-5045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:15:14.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:15:14.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:15:14.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:15:15.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 14, 54), 29.98, 12.96, 0.0, 12.92, 22.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:15:15.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:14:54
2025-11-25T20:15:15.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:15:15.551 [DEBUG] [Thread-5046] [transport.py] [_log()] starting thread (client mode): 0x70d6b9a0
2025-11-25T20:15:15.552 [DEBUG] [Thread-5046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:15:15.573 [DEBUG] [Thread-5046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:15:15.573 [INFO] [Thread-5046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:15:15.576 [DEBUG] [Thread-5046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:15:15.576 [DEBUG] [Thread-5046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] client lang: <none>
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] server lang: <none>
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] kex follows: False
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] Compression: none
2025-11-25T20:15:15.577 [DEBUG] [Thread-5046] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:15:15.592 [DEBUG] [Thread-5046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:15:15.593 [DEBUG] [Thread-5046] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:15:15.593 [DEBUG] [Thread-5046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:15:15.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:15:15.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:15:15.594 [DEBUG] [Thread-5046] [transport.py] [_log()] userauth is OK
2025-11-25T20:15:15.594 [DEBUG] [Thread-5046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:15:15.594 [DEBUG] [Thread-5046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:15:15.594 [DEBUG] [Thread-5046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:15:15.594 [DEBUG] [Thread-5046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:15:15.608 [INFO] [Thread-5046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:15:15.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:15:16.586 [DEBUG] [Thread-5046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:15:16.586 [DEBUG] [Thread-5046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:15:16.586 [DEBUG] [Thread-5046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:15:16.627 [DEBUG] [Thread-5046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:15:16.627 [DEBUG] [Thread-5046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:15:16.629 [DEBUG] [Thread-5046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:15:16.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:15:16.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:15:16.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:15:16.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:15:16.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:15:16.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:15:16.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.760169 -999.00  +22.90   6.65     18   -2.60 1 1 1 1 1     5    0 25.00 -50.81 ----- 8.0 6.7 241.2 11.7 22.9 -26.4 22.9 -25.8 22.6 -24.7 22.8 -25.5
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.760169
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:15:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:14:54', tmtdew=29.98, humidity=12.96, cloud=0.0, wind=12.92, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:14:54', seeing=1.83, atlas_timestamp='2025-11-25T18:14:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:15:16.650 [DEBUG] [Thread-5046] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:15:16.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:15:16.734 [DEBUG] [Thread-5049] [transport.py] [_log()] starting thread (client mode): 0x7376f370
2025-11-25T20:15:16.734 [DEBUG] [Thread-5049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:15:16.749 [DEBUG] [Thread-5049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:15:16.749 [INFO] [Thread-5049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:15:16.756 [DEBUG] [Thread-5049] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] client lang: <none>
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] server lang: <none>
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] kex follows: False
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] Compression: none
2025-11-25T20:15:16.757 [DEBUG] [Thread-5049] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:15:16.812 [DEBUG] [Thread-5049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:15:16.812 [DEBUG] [Thread-5049] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:15:16.812 [DEBUG] [Thread-5049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:15:16.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:15:16.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:15:16.869 [DEBUG] [Thread-5049] [transport.py] [_log()] userauth is OK
2025-11-25T20:15:16.869 [DEBUG] [Thread-5049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:15:16.869 [DEBUG] [Thread-5049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:15:16.869 [DEBUG] [Thread-5049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:15:16.869 [DEBUG] [Thread-5049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:15:16.883 [INFO] [Thread-5049] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:15:16.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:15:16.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:15:17.710 [DEBUG] [Thread-5049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:15:17.710 [DEBUG] [Thread-5049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:15:17.758 [DEBUG] [Thread-5049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:15:17.758 [DEBUG] [Thread-5049] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:15:17.766 [DEBUG] [Thread-5049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:15:17.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:15:17.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:15:17.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:15:17.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:15:17.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:15:17.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:15:17.799 [DEBUG] [Thread-5049] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:15:26.794 [DEBUG] [Thread-5051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:15:27.160 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:15:27.161 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:15:41.826 [DEBUG] [Thread-5052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:15:47.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:15:47.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:15:47.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:15:48.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 15, 26), 29.92, 13.02, 0.0, 12.83, 22.92, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:15:48.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:15:26
2025-11-25T20:15:48.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:15:48.746 [DEBUG] [Thread-5053] [transport.py] [_log()] starting thread (client mode): 0x737c5a80
2025-11-25T20:15:48.746 [DEBUG] [Thread-5053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:15:48.766 [DEBUG] [Thread-5053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:15:48.767 [INFO] [Thread-5053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] client lang: <none>
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] server lang: <none>
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] kex follows: False
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] Compression: none
2025-11-25T20:15:48.770 [DEBUG] [Thread-5053] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:15:48.785 [DEBUG] [Thread-5053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:15:48.785 [DEBUG] [Thread-5053] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:15:48.785 [DEBUG] [Thread-5053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:15:48.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:15:48.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:15:48.786 [DEBUG] [Thread-5053] [transport.py] [_log()] userauth is OK
2025-11-25T20:15:48.786 [DEBUG] [Thread-5053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:15:48.786 [DEBUG] [Thread-5053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:15:48.786 [DEBUG] [Thread-5053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:15:48.786 [DEBUG] [Thread-5053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:15:48.801 [INFO] [Thread-5053] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:15:48.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:15:49.430 [DEBUG] [Thread-5053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:15:49.430 [DEBUG] [Thread-5053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:15:49.430 [DEBUG] [Thread-5053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:15:49.471 [DEBUG] [Thread-5053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:15:49.471 [DEBUG] [Thread-5053] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:15:49.473 [DEBUG] [Thread-5053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:15:49.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:15:49.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:15:49.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:15:49.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:15:49.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:15:49.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:15:49.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.760516 -999.00  +22.90   6.70     18   -2.20 1 1 1 1 1     4    0 23.92 -51.68 ----- 6.6 6.7 233.5 9.7 22.9 -26.4 22.8 -25.9 22.6 -24.8 22.8 -25.8
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.760516
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:15:49.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:15:26', tmtdew=29.92, humidity=13.02, cloud=0.0, wind=12.83, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:15:26', seeing=1.62, atlas_timestamp='2025-11-25T18:15:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:15:49.495 [DEBUG] [Thread-5053] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:15:49.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:15:49.578 [DEBUG] [Thread-5056] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-25T20:15:49.578 [DEBUG] [Thread-5056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:15:49.597 [DEBUG] [Thread-5056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:15:49.598 [INFO] [Thread-5056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] client lang: <none>
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] server lang: <none>
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] kex follows: False
2025-11-25T20:15:49.605 [DEBUG] [Thread-5056] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:15:49.606 [DEBUG] [Thread-5056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:15:49.606 [DEBUG] [Thread-5056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:15:49.606 [DEBUG] [Thread-5056] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:15:49.606 [DEBUG] [Thread-5056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:15:49.606 [DEBUG] [Thread-5056] [transport.py] [_log()] Compression: none
2025-11-25T20:15:49.606 [DEBUG] [Thread-5056] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:15:49.659 [DEBUG] [Thread-5056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:15:49.659 [DEBUG] [Thread-5056] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:15:49.660 [DEBUG] [Thread-5056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:15:49.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:15:49.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:15:49.717 [DEBUG] [Thread-5056] [transport.py] [_log()] userauth is OK
2025-11-25T20:15:49.717 [DEBUG] [Thread-5056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:15:49.717 [DEBUG] [Thread-5056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:15:49.717 [DEBUG] [Thread-5056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:15:49.717 [DEBUG] [Thread-5056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:15:49.731 [INFO] [Thread-5056] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:15:49.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:15:49.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:15:50.586 [DEBUG] [Thread-5056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:15:50.586 [DEBUG] [Thread-5056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:15:50.634 [DEBUG] [Thread-5056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:15:50.634 [DEBUG] [Thread-5056] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:15:50.642 [DEBUG] [Thread-5056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:15:50.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:15: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')
2025-11-25T20:15:50.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:15:50.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:15:50.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:15:50.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:15:50.675 [DEBUG] [Thread-5056] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:15:55.695 [DEBUG] [Thread-5058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:15:56.852 [DEBUG] [Thread-5059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:16:11.886 [DEBUG] [Thread-5060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:16:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:16:20.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:16:20.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:16:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 15, 58), 29.68, 13.12, 0.0, 12.58, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:16:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:15:58
2025-11-25T20:16:21.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:16:21.615 [DEBUG] [Thread-5061] [transport.py] [_log()] starting thread (client mode): 0x737c7af0
2025-11-25T20:16:21.615 [DEBUG] [Thread-5061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:16:21.634 [DEBUG] [Thread-5061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:16:21.634 [INFO] [Thread-5061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] client lang: <none>
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] server lang: <none>
2025-11-25T20:16:21.637 [DEBUG] [Thread-5061] [transport.py] [_log()] kex follows: False
2025-11-25T20:16:21.638 [DEBUG] [Thread-5061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:16:21.638 [DEBUG] [Thread-5061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:16:21.638 [DEBUG] [Thread-5061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:16:21.638 [DEBUG] [Thread-5061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:16:21.638 [DEBUG] [Thread-5061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:16:21.638 [DEBUG] [Thread-5061] [transport.py] [_log()] Compression: none
2025-11-25T20:16:21.638 [DEBUG] [Thread-5061] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:16:21.658 [DEBUG] [Thread-5061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:16:21.658 [DEBUG] [Thread-5061] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:16:21.658 [DEBUG] [Thread-5061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:16:21.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:16:21.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:16:21.659 [DEBUG] [Thread-5061] [transport.py] [_log()] userauth is OK
2025-11-25T20:16:21.659 [DEBUG] [Thread-5061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:16:21.659 [DEBUG] [Thread-5061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:16:21.659 [DEBUG] [Thread-5061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:16:21.659 [DEBUG] [Thread-5061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:16:21.675 [INFO] [Thread-5061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:16:21.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:16:22.281 [DEBUG] [Thread-5061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:16:22.281 [DEBUG] [Thread-5061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:16:22.281 [DEBUG] [Thread-5061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:16:22.321 [DEBUG] [Thread-5061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:16:22.321 [DEBUG] [Thread-5061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:16:22.323 [DEBUG] [Thread-5061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:16:22.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:16:22.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:16:22.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:16:22.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:16:22.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:16:22.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:16:22.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:16:22.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:16:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:16:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.760863 -999.00  +22.90   8.88     18   -2.00 1 1 1 1 1     4    0 24.48 -56.51 ----- 6.9 8.9 206.8 11.1 22.8 -26.5 22.8 -26.0 22.6 -24.9 22.8 -25.9
2025-11-25T20:16:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:16:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:16:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.760863
2025-11-25T20:16:22.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:16:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:16:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:16:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:16:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:16:22.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:15:58', tmtdew=29.68, humidity=13.12, cloud=0.0, wind=12.58, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:15:58', seeing=1.34, atlas_timestamp='2025-11-25T18:15:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:16:22.343 [DEBUG] [Thread-5061] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:16:22.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:16:22.426 [DEBUG] [Thread-5064] [transport.py] [_log()] starting thread (client mode): 0x7374fa60
2025-11-25T20:16:22.426 [DEBUG] [Thread-5064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:16:22.441 [DEBUG] [Thread-5064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:16:22.441 [INFO] [Thread-5064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] client lang: <none>
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] server lang: <none>
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] kex follows: False
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] Compression: none
2025-11-25T20:16:22.449 [DEBUG] [Thread-5064] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:16:22.504 [DEBUG] [Thread-5064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:16:22.504 [DEBUG] [Thread-5064] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:16:22.504 [DEBUG] [Thread-5064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:16:22.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:16:22.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:16:22.561 [DEBUG] [Thread-5064] [transport.py] [_log()] userauth is OK
2025-11-25T20:16:22.561 [DEBUG] [Thread-5064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:16:22.561 [DEBUG] [Thread-5064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:16:22.561 [DEBUG] [Thread-5064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:16:22.561 [DEBUG] [Thread-5064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:16:22.575 [INFO] [Thread-5064] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:16:22.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:16:22.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:16:23.419 [DEBUG] [Thread-5064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:16:23.419 [DEBUG] [Thread-5064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:16:23.466 [DEBUG] [Thread-5064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:16:23.466 [DEBUG] [Thread-5064] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:16:23.474 [DEBUG] [Thread-5064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:16:23.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:16:23.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:16: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
2025-11-25T20:16:23.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:16:23.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:16:23.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:16:23.511 [DEBUG] [Thread-5064] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:16:26.910 [DEBUG] [Thread-5066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:16:32.002 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:16:32.003 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:16:41.954 [DEBUG] [Thread-5067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:16:53.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:16:53.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:16: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
2025-11-25T20:16:54.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 16, 30), 29.72, 13.07, 0.0, 11.66, 22.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:16:54.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:16:30
2025-11-25T20:16:54.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:16:54.455 [DEBUG] [Thread-5068] [transport.py] [_log()] starting thread (client mode): 0x70d0e560
2025-11-25T20:16:54.455 [DEBUG] [Thread-5068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:16:54.474 [DEBUG] [Thread-5068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:16:54.475 [INFO] [Thread-5068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] client lang: <none>
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] server lang: <none>
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] kex follows: False
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] Compression: none
2025-11-25T20:16:54.478 [DEBUG] [Thread-5068] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:16:54.493 [DEBUG] [Thread-5068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:16:54.493 [DEBUG] [Thread-5068] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:16:54.493 [DEBUG] [Thread-5068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:16:54.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:16:54.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:16:54.495 [DEBUG] [Thread-5068] [transport.py] [_log()] userauth is OK
2025-11-25T20:16:54.495 [DEBUG] [Thread-5068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:16:54.495 [DEBUG] [Thread-5068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:16:54.495 [DEBUG] [Thread-5068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:16:54.495 [DEBUG] [Thread-5068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:16:54.510 [INFO] [Thread-5068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:16:54.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:16:55.153 [DEBUG] [Thread-5068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:16:55.153 [DEBUG] [Thread-5068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:16:55.153 [DEBUG] [Thread-5068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:16:55.194 [DEBUG] [Thread-5068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:16:55.195 [DEBUG] [Thread-5068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:16:55.197 [DEBUG] [Thread-5068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:16:55.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:16:55.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:16:55.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:16:55.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:16:55.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:16:55.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:16:55.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:16:55.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:16:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:16:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.761558 -999.00  +22.90   3.88     18   -2.30 1 1 1 1 1     3    0 24.51 -64.96 ZNES. 4.2 3.9 235.8 10.1 22.8 -26.6 22.8 -26.1 22.5 -24.8 22.7 -25.8
2025-11-25T20:16:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:16:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:16:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.761558
2025-11-25T20:16:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:16:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:16:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:16:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:16:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:16:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:16:30', tmtdew=29.72, humidity=13.07, cloud=0.0, wind=11.66, temperature=22.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:16:30', seeing=1.36, atlas_timestamp='2025-11-25T18:16:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:16:55.218 [DEBUG] [Thread-5068] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:16:55.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:16:55.301 [DEBUG] [Thread-5071] [transport.py] [_log()] starting thread (client mode): 0x70d1c940
2025-11-25T20:16:55.301 [DEBUG] [Thread-5071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:16:55.316 [DEBUG] [Thread-5071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:16:55.317 [INFO] [Thread-5071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] client lang: <none>
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] server lang: <none>
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] kex follows: False
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] Compression: none
2025-11-25T20:16:55.324 [DEBUG] [Thread-5071] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:16:55.385 [DEBUG] [Thread-5071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:16:55.385 [DEBUG] [Thread-5071] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:16:55.385 [DEBUG] [Thread-5071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:16:55.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:16:55.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:16:55.441 [DEBUG] [Thread-5071] [transport.py] [_log()] userauth is OK
2025-11-25T20:16:55.441 [DEBUG] [Thread-5071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:16:55.441 [DEBUG] [Thread-5071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:16:55.441 [DEBUG] [Thread-5071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:16:55.441 [DEBUG] [Thread-5071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:16:55.455 [INFO] [Thread-5071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:16:55.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:16:55.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:16:55.746 [DEBUG] [Thread-5073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:16:56.291 [DEBUG] [Thread-5071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:16:56.291 [DEBUG] [Thread-5071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:16:56.339 [DEBUG] [Thread-5071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:16:56.339 [DEBUG] [Thread-5071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:16:56.347 [DEBUG] [Thread-5071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:16:56.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:16:56.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:16:56.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:16:56.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:16:56.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:16:56.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:16:56.379 [DEBUG] [Thread-5071] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:16:56.980 [DEBUG] [Thread-5074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:17:12.016 [DEBUG] [Thread-5075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:17:26.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:17:26.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:17:26.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:17:27.040 [DEBUG] [Thread-5076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:17:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 17, 2), 29.43, 13.39, 0.0, 11.13, 23.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:17:27.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:17:02
2025-11-25T20:17:27.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:17:27.330 [DEBUG] [Thread-5077] [transport.py] [_log()] starting thread (client mode): 0x737c5420
2025-11-25T20:17:27.330 [DEBUG] [Thread-5077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:17:27.350 [DEBUG] [Thread-5077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:17:27.350 [INFO] [Thread-5077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:17:27.353 [DEBUG] [Thread-5077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:17:27.353 [DEBUG] [Thread-5077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] client lang: <none>
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] server lang: <none>
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] kex follows: False
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] Compression: none
2025-11-25T20:17:27.354 [DEBUG] [Thread-5077] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:17:27.368 [DEBUG] [Thread-5077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:17:27.368 [DEBUG] [Thread-5077] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:17:27.368 [DEBUG] [Thread-5077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:17:27.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:17:27.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:17:27.369 [DEBUG] [Thread-5077] [transport.py] [_log()] userauth is OK
2025-11-25T20:17:27.369 [DEBUG] [Thread-5077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:17:27.369 [DEBUG] [Thread-5077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:17:27.369 [DEBUG] [Thread-5077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:17:27.369 [DEBUG] [Thread-5077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:17:27.384 [INFO] [Thread-5077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:17:27.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:17:28.005 [DEBUG] [Thread-5077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:17:28.005 [DEBUG] [Thread-5077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:17:28.005 [DEBUG] [Thread-5077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:17:28.046 [DEBUG] [Thread-5077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:17:28.046 [DEBUG] [Thread-5077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:17:28.048 [DEBUG] [Thread-5077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:17:28.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:17:28.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:17:28.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:17:28.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:17:28.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:17:28.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:17:28.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:17:28.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:17:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:17:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.761905 -999.00  +22.90   4.40     17   -2.70 1 1 1 1 1     3    0 23.99 -60.02 ZNES. 7.2 4.4 215.1 6.5 22.8 -26.6 22.8 -26.0 22.5 -24.9 22.8 -26.0
2025-11-25T20:17:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:17:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:17:28.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.761905
2025-11-25T20:17:28.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:17:28.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:17:28.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:17:28.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:17:28.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:17:28.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:17:02', tmtdew=29.43, humidity=13.39, cloud=0.0, wind=11.13, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:17:02', seeing=1.09, atlas_timestamp='2025-11-25T18:17:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:17:28.068 [DEBUG] [Thread-5077] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:17:28.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:17:28.152 [DEBUG] [Thread-5080] [transport.py] [_log()] starting thread (client mode): 0x70d0e560
2025-11-25T20:17:28.152 [DEBUG] [Thread-5080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:17:28.167 [DEBUG] [Thread-5080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:17:28.167 [INFO] [Thread-5080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:17:28.174 [DEBUG] [Thread-5080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:17:28.174 [DEBUG] [Thread-5080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:17:28.174 [DEBUG] [Thread-5080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:17:28.174 [DEBUG] [Thread-5080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:17:28.174 [DEBUG] [Thread-5080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:17:28.174 [DEBUG] [Thread-5080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:17:28.174 [DEBUG] [Thread-5080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:17:28.174 [DEBUG] [Thread-5080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:17:28.174 [DEBUG] [Thread-5080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] client lang: <none>
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] server lang: <none>
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] kex follows: False
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] Compression: none
2025-11-25T20:17:28.175 [DEBUG] [Thread-5080] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:17:28.232 [DEBUG] [Thread-5080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:17:28.232 [DEBUG] [Thread-5080] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:17:28.232 [DEBUG] [Thread-5080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:17:28.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:17:28.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:17:28.289 [DEBUG] [Thread-5080] [transport.py] [_log()] userauth is OK
2025-11-25T20:17:28.289 [DEBUG] [Thread-5080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:17:28.289 [DEBUG] [Thread-5080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:17:28.289 [DEBUG] [Thread-5080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:17:28.289 [DEBUG] [Thread-5080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:17:28.303 [INFO] [Thread-5080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:17:28.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:17:28.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:17:29.137 [DEBUG] [Thread-5080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:17:29.137 [DEBUG] [Thread-5080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:17:29.186 [DEBUG] [Thread-5080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:17:29.186 [DEBUG] [Thread-5080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:17:29.194 [DEBUG] [Thread-5080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:17:29.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:17:29.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:17:29.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:17:29.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:17:29.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:17:29.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:17:29.227 [DEBUG] [Thread-5080] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:17:40.339 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:17:40.340 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:17:42.066 [DEBUG] [Thread-5082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:17:55.813 [DEBUG] [Thread-5083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:17:57.104 [DEBUG] [Thread-5084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:17:59.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:17:59.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:17: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
2025-11-25T20:17:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 17, 34), 29.85, 12.92, 0.0, 12.21, 22.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:17:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:17:34
2025-11-25T20:18:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:18:00.178 [DEBUG] [Thread-5085] [transport.py] [_log()] starting thread (client mode): 0x7374cd30
2025-11-25T20:18:00.178 [DEBUG] [Thread-5085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:18:00.199 [DEBUG] [Thread-5085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:18:00.199 [INFO] [Thread-5085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] client lang: <none>
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] server lang: <none>
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] kex follows: False
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] Compression: none
2025-11-25T20:18:00.202 [DEBUG] [Thread-5085] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:18:00.221 [DEBUG] [Thread-5085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:18:00.221 [DEBUG] [Thread-5085] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:18:00.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:18:00.221 [DEBUG] [Thread-5085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:18:00.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:18:00.222 [DEBUG] [Thread-5085] [transport.py] [_log()] userauth is OK
2025-11-25T20:18:00.222 [DEBUG] [Thread-5085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:18:00.222 [DEBUG] [Thread-5085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:18:00.222 [DEBUG] [Thread-5085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:18:00.222 [DEBUG] [Thread-5085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:18:00.237 [INFO] [Thread-5085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:18:00.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:18:00.864 [DEBUG] [Thread-5085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:18:00.864 [DEBUG] [Thread-5085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:18:00.865 [DEBUG] [Thread-5085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:18:00.905 [DEBUG] [Thread-5085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:18:00.905 [DEBUG] [Thread-5085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:18:00.908 [DEBUG] [Thread-5085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:18:00.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:18:00.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:18:00.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:18:00.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:18:00.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:18:00.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:18:00.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:18:00.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:18:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:18:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.762252 -999.00  +22.90   6.00     17   -2.80 1 1 1 1 1     3    0 23.82 -60.76 ZNES. 5.8 6.0 207.5 12.1 22.8 -26.7 22.8 -26.1 22.5 -24.8 22.8 -25.8
2025-11-25T20:18:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:18:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:18:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.762252
2025-11-25T20:18:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:18:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:18:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:18:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:18:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:18:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:17:34', tmtdew=29.85, humidity=12.92, cloud=0.0, wind=12.21, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:17:34', seeing=1.25, atlas_timestamp='2025-11-25T18:17:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:18:00.924 [DEBUG] [Thread-5085] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:18:00.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:18:01.007 [DEBUG] [Thread-5088] [transport.py] [_log()] starting thread (client mode): 0x70d1ed70
2025-11-25T20:18:01.007 [DEBUG] [Thread-5088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:18:01.021 [DEBUG] [Thread-5088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:18:01.021 [INFO] [Thread-5088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] client lang: <none>
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] server lang: <none>
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] kex follows: False
2025-11-25T20:18:01.031 [DEBUG] [Thread-5088] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:18:01.032 [DEBUG] [Thread-5088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:18:01.032 [DEBUG] [Thread-5088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:18:01.032 [DEBUG] [Thread-5088] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:18:01.032 [DEBUG] [Thread-5088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:18:01.032 [DEBUG] [Thread-5088] [transport.py] [_log()] Compression: none
2025-11-25T20:18:01.032 [DEBUG] [Thread-5088] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:18:01.087 [DEBUG] [Thread-5088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:18:01.088 [DEBUG] [Thread-5088] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:18:01.088 [DEBUG] [Thread-5088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:18:01.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:18:01.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:18:01.145 [DEBUG] [Thread-5088] [transport.py] [_log()] userauth is OK
2025-11-25T20:18:01.145 [DEBUG] [Thread-5088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:18:01.145 [DEBUG] [Thread-5088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:18:01.145 [DEBUG] [Thread-5088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:18:01.145 [DEBUG] [Thread-5088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:18:01.158 [INFO] [Thread-5088] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:18:01.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:18:01.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:18:01.991 [DEBUG] [Thread-5088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:18:01.991 [DEBUG] [Thread-5088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:18:02.039 [DEBUG] [Thread-5088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:18:02.039 [DEBUG] [Thread-5088] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:18:02.047 [DEBUG] [Thread-5088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:18:02.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:18:02.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:18:02.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:18:02.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:18:02.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:18:02.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:18:02.079 [DEBUG] [Thread-5088] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:18:12.131 [DEBUG] [Thread-5090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:18:27.166 [DEBUG] [Thread-5091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:18:32.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:18:32.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:18:32.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:18:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 18, 6), 29.98, 12.79, 0.0, 11.81, 22.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:18:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:18:06
2025-11-25T20:18:32.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:18:33.031 [DEBUG] [Thread-5092] [transport.py] [_log()] starting thread (client mode): 0x70d6aaa0
2025-11-25T20:18:33.031 [DEBUG] [Thread-5092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:18:33.052 [DEBUG] [Thread-5092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:18:33.052 [INFO] [Thread-5092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:18:33.055 [DEBUG] [Thread-5092] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] client lang: <none>
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] server lang: <none>
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] kex follows: False
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] Compression: none
2025-11-25T20:18:33.056 [DEBUG] [Thread-5092] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:18:33.065 [DEBUG] [Thread-5092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:18:33.066 [DEBUG] [Thread-5092] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:18:33.066 [DEBUG] [Thread-5092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:18:33.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:18:33.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:18:33.068 [DEBUG] [Thread-5092] [transport.py] [_log()] userauth is OK
2025-11-25T20:18:33.069 [DEBUG] [Thread-5092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:18:33.069 [DEBUG] [Thread-5092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:18:33.069 [DEBUG] [Thread-5092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:18:33.069 [DEBUG] [Thread-5092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:18:33.087 [INFO] [Thread-5092] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:18:33.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:18:33.693 [DEBUG] [Thread-5092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:18:33.693 [DEBUG] [Thread-5092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:18:33.693 [DEBUG] [Thread-5092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:18:33.734 [DEBUG] [Thread-5092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:18:33.734 [DEBUG] [Thread-5092] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:18:33.737 [DEBUG] [Thread-5092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:18:33.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:18:33.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:18:33.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:18:33.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:18:33.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:18:33.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:18:33.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:18:33.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:18:33.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:18:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.762599 -999.00  +22.80   6.72     17   -2.90 1 1 1 1 1     2    0 24.42 -56.08 ZNES. 3.4 6.7 210.4 10.0 22.8 -26.6 22.8 -26.0 22.5 -24.9 22.7 -25.8
2025-11-25T20:18:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:18:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:18:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.762599
2025-11-25T20:18:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:18:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:18:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:18:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:18:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:18:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:18:06', tmtdew=29.98, humidity=12.79, cloud=0.0, wind=11.81, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:18:06', seeing=1.25, atlas_timestamp='2025-11-25T18:18:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:18:33.764 [DEBUG] [Thread-5092] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:18:33.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:18:33.857 [DEBUG] [Thread-5095] [transport.py] [_log()] starting thread (client mode): 0x70d2a500
2025-11-25T20:18:33.857 [DEBUG] [Thread-5095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:18:33.872 [DEBUG] [Thread-5095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:18:33.872 [INFO] [Thread-5095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] client lang: <none>
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] server lang: <none>
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] kex follows: False
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:18:33.880 [DEBUG] [Thread-5095] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:18:33.881 [DEBUG] [Thread-5095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:18:33.881 [DEBUG] [Thread-5095] [transport.py] [_log()] Compression: none
2025-11-25T20:18:33.881 [DEBUG] [Thread-5095] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:18:33.938 [DEBUG] [Thread-5095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:18:33.938 [DEBUG] [Thread-5095] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:18:33.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:18:33.940 [DEBUG] [Thread-5095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:18:33.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:18:33.994 [DEBUG] [Thread-5095] [transport.py] [_log()] userauth is OK
2025-11-25T20:18:33.994 [DEBUG] [Thread-5095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:18:33.994 [DEBUG] [Thread-5095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:18:33.994 [DEBUG] [Thread-5095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:18:33.994 [DEBUG] [Thread-5095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:18:34.013 [INFO] [Thread-5095] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:18:34.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:18:34.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:18:34.840 [DEBUG] [Thread-5095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:18:34.840 [DEBUG] [Thread-5095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:18:34.888 [DEBUG] [Thread-5095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:18:34.888 [DEBUG] [Thread-5095] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:18:34.897 [DEBUG] [Thread-5095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:18:34.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:18:34.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:18:34.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:18:34.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:18:34.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:18:34.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:18:34.934 [DEBUG] [Thread-5095] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:18:42.198 [DEBUG] [Thread-5097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:18:48.957 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:18:48.958 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:18:55.870 [DEBUG] [Thread-5098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:18:57.256 [DEBUG] [Thread-5099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:19:04.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:19:04.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:19:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:19:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 18, 38), 29.94, 12.67, 0.0, 11.81, 22.92, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:19:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:18:38
2025-11-25T20:19:05.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:19:05.906 [DEBUG] [Thread-5100] [transport.py] [_log()] starting thread (client mode): 0x70d68d90
2025-11-25T20:19:05.906 [DEBUG] [Thread-5100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:19:05.925 [DEBUG] [Thread-5100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:19:05.925 [INFO] [Thread-5100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] client lang: <none>
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] server lang: <none>
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] kex follows: False
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] Compression: none
2025-11-25T20:19:05.929 [DEBUG] [Thread-5100] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:19:05.937 [DEBUG] [Thread-5100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:19:05.937 [DEBUG] [Thread-5100] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:19:05.937 [DEBUG] [Thread-5100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:19:05.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:19:05.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:19:05.938 [DEBUG] [Thread-5100] [transport.py] [_log()] userauth is OK
2025-11-25T20:19:05.939 [DEBUG] [Thread-5100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:19:05.939 [DEBUG] [Thread-5100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:19:05.939 [DEBUG] [Thread-5100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:19:05.939 [DEBUG] [Thread-5100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:19:05.950 [INFO] [Thread-5100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:19:05.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:19:06.600 [DEBUG] [Thread-5100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:19:06.600 [DEBUG] [Thread-5100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:19:06.600 [DEBUG] [Thread-5100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:19:06.641 [DEBUG] [Thread-5100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:19:06.641 [DEBUG] [Thread-5100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:19:06.644 [DEBUG] [Thread-5100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:19:06.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:19:06.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:19:06.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:19:06.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:19:06.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:19:06.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:19:06.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.762946 -999.00  +22.80   1.58     17   -2.90 1 1 1 1 1     2    0 24.14 -58.59 ZNES. 6.5 1.6 161.4 8.6 22.8 -26.7 22.8 -26.1 22.5 -24.9 22.7 -25.8
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.762946
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:19:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:18:38', tmtdew=29.94, humidity=12.67, cloud=0.0, wind=11.81, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:18:38', seeing=1.33, atlas_timestamp='2025-11-25T18:18:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:19:06.662 [DEBUG] [Thread-5100] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:19:06.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:19:06.746 [DEBUG] [Thread-5103] [transport.py] [_log()] starting thread (client mode): 0x70d018a0
2025-11-25T20:19:06.747 [DEBUG] [Thread-5103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:19:06.761 [DEBUG] [Thread-5103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:19:06.761 [INFO] [Thread-5103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] client lang: <none>
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] server lang: <none>
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] kex follows: False
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:19:06.769 [DEBUG] [Thread-5103] [transport.py] [_log()] Compression: none
2025-11-25T20:19:06.770 [DEBUG] [Thread-5103] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:19:06.828 [DEBUG] [Thread-5103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:19:06.828 [DEBUG] [Thread-5103] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:19:06.828 [DEBUG] [Thread-5103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:19:06.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:19:06.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:19:06.889 [DEBUG] [Thread-5103] [transport.py] [_log()] userauth is OK
2025-11-25T20:19:06.889 [DEBUG] [Thread-5103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:19:06.889 [DEBUG] [Thread-5103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:19:06.889 [DEBUG] [Thread-5103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:19:06.889 [DEBUG] [Thread-5103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:19:06.903 [INFO] [Thread-5103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:19:06.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:19:06.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:19:07.731 [DEBUG] [Thread-5103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:19:07.731 [DEBUG] [Thread-5103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:19:07.778 [DEBUG] [Thread-5103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:19:07.778 [DEBUG] [Thread-5103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:19:07.786 [DEBUG] [Thread-5103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:19:07.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:19:07.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:19:07.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:19:07.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:19:07.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:19:07.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:19:07.818 [DEBUG] [Thread-5103] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:19:12.286 [DEBUG] [Thread-5105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:19:27.331 [DEBUG] [Thread-5106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:19:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:19:37.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:19:37.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:19:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 19, 10), 29.98, 12.62, 0.0, 12.37, 22.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:19:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:19:10
2025-11-25T20:19:38.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:19:38.788 [DEBUG] [Thread-5107] [transport.py] [_log()] starting thread (client mode): 0x70d2a950
2025-11-25T20:19:38.789 [DEBUG] [Thread-5107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:19:38.808 [DEBUG] [Thread-5107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:19:38.809 [INFO] [Thread-5107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] client lang: <none>
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] server lang: <none>
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] kex follows: False
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] Compression: none
2025-11-25T20:19:38.812 [DEBUG] [Thread-5107] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:19:38.832 [DEBUG] [Thread-5107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:19:38.832 [DEBUG] [Thread-5107] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:19:38.833 [DEBUG] [Thread-5107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:19:38.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:19:38.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:19:38.834 [DEBUG] [Thread-5107] [transport.py] [_log()] userauth is OK
2025-11-25T20:19:38.835 [DEBUG] [Thread-5107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:19:38.835 [DEBUG] [Thread-5107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:19:38.835 [DEBUG] [Thread-5107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:19:38.835 [DEBUG] [Thread-5107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:19:38.870 [INFO] [Thread-5107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:19:38.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:19:39.533 [DEBUG] [Thread-5107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:19:39.533 [DEBUG] [Thread-5107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:19:39.533 [DEBUG] [Thread-5107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:19:39.573 [DEBUG] [Thread-5107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:19:39.574 [DEBUG] [Thread-5107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:19:39.576 [DEBUG] [Thread-5107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:19:39.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:19:39.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:19:39.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:19:39.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:19:39.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:19:39.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:19:39.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:19:39.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:19:39.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:19:39.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.763294 -999.00  +22.70   4.62     17   -2.80 1 1 1 1 1     2    0 24.06 -55.17 ZNES. 5.1 4.6 247.0 11.1 22.7 -26.6 22.7 -25.9 22.4 -24.8 22.7 -25.8
2025-11-25T20:19:39.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:19:39.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:19:39.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.763294
2025-11-25T20:19:39.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:19:39.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:19:39.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:19:39.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:19:39.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:19:39.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:19:10', tmtdew=29.98, humidity=12.62, cloud=0.0, wind=12.37, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:19:10', seeing=1.44, atlas_timestamp='2025-11-25T18:19:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:19:39.600 [DEBUG] [Thread-5107] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:19:39.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:19:39.694 [DEBUG] [Thread-5110] [transport.py] [_log()] starting thread (client mode): 0x70d2b640
2025-11-25T20:19:39.694 [DEBUG] [Thread-5110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:19:39.708 [DEBUG] [Thread-5110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:19:39.708 [INFO] [Thread-5110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:19:39.715 [DEBUG] [Thread-5110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:19:39.715 [DEBUG] [Thread-5110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] client lang: <none>
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] server lang: <none>
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] kex follows: False
2025-11-25T20:19:39.716 [DEBUG] [Thread-5110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:19:39.717 [DEBUG] [Thread-5110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:19:39.717 [DEBUG] [Thread-5110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:19:39.717 [DEBUG] [Thread-5110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:19:39.717 [DEBUG] [Thread-5110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:19:39.717 [DEBUG] [Thread-5110] [transport.py] [_log()] Compression: none
2025-11-25T20:19:39.717 [DEBUG] [Thread-5110] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:19:39.773 [DEBUG] [Thread-5110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:19:39.774 [DEBUG] [Thread-5110] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:19:39.775 [DEBUG] [Thread-5110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:19:39.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:19:39.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:19:39.833 [DEBUG] [Thread-5110] [transport.py] [_log()] userauth is OK
2025-11-25T20:19:39.833 [DEBUG] [Thread-5110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:19:39.833 [DEBUG] [Thread-5110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:19:39.833 [DEBUG] [Thread-5110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:19:39.833 [DEBUG] [Thread-5110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:19:39.848 [INFO] [Thread-5110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:19:39.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:19:39.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:19:40.712 [DEBUG] [Thread-5110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:19:40.712 [DEBUG] [Thread-5110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:19:40.760 [DEBUG] [Thread-5110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:19:40.760 [DEBUG] [Thread-5110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:19:40.768 [DEBUG] [Thread-5110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:19:40.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:19:40.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:19:40.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:19:40.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:19:40.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:19:40.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:19:40.800 [DEBUG] [Thread-5110] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:19:42.364 [DEBUG] [Thread-5112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:19:53.370 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:19:53.371 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:19:55.928 [DEBUG] [Thread-5113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:19:57.412 [DEBUG] [Thread-5114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:20:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:20:10.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:20:10.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:20:11.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 19, 42), 30.31, 12.32, 0.0, 11.17, 22.7, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:20:11.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:19:42
2025-11-25T20:20:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:20:11.752 [DEBUG] [Thread-5115] [transport.py] [_log()] starting thread (client mode): 0x70d6a470
2025-11-25T20:20:11.752 [DEBUG] [Thread-5115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:20:11.773 [DEBUG] [Thread-5115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:20:11.773 [INFO] [Thread-5115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] client lang: <none>
2025-11-25T20:20:11.777 [DEBUG] [Thread-5115] [transport.py] [_log()] server lang: <none>
2025-11-25T20:20:11.778 [DEBUG] [Thread-5115] [transport.py] [_log()] kex follows: False
2025-11-25T20:20:11.778 [DEBUG] [Thread-5115] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:20:11.778 [DEBUG] [Thread-5115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:20:11.778 [DEBUG] [Thread-5115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:20:11.778 [DEBUG] [Thread-5115] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:20:11.778 [DEBUG] [Thread-5115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:20:11.778 [DEBUG] [Thread-5115] [transport.py] [_log()] Compression: none
2025-11-25T20:20:11.778 [DEBUG] [Thread-5115] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:20:11.795 [DEBUG] [Thread-5115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:20:11.795 [DEBUG] [Thread-5115] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:20:11.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:20:11.796 [DEBUG] [Thread-5115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:20:11.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:20:11.798 [DEBUG] [Thread-5115] [transport.py] [_log()] userauth is OK
2025-11-25T20:20:11.798 [DEBUG] [Thread-5115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:20:11.798 [DEBUG] [Thread-5115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:20:11.798 [DEBUG] [Thread-5115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:20:11.798 [DEBUG] [Thread-5115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:20:11.816 [INFO] [Thread-5115] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:20:11.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:20:12.365 [DEBUG] [Thread-5115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:20:12.366 [DEBUG] [Thread-5115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:20:12.366 [DEBUG] [Thread-5115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:20:12.406 [DEBUG] [Thread-5115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:20:12.406 [DEBUG] [Thread-5115] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:20:12.408 [DEBUG] [Thread-5115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:20:12.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:20:12.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:20:12.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:20:12.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:20:12.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:20:12.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:20:12.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:20:12.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:20:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:20:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.763641 -999.00  +22.70   4.15     17   -2.90 1 1 1 1 1     2    0 24.62 -49.61 ZNES. 3.3 4.2 204.1 7.7 22.7 -26.6 22.7 -26.0 22.5 -24.9 22.6 -25.8
2025-11-25T20:20:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:20:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:20:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.763641
2025-11-25T20:20:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:20:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:20:12.430 [DEBUG] [Thread-5115] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:20:12.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:20:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:20:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:20:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:19:42', tmtdew=30.31, humidity=12.32, cloud=0.0, wind=11.17, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:19:42', seeing=1.39, atlas_timestamp='2025-11-25T18:19:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:20:12.449 [DEBUG] [Thread-5118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:20:12.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:20:12.547 [DEBUG] [Thread-5119] [transport.py] [_log()] starting thread (client mode): 0x7374e590
2025-11-25T20:20:12.547 [DEBUG] [Thread-5119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:20:12.561 [DEBUG] [Thread-5119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:20:12.561 [INFO] [Thread-5119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:20:12.568 [DEBUG] [Thread-5119] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] client lang: <none>
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] server lang: <none>
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] kex follows: False
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:20:12.569 [DEBUG] [Thread-5119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:20:12.570 [DEBUG] [Thread-5119] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:20:12.570 [DEBUG] [Thread-5119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:20:12.570 [DEBUG] [Thread-5119] [transport.py] [_log()] Compression: none
2025-11-25T20:20:12.570 [DEBUG] [Thread-5119] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:20:12.625 [DEBUG] [Thread-5119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:20:12.626 [DEBUG] [Thread-5119] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:20:12.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:20:12.627 [DEBUG] [Thread-5119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:20:12.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:20:12.682 [DEBUG] [Thread-5119] [transport.py] [_log()] userauth is OK
2025-11-25T20:20:12.682 [DEBUG] [Thread-5119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:20:12.682 [DEBUG] [Thread-5119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:20:12.682 [DEBUG] [Thread-5119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:20:12.682 [DEBUG] [Thread-5119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:20:12.701 [INFO] [Thread-5119] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:20:12.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:20:12.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:20:13.500 [DEBUG] [Thread-5119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:20:13.500 [DEBUG] [Thread-5119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:20:13.548 [DEBUG] [Thread-5119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:20:13.548 [DEBUG] [Thread-5119] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:20:13.557 [DEBUG] [Thread-5119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:20:13.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:20:13.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:20:13.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:20:13.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:20:13.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:20:13.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:20:13.594 [DEBUG] [Thread-5119] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:20:27.492 [DEBUG] [Thread-5121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:20:42.529 [DEBUG] [Thread-5122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:20:43.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:20:43.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:20:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:20:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 20, 14), 30.31, 12.34, 0.0, 12.09, 22.75, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:20:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:20:14
2025-11-25T20:20:44.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:20:44.513 [DEBUG] [Thread-5123] [transport.py] [_log()] starting thread (client mode): 0x70d6be20
2025-11-25T20:20:44.513 [DEBUG] [Thread-5123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:20:44.533 [DEBUG] [Thread-5123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:20:44.533 [INFO] [Thread-5123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:20:44.536 [DEBUG] [Thread-5123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:20:44.536 [DEBUG] [Thread-5123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:20:44.536 [DEBUG] [Thread-5123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:20:44.536 [DEBUG] [Thread-5123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:20:44.536 [DEBUG] [Thread-5123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] client lang: <none>
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] server lang: <none>
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] kex follows: False
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] Compression: none
2025-11-25T20:20:44.537 [DEBUG] [Thread-5123] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:20:44.555 [DEBUG] [Thread-5123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:20:44.556 [DEBUG] [Thread-5123] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:20:44.556 [DEBUG] [Thread-5123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:20:44.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:20:44.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:20:44.558 [DEBUG] [Thread-5123] [transport.py] [_log()] userauth is OK
2025-11-25T20:20:44.559 [DEBUG] [Thread-5123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:20:44.559 [DEBUG] [Thread-5123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:20:44.559 [DEBUG] [Thread-5123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:20:44.559 [DEBUG] [Thread-5123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:20:44.583 [INFO] [Thread-5123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:20:44.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:20:45.236 [DEBUG] [Thread-5123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:20:45.236 [DEBUG] [Thread-5123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:20:45.236 [DEBUG] [Thread-5123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:20:45.277 [DEBUG] [Thread-5123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:20:45.277 [DEBUG] [Thread-5123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:20:45.279 [DEBUG] [Thread-5123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:20:45.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:20:45.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:20:45.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:20:45.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:20:45.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:20:45.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:20:45.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.763988 -999.00  +22.70   7.03     17   -2.90 1 1 1 1 1     2    0 24.58 -44.63 ZNES. 6.9 7.0 199.2 10.1 22.7 -26.6 22.7 -25.9 22.4 -24.8 22.6 -25.9
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.763988
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:20:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:20:14', tmtdew=30.31, humidity=12.34, cloud=0.0, wind=12.09, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:20:14', seeing=1.79, atlas_timestamp='2025-11-25T18:20:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:20:45.298 [DEBUG] [Thread-5123] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:20:45.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:20:45.381 [DEBUG] [Thread-5126] [transport.py] [_log()] starting thread (client mode): 0x70d2b490
2025-11-25T20:20:45.382 [DEBUG] [Thread-5126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:20:45.396 [DEBUG] [Thread-5126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:20:45.397 [INFO] [Thread-5126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] client lang: <none>
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] server lang: <none>
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] kex follows: False
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] Compression: none
2025-11-25T20:20:45.404 [DEBUG] [Thread-5126] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:20:45.460 [DEBUG] [Thread-5126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:20:45.461 [DEBUG] [Thread-5126] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:20:45.461 [DEBUG] [Thread-5126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:20:45.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:20:45.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:20:45.517 [DEBUG] [Thread-5126] [transport.py] [_log()] userauth is OK
2025-11-25T20:20:45.517 [DEBUG] [Thread-5126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:20:45.517 [DEBUG] [Thread-5126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:20:45.518 [DEBUG] [Thread-5126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:20:45.518 [DEBUG] [Thread-5126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:20:45.537 [INFO] [Thread-5126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:20:45.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:20:45.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:20:46.367 [DEBUG] [Thread-5126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:20:46.367 [DEBUG] [Thread-5126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:20:46.415 [DEBUG] [Thread-5126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:20:46.415 [DEBUG] [Thread-5126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:20:46.424 [DEBUG] [Thread-5126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:20:46.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:20:46.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:20:46.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:20:46.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:20:46.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:20:46.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:20:46.462 [DEBUG] [Thread-5126] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:20:55.984 [DEBUG] [Thread-5128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:20:57.191 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:20:57.563 [DEBUG] [Thread-5129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:20:58.905 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:20:58.905 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:21:01.809 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:21:12.614 [DEBUG] [Thread-5130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:21:16.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:21:16.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:21:16.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:21:17.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 20, 46), 29.87, 12.77, 0.0, 12.76, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:21:17.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:20:46
2025-11-25T20:21:17.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:21:17.399 [DEBUG] [Thread-5131] [transport.py] [_log()] starting thread (client mode): 0x70d6ab30
2025-11-25T20:21:17.400 [DEBUG] [Thread-5131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:21:17.419 [DEBUG] [Thread-5131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:21:17.419 [INFO] [Thread-5131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:21:17.422 [DEBUG] [Thread-5131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] client lang: <none>
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] server lang: <none>
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] kex follows: False
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:21:17.423 [DEBUG] [Thread-5131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:21:17.424 [DEBUG] [Thread-5131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:21:17.424 [DEBUG] [Thread-5131] [transport.py] [_log()] Compression: none
2025-11-25T20:21:17.424 [DEBUG] [Thread-5131] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:21:17.441 [DEBUG] [Thread-5131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:21:17.442 [DEBUG] [Thread-5131] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:21:17.442 [DEBUG] [Thread-5131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:21:17.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:21:17.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:21:17.444 [DEBUG] [Thread-5131] [transport.py] [_log()] userauth is OK
2025-11-25T20:21:17.444 [DEBUG] [Thread-5131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:21:17.444 [DEBUG] [Thread-5131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:21:17.444 [DEBUG] [Thread-5131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:21:17.444 [DEBUG] [Thread-5131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:21:17.480 [INFO] [Thread-5131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:21:17.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:21:18.094 [DEBUG] [Thread-5131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:21:18.094 [DEBUG] [Thread-5131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:21:18.094 [DEBUG] [Thread-5131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:21:18.135 [DEBUG] [Thread-5131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:21:18.135 [DEBUG] [Thread-5131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:21:18.138 [DEBUG] [Thread-5131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:21:18.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:21:18.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:21:18.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:21:18.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:21:18.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:21:18.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:21:18.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:21:18.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:21:18.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:21:18.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.764335 -999.00  +22.60   8.35     18   -2.40 1 1 1 1 1     1    0 24.30 -42.70 ZNES. 10.2 8.3 208.8 14.4 22.7 -26.5 22.7 -25.9 22.4 -24.6 22.6 -25.7
2025-11-25T20:21:18.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:21:18.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:21:18.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.764335
2025-11-25T20:21:18.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:21:18.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:21:18.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:21:18.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:21:18.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:21:18.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:20:46', tmtdew=29.87, humidity=12.77, cloud=0.0, wind=12.76, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:20:46', seeing=1.7, atlas_timestamp='2025-11-25T18:20:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:21:18.163 [DEBUG] [Thread-5131] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:21:18.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:21:18.258 [DEBUG] [Thread-5134] [transport.py] [_log()] starting thread (client mode): 0x70d03bb0
2025-11-25T20:21:18.258 [DEBUG] [Thread-5134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:21:18.273 [DEBUG] [Thread-5134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:21:18.273 [INFO] [Thread-5134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:21:18.281 [DEBUG] [Thread-5134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:21:18.281 [DEBUG] [Thread-5134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:21:18.281 [DEBUG] [Thread-5134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:21:18.281 [DEBUG] [Thread-5134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:21:18.281 [DEBUG] [Thread-5134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:21:18.281 [DEBUG] [Thread-5134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:21:18.281 [DEBUG] [Thread-5134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:21:18.281 [DEBUG] [Thread-5134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] client lang: <none>
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] server lang: <none>
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] kex follows: False
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] Compression: none
2025-11-25T20:21:18.282 [DEBUG] [Thread-5134] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:21:18.341 [DEBUG] [Thread-5134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:21:18.342 [DEBUG] [Thread-5134] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:21:18.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:21:18.343 [DEBUG] [Thread-5134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:21:18.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:21:18.398 [DEBUG] [Thread-5134] [transport.py] [_log()] userauth is OK
2025-11-25T20:21:18.398 [DEBUG] [Thread-5134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:21:18.398 [DEBUG] [Thread-5134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:21:18.398 [DEBUG] [Thread-5134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:21:18.398 [DEBUG] [Thread-5134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:21:18.417 [INFO] [Thread-5134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:21:18.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:21:18.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:21:19.301 [DEBUG] [Thread-5134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:21:19.301 [DEBUG] [Thread-5134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:21:19.349 [DEBUG] [Thread-5134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:21:19.349 [DEBUG] [Thread-5134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:21:19.357 [DEBUG] [Thread-5134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:21:19.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:21:19.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:21:19.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:21:19.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:21:19.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:21:19.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:21:19.388 [DEBUG] [Thread-5134] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:21:20.348 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:21:27.653 [DEBUG] [Thread-5136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:21:42.699 [DEBUG] [Thread-5137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:21:49.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:21:49.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:21:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:21:50.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 21, 18), 29.91, 12.72, 0.0, 12.19, 22.7, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:21:50.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:21:18
2025-11-25T20:21:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:21:50.338 [DEBUG] [Thread-5138] [transport.py] [_log()] starting thread (client mode): 0x70d00190
2025-11-25T20:21:50.338 [DEBUG] [Thread-5138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:21:50.358 [DEBUG] [Thread-5138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:21:50.358 [INFO] [Thread-5138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:21:50.361 [DEBUG] [Thread-5138] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:21:50.361 [DEBUG] [Thread-5138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:21:50.361 [DEBUG] [Thread-5138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:21:50.361 [DEBUG] [Thread-5138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:21:50.361 [DEBUG] [Thread-5138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:21:50.361 [DEBUG] [Thread-5138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] client lang: <none>
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] server lang: <none>
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] kex follows: False
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] Compression: none
2025-11-25T20:21:50.362 [DEBUG] [Thread-5138] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:21:50.381 [DEBUG] [Thread-5138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:21:50.382 [DEBUG] [Thread-5138] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:21:50.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:21:50.383 [DEBUG] [Thread-5138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:21:50.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:21:50.385 [DEBUG] [Thread-5138] [transport.py] [_log()] userauth is OK
2025-11-25T20:21:50.386 [DEBUG] [Thread-5138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:21:50.386 [DEBUG] [Thread-5138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:21:50.386 [DEBUG] [Thread-5138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:21:50.386 [DEBUG] [Thread-5138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:21:50.422 [INFO] [Thread-5138] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:21:50.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:21:51.078 [DEBUG] [Thread-5138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:21:51.078 [DEBUG] [Thread-5138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:21:51.078 [DEBUG] [Thread-5138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:21:51.119 [DEBUG] [Thread-5138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:21:51.119 [DEBUG] [Thread-5138] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:21:51.121 [DEBUG] [Thread-5138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:21:51.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:21:51.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:21:51.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:21:51.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:21:51.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:21:51.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:21:51.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:21:51.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:21:51.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:21:51.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.765030 -999.00  +22.60   5.07     19   -2.00 1 1 1 1 1     1    0 24.32 -45.84 NA 6.2 5.1 257.7 10.7 22.7 -26.5 22.7 -26.0 22.4 -24.6 22.6 -25.6
2025-11-25T20:21:51.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:21:51.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:21:51.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.765030
2025-11-25T20:21:51.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:21:51.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:21:51.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:21:51.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:21:51.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:21:51.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:21:18', tmtdew=29.91, humidity=12.72, cloud=0.0, wind=12.19, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:21:18', seeing=1.7, atlas_timestamp='2025-11-25T18:21:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:21:51.143 [DEBUG] [Thread-5138] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:21:51.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:21:51.228 [DEBUG] [Thread-5141] [transport.py] [_log()] starting thread (client mode): 0x70d018a0
2025-11-25T20:21:51.228 [DEBUG] [Thread-5141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:21:51.243 [DEBUG] [Thread-5141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:21:51.243 [INFO] [Thread-5141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] client lang: <none>
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] server lang: <none>
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] kex follows: False
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] Compression: none
2025-11-25T20:21:51.251 [DEBUG] [Thread-5141] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:21:51.307 [DEBUG] [Thread-5141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:21:51.307 [DEBUG] [Thread-5141] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:21:51.307 [DEBUG] [Thread-5141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:21:51.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:21:51.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:21:51.365 [DEBUG] [Thread-5141] [transport.py] [_log()] userauth is OK
2025-11-25T20:21:51.365 [DEBUG] [Thread-5141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:21:51.365 [DEBUG] [Thread-5141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:21:51.365 [DEBUG] [Thread-5141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:21:51.365 [DEBUG] [Thread-5141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:21:51.379 [INFO] [Thread-5141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:21:51.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:21:51.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:21:52.246 [DEBUG] [Thread-5141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:21:52.246 [DEBUG] [Thread-5141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:21:52.294 [DEBUG] [Thread-5141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:21:52.294 [DEBUG] [Thread-5141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:21:52.302 [DEBUG] [Thread-5141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:21:52.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:21:52.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:21:52.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:21:52.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:21:52.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:21:52.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:21:52.333 [DEBUG] [Thread-5141] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:21:56.054 [DEBUG] [Thread-5143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:21:57.733 [DEBUG] [Thread-5144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:08.120 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:08.121 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:12.793 [DEBUG] [Thread-5145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:18.271 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:22.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:22:22.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:22: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
2025-11-25T20:22:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 21, 50), 29.54, 13.24, 0.0, 12.07, 22.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:22:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:21:50
2025-11-25T20:22:23.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:22:23.319 [DEBUG] [Thread-5146] [transport.py] [_log()] starting thread (client mode): 0x70d2b580
2025-11-25T20:22:23.319 [DEBUG] [Thread-5146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:22:23.338 [DEBUG] [Thread-5146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:22:23.338 [INFO] [Thread-5146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] client lang: <none>
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] server lang: <none>
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] kex follows: False
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] Compression: none
2025-11-25T20:22:23.340 [DEBUG] [Thread-5146] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:22:23.352 [DEBUG] [Thread-5146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:22:23.352 [DEBUG] [Thread-5146] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:22:23.352 [DEBUG] [Thread-5146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:22:23.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:22:23.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:22:23.352 [DEBUG] [Thread-5146] [transport.py] [_log()] userauth is OK
2025-11-25T20:22:23.352 [DEBUG] [Thread-5146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:22:23.352 [DEBUG] [Thread-5146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:22:23.353 [DEBUG] [Thread-5146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:22:23.353 [DEBUG] [Thread-5146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:22:23.362 [INFO] [Thread-5146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:22:23.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:22:24.009 [DEBUG] [Thread-5146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:22:24.009 [DEBUG] [Thread-5146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:22:24.009 [DEBUG] [Thread-5146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:22:24.050 [DEBUG] [Thread-5146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:22:24.050 [DEBUG] [Thread-5146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:22:24.053 [DEBUG] [Thread-5146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:22:24.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:22:24.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:22:24.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:22:24.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:22:24.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:22:24.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:22:24.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.765377 -999.00  +22.50   7.20     19   -1.50 1 1 1 1 1     1    0 24.24 -50.59 ZNESW 11.2 7.2 210.0 9.7 22.6 -26.5 22.6 -25.8 22.4 -24.7 22.6 -25.7
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.765377
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:22:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:21:50', tmtdew=29.54, humidity=13.24, cloud=0.0, wind=12.07, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:21:50', seeing=1.78, atlas_timestamp='2025-11-25T18:22:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:22:24.072 [DEBUG] [Thread-5146] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:22:24.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:22:24.158 [DEBUG] [Thread-5149] [transport.py] [_log()] starting thread (client mode): 0x7374d000
2025-11-25T20:22:24.158 [DEBUG] [Thread-5149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:22:24.178 [DEBUG] [Thread-5149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:22:24.179 [INFO] [Thread-5149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] client lang: <none>
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] server lang: <none>
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] kex follows: False
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:22:24.188 [DEBUG] [Thread-5149] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:22:24.189 [DEBUG] [Thread-5149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:22:24.189 [DEBUG] [Thread-5149] [transport.py] [_log()] Compression: none
2025-11-25T20:22:24.189 [DEBUG] [Thread-5149] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:22:24.244 [DEBUG] [Thread-5149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:22:24.244 [DEBUG] [Thread-5149] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:22:24.244 [DEBUG] [Thread-5149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:22:24.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:22:24.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:22:24.301 [DEBUG] [Thread-5149] [transport.py] [_log()] userauth is OK
2025-11-25T20:22:24.301 [DEBUG] [Thread-5149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:22:24.301 [DEBUG] [Thread-5149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:22:24.301 [DEBUG] [Thread-5149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:22:24.301 [DEBUG] [Thread-5149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:22:24.314 [INFO] [Thread-5149] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:22:24.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:22:24.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:22:25.193 [DEBUG] [Thread-5149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:22:25.193 [DEBUG] [Thread-5149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:22:25.241 [DEBUG] [Thread-5149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:22:25.241 [DEBUG] [Thread-5149] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:22:25.250 [DEBUG] [Thread-5149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:22:25.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:22:25.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:22:25.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:22:25.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:22:25.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:22:25.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:22:25.287 [DEBUG] [Thread-5149] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:22:27.827 [DEBUG] [Thread-5151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:34.064 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:41.455 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:42.882 [DEBUG] [Thread-5152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:55.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:22:55.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:22:55.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:22:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 22, 22), 29.45, 13.31, 0.0, 11.88, 22.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:22:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:22:22
2025-11-25T20:22:56.113 [DEBUG] [Thread-5153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:56.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:22:56.318 [DEBUG] [Thread-5154] [transport.py] [_log()] starting thread (client mode): 0x70d2a770
2025-11-25T20:22:56.318 [DEBUG] [Thread-5154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:22:56.338 [DEBUG] [Thread-5154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:22:56.338 [INFO] [Thread-5154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] client lang: <none>
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] server lang: <none>
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] kex follows: False
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:22:56.341 [DEBUG] [Thread-5154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:22:56.342 [DEBUG] [Thread-5154] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:22:56.342 [DEBUG] [Thread-5154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:22:56.342 [DEBUG] [Thread-5154] [transport.py] [_log()] Compression: none
2025-11-25T20:22:56.342 [DEBUG] [Thread-5154] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:22:56.358 [DEBUG] [Thread-5154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:22:56.358 [DEBUG] [Thread-5154] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:22:56.358 [DEBUG] [Thread-5154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:22:56.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:22:56.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:22:56.359 [DEBUG] [Thread-5154] [transport.py] [_log()] userauth is OK
2025-11-25T20:22:56.359 [DEBUG] [Thread-5154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:22:56.359 [DEBUG] [Thread-5154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:22:56.359 [DEBUG] [Thread-5154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:22:56.359 [DEBUG] [Thread-5154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:22:56.370 [INFO] [Thread-5154] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:22:56.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:22:56.991 [DEBUG] [Thread-5154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:22:56.991 [DEBUG] [Thread-5154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:22:56.992 [DEBUG] [Thread-5154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:22:57.032 [DEBUG] [Thread-5154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:22:57.032 [DEBUG] [Thread-5154] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:22:57.036 [DEBUG] [Thread-5154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:22:57.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:22:57.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:22:57.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:22:57.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:22:57.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:22:57.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:22:57.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.765724 -999.00  +22.50   4.29     19   -1.50 1 1 1 1 1     1    0 24.18 -57.04 ZNESW 6.0 4.3 181.8 14.6 22.6 -26.4 22.6 -25.9 22.4 -24.7 22.6 -25.7
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.765724
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:22:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:22:22', tmtdew=29.45, humidity=13.31, cloud=0.0, wind=11.88, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:22:54', seeing=1.69, atlas_timestamp='2025-11-25T18:22:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:22:57.055 [DEBUG] [Thread-5154] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:22:57.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:22:57.141 [DEBUG] [Thread-5157] [transport.py] [_log()] starting thread (client mode): 0x70d29360
2025-11-25T20:22:57.141 [DEBUG] [Thread-5157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:22:57.155 [DEBUG] [Thread-5157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:22:57.155 [INFO] [Thread-5157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] client lang: <none>
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] server lang: <none>
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] kex follows: False
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] Compression: none
2025-11-25T20:22:57.163 [DEBUG] [Thread-5157] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:22:57.221 [DEBUG] [Thread-5157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:22:57.222 [DEBUG] [Thread-5157] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:22:57.223 [DEBUG] [Thread-5157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:22:57.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:22:57.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:22:57.277 [DEBUG] [Thread-5157] [transport.py] [_log()] userauth is OK
2025-11-25T20:22:57.277 [DEBUG] [Thread-5157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:22:57.278 [DEBUG] [Thread-5157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:22:57.278 [DEBUG] [Thread-5157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:22:57.278 [DEBUG] [Thread-5157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:22:57.297 [INFO] [Thread-5157] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:22:57.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:22:57.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:22:57.916 [DEBUG] [Thread-5159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:22:58.138 [DEBUG] [Thread-5157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:22:58.138 [DEBUG] [Thread-5157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:22:58.186 [DEBUG] [Thread-5157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:22:58.186 [DEBUG] [Thread-5157] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:22:58.198 [DEBUG] [Thread-5157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:22:58.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:22:58.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:22:58.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:22:58.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:22:58.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:22:58.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:22:58.237 [DEBUG] [Thread-5157] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:23:12.976 [DEBUG] [Thread-5160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:23:16.118 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:23:16.119 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:23:28.015 [DEBUG] [Thread-5161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:23:28.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:23:28.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:23:28.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:23:28.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 22, 54), 29.27, 13.52, 0.0, 11.1, 22.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:23:28.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:22:54
2025-11-25T20:23:29.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:23:29.262 [DEBUG] [Thread-5162] [transport.py] [_log()] starting thread (client mode): 0x70d56320
2025-11-25T20:23:29.262 [DEBUG] [Thread-5162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:23:29.284 [DEBUG] [Thread-5162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:23:29.284 [INFO] [Thread-5162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] client lang: <none>
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] server lang: <none>
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] kex follows: False
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] Compression: none
2025-11-25T20:23:29.287 [DEBUG] [Thread-5162] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:23:29.301 [DEBUG] [Thread-5162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:23:29.301 [DEBUG] [Thread-5162] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:23:29.301 [DEBUG] [Thread-5162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:23:29.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:23:29.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:23:29.302 [DEBUG] [Thread-5162] [transport.py] [_log()] userauth is OK
2025-11-25T20:23:29.302 [DEBUG] [Thread-5162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:23:29.302 [DEBUG] [Thread-5162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:23:29.302 [DEBUG] [Thread-5162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:23:29.302 [DEBUG] [Thread-5162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:23:29.312 [INFO] [Thread-5162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:23:29.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:23:29.953 [DEBUG] [Thread-5162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:23:29.953 [DEBUG] [Thread-5162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:23:29.954 [DEBUG] [Thread-5162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:23:29.994 [DEBUG] [Thread-5162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:23:29.994 [DEBUG] [Thread-5162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:23:29.997 [DEBUG] [Thread-5162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:23:30.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:23:30.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:23:30.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:23:30.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:23:30.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:23:30.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:23:30.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:23:30.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:23:30.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:23:30.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.766071 -999.00  +22.50   6.85     19   -1.70 1 1 1 1 1     1    0 23.77 -60.82 ZNESW 6.3 6.8 214.6 9.7 22.6 -26.4 22.6 -26.0 22.4 -24.7 22.6 -25.7
2025-11-25T20:23:30.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:23:30.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:23:30.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.766071
2025-11-25T20:23:30.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:23:30.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:23:30.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:23:30.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:23:30.026 [DEBUG] [Thread-5162] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:23:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:23:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:22:54', tmtdew=29.27, humidity=13.52, cloud=0.0, wind=11.1, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:23:26', seeing=1.77, atlas_timestamp='2025-11-25T18:23:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:23:30.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:23:30.122 [DEBUG] [Thread-5165] [transport.py] [_log()] starting thread (client mode): 0x70d02c20
2025-11-25T20:23:30.122 [DEBUG] [Thread-5165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:23:30.139 [DEBUG] [Thread-5165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:23:30.140 [INFO] [Thread-5165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:23:30.147 [DEBUG] [Thread-5165] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:23:30.148 [DEBUG] [Thread-5165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:23:30.148 [DEBUG] [Thread-5165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:23:30.148 [DEBUG] [Thread-5165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:23:30.148 [DEBUG] [Thread-5165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:23:30.148 [DEBUG] [Thread-5165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:23:30.148 [DEBUG] [Thread-5165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:23:30.148 [DEBUG] [Thread-5165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:23:30.148 [DEBUG] [Thread-5165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:23:30.149 [DEBUG] [Thread-5165] [transport.py] [_log()] client lang: <none>
2025-11-25T20:23:30.149 [DEBUG] [Thread-5165] [transport.py] [_log()] server lang: <none>
2025-11-25T20:23:30.149 [DEBUG] [Thread-5165] [transport.py] [_log()] kex follows: False
2025-11-25T20:23:30.149 [DEBUG] [Thread-5165] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:23:30.149 [DEBUG] [Thread-5165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:23:30.149 [DEBUG] [Thread-5165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:23:30.149 [DEBUG] [Thread-5165] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:23:30.150 [DEBUG] [Thread-5165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:23:30.150 [DEBUG] [Thread-5165] [transport.py] [_log()] Compression: none
2025-11-25T20:23:30.150 [DEBUG] [Thread-5165] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:23:30.205 [DEBUG] [Thread-5165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:23:30.206 [DEBUG] [Thread-5165] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:23:30.206 [DEBUG] [Thread-5165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:23:30.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:23:30.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:23:30.261 [DEBUG] [Thread-5165] [transport.py] [_log()] userauth is OK
2025-11-25T20:23:30.261 [DEBUG] [Thread-5165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:23:30.261 [DEBUG] [Thread-5165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:23:30.261 [DEBUG] [Thread-5165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:23:30.262 [DEBUG] [Thread-5165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:23:30.281 [INFO] [Thread-5165] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:23:30.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:23:30.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:23:31.104 [DEBUG] [Thread-5165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:23:31.105 [DEBUG] [Thread-5165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:23:31.155 [DEBUG] [Thread-5165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:23:31.155 [DEBUG] [Thread-5165] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:23:31.164 [DEBUG] [Thread-5165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:23:31.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:23:31.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:23:31.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:23:31.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:23:31.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:23:31.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:23:31.201 [DEBUG] [Thread-5165] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:23:43.050 [DEBUG] [Thread-5167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:23:56.180 [DEBUG] [Thread-5168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:23:58.104 [DEBUG] [Thread-5169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:01.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:24:01.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:24:01.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:24:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 23, 58), 28.7, 14.35, 0.0, 12.19, 22.51, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:24:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:23:58
2025-11-25T20:24:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:24:02.193 [DEBUG] [Thread-5170] [transport.py] [_log()] starting thread (client mode): 0x70d57d60
2025-11-25T20:24:02.193 [DEBUG] [Thread-5170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:24:02.214 [DEBUG] [Thread-5170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:24:02.214 [INFO] [Thread-5170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] client lang: <none>
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] server lang: <none>
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] kex follows: False
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] Compression: none
2025-11-25T20:24:02.218 [DEBUG] [Thread-5170] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:24:02.233 [DEBUG] [Thread-5170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:24:02.233 [DEBUG] [Thread-5170] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:24:02.233 [DEBUG] [Thread-5170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:24:02.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:24:02.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:24:02.234 [DEBUG] [Thread-5170] [transport.py] [_log()] userauth is OK
2025-11-25T20:24:02.234 [DEBUG] [Thread-5170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:24:02.234 [DEBUG] [Thread-5170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:24:02.234 [DEBUG] [Thread-5170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:24:02.234 [DEBUG] [Thread-5170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:24:02.244 [INFO] [Thread-5170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:24:02.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:24:02.828 [DEBUG] [Thread-5170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:24:02.828 [DEBUG] [Thread-5170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:24:02.828 [DEBUG] [Thread-5170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:24:02.869 [DEBUG] [Thread-5170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:24:02.869 [DEBUG] [Thread-5170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:24:02.871 [DEBUG] [Thread-5170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:24:02.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:24:02.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:24:02.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:24:02.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:24:02.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:24:02.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:24:02.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.766419 -999.00  +22.50   5.57     19   -1.90 1 1 1 1 1     1    0 23.44 -62.55 ZNESW 5.0 5.6 215.6 8.4 22.6 -26.4 22.6 -25.9 22.4 -24.7 22.6 -25.7
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.766419
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:24:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:23:58', tmtdew=28.7, humidity=14.35, cloud=0.0, wind=12.19, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:23:58', seeing=2.0, atlas_timestamp='2025-11-25T18:23:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T02:35:00')
2025-11-25T20:24:02.886 [DEBUG] [Thread-5170] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:24:02.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:24:02.973 [DEBUG] [Thread-5173] [transport.py] [_log()] starting thread (client mode): 0x70d69ab0
2025-11-25T20:24:02.973 [DEBUG] [Thread-5173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:24:02.989 [DEBUG] [Thread-5173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:24:02.989 [INFO] [Thread-5173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:24:02.996 [DEBUG] [Thread-5173] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:24:02.996 [DEBUG] [Thread-5173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:24:02.996 [DEBUG] [Thread-5173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:24:02.996 [DEBUG] [Thread-5173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:24:02.996 [DEBUG] [Thread-5173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:24:02.996 [DEBUG] [Thread-5173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] client lang: <none>
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] server lang: <none>
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] kex follows: False
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] Compression: none
2025-11-25T20:24:02.997 [DEBUG] [Thread-5173] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:24:03.051 [DEBUG] [Thread-5173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:24:03.051 [DEBUG] [Thread-5173] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:24:03.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:24:03.052 [DEBUG] [Thread-5173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:24:03.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:24:03.108 [DEBUG] [Thread-5173] [transport.py] [_log()] userauth is OK
2025-11-25T20:24:03.108 [DEBUG] [Thread-5173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:24:03.108 [DEBUG] [Thread-5173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:24:03.108 [DEBUG] [Thread-5173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:24:03.109 [DEBUG] [Thread-5173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:24:03.126 [INFO] [Thread-5173] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:24:03.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:24:03.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:24:03.964 [DEBUG] [Thread-5173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:24:03.965 [DEBUG] [Thread-5173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:24:04.012 [DEBUG] [Thread-5173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:24:04.012 [DEBUG] [Thread-5173] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:24:04.020 [DEBUG] [Thread-5173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:24:04.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:24:04.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:24:04.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:24:04.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:24:04.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:24:04.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:24:04.052 [DEBUG] [Thread-5173] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:24:13.137 [DEBUG] [Thread-5175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:20.457 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:20.458 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:28.194 [DEBUG] [Thread-5176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:34.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:24:34.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:24:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:24:34.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 24, 30), 28.45, 14.63, 0.0, 11.88, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:24:34.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:24:30
2025-11-25T20:24:34.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:24:34.994 [DEBUG] [Thread-5177] [transport.py] [_log()] starting thread (client mode): 0x70d39e40
2025-11-25T20:24:34.994 [DEBUG] [Thread-5177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:24:35.015 [DEBUG] [Thread-5177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:24:35.015 [INFO] [Thread-5177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:24:35.019 [DEBUG] [Thread-5177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:24:35.019 [DEBUG] [Thread-5177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:24:35.019 [DEBUG] [Thread-5177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:24:35.019 [DEBUG] [Thread-5177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:24:35.019 [DEBUG] [Thread-5177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:24:35.019 [DEBUG] [Thread-5177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:24:35.019 [DEBUG] [Thread-5177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:24:35.019 [DEBUG] [Thread-5177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] client lang: <none>
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] server lang: <none>
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] kex follows: False
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] Compression: none
2025-11-25T20:24:35.020 [DEBUG] [Thread-5177] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:24:35.031 [DEBUG] [Thread-5177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:24:35.032 [DEBUG] [Thread-5177] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:24:35.033 [DEBUG] [Thread-5177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:24:35.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:24:35.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:24:35.037 [DEBUG] [Thread-5177] [transport.py] [_log()] userauth is OK
2025-11-25T20:24:35.037 [DEBUG] [Thread-5177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:24:35.037 [DEBUG] [Thread-5177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:24:35.037 [DEBUG] [Thread-5177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:24:35.037 [DEBUG] [Thread-5177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:24:35.055 [INFO] [Thread-5177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:24:35.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:24:35.619 [DEBUG] [Thread-5177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:24:35.620 [DEBUG] [Thread-5177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:24:35.620 [DEBUG] [Thread-5177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:24:35.660 [DEBUG] [Thread-5177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:24:35.661 [DEBUG] [Thread-5177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:24:35.664 [DEBUG] [Thread-5177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:24:35.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:24:35.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:24:35.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:24:35.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:24:35.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:24:35.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:24:35.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:24:35.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:24:35.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:24:35.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.766766 -999.00  +22.50   4.01     19   -1.90 1 1 1 1 1     1    0 23.86 -65.69 ZNESW 5.6 4.0 166.1 12.7 22.6 -26.4 22.6 -25.8 22.3 -24.6 22.5 -25.7
2025-11-25T20:24:35.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:24:35.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:24:35.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.766766
2025-11-25T20:24:35.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:24:35.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:24:35.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:24:35.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:24:35.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:24:35.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:24:30', tmtdew=28.45, humidity=14.63, cloud=0.0, wind=11.88, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:24:31', seeing=1.51, atlas_timestamp='2025-11-25T18:24:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T18:21:00')
2025-11-25T20:24:35.684 [DEBUG] [Thread-5177] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:24:35.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:24:35.779 [DEBUG] [Thread-5180] [transport.py] [_log()] starting thread (client mode): 0x70d3b220
2025-11-25T20:24:35.779 [DEBUG] [Thread-5180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:24:35.794 [DEBUG] [Thread-5180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:24:35.794 [INFO] [Thread-5180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:24:35.802 [DEBUG] [Thread-5180] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:24:35.802 [DEBUG] [Thread-5180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:24:35.802 [DEBUG] [Thread-5180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] client lang: <none>
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] server lang: <none>
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] kex follows: False
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:24:35.803 [DEBUG] [Thread-5180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:24:35.804 [DEBUG] [Thread-5180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:24:35.804 [DEBUG] [Thread-5180] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:24:35.804 [DEBUG] [Thread-5180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:24:35.804 [DEBUG] [Thread-5180] [transport.py] [_log()] Compression: none
2025-11-25T20:24:35.804 [DEBUG] [Thread-5180] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:24:35.860 [DEBUG] [Thread-5180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:24:35.861 [DEBUG] [Thread-5180] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:24:35.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:24:35.862 [DEBUG] [Thread-5180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:24:35.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:24:35.917 [DEBUG] [Thread-5180] [transport.py] [_log()] userauth is OK
2025-11-25T20:24:35.918 [DEBUG] [Thread-5180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:24:35.918 [DEBUG] [Thread-5180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:24:35.918 [DEBUG] [Thread-5180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:24:35.918 [DEBUG] [Thread-5180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:24:35.937 [INFO] [Thread-5180] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:24:35.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:24:35.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:24:36.127 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:36.740 [DEBUG] [Thread-5180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:24:36.741 [DEBUG] [Thread-5180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:24:36.789 [DEBUG] [Thread-5180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:24:36.789 [DEBUG] [Thread-5180] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:24:36.798 [DEBUG] [Thread-5180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:24:36.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:24:36.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:24:36.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:24:36.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:24:36.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:24:36.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:24:36.836 [DEBUG] [Thread-5180] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:24:41.519 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:43.229 [DEBUG] [Thread-5182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:46.896 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:52.273 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:56.236 [DEBUG] [Thread-5183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:57.652 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:24:58.277 [DEBUG] [Thread-5184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:03.028 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:25:06.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:25:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:25:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 25, 3), 28.6, 14.45, 0.0, 11.56, 22.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:25:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:25:03
2025-11-25T20:25:07.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:25:07.776 [DEBUG] [Thread-5185] [transport.py] [_log()] starting thread (client mode): 0x70d435b0
2025-11-25T20:25:07.776 [DEBUG] [Thread-5185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:25:07.797 [DEBUG] [Thread-5185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:25:07.798 [INFO] [Thread-5185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:25:07.800 [DEBUG] [Thread-5185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:25:07.800 [DEBUG] [Thread-5185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:25:07.800 [DEBUG] [Thread-5185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] client lang: <none>
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] server lang: <none>
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] kex follows: False
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] Compression: none
2025-11-25T20:25:07.801 [DEBUG] [Thread-5185] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:25:07.818 [DEBUG] [Thread-5185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:25:07.818 [DEBUG] [Thread-5185] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:25:07.819 [DEBUG] [Thread-5185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:25:07.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:25:07.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:25:07.820 [DEBUG] [Thread-5185] [transport.py] [_log()] userauth is OK
2025-11-25T20:25:07.820 [DEBUG] [Thread-5185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:25:07.820 [DEBUG] [Thread-5185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:25:07.821 [DEBUG] [Thread-5185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:25:07.821 [DEBUG] [Thread-5185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:25:07.844 [INFO] [Thread-5185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:25:07.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:25:08.406 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:08.646 [DEBUG] [Thread-5185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:25:08.646 [DEBUG] [Thread-5185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:25:08.647 [DEBUG] [Thread-5185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:25:08.686 [DEBUG] [Thread-5185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:25:08.687 [DEBUG] [Thread-5185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:25:08.690 [DEBUG] [Thread-5185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:25:08.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:25:08.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:25:08.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:25:08.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:25:08.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:25:08.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:25:08.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:25:08.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:25:08.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:25:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.767113 -999.00  +22.50   9.49     20   -1.50 1 1 1 1 1     0    0 22.94 -70.06 ZNESW 9.7 9.5 231.9 13.5 22.5 -26.5 22.6 -25.8 22.3 -24.6 22.5 -25.8
2025-11-25T20:25:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:25:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:25:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.767113
2025-11-25T20:25:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:25:08.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:25:08.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:25:08.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:25:08.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:25:08.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:25:03', tmtdew=28.6, humidity=14.45, cloud=0.0, wind=11.56, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:25:03', seeing=1.51, atlas_timestamp='2025-11-25T18:24:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T18:21:00')
2025-11-25T20:25:08.714 [DEBUG] [Thread-5185] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:25:08.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:25:08.809 [DEBUG] [Thread-5187] [transport.py] [_log()] starting thread (client mode): 0x70d411b0
2025-11-25T20:25:08.809 [DEBUG] [Thread-5187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:25:08.823 [DEBUG] [Thread-5187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:25:08.824 [INFO] [Thread-5187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:25:08.831 [DEBUG] [Thread-5187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:25:08.831 [DEBUG] [Thread-5187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:25:08.831 [DEBUG] [Thread-5187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:25:08.831 [DEBUG] [Thread-5187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:25:08.831 [DEBUG] [Thread-5187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:25:08.831 [DEBUG] [Thread-5187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] client lang: <none>
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] server lang: <none>
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] kex follows: False
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] Compression: none
2025-11-25T20:25:08.832 [DEBUG] [Thread-5187] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:25:08.889 [DEBUG] [Thread-5187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:25:08.889 [DEBUG] [Thread-5187] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:25:08.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:25:08.890 [DEBUG] [Thread-5187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:25:08.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:25:08.945 [DEBUG] [Thread-5187] [transport.py] [_log()] userauth is OK
2025-11-25T20:25:08.945 [DEBUG] [Thread-5187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:25:08.945 [DEBUG] [Thread-5187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:25:08.945 [DEBUG] [Thread-5187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:25:08.945 [DEBUG] [Thread-5187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:25:08.964 [INFO] [Thread-5187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:25:08.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:25:08.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:25:09.804 [DEBUG] [Thread-5187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:25:09.805 [DEBUG] [Thread-5187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:25:09.853 [DEBUG] [Thread-5187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:25:09.853 [DEBUG] [Thread-5187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:25:09.862 [DEBUG] [Thread-5187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:25:09.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:25:09.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:25:09.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:25:09.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:25:09.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:25:09.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:25:09.900 [DEBUG] [Thread-5187] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:25:13.310 [DEBUG] [Thread-5189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:13.785 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:19.161 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:24.540 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:28.359 [DEBUG] [Thread-5190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:29.210 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:29.211 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:30.368 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:39.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:25:39.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:25:39.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:25:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 25, 35), 27.7, 15.02, 0.0, 13.76, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:25:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:25:35
2025-11-25T20:25:40.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:25:40.856 [DEBUG] [Thread-5191] [transport.py] [_log()] starting thread (client mode): 0x70d03100
2025-11-25T20:25:40.857 [DEBUG] [Thread-5191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:25:40.877 [DEBUG] [Thread-5191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:25:40.877 [INFO] [Thread-5191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] client lang: <none>
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] server lang: <none>
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] kex follows: False
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] Compression: none
2025-11-25T20:25:40.881 [DEBUG] [Thread-5191] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:25:40.899 [DEBUG] [Thread-5191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:25:40.899 [DEBUG] [Thread-5191] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:25:40.900 [DEBUG] [Thread-5191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:25:40.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:25:40.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:25:40.902 [DEBUG] [Thread-5191] [transport.py] [_log()] userauth is OK
2025-11-25T20:25:40.902 [DEBUG] [Thread-5191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:25:40.902 [DEBUG] [Thread-5191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:25:40.902 [DEBUG] [Thread-5191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:25:40.902 [DEBUG] [Thread-5191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:25:40.927 [INFO] [Thread-5191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:25:40.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:25:41.547 [DEBUG] [Thread-5191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:25:41.547 [DEBUG] [Thread-5191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:25:41.547 [DEBUG] [Thread-5191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:25:41.587 [DEBUG] [Thread-5191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:25:41.588 [DEBUG] [Thread-5191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:25:41.590 [DEBUG] [Thread-5191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:25:41.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:25:41.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:25:41.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:25:41.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:25:41.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:25:41.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:25:41.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:25:41.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:25:41.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:25:41.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.767113 -999.00  +22.50   9.49     20   -1.50 1 1 1 1 1     0    0 22.94 -70.06 ZNESW 9.7 9.5 231.9 13.5 22.5 -26.5 22.6 -25.8 22.3 -24.6 22.5 -25.8
2025-11-25T20:25:41.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:25:41.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:25:41.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.767113
2025-11-25T20:25:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:25:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:25:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:25:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:25:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:25:41.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:25:35', tmtdew=27.7, humidity=15.02, cloud=0.0, wind=13.76, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:25:35', seeing=1.53, atlas_timestamp='2025-11-25T18:24:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T18:21:00')
2025-11-25T20:25:41.617 [DEBUG] [Thread-5191] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:25:41.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:25:41.713 [DEBUG] [Thread-5194] [transport.py] [_log()] starting thread (client mode): 0x70d566b0
2025-11-25T20:25:41.713 [DEBUG] [Thread-5194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:25:41.728 [DEBUG] [Thread-5194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:25:41.728 [INFO] [Thread-5194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:25:41.736 [DEBUG] [Thread-5194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:25:41.736 [DEBUG] [Thread-5194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:25:41.736 [DEBUG] [Thread-5194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:25:41.736 [DEBUG] [Thread-5194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:25:41.737 [DEBUG] [Thread-5194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:25:41.737 [DEBUG] [Thread-5194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:25:41.737 [DEBUG] [Thread-5194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:25:41.737 [DEBUG] [Thread-5194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:25:41.737 [DEBUG] [Thread-5194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:25:41.737 [DEBUG] [Thread-5194] [transport.py] [_log()] client lang: <none>
2025-11-25T20:25:41.737 [DEBUG] [Thread-5194] [transport.py] [_log()] server lang: <none>
2025-11-25T20:25:41.737 [DEBUG] [Thread-5194] [transport.py] [_log()] kex follows: False
2025-11-25T20:25:41.737 [DEBUG] [Thread-5194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:25:41.738 [DEBUG] [Thread-5194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:25:41.738 [DEBUG] [Thread-5194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:25:41.738 [DEBUG] [Thread-5194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:25:41.738 [DEBUG] [Thread-5194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:25:41.738 [DEBUG] [Thread-5194] [transport.py] [_log()] Compression: none
2025-11-25T20:25:41.738 [DEBUG] [Thread-5194] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:25:41.793 [DEBUG] [Thread-5194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:25:41.794 [DEBUG] [Thread-5194] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:25:41.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:25:41.795 [DEBUG] [Thread-5194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:25:41.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:25:41.853 [DEBUG] [Thread-5194] [transport.py] [_log()] userauth is OK
2025-11-25T20:25:41.853 [DEBUG] [Thread-5194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:25:41.853 [DEBUG] [Thread-5194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:25:41.853 [DEBUG] [Thread-5194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:25:41.853 [DEBUG] [Thread-5194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:25:41.871 [INFO] [Thread-5194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:25:41.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:25:41.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:25:42.726 [DEBUG] [Thread-5194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:25:42.726 [DEBUG] [Thread-5194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:25:42.774 [DEBUG] [Thread-5194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:25:42.774 [DEBUG] [Thread-5194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:25:42.783 [DEBUG] [Thread-5194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:25:42.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:25:42.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:25:42.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:25:42.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:25:42.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:25:42.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:25:42.822 [DEBUG] [Thread-5194] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:25:43.396 [DEBUG] [Thread-5196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:56.288 [DEBUG] [Thread-5197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:25:58.454 [DEBUG] [Thread-5198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:02.692 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:08.088 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:26:12.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:26:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:26:13.483 [DEBUG] [Thread-5199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 26, 7), 27.78, 14.92, 0.0, 11.86, 22.46, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:26:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:26:07
2025-11-25T20:26:13.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:26:13.761 [DEBUG] [Thread-5200] [transport.py] [_log()] starting thread (client mode): 0x70d2bcd0
2025-11-25T20:26:13.761 [DEBUG] [Thread-5200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:26:13.781 [DEBUG] [Thread-5200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:26:13.781 [INFO] [Thread-5200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:26:13.784 [DEBUG] [Thread-5200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:26:13.784 [DEBUG] [Thread-5200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:26:13.784 [DEBUG] [Thread-5200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:26:13.784 [DEBUG] [Thread-5200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:26:13.784 [DEBUG] [Thread-5200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:26:13.784 [DEBUG] [Thread-5200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:26:13.784 [DEBUG] [Thread-5200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:26:13.784 [DEBUG] [Thread-5200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:26:13.784 [DEBUG] [Thread-5200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] client lang: <none>
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] server lang: <none>
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] kex follows: False
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] Compression: none
2025-11-25T20:26:13.785 [DEBUG] [Thread-5200] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:26:13.802 [DEBUG] [Thread-5200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:26:13.802 [DEBUG] [Thread-5200] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:26:13.803 [DEBUG] [Thread-5200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:26:13.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:26:13.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:26:13.805 [DEBUG] [Thread-5200] [transport.py] [_log()] userauth is OK
2025-11-25T20:26:13.805 [DEBUG] [Thread-5200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:26:13.805 [DEBUG] [Thread-5200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:26:13.805 [DEBUG] [Thread-5200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:26:13.805 [DEBUG] [Thread-5200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:26:13.824 [INFO] [Thread-5200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:26:13.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:26:14.432 [DEBUG] [Thread-5200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:26:14.433 [DEBUG] [Thread-5200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:26:14.433 [DEBUG] [Thread-5200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:26:14.474 [DEBUG] [Thread-5200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:26:14.474 [DEBUG] [Thread-5200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:26:14.477 [DEBUG] [Thread-5200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:26:14.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:26:14.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:26:14.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:26:14.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:26:14.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:26:14.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:26:14.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:26:14.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:26:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:26:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.767808 -999.00  +22.40   9.78     21   -0.90 1 1 1 1 1     0    0 23.13 -82.95 ZNESW 10.2 9.8 212.9 13.6 22.6 -26.1 22.6 -25.6 22.3 -24.6 22.4 -25.6
2025-11-25T20:26:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:26:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:26:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.767808
2025-11-25T20:26:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:26:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:26:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:26:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:26:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:26:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:26:07', tmtdew=27.78, humidity=14.92, cloud=0.0, wind=11.86, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:26:07', seeing=1.45, atlas_timestamp='2025-11-25T18:25:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T18:21:00')
2025-11-25T20:26:14.504 [DEBUG] [Thread-5200] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:26:14.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:26:14.599 [DEBUG] [Thread-5203] [transport.py] [_log()] starting thread (client mode): 0x70d1e410
2025-11-25T20:26:14.599 [DEBUG] [Thread-5203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:26:14.614 [DEBUG] [Thread-5203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:26:14.614 [INFO] [Thread-5203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] client lang: <none>
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] server lang: <none>
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] kex follows: False
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:26:14.622 [DEBUG] [Thread-5203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:26:14.623 [DEBUG] [Thread-5203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:26:14.623 [DEBUG] [Thread-5203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:26:14.623 [DEBUG] [Thread-5203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:26:14.623 [DEBUG] [Thread-5203] [transport.py] [_log()] Compression: none
2025-11-25T20:26:14.623 [DEBUG] [Thread-5203] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:26:14.681 [DEBUG] [Thread-5203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:26:14.681 [DEBUG] [Thread-5203] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:26:14.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:26:14.682 [DEBUG] [Thread-5203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:26:14.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:26:14.737 [DEBUG] [Thread-5203] [transport.py] [_log()] userauth is OK
2025-11-25T20:26:14.737 [DEBUG] [Thread-5203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:26:14.737 [DEBUG] [Thread-5203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:26:14.738 [DEBUG] [Thread-5203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:26:14.738 [DEBUG] [Thread-5203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:26:14.756 [INFO] [Thread-5203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:26:14.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:26:14.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:26:15.587 [DEBUG] [Thread-5203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:26:15.588 [DEBUG] [Thread-5203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:26:15.636 [DEBUG] [Thread-5203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:26:15.637 [DEBUG] [Thread-5203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:26:15.649 [DEBUG] [Thread-5203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:26:15.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:26:15.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:26:15.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:26:15.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:26:15.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:26:15.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:26:15.686 [DEBUG] [Thread-5203] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:26:28.520 [DEBUG] [Thread-5205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:28.923 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:29.414 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:29.415 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:35.693 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:43.571 [DEBUG] [Thread-5206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:45.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:26:45.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:26:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:26:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 26, 39), 27.76, 15.38, 0.0, 11.51, 22.41, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:26:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:26:39
2025-11-25T20:26:46.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:26:46.617 [DEBUG] [Thread-5207] [transport.py] [_log()] starting thread (client mode): 0x70d75b40
2025-11-25T20:26:46.617 [DEBUG] [Thread-5207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:26:46.638 [DEBUG] [Thread-5207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:26:46.638 [INFO] [Thread-5207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] client lang: <none>
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] server lang: <none>
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] kex follows: False
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] Compression: none
2025-11-25T20:26:46.641 [DEBUG] [Thread-5207] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:26:46.659 [DEBUG] [Thread-5207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:26:46.659 [DEBUG] [Thread-5207] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:26:46.660 [DEBUG] [Thread-5207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:26:46.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:26:46.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:26:46.662 [DEBUG] [Thread-5207] [transport.py] [_log()] userauth is OK
2025-11-25T20:26:46.663 [DEBUG] [Thread-5207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:26:46.663 [DEBUG] [Thread-5207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:26:46.663 [DEBUG] [Thread-5207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:26:46.663 [DEBUG] [Thread-5207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:26:46.699 [INFO] [Thread-5207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:26:46.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:26:47.329 [DEBUG] [Thread-5207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:26:47.330 [DEBUG] [Thread-5207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:26:47.330 [DEBUG] [Thread-5207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:26:47.371 [DEBUG] [Thread-5207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:26:47.371 [DEBUG] [Thread-5207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:26:47.375 [DEBUG] [Thread-5207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:26:47.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:26:47.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:26:47.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:26:47.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:26:47.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:26:47.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:26:47.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:26:47.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:26:47.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:26:47.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.768155 -999.00  +22.50   8.12     21   -0.80 1 1 1 1 1     0    0 22.11 -97.64 ZNESW 8.9 8.1 197.1 15.6 22.5 -26.4 22.5 -25.8 22.3 -24.4 22.4 -25.4
2025-11-25T20:26:47.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:26:47.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:26:47.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.768155
2025-11-25T20:26:47.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:26:47.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:26:47.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:26:47.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:26:47.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:26:47.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:26:39', tmtdew=27.76, humidity=15.38, cloud=0.0, wind=11.51, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:26:39', seeing=1.49, atlas_timestamp='2025-11-25T18:26:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08525000000000027, -0.00975000000000037, -0.04774999999999885, -0.028999999999999915, -0.026500000000000412, 0.02325000000000088, 0.011499999999999844, -0.01774999999999949, 0.04449999999999932, -0.02999999999999936, -0.1277500000000007, -0.04400000000000048, 0.07150000000000034, 0.08825000000000038, 0.08949999999999925, 0.022500000000000853, 0.08375000000000021, 0.03550000000000075, -0.08500000000000085, 0.062249999999998806, 0.13649999999999807, 0.06274999999999942, 0.017250000000000654, 0.05274999999999963, -0.021000000000000796, 0.0035000000000007248, -0.04025000000000034, 0.12650000000000006, 0.2345000000000006, 0.0810000000000013, 0.18900000000000183, -0.03599999999999959, 0.006249999999999645], zp_timestamp='2025-11-25T18:21:00')
2025-11-25T20:26:47.403 [DEBUG] [Thread-5207] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:26:47.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:26:47.499 [DEBUG] [Thread-5210] [transport.py] [_log()] starting thread (client mode): 0x70d74580
2025-11-25T20:26:47.499 [DEBUG] [Thread-5210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:26:47.515 [DEBUG] [Thread-5210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:26:47.515 [INFO] [Thread-5210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:26:47.523 [DEBUG] [Thread-5210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:26:47.523 [DEBUG] [Thread-5210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:26:47.523 [DEBUG] [Thread-5210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:26:47.523 [DEBUG] [Thread-5210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:26:47.523 [DEBUG] [Thread-5210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:26:47.523 [DEBUG] [Thread-5210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:26:47.523 [DEBUG] [Thread-5210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] client lang: <none>
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] server lang: <none>
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] kex follows: False
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] Compression: none
2025-11-25T20:26:47.524 [DEBUG] [Thread-5210] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:26:47.585 [DEBUG] [Thread-5210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:26:47.585 [DEBUG] [Thread-5210] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:26:47.586 [DEBUG] [Thread-5210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:26:47.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:26:47.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:26:47.644 [DEBUG] [Thread-5210] [transport.py] [_log()] userauth is OK
2025-11-25T20:26:47.645 [DEBUG] [Thread-5210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:26:47.645 [DEBUG] [Thread-5210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:26:47.645 [DEBUG] [Thread-5210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:26:47.645 [DEBUG] [Thread-5210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:26:47.664 [INFO] [Thread-5210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:26:47.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:26:47.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:26:48.014 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:48.529 [DEBUG] [Thread-5210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:26:48.529 [DEBUG] [Thread-5210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:26:48.577 [DEBUG] [Thread-5210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:26:48.577 [DEBUG] [Thread-5210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:26:48.587 [DEBUG] [Thread-5210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:26:48.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:26:48.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:26:48.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:26:48.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:26:48.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:26:48.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:26:48.624 [DEBUG] [Thread-5210] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:26:53.694 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:56.354 [DEBUG] [Thread-5212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:26:58.613 [DEBUG] [Thread-5213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:27:13.662 [DEBUG] [Thread-5214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:27:18.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:27:18.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:27:18.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:27:19.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 27, 11), 27.48, 15.7, 0.0, 13.31, 22.41, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:27:19.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:27:11
2025-11-25T20:27:19.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:27:19.539 [DEBUG] [Thread-5215] [transport.py] [_log()] starting thread (client mode): 0x70d0fe50
2025-11-25T20:27:19.539 [DEBUG] [Thread-5215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:27:19.552 [DEBUG] [Thread-5215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:27:19.552 [INFO] [Thread-5215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] client lang: <none>
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] server lang: <none>
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] kex follows: False
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:27:19.555 [DEBUG] [Thread-5215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:27:19.556 [DEBUG] [Thread-5215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:27:19.556 [DEBUG] [Thread-5215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:27:19.556 [DEBUG] [Thread-5215] [transport.py] [_log()] Compression: none
2025-11-25T20:27:19.556 [DEBUG] [Thread-5215] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:27:19.572 [DEBUG] [Thread-5215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:27:19.573 [DEBUG] [Thread-5215] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:27:19.573 [DEBUG] [Thread-5215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:27:19.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:27:19.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:27:19.575 [DEBUG] [Thread-5215] [transport.py] [_log()] userauth is OK
2025-11-25T20:27:19.575 [DEBUG] [Thread-5215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:27:19.575 [DEBUG] [Thread-5215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:27:19.575 [DEBUG] [Thread-5215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:27:19.575 [DEBUG] [Thread-5215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:27:19.593 [INFO] [Thread-5215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:27:19.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:27:20.260 [DEBUG] [Thread-5215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:27:20.260 [DEBUG] [Thread-5215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:27:20.270 [DEBUG] [Thread-5215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:27:20.302 [DEBUG] [Thread-5215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:27:20.302 [DEBUG] [Thread-5215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:27:20.306 [DEBUG] [Thread-5215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:27:20.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:27:20.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:27:20.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:27:20.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:27:20.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:27:20.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:27:20.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:27:20.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:27:20.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:27:20.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.768502 -999.00  +22.50   6.21     20   -0.90 1 1 1 1 1     0    0 22.58 -102.83 ZNESW 8.2 6.2 206.0 12.8 22.5 -26.3 22.5 -25.8 22.2 -24.6 22.4 -25.6
2025-11-25T20:27:20.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:27:20.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:27:20.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.768502
2025-11-25T20:27:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:27:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:27:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:27:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:27:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:27:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:27:11', tmtdew=27.48, humidity=15.7, cloud=0.0, wind=13.31, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:27:11', seeing=1.48, atlas_timestamp='2025-11-25T18:26:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.03225000000000122, 0.03775000000000084, -0.08250000000000135, -0.00849999999999973, 0.06925000000000026, 0.008000000000000895, 0.03325000000000067, -0.03250000000000064, 0.051000000000000156, 0.017250000000000654, 0.03849999999999909, 0.02149999999999963, 0.17825000000000024, -0.03200000000000003, -0.03200000000000003, 0.008250000000000313, 0.05349999999999966, 0.009999999999999787, -0.03375000000000128, 0.06700000000000017, 0.039749999999997954, 0.013750000000001705, -0.07124999999999915, -0.023000000000001464, 0.07249999999999979, 0.08575000000000088, 0.04300000000000104, 0.02400000000000091, 0.08800000000000097, 0.13700000000000045, 0.04650000000000176, 0.07974999999999888], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:27:20.334 [DEBUG] [Thread-5215] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:27:20.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:27:20.430 [DEBUG] [Thread-5218] [transport.py] [_log()] starting thread (client mode): 0x70d3a410
2025-11-25T20:27:20.430 [DEBUG] [Thread-5218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:27:20.445 [DEBUG] [Thread-5218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:27:20.445 [INFO] [Thread-5218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:27:20.453 [DEBUG] [Thread-5218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:27:20.453 [DEBUG] [Thread-5218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:27:20.453 [DEBUG] [Thread-5218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:27:20.453 [DEBUG] [Thread-5218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:27:20.453 [DEBUG] [Thread-5218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:27:20.453 [DEBUG] [Thread-5218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:27:20.453 [DEBUG] [Thread-5218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:27:20.453 [DEBUG] [Thread-5218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] client lang: <none>
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] server lang: <none>
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] kex follows: False
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] Compression: none
2025-11-25T20:27:20.454 [DEBUG] [Thread-5218] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:27:20.512 [DEBUG] [Thread-5218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:27:20.513 [DEBUG] [Thread-5218] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:27:20.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:27:20.514 [DEBUG] [Thread-5218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:27:20.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:27:20.569 [DEBUG] [Thread-5218] [transport.py] [_log()] userauth is OK
2025-11-25T20:27:20.569 [DEBUG] [Thread-5218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:27:20.569 [DEBUG] [Thread-5218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:27:20.569 [DEBUG] [Thread-5218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:27:20.569 [DEBUG] [Thread-5218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:27:20.588 [INFO] [Thread-5218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:27:20.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:27:20.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:27:21.470 [DEBUG] [Thread-5218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:27:21.471 [DEBUG] [Thread-5218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:27:21.519 [DEBUG] [Thread-5218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:27:21.519 [DEBUG] [Thread-5218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:27:21.528 [DEBUG] [Thread-5218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:27:21.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:27:21.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:27:21.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:27:21.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:27:21.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:27:21.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:27:21.563 [DEBUG] [Thread-5218] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:27:28.703 [DEBUG] [Thread-5220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:27:29.619 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:27:29.621 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:27:43.763 [DEBUG] [Thread-5221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:27:51.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:27:51.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:27:51.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:27:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 27, 43), 27.29, 15.86, 0.0, 17.79, 22.41, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:27:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:27:43
2025-11-25T20:27:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:27:52.491 [DEBUG] [Thread-5222] [transport.py] [_log()] starting thread (client mode): 0x70d38880
2025-11-25T20:27:52.491 [DEBUG] [Thread-5222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:27:52.511 [DEBUG] [Thread-5222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:27:52.511 [INFO] [Thread-5222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] client lang: <none>
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] server lang: <none>
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] kex follows: False
2025-11-25T20:27:52.514 [DEBUG] [Thread-5222] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:27:52.515 [DEBUG] [Thread-5222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:27:52.515 [DEBUG] [Thread-5222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:27:52.515 [DEBUG] [Thread-5222] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:27:52.515 [DEBUG] [Thread-5222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:27:52.515 [DEBUG] [Thread-5222] [transport.py] [_log()] Compression: none
2025-11-25T20:27:52.515 [DEBUG] [Thread-5222] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:27:52.526 [DEBUG] [Thread-5222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:27:52.526 [DEBUG] [Thread-5222] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:27:52.526 [DEBUG] [Thread-5222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:27:52.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:27:52.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:27:52.568 [DEBUG] [Thread-5222] [transport.py] [_log()] userauth is OK
2025-11-25T20:27:52.568 [DEBUG] [Thread-5222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:27:52.568 [DEBUG] [Thread-5222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:27:52.569 [DEBUG] [Thread-5222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:27:52.569 [DEBUG] [Thread-5222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:27:52.582 [INFO] [Thread-5222] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:27:52.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:27:53.233 [DEBUG] [Thread-5222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:27:53.233 [DEBUG] [Thread-5222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:27:53.233 [DEBUG] [Thread-5222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:27:53.274 [DEBUG] [Thread-5222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:27:53.274 [DEBUG] [Thread-5222] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:27:53.277 [DEBUG] [Thread-5222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:27:53.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:27:53.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:27:53.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:27:53.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:27:53.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:27:53.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:27:53.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:27:53.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:27:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:27:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.768849 -999.00  +22.50   5.52     21   -0.80 1 1 1 1 1     0    0 22.09 -106.13 ZNESW 13.6 5.5 201.5 15.1 22.5 -26.3 22.5 -25.6 22.2 -24.5 22.4 -25.6
2025-11-25T20:27:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:27:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:27:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.768849
2025-11-25T20:27:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:27:53.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:27:53.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:27:53.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:27:53.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:27:53.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:27:43', tmtdew=27.29, humidity=15.86, cloud=0.0, wind=17.79, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:27:43', seeing=1.48, atlas_timestamp='2025-11-25T18:27:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.03225000000000122, 0.03775000000000084, -0.08250000000000135, -0.00849999999999973, 0.06925000000000026, 0.008000000000000895, 0.03325000000000067, -0.03250000000000064, 0.051000000000000156, 0.017250000000000654, 0.03849999999999909, 0.02149999999999963, 0.17825000000000024, -0.03200000000000003, -0.03200000000000003, 0.008250000000000313, 0.05349999999999966, 0.009999999999999787, -0.03375000000000128, 0.06700000000000017, 0.039749999999997954, 0.013750000000001705, -0.07124999999999915, -0.023000000000001464, 0.07249999999999979, 0.08575000000000088, 0.04300000000000104, 0.02400000000000091, 0.08800000000000097, 0.13700000000000045, 0.04650000000000176, 0.07974999999999888], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:27:53.305 [DEBUG] [Thread-5222] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:27:53.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:27:53.391 [DEBUG] [Thread-5225] [transport.py] [_log()] starting thread (client mode): 0x70d76830
2025-11-25T20:27:53.391 [DEBUG] [Thread-5225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:27:53.408 [DEBUG] [Thread-5225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:27:53.409 [INFO] [Thread-5225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:27:53.416 [DEBUG] [Thread-5225] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:27:53.417 [DEBUG] [Thread-5225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:27:53.417 [DEBUG] [Thread-5225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:27:53.417 [DEBUG] [Thread-5225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:27:53.417 [DEBUG] [Thread-5225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:27:53.417 [DEBUG] [Thread-5225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:27:53.417 [DEBUG] [Thread-5225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:27:53.417 [DEBUG] [Thread-5225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:27:53.418 [DEBUG] [Thread-5225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:27:53.418 [DEBUG] [Thread-5225] [transport.py] [_log()] client lang: <none>
2025-11-25T20:27:53.418 [DEBUG] [Thread-5225] [transport.py] [_log()] server lang: <none>
2025-11-25T20:27:53.418 [DEBUG] [Thread-5225] [transport.py] [_log()] kex follows: False
2025-11-25T20:27:53.418 [DEBUG] [Thread-5225] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:27:53.418 [DEBUG] [Thread-5225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:27:53.418 [DEBUG] [Thread-5225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:27:53.418 [DEBUG] [Thread-5225] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:27:53.419 [DEBUG] [Thread-5225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:27:53.419 [DEBUG] [Thread-5225] [transport.py] [_log()] Compression: none
2025-11-25T20:27:53.419 [DEBUG] [Thread-5225] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:27:53.476 [DEBUG] [Thread-5225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:27:53.477 [DEBUG] [Thread-5225] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:27:53.477 [DEBUG] [Thread-5225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:27:53.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:27:53.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:27:53.533 [DEBUG] [Thread-5225] [transport.py] [_log()] userauth is OK
2025-11-25T20:27:53.533 [DEBUG] [Thread-5225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:27:53.533 [DEBUG] [Thread-5225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:27:53.533 [DEBUG] [Thread-5225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:27:53.533 [DEBUG] [Thread-5225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:27:53.553 [INFO] [Thread-5225] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:27:53.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:27:53.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:27:54.487 [DEBUG] [Thread-5225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:27:54.487 [DEBUG] [Thread-5225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:27:54.535 [DEBUG] [Thread-5225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:27:54.535 [DEBUG] [Thread-5225] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:27:54.544 [DEBUG] [Thread-5225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:27:54.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:27:54.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:27: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
2025-11-25T20:27:54.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:27:54.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:27:54.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:27:54.581 [DEBUG] [Thread-5225] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:27:56.411 [DEBUG] [Thread-5227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:27:58.793 [DEBUG] [Thread-5228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:13.844 [DEBUG] [Thread-5229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:24.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:28:24.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:28:24.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:28:25.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 28, 15), 27.28, 15.88, 0.0, 18.92, 22.41, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:28:25.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:28:15
2025-11-25T20:28:25.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:28:25.570 [DEBUG] [Thread-5230] [transport.py] [_log()] starting thread (client mode): 0x70d1ea10
2025-11-25T20:28:25.570 [DEBUG] [Thread-5230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:28:25.583 [DEBUG] [Thread-5230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:28:25.583 [INFO] [Thread-5230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] client lang: <none>
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] server lang: <none>
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] kex follows: False
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] Compression: none
2025-11-25T20:28:25.586 [DEBUG] [Thread-5230] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:28:25.601 [DEBUG] [Thread-5230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:28:25.601 [DEBUG] [Thread-5230] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:28:25.601 [DEBUG] [Thread-5230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:28:25.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:28:25.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:28:25.602 [DEBUG] [Thread-5230] [transport.py] [_log()] userauth is OK
2025-11-25T20:28:25.602 [DEBUG] [Thread-5230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:28:25.602 [DEBUG] [Thread-5230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:28:25.602 [DEBUG] [Thread-5230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:28:25.602 [DEBUG] [Thread-5230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:28:25.616 [INFO] [Thread-5230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:28:25.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:28:26.186 [DEBUG] [Thread-5230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:28:26.186 [DEBUG] [Thread-5230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:28:26.187 [DEBUG] [Thread-5230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:28:26.227 [DEBUG] [Thread-5230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:28:26.227 [DEBUG] [Thread-5230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:28:26.229 [DEBUG] [Thread-5230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:28:26.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:28:26.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:28:26.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:28:26.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:28:26.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:28:26.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:28:26.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:28:26.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:28:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:28:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.769196 -999.00  +22.50   6.90     21   -0.90 1 1 1 1 1     0    0 21.96 -118.34 ZNESW 11.3 6.9 205.5 16.0 22.5 -26.2 22.5 -25.7 22.3 -24.6 22.4 -25.5
2025-11-25T20:28:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:28:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:28:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.769196
2025-11-25T20:28:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:28:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:28:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:28:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:28:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:28:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:28:15', tmtdew=27.28, humidity=15.88, cloud=0.0, wind=18.92, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:28:15', seeing=1.53, atlas_timestamp='2025-11-25T18:27:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.03225000000000122, 0.03775000000000084, -0.08250000000000135, -0.00849999999999973, 0.06925000000000026, 0.008000000000000895, 0.03325000000000067, -0.03250000000000064, 0.051000000000000156, 0.017250000000000654, 0.03849999999999909, 0.02149999999999963, 0.17825000000000024, -0.03200000000000003, -0.03200000000000003, 0.008250000000000313, 0.05349999999999966, 0.009999999999999787, -0.03375000000000128, 0.06700000000000017, 0.039749999999997954, 0.013750000000001705, -0.07124999999999915, -0.023000000000001464, 0.07249999999999979, 0.08575000000000088, 0.04300000000000104, 0.02400000000000091, 0.08800000000000097, 0.13700000000000045, 0.04650000000000176, 0.07974999999999888], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:28:26.248 [DEBUG] [Thread-5230] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:28:26.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:28:26.334 [DEBUG] [Thread-5233] [transport.py] [_log()] starting thread (client mode): 0x70d74a00
2025-11-25T20:28:26.335 [DEBUG] [Thread-5233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:28:26.349 [DEBUG] [Thread-5233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:28:26.349 [INFO] [Thread-5233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] client lang: <none>
2025-11-25T20:28:26.357 [DEBUG] [Thread-5233] [transport.py] [_log()] server lang: <none>
2025-11-25T20:28:26.358 [DEBUG] [Thread-5233] [transport.py] [_log()] kex follows: False
2025-11-25T20:28:26.358 [DEBUG] [Thread-5233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:28:26.358 [DEBUG] [Thread-5233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:28:26.358 [DEBUG] [Thread-5233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:28:26.358 [DEBUG] [Thread-5233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:28:26.358 [DEBUG] [Thread-5233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:28:26.358 [DEBUG] [Thread-5233] [transport.py] [_log()] Compression: none
2025-11-25T20:28:26.358 [DEBUG] [Thread-5233] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:28:26.415 [DEBUG] [Thread-5233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:28:26.415 [DEBUG] [Thread-5233] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:28:26.416 [DEBUG] [Thread-5233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:28:26.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:28:26.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:28:26.473 [DEBUG] [Thread-5233] [transport.py] [_log()] userauth is OK
2025-11-25T20:28:26.473 [DEBUG] [Thread-5233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:28:26.473 [DEBUG] [Thread-5233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:28:26.473 [DEBUG] [Thread-5233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:28:26.473 [DEBUG] [Thread-5233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:28:26.487 [INFO] [Thread-5233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:28:26.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:28:26.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:28:27.400 [DEBUG] [Thread-5233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:28:27.400 [DEBUG] [Thread-5233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:28:27.448 [DEBUG] [Thread-5233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:28:27.448 [DEBUG] [Thread-5233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:28:27.458 [DEBUG] [Thread-5233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:28:27.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:28:27.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:28:27.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:28:27.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:28:27.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:28:27.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:28:27.496 [DEBUG] [Thread-5233] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:28:28.878 [DEBUG] [Thread-5235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:29.824 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:29.825 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:36.727 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:43.935 [DEBUG] [Thread-5236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:44.873 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:50.349 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:56.477 [DEBUG] [Thread-5237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:28:57.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:28:57.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:28:58.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 28, 47), 27.27, 15.85, 0.0, 19.11, 22.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:28:58.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:28:47
2025-11-25T20:28:58.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:28:58.447 [DEBUG] [Thread-5238] [transport.py] [_log()] starting thread (client mode): 0x70d3bdc0
2025-11-25T20:28:58.447 [DEBUG] [Thread-5238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:28:58.470 [DEBUG] [Thread-5238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:28:58.470 [INFO] [Thread-5238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:28:58.474 [DEBUG] [Thread-5238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:28:58.474 [DEBUG] [Thread-5238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:28:58.474 [DEBUG] [Thread-5238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:28:58.474 [DEBUG] [Thread-5238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:28:58.474 [DEBUG] [Thread-5238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:28:58.474 [DEBUG] [Thread-5238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:28:58.474 [DEBUG] [Thread-5238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:28:58.474 [DEBUG] [Thread-5238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:28:58.474 [DEBUG] [Thread-5238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] client lang: <none>
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] server lang: <none>
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] kex follows: False
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] Compression: none
2025-11-25T20:28:58.475 [DEBUG] [Thread-5238] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:28:58.486 [DEBUG] [Thread-5238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:28:58.487 [DEBUG] [Thread-5238] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:28:58.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:28:58.488 [DEBUG] [Thread-5238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:28:58.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:28:58.490 [DEBUG] [Thread-5238] [transport.py] [_log()] userauth is OK
2025-11-25T20:28:58.491 [DEBUG] [Thread-5238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:28:58.491 [DEBUG] [Thread-5238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:28:58.491 [DEBUG] [Thread-5238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:28:58.491 [DEBUG] [Thread-5238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:28:58.512 [INFO] [Thread-5238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:28:58.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:28:58.970 [DEBUG] [Thread-5240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:28:59.173 [DEBUG] [Thread-5238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:28:59.173 [DEBUG] [Thread-5238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:28:59.174 [DEBUG] [Thread-5238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:28:59.214 [DEBUG] [Thread-5238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:28:59.214 [DEBUG] [Thread-5238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:28:59.217 [DEBUG] [Thread-5238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:28:59.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:28:59.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:28:59.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:28:59.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:28:59.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:28:59.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:28:59.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:28:59.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:28:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:28:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.769544 -999.00  +22.50  11.80     21   -0.70 1 1 1 1 1     0    0 21.75 -124.77 ZNESW 15.1 11.8 220.6 18.6 22.5 -26.1 22.5 -25.6 22.3 -24.3 22.4 -25.4
2025-11-25T20:28:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:28:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:28:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.769544
2025-11-25T20:28:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:28:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:28:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:28:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:28:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:28:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:28:47', tmtdew=27.27, humidity=15.85, cloud=0.0, wind=19.11, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:28:47', seeing=1.75, atlas_timestamp='2025-11-25T18:28:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.03225000000000122, 0.03775000000000084, -0.08250000000000135, -0.00849999999999973, 0.06925000000000026, 0.008000000000000895, 0.03325000000000067, -0.03250000000000064, 0.051000000000000156, 0.017250000000000654, 0.03849999999999909, 0.02149999999999963, 0.17825000000000024, -0.03200000000000003, -0.03200000000000003, 0.008250000000000313, 0.05349999999999966, 0.009999999999999787, -0.03375000000000128, 0.06700000000000017, 0.039749999999997954, 0.013750000000001705, -0.07124999999999915, -0.023000000000001464, 0.07249999999999979, 0.08575000000000088, 0.04300000000000104, 0.02400000000000091, 0.08800000000000097, 0.13700000000000045, 0.04650000000000176, 0.07974999999999888], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:28:59.238 [DEBUG] [Thread-5238] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:28:59.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:28:59.330 [DEBUG] [Thread-5242] [transport.py] [_log()] starting thread (client mode): 0x70d01e10
2025-11-25T20:28:59.330 [DEBUG] [Thread-5242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:28:59.348 [DEBUG] [Thread-5242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:28:59.348 [INFO] [Thread-5242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] client lang: <none>
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] server lang: <none>
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] kex follows: False
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] Compression: none
2025-11-25T20:28:59.359 [DEBUG] [Thread-5242] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:28:59.417 [DEBUG] [Thread-5242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:28:59.417 [DEBUG] [Thread-5242] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:28:59.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:28:59.417 [DEBUG] [Thread-5242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:28:59.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:28:59.472 [DEBUG] [Thread-5242] [transport.py] [_log()] userauth is OK
2025-11-25T20:28:59.472 [DEBUG] [Thread-5242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:28:59.472 [DEBUG] [Thread-5242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:28:59.472 [DEBUG] [Thread-5242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:28:59.472 [DEBUG] [Thread-5242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:28:59.486 [INFO] [Thread-5242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:28:59.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:28:59.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:29:00.381 [DEBUG] [Thread-5242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:29:00.381 [DEBUG] [Thread-5242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:29:00.429 [DEBUG] [Thread-5242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:29:00.429 [DEBUG] [Thread-5242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:29:00.437 [DEBUG] [Thread-5242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:29:00.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:29:00.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:29:00.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:29:00.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:29:00.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:29:00.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:29:00.469 [DEBUG] [Thread-5242] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:29:14.002 [DEBUG] [Thread-5244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:29:17.177 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:29:29.058 [DEBUG] [Thread-5245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:29:30.027 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:29:30.028 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:29:30.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:29:30.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:29: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
2025-11-25T20:29:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 29, 19), 27.28, 15.83, 0.0, 17.86, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:29:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:29:19
2025-11-25T20:29:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:29:31.367 [DEBUG] [Thread-5246] [transport.py] [_log()] starting thread (client mode): 0x70d02c80
2025-11-25T20:29:31.368 [DEBUG] [Thread-5246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:29:31.387 [DEBUG] [Thread-5246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:29:31.387 [INFO] [Thread-5246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:29:31.390 [DEBUG] [Thread-5246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:29:31.390 [DEBUG] [Thread-5246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:29:31.390 [DEBUG] [Thread-5246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] client lang: <none>
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] server lang: <none>
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] kex follows: False
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] Compression: none
2025-11-25T20:29:31.391 [DEBUG] [Thread-5246] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:29:31.407 [DEBUG] [Thread-5246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:29:31.407 [DEBUG] [Thread-5246] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:29:31.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:29:31.408 [DEBUG] [Thread-5246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:29:31.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:29:31.410 [DEBUG] [Thread-5246] [transport.py] [_log()] userauth is OK
2025-11-25T20:29:31.411 [DEBUG] [Thread-5246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:29:31.411 [DEBUG] [Thread-5246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:29:31.411 [DEBUG] [Thread-5246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:29:31.411 [DEBUG] [Thread-5246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:29:31.436 [INFO] [Thread-5246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:29:31.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:29:32.234 [DEBUG] [Thread-5246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:29:32.234 [DEBUG] [Thread-5246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:29:32.235 [DEBUG] [Thread-5246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:29:32.276 [DEBUG] [Thread-5246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:29:32.276 [DEBUG] [Thread-5246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:29:32.279 [DEBUG] [Thread-5246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:29:32.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:29:32.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:29:32.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:29:32.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:29:32.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:29:32.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:29:32.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:29:32.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:29:32.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:29:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.770238 -999.00  +22.50  12.07     21   -0.70 1 1 1 1 1     0    0 21.19 -127.70 ZNESW 8.7 12.1 204.8 16.3 22.5 -26.2 22.5 -25.7 22.3 -24.5 22.4 -25.5
2025-11-25T20:29:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:29:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:29:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.770238
2025-11-25T20:29:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:29:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:29:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:29:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:29:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:29:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:29:19', tmtdew=27.28, humidity=15.83, cloud=0.0, wind=17.86, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:29:19', seeing=1.75, atlas_timestamp='2025-11-25T18:29:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.03225000000000122, 0.03775000000000084, -0.08250000000000135, -0.00849999999999973, 0.06925000000000026, 0.008000000000000895, 0.03325000000000067, -0.03250000000000064, 0.051000000000000156, 0.017250000000000654, 0.03849999999999909, 0.02149999999999963, 0.17825000000000024, -0.03200000000000003, -0.03200000000000003, 0.008250000000000313, 0.05349999999999966, 0.009999999999999787, -0.03375000000000128, 0.06700000000000017, 0.039749999999997954, 0.013750000000001705, -0.07124999999999915, -0.023000000000001464, 0.07249999999999979, 0.08575000000000088, 0.04300000000000104, 0.02400000000000091, 0.08800000000000097, 0.13700000000000045, 0.04650000000000176, 0.07974999999999888], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:29:32.305 [DEBUG] [Thread-5246] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:29:32.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:29:32.400 [DEBUG] [Thread-5249] [transport.py] [_log()] starting thread (client mode): 0x70d77550
2025-11-25T20:29:32.400 [DEBUG] [Thread-5249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:29:32.415 [DEBUG] [Thread-5249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:29:32.415 [INFO] [Thread-5249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:29:32.423 [DEBUG] [Thread-5249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:29:32.423 [DEBUG] [Thread-5249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:29:32.423 [DEBUG] [Thread-5249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:29:32.424 [DEBUG] [Thread-5249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:29:32.424 [DEBUG] [Thread-5249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:29:32.424 [DEBUG] [Thread-5249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:29:32.424 [DEBUG] [Thread-5249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:29:32.424 [DEBUG] [Thread-5249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:29:32.424 [DEBUG] [Thread-5249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:29:32.424 [DEBUG] [Thread-5249] [transport.py] [_log()] client lang: <none>
2025-11-25T20:29:32.424 [DEBUG] [Thread-5249] [transport.py] [_log()] server lang: <none>
2025-11-25T20:29:32.424 [DEBUG] [Thread-5249] [transport.py] [_log()] kex follows: False
2025-11-25T20:29:32.425 [DEBUG] [Thread-5249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:29:32.425 [DEBUG] [Thread-5249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:29:32.425 [DEBUG] [Thread-5249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:29:32.425 [DEBUG] [Thread-5249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:29:32.425 [DEBUG] [Thread-5249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:29:32.425 [DEBUG] [Thread-5249] [transport.py] [_log()] Compression: none
2025-11-25T20:29:32.425 [DEBUG] [Thread-5249] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:29:32.481 [DEBUG] [Thread-5249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:29:32.482 [DEBUG] [Thread-5249] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:29:32.482 [DEBUG] [Thread-5249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:29:32.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:29:32.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:29:32.540 [DEBUG] [Thread-5249] [transport.py] [_log()] userauth is OK
2025-11-25T20:29:32.541 [DEBUG] [Thread-5249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:29:32.541 [DEBUG] [Thread-5249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:29:32.541 [DEBUG] [Thread-5249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:29:32.541 [DEBUG] [Thread-5249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:29:32.560 [INFO] [Thread-5249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:29:32.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:29:32.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:29:33.411 [DEBUG] [Thread-5249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:29:33.411 [DEBUG] [Thread-5249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:29:33.459 [DEBUG] [Thread-5249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:29:33.459 [DEBUG] [Thread-5249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:29:33.468 [DEBUG] [Thread-5249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:29:33.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:29: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')
2025-11-25T20:29:33.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:29:33.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:29:33.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:29:33.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:29:33.505 [DEBUG] [Thread-5249] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:29:44.095 [DEBUG] [Thread-5251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:29:50.361 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:29:56.534 [DEBUG] [Thread-5252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:29:59.143 [DEBUG] [Thread-5253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:30:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:30:03.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:30:03.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:30:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 29, 51), 27.24, 15.95, 0.0, 19.04, 22.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:30:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:29:51
2025-11-25T20:30:04.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:30:04.446 [DEBUG] [Thread-5254] [transport.py] [_log()] starting thread (client mode): 0x70d3a4a0
2025-11-25T20:30:04.446 [DEBUG] [Thread-5254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:30:04.461 [DEBUG] [Thread-5254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:30:04.461 [INFO] [Thread-5254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] client lang: <none>
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] server lang: <none>
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] kex follows: False
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] Compression: none
2025-11-25T20:30:04.465 [DEBUG] [Thread-5254] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:30:04.483 [DEBUG] [Thread-5254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:30:04.483 [DEBUG] [Thread-5254] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:30:04.484 [DEBUG] [Thread-5254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:30:04.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:30:04.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:30:04.486 [DEBUG] [Thread-5254] [transport.py] [_log()] userauth is OK
2025-11-25T20:30:04.486 [DEBUG] [Thread-5254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:30:04.486 [DEBUG] [Thread-5254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:30:04.486 [DEBUG] [Thread-5254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:30:04.486 [DEBUG] [Thread-5254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:30:04.501 [INFO] [Thread-5254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:30:04.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:30:05.357 [DEBUG] [Thread-5254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:30:05.357 [DEBUG] [Thread-5254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:30:05.357 [DEBUG] [Thread-5254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:30:05.398 [DEBUG] [Thread-5254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:30:05.398 [DEBUG] [Thread-5254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:30:05.402 [DEBUG] [Thread-5254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:30:05.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:30:05.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:30:05.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:30:05.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:30:05.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:30:05.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:30:05.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:30:05.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:30:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:30:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.770585 -999.00  +22.40  10.62     21   -0.70 1 1 1 1 1     0    0 20.57 -138.50 ZNESW 11.5 10.6 213.2 16.5 22.5 -26.1 22.5 -25.7 22.2 -24.5 22.4 -25.6
2025-11-25T20:30:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:30:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:30:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.770585
2025-11-25T20:30:05.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:30:05.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:30:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:30:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:30:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:30:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:29:51', tmtdew=27.24, humidity=15.95, cloud=0.0, wind=19.04, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:29:51', seeing=1.47, atlas_timestamp='2025-11-25T18:29:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025750000000000384, 0.03225000000000122, 0.03775000000000084, -0.08250000000000135, -0.00849999999999973, 0.06925000000000026, 0.008000000000000895, 0.03325000000000067, -0.03250000000000064, 0.051000000000000156, 0.017250000000000654, 0.03849999999999909, 0.02149999999999963, 0.17825000000000024, -0.03200000000000003, -0.03200000000000003, 0.008250000000000313, 0.05349999999999966, 0.009999999999999787, -0.03375000000000128, 0.06700000000000017, 0.039749999999997954, 0.013750000000001705, -0.07124999999999915, -0.023000000000001464, 0.07249999999999979, 0.08575000000000088, 0.04300000000000104, 0.02400000000000091, 0.08800000000000097, 0.13700000000000045, 0.04650000000000176, 0.07974999999999888], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:30:05.428 [DEBUG] [Thread-5254] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:30:05.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:30:05.524 [DEBUG] [Thread-5257] [transport.py] [_log()] starting thread (client mode): 0x70d1ffa0
2025-11-25T20:30:05.524 [DEBUG] [Thread-5257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:30:05.539 [DEBUG] [Thread-5257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:30:05.540 [INFO] [Thread-5257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:30:05.547 [DEBUG] [Thread-5257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:30:05.547 [DEBUG] [Thread-5257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:30:05.547 [DEBUG] [Thread-5257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:30:05.547 [DEBUG] [Thread-5257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:30:05.547 [DEBUG] [Thread-5257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:30:05.547 [DEBUG] [Thread-5257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:30:05.547 [DEBUG] [Thread-5257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:30:05.547 [DEBUG] [Thread-5257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:30:05.547 [DEBUG] [Thread-5257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] client lang: <none>
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] server lang: <none>
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] kex follows: False
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] Compression: none
2025-11-25T20:30:05.548 [DEBUG] [Thread-5257] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:30:05.608 [DEBUG] [Thread-5257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:30:05.609 [DEBUG] [Thread-5257] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:30:05.609 [DEBUG] [Thread-5257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:30:05.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:30:05.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:30:05.665 [DEBUG] [Thread-5257] [transport.py] [_log()] userauth is OK
2025-11-25T20:30:05.665 [DEBUG] [Thread-5257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:30:05.665 [DEBUG] [Thread-5257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:30:05.665 [DEBUG] [Thread-5257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:30:05.665 [DEBUG] [Thread-5257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:30:05.690 [INFO] [Thread-5257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:30:05.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:30:05.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:30:06.546 [DEBUG] [Thread-5257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:30:06.546 [DEBUG] [Thread-5257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:30:06.594 [DEBUG] [Thread-5257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:30:06.594 [DEBUG] [Thread-5257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:30:06.603 [DEBUG] [Thread-5257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:30:06.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:30:06.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:30:06.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:30:06.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:30:06.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:30:06.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:30:06.640 [DEBUG] [Thread-5257] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:30:10.771 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:30:14.177 [DEBUG] [Thread-5259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:30:29.216 [DEBUG] [Thread-5260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:30:30.228 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:30:30.230 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:30:36.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:30:36.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:30:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:30:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 30, 23), 27.3, 15.86, 0.0, 19.97, 22.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:30:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:30:23
2025-11-25T20:30:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:30:37.582 [DEBUG] [Thread-5261] [transport.py] [_log()] starting thread (client mode): 0x70d747f0
2025-11-25T20:30:37.582 [DEBUG] [Thread-5261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:30:37.598 [DEBUG] [Thread-5261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:30:37.598 [INFO] [Thread-5261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:30:37.601 [DEBUG] [Thread-5261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] client lang: <none>
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] server lang: <none>
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] kex follows: False
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:30:37.602 [DEBUG] [Thread-5261] [transport.py] [_log()] Compression: none
2025-11-25T20:30:37.603 [DEBUG] [Thread-5261] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:30:37.620 [DEBUG] [Thread-5261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:30:37.621 [DEBUG] [Thread-5261] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:30:37.622 [DEBUG] [Thread-5261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:30:37.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:30:37.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:30:37.624 [DEBUG] [Thread-5261] [transport.py] [_log()] userauth is OK
2025-11-25T20:30:37.624 [DEBUG] [Thread-5261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:30:37.625 [DEBUG] [Thread-5261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:30:37.625 [DEBUG] [Thread-5261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:30:37.625 [DEBUG] [Thread-5261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:30:37.660 [INFO] [Thread-5261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:30:37.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:30:38.442 [DEBUG] [Thread-5261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:30:38.442 [DEBUG] [Thread-5261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:30:38.442 [DEBUG] [Thread-5261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:30:38.483 [DEBUG] [Thread-5261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:30:38.483 [DEBUG] [Thread-5261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:30:38.487 [DEBUG] [Thread-5261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:30:38.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:30:38.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:30:38.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:30:38.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:30:38.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:30:38.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:30:38.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:30:38.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:30:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:30:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.770932 -999.00  +22.40  10.74     21   -0.80 1 1 1 1 1     0    0 20.39 -148.07 ZNESW 11.7 10.7 204.4 19.0 22.5 -26.1 -999.0 -999.0 22.2 -24.4 22.4 -25.4
2025-11-25T20:30:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:30:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:30:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.770932
2025-11-25T20:30:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:30:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:30:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:30:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:30:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:30:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:30:23', tmtdew=27.3, humidity=15.86, cloud=0.0, wind=19.97, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:30:23', seeing=1.97, atlas_timestamp='2025-11-25T18:30:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:30:38.515 [DEBUG] [Thread-5261] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:30:38.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:30:38.611 [DEBUG] [Thread-5264] [transport.py] [_log()] starting thread (client mode): 0x70d03130
2025-11-25T20:30:38.611 [DEBUG] [Thread-5264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:30:38.627 [DEBUG] [Thread-5264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:30:38.627 [INFO] [Thread-5264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:30:38.634 [DEBUG] [Thread-5264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] client lang: <none>
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] server lang: <none>
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] kex follows: False
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] Compression: none
2025-11-25T20:30:38.635 [DEBUG] [Thread-5264] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:30:38.692 [DEBUG] [Thread-5264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:30:38.692 [DEBUG] [Thread-5264] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:30:38.693 [DEBUG] [Thread-5264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:30:38.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:30:38.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:30:38.748 [DEBUG] [Thread-5264] [transport.py] [_log()] userauth is OK
2025-11-25T20:30:38.749 [DEBUG] [Thread-5264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:30:38.749 [DEBUG] [Thread-5264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:30:38.749 [DEBUG] [Thread-5264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:30:38.749 [DEBUG] [Thread-5264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:30:38.768 [INFO] [Thread-5264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:30:38.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:30:38.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:30:39.603 [DEBUG] [Thread-5264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:30:39.603 [DEBUG] [Thread-5264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:30:39.651 [DEBUG] [Thread-5264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:30:39.651 [DEBUG] [Thread-5264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:30:39.660 [DEBUG] [Thread-5264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:30:39.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:30:39.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:30:39.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:30:39.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:30:39.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:30:39.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:30:39.697 [DEBUG] [Thread-5264] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:30:44.254 [DEBUG] [Thread-5266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:30:56.586 [DEBUG] [Thread-5267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:30:59.303 [DEBUG] [Thread-5268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:31:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:31:09.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:31:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:31:10.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 30, 55), 27.25, 15.86, 0.0, 17.73, 22.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:31:10.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:30:55
2025-11-25T20:31:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:31:10.650 [DEBUG] [Thread-5269] [transport.py] [_log()] starting thread (client mode): 0x70d75720
2025-11-25T20:31:10.650 [DEBUG] [Thread-5269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:31:10.670 [DEBUG] [Thread-5269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:31:10.670 [INFO] [Thread-5269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:31:10.673 [DEBUG] [Thread-5269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:31:10.673 [DEBUG] [Thread-5269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:31:10.673 [DEBUG] [Thread-5269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] client lang: <none>
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] server lang: <none>
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] kex follows: False
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:31:10.674 [DEBUG] [Thread-5269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:31:10.675 [DEBUG] [Thread-5269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:31:10.675 [DEBUG] [Thread-5269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:31:10.675 [DEBUG] [Thread-5269] [transport.py] [_log()] Compression: none
2025-11-25T20:31:10.675 [DEBUG] [Thread-5269] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:31:10.693 [DEBUG] [Thread-5269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:31:10.693 [DEBUG] [Thread-5269] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:31:10.694 [DEBUG] [Thread-5269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:31:10.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:31:10.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:31:10.696 [DEBUG] [Thread-5269] [transport.py] [_log()] userauth is OK
2025-11-25T20:31:10.696 [DEBUG] [Thread-5269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:31:10.697 [DEBUG] [Thread-5269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:31:10.697 [DEBUG] [Thread-5269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:31:10.697 [DEBUG] [Thread-5269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:31:10.722 [INFO] [Thread-5269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:31:10.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:31:11.361 [DEBUG] [Thread-5269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:31:11.361 [DEBUG] [Thread-5269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:31:11.361 [DEBUG] [Thread-5269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:31:11.402 [DEBUG] [Thread-5269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:31:11.402 [DEBUG] [Thread-5269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:31:11.404 [DEBUG] [Thread-5269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:31:11.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:31:11.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:31:11.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:31:11.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:31:11.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:31:11.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:31:11.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:31:11.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.771280 -999.00  +22.40  13.13     21   -0.80 1 1 1 1 1     0    0 20.28 -158.05 ZNESW 16.2 13.1 207.6 18.1 22.5 -26.2 22.5 -25.7 22.2 -24.3 22.4 -25.4
2025-11-25T20:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.771280
2025-11-25T20:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:31:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:31:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:31:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:31:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:31:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:30:55', tmtdew=27.25, humidity=15.86, cloud=0.0, wind=17.73, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:30:55', seeing=1.57, atlas_timestamp='2025-11-25T18:30:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:31:11.429 [DEBUG] [Thread-5269] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:31:11.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:31:11.523 [DEBUG] [Thread-5272] [transport.py] [_log()] starting thread (client mode): 0x70d3bd90
2025-11-25T20:31:11.523 [DEBUG] [Thread-5272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:31:11.538 [DEBUG] [Thread-5272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:31:11.538 [INFO] [Thread-5272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] client lang: <none>
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] server lang: <none>
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] kex follows: False
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:31:11.545 [DEBUG] [Thread-5272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:31:11.546 [DEBUG] [Thread-5272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:31:11.546 [DEBUG] [Thread-5272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:31:11.546 [DEBUG] [Thread-5272] [transport.py] [_log()] Compression: none
2025-11-25T20:31:11.546 [DEBUG] [Thread-5272] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:31:11.605 [DEBUG] [Thread-5272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:31:11.606 [DEBUG] [Thread-5272] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:31:11.606 [DEBUG] [Thread-5272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:31:11.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:31:11.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:31:11.664 [DEBUG] [Thread-5272] [transport.py] [_log()] userauth is OK
2025-11-25T20:31:11.664 [DEBUG] [Thread-5272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:31:11.664 [DEBUG] [Thread-5272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:31:11.664 [DEBUG] [Thread-5272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:31:11.664 [DEBUG] [Thread-5272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:31:11.679 [INFO] [Thread-5272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:31:11.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:31:11.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:31:12.520 [DEBUG] [Thread-5272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:31:12.520 [DEBUG] [Thread-5272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:31:12.567 [DEBUG] [Thread-5272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:31:12.568 [DEBUG] [Thread-5272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:31:12.576 [DEBUG] [Thread-5272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:31:12.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:31: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')
2025-11-25T20:31: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
2025-11-25T20:31:12.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:31:12.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:31:12.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:31:12.611 [DEBUG] [Thread-5272] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:31:14.340 [DEBUG] [Thread-5274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:31:22.210 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:31:29.391 [DEBUG] [Thread-5275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:31:30.428 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:31:30.429 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:31:42.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:31:42.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:31:42.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:31:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 31, 27), 27.18, 15.95, 0.0, 18.44, 22.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:31:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:31:27
2025-11-25T20:31:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:31:43.523 [DEBUG] [Thread-5276] [transport.py] [_log()] starting thread (client mode): 0x70d1e650
2025-11-25T20:31:43.523 [DEBUG] [Thread-5276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:31:43.544 [DEBUG] [Thread-5276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:31:43.544 [INFO] [Thread-5276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] client lang: <none>
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] server lang: <none>
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] kex follows: False
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] Compression: none
2025-11-25T20:31:43.548 [DEBUG] [Thread-5276] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:31:43.569 [DEBUG] [Thread-5276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:31:43.569 [DEBUG] [Thread-5276] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:31:43.570 [DEBUG] [Thread-5276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:31:43.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:31:43.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:31:43.572 [DEBUG] [Thread-5276] [transport.py] [_log()] userauth is OK
2025-11-25T20:31:43.572 [DEBUG] [Thread-5276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:31:43.572 [DEBUG] [Thread-5276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:31:43.572 [DEBUG] [Thread-5276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:31:43.573 [DEBUG] [Thread-5276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:31:43.597 [INFO] [Thread-5276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:31:43.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:31:44.234 [DEBUG] [Thread-5276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:31:44.234 [DEBUG] [Thread-5276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:31:44.235 [DEBUG] [Thread-5276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:31:44.276 [DEBUG] [Thread-5276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:31:44.276 [DEBUG] [Thread-5276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:31:44.279 [DEBUG] [Thread-5276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:31:44.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:31:44.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:31:44.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:31:44.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:31:44.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:31:44.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:31:44.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:31:44.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.771627 -999.00  +22.40  10.47     21   -0.80 1 1 1 1 1     0    0 20.44 -167.70 ZNESW 12.5 10.5 210.4 18.0 22.5 -26.1 22.4 -25.5 22.2 -24.3 22.4 -25.3
2025-11-25T20:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:31:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.771627
2025-11-25T20:31:44.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:31:44.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:31:44.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:31:44.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:31:44.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:31:44.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:31:27', tmtdew=27.18, humidity=15.95, cloud=0.0, wind=18.44, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:31:27', seeing=1.86, atlas_timestamp='2025-11-25T18:31:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:31:44.303 [DEBUG] [Thread-5276] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:31:44.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:31:44.400 [DEBUG] [Thread-5279] [transport.py] [_log()] starting thread (client mode): 0x70d74820
2025-11-25T20:31:44.400 [DEBUG] [Thread-5279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:31:44.417 [DEBUG] [Thread-5279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:31:44.417 [INFO] [Thread-5279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:31:44.422 [DEBUG] [Thread-5281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:31:44.424 [DEBUG] [Thread-5279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] client lang: <none>
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] server lang: <none>
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] kex follows: False
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] Compression: none
2025-11-25T20:31:44.425 [DEBUG] [Thread-5279] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:31:44.484 [DEBUG] [Thread-5279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:31:44.484 [DEBUG] [Thread-5279] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:31:44.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:31:44.485 [DEBUG] [Thread-5279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:31:44.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:31:44.540 [DEBUG] [Thread-5279] [transport.py] [_log()] userauth is OK
2025-11-25T20:31:44.540 [DEBUG] [Thread-5279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:31:44.540 [DEBUG] [Thread-5279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:31:44.540 [DEBUG] [Thread-5279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:31:44.541 [DEBUG] [Thread-5279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:31:44.559 [INFO] [Thread-5279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:31:44.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:31:44.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:31:45.418 [DEBUG] [Thread-5279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:31:45.418 [DEBUG] [Thread-5279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:31:45.466 [DEBUG] [Thread-5279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:31:45.466 [DEBUG] [Thread-5279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:31:45.475 [DEBUG] [Thread-5279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:31:45.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:31:45.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:31:45.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:31:45.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:31:45.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:31:45.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:31:45.509 [DEBUG] [Thread-5279] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:31:56.655 [DEBUG] [Thread-5282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:31:59.484 [DEBUG] [Thread-5283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:32:14.519 [DEBUG] [Thread-5284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:32:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:32:15.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:32:15.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:32:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 31, 59), 27.27, 15.9, 0.0, 18.54, 22.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:32:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:31:59
2025-11-25T20:32:16.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:32:16.435 [DEBUG] [Thread-5285] [transport.py] [_log()] starting thread (client mode): 0x70d57190
2025-11-25T20:32:16.436 [DEBUG] [Thread-5285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:32:16.457 [DEBUG] [Thread-5285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:32:16.458 [INFO] [Thread-5285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:32:16.461 [DEBUG] [Thread-5285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] client lang: <none>
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] server lang: <none>
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] kex follows: False
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] Compression: none
2025-11-25T20:32:16.462 [DEBUG] [Thread-5285] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:32:16.479 [DEBUG] [Thread-5285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:32:16.480 [DEBUG] [Thread-5285] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:32:16.480 [DEBUG] [Thread-5285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:32:16.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:32:16.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:32:16.482 [DEBUG] [Thread-5285] [transport.py] [_log()] userauth is OK
2025-11-25T20:32:16.483 [DEBUG] [Thread-5285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:32:16.483 [DEBUG] [Thread-5285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:32:16.483 [DEBUG] [Thread-5285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:32:16.483 [DEBUG] [Thread-5285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:32:16.507 [INFO] [Thread-5285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:32:16.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:32:17.142 [DEBUG] [Thread-5285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:32:17.143 [DEBUG] [Thread-5285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:32:17.143 [DEBUG] [Thread-5285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:32:17.184 [DEBUG] [Thread-5285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:32:17.184 [DEBUG] [Thread-5285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:32:17.187 [DEBUG] [Thread-5285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:32:17.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:32:17.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:32:17.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:32:17.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:32:17.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:32:17.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:32:17.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:32:17.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:32:17.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:32:17.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.771974 -999.00  +22.50  10.19     21   -0.60 1 1 1 1 1     0    0 19.64 -170.47 ZNESW 12.1 10.2 196.0 17.6 22.5 -26.2 22.5 -25.3 22.1 -24.3 22.4 -25.3
2025-11-25T20:32:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:32:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:32:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.771974
2025-11-25T20:32:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:32:17.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:32:17.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:32:17.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:32:17.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:32:17.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:31:59', tmtdew=27.27, humidity=15.9, cloud=0.0, wind=18.54, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:31:59', seeing=1.82, atlas_timestamp='2025-11-25T18:31:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:32:17.212 [DEBUG] [Thread-5285] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:32:17.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:32:17.308 [DEBUG] [Thread-5288] [transport.py] [_log()] starting thread (client mode): 0x70d562f0
2025-11-25T20:32:17.308 [DEBUG] [Thread-5288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:32:17.323 [DEBUG] [Thread-5288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:32:17.323 [INFO] [Thread-5288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:32:17.331 [DEBUG] [Thread-5288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:32:17.331 [DEBUG] [Thread-5288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:32:17.331 [DEBUG] [Thread-5288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:32:17.331 [DEBUG] [Thread-5288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:32:17.331 [DEBUG] [Thread-5288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:32:17.331 [DEBUG] [Thread-5288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:32:17.331 [DEBUG] [Thread-5288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] client lang: <none>
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] server lang: <none>
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] kex follows: False
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] Compression: none
2025-11-25T20:32:17.332 [DEBUG] [Thread-5288] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:32:17.388 [DEBUG] [Thread-5288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:32:17.388 [DEBUG] [Thread-5288] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:32:17.389 [DEBUG] [Thread-5288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:32:17.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:32:17.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:32:17.444 [DEBUG] [Thread-5288] [transport.py] [_log()] userauth is OK
2025-11-25T20:32:17.444 [DEBUG] [Thread-5288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:32:17.445 [DEBUG] [Thread-5288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:32:17.445 [DEBUG] [Thread-5288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:32:17.445 [DEBUG] [Thread-5288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:32:17.465 [INFO] [Thread-5288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:32:17.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:32:17.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:32:18.279 [DEBUG] [Thread-5288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:32:18.279 [DEBUG] [Thread-5288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:32:18.327 [DEBUG] [Thread-5288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:32:18.327 [DEBUG] [Thread-5288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:32:18.337 [DEBUG] [Thread-5288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:32:18.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:32: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')
2025-11-25T20:32:18.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:32:18.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:32:18.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:32:18.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:32:18.374 [DEBUG] [Thread-5288] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:32:22.699 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:32:29.558 [DEBUG] [Thread-5290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:32:30.630 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:32:30.631 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:32:44.608 [DEBUG] [Thread-5291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:32:48.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:32:48.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:32:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:32:49.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 32, 31), 27.18, 16.01, 0.0, 18.79, 22.61, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:32:49.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:32:31
2025-11-25T20:32:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:32:49.314 [DEBUG] [Thread-5292] [transport.py] [_log()] starting thread (client mode): 0x70d57940
2025-11-25T20:32:49.314 [DEBUG] [Thread-5292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:32:49.333 [DEBUG] [Thread-5292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:32:49.333 [INFO] [Thread-5292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:32:49.336 [DEBUG] [Thread-5292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:32:49.336 [DEBUG] [Thread-5292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] client lang: <none>
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] server lang: <none>
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] kex follows: False
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:32:49.337 [DEBUG] [Thread-5292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:32:49.338 [DEBUG] [Thread-5292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:32:49.338 [DEBUG] [Thread-5292] [transport.py] [_log()] Compression: none
2025-11-25T20:32:49.338 [DEBUG] [Thread-5292] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:32:49.352 [DEBUG] [Thread-5292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:32:49.353 [DEBUG] [Thread-5292] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:32:49.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:32:49.355 [DEBUG] [Thread-5292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:32:49.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:32:49.356 [DEBUG] [Thread-5292] [transport.py] [_log()] userauth is OK
2025-11-25T20:32:49.357 [DEBUG] [Thread-5292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:32:49.357 [DEBUG] [Thread-5292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:32:49.357 [DEBUG] [Thread-5292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:32:49.357 [DEBUG] [Thread-5292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:32:49.377 [INFO] [Thread-5292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:32:49.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:32:49.956 [DEBUG] [Thread-5292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:32:49.956 [DEBUG] [Thread-5292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:32:49.957 [DEBUG] [Thread-5292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:32:49.997 [DEBUG] [Thread-5292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:32:49.997 [DEBUG] [Thread-5292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:32:49.999 [DEBUG] [Thread-5292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:32:50.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:32:50.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:32:50.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:32:50.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:32:50.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:32:50.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:32:50.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:32:50.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:32:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:32:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.772669 -999.00  +22.50   9.94     21   -0.70 1 1 1 1 1     0    0 19.67 -171.52 ZNESW 10.0 9.9 190.2 11.2 22.4 -26.1 22.4 -25.5 22.2 -24.4 22.4 -25.5
2025-11-25T20:32:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:32:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:32:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.772669
2025-11-25T20:32:50.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:32:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:32:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:32:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:32:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:32:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:32:31', tmtdew=27.18, humidity=16.01, cloud=0.0, wind=18.79, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:32:31', seeing=1.82, atlas_timestamp='2025-11-25T18:32:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:26:00')
2025-11-25T20:32:50.024 [DEBUG] [Thread-5292] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:32:50.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:32:50.119 [DEBUG] [Thread-5295] [transport.py] [_log()] starting thread (client mode): 0x70d43130
2025-11-25T20:32:50.119 [DEBUG] [Thread-5295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:32:50.134 [DEBUG] [Thread-5295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:32:50.134 [INFO] [Thread-5295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:32:50.142 [DEBUG] [Thread-5295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:32:50.143 [DEBUG] [Thread-5295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:32:50.143 [DEBUG] [Thread-5295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:32:50.143 [DEBUG] [Thread-5295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:32:50.143 [DEBUG] [Thread-5295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:32:50.143 [DEBUG] [Thread-5295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:32:50.143 [DEBUG] [Thread-5295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:32:50.143 [DEBUG] [Thread-5295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:32:50.143 [DEBUG] [Thread-5295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:32:50.143 [DEBUG] [Thread-5295] [transport.py] [_log()] client lang: <none>
2025-11-25T20:32:50.144 [DEBUG] [Thread-5295] [transport.py] [_log()] server lang: <none>
2025-11-25T20:32:50.144 [DEBUG] [Thread-5295] [transport.py] [_log()] kex follows: False
2025-11-25T20:32:50.144 [DEBUG] [Thread-5295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:32:50.144 [DEBUG] [Thread-5295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:32:50.144 [DEBUG] [Thread-5295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:32:50.144 [DEBUG] [Thread-5295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:32:50.144 [DEBUG] [Thread-5295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:32:50.144 [DEBUG] [Thread-5295] [transport.py] [_log()] Compression: none
2025-11-25T20:32:50.145 [DEBUG] [Thread-5295] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:32:50.207 [DEBUG] [Thread-5295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:32:50.207 [DEBUG] [Thread-5295] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:32:50.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:32:50.208 [DEBUG] [Thread-5295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:32:50.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:32:50.265 [DEBUG] [Thread-5295] [transport.py] [_log()] userauth is OK
2025-11-25T20:32:50.265 [DEBUG] [Thread-5295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:32:50.265 [DEBUG] [Thread-5295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:32:50.266 [DEBUG] [Thread-5295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:32:50.266 [DEBUG] [Thread-5295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:32:50.284 [INFO] [Thread-5295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:32:50.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:32:50.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:32:51.149 [DEBUG] [Thread-5295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:32:51.149 [DEBUG] [Thread-5295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:32:51.198 [DEBUG] [Thread-5295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:32:51.198 [DEBUG] [Thread-5295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:32:51.207 [DEBUG] [Thread-5295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:32:51.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:32:51.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:32:51.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:32:51.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:32:51.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:32:51.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:32:51.243 [DEBUG] [Thread-5295] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:32:56.722 [DEBUG] [Thread-5297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:32:59.645 [DEBUG] [Thread-5298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:33:14.696 [DEBUG] [Thread-5299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:33:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:33:21.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:33:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:33:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 33, 3), 27.28, 15.9, 0.0, 16.13, 22.63, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:33:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:33:03
2025-11-25T20:33:22.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:33:22.232 [DEBUG] [Thread-5300] [transport.py] [_log()] starting thread (client mode): 0x70d54730
2025-11-25T20:33:22.232 [DEBUG] [Thread-5300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:33:22.252 [DEBUG] [Thread-5300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:33:22.252 [INFO] [Thread-5300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:33:22.255 [DEBUG] [Thread-5300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:33:22.255 [DEBUG] [Thread-5300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:33:22.255 [DEBUG] [Thread-5300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:33:22.255 [DEBUG] [Thread-5300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:33:22.255 [DEBUG] [Thread-5300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:33:22.255 [DEBUG] [Thread-5300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:33:22.255 [DEBUG] [Thread-5300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] client lang: <none>
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] server lang: <none>
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] kex follows: False
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] Compression: none
2025-11-25T20:33:22.256 [DEBUG] [Thread-5300] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:33:22.270 [DEBUG] [Thread-5300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:33:22.270 [DEBUG] [Thread-5300] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:33:22.271 [DEBUG] [Thread-5300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:33:22.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:33:22.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:33:22.271 [DEBUG] [Thread-5300] [transport.py] [_log()] userauth is OK
2025-11-25T20:33:22.271 [DEBUG] [Thread-5300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:33:22.271 [DEBUG] [Thread-5300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:33:22.271 [DEBUG] [Thread-5300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:33:22.271 [DEBUG] [Thread-5300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:33:22.287 [INFO] [Thread-5300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:33:22.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:33:22.857 [DEBUG] [Thread-5300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:33:22.857 [DEBUG] [Thread-5300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:33:22.857 [DEBUG] [Thread-5300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:33:22.898 [DEBUG] [Thread-5300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:33:22.898 [DEBUG] [Thread-5300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:33:22.901 [DEBUG] [Thread-5300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:33:22.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:33:22.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:33:22.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:33:22.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:33:22.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:33:22.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:33:22.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.773016 -999.00  +22.50   8.01     21   -0.70 1 1 1 1 1     0    0 19.45 -167.66 ZNESW 7.7 8.0 189.2 12.9 22.4 -26.2 22.5 -25.6 22.2 -24.5 22.4 -25.4
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.773016
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:33:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:33:03', tmtdew=27.28, humidity=15.9, cloud=0.0, wind=16.13, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:33:03', seeing=2.36, atlas_timestamp='2025-11-25T18:33:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:33:22.919 [DEBUG] [Thread-5300] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:33:22.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:33:23.003 [DEBUG] [Thread-5303] [transport.py] [_log()] starting thread (client mode): 0x70d55090
2025-11-25T20:33:23.003 [DEBUG] [Thread-5303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:33:23.018 [DEBUG] [Thread-5303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:33:23.018 [INFO] [Thread-5303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:33:23.025 [DEBUG] [Thread-5303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] client lang: <none>
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] server lang: <none>
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] kex follows: False
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] Compression: none
2025-11-25T20:33:23.026 [DEBUG] [Thread-5303] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:33:23.083 [DEBUG] [Thread-5303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:33:23.083 [DEBUG] [Thread-5303] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:33:23.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:33:23.083 [DEBUG] [Thread-5303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:33:23.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:33:23.140 [DEBUG] [Thread-5303] [transport.py] [_log()] userauth is OK
2025-11-25T20:33:23.140 [DEBUG] [Thread-5303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:33:23.140 [DEBUG] [Thread-5303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:33:23.140 [DEBUG] [Thread-5303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:33:23.140 [DEBUG] [Thread-5303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:33:23.155 [INFO] [Thread-5303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:33:23.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:33:23.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:33:23.974 [DEBUG] [Thread-5303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:33:23.974 [DEBUG] [Thread-5303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:33:24.022 [DEBUG] [Thread-5303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:33:24.022 [DEBUG] [Thread-5303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:33:24.030 [DEBUG] [Thread-5303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:33:24.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:33:24.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:33:24.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:33:24.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:33:24.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:33:24.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:33:24.062 [DEBUG] [Thread-5303] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:33:29.730 [DEBUG] [Thread-5305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:33:30.842 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:33:30.843 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:33:44.789 [DEBUG] [Thread-5306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:33:45.606 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:33:52.116 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:33:54.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:33:54.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:33:54.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:33:54.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 33, 35), 27.3, 15.95, 0.0, 16.13, 22.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:33:54.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:33:35
2025-11-25T20:33:54.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:33:55.010 [DEBUG] [Thread-5307] [transport.py] [_log()] starting thread (client mode): 0x70d3b430
2025-11-25T20:33:55.010 [DEBUG] [Thread-5307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:33:55.025 [DEBUG] [Thread-5307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:33:55.025 [INFO] [Thread-5307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:33:55.028 [DEBUG] [Thread-5307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] client lang: <none>
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] server lang: <none>
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] kex follows: False
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] Compression: none
2025-11-25T20:33:55.029 [DEBUG] [Thread-5307] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:33:55.049 [DEBUG] [Thread-5307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:33:55.049 [DEBUG] [Thread-5307] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:33:55.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:33:55.050 [DEBUG] [Thread-5307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:33:55.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:33:55.052 [DEBUG] [Thread-5307] [transport.py] [_log()] userauth is OK
2025-11-25T20:33:55.052 [DEBUG] [Thread-5307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:33:55.052 [DEBUG] [Thread-5307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:33:55.052 [DEBUG] [Thread-5307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:33:55.052 [DEBUG] [Thread-5307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:33:55.075 [INFO] [Thread-5307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:33:55.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:33:55.712 [DEBUG] [Thread-5307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:33:55.712 [DEBUG] [Thread-5307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:33:55.712 [DEBUG] [Thread-5307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:33:55.753 [DEBUG] [Thread-5307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:33:55.753 [DEBUG] [Thread-5307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:33:55.756 [DEBUG] [Thread-5307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:33:55.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:33:55.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:33:55.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:33:55.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:33:55.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:33:55.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:33:55.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:33:55.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:33:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:33:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.773363 -999.00  +22.50   9.77     21   -0.70 1 1 1 1 1     0    0 19.33 -165.31 ZNESW 10.1 9.8 172.7 15.7 22.4 -26.3 22.5 -25.6 22.2 -24.4 22.4 -25.4
2025-11-25T20:33:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:33:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:33:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.773363
2025-11-25T20:33:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:33:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:33:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:33:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:33:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:33:55.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:33:35', tmtdew=27.3, humidity=15.95, cloud=0.0, wind=16.13, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:33:35', seeing=2.14, atlas_timestamp='2025-11-25T18:33:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:33:55.784 [DEBUG] [Thread-5307] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:33:55.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:33:55.876 [DEBUG] [Thread-5310] [transport.py] [_log()] starting thread (client mode): 0x70d74310
2025-11-25T20:33:55.876 [DEBUG] [Thread-5310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:33:55.896 [DEBUG] [Thread-5310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:33:55.897 [INFO] [Thread-5310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:33:55.904 [DEBUG] [Thread-5310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:33:55.904 [DEBUG] [Thread-5310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:33:55.904 [DEBUG] [Thread-5310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:33:55.904 [DEBUG] [Thread-5310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:33:55.904 [DEBUG] [Thread-5310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] client lang: <none>
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] server lang: <none>
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] kex follows: False
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] Compression: none
2025-11-25T20:33:55.905 [DEBUG] [Thread-5310] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:33:55.965 [DEBUG] [Thread-5310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:33:55.966 [DEBUG] [Thread-5310] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:33:55.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:33:55.967 [DEBUG] [Thread-5310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:33:55.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:33:56.021 [DEBUG] [Thread-5310] [transport.py] [_log()] userauth is OK
2025-11-25T20:33:56.021 [DEBUG] [Thread-5310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:33:56.022 [DEBUG] [Thread-5310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:33:56.022 [DEBUG] [Thread-5310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:33:56.022 [DEBUG] [Thread-5310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:33:56.041 [INFO] [Thread-5310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:33:56.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:33:56.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:33:56.774 [DEBUG] [Thread-5312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:33:56.890 [DEBUG] [Thread-5310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:33:56.890 [DEBUG] [Thread-5310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:33:56.938 [DEBUG] [Thread-5310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:33:56.938 [DEBUG] [Thread-5310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:33:56.947 [DEBUG] [Thread-5310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:33:56.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:33:56.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:33:56.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:33:56.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:33:56.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:33:56.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:33:56.979 [DEBUG] [Thread-5310] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:33:59.824 [DEBUG] [Thread-5313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:34:14.864 [DEBUG] [Thread-5314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:34:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:34:26.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:34:26.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:34:27.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 34, 7), 27.35, 15.88, 0.0, 16.23, 22.61, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:34:27.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:34:07
2025-11-25T20:34:27.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:34:27.909 [DEBUG] [Thread-5315] [transport.py] [_log()] starting thread (client mode): 0x70d75a80
2025-11-25T20:34:27.910 [DEBUG] [Thread-5315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:34:27.929 [DEBUG] [Thread-5315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:34:27.929 [INFO] [Thread-5315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:34:27.932 [DEBUG] [Thread-5315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] client lang: <none>
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] server lang: <none>
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] kex follows: False
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] Compression: none
2025-11-25T20:34:27.933 [DEBUG] [Thread-5315] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:34:27.954 [DEBUG] [Thread-5315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:34:27.955 [DEBUG] [Thread-5315] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:34:27.955 [DEBUG] [Thread-5315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:34:27.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:34:27.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:34:27.957 [DEBUG] [Thread-5315] [transport.py] [_log()] userauth is OK
2025-11-25T20:34:27.957 [DEBUG] [Thread-5315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:34:27.957 [DEBUG] [Thread-5315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:34:27.958 [DEBUG] [Thread-5315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:34:27.958 [DEBUG] [Thread-5315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:34:27.981 [INFO] [Thread-5315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:34:27.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:34:28.647 [DEBUG] [Thread-5315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:34:28.647 [DEBUG] [Thread-5315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:34:28.647 [DEBUG] [Thread-5315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:34:28.687 [DEBUG] [Thread-5315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:34:28.687 [DEBUG] [Thread-5315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:34:28.690 [DEBUG] [Thread-5315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:34:28.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:34:28.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:34:28.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:34:28.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:34:28.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:34:28.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:34:28.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:34:28.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:34:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:34:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.773710 -999.00  +22.50  10.99     21   -0.80 1 1 1 1 1     0    0 19.76 -158.61 ZNESW 8.5 11.0 212.2 13.0 22.4 -26.3 22.4 -25.5 22.1 -24.4 22.4 -25.5
2025-11-25T20:34:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:34:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:34:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.773710
2025-11-25T20:34:28.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:34:28.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:34:28.716 [DEBUG] [Thread-5315] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:34:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:34:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:34:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:34:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:34:07', tmtdew=27.35, humidity=15.88, cloud=0.0, wind=16.23, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:34:07', seeing=1.81, atlas_timestamp='2025-11-25T18:34:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:34:28.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:34:28.810 [DEBUG] [Thread-5318] [transport.py] [_log()] starting thread (client mode): 0x70d2b430
2025-11-25T20:34:28.810 [DEBUG] [Thread-5318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:34:28.824 [DEBUG] [Thread-5318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:34:28.824 [INFO] [Thread-5318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] client lang: <none>
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] server lang: <none>
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] kex follows: False
2025-11-25T20:34:28.832 [DEBUG] [Thread-5318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:34:28.833 [DEBUG] [Thread-5318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:34:28.833 [DEBUG] [Thread-5318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:34:28.833 [DEBUG] [Thread-5318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:34:28.833 [DEBUG] [Thread-5318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:34:28.833 [DEBUG] [Thread-5318] [transport.py] [_log()] Compression: none
2025-11-25T20:34:28.833 [DEBUG] [Thread-5318] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:34:28.888 [DEBUG] [Thread-5318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:34:28.888 [DEBUG] [Thread-5318] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:34:28.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:34:28.889 [DEBUG] [Thread-5318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:34:28.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:34:28.945 [DEBUG] [Thread-5318] [transport.py] [_log()] userauth is OK
2025-11-25T20:34:28.945 [DEBUG] [Thread-5318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:34:28.945 [DEBUG] [Thread-5318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:34:28.945 [DEBUG] [Thread-5318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:34:28.945 [DEBUG] [Thread-5318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:34:28.963 [INFO] [Thread-5318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:34:28.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:34:28.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:34:29.824 [DEBUG] [Thread-5318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:34:29.824 [DEBUG] [Thread-5318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:34:29.872 [DEBUG] [Thread-5318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:34:29.872 [DEBUG] [Thread-5318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:34:29.881 [DEBUG] [Thread-5318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:34:29.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:34:29.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:34:29.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:34:29.900 [DEBUG] [Thread-5320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:34:29.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:34:29.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:34:29.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:34:29.915 [DEBUG] [Thread-5318] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:34:31.043 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:34:31.044 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:34:44.955 [DEBUG] [Thread-5321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:34:52.717 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:34:56.843 [DEBUG] [Thread-5322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:34:59.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:34:59.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:34:59.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:34:59.992 [DEBUG] [Thread-5323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:35:00.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 34, 39), 27.3, 15.88, 0.0, 13.62, 22.58, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:35:00.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:34:39
2025-11-25T20:35:00.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:35:00.865 [DEBUG] [Thread-5324] [transport.py] [_log()] starting thread (client mode): 0x70d2aa70
2025-11-25T20:35:00.866 [DEBUG] [Thread-5324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:35:00.877 [DEBUG] [Thread-5324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:35:00.877 [INFO] [Thread-5324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] client lang: <none>
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] server lang: <none>
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] kex follows: False
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] Compression: none
2025-11-25T20:35:00.880 [DEBUG] [Thread-5324] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:35:00.895 [DEBUG] [Thread-5324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:35:00.896 [DEBUG] [Thread-5324] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:35:00.896 [DEBUG] [Thread-5324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:35:00.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:35:00.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:35:00.898 [DEBUG] [Thread-5324] [transport.py] [_log()] userauth is OK
2025-11-25T20:35:00.898 [DEBUG] [Thread-5324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:35:00.898 [DEBUG] [Thread-5324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:35:00.898 [DEBUG] [Thread-5324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:35:00.898 [DEBUG] [Thread-5324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:35:00.923 [INFO] [Thread-5324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:35:00.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:35:01.532 [DEBUG] [Thread-5324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:35:01.532 [DEBUG] [Thread-5324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:35:01.532 [DEBUG] [Thread-5324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:35:01.573 [DEBUG] [Thread-5324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:35:01.573 [DEBUG] [Thread-5324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:35:01.577 [DEBUG] [Thread-5324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:35:01.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:35:01.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:35:01.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:35:01.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:35:01.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:35:01.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:35:01.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:35:01.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:35:01.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:35:01.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.774057 -999.00  +22.50  11.07     21   -0.80 1 1 1 1 1     0    0 20.02 -155.15 ZNESW 11.3 11.1 199.3 14.5 22.4 -26.1 22.4 -25.5 22.1 -24.5 22.4 -25.5
2025-11-25T20:35:01.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:35:01.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:35:01.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.774057
2025-11-25T20:35:01.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:34:39', tmtdew=27.3, humidity=15.88, cloud=0.0, wind=13.62, temperature=22.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:34:39', seeing=2.01, atlas_timestamp='2025-11-25T18:34:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:35:01.600 [DEBUG] [Thread-5324] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:35:01.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:35:01.695 [DEBUG] [Thread-5327] [transport.py] [_log()] starting thread (client mode): 0x70d74460
2025-11-25T20:35:01.695 [DEBUG] [Thread-5327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:35:01.712 [DEBUG] [Thread-5327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:35:01.713 [INFO] [Thread-5327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] client lang: <none>
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] server lang: <none>
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] kex follows: False
2025-11-25T20:35:01.720 [DEBUG] [Thread-5327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:35:01.721 [DEBUG] [Thread-5327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:35:01.721 [DEBUG] [Thread-5327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:35:01.721 [DEBUG] [Thread-5327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:35:01.721 [DEBUG] [Thread-5327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:35:01.721 [DEBUG] [Thread-5327] [transport.py] [_log()] Compression: none
2025-11-25T20:35:01.721 [DEBUG] [Thread-5327] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:35:01.778 [DEBUG] [Thread-5327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:35:01.779 [DEBUG] [Thread-5327] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:35:01.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:35:01.780 [DEBUG] [Thread-5327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:35:01.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:35:01.837 [DEBUG] [Thread-5327] [transport.py] [_log()] userauth is OK
2025-11-25T20:35:01.838 [DEBUG] [Thread-5327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:35:01.838 [DEBUG] [Thread-5327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:35:01.838 [DEBUG] [Thread-5327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:35:01.838 [DEBUG] [Thread-5327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:35:01.860 [INFO] [Thread-5327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:35:01.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:35:01.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:35:02.729 [DEBUG] [Thread-5327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:35:02.730 [DEBUG] [Thread-5327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:35:02.777 [DEBUG] [Thread-5327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:35:02.778 [DEBUG] [Thread-5327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:35:02.787 [DEBUG] [Thread-5327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:35:02.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:35:02.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:35:02.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:35:02.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:35:02.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:35:02.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:35:02.824 [DEBUG] [Thread-5327] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:35:15.021 [DEBUG] [Thread-5329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:35:30.067 [DEBUG] [Thread-5330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:35:31.245 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:35:31.247 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:35:32.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:35:32.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:35:32.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:35:33.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 35, 11), 27.36, 15.81, 0.0, 12.7, 22.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:35:33.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:35:11
2025-11-25T20:35:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:35:33.757 [DEBUG] [Thread-5331] [transport.py] [_log()] starting thread (client mode): 0x70d75780
2025-11-25T20:35:33.757 [DEBUG] [Thread-5331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:35:33.773 [DEBUG] [Thread-5331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:35:33.773 [INFO] [Thread-5331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:35:33.774 [DEBUG] [Thread-5331] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:35:33.774 [DEBUG] [Thread-5331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:35:33.774 [DEBUG] [Thread-5331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:35:33.774 [DEBUG] [Thread-5331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:35:33.774 [DEBUG] [Thread-5331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:35:33.774 [DEBUG] [Thread-5331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] client lang: <none>
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] server lang: <none>
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] kex follows: False
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] Compression: none
2025-11-25T20:35:33.775 [DEBUG] [Thread-5331] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:35:33.784 [DEBUG] [Thread-5331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:35:33.784 [DEBUG] [Thread-5331] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:35:33.785 [DEBUG] [Thread-5331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:35:33.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:35:33.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:35:33.786 [DEBUG] [Thread-5331] [transport.py] [_log()] userauth is OK
2025-11-25T20:35:33.786 [DEBUG] [Thread-5331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:35:33.786 [DEBUG] [Thread-5331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:35:33.787 [DEBUG] [Thread-5331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:35:33.787 [DEBUG] [Thread-5331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:35:33.803 [INFO] [Thread-5331] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:35:33.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:35:34.400 [DEBUG] [Thread-5331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:35:34.401 [DEBUG] [Thread-5331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:35:34.401 [DEBUG] [Thread-5331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:35:34.442 [DEBUG] [Thread-5331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:35:34.442 [DEBUG] [Thread-5331] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:35:34.445 [DEBUG] [Thread-5331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:35:34.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:35:34.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:35:34.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:35:34.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:35:34.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:35:34.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:35:34.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:35:34.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:35:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:35:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.774404 -999.00  +22.50  11.16     21   -0.80 1 1 1 1 1     0    0 19.99 -159.23 ZNESW 8.1 11.2 192.6 13.5 22.4 -26.1 22.4 -25.6 22.1 -24.4 22.4 -25.4
2025-11-25T20:35:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:35:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:35:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.774404
2025-11-25T20:35:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:35:34.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:35:34.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:35:34.473 [DEBUG] [Thread-5331] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:35:34.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:35:34.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:35:34.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:35:11', tmtdew=27.36, humidity=15.81, cloud=0.0, wind=12.7, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:35:11', seeing=2.65, atlas_timestamp='2025-11-25T18:35:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:35:34.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:35:34.569 [DEBUG] [Thread-5334] [transport.py] [_log()] starting thread (client mode): 0x70d75840
2025-11-25T20:35:34.569 [DEBUG] [Thread-5334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:35:34.584 [DEBUG] [Thread-5334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:35:34.584 [INFO] [Thread-5334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:35:34.592 [DEBUG] [Thread-5334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:35:34.592 [DEBUG] [Thread-5334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:35:34.592 [DEBUG] [Thread-5334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] client lang: <none>
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] server lang: <none>
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] kex follows: False
2025-11-25T20:35:34.593 [DEBUG] [Thread-5334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:35:34.594 [DEBUG] [Thread-5334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:35:34.594 [DEBUG] [Thread-5334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:35:34.594 [DEBUG] [Thread-5334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:35:34.594 [DEBUG] [Thread-5334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:35:34.594 [DEBUG] [Thread-5334] [transport.py] [_log()] Compression: none
2025-11-25T20:35:34.594 [DEBUG] [Thread-5334] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:35:34.650 [DEBUG] [Thread-5334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:35:34.650 [DEBUG] [Thread-5334] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:35:34.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:35:34.651 [DEBUG] [Thread-5334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:35:34.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:35:34.705 [DEBUG] [Thread-5334] [transport.py] [_log()] userauth is OK
2025-11-25T20:35:34.706 [DEBUG] [Thread-5334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:35:34.706 [DEBUG] [Thread-5334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:35:34.706 [DEBUG] [Thread-5334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:35:34.706 [DEBUG] [Thread-5334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:35:34.725 [INFO] [Thread-5334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:35:34.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:35:34.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:35:35.552 [DEBUG] [Thread-5334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:35:35.552 [DEBUG] [Thread-5334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:35:35.601 [DEBUG] [Thread-5334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:35:35.601 [DEBUG] [Thread-5334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:35:35.610 [DEBUG] [Thread-5334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:35:35.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:35:35.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:35:35.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:35:35.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:35:35.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:35:35.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:35:35.647 [DEBUG] [Thread-5334] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:35:45.103 [DEBUG] [Thread-5336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:35:56.906 [DEBUG] [Thread-5337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:36:00.146 [DEBUG] [Thread-5338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:36:05.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:36:05.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:36:05.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:36:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 35, 43), 27.34, 15.83, 0.0, 14.35, 22.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:36:06.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:35:43
2025-11-25T20:36:06.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:36:06.598 [DEBUG] [Thread-5339] [transport.py] [_log()] starting thread (client mode): 0x70d41b70
2025-11-25T20:36:06.598 [DEBUG] [Thread-5339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:36:06.618 [DEBUG] [Thread-5339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:36:06.619 [INFO] [Thread-5339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] client lang: <none>
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] server lang: <none>
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] kex follows: False
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] Compression: none
2025-11-25T20:36:06.622 [DEBUG] [Thread-5339] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:36:06.640 [DEBUG] [Thread-5339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:36:06.641 [DEBUG] [Thread-5339] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:36:06.641 [DEBUG] [Thread-5339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:36:06.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:36:06.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:36:06.643 [DEBUG] [Thread-5339] [transport.py] [_log()] userauth is OK
2025-11-25T20:36:06.644 [DEBUG] [Thread-5339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:36:06.644 [DEBUG] [Thread-5339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:36:06.644 [DEBUG] [Thread-5339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:36:06.644 [DEBUG] [Thread-5339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:36:06.669 [INFO] [Thread-5339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:36:06.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:36:07.295 [DEBUG] [Thread-5339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:36:07.296 [DEBUG] [Thread-5339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:36:07.296 [DEBUG] [Thread-5339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:36:07.337 [DEBUG] [Thread-5339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:36:07.337 [DEBUG] [Thread-5339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:36:07.340 [DEBUG] [Thread-5339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:36:07.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:36:07.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:36:07.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:36:07.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:36:07.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:36:07.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:36:07.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:36:07.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:36:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:36:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.774404 -999.00  +22.50  11.16     21   -0.80 1 1 1 1 1     0    0 19.99 -159.23 ZNESW 8.1 11.2 192.6 13.5 22.4 -26.1 22.4 -25.6 22.1 -24.4 22.4 -25.4
2025-11-25T20:36:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:36:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:36:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.774404
2025-11-25T20:36:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:36:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:36:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:36:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:36:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:36:07.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:35:43', tmtdew=27.34, humidity=15.83, cloud=0.0, wind=14.35, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:35:43', seeing=2.65, atlas_timestamp='2025-11-25T18:35:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:36:07.365 [DEBUG] [Thread-5339] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:36:07.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:36:07.459 [DEBUG] [Thread-5342] [transport.py] [_log()] starting thread (client mode): 0x70d77310
2025-11-25T20:36:07.459 [DEBUG] [Thread-5342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:36:07.475 [DEBUG] [Thread-5342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:36:07.475 [INFO] [Thread-5342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:36:07.482 [DEBUG] [Thread-5342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:36:07.482 [DEBUG] [Thread-5342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] client lang: <none>
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] server lang: <none>
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] kex follows: False
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] Compression: none
2025-11-25T20:36:07.483 [DEBUG] [Thread-5342] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:36:07.542 [DEBUG] [Thread-5342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:36:07.542 [DEBUG] [Thread-5342] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:36:07.543 [DEBUG] [Thread-5342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:36:07.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:36:07.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:36:07.598 [DEBUG] [Thread-5342] [transport.py] [_log()] userauth is OK
2025-11-25T20:36:07.598 [DEBUG] [Thread-5342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:36:07.598 [DEBUG] [Thread-5342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:36:07.598 [DEBUG] [Thread-5342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:36:07.598 [DEBUG] [Thread-5342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:36:07.616 [INFO] [Thread-5342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:36:07.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:36:07.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:36:08.467 [DEBUG] [Thread-5342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:36:08.468 [DEBUG] [Thread-5342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:36:08.517 [DEBUG] [Thread-5342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:36:08.517 [DEBUG] [Thread-5342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:36:08.528 [DEBUG] [Thread-5342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:36:08.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:36:08.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:36:08.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:36:08.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:36:08.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:36:08.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:36:08.570 [DEBUG] [Thread-5342] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:36:15.185 [DEBUG] [Thread-5344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:36:19.827 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:36:22.300 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:36:30.234 [DEBUG] [Thread-5345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:36:31.450 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:36:31.451 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:36:38.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:36:38.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:36:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:36:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 36, 15), 27.32, 15.86, 0.0, 14.73, 22.58, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:36:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:36:15
2025-11-25T20:36:39.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:36:39.516 [DEBUG] [Thread-5346] [transport.py] [_log()] starting thread (client mode): 0x70d39b10
2025-11-25T20:36:39.516 [DEBUG] [Thread-5346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:36:39.531 [DEBUG] [Thread-5346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:36:39.531 [INFO] [Thread-5346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] client lang: <none>
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] server lang: <none>
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] kex follows: False
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:36:39.533 [DEBUG] [Thread-5346] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:36:39.534 [DEBUG] [Thread-5346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:36:39.534 [DEBUG] [Thread-5346] [transport.py] [_log()] Compression: none
2025-11-25T20:36:39.534 [DEBUG] [Thread-5346] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:36:39.545 [DEBUG] [Thread-5346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:36:39.545 [DEBUG] [Thread-5346] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:36:39.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:36:39.546 [DEBUG] [Thread-5346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:36:39.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:36:39.547 [DEBUG] [Thread-5346] [transport.py] [_log()] userauth is OK
2025-11-25T20:36:39.547 [DEBUG] [Thread-5346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:36:39.547 [DEBUG] [Thread-5346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:36:39.547 [DEBUG] [Thread-5346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:36:39.547 [DEBUG] [Thread-5346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:36:39.560 [INFO] [Thread-5346] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:36:39.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:36:40.207 [DEBUG] [Thread-5346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:36:40.207 [DEBUG] [Thread-5346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:36:40.208 [DEBUG] [Thread-5346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:36:40.248 [DEBUG] [Thread-5346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:36:40.249 [DEBUG] [Thread-5346] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:36:40.251 [DEBUG] [Thread-5346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:36:40.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:36:40.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:36:40.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:36:40.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:36:40.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:36:40.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:36:40.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:36:40.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:36:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:36:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.774752 -999.00  +22.40   8.16     21   -0.70 1 1 1 1 1     0    0 19.26 -173.64 ZNESW 9.1 8.2 198.4 10.7 22.4 -26.2 22.4 -25.5 22.1 -24.4 22.3 -25.4
2025-11-25T20:36:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:36:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:36:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.774752
2025-11-25T20:36:40.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:36:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:36:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:36:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:36:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:36:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:36:15', tmtdew=27.32, humidity=15.86, cloud=0.0, wind=14.73, temperature=22.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:36:16', seeing=1.97, atlas_timestamp='2025-11-25T18:35:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:36:40.279 [DEBUG] [Thread-5346] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:36:40.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:36:40.373 [DEBUG] [Thread-5349] [transport.py] [_log()] starting thread (client mode): 0x70d2bb80
2025-11-25T20:36:40.373 [DEBUG] [Thread-5349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:36:40.387 [DEBUG] [Thread-5349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:36:40.387 [INFO] [Thread-5349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] client lang: <none>
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] server lang: <none>
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] kex follows: False
2025-11-25T20:36:40.395 [DEBUG] [Thread-5349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:36:40.396 [DEBUG] [Thread-5349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:36:40.396 [DEBUG] [Thread-5349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:36:40.396 [DEBUG] [Thread-5349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:36:40.396 [DEBUG] [Thread-5349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:36:40.396 [DEBUG] [Thread-5349] [transport.py] [_log()] Compression: none
2025-11-25T20:36:40.396 [DEBUG] [Thread-5349] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:36:40.457 [DEBUG] [Thread-5349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:36:40.458 [DEBUG] [Thread-5349] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:36:40.458 [DEBUG] [Thread-5349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:36:40.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:36:40.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:36:40.514 [DEBUG] [Thread-5349] [transport.py] [_log()] userauth is OK
2025-11-25T20:36:40.514 [DEBUG] [Thread-5349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:36:40.514 [DEBUG] [Thread-5349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:36:40.514 [DEBUG] [Thread-5349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:36:40.514 [DEBUG] [Thread-5349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:36:40.536 [INFO] [Thread-5349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:36:40.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:36:40.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:36:41.346 [DEBUG] [Thread-5349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:36:41.346 [DEBUG] [Thread-5349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:36:41.394 [DEBUG] [Thread-5349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:36:41.394 [DEBUG] [Thread-5349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:36:41.403 [DEBUG] [Thread-5349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:36:41.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:36:41.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:36:41.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:36:41.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:36:41.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:36:41.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:36:41.440 [DEBUG] [Thread-5349] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:36:45.264 [DEBUG] [Thread-5351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:36:56.980 [DEBUG] [Thread-5352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:37:00.323 [DEBUG] [Thread-5353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:37:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:37:11.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:37:11.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:37:12.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 36, 47), 27.3, 15.93, 0.0, 11.35, 22.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:37:12.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:36:47
2025-11-25T20:37:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:37:12.410 [DEBUG] [Thread-5354] [transport.py] [_log()] starting thread (client mode): 0x70d6a980
2025-11-25T20:37:12.411 [DEBUG] [Thread-5354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:37:12.432 [DEBUG] [Thread-5354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:37:12.432 [INFO] [Thread-5354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:37:12.435 [DEBUG] [Thread-5354] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:37:12.435 [DEBUG] [Thread-5354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:37:12.435 [DEBUG] [Thread-5354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:37:12.435 [DEBUG] [Thread-5354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:37:12.435 [DEBUG] [Thread-5354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:37:12.435 [DEBUG] [Thread-5354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:37:12.435 [DEBUG] [Thread-5354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] client lang: <none>
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] server lang: <none>
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] kex follows: False
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] Compression: none
2025-11-25T20:37:12.436 [DEBUG] [Thread-5354] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:37:12.454 [DEBUG] [Thread-5354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:37:12.454 [DEBUG] [Thread-5354] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:37:12.455 [DEBUG] [Thread-5354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:37:12.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:37:12.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:37:12.457 [DEBUG] [Thread-5354] [transport.py] [_log()] userauth is OK
2025-11-25T20:37:12.457 [DEBUG] [Thread-5354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:37:12.457 [DEBUG] [Thread-5354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:37:12.457 [DEBUG] [Thread-5354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:37:12.457 [DEBUG] [Thread-5354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:37:12.481 [INFO] [Thread-5354] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:37:12.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:37:13.106 [DEBUG] [Thread-5354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:37:13.107 [DEBUG] [Thread-5354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:37:13.107 [DEBUG] [Thread-5354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:37:13.147 [DEBUG] [Thread-5354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:37:13.148 [DEBUG] [Thread-5354] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:37:13.151 [DEBUG] [Thread-5354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:37:13.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:37:13.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:37:13.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:37:13.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:37:13.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:37:13.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:37:13.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:37:13.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:37:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:37:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.775446 -999.00  +22.50   8.24     21   -0.80 1 1 1 1 1     0    0 19.38 -159.61 ZNESW 8.7 8.2 191.4 10.2 22.4 -26.2 22.4 -25.6 22.1 -24.4 22.4 -25.5
2025-11-25T20:37:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:37:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:37:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.775446
2025-11-25T20:37:13.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:37:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:37:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:37:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:37:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:37:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:36:47', tmtdew=27.3, humidity=15.93, cloud=0.0, wind=11.35, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:36:48', seeing=2.06, atlas_timestamp='2025-11-25T18:36:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:37:13.175 [DEBUG] [Thread-5354] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:37:13.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:37:13.271 [DEBUG] [Thread-5357] [transport.py] [_log()] starting thread (client mode): 0x70d1f9d0
2025-11-25T20:37:13.271 [DEBUG] [Thread-5357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:37:13.286 [DEBUG] [Thread-5357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:37:13.286 [INFO] [Thread-5357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:37:13.294 [DEBUG] [Thread-5357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:37:13.294 [DEBUG] [Thread-5357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:37:13.294 [DEBUG] [Thread-5357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:37:13.294 [DEBUG] [Thread-5357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:37:13.295 [DEBUG] [Thread-5357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:37:13.295 [DEBUG] [Thread-5357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:37:13.295 [DEBUG] [Thread-5357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:37:13.295 [DEBUG] [Thread-5357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:37:13.295 [DEBUG] [Thread-5357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:37:13.295 [DEBUG] [Thread-5357] [transport.py] [_log()] client lang: <none>
2025-11-25T20:37:13.295 [DEBUG] [Thread-5357] [transport.py] [_log()] server lang: <none>
2025-11-25T20:37:13.295 [DEBUG] [Thread-5357] [transport.py] [_log()] kex follows: False
2025-11-25T20:37:13.295 [DEBUG] [Thread-5357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:37:13.296 [DEBUG] [Thread-5357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:37:13.296 [DEBUG] [Thread-5357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:37:13.296 [DEBUG] [Thread-5357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:37:13.296 [DEBUG] [Thread-5357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:37:13.296 [DEBUG] [Thread-5357] [transport.py] [_log()] Compression: none
2025-11-25T20:37:13.296 [DEBUG] [Thread-5357] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:37:13.355 [DEBUG] [Thread-5357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:37:13.355 [DEBUG] [Thread-5357] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:37:13.356 [DEBUG] [Thread-5357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:37:13.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:37:13.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:37:13.414 [DEBUG] [Thread-5357] [transport.py] [_log()] userauth is OK
2025-11-25T20:37:13.414 [DEBUG] [Thread-5357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:37:13.414 [DEBUG] [Thread-5357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:37:13.415 [DEBUG] [Thread-5357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:37:13.415 [DEBUG] [Thread-5357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:37:13.437 [INFO] [Thread-5357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:37:13.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:37:13.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:37:14.322 [DEBUG] [Thread-5357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:37:14.323 [DEBUG] [Thread-5357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:37:14.371 [DEBUG] [Thread-5357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:37:14.371 [DEBUG] [Thread-5357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:37:14.380 [DEBUG] [Thread-5357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:37:14.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:37:14.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:37:14.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:37:14.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:37:14.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:37:14.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:37:14.416 [DEBUG] [Thread-5357] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:37:15.355 [DEBUG] [Thread-5359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:37:22.750 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:37:30.406 [DEBUG] [Thread-5360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:37:31.673 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:37:31.675 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:37:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:37:44.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:37:44.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:37:45.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 37, 19), 27.32, 15.9, 0.0, 10.39, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:37:45.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:37:19
2025-11-25T20:37:45.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:37:45.392 [DEBUG] [Thread-5361] [transport.py] [_log()] starting thread (client mode): 0x70d6abf0
2025-11-25T20:37:45.392 [DEBUG] [Thread-5361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:37:45.413 [DEBUG] [Thread-5361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:37:45.413 [INFO] [Thread-5361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:37:45.416 [DEBUG] [Thread-5361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:37:45.416 [DEBUG] [Thread-5361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:37:45.416 [DEBUG] [Thread-5361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:37:45.416 [DEBUG] [Thread-5361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:37:45.416 [DEBUG] [Thread-5361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:37:45.416 [DEBUG] [Thread-5361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:37:45.416 [DEBUG] [Thread-5361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:37:45.416 [DEBUG] [Thread-5361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] client lang: <none>
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] server lang: <none>
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] kex follows: False
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] Compression: none
2025-11-25T20:37:45.417 [DEBUG] [Thread-5361] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:37:45.434 [DEBUG] [Thread-5361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:37:45.435 [DEBUG] [Thread-5361] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:37:45.435 [DEBUG] [Thread-5361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:37:45.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:37:45.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:37:45.437 [DEBUG] [Thread-5361] [transport.py] [_log()] userauth is OK
2025-11-25T20:37:45.437 [DEBUG] [Thread-5361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:37:45.437 [DEBUG] [Thread-5361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:37:45.437 [DEBUG] [Thread-5361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:37:45.437 [DEBUG] [Thread-5361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:37:45.439 [DEBUG] [Thread-5363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:37:45.455 [INFO] [Thread-5361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:37:45.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:37:46.187 [DEBUG] [Thread-5361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:37:46.187 [DEBUG] [Thread-5361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:37:46.187 [DEBUG] [Thread-5361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:37:46.228 [DEBUG] [Thread-5361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:37:46.228 [DEBUG] [Thread-5361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:37:46.231 [DEBUG] [Thread-5361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:37:46.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:37:46.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:37:46.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:37:46.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:37:46.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:37:46.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:37:46.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:37:46.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.775794 -999.00  +22.40   5.02     21   -0.90 1 1 1 1 1     0    0 19.09 -160.41 ZNESW 5.6 5.0 230.4 10.7 22.4 -26.3 22.4 -25.8 22.1 -24.4 22.3 -25.6
2025-11-25T20:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.775794
2025-11-25T20:37:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:37:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:37:46.258 [DEBUG] [Thread-5361] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:37:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:37:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:37:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:37:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:37:19', tmtdew=27.32, humidity=15.9, cloud=0.0, wind=10.39, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:37:20', seeing=1.68, atlas_timestamp='2025-11-25T18:37:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:37:46.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:37:46.353 [DEBUG] [Thread-5365] [transport.py] [_log()] starting thread (client mode): 0x7374ef80
2025-11-25T20:37:46.353 [DEBUG] [Thread-5365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:37:46.368 [DEBUG] [Thread-5365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:37:46.368 [INFO] [Thread-5365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:37:46.376 [DEBUG] [Thread-5365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:37:46.377 [DEBUG] [Thread-5365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:37:46.377 [DEBUG] [Thread-5365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:37:46.377 [DEBUG] [Thread-5365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:37:46.377 [DEBUG] [Thread-5365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:37:46.377 [DEBUG] [Thread-5365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:37:46.377 [DEBUG] [Thread-5365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:37:46.377 [DEBUG] [Thread-5365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:37:46.377 [DEBUG] [Thread-5365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:37:46.377 [DEBUG] [Thread-5365] [transport.py] [_log()] client lang: <none>
2025-11-25T20:37:46.378 [DEBUG] [Thread-5365] [transport.py] [_log()] server lang: <none>
2025-11-25T20:37:46.378 [DEBUG] [Thread-5365] [transport.py] [_log()] kex follows: False
2025-11-25T20:37:46.378 [DEBUG] [Thread-5365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:37:46.378 [DEBUG] [Thread-5365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:37:46.378 [DEBUG] [Thread-5365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:37:46.378 [DEBUG] [Thread-5365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:37:46.378 [DEBUG] [Thread-5365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:37:46.378 [DEBUG] [Thread-5365] [transport.py] [_log()] Compression: none
2025-11-25T20:37:46.379 [DEBUG] [Thread-5365] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:37:46.434 [DEBUG] [Thread-5365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:37:46.435 [DEBUG] [Thread-5365] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:37:46.436 [DEBUG] [Thread-5365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:37:46.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:37:46.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:37:46.493 [DEBUG] [Thread-5365] [transport.py] [_log()] userauth is OK
2025-11-25T20:37:46.494 [DEBUG] [Thread-5365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:37:46.494 [DEBUG] [Thread-5365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:37:46.494 [DEBUG] [Thread-5365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:37:46.494 [DEBUG] [Thread-5365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:37:46.514 [INFO] [Thread-5365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:37:46.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:37:46.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:37:47.407 [DEBUG] [Thread-5365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:37:47.407 [DEBUG] [Thread-5365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:37:47.455 [DEBUG] [Thread-5365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:37:47.455 [DEBUG] [Thread-5365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:37:47.464 [DEBUG] [Thread-5365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:37:47.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:37:47.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:37:47.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:37:47.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:37:47.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:37:47.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:37:47.501 [DEBUG] [Thread-5365] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:37:57.038 [DEBUG] [Thread-5367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:38:00.474 [DEBUG] [Thread-5368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:38:15.526 [DEBUG] [Thread-5369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:38:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:38:17.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:38:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:38:18.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 37, 51), 27.25, 15.93, 0.0, 11.29, 22.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:38:18.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:37:51
2025-11-25T20:38:18.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:38:18.505 [DEBUG] [Thread-5370] [transport.py] [_log()] starting thread (client mode): 0x7374cd30
2025-11-25T20:38:18.505 [DEBUG] [Thread-5370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:38:18.525 [DEBUG] [Thread-5370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:38:18.525 [INFO] [Thread-5370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] client lang: <none>
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] server lang: <none>
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] kex follows: False
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] Compression: none
2025-11-25T20:38:18.529 [DEBUG] [Thread-5370] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:38:18.545 [DEBUG] [Thread-5370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:38:18.546 [DEBUG] [Thread-5370] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:38:18.546 [DEBUG] [Thread-5370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:38:18.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:38:18.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:38:18.546 [DEBUG] [Thread-5370] [transport.py] [_log()] userauth is OK
2025-11-25T20:38:18.546 [DEBUG] [Thread-5370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:38:18.546 [DEBUG] [Thread-5370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:38:18.546 [DEBUG] [Thread-5370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:38:18.546 [DEBUG] [Thread-5370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:38:18.555 [INFO] [Thread-5370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:38:18.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:38:19.193 [DEBUG] [Thread-5370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:38:19.193 [DEBUG] [Thread-5370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:38:19.193 [DEBUG] [Thread-5370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:38:19.234 [DEBUG] [Thread-5370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:38:19.234 [DEBUG] [Thread-5370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:38:19.237 [DEBUG] [Thread-5370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:38:19.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:38:19.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:38:19.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:38:19.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:38:19.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:38:19.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:38:19.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:38:19.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:38:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:38:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.776141 -999.00  +22.40   6.64     21   -0.90 1 1 1 1 1     0    0 19.35 -164.73 ZNESW 14.3 6.6 201.0 8.6 22.4 -26.3 22.4 -25.7 22.1 -24.6 22.3 -25.6
2025-11-25T20:38:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:38:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:38:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.776141
2025-11-25T20:38:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:38:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:38:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:38:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:38:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:38:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:37:51', tmtdew=27.25, humidity=15.93, cloud=0.0, wind=11.29, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:37:52', seeing=1.7, atlas_timestamp='2025-11-25T18:37:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:38:19.257 [DEBUG] [Thread-5370] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:38:19.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:38:19.343 [DEBUG] [Thread-5373] [transport.py] [_log()] starting thread (client mode): 0x7374ca00
2025-11-25T20:38:19.343 [DEBUG] [Thread-5373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:38:19.358 [DEBUG] [Thread-5373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:38:19.358 [INFO] [Thread-5373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:38:19.365 [DEBUG] [Thread-5373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:38:19.365 [DEBUG] [Thread-5373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] client lang: <none>
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] server lang: <none>
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] kex follows: False
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] Compression: none
2025-11-25T20:38:19.366 [DEBUG] [Thread-5373] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:38:19.424 [DEBUG] [Thread-5373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:38:19.424 [DEBUG] [Thread-5373] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:38:19.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:38:19.424 [DEBUG] [Thread-5373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:38:19.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:38:19.481 [DEBUG] [Thread-5373] [transport.py] [_log()] userauth is OK
2025-11-25T20:38:19.481 [DEBUG] [Thread-5373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:38:19.481 [DEBUG] [Thread-5373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:38:19.481 [DEBUG] [Thread-5373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:38:19.481 [DEBUG] [Thread-5373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:38:19.495 [INFO] [Thread-5373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:38:19.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:38:19.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:38:20.312 [DEBUG] [Thread-5373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:38:20.312 [DEBUG] [Thread-5373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:38:20.360 [DEBUG] [Thread-5373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:38:20.360 [DEBUG] [Thread-5373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:38:20.368 [DEBUG] [Thread-5373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:38:20.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:38: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')
2025-11-25T20:38:20.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:38:20.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:38:20.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:38:20.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:38:20.400 [DEBUG] [Thread-5373] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:38:30.558 [DEBUG] [Thread-5375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:38:31.875 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:38:31.877 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:38:45.608 [DEBUG] [Thread-5376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:38:50.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:38:50.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:38:50.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
2025-11-25T20:38:51.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 38, 23), 27.27, 15.91, 0.0, 10.99, 22.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:38:51.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:38:23
2025-11-25T20:38:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:38:51.352 [DEBUG] [Thread-5377] [transport.py] [_log()] starting thread (client mode): 0x70d6b040
2025-11-25T20:38:51.353 [DEBUG] [Thread-5377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:38:51.367 [DEBUG] [Thread-5377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:38:51.367 [INFO] [Thread-5377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] client lang: <none>
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] server lang: <none>
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] kex follows: False
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] Compression: none
2025-11-25T20:38:51.371 [DEBUG] [Thread-5377] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:38:51.387 [DEBUG] [Thread-5377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:38:51.387 [DEBUG] [Thread-5377] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:38:51.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:38:51.388 [DEBUG] [Thread-5377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:38:51.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:38:51.389 [DEBUG] [Thread-5377] [transport.py] [_log()] userauth is OK
2025-11-25T20:38:51.389 [DEBUG] [Thread-5377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:38:51.389 [DEBUG] [Thread-5377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:38:51.389 [DEBUG] [Thread-5377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:38:51.389 [DEBUG] [Thread-5377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:38:51.402 [INFO] [Thread-5377] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:38:51.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:38:52.150 [DEBUG] [Thread-5377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:38:52.150 [DEBUG] [Thread-5377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:38:52.151 [DEBUG] [Thread-5377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:38:52.192 [DEBUG] [Thread-5377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:38:52.192 [DEBUG] [Thread-5377] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:38:52.197 [DEBUG] [Thread-5377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:38:52.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:38:52.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:38:52.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:38:52.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:38:52.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:38:52.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:38:52.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:38:52.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:38:52.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:38:52.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.776488 -999.00  +22.40   7.14     21   -0.90 1 1 1 1 1     0    0 19.10 -160.51 ZNESW 6.3 7.1 177.6 17.1 22.3 -26.3 22.3 -25.6 22.1 -24.5 22.3 -25.6
2025-11-25T20:38:52.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:38:52.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:38:52.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.776488
2025-11-25T20:38:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:38:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:38:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:38:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:38:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:38:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:38:23', tmtdew=27.27, humidity=15.91, cloud=0.0, wind=10.99, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:38:24', seeing=2.32, atlas_timestamp='2025-11-25T18:38:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.0002500000000011937, 0.013250000000001094, -0.03900000000000148, -0.030999999999998806, 0.09975000000000023, -0.041000000000002146, 0.06425000000000125, -0.008500000000001506, 0.051000000000000156, 0.01774999999999949, 0.04100000000000037, 0.03200000000000003, 0.1322499999999991, -0.021000000000000796, -0.0070000000000014495, -0.03825000000000145, 0.03449999999999953, 0.0495000000000001, 0.006249999999999645, 0.02099999999999902, -0.0012500000000024158, -0.0007500000000000284, -0.004250000000000753, -0.0015000000000018332, 0.06550000000000011, 0.09724999999999895, 0.11650000000000027, 0.1404999999999994, 0.0990000000000002, 0.08050000000000068, 0.04200000000000159, 0.04774999999999885], zp_timestamp='2025-11-25T18:31:00')
2025-11-25T20:38:52.225 [DEBUG] [Thread-5377] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:38:52.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:38:52.317 [DEBUG] [Thread-5380] [transport.py] [_log()] starting thread (client mode): 0x70d1cbe0
2025-11-25T20:38:52.317 [DEBUG] [Thread-5380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:38:52.331 [DEBUG] [Thread-5380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:38:52.331 [INFO] [Thread-5380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:38:52.339 [DEBUG] [Thread-5380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:38:52.339 [DEBUG] [Thread-5380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:38:52.339 [DEBUG] [Thread-5380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] client lang: <none>
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] server lang: <none>
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] kex follows: False
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:38:52.340 [DEBUG] [Thread-5380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:38:52.341 [DEBUG] [Thread-5380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:38:52.341 [DEBUG] [Thread-5380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:38:52.341 [DEBUG] [Thread-5380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:38:52.341 [DEBUG] [Thread-5380] [transport.py] [_log()] Compression: none
2025-11-25T20:38:52.341 [DEBUG] [Thread-5380] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:38:52.402 [DEBUG] [Thread-5380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:38:52.402 [DEBUG] [Thread-5380] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:38:52.403 [DEBUG] [Thread-5380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:38:52.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:38:52.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:38:52.458 [DEBUG] [Thread-5380] [transport.py] [_log()] userauth is OK
2025-11-25T20:38:52.458 [DEBUG] [Thread-5380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:38:52.458 [DEBUG] [Thread-5380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:38:52.458 [DEBUG] [Thread-5380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:38:52.458 [DEBUG] [Thread-5380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:38:52.476 [INFO] [Thread-5380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:38:52.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:38:52.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:38:53.311 [DEBUG] [Thread-5380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:38:53.312 [DEBUG] [Thread-5380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:38:53.359 [DEBUG] [Thread-5380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:38:53.360 [DEBUG] [Thread-5380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:38:53.369 [DEBUG] [Thread-5380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:38:53.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:38:53.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:38:53.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:38:53.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:38:53.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:38:53.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:38:53.405 [DEBUG] [Thread-5380] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:38:57.090 [DEBUG] [Thread-5382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:39:00.642 [DEBUG] [Thread-5383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:39:15.696 [DEBUG] [Thread-5384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:39:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:39:23.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:39:23.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:39:24.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 38, 55), 27.23, 15.85, 0.0, 14.72, 22.38, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:39:24.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:38:55
2025-11-25T20:39:24.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:39:24.355 [DEBUG] [Thread-5385] [transport.py] [_log()] starting thread (client mode): 0x70d1fbb0
2025-11-25T20:39:24.355 [DEBUG] [Thread-5385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:39:24.375 [DEBUG] [Thread-5385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:39:24.375 [INFO] [Thread-5385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] client lang: <none>
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] server lang: <none>
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] kex follows: False
2025-11-25T20:39:24.378 [DEBUG] [Thread-5385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:39:24.379 [DEBUG] [Thread-5385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:39:24.379 [DEBUG] [Thread-5385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:39:24.379 [DEBUG] [Thread-5385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:39:24.379 [DEBUG] [Thread-5385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:39:24.379 [DEBUG] [Thread-5385] [transport.py] [_log()] Compression: none
2025-11-25T20:39:24.379 [DEBUG] [Thread-5385] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:39:24.395 [DEBUG] [Thread-5385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:39:24.395 [DEBUG] [Thread-5385] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:39:24.396 [DEBUG] [Thread-5385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:39:24.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:39:24.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:39:24.398 [DEBUG] [Thread-5385] [transport.py] [_log()] userauth is OK
2025-11-25T20:39:24.398 [DEBUG] [Thread-5385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:39:24.398 [DEBUG] [Thread-5385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:39:24.398 [DEBUG] [Thread-5385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:39:24.398 [DEBUG] [Thread-5385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:39:24.416 [INFO] [Thread-5385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:39:24.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:39:25.067 [DEBUG] [Thread-5385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:39:25.067 [DEBUG] [Thread-5385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:39:25.067 [DEBUG] [Thread-5385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:39:25.108 [DEBUG] [Thread-5385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:39:25.108 [DEBUG] [Thread-5385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:39:25.112 [DEBUG] [Thread-5385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:39:25.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:39:25.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:39:25.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:39:25.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:39:25.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:39:25.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:39:25.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:39:25.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:39:25.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:39:25.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.776835 -999.00  +22.30  10.14     21   -0.80 1 1 1 1 1     0    0 19.29 -156.78 ZNESW 13.2 10.1 181.1 14.7 22.4 -26.2 22.3 -25.8 22.0 -24.4 22.2 -25.4
2025-11-25T20:39:25.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:39:25.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:39:25.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.776835
2025-11-25T20:39:25.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:39:25.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:39:25.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:39:25.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:39:25.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:39:25.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:38:55', tmtdew=27.23, humidity=15.85, cloud=0.0, wind=14.72, temperature=22.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:38:56', seeing=1.8, atlas_timestamp='2025-11-25T18:38:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.05025000000000013, 0.003249999999999531, -0.0779999999999994, -0.042500000000000426, 0.08825000000000038, 0.007999999999999119, 0.006250000000001421, -0.03200000000000003, 0.041999999999999815, 0.0572499999999998, 0.03449999999999953, 0.09750000000000014, 0.12774999999999892, 0.015999999999998238, 0.016000000000000014, 0.06475000000000009, -0.0005000000000006111, 0.09199999999999875, 0.044249999999998124, -0.00300000000000189, 0.003750000000000142, -0.01974999999999838, 0.0027500000000006963, 0.020500000000000185, 0.03250000000000064, 0.060249999999999915, 0.11100000000000065, 0.11299999999999955, 0.05600000000000094, 0.051000000000000156, 0.05400000000000027, 0.06624999999999837], zp_timestamp='2025-11-25T18:36:00')
2025-11-25T20:39:25.140 [DEBUG] [Thread-5385] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:39:25.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:39:25.236 [DEBUG] [Thread-5388] [transport.py] [_log()] starting thread (client mode): 0x70d6b220
2025-11-25T20:39:25.236 [DEBUG] [Thread-5388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:39:25.250 [DEBUG] [Thread-5388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:39:25.251 [INFO] [Thread-5388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:39:25.258 [DEBUG] [Thread-5388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:39:25.258 [DEBUG] [Thread-5388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] client lang: <none>
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] server lang: <none>
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] kex follows: False
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] Compression: none
2025-11-25T20:39:25.259 [DEBUG] [Thread-5388] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:39:25.325 [DEBUG] [Thread-5388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:39:25.326 [DEBUG] [Thread-5388] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:39:25.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:39:25.327 [DEBUG] [Thread-5388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:39:25.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:39:25.382 [DEBUG] [Thread-5388] [transport.py] [_log()] userauth is OK
2025-11-25T20:39:25.382 [DEBUG] [Thread-5388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:39:25.382 [DEBUG] [Thread-5388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:39:25.382 [DEBUG] [Thread-5388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:39:25.382 [DEBUG] [Thread-5388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:39:25.401 [INFO] [Thread-5388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:39:25.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:39:25.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:39:26.236 [DEBUG] [Thread-5388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:39:26.236 [DEBUG] [Thread-5388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:39:26.285 [DEBUG] [Thread-5388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:39:26.285 [DEBUG] [Thread-5388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:39:26.294 [DEBUG] [Thread-5388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:39:26.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:39:26.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:39:26.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:39:26.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:39:26.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:39:26.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:39:26.331 [DEBUG] [Thread-5388] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:39:30.733 [DEBUG] [Thread-5390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:39:32.092 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:39:32.093 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:39:45.792 [DEBUG] [Thread-5391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:39:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:39:56.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:39:56.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:39:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 39, 27), 27.2, 15.88, 0.0, 20.78, 22.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:39:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:39:27
2025-11-25T20:39:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:39:57.142 [DEBUG] [Thread-5392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:39:57.285 [DEBUG] [Thread-5393] [transport.py] [_log()] starting thread (client mode): 0x70d2a380
2025-11-25T20:39:57.285 [DEBUG] [Thread-5393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:39:57.300 [DEBUG] [Thread-5393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:39:57.300 [INFO] [Thread-5393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] client lang: <none>
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] server lang: <none>
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] kex follows: False
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] Compression: none
2025-11-25T20:39:57.303 [DEBUG] [Thread-5393] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:39:57.322 [DEBUG] [Thread-5393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:39:57.323 [DEBUG] [Thread-5393] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:39:57.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:39:57.324 [DEBUG] [Thread-5393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:39:57.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:39:57.326 [DEBUG] [Thread-5393] [transport.py] [_log()] userauth is OK
2025-11-25T20:39:57.326 [DEBUG] [Thread-5393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:39:57.326 [DEBUG] [Thread-5393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:39:57.326 [DEBUG] [Thread-5393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:39:57.327 [DEBUG] [Thread-5393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:39:57.350 [INFO] [Thread-5393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:39:57.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:39:58.204 [DEBUG] [Thread-5393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:39:58.205 [DEBUG] [Thread-5393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:39:58.205 [DEBUG] [Thread-5393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:39:58.246 [DEBUG] [Thread-5393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:39:58.246 [DEBUG] [Thread-5393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:39:58.249 [DEBUG] [Thread-5393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:39:58.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:39:58.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:39:58.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:39:58.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:39:58.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:39:58.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:39:58.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:39:58.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:39:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:39:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.777182 -999.00  +22.40  18.36     21   -0.70 1 1 1 1 1     0    0 19.30 -162.93 ZNESW 17.1 18.4 175.8 22.9 22.3 -26.0 22.3 -25.4 22.0 -24.3 22.2 -25.2
2025-11-25T20:39:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:39:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:39:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.777182
2025-11-25T20:39:58.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:39:58.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:39:58.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:39:58.275 [DEBUG] [Thread-5393] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:39:58.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:39:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:39:58.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:39:27', tmtdew=27.2, humidity=15.88, cloud=0.0, wind=20.78, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:39:28', seeing=1.8, atlas_timestamp='2025-11-25T18:39:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.05025000000000013, 0.003249999999999531, -0.0779999999999994, -0.042500000000000426, 0.08825000000000038, 0.007999999999999119, 0.006250000000001421, -0.03200000000000003, 0.041999999999999815, 0.0572499999999998, 0.03449999999999953, 0.09750000000000014, 0.12774999999999892, 0.015999999999998238, 0.016000000000000014, 0.06475000000000009, -0.0005000000000006111, 0.09199999999999875, 0.044249999999998124, -0.00300000000000189, 0.003750000000000142, -0.01974999999999838, 0.0027500000000006963, 0.020500000000000185, 0.03250000000000064, 0.060249999999999915, 0.11100000000000065, 0.11299999999999955, 0.05600000000000094, 0.051000000000000156, 0.05400000000000027, 0.06624999999999837], zp_timestamp='2025-11-25T18:36:00')
2025-11-25T20:39:58.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:39:58.368 [DEBUG] [Thread-5396] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-25T20:39:58.369 [DEBUG] [Thread-5396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:39:58.387 [DEBUG] [Thread-5396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:39:58.387 [INFO] [Thread-5396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:39:58.401 [DEBUG] [Thread-5396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] client lang: <none>
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] server lang: <none>
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] kex follows: False
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:39:58.402 [DEBUG] [Thread-5396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:39:58.403 [DEBUG] [Thread-5396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:39:58.403 [DEBUG] [Thread-5396] [transport.py] [_log()] Compression: none
2025-11-25T20:39:58.403 [DEBUG] [Thread-5396] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:39:58.457 [DEBUG] [Thread-5396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:39:58.457 [DEBUG] [Thread-5396] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:39:58.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:39:58.459 [DEBUG] [Thread-5396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:39:58.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:39:58.521 [DEBUG] [Thread-5396] [transport.py] [_log()] userauth is OK
2025-11-25T20:39:58.522 [DEBUG] [Thread-5396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:39:58.522 [DEBUG] [Thread-5396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:39:58.522 [DEBUG] [Thread-5396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:39:58.522 [DEBUG] [Thread-5396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:39:58.544 [INFO] [Thread-5396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:39:58.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:39:58.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:39:59.405 [DEBUG] [Thread-5396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:39:59.405 [DEBUG] [Thread-5396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:39:59.452 [DEBUG] [Thread-5396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:39:59.452 [DEBUG] [Thread-5396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:39:59.461 [DEBUG] [Thread-5396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:39:59.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:39:59.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:39:59.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:39:59.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:39:59.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:39:59.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:39:59.495 [DEBUG] [Thread-5396] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:40:00.825 [DEBUG] [Thread-5398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:40:15.865 [DEBUG] [Thread-5399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:40:23.927 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:40:29.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:40:29.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:40:29.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:40:30.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 39, 59), 27.16, 15.88, 0.0, 20.84, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:40:30.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:39:59
2025-11-25T20:40:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:40:30.435 [DEBUG] [Thread-5400] [transport.py] [_log()] starting thread (client mode): 0x70d0d0c0
2025-11-25T20:40:30.435 [DEBUG] [Thread-5400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:40:30.454 [DEBUG] [Thread-5400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:40:30.455 [INFO] [Thread-5400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:40:30.458 [DEBUG] [Thread-5400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:40:30.458 [DEBUG] [Thread-5400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:40:30.458 [DEBUG] [Thread-5400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:40:30.458 [DEBUG] [Thread-5400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:40:30.458 [DEBUG] [Thread-5400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:40:30.458 [DEBUG] [Thread-5400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:40:30.458 [DEBUG] [Thread-5400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:40:30.458 [DEBUG] [Thread-5400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:40:30.458 [DEBUG] [Thread-5400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] client lang: <none>
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] server lang: <none>
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] kex follows: False
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] Compression: none
2025-11-25T20:40:30.459 [DEBUG] [Thread-5400] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:40:30.477 [DEBUG] [Thread-5400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:40:30.478 [DEBUG] [Thread-5400] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:40:30.479 [DEBUG] [Thread-5400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:40:30.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:40:30.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:40:30.520 [DEBUG] [Thread-5400] [transport.py] [_log()] userauth is OK
2025-11-25T20:40:30.521 [DEBUG] [Thread-5400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:40:30.521 [DEBUG] [Thread-5400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:40:30.521 [DEBUG] [Thread-5400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:40:30.521 [DEBUG] [Thread-5400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:40:30.541 [INFO] [Thread-5400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:40:30.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:40:30.905 [DEBUG] [Thread-5402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:40:31.188 [DEBUG] [Thread-5400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:40:31.189 [DEBUG] [Thread-5400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:40:31.189 [DEBUG] [Thread-5400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:40:31.230 [DEBUG] [Thread-5400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:40:31.230 [DEBUG] [Thread-5400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:40:31.234 [DEBUG] [Thread-5400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:40:31.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:40:31.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:40:31.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:40:31.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:40:31.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:40:31.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:40:31.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:40:31.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:40:31.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:40:31.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.777877 -999.00  +22.40  16.22     21   -0.80 1 1 1 1 1     0    0 19.76 -154.51 ZNESW 11.5 16.2 191.2 21.4 22.3 -26.1 22.3 -25.4 22.1 -24.2 22.3 -25.5
2025-11-25T20:40:31.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:40:31.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:40:31.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.777877
2025-11-25T20:40:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:40:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:40:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:40:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:40:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:40:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:39:59', tmtdew=27.16, humidity=15.88, cloud=0.0, wind=20.84, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:40:00', seeing=1.72, atlas_timestamp='2025-11-25T18:40:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.05025000000000013, 0.003249999999999531, -0.0779999999999994, -0.042500000000000426, 0.08825000000000038, 0.007999999999999119, 0.006250000000001421, -0.03200000000000003, 0.041999999999999815, 0.0572499999999998, 0.03449999999999953, 0.09750000000000014, 0.12774999999999892, 0.015999999999998238, 0.016000000000000014, 0.06475000000000009, -0.0005000000000006111, 0.09199999999999875, 0.044249999999998124, -0.00300000000000189, 0.003750000000000142, -0.01974999999999838, 0.0027500000000006963, 0.020500000000000185, 0.03250000000000064, 0.060249999999999915, 0.11100000000000065, 0.11299999999999955, 0.05600000000000094, 0.051000000000000156, 0.05400000000000027, 0.06624999999999837], zp_timestamp='2025-11-25T18:36:00')
2025-11-25T20:40:31.258 [DEBUG] [Thread-5400] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:40:31.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:40:31.355 [DEBUG] [Thread-5404] [transport.py] [_log()] starting thread (client mode): 0x70d6af80
2025-11-25T20:40:31.355 [DEBUG] [Thread-5404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:40:31.369 [DEBUG] [Thread-5404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:40:31.369 [INFO] [Thread-5404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:40:31.378 [DEBUG] [Thread-5404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:40:31.378 [DEBUG] [Thread-5404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:40:31.378 [DEBUG] [Thread-5404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:40:31.378 [DEBUG] [Thread-5404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:40:31.378 [DEBUG] [Thread-5404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:40:31.378 [DEBUG] [Thread-5404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:40:31.379 [DEBUG] [Thread-5404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:40:31.379 [DEBUG] [Thread-5404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:40:31.379 [DEBUG] [Thread-5404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:40:31.379 [DEBUG] [Thread-5404] [transport.py] [_log()] client lang: <none>
2025-11-25T20:40:31.379 [DEBUG] [Thread-5404] [transport.py] [_log()] server lang: <none>
2025-11-25T20:40:31.379 [DEBUG] [Thread-5404] [transport.py] [_log()] kex follows: False
2025-11-25T20:40:31.379 [DEBUG] [Thread-5404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:40:31.379 [DEBUG] [Thread-5404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:40:31.380 [DEBUG] [Thread-5404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:40:31.380 [DEBUG] [Thread-5404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:40:31.380 [DEBUG] [Thread-5404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:40:31.380 [DEBUG] [Thread-5404] [transport.py] [_log()] Compression: none
2025-11-25T20:40:31.380 [DEBUG] [Thread-5404] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:40:31.434 [DEBUG] [Thread-5404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:40:31.435 [DEBUG] [Thread-5404] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:40:31.436 [DEBUG] [Thread-5404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:40:31.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:40:31.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:40:31.494 [DEBUG] [Thread-5404] [transport.py] [_log()] userauth is OK
2025-11-25T20:40:31.494 [DEBUG] [Thread-5404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:40:31.495 [DEBUG] [Thread-5404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:40:31.495 [DEBUG] [Thread-5404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:40:31.495 [DEBUG] [Thread-5404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:40:31.514 [INFO] [Thread-5404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:40:31.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:40:31.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:40:32.295 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:40:32.296 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:40:32.368 [DEBUG] [Thread-5404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:40:32.368 [DEBUG] [Thread-5404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:40:32.416 [DEBUG] [Thread-5404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:40:32.416 [DEBUG] [Thread-5404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:40:32.424 [DEBUG] [Thread-5404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:40:32.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:40:32.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:40:32.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:40:32.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:40:32.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:40:32.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:40:32.457 [DEBUG] [Thread-5404] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:40:36.095 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:40:45.940 [DEBUG] [Thread-5406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:40:49.122 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:40:57.214 [DEBUG] [Thread-5407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:41:00.977 [DEBUG] [Thread-5408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:41:02.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:41:02.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:41:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:41:03.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 40, 32), 27.22, 15.82, 0.0, 15.78, 22.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:41:03.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:40:32
2025-11-25T20:41:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:41:03.397 [DEBUG] [Thread-5409] [transport.py] [_log()] starting thread (client mode): 0x70d41f00
2025-11-25T20:41:03.397 [DEBUG] [Thread-5409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:41:03.418 [DEBUG] [Thread-5409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:41:03.418 [INFO] [Thread-5409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:41:03.422 [DEBUG] [Thread-5409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:41:03.422 [DEBUG] [Thread-5409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] client lang: <none>
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] server lang: <none>
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] kex follows: False
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:41:03.423 [DEBUG] [Thread-5409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:41:03.424 [DEBUG] [Thread-5409] [transport.py] [_log()] Compression: none
2025-11-25T20:41:03.424 [DEBUG] [Thread-5409] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:41:03.444 [DEBUG] [Thread-5409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:41:03.444 [DEBUG] [Thread-5409] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:41:03.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:41:03.445 [DEBUG] [Thread-5409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:41:03.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:41:03.448 [DEBUG] [Thread-5409] [transport.py] [_log()] userauth is OK
2025-11-25T20:41:03.448 [DEBUG] [Thread-5409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:41:03.448 [DEBUG] [Thread-5409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:41:03.448 [DEBUG] [Thread-5409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:41:03.448 [DEBUG] [Thread-5409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:41:03.483 [INFO] [Thread-5409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:41:03.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:41:04.267 [DEBUG] [Thread-5409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:41:04.267 [DEBUG] [Thread-5409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:41:04.267 [DEBUG] [Thread-5409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:41:04.308 [DEBUG] [Thread-5409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:41:04.308 [DEBUG] [Thread-5409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:41:04.310 [DEBUG] [Thread-5409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:41:04.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:41:04.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:41:04.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:41:04.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:41:04.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:41:04.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:41:04.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.778224 -999.00  +22.40  17.04     21   -0.80 1 1 1 1 1     0    0 19.43 -151.35 ZNESW 18.4 17.0 192.6 21.7 22.3 -25.9 22.4 -25.5 22.1 -24.3 22.3 -25.3
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.778224
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:41:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:40:32', tmtdew=27.22, humidity=15.82, cloud=0.0, wind=15.78, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:40:32', seeing=1.39, atlas_timestamp='2025-11-25T18:40:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.05025000000000013, 0.003249999999999531, -0.0779999999999994, -0.042500000000000426, 0.08825000000000038, 0.007999999999999119, 0.006250000000001421, -0.03200000000000003, 0.041999999999999815, 0.0572499999999998, 0.03449999999999953, 0.09750000000000014, 0.12774999999999892, 0.015999999999998238, 0.016000000000000014, 0.06475000000000009, -0.0005000000000006111, 0.09199999999999875, 0.044249999999998124, -0.00300000000000189, 0.003750000000000142, -0.01974999999999838, 0.0027500000000006963, 0.020500000000000185, 0.03250000000000064, 0.060249999999999915, 0.11100000000000065, 0.11299999999999955, 0.05600000000000094, 0.051000000000000156, 0.05400000000000027, 0.06624999999999837], zp_timestamp='2025-11-25T18:36:00')
2025-11-25T20:41:04.328 [DEBUG] [Thread-5409] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:41:04.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:41:16.012 [DEBUG] [Thread-5412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:41:31.065 [DEBUG] [Thread-5413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:41:32.497 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:41:32.498 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:41:46.102 [DEBUG] [Thread-5414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:41:49.666 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:41:57.271 [DEBUG] [Thread-5415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:42:01.141 [DEBUG] [Thread-5416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:42:16.173 [DEBUG] [Thread-5417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:42:31.211 [DEBUG] [Thread-5418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:42:32.703 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:42:32.704 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:42:46.244 [DEBUG] [Thread-5419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:42:57.333 [DEBUG] [Thread-5420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:43:01.278 [DEBUG] [Thread-5421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:43:16.311 [DEBUG] [Thread-5422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:43:18.861 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T20:43:31.343 [DEBUG] [Thread-5423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:43:32.914 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:43:32.915 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:43:46.377 [DEBUG] [Thread-5424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:43:48.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:43:48.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:43:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:43:49.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 43, 45), 27.38, 15.78, 0.0, 16.27, 22.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:43:49.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:43:45
2025-11-25T20:43:49.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:43:49.825 [DEBUG] [Thread-5425] [transport.py] [_log()] starting thread (client mode): 0x70d1e740
2025-11-25T20:43:49.825 [DEBUG] [Thread-5425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:43:49.846 [DEBUG] [Thread-5425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:43:49.846 [INFO] [Thread-5425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] client lang: <none>
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] server lang: <none>
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] kex follows: False
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:43:49.849 [DEBUG] [Thread-5425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:43:49.850 [DEBUG] [Thread-5425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:43:49.850 [DEBUG] [Thread-5425] [transport.py] [_log()] Compression: none
2025-11-25T20:43:49.850 [DEBUG] [Thread-5425] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:43:49.868 [DEBUG] [Thread-5425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:43:49.869 [DEBUG] [Thread-5425] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:43:49.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:43:49.870 [DEBUG] [Thread-5425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:43:49.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:43:49.872 [DEBUG] [Thread-5425] [transport.py] [_log()] userauth is OK
2025-11-25T20:43:49.872 [DEBUG] [Thread-5425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:43:49.872 [DEBUG] [Thread-5425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:43:49.872 [DEBUG] [Thread-5425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:43:49.872 [DEBUG] [Thread-5425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:43:49.892 [INFO] [Thread-5425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:43:49.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:43:50.519 [DEBUG] [Thread-5425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:43:50.519 [DEBUG] [Thread-5425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:43:50.519 [DEBUG] [Thread-5425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:43:50.559 [DEBUG] [Thread-5425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:43:50.560 [DEBUG] [Thread-5425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:43:50.563 [DEBUG] [Thread-5425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:43:50.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:43:50.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:43:50.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:43:50.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:43:50.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:43:50.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:43:50.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:43:50.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:43:50.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:43:50.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.780307 -999.00  +22.40   9.40     21   -0.80 1 1 1 1 1     0    0 20.03 -119.53 ZNESW 11.4 9.4 195.3 16.3 22.3 -26.2 22.3 -25.6 22.0 -24.3 22.2 -25.5
2025-11-25T20:43:50.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:43:50.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:43:50.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.780307
2025-11-25T20:43:50.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:43:50.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:43:50.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:43:50.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:43:50.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:43:50.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:43:45', tmtdew=27.38, humidity=15.78, cloud=0.0, wind=16.27, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:43:45', seeing=1.33, atlas_timestamp='2025-11-25T18:43:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.05424999999999969, -0.0017499999999994742, -0.02450000000000152, 0.0625, 0.0807500000000001, 0.025000000000000355, -0.010749999999999815, 0.023999999999999133, 0.04550000000000054, 0.026250000000000995, 0.06799999999999962, 0.11949999999999861, 0.1327499999999997, 0.01699999999999946, 0.03599999999999959, 0.10024999999999906, 0.019999999999999574, 0.09699999999999953, 0.06324999999999825, 0.10999999999999943, 0.07374999999999865, 0.035250000000001336, 0.0337499999999995, 0.028999999999999915, 0.06949999999999967, 0.12875000000000014, 0.11000000000000121, 0.14199999999999946, 0.07600000000000051, 0.06800000000000139, 0.03900000000000148, 0.04574999999999996], zp_timestamp='2025-11-25T18:41:00')
2025-11-25T20:43:50.590 [DEBUG] [Thread-5425] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:43:50.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:43:50.688 [DEBUG] [Thread-5428] [transport.py] [_log()] starting thread (client mode): 0x70d690f0
2025-11-25T20:43:50.689 [DEBUG] [Thread-5428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:43:50.706 [DEBUG] [Thread-5428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:43:50.706 [INFO] [Thread-5428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:43:50.714 [DEBUG] [Thread-5428] [transport.py] [_log()] client lang: <none>
2025-11-25T20:43:50.715 [DEBUG] [Thread-5428] [transport.py] [_log()] server lang: <none>
2025-11-25T20:43:50.715 [DEBUG] [Thread-5428] [transport.py] [_log()] kex follows: False
2025-11-25T20:43:50.715 [DEBUG] [Thread-5428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:43:50.715 [DEBUG] [Thread-5428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:43:50.715 [DEBUG] [Thread-5428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:43:50.715 [DEBUG] [Thread-5428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:43:50.715 [DEBUG] [Thread-5428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:43:50.715 [DEBUG] [Thread-5428] [transport.py] [_log()] Compression: none
2025-11-25T20:43:50.715 [DEBUG] [Thread-5428] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:43:50.774 [DEBUG] [Thread-5428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:43:50.775 [DEBUG] [Thread-5428] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:43:50.775 [DEBUG] [Thread-5428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:43:50.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:43:50.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:43:50.830 [DEBUG] [Thread-5428] [transport.py] [_log()] userauth is OK
2025-11-25T20:43:50.830 [DEBUG] [Thread-5428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:43:50.830 [DEBUG] [Thread-5428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:43:50.830 [DEBUG] [Thread-5428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:43:50.830 [DEBUG] [Thread-5428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:43:50.850 [INFO] [Thread-5428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:43:50.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:43:50.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:43:51.724 [DEBUG] [Thread-5428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:43:51.724 [DEBUG] [Thread-5428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:43:51.772 [DEBUG] [Thread-5428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:43:51.772 [DEBUG] [Thread-5428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:43:51.780 [DEBUG] [Thread-5428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:43:51.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:43:51.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:43:51.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:43:51.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:43:51.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:43:51.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:43:51.812 [DEBUG] [Thread-5428] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:43:57.401 [DEBUG] [Thread-5430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:44:01.410 [DEBUG] [Thread-5431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:44:16.473 [DEBUG] [Thread-5432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:44:21.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:44:21.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:44:21.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:44:22.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 44, 17), 27.29, 15.88, 0.0, 15.95, 22.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:44:22.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:44:17
2025-11-25T20:44:22.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:44:22.774 [DEBUG] [Thread-5433] [transport.py] [_log()] starting thread (client mode): 0x7374d780
2025-11-25T20:44:22.774 [DEBUG] [Thread-5433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:44:22.794 [DEBUG] [Thread-5433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:44:22.794 [INFO] [Thread-5433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] client lang: <none>
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] server lang: <none>
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] kex follows: False
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:44:22.797 [DEBUG] [Thread-5433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:44:22.798 [DEBUG] [Thread-5433] [transport.py] [_log()] Compression: none
2025-11-25T20:44:22.798 [DEBUG] [Thread-5433] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:44:22.816 [DEBUG] [Thread-5433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:44:22.816 [DEBUG] [Thread-5433] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:44:22.817 [DEBUG] [Thread-5433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:44:22.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:44:22.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:44:22.819 [DEBUG] [Thread-5433] [transport.py] [_log()] userauth is OK
2025-11-25T20:44:22.819 [DEBUG] [Thread-5433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:44:22.819 [DEBUG] [Thread-5433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:44:22.819 [DEBUG] [Thread-5433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:44:22.819 [DEBUG] [Thread-5433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:44:22.844 [INFO] [Thread-5433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:44:22.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:44:23.513 [DEBUG] [Thread-5433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:44:23.513 [DEBUG] [Thread-5433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:44:23.513 [DEBUG] [Thread-5433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:44:23.553 [DEBUG] [Thread-5433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:44:23.553 [DEBUG] [Thread-5433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:44:23.556 [DEBUG] [Thread-5433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:44:23.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:44:23.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:44:23.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:44:23.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:44:23.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:44:23.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:44:23.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:44:23.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:44:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:44:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.780655 -999.00  +22.40  11.10     21   -0.80 1 1 1 1 1     0    0 20.06 -120.35 ZNESW 11.5 11.1 193.7 14.0 22.4 -26.1 22.3 -25.6 22.1 -24.5 22.2 -25.4
2025-11-25T20:44:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:44:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:44:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.780655
2025-11-25T20:44:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:44:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:44:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:44:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:44:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:44:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:44:17', tmtdew=27.29, humidity=15.88, cloud=0.0, wind=15.95, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:44:17', seeing=1.33, atlas_timestamp='2025-11-25T18:44:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.05424999999999969, -0.0017499999999994742, -0.02450000000000152, 0.0625, 0.0807500000000001, 0.025000000000000355, -0.010749999999999815, 0.023999999999999133, 0.04550000000000054, 0.026250000000000995, 0.06799999999999962, 0.11949999999999861, 0.1327499999999997, 0.01699999999999946, 0.03599999999999959, 0.10024999999999906, 0.019999999999999574, 0.09699999999999953, 0.06324999999999825, 0.10999999999999943, 0.07374999999999865, 0.035250000000001336, 0.0337499999999995, 0.028999999999999915, 0.06949999999999967, 0.12875000000000014, 0.11000000000000121, 0.14199999999999946, 0.07600000000000051, 0.06800000000000139, 0.03900000000000148, 0.04574999999999996], zp_timestamp='2025-11-25T18:41:00')
2025-11-25T20:44:23.583 [DEBUG] [Thread-5433] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:44:23.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:44:23.674 [DEBUG] [Thread-5436] [transport.py] [_log()] starting thread (client mode): 0x70d43130
2025-11-25T20:44:23.674 [DEBUG] [Thread-5436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:44:23.688 [DEBUG] [Thread-5436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:44:23.688 [INFO] [Thread-5436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:44:23.695 [DEBUG] [Thread-5436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] client lang: <none>
2025-11-25T20:44:23.696 [DEBUG] [Thread-5436] [transport.py] [_log()] server lang: <none>
2025-11-25T20:44:23.697 [DEBUG] [Thread-5436] [transport.py] [_log()] kex follows: False
2025-11-25T20:44:23.697 [DEBUG] [Thread-5436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:44:23.697 [DEBUG] [Thread-5436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:44:23.697 [DEBUG] [Thread-5436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:44:23.697 [DEBUG] [Thread-5436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:44:23.697 [DEBUG] [Thread-5436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:44:23.697 [DEBUG] [Thread-5436] [transport.py] [_log()] Compression: none
2025-11-25T20:44:23.698 [DEBUG] [Thread-5436] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:44:23.754 [DEBUG] [Thread-5436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:44:23.755 [DEBUG] [Thread-5436] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:44:23.755 [DEBUG] [Thread-5436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:44:23.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:44:23.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:44:23.810 [DEBUG] [Thread-5436] [transport.py] [_log()] userauth is OK
2025-11-25T20:44:23.810 [DEBUG] [Thread-5436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:44:23.810 [DEBUG] [Thread-5436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:44:23.810 [DEBUG] [Thread-5436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:44:23.810 [DEBUG] [Thread-5436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:44:23.828 [INFO] [Thread-5436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:44:23.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:44:23.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:44:24.704 [DEBUG] [Thread-5436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:44:24.705 [DEBUG] [Thread-5436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:44:24.753 [DEBUG] [Thread-5436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:44:24.753 [DEBUG] [Thread-5436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:44:24.762 [DEBUG] [Thread-5436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:44:24.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:44:24.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:44:24.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:44:24.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:44:24.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:44:24.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:44:24.799 [DEBUG] [Thread-5436] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:44:31.504 [DEBUG] [Thread-5438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:44:33.117 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:44:33.117 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:44:46.547 [DEBUG] [Thread-5439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:44:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:44:54.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:44:54.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:44:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 44, 49), 27.32, 15.91, 0.0, 15.46, 22.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:44:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:44:49
2025-11-25T20:44:55.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:44:55.766 [DEBUG] [Thread-5440] [transport.py] [_log()] starting thread (client mode): 0x70d6b9d0
2025-11-25T20:44:55.767 [DEBUG] [Thread-5440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:44:55.786 [DEBUG] [Thread-5440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:44:55.786 [INFO] [Thread-5440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] client lang: <none>
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] server lang: <none>
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] kex follows: False
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] Compression: none
2025-11-25T20:44:55.790 [DEBUG] [Thread-5440] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:44:55.807 [DEBUG] [Thread-5440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:44:55.807 [DEBUG] [Thread-5440] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:44:55.807 [DEBUG] [Thread-5440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:44:55.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:44:55.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:44:55.808 [DEBUG] [Thread-5440] [transport.py] [_log()] userauth is OK
2025-11-25T20:44:55.809 [DEBUG] [Thread-5440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:44:55.809 [DEBUG] [Thread-5440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:44:55.809 [DEBUG] [Thread-5440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:44:55.809 [DEBUG] [Thread-5440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:44:55.829 [INFO] [Thread-5440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:44:55.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:44:56.435 [DEBUG] [Thread-5440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:44:56.435 [DEBUG] [Thread-5440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:44:56.436 [DEBUG] [Thread-5440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:44:56.476 [DEBUG] [Thread-5440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:44:56.477 [DEBUG] [Thread-5440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:44:56.480 [DEBUG] [Thread-5440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:44:56.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:44:56.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:44:56.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:44:56.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:44:56.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:44:56.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:44:56.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:44:56.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:44:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:44:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.781002 -999.00  +22.30  10.01     21   -0.80 1 1 1 1 1     0    0 20.68 -109.10 ZNESW 11.2 10.0 212.0 14.7 22.3 -26.1 22.3 -25.4 22.0 -24.3 22.2 -25.2
2025-11-25T20:44:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:44:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:44:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.781002
2025-11-25T20:44:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:44:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:44:56.508 [DEBUG] [Thread-5440] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:44:56.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:44:56.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:44:56.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:44:56.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:44:49', tmtdew=27.32, humidity=15.91, cloud=0.0, wind=15.46, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:44:49', seeing=1.36, atlas_timestamp='2025-11-25T18:44:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.05424999999999969, -0.0017499999999994742, -0.02450000000000152, 0.0625, 0.0807500000000001, 0.025000000000000355, -0.010749999999999815, 0.023999999999999133, 0.04550000000000054, 0.026250000000000995, 0.06799999999999962, 0.11949999999999861, 0.1327499999999997, 0.01699999999999946, 0.03599999999999959, 0.10024999999999906, 0.019999999999999574, 0.09699999999999953, 0.06324999999999825, 0.10999999999999943, 0.07374999999999865, 0.035250000000001336, 0.0337499999999995, 0.028999999999999915, 0.06949999999999967, 0.12875000000000014, 0.11000000000000121, 0.14199999999999946, 0.07600000000000051, 0.06800000000000139, 0.03900000000000148, 0.04574999999999996], zp_timestamp='2025-11-25T18:41:00')
2025-11-25T20:44:56.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:44:56.604 [DEBUG] [Thread-5443] [transport.py] [_log()] starting thread (client mode): 0x70d6a800
2025-11-25T20:44:56.604 [DEBUG] [Thread-5443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:44:56.622 [DEBUG] [Thread-5443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:44:56.622 [INFO] [Thread-5443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:44:56.629 [DEBUG] [Thread-5443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:44:56.630 [DEBUG] [Thread-5443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:44:56.630 [DEBUG] [Thread-5443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:44:56.630 [DEBUG] [Thread-5443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:44:56.630 [DEBUG] [Thread-5443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:44:56.630 [DEBUG] [Thread-5443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:44:56.630 [DEBUG] [Thread-5443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:44:56.630 [DEBUG] [Thread-5443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:44:56.631 [DEBUG] [Thread-5443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:44:56.631 [DEBUG] [Thread-5443] [transport.py] [_log()] client lang: <none>
2025-11-25T20:44:56.631 [DEBUG] [Thread-5443] [transport.py] [_log()] server lang: <none>
2025-11-25T20:44:56.631 [DEBUG] [Thread-5443] [transport.py] [_log()] kex follows: False
2025-11-25T20:44:56.631 [DEBUG] [Thread-5443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:44:56.631 [DEBUG] [Thread-5443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:44:56.631 [DEBUG] [Thread-5443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:44:56.631 [DEBUG] [Thread-5443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:44:56.631 [DEBUG] [Thread-5443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:44:56.632 [DEBUG] [Thread-5443] [transport.py] [_log()] Compression: none
2025-11-25T20:44:56.632 [DEBUG] [Thread-5443] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:44:56.689 [DEBUG] [Thread-5443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:44:56.690 [DEBUG] [Thread-5443] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:44:56.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:44:56.691 [DEBUG] [Thread-5443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:44:56.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:44:56.745 [DEBUG] [Thread-5443] [transport.py] [_log()] userauth is OK
2025-11-25T20:44:56.745 [DEBUG] [Thread-5443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:44:56.746 [DEBUG] [Thread-5443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:44:56.746 [DEBUG] [Thread-5443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:44:56.746 [DEBUG] [Thread-5443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:44:56.765 [INFO] [Thread-5443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:44:56.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:44:56.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:44:57.457 [DEBUG] [Thread-5445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:44:57.583 [DEBUG] [Thread-5443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:44:57.583 [DEBUG] [Thread-5443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:44:57.632 [DEBUG] [Thread-5443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:44:57.632 [DEBUG] [Thread-5443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:44:57.641 [DEBUG] [Thread-5443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:44:57.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:44:57.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:44:57.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:44:57.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:44:57.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:44:57.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:44:57.678 [DEBUG] [Thread-5443] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:45:01.584 [DEBUG] [Thread-5446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:45:16.624 [DEBUG] [Thread-5447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:45:27.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:45:27.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:45:27.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:45:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 45, 21), 27.35, 15.87, 0.0, 18.99, 22.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:45:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:45:21
2025-11-25T20:45:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:45:28.645 [DEBUG] [Thread-5448] [transport.py] [_log()] starting thread (client mode): 0x737c7b50
2025-11-25T20:45:28.645 [DEBUG] [Thread-5448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:45:28.665 [DEBUG] [Thread-5448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:45:28.665 [INFO] [Thread-5448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] client lang: <none>
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] server lang: <none>
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] kex follows: False
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:45:28.668 [DEBUG] [Thread-5448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:45:28.669 [DEBUG] [Thread-5448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:45:28.669 [DEBUG] [Thread-5448] [transport.py] [_log()] Compression: none
2025-11-25T20:45:28.669 [DEBUG] [Thread-5448] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:45:28.688 [DEBUG] [Thread-5448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:45:28.689 [DEBUG] [Thread-5448] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:45:28.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:45:28.689 [DEBUG] [Thread-5448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:45:28.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:45:28.691 [DEBUG] [Thread-5448] [transport.py] [_log()] userauth is OK
2025-11-25T20:45:28.692 [DEBUG] [Thread-5448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:45:28.692 [DEBUG] [Thread-5448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:45:28.692 [DEBUG] [Thread-5448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:45:28.692 [DEBUG] [Thread-5448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:45:28.714 [INFO] [Thread-5448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:45:28.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:45:29.333 [DEBUG] [Thread-5448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:45:29.334 [DEBUG] [Thread-5448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:45:29.334 [DEBUG] [Thread-5448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:45:29.375 [DEBUG] [Thread-5448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:45:29.375 [DEBUG] [Thread-5448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:45:29.377 [DEBUG] [Thread-5448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:45:29.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:45:29.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:45:29.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:45:29.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:45:29.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:45:29.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:45:29.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:45:29.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:45:29.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:45:29.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.781349 -999.00  +22.40  10.58     21   -0.80 1 1 1 1 1     0    0 20.70 -104.45 ZNESW 6.5 10.6 186.2 15.9 22.3 -26.0 22.3 -25.6 22.0 -24.3 22.2 -25.2
2025-11-25T20:45:29.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:45:29.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:45:29.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.781349
2025-11-25T20:45:29.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:45:29.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:45:29.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:45:29.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:45:29.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:45:29.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:45:21', tmtdew=27.35, humidity=15.87, cloud=0.0, wind=18.99, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:45:21', seeing=1.51, atlas_timestamp='2025-11-25T18:45:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.05424999999999969, -0.0017499999999994742, -0.02450000000000152, 0.0625, 0.0807500000000001, 0.025000000000000355, -0.010749999999999815, 0.023999999999999133, 0.04550000000000054, 0.026250000000000995, 0.06799999999999962, 0.11949999999999861, 0.1327499999999997, 0.01699999999999946, 0.03599999999999959, 0.10024999999999906, 0.019999999999999574, 0.09699999999999953, 0.06324999999999825, 0.10999999999999943, 0.07374999999999865, 0.035250000000001336, 0.0337499999999995, 0.028999999999999915, 0.06949999999999967, 0.12875000000000014, 0.11000000000000121, 0.14199999999999946, 0.07600000000000051, 0.06800000000000139, 0.03900000000000148, 0.04574999999999996], zp_timestamp='2025-11-25T18:41:00')
2025-11-25T20:45:29.405 [DEBUG] [Thread-5448] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:45:29.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:45:29.497 [DEBUG] [Thread-5451] [transport.py] [_log()] starting thread (client mode): 0x70d68df0
2025-11-25T20:45:29.498 [DEBUG] [Thread-5451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:45:29.513 [DEBUG] [Thread-5451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:45:29.513 [INFO] [Thread-5451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] client lang: <none>
2025-11-25T20:45:29.521 [DEBUG] [Thread-5451] [transport.py] [_log()] server lang: <none>
2025-11-25T20:45:29.522 [DEBUG] [Thread-5451] [transport.py] [_log()] kex follows: False
2025-11-25T20:45:29.522 [DEBUG] [Thread-5451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:45:29.522 [DEBUG] [Thread-5451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:45:29.522 [DEBUG] [Thread-5451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:45:29.522 [DEBUG] [Thread-5451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:45:29.522 [DEBUG] [Thread-5451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:45:29.522 [DEBUG] [Thread-5451] [transport.py] [_log()] Compression: none
2025-11-25T20:45:29.522 [DEBUG] [Thread-5451] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:45:29.578 [DEBUG] [Thread-5451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:45:29.579 [DEBUG] [Thread-5451] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:45:29.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:45:29.580 [DEBUG] [Thread-5451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:45:29.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:45:29.634 [DEBUG] [Thread-5451] [transport.py] [_log()] userauth is OK
2025-11-25T20:45:29.634 [DEBUG] [Thread-5451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:45:29.634 [DEBUG] [Thread-5451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:45:29.634 [DEBUG] [Thread-5451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:45:29.635 [DEBUG] [Thread-5451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:45:29.653 [INFO] [Thread-5451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:45:29.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:45:29.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:45:30.524 [DEBUG] [Thread-5451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:45:30.524 [DEBUG] [Thread-5451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:45:30.571 [DEBUG] [Thread-5451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:45:30.571 [DEBUG] [Thread-5451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:45:30.580 [DEBUG] [Thread-5451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:45:30.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:45:30.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:45:30.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:45:30.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:45:30.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:45:30.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:45:30.615 [DEBUG] [Thread-5451] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:45:31.660 [DEBUG] [Thread-5453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:45:33.322 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:45:33.323 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:45:46.712 [DEBUG] [Thread-5454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:45:57.513 [DEBUG] [Thread-5455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:46:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:46:00.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:46:00.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:46:01.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 45, 53), 27.27, 15.91, 0.0, 12.51, 22.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:46:01.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:45:53
2025-11-25T20:46:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:46:01.586 [DEBUG] [Thread-5456] [transport.py] [_log()] starting thread (client mode): 0x70d2b880
2025-11-25T20:46:01.586 [DEBUG] [Thread-5456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:46:01.599 [DEBUG] [Thread-5456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:46:01.599 [INFO] [Thread-5456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] client lang: <none>
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] server lang: <none>
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] kex follows: False
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] Compression: none
2025-11-25T20:46:01.601 [DEBUG] [Thread-5456] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:46:01.609 [DEBUG] [Thread-5456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:46:01.609 [DEBUG] [Thread-5456] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:46:01.609 [DEBUG] [Thread-5456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:46:01.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:46:01.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:46:01.610 [DEBUG] [Thread-5456] [transport.py] [_log()] userauth is OK
2025-11-25T20:46:01.610 [DEBUG] [Thread-5456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:46:01.610 [DEBUG] [Thread-5456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:46:01.611 [DEBUG] [Thread-5456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:46:01.611 [DEBUG] [Thread-5456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:46:01.624 [INFO] [Thread-5456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:46:01.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:46:01.741 [DEBUG] [Thread-5458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:46:02.228 [DEBUG] [Thread-5456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:46:02.229 [DEBUG] [Thread-5456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:46:02.229 [DEBUG] [Thread-5456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:46:02.270 [DEBUG] [Thread-5456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:46:02.270 [DEBUG] [Thread-5456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:46:02.273 [DEBUG] [Thread-5456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:46:02.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:46:02.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:46:02.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:46:02.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:46:02.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:46:02.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:46:02.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:46:02.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:46:02.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:46:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.781696 -999.00  +22.40   6.82     21   -0.80 1 1 1 1 1     0    0 20.67 -98.21 ZNESW 6.4 6.8 189.6 12.1 22.3 -26.3 22.3 -25.7 22.0 -24.5 22.2 -25.5
2025-11-25T20:46:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:46:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:46:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.781696
2025-11-25T20:46:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:46:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:46:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:46:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:46:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:46:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:45:53', tmtdew=27.27, humidity=15.91, cloud=0.0, wind=12.51, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:45:53', seeing=1.43, atlas_timestamp='2025-11-25T18:45:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.05424999999999969, -0.0017499999999994742, -0.02450000000000152, 0.0625, 0.0807500000000001, 0.025000000000000355, -0.010749999999999815, 0.023999999999999133, 0.04550000000000054, 0.026250000000000995, 0.06799999999999962, 0.11949999999999861, 0.1327499999999997, 0.01699999999999946, 0.03599999999999959, 0.10024999999999906, 0.019999999999999574, 0.09699999999999953, 0.06324999999999825, 0.10999999999999943, 0.07374999999999865, 0.035250000000001336, 0.0337499999999995, 0.028999999999999915, 0.06949999999999967, 0.12875000000000014, 0.11000000000000121, 0.14199999999999946, 0.07600000000000051, 0.06800000000000139, 0.03900000000000148, 0.04574999999999996], zp_timestamp='2025-11-25T18:41:00')
2025-11-25T20:46:02.299 [DEBUG] [Thread-5456] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:46:02.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:46:02.393 [DEBUG] [Thread-5460] [transport.py] [_log()] starting thread (client mode): 0x70d2ad70
2025-11-25T20:46:02.393 [DEBUG] [Thread-5460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:46:02.408 [DEBUG] [Thread-5460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:46:02.409 [INFO] [Thread-5460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:46:02.416 [DEBUG] [Thread-5460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:46:02.416 [DEBUG] [Thread-5460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] client lang: <none>
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] server lang: <none>
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] kex follows: False
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] Compression: none
2025-11-25T20:46:02.417 [DEBUG] [Thread-5460] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:46:02.474 [DEBUG] [Thread-5460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:46:02.474 [DEBUG] [Thread-5460] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:46:02.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:46:02.476 [DEBUG] [Thread-5460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:46:02.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:46:02.530 [DEBUG] [Thread-5460] [transport.py] [_log()] userauth is OK
2025-11-25T20:46:02.531 [DEBUG] [Thread-5460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:46:02.531 [DEBUG] [Thread-5460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:46:02.531 [DEBUG] [Thread-5460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:46:02.531 [DEBUG] [Thread-5460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:46:02.549 [INFO] [Thread-5460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:46:02.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:46:02.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:46:03.404 [DEBUG] [Thread-5460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:46:03.405 [DEBUG] [Thread-5460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:46:03.453 [DEBUG] [Thread-5460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:46:03.453 [DEBUG] [Thread-5460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:46:03.462 [DEBUG] [Thread-5460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:46:03.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:46:03.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:46:03.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:46:03.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:46:03.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:46:03.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:46:03.500 [DEBUG] [Thread-5460] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:46:16.776 [DEBUG] [Thread-5462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:46:31.832 [DEBUG] [Thread-5463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:46:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:46:33.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:46:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:46:33.526 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:46:33.528 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:46:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 46, 25), 27.28, 15.9, 0.0, 10.83, 22.55, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:46:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:46:25
2025-11-25T20:46:34.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:46:34.458 [DEBUG] [Thread-5464] [transport.py] [_log()] starting thread (client mode): 0x70d2a650
2025-11-25T20:46:34.458 [DEBUG] [Thread-5464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:46:34.478 [DEBUG] [Thread-5464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:46:34.478 [INFO] [Thread-5464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:46:34.481 [DEBUG] [Thread-5464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:46:34.481 [DEBUG] [Thread-5464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:46:34.481 [DEBUG] [Thread-5464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:46:34.481 [DEBUG] [Thread-5464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] client lang: <none>
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] server lang: <none>
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] kex follows: False
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:46:34.482 [DEBUG] [Thread-5464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:46:34.483 [DEBUG] [Thread-5464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:46:34.483 [DEBUG] [Thread-5464] [transport.py] [_log()] Compression: none
2025-11-25T20:46:34.483 [DEBUG] [Thread-5464] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:46:34.496 [DEBUG] [Thread-5464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:46:34.496 [DEBUG] [Thread-5464] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:46:34.496 [DEBUG] [Thread-5464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:46:34.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:46:34.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:46:34.498 [DEBUG] [Thread-5464] [transport.py] [_log()] userauth is OK
2025-11-25T20:46:34.498 [DEBUG] [Thread-5464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:46:34.498 [DEBUG] [Thread-5464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:46:34.498 [DEBUG] [Thread-5464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:46:34.498 [DEBUG] [Thread-5464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:46:34.530 [INFO] [Thread-5464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:46:34.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:46:35.119 [DEBUG] [Thread-5464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:46:35.119 [DEBUG] [Thread-5464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:46:35.120 [DEBUG] [Thread-5464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:46:35.160 [DEBUG] [Thread-5464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:46:35.161 [DEBUG] [Thread-5464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:46:35.165 [DEBUG] [Thread-5464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:46:35.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:46:35.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:46:35.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:46:35.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:46:35.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:46:35.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:46:35.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:46:35.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:46:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:46:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.782043 -999.00  +22.30   8.86     21   -0.80 1 1 1 1 1     0    0 20.58 -98.69 ZNESW 7.8 8.9 201.2 12.8 22.3 -26.4 22.2 -25.7 21.9 -24.4 22.2 -25.6
2025-11-25T20:46:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:46:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:46:35.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.782043
2025-11-25T20:46:35.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:46:35.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:46:35.196 [DEBUG] [Thread-5464] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:46:35.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:46:35.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:46:35.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:46:35.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:46:25', tmtdew=27.28, humidity=15.9, cloud=0.0, wind=10.83, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:46:25', seeing=1.44, atlas_timestamp='2025-11-25T18:46:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.05424999999999969, -0.0017499999999994742, -0.02450000000000152, 0.0625, 0.0807500000000001, 0.025000000000000355, -0.010749999999999815, 0.023999999999999133, 0.04550000000000054, 0.026250000000000995, 0.06799999999999962, 0.11949999999999861, 0.1327499999999997, 0.01699999999999946, 0.03599999999999959, 0.10024999999999906, 0.019999999999999574, 0.09699999999999953, 0.06324999999999825, 0.10999999999999943, 0.07374999999999865, 0.035250000000001336, 0.0337499999999995, 0.028999999999999915, 0.06949999999999967, 0.12875000000000014, 0.11000000000000121, 0.14199999999999946, 0.07600000000000051, 0.06800000000000139, 0.03900000000000148, 0.04574999999999996], zp_timestamp='2025-11-25T18:41:00')
2025-11-25T20:46:35.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:46:35.291 [DEBUG] [Thread-5467] [transport.py] [_log()] starting thread (client mode): 0x70d40be0
2025-11-25T20:46:35.291 [DEBUG] [Thread-5467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:46:35.307 [DEBUG] [Thread-5467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:46:35.307 [INFO] [Thread-5467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:46:35.315 [DEBUG] [Thread-5467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:46:35.315 [DEBUG] [Thread-5467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:46:35.315 [DEBUG] [Thread-5467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:46:35.315 [DEBUG] [Thread-5467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:46:35.316 [DEBUG] [Thread-5467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:46:35.316 [DEBUG] [Thread-5467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:46:35.316 [DEBUG] [Thread-5467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:46:35.316 [DEBUG] [Thread-5467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:46:35.316 [DEBUG] [Thread-5467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:46:35.316 [DEBUG] [Thread-5467] [transport.py] [_log()] client lang: <none>
2025-11-25T20:46:35.316 [DEBUG] [Thread-5467] [transport.py] [_log()] server lang: <none>
2025-11-25T20:46:35.316 [DEBUG] [Thread-5467] [transport.py] [_log()] kex follows: False
2025-11-25T20:46:35.316 [DEBUG] [Thread-5467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:46:35.317 [DEBUG] [Thread-5467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:46:35.317 [DEBUG] [Thread-5467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:46:35.317 [DEBUG] [Thread-5467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:46:35.317 [DEBUG] [Thread-5467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:46:35.317 [DEBUG] [Thread-5467] [transport.py] [_log()] Compression: none
2025-11-25T20:46:35.317 [DEBUG] [Thread-5467] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:46:35.374 [DEBUG] [Thread-5467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:46:35.374 [DEBUG] [Thread-5467] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:46:35.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:46:35.375 [DEBUG] [Thread-5467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:46:35.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:46:35.430 [DEBUG] [Thread-5467] [transport.py] [_log()] userauth is OK
2025-11-25T20:46:35.430 [DEBUG] [Thread-5467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:46:35.431 [DEBUG] [Thread-5467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:46:35.431 [DEBUG] [Thread-5467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:46:35.431 [DEBUG] [Thread-5467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:46:35.450 [INFO] [Thread-5467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:46:35.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:46:35.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:46:36.330 [DEBUG] [Thread-5467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:46:36.330 [DEBUG] [Thread-5467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:46:36.379 [DEBUG] [Thread-5467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:46:36.380 [DEBUG] [Thread-5467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:46:36.392 [DEBUG] [Thread-5467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:46:36.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:46:36.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:46:36.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:46:36.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:46:36.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:46:36.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:46:36.431 [DEBUG] [Thread-5467] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:46:46.873 [DEBUG] [Thread-5469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:46:57.565 [DEBUG] [Thread-5470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:47:01.928 [DEBUG] [Thread-5471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:47:06.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:47:06.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:47:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:47:07.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 46, 57), 27.22, 15.85, 0.0, 13.76, 22.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:47:07.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:46:57
2025-11-25T20:47:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:47:07.359 [DEBUG] [Thread-5472] [transport.py] [_log()] starting thread (client mode): 0x70d55cf0
2025-11-25T20:47:07.359 [DEBUG] [Thread-5472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:47:07.376 [DEBUG] [Thread-5472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:47:07.376 [INFO] [Thread-5472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:47:07.377 [DEBUG] [Thread-5472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:47:07.377 [DEBUG] [Thread-5472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] client lang: <none>
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] server lang: <none>
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] kex follows: False
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] Compression: none
2025-11-25T20:47:07.378 [DEBUG] [Thread-5472] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:47:07.387 [DEBUG] [Thread-5472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:47:07.388 [DEBUG] [Thread-5472] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:47:07.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:47:07.389 [DEBUG] [Thread-5472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:47:07.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:47:07.391 [DEBUG] [Thread-5472] [transport.py] [_log()] userauth is OK
2025-11-25T20:47:07.391 [DEBUG] [Thread-5472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:47:07.391 [DEBUG] [Thread-5472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:47:07.392 [DEBUG] [Thread-5472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:47:07.392 [DEBUG] [Thread-5472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:47:07.428 [INFO] [Thread-5472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:47:07.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:47:08.027 [DEBUG] [Thread-5472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:47:08.028 [DEBUG] [Thread-5472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:47:08.028 [DEBUG] [Thread-5472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:47:08.069 [DEBUG] [Thread-5472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:47:08.069 [DEBUG] [Thread-5472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:47:08.072 [DEBUG] [Thread-5472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:47:08.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:47:08.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:47:08.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:47:08.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:47:08.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:47:08.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:47:08.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:47:08.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:47:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:47:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.782391 -999.00  +22.20   4.79     21   -0.90 1 1 1 1 1     0    0 20.80 -101.46 ZNESW 9.6 4.8 204.9 13.3 22.2 -26.4 22.2 -25.6 21.9 -24.4 22.2 -25.4
2025-11-25T20:47:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:47:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:47:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.782391
2025-11-25T20:47:08.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:47:08.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:47:08.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:47:08.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:47:08.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:47:08.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:46:57', tmtdew=27.22, humidity=15.85, cloud=0.0, wind=13.76, temperature=22.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:46:57', seeing=1.21, atlas_timestamp='2025-11-25T18:46:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.05424999999999969, -0.0017499999999994742, -0.02450000000000152, 0.0625, 0.0807500000000001, 0.025000000000000355, -0.010749999999999815, 0.023999999999999133, 0.04550000000000054, 0.026250000000000995, 0.06799999999999962, 0.11949999999999861, 0.1327499999999997, 0.01699999999999946, 0.03599999999999959, 0.10024999999999906, 0.019999999999999574, 0.09699999999999953, 0.06324999999999825, 0.10999999999999943, 0.07374999999999865, 0.035250000000001336, 0.0337499999999995, 0.028999999999999915, 0.06949999999999967, 0.12875000000000014, 0.11000000000000121, 0.14199999999999946, 0.07600000000000051, 0.06800000000000139, 0.03900000000000148, 0.04574999999999996], zp_timestamp='2025-11-25T18:41:00')
2025-11-25T20:47:08.095 [DEBUG] [Thread-5472] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:47:08.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:47:08.191 [DEBUG] [Thread-5475] [transport.py] [_log()] starting thread (client mode): 0x70d75210
2025-11-25T20:47:08.191 [DEBUG] [Thread-5475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:47:08.207 [DEBUG] [Thread-5475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:47:08.207 [INFO] [Thread-5475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:47:08.214 [DEBUG] [Thread-5475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] client lang: <none>
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] server lang: <none>
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] kex follows: False
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:47:08.215 [DEBUG] [Thread-5475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:47:08.216 [DEBUG] [Thread-5475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:47:08.216 [DEBUG] [Thread-5475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:47:08.216 [DEBUG] [Thread-5475] [transport.py] [_log()] Compression: none
2025-11-25T20:47:08.216 [DEBUG] [Thread-5475] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:47:08.273 [DEBUG] [Thread-5475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:47:08.273 [DEBUG] [Thread-5475] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:47:08.274 [DEBUG] [Thread-5475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:47:08.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:47:08.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:47:08.329 [DEBUG] [Thread-5475] [transport.py] [_log()] userauth is OK
2025-11-25T20:47:08.329 [DEBUG] [Thread-5475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:47:08.330 [DEBUG] [Thread-5475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:47:08.330 [DEBUG] [Thread-5475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:47:08.330 [DEBUG] [Thread-5475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:47:08.350 [INFO] [Thread-5475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:47:08.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:47:08.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:47:09.202 [DEBUG] [Thread-5475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:47:09.202 [DEBUG] [Thread-5475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:47:09.250 [DEBUG] [Thread-5475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:47:09.250 [DEBUG] [Thread-5475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:47:09.260 [DEBUG] [Thread-5475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:47:09.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:47:09.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:47:09.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:47:09.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:47:09.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:47:09.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:47:09.299 [DEBUG] [Thread-5475] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:47:16.959 [DEBUG] [Thread-5477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:47:32.008 [DEBUG] [Thread-5478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:47:33.727 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:47:33.729 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:47:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:47:39.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:47:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:47:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 47, 29), 27.19, 15.88, 0.0, 12.97, 22.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:47:40.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:47:29
2025-11-25T20:47:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:47:40.286 [DEBUG] [Thread-5479] [transport.py] [_log()] starting thread (client mode): 0x70d6aa10
2025-11-25T20:47:40.286 [DEBUG] [Thread-5479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:47:40.307 [DEBUG] [Thread-5479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:47:40.307 [INFO] [Thread-5479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] client lang: <none>
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] server lang: <none>
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] kex follows: False
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:47:40.311 [DEBUG] [Thread-5479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:47:40.312 [DEBUG] [Thread-5479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:47:40.312 [DEBUG] [Thread-5479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:47:40.312 [DEBUG] [Thread-5479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:47:40.312 [DEBUG] [Thread-5479] [transport.py] [_log()] Compression: none
2025-11-25T20:47:40.312 [DEBUG] [Thread-5479] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:47:40.331 [DEBUG] [Thread-5479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:47:40.332 [DEBUG] [Thread-5479] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:47:40.332 [DEBUG] [Thread-5479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:47:40.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:47:40.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:47:40.334 [DEBUG] [Thread-5479] [transport.py] [_log()] userauth is OK
2025-11-25T20:47:40.334 [DEBUG] [Thread-5479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:47:40.334 [DEBUG] [Thread-5479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:47:40.334 [DEBUG] [Thread-5479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:47:40.335 [DEBUG] [Thread-5479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:47:40.353 [INFO] [Thread-5479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:47:40.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:47:41.005 [DEBUG] [Thread-5479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:47:41.005 [DEBUG] [Thread-5479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:47:41.006 [DEBUG] [Thread-5479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:47:41.047 [DEBUG] [Thread-5479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:47:41.047 [DEBUG] [Thread-5479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:47:41.050 [DEBUG] [Thread-5479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:47:41.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:47:41.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:47:41.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:47:41.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:47:41.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:47:41.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:47:41.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:47:41.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:47:41.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:47:41.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.782391 -999.00  +22.20   4.79     21   -0.90 1 1 1 1 1     0    0 20.80 -101.46 ZNESW 9.6 4.8 204.9 13.3 22.2 -26.4 22.2 -25.6 21.9 -24.4 22.2 -25.4
2025-11-25T20:47:41.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:47:41.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:47:41.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.782391
2025-11-25T20:47:41.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:47:41.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:47:41.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:47:41.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:47:41.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:47:41.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:47:29', tmtdew=27.19, humidity=15.88, cloud=0.0, wind=12.97, temperature=22.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:47:29', seeing=1.14, atlas_timestamp='2025-11-25T18:46:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.05424999999999969, -0.0017499999999994742, -0.02450000000000152, 0.0625, 0.0807500000000001, 0.025000000000000355, -0.010749999999999815, 0.023999999999999133, 0.04550000000000054, 0.026250000000000995, 0.06799999999999962, 0.11949999999999861, 0.1327499999999997, 0.01699999999999946, 0.03599999999999959, 0.10024999999999906, 0.019999999999999574, 0.09699999999999953, 0.06324999999999825, 0.10999999999999943, 0.07374999999999865, 0.035250000000001336, 0.0337499999999995, 0.028999999999999915, 0.06949999999999967, 0.12875000000000014, 0.11000000000000121, 0.14199999999999946, 0.07600000000000051, 0.06800000000000139, 0.03900000000000148, 0.04574999999999996], zp_timestamp='2025-11-25T18:41:00')
2025-11-25T20:47:41.077 [DEBUG] [Thread-5479] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:47:41.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:47:41.172 [DEBUG] [Thread-5482] [transport.py] [_log()] starting thread (client mode): 0x70d40af0
2025-11-25T20:47:41.172 [DEBUG] [Thread-5482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:47:41.188 [DEBUG] [Thread-5482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:47:41.188 [INFO] [Thread-5482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:47:41.196 [DEBUG] [Thread-5482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:47:41.196 [DEBUG] [Thread-5482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:47:41.197 [DEBUG] [Thread-5482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:47:41.197 [DEBUG] [Thread-5482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:47:41.197 [DEBUG] [Thread-5482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:47:41.197 [DEBUG] [Thread-5482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:47:41.197 [DEBUG] [Thread-5482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:47:41.197 [DEBUG] [Thread-5482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:47:41.197 [DEBUG] [Thread-5482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:47:41.197 [DEBUG] [Thread-5482] [transport.py] [_log()] client lang: <none>
2025-11-25T20:47:41.198 [DEBUG] [Thread-5482] [transport.py] [_log()] server lang: <none>
2025-11-25T20:47:41.198 [DEBUG] [Thread-5482] [transport.py] [_log()] kex follows: False
2025-11-25T20:47:41.198 [DEBUG] [Thread-5482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:47:41.198 [DEBUG] [Thread-5482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:47:41.198 [DEBUG] [Thread-5482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:47:41.198 [DEBUG] [Thread-5482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:47:41.198 [DEBUG] [Thread-5482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:47:41.198 [DEBUG] [Thread-5482] [transport.py] [_log()] Compression: none
2025-11-25T20:47:41.198 [DEBUG] [Thread-5482] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:47:41.255 [DEBUG] [Thread-5482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:47:41.255 [DEBUG] [Thread-5482] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:47:41.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:47:41.257 [DEBUG] [Thread-5482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:47:41.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:47:41.321 [DEBUG] [Thread-5482] [transport.py] [_log()] userauth is OK
2025-11-25T20:47:41.321 [DEBUG] [Thread-5482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:47:41.321 [DEBUG] [Thread-5482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:47:41.321 [DEBUG] [Thread-5482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:47:41.321 [DEBUG] [Thread-5482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:47:41.341 [INFO] [Thread-5482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:47:41.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:47:41.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:47:42.203 [DEBUG] [Thread-5482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:47:42.204 [DEBUG] [Thread-5482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:47:42.252 [DEBUG] [Thread-5482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:47:42.252 [DEBUG] [Thread-5482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:47:42.261 [DEBUG] [Thread-5482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:47:42.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:47:42.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:47:42.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:47:42.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:47:42.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:47:42.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:47:42.298 [DEBUG] [Thread-5482] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:47:47.045 [DEBUG] [Thread-5484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:47:57.620 [DEBUG] [Thread-5485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:48:02.100 [DEBUG] [Thread-5486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:48:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:48:12.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:48:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:48:13.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 48, 1), 27.09, 15.98, 0.0, 12.85, 22.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:48:13.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:48:01
2025-11-25T20:48:13.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:48:13.313 [DEBUG] [Thread-5487] [transport.py] [_log()] starting thread (client mode): 0x70d2aa70
2025-11-25T20:48:13.313 [DEBUG] [Thread-5487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:48:13.333 [DEBUG] [Thread-5487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:48:13.333 [INFO] [Thread-5487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] client lang: <none>
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] server lang: <none>
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] kex follows: False
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:48:13.335 [DEBUG] [Thread-5487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:48:13.336 [DEBUG] [Thread-5487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:48:13.336 [DEBUG] [Thread-5487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:48:13.336 [DEBUG] [Thread-5487] [transport.py] [_log()] Compression: none
2025-11-25T20:48:13.336 [DEBUG] [Thread-5487] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:48:13.350 [DEBUG] [Thread-5487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:48:13.351 [DEBUG] [Thread-5487] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:48:13.351 [DEBUG] [Thread-5487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:48:13.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:48:13.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:48:13.352 [DEBUG] [Thread-5487] [transport.py] [_log()] userauth is OK
2025-11-25T20:48:13.352 [DEBUG] [Thread-5487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:48:13.352 [DEBUG] [Thread-5487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:48:13.352 [DEBUG] [Thread-5487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:48:13.352 [DEBUG] [Thread-5487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:48:13.369 [INFO] [Thread-5487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:48:13.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:48:14.165 [DEBUG] [Thread-5487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:48:14.165 [DEBUG] [Thread-5487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:48:14.166 [DEBUG] [Thread-5487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:48:14.206 [DEBUG] [Thread-5487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:48:14.206 [DEBUG] [Thread-5487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:48:14.207 [DEBUG] [Thread-5487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:48:14.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:48:14.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:48:14.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:48:14.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:48:14.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:48:14.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:48:14.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:48:14.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:48:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:48:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.783085 -999.00  +22.20   7.04     21   -0.90 1 1 1 1 1     0    0 20.96 -95.95 ZNESW 9.4 7.0 186.8 18.1 22.2 -26.1 22.2 -25.4 21.9 -24.2 22.2 -25.4
2025-11-25T20:48:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:48:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:48:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.783085
2025-11-25T20:48:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:48:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:48:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:48:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:48:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:48:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:48:01', tmtdew=27.09, humidity=15.98, cloud=0.0, wind=12.85, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:48:01', seeing=1.14, atlas_timestamp='2025-11-25T18:47:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.05424999999999969, -0.0017499999999994742, -0.02450000000000152, 0.0625, 0.0807500000000001, 0.025000000000000355, -0.010749999999999815, 0.023999999999999133, 0.04550000000000054, 0.026250000000000995, 0.06799999999999962, 0.11949999999999861, 0.1327499999999997, 0.01699999999999946, 0.03599999999999959, 0.10024999999999906, 0.019999999999999574, 0.09699999999999953, 0.06324999999999825, 0.10999999999999943, 0.07374999999999865, 0.035250000000001336, 0.0337499999999995, 0.028999999999999915, 0.06949999999999967, 0.12875000000000014, 0.11000000000000121, 0.14199999999999946, 0.07600000000000051, 0.06800000000000139, 0.03900000000000148, 0.04574999999999996], zp_timestamp='2025-11-25T18:41:00')
2025-11-25T20:48:14.225 [DEBUG] [Thread-5487] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:48:14.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:48:14.314 [DEBUG] [Thread-5490] [transport.py] [_log()] starting thread (client mode): 0x70d57be0
2025-11-25T20:48:14.315 [DEBUG] [Thread-5490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:48:14.330 [DEBUG] [Thread-5490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:48:14.330 [INFO] [Thread-5490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] client lang: <none>
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] server lang: <none>
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] kex follows: False
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:48:14.338 [DEBUG] [Thread-5490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:48:14.339 [DEBUG] [Thread-5490] [transport.py] [_log()] Compression: none
2025-11-25T20:48:14.339 [DEBUG] [Thread-5490] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:48:14.396 [DEBUG] [Thread-5490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:48:14.396 [DEBUG] [Thread-5490] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:48:14.396 [DEBUG] [Thread-5490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:48:14.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:48:14.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:48:14.458 [DEBUG] [Thread-5490] [transport.py] [_log()] userauth is OK
2025-11-25T20:48:14.458 [DEBUG] [Thread-5490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:48:14.458 [DEBUG] [Thread-5490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:48:14.458 [DEBUG] [Thread-5490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:48:14.458 [DEBUG] [Thread-5490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:48:14.471 [INFO] [Thread-5490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:48:14.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:48:14.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:48:15.306 [DEBUG] [Thread-5490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:48:15.306 [DEBUG] [Thread-5490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:48:15.353 [DEBUG] [Thread-5490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:48:15.353 [DEBUG] [Thread-5490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:48:15.361 [DEBUG] [Thread-5490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:48:15.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:48:15.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:48:15.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:48:15.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:48:15.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:48:15.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:48:15.392 [DEBUG] [Thread-5490] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:48:17.132 [DEBUG] [Thread-5492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:48:32.177 [DEBUG] [Thread-5493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:48:33.931 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:48:33.931 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:48:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:48:45.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:48:45.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:48:46.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 48, 33), 27.1, 15.95, 0.0, 13.91, 22.23, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:48:46.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:48:33
2025-11-25T20:48:46.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:48:46.362 [DEBUG] [Thread-5494] [transport.py] [_log()] starting thread (client mode): 0x70d2a0b0
2025-11-25T20:48:46.362 [DEBUG] [Thread-5494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:48:46.383 [DEBUG] [Thread-5494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:48:46.383 [INFO] [Thread-5494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] client lang: <none>
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] server lang: <none>
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] kex follows: False
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] Compression: none
2025-11-25T20:48:46.386 [DEBUG] [Thread-5494] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:48:46.403 [DEBUG] [Thread-5494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:48:46.404 [DEBUG] [Thread-5494] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:48:46.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:48:46.405 [DEBUG] [Thread-5494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:48:46.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:48:46.407 [DEBUG] [Thread-5494] [transport.py] [_log()] userauth is OK
2025-11-25T20:48:46.407 [DEBUG] [Thread-5494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:48:46.407 [DEBUG] [Thread-5494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:48:46.407 [DEBUG] [Thread-5494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:48:46.408 [DEBUG] [Thread-5494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:48:46.432 [INFO] [Thread-5494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:48:46.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:48:47.095 [DEBUG] [Thread-5494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:48:47.095 [DEBUG] [Thread-5494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:48:47.096 [DEBUG] [Thread-5494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:48:47.137 [DEBUG] [Thread-5494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:48:47.137 [DEBUG] [Thread-5494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:48:47.140 [DEBUG] [Thread-5494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:48:47.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:48:47.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:48:47.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:48:47.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:48:47.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:48:47.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:48:47.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:48:47.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:48:47.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:48:47.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.783432 -999.00  +22.20  11.89     21   -0.80 1 1 1 1 1     0    0 20.75 -91.31 ZNESW 12.1 11.9 200.8 17.9 22.2 -26.0 22.2 -25.6 21.9 -24.4 22.1 -25.3
2025-11-25T20:48:47.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:48:47.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:48:47.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.783432
2025-11-25T20:48:47.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:48:47.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:48:47.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:48:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:48:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:48:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:48:33', tmtdew=27.1, humidity=15.95, cloud=0.0, wind=13.91, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:48:33', seeing=1.26, atlas_timestamp='2025-11-25T18:48:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, 0.05525000000000091, 0.008250000000000313, -0.031500000000001194, 0.030999999999998806, 0.07975000000000065, -0.0235000000000003, 0.011250000000000426, 0.053999999999998494, 0.009999999999999787, 0.03575000000000017, 0.01699999999999946, 0.07649999999999935, 0.09924999999999962, 0.0019999999999988916, -0.010500000000000398, 0.029249999999999332, 0.023999999999999133, 0.08799999999999919, -0.012750000000000483, 0.03199999999999825, 0.0467499999999994, 0.022750000000002046, 0.01124999999999865, 0.016000000000000014, 0.050499999999999545, 0.07075000000000031, 0.08249999999999957, 0.0649999999999995, 0.014000000000001123, 0.06300000000000061, 0.03500000000000014, 0.034250000000000114], zp_timestamp='2025-11-25T18:46:00')
2025-11-25T20:48:47.165 [DEBUG] [Thread-5494] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:48:47.210 [DEBUG] [Thread-5497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:48:47.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:48:47.261 [DEBUG] [Thread-5498] [transport.py] [_log()] starting thread (client mode): 0x70d0d480
2025-11-25T20:48:47.261 [DEBUG] [Thread-5498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:48:47.277 [DEBUG] [Thread-5498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:48:47.277 [INFO] [Thread-5498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:48:47.285 [DEBUG] [Thread-5498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:48:47.285 [DEBUG] [Thread-5498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:48:47.285 [DEBUG] [Thread-5498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:48:47.285 [DEBUG] [Thread-5498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:48:47.285 [DEBUG] [Thread-5498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] client lang: <none>
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] server lang: <none>
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] kex follows: False
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:48:47.286 [DEBUG] [Thread-5498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:48:47.287 [DEBUG] [Thread-5498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:48:47.287 [DEBUG] [Thread-5498] [transport.py] [_log()] Compression: none
2025-11-25T20:48:47.287 [DEBUG] [Thread-5498] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:48:47.342 [DEBUG] [Thread-5498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:48:47.343 [DEBUG] [Thread-5498] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:48:47.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:48:47.344 [DEBUG] [Thread-5498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:48:47.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:48:47.398 [DEBUG] [Thread-5498] [transport.py] [_log()] userauth is OK
2025-11-25T20:48:47.399 [DEBUG] [Thread-5498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:48:47.399 [DEBUG] [Thread-5498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:48:47.399 [DEBUG] [Thread-5498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:48:47.399 [DEBUG] [Thread-5498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:48:47.418 [INFO] [Thread-5498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:48:47.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:48:47.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:48:48.247 [DEBUG] [Thread-5498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:48:48.248 [DEBUG] [Thread-5498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:48:48.295 [DEBUG] [Thread-5498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:48:48.295 [DEBUG] [Thread-5498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:48:48.303 [DEBUG] [Thread-5498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:48:48.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:48:48.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:48:48.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:48:48.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:48:48.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:48:48.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:48:48.337 [DEBUG] [Thread-5498] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:48:57.689 [DEBUG] [Thread-5500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:49:02.253 [DEBUG] [Thread-5501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:49:17.292 [DEBUG] [Thread-5502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:49:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:49:18.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:49:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:49:19.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 49, 5), 27.09, 15.96, 0.0, 16.34, 22.26, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:49:19.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:49:05
2025-11-25T20:49:19.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:49:19.303 [DEBUG] [Thread-5503] [transport.py] [_log()] starting thread (client mode): 0x70d2a830
2025-11-25T20:49:19.304 [DEBUG] [Thread-5503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:49:19.325 [DEBUG] [Thread-5503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:49:19.325 [INFO] [Thread-5503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] client lang: <none>
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] server lang: <none>
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] kex follows: False
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] Compression: none
2025-11-25T20:49:19.329 [DEBUG] [Thread-5503] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:49:19.346 [DEBUG] [Thread-5503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:49:19.346 [DEBUG] [Thread-5503] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:49:19.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:49:19.356 [DEBUG] [Thread-5503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:49:19.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:49:19.357 [DEBUG] [Thread-5503] [transport.py] [_log()] userauth is OK
2025-11-25T20:49:19.358 [DEBUG] [Thread-5503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:49:19.358 [DEBUG] [Thread-5503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:49:19.358 [DEBUG] [Thread-5503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:49:19.358 [DEBUG] [Thread-5503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:49:19.381 [INFO] [Thread-5503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:49:19.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:49:20.197 [DEBUG] [Thread-5503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:49:20.197 [DEBUG] [Thread-5503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:49:20.197 [DEBUG] [Thread-5503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:49:20.238 [DEBUG] [Thread-5503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:49:20.239 [DEBUG] [Thread-5503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:49:20.241 [DEBUG] [Thread-5503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:49:20.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:49:20.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:49:20.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:49:20.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:49:20.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:49:20.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:49:20.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:49:20.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:49:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:49:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.783780 -999.00  +22.20  10.46     21   -0.80 1 1 1 1 1     0    0 20.77 -89.50 ZNESW 12.7 10.5 197.5 15.9 22.2 -26.1 22.2 -25.4 21.9 -24.4 22.1 -25.3
2025-11-25T20:49:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:49:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:49:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.783780
2025-11-25T20:49:20.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:49:20.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:49:20.266 [DEBUG] [Thread-5503] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:49:20.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:49:20.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:49:20.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:49:20.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:49:05', tmtdew=27.09, humidity=15.96, cloud=0.0, wind=16.34, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:49:05', seeing=1.19, atlas_timestamp='2025-11-25T18:48:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, 0.05525000000000091, 0.008250000000000313, -0.031500000000001194, 0.030999999999998806, 0.07975000000000065, -0.0235000000000003, 0.011250000000000426, 0.053999999999998494, 0.009999999999999787, 0.03575000000000017, 0.01699999999999946, 0.07649999999999935, 0.09924999999999962, 0.0019999999999988916, -0.010500000000000398, 0.029249999999999332, 0.023999999999999133, 0.08799999999999919, -0.012750000000000483, 0.03199999999999825, 0.0467499999999994, 0.022750000000002046, 0.01124999999999865, 0.016000000000000014, 0.050499999999999545, 0.07075000000000031, 0.08249999999999957, 0.0649999999999995, 0.014000000000001123, 0.06300000000000061, 0.03500000000000014, 0.034250000000000114], zp_timestamp='2025-11-25T18:46:00')
2025-11-25T20:49:20.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:49:20.362 [DEBUG] [Thread-5506] [transport.py] [_log()] starting thread (client mode): 0x70d74790
2025-11-25T20:49:20.362 [DEBUG] [Thread-5506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:49:20.376 [DEBUG] [Thread-5506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:49:20.376 [INFO] [Thread-5506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:49:20.383 [DEBUG] [Thread-5506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:49:20.384 [DEBUG] [Thread-5506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:49:20.384 [DEBUG] [Thread-5506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:49:20.384 [DEBUG] [Thread-5506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:49:20.384 [DEBUG] [Thread-5506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:49:20.384 [DEBUG] [Thread-5506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:49:20.384 [DEBUG] [Thread-5506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:49:20.384 [DEBUG] [Thread-5506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:49:20.385 [DEBUG] [Thread-5506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:49:20.385 [DEBUG] [Thread-5506] [transport.py] [_log()] client lang: <none>
2025-11-25T20:49:20.385 [DEBUG] [Thread-5506] [transport.py] [_log()] server lang: <none>
2025-11-25T20:49:20.385 [DEBUG] [Thread-5506] [transport.py] [_log()] kex follows: False
2025-11-25T20:49:20.385 [DEBUG] [Thread-5506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:49:20.385 [DEBUG] [Thread-5506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:49:20.385 [DEBUG] [Thread-5506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:49:20.386 [DEBUG] [Thread-5506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:49:20.386 [DEBUG] [Thread-5506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:49:20.386 [DEBUG] [Thread-5506] [transport.py] [_log()] Compression: none
2025-11-25T20:49:20.386 [DEBUG] [Thread-5506] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:49:20.444 [DEBUG] [Thread-5506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:49:20.445 [DEBUG] [Thread-5506] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:49:20.446 [DEBUG] [Thread-5506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:49:20.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:49:20.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:49:20.501 [DEBUG] [Thread-5506] [transport.py] [_log()] userauth is OK
2025-11-25T20:49:20.502 [DEBUG] [Thread-5506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:49:20.502 [DEBUG] [Thread-5506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:49:20.502 [DEBUG] [Thread-5506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:49:20.502 [DEBUG] [Thread-5506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:49:20.524 [INFO] [Thread-5506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:49:20.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:49:20.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:49:21.340 [DEBUG] [Thread-5506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:49:21.340 [DEBUG] [Thread-5506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:49:21.388 [DEBUG] [Thread-5506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:49:21.388 [DEBUG] [Thread-5506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:49:21.397 [DEBUG] [Thread-5506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:49:21.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:49:21.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:49:21.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:49:21.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:49:21.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:49:21.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:49:21.431 [DEBUG] [Thread-5506] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:49:32.320 [DEBUG] [Thread-5508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:49:34.134 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:49:34.135 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:49:47.359 [DEBUG] [Thread-5509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:49:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:49:51.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:49:51.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:49:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 49, 37), 27.01, 16.06, 0.0, 13.73, 22.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:49:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:49:37
2025-11-25T20:49:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:49:52.359 [DEBUG] [Thread-5510] [transport.py] [_log()] starting thread (client mode): 0x70d57940
2025-11-25T20:49:52.359 [DEBUG] [Thread-5510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:49:52.378 [DEBUG] [Thread-5510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:49:52.378 [INFO] [Thread-5510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:49:52.381 [DEBUG] [Thread-5510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] client lang: <none>
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] server lang: <none>
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] kex follows: False
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] Compression: none
2025-11-25T20:49:52.382 [DEBUG] [Thread-5510] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:49:52.401 [DEBUG] [Thread-5510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:49:52.401 [DEBUG] [Thread-5510] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:49:52.402 [DEBUG] [Thread-5510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:49:52.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:49:52.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:49:52.404 [DEBUG] [Thread-5510] [transport.py] [_log()] userauth is OK
2025-11-25T20:49:52.404 [DEBUG] [Thread-5510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:49:52.404 [DEBUG] [Thread-5510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:49:52.404 [DEBUG] [Thread-5510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:49:52.404 [DEBUG] [Thread-5510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:49:52.423 [INFO] [Thread-5510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:49:52.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:49:53.041 [DEBUG] [Thread-5510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:49:53.042 [DEBUG] [Thread-5510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:49:53.042 [DEBUG] [Thread-5510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:49:53.083 [DEBUG] [Thread-5510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:49:53.083 [DEBUG] [Thread-5510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:49:53.086 [DEBUG] [Thread-5510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:49:53.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:49:53.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:49:53.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:49:53.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:49:53.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:49:53.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:49:53.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:49:53.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:49:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:49:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.784127 -999.00  +22.30   9.32     21   -0.80 1 1 1 1 1     0    0 21.37 -71.75 ZNESW 9.8 9.3 195.4 14.5 22.2 -26.1 22.2 -25.5 21.9 -24.3 22.1 -25.4
2025-11-25T20:49:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:49:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:49:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.784127
2025-11-25T20:49:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:49:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:49:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:49:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:49:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:49:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:49:37', tmtdew=27.01, humidity=16.06, cloud=0.0, wind=13.73, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:49:37', seeing=1.22, atlas_timestamp='2025-11-25T18:49:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, 0.05525000000000091, 0.008250000000000313, -0.031500000000001194, 0.030999999999998806, 0.07975000000000065, -0.0235000000000003, 0.011250000000000426, 0.053999999999998494, 0.009999999999999787, 0.03575000000000017, 0.01699999999999946, 0.07649999999999935, 0.09924999999999962, 0.0019999999999988916, -0.010500000000000398, 0.029249999999999332, 0.023999999999999133, 0.08799999999999919, -0.012750000000000483, 0.03199999999999825, 0.0467499999999994, 0.022750000000002046, 0.01124999999999865, 0.016000000000000014, 0.050499999999999545, 0.07075000000000031, 0.08249999999999957, 0.0649999999999995, 0.014000000000001123, 0.06300000000000061, 0.03500000000000014, 0.034250000000000114], zp_timestamp='2025-11-25T18:46:00')
2025-11-25T20:49:53.111 [DEBUG] [Thread-5510] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:49:53.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:49:53.207 [DEBUG] [Thread-5513] [transport.py] [_log()] starting thread (client mode): 0x70d03130
2025-11-25T20:49:53.207 [DEBUG] [Thread-5513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:49:53.221 [DEBUG] [Thread-5513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:49:53.221 [INFO] [Thread-5513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:49:53.229 [DEBUG] [Thread-5513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:49:53.229 [DEBUG] [Thread-5513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:49:53.229 [DEBUG] [Thread-5513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:49:53.229 [DEBUG] [Thread-5513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:49:53.229 [DEBUG] [Thread-5513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:49:53.230 [DEBUG] [Thread-5513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:49:53.230 [DEBUG] [Thread-5513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:49:53.230 [DEBUG] [Thread-5513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:49:53.230 [DEBUG] [Thread-5513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:49:53.230 [DEBUG] [Thread-5513] [transport.py] [_log()] client lang: <none>
2025-11-25T20:49:53.230 [DEBUG] [Thread-5513] [transport.py] [_log()] server lang: <none>
2025-11-25T20:49:53.230 [DEBUG] [Thread-5513] [transport.py] [_log()] kex follows: False
2025-11-25T20:49:53.230 [DEBUG] [Thread-5513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:49:53.230 [DEBUG] [Thread-5513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:49:53.231 [DEBUG] [Thread-5513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:49:53.231 [DEBUG] [Thread-5513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:49:53.231 [DEBUG] [Thread-5513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:49:53.231 [DEBUG] [Thread-5513] [transport.py] [_log()] Compression: none
2025-11-25T20:49:53.231 [DEBUG] [Thread-5513] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:49:53.287 [DEBUG] [Thread-5513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:49:53.288 [DEBUG] [Thread-5513] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:49:53.288 [DEBUG] [Thread-5513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:49:53.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:49:53.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:49:53.346 [DEBUG] [Thread-5513] [transport.py] [_log()] userauth is OK
2025-11-25T20:49:53.346 [DEBUG] [Thread-5513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:49:53.346 [DEBUG] [Thread-5513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:49:53.346 [DEBUG] [Thread-5513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:49:53.347 [DEBUG] [Thread-5513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:49:53.365 [INFO] [Thread-5513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:49:53.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:49:53.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:49:54.188 [DEBUG] [Thread-5513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:49:54.188 [DEBUG] [Thread-5513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:49:54.236 [DEBUG] [Thread-5513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:49:54.236 [DEBUG] [Thread-5513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:49:54.245 [DEBUG] [Thread-5513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:49:54.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:49:54.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:49:54.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:49:54.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:49:54.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:49:54.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:49:54.280 [DEBUG] [Thread-5513] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:49:57.745 [DEBUG] [Thread-5515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:50:02.398 [DEBUG] [Thread-5516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:50:10.437 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:50:17.444 [DEBUG] [Thread-5517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:50:24.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:50:24.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:50:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:50:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 50, 9), 27.05, 16.01, 0.0, 11.81, 22.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:50:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:50:09
2025-11-25T20:50:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:50:25.233 [DEBUG] [Thread-5518] [transport.py] [_log()] starting thread (client mode): 0x70d43f70
2025-11-25T20:50:25.233 [DEBUG] [Thread-5518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:50:25.250 [DEBUG] [Thread-5518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:50:25.250 [INFO] [Thread-5518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] client lang: <none>
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] server lang: <none>
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] kex follows: False
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] Compression: none
2025-11-25T20:50:25.254 [DEBUG] [Thread-5518] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:50:25.270 [DEBUG] [Thread-5518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:50:25.271 [DEBUG] [Thread-5518] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:50:25.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:50:25.272 [DEBUG] [Thread-5518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:50:25.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:50:25.274 [DEBUG] [Thread-5518] [transport.py] [_log()] userauth is OK
2025-11-25T20:50:25.274 [DEBUG] [Thread-5518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:50:25.274 [DEBUG] [Thread-5518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:50:25.274 [DEBUG] [Thread-5518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:50:25.274 [DEBUG] [Thread-5518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:50:25.299 [INFO] [Thread-5518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:50:25.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:50:25.951 [DEBUG] [Thread-5518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:50:25.951 [DEBUG] [Thread-5518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:50:25.952 [DEBUG] [Thread-5518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:50:25.992 [DEBUG] [Thread-5518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:50:25.992 [DEBUG] [Thread-5518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:50:25.995 [DEBUG] [Thread-5518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:50:26.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:50:26.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:50:26.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:50:26.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:50:26.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:50:26.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:50:26.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:50:26.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:50:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:50:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.784474 -999.00  +22.20  10.39     21   -0.80 1 1 1 1 1     0    0 21.18 -60.61 ZNESW 12.5 10.4 204.6 14.7 22.2 -26.0 22.2 -25.4 21.9 -24.3 22.1 -25.3
2025-11-25T20:50:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:50:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:50:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.784474
2025-11-25T20:50:26.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:50:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:50:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:50:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:50:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:50:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:50:09', tmtdew=27.05, humidity=16.01, cloud=0.0, wind=11.81, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:50:09', seeing=0.93, atlas_timestamp='2025-11-25T18:49:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, 0.05525000000000091, 0.008250000000000313, -0.031500000000001194, 0.030999999999998806, 0.07975000000000065, -0.0235000000000003, 0.011250000000000426, 0.053999999999998494, 0.009999999999999787, 0.03575000000000017, 0.01699999999999946, 0.07649999999999935, 0.09924999999999962, 0.0019999999999988916, -0.010500000000000398, 0.029249999999999332, 0.023999999999999133, 0.08799999999999919, -0.012750000000000483, 0.03199999999999825, 0.0467499999999994, 0.022750000000002046, 0.01124999999999865, 0.016000000000000014, 0.050499999999999545, 0.07075000000000031, 0.08249999999999957, 0.0649999999999995, 0.014000000000001123, 0.06300000000000061, 0.03500000000000014, 0.034250000000000114], zp_timestamp='2025-11-25T18:46:00')
2025-11-25T20:50:26.036 [DEBUG] [Thread-5518] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:50:26.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:50:26.131 [DEBUG] [Thread-5521] [transport.py] [_log()] starting thread (client mode): 0x70d6ace0
2025-11-25T20:50:26.131 [DEBUG] [Thread-5521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:50:26.147 [DEBUG] [Thread-5521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:50:26.147 [INFO] [Thread-5521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:50:26.155 [DEBUG] [Thread-5521] [transport.py] [_log()] client lang: <none>
2025-11-25T20:50:26.156 [DEBUG] [Thread-5521] [transport.py] [_log()] server lang: <none>
2025-11-25T20:50:26.156 [DEBUG] [Thread-5521] [transport.py] [_log()] kex follows: False
2025-11-25T20:50:26.156 [DEBUG] [Thread-5521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:50:26.156 [DEBUG] [Thread-5521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:50:26.156 [DEBUG] [Thread-5521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:50:26.156 [DEBUG] [Thread-5521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:50:26.156 [DEBUG] [Thread-5521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:50:26.156 [DEBUG] [Thread-5521] [transport.py] [_log()] Compression: none
2025-11-25T20:50:26.156 [DEBUG] [Thread-5521] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:50:26.214 [DEBUG] [Thread-5521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:50:26.215 [DEBUG] [Thread-5521] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:50:26.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:50:26.216 [DEBUG] [Thread-5521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:50:26.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:50:26.270 [DEBUG] [Thread-5521] [transport.py] [_log()] userauth is OK
2025-11-25T20:50:26.270 [DEBUG] [Thread-5521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:50:26.270 [DEBUG] [Thread-5521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:50:26.270 [DEBUG] [Thread-5521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:50:26.270 [DEBUG] [Thread-5521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:50:26.289 [INFO] [Thread-5521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:50:26.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:50:26.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:50:27.142 [DEBUG] [Thread-5521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:50:27.143 [DEBUG] [Thread-5521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:50:27.191 [DEBUG] [Thread-5521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:50:27.191 [DEBUG] [Thread-5521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:50:27.200 [DEBUG] [Thread-5521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:50:27.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:50:27.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:50:27.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:50:27.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:50:27.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:50:27.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:50:27.236 [DEBUG] [Thread-5521] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:50:32.482 [DEBUG] [Thread-5523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:50:34.345 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:50:34.346 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:50:47.530 [DEBUG] [Thread-5524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:50:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:50:57.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:50:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:50:57.808 [DEBUG] [Thread-5525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:50:57.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 50, 41), 27.14, 15.96, 0.0, 13.82, 22.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:50:57.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:50:41
2025-11-25T20:50:58.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:50:58.201 [DEBUG] [Thread-5526] [transport.py] [_log()] starting thread (client mode): 0x70d0dae0
2025-11-25T20:50:58.201 [DEBUG] [Thread-5526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:50:58.223 [DEBUG] [Thread-5526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:50:58.224 [INFO] [Thread-5526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:50:58.227 [DEBUG] [Thread-5526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:50:58.227 [DEBUG] [Thread-5526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:50:58.227 [DEBUG] [Thread-5526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:50:58.227 [DEBUG] [Thread-5526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:50:58.227 [DEBUG] [Thread-5526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:50:58.227 [DEBUG] [Thread-5526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:50:58.228 [DEBUG] [Thread-5526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:50:58.228 [DEBUG] [Thread-5526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:50:58.228 [DEBUG] [Thread-5526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:50:58.228 [DEBUG] [Thread-5526] [transport.py] [_log()] client lang: <none>
2025-11-25T20:50:58.228 [DEBUG] [Thread-5526] [transport.py] [_log()] server lang: <none>
2025-11-25T20:50:58.228 [DEBUG] [Thread-5526] [transport.py] [_log()] kex follows: False
2025-11-25T20:50:58.228 [DEBUG] [Thread-5526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:50:58.228 [DEBUG] [Thread-5526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:50:58.229 [DEBUG] [Thread-5526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:50:58.229 [DEBUG] [Thread-5526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:50:58.229 [DEBUG] [Thread-5526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:50:58.229 [DEBUG] [Thread-5526] [transport.py] [_log()] Compression: none
2025-11-25T20:50:58.229 [DEBUG] [Thread-5526] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:50:58.250 [DEBUG] [Thread-5526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:50:58.250 [DEBUG] [Thread-5526] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:50:58.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:50:58.252 [DEBUG] [Thread-5526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:50:58.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:50:58.254 [DEBUG] [Thread-5526] [transport.py] [_log()] userauth is OK
2025-11-25T20:50:58.254 [DEBUG] [Thread-5526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:50:58.254 [DEBUG] [Thread-5526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:50:58.254 [DEBUG] [Thread-5526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:50:58.254 [DEBUG] [Thread-5526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:50:58.292 [INFO] [Thread-5526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:50:58.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:50:58.959 [DEBUG] [Thread-5526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:50:58.959 [DEBUG] [Thread-5526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:50:58.960 [DEBUG] [Thread-5526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:50:59.000 [DEBUG] [Thread-5526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:50:59.000 [DEBUG] [Thread-5526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:50:59.004 [DEBUG] [Thread-5526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:50:59.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:50:59.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:50:59.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:50:59.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:50:59.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:50:59.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:50:59.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:50:59.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:50:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:50:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.784821 -999.00  +22.30   3.73     21   -0.90 1 1 1 1 1     0    0 21.55 -54.38 ZNESW 8.3 3.7 141.1 15.4 22.2 -26.1 22.1 -25.5 21.9 -24.3 22.1 -25.2
2025-11-25T20:50:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:50:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:50:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.784821
2025-11-25T20:50:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:50:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:50:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:50:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:50:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:50:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:50:41', tmtdew=27.14, humidity=15.96, cloud=0.0, wind=13.82, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:50:41', seeing=0.93, atlas_timestamp='2025-11-25T18:50:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, 0.05525000000000091, 0.008250000000000313, -0.031500000000001194, 0.030999999999998806, 0.07975000000000065, -0.0235000000000003, 0.011250000000000426, 0.053999999999998494, 0.009999999999999787, 0.03575000000000017, 0.01699999999999946, 0.07649999999999935, 0.09924999999999962, 0.0019999999999988916, -0.010500000000000398, 0.029249999999999332, 0.023999999999999133, 0.08799999999999919, -0.012750000000000483, 0.03199999999999825, 0.0467499999999994, 0.022750000000002046, 0.01124999999999865, 0.016000000000000014, 0.050499999999999545, 0.07075000000000031, 0.08249999999999957, 0.0649999999999995, 0.014000000000001123, 0.06300000000000061, 0.03500000000000014, 0.034250000000000114], zp_timestamp='2025-11-25T18:46:00')
2025-11-25T20:50:59.031 [DEBUG] [Thread-5526] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:50:59.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:50:59.126 [DEBUG] [Thread-5529] [transport.py] [_log()] starting thread (client mode): 0x70d00f40
2025-11-25T20:50:59.126 [DEBUG] [Thread-5529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:50:59.141 [DEBUG] [Thread-5529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:50:59.141 [INFO] [Thread-5529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:50:59.148 [DEBUG] [Thread-5529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] client lang: <none>
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] server lang: <none>
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] kex follows: False
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:50:59.149 [DEBUG] [Thread-5529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:50:59.150 [DEBUG] [Thread-5529] [transport.py] [_log()] Compression: none
2025-11-25T20:50:59.150 [DEBUG] [Thread-5529] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:50:59.210 [DEBUG] [Thread-5529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:50:59.210 [DEBUG] [Thread-5529] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:50:59.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:50:59.211 [DEBUG] [Thread-5529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:50:59.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:50:59.266 [DEBUG] [Thread-5529] [transport.py] [_log()] userauth is OK
2025-11-25T20:50:59.266 [DEBUG] [Thread-5529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:50:59.266 [DEBUG] [Thread-5529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:50:59.266 [DEBUG] [Thread-5529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:50:59.266 [DEBUG] [Thread-5529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:50:59.286 [INFO] [Thread-5529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:50:59.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:50:59.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:51:00.107 [DEBUG] [Thread-5529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:51:00.107 [DEBUG] [Thread-5529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:51:00.157 [DEBUG] [Thread-5529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:51:00.157 [DEBUG] [Thread-5529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:51:00.169 [DEBUG] [Thread-5529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:51:00.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:51:00.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:51:00.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:51:00.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:51:00.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:51:00.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:51:00.214 [DEBUG] [Thread-5529] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:51:02.567 [DEBUG] [Thread-5531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:51:10.903 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:51:17.620 [DEBUG] [Thread-5532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:51:30.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:51:30.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:51:30.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:51:30.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 51, 13), 27.11, 16.01, 0.0, 13.99, 22.26, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:51:30.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:51:13
2025-11-25T20:51:31.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:51:31.173 [DEBUG] [Thread-5533] [transport.py] [_log()] starting thread (client mode): 0x70d3a290
2025-11-25T20:51:31.173 [DEBUG] [Thread-5533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:51:31.192 [DEBUG] [Thread-5533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:51:31.193 [INFO] [Thread-5533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] client lang: <none>
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] server lang: <none>
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] kex follows: False
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] Compression: none
2025-11-25T20:51:31.196 [DEBUG] [Thread-5533] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:51:31.208 [DEBUG] [Thread-5533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:51:31.208 [DEBUG] [Thread-5533] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:51:31.208 [DEBUG] [Thread-5533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:51:31.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:51:31.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:51:31.209 [DEBUG] [Thread-5533] [transport.py] [_log()] userauth is OK
2025-11-25T20:51:31.209 [DEBUG] [Thread-5533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:51:31.209 [DEBUG] [Thread-5533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:51:31.209 [DEBUG] [Thread-5533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:51:31.209 [DEBUG] [Thread-5533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:51:31.224 [INFO] [Thread-5533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:51:31.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:51:31.844 [DEBUG] [Thread-5533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:51:31.844 [DEBUG] [Thread-5533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:51:31.844 [DEBUG] [Thread-5533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:51:31.885 [DEBUG] [Thread-5533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:51:31.885 [DEBUG] [Thread-5533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:51:31.888 [DEBUG] [Thread-5533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:51:31.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:51:31.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:51:31.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:51:31.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:51:31.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:51:31.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:51:31.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:51:31.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:51:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:51:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.785516 -999.00  +22.30   9.68     21   -0.90 1 1 1 1 1     0    0 21.93 -43.05 ZNESW 9.0 9.7 207.6 18.7 22.1 -25.8 22.1 -25.5 21.9 -24.1 22.1 -25.3
2025-11-25T20:51:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:51:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:51:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.785516
2025-11-25T20:51:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:51:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:51:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:51:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:51:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:51:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:51:13', tmtdew=27.11, humidity=16.01, cloud=0.0, wind=13.99, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:51:13', seeing=1.07, atlas_timestamp='2025-11-25T18:51:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.0442499999999999, 0.02075000000000138, -0.017500000000001847, 0.014499999999999957, 0.0782500000000006, 0.006000000000000227, 0.02775000000000105, 0.05299999999999905, 0.034000000000000696, 0.0182500000000001, 0.061500000000000554, 0.08200000000000074, 0.08724999999999916, 0.009499999999999176, -0.002000000000000668, 0.05524999999999913, 0.061500000000000554, 0.08099999999999952, 0.029749999999999943, 0.05699999999999861, 0.053249999999998465, 0.02925000000000111, 0.007250000000000867, 0.06549999999999834, 0.059499999999999886, 0.10275000000000034, 0.08050000000000068, 0.16000000000000014, 0.016500000000000625, 0.03750000000000142, 0.06900000000000084, 0.05874999999999986], zp_timestamp='2025-11-25T18:46:00')
2025-11-25T20:51:31.906 [DEBUG] [Thread-5533] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:51:31.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:51:32.650 [DEBUG] [Thread-5536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:51:34.549 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:51:34.550 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:51:37.981 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:51:44.362 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:51:47.693 [DEBUG] [Thread-5537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:51:57.877 [DEBUG] [Thread-5538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:52:02.731 [DEBUG] [Thread-5539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:52:17.762 [DEBUG] [Thread-5540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:52:32.797 [DEBUG] [Thread-5541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:52:34.752 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:52:34.753 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:52:45.210 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:52:47.831 [DEBUG] [Thread-5542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:52:57.944 [DEBUG] [Thread-5543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:02.867 [DEBUG] [Thread-5544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:17.905 [DEBUG] [Thread-5545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:23.247 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:32.941 [DEBUG] [Thread-5546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:34.953 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:34.954 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:45.549 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T20:53:46.148 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:47.981 [DEBUG] [Thread-5547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:53.509 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:53:57.995 [DEBUG] [Thread-5548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:54:03.019 [DEBUG] [Thread-5549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:54:09.959 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:54:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:54:15.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:54:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:54:16.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 53, 53), 27.15, 16.0, 0.0, 13.66, 22.13, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:54:16.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:53:53
2025-11-25T20:54:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:54:16.531 [DEBUG] [Thread-5550] [transport.py] [_log()] starting thread (client mode): 0x70d3be80
2025-11-25T20:54:16.532 [DEBUG] [Thread-5550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:54:16.551 [DEBUG] [Thread-5550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:54:16.551 [INFO] [Thread-5550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] client lang: <none>
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] server lang: <none>
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] kex follows: False
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:54:16.552 [DEBUG] [Thread-5550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:54:16.553 [DEBUG] [Thread-5550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:54:16.553 [DEBUG] [Thread-5550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:54:16.553 [DEBUG] [Thread-5550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:54:16.553 [DEBUG] [Thread-5550] [transport.py] [_log()] Compression: none
2025-11-25T20:54:16.553 [DEBUG] [Thread-5550] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:54:16.565 [DEBUG] [Thread-5550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:54:16.566 [DEBUG] [Thread-5550] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:54:16.566 [DEBUG] [Thread-5550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:54:16.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:54:16.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:54:16.568 [DEBUG] [Thread-5550] [transport.py] [_log()] userauth is OK
2025-11-25T20:54:16.568 [DEBUG] [Thread-5550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:54:16.568 [DEBUG] [Thread-5550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:54:16.568 [DEBUG] [Thread-5550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:54:16.568 [DEBUG] [Thread-5550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:54:16.585 [INFO] [Thread-5550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:54:16.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:54:17.203 [DEBUG] [Thread-5550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:54:17.203 [DEBUG] [Thread-5550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:54:17.204 [DEBUG] [Thread-5550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:54:17.245 [DEBUG] [Thread-5550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:54:17.245 [DEBUG] [Thread-5550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:54:17.248 [DEBUG] [Thread-5550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:54:17.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:54:17.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:54:17.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:54:17.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:54:17.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:54:17.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:54:17.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:54:17.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:54:17.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:54:17.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.787252 -999.00  +22.10  10.09     21   -1.00 1 1 1 1 1     0    0 22.33 -23.23 ZNESW 10.9 10.1 193.0 15.5 22.1 -26.2 22.1 -25.5 21.8 -24.3 22.1 -25.5
2025-11-25T20:54:17.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:54:17.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:54:17.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.787252
2025-11-25T20:54:17.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:54:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:53:53', tmtdew=27.15, humidity=16.0, cloud=0.0, wind=13.66, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:53:53', seeing=1.2, atlas_timestamp='2025-11-25T18:53:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.0442499999999999, 0.02075000000000138, -0.017500000000001847, 0.014499999999999957, 0.0782500000000006, 0.006000000000000227, 0.02775000000000105, 0.05299999999999905, 0.034000000000000696, 0.0182500000000001, 0.061500000000000554, 0.08200000000000074, 0.08724999999999916, 0.009499999999999176, -0.002000000000000668, 0.05524999999999913, 0.061500000000000554, 0.08099999999999952, 0.029749999999999943, 0.05699999999999861, 0.053249999999998465, 0.02925000000000111, 0.007250000000000867, 0.06549999999999834, 0.059499999999999886, 0.10275000000000034, 0.08050000000000068, 0.16000000000000014, 0.016500000000000625, 0.03750000000000142, 0.06900000000000084, 0.05874999999999986], zp_timestamp='2025-11-25T18:46:00')
2025-11-25T20:54:17.272 [DEBUG] [Thread-5550] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:54:17.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:54:17.367 [DEBUG] [Thread-5553] [transport.py] [_log()] starting thread (client mode): 0x70d75030
2025-11-25T20:54:17.367 [DEBUG] [Thread-5553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:54:17.381 [DEBUG] [Thread-5553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:54:17.381 [INFO] [Thread-5553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:54:17.388 [DEBUG] [Thread-5553] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:54:17.389 [DEBUG] [Thread-5553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:54:17.389 [DEBUG] [Thread-5553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:54:17.389 [DEBUG] [Thread-5553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:54:17.389 [DEBUG] [Thread-5553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:54:17.389 [DEBUG] [Thread-5553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:54:17.389 [DEBUG] [Thread-5553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:54:17.389 [DEBUG] [Thread-5553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:54:17.389 [DEBUG] [Thread-5553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:54:17.389 [DEBUG] [Thread-5553] [transport.py] [_log()] client lang: <none>
2025-11-25T20:54:17.390 [DEBUG] [Thread-5553] [transport.py] [_log()] server lang: <none>
2025-11-25T20:54:17.390 [DEBUG] [Thread-5553] [transport.py] [_log()] kex follows: False
2025-11-25T20:54:17.390 [DEBUG] [Thread-5553] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:54:17.390 [DEBUG] [Thread-5553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:54:17.390 [DEBUG] [Thread-5553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:54:17.390 [DEBUG] [Thread-5553] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:54:17.390 [DEBUG] [Thread-5553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:54:17.390 [DEBUG] [Thread-5553] [transport.py] [_log()] Compression: none
2025-11-25T20:54:17.390 [DEBUG] [Thread-5553] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:54:17.445 [DEBUG] [Thread-5553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:54:17.446 [DEBUG] [Thread-5553] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:54:17.446 [DEBUG] [Thread-5553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:54:17.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:54:17.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:54:17.505 [DEBUG] [Thread-5553] [transport.py] [_log()] userauth is OK
2025-11-25T20:54:17.505 [DEBUG] [Thread-5553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:54:17.506 [DEBUG] [Thread-5553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:54:17.506 [DEBUG] [Thread-5553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:54:17.506 [DEBUG] [Thread-5553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:54:17.523 [INFO] [Thread-5553] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:54:17.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:54:17.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:54:18.056 [DEBUG] [Thread-5555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:54:18.350 [DEBUG] [Thread-5553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:54:18.350 [DEBUG] [Thread-5553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:54:18.398 [DEBUG] [Thread-5553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:54:18.398 [DEBUG] [Thread-5553] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:54:18.407 [DEBUG] [Thread-5553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:54:18.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:54:18.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:54:18.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:54:18.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:54:18.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:54:18.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:54:18.445 [DEBUG] [Thread-5553] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:54:33.117 [DEBUG] [Thread-5556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:54:35.153 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:54:35.154 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:54:48.152 [DEBUG] [Thread-5557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:54:48.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:54:48.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:54:48.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:54:49.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 54, 25), 27.12, 16.03, 0.0, 16.13, 22.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:54:49.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:54:25
2025-11-25T20:54:49.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:54:49.385 [DEBUG] [Thread-5558] [transport.py] [_log()] starting thread (client mode): 0x70d744c0
2025-11-25T20:54:49.386 [DEBUG] [Thread-5558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:54:49.406 [DEBUG] [Thread-5558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:54:49.407 [INFO] [Thread-5558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:54:49.409 [DEBUG] [Thread-5558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] client lang: <none>
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] server lang: <none>
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] kex follows: False
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] Compression: none
2025-11-25T20:54:49.410 [DEBUG] [Thread-5558] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:54:49.429 [DEBUG] [Thread-5558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:54:49.430 [DEBUG] [Thread-5558] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:54:49.430 [DEBUG] [Thread-5558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:54:49.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:54:49.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:54:49.432 [DEBUG] [Thread-5558] [transport.py] [_log()] userauth is OK
2025-11-25T20:54:49.432 [DEBUG] [Thread-5558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:54:49.433 [DEBUG] [Thread-5558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:54:49.433 [DEBUG] [Thread-5558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:54:49.433 [DEBUG] [Thread-5558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:54:49.453 [INFO] [Thread-5558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:54:49.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:54:50.110 [DEBUG] [Thread-5558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:54:50.111 [DEBUG] [Thread-5558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:54:50.111 [DEBUG] [Thread-5558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:54:50.152 [DEBUG] [Thread-5558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:54:50.152 [DEBUG] [Thread-5558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:54:50.155 [DEBUG] [Thread-5558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:54:50.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:54:50.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:54:50.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:54:50.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:54:50.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:54:50.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:54:50.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:54:50.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:54:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:54:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.787946 -999.00  +22.10  10.94     21   -1.10 1 1 1 1 1     0    0 22.94 -13.52 ZNESW 10.2 10.9 208.4 12.3 22.1 -26.2 22.1 -25.3 21.8 -24.1 22.0 -25.1
2025-11-25T20:54:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:54:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:54:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.787946
2025-11-25T20:54:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:54:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:54:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:54:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:54:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:54:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:54:25', tmtdew=27.12, humidity=16.03, cloud=0.0, wind=16.13, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:54:25', seeing=1.38, atlas_timestamp='2025-11-25T18:54:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.0442499999999999, 0.02075000000000138, -0.017500000000001847, 0.014499999999999957, 0.0782500000000006, 0.006000000000000227, 0.02775000000000105, 0.05299999999999905, 0.034000000000000696, 0.0182500000000001, 0.061500000000000554, 0.08200000000000074, 0.08724999999999916, 0.009499999999999176, -0.002000000000000668, 0.05524999999999913, 0.061500000000000554, 0.08099999999999952, 0.029749999999999943, 0.05699999999999861, 0.053249999999998465, 0.02925000000000111, 0.007250000000000867, 0.06549999999999834, 0.059499999999999886, 0.10275000000000034, 0.08050000000000068, 0.16000000000000014, 0.016500000000000625, 0.03750000000000142, 0.06900000000000084, 0.05874999999999986], zp_timestamp='2025-11-25T18:51:00')
2025-11-25T20:54:50.183 [DEBUG] [Thread-5558] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:54:50.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:54:50.278 [DEBUG] [Thread-5561] [transport.py] [_log()] starting thread (client mode): 0x70d3a980
2025-11-25T20:54:50.278 [DEBUG] [Thread-5561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:54:50.293 [DEBUG] [Thread-5561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:54:50.293 [INFO] [Thread-5561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:54:50.301 [DEBUG] [Thread-5561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:54:50.301 [DEBUG] [Thread-5561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:54:50.301 [DEBUG] [Thread-5561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:54:50.302 [DEBUG] [Thread-5561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:54:50.302 [DEBUG] [Thread-5561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:54:50.302 [DEBUG] [Thread-5561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:54:50.302 [DEBUG] [Thread-5561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:54:50.302 [DEBUG] [Thread-5561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:54:50.302 [DEBUG] [Thread-5561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:54:50.302 [DEBUG] [Thread-5561] [transport.py] [_log()] client lang: <none>
2025-11-25T20:54:50.302 [DEBUG] [Thread-5561] [transport.py] [_log()] server lang: <none>
2025-11-25T20:54:50.302 [DEBUG] [Thread-5561] [transport.py] [_log()] kex follows: False
2025-11-25T20:54:50.303 [DEBUG] [Thread-5561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:54:50.303 [DEBUG] [Thread-5561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:54:50.303 [DEBUG] [Thread-5561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:54:50.303 [DEBUG] [Thread-5561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:54:50.303 [DEBUG] [Thread-5561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:54:50.303 [DEBUG] [Thread-5561] [transport.py] [_log()] Compression: none
2025-11-25T20:54:50.303 [DEBUG] [Thread-5561] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:54:50.362 [DEBUG] [Thread-5561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:54:50.362 [DEBUG] [Thread-5561] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:54:50.362 [DEBUG] [Thread-5561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:54:50.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:54:50.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:54:50.418 [DEBUG] [Thread-5561] [transport.py] [_log()] userauth is OK
2025-11-25T20:54:50.418 [DEBUG] [Thread-5561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:54:50.418 [DEBUG] [Thread-5561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:54:50.418 [DEBUG] [Thread-5561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:54:50.418 [DEBUG] [Thread-5561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:54:50.437 [INFO] [Thread-5561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:54:50.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:54:50.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:54:51.278 [DEBUG] [Thread-5561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:54:51.278 [DEBUG] [Thread-5561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:54:51.325 [DEBUG] [Thread-5561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:54:51.326 [DEBUG] [Thread-5561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:54:51.335 [DEBUG] [Thread-5561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:54:51.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:54:51.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:54:51.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:54:51.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:54:51.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:54:51.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:54:51.371 [DEBUG] [Thread-5561] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:54:58.047 [DEBUG] [Thread-5563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:55:03.191 [DEBUG] [Thread-5564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:55:18.240 [DEBUG] [Thread-5565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:55:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:55:21.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:55:21.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:55:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 54, 57), 27.13, 15.98, 0.0, 14.72, 22.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:55:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:54:57
2025-11-25T20:55:22.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:55:22.345 [DEBUG] [Thread-5566] [transport.py] [_log()] starting thread (client mode): 0x70d019c0
2025-11-25T20:55:22.345 [DEBUG] [Thread-5566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:55:22.367 [DEBUG] [Thread-5566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:55:22.367 [INFO] [Thread-5566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] client lang: <none>
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] server lang: <none>
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] kex follows: False
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:55:22.370 [DEBUG] [Thread-5566] [transport.py] [_log()] Compression: none
2025-11-25T20:55:22.371 [DEBUG] [Thread-5566] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:55:22.389 [DEBUG] [Thread-5566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:55:22.390 [DEBUG] [Thread-5566] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:55:22.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:55:22.391 [DEBUG] [Thread-5566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:55:22.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:55:22.392 [DEBUG] [Thread-5566] [transport.py] [_log()] userauth is OK
2025-11-25T20:55:22.393 [DEBUG] [Thread-5566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:55:22.393 [DEBUG] [Thread-5566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:55:22.393 [DEBUG] [Thread-5566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:55:22.393 [DEBUG] [Thread-5566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:55:22.413 [INFO] [Thread-5566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:55:22.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:55:23.006 [DEBUG] [Thread-5566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:55:23.006 [DEBUG] [Thread-5566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:55:23.007 [DEBUG] [Thread-5566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:55:23.048 [DEBUG] [Thread-5566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:55:23.048 [DEBUG] [Thread-5566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:55:23.051 [DEBUG] [Thread-5566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:55:23.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:55:23.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:55:23.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:55:23.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:55:23.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:55:23.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:55:23.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:55:23.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:55:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:55:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.788293 -999.00  +22.10   5.52     21   -1.10 1 1 1 1 1     0    0 22.18 -10.75 ZNESW 6.9 5.5 204.1 11.9 22.1 -26.0 22.1 -25.5 21.8 -24.3 22.0 -25.3
2025-11-25T20:55:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:55:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:55:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.788293
2025-11-25T20:55:23.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:55:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:55:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:55:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:55:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:55:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:54:57', tmtdew=27.13, humidity=15.98, cloud=0.0, wind=14.72, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:54:57', seeing=1.29, atlas_timestamp='2025-11-25T18:55:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.0442499999999999, 0.02075000000000138, -0.017500000000001847, 0.014499999999999957, 0.0782500000000006, 0.006000000000000227, 0.02775000000000105, 0.05299999999999905, 0.034000000000000696, 0.0182500000000001, 0.061500000000000554, 0.08200000000000074, 0.08724999999999916, 0.009499999999999176, -0.002000000000000668, 0.05524999999999913, 0.061500000000000554, 0.08099999999999952, 0.029749999999999943, 0.05699999999999861, 0.053249999999998465, 0.02925000000000111, 0.007250000000000867, 0.06549999999999834, 0.059499999999999886, 0.10275000000000034, 0.08050000000000068, 0.16000000000000014, 0.016500000000000625, 0.03750000000000142, 0.06900000000000084, 0.05874999999999986], zp_timestamp='2025-11-25T18:51:00')
2025-11-25T20:55:23.080 [DEBUG] [Thread-5566] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:55:23.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:55:23.177 [DEBUG] [Thread-5569] [transport.py] [_log()] starting thread (client mode): 0x70d02650
2025-11-25T20:55:23.177 [DEBUG] [Thread-5569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:55:23.192 [DEBUG] [Thread-5569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:55:23.192 [INFO] [Thread-5569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:55:23.200 [DEBUG] [Thread-5569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] client lang: <none>
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] server lang: <none>
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] kex follows: False
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:55:23.201 [DEBUG] [Thread-5569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:55:23.202 [DEBUG] [Thread-5569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:55:23.202 [DEBUG] [Thread-5569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:55:23.202 [DEBUG] [Thread-5569] [transport.py] [_log()] Compression: none
2025-11-25T20:55:23.202 [DEBUG] [Thread-5569] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:55:23.258 [DEBUG] [Thread-5569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:55:23.258 [DEBUG] [Thread-5569] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:55:23.259 [DEBUG] [Thread-5569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:55:23.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:55:23.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:55:23.321 [DEBUG] [Thread-5569] [transport.py] [_log()] userauth is OK
2025-11-25T20:55:23.321 [DEBUG] [Thread-5569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:55:23.321 [DEBUG] [Thread-5569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:55:23.321 [DEBUG] [Thread-5569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:55:23.322 [DEBUG] [Thread-5569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:55:23.340 [INFO] [Thread-5569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:55:23.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:55:23.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:55:24.142 [DEBUG] [Thread-5569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:55:24.142 [DEBUG] [Thread-5569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:55:24.193 [DEBUG] [Thread-5569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:55:24.193 [DEBUG] [Thread-5569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:55:24.206 [DEBUG] [Thread-5569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:55:24.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:55:24.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:55:24.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:55:24.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:55:24.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:55:24.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:55:24.256 [DEBUG] [Thread-5569] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:55:33.276 [DEBUG] [Thread-5571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:55:35.356 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:55:35.359 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:55:48.327 [DEBUG] [Thread-5572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:55:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:55:54.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:55:54.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:55:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 55, 29), 27.23, 15.87, 0.0, 10.64, 22.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:55:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:55:29
2025-11-25T20:55:55.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:55:55.232 [DEBUG] [Thread-5573] [transport.py] [_log()] starting thread (client mode): 0x70d3a4d0
2025-11-25T20:55:55.232 [DEBUG] [Thread-5573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:55:55.253 [DEBUG] [Thread-5573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:55:55.253 [INFO] [Thread-5573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:55:55.256 [DEBUG] [Thread-5573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:55:55.256 [DEBUG] [Thread-5573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:55:55.256 [DEBUG] [Thread-5573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:55:55.256 [DEBUG] [Thread-5573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:55:55.256 [DEBUG] [Thread-5573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] client lang: <none>
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] server lang: <none>
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] kex follows: False
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] Compression: none
2025-11-25T20:55:55.257 [DEBUG] [Thread-5573] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:55:55.276 [DEBUG] [Thread-5573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:55:55.276 [DEBUG] [Thread-5573] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:55:55.277 [DEBUG] [Thread-5573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:55:55.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:55:55.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:55:55.279 [DEBUG] [Thread-5573] [transport.py] [_log()] userauth is OK
2025-11-25T20:55:55.279 [DEBUG] [Thread-5573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:55:55.279 [DEBUG] [Thread-5573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:55:55.280 [DEBUG] [Thread-5573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:55:55.280 [DEBUG] [Thread-5573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:55:55.315 [INFO] [Thread-5573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:55:55.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:55:55.956 [DEBUG] [Thread-5573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:55:55.957 [DEBUG] [Thread-5573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:55:55.957 [DEBUG] [Thread-5573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:55:55.998 [DEBUG] [Thread-5573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:55:55.998 [DEBUG] [Thread-5573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:55:56.002 [DEBUG] [Thread-5573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:55:56.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:55:56.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:55:56.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:55:56.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:55:56.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:55:56.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:55:56.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:55:56.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:55:56.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:55:56.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.788641 -999.00  +22.00   8.24     21   -1.10 1 1 1 1 1     0    0 22.87 -9.01 ZNESW 10.7 8.2 200.0 10.4 22.0 -26.1 22.0 -25.5 21.7 -24.1 21.9 -25.2
2025-11-25T20:55:56.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:55:56.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:55:56.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.788641
2025-11-25T20:55:56.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:55:56.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:55:56.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:55:56.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:55:56.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:55:56.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:55:29', tmtdew=27.23, humidity=15.87, cloud=0.0, wind=10.64, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:55:29', seeing=1.33, atlas_timestamp='2025-11-25T18:55:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.0442499999999999, 0.02075000000000138, -0.017500000000001847, 0.014499999999999957, 0.0782500000000006, 0.006000000000000227, 0.02775000000000105, 0.05299999999999905, 0.034000000000000696, 0.0182500000000001, 0.061500000000000554, 0.08200000000000074, 0.08724999999999916, 0.009499999999999176, -0.002000000000000668, 0.05524999999999913, 0.061500000000000554, 0.08099999999999952, 0.029749999999999943, 0.05699999999999861, 0.053249999999998465, 0.02925000000000111, 0.007250000000000867, 0.06549999999999834, 0.059499999999999886, 0.10275000000000034, 0.08050000000000068, 0.16000000000000014, 0.016500000000000625, 0.03750000000000142, 0.06900000000000084, 0.05874999999999986], zp_timestamp='2025-11-25T18:51:00')
2025-11-25T20:55:56.029 [DEBUG] [Thread-5573] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:55:56.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:55:56.125 [DEBUG] [Thread-5576] [transport.py] [_log()] starting thread (client mode): 0x70d3b670
2025-11-25T20:55:56.125 [DEBUG] [Thread-5576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:55:56.140 [DEBUG] [Thread-5576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:55:56.140 [INFO] [Thread-5576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:55:56.147 [DEBUG] [Thread-5576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] client lang: <none>
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] server lang: <none>
2025-11-25T20:55:56.148 [DEBUG] [Thread-5576] [transport.py] [_log()] kex follows: False
2025-11-25T20:55:56.149 [DEBUG] [Thread-5576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:55:56.149 [DEBUG] [Thread-5576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:55:56.149 [DEBUG] [Thread-5576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:55:56.149 [DEBUG] [Thread-5576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:55:56.149 [DEBUG] [Thread-5576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:55:56.149 [DEBUG] [Thread-5576] [transport.py] [_log()] Compression: none
2025-11-25T20:55:56.149 [DEBUG] [Thread-5576] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:55:56.208 [DEBUG] [Thread-5576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:55:56.208 [DEBUG] [Thread-5576] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:55:56.209 [DEBUG] [Thread-5576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:55:56.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:55:56.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:55:56.269 [DEBUG] [Thread-5576] [transport.py] [_log()] userauth is OK
2025-11-25T20:55:56.269 [DEBUG] [Thread-5576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:55:56.270 [DEBUG] [Thread-5576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:55:56.270 [DEBUG] [Thread-5576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:55:56.270 [DEBUG] [Thread-5576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:55:56.288 [INFO] [Thread-5576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:55:56.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:55:56.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:55:57.082 [DEBUG] [Thread-5576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:55:57.082 [DEBUG] [Thread-5576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:55:57.131 [DEBUG] [Thread-5576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:55:57.131 [DEBUG] [Thread-5576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:55:57.140 [DEBUG] [Thread-5576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:55:57.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:55:57.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:55:57.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:55:57.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:55:57.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:55:57.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:55:57.177 [DEBUG] [Thread-5576] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:55:58.104 [DEBUG] [Thread-5578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:56:03.355 [DEBUG] [Thread-5579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:56:10.497 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:56:18.411 [DEBUG] [Thread-5580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:56:27.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:56:27.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:56:27.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:56:27.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 56, 1), 27.29, 15.82, 0.0, 12.99, 22.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:56:27.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:56:01
2025-11-25T20:56:28.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:56:28.195 [DEBUG] [Thread-5581] [transport.py] [_log()] starting thread (client mode): 0x70d75570
2025-11-25T20:56:28.195 [DEBUG] [Thread-5581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:56:28.215 [DEBUG] [Thread-5581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:56:28.215 [INFO] [Thread-5581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] client lang: <none>
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] server lang: <none>
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] kex follows: False
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] Compression: none
2025-11-25T20:56:28.217 [DEBUG] [Thread-5581] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:56:28.233 [DEBUG] [Thread-5581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:56:28.234 [DEBUG] [Thread-5581] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:56:28.234 [DEBUG] [Thread-5581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:56:28.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:56:28.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:56:28.235 [DEBUG] [Thread-5581] [transport.py] [_log()] userauth is OK
2025-11-25T20:56:28.235 [DEBUG] [Thread-5581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:56:28.235 [DEBUG] [Thread-5581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:56:28.235 [DEBUG] [Thread-5581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:56:28.235 [DEBUG] [Thread-5581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:56:28.245 [INFO] [Thread-5581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:56:28.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:56:28.812 [DEBUG] [Thread-5581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:56:28.812 [DEBUG] [Thread-5581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:56:28.812 [DEBUG] [Thread-5581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:56:28.853 [DEBUG] [Thread-5581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:56:28.853 [DEBUG] [Thread-5581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:56:28.855 [DEBUG] [Thread-5581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:56:28.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:56:28.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:56:28.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:56:28.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:56:28.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:56:28.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:56:28.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.788988 -999.00  +22.00  11.07     21   -1.10 1 1 1 1 1     0    0 22.59 -9.15 ZNESW 7.1 11.1 188.2 15.5 22.0 -25.9 22.0 -25.3 21.7 -24.1 21.9 -25.0
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.788988
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:56:28.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:56:01', tmtdew=27.29, humidity=15.82, cloud=0.0, wind=12.99, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:56:01', seeing=1.33, atlas_timestamp='2025-11-25T18:56:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.0442499999999999, 0.02075000000000138, -0.017500000000001847, 0.014499999999999957, 0.0782500000000006, 0.006000000000000227, 0.02775000000000105, 0.05299999999999905, 0.034000000000000696, 0.0182500000000001, 0.061500000000000554, 0.08200000000000074, 0.08724999999999916, 0.009499999999999176, -0.002000000000000668, 0.05524999999999913, 0.061500000000000554, 0.08099999999999952, 0.029749999999999943, 0.05699999999999861, 0.053249999999998465, 0.02925000000000111, 0.007250000000000867, 0.06549999999999834, 0.059499999999999886, 0.10275000000000034, 0.08050000000000068, 0.16000000000000014, 0.016500000000000625, 0.03750000000000142, 0.06900000000000084, 0.05874999999999986], zp_timestamp='2025-11-25T18:51:00')
2025-11-25T20:56:28.875 [DEBUG] [Thread-5581] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:56:28.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:56:28.961 [DEBUG] [Thread-5584] [transport.py] [_log()] starting thread (client mode): 0x70d3b640
2025-11-25T20:56:28.961 [DEBUG] [Thread-5584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:56:28.975 [DEBUG] [Thread-5584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:56:28.976 [INFO] [Thread-5584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] client lang: <none>
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] server lang: <none>
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] kex follows: False
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] Compression: none
2025-11-25T20:56:28.983 [DEBUG] [Thread-5584] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:56:29.040 [DEBUG] [Thread-5584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:56:29.040 [DEBUG] [Thread-5584] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:56:29.040 [DEBUG] [Thread-5584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:56:29.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:56:29.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:56:29.097 [DEBUG] [Thread-5584] [transport.py] [_log()] userauth is OK
2025-11-25T20:56:29.097 [DEBUG] [Thread-5584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:56:29.097 [DEBUG] [Thread-5584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:56:29.097 [DEBUG] [Thread-5584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:56:29.097 [DEBUG] [Thread-5584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:56:29.111 [INFO] [Thread-5584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:56:29.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:56:29.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:56:29.927 [DEBUG] [Thread-5584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:56:29.927 [DEBUG] [Thread-5584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:56:29.975 [DEBUG] [Thread-5584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:56:29.975 [DEBUG] [Thread-5584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:56:29.983 [DEBUG] [Thread-5584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:56:29.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:56:29.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:56:29.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:56:30.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:56:30.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:56:30.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:56:30.014 [DEBUG] [Thread-5584] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:56:33.445 [DEBUG] [Thread-5586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:56:35.560 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:56:35.560 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:56:48.491 [DEBUG] [Thread-5587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:56:58.159 [DEBUG] [Thread-5588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:57:00.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:57:00.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:57:00.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:57:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 56, 33), 27.29, 15.8, 0.0, 14.7, 22.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:57:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:56:33
2025-11-25T20:57:00.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:57:00.986 [DEBUG] [Thread-5589] [transport.py] [_log()] starting thread (client mode): 0x70d77c10
2025-11-25T20:57:00.986 [DEBUG] [Thread-5589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:57:01.004 [DEBUG] [Thread-5589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:57:01.005 [INFO] [Thread-5589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:57:01.008 [DEBUG] [Thread-5589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:57:01.008 [DEBUG] [Thread-5589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:57:01.008 [DEBUG] [Thread-5589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:57:01.008 [DEBUG] [Thread-5589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:57:01.008 [DEBUG] [Thread-5589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:57:01.008 [DEBUG] [Thread-5589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:57:01.008 [DEBUG] [Thread-5589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:57:01.008 [DEBUG] [Thread-5589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:57:01.008 [DEBUG] [Thread-5589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] client lang: <none>
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] server lang: <none>
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] kex follows: False
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] Compression: none
2025-11-25T20:57:01.009 [DEBUG] [Thread-5589] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:57:01.020 [DEBUG] [Thread-5589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:57:01.020 [DEBUG] [Thread-5589] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:57:01.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:57:01.021 [DEBUG] [Thread-5589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:57:01.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:57:01.023 [DEBUG] [Thread-5589] [transport.py] [_log()] userauth is OK
2025-11-25T20:57:01.023 [DEBUG] [Thread-5589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:57:01.023 [DEBUG] [Thread-5589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:57:01.023 [DEBUG] [Thread-5589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:57:01.023 [DEBUG] [Thread-5589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:57:01.041 [INFO] [Thread-5589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:57:01.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:57:01.612 [DEBUG] [Thread-5589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:57:01.612 [DEBUG] [Thread-5589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:57:01.613 [DEBUG] [Thread-5589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:57:01.653 [DEBUG] [Thread-5589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:57:01.654 [DEBUG] [Thread-5589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:57:01.655 [DEBUG] [Thread-5589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:57:01.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:57:01.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:57:01.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:57:01.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:57:01.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:57:01.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:57:01.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:57:01.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.789335 -999.00  +22.10  11.04     21   -1.10 1 1 1 1 1     0    0 22.81 -7.56 ZNESW 10.1 11.0 196.4 13.9 22.0 -25.8 22.0 -25.4 21.8 -24.2 21.9 -25.2
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.789335
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:57:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:57:01.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:56:33', tmtdew=27.29, humidity=15.8, cloud=0.0, wind=14.7, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:56:33', seeing=1.24, atlas_timestamp='2025-11-25T18:56:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.02674999999999983, 0.0442499999999999, 0.02075000000000138, -0.017500000000001847, 0.014499999999999957, 0.0782500000000006, 0.006000000000000227, 0.02775000000000105, 0.05299999999999905, 0.034000000000000696, 0.0182500000000001, 0.061500000000000554, 0.08200000000000074, 0.08724999999999916, 0.009499999999999176, -0.002000000000000668, 0.05524999999999913, 0.061500000000000554, 0.08099999999999952, 0.029749999999999943, 0.05699999999999861, 0.053249999999998465, 0.02925000000000111, 0.007250000000000867, 0.06549999999999834, 0.059499999999999886, 0.10275000000000034, 0.08050000000000068, 0.16000000000000014, 0.016500000000000625, 0.03750000000000142, 0.06900000000000084, 0.05874999999999986], zp_timestamp='2025-11-25T18:51:00')
2025-11-25T20:57:01.670 [DEBUG] [Thread-5589] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:57:01.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:57:01.762 [DEBUG] [Thread-5592] [transport.py] [_log()] starting thread (client mode): 0x70d74880
2025-11-25T20:57:01.762 [DEBUG] [Thread-5592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:57:01.780 [DEBUG] [Thread-5592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:57:01.780 [INFO] [Thread-5592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:57:01.788 [DEBUG] [Thread-5592] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:57:01.788 [DEBUG] [Thread-5592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:57:01.788 [DEBUG] [Thread-5592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:57:01.788 [DEBUG] [Thread-5592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:57:01.789 [DEBUG] [Thread-5592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:57:01.789 [DEBUG] [Thread-5592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:57:01.789 [DEBUG] [Thread-5592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:57:01.789 [DEBUG] [Thread-5592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:57:01.789 [DEBUG] [Thread-5592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:57:01.789 [DEBUG] [Thread-5592] [transport.py] [_log()] client lang: <none>
2025-11-25T20:57:01.789 [DEBUG] [Thread-5592] [transport.py] [_log()] server lang: <none>
2025-11-25T20:57:01.790 [DEBUG] [Thread-5592] [transport.py] [_log()] kex follows: False
2025-11-25T20:57:01.790 [DEBUG] [Thread-5592] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:57:01.790 [DEBUG] [Thread-5592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:57:01.790 [DEBUG] [Thread-5592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:57:01.790 [DEBUG] [Thread-5592] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:57:01.790 [DEBUG] [Thread-5592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:57:01.791 [DEBUG] [Thread-5592] [transport.py] [_log()] Compression: none
2025-11-25T20:57:01.791 [DEBUG] [Thread-5592] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:57:01.846 [DEBUG] [Thread-5592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:57:01.847 [DEBUG] [Thread-5592] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:57:01.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:57:01.848 [DEBUG] [Thread-5592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:57:01.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:57:01.906 [DEBUG] [Thread-5592] [transport.py] [_log()] userauth is OK
2025-11-25T20:57:01.906 [DEBUG] [Thread-5592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:57:01.906 [DEBUG] [Thread-5592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:57:01.906 [DEBUG] [Thread-5592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:57:01.906 [DEBUG] [Thread-5592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:57:01.925 [INFO] [Thread-5592] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:57:01.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:57:01.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:57:02.767 [DEBUG] [Thread-5592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:57:02.768 [DEBUG] [Thread-5592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:57:02.815 [DEBUG] [Thread-5592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:57:02.815 [DEBUG] [Thread-5592] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:57:02.823 [DEBUG] [Thread-5592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:57:02.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:57: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')
2025-11-25T20:57:02.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:57:02.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:57:02.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:57:02.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:57:02.855 [DEBUG] [Thread-5592] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:57:03.528 [DEBUG] [Thread-5594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:57:18.573 [DEBUG] [Thread-5595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:57:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:57:32.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:57:32.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:57:33.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 57, 5), 27.33, 15.77, 0.0, 14.58, 22.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:57:33.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:57:05
2025-11-25T20:57:33.610 [DEBUG] [Thread-5596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:57:33.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:57:33.813 [DEBUG] [Thread-5597] [transport.py] [_log()] starting thread (client mode): 0x70d741f0
2025-11-25T20:57:33.813 [DEBUG] [Thread-5597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:57:33.833 [DEBUG] [Thread-5597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:57:33.833 [INFO] [Thread-5597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:57:33.836 [DEBUG] [Thread-5597] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:57:33.836 [DEBUG] [Thread-5597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:57:33.836 [DEBUG] [Thread-5597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:57:33.836 [DEBUG] [Thread-5597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:57:33.836 [DEBUG] [Thread-5597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:57:33.836 [DEBUG] [Thread-5597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:57:33.836 [DEBUG] [Thread-5597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] client lang: <none>
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] server lang: <none>
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] kex follows: False
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] Compression: none
2025-11-25T20:57:33.837 [DEBUG] [Thread-5597] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:57:33.846 [DEBUG] [Thread-5597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:57:33.846 [DEBUG] [Thread-5597] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:57:33.846 [DEBUG] [Thread-5597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:57:33.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:57:33.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:57:33.847 [DEBUG] [Thread-5597] [transport.py] [_log()] userauth is OK
2025-11-25T20:57:33.847 [DEBUG] [Thread-5597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:57:33.847 [DEBUG] [Thread-5597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:57:33.847 [DEBUG] [Thread-5597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:57:33.847 [DEBUG] [Thread-5597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:57:33.859 [INFO] [Thread-5597] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:57:33.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:57:34.448 [DEBUG] [Thread-5597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:57:34.448 [DEBUG] [Thread-5597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:57:34.449 [DEBUG] [Thread-5597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:57:34.489 [DEBUG] [Thread-5597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:57:34.489 [DEBUG] [Thread-5597] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:57:34.492 [DEBUG] [Thread-5597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:57:34.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:57:34.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:57:34.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:57:34.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:57:34.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:57:34.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:57:34.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:57:34.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:57:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:57:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.789682 -999.00  +22.10   7.65     21   -1.10 1 1 1 1 1     0    0 22.72 -6.52 ZNESW 6.1 7.7 205.2 13.0 22.0 -26.0 22.0 -25.5 21.7 -24.2 21.9 -25.1
2025-11-25T20:57:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:57:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:57:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.789682
2025-11-25T20:57:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:57:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:57:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:57:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:57:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:57:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:57:05', tmtdew=27.33, humidity=15.77, cloud=0.0, wind=14.58, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:57:05', seeing=1.15, atlas_timestamp='2025-11-25T18:57:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, 0.030250000000000554, 0.032249999999999446, -0.005500000000001393, 0.016500000000000625, 0.043750000000001066, 0.0235000000000003, 0.006250000000001421, 0.009499999999999176, 0.04300000000000104, 0.03125, 0.012000000000000455, 0.0519999999999996, 0.09124999999999872, -0.03200000000000003, -0.02000000000000135, 0.04224999999999923, 0.03849999999999909, 0.06099999999999994, 0.0012499999999988631, 0.025999999999998025, 0.044749999999998735, -0.02024999999999899, -0.021250000000000213, 0.03149999999999942, 0.04849999999999888, 0.08425000000000082, 0.06600000000000072, 0.13000000000000078, -0.08199999999999896, -0.013999999999999346, 0.018000000000000682, 0.035749999999998394], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T20:57:34.520 [DEBUG] [Thread-5597] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:57:34.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:57:34.616 [DEBUG] [Thread-5600] [transport.py] [_log()] starting thread (client mode): 0x70d3bc70
2025-11-25T20:57:34.616 [DEBUG] [Thread-5600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:57:34.632 [DEBUG] [Thread-5600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:57:34.632 [INFO] [Thread-5600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] client lang: <none>
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] server lang: <none>
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] kex follows: False
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:57:34.640 [DEBUG] [Thread-5600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:57:34.641 [DEBUG] [Thread-5600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:57:34.641 [DEBUG] [Thread-5600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:57:34.641 [DEBUG] [Thread-5600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:57:34.641 [DEBUG] [Thread-5600] [transport.py] [_log()] Compression: none
2025-11-25T20:57:34.641 [DEBUG] [Thread-5600] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:57:34.698 [DEBUG] [Thread-5600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:57:34.698 [DEBUG] [Thread-5600] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:57:34.699 [DEBUG] [Thread-5600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:57:34.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:57:34.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:57:34.753 [DEBUG] [Thread-5600] [transport.py] [_log()] userauth is OK
2025-11-25T20:57:34.754 [DEBUG] [Thread-5600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:57:34.754 [DEBUG] [Thread-5600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:57:34.754 [DEBUG] [Thread-5600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:57:34.754 [DEBUG] [Thread-5600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:57:34.773 [INFO] [Thread-5600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:57:34.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:57:34.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:57:35.701 [DEBUG] [Thread-5600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:57:35.701 [DEBUG] [Thread-5600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:57:35.750 [DEBUG] [Thread-5600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:57:35.750 [DEBUG] [Thread-5600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:57:35.760 [DEBUG] [Thread-5600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:57:35.764 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:57:35.765 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:57:35.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:57:35.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:57:35.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:57:35.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:57:35.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:57:35.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:57:35.796 [DEBUG] [Thread-5600] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:57:48.640 [DEBUG] [Thread-5602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:57:58.228 [DEBUG] [Thread-5603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:58:03.705 [DEBUG] [Thread-5604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:58:05.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:58:05.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:58:05.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:58:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 57, 37), 27.32, 15.77, 0.0, 14.08, 22.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:58:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:57:37
2025-11-25T20:58:06.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:58:06.751 [DEBUG] [Thread-5605] [transport.py] [_log()] starting thread (client mode): 0x70d3a200
2025-11-25T20:58:06.751 [DEBUG] [Thread-5605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:58:06.771 [DEBUG] [Thread-5605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:58:06.771 [INFO] [Thread-5605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:58:06.774 [DEBUG] [Thread-5605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:58:06.774 [DEBUG] [Thread-5605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:58:06.774 [DEBUG] [Thread-5605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:58:06.774 [DEBUG] [Thread-5605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:58:06.774 [DEBUG] [Thread-5605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:58:06.774 [DEBUG] [Thread-5605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:58:06.774 [DEBUG] [Thread-5605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:58:06.774 [DEBUG] [Thread-5605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] client lang: <none>
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] server lang: <none>
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] kex follows: False
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] Compression: none
2025-11-25T20:58:06.775 [DEBUG] [Thread-5605] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:58:06.794 [DEBUG] [Thread-5605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:58:06.795 [DEBUG] [Thread-5605] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:58:06.795 [DEBUG] [Thread-5605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:58:06.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:58:06.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:58:06.837 [DEBUG] [Thread-5605] [transport.py] [_log()] userauth is OK
2025-11-25T20:58:06.837 [DEBUG] [Thread-5605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:58:06.837 [DEBUG] [Thread-5605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:58:06.838 [DEBUG] [Thread-5605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:58:06.838 [DEBUG] [Thread-5605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:58:06.858 [INFO] [Thread-5605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:58:06.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:58:07.433 [DEBUG] [Thread-5605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:58:07.434 [DEBUG] [Thread-5605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:58:07.434 [DEBUG] [Thread-5605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:58:07.475 [DEBUG] [Thread-5605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:58:07.475 [DEBUG] [Thread-5605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:58:07.477 [DEBUG] [Thread-5605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:58:07.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:58:07.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:58:07.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:58:07.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:58:07.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:58:07.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:58:07.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:58:07.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:58:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:58:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.789682 -999.00  +22.10   7.65     21   -1.10 1 1 1 1 1     0    0 22.72 -6.52 ZNESW 6.1 7.7 205.2 13.0 22.0 -26.0 22.0 -25.5 21.7 -24.2 21.9 -25.1
2025-11-25T20:58:07.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:58:07.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:58:07.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.789682
2025-11-25T20:58:07.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:58:07.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:58:07.509 [DEBUG] [Thread-5605] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:58:07.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:58:07.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:58:07.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:58:07.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:57:37', tmtdew=27.32, humidity=15.77, cloud=0.0, wind=14.08, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:57:37', seeing=1.21, atlas_timestamp='2025-11-25T18:57:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, 0.030250000000000554, 0.032249999999999446, -0.005500000000001393, 0.016500000000000625, 0.043750000000001066, 0.0235000000000003, 0.006250000000001421, 0.009499999999999176, 0.04300000000000104, 0.03125, 0.012000000000000455, 0.0519999999999996, 0.09124999999999872, -0.03200000000000003, -0.02000000000000135, 0.04224999999999923, 0.03849999999999909, 0.06099999999999994, 0.0012499999999988631, 0.025999999999998025, 0.044749999999998735, -0.02024999999999899, -0.021250000000000213, 0.03149999999999942, 0.04849999999999888, 0.08425000000000082, 0.06600000000000072, 0.13000000000000078, -0.08199999999999896, -0.013999999999999346, 0.018000000000000682, 0.035749999999998394], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T20:58:07.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:58:07.605 [DEBUG] [Thread-5608] [transport.py] [_log()] starting thread (client mode): 0x70d57c10
2025-11-25T20:58:07.605 [DEBUG] [Thread-5608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:58:07.621 [DEBUG] [Thread-5608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:58:07.621 [INFO] [Thread-5608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:58:07.628 [DEBUG] [Thread-5608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] client lang: <none>
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] server lang: <none>
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] kex follows: False
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:58:07.629 [DEBUG] [Thread-5608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:58:07.630 [DEBUG] [Thread-5608] [transport.py] [_log()] Compression: none
2025-11-25T20:58:07.630 [DEBUG] [Thread-5608] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:58:07.694 [DEBUG] [Thread-5608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:58:07.695 [DEBUG] [Thread-5608] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:58:07.695 [DEBUG] [Thread-5608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:58:07.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:58:07.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:58:07.750 [DEBUG] [Thread-5608] [transport.py] [_log()] userauth is OK
2025-11-25T20:58:07.750 [DEBUG] [Thread-5608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:58:07.750 [DEBUG] [Thread-5608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:58:07.750 [DEBUG] [Thread-5608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:58:07.751 [DEBUG] [Thread-5608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:58:07.769 [INFO] [Thread-5608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:58:07.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:58:07.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:58:08.598 [DEBUG] [Thread-5608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:58:08.598 [DEBUG] [Thread-5608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:58:08.647 [DEBUG] [Thread-5608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:58:08.647 [DEBUG] [Thread-5608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:58:08.656 [DEBUG] [Thread-5608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:58:08.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:58:08.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:58:08.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:58:08.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:58:08.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:58:08.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:58:08.693 [DEBUG] [Thread-5608] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:58:18.739 [DEBUG] [Thread-5610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:58:33.779 [DEBUG] [Thread-5611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:58:35.965 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:58:35.966 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:58:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:58:38.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:58:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:58:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 58, 9), 27.32, 15.77, 0.0, 12.95, 22.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:58:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:58:09
2025-11-25T20:58:39.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:58:39.642 [DEBUG] [Thread-5612] [transport.py] [_log()] starting thread (client mode): 0x70d574c0
2025-11-25T20:58:39.642 [DEBUG] [Thread-5612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:58:39.663 [DEBUG] [Thread-5612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:58:39.663 [INFO] [Thread-5612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:58:39.666 [DEBUG] [Thread-5612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] client lang: <none>
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] server lang: <none>
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] kex follows: False
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:58:39.667 [DEBUG] [Thread-5612] [transport.py] [_log()] Compression: none
2025-11-25T20:58:39.668 [DEBUG] [Thread-5612] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:58:39.686 [DEBUG] [Thread-5612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:58:39.687 [DEBUG] [Thread-5612] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:58:39.688 [DEBUG] [Thread-5612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:58:39.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:58:39.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:58:39.690 [DEBUG] [Thread-5612] [transport.py] [_log()] userauth is OK
2025-11-25T20:58:39.690 [DEBUG] [Thread-5612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:58:39.690 [DEBUG] [Thread-5612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:58:39.690 [DEBUG] [Thread-5612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:58:39.690 [DEBUG] [Thread-5612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:58:39.705 [INFO] [Thread-5612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:58:39.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:58:40.330 [DEBUG] [Thread-5612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:58:40.330 [DEBUG] [Thread-5612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:58:40.330 [DEBUG] [Thread-5612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:58:40.371 [DEBUG] [Thread-5612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:58:40.371 [DEBUG] [Thread-5612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:58:40.374 [DEBUG] [Thread-5612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:58:40.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:58:40.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:58:40.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:58:40.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:58:40.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:58:40.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:58:40.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:58:40.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:58:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:58:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.790030 -999.00  +22.00   3.69     21   -1.10 1 1 1 1 1     0    0 23.05 -5.69 ZNESW 5.1 3.7 209.6 12.1 22.0 -26.1 22.0 -25.5 21.7 -24.2 21.9 -25.3
2025-11-25T20:58:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:58:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:58:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.790030
2025-11-25T20:58:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:58:40.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:58:40.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:58:40.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:58:40.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:58:40.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:58:09', tmtdew=27.32, humidity=15.77, cloud=0.0, wind=12.95, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:58:09', seeing=1.22, atlas_timestamp='2025-11-25T18:57:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, 0.030250000000000554, 0.032249999999999446, -0.005500000000001393, 0.016500000000000625, 0.043750000000001066, 0.0235000000000003, 0.006250000000001421, 0.009499999999999176, 0.04300000000000104, 0.03125, 0.012000000000000455, 0.0519999999999996, 0.09124999999999872, -0.03200000000000003, -0.02000000000000135, 0.04224999999999923, 0.03849999999999909, 0.06099999999999994, 0.0012499999999988631, 0.025999999999998025, 0.044749999999998735, -0.02024999999999899, -0.021250000000000213, 0.03149999999999942, 0.04849999999999888, 0.08425000000000082, 0.06600000000000072, 0.13000000000000078, -0.08199999999999896, -0.013999999999999346, 0.018000000000000682, 0.035749999999998394], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T20:58:40.399 [DEBUG] [Thread-5612] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:58:40.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:58:40.495 [DEBUG] [Thread-5615] [transport.py] [_log()] starting thread (client mode): 0x70d39480
2025-11-25T20:58:40.495 [DEBUG] [Thread-5615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:58:40.512 [DEBUG] [Thread-5615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:58:40.512 [INFO] [Thread-5615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:58:40.519 [DEBUG] [Thread-5615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] client lang: <none>
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] server lang: <none>
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] kex follows: False
2025-11-25T20:58:40.520 [DEBUG] [Thread-5615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:58:40.521 [DEBUG] [Thread-5615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:58:40.521 [DEBUG] [Thread-5615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:58:40.521 [DEBUG] [Thread-5615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:58:40.521 [DEBUG] [Thread-5615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:58:40.521 [DEBUG] [Thread-5615] [transport.py] [_log()] Compression: none
2025-11-25T20:58:40.521 [DEBUG] [Thread-5615] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:58:40.577 [DEBUG] [Thread-5615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:58:40.578 [DEBUG] [Thread-5615] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:58:40.578 [DEBUG] [Thread-5615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:58:40.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:58:40.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:58:40.634 [DEBUG] [Thread-5615] [transport.py] [_log()] userauth is OK
2025-11-25T20:58:40.634 [DEBUG] [Thread-5615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:58:40.634 [DEBUG] [Thread-5615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:58:40.634 [DEBUG] [Thread-5615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:58:40.635 [DEBUG] [Thread-5615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:58:40.653 [INFO] [Thread-5615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:58:40.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:58:40.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:58:41.508 [DEBUG] [Thread-5615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:58:41.508 [DEBUG] [Thread-5615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:58:41.556 [DEBUG] [Thread-5615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:58:41.556 [DEBUG] [Thread-5615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:58:41.564 [DEBUG] [Thread-5615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:58:41.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:58:41.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:58:41.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:58:41.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:58:41.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:58:41.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:58:41.596 [DEBUG] [Thread-5615] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:58:48.814 [DEBUG] [Thread-5617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:58:58.281 [DEBUG] [Thread-5618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:59:03.862 [DEBUG] [Thread-5619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:59:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:59:11.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:59:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:59:12.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 58, 41), 27.34, 15.83, 0.0, 15.32, 22.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:59:12.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:58:41
2025-11-25T20:59:12.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:59:12.569 [DEBUG] [Thread-5620] [transport.py] [_log()] starting thread (client mode): 0x70d00400
2025-11-25T20:59:12.569 [DEBUG] [Thread-5620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:59:12.589 [DEBUG] [Thread-5620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:59:12.589 [INFO] [Thread-5620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:59:12.590 [DEBUG] [Thread-5620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:59:12.590 [DEBUG] [Thread-5620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:59:12.590 [DEBUG] [Thread-5620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:59:12.590 [DEBUG] [Thread-5620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:59:12.590 [DEBUG] [Thread-5620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:59:12.590 [DEBUG] [Thread-5620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:59:12.590 [DEBUG] [Thread-5620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:59:12.590 [DEBUG] [Thread-5620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:59:12.590 [DEBUG] [Thread-5620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] client lang: <none>
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] server lang: <none>
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] kex follows: False
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] Compression: none
2025-11-25T20:59:12.591 [DEBUG] [Thread-5620] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:59:12.602 [DEBUG] [Thread-5620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:59:12.603 [DEBUG] [Thread-5620] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:59:12.603 [DEBUG] [Thread-5620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:59:12.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:59:12.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:59:12.606 [DEBUG] [Thread-5620] [transport.py] [_log()] userauth is OK
2025-11-25T20:59:12.606 [DEBUG] [Thread-5620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:59:12.606 [DEBUG] [Thread-5620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:59:12.606 [DEBUG] [Thread-5620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:59:12.607 [DEBUG] [Thread-5620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:59:12.632 [INFO] [Thread-5620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:59:12.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:59:13.228 [DEBUG] [Thread-5620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:59:13.229 [DEBUG] [Thread-5620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:59:13.230 [DEBUG] [Thread-5620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:59:13.270 [DEBUG] [Thread-5620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:59:13.270 [DEBUG] [Thread-5620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:59:13.273 [DEBUG] [Thread-5620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:59:13.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:59:13.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:59:13.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:59:13.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:59:13.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:59:13.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:59:13.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:59:13.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:59:13.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:59:13.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.790724 -999.00  +22.00   6.21     20   -1.30 1 1 1 1 1     0    0 23.06 -4.28 ZNESW 11.1 6.2 230.6 15.9 22.0 -25.8 22.0 -25.2 21.6 -24.0 21.9 -24.8
2025-11-25T20:59:13.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:59:13.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:59:13.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.790724
2025-11-25T20:59:13.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:59:13.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:59:13.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:59:13.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:59:13.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:59:13.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:58:41', tmtdew=27.34, humidity=15.83, cloud=0.0, wind=15.32, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:58:41', seeing=0.94, atlas_timestamp='2025-11-25T18:58:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, 0.030250000000000554, 0.032249999999999446, -0.005500000000001393, 0.016500000000000625, 0.043750000000001066, 0.0235000000000003, 0.006250000000001421, 0.009499999999999176, 0.04300000000000104, 0.03125, 0.012000000000000455, 0.0519999999999996, 0.09124999999999872, -0.03200000000000003, -0.02000000000000135, 0.04224999999999923, 0.03849999999999909, 0.06099999999999994, 0.0012499999999988631, 0.025999999999998025, 0.044749999999998735, -0.02024999999999899, -0.021250000000000213, 0.03149999999999942, 0.04849999999999888, 0.08425000000000082, 0.06600000000000072, 0.13000000000000078, -0.08199999999999896, -0.013999999999999346, 0.018000000000000682, 0.035749999999998394], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T20:59:13.300 [DEBUG] [Thread-5620] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:59:13.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:59:13.395 [DEBUG] [Thread-5623] [transport.py] [_log()] starting thread (client mode): 0x70d765c0
2025-11-25T20:59:13.395 [DEBUG] [Thread-5623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:59:13.414 [DEBUG] [Thread-5623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:59:13.414 [INFO] [Thread-5623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:59:13.421 [DEBUG] [Thread-5623] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:59:13.421 [DEBUG] [Thread-5623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:59:13.421 [DEBUG] [Thread-5623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] client lang: <none>
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] server lang: <none>
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] kex follows: False
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] Compression: none
2025-11-25T20:59:13.422 [DEBUG] [Thread-5623] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:59:13.480 [DEBUG] [Thread-5623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:59:13.481 [DEBUG] [Thread-5623] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:59:13.481 [DEBUG] [Thread-5623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:59:13.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:59:13.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:59:13.537 [DEBUG] [Thread-5623] [transport.py] [_log()] userauth is OK
2025-11-25T20:59:13.537 [DEBUG] [Thread-5623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:59:13.537 [DEBUG] [Thread-5623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:59:13.537 [DEBUG] [Thread-5623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:59:13.537 [DEBUG] [Thread-5623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:59:13.551 [INFO] [Thread-5623] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:59:13.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:59:13.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:59:14.428 [DEBUG] [Thread-5623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:59:14.428 [DEBUG] [Thread-5623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:59:14.476 [DEBUG] [Thread-5623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:59:14.476 [DEBUG] [Thread-5623] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:59:14.484 [DEBUG] [Thread-5623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:59:14.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:59:14.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:59:14.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:59:14.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:59:14.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:59:14.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:59:14.517 [DEBUG] [Thread-5623] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:59:18.899 [DEBUG] [Thread-5625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:59:33.949 [DEBUG] [Thread-5626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:59:36.164 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:59:36.165 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:59:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T20:59:44.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T20:59:44.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T20:59:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 59, 13), 27.33, 15.85, 0.0, 15.56, 22.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T20:59:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:59:13
2025-11-25T20:59:45.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T20:59:45.491 [DEBUG] [Thread-5627] [transport.py] [_log()] starting thread (client mode): 0x70d74d30
2025-11-25T20:59:45.491 [DEBUG] [Thread-5627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:59:45.511 [DEBUG] [Thread-5627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T20:59:45.511 [INFO] [Thread-5627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] client lang: <none>
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] server lang: <none>
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] kex follows: False
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] Compression: none
2025-11-25T20:59:45.515 [DEBUG] [Thread-5627] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:59:45.530 [DEBUG] [Thread-5627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:59:45.531 [DEBUG] [Thread-5627] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:59:45.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T20:59:45.531 [DEBUG] [Thread-5627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T20:59:45.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:59:45.532 [DEBUG] [Thread-5627] [transport.py] [_log()] userauth is OK
2025-11-25T20:59:45.532 [DEBUG] [Thread-5627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:59:45.532 [DEBUG] [Thread-5627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:59:45.532 [DEBUG] [Thread-5627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T20:59:45.532 [DEBUG] [Thread-5627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:59:45.546 [INFO] [Thread-5627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:59:45.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:59:46.159 [DEBUG] [Thread-5627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:59:46.159 [DEBUG] [Thread-5627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:59:46.160 [DEBUG] [Thread-5627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T20:59:46.200 [DEBUG] [Thread-5627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:59:46.201 [DEBUG] [Thread-5627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:59:46.203 [DEBUG] [Thread-5627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:59:46.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:59:46.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T20:59:46.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T20:59:46.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T20:59:46.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:59:46.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T20:59:46.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:59:46.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:59:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T20:59:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.791071 -999.00  +22.10   9.94     21   -1.20 1 1 1 1 1     0    0 23.01 -3.31 ZNESW 7.7 9.9 185.6 19.1 21.9 -25.7 22.0 -25.2 21.7 -24.0 21.9 -25.0
2025-11-25T20:59:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T20:59:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T20:59:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.791071
2025-11-25T20:59:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T20:59:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T20:59:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T20:59:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T20:59:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T20:59:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:59:13', tmtdew=27.33, humidity=15.85, cloud=0.0, wind=15.56, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T20:59:13', seeing=0.94, atlas_timestamp='2025-11-25T18:59:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, 0.030250000000000554, 0.032249999999999446, -0.005500000000001393, 0.016500000000000625, 0.043750000000001066, 0.0235000000000003, 0.006250000000001421, 0.009499999999999176, 0.04300000000000104, 0.03125, 0.012000000000000455, 0.0519999999999996, 0.09124999999999872, -0.03200000000000003, -0.02000000000000135, 0.04224999999999923, 0.03849999999999909, 0.06099999999999994, 0.0012499999999988631, 0.025999999999998025, 0.044749999999998735, -0.02024999999999899, -0.021250000000000213, 0.03149999999999942, 0.04849999999999888, 0.08425000000000082, 0.06600000000000072, 0.13000000000000078, -0.08199999999999896, -0.013999999999999346, 0.018000000000000682, 0.035749999999998394], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T20:59:46.222 [DEBUG] [Thread-5627] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:59:46.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T20:59:46.309 [DEBUG] [Thread-5630] [transport.py] [_log()] starting thread (client mode): 0x70d43f70
2025-11-25T20:59:46.309 [DEBUG] [Thread-5630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T20:59:46.323 [DEBUG] [Thread-5630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T20:59:46.323 [INFO] [Thread-5630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] client lang: <none>
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] server lang: <none>
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] kex follows: False
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] Compression: none
2025-11-25T20:59:46.331 [DEBUG] [Thread-5630] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T20:59:46.388 [DEBUG] [Thread-5630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T20:59:46.388 [DEBUG] [Thread-5630] [transport.py] [_log()] Switch to new keys ...
2025-11-25T20:59:46.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T20:59:46.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T20:59:46.389 [DEBUG] [Thread-5630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T20:59:46.445 [DEBUG] [Thread-5630] [transport.py] [_log()] userauth is OK
2025-11-25T20:59:46.445 [DEBUG] [Thread-5630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T20:59:46.445 [DEBUG] [Thread-5630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T20:59:46.445 [DEBUG] [Thread-5630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T20:59:46.445 [DEBUG] [Thread-5630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T20:59:46.460 [INFO] [Thread-5630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T20:59:46.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T20:59:46.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T20:59:47.418 [DEBUG] [Thread-5630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T20:59:47.418 [DEBUG] [Thread-5630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T20:59:47.467 [DEBUG] [Thread-5630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T20:59:47.467 [DEBUG] [Thread-5630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T20:59:47.476 [DEBUG] [Thread-5630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T20:59:47.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T20:59:47.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T20:59:47.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T20:59:47.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T20:59:47.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T20:59:47.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T20:59:47.512 [DEBUG] [Thread-5630] [transport.py] [_log()] EOF in transport thread
2025-11-25T20:59:48.979 [DEBUG] [Thread-5632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T20:59:58.348 [DEBUG] [Thread-5633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:00:04.025 [DEBUG] [Thread-5634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:00:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:00:17.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:00:17.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:00:18.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 20, 59, 45), 27.3, 15.37, 0.0, 15.81, 22.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:00:18.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 20:59:45
2025-11-25T21:00:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:00:18.535 [DEBUG] [Thread-5635] [transport.py] [_log()] starting thread (client mode): 0x70d420e0
2025-11-25T21:00:18.536 [DEBUG] [Thread-5635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:00:18.557 [DEBUG] [Thread-5635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:00:18.557 [INFO] [Thread-5635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] client lang: <none>
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] server lang: <none>
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] kex follows: False
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:00:18.560 [DEBUG] [Thread-5635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:00:18.561 [DEBUG] [Thread-5635] [transport.py] [_log()] Compression: none
2025-11-25T21:00:18.561 [DEBUG] [Thread-5635] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:00:18.575 [DEBUG] [Thread-5635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:00:18.575 [DEBUG] [Thread-5635] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:00:18.575 [DEBUG] [Thread-5635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:00:18.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:00:18.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:00:18.576 [DEBUG] [Thread-5635] [transport.py] [_log()] userauth is OK
2025-11-25T21:00:18.576 [DEBUG] [Thread-5635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:00:18.576 [DEBUG] [Thread-5635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:00:18.576 [DEBUG] [Thread-5635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:00:18.576 [DEBUG] [Thread-5635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:00:18.591 [INFO] [Thread-5635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:00:18.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:00:19.055 [DEBUG] [Thread-5637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:00:19.951 [DEBUG] [Thread-5635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:00:19.951 [DEBUG] [Thread-5635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:00:19.951 [DEBUG] [Thread-5635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:00:19.992 [DEBUG] [Thread-5635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:00:19.992 [DEBUG] [Thread-5635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:00:19.995 [DEBUG] [Thread-5635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:00:20.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:00:20.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:00:20.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:00:20.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:00:20.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:00:20.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:00:20.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:00:20.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:00:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:00:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.791418 -999.00  +22.10  12.99     20   -1.20 1 1 1 1 1     0    0 23.04 -2.45 ZNESW 3.9 13.0 211.4 18.1 22.0 -25.9 22.0 -25.4 21.7 -24.1 21.9 -25.1
2025-11-25T21:00:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:00:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:00:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.791418
2025-11-25T21:00:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:00:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:00:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:00:20.022 [DEBUG] [Thread-5635] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:00:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:00:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:00:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T20:59:45', tmtdew=27.3, humidity=15.37, cloud=0.0, wind=15.81, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:00:17', seeing=0.94, atlas_timestamp='2025-11-25T18:59:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, 0.030250000000000554, 0.032249999999999446, -0.005500000000001393, 0.016500000000000625, 0.043750000000001066, 0.0235000000000003, 0.006250000000001421, 0.009499999999999176, 0.04300000000000104, 0.03125, 0.012000000000000455, 0.0519999999999996, 0.09124999999999872, -0.03200000000000003, -0.02000000000000135, 0.04224999999999923, 0.03849999999999909, 0.06099999999999994, 0.0012499999999988631, 0.025999999999998025, 0.044749999999998735, -0.02024999999999899, -0.021250000000000213, 0.03149999999999942, 0.04849999999999888, 0.08425000000000082, 0.06600000000000072, 0.13000000000000078, -0.08199999999999896, -0.013999999999999346, 0.018000000000000682, 0.035749999999998394], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T21:00:20.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:00:20.117 [DEBUG] [Thread-5639] [transport.py] [_log()] starting thread (client mode): 0x70d75030
2025-11-25T21:00:20.117 [DEBUG] [Thread-5639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:00:20.132 [DEBUG] [Thread-5639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:00:20.133 [INFO] [Thread-5639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:00:20.140 [DEBUG] [Thread-5639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:00:20.140 [DEBUG] [Thread-5639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:00:20.140 [DEBUG] [Thread-5639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:00:20.140 [DEBUG] [Thread-5639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:00:20.140 [DEBUG] [Thread-5639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:00:20.140 [DEBUG] [Thread-5639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] client lang: <none>
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] server lang: <none>
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] kex follows: False
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] Compression: none
2025-11-25T21:00:20.141 [DEBUG] [Thread-5639] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:00:20.197 [DEBUG] [Thread-5639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:00:20.198 [DEBUG] [Thread-5639] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:00:20.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:00:20.199 [DEBUG] [Thread-5639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:00:20.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:00:20.254 [DEBUG] [Thread-5639] [transport.py] [_log()] userauth is OK
2025-11-25T21:00:20.254 [DEBUG] [Thread-5639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:00:20.254 [DEBUG] [Thread-5639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:00:20.254 [DEBUG] [Thread-5639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:00:20.254 [DEBUG] [Thread-5639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:00:20.273 [INFO] [Thread-5639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:00:20.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:00:20.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:00:21.149 [DEBUG] [Thread-5639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:00:21.150 [DEBUG] [Thread-5639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:00:21.198 [DEBUG] [Thread-5639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:00:21.198 [DEBUG] [Thread-5639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:00:21.207 [DEBUG] [Thread-5639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:00:21.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:00: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')
2025-11-25T21:00:21.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:00:21.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:00:21.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:00:21.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:00:21.244 [DEBUG] [Thread-5639] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:00:34.090 [DEBUG] [Thread-5641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:00:36.364 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:00:36.365 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:00:49.142 [DEBUG] [Thread-5642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:00:51.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:00:51.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:00: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
2025-11-25T21:00:51.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 0, 17), 27.27, 15.4, 0.0, 16.62, 22.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:00:51.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:00:17
2025-11-25T21:00:52.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:00:52.250 [DEBUG] [Thread-5643] [transport.py] [_log()] starting thread (client mode): 0x70d74b20
2025-11-25T21:00:52.251 [DEBUG] [Thread-5643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:00:52.269 [DEBUG] [Thread-5643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:00:52.270 [INFO] [Thread-5643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:00:52.272 [DEBUG] [Thread-5643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:00:52.272 [DEBUG] [Thread-5643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:00:52.272 [DEBUG] [Thread-5643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:00:52.272 [DEBUG] [Thread-5643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:00:52.272 [DEBUG] [Thread-5643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:00:52.272 [DEBUG] [Thread-5643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] client lang: <none>
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] server lang: <none>
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] kex follows: False
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] Compression: none
2025-11-25T21:00:52.273 [DEBUG] [Thread-5643] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:00:52.288 [DEBUG] [Thread-5643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:00:52.288 [DEBUG] [Thread-5643] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:00:52.288 [DEBUG] [Thread-5643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:00:52.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:00:52.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:00:52.289 [DEBUG] [Thread-5643] [transport.py] [_log()] userauth is OK
2025-11-25T21:00:52.289 [DEBUG] [Thread-5643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:00:52.289 [DEBUG] [Thread-5643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:00:52.289 [DEBUG] [Thread-5643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:00:52.289 [DEBUG] [Thread-5643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:00:52.298 [INFO] [Thread-5643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:00:52.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:00:52.929 [DEBUG] [Thread-5643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:00:52.930 [DEBUG] [Thread-5643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:00:52.930 [DEBUG] [Thread-5643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:00:52.971 [DEBUG] [Thread-5643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:00:52.971 [DEBUG] [Thread-5643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:00:52.974 [DEBUG] [Thread-5643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:00:52.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:00:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:00:52.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:00:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:00:52.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:00:53.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:00:53.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:00:53.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:00:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:00:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.791765 -999.00  +22.10   8.65     20   -1.20 1 1 1 1 1     0    0 23.31 -2.09 ZNESW 6.1 8.7 202.2 10.6 21.9 -25.9 21.9 -25.4 21.7 -24.3 21.9 -25.1
2025-11-25T21:00:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:00:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:00:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.791765
2025-11-25T21:00:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:00:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:00:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:00:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:00:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:00:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:00:17', tmtdew=27.27, humidity=15.4, cloud=0.0, wind=16.62, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:00:49', seeing=0.98, atlas_timestamp='2025-11-25T19:00:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T21:00:53.004 [DEBUG] [Thread-5643] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:00:53.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:00:53.111 [DEBUG] [Thread-5646] [transport.py] [_log()] starting thread (client mode): 0x70d747f0
2025-11-25T21:00:53.111 [DEBUG] [Thread-5646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:00:53.125 [DEBUG] [Thread-5646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:00:53.126 [INFO] [Thread-5646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:00:53.133 [DEBUG] [Thread-5646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] client lang: <none>
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] server lang: <none>
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] kex follows: False
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] Compression: none
2025-11-25T21:00:53.134 [DEBUG] [Thread-5646] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:00:53.194 [DEBUG] [Thread-5646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:00:53.194 [DEBUG] [Thread-5646] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:00:53.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:00:53.195 [DEBUG] [Thread-5646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:00:53.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:00:53.249 [DEBUG] [Thread-5646] [transport.py] [_log()] userauth is OK
2025-11-25T21:00:53.250 [DEBUG] [Thread-5646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:00:53.250 [DEBUG] [Thread-5646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:00:53.250 [DEBUG] [Thread-5646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:00:53.250 [DEBUG] [Thread-5646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:00:53.269 [INFO] [Thread-5646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:00:53.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:00:53.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:00:54.061 [DEBUG] [Thread-5646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:00:54.062 [DEBUG] [Thread-5646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:00:54.109 [DEBUG] [Thread-5646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:00:54.110 [DEBUG] [Thread-5646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:00:54.118 [DEBUG] [Thread-5646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:00:54.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:00:54.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:00:54.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:00:54.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:00:54.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:00:54.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:00:54.155 [DEBUG] [Thread-5646] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:00:58.407 [DEBUG] [Thread-5648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:04.177 [DEBUG] [Thread-5649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:11.101 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:19.238 [DEBUG] [Thread-5650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:22.508 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:24.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:01:24.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:01:24.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:01:24.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 1, 21), 27.39, 15.33, 0.0, 15.1, 22.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:01:24.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:01:21
2025-11-25T21:01:25.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:01:25.162 [DEBUG] [Thread-5651] [transport.py] [_log()] starting thread (client mode): 0x70d56d40
2025-11-25T21:01:25.162 [DEBUG] [Thread-5651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:01:25.182 [DEBUG] [Thread-5651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:01:25.182 [INFO] [Thread-5651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] client lang: <none>
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] server lang: <none>
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] kex follows: False
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:01:25.185 [DEBUG] [Thread-5651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:01:25.186 [DEBUG] [Thread-5651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:01:25.186 [DEBUG] [Thread-5651] [transport.py] [_log()] Compression: none
2025-11-25T21:01:25.186 [DEBUG] [Thread-5651] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:01:25.200 [DEBUG] [Thread-5651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:01:25.200 [DEBUG] [Thread-5651] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:01:25.200 [DEBUG] [Thread-5651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:01:25.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:01:25.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:01:25.201 [DEBUG] [Thread-5651] [transport.py] [_log()] userauth is OK
2025-11-25T21:01:25.201 [DEBUG] [Thread-5651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:01:25.201 [DEBUG] [Thread-5651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:01:25.201 [DEBUG] [Thread-5651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:01:25.201 [DEBUG] [Thread-5651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:01:25.228 [INFO] [Thread-5651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:01:25.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:01:26.001 [DEBUG] [Thread-5651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:01:26.001 [DEBUG] [Thread-5651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:01:26.002 [DEBUG] [Thread-5651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:01:26.042 [DEBUG] [Thread-5651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:01:26.042 [DEBUG] [Thread-5651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:01:26.044 [DEBUG] [Thread-5651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:01:26.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:01:26.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:01:26.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:01:26.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:01:26.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:01:26.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:01:26.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.792113 -999.00  +22.00   7.78     21   -1.20 1 1 1 1 1     0    0 22.54 -1.91 ZNESW 3.7 7.8 235.5 16.1 22.0 -26.0 21.9 -25.3 21.7 -24.2 21.9 -25.1
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.792113
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:01:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:01:21', tmtdew=27.39, humidity=15.33, cloud=0.0, wind=15.1, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:01:21', seeing=0.98, atlas_timestamp='2025-11-25T19:00:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T21:01:26.056 [DEBUG] [Thread-5651] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:01:26.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:01:26.147 [DEBUG] [Thread-5654] [transport.py] [_log()] starting thread (client mode): 0x70d410f0
2025-11-25T21:01:26.147 [DEBUG] [Thread-5654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:01:26.162 [DEBUG] [Thread-5654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:01:26.162 [INFO] [Thread-5654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] client lang: <none>
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] server lang: <none>
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] kex follows: False
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:01:26.169 [DEBUG] [Thread-5654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:01:26.170 [DEBUG] [Thread-5654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:01:26.170 [DEBUG] [Thread-5654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:01:26.170 [DEBUG] [Thread-5654] [transport.py] [_log()] Compression: none
2025-11-25T21:01:26.170 [DEBUG] [Thread-5654] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:01:26.228 [DEBUG] [Thread-5654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:01:26.228 [DEBUG] [Thread-5654] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:01:26.228 [DEBUG] [Thread-5654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:01:26.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:01:26.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:01:26.286 [DEBUG] [Thread-5654] [transport.py] [_log()] userauth is OK
2025-11-25T21:01:26.286 [DEBUG] [Thread-5654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:01:26.286 [DEBUG] [Thread-5654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:01:26.286 [DEBUG] [Thread-5654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:01:26.286 [DEBUG] [Thread-5654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:01:26.300 [INFO] [Thread-5654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:01:26.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:01:26.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:01:27.120 [DEBUG] [Thread-5654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:01:27.120 [DEBUG] [Thread-5654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:01:27.168 [DEBUG] [Thread-5654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:01:27.168 [DEBUG] [Thread-5654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:01:27.176 [DEBUG] [Thread-5654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:01:27.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:01:27.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:01:27.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:01:27.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:01:27.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:01:27.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:01:27.208 [DEBUG] [Thread-5654] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:01:34.270 [DEBUG] [Thread-5656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:36.585 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:36.586 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:46.948 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:49.326 [DEBUG] [Thread-5657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:57.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:01:57.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:01:57.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:01:57.323 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 1, 53), 27.26, 15.87, 0.0, 12.93, 22.03, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:01:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:01:53
2025-11-25T21:01:58.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:01:58.164 [DEBUG] [Thread-5658] [transport.py] [_log()] starting thread (client mode): 0x70d415d0
2025-11-25T21:01:58.164 [DEBUG] [Thread-5658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:01:58.184 [DEBUG] [Thread-5658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:01:58.184 [INFO] [Thread-5658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] client lang: <none>
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] server lang: <none>
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] kex follows: False
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:01:58.187 [DEBUG] [Thread-5658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:01:58.188 [DEBUG] [Thread-5658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:01:58.188 [DEBUG] [Thread-5658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:01:58.188 [DEBUG] [Thread-5658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:01:58.188 [DEBUG] [Thread-5658] [transport.py] [_log()] Compression: none
2025-11-25T21:01:58.188 [DEBUG] [Thread-5658] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:01:58.208 [DEBUG] [Thread-5658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:01:58.209 [DEBUG] [Thread-5658] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:01:58.209 [DEBUG] [Thread-5658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:01:58.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:01:58.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:01:58.211 [DEBUG] [Thread-5658] [transport.py] [_log()] userauth is OK
2025-11-25T21:01:58.211 [DEBUG] [Thread-5658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:01:58.211 [DEBUG] [Thread-5658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:01:58.211 [DEBUG] [Thread-5658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:01:58.212 [DEBUG] [Thread-5658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:01:58.236 [INFO] [Thread-5658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:01:58.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:01:58.474 [DEBUG] [Thread-5660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:01:58.865 [DEBUG] [Thread-5658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:01:58.865 [DEBUG] [Thread-5658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:01:58.865 [DEBUG] [Thread-5658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:01:58.906 [DEBUG] [Thread-5658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:01:58.906 [DEBUG] [Thread-5658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:01:58.910 [DEBUG] [Thread-5658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:01:58.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:01:58.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:01:58.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:01:58.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:01:58.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:01:58.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:01:58.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:01:58.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:01:58.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:01:58.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.792460 -999.00  +22.00  13.56     21   -1.20 1 1 1 1 1     0    0 23.43 -2.06 ZNESW 11.2 13.6 196.0 18.1 21.9 -25.9 22.0 -25.3 21.7 -24.0 21.9 -25.0
2025-11-25T21:01:58.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:01:58.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:01:58.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.792460
2025-11-25T21:01:58.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:01:58.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:01:58.937 [DEBUG] [Thread-5658] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:01:58.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:01:58.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:01:58.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:01:58.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:01:53', tmtdew=27.26, humidity=15.87, cloud=0.0, wind=12.93, temperature=22.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:01:53', seeing=0.98, atlas_timestamp='2025-11-25T19:01:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T21:01:59.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:01:59.033 [DEBUG] [Thread-5662] [transport.py] [_log()] starting thread (client mode): 0x70d56ef0
2025-11-25T21:01:59.033 [DEBUG] [Thread-5662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:01:59.048 [DEBUG] [Thread-5662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:01:59.048 [INFO] [Thread-5662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:01:59.056 [DEBUG] [Thread-5662] [transport.py] [_log()] client lang: <none>
2025-11-25T21:01:59.057 [DEBUG] [Thread-5662] [transport.py] [_log()] server lang: <none>
2025-11-25T21:01:59.057 [DEBUG] [Thread-5662] [transport.py] [_log()] kex follows: False
2025-11-25T21:01:59.057 [DEBUG] [Thread-5662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:01:59.057 [DEBUG] [Thread-5662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:01:59.057 [DEBUG] [Thread-5662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:01:59.057 [DEBUG] [Thread-5662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:01:59.057 [DEBUG] [Thread-5662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:01:59.057 [DEBUG] [Thread-5662] [transport.py] [_log()] Compression: none
2025-11-25T21:01:59.057 [DEBUG] [Thread-5662] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:01:59.113 [DEBUG] [Thread-5662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:01:59.114 [DEBUG] [Thread-5662] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:01:59.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:01:59.115 [DEBUG] [Thread-5662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:01:59.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:01:59.169 [DEBUG] [Thread-5662] [transport.py] [_log()] userauth is OK
2025-11-25T21:01:59.169 [DEBUG] [Thread-5662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:01:59.170 [DEBUG] [Thread-5662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:01:59.170 [DEBUG] [Thread-5662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:01:59.170 [DEBUG] [Thread-5662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:01:59.188 [INFO] [Thread-5662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:01:59.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:01:59.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:02:00.013 [DEBUG] [Thread-5662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:02:00.013 [DEBUG] [Thread-5662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:02:00.061 [DEBUG] [Thread-5662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:02:00.061 [DEBUG] [Thread-5662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:02:00.070 [DEBUG] [Thread-5662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:02:00.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:02:00.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:02:00.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:02:00.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:02:00.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:02:00.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:02:00.104 [DEBUG] [Thread-5662] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:02:04.360 [DEBUG] [Thread-5664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:11.252 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:19.400 [DEBUG] [Thread-5665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:21.640 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:30.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:02:30.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:02:30.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:02:30.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 2, 25), 27.29, 15.83, 0.0, 13.55, 22.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:02:30.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:02:25
2025-11-25T21:02:30.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:02:31.041 [DEBUG] [Thread-5666] [transport.py] [_log()] starting thread (client mode): 0x70d6ba90
2025-11-25T21:02:31.041 [DEBUG] [Thread-5666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:02:31.062 [DEBUG] [Thread-5666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:02:31.063 [INFO] [Thread-5666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:02:31.065 [DEBUG] [Thread-5666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] client lang: <none>
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] server lang: <none>
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] kex follows: False
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] Compression: none
2025-11-25T21:02:31.066 [DEBUG] [Thread-5666] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:02:31.083 [DEBUG] [Thread-5666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:02:31.084 [DEBUG] [Thread-5666] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:02:31.084 [DEBUG] [Thread-5666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:02:31.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:02:31.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:02:31.086 [DEBUG] [Thread-5666] [transport.py] [_log()] userauth is OK
2025-11-25T21:02:31.086 [DEBUG] [Thread-5666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:02:31.087 [DEBUG] [Thread-5666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:02:31.087 [DEBUG] [Thread-5666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:02:31.087 [DEBUG] [Thread-5666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:02:31.111 [INFO] [Thread-5666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:02:31.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:02:31.912 [DEBUG] [Thread-5666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:02:31.912 [DEBUG] [Thread-5666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:02:31.913 [DEBUG] [Thread-5666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:02:31.954 [DEBUG] [Thread-5666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:02:31.954 [DEBUG] [Thread-5666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:02:31.957 [DEBUG] [Thread-5666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:02:31.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:02:31.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:02:31.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:02:31.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:02:31.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:02:31.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:02:31.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:02:31.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:02:31.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:02:31.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.793154 -999.00  +22.00   8.83     21   -1.30 1 1 1 1 1     0    0 22.87 -1.37 ZNESW 8.8 8.8 227.7 13.9 21.9 -25.9 21.9 -25.2 21.6 -23.9 21.9 -25.1
2025-11-25T21:02:31.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:02:31.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:02:31.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.793154
2025-11-25T21:02:31.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:02:31.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:02:31.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:02:31.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:02:31.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:02:31.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:02:25', tmtdew=27.29, humidity=15.83, cloud=0.0, wind=13.55, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:02:25', seeing=1.02, atlas_timestamp='2025-11-25T19:02:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T21:02:31.983 [DEBUG] [Thread-5666] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:02:32.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:02:32.079 [DEBUG] [Thread-5669] [transport.py] [_log()] starting thread (client mode): 0x70d1e410
2025-11-25T21:02:32.079 [DEBUG] [Thread-5669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:02:32.095 [DEBUG] [Thread-5669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:02:32.095 [INFO] [Thread-5669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:02:32.103 [DEBUG] [Thread-5669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:02:32.103 [DEBUG] [Thread-5669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:02:32.103 [DEBUG] [Thread-5669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:02:32.103 [DEBUG] [Thread-5669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:02:32.103 [DEBUG] [Thread-5669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:02:32.103 [DEBUG] [Thread-5669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:02:32.103 [DEBUG] [Thread-5669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:02:32.104 [DEBUG] [Thread-5669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:02:32.104 [DEBUG] [Thread-5669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:02:32.104 [DEBUG] [Thread-5669] [transport.py] [_log()] client lang: <none>
2025-11-25T21:02:32.104 [DEBUG] [Thread-5669] [transport.py] [_log()] server lang: <none>
2025-11-25T21:02:32.104 [DEBUG] [Thread-5669] [transport.py] [_log()] kex follows: False
2025-11-25T21:02:32.104 [DEBUG] [Thread-5669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:02:32.104 [DEBUG] [Thread-5669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:02:32.104 [DEBUG] [Thread-5669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:02:32.105 [DEBUG] [Thread-5669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:02:32.105 [DEBUG] [Thread-5669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:02:32.105 [DEBUG] [Thread-5669] [transport.py] [_log()] Compression: none
2025-11-25T21:02:32.105 [DEBUG] [Thread-5669] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:02:32.165 [DEBUG] [Thread-5669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:02:32.166 [DEBUG] [Thread-5669] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:02:32.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:02:32.167 [DEBUG] [Thread-5669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:02:32.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:02:32.222 [DEBUG] [Thread-5669] [transport.py] [_log()] userauth is OK
2025-11-25T21:02:32.222 [DEBUG] [Thread-5669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:02:32.222 [DEBUG] [Thread-5669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:02:32.222 [DEBUG] [Thread-5669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:02:32.222 [DEBUG] [Thread-5669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:02:32.241 [INFO] [Thread-5669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:02:32.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:02:32.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:02:33.079 [DEBUG] [Thread-5669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:02:33.080 [DEBUG] [Thread-5669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:02:33.128 [DEBUG] [Thread-5669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:02:33.128 [DEBUG] [Thread-5669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:02:33.137 [DEBUG] [Thread-5669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:02:33.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:02:33.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:02:33.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:02:33.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:02:33.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:02:33.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:02:33.173 [DEBUG] [Thread-5669] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:02:34.436 [DEBUG] [Thread-5671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:36.785 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:36.787 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:41.966 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:49.488 [DEBUG] [Thread-5672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:52.381 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:02:58.527 [DEBUG] [Thread-5673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:03:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:03:03.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:03:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:03:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 2, 57), 27.27, 15.87, 0.0, 15.32, 22.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:03:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:02:57
2025-11-25T21:03:03.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:03:04.114 [DEBUG] [Thread-5674] [transport.py] [_log()] starting thread (client mode): 0x70d6ae00
2025-11-25T21:03:04.114 [DEBUG] [Thread-5674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:03:04.135 [DEBUG] [Thread-5674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:03:04.135 [INFO] [Thread-5674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:03:04.138 [DEBUG] [Thread-5674] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:03:04.138 [DEBUG] [Thread-5674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:03:04.138 [DEBUG] [Thread-5674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] client lang: <none>
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] server lang: <none>
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] kex follows: False
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] Compression: none
2025-11-25T21:03:04.139 [DEBUG] [Thread-5674] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:03:04.157 [DEBUG] [Thread-5674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:03:04.158 [DEBUG] [Thread-5674] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:03:04.158 [DEBUG] [Thread-5674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:03:04.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:03:04.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:03:04.160 [DEBUG] [Thread-5674] [transport.py] [_log()] userauth is OK
2025-11-25T21:03:04.160 [DEBUG] [Thread-5674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:03:04.160 [DEBUG] [Thread-5674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:03:04.160 [DEBUG] [Thread-5674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:03:04.160 [DEBUG] [Thread-5674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:03:04.182 [INFO] [Thread-5674] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:03:04.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:03:04.523 [DEBUG] [Thread-5676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:03:04.791 [DEBUG] [Thread-5674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:03:04.791 [DEBUG] [Thread-5674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:03:04.792 [DEBUG] [Thread-5674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:03:04.833 [DEBUG] [Thread-5674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:03:04.833 [DEBUG] [Thread-5674] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:03:04.836 [DEBUG] [Thread-5674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:03:04.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:03:04.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:03:04.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:03:04.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:03:04.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:03:04.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:03:04.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:03:04.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:03:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:03:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.793502 -999.00  +22.00   9.05     21   -1.30 1 1 1 1 1     0    0 23.55 -0.91 ZNESW 8.0 9.1 226.1 13.9 21.9 -25.8 21.9 -25.4 21.6 -24.0 21.8 -25.0
2025-11-25T21:03:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:03:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:03:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.793502
2025-11-25T21:03:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:03:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:03:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:03:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:03:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:03:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:02:57', tmtdew=27.27, humidity=15.87, cloud=0.0, wind=15.32, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:02:57', seeing=1.07, atlas_timestamp='2025-11-25T19:02:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T18:56:00')
2025-11-25T21:03:04.863 [DEBUG] [Thread-5674] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:03:04.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:03:04.955 [DEBUG] [Thread-5678] [transport.py] [_log()] starting thread (client mode): 0x70d69d20
2025-11-25T21:03:04.955 [DEBUG] [Thread-5678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:03:04.970 [DEBUG] [Thread-5678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:03:04.970 [INFO] [Thread-5678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] client lang: <none>
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] server lang: <none>
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] kex follows: False
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:03:04.978 [DEBUG] [Thread-5678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:03:04.979 [DEBUG] [Thread-5678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:03:04.979 [DEBUG] [Thread-5678] [transport.py] [_log()] Compression: none
2025-11-25T21:03:04.979 [DEBUG] [Thread-5678] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:03:05.040 [DEBUG] [Thread-5678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:03:05.041 [DEBUG] [Thread-5678] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:03:05.042 [DEBUG] [Thread-5678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:03:05.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:03:05.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:03:05.097 [DEBUG] [Thread-5678] [transport.py] [_log()] userauth is OK
2025-11-25T21:03:05.097 [DEBUG] [Thread-5678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:03:05.098 [DEBUG] [Thread-5678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:03:05.098 [DEBUG] [Thread-5678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:03:05.098 [DEBUG] [Thread-5678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:03:05.117 [INFO] [Thread-5678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:03:05.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:03:05.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:03:05.938 [DEBUG] [Thread-5678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:03:05.938 [DEBUG] [Thread-5678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:03:05.989 [DEBUG] [Thread-5678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:03:05.989 [DEBUG] [Thread-5678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:03:06.002 [DEBUG] [Thread-5678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:03:06.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:03:06.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:03:06.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:03:06.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:03:06.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:03:06.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:03:06.048 [DEBUG] [Thread-5678] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:03:19.557 [DEBUG] [Thread-5680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:03:34.602 [DEBUG] [Thread-5681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:03:36.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:03:36.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:03:36.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:03:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 3, 29), 27.33, 15.8, 0.0, 13.59, 22.13, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:03:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:03:29
2025-11-25T21:03:36.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:03:36.989 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:03:36.990 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:03:37.003 [DEBUG] [Thread-5682] [transport.py] [_log()] starting thread (client mode): 0x70d2a860
2025-11-25T21:03:37.003 [DEBUG] [Thread-5682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:03:37.026 [DEBUG] [Thread-5682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:03:37.026 [INFO] [Thread-5682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:03:37.028 [DEBUG] [Thread-5682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:03:37.028 [DEBUG] [Thread-5682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:03:37.028 [DEBUG] [Thread-5682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:03:37.028 [DEBUG] [Thread-5682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:03:37.028 [DEBUG] [Thread-5682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:03:37.028 [DEBUG] [Thread-5682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:03:37.028 [DEBUG] [Thread-5682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:03:37.028 [DEBUG] [Thread-5682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:03:37.028 [DEBUG] [Thread-5682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] client lang: <none>
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] server lang: <none>
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] kex follows: False
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] Compression: none
2025-11-25T21:03:37.029 [DEBUG] [Thread-5682] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:03:37.039 [DEBUG] [Thread-5682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:03:37.040 [DEBUG] [Thread-5682] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:03:37.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:03:37.041 [DEBUG] [Thread-5682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:03:37.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:03:37.043 [DEBUG] [Thread-5682] [transport.py] [_log()] userauth is OK
2025-11-25T21:03:37.043 [DEBUG] [Thread-5682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:03:37.043 [DEBUG] [Thread-5682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:03:37.043 [DEBUG] [Thread-5682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:03:37.044 [DEBUG] [Thread-5682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:03:37.069 [INFO] [Thread-5682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:03:37.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:03:37.211 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:03:37.868 [DEBUG] [Thread-5682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:03:37.869 [DEBUG] [Thread-5682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:03:37.869 [DEBUG] [Thread-5682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:03:37.910 [DEBUG] [Thread-5682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:03:37.910 [DEBUG] [Thread-5682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:03:37.913 [DEBUG] [Thread-5682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:03:37.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:03:37.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:03:37.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:03:37.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:03:37.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:03:37.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:03:37.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:03:37.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:03:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:03:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.793849 -999.00  +22.00   7.62     21   -1.30 1 1 1 1 1     0    0 23.48 -0.37 ZNESW 12.5 7.6 229.9 11.7 21.9 -25.9 21.9 -25.3 21.6 -24.2 21.8 -24.9
2025-11-25T21:03:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:03:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:03:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.793849
2025-11-25T21:03:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:03:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:03:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:03:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:03:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:03:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:03:29', tmtdew=27.33, humidity=15.8, cloud=0.0, wind=13.59, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:03:29', seeing=1.08, atlas_timestamp='2025-11-25T19:03:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:03:37.938 [DEBUG] [Thread-5682] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:03:38.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:03:38.033 [DEBUG] [Thread-5685] [transport.py] [_log()] starting thread (client mode): 0x70d2b4f0
2025-11-25T21:03:38.033 [DEBUG] [Thread-5685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:03:38.048 [DEBUG] [Thread-5685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:03:38.049 [INFO] [Thread-5685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:03:38.058 [DEBUG] [Thread-5685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] client lang: <none>
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] server lang: <none>
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] kex follows: False
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:03:38.059 [DEBUG] [Thread-5685] [transport.py] [_log()] Compression: none
2025-11-25T21:03:38.060 [DEBUG] [Thread-5685] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:03:38.117 [DEBUG] [Thread-5685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:03:38.118 [DEBUG] [Thread-5685] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:03:38.118 [DEBUG] [Thread-5685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:03:38.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:03:38.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:03:38.173 [DEBUG] [Thread-5685] [transport.py] [_log()] userauth is OK
2025-11-25T21:03:38.174 [DEBUG] [Thread-5685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:03:38.174 [DEBUG] [Thread-5685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:03:38.174 [DEBUG] [Thread-5685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:03:38.174 [DEBUG] [Thread-5685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:03:38.193 [INFO] [Thread-5685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:03:38.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:03:38.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:03:39.007 [DEBUG] [Thread-5685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:03:39.007 [DEBUG] [Thread-5685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:03:39.055 [DEBUG] [Thread-5685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:03:39.055 [DEBUG] [Thread-5685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:03:39.064 [DEBUG] [Thread-5685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:03:39.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:03:39.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:03:39.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:03:39.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:03:39.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:03:39.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:03:39.101 [DEBUG] [Thread-5685] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:03:47.651 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:03:49.642 [DEBUG] [Thread-5687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:03:58.582 [DEBUG] [Thread-5688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:04.696 [DEBUG] [Thread-5689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:09.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:04:09.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:04:09.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:04:09.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 4, 1), 27.38, 15.75, 0.0, 10.66, 22.13, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:04:09.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:04:01
2025-11-25T21:04:09.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:04:10.077 [DEBUG] [Thread-5690] [transport.py] [_log()] starting thread (client mode): 0x70d29870
2025-11-25T21:04:10.077 [DEBUG] [Thread-5690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:04:10.097 [DEBUG] [Thread-5690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:04:10.097 [INFO] [Thread-5690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:04:10.100 [DEBUG] [Thread-5690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] client lang: <none>
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] server lang: <none>
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] kex follows: False
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] Compression: none
2025-11-25T21:04:10.101 [DEBUG] [Thread-5690] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:04:10.118 [DEBUG] [Thread-5690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:04:10.118 [DEBUG] [Thread-5690] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:04:10.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:04:10.119 [DEBUG] [Thread-5690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:04:10.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:04:10.121 [DEBUG] [Thread-5690] [transport.py] [_log()] userauth is OK
2025-11-25T21:04:10.121 [DEBUG] [Thread-5690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:04:10.121 [DEBUG] [Thread-5690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:04:10.122 [DEBUG] [Thread-5690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:04:10.122 [DEBUG] [Thread-5690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:04:10.146 [INFO] [Thread-5690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:04:10.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:04:10.775 [DEBUG] [Thread-5690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:04:10.775 [DEBUG] [Thread-5690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:04:10.775 [DEBUG] [Thread-5690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:04:10.815 [DEBUG] [Thread-5690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:04:10.816 [DEBUG] [Thread-5690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:04:10.819 [DEBUG] [Thread-5690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:04:10.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:04:10.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:04:10.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:04:10.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:04:10.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:04:10.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:04:10.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:04:10.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:04:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:04:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.794196 -999.00  +22.00   5.31     21   -1.30 1 1 1 1 1     0    0 23.15 0.13 ZNESW 5.3 5.3 252.1 14.7 21.9 -25.9 21.9 -25.4 21.6 -24.1 21.8 -25.2
2025-11-25T21:04:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:04:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:04:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.794196
2025-11-25T21:04:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:04:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:04:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:04:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:04:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:04:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:04:01', tmtdew=27.38, humidity=15.75, cloud=0.0, wind=10.66, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:04:01', seeing=1.08, atlas_timestamp='2025-11-25T19:03:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:04:10.844 [DEBUG] [Thread-5690] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:04:10.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:04:10.944 [DEBUG] [Thread-5693] [transport.py] [_log()] starting thread (client mode): 0x70d439a0
2025-11-25T21:04:10.944 [DEBUG] [Thread-5693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:04:10.963 [DEBUG] [Thread-5693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:04:10.963 [INFO] [Thread-5693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:04:10.970 [DEBUG] [Thread-5693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] client lang: <none>
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] server lang: <none>
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] kex follows: False
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:04:10.971 [DEBUG] [Thread-5693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:04:10.972 [DEBUG] [Thread-5693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:04:10.972 [DEBUG] [Thread-5693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:04:10.972 [DEBUG] [Thread-5693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:04:10.972 [DEBUG] [Thread-5693] [transport.py] [_log()] Compression: none
2025-11-25T21:04:10.972 [DEBUG] [Thread-5693] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:04:11.027 [DEBUG] [Thread-5693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:04:11.028 [DEBUG] [Thread-5693] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:04:11.029 [DEBUG] [Thread-5693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:04:11.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:04:11.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:04:11.085 [DEBUG] [Thread-5693] [transport.py] [_log()] userauth is OK
2025-11-25T21:04:11.086 [DEBUG] [Thread-5693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:04:11.086 [DEBUG] [Thread-5693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:04:11.086 [DEBUG] [Thread-5693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:04:11.086 [DEBUG] [Thread-5693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:04:11.105 [INFO] [Thread-5693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:04:11.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:04:11.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:04:11.954 [DEBUG] [Thread-5693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:04:11.954 [DEBUG] [Thread-5693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:04:12.001 [DEBUG] [Thread-5693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:04:12.001 [DEBUG] [Thread-5693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:04:12.010 [DEBUG] [Thread-5693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:04:12.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:04:12.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:04:12.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:04:12.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:04:12.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:04:12.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:04:12.045 [DEBUG] [Thread-5693] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:04:19.731 [DEBUG] [Thread-5695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:20.782 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:31.193 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:34.780 [DEBUG] [Thread-5696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:37.189 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:37.191 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:04:42.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:04:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:04:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 4, 33), 27.37, 15.75, 0.0, 10.59, 22.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:04:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:04:33
2025-11-25T21:04:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:04:43.009 [DEBUG] [Thread-5697] [transport.py] [_log()] starting thread (client mode): 0x737c5870
2025-11-25T21:04:43.009 [DEBUG] [Thread-5697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:04:43.028 [DEBUG] [Thread-5697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:04:43.028 [INFO] [Thread-5697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:04:43.031 [DEBUG] [Thread-5697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:04:43.031 [DEBUG] [Thread-5697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] client lang: <none>
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] server lang: <none>
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] kex follows: False
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:04:43.032 [DEBUG] [Thread-5697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:04:43.033 [DEBUG] [Thread-5697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:04:43.033 [DEBUG] [Thread-5697] [transport.py] [_log()] Compression: none
2025-11-25T21:04:43.033 [DEBUG] [Thread-5697] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:04:43.048 [DEBUG] [Thread-5697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:04:43.049 [DEBUG] [Thread-5697] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:04:43.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:04:43.050 [DEBUG] [Thread-5697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:04:43.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:04:43.052 [DEBUG] [Thread-5697] [transport.py] [_log()] userauth is OK
2025-11-25T21:04:43.053 [DEBUG] [Thread-5697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:04:43.053 [DEBUG] [Thread-5697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:04:43.053 [DEBUG] [Thread-5697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:04:43.053 [DEBUG] [Thread-5697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:04:43.072 [INFO] [Thread-5697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:04:43.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:04:43.718 [DEBUG] [Thread-5697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:04:43.718 [DEBUG] [Thread-5697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:04:43.718 [DEBUG] [Thread-5697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:04:43.760 [DEBUG] [Thread-5697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:04:43.760 [DEBUG] [Thread-5697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:04:43.763 [DEBUG] [Thread-5697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:04:43.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:04:43.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:04:43.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:04:43.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:04:43.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:04:43.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:04:43.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:04:43.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:04:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:04:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.794543 -999.00  +22.00   7.62     21   -1.30 1 1 1 1 1     0    0 23.32 0.66 ZNESW 5.2 7.6 209.5 8.9 21.9 -26.0 21.9 -25.3 21.6 -24.2 21.8 -24.9
2025-11-25T21:04:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:04:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:04:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.794543
2025-11-25T21:04:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:04:43.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:04:43.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:04:43.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:04:43.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:04:43.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:04:33', tmtdew=27.37, humidity=15.75, cloud=0.0, wind=10.59, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:04:33', seeing=1.23, atlas_timestamp='2025-11-25T19:04:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:04:43.791 [DEBUG] [Thread-5697] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:04:43.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:04:43.886 [DEBUG] [Thread-5700] [transport.py] [_log()] starting thread (client mode): 0x70d1f220
2025-11-25T21:04:43.886 [DEBUG] [Thread-5700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:04:43.900 [DEBUG] [Thread-5700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:04:43.900 [INFO] [Thread-5700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:04:43.907 [DEBUG] [Thread-5700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:04:43.907 [DEBUG] [Thread-5700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] client lang: <none>
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] server lang: <none>
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] kex follows: False
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] Compression: none
2025-11-25T21:04:43.908 [DEBUG] [Thread-5700] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:04:43.965 [DEBUG] [Thread-5700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:04:43.966 [DEBUG] [Thread-5700] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:04:43.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:04:43.967 [DEBUG] [Thread-5700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:04:43.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:04:44.021 [DEBUG] [Thread-5700] [transport.py] [_log()] userauth is OK
2025-11-25T21:04:44.022 [DEBUG] [Thread-5700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:04:44.022 [DEBUG] [Thread-5700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:04:44.022 [DEBUG] [Thread-5700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:04:44.022 [DEBUG] [Thread-5700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:04:44.040 [INFO] [Thread-5700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:04:44.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:04:44.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:04:44.889 [DEBUG] [Thread-5700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:04:44.889 [DEBUG] [Thread-5700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:04:44.937 [DEBUG] [Thread-5700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:04:44.937 [DEBUG] [Thread-5700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:04:44.946 [DEBUG] [Thread-5700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:04:44.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:04:44.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:04: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
2025-11-25T21:04:44.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:04:44.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:04:44.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:04:44.981 [DEBUG] [Thread-5700] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:04:49.812 [DEBUG] [Thread-5702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:53.215 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:04:58.649 [DEBUG] [Thread-5703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:03.586 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:04.865 [DEBUG] [Thread-5704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:05:15.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:05:15.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:05:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 5, 5), 27.39, 15.73, 0.0, 10.09, 22.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:05:15.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:05:05
2025-11-25T21:05:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:05:15.929 [DEBUG] [Thread-5705] [transport.py] [_log()] starting thread (client mode): 0x70d2baf0
2025-11-25T21:05:15.929 [DEBUG] [Thread-5705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:05:15.948 [DEBUG] [Thread-5705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:05:15.949 [INFO] [Thread-5705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] client lang: <none>
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] server lang: <none>
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] kex follows: False
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] Compression: none
2025-11-25T21:05:15.952 [DEBUG] [Thread-5705] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:05:15.970 [DEBUG] [Thread-5705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:05:15.970 [DEBUG] [Thread-5705] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:05:15.971 [DEBUG] [Thread-5705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:05:15.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:05:15.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:05:15.973 [DEBUG] [Thread-5705] [transport.py] [_log()] userauth is OK
2025-11-25T21:05:15.973 [DEBUG] [Thread-5705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:05:15.973 [DEBUG] [Thread-5705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:05:15.973 [DEBUG] [Thread-5705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:05:15.973 [DEBUG] [Thread-5705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:05:15.998 [INFO] [Thread-5705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:05:16.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:05:16.613 [DEBUG] [Thread-5705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:05:16.613 [DEBUG] [Thread-5705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:05:16.614 [DEBUG] [Thread-5705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:05:16.654 [DEBUG] [Thread-5705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:05:16.654 [DEBUG] [Thread-5705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:05:16.658 [DEBUG] [Thread-5705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:05:16.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:05:16.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:05:16.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:05:16.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:05:16.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:05:16.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:05:16.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:05:16.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:05:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:05:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.794891 -999.00  +22.00   7.53     21   -1.30 1 1 1 1 1     0    0 23.24 1.92 ZNESW 2.9 7.5 235.4 11.1 21.9 -25.9 21.9 -25.3 21.6 -24.0 21.8 -24.9
2025-11-25T21:05:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:05:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:05:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.794891
2025-11-25T21:05:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:05:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:05:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:05:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:05:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:05:16.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:05:05', tmtdew=27.39, humidity=15.73, cloud=0.0, wind=10.09, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:05:05', seeing=1.03, atlas_timestamp='2025-11-25T19:04:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:05:16.679 [DEBUG] [Thread-5705] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:05:16.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:05:16.776 [DEBUG] [Thread-5708] [transport.py] [_log()] starting thread (client mode): 0x70d6bbb0
2025-11-25T21:05:16.776 [DEBUG] [Thread-5708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:05:16.795 [DEBUG] [Thread-5708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:05:16.795 [INFO] [Thread-5708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:05:16.802 [DEBUG] [Thread-5708] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:05:16.802 [DEBUG] [Thread-5708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] client lang: <none>
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] server lang: <none>
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] kex follows: False
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] Compression: none
2025-11-25T21:05:16.803 [DEBUG] [Thread-5708] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:05:16.860 [DEBUG] [Thread-5708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:05:16.861 [DEBUG] [Thread-5708] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:05:16.861 [DEBUG] [Thread-5708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:05:16.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:05:16.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:05:16.917 [DEBUG] [Thread-5708] [transport.py] [_log()] userauth is OK
2025-11-25T21:05:16.917 [DEBUG] [Thread-5708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:05:16.917 [DEBUG] [Thread-5708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:05:16.917 [DEBUG] [Thread-5708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:05:16.917 [DEBUG] [Thread-5708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:05:16.941 [INFO] [Thread-5708] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:05:16.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:05:16.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:05:17.775 [DEBUG] [Thread-5708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:05:17.775 [DEBUG] [Thread-5708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:05:17.823 [DEBUG] [Thread-5708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:05:17.823 [DEBUG] [Thread-5708] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:05:17.832 [DEBUG] [Thread-5708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:05:17.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:05:17.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:05:17.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:05:17.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:05:17.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:05:17.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:05:17.864 [DEBUG] [Thread-5708] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:05:19.896 [DEBUG] [Thread-5710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:29.330 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:34.952 [DEBUG] [Thread-5711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:37.393 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:37.394 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:39.742 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:43.745 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:47.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:05:47.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:05:47.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:05:48.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 5, 37), 27.43, 15.73, 0.0, 9.35, 22.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:05:48.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:05:37
2025-11-25T21:05:48.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:05:48.860 [DEBUG] [Thread-5712] [transport.py] [_log()] starting thread (client mode): 0x70d1d720
2025-11-25T21:05:48.860 [DEBUG] [Thread-5712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:05:48.871 [DEBUG] [Thread-5712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:05:48.871 [INFO] [Thread-5712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] client lang: <none>
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] server lang: <none>
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] kex follows: False
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] Compression: none
2025-11-25T21:05:48.875 [DEBUG] [Thread-5712] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:05:48.888 [DEBUG] [Thread-5712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:05:48.888 [DEBUG] [Thread-5712] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:05:48.888 [DEBUG] [Thread-5712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:05:48.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:05:48.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:05:48.888 [DEBUG] [Thread-5712] [transport.py] [_log()] userauth is OK
2025-11-25T21:05:48.888 [DEBUG] [Thread-5712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:05:48.888 [DEBUG] [Thread-5712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:05:48.889 [DEBUG] [Thread-5712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:05:48.889 [DEBUG] [Thread-5712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:05:48.904 [INFO] [Thread-5712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:05:48.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:05:49.535 [DEBUG] [Thread-5712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:05:49.535 [DEBUG] [Thread-5712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:05:49.535 [DEBUG] [Thread-5712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:05:49.576 [DEBUG] [Thread-5712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:05:49.576 [DEBUG] [Thread-5712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:05:49.578 [DEBUG] [Thread-5712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:05:49.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:05:49.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:05:49.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:05:49.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:05:49.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:05:49.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:05:49.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:05:49.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.795585 -999.00  +22.00   6.16     20   -1.30 1 1 1 1 1     0    0 23.51 3.40 ZNESW 5.8 6.2 209.4 11.2 21.9 -25.9 21.9 -25.4 21.6 -24.1 21.8 -25.1
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.795585
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:05:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:05:37', tmtdew=27.43, humidity=15.73, cloud=0.0, wind=9.35, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:05:37', seeing=0.8, atlas_timestamp='2025-11-25T19:05:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:05:49.596 [DEBUG] [Thread-5712] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:05:49.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:05:49.681 [DEBUG] [Thread-5715] [transport.py] [_log()] starting thread (client mode): 0x70d1e980
2025-11-25T21:05:49.681 [DEBUG] [Thread-5715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:05:49.696 [DEBUG] [Thread-5715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:05:49.696 [INFO] [Thread-5715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:05:49.703 [DEBUG] [Thread-5715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:05:49.703 [DEBUG] [Thread-5715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:05:49.703 [DEBUG] [Thread-5715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:05:49.703 [DEBUG] [Thread-5715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:05:49.703 [DEBUG] [Thread-5715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:05:49.703 [DEBUG] [Thread-5715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:05:49.703 [DEBUG] [Thread-5715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:05:49.703 [DEBUG] [Thread-5715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:05:49.703 [DEBUG] [Thread-5715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] client lang: <none>
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] server lang: <none>
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] kex follows: False
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] Compression: none
2025-11-25T21:05:49.704 [DEBUG] [Thread-5715] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:05:49.760 [DEBUG] [Thread-5715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:05:49.760 [DEBUG] [Thread-5715] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:05:49.760 [DEBUG] [Thread-5715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:05:49.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:05:49.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:05:49.821 [DEBUG] [Thread-5715] [transport.py] [_log()] userauth is OK
2025-11-25T21:05:49.821 [DEBUG] [Thread-5715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:05:49.821 [DEBUG] [Thread-5715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:05:49.821 [DEBUG] [Thread-5715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:05:49.821 [DEBUG] [Thread-5715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:05:49.835 [INFO] [Thread-5715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:05:49.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:05:49.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:05:49.984 [DEBUG] [Thread-5717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:50.696 [DEBUG] [Thread-5715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:05:50.696 [DEBUG] [Thread-5715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:05:50.743 [DEBUG] [Thread-5715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:05:50.743 [DEBUG] [Thread-5715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:05:50.754 [DEBUG] [Thread-5715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:05:50.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:05:50.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:05:50.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:05:50.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:05:50.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:05:50.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:05:50.786 [DEBUG] [Thread-5715] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:05:54.155 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:05:58.708 [DEBUG] [Thread-5718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:05.036 [DEBUG] [Thread-5719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:07.164 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:17.562 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:20.071 [DEBUG] [Thread-5720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:06:20.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:06: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
2025-11-25T21:06:21.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 6, 9), 27.41, 15.73, 0.0, 9.48, 21.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:06:21.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:06:09
2025-11-25T21:06:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:06:21.752 [DEBUG] [Thread-5721] [transport.py] [_log()] starting thread (client mode): 0x737c5870
2025-11-25T21:06:21.752 [DEBUG] [Thread-5721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:06:21.771 [DEBUG] [Thread-5721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:06:21.771 [INFO] [Thread-5721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:06:21.774 [DEBUG] [Thread-5721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:06:21.774 [DEBUG] [Thread-5721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:06:21.774 [DEBUG] [Thread-5721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:06:21.774 [DEBUG] [Thread-5721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:06:21.774 [DEBUG] [Thread-5721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:06:21.774 [DEBUG] [Thread-5721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:06:21.774 [DEBUG] [Thread-5721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:06:21.774 [DEBUG] [Thread-5721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:06:21.774 [DEBUG] [Thread-5721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] client lang: <none>
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] server lang: <none>
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] kex follows: False
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] Compression: none
2025-11-25T21:06:21.775 [DEBUG] [Thread-5721] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:06:21.796 [DEBUG] [Thread-5721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:06:21.796 [DEBUG] [Thread-5721] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:06:21.796 [DEBUG] [Thread-5721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:06:21.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:06:21.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:06:21.799 [DEBUG] [Thread-5721] [transport.py] [_log()] userauth is OK
2025-11-25T21:06:21.799 [DEBUG] [Thread-5721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:06:21.799 [DEBUG] [Thread-5721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:06:21.799 [DEBUG] [Thread-5721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:06:21.799 [DEBUG] [Thread-5721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:06:21.834 [INFO] [Thread-5721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:06:21.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:06:22.496 [DEBUG] [Thread-5721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:06:22.496 [DEBUG] [Thread-5721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:06:22.496 [DEBUG] [Thread-5721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:06:22.537 [DEBUG] [Thread-5721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:06:22.537 [DEBUG] [Thread-5721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:06:22.539 [DEBUG] [Thread-5721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:06:22.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:06:22.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:06:22.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:06:22.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:06:22.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:06:22.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:06:22.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.795932 -999.00  +21.90   8.55     20   -1.40 1 1 1 1 1     0    0 22.84 3.75 ZNESW 4.7 8.6 210.7 11.3 21.9 -25.9 21.8 -25.3 21.6 -24.1 21.8 -25.1
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.795932
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:06:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:06:09', tmtdew=27.41, humidity=15.73, cloud=0.0, wind=9.48, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:06:09', seeing=0.98, atlas_timestamp='2025-11-25T19:06:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:06:22.556 [DEBUG] [Thread-5721] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:06:22.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:06:22.642 [DEBUG] [Thread-5724] [transport.py] [_log()] starting thread (client mode): 0x70d1f040
2025-11-25T21:06:22.642 [DEBUG] [Thread-5724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:06:22.657 [DEBUG] [Thread-5724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:06:22.657 [INFO] [Thread-5724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] client lang: <none>
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] server lang: <none>
2025-11-25T21:06:22.665 [DEBUG] [Thread-5724] [transport.py] [_log()] kex follows: False
2025-11-25T21:06:22.666 [DEBUG] [Thread-5724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:06:22.666 [DEBUG] [Thread-5724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:06:22.666 [DEBUG] [Thread-5724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:06:22.666 [DEBUG] [Thread-5724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:06:22.666 [DEBUG] [Thread-5724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:06:22.666 [DEBUG] [Thread-5724] [transport.py] [_log()] Compression: none
2025-11-25T21:06:22.666 [DEBUG] [Thread-5724] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:06:22.721 [DEBUG] [Thread-5724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:06:22.721 [DEBUG] [Thread-5724] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:06:22.721 [DEBUG] [Thread-5724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:06:22.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:06:22.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:06:22.778 [DEBUG] [Thread-5724] [transport.py] [_log()] userauth is OK
2025-11-25T21:06:22.778 [DEBUG] [Thread-5724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:06:22.778 [DEBUG] [Thread-5724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:06:22.779 [DEBUG] [Thread-5724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:06:22.779 [DEBUG] [Thread-5724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:06:22.793 [INFO] [Thread-5724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:06:22.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:06:22.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:06:23.622 [DEBUG] [Thread-5724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:06:23.622 [DEBUG] [Thread-5724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:06:23.670 [DEBUG] [Thread-5724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:06:23.670 [DEBUG] [Thread-5724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:06:23.678 [DEBUG] [Thread-5724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:06:23.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:06:23.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:06:23.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:06:23.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:06:23.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:06:23.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:06:23.709 [DEBUG] [Thread-5724] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:06:35.104 [DEBUG] [Thread-5726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:37.600 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:37.601 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:40.592 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:50.166 [DEBUG] [Thread-5727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:51.044 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:06:53.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:06:53.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:06:53.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:06:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 6, 41), 27.34, 15.82, 0.0, 11.4, 21.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:06:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:06:41
2025-11-25T21:06:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:06:54.634 [DEBUG] [Thread-5728] [transport.py] [_log()] starting thread (client mode): 0x70d2a950
2025-11-25T21:06:54.634 [DEBUG] [Thread-5728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:06:54.653 [DEBUG] [Thread-5728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:06:54.653 [INFO] [Thread-5728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] client lang: <none>
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] server lang: <none>
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] kex follows: False
2025-11-25T21:06:54.654 [DEBUG] [Thread-5728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:06:54.655 [DEBUG] [Thread-5728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:06:54.655 [DEBUG] [Thread-5728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:06:54.655 [DEBUG] [Thread-5728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:06:54.655 [DEBUG] [Thread-5728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:06:54.655 [DEBUG] [Thread-5728] [transport.py] [_log()] Compression: none
2025-11-25T21:06:54.655 [DEBUG] [Thread-5728] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:06:54.671 [DEBUG] [Thread-5728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:06:54.671 [DEBUG] [Thread-5728] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:06:54.672 [DEBUG] [Thread-5728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:06:54.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:06:54.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:06:54.673 [DEBUG] [Thread-5728] [transport.py] [_log()] userauth is OK
2025-11-25T21:06:54.674 [DEBUG] [Thread-5728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:06:54.674 [DEBUG] [Thread-5728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:06:54.674 [DEBUG] [Thread-5728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:06:54.674 [DEBUG] [Thread-5728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:06:54.694 [INFO] [Thread-5728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:06:54.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:06:55.314 [DEBUG] [Thread-5728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:06:55.314 [DEBUG] [Thread-5728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:06:55.315 [DEBUG] [Thread-5728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:06:55.356 [DEBUG] [Thread-5728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:06:55.356 [DEBUG] [Thread-5728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:06:55.359 [DEBUG] [Thread-5728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:06:55.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:06:55.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:06:55.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:06:55.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:06:55.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:06:55.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:06:55.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:06:55.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:06:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:06:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.796279 -999.00  +21.90   5.25     20   -1.40 1 1 1 1 1     0    0 23.62 4.88 ZNESW 3.1 5.2 189.7 8.1 21.8 -25.9 21.8 -25.5 21.6 -24.1 21.8 -25.3
2025-11-25T21:06:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:06:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:06:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.796279
2025-11-25T21:06:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:06:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:06:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:06:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:06:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:06:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:06:41', tmtdew=27.34, humidity=15.82, cloud=0.0, wind=11.4, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:06:41', seeing=1.08, atlas_timestamp='2025-11-25T19:06:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:06:55.385 [DEBUG] [Thread-5728] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:06:55.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:06:55.485 [DEBUG] [Thread-5731] [transport.py] [_log()] starting thread (client mode): 0x70d68dc0
2025-11-25T21:06:55.485 [DEBUG] [Thread-5731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:06:55.499 [DEBUG] [Thread-5731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:06:55.500 [INFO] [Thread-5731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:06:55.508 [DEBUG] [Thread-5731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:06:55.508 [DEBUG] [Thread-5731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:06:55.508 [DEBUG] [Thread-5731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:06:55.508 [DEBUG] [Thread-5731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:06:55.509 [DEBUG] [Thread-5731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:06:55.509 [DEBUG] [Thread-5731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:06:55.509 [DEBUG] [Thread-5731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:06:55.509 [DEBUG] [Thread-5731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:06:55.509 [DEBUG] [Thread-5731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:06:55.509 [DEBUG] [Thread-5731] [transport.py] [_log()] client lang: <none>
2025-11-25T21:06:55.509 [DEBUG] [Thread-5731] [transport.py] [_log()] server lang: <none>
2025-11-25T21:06:55.509 [DEBUG] [Thread-5731] [transport.py] [_log()] kex follows: False
2025-11-25T21:06:55.509 [DEBUG] [Thread-5731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:06:55.510 [DEBUG] [Thread-5731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:06:55.510 [DEBUG] [Thread-5731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:06:55.510 [DEBUG] [Thread-5731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:06:55.510 [DEBUG] [Thread-5731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:06:55.510 [DEBUG] [Thread-5731] [transport.py] [_log()] Compression: none
2025-11-25T21:06:55.510 [DEBUG] [Thread-5731] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:06:55.566 [DEBUG] [Thread-5731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:06:55.567 [DEBUG] [Thread-5731] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:06:55.568 [DEBUG] [Thread-5731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:06:55.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:06:55.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:06:55.626 [DEBUG] [Thread-5731] [transport.py] [_log()] userauth is OK
2025-11-25T21:06:55.626 [DEBUG] [Thread-5731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:06:55.626 [DEBUG] [Thread-5731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:06:55.627 [DEBUG] [Thread-5731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:06:55.627 [DEBUG] [Thread-5731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:06:55.646 [INFO] [Thread-5731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:06:55.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:06:55.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:06:56.478 [DEBUG] [Thread-5731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:06:56.478 [DEBUG] [Thread-5731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:06:56.526 [DEBUG] [Thread-5731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:06:56.527 [DEBUG] [Thread-5731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:06:56.536 [DEBUG] [Thread-5731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:06:56.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:06:56.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:06:56.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:06:56.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:06:56.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:06:56.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:06:56.577 [DEBUG] [Thread-5731] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:06:58.764 [DEBUG] [Thread-5733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:07:05.197 [DEBUG] [Thread-5734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:07:20.238 [DEBUG] [Thread-5735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:07:26.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:07:26.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:07: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
2025-11-25T21:07:27.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 7, 13), 27.33, 15.83, 0.0, 9.69, 21.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:07:27.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:07:13
2025-11-25T21:07:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:07:27.537 [DEBUG] [Thread-5736] [transport.py] [_log()] starting thread (client mode): 0x70d026b0
2025-11-25T21:07:27.537 [DEBUG] [Thread-5736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:07:27.551 [DEBUG] [Thread-5736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:07:27.551 [INFO] [Thread-5736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] client lang: <none>
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] server lang: <none>
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] kex follows: False
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:07:27.554 [DEBUG] [Thread-5736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:07:27.555 [DEBUG] [Thread-5736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:07:27.555 [DEBUG] [Thread-5736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:07:27.555 [DEBUG] [Thread-5736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:07:27.555 [DEBUG] [Thread-5736] [transport.py] [_log()] Compression: none
2025-11-25T21:07:27.555 [DEBUG] [Thread-5736] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:07:27.566 [DEBUG] [Thread-5736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:07:27.566 [DEBUG] [Thread-5736] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:07:27.567 [DEBUG] [Thread-5736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:07:27.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:07:27.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:07:27.568 [DEBUG] [Thread-5736] [transport.py] [_log()] userauth is OK
2025-11-25T21:07:27.568 [DEBUG] [Thread-5736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:07:27.568 [DEBUG] [Thread-5736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:07:27.568 [DEBUG] [Thread-5736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:07:27.569 [DEBUG] [Thread-5736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:07:27.592 [INFO] [Thread-5736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:07:27.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:07:28.191 [DEBUG] [Thread-5736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:07:28.191 [DEBUG] [Thread-5736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:07:28.191 [DEBUG] [Thread-5736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:07:28.232 [DEBUG] [Thread-5736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:07:28.232 [DEBUG] [Thread-5736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:07:28.235 [DEBUG] [Thread-5736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:07:28.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:07:28.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:07:28.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:07:28.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:07:28.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:07:28.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:07:28.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:07:28.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:07:28.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:07:28.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.796627 -999.00  +21.90   5.88     21   -1.30 1 1 1 1 1     0    0 23.22 6.39 ZNESW 6.6 5.9 223.6 8.4 21.8 -25.9 21.8 -25.3 21.6 -24.3 21.7 -25.0
2025-11-25T21:07:28.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:07:28.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:07:28.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.796627
2025-11-25T21:07:28.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:07:28.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:07:28.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:07:28.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:07:28.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:07:28.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:07:13', tmtdew=27.33, humidity=15.83, cloud=0.0, wind=9.69, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:07:13', seeing=1.08, atlas_timestamp='2025-11-25T19:07:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:07:28.258 [DEBUG] [Thread-5736] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:07:28.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:07:28.353 [DEBUG] [Thread-5739] [transport.py] [_log()] starting thread (client mode): 0x70d6abc0
2025-11-25T21:07:28.353 [DEBUG] [Thread-5739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:07:28.367 [DEBUG] [Thread-5739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:07:28.367 [INFO] [Thread-5739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:07:28.374 [DEBUG] [Thread-5739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] client lang: <none>
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] server lang: <none>
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] kex follows: False
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] Compression: none
2025-11-25T21:07:28.375 [DEBUG] [Thread-5739] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:07:28.434 [DEBUG] [Thread-5739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:07:28.434 [DEBUG] [Thread-5739] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:07:28.435 [DEBUG] [Thread-5739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:07:28.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:07:28.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:07:28.489 [DEBUG] [Thread-5739] [transport.py] [_log()] userauth is OK
2025-11-25T21:07:28.490 [DEBUG] [Thread-5739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:07:28.490 [DEBUG] [Thread-5739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:07:28.490 [DEBUG] [Thread-5739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:07:28.490 [DEBUG] [Thread-5739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:07:28.513 [INFO] [Thread-5739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:07:28.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:07:28.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:07:29.405 [DEBUG] [Thread-5739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:07:29.405 [DEBUG] [Thread-5739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:07:29.453 [DEBUG] [Thread-5739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:07:29.453 [DEBUG] [Thread-5739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:07:29.462 [DEBUG] [Thread-5739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:07:29.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:07:29.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:07:29.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:07:29.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:07:29.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:07:29.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:07:29.495 [DEBUG] [Thread-5739] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:07:35.276 [DEBUG] [Thread-5741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:07:37.801 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:07:37.802 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:07:50.326 [DEBUG] [Thread-5742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:07:58.828 [DEBUG] [Thread-5743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:07:59.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:07:59.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:07:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:08:00.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 7, 45), 27.29, 15.82, 0.0, 10.36, 21.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:08:00.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:07:45
2025-11-25T21:08:00.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:08:00.449 [DEBUG] [Thread-5744] [transport.py] [_log()] starting thread (client mode): 0x70d68d60
2025-11-25T21:08:00.450 [DEBUG] [Thread-5744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:08:00.469 [DEBUG] [Thread-5744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:08:00.469 [INFO] [Thread-5744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] client lang: <none>
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] server lang: <none>
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] kex follows: False
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] Compression: none
2025-11-25T21:08:00.470 [DEBUG] [Thread-5744] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:08:00.487 [DEBUG] [Thread-5744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:08:00.487 [DEBUG] [Thread-5744] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:08:00.488 [DEBUG] [Thread-5744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:08:00.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:08:00.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:08:00.488 [DEBUG] [Thread-5744] [transport.py] [_log()] userauth is OK
2025-11-25T21:08:00.488 [DEBUG] [Thread-5744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:08:00.488 [DEBUG] [Thread-5744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:08:00.489 [DEBUG] [Thread-5744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:08:00.489 [DEBUG] [Thread-5744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:08:00.498 [INFO] [Thread-5744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:08:00.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:08:01.115 [DEBUG] [Thread-5744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:08:01.115 [DEBUG] [Thread-5744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:08:01.116 [DEBUG] [Thread-5744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:08:01.157 [DEBUG] [Thread-5744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:08:01.157 [DEBUG] [Thread-5744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:08:01.161 [DEBUG] [Thread-5744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:08:01.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:08:01.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:08:01.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:08:01.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:08:01.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:08:01.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:08:01.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:08:01.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:08:01.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:08:01.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.796974 -999.00  +21.80   6.39     21   -1.40 1 1 1 1 1     0    0 23.62 7.73 ZNESW 6.3 6.4 230.5 8.9 21.8 -25.9 21.8 -25.3 21.5 -24.3 21.8 -25.1
2025-11-25T21:08:01.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:08:01.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:08:01.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.796974
2025-11-25T21:08:01.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:08:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:08:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:08:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:08:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:08:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:07:45', tmtdew=27.29, humidity=15.82, cloud=0.0, wind=10.36, temperature=21.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:07:45', seeing=1.37, atlas_timestamp='2025-11-25T19:07:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:08:01.188 [DEBUG] [Thread-5744] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:08:01.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:08:01.285 [DEBUG] [Thread-5747] [transport.py] [_log()] starting thread (client mode): 0x7374f9d0
2025-11-25T21:08:01.285 [DEBUG] [Thread-5747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:08:01.299 [DEBUG] [Thread-5747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:08:01.299 [INFO] [Thread-5747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] client lang: <none>
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] server lang: <none>
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] kex follows: False
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] Compression: none
2025-11-25T21:08:01.306 [DEBUG] [Thread-5747] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:08:01.366 [DEBUG] [Thread-5747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:08:01.366 [DEBUG] [Thread-5747] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:08:01.367 [DEBUG] [Thread-5747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:08:01.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:08:01.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:08:01.422 [DEBUG] [Thread-5747] [transport.py] [_log()] userauth is OK
2025-11-25T21:08:01.422 [DEBUG] [Thread-5747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:08:01.422 [DEBUG] [Thread-5747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:08:01.422 [DEBUG] [Thread-5747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:08:01.422 [DEBUG] [Thread-5747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:08:01.443 [INFO] [Thread-5747] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:08:01.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:08:01.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:08:02.340 [DEBUG] [Thread-5747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:08:02.341 [DEBUG] [Thread-5747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:08:02.389 [DEBUG] [Thread-5747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:08:02.389 [DEBUG] [Thread-5747] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:08:02.398 [DEBUG] [Thread-5747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:08:02.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:08:02.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:08:02.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:08:02.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:08:02.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:08:02.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:08:02.435 [DEBUG] [Thread-5747] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:08:05.366 [DEBUG] [Thread-5749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:08:20.423 [DEBUG] [Thread-5750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:08:29.579 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:08:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:08:32.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:08:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:08:33.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 8, 17), 27.26, 15.85, 0.0, 10.11, 21.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:08:33.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:08:17
2025-11-25T21:08:33.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:08:33.410 [DEBUG] [Thread-5751] [transport.py] [_log()] starting thread (client mode): 0x70d40b80
2025-11-25T21:08:33.410 [DEBUG] [Thread-5751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:08:33.424 [DEBUG] [Thread-5751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:08:33.424 [INFO] [Thread-5751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] client lang: <none>
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] server lang: <none>
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] kex follows: False
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] Compression: none
2025-11-25T21:08:33.426 [DEBUG] [Thread-5751] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:08:33.439 [DEBUG] [Thread-5751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:08:33.439 [DEBUG] [Thread-5751] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:08:33.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:08:33.440 [DEBUG] [Thread-5751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:08:33.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:08:33.441 [DEBUG] [Thread-5751] [transport.py] [_log()] userauth is OK
2025-11-25T21:08:33.442 [DEBUG] [Thread-5751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:08:33.442 [DEBUG] [Thread-5751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:08:33.442 [DEBUG] [Thread-5751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:08:33.442 [DEBUG] [Thread-5751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:08:33.465 [INFO] [Thread-5751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:08:33.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:08:34.027 [DEBUG] [Thread-5751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:08:34.027 [DEBUG] [Thread-5751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:08:34.027 [DEBUG] [Thread-5751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:08:34.067 [DEBUG] [Thread-5751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:08:34.067 [DEBUG] [Thread-5751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:08:34.069 [DEBUG] [Thread-5751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:08:34.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:08:34.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:08:34.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:08:34.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:08:34.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:08:34.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:08:34.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.797321 -999.00  +21.80   3.98     21   -1.40 1 1 1 1 1     0    0 23.21 7.74 ZNESW 11.8 4.0 257.6 9.8 21.8 -25.9 21.8 -25.2 21.5 -24.2 21.7 -24.9
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.797321
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:08:34.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:08:17', tmtdew=27.26, humidity=15.85, cloud=0.0, wind=10.11, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:08:17', seeing=1.28, atlas_timestamp='2025-11-25T19:08:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:08:34.079 [DEBUG] [Thread-5751] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:08:34.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:08:34.161 [DEBUG] [Thread-5754] [transport.py] [_log()] starting thread (client mode): 0x7374e590
2025-11-25T21:08:34.161 [DEBUG] [Thread-5754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:08:34.176 [DEBUG] [Thread-5754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:08:34.176 [INFO] [Thread-5754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:08:34.183 [DEBUG] [Thread-5754] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:08:34.183 [DEBUG] [Thread-5754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:08:34.183 [DEBUG] [Thread-5754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:08:34.183 [DEBUG] [Thread-5754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] client lang: <none>
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] server lang: <none>
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] kex follows: False
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:08:34.184 [DEBUG] [Thread-5754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:08:34.185 [DEBUG] [Thread-5754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:08:34.185 [DEBUG] [Thread-5754] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:08:34.185 [DEBUG] [Thread-5754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:08:34.185 [DEBUG] [Thread-5754] [transport.py] [_log()] Compression: none
2025-11-25T21:08:34.185 [DEBUG] [Thread-5754] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:08:34.242 [DEBUG] [Thread-5754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:08:34.243 [DEBUG] [Thread-5754] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:08:34.243 [DEBUG] [Thread-5754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:08:34.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:08:34.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:08:34.298 [DEBUG] [Thread-5754] [transport.py] [_log()] userauth is OK
2025-11-25T21:08:34.299 [DEBUG] [Thread-5754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:08:34.299 [DEBUG] [Thread-5754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:08:34.299 [DEBUG] [Thread-5754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:08:34.299 [DEBUG] [Thread-5754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:08:34.319 [INFO] [Thread-5754] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:08:34.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:08:34.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:08:35.151 [DEBUG] [Thread-5754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:08:35.151 [DEBUG] [Thread-5754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:08:35.199 [DEBUG] [Thread-5754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:08:35.199 [DEBUG] [Thread-5754] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:08:35.209 [DEBUG] [Thread-5754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:08:35.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:08:35.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:08:35.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:08:35.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:08:35.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:08:35.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:08:35.245 [DEBUG] [Thread-5754] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:08:35.454 [DEBUG] [Thread-5756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:08:38.002 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:08:38.003 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:08:40.162 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:08:50.508 [DEBUG] [Thread-5757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:08:58.883 [DEBUG] [Thread-5758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:09:05.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:09:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:09:05.537 [DEBUG] [Thread-5759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 8, 49), 27.31, 15.35, 0.0, 9.55, 21.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:09:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:08:49
2025-11-25T21:09:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:09:06.188 [DEBUG] [Thread-5760] [transport.py] [_log()] starting thread (client mode): 0x7374fa60
2025-11-25T21:09:06.189 [DEBUG] [Thread-5760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:09:06.209 [DEBUG] [Thread-5760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:09:06.209 [INFO] [Thread-5760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:09:06.212 [DEBUG] [Thread-5760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:09:06.212 [DEBUG] [Thread-5760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] client lang: <none>
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] server lang: <none>
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] kex follows: False
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] Compression: none
2025-11-25T21:09:06.213 [DEBUG] [Thread-5760] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:09:06.230 [DEBUG] [Thread-5760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:09:06.230 [DEBUG] [Thread-5760] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:09:06.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:09:06.231 [DEBUG] [Thread-5760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:09:06.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:09:06.233 [DEBUG] [Thread-5760] [transport.py] [_log()] userauth is OK
2025-11-25T21:09:06.233 [DEBUG] [Thread-5760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:09:06.234 [DEBUG] [Thread-5760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:09:06.234 [DEBUG] [Thread-5760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:09:06.234 [DEBUG] [Thread-5760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:09:06.257 [INFO] [Thread-5760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:09:06.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:09:06.740 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:06.885 [DEBUG] [Thread-5760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:09:06.885 [DEBUG] [Thread-5760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:09:06.885 [DEBUG] [Thread-5760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:09:06.926 [DEBUG] [Thread-5760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:09:06.926 [DEBUG] [Thread-5760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:09:06.930 [DEBUG] [Thread-5760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:09:06.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:09:06.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:09:06.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:09:06.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:09:06.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:09:06.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:09:06.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:09:06.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:09:06.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:09:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.797321 -999.00  +21.80   3.98     21   -1.40 1 1 1 1 1     0    0 23.21 7.74 ZNESW 11.8 4.0 257.6 9.8 21.8 -25.9 21.8 -25.2 21.5 -24.2 21.7 -24.9
2025-11-25T21:09:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:09:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:09:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.797321
2025-11-25T21:09:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:09:06.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:09:06.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:09:06.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:09:06.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:09:06.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:08:49', tmtdew=27.31, humidity=15.35, cloud=0.0, wind=9.55, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:08:50', seeing=1.18, atlas_timestamp='2025-11-25T19:08:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, 0.08924999999999983, 0.043250000000000455, -0.014499999999999957, 0.057000000000000384, 0.05925000000000047, 0.045999999999999375, -0.010749999999999815, 0.037499999999999645, 0.022500000000000853, 0.09724999999999895, 0.04800000000000004, 0.10249999999999915, 0.07824999999999882, 0.02499999999999858, 0.015499999999999403, 0.04475000000000051, 0.037499999999999645, 0.09199999999999875, 0.040749999999999176, 0.07349999999999923, 0.07174999999999798, 0.01774999999999949, 0.03974999999999973, 0.04399999999999871, 0.0495000000000001, 0.09725000000000072, 0.0990000000000002, 0.19400000000000084, 0.049000000000001265, 0.03500000000000014, 0.06550000000000011, 0.059749999999999304], zp_timestamp='2025-11-25T19:01:00')
2025-11-25T21:09:06.956 [DEBUG] [Thread-5760] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:09:07.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:09:07.051 [DEBUG] [Thread-5763] [transport.py] [_log()] starting thread (client mode): 0x70d6b730
2025-11-25T21:09:07.051 [DEBUG] [Thread-5763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:09:07.065 [DEBUG] [Thread-5763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:09:07.065 [INFO] [Thread-5763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:09:07.073 [DEBUG] [Thread-5763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:09:07.073 [DEBUG] [Thread-5763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:09:07.073 [DEBUG] [Thread-5763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:09:07.073 [DEBUG] [Thread-5763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] client lang: <none>
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] server lang: <none>
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] kex follows: False
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:09:07.074 [DEBUG] [Thread-5763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:09:07.075 [DEBUG] [Thread-5763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:09:07.075 [DEBUG] [Thread-5763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:09:07.075 [DEBUG] [Thread-5763] [transport.py] [_log()] Compression: none
2025-11-25T21:09:07.075 [DEBUG] [Thread-5763] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:09:07.130 [DEBUG] [Thread-5763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:09:07.130 [DEBUG] [Thread-5763] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:09:07.130 [DEBUG] [Thread-5763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:09:07.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:09:07.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:09:07.190 [DEBUG] [Thread-5763] [transport.py] [_log()] userauth is OK
2025-11-25T21:09:07.190 [DEBUG] [Thread-5763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:09:07.190 [DEBUG] [Thread-5763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:09:07.190 [DEBUG] [Thread-5763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:09:07.191 [DEBUG] [Thread-5763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:09:07.209 [INFO] [Thread-5763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:09:07.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:09:07.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:09:08.038 [DEBUG] [Thread-5763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:09:08.038 [DEBUG] [Thread-5763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:09:08.086 [DEBUG] [Thread-5763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:09:08.086 [DEBUG] [Thread-5763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:09:08.096 [DEBUG] [Thread-5763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:09:08.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:09:08.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:09:08.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:09:08.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:09:08.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:09:08.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:09:08.131 [DEBUG] [Thread-5763] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:09:17.163 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:20.572 [DEBUG] [Thread-5765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:35.619 [DEBUG] [Thread-5766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:38.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:09:38.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:09:38.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:09:38.204 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:38.205 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:38.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 9, 21), 27.36, 15.27, 0.0, 10.68, 21.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:09:38.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:09:21
2025-11-25T21:09:38.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:09:39.077 [DEBUG] [Thread-5767] [transport.py] [_log()] starting thread (client mode): 0x70d42e30
2025-11-25T21:09:39.077 [DEBUG] [Thread-5767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:09:39.096 [DEBUG] [Thread-5767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:09:39.097 [INFO] [Thread-5767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:09:39.099 [DEBUG] [Thread-5767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:09:39.099 [DEBUG] [Thread-5767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:09:39.099 [DEBUG] [Thread-5767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:09:39.099 [DEBUG] [Thread-5767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:09:39.099 [DEBUG] [Thread-5767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:09:39.099 [DEBUG] [Thread-5767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:09:39.099 [DEBUG] [Thread-5767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:09:39.099 [DEBUG] [Thread-5767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] client lang: <none>
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] server lang: <none>
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] kex follows: False
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] Compression: none
2025-11-25T21:09:39.100 [DEBUG] [Thread-5767] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:09:39.119 [DEBUG] [Thread-5767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:09:39.119 [DEBUG] [Thread-5767] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:09:39.120 [DEBUG] [Thread-5767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:09:39.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:09:39.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:09:39.122 [DEBUG] [Thread-5767] [transport.py] [_log()] userauth is OK
2025-11-25T21:09:39.122 [DEBUG] [Thread-5767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:09:39.122 [DEBUG] [Thread-5767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:09:39.122 [DEBUG] [Thread-5767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:09:39.122 [DEBUG] [Thread-5767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:09:39.147 [INFO] [Thread-5767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:09:39.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:09:39.791 [DEBUG] [Thread-5767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:09:39.792 [DEBUG] [Thread-5767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:09:39.792 [DEBUG] [Thread-5767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:09:39.833 [DEBUG] [Thread-5767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:09:39.833 [DEBUG] [Thread-5767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:09:39.837 [DEBUG] [Thread-5767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:09:39.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:09:39.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:09:39.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:09:39.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:09:39.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:09:39.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:09:39.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:09:39.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:09:39.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:09:39.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.797668 -999.00  +21.90   7.82     21   -1.40 1 1 1 1 1     0    0 24.05 8.54 ZNESW 5.0 7.8 209.0 15.7 21.8 -25.9 21.8 -25.4 21.5 -24.2 21.7 -25.1
2025-11-25T21:09:39.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:09:39.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:09:39.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.797668
2025-11-25T21:09:39.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:09:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:09:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:09:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:09:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:09:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:09:21', tmtdew=27.36, humidity=15.27, cloud=0.0, wind=10.68, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:09:22', seeing=1.19, atlas_timestamp='2025-11-25T19:08:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, 0.024750000000000938, -0.012749999999998707, -0.034000000000000696, 0.03550000000000075, 0.04625000000000057, 0.0519999999999996, 0.003750000000000142, 0.04400000000000048, 0.018499999999999517, 0.003249999999999531, 0.03599999999999959, 0.10449999999999982, 0.09375, 0.027499999999999858, -0.03500000000000014, 0.03774999999999906, 0.03149999999999942, 0.07299999999999862, 0.017249999999998877, 0.02899999999999814, 0.08124999999999716, -0.005749999999999034, 0.01875000000000071, 0.03649999999999842, 0.05250000000000021, 0.09774999999999956, 0.1014999999999997, 0.15899999999999892, 0.011000000000001009, 0.03700000000000081, -0.007500000000000284, 0.055749999999999744], zp_timestamp='2025-11-25T19:06:00')
2025-11-25T21:09:39.864 [DEBUG] [Thread-5767] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:09:39.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:09:39.959 [DEBUG] [Thread-5770] [transport.py] [_log()] starting thread (client mode): 0x70d43580
2025-11-25T21:09:39.959 [DEBUG] [Thread-5770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:09:39.976 [DEBUG] [Thread-5770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:09:39.977 [INFO] [Thread-5770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:09:39.984 [DEBUG] [Thread-5770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] client lang: <none>
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] server lang: <none>
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] kex follows: False
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:09:39.985 [DEBUG] [Thread-5770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:09:39.986 [DEBUG] [Thread-5770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:09:39.986 [DEBUG] [Thread-5770] [transport.py] [_log()] Compression: none
2025-11-25T21:09:39.986 [DEBUG] [Thread-5770] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:09:40.048 [DEBUG] [Thread-5770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:09:40.049 [DEBUG] [Thread-5770] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:09:40.050 [DEBUG] [Thread-5770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:09:40.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:09:40.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:09:40.106 [DEBUG] [Thread-5770] [transport.py] [_log()] userauth is OK
2025-11-25T21:09:40.107 [DEBUG] [Thread-5770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:09:40.107 [DEBUG] [Thread-5770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:09:40.107 [DEBUG] [Thread-5770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:09:40.107 [DEBUG] [Thread-5770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:09:40.130 [INFO] [Thread-5770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:09:40.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:09:40.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:09:41.002 [DEBUG] [Thread-5770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:09:41.003 [DEBUG] [Thread-5770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:09:41.049 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:41.050 [DEBUG] [Thread-5770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:09:41.050 [DEBUG] [Thread-5770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:09:41.059 [DEBUG] [Thread-5770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:09:41.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:09:41.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:09:41.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:09:41.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:09:41.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:09:41.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:09:41.096 [DEBUG] [Thread-5770] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:09:50.658 [DEBUG] [Thread-5772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:51.452 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:09:58.956 [DEBUG] [Thread-5773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:05.720 [DEBUG] [Thread-5774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:10:11.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:10:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:10:11.343 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:11.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 9, 54), 27.35, 15.35, 0.0, 11.56, 21.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:10:11.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:09:54
2025-11-25T21:10:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:10:12.075 [DEBUG] [Thread-5775] [transport.py] [_log()] starting thread (client mode): 0x70d3ba90
2025-11-25T21:10:12.075 [DEBUG] [Thread-5775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:10:12.094 [DEBUG] [Thread-5775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:10:12.094 [INFO] [Thread-5775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] client lang: <none>
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] server lang: <none>
2025-11-25T21:10:12.098 [DEBUG] [Thread-5775] [transport.py] [_log()] kex follows: False
2025-11-25T21:10:12.099 [DEBUG] [Thread-5775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:10:12.099 [DEBUG] [Thread-5775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:10:12.099 [DEBUG] [Thread-5775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:10:12.099 [DEBUG] [Thread-5775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:10:12.099 [DEBUG] [Thread-5775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:10:12.099 [DEBUG] [Thread-5775] [transport.py] [_log()] Compression: none
2025-11-25T21:10:12.099 [DEBUG] [Thread-5775] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:10:12.119 [DEBUG] [Thread-5775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:10:12.120 [DEBUG] [Thread-5775] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:10:12.120 [DEBUG] [Thread-5775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:10:12.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:10:12.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:10:12.122 [DEBUG] [Thread-5775] [transport.py] [_log()] userauth is OK
2025-11-25T21:10:12.123 [DEBUG] [Thread-5775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:10:12.123 [DEBUG] [Thread-5775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:10:12.123 [DEBUG] [Thread-5775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:10:12.123 [DEBUG] [Thread-5775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:10:12.157 [INFO] [Thread-5775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:10:12.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:10:12.897 [DEBUG] [Thread-5775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:10:12.898 [DEBUG] [Thread-5775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:10:12.898 [DEBUG] [Thread-5775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:10:12.939 [DEBUG] [Thread-5775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:10:12.939 [DEBUG] [Thread-5775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:10:12.942 [DEBUG] [Thread-5775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:10:12.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:10:12.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:10:12.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:10:12.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:10:12.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:10:12.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:10:12.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:10:12.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:10:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:10:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.798363 -999.00  +21.80   5.73     20   -1.50 1 1 1 1 1     0    0 23.85 8.49 ZNESW 4.1 5.7 225.3 11.4 21.8 -25.8 21.8 -25.4 -999.0 -999.0 21.6 -25.0
2025-11-25T21:10:12.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:10:12.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:10:12.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.798363
2025-11-25T21:10:12.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:10:12.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:10:12.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:10:12.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:10:12.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:10:12.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:09:54', tmtdew=27.35, humidity=15.35, cloud=0.0, wind=11.56, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:09:54', seeing=1.16, atlas_timestamp='2025-11-25T19:09:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, 0.024750000000000938, -0.012749999999998707, -0.034000000000000696, 0.03550000000000075, 0.04625000000000057, 0.0519999999999996, 0.003750000000000142, 0.04400000000000048, 0.018499999999999517, 0.003249999999999531, 0.03599999999999959, 0.10449999999999982, 0.09375, 0.027499999999999858, -0.03500000000000014, 0.03774999999999906, 0.03149999999999942, 0.07299999999999862, 0.017249999999998877, 0.02899999999999814, 0.08124999999999716, -0.005749999999999034, 0.01875000000000071, 0.03649999999999842, 0.05250000000000021, 0.09774999999999956, 0.1014999999999997, 0.15899999999999892, 0.011000000000001009, 0.03700000000000081, -0.007500000000000284, 0.055749999999999744], zp_timestamp='2025-11-25T19:06:00')
2025-11-25T21:10:12.970 [DEBUG] [Thread-5775] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:10:13.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:10:13.065 [DEBUG] [Thread-5778] [transport.py] [_log()] starting thread (client mode): 0x70d39810
2025-11-25T21:10:13.065 [DEBUG] [Thread-5778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:10:13.080 [DEBUG] [Thread-5778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:10:13.080 [INFO] [Thread-5778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:10:13.088 [DEBUG] [Thread-5778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:10:13.088 [DEBUG] [Thread-5778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:10:13.088 [DEBUG] [Thread-5778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:10:13.088 [DEBUG] [Thread-5778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:10:13.088 [DEBUG] [Thread-5778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:10:13.088 [DEBUG] [Thread-5778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:10:13.089 [DEBUG] [Thread-5778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:10:13.089 [DEBUG] [Thread-5778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:10:13.089 [DEBUG] [Thread-5778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:10:13.089 [DEBUG] [Thread-5778] [transport.py] [_log()] client lang: <none>
2025-11-25T21:10:13.089 [DEBUG] [Thread-5778] [transport.py] [_log()] server lang: <none>
2025-11-25T21:10:13.089 [DEBUG] [Thread-5778] [transport.py] [_log()] kex follows: False
2025-11-25T21:10:13.089 [DEBUG] [Thread-5778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:10:13.089 [DEBUG] [Thread-5778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:10:13.090 [DEBUG] [Thread-5778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:10:13.090 [DEBUG] [Thread-5778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:10:13.090 [DEBUG] [Thread-5778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:10:13.090 [DEBUG] [Thread-5778] [transport.py] [_log()] Compression: none
2025-11-25T21:10:13.090 [DEBUG] [Thread-5778] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:10:13.150 [DEBUG] [Thread-5778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:10:13.151 [DEBUG] [Thread-5778] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:10:13.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:10:13.152 [DEBUG] [Thread-5778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:10:13.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:10:13.206 [DEBUG] [Thread-5778] [transport.py] [_log()] userauth is OK
2025-11-25T21:10:13.206 [DEBUG] [Thread-5778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:10:13.206 [DEBUG] [Thread-5778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:10:13.206 [DEBUG] [Thread-5778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:10:13.207 [DEBUG] [Thread-5778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:10:13.229 [INFO] [Thread-5778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:10:13.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:10:13.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:10:14.075 [DEBUG] [Thread-5778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:10:14.075 [DEBUG] [Thread-5778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:10:14.123 [DEBUG] [Thread-5778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:10:14.123 [DEBUG] [Thread-5778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:10:14.132 [DEBUG] [Thread-5778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:10:14.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:10:14.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:10:14.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:10:14.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:10:14.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:10:14.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:10:14.167 [DEBUG] [Thread-5778] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:10:20.757 [DEBUG] [Thread-5780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:21.762 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:35.813 [DEBUG] [Thread-5781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:38.405 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:38.406 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:44.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:10:44.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:10:44.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:10:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 10, 26), 27.21, 15.5, 0.0, 11.86, 21.85, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:10:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:10:26
2025-11-25T21:10:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:10:45.187 [DEBUG] [Thread-5782] [transport.py] [_log()] starting thread (client mode): 0x70d6b100
2025-11-25T21:10:45.187 [DEBUG] [Thread-5782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:10:45.206 [DEBUG] [Thread-5782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:10:45.206 [INFO] [Thread-5782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:10:45.209 [DEBUG] [Thread-5782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:10:45.209 [DEBUG] [Thread-5782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:10:45.209 [DEBUG] [Thread-5782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:10:45.209 [DEBUG] [Thread-5782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:10:45.209 [DEBUG] [Thread-5782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:10:45.209 [DEBUG] [Thread-5782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:10:45.209 [DEBUG] [Thread-5782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] client lang: <none>
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] server lang: <none>
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] kex follows: False
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] Compression: none
2025-11-25T21:10:45.210 [DEBUG] [Thread-5782] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:10:45.221 [DEBUG] [Thread-5782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:10:45.221 [DEBUG] [Thread-5782] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:10:45.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:10:45.221 [DEBUG] [Thread-5782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:10:45.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:10:45.222 [DEBUG] [Thread-5782] [transport.py] [_log()] userauth is OK
2025-11-25T21:10:45.222 [DEBUG] [Thread-5782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:10:45.222 [DEBUG] [Thread-5782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:10:45.222 [DEBUG] [Thread-5782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:10:45.222 [DEBUG] [Thread-5782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:10:45.252 [INFO] [Thread-5782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:10:45.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:10:46.018 [DEBUG] [Thread-5782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:10:46.018 [DEBUG] [Thread-5782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:10:46.018 [DEBUG] [Thread-5782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:10:46.059 [DEBUG] [Thread-5782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:10:46.059 [DEBUG] [Thread-5782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:10:46.061 [DEBUG] [Thread-5782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:10:46.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:10:46.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:10:46.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:10:46.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:10:46.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:10:46.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:10:46.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:10:46.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:10:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:10:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.798710 -999.00  +21.80   8.97     21   -1.40 1 1 1 1 1     0    0 24.30 7.88 ZNESW 11.5 9.0 193.4 10.9 21.8 -25.9 21.7 -25.1 21.4 -24.2 21.6 -25.0
2025-11-25T21:10:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:10:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:10:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.798710
2025-11-25T21:10:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:10:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:10:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:10:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:10:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:10:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:10:26', tmtdew=27.21, humidity=15.5, cloud=0.0, wind=11.86, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:10:26', seeing=1.16, atlas_timestamp='2025-11-25T19:10:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, 0.024750000000000938, -0.012749999999998707, -0.034000000000000696, 0.03550000000000075, 0.04625000000000057, 0.0519999999999996, 0.003750000000000142, 0.04400000000000048, 0.018499999999999517, 0.003249999999999531, 0.03599999999999959, 0.10449999999999982, 0.09375, 0.027499999999999858, -0.03500000000000014, 0.03774999999999906, 0.03149999999999942, 0.07299999999999862, 0.017249999999998877, 0.02899999999999814, 0.08124999999999716, -0.005749999999999034, 0.01875000000000071, 0.03649999999999842, 0.05250000000000021, 0.09774999999999956, 0.1014999999999997, 0.15899999999999892, 0.011000000000001009, 0.03700000000000081, -0.007500000000000284, 0.055749999999999744], zp_timestamp='2025-11-25T19:06:00')
2025-11-25T21:10:46.082 [DEBUG] [Thread-5782] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:10:46.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:10:46.169 [DEBUG] [Thread-5785] [transport.py] [_log()] starting thread (client mode): 0x70d6bf10
2025-11-25T21:10:46.169 [DEBUG] [Thread-5785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:10:46.186 [DEBUG] [Thread-5785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:10:46.186 [INFO] [Thread-5785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:10:46.193 [DEBUG] [Thread-5785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:10:46.193 [DEBUG] [Thread-5785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:10:46.193 [DEBUG] [Thread-5785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:10:46.193 [DEBUG] [Thread-5785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:10:46.193 [DEBUG] [Thread-5785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:10:46.193 [DEBUG] [Thread-5785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:10:46.193 [DEBUG] [Thread-5785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:10:46.193 [DEBUG] [Thread-5785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:10:46.193 [DEBUG] [Thread-5785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] client lang: <none>
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] server lang: <none>
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] kex follows: False
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] Compression: none
2025-11-25T21:10:46.194 [DEBUG] [Thread-5785] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:10:46.248 [DEBUG] [Thread-5785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:10:46.248 [DEBUG] [Thread-5785] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:10:46.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:10:46.248 [DEBUG] [Thread-5785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:10:46.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:10:46.306 [DEBUG] [Thread-5785] [transport.py] [_log()] userauth is OK
2025-11-25T21:10:46.306 [DEBUG] [Thread-5785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:10:46.306 [DEBUG] [Thread-5785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:10:46.306 [DEBUG] [Thread-5785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:10:46.306 [DEBUG] [Thread-5785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:10:46.319 [INFO] [Thread-5785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:10:46.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:10:46.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:10:47.186 [DEBUG] [Thread-5785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:10:47.186 [DEBUG] [Thread-5785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:10:47.234 [DEBUG] [Thread-5785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:10:47.234 [DEBUG] [Thread-5785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:10:47.242 [DEBUG] [Thread-5785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:10:47.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:10:47.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:10:47.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:10:47.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:10:47.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:10:47.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:10:47.274 [DEBUG] [Thread-5785] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:10:50.840 [DEBUG] [Thread-5787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:57.300 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:10:59.029 [DEBUG] [Thread-5788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:05.890 [DEBUG] [Thread-5789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:07.711 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:17.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:11:17.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:11:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:11:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 10, 58), 27.13, 15.98, 0.0, 9.32, 21.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:11:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:10:58
2025-11-25T21:11:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:11:18.236 [DEBUG] [Thread-5790] [transport.py] [_log()] starting thread (client mode): 0x70d2a110
2025-11-25T21:11:18.236 [DEBUG] [Thread-5790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:11:18.258 [DEBUG] [Thread-5790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:11:18.258 [INFO] [Thread-5790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:11:18.261 [DEBUG] [Thread-5790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] client lang: <none>
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] server lang: <none>
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] kex follows: False
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:11:18.262 [DEBUG] [Thread-5790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:11:18.263 [DEBUG] [Thread-5790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:11:18.263 [DEBUG] [Thread-5790] [transport.py] [_log()] Compression: none
2025-11-25T21:11:18.263 [DEBUG] [Thread-5790] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:11:18.280 [DEBUG] [Thread-5790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:11:18.281 [DEBUG] [Thread-5790] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:11:18.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:11:18.282 [DEBUG] [Thread-5790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:11:18.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:11:18.284 [DEBUG] [Thread-5790] [transport.py] [_log()] userauth is OK
2025-11-25T21:11:18.284 [DEBUG] [Thread-5790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:11:18.284 [DEBUG] [Thread-5790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:11:18.285 [DEBUG] [Thread-5790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:11:18.285 [DEBUG] [Thread-5790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:11:18.302 [INFO] [Thread-5790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:11:18.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:11:18.957 [DEBUG] [Thread-5790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:11:18.957 [DEBUG] [Thread-5790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:11:18.957 [DEBUG] [Thread-5790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:11:18.997 [DEBUG] [Thread-5790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:11:18.998 [DEBUG] [Thread-5790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:11:19.001 [DEBUG] [Thread-5790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:11:19.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:11:19.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:11:19.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:11:19.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:11:19.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:11:19.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:11:19.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:11:19.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:11:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:11:19.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.799057 -999.00  +21.70   9.42     21   -1.50 1 1 1 1 1     0    0 23.49 7.79 ZNESW 8.5 9.4 206.0 14.3 21.8 -25.9 21.7 -25.3 21.4 -24.1 21.6 -25.1
2025-11-25T21:11:19.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:11:19.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:11:19.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.799057
2025-11-25T21:11:19.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:11:19.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:11:19.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:11:19.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:11:19.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:11:19.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:10:58', tmtdew=27.13, humidity=15.98, cloud=0.0, wind=9.32, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:10:58', seeing=1.25, atlas_timestamp='2025-11-25T19:10:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, 0.024750000000000938, -0.012749999999998707, -0.034000000000000696, 0.03550000000000075, 0.04625000000000057, 0.0519999999999996, 0.003750000000000142, 0.04400000000000048, 0.018499999999999517, 0.003249999999999531, 0.03599999999999959, 0.10449999999999982, 0.09375, 0.027499999999999858, -0.03500000000000014, 0.03774999999999906, 0.03149999999999942, 0.07299999999999862, 0.017249999999998877, 0.02899999999999814, 0.08124999999999716, -0.005749999999999034, 0.01875000000000071, 0.03649999999999842, 0.05250000000000021, 0.09774999999999956, 0.1014999999999997, 0.15899999999999892, 0.011000000000001009, 0.03700000000000081, -0.007500000000000284, 0.055749999999999744], zp_timestamp='2025-11-25T19:06:00')
2025-11-25T21:11:19.028 [DEBUG] [Thread-5790] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:11:19.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:11:19.125 [DEBUG] [Thread-5793] [transport.py] [_log()] starting thread (client mode): 0x70d2a590
2025-11-25T21:11:19.125 [DEBUG] [Thread-5793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:11:19.139 [DEBUG] [Thread-5793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:11:19.140 [INFO] [Thread-5793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:11:19.147 [DEBUG] [Thread-5793] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:11:19.147 [DEBUG] [Thread-5793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:11:19.147 [DEBUG] [Thread-5793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:11:19.147 [DEBUG] [Thread-5793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:11:19.147 [DEBUG] [Thread-5793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] client lang: <none>
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] server lang: <none>
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] kex follows: False
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] Compression: none
2025-11-25T21:11:19.148 [DEBUG] [Thread-5793] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:11:19.206 [DEBUG] [Thread-5793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:11:19.207 [DEBUG] [Thread-5793] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:11:19.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:11:19.208 [DEBUG] [Thread-5793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:11:19.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:11:19.262 [DEBUG] [Thread-5793] [transport.py] [_log()] userauth is OK
2025-11-25T21:11:19.263 [DEBUG] [Thread-5793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:11:19.263 [DEBUG] [Thread-5793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:11:19.263 [DEBUG] [Thread-5793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:11:19.263 [DEBUG] [Thread-5793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:11:19.281 [INFO] [Thread-5793] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:11:19.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:11:19.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:11:20.094 [DEBUG] [Thread-5793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:11:20.094 [DEBUG] [Thread-5793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:11:20.142 [DEBUG] [Thread-5793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:11:20.142 [DEBUG] [Thread-5793] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:11:20.151 [DEBUG] [Thread-5793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:11:20.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:11:20.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:11:20.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:11:20.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:11:20.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:11:20.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:11:20.188 [DEBUG] [Thread-5793] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:11:20.929 [DEBUG] [Thread-5795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:35.975 [DEBUG] [Thread-5796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:38.611 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:38.612 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:38.809 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:49.234 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:50.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:11:50.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:11:50.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:11:50.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 11, 30), 27.23, 15.88, 0.0, 11.1, 21.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:11:50.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:11:30
2025-11-25T21:11:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:11:51.011 [DEBUG] [Thread-5797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:11:51.142 [DEBUG] [Thread-5798] [transport.py] [_log()] starting thread (client mode): 0x7374e590
2025-11-25T21:11:51.142 [DEBUG] [Thread-5798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:11:51.153 [DEBUG] [Thread-5798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:11:51.153 [INFO] [Thread-5798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:11:51.156 [DEBUG] [Thread-5798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:11:51.156 [DEBUG] [Thread-5798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:11:51.156 [DEBUG] [Thread-5798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:11:51.156 [DEBUG] [Thread-5798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:11:51.156 [DEBUG] [Thread-5798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:11:51.156 [DEBUG] [Thread-5798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:11:51.156 [DEBUG] [Thread-5798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:11:51.156 [DEBUG] [Thread-5798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] client lang: <none>
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] server lang: <none>
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] kex follows: False
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] Compression: none
2025-11-25T21:11:51.157 [DEBUG] [Thread-5798] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:11:51.172 [DEBUG] [Thread-5798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:11:51.173 [DEBUG] [Thread-5798] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:11:51.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:11:51.173 [DEBUG] [Thread-5798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:11:51.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:11:51.174 [DEBUG] [Thread-5798] [transport.py] [_log()] userauth is OK
2025-11-25T21:11:51.175 [DEBUG] [Thread-5798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:11:51.175 [DEBUG] [Thread-5798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:11:51.175 [DEBUG] [Thread-5798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:11:51.175 [DEBUG] [Thread-5798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:11:51.206 [INFO] [Thread-5798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:11:51.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:11:51.847 [DEBUG] [Thread-5798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:11:51.847 [DEBUG] [Thread-5798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:11:51.847 [DEBUG] [Thread-5798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:11:51.888 [DEBUG] [Thread-5798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:11:51.888 [DEBUG] [Thread-5798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:11:51.891 [DEBUG] [Thread-5798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:11:51.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:11:51.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:11:51.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:11:51.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:11:51.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:11:51.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:11:51.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:11:51.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:11:51.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:11:51.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.799404 -999.00  +21.70   7.50     21   -1.50 1 1 1 1 1     0    0 23.58 7.32 ZNESW 5.9 7.5 196.8 10.0 21.7 -25.8 21.7 -25.2 21.4 -24.1 21.6 -25.1
2025-11-25T21:11:51.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:11:51.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:11:51.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.799404
2025-11-25T21:11:51.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:11:51.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:11:51.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:11:51.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:11:51.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:11:51.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:11:30', tmtdew=27.23, humidity=15.88, cloud=0.0, wind=11.1, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:11:30', seeing=1.25, atlas_timestamp='2025-11-25T19:11:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, 0.024750000000000938, -0.012749999999998707, -0.034000000000000696, 0.03550000000000075, 0.04625000000000057, 0.0519999999999996, 0.003750000000000142, 0.04400000000000048, 0.018499999999999517, 0.003249999999999531, 0.03599999999999959, 0.10449999999999982, 0.09375, 0.027499999999999858, -0.03500000000000014, 0.03774999999999906, 0.03149999999999942, 0.07299999999999862, 0.017249999999998877, 0.02899999999999814, 0.08124999999999716, -0.005749999999999034, 0.01875000000000071, 0.03649999999999842, 0.05250000000000021, 0.09774999999999956, 0.1014999999999997, 0.15899999999999892, 0.011000000000001009, 0.03700000000000081, -0.007500000000000284, 0.055749999999999744], zp_timestamp='2025-11-25T19:06:00')
2025-11-25T21:11:51.926 [DEBUG] [Thread-5798] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:11:52.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:11:52.023 [DEBUG] [Thread-5801] [transport.py] [_log()] starting thread (client mode): 0x737c6650
2025-11-25T21:11:52.023 [DEBUG] [Thread-5801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:11:52.037 [DEBUG] [Thread-5801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:11:52.037 [INFO] [Thread-5801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:11:52.045 [DEBUG] [Thread-5801] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] client lang: <none>
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] server lang: <none>
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] kex follows: False
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] Compression: none
2025-11-25T21:11:52.046 [DEBUG] [Thread-5801] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:11:52.102 [DEBUG] [Thread-5801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:11:52.102 [DEBUG] [Thread-5801] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:11:52.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:11:52.103 [DEBUG] [Thread-5801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:11:52.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:11:52.159 [DEBUG] [Thread-5801] [transport.py] [_log()] userauth is OK
2025-11-25T21:11:52.160 [DEBUG] [Thread-5801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:11:52.160 [DEBUG] [Thread-5801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:11:52.160 [DEBUG] [Thread-5801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:11:52.160 [DEBUG] [Thread-5801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:11:52.180 [INFO] [Thread-5801] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:11:52.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:11:52.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:11:52.998 [DEBUG] [Thread-5801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:11:52.998 [DEBUG] [Thread-5801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:11:53.052 [DEBUG] [Thread-5801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:11:53.053 [DEBUG] [Thread-5801] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:11:53.062 [DEBUG] [Thread-5801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:11:53.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:11:53.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:11:53.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:11:53.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:11:53.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:11:53.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:11:53.099 [DEBUG] [Thread-5801] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:11:59.079 [DEBUG] [Thread-5803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:06.042 [DEBUG] [Thread-5804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:20.848 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:21.100 [DEBUG] [Thread-5805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:12:23.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:12:23.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:12:23.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 12, 2), 27.28, 15.82, 0.0, 11.2, 21.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:12:23.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:12:02
2025-11-25T21:12:23.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:12:24.049 [DEBUG] [Thread-5806] [transport.py] [_log()] starting thread (client mode): 0x70d6b340
2025-11-25T21:12:24.049 [DEBUG] [Thread-5806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:12:24.072 [DEBUG] [Thread-5806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:12:24.072 [INFO] [Thread-5806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:12:24.076 [DEBUG] [Thread-5806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] client lang: <none>
2025-11-25T21:12:24.077 [DEBUG] [Thread-5806] [transport.py] [_log()] server lang: <none>
2025-11-25T21:12:24.078 [DEBUG] [Thread-5806] [transport.py] [_log()] kex follows: False
2025-11-25T21:12:24.078 [DEBUG] [Thread-5806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:12:24.078 [DEBUG] [Thread-5806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:12:24.078 [DEBUG] [Thread-5806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:12:24.078 [DEBUG] [Thread-5806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:12:24.078 [DEBUG] [Thread-5806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:12:24.078 [DEBUG] [Thread-5806] [transport.py] [_log()] Compression: none
2025-11-25T21:12:24.078 [DEBUG] [Thread-5806] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:12:24.095 [DEBUG] [Thread-5806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:12:24.095 [DEBUG] [Thread-5806] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:12:24.096 [DEBUG] [Thread-5806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:12:24.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:12:24.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:12:24.098 [DEBUG] [Thread-5806] [transport.py] [_log()] userauth is OK
2025-11-25T21:12:24.098 [DEBUG] [Thread-5806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:12:24.098 [DEBUG] [Thread-5806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:12:24.098 [DEBUG] [Thread-5806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:12:24.098 [DEBUG] [Thread-5806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:12:24.117 [INFO] [Thread-5806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:12:24.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:12:24.723 [DEBUG] [Thread-5806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:12:24.724 [DEBUG] [Thread-5806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:12:24.724 [DEBUG] [Thread-5806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:12:24.765 [DEBUG] [Thread-5806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:12:24.765 [DEBUG] [Thread-5806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:12:24.769 [DEBUG] [Thread-5806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:12:24.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:12:24.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:12:24.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:12:24.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:12:24.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:12:24.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:12:24.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:12:24.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:12:24.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:12:24.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.799752 -999.00  +21.70   1.94     21   -1.40 1 1 1 1 1     0    0 23.63 8.80 ZNESW 4.7 1.9 111.7 7.3 21.7 -26.0 21.7 -25.4 21.4 -24.1 21.6 -25.0
2025-11-25T21:12:24.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:12:24.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:12:24.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.799752
2025-11-25T21:12:24.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:12:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:12:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:12:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:12:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:12:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:12:02', tmtdew=27.28, humidity=15.82, cloud=0.0, wind=11.2, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:12:02', seeing=1.29, atlas_timestamp='2025-11-25T19:11:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:12:24.797 [DEBUG] [Thread-5806] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:12:24.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:12:24.893 [DEBUG] [Thread-5809] [transport.py] [_log()] starting thread (client mode): 0x70d3acb0
2025-11-25T21:12:24.893 [DEBUG] [Thread-5809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:12:24.907 [DEBUG] [Thread-5809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:12:24.908 [INFO] [Thread-5809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:12:24.915 [DEBUG] [Thread-5809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] client lang: <none>
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] server lang: <none>
2025-11-25T21:12:24.916 [DEBUG] [Thread-5809] [transport.py] [_log()] kex follows: False
2025-11-25T21:12:24.917 [DEBUG] [Thread-5809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:12:24.917 [DEBUG] [Thread-5809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:12:24.917 [DEBUG] [Thread-5809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:12:24.917 [DEBUG] [Thread-5809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:12:24.917 [DEBUG] [Thread-5809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:12:24.917 [DEBUG] [Thread-5809] [transport.py] [_log()] Compression: none
2025-11-25T21:12:24.917 [DEBUG] [Thread-5809] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:12:24.975 [DEBUG] [Thread-5809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:12:24.975 [DEBUG] [Thread-5809] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:12:24.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:12:24.977 [DEBUG] [Thread-5809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:12:24.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:12:25.030 [DEBUG] [Thread-5809] [transport.py] [_log()] userauth is OK
2025-11-25T21:12:25.031 [DEBUG] [Thread-5809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:12:25.031 [DEBUG] [Thread-5809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:12:25.031 [DEBUG] [Thread-5809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:12:25.031 [DEBUG] [Thread-5809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:12:25.051 [INFO] [Thread-5809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:12:25.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:12:25.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:12:25.906 [DEBUG] [Thread-5809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:12:25.907 [DEBUG] [Thread-5809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:12:25.954 [DEBUG] [Thread-5809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:12:25.955 [DEBUG] [Thread-5809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:12:25.964 [DEBUG] [Thread-5809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:12:25.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:12:25.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:12:25.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:12:25.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:12:25.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:12:25.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:12:26.000 [DEBUG] [Thread-5809] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:12:31.263 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:36.134 [DEBUG] [Thread-5811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:38.844 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:38.845 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:51.174 [DEBUG] [Thread-5812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:12:56.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:12:56.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:12:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 12, 34), 27.14, 15.8, 0.0, 11.03, 21.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:12:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:12:34
2025-11-25T21:12:56.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:12:56.937 [DEBUG] [Thread-5813] [transport.py] [_log()] starting thread (client mode): 0x70d38700
2025-11-25T21:12:56.937 [DEBUG] [Thread-5813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:12:56.956 [DEBUG] [Thread-5813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:12:56.956 [INFO] [Thread-5813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:12:56.959 [DEBUG] [Thread-5813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:12:56.959 [DEBUG] [Thread-5813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:12:56.959 [DEBUG] [Thread-5813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:12:56.959 [DEBUG] [Thread-5813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:12:56.959 [DEBUG] [Thread-5813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:12:56.959 [DEBUG] [Thread-5813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:12:56.959 [DEBUG] [Thread-5813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] client lang: <none>
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] server lang: <none>
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] kex follows: False
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] Compression: none
2025-11-25T21:12:56.960 [DEBUG] [Thread-5813] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:12:56.975 [DEBUG] [Thread-5813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:12:56.976 [DEBUG] [Thread-5813] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:12:56.976 [DEBUG] [Thread-5813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:12:56.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:12:56.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:12:56.978 [DEBUG] [Thread-5813] [transport.py] [_log()] userauth is OK
2025-11-25T21:12:56.979 [DEBUG] [Thread-5813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:12:56.979 [DEBUG] [Thread-5813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:12:56.979 [DEBUG] [Thread-5813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:12:56.979 [DEBUG] [Thread-5813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:12:57.004 [INFO] [Thread-5813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:12:57.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:12:57.651 [DEBUG] [Thread-5813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:12:57.651 [DEBUG] [Thread-5813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:12:57.652 [DEBUG] [Thread-5813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:12:57.693 [DEBUG] [Thread-5813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:12:57.693 [DEBUG] [Thread-5813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:12:57.696 [DEBUG] [Thread-5813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:12:57.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:12:57.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:12:57.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:12:57.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:12:57.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:12:57.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:12:57.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:12:57.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:12:57.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:12:57.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.800099 -999.00  +21.70   4.23     21   -1.50 1 1 1 1 1     0    0 24.15 8.76 ZNESW 5.0 4.2 187.9 8.0 21.6 -25.9 21.6 -25.3 -999.0 -999.0 21.6 -25.2
2025-11-25T21:12:57.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:12:57.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:12:57.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.800099
2025-11-25T21:12:57.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:12:57.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:12:57.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:12:57.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:12:57.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:12:57.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:12:34', tmtdew=27.14, humidity=15.8, cloud=0.0, wind=11.03, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:12:34', seeing=1.27, atlas_timestamp='2025-11-25T19:12:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:12:57.722 [DEBUG] [Thread-5813] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:12:57.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:12:57.817 [DEBUG] [Thread-5816] [transport.py] [_log()] starting thread (client mode): 0x70d28af0
2025-11-25T21:12:57.817 [DEBUG] [Thread-5816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:12:57.832 [DEBUG] [Thread-5816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:12:57.832 [INFO] [Thread-5816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] client lang: <none>
2025-11-25T21:12:57.840 [DEBUG] [Thread-5816] [transport.py] [_log()] server lang: <none>
2025-11-25T21:12:57.841 [DEBUG] [Thread-5816] [transport.py] [_log()] kex follows: False
2025-11-25T21:12:57.841 [DEBUG] [Thread-5816] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:12:57.841 [DEBUG] [Thread-5816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:12:57.841 [DEBUG] [Thread-5816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:12:57.841 [DEBUG] [Thread-5816] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:12:57.841 [DEBUG] [Thread-5816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:12:57.841 [DEBUG] [Thread-5816] [transport.py] [_log()] Compression: none
2025-11-25T21:12:57.841 [DEBUG] [Thread-5816] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:12:57.906 [DEBUG] [Thread-5816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:12:57.907 [DEBUG] [Thread-5816] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:12:57.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:12:57.908 [DEBUG] [Thread-5816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:12:57.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:12:57.962 [DEBUG] [Thread-5816] [transport.py] [_log()] userauth is OK
2025-11-25T21:12:57.963 [DEBUG] [Thread-5816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:12:57.963 [DEBUG] [Thread-5816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:12:57.963 [DEBUG] [Thread-5816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:12:57.963 [DEBUG] [Thread-5816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:12:57.982 [INFO] [Thread-5816] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:12:57.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:12:57.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:12:58.800 [DEBUG] [Thread-5816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:12:58.801 [DEBUG] [Thread-5816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:12:58.849 [DEBUG] [Thread-5816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:12:58.849 [DEBUG] [Thread-5816] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:12:58.858 [DEBUG] [Thread-5816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:12:58.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:12:58.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:12:58.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:12:58.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:12:58.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:12:58.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:12:58.895 [DEBUG] [Thread-5816] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:12:59.135 [DEBUG] [Thread-5818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:12:59.923 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:06.211 [DEBUG] [Thread-5819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:10.534 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:21.281 [DEBUG] [Thread-5820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:28.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:13:28.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:13:28.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:13:29.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 13, 6), 27.1, 15.85, 0.0, 9.37, 21.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:13:29.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:13:06
2025-11-25T21:13:29.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:13:29.841 [DEBUG] [Thread-5821] [transport.py] [_log()] starting thread (client mode): 0x70d3b4c0
2025-11-25T21:13:29.841 [DEBUG] [Thread-5821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:13:29.861 [DEBUG] [Thread-5821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:13:29.862 [INFO] [Thread-5821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:13:29.865 [DEBUG] [Thread-5821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:13:29.865 [DEBUG] [Thread-5821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:13:29.865 [DEBUG] [Thread-5821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:13:29.865 [DEBUG] [Thread-5821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:13:29.865 [DEBUG] [Thread-5821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] client lang: <none>
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] server lang: <none>
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] kex follows: False
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] Compression: none
2025-11-25T21:13:29.866 [DEBUG] [Thread-5821] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:13:29.885 [DEBUG] [Thread-5821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:13:29.886 [DEBUG] [Thread-5821] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:13:29.886 [DEBUG] [Thread-5821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:13:29.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:13:29.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:13:29.888 [DEBUG] [Thread-5821] [transport.py] [_log()] userauth is OK
2025-11-25T21:13:29.888 [DEBUG] [Thread-5821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:13:29.888 [DEBUG] [Thread-5821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:13:29.889 [DEBUG] [Thread-5821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:13:29.889 [DEBUG] [Thread-5821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:13:29.922 [INFO] [Thread-5821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:13:29.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:13:30.555 [DEBUG] [Thread-5821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:13:30.555 [DEBUG] [Thread-5821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:13:30.556 [DEBUG] [Thread-5821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:13:30.597 [DEBUG] [Thread-5821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:13:30.597 [DEBUG] [Thread-5821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:13:30.600 [DEBUG] [Thread-5821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:13:30.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:13:30.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:13:30.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:13:30.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:13:30.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:13:30.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:13:30.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:13:30.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:13:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:13:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.800793 -999.00  +21.60   4.28     21   -1.50 1 1 1 1 1     0    0 23.03 7.71 ZNESW 4.7 4.3 210.7 7.4 21.6 -25.8 21.6 -25.1 21.4 -24.0 21.5 -25.0
2025-11-25T21:13:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:13:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:13:30.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.800793
2025-11-25T21:13:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:13:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:13:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:13:30.630 [DEBUG] [Thread-5821] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:13:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:13:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:13:30.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:13:06', tmtdew=27.1, humidity=15.85, cloud=0.0, wind=9.37, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:13:06', seeing=1.51, atlas_timestamp='2025-11-25T19:13:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:13:30.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:13:30.724 [DEBUG] [Thread-5824] [transport.py] [_log()] starting thread (client mode): 0x70d556c0
2025-11-25T21:13:30.725 [DEBUG] [Thread-5824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:13:30.740 [DEBUG] [Thread-5824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:13:30.741 [INFO] [Thread-5824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:13:30.748 [DEBUG] [Thread-5824] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:13:30.748 [DEBUG] [Thread-5824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:13:30.748 [DEBUG] [Thread-5824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:13:30.748 [DEBUG] [Thread-5824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:13:30.748 [DEBUG] [Thread-5824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:13:30.748 [DEBUG] [Thread-5824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:13:30.748 [DEBUG] [Thread-5824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:13:30.748 [DEBUG] [Thread-5824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:13:30.748 [DEBUG] [Thread-5824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] client lang: <none>
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] server lang: <none>
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] kex follows: False
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] Compression: none
2025-11-25T21:13:30.749 [DEBUG] [Thread-5824] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:13:30.807 [DEBUG] [Thread-5824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:13:30.807 [DEBUG] [Thread-5824] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:13:30.808 [DEBUG] [Thread-5824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:13:30.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:13:30.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:13:30.862 [DEBUG] [Thread-5824] [transport.py] [_log()] userauth is OK
2025-11-25T21:13:30.863 [DEBUG] [Thread-5824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:13:30.863 [DEBUG] [Thread-5824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:13:30.863 [DEBUG] [Thread-5824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:13:30.863 [DEBUG] [Thread-5824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:13:30.883 [INFO] [Thread-5824] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:13:30.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:13:30.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:13:31.776 [DEBUG] [Thread-5824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:13:31.776 [DEBUG] [Thread-5824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:13:31.824 [DEBUG] [Thread-5824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:13:31.825 [DEBUG] [Thread-5824] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:13:31.834 [DEBUG] [Thread-5824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:13:31.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:13:31.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:13:31.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:13:31.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:13:31.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:13:31.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:13:31.869 [DEBUG] [Thread-5824] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:13:33.748 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:36.317 [DEBUG] [Thread-5826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:39.046 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:39.047 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:44.167 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:51.370 [DEBUG] [Thread-5827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:13:59.202 [DEBUG] [Thread-5828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:01.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:14:01.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:14:01.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:14:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 13, 38), 27.15, 15.85, 0.0, 8.44, 21.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:14:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:13:38
2025-11-25T21:14:02.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:14:02.822 [DEBUG] [Thread-5829] [transport.py] [_log()] starting thread (client mode): 0x70d3ab90
2025-11-25T21:14:02.822 [DEBUG] [Thread-5829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:14:02.843 [DEBUG] [Thread-5829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:14:02.843 [INFO] [Thread-5829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:14:02.846 [DEBUG] [Thread-5829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] client lang: <none>
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] server lang: <none>
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] kex follows: False
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] Compression: none
2025-11-25T21:14:02.847 [DEBUG] [Thread-5829] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:14:02.866 [DEBUG] [Thread-5829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:14:02.866 [DEBUG] [Thread-5829] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:14:02.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:14:02.867 [DEBUG] [Thread-5829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:14:02.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:14:02.869 [DEBUG] [Thread-5829] [transport.py] [_log()] userauth is OK
2025-11-25T21:14:02.869 [DEBUG] [Thread-5829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:14:02.869 [DEBUG] [Thread-5829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:14:02.870 [DEBUG] [Thread-5829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:14:02.870 [DEBUG] [Thread-5829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:14:02.894 [INFO] [Thread-5829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:14:02.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:14:03.570 [DEBUG] [Thread-5829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:14:03.570 [DEBUG] [Thread-5829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:14:03.571 [DEBUG] [Thread-5829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:14:03.611 [DEBUG] [Thread-5829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:14:03.611 [DEBUG] [Thread-5829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:14:03.614 [DEBUG] [Thread-5829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:14:03.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:14:03.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:14:03.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:14:03.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:14:03.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:14:03.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:14:03.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:14:03.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:14:03.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:14:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.801141 -999.00  +21.60   4.82     21   -1.50 1 1 1 1 1     0    0 23.50 7.23 ZNESW 6.3 4.8 192.3 7.8 21.6 -25.8 21.6 -25.1 21.4 -24.2 21.5 -25.1
2025-11-25T21:14:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:14:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:14:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.801141
2025-11-25T21:14:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:14:03.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:14:03.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:14:03.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:14:03.641 [DEBUG] [Thread-5829] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:14:03.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:14:03.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:13:38', tmtdew=27.15, humidity=15.85, cloud=0.0, wind=8.44, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:13:38', seeing=1.21, atlas_timestamp='2025-11-25T19:13:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:14:03.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:14:03.737 [DEBUG] [Thread-5832] [transport.py] [_log()] starting thread (client mode): 0x70d29bd0
2025-11-25T21:14:03.737 [DEBUG] [Thread-5832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:14:03.752 [DEBUG] [Thread-5832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:14:03.752 [INFO] [Thread-5832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:14:03.759 [DEBUG] [Thread-5832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] client lang: <none>
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] server lang: <none>
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] kex follows: False
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:14:03.760 [DEBUG] [Thread-5832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:14:03.761 [DEBUG] [Thread-5832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:14:03.761 [DEBUG] [Thread-5832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:14:03.761 [DEBUG] [Thread-5832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:14:03.761 [DEBUG] [Thread-5832] [transport.py] [_log()] Compression: none
2025-11-25T21:14:03.761 [DEBUG] [Thread-5832] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:14:03.822 [DEBUG] [Thread-5832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:14:03.823 [DEBUG] [Thread-5832] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:14:03.824 [DEBUG] [Thread-5832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:14:03.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:14:03.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:14:03.879 [DEBUG] [Thread-5832] [transport.py] [_log()] userauth is OK
2025-11-25T21:14:03.879 [DEBUG] [Thread-5832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:14:03.879 [DEBUG] [Thread-5832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:14:03.879 [DEBUG] [Thread-5832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:14:03.879 [DEBUG] [Thread-5832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:14:03.899 [INFO] [Thread-5832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:14:03.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:14:03.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:14:04.741 [DEBUG] [Thread-5832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:14:04.741 [DEBUG] [Thread-5832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:14:04.790 [DEBUG] [Thread-5832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:14:04.790 [DEBUG] [Thread-5832] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:14:04.799 [DEBUG] [Thread-5832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:14:04.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:14:04.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')
2025-11-25T21:14:04.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:14:04.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:14:04.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:14:04.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:14:04.836 [DEBUG] [Thread-5832] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:14:06.401 [DEBUG] [Thread-5834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:13.518 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:21.450 [DEBUG] [Thread-5835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:23.904 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:34.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:14:34.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:14:34.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:14:35.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 14, 10), 27.1, 15.9, 0.0, 7.34, 21.75, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:14:35.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:14:10
2025-11-25T21:14:35.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:14:35.793 [DEBUG] [Thread-5836] [transport.py] [_log()] starting thread (client mode): 0x70d391b0
2025-11-25T21:14:35.793 [DEBUG] [Thread-5836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:14:35.813 [DEBUG] [Thread-5836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:14:35.813 [INFO] [Thread-5836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] client lang: <none>
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] server lang: <none>
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] kex follows: False
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:14:35.817 [DEBUG] [Thread-5836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:14:35.818 [DEBUG] [Thread-5836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:14:35.818 [DEBUG] [Thread-5836] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:14:35.818 [DEBUG] [Thread-5836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:14:35.818 [DEBUG] [Thread-5836] [transport.py] [_log()] Compression: none
2025-11-25T21:14:35.818 [DEBUG] [Thread-5836] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:14:35.836 [DEBUG] [Thread-5836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:14:35.837 [DEBUG] [Thread-5836] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:14:35.838 [DEBUG] [Thread-5836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:14:35.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:14:35.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:14:35.840 [DEBUG] [Thread-5836] [transport.py] [_log()] userauth is OK
2025-11-25T21:14:35.840 [DEBUG] [Thread-5836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:14:35.840 [DEBUG] [Thread-5836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:14:35.840 [DEBUG] [Thread-5836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:14:35.840 [DEBUG] [Thread-5836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:14:35.876 [INFO] [Thread-5836] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:14:35.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:14:36.481 [DEBUG] [Thread-5836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:14:36.481 [DEBUG] [Thread-5836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:14:36.481 [DEBUG] [Thread-5836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:14:36.483 [DEBUG] [Thread-5838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:36.522 [DEBUG] [Thread-5836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:14:36.522 [DEBUG] [Thread-5836] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:14:36.525 [DEBUG] [Thread-5836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:14:36.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:14:36.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:14:36.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:14:36.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:14:36.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:14:36.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:14:36.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:14:36.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:14:36.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:14:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.801488 -999.00  +21.60   4.57     21   -1.40 1 1 1 1 1     0    0 23.21 6.67 ZNESW 5.2 4.6 261.5 9.7 21.6 -25.7 21.6 -25.2 21.3 -23.9 21.5 -24.9
2025-11-25T21:14:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:14:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:14:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.801488
2025-11-25T21:14:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:14:36.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:14:36.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:14:36.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:14:36.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:14:36.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:14:10', tmtdew=27.1, humidity=15.9, cloud=0.0, wind=7.34, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:14:10', seeing=1.36, atlas_timestamp='2025-11-25T19:14:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:14:36.548 [DEBUG] [Thread-5836] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:14:36.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:14:36.642 [DEBUG] [Thread-5840] [transport.py] [_log()] starting thread (client mode): 0x70d75d20
2025-11-25T21:14:36.642 [DEBUG] [Thread-5840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:14:36.657 [DEBUG] [Thread-5840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:14:36.658 [INFO] [Thread-5840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] client lang: <none>
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] server lang: <none>
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] kex follows: False
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:14:36.665 [DEBUG] [Thread-5840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:14:36.666 [DEBUG] [Thread-5840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:14:36.666 [DEBUG] [Thread-5840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:14:36.666 [DEBUG] [Thread-5840] [transport.py] [_log()] Compression: none
2025-11-25T21:14:36.666 [DEBUG] [Thread-5840] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:14:36.721 [DEBUG] [Thread-5840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:14:36.722 [DEBUG] [Thread-5840] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:14:36.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:14:36.723 [DEBUG] [Thread-5840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:14:36.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:14:36.779 [DEBUG] [Thread-5840] [transport.py] [_log()] userauth is OK
2025-11-25T21:14:36.779 [DEBUG] [Thread-5840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:14:36.779 [DEBUG] [Thread-5840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:14:36.780 [DEBUG] [Thread-5840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:14:36.780 [DEBUG] [Thread-5840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:14:36.798 [INFO] [Thread-5840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:14:36.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:14:36.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:14:37.648 [DEBUG] [Thread-5840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:14:37.649 [DEBUG] [Thread-5840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:14:37.697 [DEBUG] [Thread-5840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:14:37.697 [DEBUG] [Thread-5840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:14:37.706 [DEBUG] [Thread-5840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:14:37.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:14:37.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:14:37.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:14:37.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:14:37.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:14:37.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:14:37.743 [DEBUG] [Thread-5840] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:14:39.250 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:39.251 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:42.080 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:51.520 [DEBUG] [Thread-5842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:52.649 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:14:59.256 [DEBUG] [Thread-5843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:15:06.574 [DEBUG] [Thread-5844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:15:07.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:15:07.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:15:07.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:15:08.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 14, 42), 27.22, 15.87, 0.0, 10.45, 21.75, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:15:08.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:14:42
2025-11-25T21:15:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:15:08.754 [DEBUG] [Thread-5845] [transport.py] [_log()] starting thread (client mode): 0x70d42ce0
2025-11-25T21:15:08.754 [DEBUG] [Thread-5845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:15:08.767 [DEBUG] [Thread-5845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:15:08.767 [INFO] [Thread-5845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] client lang: <none>
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] server lang: <none>
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] kex follows: False
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] Compression: none
2025-11-25T21:15:08.769 [DEBUG] [Thread-5845] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:15:08.781 [DEBUG] [Thread-5845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:15:08.781 [DEBUG] [Thread-5845] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:15:08.781 [DEBUG] [Thread-5845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:15:08.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:15:08.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:15:08.782 [DEBUG] [Thread-5845] [transport.py] [_log()] userauth is OK
2025-11-25T21:15:08.782 [DEBUG] [Thread-5845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:15:08.782 [DEBUG] [Thread-5845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:15:08.782 [DEBUG] [Thread-5845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:15:08.782 [DEBUG] [Thread-5845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:15:08.791 [INFO] [Thread-5845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:15:08.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:15:09.581 [DEBUG] [Thread-5845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:15:09.581 [DEBUG] [Thread-5845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:15:09.581 [DEBUG] [Thread-5845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:15:09.622 [DEBUG] [Thread-5845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:15:09.622 [DEBUG] [Thread-5845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:15:09.624 [DEBUG] [Thread-5845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:15:09.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:15:09.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:15:09.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:15:09.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:15:09.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:15:09.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:15:09.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:15:09.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.801835 -999.00  +21.60   4.41     21   -1.50 1 1 1 1 1     0    0 23.37 5.14 ZNESW 8.2 4.4 230.8 10.2 21.6 -25.8 21.6 -25.2 21.3 -24.2 21.5 -25.0
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.801835
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:15:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:14:42', tmtdew=27.22, humidity=15.87, cloud=0.0, wind=10.45, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:14:42', seeing=1.06, atlas_timestamp='2025-11-25T19:14:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:15:09.638 [DEBUG] [Thread-5845] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:15:09.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:15:09.724 [DEBUG] [Thread-5848] [transport.py] [_log()] starting thread (client mode): 0x70d1f220
2025-11-25T21:15:09.724 [DEBUG] [Thread-5848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:15:09.741 [DEBUG] [Thread-5848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:15:09.741 [INFO] [Thread-5848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:15:09.748 [DEBUG] [Thread-5848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:15:09.748 [DEBUG] [Thread-5848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:15:09.748 [DEBUG] [Thread-5848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] client lang: <none>
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] server lang: <none>
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] kex follows: False
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] Compression: none
2025-11-25T21:15:09.749 [DEBUG] [Thread-5848] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:15:09.807 [DEBUG] [Thread-5848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:15:09.807 [DEBUG] [Thread-5848] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:15:09.807 [DEBUG] [Thread-5848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:15:09.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:15:09.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:15:09.866 [DEBUG] [Thread-5848] [transport.py] [_log()] userauth is OK
2025-11-25T21:15:09.866 [DEBUG] [Thread-5848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:15:09.866 [DEBUG] [Thread-5848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:15:09.866 [DEBUG] [Thread-5848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:15:09.866 [DEBUG] [Thread-5848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:15:09.883 [INFO] [Thread-5848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:15:09.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:15:09.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:15:10.720 [DEBUG] [Thread-5848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:15:10.720 [DEBUG] [Thread-5848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:15:10.768 [DEBUG] [Thread-5848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:15:10.768 [DEBUG] [Thread-5848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:15:10.777 [DEBUG] [Thread-5848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:15:10.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:15:10.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:15:10.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:15:10.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:15:10.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:15:10.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:15:10.815 [DEBUG] [Thread-5848] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:15:21.602 [DEBUG] [Thread-5850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:15:23.943 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:15:34.337 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:15:36.688 [DEBUG] [Thread-5851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:15:39.455 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:15:39.456 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:15:40.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:15:40.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:15:40.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:15:41.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 15, 14), 27.2, 15.9, 0.0, 10.76, 21.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:15:41.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:15:14
2025-11-25T21:15:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:15:41.770 [DEBUG] [Thread-5852] [transport.py] [_log()] starting thread (client mode): 0x70d1e650
2025-11-25T21:15:41.770 [DEBUG] [Thread-5852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:15:41.791 [DEBUG] [Thread-5852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:15:41.791 [INFO] [Thread-5852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:15:41.794 [DEBUG] [Thread-5852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:15:41.794 [DEBUG] [Thread-5852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:15:41.794 [DEBUG] [Thread-5852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] client lang: <none>
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] server lang: <none>
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] kex follows: False
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] Compression: none
2025-11-25T21:15:41.795 [DEBUG] [Thread-5852] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:15:41.813 [DEBUG] [Thread-5852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:15:41.813 [DEBUG] [Thread-5852] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:15:41.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:15:41.814 [DEBUG] [Thread-5852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:15:41.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:15:41.816 [DEBUG] [Thread-5852] [transport.py] [_log()] userauth is OK
2025-11-25T21:15:41.816 [DEBUG] [Thread-5852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:15:41.816 [DEBUG] [Thread-5852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:15:41.816 [DEBUG] [Thread-5852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:15:41.817 [DEBUG] [Thread-5852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:15:41.841 [INFO] [Thread-5852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:15:41.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:15:42.492 [DEBUG] [Thread-5852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:15:42.492 [DEBUG] [Thread-5852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:15:42.492 [DEBUG] [Thread-5852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:15:42.533 [DEBUG] [Thread-5852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:15:42.533 [DEBUG] [Thread-5852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:15:42.535 [DEBUG] [Thread-5852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:15:42.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:15:42.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:15:42.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:15:42.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:15:42.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:15:42.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:15:42.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:15:42.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:15:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:15:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.802182 -999.00  +21.60   6.12     21   -1.50 1 1 1 1 1     0    0 23.03 4.10 ZNESW 3.6 6.1 205.4 9.0 21.6 -25.9 21.6 -25.3 21.3 -24.1 21.5 -25.2
2025-11-25T21:15:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:15:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:15:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.802182
2025-11-25T21:15:42.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:15:42.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:15:42.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:15:42.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:15:42.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:15:42.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:15:14', tmtdew=27.2, humidity=15.9, cloud=0.0, wind=10.76, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:15:14', seeing=1.3, atlas_timestamp='2025-11-25T19:15:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:15:42.556 [DEBUG] [Thread-5852] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:15:42.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:15:42.639 [DEBUG] [Thread-5855] [transport.py] [_log()] starting thread (client mode): 0x70d1ece0
2025-11-25T21:15:42.639 [DEBUG] [Thread-5855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:15:42.653 [DEBUG] [Thread-5855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:15:42.653 [INFO] [Thread-5855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] client lang: <none>
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] server lang: <none>
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] kex follows: False
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] Compression: none
2025-11-25T21:15:42.661 [DEBUG] [Thread-5855] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:15:42.717 [DEBUG] [Thread-5855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:15:42.717 [DEBUG] [Thread-5855] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:15:42.717 [DEBUG] [Thread-5855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:15:42.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:15:42.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:15:42.774 [DEBUG] [Thread-5855] [transport.py] [_log()] userauth is OK
2025-11-25T21:15:42.774 [DEBUG] [Thread-5855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:15:42.774 [DEBUG] [Thread-5855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:15:42.774 [DEBUG] [Thread-5855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:15:42.774 [DEBUG] [Thread-5855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:15:42.788 [INFO] [Thread-5855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:15:42.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:15:42.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:15:43.670 [DEBUG] [Thread-5855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:15:43.671 [DEBUG] [Thread-5855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:15:43.718 [DEBUG] [Thread-5855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:15:43.718 [DEBUG] [Thread-5855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:15:43.726 [DEBUG] [Thread-5855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:15:43.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:15:43.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:15:43.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:15:43.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:15:43.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:15:43.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:15:43.758 [DEBUG] [Thread-5855] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:15:51.722 [DEBUG] [Thread-5857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:15:59.313 [DEBUG] [Thread-5858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:16:06.775 [DEBUG] [Thread-5859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:16:13.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:16:13.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:16:13.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:16:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 15, 46), 27.23, 15.93, 0.0, 9.88, 21.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:16:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:15:46
2025-11-25T21:16:14.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:16:14.718 [DEBUG] [Thread-5860] [transport.py] [_log()] starting thread (client mode): 0x70d74760
2025-11-25T21:16:14.719 [DEBUG] [Thread-5860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:16:14.739 [DEBUG] [Thread-5860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:16:14.739 [INFO] [Thread-5860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:16:14.742 [DEBUG] [Thread-5860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] client lang: <none>
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] server lang: <none>
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] kex follows: False
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] Compression: none
2025-11-25T21:16:14.743 [DEBUG] [Thread-5860] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:16:14.762 [DEBUG] [Thread-5860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:16:14.762 [DEBUG] [Thread-5860] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:16:14.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:16:14.763 [DEBUG] [Thread-5860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:16:14.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:16:14.766 [DEBUG] [Thread-5860] [transport.py] [_log()] userauth is OK
2025-11-25T21:16:14.766 [DEBUG] [Thread-5860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:16:14.766 [DEBUG] [Thread-5860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:16:14.766 [DEBUG] [Thread-5860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:16:14.766 [DEBUG] [Thread-5860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:16:14.791 [INFO] [Thread-5860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:16:14.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:16:15.426 [DEBUG] [Thread-5860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:16:15.426 [DEBUG] [Thread-5860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:16:15.426 [DEBUG] [Thread-5860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:16:15.467 [DEBUG] [Thread-5860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:16:15.467 [DEBUG] [Thread-5860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:16:15.470 [DEBUG] [Thread-5860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:16:15.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:16:15.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:16:15.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:16:15.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:16:15.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:16:15.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:16:15.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:16:15.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:16:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:16:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.802529 -999.00  +21.60   4.94     21   -1.40 1 1 1 1 1     0    0 23.26 3.39 ZNESW 7.3 4.9 227.7 6.7 21.6 -25.8 21.6 -25.2 21.3 -24.1 21.5 -25.0
2025-11-25T21:16:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:16:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:16:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.802529
2025-11-25T21:16:15.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:16:15.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:16:15.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:16:15.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:16:15.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:16:15.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:15:46', tmtdew=27.23, humidity=15.93, cloud=0.0, wind=9.88, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:15:46', seeing=1.3, atlas_timestamp='2025-11-25T19:15:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:16:15.496 [DEBUG] [Thread-5860] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:16:15.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:16:15.592 [DEBUG] [Thread-5863] [transport.py] [_log()] starting thread (client mode): 0x70d1ec80
2025-11-25T21:16:15.592 [DEBUG] [Thread-5863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:16:15.607 [DEBUG] [Thread-5863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:16:15.607 [INFO] [Thread-5863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:16:15.615 [DEBUG] [Thread-5863] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:16:15.615 [DEBUG] [Thread-5863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:16:15.615 [DEBUG] [Thread-5863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:16:15.615 [DEBUG] [Thread-5863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:16:15.615 [DEBUG] [Thread-5863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:16:15.616 [DEBUG] [Thread-5863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:16:15.616 [DEBUG] [Thread-5863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:16:15.616 [DEBUG] [Thread-5863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:16:15.616 [DEBUG] [Thread-5863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:16:15.616 [DEBUG] [Thread-5863] [transport.py] [_log()] client lang: <none>
2025-11-25T21:16:15.616 [DEBUG] [Thread-5863] [transport.py] [_log()] server lang: <none>
2025-11-25T21:16:15.616 [DEBUG] [Thread-5863] [transport.py] [_log()] kex follows: False
2025-11-25T21:16:15.616 [DEBUG] [Thread-5863] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:16:15.616 [DEBUG] [Thread-5863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:16:15.617 [DEBUG] [Thread-5863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:16:15.617 [DEBUG] [Thread-5863] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:16:15.617 [DEBUG] [Thread-5863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:16:15.617 [DEBUG] [Thread-5863] [transport.py] [_log()] Compression: none
2025-11-25T21:16:15.617 [DEBUG] [Thread-5863] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:16:15.675 [DEBUG] [Thread-5863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:16:15.676 [DEBUG] [Thread-5863] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:16:15.676 [DEBUG] [Thread-5863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:16:15.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:16:15.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:16:15.735 [DEBUG] [Thread-5863] [transport.py] [_log()] userauth is OK
2025-11-25T21:16:15.735 [DEBUG] [Thread-5863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:16:15.735 [DEBUG] [Thread-5863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:16:15.735 [DEBUG] [Thread-5863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:16:15.735 [DEBUG] [Thread-5863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:16:15.753 [INFO] [Thread-5863] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:16:15.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:16:15.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:16:16.594 [DEBUG] [Thread-5863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:16:16.594 [DEBUG] [Thread-5863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:16:16.642 [DEBUG] [Thread-5863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:16:16.642 [DEBUG] [Thread-5863] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:16:16.651 [DEBUG] [Thread-5863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:16:16.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:16:16.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:16:16.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:16:16.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:16:16.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:16:16.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:16:16.689 [DEBUG] [Thread-5863] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:16:18.216 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:16:21.809 [DEBUG] [Thread-5865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:16:36.847 [DEBUG] [Thread-5866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:16:39.660 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:16:39.661 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:16:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:16:46.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:16:46.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:16:47.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 16, 18), 27.28, 15.88, 0.0, 9.62, 21.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:16:47.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:16:18
2025-11-25T21:16:47.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:16:47.639 [DEBUG] [Thread-5867] [transport.py] [_log()] starting thread (client mode): 0x70d772e0
2025-11-25T21:16:47.640 [DEBUG] [Thread-5867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:16:47.660 [DEBUG] [Thread-5867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:16:47.660 [INFO] [Thread-5867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] client lang: <none>
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] server lang: <none>
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] kex follows: False
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:16:47.663 [DEBUG] [Thread-5867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:16:47.664 [DEBUG] [Thread-5867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:16:47.664 [DEBUG] [Thread-5867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:16:47.664 [DEBUG] [Thread-5867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:16:47.664 [DEBUG] [Thread-5867] [transport.py] [_log()] Compression: none
2025-11-25T21:16:47.664 [DEBUG] [Thread-5867] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:16:47.682 [DEBUG] [Thread-5867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:16:47.683 [DEBUG] [Thread-5867] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:16:47.683 [DEBUG] [Thread-5867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:16:47.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:16:47.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:16:47.686 [DEBUG] [Thread-5867] [transport.py] [_log()] userauth is OK
2025-11-25T21:16:47.686 [DEBUG] [Thread-5867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:16:47.686 [DEBUG] [Thread-5867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:16:47.686 [DEBUG] [Thread-5867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:16:47.686 [DEBUG] [Thread-5867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:16:47.709 [INFO] [Thread-5867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:16:47.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:16:48.340 [DEBUG] [Thread-5867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:16:48.341 [DEBUG] [Thread-5867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:16:48.341 [DEBUG] [Thread-5867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:16:48.382 [DEBUG] [Thread-5867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:16:48.382 [DEBUG] [Thread-5867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:16:48.386 [DEBUG] [Thread-5867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:16:48.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:16:48.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:16:48.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:16:48.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:16:48.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:16:48.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:16:48.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:16:48.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:16:48.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:16:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.802877 -999.00  +21.60   8.78     21   -1.50 1 1 1 1 1     0    0 22.66 2.61 ZNESW 6.5 8.8 195.2 10.8 21.6 -25.8 21.6 -25.4 21.3 -24.0 21.5 -25.1
2025-11-25T21:16:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:16:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:16:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.802877
2025-11-25T21:16:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:16:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:16:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:16:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:16:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:16:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:16:18', tmtdew=27.28, humidity=15.88, cloud=0.0, wind=9.62, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:16:18', seeing=1.13, atlas_timestamp='2025-11-25T19:16:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:16:48.414 [DEBUG] [Thread-5867] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:16:48.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:16:48.515 [DEBUG] [Thread-5870] [transport.py] [_log()] starting thread (client mode): 0x70d75ae0
2025-11-25T21:16:48.515 [DEBUG] [Thread-5870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:16:48.532 [DEBUG] [Thread-5870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:16:48.532 [INFO] [Thread-5870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:16:48.541 [DEBUG] [Thread-5870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:16:48.541 [DEBUG] [Thread-5870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:16:48.541 [DEBUG] [Thread-5870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:16:48.541 [DEBUG] [Thread-5870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:16:48.541 [DEBUG] [Thread-5870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:16:48.541 [DEBUG] [Thread-5870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:16:48.541 [DEBUG] [Thread-5870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:16:48.541 [DEBUG] [Thread-5870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:16:48.541 [DEBUG] [Thread-5870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] client lang: <none>
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] server lang: <none>
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] kex follows: False
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] Compression: none
2025-11-25T21:16:48.542 [DEBUG] [Thread-5870] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:16:48.598 [DEBUG] [Thread-5870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:16:48.599 [DEBUG] [Thread-5870] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:16:48.600 [DEBUG] [Thread-5870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:16:48.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:16:48.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:16:48.656 [DEBUG] [Thread-5870] [transport.py] [_log()] userauth is OK
2025-11-25T21:16:48.656 [DEBUG] [Thread-5870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:16:48.656 [DEBUG] [Thread-5870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:16:48.656 [DEBUG] [Thread-5870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:16:48.656 [DEBUG] [Thread-5870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:16:48.674 [INFO] [Thread-5870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:16:48.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:16:48.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:16:48.748 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:16:49.506 [DEBUG] [Thread-5870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:16:49.507 [DEBUG] [Thread-5870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:16:49.556 [DEBUG] [Thread-5870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:16:49.556 [DEBUG] [Thread-5870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:16:49.566 [DEBUG] [Thread-5870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:16:49.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:16: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')
2025-11-25T21:16:49.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:16:49.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:16:49.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:16:49.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:16:49.603 [DEBUG] [Thread-5870] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:16:51.880 [DEBUG] [Thread-5872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:16:59.364 [DEBUG] [Thread-5873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:17:06.918 [DEBUG] [Thread-5874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:17:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:17:19.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:17:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:17:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 16, 50), 27.28, 15.82, 0.0, 9.51, 21.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:17:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:16:50
2025-11-25T21:17:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:17:20.545 [DEBUG] [Thread-5875] [transport.py] [_log()] starting thread (client mode): 0x70d57910
2025-11-25T21:17:20.545 [DEBUG] [Thread-5875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:17:20.566 [DEBUG] [Thread-5875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:17:20.566 [INFO] [Thread-5875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] client lang: <none>
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] server lang: <none>
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] kex follows: False
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] Compression: none
2025-11-25T21:17:20.569 [DEBUG] [Thread-5875] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:17:20.586 [DEBUG] [Thread-5875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:17:20.586 [DEBUG] [Thread-5875] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:17:20.587 [DEBUG] [Thread-5875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:17:20.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:17:20.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:17:20.589 [DEBUG] [Thread-5875] [transport.py] [_log()] userauth is OK
2025-11-25T21:17:20.589 [DEBUG] [Thread-5875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:17:20.589 [DEBUG] [Thread-5875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:17:20.589 [DEBUG] [Thread-5875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:17:20.589 [DEBUG] [Thread-5875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:17:20.612 [INFO] [Thread-5875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:17:20.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:17:21.244 [DEBUG] [Thread-5875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:17:21.244 [DEBUG] [Thread-5875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:17:21.245 [DEBUG] [Thread-5875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:17:21.286 [DEBUG] [Thread-5875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:17:21.286 [DEBUG] [Thread-5875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:17:21.290 [DEBUG] [Thread-5875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:17:21.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:17:21.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:17:21.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:17:21.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:17:21.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:17:21.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:17:21.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:17:21.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:17:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:17:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.803571 -999.00  +21.60   6.06     21   -1.50 1 1 1 1 1     0    0 23.53 1.35 ZNESW 5.9 6.1 220.9 9.6 21.6 -25.8 21.6 -25.4 21.2 -24.0 21.4 -25.0
2025-11-25T21:17:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:17:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:17:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.803571
2025-11-25T21:17:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:17:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:17:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:17:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:17:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:17:21.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:16:50', tmtdew=27.28, humidity=15.82, cloud=0.0, wind=9.51, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:16:50', seeing=1.28, atlas_timestamp='2025-11-25T19:17:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:17:21.318 [DEBUG] [Thread-5875] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:17:21.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:17:21.415 [DEBUG] [Thread-5878] [transport.py] [_log()] starting thread (client mode): 0x70d56b90
2025-11-25T21:17:21.415 [DEBUG] [Thread-5878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:17:21.434 [DEBUG] [Thread-5878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:17:21.434 [INFO] [Thread-5878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:17:21.442 [DEBUG] [Thread-5878] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:17:21.442 [DEBUG] [Thread-5878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:17:21.442 [DEBUG] [Thread-5878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:17:21.443 [DEBUG] [Thread-5878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:17:21.443 [DEBUG] [Thread-5878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:17:21.443 [DEBUG] [Thread-5878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:17:21.443 [DEBUG] [Thread-5878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:17:21.443 [DEBUG] [Thread-5878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:17:21.443 [DEBUG] [Thread-5878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:17:21.443 [DEBUG] [Thread-5878] [transport.py] [_log()] client lang: <none>
2025-11-25T21:17:21.443 [DEBUG] [Thread-5878] [transport.py] [_log()] server lang: <none>
2025-11-25T21:17:21.443 [DEBUG] [Thread-5878] [transport.py] [_log()] kex follows: False
2025-11-25T21:17:21.444 [DEBUG] [Thread-5878] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:17:21.444 [DEBUG] [Thread-5878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:17:21.444 [DEBUG] [Thread-5878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:17:21.444 [DEBUG] [Thread-5878] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:17:21.444 [DEBUG] [Thread-5878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:17:21.444 [DEBUG] [Thread-5878] [transport.py] [_log()] Compression: none
2025-11-25T21:17:21.444 [DEBUG] [Thread-5878] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:17:21.502 [DEBUG] [Thread-5878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:17:21.503 [DEBUG] [Thread-5878] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:17:21.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:17:21.504 [DEBUG] [Thread-5878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:17:21.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:17:21.558 [DEBUG] [Thread-5878] [transport.py] [_log()] userauth is OK
2025-11-25T21:17:21.559 [DEBUG] [Thread-5878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:17:21.559 [DEBUG] [Thread-5878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:17:21.559 [DEBUG] [Thread-5878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:17:21.559 [DEBUG] [Thread-5878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:17:21.578 [INFO] [Thread-5878] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:17:21.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:17:21.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:17:21.955 [DEBUG] [Thread-5880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:17:22.401 [DEBUG] [Thread-5878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:17:22.402 [DEBUG] [Thread-5878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:17:22.450 [DEBUG] [Thread-5878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:17:22.450 [DEBUG] [Thread-5878] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:17:22.459 [DEBUG] [Thread-5878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:17:22.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:17:22.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:17:22.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:17:22.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:17:22.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:17:22.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:17:22.494 [DEBUG] [Thread-5878] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:17:37.004 [DEBUG] [Thread-5881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:17:39.874 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:17:39.875 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:17:52.036 [DEBUG] [Thread-5882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:17:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:17:52.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:17:52.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:17:53.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 17, 22), 27.37, 15.72, 0.0, 9.48, 21.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:17:53.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:17:22
2025-11-25T21:17:53.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:17:53.451 [DEBUG] [Thread-5883] [transport.py] [_log()] starting thread (client mode): 0x737c54b0
2025-11-25T21:17:53.451 [DEBUG] [Thread-5883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:17:53.471 [DEBUG] [Thread-5883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:17:53.471 [INFO] [Thread-5883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] client lang: <none>
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] server lang: <none>
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] kex follows: False
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] Compression: none
2025-11-25T21:17:53.475 [DEBUG] [Thread-5883] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:17:53.491 [DEBUG] [Thread-5883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:17:53.492 [DEBUG] [Thread-5883] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:17:53.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:17:53.493 [DEBUG] [Thread-5883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:17:53.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:17:53.495 [DEBUG] [Thread-5883] [transport.py] [_log()] userauth is OK
2025-11-25T21:17:53.495 [DEBUG] [Thread-5883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:17:53.495 [DEBUG] [Thread-5883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:17:53.495 [DEBUG] [Thread-5883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:17:53.495 [DEBUG] [Thread-5883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:17:53.519 [INFO] [Thread-5883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:17:53.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:17:54.165 [DEBUG] [Thread-5883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:17:54.165 [DEBUG] [Thread-5883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:17:54.165 [DEBUG] [Thread-5883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:17:54.206 [DEBUG] [Thread-5883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:17:54.206 [DEBUG] [Thread-5883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:17:54.209 [DEBUG] [Thread-5883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:17:54.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:17:54.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:17:54.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:17:54.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:17:54.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:17:54.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:17:54.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:17:54.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:17:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:17:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.803918 -999.00  +21.60   7.01     21   -1.50 1 1 1 1 1     0    0 23.88 0.40 ZNESW 5.8 7.0 206.0 10.6 21.6 -25.7 21.6 -25.4 21.2 -24.0 21.5 -25.0
2025-11-25T21:17:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:17:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:17:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.803918
2025-11-25T21:17:54.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:17:54.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:17:54.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:17:54.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:17:54.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:17:54.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:17:22', tmtdew=27.37, humidity=15.72, cloud=0.0, wind=9.48, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:17:22', seeing=1.0, atlas_timestamp='2025-11-25T19:17:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, 0.047750000000000625, 0.02325000000000088, 0.00999999999999801, 0.018499999999999517, 0.09575000000000067, 0.013999999999999346, -0.008749999999999147, 0.05699999999999861, 0.04100000000000037, 0.07774999999999821, 0.05749999999999922, 0.09100000000000108, 0.08274999999999899, 0.05799999999999983, 0.042500000000000426, 0.06824999999999903, 0.09549999999999947, 0.08799999999999919, 0.020749999999999602, 0.08299999999999841, 0.08674999999999855, 0.03025000000000233, 0.02674999999999983, 0.049999999999998934, 0.07000000000000028, 0.1042500000000004, 0.10749999999999993, 0.13349999999999973, -0.03199999999999825, 0.061500000000000554, 0.048500000000000654, 0.014749999999999375], zp_timestamp='2025-11-25T19:11:00')
2025-11-25T21:17:54.235 [DEBUG] [Thread-5883] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:17:54.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:17:54.332 [DEBUG] [Thread-5886] [transport.py] [_log()] starting thread (client mode): 0x70d759f0
2025-11-25T21:17:54.332 [DEBUG] [Thread-5886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:17:54.348 [DEBUG] [Thread-5886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:17:54.348 [INFO] [Thread-5886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] client lang: <none>
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] server lang: <none>
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] kex follows: False
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:17:54.356 [DEBUG] [Thread-5886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:17:54.357 [DEBUG] [Thread-5886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:17:54.357 [DEBUG] [Thread-5886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:17:54.357 [DEBUG] [Thread-5886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:17:54.357 [DEBUG] [Thread-5886] [transport.py] [_log()] Compression: none
2025-11-25T21:17:54.357 [DEBUG] [Thread-5886] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:17:54.415 [DEBUG] [Thread-5886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:17:54.415 [DEBUG] [Thread-5886] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:17:54.416 [DEBUG] [Thread-5886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:17:54.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:17:54.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:17:54.471 [DEBUG] [Thread-5886] [transport.py] [_log()] userauth is OK
2025-11-25T21:17:54.471 [DEBUG] [Thread-5886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:17:54.471 [DEBUG] [Thread-5886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:17:54.471 [DEBUG] [Thread-5886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:17:54.471 [DEBUG] [Thread-5886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:17:54.489 [INFO] [Thread-5886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:17:54.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:17:54.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:17:55.348 [DEBUG] [Thread-5886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:17:55.348 [DEBUG] [Thread-5886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:17:55.396 [DEBUG] [Thread-5886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:17:55.396 [DEBUG] [Thread-5886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:17:55.404 [DEBUG] [Thread-5886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:17:55.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:17:55.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:17:55.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:17:55.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:17:55.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:17:55.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:17:55.435 [DEBUG] [Thread-5886] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:17:59.433 [DEBUG] [Thread-5888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:18:07.073 [DEBUG] [Thread-5889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:18:22.132 [DEBUG] [Thread-5890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:18:25.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:18:25.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:18: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
2025-11-25T21:18:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 17, 54), 27.32, 15.7, 0.0, 12.51, 21.75, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:18:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:17:54
2025-11-25T21:18:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:18:26.383 [DEBUG] [Thread-5891] [transport.py] [_log()] starting thread (client mode): 0x70d1de70
2025-11-25T21:18:26.383 [DEBUG] [Thread-5891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:18:26.403 [DEBUG] [Thread-5891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:18:26.404 [INFO] [Thread-5891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:18:26.406 [DEBUG] [Thread-5891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:18:26.406 [DEBUG] [Thread-5891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:18:26.406 [DEBUG] [Thread-5891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:18:26.406 [DEBUG] [Thread-5891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:18:26.406 [DEBUG] [Thread-5891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] client lang: <none>
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] server lang: <none>
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] kex follows: False
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] Compression: none
2025-11-25T21:18:26.407 [DEBUG] [Thread-5891] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:18:26.416 [DEBUG] [Thread-5891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:18:26.416 [DEBUG] [Thread-5891] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:18:26.417 [DEBUG] [Thread-5891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:18:26.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:18:26.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:18:26.461 [DEBUG] [Thread-5891] [transport.py] [_log()] userauth is OK
2025-11-25T21:18:26.461 [DEBUG] [Thread-5891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:18:26.461 [DEBUG] [Thread-5891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:18:26.462 [DEBUG] [Thread-5891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:18:26.462 [DEBUG] [Thread-5891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:18:26.481 [INFO] [Thread-5891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:18:26.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:18:27.081 [DEBUG] [Thread-5891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:18:27.081 [DEBUG] [Thread-5891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:18:27.081 [DEBUG] [Thread-5891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:18:27.122 [DEBUG] [Thread-5891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:18:27.122 [DEBUG] [Thread-5891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:18:27.125 [DEBUG] [Thread-5891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:18:27.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:18:27.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:18:27.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:18:27.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:18:27.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:18:27.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:18:27.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.804266 -999.00  +21.60   5.46     21   -1.60 1 1 1 1 1     0    0 23.25 -0.55 ZNESW 7.8 5.5 199.8 12.1 21.6 -25.8 21.5 -25.1 21.2 -23.8 21.4 -24.9
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.804266
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:18:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:17:54', tmtdew=27.32, humidity=15.7, cloud=0.0, wind=12.51, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:17:54', seeing=0.9, atlas_timestamp='2025-11-25T19:18:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.03325000000000067, 0.039250000000000895, -0.0030000000000001137, 0.0365000000000002, 0.088750000000001, 0.03399999999999892, -0.023749999999999716, 0.043499999999998096, 0.02800000000000047, 0.0417500000000004, 0.005999999999998451, 0.08000000000000007, 0.05424999999999969, 0.0519999999999996, 0.016000000000000014, 0.047750000000000625, 0.061500000000000554, 0.07199999999999918, 0.002249999999998309, 0.08699999999999797, 0.10874999999999879, 0.0012500000000006395, 0.0182500000000001, 0.036999999999999034, 0.0495000000000001, 0.10875000000000057, 0.07749999999999879, 0.09699999999999953, -0.053999999999998494, 0.031000000000000583, 0.053000000000000824, 0.008749999999999147], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:18:27.144 [DEBUG] [Thread-5891] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:18:27.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:18:27.230 [DEBUG] [Thread-5894] [transport.py] [_log()] starting thread (client mode): 0x70d76500
2025-11-25T21:18:27.230 [DEBUG] [Thread-5894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:18:27.244 [DEBUG] [Thread-5894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:18:27.244 [INFO] [Thread-5894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:18:27.251 [DEBUG] [Thread-5894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:18:27.251 [DEBUG] [Thread-5894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] client lang: <none>
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] server lang: <none>
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] kex follows: False
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] Compression: none
2025-11-25T21:18:27.252 [DEBUG] [Thread-5894] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:18:27.309 [DEBUG] [Thread-5894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:18:27.309 [DEBUG] [Thread-5894] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:18:27.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:18:27.310 [DEBUG] [Thread-5894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:18:27.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:18:27.366 [DEBUG] [Thread-5894] [transport.py] [_log()] userauth is OK
2025-11-25T21:18:27.366 [DEBUG] [Thread-5894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:18:27.366 [DEBUG] [Thread-5894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:18:27.366 [DEBUG] [Thread-5894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:18:27.366 [DEBUG] [Thread-5894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:18:27.380 [INFO] [Thread-5894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:18:27.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:18:27.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:18:28.216 [DEBUG] [Thread-5894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:18:28.216 [DEBUG] [Thread-5894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:18:28.264 [DEBUG] [Thread-5894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:18:28.264 [DEBUG] [Thread-5894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:18:28.272 [DEBUG] [Thread-5894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:18:28.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:18:28.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:18:28.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:18:28.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:18:28.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:18:28.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:18:28.304 [DEBUG] [Thread-5894] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:18:37.170 [DEBUG] [Thread-5896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:18:40.075 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:18:40.076 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:18:52.227 [DEBUG] [Thread-5897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:18:58.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:18:58.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:18:58.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:18:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 18, 26), 27.31, 15.73, 0.0, 12.76, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:18:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:18:26
2025-11-25T21:18:59.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:18:59.323 [DEBUG] [Thread-5898] [transport.py] [_log()] starting thread (client mode): 0x70d757b0
2025-11-25T21:18:59.323 [DEBUG] [Thread-5898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:18:59.337 [DEBUG] [Thread-5898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:18:59.338 [INFO] [Thread-5898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] client lang: <none>
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] server lang: <none>
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] kex follows: False
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] Compression: none
2025-11-25T21:18:59.339 [DEBUG] [Thread-5898] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:18:59.357 [DEBUG] [Thread-5898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:18:59.357 [DEBUG] [Thread-5898] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:18:59.357 [DEBUG] [Thread-5898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:18:59.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:18:59.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:18:59.361 [DEBUG] [Thread-5898] [transport.py] [_log()] userauth is OK
2025-11-25T21:18:59.362 [DEBUG] [Thread-5898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:18:59.362 [DEBUG] [Thread-5898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:18:59.362 [DEBUG] [Thread-5898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:18:59.362 [DEBUG] [Thread-5898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:18:59.372 [INFO] [Thread-5898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:18:59.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:18:59.439 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:18:59.485 [DEBUG] [Thread-5900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:18:59.965 [DEBUG] [Thread-5898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:18:59.965 [DEBUG] [Thread-5898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:18:59.965 [DEBUG] [Thread-5898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:19:00.006 [DEBUG] [Thread-5898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:19:00.006 [DEBUG] [Thread-5898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:19:00.008 [DEBUG] [Thread-5898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:19:00.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:19:00.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:19:00.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:19:00.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:19:00.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:19:00.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:19:00.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:19:00.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:19:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:19:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.804613 -999.00  +21.60   4.57     21   -1.60 1 1 1 1 1     0    0 23.02 -1.16 ZNESW 4.8 4.6 237.9 9.2 21.5 -25.8 21.5 -25.2 21.3 -24.0 21.4 -24.9
2025-11-25T21:19:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:19:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:19:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.804613
2025-11-25T21:19:00.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:19:00.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:19:00.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:19:00.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:19:00.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:19:00.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:18:26', tmtdew=27.31, humidity=15.73, cloud=0.0, wind=12.76, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:18:26', seeing=0.9, atlas_timestamp='2025-11-25T19:18:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.03325000000000067, 0.039250000000000895, -0.0030000000000001137, 0.0365000000000002, 0.088750000000001, 0.03399999999999892, -0.023749999999999716, 0.043499999999998096, 0.02800000000000047, 0.0417500000000004, 0.005999999999998451, 0.08000000000000007, 0.05424999999999969, 0.0519999999999996, 0.016000000000000014, 0.047750000000000625, 0.061500000000000554, 0.07199999999999918, 0.002249999999998309, 0.08699999999999797, 0.10874999999999879, 0.0012500000000006395, 0.0182500000000001, 0.036999999999999034, 0.0495000000000001, 0.10875000000000057, 0.07749999999999879, 0.09699999999999953, -0.053999999999998494, 0.031000000000000583, 0.053000000000000824, 0.008749999999999147], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:19:00.026 [DEBUG] [Thread-5898] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:19:00.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:19:00.118 [DEBUG] [Thread-5902] [transport.py] [_log()] starting thread (client mode): 0x70d3b520
2025-11-25T21:19:00.118 [DEBUG] [Thread-5902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:19:00.133 [DEBUG] [Thread-5902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:19:00.133 [INFO] [Thread-5902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] client lang: <none>
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] server lang: <none>
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] kex follows: False
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] Compression: none
2025-11-25T21:19:00.141 [DEBUG] [Thread-5902] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:19:00.197 [DEBUG] [Thread-5902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:19:00.197 [DEBUG] [Thread-5902] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:19:00.197 [DEBUG] [Thread-5902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:19:00.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:19:00.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:19:00.254 [DEBUG] [Thread-5902] [transport.py] [_log()] userauth is OK
2025-11-25T21:19:00.254 [DEBUG] [Thread-5902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:19:00.254 [DEBUG] [Thread-5902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:19:00.254 [DEBUG] [Thread-5902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:19:00.254 [DEBUG] [Thread-5902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:19:00.267 [INFO] [Thread-5902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:19:00.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:19:00.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:19:01.101 [DEBUG] [Thread-5902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:19:01.101 [DEBUG] [Thread-5902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:19:01.149 [DEBUG] [Thread-5902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:19:01.149 [DEBUG] [Thread-5902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:19:01.158 [DEBUG] [Thread-5902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:19:01.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:19:01.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:19:01.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:19:01.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:19:01.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:19:01.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:19:01.197 [DEBUG] [Thread-5902] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:19:07.258 [DEBUG] [Thread-5904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:19:22.307 [DEBUG] [Thread-5905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:19:29.923 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:19:31.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:19:31.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:19:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:19:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 18, 58), 27.36, 15.72, 0.0, 10.73, 21.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:19:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:18:58
2025-11-25T21:19:32.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:19:32.224 [DEBUG] [Thread-5906] [transport.py] [_log()] starting thread (client mode): 0x737c7d60
2025-11-25T21:19:32.225 [DEBUG] [Thread-5906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:19:32.246 [DEBUG] [Thread-5906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:19:32.246 [INFO] [Thread-5906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] client lang: <none>
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] server lang: <none>
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] kex follows: False
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] Compression: none
2025-11-25T21:19:32.247 [DEBUG] [Thread-5906] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:19:32.255 [DEBUG] [Thread-5906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:19:32.255 [DEBUG] [Thread-5906] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:19:32.255 [DEBUG] [Thread-5906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:19:32.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:19:32.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:19:32.255 [DEBUG] [Thread-5906] [transport.py] [_log()] userauth is OK
2025-11-25T21:19:32.256 [DEBUG] [Thread-5906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:19:32.256 [DEBUG] [Thread-5906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:19:32.256 [DEBUG] [Thread-5906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:19:32.256 [DEBUG] [Thread-5906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:19:32.270 [INFO] [Thread-5906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:19:32.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:19:32.912 [DEBUG] [Thread-5906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:19:32.912 [DEBUG] [Thread-5906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:19:32.913 [DEBUG] [Thread-5906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:19:32.953 [DEBUG] [Thread-5906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:19:32.953 [DEBUG] [Thread-5906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:19:32.955 [DEBUG] [Thread-5906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:19:32.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:19:32.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:19:32.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:19:32.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:19:32.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:19:32.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:19:32.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:19:32.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:19:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:19:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.804960 -999.00  +21.70   8.33     20   -1.60 1 1 1 1 1     0    0 23.22 -1.62 ZNESW 4.8 8.3 208.3 8.9 21.6 -25.7 21.5 -25.2 21.2 -24.0 21.4 -24.9
2025-11-25T21:19:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:19:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:19:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.804960
2025-11-25T21:19:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:19:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:19:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:19:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:19:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:19:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:18:58', tmtdew=27.36, humidity=15.72, cloud=0.0, wind=10.73, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:19:30', seeing=1.1, atlas_timestamp='2025-11-25T19:19:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.03325000000000067, 0.039250000000000895, -0.0030000000000001137, 0.0365000000000002, 0.088750000000001, 0.03399999999999892, -0.023749999999999716, 0.043499999999998096, 0.02800000000000047, 0.0417500000000004, 0.005999999999998451, 0.08000000000000007, 0.05424999999999969, 0.0519999999999996, 0.016000000000000014, 0.047750000000000625, 0.061500000000000554, 0.07199999999999918, 0.002249999999998309, 0.08699999999999797, 0.10874999999999879, 0.0012500000000006395, 0.0182500000000001, 0.036999999999999034, 0.0495000000000001, 0.10875000000000057, 0.07749999999999879, 0.09699999999999953, -0.053999999999998494, 0.031000000000000583, 0.053000000000000824, 0.008749999999999147], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:19:32.984 [DEBUG] [Thread-5906] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:19:33.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:19:33.081 [DEBUG] [Thread-5909] [transport.py] [_log()] starting thread (client mode): 0x70d765c0
2025-11-25T21:19:33.081 [DEBUG] [Thread-5909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:19:33.095 [DEBUG] [Thread-5909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:19:33.095 [INFO] [Thread-5909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:19:33.103 [DEBUG] [Thread-5909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:19:33.103 [DEBUG] [Thread-5909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:19:33.103 [DEBUG] [Thread-5909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:19:33.103 [DEBUG] [Thread-5909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:19:33.104 [DEBUG] [Thread-5909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:19:33.104 [DEBUG] [Thread-5909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:19:33.104 [DEBUG] [Thread-5909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:19:33.104 [DEBUG] [Thread-5909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:19:33.104 [DEBUG] [Thread-5909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:19:33.104 [DEBUG] [Thread-5909] [transport.py] [_log()] client lang: <none>
2025-11-25T21:19:33.104 [DEBUG] [Thread-5909] [transport.py] [_log()] server lang: <none>
2025-11-25T21:19:33.104 [DEBUG] [Thread-5909] [transport.py] [_log()] kex follows: False
2025-11-25T21:19:33.104 [DEBUG] [Thread-5909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:19:33.105 [DEBUG] [Thread-5909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:19:33.105 [DEBUG] [Thread-5909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:19:33.105 [DEBUG] [Thread-5909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:19:33.105 [DEBUG] [Thread-5909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:19:33.105 [DEBUG] [Thread-5909] [transport.py] [_log()] Compression: none
2025-11-25T21:19:33.105 [DEBUG] [Thread-5909] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:19:33.165 [DEBUG] [Thread-5909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:19:33.166 [DEBUG] [Thread-5909] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:19:33.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:19:33.167 [DEBUG] [Thread-5909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:19:33.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:19:33.227 [DEBUG] [Thread-5909] [transport.py] [_log()] userauth is OK
2025-11-25T21:19:33.227 [DEBUG] [Thread-5909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:19:33.227 [DEBUG] [Thread-5909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:19:33.227 [DEBUG] [Thread-5909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:19:33.227 [DEBUG] [Thread-5909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:19:33.247 [INFO] [Thread-5909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:19:33.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:19:33.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:19:34.070 [DEBUG] [Thread-5909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:19:34.070 [DEBUG] [Thread-5909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:19:34.118 [DEBUG] [Thread-5909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:19:34.118 [DEBUG] [Thread-5909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:19:34.128 [DEBUG] [Thread-5909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:19:34.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:19:34.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:19:34.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:19:34.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:19:34.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:19:34.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:19:34.166 [DEBUG] [Thread-5909] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:19:37.340 [DEBUG] [Thread-5911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:19:40.278 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:19:40.279 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:19:52.388 [DEBUG] [Thread-5912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:19:59.560 [DEBUG] [Thread-5913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:20:04.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:20:04.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:20:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:20:04.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 19, 30), 27.36, 15.73, 0.0, 8.59, 21.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:20:04.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:19:30
2025-11-25T21:20:05.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:20:05.215 [DEBUG] [Thread-5914] [transport.py] [_log()] starting thread (client mode): 0x70d74af0
2025-11-25T21:20:05.215 [DEBUG] [Thread-5914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:20:05.230 [DEBUG] [Thread-5914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:20:05.230 [INFO] [Thread-5914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:20:05.233 [DEBUG] [Thread-5914] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:20:05.233 [DEBUG] [Thread-5914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] client lang: <none>
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] server lang: <none>
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] kex follows: False
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] Compression: none
2025-11-25T21:20:05.234 [DEBUG] [Thread-5914] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:20:05.249 [DEBUG] [Thread-5914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:20:05.249 [DEBUG] [Thread-5914] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:20:05.249 [DEBUG] [Thread-5914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:20:05.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:20:05.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:20:05.250 [DEBUG] [Thread-5914] [transport.py] [_log()] userauth is OK
2025-11-25T21:20:05.250 [DEBUG] [Thread-5914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:20:05.250 [DEBUG] [Thread-5914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:20:05.250 [DEBUG] [Thread-5914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:20:05.250 [DEBUG] [Thread-5914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:20:05.280 [INFO] [Thread-5914] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:20:05.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:20:06.134 [DEBUG] [Thread-5914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:20:06.134 [DEBUG] [Thread-5914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:20:06.134 [DEBUG] [Thread-5914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:20:06.175 [DEBUG] [Thread-5914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:20:06.175 [DEBUG] [Thread-5914] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:20:06.177 [DEBUG] [Thread-5914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:20:06.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:20:06.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:20:06.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:20:06.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:20:06.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:20:06.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:20:06.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:20:06.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.804960 -999.00  +21.70   8.33     20   -1.60 1 1 1 1 1     0    0 23.22 -1.62 ZNESW 4.8 8.3 208.3 8.9 21.6 -25.7 21.5 -25.2 21.2 -24.0 21.4 -24.9
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.804960
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:20:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:19:30', tmtdew=27.36, humidity=15.73, cloud=0.0, wind=8.59, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:20:02', seeing=1.05, atlas_timestamp='2025-11-25T19:19:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.03325000000000067, 0.039250000000000895, -0.0030000000000001137, 0.0365000000000002, 0.088750000000001, 0.03399999999999892, -0.023749999999999716, 0.043499999999998096, 0.02800000000000047, 0.0417500000000004, 0.005999999999998451, 0.08000000000000007, 0.05424999999999969, 0.0519999999999996, 0.016000000000000014, 0.047750000000000625, 0.061500000000000554, 0.07199999999999918, 0.002249999999998309, 0.08699999999999797, 0.10874999999999879, 0.0012500000000006395, 0.0182500000000001, 0.036999999999999034, 0.0495000000000001, 0.10875000000000057, 0.07749999999999879, 0.09699999999999953, -0.053999999999998494, 0.031000000000000583, 0.053000000000000824, 0.008749999999999147], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:20:06.196 [DEBUG] [Thread-5914] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:20:06.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:20:06.280 [DEBUG] [Thread-5917] [transport.py] [_log()] starting thread (client mode): 0x70d29a80
2025-11-25T21:20:06.280 [DEBUG] [Thread-5917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:20:06.295 [DEBUG] [Thread-5917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:20:06.295 [INFO] [Thread-5917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:20:06.302 [DEBUG] [Thread-5917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:20:06.302 [DEBUG] [Thread-5917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:20:06.302 [DEBUG] [Thread-5917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:20:06.302 [DEBUG] [Thread-5917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:20:06.302 [DEBUG] [Thread-5917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:20:06.302 [DEBUG] [Thread-5917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:20:06.302 [DEBUG] [Thread-5917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:20:06.302 [DEBUG] [Thread-5917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:20:06.302 [DEBUG] [Thread-5917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] client lang: <none>
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] server lang: <none>
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] kex follows: False
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] Compression: none
2025-11-25T21:20:06.303 [DEBUG] [Thread-5917] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:20:06.360 [DEBUG] [Thread-5917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:20:06.361 [DEBUG] [Thread-5917] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:20:06.361 [DEBUG] [Thread-5917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:20:06.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:20:06.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:20:06.418 [DEBUG] [Thread-5917] [transport.py] [_log()] userauth is OK
2025-11-25T21:20:06.418 [DEBUG] [Thread-5917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:20:06.418 [DEBUG] [Thread-5917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:20:06.418 [DEBUG] [Thread-5917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:20:06.418 [DEBUG] [Thread-5917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:20:06.431 [INFO] [Thread-5917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:20:06.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:20:06.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:20:07.229 [DEBUG] [Thread-5917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:20:07.229 [DEBUG] [Thread-5917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:20:07.277 [DEBUG] [Thread-5917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:20:07.277 [DEBUG] [Thread-5917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:20:07.285 [DEBUG] [Thread-5917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:20:07.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:20:07.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:20:07.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:20:07.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:20:07.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:20:07.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:20:07.317 [DEBUG] [Thread-5917] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:20:07.418 [DEBUG] [Thread-5919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:20:22.460 [DEBUG] [Thread-5920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:20:37.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:20:37.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:20:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:20:37.494 [DEBUG] [Thread-5921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:20:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 20, 34), 27.48, 15.15, 0.0, 7.69, 21.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:20:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:20:34
2025-11-25T21:20:38.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:20:38.296 [DEBUG] [Thread-5922] [transport.py] [_log()] starting thread (client mode): 0x70d75510
2025-11-25T21:20:38.296 [DEBUG] [Thread-5922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:20:38.317 [DEBUG] [Thread-5922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:20:38.317 [INFO] [Thread-5922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] client lang: <none>
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] server lang: <none>
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] kex follows: False
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:20:38.320 [DEBUG] [Thread-5922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:20:38.321 [DEBUG] [Thread-5922] [transport.py] [_log()] Compression: none
2025-11-25T21:20:38.321 [DEBUG] [Thread-5922] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:20:38.338 [DEBUG] [Thread-5922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:20:38.339 [DEBUG] [Thread-5922] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:20:38.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:20:38.340 [DEBUG] [Thread-5922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:20:38.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:20:38.342 [DEBUG] [Thread-5922] [transport.py] [_log()] userauth is OK
2025-11-25T21:20:38.342 [DEBUG] [Thread-5922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:20:38.342 [DEBUG] [Thread-5922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:20:38.342 [DEBUG] [Thread-5922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:20:38.343 [DEBUG] [Thread-5922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:20:38.361 [INFO] [Thread-5922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:20:38.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:20:39.031 [DEBUG] [Thread-5922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:20:39.032 [DEBUG] [Thread-5922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:20:39.032 [DEBUG] [Thread-5922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:20:39.073 [DEBUG] [Thread-5922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:20:39.073 [DEBUG] [Thread-5922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:20:39.077 [DEBUG] [Thread-5922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:20:39.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:20:39.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:20:39.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:20:39.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:20:39.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:20:39.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:20:39.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:20:39.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:20:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:20:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.805307 -999.00  +21.70   8.45     20   -1.60 1 1 1 1 1     0    0 23.22 -1.25 ZNESW 7.1 8.4 222.7 9.5 21.5 -25.8 21.6 -25.3 21.2 -23.9 21.4 -24.9
2025-11-25T21:20:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:20:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:20:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.805307
2025-11-25T21:20:39.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:20:39.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:20:39.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:20:39.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:20:39.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:20:39.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:20:34', tmtdew=27.48, humidity=15.15, cloud=0.0, wind=7.69, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:20:34', seeing=1.42, atlas_timestamp='2025-11-25T19:19:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.03325000000000067, 0.039250000000000895, -0.0030000000000001137, 0.0365000000000002, 0.088750000000001, 0.03399999999999892, -0.023749999999999716, 0.043499999999998096, 0.02800000000000047, 0.0417500000000004, 0.005999999999998451, 0.08000000000000007, 0.05424999999999969, 0.0519999999999996, 0.016000000000000014, 0.047750000000000625, 0.061500000000000554, 0.07199999999999918, 0.002249999999998309, 0.08699999999999797, 0.10874999999999879, 0.0012500000000006395, 0.0182500000000001, 0.036999999999999034, 0.0495000000000001, 0.10875000000000057, 0.07749999999999879, 0.09699999999999953, -0.053999999999998494, 0.031000000000000583, 0.053000000000000824, 0.008749999999999147], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:20:39.103 [DEBUG] [Thread-5922] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:20:39.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:20:39.197 [DEBUG] [Thread-5925] [transport.py] [_log()] starting thread (client mode): 0x70d54730
2025-11-25T21:20:39.197 [DEBUG] [Thread-5925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:20:39.212 [DEBUG] [Thread-5925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:20:39.212 [INFO] [Thread-5925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] client lang: <none>
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] server lang: <none>
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] kex follows: False
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:20:39.220 [DEBUG] [Thread-5925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:20:39.221 [DEBUG] [Thread-5925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:20:39.221 [DEBUG] [Thread-5925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:20:39.221 [DEBUG] [Thread-5925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:20:39.221 [DEBUG] [Thread-5925] [transport.py] [_log()] Compression: none
2025-11-25T21:20:39.221 [DEBUG] [Thread-5925] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:20:39.277 [DEBUG] [Thread-5925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:20:39.277 [DEBUG] [Thread-5925] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:20:39.278 [DEBUG] [Thread-5925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:20:39.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:20:39.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:20:39.335 [DEBUG] [Thread-5925] [transport.py] [_log()] userauth is OK
2025-11-25T21:20:39.335 [DEBUG] [Thread-5925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:20:39.336 [DEBUG] [Thread-5925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:20:39.336 [DEBUG] [Thread-5925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:20:39.336 [DEBUG] [Thread-5925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:20:39.360 [INFO] [Thread-5925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:20:39.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:20:39.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:20:40.217 [DEBUG] [Thread-5925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:20:40.217 [DEBUG] [Thread-5925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:20:40.266 [DEBUG] [Thread-5925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:20:40.266 [DEBUG] [Thread-5925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:20:40.275 [DEBUG] [Thread-5925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:20:40.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:20:40.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:20:40.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:20:40.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:20:40.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:20:40.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:20:40.311 [DEBUG] [Thread-5925] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:20:40.478 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:20:40.479 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:20:52.524 [DEBUG] [Thread-5927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:20:59.633 [DEBUG] [Thread-5928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:21:07.574 [DEBUG] [Thread-5929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:21:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:21:10.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:21:10.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:21:11.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 21, 6), 27.37, 15.27, 0.0, 8.79, 21.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:21:11.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:21:06
2025-11-25T21:21:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:21:11.275 [DEBUG] [Thread-5930] [transport.py] [_log()] starting thread (client mode): 0x70d1dff0
2025-11-25T21:21:11.276 [DEBUG] [Thread-5930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:21:11.297 [DEBUG] [Thread-5930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:21:11.297 [INFO] [Thread-5930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] client lang: <none>
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] server lang: <none>
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] kex follows: False
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] Compression: none
2025-11-25T21:21:11.300 [DEBUG] [Thread-5930] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:21:11.318 [DEBUG] [Thread-5930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:21:11.318 [DEBUG] [Thread-5930] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:21:11.319 [DEBUG] [Thread-5930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:21:11.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:21:11.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:21:11.321 [DEBUG] [Thread-5930] [transport.py] [_log()] userauth is OK
2025-11-25T21:21:11.321 [DEBUG] [Thread-5930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:21:11.321 [DEBUG] [Thread-5930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:21:11.321 [DEBUG] [Thread-5930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:21:11.321 [DEBUG] [Thread-5930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:21:11.340 [INFO] [Thread-5930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:21:11.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:21:11.632 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:21:12.146 [DEBUG] [Thread-5930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:21:12.146 [DEBUG] [Thread-5930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:21:12.146 [DEBUG] [Thread-5930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:21:12.186 [DEBUG] [Thread-5930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:21:12.186 [DEBUG] [Thread-5930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:21:12.189 [DEBUG] [Thread-5930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:21:12.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:21:12.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:21:12.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:21:12.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:21:12.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:21:12.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:21:12.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:21:12.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:21:12.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:21:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.806002 -999.00  +21.70   4.66     20   -1.60 1 1 1 1 1     0    0 22.43 -1.07 ZNESW 5.9 4.7 265.0 10.6 21.5 -25.9 21.5 -25.4 21.2 -23.9 21.4 -25.0
2025-11-25T21:21:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:21:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:21:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.806002
2025-11-25T21:21:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:21:12.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:21:12.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:21:12.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:21:12.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:21:12.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:21:06', tmtdew=27.37, humidity=15.27, cloud=0.0, wind=8.79, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:21:06', seeing=1.28, atlas_timestamp='2025-11-25T19:20:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.03325000000000067, 0.039250000000000895, -0.0030000000000001137, 0.0365000000000002, 0.088750000000001, 0.03399999999999892, -0.023749999999999716, 0.043499999999998096, 0.02800000000000047, 0.0417500000000004, 0.005999999999998451, 0.08000000000000007, 0.05424999999999969, 0.0519999999999996, 0.016000000000000014, 0.047750000000000625, 0.061500000000000554, 0.07199999999999918, 0.002249999999998309, 0.08699999999999797, 0.10874999999999879, 0.0012500000000006395, 0.0182500000000001, 0.036999999999999034, 0.0495000000000001, 0.10875000000000057, 0.07749999999999879, 0.09699999999999953, -0.053999999999998494, 0.031000000000000583, 0.053000000000000824, 0.008749999999999147], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:21:12.212 [DEBUG] [Thread-5930] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:21:12.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:21:12.302 [DEBUG] [Thread-5933] [transport.py] [_log()] starting thread (client mode): 0x70d76620
2025-11-25T21:21:12.302 [DEBUG] [Thread-5933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:21:12.317 [DEBUG] [Thread-5933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:21:12.317 [INFO] [Thread-5933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:21:12.324 [DEBUG] [Thread-5933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:21:12.324 [DEBUG] [Thread-5933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:21:12.324 [DEBUG] [Thread-5933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] client lang: <none>
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] server lang: <none>
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] kex follows: False
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] Compression: none
2025-11-25T21:21:12.325 [DEBUG] [Thread-5933] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:21:12.382 [DEBUG] [Thread-5933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:21:12.383 [DEBUG] [Thread-5933] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:21:12.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:21:12.384 [DEBUG] [Thread-5933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:21:12.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:21:12.438 [DEBUG] [Thread-5933] [transport.py] [_log()] userauth is OK
2025-11-25T21:21:12.438 [DEBUG] [Thread-5933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:21:12.438 [DEBUG] [Thread-5933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:21:12.438 [DEBUG] [Thread-5933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:21:12.439 [DEBUG] [Thread-5933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:21:12.458 [INFO] [Thread-5933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:21:12.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:21:12.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:21:13.325 [DEBUG] [Thread-5933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:21:13.326 [DEBUG] [Thread-5933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:21:13.373 [DEBUG] [Thread-5933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:21:13.373 [DEBUG] [Thread-5933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:21:13.382 [DEBUG] [Thread-5933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:21:13.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:21:13.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:21:13.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:21:13.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:21:13.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:21:13.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:21:13.416 [DEBUG] [Thread-5933] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:21:22.599 [DEBUG] [Thread-5935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:21:37.642 [DEBUG] [Thread-5936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:21:40.681 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:21:40.682 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:21:43.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:21:43.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:21:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:21:44.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 21, 38), 27.42, 15.27, 0.0, 9.97, 21.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:21:44.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:21:38
2025-11-25T21:21:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:21:44.389 [DEBUG] [Thread-5937] [transport.py] [_log()] starting thread (client mode): 0x70d29ab0
2025-11-25T21:21:44.389 [DEBUG] [Thread-5937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:21:44.404 [DEBUG] [Thread-5937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:21:44.405 [INFO] [Thread-5937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:21:44.408 [DEBUG] [Thread-5937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:21:44.408 [DEBUG] [Thread-5937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:21:44.408 [DEBUG] [Thread-5937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:21:44.408 [DEBUG] [Thread-5937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:21:44.408 [DEBUG] [Thread-5937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:21:44.408 [DEBUG] [Thread-5937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:21:44.408 [DEBUG] [Thread-5937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] client lang: <none>
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] server lang: <none>
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] kex follows: False
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] Compression: none
2025-11-25T21:21:44.409 [DEBUG] [Thread-5937] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:21:44.429 [DEBUG] [Thread-5937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:21:44.429 [DEBUG] [Thread-5937] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:21:44.430 [DEBUG] [Thread-5937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:21:44.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:21:44.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:21:44.432 [DEBUG] [Thread-5937] [transport.py] [_log()] userauth is OK
2025-11-25T21:21:44.432 [DEBUG] [Thread-5937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:21:44.433 [DEBUG] [Thread-5937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:21:44.433 [DEBUG] [Thread-5937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:21:44.433 [DEBUG] [Thread-5937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:21:44.453 [INFO] [Thread-5937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:21:44.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:21:45.097 [DEBUG] [Thread-5937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:21:45.097 [DEBUG] [Thread-5937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:21:45.097 [DEBUG] [Thread-5937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:21:45.138 [DEBUG] [Thread-5937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:21:45.138 [DEBUG] [Thread-5937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:21:45.141 [DEBUG] [Thread-5937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:21:45.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:21:45.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:21:45.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:21:45.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:21:45.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:21:45.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:21:45.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:21:45.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:21:45.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:21:45.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.806349 -999.00  +21.70   4.93     20   -1.60 1 1 1 1 1     0    0 22.91 -1.17 ZNESW 4.4 4.9 189.2 8.4 21.5 -25.9 21.5 -25.3 21.2 -24.1 21.4 -25.0
2025-11-25T21:21:45.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:21:45.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:21:45.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.806349
2025-11-25T21:21:45.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:21:45.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:21:45.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:21:45.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:21:45.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:21:45.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:21:38', tmtdew=27.42, humidity=15.27, cloud=0.0, wind=9.97, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:21:38', seeing=0.93, atlas_timestamp='2025-11-25T19:21:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:21:45.160 [DEBUG] [Thread-5937] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:21:45.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:21:45.249 [DEBUG] [Thread-5940] [transport.py] [_log()] starting thread (client mode): 0x70d43fa0
2025-11-25T21:21:45.250 [DEBUG] [Thread-5940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:21:45.264 [DEBUG] [Thread-5940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:21:45.265 [INFO] [Thread-5940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] client lang: <none>
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] server lang: <none>
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] kex follows: False
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] Compression: none
2025-11-25T21:21:45.272 [DEBUG] [Thread-5940] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:21:45.329 [DEBUG] [Thread-5940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:21:45.329 [DEBUG] [Thread-5940] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:21:45.329 [DEBUG] [Thread-5940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:21:45.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:21:45.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:21:45.387 [DEBUG] [Thread-5940] [transport.py] [_log()] userauth is OK
2025-11-25T21:21:45.387 [DEBUG] [Thread-5940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:21:45.387 [DEBUG] [Thread-5940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:21:45.387 [DEBUG] [Thread-5940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:21:45.387 [DEBUG] [Thread-5940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:21:45.406 [INFO] [Thread-5940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:21:45.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:21:45.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:21:46.318 [DEBUG] [Thread-5940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:21:46.318 [DEBUG] [Thread-5940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:21:46.366 [DEBUG] [Thread-5940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:21:46.366 [DEBUG] [Thread-5940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:21:46.375 [DEBUG] [Thread-5940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:21:46.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:21:46.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:21:46.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:21:46.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:21:46.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:21:46.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:21:46.412 [DEBUG] [Thread-5940] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:21:52.678 [DEBUG] [Thread-5942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:21:59.685 [DEBUG] [Thread-5943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:22:07.738 [DEBUG] [Thread-5944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:22:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:22:16.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:22:16.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:22:17.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 22, 10), 27.44, 15.25, 0.0, 9.26, 21.85, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:22:17.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:22:10
2025-11-25T21:22:17.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:22:17.368 [DEBUG] [Thread-5945] [transport.py] [_log()] starting thread (client mode): 0x7374d000
2025-11-25T21:22:17.368 [DEBUG] [Thread-5945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:22:17.388 [DEBUG] [Thread-5945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:22:17.388 [INFO] [Thread-5945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] client lang: <none>
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] server lang: <none>
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] kex follows: False
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:22:17.391 [DEBUG] [Thread-5945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:22:17.392 [DEBUG] [Thread-5945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:22:17.392 [DEBUG] [Thread-5945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:22:17.392 [DEBUG] [Thread-5945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:22:17.392 [DEBUG] [Thread-5945] [transport.py] [_log()] Compression: none
2025-11-25T21:22:17.392 [DEBUG] [Thread-5945] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:22:17.409 [DEBUG] [Thread-5945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:22:17.410 [DEBUG] [Thread-5945] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:22:17.410 [DEBUG] [Thread-5945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:22:17.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:22:17.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:22:17.412 [DEBUG] [Thread-5945] [transport.py] [_log()] userauth is OK
2025-11-25T21:22:17.412 [DEBUG] [Thread-5945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:22:17.412 [DEBUG] [Thread-5945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:22:17.412 [DEBUG] [Thread-5945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:22:17.413 [DEBUG] [Thread-5945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:22:17.437 [INFO] [Thread-5945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:22:17.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:22:18.232 [DEBUG] [Thread-5945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:22:18.232 [DEBUG] [Thread-5945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:22:18.232 [DEBUG] [Thread-5945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:22:18.273 [DEBUG] [Thread-5945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:22:18.273 [DEBUG] [Thread-5945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:22:18.276 [DEBUG] [Thread-5945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:22:18.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:22:18.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:22:18.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:22:18.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:22:18.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:22:18.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:22:18.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:22:18.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:22:18.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:22:18.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.806696 -999.00  +21.70   4.89     20   -1.60 1 1 1 1 1     0    0 23.39 -1.12 ZNESW 3.8 4.9 223.0 7.1 21.5 -25.9 21.5 -25.3 21.2 -23.9 21.4 -25.0
2025-11-25T21:22:18.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:22:18.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:22:18.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.806696
2025-11-25T21:22:18.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:22:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:22:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:22:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:22:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:22:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:22:10', tmtdew=27.44, humidity=15.25, cloud=0.0, wind=9.26, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:22:10', seeing=1.0, atlas_timestamp='2025-11-25T19:21:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:22:18.301 [DEBUG] [Thread-5945] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:22:18.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:22:18.398 [DEBUG] [Thread-5948] [transport.py] [_log()] starting thread (client mode): 0x737c6650
2025-11-25T21:22:18.398 [DEBUG] [Thread-5948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:22:18.413 [DEBUG] [Thread-5948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:22:18.413 [INFO] [Thread-5948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:22:18.421 [DEBUG] [Thread-5948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:22:18.421 [DEBUG] [Thread-5948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:22:18.421 [DEBUG] [Thread-5948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:22:18.421 [DEBUG] [Thread-5948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:22:18.421 [DEBUG] [Thread-5948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:22:18.421 [DEBUG] [Thread-5948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:22:18.421 [DEBUG] [Thread-5948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:22:18.421 [DEBUG] [Thread-5948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:22:18.421 [DEBUG] [Thread-5948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] client lang: <none>
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] server lang: <none>
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] kex follows: False
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] Compression: none
2025-11-25T21:22:18.422 [DEBUG] [Thread-5948] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:22:18.479 [DEBUG] [Thread-5948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:22:18.479 [DEBUG] [Thread-5948] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:22:18.480 [DEBUG] [Thread-5948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:22:18.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:22:18.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:22:18.535 [DEBUG] [Thread-5948] [transport.py] [_log()] userauth is OK
2025-11-25T21:22:18.535 [DEBUG] [Thread-5948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:22:18.535 [DEBUG] [Thread-5948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:22:18.535 [DEBUG] [Thread-5948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:22:18.535 [DEBUG] [Thread-5948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:22:18.555 [INFO] [Thread-5948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:22:18.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:22:18.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:22:19.380 [DEBUG] [Thread-5948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:22:19.380 [DEBUG] [Thread-5948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:22:19.428 [DEBUG] [Thread-5948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:22:19.428 [DEBUG] [Thread-5948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:22:19.438 [DEBUG] [Thread-5948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:22:19.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:22:19.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:22:19.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:22:19.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:22:19.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:22:19.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:22:19.475 [DEBUG] [Thread-5948] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:22:22.774 [DEBUG] [Thread-5950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:22:37.826 [DEBUG] [Thread-5951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:22:40.889 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:22:40.892 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:22:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:22:49.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:22:49.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:22:50.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 22, 42), 27.45, 15.23, 0.0, 7.73, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:22:50.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:22:42
2025-11-25T21:22:50.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:22:50.438 [DEBUG] [Thread-5952] [transport.py] [_log()] starting thread (client mode): 0x70d752a0
2025-11-25T21:22:50.438 [DEBUG] [Thread-5952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:22:50.458 [DEBUG] [Thread-5952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:22:50.458 [INFO] [Thread-5952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:22:50.461 [DEBUG] [Thread-5952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:22:50.461 [DEBUG] [Thread-5952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:22:50.461 [DEBUG] [Thread-5952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:22:50.461 [DEBUG] [Thread-5952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] client lang: <none>
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] server lang: <none>
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] kex follows: False
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:22:50.462 [DEBUG] [Thread-5952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:22:50.463 [DEBUG] [Thread-5952] [transport.py] [_log()] Compression: none
2025-11-25T21:22:50.463 [DEBUG] [Thread-5952] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:22:50.482 [DEBUG] [Thread-5952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:22:50.482 [DEBUG] [Thread-5952] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:22:50.483 [DEBUG] [Thread-5952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:22:50.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:22:50.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:22:50.485 [DEBUG] [Thread-5952] [transport.py] [_log()] userauth is OK
2025-11-25T21:22:50.485 [DEBUG] [Thread-5952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:22:50.485 [DEBUG] [Thread-5952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:22:50.485 [DEBUG] [Thread-5952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:22:50.485 [DEBUG] [Thread-5952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:22:50.508 [INFO] [Thread-5952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:22:50.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:22:51.138 [DEBUG] [Thread-5952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:22:51.138 [DEBUG] [Thread-5952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:22:51.139 [DEBUG] [Thread-5952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:22:51.179 [DEBUG] [Thread-5952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:22:51.179 [DEBUG] [Thread-5952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:22:51.182 [DEBUG] [Thread-5952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:22:51.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:22:51.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:22:51.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:22:51.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:22:51.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:22:51.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:22:51.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:22:51.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:22:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:22:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.807043 -999.00  +21.60   2.55     20   -1.60 1 1 1 1 1     0    0 22.74 -1.60 ZNESW 5.4 2.5 270.9 7.6 21.5 -25.9 21.5 -25.3 21.2 -24.1 21.4 -25.1
2025-11-25T21:22:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:22:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:22:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.807043
2025-11-25T21:22:51.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:22:51.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:22:51.207 [DEBUG] [Thread-5952] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:22:51.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:22:51.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:22:51.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:22:51.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:22:42', tmtdew=27.45, humidity=15.23, cloud=0.0, wind=7.73, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:22:42', seeing=1.11, atlas_timestamp='2025-11-25T19:22:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:22:51.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:22:51.304 [DEBUG] [Thread-5955] [transport.py] [_log()] starting thread (client mode): 0x70d029b0
2025-11-25T21:22:51.304 [DEBUG] [Thread-5955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:22:51.323 [DEBUG] [Thread-5955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:22:51.323 [INFO] [Thread-5955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:22:51.333 [DEBUG] [Thread-5955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:22:51.333 [DEBUG] [Thread-5955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:22:51.333 [DEBUG] [Thread-5955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:22:51.333 [DEBUG] [Thread-5955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:22:51.333 [DEBUG] [Thread-5955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:22:51.333 [DEBUG] [Thread-5955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:22:51.333 [DEBUG] [Thread-5955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:22:51.333 [DEBUG] [Thread-5955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] client lang: <none>
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] server lang: <none>
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] kex follows: False
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] Compression: none
2025-11-25T21:22:51.334 [DEBUG] [Thread-5955] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:22:51.395 [DEBUG] [Thread-5955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:22:51.396 [DEBUG] [Thread-5955] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:22:51.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:22:51.397 [DEBUG] [Thread-5955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:22:51.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:22:51.455 [DEBUG] [Thread-5955] [transport.py] [_log()] userauth is OK
2025-11-25T21:22:51.455 [DEBUG] [Thread-5955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:22:51.455 [DEBUG] [Thread-5955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:22:51.455 [DEBUG] [Thread-5955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:22:51.455 [DEBUG] [Thread-5955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:22:51.474 [INFO] [Thread-5955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:22:51.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:22:51.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:22:52.352 [DEBUG] [Thread-5955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:22:52.352 [DEBUG] [Thread-5955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:22:52.399 [DEBUG] [Thread-5955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:22:52.400 [DEBUG] [Thread-5955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:22:52.408 [DEBUG] [Thread-5955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:22:52.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:22: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')
2025-11-25T21:22:52.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:22:52.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:22:52.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:22:52.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:22:52.452 [DEBUG] [Thread-5955] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:22:52.864 [DEBUG] [Thread-5957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:22:53.946 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:22:59.742 [DEBUG] [Thread-5958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:23:07.915 [DEBUG] [Thread-5959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:23:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:23:22.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:23:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:23:22.940 [DEBUG] [Thread-5960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:23:23.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 23, 14), 27.46, 15.22, 0.0, 7.64, 21.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:23:23.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:23:14
2025-11-25T21:23:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:23:23.418 [DEBUG] [Thread-5961] [transport.py] [_log()] starting thread (client mode): 0x70d57580
2025-11-25T21:23:23.418 [DEBUG] [Thread-5961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:23:23.438 [DEBUG] [Thread-5961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:23:23.438 [INFO] [Thread-5961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:23:23.441 [DEBUG] [Thread-5961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:23:23.441 [DEBUG] [Thread-5961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] client lang: <none>
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] server lang: <none>
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] kex follows: False
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] Compression: none
2025-11-25T21:23:23.442 [DEBUG] [Thread-5961] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:23:23.459 [DEBUG] [Thread-5961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:23:23.460 [DEBUG] [Thread-5961] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:23:23.460 [DEBUG] [Thread-5961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:23:23.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:23:23.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:23:23.462 [DEBUG] [Thread-5961] [transport.py] [_log()] userauth is OK
2025-11-25T21:23:23.462 [DEBUG] [Thread-5961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:23:23.462 [DEBUG] [Thread-5961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:23:23.463 [DEBUG] [Thread-5961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:23:23.463 [DEBUG] [Thread-5961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:23:23.484 [INFO] [Thread-5961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:23:23.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:23:24.285 [DEBUG] [Thread-5961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:23:24.285 [DEBUG] [Thread-5961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:23:24.286 [DEBUG] [Thread-5961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:23:24.326 [DEBUG] [Thread-5961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:23:24.327 [DEBUG] [Thread-5961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:23:24.329 [DEBUG] [Thread-5961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:23:24.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:23:24.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:23:24.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:23:24.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:23:24.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:23:24.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:23:24.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:23:24.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:23:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:23:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.807390 -999.00  +21.60   4.25     20   -1.60 1 1 1 1 1     0    0 22.75 -1.85 ZNESW 5.9 4.2 175.4 7.1 21.5 -25.9 21.5 -25.3 21.2 -24.2 21.4 -25.1
2025-11-25T21:23:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:23:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:23:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.807390
2025-11-25T21:23:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:23:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:23:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:23:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:23:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:23:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:23:14', tmtdew=27.46, humidity=15.22, cloud=0.0, wind=7.64, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:23:14', seeing=1.11, atlas_timestamp='2025-11-25T19:22:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:23:24.355 [DEBUG] [Thread-5961] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:23:24.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:23:24.449 [DEBUG] [Thread-5964] [transport.py] [_log()] starting thread (client mode): 0x70d57730
2025-11-25T21:23:24.449 [DEBUG] [Thread-5964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:23:24.464 [DEBUG] [Thread-5964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:23:24.464 [INFO] [Thread-5964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:23:24.471 [DEBUG] [Thread-5964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:23:24.472 [DEBUG] [Thread-5964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:23:24.472 [DEBUG] [Thread-5964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:23:24.472 [DEBUG] [Thread-5964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:23:24.472 [DEBUG] [Thread-5964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:23:24.472 [DEBUG] [Thread-5964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:23:24.472 [DEBUG] [Thread-5964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:23:24.472 [DEBUG] [Thread-5964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:23:24.472 [DEBUG] [Thread-5964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] client lang: <none>
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] server lang: <none>
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] kex follows: False
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] Compression: none
2025-11-25T21:23:24.473 [DEBUG] [Thread-5964] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:23:24.534 [DEBUG] [Thread-5964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:23:24.534 [DEBUG] [Thread-5964] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:23:24.535 [DEBUG] [Thread-5964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:23:24.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:23:24.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:23:24.590 [DEBUG] [Thread-5964] [transport.py] [_log()] userauth is OK
2025-11-25T21:23:24.590 [DEBUG] [Thread-5964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:23:24.591 [DEBUG] [Thread-5964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:23:24.591 [DEBUG] [Thread-5964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:23:24.591 [DEBUG] [Thread-5964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:23:24.622 [INFO] [Thread-5964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:23:24.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:23:24.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:23:25.459 [DEBUG] [Thread-5964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:23:25.459 [DEBUG] [Thread-5964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:23:25.509 [DEBUG] [Thread-5964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:23:25.509 [DEBUG] [Thread-5964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:23:25.518 [DEBUG] [Thread-5964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:23:25.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:23:25.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:23:25.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:23:25.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:23:25.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:23:25.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:23:25.553 [DEBUG] [Thread-5964] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:23:30.669 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:23:37.972 [DEBUG] [Thread-5966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:23:41.100 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:23:41.101 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:23:53.022 [DEBUG] [Thread-5967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:23:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:23:55.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:23:55.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:23:56.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 23, 46), 27.46, 15.27, 0.0, 10.24, 21.74, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:23:56.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:23:46
2025-11-25T21:23:56.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:23:56.512 [DEBUG] [Thread-5968] [transport.py] [_log()] starting thread (client mode): 0x7374d000
2025-11-25T21:23:56.513 [DEBUG] [Thread-5968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:23:56.534 [DEBUG] [Thread-5968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:23:56.534 [INFO] [Thread-5968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:23:56.537 [DEBUG] [Thread-5968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:23:56.537 [DEBUG] [Thread-5968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:23:56.537 [DEBUG] [Thread-5968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:23:56.537 [DEBUG] [Thread-5968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:23:56.537 [DEBUG] [Thread-5968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] client lang: <none>
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] server lang: <none>
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] kex follows: False
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] Compression: none
2025-11-25T21:23:56.538 [DEBUG] [Thread-5968] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:23:56.555 [DEBUG] [Thread-5968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:23:56.555 [DEBUG] [Thread-5968] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:23:56.556 [DEBUG] [Thread-5968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:23:56.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:23:56.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:23:56.558 [DEBUG] [Thread-5968] [transport.py] [_log()] userauth is OK
2025-11-25T21:23:56.558 [DEBUG] [Thread-5968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:23:56.558 [DEBUG] [Thread-5968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:23:56.559 [DEBUG] [Thread-5968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:23:56.559 [DEBUG] [Thread-5968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:23:56.583 [INFO] [Thread-5968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:23:56.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:23:57.191 [DEBUG] [Thread-5968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:23:57.191 [DEBUG] [Thread-5968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:23:57.191 [DEBUG] [Thread-5968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:23:57.232 [DEBUG] [Thread-5968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:23:57.232 [DEBUG] [Thread-5968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:23:57.235 [DEBUG] [Thread-5968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:23:57.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:23:57.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:23:57.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:23:57.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:23:57.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:23:57.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:23:57.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:23:57.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:23:57.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:23:57.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.807738 -999.00  +21.60   7.73     20   -1.70 1 1 1 1 1     0    0 22.85 -1.50 ZNESW 5.8 7.7 199.8 8.6 21.5 -25.9 21.5 -25.5 21.2 -24.1 21.4 -25.0
2025-11-25T21:23:57.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:23:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:23:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.807738
2025-11-25T21:23:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:23:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:23:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:23:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:23:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:23:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:23:46', tmtdew=27.46, humidity=15.27, cloud=0.0, wind=10.24, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:23:46', seeing=1.01, atlas_timestamp='2025-11-25T19:23:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:16:00')
2025-11-25T21:23:57.264 [DEBUG] [Thread-5968] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:23:57.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:23:57.358 [DEBUG] [Thread-5971] [transport.py] [_log()] starting thread (client mode): 0x70d43160
2025-11-25T21:23:57.359 [DEBUG] [Thread-5971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:23:57.372 [DEBUG] [Thread-5971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:23:57.372 [INFO] [Thread-5971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:23:57.380 [DEBUG] [Thread-5971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:23:57.380 [DEBUG] [Thread-5971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:23:57.380 [DEBUG] [Thread-5971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:23:57.380 [DEBUG] [Thread-5971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:23:57.380 [DEBUG] [Thread-5971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:23:57.380 [DEBUG] [Thread-5971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:23:57.380 [DEBUG] [Thread-5971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:23:57.381 [DEBUG] [Thread-5971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:23:57.381 [DEBUG] [Thread-5971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:23:57.381 [DEBUG] [Thread-5971] [transport.py] [_log()] client lang: <none>
2025-11-25T21:23:57.381 [DEBUG] [Thread-5971] [transport.py] [_log()] server lang: <none>
2025-11-25T21:23:57.381 [DEBUG] [Thread-5971] [transport.py] [_log()] kex follows: False
2025-11-25T21:23:57.381 [DEBUG] [Thread-5971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:23:57.381 [DEBUG] [Thread-5971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:23:57.381 [DEBUG] [Thread-5971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:23:57.381 [DEBUG] [Thread-5971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:23:57.382 [DEBUG] [Thread-5971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:23:57.382 [DEBUG] [Thread-5971] [transport.py] [_log()] Compression: none
2025-11-25T21:23:57.382 [DEBUG] [Thread-5971] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:23:57.439 [DEBUG] [Thread-5971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:23:57.440 [DEBUG] [Thread-5971] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:23:57.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:23:57.442 [DEBUG] [Thread-5971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:23:57.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:23:57.499 [DEBUG] [Thread-5971] [transport.py] [_log()] userauth is OK
2025-11-25T21:23:57.499 [DEBUG] [Thread-5971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:23:57.499 [DEBUG] [Thread-5971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:23:57.500 [DEBUG] [Thread-5971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:23:57.500 [DEBUG] [Thread-5971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:23:57.517 [INFO] [Thread-5971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:23:57.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:23:57.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:23:58.360 [DEBUG] [Thread-5971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:23:58.360 [DEBUG] [Thread-5971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:23:58.408 [DEBUG] [Thread-5971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:23:58.408 [DEBUG] [Thread-5971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:23:58.417 [DEBUG] [Thread-5971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:23:58.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:23:58.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:23:58.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:23:58.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:23:58.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:23:58.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:23:58.454 [DEBUG] [Thread-5971] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:23:59.798 [DEBUG] [Thread-5973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:24:01.149 [DEBUG] [Thread-4335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:24:08.061 [DEBUG] [Thread-5974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:24:23.109 [DEBUG] [Thread-5975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:24:28.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:24:28.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:24:28.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:24:29.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 24, 18), 27.44, 15.28, 0.0, 10.04, 21.7, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:24:29.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:24:18
2025-11-25T21:24:29.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:24:29.454 [DEBUG] [Thread-5976] [transport.py] [_log()] starting thread (client mode): 0x70d56710
2025-11-25T21:24:29.454 [DEBUG] [Thread-5976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:24:29.474 [DEBUG] [Thread-5976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:24:29.474 [INFO] [Thread-5976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] client lang: <none>
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] server lang: <none>
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] kex follows: False
2025-11-25T21:24:29.477 [DEBUG] [Thread-5976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:24:29.478 [DEBUG] [Thread-5976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:24:29.478 [DEBUG] [Thread-5976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:24:29.478 [DEBUG] [Thread-5976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:24:29.478 [DEBUG] [Thread-5976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:24:29.478 [DEBUG] [Thread-5976] [transport.py] [_log()] Compression: none
2025-11-25T21:24:29.478 [DEBUG] [Thread-5976] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:24:29.491 [DEBUG] [Thread-5976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:24:29.492 [DEBUG] [Thread-5976] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:24:29.492 [DEBUG] [Thread-5976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:24:29.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:24:29.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:24:29.493 [DEBUG] [Thread-5976] [transport.py] [_log()] userauth is OK
2025-11-25T21:24:29.493 [DEBUG] [Thread-5976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:24:29.493 [DEBUG] [Thread-5976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:24:29.493 [DEBUG] [Thread-5976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:24:29.493 [DEBUG] [Thread-5976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:24:29.508 [INFO] [Thread-5976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:24:29.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:24:30.147 [DEBUG] [Thread-5976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:24:30.147 [DEBUG] [Thread-5976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:24:30.148 [DEBUG] [Thread-5976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:24:30.188 [DEBUG] [Thread-5976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:24:30.188 [DEBUG] [Thread-5976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:24:30.192 [DEBUG] [Thread-5976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:24:30.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:24:30.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:24:30.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:24:30.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:24:30.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:24:30.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:24:30.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:24:30.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:24:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:24:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.808432 -999.00  +21.60   7.59     20   -1.70 1 1 1 1 1     0    0 22.92 -1.31 ZNESW 3.1 7.6 211.6 9.1 21.5 -25.8 21.5 -25.3 21.2 -24.0 21.4 -25.2
2025-11-25T21:24:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:24:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:24:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.808432
2025-11-25T21:24:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:24:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:24:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:24:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:24:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:24:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:24:18', tmtdew=27.44, humidity=15.28, cloud=0.0, wind=10.04, temperature=21.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:24:18', seeing=1.09, atlas_timestamp='2025-11-25T19:24:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:21:00')
2025-11-25T21:24:30.217 [DEBUG] [Thread-5976] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:24:30.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:24:30.324 [DEBUG] [Thread-5979] [transport.py] [_log()] starting thread (client mode): 0x70d6b280
2025-11-25T21:24:30.324 [DEBUG] [Thread-5979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:24:30.338 [DEBUG] [Thread-5979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:24:30.338 [INFO] [Thread-5979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:24:30.345 [DEBUG] [Thread-5979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:24:30.345 [DEBUG] [Thread-5979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:24:30.345 [DEBUG] [Thread-5979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:24:30.345 [DEBUG] [Thread-5979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:24:30.345 [DEBUG] [Thread-5979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:24:30.345 [DEBUG] [Thread-5979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:24:30.345 [DEBUG] [Thread-5979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:24:30.345 [DEBUG] [Thread-5979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:24:30.345 [DEBUG] [Thread-5979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] client lang: <none>
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] server lang: <none>
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] kex follows: False
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] Compression: none
2025-11-25T21:24:30.346 [DEBUG] [Thread-5979] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:24:30.403 [DEBUG] [Thread-5979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:24:30.403 [DEBUG] [Thread-5979] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:24:30.404 [DEBUG] [Thread-5979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:24:30.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:24:30.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:24:30.459 [DEBUG] [Thread-5979] [transport.py] [_log()] userauth is OK
2025-11-25T21:24:30.459 [DEBUG] [Thread-5979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:24:30.459 [DEBUG] [Thread-5979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:24:30.459 [DEBUG] [Thread-5979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:24:30.460 [DEBUG] [Thread-5979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:24:30.478 [INFO] [Thread-5979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:24:30.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:24:30.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:24:31.324 [DEBUG] [Thread-5979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:24:31.324 [DEBUG] [Thread-5979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:24:31.373 [DEBUG] [Thread-5979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:24:31.373 [DEBUG] [Thread-5979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:24:31.385 [DEBUG] [Thread-5979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:24:31.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:24:31.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:24:31.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:24:31.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:24:31.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:24:31.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:24:31.419 [DEBUG] [Thread-5979] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:24:38.138 [DEBUG] [Thread-5981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:24:41.301 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:24:41.302 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:24:53.193 [DEBUG] [Thread-5982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:24:59.864 [DEBUG] [Thread-5983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:25:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:25:01.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:25:01.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:25:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 24, 50), 27.33, 15.28, 0.0, 7.43, 21.59, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:25:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:24:50
2025-11-25T21:25:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:25:02.396 [DEBUG] [Thread-5984] [transport.py] [_log()] starting thread (client mode): 0x70d548b0
2025-11-25T21:25:02.396 [DEBUG] [Thread-5984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:25:02.417 [DEBUG] [Thread-5984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:25:02.417 [INFO] [Thread-5984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:25:02.420 [DEBUG] [Thread-5984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:25:02.420 [DEBUG] [Thread-5984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:25:02.420 [DEBUG] [Thread-5984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] client lang: <none>
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] server lang: <none>
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] kex follows: False
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] Compression: none
2025-11-25T21:25:02.421 [DEBUG] [Thread-5984] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:25:02.428 [DEBUG] [Thread-5984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:25:02.429 [DEBUG] [Thread-5984] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:25:02.429 [DEBUG] [Thread-5984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:25:02.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:25:02.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:25:02.430 [DEBUG] [Thread-5984] [transport.py] [_log()] userauth is OK
2025-11-25T21:25:02.430 [DEBUG] [Thread-5984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:25:02.430 [DEBUG] [Thread-5984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:25:02.430 [DEBUG] [Thread-5984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:25:02.430 [DEBUG] [Thread-5984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:25:02.439 [INFO] [Thread-5984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:25:02.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:25:03.118 [DEBUG] [Thread-5984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:25:03.118 [DEBUG] [Thread-5984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:25:03.118 [DEBUG] [Thread-5984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:25:03.159 [DEBUG] [Thread-5984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:25:03.159 [DEBUG] [Thread-5984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:25:03.162 [DEBUG] [Thread-5984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:25:03.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:25:03.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:25:03.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:25:03.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:25:03.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:25:03.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:25:03.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:25:03.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:25:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:25:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.808779 -999.00  +21.60   4.26     20   -1.60 1 1 1 1 1     0    0 23.13 -1.67 ZNESW 5.0 4.3 194.8 6.6 21.4 -25.9 21.4 -25.3 21.1 -24.3 21.4 -25.1
2025-11-25T21:25:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:25:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:25:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.808779
2025-11-25T21:25:03.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:25:03.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:25:03.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:25:03.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:25:03.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:25:03.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:24:50', tmtdew=27.33, humidity=15.28, cloud=0.0, wind=7.43, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:24:50', seeing=1.04, atlas_timestamp='2025-11-25T19:24:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:21:00')
2025-11-25T21:25:03.201 [DEBUG] [Thread-5984] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:25:03.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:25:03.285 [DEBUG] [Thread-5987] [transport.py] [_log()] starting thread (client mode): 0x70d3ac80
2025-11-25T21:25:03.285 [DEBUG] [Thread-5987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:25:03.300 [DEBUG] [Thread-5987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:25:03.300 [INFO] [Thread-5987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] client lang: <none>
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] server lang: <none>
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] kex follows: False
2025-11-25T21:25:03.307 [DEBUG] [Thread-5987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:25:03.308 [DEBUG] [Thread-5987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:25:03.308 [DEBUG] [Thread-5987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:25:03.308 [DEBUG] [Thread-5987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:25:03.308 [DEBUG] [Thread-5987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:25:03.308 [DEBUG] [Thread-5987] [transport.py] [_log()] Compression: none
2025-11-25T21:25:03.308 [DEBUG] [Thread-5987] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:25:03.365 [DEBUG] [Thread-5987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:25:03.365 [DEBUG] [Thread-5987] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:25:03.365 [DEBUG] [Thread-5987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:25:03.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:25:03.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:25:03.422 [DEBUG] [Thread-5987] [transport.py] [_log()] userauth is OK
2025-11-25T21:25:03.422 [DEBUG] [Thread-5987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:25:03.422 [DEBUG] [Thread-5987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:25:03.422 [DEBUG] [Thread-5987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:25:03.422 [DEBUG] [Thread-5987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:25:03.436 [INFO] [Thread-5987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:25:03.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:25:03.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:25:04.286 [DEBUG] [Thread-5987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:25:04.286 [DEBUG] [Thread-5987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:25:04.334 [DEBUG] [Thread-5987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:25:04.334 [DEBUG] [Thread-5987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:25:04.342 [DEBUG] [Thread-5987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:25:04.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:25:04.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:25:04.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
2025-11-25T21:25:04.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:25:04.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:25:04.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:25:04.375 [DEBUG] [Thread-5987] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:25:08.225 [DEBUG] [Thread-5989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:25:23.274 [DEBUG] [Thread-5991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:25:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:25:34.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:25:34.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:25:35.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 25, 22), 27.26, 15.37, 0.0, 7.46, 21.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:25:35.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:25:22
2025-11-25T21:25:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:25:35.343 [DEBUG] [Thread-5992] [transport.py] [_log()] starting thread (client mode): 0x70d7ea10
2025-11-25T21:25:35.343 [DEBUG] [Thread-5992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:25:35.363 [DEBUG] [Thread-5992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:25:35.364 [INFO] [Thread-5992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:25:35.367 [DEBUG] [Thread-5992] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:25:35.367 [DEBUG] [Thread-5992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:25:35.367 [DEBUG] [Thread-5992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:25:35.367 [DEBUG] [Thread-5992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:25:35.367 [DEBUG] [Thread-5992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:25:35.367 [DEBUG] [Thread-5992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:25:35.367 [DEBUG] [Thread-5992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:25:35.367 [DEBUG] [Thread-5992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:25:35.367 [DEBUG] [Thread-5992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] client lang: <none>
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] server lang: <none>
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] kex follows: False
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] Compression: none
2025-11-25T21:25:35.368 [DEBUG] [Thread-5992] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:25:35.386 [DEBUG] [Thread-5992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:25:35.386 [DEBUG] [Thread-5992] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:25:35.387 [DEBUG] [Thread-5992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:25:35.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:25:35.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:25:35.390 [DEBUG] [Thread-5992] [transport.py] [_log()] userauth is OK
2025-11-25T21:25:35.390 [DEBUG] [Thread-5992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:25:35.390 [DEBUG] [Thread-5992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:25:35.390 [DEBUG] [Thread-5992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:25:35.390 [DEBUG] [Thread-5992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:25:35.425 [INFO] [Thread-5992] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:25:35.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:25:36.081 [DEBUG] [Thread-5992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:25:36.081 [DEBUG] [Thread-5992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:25:36.082 [DEBUG] [Thread-5992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:25:36.122 [DEBUG] [Thread-5992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:25:36.122 [DEBUG] [Thread-5992] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:25:36.126 [DEBUG] [Thread-5992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:25:36.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:25:36.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:25:36.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:25:36.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:25:36.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:25:36.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:25:36.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:25:36.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:25:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:25:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.809126 -999.00  +21.60   3.36     20   -1.70 1 1 1 1 1     0    0 23.15 -1.58 ZNESW 4.8 3.4 215.1 7.1 21.4 -26.0 21.4 -25.2 21.1 -24.1 21.3 -25.3
2025-11-25T21:25:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:25:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:25:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.809126
2025-11-25T21:25:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:25:36.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:25:36.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:25:36.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:25:36.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:25:36.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:25:22', tmtdew=27.26, humidity=15.37, cloud=0.0, wind=7.46, temperature=21.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:25:22', seeing=1.04, atlas_timestamp='2025-11-25T19:25:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:21:00')
2025-11-25T21:25:36.154 [DEBUG] [Thread-5992] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:25:36.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:25:36.251 [DEBUG] [Thread-5995] [transport.py] [_log()] starting thread (client mode): 0x70d7f550
2025-11-25T21:25:36.252 [DEBUG] [Thread-5995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:25:36.267 [DEBUG] [Thread-5995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:25:36.267 [INFO] [Thread-5995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] client lang: <none>
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] server lang: <none>
2025-11-25T21:25:36.279 [DEBUG] [Thread-5995] [transport.py] [_log()] kex follows: False
2025-11-25T21:25:36.280 [DEBUG] [Thread-5995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:25:36.280 [DEBUG] [Thread-5995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:25:36.280 [DEBUG] [Thread-5995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:25:36.280 [DEBUG] [Thread-5995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:25:36.280 [DEBUG] [Thread-5995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:25:36.280 [DEBUG] [Thread-5995] [transport.py] [_log()] Compression: none
2025-11-25T21:25:36.280 [DEBUG] [Thread-5995] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:25:36.336 [DEBUG] [Thread-5995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:25:36.337 [DEBUG] [Thread-5995] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:25:36.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:25:36.338 [DEBUG] [Thread-5995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:25:36.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:25:36.395 [DEBUG] [Thread-5995] [transport.py] [_log()] userauth is OK
2025-11-25T21:25:36.395 [DEBUG] [Thread-5995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:25:36.395 [DEBUG] [Thread-5995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:25:36.395 [DEBUG] [Thread-5995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:25:36.396 [DEBUG] [Thread-5995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:25:36.415 [INFO] [Thread-5995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:25:36.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:25:36.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:25:37.265 [DEBUG] [Thread-5995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:25:37.265 [DEBUG] [Thread-5995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:25:37.313 [DEBUG] [Thread-5995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:25:37.313 [DEBUG] [Thread-5995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:25:37.323 [DEBUG] [Thread-5995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:25:37.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:25: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')
2025-11-25T21:25:37.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:25:37.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:25:37.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:25:37.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:25:37.359 [DEBUG] [Thread-5995] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:25:38.306 [DEBUG] [Thread-5997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:25:41.504 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:25:41.505 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:25:53.355 [DEBUG] [Thread-5998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:25:59.919 [DEBUG] [Thread-5999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:07.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:26:07.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:26:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:26:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 25, 54), 27.22, 15.85, 0.0, 7.71, 21.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:26:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:25:54
2025-11-25T21:26:08.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:26:08.280 [DEBUG] [Thread-6000] [transport.py] [_log()] starting thread (client mode): 0x70d7f160
2025-11-25T21:26:08.280 [DEBUG] [Thread-6000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:26:08.301 [DEBUG] [Thread-6000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:26:08.302 [INFO] [Thread-6000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] client lang: <none>
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] server lang: <none>
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] kex follows: False
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] Compression: none
2025-11-25T21:26:08.305 [DEBUG] [Thread-6000] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:26:08.326 [DEBUG] [Thread-6000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:26:08.327 [DEBUG] [Thread-6000] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:26:08.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:26:08.328 [DEBUG] [Thread-6000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:26:08.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:26:08.330 [DEBUG] [Thread-6000] [transport.py] [_log()] userauth is OK
2025-11-25T21:26:08.330 [DEBUG] [Thread-6000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:26:08.330 [DEBUG] [Thread-6000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:26:08.330 [DEBUG] [Thread-6000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:26:08.330 [DEBUG] [Thread-6000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:26:08.354 [INFO] [Thread-6000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:26:08.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:26:08.396 [DEBUG] [Thread-6002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:08.985 [DEBUG] [Thread-6000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:26:08.986 [DEBUG] [Thread-6000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:26:08.986 [DEBUG] [Thread-6000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:26:09.027 [DEBUG] [Thread-6000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:26:09.027 [DEBUG] [Thread-6000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:26:09.030 [DEBUG] [Thread-6000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:26:09.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:26:09.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:26:09.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:26:09.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:26:09.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:26:09.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:26:09.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:26:09.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:26:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:26:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.809474 -999.00  +21.50   4.48     20   -1.80 1 1 1 1 1     0    0 23.07 -1.52 ZNESW 7.0 4.5 210.1 7.0 21.4 -26.0 21.4 -25.4 21.2 -24.2 21.3 -25.1
2025-11-25T21:26:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:26:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:26:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.809474
2025-11-25T21:26:09.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:26:09.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:26:09.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:26:09.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:26:09.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:26:09.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:25:54', tmtdew=27.22, humidity=15.85, cloud=0.0, wind=7.71, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:25:54', seeing=1.05, atlas_timestamp='2025-11-25T19:25:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:21:00')
2025-11-25T21:26:09.058 [DEBUG] [Thread-6000] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:26:09.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:26:09.154 [DEBUG] [Thread-6004] [transport.py] [_log()] starting thread (client mode): 0x70d009d0
2025-11-25T21:26:09.154 [DEBUG] [Thread-6004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:26:09.170 [DEBUG] [Thread-6004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:26:09.170 [INFO] [Thread-6004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:26:09.177 [DEBUG] [Thread-6004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:26:09.177 [DEBUG] [Thread-6004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:26:09.177 [DEBUG] [Thread-6004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:26:09.177 [DEBUG] [Thread-6004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:26:09.177 [DEBUG] [Thread-6004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] client lang: <none>
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] server lang: <none>
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] kex follows: False
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] Compression: none
2025-11-25T21:26:09.178 [DEBUG] [Thread-6004] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:26:09.242 [DEBUG] [Thread-6004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:26:09.242 [DEBUG] [Thread-6004] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:26:09.243 [DEBUG] [Thread-6004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:26:09.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:26:09.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:26:09.299 [DEBUG] [Thread-6004] [transport.py] [_log()] userauth is OK
2025-11-25T21:26:09.299 [DEBUG] [Thread-6004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:26:09.299 [DEBUG] [Thread-6004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:26:09.300 [DEBUG] [Thread-6004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:26:09.300 [DEBUG] [Thread-6004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:26:09.319 [INFO] [Thread-6004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:26:09.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:26:09.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:26:10.195 [DEBUG] [Thread-6004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:26:10.195 [DEBUG] [Thread-6004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:26:10.242 [DEBUG] [Thread-6004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:26:10.243 [DEBUG] [Thread-6004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:26:10.252 [DEBUG] [Thread-6004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:26:10.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:26:10.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:26:10.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:26:10.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:26:10.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:26:10.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:26:10.287 [DEBUG] [Thread-6004] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:26:23.433 [DEBUG] [Thread-6006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:38.488 [DEBUG] [Thread-6007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:39.353 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:26:40.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:26:40.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:26:40.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 26, 26), 27.24, 15.82, 0.0, 8.72, 21.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:26:40.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:26:26
2025-11-25T21:26:41.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:26:41.255 [DEBUG] [Thread-6008] [transport.py] [_log()] starting thread (client mode): 0x70d29c90
2025-11-25T21:26:41.255 [DEBUG] [Thread-6008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:26:41.276 [DEBUG] [Thread-6008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:26:41.276 [INFO] [Thread-6008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:26:41.279 [DEBUG] [Thread-6008] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:26:41.279 [DEBUG] [Thread-6008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:26:41.279 [DEBUG] [Thread-6008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] client lang: <none>
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] server lang: <none>
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] kex follows: False
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] Compression: none
2025-11-25T21:26:41.280 [DEBUG] [Thread-6008] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:26:41.299 [DEBUG] [Thread-6008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:26:41.300 [DEBUG] [Thread-6008] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:26:41.300 [DEBUG] [Thread-6008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:26:41.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:26:41.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:26:41.302 [DEBUG] [Thread-6008] [transport.py] [_log()] userauth is OK
2025-11-25T21:26:41.303 [DEBUG] [Thread-6008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:26:41.303 [DEBUG] [Thread-6008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:26:41.303 [DEBUG] [Thread-6008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:26:41.303 [DEBUG] [Thread-6008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:26:41.327 [INFO] [Thread-6008] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:26:41.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:26:41.723 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:41.724 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:41.970 [DEBUG] [Thread-6008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:26:41.970 [DEBUG] [Thread-6008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:26:41.971 [DEBUG] [Thread-6008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:26:42.011 [DEBUG] [Thread-6008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:26:42.011 [DEBUG] [Thread-6008] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:26:42.014 [DEBUG] [Thread-6008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:26:42.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:26:42.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:26:42.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:26:42.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:26:42.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:26:42.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:26:42.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:26:42.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:26:42.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:26:42.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.809821 -999.00  +21.50   8.00     20   -1.70 1 1 1 1 1     0    0 23.40 -1.48 ZNESW 3.4 8.0 209.8 11.1 21.4 -25.9 21.4 -25.4 21.1 -23.9 21.3 -25.2
2025-11-25T21:26:42.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:26:42.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:26:42.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.809821
2025-11-25T21:26:42.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:26:42.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:26:42.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:26:42.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:26:42.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:26:42.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:26:26', tmtdew=27.24, humidity=15.82, cloud=0.0, wind=8.72, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:26:26', seeing=1.03, atlas_timestamp='2025-11-25T19:26:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:21:00')
2025-11-25T21:26:42.043 [DEBUG] [Thread-6008] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:26:42.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:26:42.138 [DEBUG] [Thread-6011] [transport.py] [_log()] starting thread (client mode): 0x70d005e0
2025-11-25T21:26:42.138 [DEBUG] [Thread-6011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:26:42.152 [DEBUG] [Thread-6011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:26:42.153 [INFO] [Thread-6011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:26:42.160 [DEBUG] [Thread-6011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:26:42.160 [DEBUG] [Thread-6011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:26:42.160 [DEBUG] [Thread-6011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] client lang: <none>
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] server lang: <none>
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] kex follows: False
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] Compression: none
2025-11-25T21:26:42.161 [DEBUG] [Thread-6011] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:26:42.218 [DEBUG] [Thread-6011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:26:42.219 [DEBUG] [Thread-6011] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:26:42.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:26:42.220 [DEBUG] [Thread-6011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:26:42.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:26:42.274 [DEBUG] [Thread-6011] [transport.py] [_log()] userauth is OK
2025-11-25T21:26:42.275 [DEBUG] [Thread-6011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:26:42.275 [DEBUG] [Thread-6011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:26:42.275 [DEBUG] [Thread-6011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:26:42.275 [DEBUG] [Thread-6011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:26:42.294 [INFO] [Thread-6011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:26:42.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:26:42.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:26:42.511 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:43.122 [DEBUG] [Thread-6011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:26:43.122 [DEBUG] [Thread-6011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:26:43.170 [DEBUG] [Thread-6011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:26:43.170 [DEBUG] [Thread-6011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:26:43.179 [DEBUG] [Thread-6011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:26:43.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:26:43.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:26:43.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:26:43.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:26:43.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:26:43.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:26:43.216 [DEBUG] [Thread-6011] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:26:47.592 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:52.968 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:53.525 [DEBUG] [Thread-6013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:26:59.977 [DEBUG] [Thread-6014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:08.575 [DEBUG] [Thread-6015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:12.538 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:13.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:27:13.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:27:13.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:27:13.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 26, 58), 27.16, 15.85, 0.0, 9.26, 21.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:27:13.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:26:58
2025-11-25T21:27:14.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:27:14.191 [DEBUG] [Thread-6016] [transport.py] [_log()] starting thread (client mode): 0x70d2ac80
2025-11-25T21:27:14.191 [DEBUG] [Thread-6016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:27:14.212 [DEBUG] [Thread-6016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:27:14.213 [INFO] [Thread-6016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] client lang: <none>
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] server lang: <none>
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] kex follows: False
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] Compression: none
2025-11-25T21:27:14.214 [DEBUG] [Thread-6016] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:27:14.232 [DEBUG] [Thread-6016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:27:14.233 [DEBUG] [Thread-6016] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:27:14.234 [DEBUG] [Thread-6016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:27:14.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:27:14.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:27:14.236 [DEBUG] [Thread-6016] [transport.py] [_log()] userauth is OK
2025-11-25T21:27:14.236 [DEBUG] [Thread-6016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:27:14.236 [DEBUG] [Thread-6016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:27:14.236 [DEBUG] [Thread-6016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:27:14.236 [DEBUG] [Thread-6016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:27:14.261 [INFO] [Thread-6016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:27:14.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:27:14.907 [DEBUG] [Thread-6016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:27:14.908 [DEBUG] [Thread-6016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:27:14.908 [DEBUG] [Thread-6016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:27:14.949 [DEBUG] [Thread-6016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:27:14.949 [DEBUG] [Thread-6016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:27:14.952 [DEBUG] [Thread-6016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:27:14.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:27:14.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:27:14.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:27:14.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:27:14.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:27:14.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:27:14.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:27:14.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:27:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:27:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.810168 -999.00  +21.50   7.46     20   -1.70 1 1 1 1 1     0    0 23.25 -1.64 ZNESW 3.8 7.5 189.0 10.8 21.4 -25.9 21.4 -25.4 21.1 -24.1 21.3 -25.3
2025-11-25T21:27:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:27:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:27:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.810168
2025-11-25T21:27:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:27:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:27:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:27:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:27:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:27:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:26:58', tmtdew=27.16, humidity=15.85, cloud=0.0, wind=9.26, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:26:58', seeing=1.03, atlas_timestamp='2025-11-25T19:26:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.0337499999999995, 0.01624999999999943, 0.04025000000000034, -0.013999999999999346, 0.02400000000000091, 0.0762500000000017, 0.023999999999999133, 0.034250000000000114, 0.0045000000000001705, 0.03399999999999892, 0.07525000000000048, 0.028999999999999915, 0.0779999999999994, 0.07724999999999937, 0.030999999999998806, -0.0070000000000014495, 0.05524999999999913, 0.05649999999999977, 0.067499999999999, 0.010249999999999204, 0.07099999999999795, 0.09674999999999834, 0.020250000000000767, 0.011749999999999261, 0.02499999999999858, 0.044500000000001094, 0.06675000000000075, 0.10350000000000037, 0.08450000000000024, 0.025000000000000355, 0.022999999999999687, 0.031000000000000583, 0.016750000000000043], zp_timestamp='2025-11-25T19:21:00')
2025-11-25T21:27:14.980 [DEBUG] [Thread-6016] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:27:15.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:27:15.073 [DEBUG] [Thread-6019] [transport.py] [_log()] starting thread (client mode): 0x70d2be80
2025-11-25T21:27:15.073 [DEBUG] [Thread-6019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:27:15.087 [DEBUG] [Thread-6019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:27:15.087 [INFO] [Thread-6019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:27:15.094 [DEBUG] [Thread-6019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:27:15.094 [DEBUG] [Thread-6019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] client lang: <none>
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] server lang: <none>
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] kex follows: False
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] Compression: none
2025-11-25T21:27:15.095 [DEBUG] [Thread-6019] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:27:15.155 [DEBUG] [Thread-6019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:27:15.156 [DEBUG] [Thread-6019] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:27:15.156 [DEBUG] [Thread-6019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:27:15.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:27:15.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:27:15.211 [DEBUG] [Thread-6019] [transport.py] [_log()] userauth is OK
2025-11-25T21:27:15.211 [DEBUG] [Thread-6019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:27:15.211 [DEBUG] [Thread-6019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:27:15.211 [DEBUG] [Thread-6019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:27:15.212 [DEBUG] [Thread-6019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:27:15.231 [INFO] [Thread-6019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:27:15.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:27:15.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:27:16.089 [DEBUG] [Thread-6019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:27:16.089 [DEBUG] [Thread-6019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:27:16.140 [DEBUG] [Thread-6019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:27:16.140 [DEBUG] [Thread-6019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:27:16.149 [DEBUG] [Thread-6019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:27:16.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:27:16.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:27:16.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:27:16.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:27:16.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:27:16.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:27:16.186 [DEBUG] [Thread-6019] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:27:16.985 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:23.610 [DEBUG] [Thread-6021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:36.356 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:38.660 [DEBUG] [Thread-6022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:40.785 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:41.927 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:41.927 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:46.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:27:46.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:27:46.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:27:46.880 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 27, 30), 27.17, 15.83, 0.0, 8.35, 21.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:27:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:27:30
2025-11-25T21:27:47.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:27:47.221 [DEBUG] [Thread-6023] [transport.py] [_log()] starting thread (client mode): 0x70d74580
2025-11-25T21:27:47.221 [DEBUG] [Thread-6023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:27:47.241 [DEBUG] [Thread-6023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:27:47.241 [INFO] [Thread-6023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:27:47.244 [DEBUG] [Thread-6023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:27:47.244 [DEBUG] [Thread-6023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] client lang: <none>
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] server lang: <none>
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] kex follows: False
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] Compression: none
2025-11-25T21:27:47.245 [DEBUG] [Thread-6023] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:27:47.265 [DEBUG] [Thread-6023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:27:47.265 [DEBUG] [Thread-6023] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:27:47.266 [DEBUG] [Thread-6023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:27:47.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:27:47.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:27:47.268 [DEBUG] [Thread-6023] [transport.py] [_log()] userauth is OK
2025-11-25T21:27:47.268 [DEBUG] [Thread-6023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:27:47.268 [DEBUG] [Thread-6023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:27:47.268 [DEBUG] [Thread-6023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:27:47.268 [DEBUG] [Thread-6023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:27:47.292 [INFO] [Thread-6023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:27:47.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:27:47.944 [DEBUG] [Thread-6023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:27:47.945 [DEBUG] [Thread-6023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:27:47.945 [DEBUG] [Thread-6023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:27:47.986 [DEBUG] [Thread-6023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:27:47.986 [DEBUG] [Thread-6023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:27:47.989 [DEBUG] [Thread-6023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:27:48.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:27:48.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:27:48.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:27:48.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:27:48.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:27:48.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:27:48.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:27:48.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:27:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:27:48.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.810515 -999.00  +21.40   3.69     20   -1.80 1 1 1 1 1     0    0 23.33 -1.82 ZNESW 8.9 3.7 239.7 8.0 21.4 -26.0 21.4 -25.4 21.1 -24.1 21.3 -25.2
2025-11-25T21:27:48.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:27:48.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:27:48.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.810515
2025-11-25T21:27:48.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:27:48.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:27:48.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:27:48.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:27:48.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:27:48.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:27:30', tmtdew=27.17, humidity=15.83, cloud=0.0, wind=8.35, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:27:30', seeing=1.14, atlas_timestamp='2025-11-25T19:27:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, 0.025249999999999773, 0.05025000000000013, 0.03849999999999909, 0.041499999999999204, 0.10475000000000101, 0.06700000000000017, 0.05874999999999986, 0.04249999999999865, 0.01699999999999946, 0.07824999999999882, 0.021500000000001407, 0.0649999999999995, 0.062249999999998806, 0.05299999999999905, -0.011000000000001009, 0.017250000000000654, 0.06649999999999956, 0.08199999999999896, 0.02624999999999922, 0.09199999999999875, 0.09974999999999845, 0.03625000000000078, 0.043750000000001066, 0.023999999999999133, 0.06550000000000011, 0.07075000000000031, 0.1095000000000006, 0.10699999999999932, 0.009500000000000952, 0.07900000000000063, 0.027000000000001023, 0.013249999999999318], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:27:48.014 [DEBUG] [Thread-6023] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:27:48.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:27:48.109 [DEBUG] [Thread-6026] [transport.py] [_log()] starting thread (client mode): 0x70d74700
2025-11-25T21:27:48.109 [DEBUG] [Thread-6026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:27:48.124 [DEBUG] [Thread-6026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:27:48.125 [INFO] [Thread-6026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:27:48.132 [DEBUG] [Thread-6026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:27:48.132 [DEBUG] [Thread-6026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:27:48.132 [DEBUG] [Thread-6026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:27:48.132 [DEBUG] [Thread-6026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] client lang: <none>
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] server lang: <none>
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] kex follows: False
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] Compression: none
2025-11-25T21:27:48.133 [DEBUG] [Thread-6026] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:27:48.191 [DEBUG] [Thread-6026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:27:48.191 [DEBUG] [Thread-6026] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:27:48.192 [DEBUG] [Thread-6026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:27:48.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:27:48.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:27:48.247 [DEBUG] [Thread-6026] [transport.py] [_log()] userauth is OK
2025-11-25T21:27:48.247 [DEBUG] [Thread-6026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:27:48.247 [DEBUG] [Thread-6026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:27:48.248 [DEBUG] [Thread-6026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:27:48.248 [DEBUG] [Thread-6026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:27:48.267 [INFO] [Thread-6026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:27:48.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:27:48.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:27:49.121 [DEBUG] [Thread-6026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:27:49.121 [DEBUG] [Thread-6026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:27:49.169 [DEBUG] [Thread-6026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:27:49.169 [DEBUG] [Thread-6026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:27:49.178 [DEBUG] [Thread-6026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:27:49.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:27:49.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:27:49.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:27:49.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:27:49.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:27:49.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:27:49.215 [DEBUG] [Thread-6026] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:27:51.310 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:27:53.697 [DEBUG] [Thread-6028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:28:00.034 [DEBUG] [Thread-6029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:28:08.754 [DEBUG] [Thread-6030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:28:19.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:28:19.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:28:19.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:28:19.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 28, 2), 27.25, 15.77, 0.0, 8.14, 21.51, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:28:19.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:28:02
2025-11-25T21:28:19.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:28:20.144 [DEBUG] [Thread-6031] [transport.py] [_log()] starting thread (client mode): 0x70d39540
2025-11-25T21:28:20.144 [DEBUG] [Thread-6031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:28:20.167 [DEBUG] [Thread-6031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:28:20.167 [INFO] [Thread-6031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] client lang: <none>
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] server lang: <none>
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] kex follows: False
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:28:20.170 [DEBUG] [Thread-6031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:28:20.171 [DEBUG] [Thread-6031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:28:20.171 [DEBUG] [Thread-6031] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:28:20.171 [DEBUG] [Thread-6031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:28:20.171 [DEBUG] [Thread-6031] [transport.py] [_log()] Compression: none
2025-11-25T21:28:20.171 [DEBUG] [Thread-6031] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:28:20.188 [DEBUG] [Thread-6031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:28:20.189 [DEBUG] [Thread-6031] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:28:20.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:28:20.190 [DEBUG] [Thread-6031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:28:20.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:28:20.192 [DEBUG] [Thread-6031] [transport.py] [_log()] userauth is OK
2025-11-25T21:28:20.192 [DEBUG] [Thread-6031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:28:20.192 [DEBUG] [Thread-6031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:28:20.192 [DEBUG] [Thread-6031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:28:20.192 [DEBUG] [Thread-6031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:28:20.210 [INFO] [Thread-6031] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:28:20.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:28:20.824 [DEBUG] [Thread-6031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:28:20.824 [DEBUG] [Thread-6031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:28:20.825 [DEBUG] [Thread-6031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:28:20.864 [DEBUG] [Thread-6031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:28:20.864 [DEBUG] [Thread-6031] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:28:20.867 [DEBUG] [Thread-6031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:28:20.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:28:20.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:28:20.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:28:20.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:28:20.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:28:20.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:28:20.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:28:20.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:28:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:28:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.811210 -999.00  +21.40   5.68     21   -1.80 1 1 1 1 1     0    0 23.07 -2.52 ZNESW 3.8 5.7 197.9 10.7 21.4 -25.9 21.3 -25.4 21.0 -24.0 21.2 -25.1
2025-11-25T21:28:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:28:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:28:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.811210
2025-11-25T21:28:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:28:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:28:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:28:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:28:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:28:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:28:02', tmtdew=27.25, humidity=15.77, cloud=0.0, wind=8.14, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:28:02', seeing=1.14, atlas_timestamp='2025-11-25T19:28:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, 0.025249999999999773, 0.05025000000000013, 0.03849999999999909, 0.041499999999999204, 0.10475000000000101, 0.06700000000000017, 0.05874999999999986, 0.04249999999999865, 0.01699999999999946, 0.07824999999999882, 0.021500000000001407, 0.0649999999999995, 0.062249999999998806, 0.05299999999999905, -0.011000000000001009, 0.017250000000000654, 0.06649999999999956, 0.08199999999999896, 0.02624999999999922, 0.09199999999999875, 0.09974999999999845, 0.03625000000000078, 0.043750000000001066, 0.023999999999999133, 0.06550000000000011, 0.07075000000000031, 0.1095000000000006, 0.10699999999999932, 0.009500000000000952, 0.07900000000000063, 0.027000000000001023, 0.013249999999999318], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:28:20.887 [DEBUG] [Thread-6031] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:28:20.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:28:20.974 [DEBUG] [Thread-6034] [transport.py] [_log()] starting thread (client mode): 0x70d3b6d0
2025-11-25T21:28:20.974 [DEBUG] [Thread-6034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:28:20.988 [DEBUG] [Thread-6034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:28:20.989 [INFO] [Thread-6034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:28:20.996 [DEBUG] [Thread-6034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:28:20.996 [DEBUG] [Thread-6034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:28:20.996 [DEBUG] [Thread-6034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:28:20.996 [DEBUG] [Thread-6034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:28:20.996 [DEBUG] [Thread-6034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:28:20.996 [DEBUG] [Thread-6034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:28:20.996 [DEBUG] [Thread-6034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:28:20.996 [DEBUG] [Thread-6034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] client lang: <none>
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] server lang: <none>
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] kex follows: False
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] Compression: none
2025-11-25T21:28:20.997 [DEBUG] [Thread-6034] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:28:21.055 [DEBUG] [Thread-6034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:28:21.055 [DEBUG] [Thread-6034] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:28:21.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:28:21.056 [DEBUG] [Thread-6034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:28:21.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:28:21.111 [DEBUG] [Thread-6034] [transport.py] [_log()] userauth is OK
2025-11-25T21:28:21.111 [DEBUG] [Thread-6034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:28:21.111 [DEBUG] [Thread-6034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:28:21.111 [DEBUG] [Thread-6034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:28:21.111 [DEBUG] [Thread-6034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:28:21.130 [INFO] [Thread-6034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:28:21.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:28:21.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:28:22.000 [DEBUG] [Thread-6034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:28:22.000 [DEBUG] [Thread-6034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:28:22.048 [DEBUG] [Thread-6034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:28:22.048 [DEBUG] [Thread-6034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:28:22.058 [DEBUG] [Thread-6034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:28:22.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:28:22.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:28:22.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:28:22.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:28:22.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:28:22.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:28:22.095 [DEBUG] [Thread-6034] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:28:23.788 [DEBUG] [Thread-6036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:28:38.844 [DEBUG] [Thread-6037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:28:42.131 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:28:42.133 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:28:52.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:28:52.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:28:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:28:52.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 28, 34), 27.3, 15.75, 0.0, 11.45, 21.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:28:52.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:28:34
2025-11-25T21:28:52.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:28:53.020 [DEBUG] [Thread-6038] [transport.py] [_log()] starting thread (client mode): 0x70d77280
2025-11-25T21:28:53.020 [DEBUG] [Thread-6038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:28:53.041 [DEBUG] [Thread-6038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:28:53.041 [INFO] [Thread-6038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:28:53.043 [DEBUG] [Thread-6038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] client lang: <none>
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] server lang: <none>
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] kex follows: False
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] Compression: none
2025-11-25T21:28:53.044 [DEBUG] [Thread-6038] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:28:53.062 [DEBUG] [Thread-6038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:28:53.063 [DEBUG] [Thread-6038] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:28:53.063 [DEBUG] [Thread-6038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:28:53.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:28:53.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:28:53.065 [DEBUG] [Thread-6038] [transport.py] [_log()] userauth is OK
2025-11-25T21:28:53.066 [DEBUG] [Thread-6038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:28:53.066 [DEBUG] [Thread-6038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:28:53.066 [DEBUG] [Thread-6038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:28:53.066 [DEBUG] [Thread-6038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:28:53.091 [INFO] [Thread-6038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:28:53.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:28:53.731 [DEBUG] [Thread-6038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:28:53.731 [DEBUG] [Thread-6038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:28:53.731 [DEBUG] [Thread-6038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:28:53.772 [DEBUG] [Thread-6038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:28:53.772 [DEBUG] [Thread-6038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:28:53.776 [DEBUG] [Thread-6038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:28:53.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:28:53.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:28:53.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:28:53.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:28:53.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:28:53.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:28:53.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:28:53.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:28:53.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:28:53.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.811557 -999.00  +21.30   4.23     21   -1.80 1 1 1 1 1     0    0 23.05 -2.79 ZNESW 5.7 4.2 231.1 10.2 21.4 -26.0 21.4 -25.3 21.1 -24.0 21.3 -25.0
2025-11-25T21:28:53.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:28:53.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:28:53.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.811557
2025-11-25T21:28:53.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:28:53.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:28:53.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:28:53.804 [DEBUG] [Thread-6038] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:28:53.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:28:53.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:28:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:28:34', tmtdew=27.3, humidity=15.75, cloud=0.0, wind=11.45, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:28:34', seeing=0.95, atlas_timestamp='2025-11-25T19:28:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, 0.025249999999999773, 0.05025000000000013, 0.03849999999999909, 0.041499999999999204, 0.10475000000000101, 0.06700000000000017, 0.05874999999999986, 0.04249999999999865, 0.01699999999999946, 0.07824999999999882, 0.021500000000001407, 0.0649999999999995, 0.062249999999998806, 0.05299999999999905, -0.011000000000001009, 0.017250000000000654, 0.06649999999999956, 0.08199999999999896, 0.02624999999999922, 0.09199999999999875, 0.09974999999999845, 0.03625000000000078, 0.043750000000001066, 0.023999999999999133, 0.06550000000000011, 0.07075000000000031, 0.1095000000000006, 0.10699999999999932, 0.009500000000000952, 0.07900000000000063, 0.027000000000001023, 0.013249999999999318], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:28:53.878 [DEBUG] [Thread-6041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:28:53.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:28:53.899 [DEBUG] [Thread-6042] [transport.py] [_log()] starting thread (client mode): 0x70d295d0
2025-11-25T21:28:53.899 [DEBUG] [Thread-6042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:28:53.915 [DEBUG] [Thread-6042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:28:53.916 [INFO] [Thread-6042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:28:53.923 [DEBUG] [Thread-6042] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:28:53.923 [DEBUG] [Thread-6042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:28:53.924 [DEBUG] [Thread-6042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:28:53.924 [DEBUG] [Thread-6042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:28:53.924 [DEBUG] [Thread-6042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:28:53.924 [DEBUG] [Thread-6042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:28:53.924 [DEBUG] [Thread-6042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:28:53.924 [DEBUG] [Thread-6042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:28:53.924 [DEBUG] [Thread-6042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:28:53.924 [DEBUG] [Thread-6042] [transport.py] [_log()] client lang: <none>
2025-11-25T21:28:53.924 [DEBUG] [Thread-6042] [transport.py] [_log()] server lang: <none>
2025-11-25T21:28:53.925 [DEBUG] [Thread-6042] [transport.py] [_log()] kex follows: False
2025-11-25T21:28:53.925 [DEBUG] [Thread-6042] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:28:53.925 [DEBUG] [Thread-6042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:28:53.925 [DEBUG] [Thread-6042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:28:53.925 [DEBUG] [Thread-6042] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:28:53.925 [DEBUG] [Thread-6042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:28:53.925 [DEBUG] [Thread-6042] [transport.py] [_log()] Compression: none
2025-11-25T21:28:53.926 [DEBUG] [Thread-6042] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:28:53.987 [DEBUG] [Thread-6042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:28:53.988 [DEBUG] [Thread-6042] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:28:53.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:28:53.990 [DEBUG] [Thread-6042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:28:53.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:28:54.047 [DEBUG] [Thread-6042] [transport.py] [_log()] userauth is OK
2025-11-25T21:28:54.047 [DEBUG] [Thread-6042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:28:54.047 [DEBUG] [Thread-6042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:28:54.047 [DEBUG] [Thread-6042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:28:54.048 [DEBUG] [Thread-6042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:28:54.070 [INFO] [Thread-6042] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:28:54.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:28:54.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:28:54.938 [DEBUG] [Thread-6042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:28:54.939 [DEBUG] [Thread-6042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:28:54.987 [DEBUG] [Thread-6042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:28:54.987 [DEBUG] [Thread-6042] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:28:55.002 [DEBUG] [Thread-6042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:28:55.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:28:55.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:28:55.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:28:55.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:28:55.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:28:55.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:28:55.039 [DEBUG] [Thread-6042] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:28:55.433 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:28:58.495 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:29:00.132 [DEBUG] [Thread-6044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:29:08.921 [DEBUG] [Thread-6045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:29:23.955 [DEBUG] [Thread-6046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:29:25.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:29:25.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:29:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:29:25.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 29, 6), 27.29, 15.77, 0.0, 10.87, 21.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:29:25.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:29:06
2025-11-25T21:29:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:29:26.025 [DEBUG] [Thread-6047] [transport.py] [_log()] starting thread (client mode): 0x70d2a830
2025-11-25T21:29:26.026 [DEBUG] [Thread-6047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:29:26.038 [DEBUG] [Thread-6047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:29:26.038 [INFO] [Thread-6047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] client lang: <none>
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] server lang: <none>
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] kex follows: False
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] Compression: none
2025-11-25T21:29:26.041 [DEBUG] [Thread-6047] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:29:26.057 [DEBUG] [Thread-6047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:29:26.057 [DEBUG] [Thread-6047] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:29:26.057 [DEBUG] [Thread-6047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:29:26.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:29:26.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:29:26.058 [DEBUG] [Thread-6047] [transport.py] [_log()] userauth is OK
2025-11-25T21:29:26.058 [DEBUG] [Thread-6047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:29:26.058 [DEBUG] [Thread-6047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:29:26.058 [DEBUG] [Thread-6047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:29:26.058 [DEBUG] [Thread-6047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:29:26.067 [INFO] [Thread-6047] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:29:26.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:29:26.717 [DEBUG] [Thread-6047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:29:26.717 [DEBUG] [Thread-6047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:29:26.717 [DEBUG] [Thread-6047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:29:26.758 [DEBUG] [Thread-6047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:29:26.758 [DEBUG] [Thread-6047] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:29:26.760 [DEBUG] [Thread-6047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:29:26.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:29:26.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:29:26.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:29:26.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:29:26.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:29:26.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:29:26.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:29:26.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:29:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:29:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.811904 -999.00  +21.40   6.50     21   -1.80 1 1 1 1 1     0    0 23.16 -2.90 ZNESW 5.3 6.5 203.9 9.5 21.4 -25.8 21.3 -25.2 21.0 -24.0 21.2 -25.2
2025-11-25T21:29:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:29:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:29:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.811904
2025-11-25T21:29:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:29:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:29:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:29:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:29:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:29:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:29:06', tmtdew=27.29, humidity=15.77, cloud=0.0, wind=10.87, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:29:06', seeing=0.97, atlas_timestamp='2025-11-25T19:29:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, 0.025249999999999773, 0.05025000000000013, 0.03849999999999909, 0.041499999999999204, 0.10475000000000101, 0.06700000000000017, 0.05874999999999986, 0.04249999999999865, 0.01699999999999946, 0.07824999999999882, 0.021500000000001407, 0.0649999999999995, 0.062249999999998806, 0.05299999999999905, -0.011000000000001009, 0.017250000000000654, 0.06649999999999956, 0.08199999999999896, 0.02624999999999922, 0.09199999999999875, 0.09974999999999845, 0.03625000000000078, 0.043750000000001066, 0.023999999999999133, 0.06550000000000011, 0.07075000000000031, 0.1095000000000006, 0.10699999999999932, 0.009500000000000952, 0.07900000000000063, 0.027000000000001023, 0.013249999999999318], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:29:26.777 [DEBUG] [Thread-6047] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:29:26.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:29:26.863 [DEBUG] [Thread-6050] [transport.py] [_log()] starting thread (client mode): 0x70d74310
2025-11-25T21:29:26.863 [DEBUG] [Thread-6050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:29:26.877 [DEBUG] [Thread-6050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:29:26.877 [INFO] [Thread-6050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] client lang: <none>
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] server lang: <none>
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] kex follows: False
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] Compression: none
2025-11-25T21:29:26.885 [DEBUG] [Thread-6050] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:29:26.940 [DEBUG] [Thread-6050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:29:26.940 [DEBUG] [Thread-6050] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:29:26.941 [DEBUG] [Thread-6050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:29:26.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:29:26.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:29:26.998 [DEBUG] [Thread-6050] [transport.py] [_log()] userauth is OK
2025-11-25T21:29:26.998 [DEBUG] [Thread-6050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:29:26.998 [DEBUG] [Thread-6050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:29:26.998 [DEBUG] [Thread-6050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:29:26.998 [DEBUG] [Thread-6050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:29:27.012 [INFO] [Thread-6050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:29:27.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:29:27.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:29:27.862 [DEBUG] [Thread-6050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:29:27.862 [DEBUG] [Thread-6050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:29:27.913 [DEBUG] [Thread-6050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:29:27.913 [DEBUG] [Thread-6050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:29:27.925 [DEBUG] [Thread-6050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:29:27.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:29:27.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:29:27.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:29:27.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:29:27.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:29:27.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:29:27.957 [DEBUG] [Thread-6050] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:29:38.985 [DEBUG] [Thread-6052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:29:42.335 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:29:42.336 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:29:54.024 [DEBUG] [Thread-6053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:29:57.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:29:57.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:29:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:29:58.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 29, 38), 27.36, 15.25, 0.0, 12.02, 21.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:29:58.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:29:38
2025-11-25T21:29:58.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:29:58.906 [DEBUG] [Thread-6054] [transport.py] [_log()] starting thread (client mode): 0x70d75060
2025-11-25T21:29:58.906 [DEBUG] [Thread-6054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:29:58.924 [DEBUG] [Thread-6054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:29:58.924 [INFO] [Thread-6054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:29:58.927 [DEBUG] [Thread-6054] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] client lang: <none>
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] server lang: <none>
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] kex follows: False
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] Compression: none
2025-11-25T21:29:58.928 [DEBUG] [Thread-6054] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:29:58.944 [DEBUG] [Thread-6054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:29:58.944 [DEBUG] [Thread-6054] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:29:58.945 [DEBUG] [Thread-6054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:29:58.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:29:58.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:29:58.947 [DEBUG] [Thread-6054] [transport.py] [_log()] userauth is OK
2025-11-25T21:29:58.947 [DEBUG] [Thread-6054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:29:58.947 [DEBUG] [Thread-6054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:29:58.947 [DEBUG] [Thread-6054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:29:58.947 [DEBUG] [Thread-6054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:29:58.965 [INFO] [Thread-6054] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:29:58.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:29:59.561 [DEBUG] [Thread-6054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:29:59.561 [DEBUG] [Thread-6054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:29:59.562 [DEBUG] [Thread-6054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:29:59.603 [DEBUG] [Thread-6054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:29:59.603 [DEBUG] [Thread-6054] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:29:59.606 [DEBUG] [Thread-6054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:29:59.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:29:59.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:29:59.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:29:59.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:29:59.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:29:59.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:29:59.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:29:59.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:29:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:29:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.812251 -999.00  +21.30   5.23     21   -1.80 1 1 1 1 1     0    0 23.19 -2.90 ZNESW 5.1 5.2 211.2 9.4 21.3 -25.8 21.3 -25.1 21.1 -24.0 21.2 -25.2
2025-11-25T21:29:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:29:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:29:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.812251
2025-11-25T21:29:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:29:59.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:29:59.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:29:59.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:29:59.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:29:59.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:29:38', tmtdew=27.36, humidity=15.25, cloud=0.0, wind=12.02, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:29:38', seeing=1.0, atlas_timestamp='2025-11-25T19:29:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, 0.025249999999999773, 0.05025000000000013, 0.03849999999999909, 0.041499999999999204, 0.10475000000000101, 0.06700000000000017, 0.05874999999999986, 0.04249999999999865, 0.01699999999999946, 0.07824999999999882, 0.021500000000001407, 0.0649999999999995, 0.062249999999998806, 0.05299999999999905, -0.011000000000001009, 0.017250000000000654, 0.06649999999999956, 0.08199999999999896, 0.02624999999999922, 0.09199999999999875, 0.09974999999999845, 0.03625000000000078, 0.043750000000001066, 0.023999999999999133, 0.06550000000000011, 0.07075000000000031, 0.1095000000000006, 0.10699999999999932, 0.009500000000000952, 0.07900000000000063, 0.027000000000001023, 0.013249999999999318], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:29:59.632 [DEBUG] [Thread-6054] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:29:59.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:29:59.725 [DEBUG] [Thread-6057] [transport.py] [_log()] starting thread (client mode): 0x70d018a0
2025-11-25T21:29:59.725 [DEBUG] [Thread-6057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:29:59.740 [DEBUG] [Thread-6057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:29:59.740 [INFO] [Thread-6057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:29:59.747 [DEBUG] [Thread-6057] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:29:59.747 [DEBUG] [Thread-6057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:29:59.747 [DEBUG] [Thread-6057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:29:59.747 [DEBUG] [Thread-6057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] client lang: <none>
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] server lang: <none>
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] kex follows: False
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] Compression: none
2025-11-25T21:29:59.748 [DEBUG] [Thread-6057] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:29:59.810 [DEBUG] [Thread-6057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:29:59.811 [DEBUG] [Thread-6057] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:29:59.811 [DEBUG] [Thread-6057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:29:59.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:29:59.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:29:59.866 [DEBUG] [Thread-6057] [transport.py] [_log()] userauth is OK
2025-11-25T21:29:59.867 [DEBUG] [Thread-6057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:29:59.867 [DEBUG] [Thread-6057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:29:59.867 [DEBUG] [Thread-6057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:29:59.867 [DEBUG] [Thread-6057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:29:59.886 [INFO] [Thread-6057] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:29:59.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:29:59.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:30:00.187 [DEBUG] [Thread-6059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:30:00.708 [DEBUG] [Thread-6057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:30:00.708 [DEBUG] [Thread-6057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:30:00.756 [DEBUG] [Thread-6057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:30:00.757 [DEBUG] [Thread-6057] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:30:00.765 [DEBUG] [Thread-6057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:30:00.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:30:00.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:30:00.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:30:00.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:30:00.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:30:00.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:30:00.797 [DEBUG] [Thread-6057] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:30:09.060 [DEBUG] [Thread-6060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:30:24.114 [DEBUG] [Thread-6061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:30:30.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:30:30.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:30:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:30:31.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 30, 10), 27.38, 15.22, 0.0, 12.14, 21.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:30:31.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:30:10
2025-11-25T21:30:31.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:30:31.759 [DEBUG] [Thread-6062] [transport.py] [_log()] starting thread (client mode): 0x70d74310
2025-11-25T21:30:31.760 [DEBUG] [Thread-6062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:30:31.779 [DEBUG] [Thread-6062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:30:31.779 [INFO] [Thread-6062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:30:31.781 [DEBUG] [Thread-6062] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:30:31.781 [DEBUG] [Thread-6062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:30:31.781 [DEBUG] [Thread-6062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:30:31.781 [DEBUG] [Thread-6062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:30:31.781 [DEBUG] [Thread-6062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:30:31.781 [DEBUG] [Thread-6062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:30:31.781 [DEBUG] [Thread-6062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:30:31.781 [DEBUG] [Thread-6062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:30:31.781 [DEBUG] [Thread-6062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] client lang: <none>
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] server lang: <none>
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] kex follows: False
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] Compression: none
2025-11-25T21:30:31.782 [DEBUG] [Thread-6062] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:30:31.791 [DEBUG] [Thread-6062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:30:31.792 [DEBUG] [Thread-6062] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:30:31.792 [DEBUG] [Thread-6062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:30:31.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:30:31.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:30:31.794 [DEBUG] [Thread-6062] [transport.py] [_log()] userauth is OK
2025-11-25T21:30:31.794 [DEBUG] [Thread-6062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:30:31.794 [DEBUG] [Thread-6062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:30:31.794 [DEBUG] [Thread-6062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:30:31.794 [DEBUG] [Thread-6062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:30:31.815 [INFO] [Thread-6062] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:30:31.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:30:32.389 [DEBUG] [Thread-6062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:30:32.389 [DEBUG] [Thread-6062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:30:32.389 [DEBUG] [Thread-6062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:30:32.430 [DEBUG] [Thread-6062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:30:32.430 [DEBUG] [Thread-6062] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:30:32.433 [DEBUG] [Thread-6062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:30:32.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:30:32.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:30:32.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:30:32.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:30:32.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:30:32.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:30:32.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:30:32.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:30:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:30:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.812598 -999.00  +21.40   7.21     20   -1.80 1 1 1 1 1     0    0 23.41 -2.74 ZNESW 4.3 7.2 197.6 9.0 21.3 -25.8 21.3 -25.2 21.0 -23.8 21.2 -25.0
2025-11-25T21:30:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:30:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:30:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.812598
2025-11-25T21:30:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:30:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:30:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:30:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:30:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:30:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:30:10', tmtdew=27.38, humidity=15.22, cloud=0.0, wind=12.14, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:30:10', seeing=0.88, atlas_timestamp='2025-11-25T19:30:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:30:32.458 [DEBUG] [Thread-6062] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:30:32.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:30:32.558 [DEBUG] [Thread-6065] [transport.py] [_log()] starting thread (client mode): 0x70d75150
2025-11-25T21:30:32.558 [DEBUG] [Thread-6065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:30:32.572 [DEBUG] [Thread-6065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:30:32.573 [INFO] [Thread-6065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:30:32.580 [DEBUG] [Thread-6065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] client lang: <none>
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] server lang: <none>
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] kex follows: False
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] Compression: none
2025-11-25T21:30:32.581 [DEBUG] [Thread-6065] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:30:32.639 [DEBUG] [Thread-6065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:30:32.639 [DEBUG] [Thread-6065] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:30:32.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:30:32.641 [DEBUG] [Thread-6065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:30:32.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:30:32.695 [DEBUG] [Thread-6065] [transport.py] [_log()] userauth is OK
2025-11-25T21:30:32.695 [DEBUG] [Thread-6065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:30:32.695 [DEBUG] [Thread-6065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:30:32.695 [DEBUG] [Thread-6065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:30:32.695 [DEBUG] [Thread-6065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:30:32.714 [INFO] [Thread-6065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:30:32.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:30:32.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:30:33.506 [DEBUG] [Thread-6065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:30:33.506 [DEBUG] [Thread-6065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:30:33.554 [DEBUG] [Thread-6065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:30:33.554 [DEBUG] [Thread-6065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:30:33.563 [DEBUG] [Thread-6065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:30:33.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:30:33.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:30:33.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:30:33.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:30:33.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:30:33.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:30:33.596 [DEBUG] [Thread-6065] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:30:39.148 [DEBUG] [Thread-6067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:30:42.536 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:30:42.537 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:30:54.199 [DEBUG] [Thread-6068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:31:00.256 [DEBUG] [Thread-6069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:31:03.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:31:03.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:31:03.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:31:04.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 30, 42), 27.47, 15.23, 0.0, 11.38, 21.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:31:04.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:30:42
2025-11-25T21:31:04.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:31:04.544 [DEBUG] [Thread-6070] [transport.py] [_log()] starting thread (client mode): 0x70d57f70
2025-11-25T21:31:04.545 [DEBUG] [Thread-6070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:31:04.565 [DEBUG] [Thread-6070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:31:04.565 [INFO] [Thread-6070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] client lang: <none>
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] server lang: <none>
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] kex follows: False
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:31:04.568 [DEBUG] [Thread-6070] [transport.py] [_log()] Compression: none
2025-11-25T21:31:04.569 [DEBUG] [Thread-6070] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:31:04.586 [DEBUG] [Thread-6070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:31:04.587 [DEBUG] [Thread-6070] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:31:04.587 [DEBUG] [Thread-6070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:31:04.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:31:04.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:31:04.590 [DEBUG] [Thread-6070] [transport.py] [_log()] userauth is OK
2025-11-25T21:31:04.590 [DEBUG] [Thread-6070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:31:04.590 [DEBUG] [Thread-6070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:31:04.590 [DEBUG] [Thread-6070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:31:04.590 [DEBUG] [Thread-6070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:31:04.605 [INFO] [Thread-6070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:31:04.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:31:05.274 [DEBUG] [Thread-6070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:31:05.275 [DEBUG] [Thread-6070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:31:05.275 [DEBUG] [Thread-6070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:31:05.316 [DEBUG] [Thread-6070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:31:05.316 [DEBUG] [Thread-6070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:31:05.319 [DEBUG] [Thread-6070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:31:05.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:31:05.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:31:05.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:31:05.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:31:05.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:31:05.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:31:05.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:31:05.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:31:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:31:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.812598 -999.00  +21.40   7.21     20   -1.80 1 1 1 1 1     0    0 23.41 -2.74 ZNESW 4.3 7.2 197.6 9.0 21.3 -25.8 21.3 -25.2 21.0 -23.8 21.2 -25.0
2025-11-25T21:31:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:31:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:31:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.812598
2025-11-25T21:31:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:31:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:31:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:31:05.347 [DEBUG] [Thread-6070] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:31:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:31:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:31:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:30:42', tmtdew=27.47, humidity=15.23, cloud=0.0, wind=11.38, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:30:42', seeing=0.88, atlas_timestamp='2025-11-25T19:30:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:31:05.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:31:05.444 [DEBUG] [Thread-6073] [transport.py] [_log()] starting thread (client mode): 0x70d750f0
2025-11-25T21:31:05.444 [DEBUG] [Thread-6073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:31:05.459 [DEBUG] [Thread-6073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:31:05.459 [INFO] [Thread-6073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:31:05.467 [DEBUG] [Thread-6073] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:31:05.467 [DEBUG] [Thread-6073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:31:05.467 [DEBUG] [Thread-6073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:31:05.467 [DEBUG] [Thread-6073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:31:05.467 [DEBUG] [Thread-6073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:31:05.467 [DEBUG] [Thread-6073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:31:05.468 [DEBUG] [Thread-6073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:31:05.468 [DEBUG] [Thread-6073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:31:05.468 [DEBUG] [Thread-6073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:31:05.468 [DEBUG] [Thread-6073] [transport.py] [_log()] client lang: <none>
2025-11-25T21:31:05.468 [DEBUG] [Thread-6073] [transport.py] [_log()] server lang: <none>
2025-11-25T21:31:05.468 [DEBUG] [Thread-6073] [transport.py] [_log()] kex follows: False
2025-11-25T21:31:05.468 [DEBUG] [Thread-6073] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:31:05.468 [DEBUG] [Thread-6073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:31:05.469 [DEBUG] [Thread-6073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:31:05.469 [DEBUG] [Thread-6073] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:31:05.469 [DEBUG] [Thread-6073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:31:05.469 [DEBUG] [Thread-6073] [transport.py] [_log()] Compression: none
2025-11-25T21:31:05.469 [DEBUG] [Thread-6073] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:31:05.530 [DEBUG] [Thread-6073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:31:05.531 [DEBUG] [Thread-6073] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:31:05.532 [DEBUG] [Thread-6073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:31:05.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:31:05.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:31:05.587 [DEBUG] [Thread-6073] [transport.py] [_log()] userauth is OK
2025-11-25T21:31:05.587 [DEBUG] [Thread-6073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:31:05.587 [DEBUG] [Thread-6073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:31:05.587 [DEBUG] [Thread-6073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:31:05.587 [DEBUG] [Thread-6073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:31:05.607 [INFO] [Thread-6073] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:31:05.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:31:05.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:31:06.489 [DEBUG] [Thread-6073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:31:06.489 [DEBUG] [Thread-6073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:31:06.537 [DEBUG] [Thread-6073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:31:06.537 [DEBUG] [Thread-6073] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:31:06.547 [DEBUG] [Thread-6073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:31:06.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:31:06.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:31:06.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:31:06.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:31:06.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:31:06.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:31:06.588 [DEBUG] [Thread-6073] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:31:09.237 [DEBUG] [Thread-6075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:31:24.288 [DEBUG] [Thread-6076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:31:36.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:31:36.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:31:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:31:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 31, 14), 27.45, 15.27, 0.0, 11.06, 21.66, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:31:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:31:14
2025-11-25T21:31:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:31:37.511 [DEBUG] [Thread-6077] [transport.py] [_log()] starting thread (client mode): 0x70d56aa0
2025-11-25T21:31:37.511 [DEBUG] [Thread-6077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:31:37.532 [DEBUG] [Thread-6077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:31:37.532 [INFO] [Thread-6077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] client lang: <none>
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] server lang: <none>
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] kex follows: False
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:31:37.535 [DEBUG] [Thread-6077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:31:37.536 [DEBUG] [Thread-6077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:31:37.536 [DEBUG] [Thread-6077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:31:37.536 [DEBUG] [Thread-6077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:31:37.536 [DEBUG] [Thread-6077] [transport.py] [_log()] Compression: none
2025-11-25T21:31:37.536 [DEBUG] [Thread-6077] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:31:37.555 [DEBUG] [Thread-6077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:31:37.556 [DEBUG] [Thread-6077] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:31:37.556 [DEBUG] [Thread-6077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:31:37.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:31:37.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:31:37.601 [DEBUG] [Thread-6077] [transport.py] [_log()] userauth is OK
2025-11-25T21:31:37.601 [DEBUG] [Thread-6077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:31:37.601 [DEBUG] [Thread-6077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:31:37.601 [DEBUG] [Thread-6077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:31:37.601 [DEBUG] [Thread-6077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:31:37.633 [INFO] [Thread-6077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:31:37.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:31:38.260 [DEBUG] [Thread-6077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:31:38.260 [DEBUG] [Thread-6077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:31:38.261 [DEBUG] [Thread-6077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:31:38.301 [DEBUG] [Thread-6077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:31:38.301 [DEBUG] [Thread-6077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:31:38.305 [DEBUG] [Thread-6077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:31:38.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:31:38.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:31:38.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:31:38.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:31:38.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:31:38.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:31:38.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:31:38.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:31:38.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:31:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.812946 -999.00  +21.50   4.28     20   -1.80 1 1 1 1 1     0    0 23.12 -2.38 ZNESW 7.5 4.3 264.0 9.2 21.3 -25.7 21.3 -25.2 21.0 -23.9 21.2 -24.9
2025-11-25T21:31:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:31:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:31:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.812946
2025-11-25T21:31:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:31:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:31:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:31:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:31:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:31:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:31:14', tmtdew=27.45, humidity=15.27, cloud=0.0, wind=11.06, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:31:14', seeing=0.95, atlas_timestamp='2025-11-25T19:30:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:31:38.332 [DEBUG] [Thread-6077] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:31:38.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:31:38.428 [DEBUG] [Thread-6080] [transport.py] [_log()] starting thread (client mode): 0x70d38fd0
2025-11-25T21:31:38.428 [DEBUG] [Thread-6080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:31:38.444 [DEBUG] [Thread-6080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:31:38.444 [INFO] [Thread-6080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:31:38.451 [DEBUG] [Thread-6080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] client lang: <none>
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] server lang: <none>
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] kex follows: False
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] Compression: none
2025-11-25T21:31:38.452 [DEBUG] [Thread-6080] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:31:38.511 [DEBUG] [Thread-6080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:31:38.511 [DEBUG] [Thread-6080] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:31:38.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:31:38.512 [DEBUG] [Thread-6080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:31:38.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:31:38.567 [DEBUG] [Thread-6080] [transport.py] [_log()] userauth is OK
2025-11-25T21:31:38.567 [DEBUG] [Thread-6080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:31:38.567 [DEBUG] [Thread-6080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:31:38.567 [DEBUG] [Thread-6080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:31:38.567 [DEBUG] [Thread-6080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:31:38.587 [INFO] [Thread-6080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:31:38.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:31:38.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:31:39.328 [DEBUG] [Thread-6082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:31:39.393 [DEBUG] [Thread-6080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:31:39.394 [DEBUG] [Thread-6080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:31:39.442 [DEBUG] [Thread-6080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:31:39.442 [DEBUG] [Thread-6080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:31:39.451 [DEBUG] [Thread-6080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:31:39.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:31:39.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:31:39.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:31:39.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:31:39.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:31:39.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:31:39.491 [DEBUG] [Thread-6080] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:31:42.738 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:31:42.739 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:31:54.385 [DEBUG] [Thread-6083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:32:00.335 [DEBUG] [Thread-6084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:32:09.418 [DEBUG] [Thread-6085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:32:09.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:32:09.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:32:09.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:32:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 31, 46), 27.5, 15.22, 0.0, 11.95, 21.64, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:32:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:31:46
2025-11-25T21:32:10.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:32:10.466 [DEBUG] [Thread-6086] [transport.py] [_log()] starting thread (client mode): 0x70d03460
2025-11-25T21:32:10.466 [DEBUG] [Thread-6086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:32:10.483 [DEBUG] [Thread-6086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:32:10.484 [INFO] [Thread-6086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] client lang: <none>
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] server lang: <none>
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] kex follows: False
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:32:10.486 [DEBUG] [Thread-6086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:32:10.487 [DEBUG] [Thread-6086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:32:10.487 [DEBUG] [Thread-6086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:32:10.487 [DEBUG] [Thread-6086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:32:10.487 [DEBUG] [Thread-6086] [transport.py] [_log()] Compression: none
2025-11-25T21:32:10.487 [DEBUG] [Thread-6086] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:32:10.497 [DEBUG] [Thread-6086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:32:10.497 [DEBUG] [Thread-6086] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:32:10.498 [DEBUG] [Thread-6086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:32:10.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:32:10.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:32:10.499 [DEBUG] [Thread-6086] [transport.py] [_log()] userauth is OK
2025-11-25T21:32:10.499 [DEBUG] [Thread-6086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:32:10.500 [DEBUG] [Thread-6086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:32:10.500 [DEBUG] [Thread-6086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:32:10.500 [DEBUG] [Thread-6086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:32:10.536 [INFO] [Thread-6086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:32:10.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:32:11.194 [DEBUG] [Thread-6086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:32:11.194 [DEBUG] [Thread-6086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:32:11.194 [DEBUG] [Thread-6086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:32:11.235 [DEBUG] [Thread-6086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:32:11.235 [DEBUG] [Thread-6086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:32:11.238 [DEBUG] [Thread-6086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:32:11.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:32:11.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:32:11.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:32:11.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:32:11.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:32:11.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:32:11.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:32:11.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:32:11.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:32:11.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.813640 -999.00  +21.40   6.29     20   -1.90 1 1 1 1 1     0    0 23.05 -1.93 ZNESW 5.8 6.3 201.0 8.3 21.3 -25.9 21.3 -25.3 21.0 -24.0 21.2 -24.9
2025-11-25T21:32:11.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:32:11.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:32:11.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.813640
2025-11-25T21:32:11.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:32:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:32:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:32:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:32:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:32:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:31:46', tmtdew=27.5, humidity=15.22, cloud=0.0, wind=11.95, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:31:46', seeing=1.04, atlas_timestamp='2025-11-25T19:31:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:32:11.264 [DEBUG] [Thread-6086] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:32:11.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:32:11.360 [DEBUG] [Thread-6089] [transport.py] [_log()] starting thread (client mode): 0x70d39db0
2025-11-25T21:32:11.361 [DEBUG] [Thread-6089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:32:11.375 [DEBUG] [Thread-6089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:32:11.376 [INFO] [Thread-6089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:32:11.384 [DEBUG] [Thread-6089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:32:11.384 [DEBUG] [Thread-6089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:32:11.384 [DEBUG] [Thread-6089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:32:11.384 [DEBUG] [Thread-6089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] client lang: <none>
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] server lang: <none>
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] kex follows: False
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] Compression: none
2025-11-25T21:32:11.385 [DEBUG] [Thread-6089] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:32:11.448 [DEBUG] [Thread-6089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:32:11.448 [DEBUG] [Thread-6089] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:32:11.449 [DEBUG] [Thread-6089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:32:11.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:32:11.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:32:11.507 [DEBUG] [Thread-6089] [transport.py] [_log()] userauth is OK
2025-11-25T21:32:11.507 [DEBUG] [Thread-6089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:32:11.507 [DEBUG] [Thread-6089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:32:11.507 [DEBUG] [Thread-6089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:32:11.507 [DEBUG] [Thread-6089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:32:11.526 [INFO] [Thread-6089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:32:11.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:32:11.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:32:12.401 [DEBUG] [Thread-6089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:32:12.401 [DEBUG] [Thread-6089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:32:12.450 [DEBUG] [Thread-6089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:32:12.450 [DEBUG] [Thread-6089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:32:12.458 [DEBUG] [Thread-6089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:32:12.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:32: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')
2025-11-25T21:32:12.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:32:12.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:32:12.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:32:12.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:32:12.491 [DEBUG] [Thread-6089] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:32:24.455 [DEBUG] [Thread-6091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:32:39.503 [DEBUG] [Thread-6092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:32:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:32:42.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:32:42.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:32:42.939 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:32:42.940 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:32:43.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 32, 18), 27.52, 15.18, 0.0, 13.06, 21.62, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:32:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:32:18
2025-11-25T21:32:43.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:32:43.454 [DEBUG] [Thread-6093] [transport.py] [_log()] starting thread (client mode): 0x70d55ae0
2025-11-25T21:32:43.454 [DEBUG] [Thread-6093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:32:43.475 [DEBUG] [Thread-6093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:32:43.475 [INFO] [Thread-6093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] client lang: <none>
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] server lang: <none>
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] kex follows: False
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] Compression: none
2025-11-25T21:32:43.478 [DEBUG] [Thread-6093] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:32:43.498 [DEBUG] [Thread-6093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:32:43.498 [DEBUG] [Thread-6093] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:32:43.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:32:43.500 [DEBUG] [Thread-6093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:32:43.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:32:43.502 [DEBUG] [Thread-6093] [transport.py] [_log()] userauth is OK
2025-11-25T21:32:43.502 [DEBUG] [Thread-6093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:32:43.502 [DEBUG] [Thread-6093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:32:43.502 [DEBUG] [Thread-6093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:32:43.503 [DEBUG] [Thread-6093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:32:43.527 [INFO] [Thread-6093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:32:43.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:32:44.144 [DEBUG] [Thread-6093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:32:44.144 [DEBUG] [Thread-6093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:32:44.145 [DEBUG] [Thread-6093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:32:44.184 [DEBUG] [Thread-6093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:32:44.185 [DEBUG] [Thread-6093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:32:44.187 [DEBUG] [Thread-6093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:32:44.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:32:44.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:32:44.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:32:44.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:32:44.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:32:44.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:32:44.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:32:44.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:32:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:32:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.813988 -999.00  +21.40   7.56     20   -1.80 1 1 1 1 1     0    0 23.00 -1.64 ZNESW 3.0 7.6 204.6 13.6 21.3 -25.8 21.3 -25.2 21.0 -24.0 21.2 -24.8
2025-11-25T21:32:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:32:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:32:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.813988
2025-11-25T21:32:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:32:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:32:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:32:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:32:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:32:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:32:18', tmtdew=27.52, humidity=15.18, cloud=0.0, wind=13.06, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:32:18', seeing=1.04, atlas_timestamp='2025-11-25T19:32:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:32:44.210 [DEBUG] [Thread-6093] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:32:44.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:32:44.306 [DEBUG] [Thread-6096] [transport.py] [_log()] starting thread (client mode): 0x70d023e0
2025-11-25T21:32:44.306 [DEBUG] [Thread-6096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:32:44.322 [DEBUG] [Thread-6096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:32:44.322 [INFO] [Thread-6096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:32:44.330 [DEBUG] [Thread-6096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:32:44.330 [DEBUG] [Thread-6096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:32:44.330 [DEBUG] [Thread-6096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:32:44.330 [DEBUG] [Thread-6096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:32:44.330 [DEBUG] [Thread-6096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:32:44.330 [DEBUG] [Thread-6096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:32:44.330 [DEBUG] [Thread-6096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:32:44.330 [DEBUG] [Thread-6096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:32:44.330 [DEBUG] [Thread-6096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] client lang: <none>
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] server lang: <none>
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] kex follows: False
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] Compression: none
2025-11-25T21:32:44.331 [DEBUG] [Thread-6096] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:32:44.394 [DEBUG] [Thread-6096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:32:44.395 [DEBUG] [Thread-6096] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:32:44.395 [DEBUG] [Thread-6096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:32:44.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:32:44.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:32:44.450 [DEBUG] [Thread-6096] [transport.py] [_log()] userauth is OK
2025-11-25T21:32:44.450 [DEBUG] [Thread-6096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:32:44.450 [DEBUG] [Thread-6096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:32:44.450 [DEBUG] [Thread-6096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:32:44.450 [DEBUG] [Thread-6096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:32:44.470 [INFO] [Thread-6096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:32:44.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:32:44.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:32:45.307 [DEBUG] [Thread-6096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:32:45.307 [DEBUG] [Thread-6096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:32:45.355 [DEBUG] [Thread-6096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:32:45.355 [DEBUG] [Thread-6096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:32:45.364 [DEBUG] [Thread-6096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:32:45.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:32:45.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:32:45.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:32:45.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:32:45.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:32:45.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:32:45.397 [DEBUG] [Thread-6096] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:32:54.539 [DEBUG] [Thread-6098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:33:00.399 [DEBUG] [Thread-6099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:33:09.592 [DEBUG] [Thread-6100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:33:15.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:33:15.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:33:15.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 32, 50), 27.56, 15.09, 0.0, 12.3, 21.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:32:50
2025-11-25T21:33:16.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:33:16.365 [DEBUG] [Thread-6101] [transport.py] [_log()] starting thread (client mode): 0x70d38250
2025-11-25T21:33:16.365 [DEBUG] [Thread-6101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:33:16.382 [DEBUG] [Thread-6101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:33:16.382 [INFO] [Thread-6101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] client lang: <none>
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] server lang: <none>
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] kex follows: False
2025-11-25T21:33:16.383 [DEBUG] [Thread-6101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:33:16.384 [DEBUG] [Thread-6101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:33:16.384 [DEBUG] [Thread-6101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:33:16.384 [DEBUG] [Thread-6101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:33:16.384 [DEBUG] [Thread-6101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:33:16.384 [DEBUG] [Thread-6101] [transport.py] [_log()] Compression: none
2025-11-25T21:33:16.384 [DEBUG] [Thread-6101] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:33:16.393 [DEBUG] [Thread-6101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:33:16.394 [DEBUG] [Thread-6101] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:33:16.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:33:16.395 [DEBUG] [Thread-6101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:33:16.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:33:16.397 [DEBUG] [Thread-6101] [transport.py] [_log()] userauth is OK
2025-11-25T21:33:16.397 [DEBUG] [Thread-6101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:33:16.397 [DEBUG] [Thread-6101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:33:16.397 [DEBUG] [Thread-6101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:33:16.397 [DEBUG] [Thread-6101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:33:16.423 [INFO] [Thread-6101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:33:16.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:33:16.997 [DEBUG] [Thread-6101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:33:16.997 [DEBUG] [Thread-6101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:33:16.997 [DEBUG] [Thread-6101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:33:17.037 [DEBUG] [Thread-6101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:33:17.037 [DEBUG] [Thread-6101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:33:17.040 [DEBUG] [Thread-6101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:33:17.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:33:17.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:33:17.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:33:17.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:33:17.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:33:17.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:33:17.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:33:17.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:33:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:33:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.814335 -999.00  +21.30   6.21     20   -1.80 1 1 1 1 1     0    0 23.15 -1.44 ZNESW 7.0 6.2 218.5 8.1 21.2 -25.9 21.2 -25.4 21.0 -24.0 21.2 -25.0
2025-11-25T21:33:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:33:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:33:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.814335
2025-11-25T21:33:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:33:17.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:33:17.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:33:17.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:33:17.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:33:17.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:32:50', tmtdew=27.56, humidity=15.09, cloud=0.0, wind=12.3, temperature=21.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:32:50', seeing=1.04, atlas_timestamp='2025-11-25T19:32:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:26:00')
2025-11-25T21:33:17.068 [DEBUG] [Thread-6101] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:33:17.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:33:17.165 [DEBUG] [Thread-6104] [transport.py] [_log()] starting thread (client mode): 0x70d74af0
2025-11-25T21:33:17.165 [DEBUG] [Thread-6104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:33:17.179 [DEBUG] [Thread-6104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:33:17.180 [INFO] [Thread-6104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] client lang: <none>
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] server lang: <none>
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] kex follows: False
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:33:17.187 [DEBUG] [Thread-6104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:33:17.188 [DEBUG] [Thread-6104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:33:17.188 [DEBUG] [Thread-6104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:33:17.188 [DEBUG] [Thread-6104] [transport.py] [_log()] Compression: none
2025-11-25T21:33:17.188 [DEBUG] [Thread-6104] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:33:17.245 [DEBUG] [Thread-6104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:33:17.246 [DEBUG] [Thread-6104] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:33:17.246 [DEBUG] [Thread-6104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:33:17.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:33:17.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:33:17.302 [DEBUG] [Thread-6104] [transport.py] [_log()] userauth is OK
2025-11-25T21:33:17.303 [DEBUG] [Thread-6104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:33:17.303 [DEBUG] [Thread-6104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:33:17.303 [DEBUG] [Thread-6104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:33:17.303 [DEBUG] [Thread-6104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:33:17.322 [INFO] [Thread-6104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:33:17.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:33:17.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:33:18.164 [DEBUG] [Thread-6104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:33:18.165 [DEBUG] [Thread-6104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:33:18.213 [DEBUG] [Thread-6104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:33:18.213 [DEBUG] [Thread-6104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:33:18.222 [DEBUG] [Thread-6104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:33:18.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:33:18.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:33: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
2025-11-25T21:33:18.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:33:18.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:33:18.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:33:18.261 [DEBUG] [Thread-6104] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:33:24.620 [DEBUG] [Thread-6106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:33:39.663 [DEBUG] [Thread-6107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:33:43.143 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:33:43.145 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:33:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:33:48.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:33:48.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:33:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 33, 22), 27.44, 15.22, 0.0, 12.79, 21.57, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:33:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:33:22
2025-11-25T21:33:49.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:33:49.281 [DEBUG] [Thread-6108] [transport.py] [_log()] starting thread (client mode): 0x70d557b0
2025-11-25T21:33:49.282 [DEBUG] [Thread-6108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:33:49.302 [DEBUG] [Thread-6108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:33:49.302 [INFO] [Thread-6108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] client lang: <none>
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] server lang: <none>
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] kex follows: False
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] Compression: none
2025-11-25T21:33:49.306 [DEBUG] [Thread-6108] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:33:49.322 [DEBUG] [Thread-6108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:33:49.322 [DEBUG] [Thread-6108] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:33:49.323 [DEBUG] [Thread-6108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:33:49.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:33:49.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:33:49.324 [DEBUG] [Thread-6108] [transport.py] [_log()] userauth is OK
2025-11-25T21:33:49.324 [DEBUG] [Thread-6108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:33:49.324 [DEBUG] [Thread-6108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:33:49.324 [DEBUG] [Thread-6108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:33:49.324 [DEBUG] [Thread-6108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:33:49.340 [INFO] [Thread-6108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:33:49.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:33:49.984 [DEBUG] [Thread-6108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:33:49.984 [DEBUG] [Thread-6108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:33:49.984 [DEBUG] [Thread-6108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:33:50.025 [DEBUG] [Thread-6108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:33:50.025 [DEBUG] [Thread-6108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:33:50.028 [DEBUG] [Thread-6108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:33:50.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:33:50.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:33:50.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:33:50.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:33:50.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:33:50.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:33:50.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:33:50.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:33:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:33:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.814682 -999.00  +21.30  11.39     20   -1.90 1 1 1 1 1     0    0 22.90 -1.15 ZNESW 8.3 11.4 200.4 13.8 21.3 -25.8 21.2 -25.3 20.9 -24.1 21.2 -25.2
2025-11-25T21:33:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:33:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:33:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.814682
2025-11-25T21:33:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:33:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:33:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:33:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:33:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:33:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:33:22', tmtdew=27.44, humidity=15.22, cloud=0.0, wind=12.79, temperature=21.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:33:22', seeing=1.04, atlas_timestamp='2025-11-25T19:33:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:33:50.048 [DEBUG] [Thread-6108] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:33:50.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:33:50.135 [DEBUG] [Thread-6111] [transport.py] [_log()] starting thread (client mode): 0x70d1ebf0
2025-11-25T21:33:50.135 [DEBUG] [Thread-6111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:33:50.150 [DEBUG] [Thread-6111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:33:50.150 [INFO] [Thread-6111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:33:50.157 [DEBUG] [Thread-6111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:33:50.157 [DEBUG] [Thread-6111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:33:50.157 [DEBUG] [Thread-6111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:33:50.157 [DEBUG] [Thread-6111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:33:50.157 [DEBUG] [Thread-6111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:33:50.157 [DEBUG] [Thread-6111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:33:50.157 [DEBUG] [Thread-6111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:33:50.157 [DEBUG] [Thread-6111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] client lang: <none>
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] server lang: <none>
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] kex follows: False
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] Compression: none
2025-11-25T21:33:50.158 [DEBUG] [Thread-6111] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:33:50.214 [DEBUG] [Thread-6111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:33:50.214 [DEBUG] [Thread-6111] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:33:50.214 [DEBUG] [Thread-6111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:33:50.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:33:50.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:33:50.270 [DEBUG] [Thread-6111] [transport.py] [_log()] userauth is OK
2025-11-25T21:33:50.271 [DEBUG] [Thread-6111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:33:50.271 [DEBUG] [Thread-6111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:33:50.271 [DEBUG] [Thread-6111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:33:50.271 [DEBUG] [Thread-6111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:33:50.288 [INFO] [Thread-6111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:33:50.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:33:50.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:33:51.127 [DEBUG] [Thread-6111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:33:51.128 [DEBUG] [Thread-6111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:33:51.176 [DEBUG] [Thread-6111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:33:51.176 [DEBUG] [Thread-6111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:33:51.185 [DEBUG] [Thread-6111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:33:51.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:33:51.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:33:51.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:33:51.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:33:51.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:33:51.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:33:51.222 [DEBUG] [Thread-6111] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:33:54.697 [DEBUG] [Thread-6113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:34:00.468 [DEBUG] [Thread-6114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:34:09.753 [DEBUG] [Thread-6115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:34:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:34:21.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:34:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:34:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 33, 54), 27.39, 15.22, 0.0, 12.55, 21.56, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:34:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:33:54
2025-11-25T21:34:22.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:34:22.194 [DEBUG] [Thread-6116] [transport.py] [_log()] starting thread (client mode): 0x70d57580
2025-11-25T21:34:22.194 [DEBUG] [Thread-6116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:34:22.214 [DEBUG] [Thread-6116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:34:22.214 [INFO] [Thread-6116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:34:22.217 [DEBUG] [Thread-6116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:34:22.217 [DEBUG] [Thread-6116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:34:22.217 [DEBUG] [Thread-6116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:34:22.217 [DEBUG] [Thread-6116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:34:22.217 [DEBUG] [Thread-6116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:34:22.217 [DEBUG] [Thread-6116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] client lang: <none>
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] server lang: <none>
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] kex follows: False
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] Compression: none
2025-11-25T21:34:22.218 [DEBUG] [Thread-6116] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:34:22.233 [DEBUG] [Thread-6116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:34:22.233 [DEBUG] [Thread-6116] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:34:22.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:34:22.233 [DEBUG] [Thread-6116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:34:22.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:34:22.234 [DEBUG] [Thread-6116] [transport.py] [_log()] userauth is OK
2025-11-25T21:34:22.234 [DEBUG] [Thread-6116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:34:22.234 [DEBUG] [Thread-6116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:34:22.234 [DEBUG] [Thread-6116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:34:22.234 [DEBUG] [Thread-6116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:34:22.243 [INFO] [Thread-6116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:34:22.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:34:23.028 [DEBUG] [Thread-6116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:34:23.028 [DEBUG] [Thread-6116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:34:23.028 [DEBUG] [Thread-6116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:34:23.069 [DEBUG] [Thread-6116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:34:23.069 [DEBUG] [Thread-6116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:34:23.071 [DEBUG] [Thread-6116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:34:23.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:34:23.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:34:23.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:34:23.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:34:23.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:34:23.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:34:23.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.815029 -999.00  +21.30   5.16     20   -1.90 1 1 1 1 1     0    0 23.18 -0.71 ZNESW 5.9 5.2 191.1 12.5 21.2 -25.9 21.2 -25.2 20.9 -23.9 21.2 -25.0
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.815029
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:34:23.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:33:54', tmtdew=27.39, humidity=15.22, cloud=0.0, wind=12.55, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:33:54', seeing=1.04, atlas_timestamp='2025-11-25T19:33:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:34:23.089 [DEBUG] [Thread-6116] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:34:23.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:34:23.177 [DEBUG] [Thread-6119] [transport.py] [_log()] starting thread (client mode): 0x70d56ce0
2025-11-25T21:34:23.177 [DEBUG] [Thread-6119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:34:23.191 [DEBUG] [Thread-6119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:34:23.191 [INFO] [Thread-6119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] client lang: <none>
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] server lang: <none>
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] kex follows: False
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] Compression: none
2025-11-25T21:34:23.199 [DEBUG] [Thread-6119] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:34:23.260 [DEBUG] [Thread-6119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:34:23.261 [DEBUG] [Thread-6119] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:34:23.261 [DEBUG] [Thread-6119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:34:23.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:34:23.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:34:23.320 [DEBUG] [Thread-6119] [transport.py] [_log()] userauth is OK
2025-11-25T21:34:23.320 [DEBUG] [Thread-6119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:34:23.320 [DEBUG] [Thread-6119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:34:23.320 [DEBUG] [Thread-6119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:34:23.320 [DEBUG] [Thread-6119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:34:23.334 [INFO] [Thread-6119] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:34:23.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:34:23.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:34:24.169 [DEBUG] [Thread-6119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:34:24.169 [DEBUG] [Thread-6119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:34:24.217 [DEBUG] [Thread-6119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:34:24.217 [DEBUG] [Thread-6119] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:34:24.228 [DEBUG] [Thread-6119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:34:24.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:34:24.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:34:24.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:34:24.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:34:24.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:34:24.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:34:24.259 [DEBUG] [Thread-6119] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:34:24.785 [DEBUG] [Thread-6121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:34:39.828 [DEBUG] [Thread-6122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:34:43.356 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:34:43.358 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:34:54.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:34:54.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:34:54.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:34:54.865 [DEBUG] [Thread-6123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:34:54.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 34, 26), 27.4, 15.2, 0.0, 12.53, 21.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:34:54.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:34:26
2025-11-25T21:34:55.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:34:55.214 [DEBUG] [Thread-6124] [transport.py] [_log()] starting thread (client mode): 0x70d74100
2025-11-25T21:34:55.214 [DEBUG] [Thread-6124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:34:55.235 [DEBUG] [Thread-6124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:34:55.235 [INFO] [Thread-6124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:34:55.238 [DEBUG] [Thread-6124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] client lang: <none>
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] server lang: <none>
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] kex follows: False
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] Compression: none
2025-11-25T21:34:55.239 [DEBUG] [Thread-6124] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:34:55.257 [DEBUG] [Thread-6124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:34:55.258 [DEBUG] [Thread-6124] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:34:55.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:34:55.259 [DEBUG] [Thread-6124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:34:55.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:34:55.261 [DEBUG] [Thread-6124] [transport.py] [_log()] userauth is OK
2025-11-25T21:34:55.261 [DEBUG] [Thread-6124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:34:55.261 [DEBUG] [Thread-6124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:34:55.261 [DEBUG] [Thread-6124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:34:55.262 [DEBUG] [Thread-6124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:34:55.280 [INFO] [Thread-6124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:34:55.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:34:55.929 [DEBUG] [Thread-6124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:34:55.929 [DEBUG] [Thread-6124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:34:55.930 [DEBUG] [Thread-6124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:34:55.970 [DEBUG] [Thread-6124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:34:55.970 [DEBUG] [Thread-6124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:34:55.974 [DEBUG] [Thread-6124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:34:55.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:34:55.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:34:55.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:34:55.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:34:55.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:34:55.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:34:56.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:34:56.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:34:56.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:34:56.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.815376 -999.00  +21.30   8.55     20   -1.90 1 1 1 1 1     0    0 23.73 -0.27 ZNESW 6.0 8.6 206.7 12.7 21.3 -25.8 21.2 -25.2 20.9 -24.0 21.2 -25.0
2025-11-25T21:34:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:34:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:34:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.815376
2025-11-25T21:34:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:34:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:34:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:34:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:34:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:34:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:34:26', tmtdew=27.4, humidity=15.2, cloud=0.0, wind=12.53, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:34:26', seeing=1.04, atlas_timestamp='2025-11-25T19:34:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:34:56.002 [DEBUG] [Thread-6124] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:34:56.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:34:56.099 [DEBUG] [Thread-6127] [transport.py] [_log()] starting thread (client mode): 0x70d54340
2025-11-25T21:34:56.099 [DEBUG] [Thread-6127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:34:56.117 [DEBUG] [Thread-6127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:34:56.117 [INFO] [Thread-6127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:34:56.125 [DEBUG] [Thread-6127] [transport.py] [_log()] client lang: <none>
2025-11-25T21:34:56.126 [DEBUG] [Thread-6127] [transport.py] [_log()] server lang: <none>
2025-11-25T21:34:56.126 [DEBUG] [Thread-6127] [transport.py] [_log()] kex follows: False
2025-11-25T21:34:56.126 [DEBUG] [Thread-6127] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:34:56.126 [DEBUG] [Thread-6127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:34:56.126 [DEBUG] [Thread-6127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:34:56.126 [DEBUG] [Thread-6127] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:34:56.126 [DEBUG] [Thread-6127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:34:56.126 [DEBUG] [Thread-6127] [transport.py] [_log()] Compression: none
2025-11-25T21:34:56.126 [DEBUG] [Thread-6127] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:34:56.183 [DEBUG] [Thread-6127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:34:56.184 [DEBUG] [Thread-6127] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:34:56.185 [DEBUG] [Thread-6127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:34:56.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:34:56.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:34:56.243 [DEBUG] [Thread-6127] [transport.py] [_log()] userauth is OK
2025-11-25T21:34:56.243 [DEBUG] [Thread-6127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:34:56.243 [DEBUG] [Thread-6127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:34:56.243 [DEBUG] [Thread-6127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:34:56.243 [DEBUG] [Thread-6127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:34:56.272 [INFO] [Thread-6127] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:34:56.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:34:56.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:34:57.157 [DEBUG] [Thread-6127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:34:57.157 [DEBUG] [Thread-6127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:34:57.206 [DEBUG] [Thread-6127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:34:57.207 [DEBUG] [Thread-6127] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:34:57.216 [DEBUG] [Thread-6127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:34:57.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:34:57.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')
2025-11-25T21:34:57.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:34:57.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:34:57.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:34:57.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:34:57.253 [DEBUG] [Thread-6127] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:35:00.535 [DEBUG] [Thread-6129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:35:09.894 [DEBUG] [Thread-6130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:35:24.945 [DEBUG] [Thread-6131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:35:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:35:27.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:35:27.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:35:27.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 34, 58), 27.48, 15.17, 0.0, 13.06, 21.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:35:27.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:34:58
2025-11-25T21:35:28.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:35:28.207 [DEBUG] [Thread-6132] [transport.py] [_log()] starting thread (client mode): 0x70d40ca0
2025-11-25T21:35:28.207 [DEBUG] [Thread-6132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:35:28.228 [DEBUG] [Thread-6132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:35:28.228 [INFO] [Thread-6132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] client lang: <none>
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] server lang: <none>
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] kex follows: False
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:35:28.231 [DEBUG] [Thread-6132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:35:28.232 [DEBUG] [Thread-6132] [transport.py] [_log()] Compression: none
2025-11-25T21:35:28.232 [DEBUG] [Thread-6132] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:35:28.249 [DEBUG] [Thread-6132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:35:28.250 [DEBUG] [Thread-6132] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:35:28.250 [DEBUG] [Thread-6132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:35:28.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:35:28.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:35:28.252 [DEBUG] [Thread-6132] [transport.py] [_log()] userauth is OK
2025-11-25T21:35:28.252 [DEBUG] [Thread-6132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:35:28.252 [DEBUG] [Thread-6132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:35:28.253 [DEBUG] [Thread-6132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:35:28.253 [DEBUG] [Thread-6132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:35:28.270 [INFO] [Thread-6132] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:35:28.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:35:29.095 [DEBUG] [Thread-6132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:35:29.096 [DEBUG] [Thread-6132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:35:29.096 [DEBUG] [Thread-6132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:35:29.137 [DEBUG] [Thread-6132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:35:29.137 [DEBUG] [Thread-6132] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:35:29.140 [DEBUG] [Thread-6132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:35:29.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:35:29.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:35:29.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:35:29.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:35:29.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:35:29.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:35:29.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:35:29.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:35:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:35:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.816071 -999.00  +21.20   9.25     20   -1.90 1 1 1 1 1     0    0 23.42 -0.06 ZNESW 7.0 9.2 205.8 11.3 21.2 -25.8 21.2 -25.3 20.9 -24.0 21.1 -25.1
2025-11-25T21:35:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:35:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:35:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.816071
2025-11-25T21:35:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:35:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:35:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:35:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:35:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:35:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:34:58', tmtdew=27.48, humidity=15.17, cloud=0.0, wind=13.06, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:34:58', seeing=1.04, atlas_timestamp='2025-11-25T19:35:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:35:29.165 [DEBUG] [Thread-6132] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:35:29.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:35:29.262 [DEBUG] [Thread-6135] [transport.py] [_log()] starting thread (client mode): 0x7374e290
2025-11-25T21:35:29.262 [DEBUG] [Thread-6135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:35:29.277 [DEBUG] [Thread-6135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:35:29.278 [INFO] [Thread-6135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:35:29.285 [DEBUG] [Thread-6135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:35:29.285 [DEBUG] [Thread-6135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:35:29.285 [DEBUG] [Thread-6135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:35:29.285 [DEBUG] [Thread-6135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:35:29.285 [DEBUG] [Thread-6135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:35:29.285 [DEBUG] [Thread-6135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] client lang: <none>
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] server lang: <none>
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] kex follows: False
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] Compression: none
2025-11-25T21:35:29.286 [DEBUG] [Thread-6135] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:35:29.342 [DEBUG] [Thread-6135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:35:29.343 [DEBUG] [Thread-6135] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:35:29.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:35:29.344 [DEBUG] [Thread-6135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:35:29.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:35:29.399 [DEBUG] [Thread-6135] [transport.py] [_log()] userauth is OK
2025-11-25T21:35:29.400 [DEBUG] [Thread-6135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:35:29.400 [DEBUG] [Thread-6135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:35:29.400 [DEBUG] [Thread-6135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:35:29.400 [DEBUG] [Thread-6135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:35:29.422 [INFO] [Thread-6135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:35:29.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:35:29.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:35:30.231 [DEBUG] [Thread-6135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:35:30.231 [DEBUG] [Thread-6135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:35:30.278 [DEBUG] [Thread-6135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:35:30.279 [DEBUG] [Thread-6135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:35:30.288 [DEBUG] [Thread-6135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:35:30.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:35:30.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:35:30.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:35:30.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:35:30.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:35:30.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:35:30.323 [DEBUG] [Thread-6135] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:35:39.977 [DEBUG] [Thread-6137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:35:43.560 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:35:43.561 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:35:55.022 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:36:00.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:36:00.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:36:00.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:36:00.603 [DEBUG] [Thread-6139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:36:00.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 35, 30), 27.45, 15.2, 0.0, 12.79, 21.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:36:00.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:35:30
2025-11-25T21:36:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:36:01.261 [DEBUG] [Thread-6140] [transport.py] [_log()] starting thread (client mode): 0x70d68d60
2025-11-25T21:36:01.261 [DEBUG] [Thread-6140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:36:01.282 [DEBUG] [Thread-6140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:36:01.282 [INFO] [Thread-6140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:36:01.283 [DEBUG] [Thread-6140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:36:01.283 [DEBUG] [Thread-6140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:36:01.283 [DEBUG] [Thread-6140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] client lang: <none>
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] server lang: <none>
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] kex follows: False
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] Compression: none
2025-11-25T21:36:01.284 [DEBUG] [Thread-6140] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:36:01.294 [DEBUG] [Thread-6140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:36:01.295 [DEBUG] [Thread-6140] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:36:01.295 [DEBUG] [Thread-6140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:36:01.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:36:01.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:36:01.297 [DEBUG] [Thread-6140] [transport.py] [_log()] userauth is OK
2025-11-25T21:36:01.297 [DEBUG] [Thread-6140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:36:01.298 [DEBUG] [Thread-6140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:36:01.298 [DEBUG] [Thread-6140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:36:01.298 [DEBUG] [Thread-6140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:36:01.322 [INFO] [Thread-6140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:36:01.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:36:01.999 [DEBUG] [Thread-6140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:36:01.999 [DEBUG] [Thread-6140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:36:02.000 [DEBUG] [Thread-6140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:36:02.039 [DEBUG] [Thread-6140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:36:02.040 [DEBUG] [Thread-6140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:36:02.043 [DEBUG] [Thread-6140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:36:02.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:36:02.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:36:02.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:36:02.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:36:02.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:36:02.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:36:02.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:36:02.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:36:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:36:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.816418 -999.00  +21.20   4.15     20   -1.90 1 1 1 1 1     0    0 23.31 -0.04 ZNESW 6.1 4.2 215.1 11.2 21.2 -25.9 21.2 -25.3 20.9 -24.0 21.1 -24.9
2025-11-25T21:36:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:36:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:36:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.816418
2025-11-25T21:36:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:36:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:36:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:36:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:36:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:36:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:35:30', tmtdew=27.45, humidity=15.2, cloud=0.0, wind=12.79, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:35:31', seeing=1.04, atlas_timestamp='2025-11-25T19:35:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:36:02.068 [DEBUG] [Thread-6140] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:36:02.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:36:02.165 [DEBUG] [Thread-6143] [transport.py] [_log()] starting thread (client mode): 0x70d76560
2025-11-25T21:36:02.165 [DEBUG] [Thread-6143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:36:02.182 [DEBUG] [Thread-6143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:36:02.183 [INFO] [Thread-6143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:36:02.190 [DEBUG] [Thread-6143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] client lang: <none>
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] server lang: <none>
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] kex follows: False
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:36:02.191 [DEBUG] [Thread-6143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:36:02.192 [DEBUG] [Thread-6143] [transport.py] [_log()] Compression: none
2025-11-25T21:36:02.192 [DEBUG] [Thread-6143] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:36:02.251 [DEBUG] [Thread-6143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:36:02.251 [DEBUG] [Thread-6143] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:36:02.252 [DEBUG] [Thread-6143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:36:02.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:36:02.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:36:02.307 [DEBUG] [Thread-6143] [transport.py] [_log()] userauth is OK
2025-11-25T21:36:02.307 [DEBUG] [Thread-6143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:36:02.307 [DEBUG] [Thread-6143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:36:02.307 [DEBUG] [Thread-6143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:36:02.307 [DEBUG] [Thread-6143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:36:02.326 [INFO] [Thread-6143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:36:02.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:36:02.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:36:03.181 [DEBUG] [Thread-6143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:36:03.181 [DEBUG] [Thread-6143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:36:03.229 [DEBUG] [Thread-6143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:36:03.229 [DEBUG] [Thread-6143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:36:03.237 [DEBUG] [Thread-6143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:36:03.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:36:03.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:36:03.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:36:03.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:36:03.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:36:03.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:36:03.268 [DEBUG] [Thread-6143] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:36:10.055 [DEBUG] [Thread-6145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:36:25.100 [DEBUG] [Thread-6146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:36:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:36:33.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:36:33.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:36:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 36, 2), 27.45, 15.18, 0.0, 12.62, 21.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:36:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:36:02
2025-11-25T21:36:34.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:36:34.242 [DEBUG] [Thread-6147] [transport.py] [_log()] starting thread (client mode): 0x70d74160
2025-11-25T21:36:34.242 [DEBUG] [Thread-6147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:36:34.262 [DEBUG] [Thread-6147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:36:34.262 [INFO] [Thread-6147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:36:34.265 [DEBUG] [Thread-6147] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:36:34.265 [DEBUG] [Thread-6147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] client lang: <none>
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] server lang: <none>
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] kex follows: False
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:36:34.266 [DEBUG] [Thread-6147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:36:34.267 [DEBUG] [Thread-6147] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:36:34.267 [DEBUG] [Thread-6147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:36:34.267 [DEBUG] [Thread-6147] [transport.py] [_log()] Compression: none
2025-11-25T21:36:34.267 [DEBUG] [Thread-6147] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:36:34.286 [DEBUG] [Thread-6147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:36:34.287 [DEBUG] [Thread-6147] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:36:34.288 [DEBUG] [Thread-6147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:36:34.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:36:34.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:36:34.290 [DEBUG] [Thread-6147] [transport.py] [_log()] userauth is OK
2025-11-25T21:36:34.290 [DEBUG] [Thread-6147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:36:34.290 [DEBUG] [Thread-6147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:36:34.290 [DEBUG] [Thread-6147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:36:34.290 [DEBUG] [Thread-6147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:36:34.315 [INFO] [Thread-6147] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:36:34.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:36:35.152 [DEBUG] [Thread-6147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:36:35.152 [DEBUG] [Thread-6147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:36:35.152 [DEBUG] [Thread-6147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:36:35.193 [DEBUG] [Thread-6147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:36:35.193 [DEBUG] [Thread-6147] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:36:35.196 [DEBUG] [Thread-6147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:36:35.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:36:35.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:36:35.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:36:35.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:36:35.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:36:35.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:36:35.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:36:35.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:36:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:36:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.816765 -999.00  +21.20   8.62     20   -2.00 1 1 1 1 1     0    0 23.38 0.43 ZNESW 7.0 8.6 211.0 10.2 21.2 -25.9 21.2 -25.2 20.9 -24.0 21.1 -24.9
2025-11-25T21:36:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:36:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:36:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.816765
2025-11-25T21:36:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:36:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:36:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:36:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:36:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:36:35.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:36:02', tmtdew=27.45, humidity=15.18, cloud=0.0, wind=12.62, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:36:02', seeing=0.92, atlas_timestamp='2025-11-25T19:36:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:36:35.214 [DEBUG] [Thread-6147] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:36:35.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:36:35.299 [DEBUG] [Thread-6150] [transport.py] [_log()] starting thread (client mode): 0x70d77c40
2025-11-25T21:36:35.300 [DEBUG] [Thread-6150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:36:35.314 [DEBUG] [Thread-6150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:36:35.314 [INFO] [Thread-6150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] client lang: <none>
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] server lang: <none>
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] kex follows: False
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] Compression: none
2025-11-25T21:36:35.322 [DEBUG] [Thread-6150] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:36:35.379 [DEBUG] [Thread-6150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:36:35.379 [DEBUG] [Thread-6150] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:36:35.380 [DEBUG] [Thread-6150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:36:35.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:36:35.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:36:35.438 [DEBUG] [Thread-6150] [transport.py] [_log()] userauth is OK
2025-11-25T21:36:35.438 [DEBUG] [Thread-6150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:36:35.438 [DEBUG] [Thread-6150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:36:35.438 [DEBUG] [Thread-6150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:36:35.438 [DEBUG] [Thread-6150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:36:35.452 [INFO] [Thread-6150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:36:35.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:36:35.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:36:36.321 [DEBUG] [Thread-6150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:36:36.321 [DEBUG] [Thread-6150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:36:36.369 [DEBUG] [Thread-6150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:36:36.369 [DEBUG] [Thread-6150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:36:36.377 [DEBUG] [Thread-6150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:36:36.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:36:36.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:36:36.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:36:36.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:36:36.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:36:36.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:36:36.410 [DEBUG] [Thread-6150] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:36:40.137 [DEBUG] [Thread-6152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:36:43.764 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:36:43.765 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:36:55.220 [DEBUG] [Thread-6153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:37:00.660 [DEBUG] [Thread-6154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:37:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:37:06.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:37:06.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:37:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 36, 34), 27.42, 15.15, 0.0, 12.16, 21.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:37:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:36:34
2025-11-25T21:37:07.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:37:07.402 [DEBUG] [Thread-6155] [transport.py] [_log()] starting thread (client mode): 0x70d7f670
2025-11-25T21:37:07.402 [DEBUG] [Thread-6155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:37:07.418 [DEBUG] [Thread-6155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:37:07.418 [INFO] [Thread-6155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] client lang: <none>
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] server lang: <none>
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] kex follows: False
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] Compression: none
2025-11-25T21:37:07.422 [DEBUG] [Thread-6155] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:37:07.438 [DEBUG] [Thread-6155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:37:07.438 [DEBUG] [Thread-6155] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:37:07.438 [DEBUG] [Thread-6155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:37:07.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:37:07.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:37:07.440 [DEBUG] [Thread-6155] [transport.py] [_log()] userauth is OK
2025-11-25T21:37:07.440 [DEBUG] [Thread-6155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:37:07.440 [DEBUG] [Thread-6155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:37:07.440 [DEBUG] [Thread-6155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:37:07.440 [DEBUG] [Thread-6155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:37:07.458 [INFO] [Thread-6155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:37:07.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:37:08.120 [DEBUG] [Thread-6155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:37:08.120 [DEBUG] [Thread-6155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:37:08.120 [DEBUG] [Thread-6155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:37:08.160 [DEBUG] [Thread-6155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:37:08.160 [DEBUG] [Thread-6155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:37:08.163 [DEBUG] [Thread-6155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:37:08.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:37:08.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:37:08.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:37:08.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:37:08.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:37:08.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:37:08.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.817113 -999.00  +21.20   5.95     20   -2.00 1 1 1 1 1     0    0 23.62 0.89 ZNESW 7.5 6.0 220.8 10.3 21.2 -25.8 21.1 -25.3 20.9 -24.1 21.1 -24.9
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.817113
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:37:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:36:34', tmtdew=27.42, humidity=15.15, cloud=0.0, wind=12.16, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:36:34', seeing=1.0, atlas_timestamp='2025-11-25T19:36:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:37:08.181 [DEBUG] [Thread-6155] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:37:08.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:37:08.265 [DEBUG] [Thread-6158] [transport.py] [_log()] starting thread (client mode): 0x737c6650
2025-11-25T21:37:08.265 [DEBUG] [Thread-6158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:37:08.283 [DEBUG] [Thread-6158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:37:08.283 [INFO] [Thread-6158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] client lang: <none>
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] server lang: <none>
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] kex follows: False
2025-11-25T21:37:08.290 [DEBUG] [Thread-6158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:37:08.291 [DEBUG] [Thread-6158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:37:08.291 [DEBUG] [Thread-6158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:37:08.291 [DEBUG] [Thread-6158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:37:08.291 [DEBUG] [Thread-6158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:37:08.291 [DEBUG] [Thread-6158] [transport.py] [_log()] Compression: none
2025-11-25T21:37:08.291 [DEBUG] [Thread-6158] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:37:08.349 [DEBUG] [Thread-6158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:37:08.349 [DEBUG] [Thread-6158] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:37:08.349 [DEBUG] [Thread-6158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:37:08.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:37:08.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:37:08.406 [DEBUG] [Thread-6158] [transport.py] [_log()] userauth is OK
2025-11-25T21:37:08.406 [DEBUG] [Thread-6158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:37:08.406 [DEBUG] [Thread-6158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:37:08.406 [DEBUG] [Thread-6158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:37:08.406 [DEBUG] [Thread-6158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:37:08.420 [INFO] [Thread-6158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:37:08.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:37:08.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:37:09.308 [DEBUG] [Thread-6158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:37:09.309 [DEBUG] [Thread-6158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:37:09.357 [DEBUG] [Thread-6158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:37:09.357 [DEBUG] [Thread-6158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:37:09.366 [DEBUG] [Thread-6158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:37:09.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:37:09.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:37:09.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:37:09.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:37:09.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:37:09.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:37:09.403 [DEBUG] [Thread-6158] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:37:10.253 [DEBUG] [Thread-6160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:37:25.308 [DEBUG] [Thread-6161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:37:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:37:39.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:37:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:37:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 37, 6), 27.3, 15.27, 0.0, 11.54, 21.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:37:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:37:06
2025-11-25T21:37:40.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:37:40.344 [DEBUG] [Thread-6162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:37:40.392 [DEBUG] [Thread-6163] [transport.py] [_log()] starting thread (client mode): 0x7374d450
2025-11-25T21:37:40.392 [DEBUG] [Thread-6163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:37:40.413 [DEBUG] [Thread-6163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:37:40.414 [INFO] [Thread-6163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] client lang: <none>
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] server lang: <none>
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] kex follows: False
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] Compression: none
2025-11-25T21:37:40.415 [DEBUG] [Thread-6163] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:37:40.431 [DEBUG] [Thread-6163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:37:40.431 [DEBUG] [Thread-6163] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:37:40.431 [DEBUG] [Thread-6163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:37:40.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:37:40.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:37:40.432 [DEBUG] [Thread-6163] [transport.py] [_log()] userauth is OK
2025-11-25T21:37:40.432 [DEBUG] [Thread-6163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:37:40.432 [DEBUG] [Thread-6163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:37:40.432 [DEBUG] [Thread-6163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:37:40.432 [DEBUG] [Thread-6163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:37:40.441 [INFO] [Thread-6163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:37:40.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:37:41.053 [DEBUG] [Thread-6163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:37:41.053 [DEBUG] [Thread-6163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:37:41.054 [DEBUG] [Thread-6163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:37:41.094 [DEBUG] [Thread-6163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:37:41.094 [DEBUG] [Thread-6163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:37:41.097 [DEBUG] [Thread-6163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:37:41.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:37:41.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:37:41.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:37:41.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:37:41.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:37:41.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:37:41.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:37:41.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:37:41.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:37:41.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.817460 -999.00  +21.20   4.88     20   -2.00 1 1 1 1 1     0    0 23.52 1.20 ZNESW 7.7 4.9 223.8 9.3 21.2 -25.8 21.1 -25.4 20.9 -24.1 21.0 -25.1
2025-11-25T21:37:41.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:37:41.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:37:41.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.817460
2025-11-25T21:37:41.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:37:41.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:37:41.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:37:41.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:37:41.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:37:41.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:37:06', tmtdew=27.3, humidity=15.27, cloud=0.0, wind=11.54, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:37:39', seeing=0.99, atlas_timestamp='2025-11-25T19:37:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:37:41.122 [DEBUG] [Thread-6163] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:37:41.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:37:41.217 [DEBUG] [Thread-6166] [transport.py] [_log()] starting thread (client mode): 0x7374fa60
2025-11-25T21:37:41.217 [DEBUG] [Thread-6166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:37:41.231 [DEBUG] [Thread-6166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:37:41.231 [INFO] [Thread-6166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] client lang: <none>
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] server lang: <none>
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] kex follows: False
2025-11-25T21:37:41.239 [DEBUG] [Thread-6166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:37:41.240 [DEBUG] [Thread-6166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:37:41.240 [DEBUG] [Thread-6166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:37:41.240 [DEBUG] [Thread-6166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:37:41.240 [DEBUG] [Thread-6166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:37:41.240 [DEBUG] [Thread-6166] [transport.py] [_log()] Compression: none
2025-11-25T21:37:41.240 [DEBUG] [Thread-6166] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:37:41.300 [DEBUG] [Thread-6166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:37:41.300 [DEBUG] [Thread-6166] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:37:41.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:37:41.302 [DEBUG] [Thread-6166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:37:41.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:37:41.359 [DEBUG] [Thread-6166] [transport.py] [_log()] userauth is OK
2025-11-25T21:37:41.359 [DEBUG] [Thread-6166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:37:41.359 [DEBUG] [Thread-6166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:37:41.359 [DEBUG] [Thread-6166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:37:41.359 [DEBUG] [Thread-6166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:37:41.380 [INFO] [Thread-6166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:37:41.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:37:41.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:37:42.214 [DEBUG] [Thread-6166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:37:42.215 [DEBUG] [Thread-6166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:37:42.263 [DEBUG] [Thread-6166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:37:42.263 [DEBUG] [Thread-6166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:37:42.272 [DEBUG] [Thread-6166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:37:42.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:37:42.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:37:42.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:37:42.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:37:42.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:37:42.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:37:42.309 [DEBUG] [Thread-6166] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:37:43.968 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:37:43.969 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:37:55.379 [DEBUG] [Thread-6168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:38:00.729 [DEBUG] [Thread-6169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:38:10.428 [DEBUG] [Thread-6170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:38:12.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:38:12.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:38:12.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:38:13.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 37, 38), 27.3, 15.33, 0.0, 9.62, 21.28, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:38:13.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:37:38
2025-11-25T21:38:13.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:38:13.327 [DEBUG] [Thread-6171] [transport.py] [_log()] starting thread (client mode): 0x70d68070
2025-11-25T21:38:13.327 [DEBUG] [Thread-6171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:38:13.348 [DEBUG] [Thread-6171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:38:13.348 [INFO] [Thread-6171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:38:13.349 [DEBUG] [Thread-6171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:38:13.349 [DEBUG] [Thread-6171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:38:13.349 [DEBUG] [Thread-6171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:38:13.349 [DEBUG] [Thread-6171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] client lang: <none>
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] server lang: <none>
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] kex follows: False
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] Compression: none
2025-11-25T21:38:13.350 [DEBUG] [Thread-6171] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:38:13.359 [DEBUG] [Thread-6171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:38:13.359 [DEBUG] [Thread-6171] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:38:13.360 [DEBUG] [Thread-6171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:38:13.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:38:13.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:38:13.361 [DEBUG] [Thread-6171] [transport.py] [_log()] userauth is OK
2025-11-25T21:38:13.361 [DEBUG] [Thread-6171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:38:13.362 [DEBUG] [Thread-6171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:38:13.362 [DEBUG] [Thread-6171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:38:13.362 [DEBUG] [Thread-6171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:38:13.386 [INFO] [Thread-6171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:38:13.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:38:14.039 [DEBUG] [Thread-6171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:38:14.039 [DEBUG] [Thread-6171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:38:14.039 [DEBUG] [Thread-6171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:38:14.079 [DEBUG] [Thread-6171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:38:14.079 [DEBUG] [Thread-6171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:38:14.082 [DEBUG] [Thread-6171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:38:14.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:38:14.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:38:14.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:38:14.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:38:14.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:38:14.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:38:14.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:38:14.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:38:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:38:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.817807 -999.00  +21.20   7.80     20   -2.00 1 1 1 1 1     0    0 23.43 1.68 ZNESW 6.2 7.8 201.8 9.8 21.1 -25.8 21.1 -25.5 20.9 -24.1 21.0 -25.1
2025-11-25T21:38:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:38:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:38:14.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.817807
2025-11-25T21:38:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:38:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:38:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:38:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:38:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:38:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:37:38', tmtdew=27.3, humidity=15.33, cloud=0.0, wind=9.62, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:38:11', seeing=0.82, atlas_timestamp='2025-11-25T19:37:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:38:14.108 [DEBUG] [Thread-6171] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:38:14.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:38:14.205 [DEBUG] [Thread-6174] [transport.py] [_log()] starting thread (client mode): 0x70d1e5f0
2025-11-25T21:38:14.205 [DEBUG] [Thread-6174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:38:14.220 [DEBUG] [Thread-6174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:38:14.220 [INFO] [Thread-6174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:38:14.227 [DEBUG] [Thread-6174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:38:14.227 [DEBUG] [Thread-6174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:38:14.227 [DEBUG] [Thread-6174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:38:14.227 [DEBUG] [Thread-6174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:38:14.227 [DEBUG] [Thread-6174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:38:14.227 [DEBUG] [Thread-6174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:38:14.227 [DEBUG] [Thread-6174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:38:14.227 [DEBUG] [Thread-6174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] client lang: <none>
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] server lang: <none>
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] kex follows: False
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] Compression: none
2025-11-25T21:38:14.228 [DEBUG] [Thread-6174] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:38:14.285 [DEBUG] [Thread-6174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:38:14.286 [DEBUG] [Thread-6174] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:38:14.286 [DEBUG] [Thread-6174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:38:14.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:38:14.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:38:14.344 [DEBUG] [Thread-6174] [transport.py] [_log()] userauth is OK
2025-11-25T21:38:14.344 [DEBUG] [Thread-6174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:38:14.344 [DEBUG] [Thread-6174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:38:14.345 [DEBUG] [Thread-6174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:38:14.345 [DEBUG] [Thread-6174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:38:14.363 [INFO] [Thread-6174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:38:14.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:38:14.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:38:15.180 [DEBUG] [Thread-6174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:38:15.181 [DEBUG] [Thread-6174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:38:15.228 [DEBUG] [Thread-6174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:38:15.229 [DEBUG] [Thread-6174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:38:15.237 [DEBUG] [Thread-6174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:38:15.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:38:15.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:38:15.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:38:15.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:38:15.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:38:15.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:38:15.276 [DEBUG] [Thread-6174] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:38:25.462 [DEBUG] [Thread-6176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:38:40.533 [DEBUG] [Thread-6177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:38:44.170 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:38:44.171 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:38:45.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:38:45.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:38:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:38:46.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 38, 42), 27.16, 15.4, 0.0, 9.9, 21.09, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:38:46.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:38:42
2025-11-25T21:38:46.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:38:46.298 [DEBUG] [Thread-6178] [transport.py] [_log()] starting thread (client mode): 0x737c7970
2025-11-25T21:38:46.298 [DEBUG] [Thread-6178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:38:46.319 [DEBUG] [Thread-6178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:38:46.319 [INFO] [Thread-6178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] client lang: <none>
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] server lang: <none>
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] kex follows: False
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:38:46.321 [DEBUG] [Thread-6178] [transport.py] [_log()] Compression: none
2025-11-25T21:38:46.322 [DEBUG] [Thread-6178] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:38:46.329 [DEBUG] [Thread-6178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:38:46.329 [DEBUG] [Thread-6178] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:38:46.329 [DEBUG] [Thread-6178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:38:46.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:38:46.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:38:46.330 [DEBUG] [Thread-6178] [transport.py] [_log()] userauth is OK
2025-11-25T21:38:46.330 [DEBUG] [Thread-6178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:38:46.330 [DEBUG] [Thread-6178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:38:46.330 [DEBUG] [Thread-6178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:38:46.330 [DEBUG] [Thread-6178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:38:46.346 [INFO] [Thread-6178] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:38:46.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:38:46.977 [DEBUG] [Thread-6178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:38:46.977 [DEBUG] [Thread-6178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:38:46.977 [DEBUG] [Thread-6178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:38:47.018 [DEBUG] [Thread-6178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:38:47.018 [DEBUG] [Thread-6178] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:38:47.020 [DEBUG] [Thread-6178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:38:47.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:38:47.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:38:47.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:38:47.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:38:47.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:38:47.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:38:47.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.818154 -999.00  +21.20   6.13     20   -2.00 1 1 1 1 1     0    0 23.25 1.85 ZNESW 7.9 6.1 217.6 11.3 21.2 -25.9 21.1 -25.5 20.8 -24.0 21.0 -25.0
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.818154
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:38:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:38:42', tmtdew=27.16, humidity=15.4, cloud=0.0, wind=9.9, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:38:43', seeing=1.07, atlas_timestamp='2025-11-25T19:38:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:38:47.039 [DEBUG] [Thread-6178] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:38:47.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:38:47.125 [DEBUG] [Thread-6181] [transport.py] [_log()] starting thread (client mode): 0x70d7de40
2025-11-25T21:38:47.125 [DEBUG] [Thread-6181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:38:47.144 [DEBUG] [Thread-6181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:38:47.144 [INFO] [Thread-6181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] client lang: <none>
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] server lang: <none>
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] kex follows: False
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] Compression: none
2025-11-25T21:38:47.155 [DEBUG] [Thread-6181] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:38:47.212 [DEBUG] [Thread-6181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:38:47.213 [DEBUG] [Thread-6181] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:38:47.213 [DEBUG] [Thread-6181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:38:47.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:38:47.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:38:47.270 [DEBUG] [Thread-6181] [transport.py] [_log()] userauth is OK
2025-11-25T21:38:47.270 [DEBUG] [Thread-6181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:38:47.270 [DEBUG] [Thread-6181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:38:47.270 [DEBUG] [Thread-6181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:38:47.270 [DEBUG] [Thread-6181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:38:47.284 [INFO] [Thread-6181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:38:47.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:38:47.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:38:48.140 [DEBUG] [Thread-6181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:38:48.140 [DEBUG] [Thread-6181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:38:48.188 [DEBUG] [Thread-6181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:38:48.188 [DEBUG] [Thread-6181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:38:48.197 [DEBUG] [Thread-6181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:38:48.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:38:48.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:38:48.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:38:48.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:38:48.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:38:48.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:38:48.229 [DEBUG] [Thread-6181] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:38:55.567 [DEBUG] [Thread-6183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:39:00.785 [DEBUG] [Thread-6184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:39:10.621 [DEBUG] [Thread-6185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:39:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:39:18.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:39:18.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:39:18.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 39, 15), 27.12, 15.45, 0.0, 9.71, 21.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:39:18.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:39:15
2025-11-25T21:39:19.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:39:19.168 [DEBUG] [Thread-6186] [transport.py] [_log()] starting thread (client mode): 0x70d7e170
2025-11-25T21:39:19.168 [DEBUG] [Thread-6186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:39:19.188 [DEBUG] [Thread-6186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:39:19.188 [INFO] [Thread-6186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:39:19.191 [DEBUG] [Thread-6186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:39:19.191 [DEBUG] [Thread-6186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] client lang: <none>
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] server lang: <none>
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] kex follows: False
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] Compression: none
2025-11-25T21:39:19.192 [DEBUG] [Thread-6186] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:39:19.210 [DEBUG] [Thread-6186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:39:19.211 [DEBUG] [Thread-6186] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:39:19.211 [DEBUG] [Thread-6186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:39:19.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:39:19.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:39:19.213 [DEBUG] [Thread-6186] [transport.py] [_log()] userauth is OK
2025-11-25T21:39:19.214 [DEBUG] [Thread-6186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:39:19.214 [DEBUG] [Thread-6186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:39:19.214 [DEBUG] [Thread-6186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:39:19.214 [DEBUG] [Thread-6186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:39:19.233 [INFO] [Thread-6186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:39:19.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:39:19.877 [DEBUG] [Thread-6186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:39:19.877 [DEBUG] [Thread-6186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:39:19.877 [DEBUG] [Thread-6186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:39:19.918 [DEBUG] [Thread-6186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:39:19.918 [DEBUG] [Thread-6186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:39:19.922 [DEBUG] [Thread-6186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:39:19.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:39:19.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:39:19.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:39:19.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:39:19.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:39:19.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:39:19.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:39:19.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:39:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:39:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.818849 -999.00  +21.20   5.88     20   -2.00 1 1 1 1 1     0    0 23.44 2.06 ZNESW 8.0 5.9 184.3 9.6 21.1 -25.8 21.1 -25.2 20.8 -24.0 21.0 -24.9
2025-11-25T21:39:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:39:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:39:19.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.818849
2025-11-25T21:39:19.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:39:19.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:39:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:39:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:39:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:39:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:39:15', tmtdew=27.12, humidity=15.45, cloud=0.0, wind=9.71, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:39:15', seeing=1.08, atlas_timestamp='2025-11-25T19:39:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.02024999999999899, 0.055749999999999744, 0.01875000000000071, -0.040500000000001535, 0.0045000000000001705, 0.08825000000000038, 0.032999999999999474, 0.007250000000000867, 0.06049999999999933, 0.019999999999999574, 0.032249999999999446, 0.032999999999999474, 0.0519999999999996, 0.034750000000000725, 0.04499999999999815, 0.026999999999999247, 0.011250000000000426, 0.0625, 0.0779999999999994, 0.02424999999999855, 0.047999999999998266, 0.09624999999999773, 0.04025000000000034, 0.04225000000000101, 0.010999999999999233, 0.05349999999999966, 0.05525000000000091, 0.07649999999999935, 0.02999999999999936, 0.005000000000000782, 0.049000000000001265, 0.029500000000000526, -0.02325000000000088], zp_timestamp='2025-11-25T19:31:00')
2025-11-25T21:39:19.948 [DEBUG] [Thread-6186] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:39:20.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:39:20.057 [DEBUG] [Thread-6189] [transport.py] [_log()] starting thread (client mode): 0x70d403a0
2025-11-25T21:39:20.057 [DEBUG] [Thread-6189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:39:20.072 [DEBUG] [Thread-6189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:39:20.072 [INFO] [Thread-6189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] client lang: <none>
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] server lang: <none>
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] kex follows: False
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:39:20.079 [DEBUG] [Thread-6189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:39:20.080 [DEBUG] [Thread-6189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:39:20.080 [DEBUG] [Thread-6189] [transport.py] [_log()] Compression: none
2025-11-25T21:39:20.080 [DEBUG] [Thread-6189] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:39:20.137 [DEBUG] [Thread-6189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:39:20.137 [DEBUG] [Thread-6189] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:39:20.137 [DEBUG] [Thread-6189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:39:20.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:39:20.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:39:20.194 [DEBUG] [Thread-6189] [transport.py] [_log()] userauth is OK
2025-11-25T21:39:20.194 [DEBUG] [Thread-6189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:39:20.194 [DEBUG] [Thread-6189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:39:20.194 [DEBUG] [Thread-6189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:39:20.194 [DEBUG] [Thread-6189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:39:20.210 [INFO] [Thread-6189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:39:20.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:39:20.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:39:21.099 [DEBUG] [Thread-6189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:39:21.099 [DEBUG] [Thread-6189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:39:21.146 [DEBUG] [Thread-6189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:39:21.146 [DEBUG] [Thread-6189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:39:21.155 [DEBUG] [Thread-6189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:39:21.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:39:21.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:39: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
2025-11-25T21:39:21.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:39:21.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:39:21.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:39:21.186 [DEBUG] [Thread-6189] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:39:25.652 [DEBUG] [Thread-6191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:39:40.695 [DEBUG] [Thread-6192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:39:44.372 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:39:44.374 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:39:51.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:39:51.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:39:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:39:51.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 39, 46), 27.17, 15.45, 0.0, 11.66, 21.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:39:51.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:39:46
2025-11-25T21:39:51.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:39:52.132 [DEBUG] [Thread-6193] [transport.py] [_log()] starting thread (client mode): 0x70d7e590
2025-11-25T21:39:52.132 [DEBUG] [Thread-6193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:39:52.148 [DEBUG] [Thread-6193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:39:52.148 [INFO] [Thread-6193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] client lang: <none>
2025-11-25T21:39:52.151 [DEBUG] [Thread-6193] [transport.py] [_log()] server lang: <none>
2025-11-25T21:39:52.152 [DEBUG] [Thread-6193] [transport.py] [_log()] kex follows: False
2025-11-25T21:39:52.152 [DEBUG] [Thread-6193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:39:52.152 [DEBUG] [Thread-6193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:39:52.152 [DEBUG] [Thread-6193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:39:52.152 [DEBUG] [Thread-6193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:39:52.152 [DEBUG] [Thread-6193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:39:52.152 [DEBUG] [Thread-6193] [transport.py] [_log()] Compression: none
2025-11-25T21:39:52.152 [DEBUG] [Thread-6193] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:39:52.159 [DEBUG] [Thread-6193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:39:52.160 [DEBUG] [Thread-6193] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:39:52.160 [DEBUG] [Thread-6193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:39:52.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:39:52.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:39:52.162 [DEBUG] [Thread-6193] [transport.py] [_log()] userauth is OK
2025-11-25T21:39:52.162 [DEBUG] [Thread-6193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:39:52.162 [DEBUG] [Thread-6193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:39:52.162 [DEBUG] [Thread-6193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:39:52.162 [DEBUG] [Thread-6193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:39:52.178 [INFO] [Thread-6193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:39:52.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:39:52.787 [DEBUG] [Thread-6193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:39:52.787 [DEBUG] [Thread-6193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:39:52.787 [DEBUG] [Thread-6193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:39:52.827 [DEBUG] [Thread-6193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:39:52.828 [DEBUG] [Thread-6193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:39:52.831 [DEBUG] [Thread-6193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:39:52.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:39:52.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:39:52.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:39:52.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:39:52.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:39:52.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:39:52.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:39:52.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:39:52.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:39:52.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.819196 -999.00  +21.20   9.91     20   -2.00 1 1 1 1 1     0    0 22.80 2.35 ZNESW 8.2 9.9 195.8 11.6 21.1 -25.9 21.1 -25.2 20.8 -24.0 21.0 -24.9
2025-11-25T21:39:52.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:39:52.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:39:52.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.819196
2025-11-25T21:39:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:39:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:39:52.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:39:52.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:39:52.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:39:52.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:39:46', tmtdew=27.17, humidity=15.45, cloud=0.0, wind=11.66, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:39:47', seeing=1.02, atlas_timestamp='2025-11-25T19:39:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, 0.0022500000000000853, 0.020250000000000767, -0.012500000000001066, -0.0235000000000003, 0.028250000000001663, 0.019999999999999574, -0.03324999999999889, 0.03500000000000014, 0.036000000000001364, 0.05624999999999858, -0.02200000000000024, 0.038000000000000256, 0.05025000000000013, 0.027999999999998693, -0.0129999999999999, -0.003750000000000142, 0.04800000000000004, 0.06549999999999834, -0.005250000000000199, 0.04299999999999926, 0.048749999999998295, 0.01425000000000054, 0.03325000000000067, 0.01649999999999885, 0.05450000000000088, 0.07174999999999976, 0.07450000000000045, 0.05400000000000027, -0.010999999999999233, 0.031000000000000583, -0.0039999999999995595, 0.0007500000000000284], zp_timestamp='2025-11-25T19:36:00')
2025-11-25T21:39:52.857 [DEBUG] [Thread-6193] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:39:52.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:39:52.956 [DEBUG] [Thread-6196] [transport.py] [_log()] starting thread (client mode): 0x70d7e410
2025-11-25T21:39:52.956 [DEBUG] [Thread-6196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:39:52.970 [DEBUG] [Thread-6196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:39:52.970 [INFO] [Thread-6196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:39:52.978 [DEBUG] [Thread-6196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:39:52.978 [DEBUG] [Thread-6196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:39:52.978 [DEBUG] [Thread-6196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:39:52.978 [DEBUG] [Thread-6196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:39:52.979 [DEBUG] [Thread-6196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:39:52.979 [DEBUG] [Thread-6196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:39:52.979 [DEBUG] [Thread-6196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:39:52.979 [DEBUG] [Thread-6196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:39:52.979 [DEBUG] [Thread-6196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:39:52.979 [DEBUG] [Thread-6196] [transport.py] [_log()] client lang: <none>
2025-11-25T21:39:52.979 [DEBUG] [Thread-6196] [transport.py] [_log()] server lang: <none>
2025-11-25T21:39:52.979 [DEBUG] [Thread-6196] [transport.py] [_log()] kex follows: False
2025-11-25T21:39:52.979 [DEBUG] [Thread-6196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:39:52.980 [DEBUG] [Thread-6196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:39:52.980 [DEBUG] [Thread-6196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:39:52.980 [DEBUG] [Thread-6196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:39:52.980 [DEBUG] [Thread-6196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:39:52.980 [DEBUG] [Thread-6196] [transport.py] [_log()] Compression: none
2025-11-25T21:39:52.980 [DEBUG] [Thread-6196] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:39:53.043 [DEBUG] [Thread-6196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:39:53.044 [DEBUG] [Thread-6196] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:39:53.045 [DEBUG] [Thread-6196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:39:53.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:39:53.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:39:53.107 [DEBUG] [Thread-6196] [transport.py] [_log()] userauth is OK
2025-11-25T21:39:53.107 [DEBUG] [Thread-6196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:39:53.107 [DEBUG] [Thread-6196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:39:53.107 [DEBUG] [Thread-6196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:39:53.108 [DEBUG] [Thread-6196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:39:53.128 [INFO] [Thread-6196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:39:53.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:39:53.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:39:53.960 [DEBUG] [Thread-6196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:39:53.960 [DEBUG] [Thread-6196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:39:54.008 [DEBUG] [Thread-6196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:39:54.008 [DEBUG] [Thread-6196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:39:54.018 [DEBUG] [Thread-6196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:39:54.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:39:54.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:39:54.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:39:54.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:39:54.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:39:54.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:39:54.065 [DEBUG] [Thread-6196] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:39:55.735 [DEBUG] [Thread-6198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:40:00.846 [DEBUG] [Thread-6199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:40:10.788 [DEBUG] [Thread-6200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:40:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:40:24.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:40:24.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:40:24.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 40, 18), 27.17, 15.47, 0.0, 11.42, 21.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:40:24.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:40:18
2025-11-25T21:40:24.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:40:25.028 [DEBUG] [Thread-6201] [transport.py] [_log()] starting thread (client mode): 0x7374e440
2025-11-25T21:40:25.028 [DEBUG] [Thread-6201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:40:25.042 [DEBUG] [Thread-6201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:40:25.042 [INFO] [Thread-6201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] client lang: <none>
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] server lang: <none>
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] kex follows: False
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] Compression: none
2025-11-25T21:40:25.044 [DEBUG] [Thread-6201] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:40:25.054 [DEBUG] [Thread-6201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:40:25.054 [DEBUG] [Thread-6201] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:40:25.054 [DEBUG] [Thread-6201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:40:25.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:40:25.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:40:25.055 [DEBUG] [Thread-6201] [transport.py] [_log()] userauth is OK
2025-11-25T21:40:25.055 [DEBUG] [Thread-6201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:40:25.055 [DEBUG] [Thread-6201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:40:25.055 [DEBUG] [Thread-6201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:40:25.055 [DEBUG] [Thread-6201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:40:25.066 [INFO] [Thread-6201] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:40:25.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:40:25.673 [DEBUG] [Thread-6201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:40:25.673 [DEBUG] [Thread-6201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:40:25.673 [DEBUG] [Thread-6201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:40:25.713 [DEBUG] [Thread-6201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:40:25.714 [DEBUG] [Thread-6201] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:40:25.715 [DEBUG] [Thread-6201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:40:25.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:40:25.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:40:25.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:40:25.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:40:25.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:40:25.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:40:25.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:40:25.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:40:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:40:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.819543 -999.00  +21.20   6.11     20   -2.10 1 1 1 1 1     0    0 22.97 2.80 ZNESW 9.4 6.1 201.2 10.0 21.1 -25.9 21.1 -25.3 20.8 -24.1 21.0 -24.9
2025-11-25T21:40:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:40:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:40:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.819543
2025-11-25T21:40:25.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:40:25.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:40:25.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:40:25.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:40:25.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:40:25.733 [DEBUG] [Thread-6201] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:40:25.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:40:18', tmtdew=27.17, humidity=15.47, cloud=0.0, wind=11.42, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:40:19', seeing=1.02, atlas_timestamp='2025-11-25T19:40:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, 0.0022500000000000853, 0.020250000000000767, -0.012500000000001066, -0.0235000000000003, 0.028250000000001663, 0.019999999999999574, -0.03324999999999889, 0.03500000000000014, 0.036000000000001364, 0.05624999999999858, -0.02200000000000024, 0.038000000000000256, 0.05025000000000013, 0.027999999999998693, -0.0129999999999999, -0.003750000000000142, 0.04800000000000004, 0.06549999999999834, -0.005250000000000199, 0.04299999999999926, 0.048749999999998295, 0.01425000000000054, 0.03325000000000067, 0.01649999999999885, 0.05450000000000088, 0.07174999999999976, 0.07450000000000045, 0.05400000000000027, -0.010999999999999233, 0.031000000000000583, -0.0039999999999995595, 0.0007500000000000284], zp_timestamp='2025-11-25T19:36:00')
2025-11-25T21:40:25.819 [DEBUG] [Thread-6204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:40:25.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:40:25.836 [DEBUG] [Thread-6205] [transport.py] [_log()] starting thread (client mode): 0x737c5f90
2025-11-25T21:40:25.836 [DEBUG] [Thread-6205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:40:25.850 [DEBUG] [Thread-6205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:40:25.850 [INFO] [Thread-6205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:40:25.857 [DEBUG] [Thread-6205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:40:25.857 [DEBUG] [Thread-6205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:40:25.857 [DEBUG] [Thread-6205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:40:25.857 [DEBUG] [Thread-6205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] client lang: <none>
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] server lang: <none>
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] kex follows: False
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:40:25.858 [DEBUG] [Thread-6205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:40:25.859 [DEBUG] [Thread-6205] [transport.py] [_log()] Compression: none
2025-11-25T21:40:25.859 [DEBUG] [Thread-6205] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:40:25.914 [DEBUG] [Thread-6205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:40:25.914 [DEBUG] [Thread-6205] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:40:25.915 [DEBUG] [Thread-6205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:40:25.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:40:25.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:40:25.973 [DEBUG] [Thread-6205] [transport.py] [_log()] userauth is OK
2025-11-25T21:40:25.973 [DEBUG] [Thread-6205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:40:25.973 [DEBUG] [Thread-6205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:40:25.973 [DEBUG] [Thread-6205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:40:25.973 [DEBUG] [Thread-6205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:40:25.995 [INFO] [Thread-6205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:40:25.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:40:25.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:40:26.843 [DEBUG] [Thread-6205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:40:26.843 [DEBUG] [Thread-6205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:40:26.890 [DEBUG] [Thread-6205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:40:26.891 [DEBUG] [Thread-6205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:40:26.900 [DEBUG] [Thread-6205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:40:26.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:40: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')
2025-11-25T21:40: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
2025-11-25T21:40:26.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:40:26.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:40:26.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:40:26.936 [DEBUG] [Thread-6205] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:40:40.856 [DEBUG] [Thread-6207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:40:44.622 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:40:44.624 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:40:55.897 [DEBUG] [Thread-6208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:40:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:40:56.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:40:56.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:40:57.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 40, 50), 27.25, 15.43, 0.0, 9.93, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:40:57.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:40:50
2025-11-25T21:40:57.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:40:57.895 [DEBUG] [Thread-6209] [transport.py] [_log()] starting thread (client mode): 0x70d6b4f0
2025-11-25T21:40:57.895 [DEBUG] [Thread-6209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:40:57.913 [DEBUG] [Thread-6209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:40:57.913 [INFO] [Thread-6209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:40:57.916 [DEBUG] [Thread-6209] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] client lang: <none>
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] server lang: <none>
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] kex follows: False
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:40:57.917 [DEBUG] [Thread-6209] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:40:57.918 [DEBUG] [Thread-6209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:40:57.918 [DEBUG] [Thread-6209] [transport.py] [_log()] Compression: none
2025-11-25T21:40:57.918 [DEBUG] [Thread-6209] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:40:57.936 [DEBUG] [Thread-6209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:40:57.937 [DEBUG] [Thread-6209] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:40:57.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:40:57.938 [DEBUG] [Thread-6209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:40:57.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:40:57.940 [DEBUG] [Thread-6209] [transport.py] [_log()] userauth is OK
2025-11-25T21:40:57.940 [DEBUG] [Thread-6209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:40:57.941 [DEBUG] [Thread-6209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:40:57.941 [DEBUG] [Thread-6209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:40:57.941 [DEBUG] [Thread-6209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:40:57.959 [INFO] [Thread-6209] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:40:57.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:40:58.584 [DEBUG] [Thread-6209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:40:58.584 [DEBUG] [Thread-6209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:40:58.584 [DEBUG] [Thread-6209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:40:58.625 [DEBUG] [Thread-6209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:40:58.625 [DEBUG] [Thread-6209] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:40:58.627 [DEBUG] [Thread-6209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:40:58.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:40:58.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:40:58.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:40:58.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:40:58.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:40:58.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:40:58.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:40:58.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:40:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:40:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.819890 -999.00  +21.20   7.84     20   -2.10 1 1 1 1 1     0    0 23.58 3.56 ZNESW 9.9 7.8 195.8 11.7 21.1 -25.8 21.1 -25.3 20.8 -24.0 21.0 -24.8
2025-11-25T21:40:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:40:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:40:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.819890
2025-11-25T21:40:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:40:58.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:40:58.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:40:58.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:40:58.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:40:58.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:40:50', tmtdew=27.25, humidity=15.43, cloud=0.0, wind=9.93, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:40:51', seeing=1.02, atlas_timestamp='2025-11-25T19:40:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, 0.0022500000000000853, 0.020250000000000767, -0.012500000000001066, -0.0235000000000003, 0.028250000000001663, 0.019999999999999574, -0.03324999999999889, 0.03500000000000014, 0.036000000000001364, 0.05624999999999858, -0.02200000000000024, 0.038000000000000256, 0.05025000000000013, 0.027999999999998693, -0.0129999999999999, -0.003750000000000142, 0.04800000000000004, 0.06549999999999834, -0.005250000000000199, 0.04299999999999926, 0.048749999999998295, 0.01425000000000054, 0.03325000000000067, 0.01649999999999885, 0.05450000000000088, 0.07174999999999976, 0.07450000000000045, 0.05400000000000027, -0.010999999999999233, 0.031000000000000583, -0.0039999999999995595, 0.0007500000000000284], zp_timestamp='2025-11-25T19:36:00')
2025-11-25T21:40:58.656 [DEBUG] [Thread-6209] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:40:58.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:40:58.751 [DEBUG] [Thread-6212] [transport.py] [_log()] starting thread (client mode): 0x70d6b400
2025-11-25T21:40:58.752 [DEBUG] [Thread-6212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:40:58.766 [DEBUG] [Thread-6212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:40:58.766 [INFO] [Thread-6212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:40:58.774 [DEBUG] [Thread-6212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:40:58.774 [DEBUG] [Thread-6212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:40:58.774 [DEBUG] [Thread-6212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:40:58.774 [DEBUG] [Thread-6212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:40:58.774 [DEBUG] [Thread-6212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] client lang: <none>
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] server lang: <none>
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] kex follows: False
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:40:58.775 [DEBUG] [Thread-6212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:40:58.776 [DEBUG] [Thread-6212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:40:58.776 [DEBUG] [Thread-6212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:40:58.776 [DEBUG] [Thread-6212] [transport.py] [_log()] Compression: none
2025-11-25T21:40:58.776 [DEBUG] [Thread-6212] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:40:58.835 [DEBUG] [Thread-6212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:40:58.836 [DEBUG] [Thread-6212] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:40:58.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:40:58.837 [DEBUG] [Thread-6212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:40:58.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:40:58.895 [DEBUG] [Thread-6212] [transport.py] [_log()] userauth is OK
2025-11-25T21:40:58.895 [DEBUG] [Thread-6212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:40:58.895 [DEBUG] [Thread-6212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:40:58.895 [DEBUG] [Thread-6212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:40:58.895 [DEBUG] [Thread-6212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:40:58.914 [INFO] [Thread-6212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:40:58.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:40:58.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:40:59.756 [DEBUG] [Thread-6212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:40:59.757 [DEBUG] [Thread-6212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:40:59.805 [DEBUG] [Thread-6212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:40:59.805 [DEBUG] [Thread-6212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:40:59.815 [DEBUG] [Thread-6212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:40:59.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:40:59.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:40:59.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:40:59.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:40:59.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:40:59.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:40:59.852 [DEBUG] [Thread-6212] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:41:00.920 [DEBUG] [Thread-6214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:41:10.934 [DEBUG] [Thread-6215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:41:25.982 [DEBUG] [Thread-6216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:41:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:41:29.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:41:29.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:41:30.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 41, 22), 27.26, 15.42, 0.0, 9.83, 21.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:41:30.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:41:22
2025-11-25T21:41:30.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:41:30.821 [DEBUG] [Thread-6217] [transport.py] [_log()] starting thread (client mode): 0x70d1ebf0
2025-11-25T21:41:30.821 [DEBUG] [Thread-6217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:41:30.840 [DEBUG] [Thread-6217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:41:30.840 [INFO] [Thread-6217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] client lang: <none>
2025-11-25T21:41:30.844 [DEBUG] [Thread-6217] [transport.py] [_log()] server lang: <none>
2025-11-25T21:41:30.845 [DEBUG] [Thread-6217] [transport.py] [_log()] kex follows: False
2025-11-25T21:41:30.845 [DEBUG] [Thread-6217] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:41:30.845 [DEBUG] [Thread-6217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:41:30.845 [DEBUG] [Thread-6217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:41:30.845 [DEBUG] [Thread-6217] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:41:30.845 [DEBUG] [Thread-6217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:41:30.845 [DEBUG] [Thread-6217] [transport.py] [_log()] Compression: none
2025-11-25T21:41:30.845 [DEBUG] [Thread-6217] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:41:30.862 [DEBUG] [Thread-6217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:41:30.863 [DEBUG] [Thread-6217] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:41:30.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:41:30.864 [DEBUG] [Thread-6217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:41:30.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:41:30.867 [DEBUG] [Thread-6217] [transport.py] [_log()] userauth is OK
2025-11-25T21:41:30.867 [DEBUG] [Thread-6217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:41:30.867 [DEBUG] [Thread-6217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:41:30.867 [DEBUG] [Thread-6217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:41:30.867 [DEBUG] [Thread-6217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:41:30.905 [INFO] [Thread-6217] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:41:30.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:41:31.502 [DEBUG] [Thread-6217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:41:31.502 [DEBUG] [Thread-6217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:41:31.502 [DEBUG] [Thread-6217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:41:31.543 [DEBUG] [Thread-6217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:41:31.543 [DEBUG] [Thread-6217] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:41:31.545 [DEBUG] [Thread-6217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:41:31.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:41:31.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:41:31.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:41:31.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:41:31.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:41:31.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:41:31.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:41:31.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:41:31.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:41:31.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.819890 -999.00  +21.20   7.84     20   -2.10 1 1 1 1 1     0    0 23.58 3.56 ZNESW 9.9 7.8 195.8 11.7 21.1 -25.8 21.1 -25.3 20.8 -24.0 21.0 -24.8
2025-11-25T21:41:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:41:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:41:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.819890
2025-11-25T21:41:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:41:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:41:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:41:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:41:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:41:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:41:22', tmtdew=27.26, humidity=15.42, cloud=0.0, wind=9.83, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:41:23', seeing=1.17, atlas_timestamp='2025-11-25T19:40:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, 0.0022500000000000853, 0.020250000000000767, -0.012500000000001066, -0.0235000000000003, 0.028250000000001663, 0.019999999999999574, -0.03324999999999889, 0.03500000000000014, 0.036000000000001364, 0.05624999999999858, -0.02200000000000024, 0.038000000000000256, 0.05025000000000013, 0.027999999999998693, -0.0129999999999999, -0.003750000000000142, 0.04800000000000004, 0.06549999999999834, -0.005250000000000199, 0.04299999999999926, 0.048749999999998295, 0.01425000000000054, 0.03325000000000067, 0.01649999999999885, 0.05450000000000088, 0.07174999999999976, 0.07450000000000045, 0.05400000000000027, -0.010999999999999233, 0.031000000000000583, -0.0039999999999995595, 0.0007500000000000284], zp_timestamp='2025-11-25T19:36:00')
2025-11-25T21:41:31.574 [DEBUG] [Thread-6217] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:41:31.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:41:31.673 [DEBUG] [Thread-6220] [transport.py] [_log()] starting thread (client mode): 0x7374e920
2025-11-25T21:41:31.673 [DEBUG] [Thread-6220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:41:31.692 [DEBUG] [Thread-6220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:41:31.692 [INFO] [Thread-6220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:41:31.700 [DEBUG] [Thread-6220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:41:31.700 [DEBUG] [Thread-6220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:41:31.700 [DEBUG] [Thread-6220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:41:31.700 [DEBUG] [Thread-6220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] client lang: <none>
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] server lang: <none>
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] kex follows: False
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] Compression: none
2025-11-25T21:41:31.701 [DEBUG] [Thread-6220] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:41:31.759 [DEBUG] [Thread-6220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:41:31.759 [DEBUG] [Thread-6220] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:41:31.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:41:31.761 [DEBUG] [Thread-6220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:41:31.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:41:31.815 [DEBUG] [Thread-6220] [transport.py] [_log()] userauth is OK
2025-11-25T21:41:31.815 [DEBUG] [Thread-6220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:41:31.815 [DEBUG] [Thread-6220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:41:31.815 [DEBUG] [Thread-6220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:41:31.815 [DEBUG] [Thread-6220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:41:31.834 [INFO] [Thread-6220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:41:31.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:41:31.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:41:32.650 [DEBUG] [Thread-6220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:41:32.651 [DEBUG] [Thread-6220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:41:32.698 [DEBUG] [Thread-6220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:41:32.699 [DEBUG] [Thread-6220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:41:32.708 [DEBUG] [Thread-6220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:41:32.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:41:32.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:41:32.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:41:32.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:41:32.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:41:32.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:41:32.743 [DEBUG] [Thread-6220] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:41:41.021 [DEBUG] [Thread-6222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:41:44.828 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:41:44.829 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:41:56.077 [DEBUG] [Thread-6223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:42:00.977 [DEBUG] [Thread-6224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:42:02.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:42:02.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:42:02.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:42:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 41, 54), 27.22, 15.4, 0.0, 11.24, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:42:03.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:41:54
2025-11-25T21:42:03.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:42:03.718 [DEBUG] [Thread-6225] [transport.py] [_log()] starting thread (client mode): 0x70d68cd0
2025-11-25T21:42:03.718 [DEBUG] [Thread-6225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:42:03.738 [DEBUG] [Thread-6225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:42:03.738 [INFO] [Thread-6225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] client lang: <none>
2025-11-25T21:42:03.741 [DEBUG] [Thread-6225] [transport.py] [_log()] server lang: <none>
2025-11-25T21:42:03.742 [DEBUG] [Thread-6225] [transport.py] [_log()] kex follows: False
2025-11-25T21:42:03.742 [DEBUG] [Thread-6225] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:42:03.742 [DEBUG] [Thread-6225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:42:03.742 [DEBUG] [Thread-6225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:42:03.742 [DEBUG] [Thread-6225] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:42:03.742 [DEBUG] [Thread-6225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:42:03.742 [DEBUG] [Thread-6225] [transport.py] [_log()] Compression: none
2025-11-25T21:42:03.742 [DEBUG] [Thread-6225] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:42:03.761 [DEBUG] [Thread-6225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:42:03.761 [DEBUG] [Thread-6225] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:42:03.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:42:03.762 [DEBUG] [Thread-6225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:42:03.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:42:03.764 [DEBUG] [Thread-6225] [transport.py] [_log()] userauth is OK
2025-11-25T21:42:03.764 [DEBUG] [Thread-6225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:42:03.764 [DEBUG] [Thread-6225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:42:03.764 [DEBUG] [Thread-6225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:42:03.765 [DEBUG] [Thread-6225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:42:03.788 [INFO] [Thread-6225] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:42:03.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:42:04.419 [DEBUG] [Thread-6225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:42:04.419 [DEBUG] [Thread-6225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:42:04.419 [DEBUG] [Thread-6225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:42:04.460 [DEBUG] [Thread-6225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:42:04.460 [DEBUG] [Thread-6225] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:42:04.463 [DEBUG] [Thread-6225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:42:04.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:42:04.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:42:04.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:42:04.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:42:04.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:42:04.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:42:04.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:42:04.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:42:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:42:04.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.820237 -999.00  +21.20   8.22     20   -2.10 1 1 1 1 1     0    0 23.79 4.11 ZNESW 10.3 8.2 191.4 11.3 21.1 -25.8 21.1 -25.1 20.8 -24.0 21.0 -25.1
2025-11-25T21:42:04.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:42:04.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:42:04.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.820237
2025-11-25T21:42:04.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:42:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:42:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:42:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:42:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:42:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:41:54', tmtdew=27.22, humidity=15.4, cloud=0.0, wind=11.24, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:41:55', seeing=1.36, atlas_timestamp='2025-11-25T19:41:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, 0.0022500000000000853, 0.020250000000000767, -0.012500000000001066, -0.0235000000000003, 0.028250000000001663, 0.019999999999999574, -0.03324999999999889, 0.03500000000000014, 0.036000000000001364, 0.05624999999999858, -0.02200000000000024, 0.038000000000000256, 0.05025000000000013, 0.027999999999998693, -0.0129999999999999, -0.003750000000000142, 0.04800000000000004, 0.06549999999999834, -0.005250000000000199, 0.04299999999999926, 0.048749999999998295, 0.01425000000000054, 0.03325000000000067, 0.01649999999999885, 0.05450000000000088, 0.07174999999999976, 0.07450000000000045, 0.05400000000000027, -0.010999999999999233, 0.031000000000000583, -0.0039999999999995595, 0.0007500000000000284], zp_timestamp='2025-11-25T19:36:00')
2025-11-25T21:42:04.490 [DEBUG] [Thread-6225] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:42:04.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:42:04.585 [DEBUG] [Thread-6228] [transport.py] [_log()] starting thread (client mode): 0x70d7f310
2025-11-25T21:42:04.585 [DEBUG] [Thread-6228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:42:04.600 [DEBUG] [Thread-6228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:42:04.600 [INFO] [Thread-6228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:42:04.607 [DEBUG] [Thread-6228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:42:04.607 [DEBUG] [Thread-6228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:42:04.607 [DEBUG] [Thread-6228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] client lang: <none>
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] server lang: <none>
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] kex follows: False
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] Compression: none
2025-11-25T21:42:04.608 [DEBUG] [Thread-6228] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:42:04.666 [DEBUG] [Thread-6228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:42:04.667 [DEBUG] [Thread-6228] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:42:04.667 [DEBUG] [Thread-6228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:42:04.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:42:04.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:42:04.722 [DEBUG] [Thread-6228] [transport.py] [_log()] userauth is OK
2025-11-25T21:42:04.722 [DEBUG] [Thread-6228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:42:04.723 [DEBUG] [Thread-6228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:42:04.723 [DEBUG] [Thread-6228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:42:04.723 [DEBUG] [Thread-6228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:42:04.745 [INFO] [Thread-6228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:42:04.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:42:04.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:42:05.557 [DEBUG] [Thread-6228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:42:05.557 [DEBUG] [Thread-6228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:42:05.607 [DEBUG] [Thread-6228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:42:05.607 [DEBUG] [Thread-6228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:42:05.616 [DEBUG] [Thread-6228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:42:05.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:42:05.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:42:05.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:42:05.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:42:05.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:42:05.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:42:05.658 [DEBUG] [Thread-6228] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:42:11.113 [DEBUG] [Thread-6230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:42:26.168 [DEBUG] [Thread-6231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:42:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:42:35.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:42:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:42:36.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 42, 26), 27.18, 15.43, 0.0, 11.95, 21.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:42:36.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:42:26
2025-11-25T21:42:36.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:42:36.617 [DEBUG] [Thread-6232] [transport.py] [_log()] starting thread (client mode): 0x70d75780
2025-11-25T21:42:36.617 [DEBUG] [Thread-6232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:42:36.637 [DEBUG] [Thread-6232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:42:36.637 [INFO] [Thread-6232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:42:36.638 [DEBUG] [Thread-6232] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] client lang: <none>
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] server lang: <none>
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] kex follows: False
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] Compression: none
2025-11-25T21:42:36.639 [DEBUG] [Thread-6232] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:42:36.653 [DEBUG] [Thread-6232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:42:36.654 [DEBUG] [Thread-6232] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:42:36.654 [DEBUG] [Thread-6232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:42:36.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:42:36.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:42:36.656 [DEBUG] [Thread-6232] [transport.py] [_log()] userauth is OK
2025-11-25T21:42:36.656 [DEBUG] [Thread-6232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:42:36.656 [DEBUG] [Thread-6232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:42:36.656 [DEBUG] [Thread-6232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:42:36.657 [DEBUG] [Thread-6232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:42:36.675 [INFO] [Thread-6232] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:42:36.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:42:37.322 [DEBUG] [Thread-6232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:42:37.322 [DEBUG] [Thread-6232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:42:37.323 [DEBUG] [Thread-6232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:42:37.363 [DEBUG] [Thread-6232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:42:37.363 [DEBUG] [Thread-6232] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:42:37.366 [DEBUG] [Thread-6232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:42:37.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:42:37.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:42:37.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:42:37.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:42:37.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:42:37.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:42:37.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:42:37.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:42:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:42:37.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.820585 -999.00  +21.20   8.20     20   -2.10 1 1 1 1 1     0    0 23.05 4.13 ZNESW 8.5 8.2 196.6 12.3 21.1 -25.9 21.1 -25.2 20.8 -24.1 21.0 -25.1
2025-11-25T21:42:37.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:42:37.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:42:37.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.820585
2025-11-25T21:42:37.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:42:37.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:42:37.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:42:37.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:42:37.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:42:37.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:42:26', tmtdew=27.18, humidity=15.43, cloud=0.0, wind=11.95, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:42:27', seeing=1.23, atlas_timestamp='2025-11-25T19:41:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:42:37.390 [DEBUG] [Thread-6232] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:42:37.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:42:37.486 [DEBUG] [Thread-6235] [transport.py] [_log()] starting thread (client mode): 0x70d74790
2025-11-25T21:42:37.487 [DEBUG] [Thread-6235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:42:37.501 [DEBUG] [Thread-6235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:42:37.501 [INFO] [Thread-6235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:42:37.509 [DEBUG] [Thread-6235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:42:37.509 [DEBUG] [Thread-6235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:42:37.509 [DEBUG] [Thread-6235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:42:37.509 [DEBUG] [Thread-6235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:42:37.510 [DEBUG] [Thread-6235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:42:37.510 [DEBUG] [Thread-6235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:42:37.510 [DEBUG] [Thread-6235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:42:37.510 [DEBUG] [Thread-6235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:42:37.510 [DEBUG] [Thread-6235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:42:37.510 [DEBUG] [Thread-6235] [transport.py] [_log()] client lang: <none>
2025-11-25T21:42:37.510 [DEBUG] [Thread-6235] [transport.py] [_log()] server lang: <none>
2025-11-25T21:42:37.510 [DEBUG] [Thread-6235] [transport.py] [_log()] kex follows: False
2025-11-25T21:42:37.510 [DEBUG] [Thread-6235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:42:37.511 [DEBUG] [Thread-6235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:42:37.511 [DEBUG] [Thread-6235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:42:37.511 [DEBUG] [Thread-6235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:42:37.511 [DEBUG] [Thread-6235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:42:37.511 [DEBUG] [Thread-6235] [transport.py] [_log()] Compression: none
2025-11-25T21:42:37.511 [DEBUG] [Thread-6235] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:42:37.567 [DEBUG] [Thread-6235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:42:37.568 [DEBUG] [Thread-6235] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:42:37.569 [DEBUG] [Thread-6235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:42:37.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:42:37.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:42:37.627 [DEBUG] [Thread-6235] [transport.py] [_log()] userauth is OK
2025-11-25T21:42:37.627 [DEBUG] [Thread-6235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:42:37.627 [DEBUG] [Thread-6235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:42:37.628 [DEBUG] [Thread-6235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:42:37.628 [DEBUG] [Thread-6235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:42:37.647 [INFO] [Thread-6235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:42:37.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:42:37.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:42:38.471 [DEBUG] [Thread-6235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:42:38.471 [DEBUG] [Thread-6235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:42:38.518 [DEBUG] [Thread-6235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:42:38.519 [DEBUG] [Thread-6235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:42:38.529 [DEBUG] [Thread-6235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:42:38.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:42:38.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:42:38.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:42:38.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:42:38.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:42:38.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:42:38.566 [DEBUG] [Thread-6235] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:42:41.202 [DEBUG] [Thread-6237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:42:45.032 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:42:45.033 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:42:56.257 [DEBUG] [Thread-6238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:43:01.029 [DEBUG] [Thread-6239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:43:08.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:43:08.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:43:08.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:43:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 42, 58), 27.25, 15.42, 0.0, 11.36, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:43:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:42:58
2025-11-25T21:43:09.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:43:09.561 [DEBUG] [Thread-6240] [transport.py] [_log()] starting thread (client mode): 0x70d74370
2025-11-25T21:43:09.561 [DEBUG] [Thread-6240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:43:09.576 [DEBUG] [Thread-6240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:43:09.576 [INFO] [Thread-6240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:43:09.579 [DEBUG] [Thread-6240] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:43:09.579 [DEBUG] [Thread-6240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:43:09.579 [DEBUG] [Thread-6240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:43:09.579 [DEBUG] [Thread-6240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:43:09.579 [DEBUG] [Thread-6240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] client lang: <none>
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] server lang: <none>
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] kex follows: False
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] Compression: none
2025-11-25T21:43:09.580 [DEBUG] [Thread-6240] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:43:09.597 [DEBUG] [Thread-6240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:43:09.597 [DEBUG] [Thread-6240] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:43:09.598 [DEBUG] [Thread-6240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:43:09.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:43:09.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:43:09.599 [DEBUG] [Thread-6240] [transport.py] [_log()] userauth is OK
2025-11-25T21:43:09.599 [DEBUG] [Thread-6240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:43:09.599 [DEBUG] [Thread-6240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:43:09.599 [DEBUG] [Thread-6240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:43:09.599 [DEBUG] [Thread-6240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:43:09.612 [INFO] [Thread-6240] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:43:09.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:43:10.233 [DEBUG] [Thread-6240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:43:10.233 [DEBUG] [Thread-6240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:43:10.234 [DEBUG] [Thread-6240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:43:10.274 [DEBUG] [Thread-6240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:43:10.274 [DEBUG] [Thread-6240] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:43:10.276 [DEBUG] [Thread-6240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:43:10.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:43:10.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:43:10.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:43:10.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:43:10.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:43:10.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:43:10.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:43:10.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.821279 -999.00  +21.20  11.57     20   -2.10 1 1 1 1 1     0    0 24.15 5.07 ZNESW 11.3 11.6 196.4 13.1 21.1 -25.9 21.1 -25.2 20.8 -23.9 21.0 -25.0
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.821279
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:43:10.297 [DEBUG] [Thread-6240] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:43:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:42:58', tmtdew=27.25, humidity=15.42, cloud=0.0, wind=11.36, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:42:59', seeing=1.11, atlas_timestamp='2025-11-25T19:42:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:43:10.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:43:10.386 [DEBUG] [Thread-6243] [transport.py] [_log()] starting thread (client mode): 0x70d74af0
2025-11-25T21:43:10.386 [DEBUG] [Thread-6243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:43:10.401 [DEBUG] [Thread-6243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:43:10.401 [INFO] [Thread-6243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:43:10.408 [DEBUG] [Thread-6243] [transport.py] [_log()] client lang: <none>
2025-11-25T21:43:10.409 [DEBUG] [Thread-6243] [transport.py] [_log()] server lang: <none>
2025-11-25T21:43:10.409 [DEBUG] [Thread-6243] [transport.py] [_log()] kex follows: False
2025-11-25T21:43:10.409 [DEBUG] [Thread-6243] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:43:10.409 [DEBUG] [Thread-6243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:43:10.409 [DEBUG] [Thread-6243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:43:10.409 [DEBUG] [Thread-6243] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:43:10.409 [DEBUG] [Thread-6243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:43:10.409 [DEBUG] [Thread-6243] [transport.py] [_log()] Compression: none
2025-11-25T21:43:10.409 [DEBUG] [Thread-6243] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:43:10.467 [DEBUG] [Thread-6243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:43:10.467 [DEBUG] [Thread-6243] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:43:10.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:43:10.468 [DEBUG] [Thread-6243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:43:10.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:43:10.523 [DEBUG] [Thread-6243] [transport.py] [_log()] userauth is OK
2025-11-25T21:43:10.523 [DEBUG] [Thread-6243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:43:10.523 [DEBUG] [Thread-6243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:43:10.523 [DEBUG] [Thread-6243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:43:10.523 [DEBUG] [Thread-6243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:43:10.544 [INFO] [Thread-6243] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:43:10.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:43:10.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:43:11.290 [DEBUG] [Thread-6245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:43:11.348 [DEBUG] [Thread-6243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:43:11.348 [DEBUG] [Thread-6243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:43:11.397 [DEBUG] [Thread-6243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:43:11.397 [DEBUG] [Thread-6243] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:43:11.406 [DEBUG] [Thread-6243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:43:11.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:43:11.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:43:11.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:43:11.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:43:11.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:43:11.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:43:11.444 [DEBUG] [Thread-6243] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:43:26.354 [DEBUG] [Thread-6246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:43:41.389 [DEBUG] [Thread-6247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:43:41.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:43:41.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:43:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:43:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 43, 30), 27.29, 15.37, 0.0, 12.23, 21.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:43:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:43:30
2025-11-25T21:43:42.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:43:42.448 [DEBUG] [Thread-6248] [transport.py] [_log()] starting thread (client mode): 0x70d1dff0
2025-11-25T21:43:42.449 [DEBUG] [Thread-6248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:43:42.469 [DEBUG] [Thread-6248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:43:42.469 [INFO] [Thread-6248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:43:42.472 [DEBUG] [Thread-6248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:43:42.472 [DEBUG] [Thread-6248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:43:42.472 [DEBUG] [Thread-6248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:43:42.472 [DEBUG] [Thread-6248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:43:42.472 [DEBUG] [Thread-6248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:43:42.472 [DEBUG] [Thread-6248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:43:42.472 [DEBUG] [Thread-6248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:43:42.472 [DEBUG] [Thread-6248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] client lang: <none>
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] server lang: <none>
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] kex follows: False
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] Compression: none
2025-11-25T21:43:42.473 [DEBUG] [Thread-6248] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:43:42.490 [DEBUG] [Thread-6248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:43:42.490 [DEBUG] [Thread-6248] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:43:42.490 [DEBUG] [Thread-6248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:43:42.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:43:42.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:43:42.491 [DEBUG] [Thread-6248] [transport.py] [_log()] userauth is OK
2025-11-25T21:43:42.491 [DEBUG] [Thread-6248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:43:42.491 [DEBUG] [Thread-6248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:43:42.491 [DEBUG] [Thread-6248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:43:42.491 [DEBUG] [Thread-6248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:43:42.518 [INFO] [Thread-6248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:43:42.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:43:43.204 [DEBUG] [Thread-6248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:43:43.204 [DEBUG] [Thread-6248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:43:43.204 [DEBUG] [Thread-6248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:43:43.245 [DEBUG] [Thread-6248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:43:43.245 [DEBUG] [Thread-6248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:43:43.247 [DEBUG] [Thread-6248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:43:43.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:43:43.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:43:43.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:43:43.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:43:43.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:43:43.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:43:43.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:43:43.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:43:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:43:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.821626 -999.00  +21.20  10.17     20   -2.10 1 1 1 1 1     0    0 23.39 4.79 ZNESW 8.6 10.2 194.6 13.9 21.1 -25.8 21.1 -25.2 20.8 -24.0 21.0 -24.8
2025-11-25T21:43:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:43:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:43:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.821626
2025-11-25T21:43:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:43:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:43:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:43:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:43:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:43:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:43:30', tmtdew=27.29, humidity=15.37, cloud=0.0, wind=12.23, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:43:31', seeing=1.21, atlas_timestamp='2025-11-25T19:43:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:43:43.267 [DEBUG] [Thread-6248] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:43:43.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:43:43.361 [DEBUG] [Thread-6251] [transport.py] [_log()] starting thread (client mode): 0x70d68f40
2025-11-25T21:43:43.361 [DEBUG] [Thread-6251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:43:43.375 [DEBUG] [Thread-6251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:43:43.375 [INFO] [Thread-6251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] client lang: <none>
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] server lang: <none>
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] kex follows: False
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:43:43.383 [DEBUG] [Thread-6251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:43:43.384 [DEBUG] [Thread-6251] [transport.py] [_log()] Compression: none
2025-11-25T21:43:43.384 [DEBUG] [Thread-6251] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:43:43.445 [DEBUG] [Thread-6251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:43:43.445 [DEBUG] [Thread-6251] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:43:43.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:43:43.445 [DEBUG] [Thread-6251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:43:43.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:43:43.506 [DEBUG] [Thread-6251] [transport.py] [_log()] userauth is OK
2025-11-25T21:43:43.506 [DEBUG] [Thread-6251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:43:43.506 [DEBUG] [Thread-6251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:43:43.506 [DEBUG] [Thread-6251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:43:43.506 [DEBUG] [Thread-6251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:43:43.524 [INFO] [Thread-6251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:43:43.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:43:43.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:43:44.354 [DEBUG] [Thread-6251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:43:44.354 [DEBUG] [Thread-6251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:43:44.402 [DEBUG] [Thread-6251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:43:44.402 [DEBUG] [Thread-6251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:43:44.410 [DEBUG] [Thread-6251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:43:44.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:43:44.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:43:44.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:43:44.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:43:44.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:43:44.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:43:44.442 [DEBUG] [Thread-6251] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:43:45.234 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:43:45.235 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:43:56.422 [DEBUG] [Thread-6253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:44:01.098 [DEBUG] [Thread-6254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:44:11.470 [DEBUG] [Thread-6255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:44:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:44:14.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:44:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:44:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 44, 2), 27.31, 15.35, 0.0, 11.93, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:44:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:44:02
2025-11-25T21:44:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:44:15.402 [DEBUG] [Thread-6256] [transport.py] [_log()] starting thread (client mode): 0x70d688e0
2025-11-25T21:44:15.402 [DEBUG] [Thread-6256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:44:15.422 [DEBUG] [Thread-6256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:44:15.422 [INFO] [Thread-6256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:44:15.425 [DEBUG] [Thread-6256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:44:15.425 [DEBUG] [Thread-6256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:44:15.425 [DEBUG] [Thread-6256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:44:15.425 [DEBUG] [Thread-6256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:44:15.425 [DEBUG] [Thread-6256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:44:15.425 [DEBUG] [Thread-6256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:44:15.425 [DEBUG] [Thread-6256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:44:15.425 [DEBUG] [Thread-6256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] client lang: <none>
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] server lang: <none>
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] kex follows: False
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] Compression: none
2025-11-25T21:44:15.426 [DEBUG] [Thread-6256] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:44:15.439 [DEBUG] [Thread-6256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:44:15.440 [DEBUG] [Thread-6256] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:44:15.440 [DEBUG] [Thread-6256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:44:15.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:44:15.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:44:15.442 [DEBUG] [Thread-6256] [transport.py] [_log()] userauth is OK
2025-11-25T21:44:15.442 [DEBUG] [Thread-6256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:44:15.442 [DEBUG] [Thread-6256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:44:15.443 [DEBUG] [Thread-6256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:44:15.443 [DEBUG] [Thread-6256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:44:15.461 [INFO] [Thread-6256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:44:15.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:44:16.086 [DEBUG] [Thread-6256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:44:16.087 [DEBUG] [Thread-6256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:44:16.087 [DEBUG] [Thread-6256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:44:16.128 [DEBUG] [Thread-6256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:44:16.128 [DEBUG] [Thread-6256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:44:16.131 [DEBUG] [Thread-6256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:44:16.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:44:16.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:44:16.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:44:16.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:44:16.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:44:16.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:44:16.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:44:16.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.821974 -999.00  +21.20   8.86     20   -2.10 1 1 1 1 1     0    0 23.26 4.96 ZNESW 10.2 8.9 194.2 12.1 21.1 -25.9 21.1 -25.3 20.8 -24.0 20.9 -25.1
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.821974
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:44:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:44:02', tmtdew=27.31, humidity=15.35, cloud=0.0, wind=11.93, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:44:03', seeing=1.12, atlas_timestamp='2025-11-25T19:43:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:44:16.156 [DEBUG] [Thread-6256] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:44:16.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:44:16.248 [DEBUG] [Thread-6259] [transport.py] [_log()] starting thread (client mode): 0x70d74a00
2025-11-25T21:44:16.248 [DEBUG] [Thread-6259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:44:16.266 [DEBUG] [Thread-6259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:44:16.266 [INFO] [Thread-6259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:44:16.274 [DEBUG] [Thread-6259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:44:16.274 [DEBUG] [Thread-6259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:44:16.274 [DEBUG] [Thread-6259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:44:16.274 [DEBUG] [Thread-6259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:44:16.274 [DEBUG] [Thread-6259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:44:16.275 [DEBUG] [Thread-6259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:44:16.275 [DEBUG] [Thread-6259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:44:16.275 [DEBUG] [Thread-6259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:44:16.275 [DEBUG] [Thread-6259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:44:16.275 [DEBUG] [Thread-6259] [transport.py] [_log()] client lang: <none>
2025-11-25T21:44:16.275 [DEBUG] [Thread-6259] [transport.py] [_log()] server lang: <none>
2025-11-25T21:44:16.275 [DEBUG] [Thread-6259] [transport.py] [_log()] kex follows: False
2025-11-25T21:44:16.275 [DEBUG] [Thread-6259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:44:16.276 [DEBUG] [Thread-6259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:44:16.276 [DEBUG] [Thread-6259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:44:16.276 [DEBUG] [Thread-6259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:44:16.276 [DEBUG] [Thread-6259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:44:16.276 [DEBUG] [Thread-6259] [transport.py] [_log()] Compression: none
2025-11-25T21:44:16.276 [DEBUG] [Thread-6259] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:44:16.334 [DEBUG] [Thread-6259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:44:16.335 [DEBUG] [Thread-6259] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:44:16.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:44:16.337 [DEBUG] [Thread-6259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:44:16.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:44:16.395 [DEBUG] [Thread-6259] [transport.py] [_log()] userauth is OK
2025-11-25T21:44:16.395 [DEBUG] [Thread-6259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:44:16.395 [DEBUG] [Thread-6259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:44:16.396 [DEBUG] [Thread-6259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:44:16.396 [DEBUG] [Thread-6259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:44:16.417 [INFO] [Thread-6259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:44:16.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:44:16.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:44:17.289 [DEBUG] [Thread-6259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:44:17.290 [DEBUG] [Thread-6259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:44:17.338 [DEBUG] [Thread-6259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:44:17.338 [DEBUG] [Thread-6259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:44:17.347 [DEBUG] [Thread-6259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:44:17.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:44:17.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:44:17.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:44:17.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:44:17.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:44:17.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:44:17.385 [DEBUG] [Thread-6259] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:44:26.502 [DEBUG] [Thread-6261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:44:41.553 [DEBUG] [Thread-6262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:44:45.435 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:44:45.436 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:44:47.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:44:47.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:44:47.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:44:48.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 44, 34), 27.44, 15.35, 0.0, 13.41, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:44:48.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:44:34
2025-11-25T21:44:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:44:48.334 [DEBUG] [Thread-6263] [transport.py] [_log()] starting thread (client mode): 0x70d55cf0
2025-11-25T21:44:48.334 [DEBUG] [Thread-6263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:44:48.354 [DEBUG] [Thread-6263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:44:48.354 [INFO] [Thread-6263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] client lang: <none>
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] server lang: <none>
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] kex follows: False
2025-11-25T21:44:48.355 [DEBUG] [Thread-6263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:44:48.356 [DEBUG] [Thread-6263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:44:48.356 [DEBUG] [Thread-6263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:44:48.356 [DEBUG] [Thread-6263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:44:48.356 [DEBUG] [Thread-6263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:44:48.356 [DEBUG] [Thread-6263] [transport.py] [_log()] Compression: none
2025-11-25T21:44:48.356 [DEBUG] [Thread-6263] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:44:48.364 [DEBUG] [Thread-6263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:44:48.364 [DEBUG] [Thread-6263] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:44:48.365 [DEBUG] [Thread-6263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:44:48.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:44:48.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:44:48.367 [DEBUG] [Thread-6263] [transport.py] [_log()] userauth is OK
2025-11-25T21:44:48.367 [DEBUG] [Thread-6263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:44:48.367 [DEBUG] [Thread-6263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:44:48.367 [DEBUG] [Thread-6263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:44:48.367 [DEBUG] [Thread-6263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:44:48.392 [INFO] [Thread-6263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:44:48.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:44:49.164 [DEBUG] [Thread-6263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:44:49.164 [DEBUG] [Thread-6263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:44:49.165 [DEBUG] [Thread-6263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:44:49.205 [DEBUG] [Thread-6263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:44:49.205 [DEBUG] [Thread-6263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:44:49.210 [DEBUG] [Thread-6263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:44:49.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:44:49.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:44:49.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:44:49.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:44:49.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:44:49.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:44:49.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:44:49.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:44:49.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:44:49.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.822321 -999.00  +21.20   8.22     20   -2.20 1 1 1 1 1     0    0 23.21 4.97 ZNESW 7.7 8.2 198.8 12.3 21.1 -25.9 21.1 -25.2 20.7 -24.0 21.0 -25.0
2025-11-25T21:44:49.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:44:49.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:44:49.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.822321
2025-11-25T21:44:49.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:44:49.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:44:49.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:44:49.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:44:49.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:44:49.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:44:34', tmtdew=27.44, humidity=15.35, cloud=0.0, wind=13.41, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:44:35', seeing=1.12, atlas_timestamp='2025-11-25T19:44:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:44:49.236 [DEBUG] [Thread-6263] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:44:49.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:44:49.336 [DEBUG] [Thread-6266] [transport.py] [_log()] starting thread (client mode): 0x70d68c10
2025-11-25T21:44:49.336 [DEBUG] [Thread-6266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:44:49.351 [DEBUG] [Thread-6266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:44:49.351 [INFO] [Thread-6266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:44:49.358 [DEBUG] [Thread-6266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:44:49.359 [DEBUG] [Thread-6266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:44:49.359 [DEBUG] [Thread-6266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:44:49.359 [DEBUG] [Thread-6266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:44:49.359 [DEBUG] [Thread-6266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:44:49.359 [DEBUG] [Thread-6266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:44:49.359 [DEBUG] [Thread-6266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:44:49.359 [DEBUG] [Thread-6266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:44:49.360 [DEBUG] [Thread-6266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:44:49.360 [DEBUG] [Thread-6266] [transport.py] [_log()] client lang: <none>
2025-11-25T21:44:49.360 [DEBUG] [Thread-6266] [transport.py] [_log()] server lang: <none>
2025-11-25T21:44:49.360 [DEBUG] [Thread-6266] [transport.py] [_log()] kex follows: False
2025-11-25T21:44:49.360 [DEBUG] [Thread-6266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:44:49.360 [DEBUG] [Thread-6266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:44:49.360 [DEBUG] [Thread-6266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:44:49.360 [DEBUG] [Thread-6266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:44:49.361 [DEBUG] [Thread-6266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:44:49.361 [DEBUG] [Thread-6266] [transport.py] [_log()] Compression: none
2025-11-25T21:44:49.361 [DEBUG] [Thread-6266] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:44:49.418 [DEBUG] [Thread-6266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:44:49.419 [DEBUG] [Thread-6266] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:44:49.419 [DEBUG] [Thread-6266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:44:49.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:44:49.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:44:49.475 [DEBUG] [Thread-6266] [transport.py] [_log()] userauth is OK
2025-11-25T21:44:49.475 [DEBUG] [Thread-6266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:44:49.475 [DEBUG] [Thread-6266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:44:49.475 [DEBUG] [Thread-6266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:44:49.475 [DEBUG] [Thread-6266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:44:49.498 [INFO] [Thread-6266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:44:49.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:44:49.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:44:50.344 [DEBUG] [Thread-6266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:44:50.345 [DEBUG] [Thread-6266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:44:50.393 [DEBUG] [Thread-6266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:44:50.393 [DEBUG] [Thread-6266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:44:50.402 [DEBUG] [Thread-6266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:44:50.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:44:50.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:44:50.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:44:50.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:44:50.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:44:50.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:44:50.439 [DEBUG] [Thread-6266] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:44:56.589 [DEBUG] [Thread-6268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:45:01.155 [DEBUG] [Thread-6269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:45:11.624 [DEBUG] [Thread-6270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:45:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:45:20.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:45:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:45:21.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 45, 6), 27.4, 15.38, 0.0, 13.87, 21.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:45:21.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:45:06
2025-11-25T21:45:21.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:45:21.412 [DEBUG] [Thread-6271] [transport.py] [_log()] starting thread (client mode): 0x70d57fd0
2025-11-25T21:45:21.412 [DEBUG] [Thread-6271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:45:21.432 [DEBUG] [Thread-6271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:45:21.432 [INFO] [Thread-6271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:45:21.435 [DEBUG] [Thread-6271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:45:21.435 [DEBUG] [Thread-6271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:45:21.435 [DEBUG] [Thread-6271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] client lang: <none>
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] server lang: <none>
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] kex follows: False
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:45:21.436 [DEBUG] [Thread-6271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:45:21.437 [DEBUG] [Thread-6271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:45:21.437 [DEBUG] [Thread-6271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:45:21.437 [DEBUG] [Thread-6271] [transport.py] [_log()] Compression: none
2025-11-25T21:45:21.437 [DEBUG] [Thread-6271] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:45:21.454 [DEBUG] [Thread-6271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:45:21.455 [DEBUG] [Thread-6271] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:45:21.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:45:21.455 [DEBUG] [Thread-6271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:45:21.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:45:21.457 [DEBUG] [Thread-6271] [transport.py] [_log()] userauth is OK
2025-11-25T21:45:21.458 [DEBUG] [Thread-6271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:45:21.458 [DEBUG] [Thread-6271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:45:21.458 [DEBUG] [Thread-6271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:45:21.458 [DEBUG] [Thread-6271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:45:21.482 [INFO] [Thread-6271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:45:21.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:45:22.060 [DEBUG] [Thread-6271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:45:22.060 [DEBUG] [Thread-6271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:45:22.061 [DEBUG] [Thread-6271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:45:22.101 [DEBUG] [Thread-6271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:45:22.101 [DEBUG] [Thread-6271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:45:22.104 [DEBUG] [Thread-6271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:45:22.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:45:22.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:45:22.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:45:22.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:45:22.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:45:22.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:45:22.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:45:22.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:45:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:45:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.822668 -999.00  +21.20   8.81     20   -2.20 1 1 1 1 1     0    0 23.63 4.98 ZNESW 8.8 8.8 191.8 12.5 21.0 -25.8 21.1 -25.3 20.7 -24.0 20.9 -25.0
2025-11-25T21:45:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:45:22.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:45:22.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.822668
2025-11-25T21:45:22.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:45:22.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:45:22.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:45:22.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:45:22.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:45:22.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:45:06', tmtdew=27.4, humidity=15.38, cloud=0.0, wind=13.87, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:45:07', seeing=1.28, atlas_timestamp='2025-11-25T19:44:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:45:22.132 [DEBUG] [Thread-6271] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:45:22.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:45:22.232 [DEBUG] [Thread-6274] [transport.py] [_log()] starting thread (client mode): 0x70d766e0
2025-11-25T21:45:22.232 [DEBUG] [Thread-6274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:45:22.251 [DEBUG] [Thread-6274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:45:22.251 [INFO] [Thread-6274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:45:22.262 [DEBUG] [Thread-6274] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:45:22.262 [DEBUG] [Thread-6274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:45:22.262 [DEBUG] [Thread-6274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:45:22.262 [DEBUG] [Thread-6274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:45:22.262 [DEBUG] [Thread-6274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] client lang: <none>
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] server lang: <none>
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] kex follows: False
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] Compression: none
2025-11-25T21:45:22.263 [DEBUG] [Thread-6274] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:45:22.321 [DEBUG] [Thread-6274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:45:22.322 [DEBUG] [Thread-6274] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:45:22.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:45:22.323 [DEBUG] [Thread-6274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:45:22.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:45:22.383 [DEBUG] [Thread-6274] [transport.py] [_log()] userauth is OK
2025-11-25T21:45:22.383 [DEBUG] [Thread-6274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:45:22.384 [DEBUG] [Thread-6274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:45:22.384 [DEBUG] [Thread-6274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:45:22.384 [DEBUG] [Thread-6274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:45:22.402 [INFO] [Thread-6274] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:45:22.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:45:22.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:45:23.200 [DEBUG] [Thread-6274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:45:23.200 [DEBUG] [Thread-6274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:45:23.248 [DEBUG] [Thread-6274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:45:23.248 [DEBUG] [Thread-6274] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:45:23.257 [DEBUG] [Thread-6274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:45:23.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:45:23.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:45: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') -> 00000000
2025-11-25T21:45:23.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:45:23.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:45:23.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:45:23.294 [DEBUG] [Thread-6274] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:45:26.658 [DEBUG] [Thread-6276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:45:41.706 [DEBUG] [Thread-6277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:45:45.641 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:45:45.642 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:45:53.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:45:53.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:45:53.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:45:53.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 45, 38), 27.34, 15.42, 0.0, 10.87, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:45:53.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:45:38
2025-11-25T21:45:54.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:45:54.271 [DEBUG] [Thread-6278] [transport.py] [_log()] starting thread (client mode): 0x70d76620
2025-11-25T21:45:54.271 [DEBUG] [Thread-6278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:45:54.292 [DEBUG] [Thread-6278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:45:54.292 [INFO] [Thread-6278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:45:54.295 [DEBUG] [Thread-6278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:45:54.295 [DEBUG] [Thread-6278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] client lang: <none>
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] server lang: <none>
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] kex follows: False
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:45:54.296 [DEBUG] [Thread-6278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:45:54.297 [DEBUG] [Thread-6278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:45:54.297 [DEBUG] [Thread-6278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:45:54.297 [DEBUG] [Thread-6278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:45:54.297 [DEBUG] [Thread-6278] [transport.py] [_log()] Compression: none
2025-11-25T21:45:54.297 [DEBUG] [Thread-6278] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:45:54.316 [DEBUG] [Thread-6278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:45:54.317 [DEBUG] [Thread-6278] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:45:54.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:45:54.318 [DEBUG] [Thread-6278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:45:54.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:45:54.320 [DEBUG] [Thread-6278] [transport.py] [_log()] userauth is OK
2025-11-25T21:45:54.321 [DEBUG] [Thread-6278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:45:54.321 [DEBUG] [Thread-6278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:45:54.321 [DEBUG] [Thread-6278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:45:54.321 [DEBUG] [Thread-6278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:45:54.335 [INFO] [Thread-6278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:45:54.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:45:55.105 [DEBUG] [Thread-6278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:45:55.106 [DEBUG] [Thread-6278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:45:55.106 [DEBUG] [Thread-6278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:45:55.147 [DEBUG] [Thread-6278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:45:55.147 [DEBUG] [Thread-6278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:45:55.150 [DEBUG] [Thread-6278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:45:55.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:45:55.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:45:55.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:45:55.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:45:55.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:45:55.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:45:55.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:45:55.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:45:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:45:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.823015 -999.00  +21.20  10.70     20   -2.20 1 1 1 1 1     0    0 23.34 4.83 ZNESW 8.0 10.7 182.4 13.0 21.0 -25.8 21.1 -25.1 20.8 -24.0 20.9 -25.1
2025-11-25T21:45:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:45:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:45:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.823015
2025-11-25T21:45:55.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:45:55.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:45:55.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:45:55.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:45:55.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:45:55.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:45:38', tmtdew=27.34, humidity=15.42, cloud=0.0, wind=10.87, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:45:38', seeing=1.08, atlas_timestamp='2025-11-25T19:45:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:45:55.178 [DEBUG] [Thread-6278] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:45:55.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:45:55.273 [DEBUG] [Thread-6281] [transport.py] [_log()] starting thread (client mode): 0x70d42c20
2025-11-25T21:45:55.273 [DEBUG] [Thread-6281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:45:55.288 [DEBUG] [Thread-6281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:45:55.288 [INFO] [Thread-6281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:45:55.296 [DEBUG] [Thread-6281] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:45:55.296 [DEBUG] [Thread-6281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:45:55.296 [DEBUG] [Thread-6281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:45:55.296 [DEBUG] [Thread-6281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:45:55.296 [DEBUG] [Thread-6281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:45:55.297 [DEBUG] [Thread-6281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:45:55.297 [DEBUG] [Thread-6281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:45:55.297 [DEBUG] [Thread-6281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:45:55.297 [DEBUG] [Thread-6281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:45:55.297 [DEBUG] [Thread-6281] [transport.py] [_log()] client lang: <none>
2025-11-25T21:45:55.297 [DEBUG] [Thread-6281] [transport.py] [_log()] server lang: <none>
2025-11-25T21:45:55.297 [DEBUG] [Thread-6281] [transport.py] [_log()] kex follows: False
2025-11-25T21:45:55.297 [DEBUG] [Thread-6281] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:45:55.297 [DEBUG] [Thread-6281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:45:55.298 [DEBUG] [Thread-6281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:45:55.298 [DEBUG] [Thread-6281] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:45:55.298 [DEBUG] [Thread-6281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:45:55.298 [DEBUG] [Thread-6281] [transport.py] [_log()] Compression: none
2025-11-25T21:45:55.298 [DEBUG] [Thread-6281] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:45:55.357 [DEBUG] [Thread-6281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:45:55.358 [DEBUG] [Thread-6281] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:45:55.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:45:55.360 [DEBUG] [Thread-6281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:45:55.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:45:55.419 [DEBUG] [Thread-6281] [transport.py] [_log()] userauth is OK
2025-11-25T21:45:55.419 [DEBUG] [Thread-6281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:45:55.419 [DEBUG] [Thread-6281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:45:55.420 [DEBUG] [Thread-6281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:45:55.420 [DEBUG] [Thread-6281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:45:55.442 [INFO] [Thread-6281] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:45:55.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:45:55.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:45:56.262 [DEBUG] [Thread-6281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:45:56.262 [DEBUG] [Thread-6281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:45:56.310 [DEBUG] [Thread-6281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:45:56.310 [DEBUG] [Thread-6281] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:45:56.320 [DEBUG] [Thread-6281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:45:56.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:45:56.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:45: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
2025-11-25T21:45:56.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:45:56.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:45:56.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:45:56.359 [DEBUG] [Thread-6281] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:45:56.744 [DEBUG] [Thread-6283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:46:01.228 [DEBUG] [Thread-6284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:46:11.802 [DEBUG] [Thread-6285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:46:26.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:46:26.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:46:26.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:46:26.834 [DEBUG] [Thread-6286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:46:27.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 46, 10), 27.31, 15.43, 0.0, 10.53, 21.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:46:27.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:46:10
2025-11-25T21:46:27.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:46:27.284 [DEBUG] [Thread-6287] [transport.py] [_log()] starting thread (client mode): 0x70d571f0
2025-11-25T21:46:27.284 [DEBUG] [Thread-6287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:46:27.305 [DEBUG] [Thread-6287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:46:27.305 [INFO] [Thread-6287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:46:27.308 [DEBUG] [Thread-6287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:46:27.308 [DEBUG] [Thread-6287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] client lang: <none>
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] server lang: <none>
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] kex follows: False
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:46:27.309 [DEBUG] [Thread-6287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:46:27.310 [DEBUG] [Thread-6287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:46:27.310 [DEBUG] [Thread-6287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:46:27.310 [DEBUG] [Thread-6287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:46:27.310 [DEBUG] [Thread-6287] [transport.py] [_log()] Compression: none
2025-11-25T21:46:27.310 [DEBUG] [Thread-6287] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:46:27.329 [DEBUG] [Thread-6287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:46:27.329 [DEBUG] [Thread-6287] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:46:27.330 [DEBUG] [Thread-6287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:46:27.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:46:27.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:46:27.332 [DEBUG] [Thread-6287] [transport.py] [_log()] userauth is OK
2025-11-25T21:46:27.332 [DEBUG] [Thread-6287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:46:27.332 [DEBUG] [Thread-6287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:46:27.332 [DEBUG] [Thread-6287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:46:27.332 [DEBUG] [Thread-6287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:46:27.356 [INFO] [Thread-6287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:46:27.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:46:27.993 [DEBUG] [Thread-6287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:46:27.993 [DEBUG] [Thread-6287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:46:27.994 [DEBUG] [Thread-6287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:46:28.034 [DEBUG] [Thread-6287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:46:28.034 [DEBUG] [Thread-6287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:46:28.038 [DEBUG] [Thread-6287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:46:28.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:46:28.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:46:28.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:46:28.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:46:28.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:46:28.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:46:28.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:46:28.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:46:28.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:46:28.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.823710 -999.00  +21.10   4.77     20   -2.10 1 1 1 1 1     0    0 23.51 3.95 ZNESW 7.1 4.8 204.1 9.2 21.0 -25.8 21.0 -25.5 20.7 -24.2 20.9 -25.0
2025-11-25T21:46:28.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:46:28.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:46:28.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.823710
2025-11-25T21:46:28.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:46:28.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:46:28.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:46:28.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:46:28.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:46:28.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:46:10', tmtdew=27.31, humidity=15.43, cloud=0.0, wind=10.53, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:46:10', seeing=0.98, atlas_timestamp='2025-11-25T19:46:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:46:28.065 [DEBUG] [Thread-6287] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:46:28.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:46:28.161 [DEBUG] [Thread-6290] [transport.py] [_log()] starting thread (client mode): 0x70d7e7d0
2025-11-25T21:46:28.161 [DEBUG] [Thread-6290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:46:28.176 [DEBUG] [Thread-6290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:46:28.176 [INFO] [Thread-6290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:46:28.184 [DEBUG] [Thread-6290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:46:28.184 [DEBUG] [Thread-6290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:46:28.184 [DEBUG] [Thread-6290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] client lang: <none>
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] server lang: <none>
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] kex follows: False
2025-11-25T21:46:28.185 [DEBUG] [Thread-6290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:46:28.186 [DEBUG] [Thread-6290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:46:28.186 [DEBUG] [Thread-6290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:46:28.186 [DEBUG] [Thread-6290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:46:28.186 [DEBUG] [Thread-6290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:46:28.186 [DEBUG] [Thread-6290] [transport.py] [_log()] Compression: none
2025-11-25T21:46:28.186 [DEBUG] [Thread-6290] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:46:28.243 [DEBUG] [Thread-6290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:46:28.244 [DEBUG] [Thread-6290] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:46:28.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:46:28.245 [DEBUG] [Thread-6290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:46:28.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:46:28.299 [DEBUG] [Thread-6290] [transport.py] [_log()] userauth is OK
2025-11-25T21:46:28.299 [DEBUG] [Thread-6290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:46:28.300 [DEBUG] [Thread-6290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:46:28.300 [DEBUG] [Thread-6290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:46:28.300 [DEBUG] [Thread-6290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:46:28.319 [INFO] [Thread-6290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:46:28.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:46:28.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:46:29.174 [DEBUG] [Thread-6290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:46:29.174 [DEBUG] [Thread-6290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:46:29.222 [DEBUG] [Thread-6290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:46:29.223 [DEBUG] [Thread-6290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:46:29.232 [DEBUG] [Thread-6290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:46:29.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:46:29.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:46:29.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:46:29.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:46:29.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:46:29.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:46:29.272 [DEBUG] [Thread-6290] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:46:41.869 [DEBUG] [Thread-6292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:46:45.842 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:46:45.842 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:46:56.919 [DEBUG] [Thread-6293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:46:59.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:46:59.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:46:59.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:46:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 46, 42), 27.23, 15.35, 0.0, 13.18, 20.91, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:46:59.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:46:42
2025-11-25T21:47:00.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:47:00.215 [DEBUG] [Thread-6294] [transport.py] [_log()] starting thread (client mode): 0x70d3af20
2025-11-25T21:47:00.215 [DEBUG] [Thread-6294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:47:00.227 [DEBUG] [Thread-6294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:47:00.227 [INFO] [Thread-6294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] client lang: <none>
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] server lang: <none>
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] kex follows: False
2025-11-25T21:47:00.230 [DEBUG] [Thread-6294] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:47:00.231 [DEBUG] [Thread-6294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:47:00.231 [DEBUG] [Thread-6294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:47:00.231 [DEBUG] [Thread-6294] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:47:00.231 [DEBUG] [Thread-6294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:47:00.231 [DEBUG] [Thread-6294] [transport.py] [_log()] Compression: none
2025-11-25T21:47:00.231 [DEBUG] [Thread-6294] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:47:00.247 [DEBUG] [Thread-6294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:47:00.248 [DEBUG] [Thread-6294] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:47:00.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:47:00.249 [DEBUG] [Thread-6294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:47:00.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:47:00.251 [DEBUG] [Thread-6294] [transport.py] [_log()] userauth is OK
2025-11-25T21:47:00.251 [DEBUG] [Thread-6294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:47:00.252 [DEBUG] [Thread-6294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:47:00.252 [DEBUG] [Thread-6294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:47:00.252 [DEBUG] [Thread-6294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:47:00.273 [INFO] [Thread-6294] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:47:00.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:47:01.030 [DEBUG] [Thread-6294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:47:01.030 [DEBUG] [Thread-6294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:47:01.030 [DEBUG] [Thread-6294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:47:01.070 [DEBUG] [Thread-6294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:47:01.071 [DEBUG] [Thread-6294] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:47:01.073 [DEBUG] [Thread-6294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:47:01.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:47:01.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:47:01.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:47:01.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:47:01.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:47:01.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:47:01.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:47:01.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:47:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:47:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.824057 -999.00  +21.10   6.09     20   -2.20 1 1 1 1 1     0    0 23.70 3.83 ZNESW 5.9 6.1 204.3 8.0 21.0 -25.8 21.0 -25.4 20.7 -24.1 20.9 -25.1
2025-11-25T21:47:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:47:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:47:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.824057
2025-11-25T21:47:01.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:47:01.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:47:01.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:47:01.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:47:01.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:47:01.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:46:42', tmtdew=27.23, humidity=15.35, cloud=0.0, wind=13.18, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:46:43', seeing=1.11, atlas_timestamp='2025-11-25T19:46:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:47:01.100 [DEBUG] [Thread-6294] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:47:01.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:47:01.207 [DEBUG] [Thread-6297] [transport.py] [_log()] starting thread (client mode): 0x70d3a410
2025-11-25T21:47:01.207 [DEBUG] [Thread-6297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:47:01.222 [DEBUG] [Thread-6297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:47:01.222 [INFO] [Thread-6297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:47:01.229 [DEBUG] [Thread-6297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:47:01.229 [DEBUG] [Thread-6297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] client lang: <none>
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] server lang: <none>
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] kex follows: False
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:47:01.230 [DEBUG] [Thread-6297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:47:01.231 [DEBUG] [Thread-6297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:47:01.231 [DEBUG] [Thread-6297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:47:01.231 [DEBUG] [Thread-6297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:47:01.231 [DEBUG] [Thread-6297] [transport.py] [_log()] Compression: none
2025-11-25T21:47:01.231 [DEBUG] [Thread-6297] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:47:01.285 [DEBUG] [Thread-6297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:47:01.286 [DEBUG] [Thread-6297] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:47:01.286 [DEBUG] [Thread-6297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:47:01.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:47:01.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:47:01.292 [DEBUG] [Thread-6299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:47:01.343 [DEBUG] [Thread-6297] [transport.py] [_log()] userauth is OK
2025-11-25T21:47:01.344 [DEBUG] [Thread-6297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:47:01.344 [DEBUG] [Thread-6297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:47:01.344 [DEBUG] [Thread-6297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:47:01.344 [DEBUG] [Thread-6297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:47:01.363 [INFO] [Thread-6297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:47:01.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:47:01.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:47:02.209 [DEBUG] [Thread-6297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:47:02.210 [DEBUG] [Thread-6297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:47:02.258 [DEBUG] [Thread-6297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:47:02.258 [DEBUG] [Thread-6297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:47:02.268 [DEBUG] [Thread-6297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:47:02.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:47:02.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:47:02.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:47:02.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:47:02.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:47:02.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:47:02.304 [DEBUG] [Thread-6297] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:47:11.957 [DEBUG] [Thread-6300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:47:27.007 [DEBUG] [Thread-6301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:47:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:47:32.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:47:32.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:47:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 47, 14), 27.17, 15.43, 0.0, 13.22, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:47:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:47:14
2025-11-25T21:47:33.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:47:33.249 [DEBUG] [Thread-6302] [transport.py] [_log()] starting thread (client mode): 0x70d7e0b0
2025-11-25T21:47:33.249 [DEBUG] [Thread-6302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:47:33.268 [DEBUG] [Thread-6302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:47:33.268 [INFO] [Thread-6302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:47:33.271 [DEBUG] [Thread-6302] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] client lang: <none>
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] server lang: <none>
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] kex follows: False
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] Compression: none
2025-11-25T21:47:33.272 [DEBUG] [Thread-6302] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:47:33.289 [DEBUG] [Thread-6302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:47:33.289 [DEBUG] [Thread-6302] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:47:33.290 [DEBUG] [Thread-6302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:47:33.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:47:33.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:47:33.292 [DEBUG] [Thread-6302] [transport.py] [_log()] userauth is OK
2025-11-25T21:47:33.292 [DEBUG] [Thread-6302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:47:33.292 [DEBUG] [Thread-6302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:47:33.292 [DEBUG] [Thread-6302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:47:33.293 [DEBUG] [Thread-6302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:47:33.316 [INFO] [Thread-6302] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:47:33.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:47:33.965 [DEBUG] [Thread-6302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:47:33.965 [DEBUG] [Thread-6302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:47:33.965 [DEBUG] [Thread-6302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:47:34.006 [DEBUG] [Thread-6302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:47:34.006 [DEBUG] [Thread-6302] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:47:34.009 [DEBUG] [Thread-6302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:47:34.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:47:34.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:47:34.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:47:34.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:47:34.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:47:34.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:47:34.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:47:34.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:47:34.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:47:34.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.824404 -999.00  +21.00   8.15     20   -2.20 1 1 1 1 1     0    0 23.50 3.61 ZNESW 8.5 8.2 195.8 10.3 21.0 -25.9 21.0 -25.3 20.7 -24.0 20.9 -25.0
2025-11-25T21:47:34.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:47:34.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:47:34.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.824404
2025-11-25T21:47:34.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:47:34.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:47:34.045 [DEBUG] [Thread-6302] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:47:34.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:47:34.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:47:34.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:47:34.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:47:14', tmtdew=27.17, humidity=15.43, cloud=0.0, wind=13.22, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:47:15', seeing=1.49, atlas_timestamp='2025-11-25T19:47:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:47:34.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:47:34.143 [DEBUG] [Thread-6305] [transport.py] [_log()] starting thread (client mode): 0x70d54b20
2025-11-25T21:47:34.143 [DEBUG] [Thread-6305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:47:34.157 [DEBUG] [Thread-6305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:47:34.157 [INFO] [Thread-6305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:47:34.165 [DEBUG] [Thread-6305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:47:34.165 [DEBUG] [Thread-6305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:47:34.165 [DEBUG] [Thread-6305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:47:34.165 [DEBUG] [Thread-6305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:47:34.166 [DEBUG] [Thread-6305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:47:34.166 [DEBUG] [Thread-6305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:47:34.166 [DEBUG] [Thread-6305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:47:34.166 [DEBUG] [Thread-6305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:47:34.166 [DEBUG] [Thread-6305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:47:34.166 [DEBUG] [Thread-6305] [transport.py] [_log()] client lang: <none>
2025-11-25T21:47:34.166 [DEBUG] [Thread-6305] [transport.py] [_log()] server lang: <none>
2025-11-25T21:47:34.166 [DEBUG] [Thread-6305] [transport.py] [_log()] kex follows: False
2025-11-25T21:47:34.166 [DEBUG] [Thread-6305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:47:34.167 [DEBUG] [Thread-6305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:47:34.167 [DEBUG] [Thread-6305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:47:34.167 [DEBUG] [Thread-6305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:47:34.167 [DEBUG] [Thread-6305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:47:34.167 [DEBUG] [Thread-6305] [transport.py] [_log()] Compression: none
2025-11-25T21:47:34.167 [DEBUG] [Thread-6305] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:47:34.226 [DEBUG] [Thread-6305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:47:34.227 [DEBUG] [Thread-6305] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:47:34.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:47:34.228 [DEBUG] [Thread-6305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:47:34.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:47:34.284 [DEBUG] [Thread-6305] [transport.py] [_log()] userauth is OK
2025-11-25T21:47:34.284 [DEBUG] [Thread-6305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:47:34.284 [DEBUG] [Thread-6305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:47:34.284 [DEBUG] [Thread-6305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:47:34.285 [DEBUG] [Thread-6305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:47:34.306 [INFO] [Thread-6305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:47:34.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:47:34.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:47:35.100 [DEBUG] [Thread-6305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:47:35.101 [DEBUG] [Thread-6305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:47:35.149 [DEBUG] [Thread-6305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:47:35.150 [DEBUG] [Thread-6305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:47:35.162 [DEBUG] [Thread-6305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:47:35.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:47:35.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:47:35.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:47:35.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:47:35.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:47:35.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:47:35.198 [DEBUG] [Thread-6305] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:47:42.039 [DEBUG] [Thread-6307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:47:46.044 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:47:46.046 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:47:57.100 [DEBUG] [Thread-6308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:48:01.358 [DEBUG] [Thread-6309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:48:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:48:05.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:48:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:48:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 47, 46), 27.19, 15.42, 0.0, 14.01, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:48:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:47:46
2025-11-25T21:48:06.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:48:06.198 [DEBUG] [Thread-6310] [transport.py] [_log()] starting thread (client mode): 0x70d397e0
2025-11-25T21:48:06.198 [DEBUG] [Thread-6310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:48:06.219 [DEBUG] [Thread-6310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:48:06.219 [INFO] [Thread-6310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] client lang: <none>
2025-11-25T21:48:06.222 [DEBUG] [Thread-6310] [transport.py] [_log()] server lang: <none>
2025-11-25T21:48:06.223 [DEBUG] [Thread-6310] [transport.py] [_log()] kex follows: False
2025-11-25T21:48:06.223 [DEBUG] [Thread-6310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:48:06.223 [DEBUG] [Thread-6310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:48:06.223 [DEBUG] [Thread-6310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:48:06.223 [DEBUG] [Thread-6310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:48:06.223 [DEBUG] [Thread-6310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:48:06.223 [DEBUG] [Thread-6310] [transport.py] [_log()] Compression: none
2025-11-25T21:48:06.223 [DEBUG] [Thread-6310] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:48:06.238 [DEBUG] [Thread-6310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:48:06.239 [DEBUG] [Thread-6310] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:48:06.239 [DEBUG] [Thread-6310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:48:06.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:48:06.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:48:06.240 [DEBUG] [Thread-6310] [transport.py] [_log()] userauth is OK
2025-11-25T21:48:06.240 [DEBUG] [Thread-6310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:48:06.240 [DEBUG] [Thread-6310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:48:06.240 [DEBUG] [Thread-6310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:48:06.240 [DEBUG] [Thread-6310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:48:06.249 [INFO] [Thread-6310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:48:06.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:48:06.851 [DEBUG] [Thread-6310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:48:06.851 [DEBUG] [Thread-6310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:48:06.851 [DEBUG] [Thread-6310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:48:06.891 [DEBUG] [Thread-6310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:48:06.891 [DEBUG] [Thread-6310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:48:06.893 [DEBUG] [Thread-6310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:48:06.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:48:06.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:48:06.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:48:06.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:48:06.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:48:06.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:48:06.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.824751 -999.00  +21.00   8.76     20   -2.30 1 1 1 1 1     0    0 23.10 2.86 ZNESW 6.9 8.8 195.2 12.2 21.0 -25.8 21.0 -25.4 20.7 -24.0 20.9 -24.9
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.824751
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:48:06.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:47:46', tmtdew=27.19, humidity=15.42, cloud=0.0, wind=14.01, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:47:47', seeing=1.49, atlas_timestamp='2025-11-25T19:47:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.028249999999999886, 0.0017499999999994742, -0.016500000000000625, -0.0045000000000001705, 0.056250000000000355, 0.023999999999999133, -0.009249999999997982, 0.03249999999999886, 0.016500000000000625, 0.02224999999999966, 0.002000000000000668, 0.09200000000000053, 0.07424999999999926, 0.012000000000000455, 0.010500000000000398, 0.021750000000000824, 0.09149999999999991, 0.06849999999999845, -0.017250000000000654, 0.05699999999999861, 0.11574999999999847, 0.012250000000001648, 0.028750000000000497, -0.0010000000000012221, 0.07599999999999874, 0.1092499999999994, 0.0990000000000002, 0.0779999999999994, -0.012999999999998124, 0.07200000000000095, 0.009000000000000341, -0.03375000000000128], zp_timestamp='2025-11-25T19:41:00')
2025-11-25T21:48:06.911 [DEBUG] [Thread-6310] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:48:06.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:48:06.997 [DEBUG] [Thread-6313] [transport.py] [_log()] starting thread (client mode): 0x70d3b970
2025-11-25T21:48:06.998 [DEBUG] [Thread-6313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:48:07.012 [DEBUG] [Thread-6313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:48:07.012 [INFO] [Thread-6313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:48:07.019 [DEBUG] [Thread-6313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:48:07.019 [DEBUG] [Thread-6313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:48:07.019 [DEBUG] [Thread-6313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:48:07.019 [DEBUG] [Thread-6313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:48:07.019 [DEBUG] [Thread-6313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:48:07.019 [DEBUG] [Thread-6313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:48:07.019 [DEBUG] [Thread-6313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] client lang: <none>
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] server lang: <none>
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] kex follows: False
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] Compression: none
2025-11-25T21:48:07.020 [DEBUG] [Thread-6313] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:48:07.077 [DEBUG] [Thread-6313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:48:07.078 [DEBUG] [Thread-6313] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:48:07.078 [DEBUG] [Thread-6313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:48:07.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:48:07.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:48:07.134 [DEBUG] [Thread-6313] [transport.py] [_log()] userauth is OK
2025-11-25T21:48:07.134 [DEBUG] [Thread-6313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:48:07.135 [DEBUG] [Thread-6313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:48:07.135 [DEBUG] [Thread-6313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:48:07.135 [DEBUG] [Thread-6313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:48:07.150 [INFO] [Thread-6313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:48:07.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:48:07.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:48:08.045 [DEBUG] [Thread-6313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:48:08.045 [DEBUG] [Thread-6313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:48:08.094 [DEBUG] [Thread-6313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:48:08.094 [DEBUG] [Thread-6313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:48:08.102 [DEBUG] [Thread-6313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:48:08.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:48:08.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:48:08.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:48:08.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:48:08.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:48:08.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:48:08.136 [DEBUG] [Thread-6313] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:48:12.133 [DEBUG] [Thread-6315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:48:27.186 [DEBUG] [Thread-6316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:48:38.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:48:38.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:48:38.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:48:38.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 48, 18), 27.21, 15.38, 0.0, 13.46, 20.96, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:48:38.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:48:18
2025-11-25T21:48:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:48:39.073 [DEBUG] [Thread-6317] [transport.py] [_log()] starting thread (client mode): 0x70d1efe0
2025-11-25T21:48:39.073 [DEBUG] [Thread-6317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:48:39.090 [DEBUG] [Thread-6317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:48:39.090 [INFO] [Thread-6317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:48:39.091 [DEBUG] [Thread-6317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] client lang: <none>
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] server lang: <none>
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] kex follows: False
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:48:39.092 [DEBUG] [Thread-6317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:48:39.093 [DEBUG] [Thread-6317] [transport.py] [_log()] Compression: none
2025-11-25T21:48:39.093 [DEBUG] [Thread-6317] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:48:39.111 [DEBUG] [Thread-6317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:48:39.112 [DEBUG] [Thread-6317] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:48:39.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:48:39.113 [DEBUG] [Thread-6317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:48:39.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:48:39.115 [DEBUG] [Thread-6317] [transport.py] [_log()] userauth is OK
2025-11-25T21:48:39.115 [DEBUG] [Thread-6317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:48:39.115 [DEBUG] [Thread-6317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:48:39.115 [DEBUG] [Thread-6317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:48:39.115 [DEBUG] [Thread-6317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:48:39.140 [INFO] [Thread-6317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:48:39.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:48:39.743 [DEBUG] [Thread-6317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:48:39.743 [DEBUG] [Thread-6317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:48:39.744 [DEBUG] [Thread-6317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:48:39.784 [DEBUG] [Thread-6317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:48:39.784 [DEBUG] [Thread-6317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:48:39.788 [DEBUG] [Thread-6317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:48:39.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:48:39.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:48:39.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:48:39.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:48:39.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:48:39.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:48:39.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:48:39.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:48:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:48:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.825099 -999.00  +21.00  10.05     20   -2.20 1 1 1 1 1     0    0 23.46 2.27 ZNESW 7.6 10.1 188.7 12.4 21.0 -25.7 21.0 -25.2 20.6 -24.0 20.9 -24.9
2025-11-25T21:48:39.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:48:39.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:48:39.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.825099
2025-11-25T21:48:39.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:48:39.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:48:39.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:48:39.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:48:39.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:48:39.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:48:18', tmtdew=27.21, humidity=15.38, cloud=0.0, wind=13.46, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:48:19', seeing=1.36, atlas_timestamp='2025-11-25T19:48:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.034250000000000114, 0.02674999999999983, 0.036749999999999616, 0.02949999999999875, 0.010999999999999233, 0.06925000000000026, 0.051000000000000156, 0.048250000000001236, 0.0625, 0.04400000000000048, 0.07525000000000048, 0.0039999999999995595, 0.10299999999999976, 0.08924999999999983, 0.05599999999999916, 0.0519999999999996, 0.07724999999999937, 0.09249999999999936, 0.09699999999999953, 0.03474999999999895, 0.09949999999999903, 0.09424999999999883, 0.035250000000001336, 0.056750000000000966, 0.0259999999999998, 0.08450000000000024, 0.11374999999999957, 0.11750000000000149, 0.11299999999999955, 0.0730000000000004, 0.08900000000000041, 0.025000000000000355, 0.04174999999999862], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:48:39.815 [DEBUG] [Thread-6317] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:48:39.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:48:39.913 [DEBUG] [Thread-6320] [transport.py] [_log()] starting thread (client mode): 0x70d38040
2025-11-25T21:48:39.913 [DEBUG] [Thread-6320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:48:39.929 [DEBUG] [Thread-6320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:48:39.929 [INFO] [Thread-6320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] client lang: <none>
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] server lang: <none>
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] kex follows: False
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] Compression: none
2025-11-25T21:48:39.937 [DEBUG] [Thread-6320] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:48:39.994 [DEBUG] [Thread-6320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:48:39.994 [DEBUG] [Thread-6320] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:48:39.994 [DEBUG] [Thread-6320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:48:39.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:48:39.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:48:40.051 [DEBUG] [Thread-6320] [transport.py] [_log()] userauth is OK
2025-11-25T21:48:40.051 [DEBUG] [Thread-6320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:48:40.051 [DEBUG] [Thread-6320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:48:40.051 [DEBUG] [Thread-6320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:48:40.051 [DEBUG] [Thread-6320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:48:40.068 [INFO] [Thread-6320] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:48:40.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:48:40.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:48:40.898 [DEBUG] [Thread-6320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:48:40.898 [DEBUG] [Thread-6320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:48:40.948 [DEBUG] [Thread-6320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:48:40.948 [DEBUG] [Thread-6320] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:48:40.956 [DEBUG] [Thread-6320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:48:40.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:48:40.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:48:40.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:48:40.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:48:40.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:48:40.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:48:40.987 [DEBUG] [Thread-6320] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:48:42.220 [DEBUG] [Thread-6322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:48:46.248 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:48:46.249 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:48:57.263 [DEBUG] [Thread-6323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:48:59.899 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:01.438 [DEBUG] [Thread-6324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:05.126 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:08.162 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:11.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:49:11.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:49:11.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:49:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 48, 50), 27.4, 15.35, 0.0, 15.44, 21.13, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:49:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:48:50
2025-11-25T21:49:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:49:11.941 [DEBUG] [Thread-6325] [transport.py] [_log()] starting thread (client mode): 0x70d395a0
2025-11-25T21:49:11.941 [DEBUG] [Thread-6325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:49:11.960 [DEBUG] [Thread-6325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:49:11.960 [INFO] [Thread-6325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] client lang: <none>
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] server lang: <none>
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] kex follows: False
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] Compression: none
2025-11-25T21:49:11.964 [DEBUG] [Thread-6325] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:49:11.981 [DEBUG] [Thread-6325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:49:11.982 [DEBUG] [Thread-6325] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:49:11.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:49:11.983 [DEBUG] [Thread-6325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:49:11.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:49:11.985 [DEBUG] [Thread-6325] [transport.py] [_log()] userauth is OK
2025-11-25T21:49:11.985 [DEBUG] [Thread-6325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:49:11.985 [DEBUG] [Thread-6325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:49:11.985 [DEBUG] [Thread-6325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:49:11.985 [DEBUG] [Thread-6325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:49:12.006 [INFO] [Thread-6325] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:49:12.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:49:12.298 [DEBUG] [Thread-6327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:12.658 [DEBUG] [Thread-6325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:49:12.658 [DEBUG] [Thread-6325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:49:12.659 [DEBUG] [Thread-6325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:49:12.698 [DEBUG] [Thread-6325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:49:12.699 [DEBUG] [Thread-6325] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:49:12.701 [DEBUG] [Thread-6325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:49:12.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:49:12.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:49:12.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:49:12.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:49:12.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:49:12.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:49:12.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:49:12.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:49:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:49:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.825446 -999.00  +21.10  11.99     20   -2.30 1 1 1 1 1     0    0 23.55 2.53 ZNESW 9.0 12.0 197.0 16.4 21.0 -25.6 20.9 -25.1 20.7 -23.8 20.9 -24.7
2025-11-25T21:49:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:49:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:49:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.825446
2025-11-25T21:49:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:49:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:49:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:49:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:49:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:49:12.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:48:50', tmtdew=27.4, humidity=15.35, cloud=0.0, wind=15.44, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:48:51', seeing=1.36, atlas_timestamp='2025-11-25T19:48:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.034250000000000114, 0.02674999999999983, 0.036749999999999616, 0.02949999999999875, 0.010999999999999233, 0.06925000000000026, 0.051000000000000156, 0.048250000000001236, 0.0625, 0.04400000000000048, 0.07525000000000048, 0.0039999999999995595, 0.10299999999999976, 0.08924999999999983, 0.05599999999999916, 0.0519999999999996, 0.07724999999999937, 0.09249999999999936, 0.09699999999999953, 0.03474999999999895, 0.09949999999999903, 0.09424999999999883, 0.035250000000001336, 0.056750000000000966, 0.0259999999999998, 0.08450000000000024, 0.11374999999999957, 0.11750000000000149, 0.11299999999999955, 0.0730000000000004, 0.08900000000000041, 0.025000000000000355, 0.04174999999999862], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:49:12.726 [DEBUG] [Thread-6325] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:49:12.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:49:12.822 [DEBUG] [Thread-6329] [transport.py] [_log()] starting thread (client mode): 0x70d2ab90
2025-11-25T21:49:12.822 [DEBUG] [Thread-6329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:49:12.836 [DEBUG] [Thread-6329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:49:12.836 [INFO] [Thread-6329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:49:12.844 [DEBUG] [Thread-6329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:49:12.844 [DEBUG] [Thread-6329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:49:12.844 [DEBUG] [Thread-6329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:49:12.845 [DEBUG] [Thread-6329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:49:12.845 [DEBUG] [Thread-6329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:49:12.845 [DEBUG] [Thread-6329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:49:12.845 [DEBUG] [Thread-6329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:49:12.845 [DEBUG] [Thread-6329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:49:12.845 [DEBUG] [Thread-6329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:49:12.845 [DEBUG] [Thread-6329] [transport.py] [_log()] client lang: <none>
2025-11-25T21:49:12.845 [DEBUG] [Thread-6329] [transport.py] [_log()] server lang: <none>
2025-11-25T21:49:12.846 [DEBUG] [Thread-6329] [transport.py] [_log()] kex follows: False
2025-11-25T21:49:12.846 [DEBUG] [Thread-6329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:49:12.846 [DEBUG] [Thread-6329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:49:12.846 [DEBUG] [Thread-6329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:49:12.846 [DEBUG] [Thread-6329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:49:12.846 [DEBUG] [Thread-6329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:49:12.846 [DEBUG] [Thread-6329] [transport.py] [_log()] Compression: none
2025-11-25T21:49:12.846 [DEBUG] [Thread-6329] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:49:12.905 [DEBUG] [Thread-6329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:49:12.906 [DEBUG] [Thread-6329] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:49:12.906 [DEBUG] [Thread-6329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:49:12.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:49:12.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:49:12.963 [DEBUG] [Thread-6329] [transport.py] [_log()] userauth is OK
2025-11-25T21:49:12.963 [DEBUG] [Thread-6329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:49:12.964 [DEBUG] [Thread-6329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:49:12.964 [DEBUG] [Thread-6329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:49:12.964 [DEBUG] [Thread-6329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:49:12.982 [INFO] [Thread-6329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:49:12.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:49:12.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:49:13.527 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:13.837 [DEBUG] [Thread-6329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:49:13.837 [DEBUG] [Thread-6329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:49:13.888 [DEBUG] [Thread-6329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:49:13.888 [DEBUG] [Thread-6329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:49:13.901 [DEBUG] [Thread-6329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:49:13.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:49:13.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:49:13.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:49:13.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:49:13.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:49:13.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:49:13.945 [DEBUG] [Thread-6329] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:49:27.329 [DEBUG] [Thread-6331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:42.390 [DEBUG] [Thread-6332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:49:43.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:49:43.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:49:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 49, 22), 27.45, 15.28, 0.0, 15.21, 21.09, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:49:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:49:22
2025-11-25T21:49:44.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:49:44.911 [DEBUG] [Thread-6333] [transport.py] [_log()] starting thread (client mode): 0x70d3a980
2025-11-25T21:49:44.911 [DEBUG] [Thread-6333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:49:44.932 [DEBUG] [Thread-6333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:49:44.932 [INFO] [Thread-6333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:49:44.935 [DEBUG] [Thread-6333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] client lang: <none>
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] server lang: <none>
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] kex follows: False
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] Compression: none
2025-11-25T21:49:44.936 [DEBUG] [Thread-6333] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:49:44.954 [DEBUG] [Thread-6333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:49:44.955 [DEBUG] [Thread-6333] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:49:44.955 [DEBUG] [Thread-6333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:49:44.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:49:44.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:49:44.957 [DEBUG] [Thread-6333] [transport.py] [_log()] userauth is OK
2025-11-25T21:49:44.957 [DEBUG] [Thread-6333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:49:44.957 [DEBUG] [Thread-6333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:49:44.957 [DEBUG] [Thread-6333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:49:44.957 [DEBUG] [Thread-6333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:49:44.980 [INFO] [Thread-6333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:49:44.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:49:45.653 [DEBUG] [Thread-6333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:49:45.653 [DEBUG] [Thread-6333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:49:45.654 [DEBUG] [Thread-6333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:49:45.694 [DEBUG] [Thread-6333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:49:45.695 [DEBUG] [Thread-6333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:49:45.697 [DEBUG] [Thread-6333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:49:45.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:49:45.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:49:45.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:49:45.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:49:45.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:49:45.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:49:45.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:49:45.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:49:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:49:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.825793 -999.00  +21.20  11.95     20   -2.20 1 1 1 1 1     0    0 23.19 3.29 ZNESW 11.9 11.9 180.8 14.0 21.0 -25.6 21.0 -25.2 20.7 -23.8 20.9 -24.8
2025-11-25T21:49:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:49:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:49:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.825793
2025-11-25T21:49:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:49:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:49:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:49:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:49:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:49:45.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:49:22', tmtdew=27.45, humidity=15.28, cloud=0.0, wind=15.21, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:49:23', seeing=1.36, atlas_timestamp='2025-11-25T19:49:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.034250000000000114, 0.02674999999999983, 0.036749999999999616, 0.02949999999999875, 0.010999999999999233, 0.06925000000000026, 0.051000000000000156, 0.048250000000001236, 0.0625, 0.04400000000000048, 0.07525000000000048, 0.0039999999999995595, 0.10299999999999976, 0.08924999999999983, 0.05599999999999916, 0.0519999999999996, 0.07724999999999937, 0.09249999999999936, 0.09699999999999953, 0.03474999999999895, 0.09949999999999903, 0.09424999999999883, 0.035250000000001336, 0.056750000000000966, 0.0259999999999998, 0.08450000000000024, 0.11374999999999957, 0.11750000000000149, 0.11299999999999955, 0.0730000000000004, 0.08900000000000041, 0.025000000000000355, 0.04174999999999862], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:49:45.723 [DEBUG] [Thread-6333] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:49:45.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:49:45.816 [DEBUG] [Thread-6336] [transport.py] [_log()] starting thread (client mode): 0x70d3b190
2025-11-25T21:49:45.817 [DEBUG] [Thread-6336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:49:45.831 [DEBUG] [Thread-6336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:49:45.831 [INFO] [Thread-6336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] client lang: <none>
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] server lang: <none>
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] kex follows: False
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:49:45.839 [DEBUG] [Thread-6336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:49:45.840 [DEBUG] [Thread-6336] [transport.py] [_log()] Compression: none
2025-11-25T21:49:45.840 [DEBUG] [Thread-6336] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:49:45.895 [DEBUG] [Thread-6336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:49:45.896 [DEBUG] [Thread-6336] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:49:45.897 [DEBUG] [Thread-6336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:49:45.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:49:45.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:49:45.952 [DEBUG] [Thread-6336] [transport.py] [_log()] userauth is OK
2025-11-25T21:49:45.952 [DEBUG] [Thread-6336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:49:45.952 [DEBUG] [Thread-6336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:49:45.952 [DEBUG] [Thread-6336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:49:45.952 [DEBUG] [Thread-6336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:49:45.971 [INFO] [Thread-6336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:49:45.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:49:45.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:49:46.455 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:46.456 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:49:46.837 [DEBUG] [Thread-6336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:49:46.837 [DEBUG] [Thread-6336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:49:46.885 [DEBUG] [Thread-6336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:49:46.885 [DEBUG] [Thread-6336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:49:46.894 [DEBUG] [Thread-6336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:49:46.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:49:46.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:49:46.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:49:46.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:49:46.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:49:46.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:49:46.930 [DEBUG] [Thread-6336] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:49:57.424 [DEBUG] [Thread-6338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:01.501 [DEBUG] [Thread-6339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:12.463 [DEBUG] [Thread-6340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:16.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:50:16.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:50:16.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:50:17.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 49, 54), 27.45, 15.35, 0.0, 13.57, 21.13, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:50:17.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:49:54
2025-11-25T21:50:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:50:17.881 [DEBUG] [Thread-6341] [transport.py] [_log()] starting thread (client mode): 0x70d541f0
2025-11-25T21:50:17.881 [DEBUG] [Thread-6341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:50:17.901 [DEBUG] [Thread-6341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:50:17.901 [INFO] [Thread-6341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] client lang: <none>
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] server lang: <none>
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] kex follows: False
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:50:17.904 [DEBUG] [Thread-6341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:50:17.905 [DEBUG] [Thread-6341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:50:17.905 [DEBUG] [Thread-6341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:50:17.905 [DEBUG] [Thread-6341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:50:17.905 [DEBUG] [Thread-6341] [transport.py] [_log()] Compression: none
2025-11-25T21:50:17.905 [DEBUG] [Thread-6341] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:50:17.923 [DEBUG] [Thread-6341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:50:17.924 [DEBUG] [Thread-6341] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:50:17.924 [DEBUG] [Thread-6341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:50:17.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:50:17.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:50:17.926 [DEBUG] [Thread-6341] [transport.py] [_log()] userauth is OK
2025-11-25T21:50:17.927 [DEBUG] [Thread-6341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:50:17.927 [DEBUG] [Thread-6341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:50:17.927 [DEBUG] [Thread-6341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:50:17.927 [DEBUG] [Thread-6341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:50:17.963 [INFO] [Thread-6341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:50:17.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:50:18.566 [DEBUG] [Thread-6341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:50:18.566 [DEBUG] [Thread-6341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:50:18.567 [DEBUG] [Thread-6341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:50:18.607 [DEBUG] [Thread-6341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:50:18.607 [DEBUG] [Thread-6341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:50:18.610 [DEBUG] [Thread-6341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:50:18.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:50:18.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:50:18.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:50:18.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:50:18.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:50:18.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:50:18.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:50:18.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:50:18.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:50:18.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.826487 -999.00  +21.30  12.72     20   -2.20 1 1 1 1 1     0    0 23.64 6.00 ZNESW 11.4 12.7 178.6 15.2 21.0 -25.7 21.0 -25.1 20.7 -23.9 20.9 -24.9
2025-11-25T21:50:18.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:50:18.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:50:18.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.826487
2025-11-25T21:50:18.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:50:18.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:50:18.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:50:18.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:50:18.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:50:18.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:49:54', tmtdew=27.45, humidity=15.35, cloud=0.0, wind=13.57, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:49:55', seeing=1.02, atlas_timestamp='2025-11-25T19:50:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.034250000000000114, 0.02674999999999983, 0.036749999999999616, 0.02949999999999875, 0.010999999999999233, 0.06925000000000026, 0.051000000000000156, 0.048250000000001236, 0.0625, 0.04400000000000048, 0.07525000000000048, 0.0039999999999995595, 0.10299999999999976, 0.08924999999999983, 0.05599999999999916, 0.0519999999999996, 0.07724999999999937, 0.09249999999999936, 0.09699999999999953, 0.03474999999999895, 0.09949999999999903, 0.09424999999999883, 0.035250000000001336, 0.056750000000000966, 0.0259999999999998, 0.08450000000000024, 0.11374999999999957, 0.11750000000000149, 0.11299999999999955, 0.0730000000000004, 0.08900000000000041, 0.025000000000000355, 0.04174999999999862], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:50:18.639 [DEBUG] [Thread-6341] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:50:18.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:50:18.736 [DEBUG] [Thread-6344] [transport.py] [_log()] starting thread (client mode): 0x70d01b10
2025-11-25T21:50:18.736 [DEBUG] [Thread-6344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:50:18.754 [DEBUG] [Thread-6344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:50:18.754 [INFO] [Thread-6344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:50:18.761 [DEBUG] [Thread-6344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] client lang: <none>
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] server lang: <none>
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] kex follows: False
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:50:18.762 [DEBUG] [Thread-6344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:50:18.763 [DEBUG] [Thread-6344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:50:18.763 [DEBUG] [Thread-6344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:50:18.763 [DEBUG] [Thread-6344] [transport.py] [_log()] Compression: none
2025-11-25T21:50:18.763 [DEBUG] [Thread-6344] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:50:18.818 [DEBUG] [Thread-6344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:50:18.818 [DEBUG] [Thread-6344] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:50:18.819 [DEBUG] [Thread-6344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:50:18.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:50:18.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:50:18.875 [DEBUG] [Thread-6344] [transport.py] [_log()] userauth is OK
2025-11-25T21:50:18.876 [DEBUG] [Thread-6344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:50:18.876 [DEBUG] [Thread-6344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:50:18.876 [DEBUG] [Thread-6344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:50:18.876 [DEBUG] [Thread-6344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:50:18.894 [INFO] [Thread-6344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21: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
2025-11-25T21:50:18.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:50:19.732 [DEBUG] [Thread-6344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:50:19.733 [DEBUG] [Thread-6344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:50:19.781 [DEBUG] [Thread-6344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:50:19.781 [DEBUG] [Thread-6344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:50:19.790 [DEBUG] [Thread-6344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:50:19.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:50:19.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:50:19.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:50:19.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:50:19.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:50:19.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:50:19.827 [DEBUG] [Thread-6344] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:50:27.500 [DEBUG] [Thread-6346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:37.736 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:40.895 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:42.546 [DEBUG] [Thread-6347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:45.989 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:46.657 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:46.658 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:49.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:50:49.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:50:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:50:50.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 50, 26), 27.46, 15.35, 0.0, 13.76, 21.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:50:50.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:50:26
2025-11-25T21:50:50.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:50:50.754 [DEBUG] [Thread-6348] [transport.py] [_log()] starting thread (client mode): 0x70d57790
2025-11-25T21:50:50.754 [DEBUG] [Thread-6348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:50:50.773 [DEBUG] [Thread-6348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:50:50.773 [INFO] [Thread-6348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:50:50.774 [DEBUG] [Thread-6348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] client lang: <none>
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] server lang: <none>
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] kex follows: False
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:50:50.775 [DEBUG] [Thread-6348] [transport.py] [_log()] Compression: none
2025-11-25T21:50:50.776 [DEBUG] [Thread-6348] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:50:50.785 [DEBUG] [Thread-6348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:50:50.785 [DEBUG] [Thread-6348] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:50:50.785 [DEBUG] [Thread-6348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:50:50.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:50:50.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:50:50.787 [DEBUG] [Thread-6348] [transport.py] [_log()] userauth is OK
2025-11-25T21:50:50.787 [DEBUG] [Thread-6348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:50:50.787 [DEBUG] [Thread-6348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:50:50.787 [DEBUG] [Thread-6348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:50:50.787 [DEBUG] [Thread-6348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:50:50.808 [INFO] [Thread-6348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:50:50.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:50:51.446 [DEBUG] [Thread-6348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:50:51.446 [DEBUG] [Thread-6348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:50:51.447 [DEBUG] [Thread-6348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:50:51.479 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:50:51.487 [DEBUG] [Thread-6348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:50:51.487 [DEBUG] [Thread-6348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:50:51.490 [DEBUG] [Thread-6348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:50:51.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:50:51.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:50:51.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:50:51.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:50:51.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:50:51.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:50:51.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:50:51.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:50:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:50:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.826835 -999.00  +21.30  11.89     20   -2.20 1 1 1 1 1     0    0 23.49 6.85 ZNESW 11.5 11.9 183.4 14.2 21.0 -25.5 21.1 -25.0 20.7 -24.1 20.9 -24.9
2025-11-25T21:50:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:50:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:50:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.826835
2025-11-25T21:50:51.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:50:51.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:50:51.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:50:51.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:50:51.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:50:51.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:50:26', tmtdew=27.46, humidity=15.35, cloud=0.0, wind=13.76, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:50:27', seeing=1.11, atlas_timestamp='2025-11-25T19:50:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.034250000000000114, 0.02674999999999983, 0.036749999999999616, 0.02949999999999875, 0.010999999999999233, 0.06925000000000026, 0.051000000000000156, 0.048250000000001236, 0.0625, 0.04400000000000048, 0.07525000000000048, 0.0039999999999995595, 0.10299999999999976, 0.08924999999999983, 0.05599999999999916, 0.0519999999999996, 0.07724999999999937, 0.09249999999999936, 0.09699999999999953, 0.03474999999999895, 0.09949999999999903, 0.09424999999999883, 0.035250000000001336, 0.056750000000000966, 0.0259999999999998, 0.08450000000000024, 0.11374999999999957, 0.11750000000000149, 0.11299999999999955, 0.0730000000000004, 0.08900000000000041, 0.025000000000000355, 0.04174999999999862], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:50:51.519 [DEBUG] [Thread-6348] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:50:51.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:50:51.613 [DEBUG] [Thread-6351] [transport.py] [_log()] starting thread (client mode): 0x70d56d10
2025-11-25T21:50:51.613 [DEBUG] [Thread-6351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:50:51.628 [DEBUG] [Thread-6351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:50:51.629 [INFO] [Thread-6351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:50:51.636 [DEBUG] [Thread-6351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:50:51.636 [DEBUG] [Thread-6351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:50:51.636 [DEBUG] [Thread-6351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:50:51.636 [DEBUG] [Thread-6351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:50:51.636 [DEBUG] [Thread-6351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] client lang: <none>
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] server lang: <none>
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] kex follows: False
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] Compression: none
2025-11-25T21:50:51.637 [DEBUG] [Thread-6351] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:50:51.696 [DEBUG] [Thread-6351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:50:51.696 [DEBUG] [Thread-6351] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:50:51.697 [DEBUG] [Thread-6351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:50:51.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:50:51.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:50:51.751 [DEBUG] [Thread-6351] [transport.py] [_log()] userauth is OK
2025-11-25T21:50:51.752 [DEBUG] [Thread-6351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:50:51.752 [DEBUG] [Thread-6351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:50:51.752 [DEBUG] [Thread-6351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:50:51.752 [DEBUG] [Thread-6351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:50:51.773 [INFO] [Thread-6351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:50:51.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:50:51.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:50:52.632 [DEBUG] [Thread-6351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:50:52.632 [DEBUG] [Thread-6351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:50:52.680 [DEBUG] [Thread-6351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:50:52.680 [DEBUG] [Thread-6351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:50:52.693 [DEBUG] [Thread-6351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:50:52.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:50:52.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:50: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') -> 00000000
2025-11-25T21:50:52.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:50:52.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:50:52.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:50:52.734 [DEBUG] [Thread-6351] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:50:57.584 [DEBUG] [Thread-6353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:01.570 [DEBUG] [Thread-6354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:10.758 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:12.640 [DEBUG] [Thread-6355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:15.256 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:22.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:51:22.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:51:22.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:51:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 50, 58), 27.46, 15.33, 0.0, 15.02, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:51:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:50:58
2025-11-25T21:51:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:51:23.703 [DEBUG] [Thread-6356] [transport.py] [_log()] starting thread (client mode): 0x70d2bd90
2025-11-25T21:51:23.704 [DEBUG] [Thread-6356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:51:23.720 [DEBUG] [Thread-6356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:51:23.720 [INFO] [Thread-6356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] client lang: <none>
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] server lang: <none>
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] kex follows: False
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] Compression: none
2025-11-25T21:51:23.721 [DEBUG] [Thread-6356] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:51:23.730 [DEBUG] [Thread-6356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:51:23.730 [DEBUG] [Thread-6356] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:51:23.730 [DEBUG] [Thread-6356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:51:23.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:51:23.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:51:23.732 [DEBUG] [Thread-6356] [transport.py] [_log()] userauth is OK
2025-11-25T21:51:23.732 [DEBUG] [Thread-6356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:51:23.732 [DEBUG] [Thread-6356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:51:23.732 [DEBUG] [Thread-6356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:51:23.732 [DEBUG] [Thread-6356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:51:23.749 [INFO] [Thread-6356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:51:23.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:51:24.316 [DEBUG] [Thread-6356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:51:24.317 [DEBUG] [Thread-6356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:51:24.317 [DEBUG] [Thread-6356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:51:24.358 [DEBUG] [Thread-6356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:51:24.358 [DEBUG] [Thread-6356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:51:24.360 [DEBUG] [Thread-6356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:51:24.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:51:24.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:51:24.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:51:24.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:51:24.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:51:24.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:51:24.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:51:24.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:51:24.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:51:24.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.827182 -999.00  +21.30   9.94     20   -2.20 1 1 1 1 1     0    0 23.79 8.00 ZNESW 13.9 9.9 181.0 13.0 21.1 -25.8 21.1 -25.0 20.8 -24.0 20.9 -25.0
2025-11-25T21:51:24.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:51:24.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:51:24.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.827182
2025-11-25T21:51:24.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:51:24.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:51:24.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:51:24.385 [DEBUG] [Thread-6356] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:51:24.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:51:24.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:51:24.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:50:58', tmtdew=27.46, humidity=15.33, cloud=0.0, wind=15.02, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:50:59', seeing=1.23, atlas_timestamp='2025-11-25T19:51:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.034250000000000114, 0.02674999999999983, 0.036749999999999616, 0.02949999999999875, 0.010999999999999233, 0.06925000000000026, 0.051000000000000156, 0.048250000000001236, 0.0625, 0.04400000000000048, 0.07525000000000048, 0.0039999999999995595, 0.10299999999999976, 0.08924999999999983, 0.05599999999999916, 0.0519999999999996, 0.07724999999999937, 0.09249999999999936, 0.09699999999999953, 0.03474999999999895, 0.09949999999999903, 0.09424999999999883, 0.035250000000001336, 0.056750000000000966, 0.0259999999999998, 0.08450000000000024, 0.11374999999999957, 0.11750000000000149, 0.11299999999999955, 0.0730000000000004, 0.08900000000000041, 0.025000000000000355, 0.04174999999999862], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:51:24.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:51:24.491 [DEBUG] [Thread-6359] [transport.py] [_log()] starting thread (client mode): 0x70d38040
2025-11-25T21:51:24.491 [DEBUG] [Thread-6359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:51:24.506 [DEBUG] [Thread-6359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:51:24.506 [INFO] [Thread-6359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:51:24.514 [DEBUG] [Thread-6359] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:51:24.514 [DEBUG] [Thread-6359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:51:24.514 [DEBUG] [Thread-6359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:51:24.514 [DEBUG] [Thread-6359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:51:24.514 [DEBUG] [Thread-6359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:51:24.514 [DEBUG] [Thread-6359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:51:24.514 [DEBUG] [Thread-6359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] client lang: <none>
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] server lang: <none>
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] kex follows: False
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] Compression: none
2025-11-25T21:51:24.515 [DEBUG] [Thread-6359] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:51:24.575 [DEBUG] [Thread-6359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:51:24.576 [DEBUG] [Thread-6359] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:51:24.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:51:24.577 [DEBUG] [Thread-6359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:51:24.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:51:24.631 [DEBUG] [Thread-6359] [transport.py] [_log()] userauth is OK
2025-11-25T21:51:24.632 [DEBUG] [Thread-6359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:51:24.632 [DEBUG] [Thread-6359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:51:24.632 [DEBUG] [Thread-6359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:51:24.632 [DEBUG] [Thread-6359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:51:24.651 [INFO] [Thread-6359] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:51:24.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:51:24.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:51:25.492 [DEBUG] [Thread-6359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:51:25.492 [DEBUG] [Thread-6359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:51:25.541 [DEBUG] [Thread-6359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:51:25.541 [DEBUG] [Thread-6359] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:51:25.550 [DEBUG] [Thread-6359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:51:25.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:51:25.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:51:25.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:51:25.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:51:25.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:51:25.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:51:25.587 [DEBUG] [Thread-6359] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:51:27.673 [DEBUG] [Thread-6361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:34.619 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:39.097 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:42.730 [DEBUG] [Thread-6362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:45.133 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:46.861 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:46.862 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:49.625 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:55.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:51:55.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:51:55.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:51:56.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 51, 30), 27.54, 15.25, 0.0, 14.75, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:51:56.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:51:30
2025-11-25T21:51:56.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:51:56.526 [DEBUG] [Thread-6363] [transport.py] [_log()] starting thread (client mode): 0x70d026b0
2025-11-25T21:51:56.526 [DEBUG] [Thread-6363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:51:56.539 [DEBUG] [Thread-6363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:51:56.539 [INFO] [Thread-6363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] client lang: <none>
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] server lang: <none>
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] kex follows: False
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] Compression: none
2025-11-25T21:51:56.542 [DEBUG] [Thread-6363] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:51:56.556 [DEBUG] [Thread-6363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:51:56.556 [DEBUG] [Thread-6363] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:51:56.557 [DEBUG] [Thread-6363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:51:56.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:51:56.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:51:56.558 [DEBUG] [Thread-6363] [transport.py] [_log()] userauth is OK
2025-11-25T21:51:56.559 [DEBUG] [Thread-6363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:51:56.559 [DEBUG] [Thread-6363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:51:56.559 [DEBUG] [Thread-6363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:51:56.559 [DEBUG] [Thread-6363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:51:56.583 [INFO] [Thread-6363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:51:56.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:51:57.156 [DEBUG] [Thread-6363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:51:57.157 [DEBUG] [Thread-6363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:51:57.157 [DEBUG] [Thread-6363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:51:57.198 [DEBUG] [Thread-6363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:51:57.198 [DEBUG] [Thread-6363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:51:57.201 [DEBUG] [Thread-6363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:51:57.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:51:57.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:51:57.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:51:57.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:51:57.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:51:57.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:51:57.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:51:57.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:51:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:51:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.827529 -999.00  +21.30  12.89     20   -2.20 1 1 1 1 1     0    0 23.38 9.67 ZNESW 11.5 12.9 181.4 16.1 21.0 -25.9 21.1 -25.3 20.8 -24.0 20.9 -25.2
2025-11-25T21:51:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:51:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:51:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.827529
2025-11-25T21:51:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:51:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:51:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:51:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:51:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:51:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:51:30', tmtdew=27.54, humidity=15.25, cloud=0.0, wind=14.75, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:51:31', seeing=1.11, atlas_timestamp='2025-11-25T19:51:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:51:57.220 [DEBUG] [Thread-6363] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:51:57.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:51:57.314 [DEBUG] [Thread-6366] [transport.py] [_log()] starting thread (client mode): 0x7374f3a0
2025-11-25T21:51:57.314 [DEBUG] [Thread-6366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:51:57.329 [DEBUG] [Thread-6366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:51:57.329 [INFO] [Thread-6366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:51:57.337 [DEBUG] [Thread-6366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:51:57.337 [DEBUG] [Thread-6366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:51:57.337 [DEBUG] [Thread-6366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:51:57.337 [DEBUG] [Thread-6366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:51:57.338 [DEBUG] [Thread-6366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:51:57.338 [DEBUG] [Thread-6366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:51:57.338 [DEBUG] [Thread-6366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:51:57.338 [DEBUG] [Thread-6366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:51:57.338 [DEBUG] [Thread-6366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:51:57.338 [DEBUG] [Thread-6366] [transport.py] [_log()] client lang: <none>
2025-11-25T21:51:57.338 [DEBUG] [Thread-6366] [transport.py] [_log()] server lang: <none>
2025-11-25T21:51:57.338 [DEBUG] [Thread-6366] [transport.py] [_log()] kex follows: False
2025-11-25T21:51:57.338 [DEBUG] [Thread-6366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:51:57.339 [DEBUG] [Thread-6366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:51:57.339 [DEBUG] [Thread-6366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:51:57.339 [DEBUG] [Thread-6366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:51:57.339 [DEBUG] [Thread-6366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:51:57.339 [DEBUG] [Thread-6366] [transport.py] [_log()] Compression: none
2025-11-25T21:51:57.339 [DEBUG] [Thread-6366] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:51:57.395 [DEBUG] [Thread-6366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:51:57.396 [DEBUG] [Thread-6366] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:51:57.396 [DEBUG] [Thread-6366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:51:57.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:51:57.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:51:57.452 [DEBUG] [Thread-6366] [transport.py] [_log()] userauth is OK
2025-11-25T21:51:57.452 [DEBUG] [Thread-6366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:51:57.452 [DEBUG] [Thread-6366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:51:57.452 [DEBUG] [Thread-6366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:51:57.452 [DEBUG] [Thread-6366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:51:57.470 [INFO] [Thread-6366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:51:57.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:51:57.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:51:57.768 [DEBUG] [Thread-6368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:51:58.291 [DEBUG] [Thread-6366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:51:58.291 [DEBUG] [Thread-6366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:51:58.339 [DEBUG] [Thread-6366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:51:58.339 [DEBUG] [Thread-6366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:51:58.348 [DEBUG] [Thread-6366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:51:58.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:51:58.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:51:58.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:51:58.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:51:58.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:51:58.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:51:58.385 [DEBUG] [Thread-6366] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:52:01.638 [DEBUG] [Thread-6369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:52:12.822 [DEBUG] [Thread-6370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:52:27.857 [DEBUG] [Thread-6371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:52:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:52:28.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:52:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:52:29.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 52, 2), 27.52, 15.27, 0.0, 14.65, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:52:29.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:52:02
2025-11-25T21:52:29.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:52:29.347 [DEBUG] [Thread-6372] [transport.py] [_log()] starting thread (client mode): 0x70d29d80
2025-11-25T21:52:29.347 [DEBUG] [Thread-6372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:52:29.367 [DEBUG] [Thread-6372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:52:29.367 [INFO] [Thread-6372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] client lang: <none>
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] server lang: <none>
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] kex follows: False
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] Compression: none
2025-11-25T21:52:29.371 [DEBUG] [Thread-6372] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:52:29.386 [DEBUG] [Thread-6372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:52:29.386 [DEBUG] [Thread-6372] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:52:29.386 [DEBUG] [Thread-6372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:52:29.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:52:29.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:52:29.428 [DEBUG] [Thread-6372] [transport.py] [_log()] userauth is OK
2025-11-25T21:52:29.428 [DEBUG] [Thread-6372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:52:29.429 [DEBUG] [Thread-6372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:52:29.429 [DEBUG] [Thread-6372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:52:29.429 [DEBUG] [Thread-6372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:52:29.444 [INFO] [Thread-6372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:52:29.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:52:30.069 [DEBUG] [Thread-6372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:52:30.069 [DEBUG] [Thread-6372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:52:30.070 [DEBUG] [Thread-6372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:52:30.110 [DEBUG] [Thread-6372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:52:30.110 [DEBUG] [Thread-6372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:52:30.114 [DEBUG] [Thread-6372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:52:30.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:52:30.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:52:30.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:52:30.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:52:30.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:52:30.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:52:30.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:52:30.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:52:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:52:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.827529 -999.00  +21.30  12.89     20   -2.20 1 1 1 1 1     0    0 23.38 9.67 ZNESW 11.5 12.9 181.4 16.1 21.0 -25.9 21.1 -25.3 20.8 -24.0 20.9 -25.2
2025-11-25T21:52:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:52:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:52:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.827529
2025-11-25T21:52:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:52:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:52:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:52:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:52:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:52:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:52:02', tmtdew=27.52, humidity=15.27, cloud=0.0, wind=14.65, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:52:03', seeing=1.11, atlas_timestamp='2025-11-25T19:51:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:52:30.143 [DEBUG] [Thread-6372] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:52:30.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:52:30.230 [DEBUG] [Thread-6375] [transport.py] [_log()] starting thread (client mode): 0x70d56bc0
2025-11-25T21:52:30.230 [DEBUG] [Thread-6375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:52:30.245 [DEBUG] [Thread-6375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:52:30.245 [INFO] [Thread-6375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:52:30.252 [DEBUG] [Thread-6375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] client lang: <none>
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] server lang: <none>
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] kex follows: False
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:52:30.253 [DEBUG] [Thread-6375] [transport.py] [_log()] Compression: none
2025-11-25T21:52:30.254 [DEBUG] [Thread-6375] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:52:30.311 [DEBUG] [Thread-6375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:52:30.312 [DEBUG] [Thread-6375] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:52:30.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:52:30.313 [DEBUG] [Thread-6375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:52:30.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:52:30.367 [DEBUG] [Thread-6375] [transport.py] [_log()] userauth is OK
2025-11-25T21:52:30.367 [DEBUG] [Thread-6375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:52:30.368 [DEBUG] [Thread-6375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:52:30.368 [DEBUG] [Thread-6375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:52:30.368 [DEBUG] [Thread-6375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:52:30.386 [INFO] [Thread-6375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:52:30.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:52:30.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:52:31.244 [DEBUG] [Thread-6375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:52:31.244 [DEBUG] [Thread-6375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:52:31.293 [DEBUG] [Thread-6375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:52:31.293 [DEBUG] [Thread-6375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:52:31.306 [DEBUG] [Thread-6375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:52:31.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:52:31.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:52:31.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:52:31.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:52:31.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:52:31.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:52:31.343 [DEBUG] [Thread-6375] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:52:42.889 [DEBUG] [Thread-6377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:52:47.063 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:52:47.064 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:52:56.721 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:52:57.943 [DEBUG] [Thread-6378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:00.789 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:01.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:53:01.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:53:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:53:01.734 [DEBUG] [Thread-6379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:02.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 52, 34), 27.44, 15.3, 0.0, 13.52, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:53:02.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:52:34
2025-11-25T21:53:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:53:02.360 [DEBUG] [Thread-6380] [transport.py] [_log()] starting thread (client mode): 0x70d00e20
2025-11-25T21:53:02.360 [DEBUG] [Thread-6380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:53:02.381 [DEBUG] [Thread-6380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:53:02.381 [INFO] [Thread-6380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:53:02.382 [DEBUG] [Thread-6380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:53:02.382 [DEBUG] [Thread-6380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] client lang: <none>
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] server lang: <none>
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] kex follows: False
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] Compression: none
2025-11-25T21:53:02.383 [DEBUG] [Thread-6380] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:53:02.394 [DEBUG] [Thread-6380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:53:02.394 [DEBUG] [Thread-6380] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:53:02.394 [DEBUG] [Thread-6380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:53:02.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:53:02.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:53:02.395 [DEBUG] [Thread-6380] [transport.py] [_log()] userauth is OK
2025-11-25T21:53:02.395 [DEBUG] [Thread-6380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:53:02.395 [DEBUG] [Thread-6380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:53:02.395 [DEBUG] [Thread-6380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:53:02.395 [DEBUG] [Thread-6380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:53:02.408 [INFO] [Thread-6380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:53:02.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:53:03.070 [DEBUG] [Thread-6380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:53:03.070 [DEBUG] [Thread-6380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:53:03.070 [DEBUG] [Thread-6380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:53:03.110 [DEBUG] [Thread-6380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:53:03.110 [DEBUG] [Thread-6380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:53:03.112 [DEBUG] [Thread-6380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:53:03.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:53:03.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:53:03.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:53:03.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:53:03.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:53:03.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:53:03.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:53:03.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:53:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:53:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.827876 -999.00  +21.30   9.12     20   -2.20 1 1 1 1 1     0    0 23.74 11.10 ZNESW 10.0 9.1 182.8 14.0 21.0 -26.0 21.0 -25.3 20.7 -24.0 20.9 -24.9
2025-11-25T21:53:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:53:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:53:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.827876
2025-11-25T21:53:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:53:03.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:53:03.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:53:03.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:53:03.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:53:03.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:52:34', tmtdew=27.44, humidity=15.3, cloud=0.0, wind=13.52, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:52:35', seeing=1.11, atlas_timestamp='2025-11-25T19:52:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:53:03.131 [DEBUG] [Thread-6380] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:53:03.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:53:03.216 [DEBUG] [Thread-6383] [transport.py] [_log()] starting thread (client mode): 0x70d3a260
2025-11-25T21:53:03.216 [DEBUG] [Thread-6383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:53:03.231 [DEBUG] [Thread-6383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:53:03.231 [INFO] [Thread-6383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] client lang: <none>
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] server lang: <none>
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] kex follows: False
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] Compression: none
2025-11-25T21:53:03.239 [DEBUG] [Thread-6383] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:53:03.302 [DEBUG] [Thread-6383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:53:03.302 [DEBUG] [Thread-6383] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:53:03.302 [DEBUG] [Thread-6383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:53:03.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:53:03.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:53:03.359 [DEBUG] [Thread-6383] [transport.py] [_log()] userauth is OK
2025-11-25T21:53:03.359 [DEBUG] [Thread-6383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:53:03.359 [DEBUG] [Thread-6383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:53:03.359 [DEBUG] [Thread-6383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:53:03.359 [DEBUG] [Thread-6383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:53:03.377 [INFO] [Thread-6383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:53:03.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:53:03.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:53:04.203 [DEBUG] [Thread-6383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:53:04.203 [DEBUG] [Thread-6383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:53:04.251 [DEBUG] [Thread-6383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:53:04.251 [DEBUG] [Thread-6383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:53:04.260 [DEBUG] [Thread-6383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:53:04.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:53:04.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:53:04.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:53:04.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:53:04.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:53:04.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:53:04.292 [DEBUG] [Thread-6383] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:53:12.161 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:12.973 [DEBUG] [Thread-6385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:22.553 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:28.027 [DEBUG] [Thread-6386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:32.931 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:53:34.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:53:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:53:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 53, 6), 27.45, 15.3, 0.0, 13.43, 21.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:53:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:53:06
2025-11-25T21:53:35.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:53:35.249 [DEBUG] [Thread-6387] [transport.py] [_log()] starting thread (client mode): 0x70d68340
2025-11-25T21:53:35.249 [DEBUG] [Thread-6387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:53:35.272 [DEBUG] [Thread-6387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:53:35.272 [INFO] [Thread-6387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:53:35.276 [DEBUG] [Thread-6387] [transport.py] [_log()] client lang: <none>
2025-11-25T21:53:35.277 [DEBUG] [Thread-6387] [transport.py] [_log()] server lang: <none>
2025-11-25T21:53:35.277 [DEBUG] [Thread-6387] [transport.py] [_log()] kex follows: False
2025-11-25T21:53:35.277 [DEBUG] [Thread-6387] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:53:35.277 [DEBUG] [Thread-6387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:53:35.277 [DEBUG] [Thread-6387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:53:35.277 [DEBUG] [Thread-6387] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:53:35.277 [DEBUG] [Thread-6387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:53:35.277 [DEBUG] [Thread-6387] [transport.py] [_log()] Compression: none
2025-11-25T21:53:35.277 [DEBUG] [Thread-6387] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:53:35.297 [DEBUG] [Thread-6387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:53:35.297 [DEBUG] [Thread-6387] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:53:35.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:53:35.299 [DEBUG] [Thread-6387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:53:35.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:53:35.301 [DEBUG] [Thread-6387] [transport.py] [_log()] userauth is OK
2025-11-25T21:53:35.301 [DEBUG] [Thread-6387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:53:35.301 [DEBUG] [Thread-6387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:53:35.301 [DEBUG] [Thread-6387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:53:35.301 [DEBUG] [Thread-6387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:53:35.323 [INFO] [Thread-6387] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:53:35.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:53:35.960 [DEBUG] [Thread-6387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:53:35.960 [DEBUG] [Thread-6387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:53:35.961 [DEBUG] [Thread-6387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:53:36.002 [DEBUG] [Thread-6387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:53:36.002 [DEBUG] [Thread-6387] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:53:36.006 [DEBUG] [Thread-6387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:53:36.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:53:36.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:53:36.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:53:36.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:53:36.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:53:36.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:53:36.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:53:36.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:53:36.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:53:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.828224 -999.00  +21.30  10.50     20   -2.20 1 1 1 1 1     0    0 23.64 12.52 ZNESW 11.6 10.5 179.2 12.9 21.0 -25.8 21.0 -25.0 20.7 -24.0 21.0 -25.1
2025-11-25T21:53:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:53:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:53:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.828224
2025-11-25T21:53:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:53:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:53:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:53:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:53:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:53:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:53:06', tmtdew=27.45, humidity=15.3, cloud=0.0, wind=13.43, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:53:07', seeing=1.27, atlas_timestamp='2025-11-25T19:52:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:53:36.032 [DEBUG] [Thread-6387] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:53:36.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:53:36.127 [DEBUG] [Thread-6390] [transport.py] [_log()] starting thread (client mode): 0x70d00670
2025-11-25T21:53:36.127 [DEBUG] [Thread-6390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:53:36.142 [DEBUG] [Thread-6390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:53:36.142 [INFO] [Thread-6390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:53:36.151 [DEBUG] [Thread-6390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:53:36.151 [DEBUG] [Thread-6390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:53:36.151 [DEBUG] [Thread-6390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:53:36.151 [DEBUG] [Thread-6390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:53:36.151 [DEBUG] [Thread-6390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] client lang: <none>
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] server lang: <none>
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] kex follows: False
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] Compression: none
2025-11-25T21:53:36.152 [DEBUG] [Thread-6390] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:53:36.209 [DEBUG] [Thread-6390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:53:36.210 [DEBUG] [Thread-6390] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:53:36.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:53:36.211 [DEBUG] [Thread-6390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:53:36.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:53:36.274 [DEBUG] [Thread-6390] [transport.py] [_log()] userauth is OK
2025-11-25T21:53:36.274 [DEBUG] [Thread-6390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:53:36.274 [DEBUG] [Thread-6390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:53:36.274 [DEBUG] [Thread-6390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:53:36.274 [DEBUG] [Thread-6390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:53:36.292 [INFO] [Thread-6390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:53:36.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:53:36.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:53:37.113 [DEBUG] [Thread-6390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:53:37.113 [DEBUG] [Thread-6390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:53:37.161 [DEBUG] [Thread-6390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:53:37.161 [DEBUG] [Thread-6390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:53:37.170 [DEBUG] [Thread-6390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:53:37.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:53:37.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:53:37.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:53:37.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:53:37.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:53:37.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:53:37.205 [DEBUG] [Thread-6390] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:53:43.061 [DEBUG] [Thread-6392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:43.357 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:47.264 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:47.265 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:53.790 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:53:58.105 [DEBUG] [Thread-6393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:01.795 [DEBUG] [Thread-6394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:04.211 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:07.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:54:07.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:54:07.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:54:07.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 53, 38), 27.52, 15.27, 0.0, 10.96, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:54:07.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:53:38
2025-11-25T21:54:07.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:54:08.139 [DEBUG] [Thread-6395] [transport.py] [_log()] starting thread (client mode): 0x70d754b0
2025-11-25T21:54:08.139 [DEBUG] [Thread-6395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:54:08.157 [DEBUG] [Thread-6395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:54:08.158 [INFO] [Thread-6395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:54:08.159 [DEBUG] [Thread-6395] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] client lang: <none>
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] server lang: <none>
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] kex follows: False
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] Compression: none
2025-11-25T21:54:08.160 [DEBUG] [Thread-6395] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:54:08.178 [DEBUG] [Thread-6395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:54:08.179 [DEBUG] [Thread-6395] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:54:08.179 [DEBUG] [Thread-6395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:54:08.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:54:08.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:54:08.181 [DEBUG] [Thread-6395] [transport.py] [_log()] userauth is OK
2025-11-25T21:54:08.181 [DEBUG] [Thread-6395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:54:08.182 [DEBUG] [Thread-6395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:54:08.182 [DEBUG] [Thread-6395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:54:08.182 [DEBUG] [Thread-6395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:54:08.206 [INFO] [Thread-6395] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:54:08.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:54:09.018 [DEBUG] [Thread-6395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:54:09.018 [DEBUG] [Thread-6395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:54:09.019 [DEBUG] [Thread-6395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:54:09.059 [DEBUG] [Thread-6395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:54:09.060 [DEBUG] [Thread-6395] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:54:09.062 [DEBUG] [Thread-6395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:54:09.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:54:09.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:54:09.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:54:09.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:54:09.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:54:09.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:54:09.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:54:09.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:54:09.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:54:09.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.828918 -999.00  +21.40  11.14     20   -2.20 1 1 1 1 1     0    0 23.87 13.71 ZNESW 11.5 11.1 189.0 14.4 21.1 -25.7 21.1 -24.9 20.8 -23.8 21.0 -24.9
2025-11-25T21:54:09.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:54:09.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:54:09.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.828918
2025-11-25T21:54:09.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:54:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:54:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:54:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:54:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:54:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:53:38', tmtdew=27.52, humidity=15.27, cloud=0.0, wind=10.96, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:53:39', seeing=1.16, atlas_timestamp='2025-11-25T19:53:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:46:00')
2025-11-25T21:54:09.084 [DEBUG] [Thread-6395] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:54:09.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:54:09.178 [DEBUG] [Thread-6398] [transport.py] [_log()] starting thread (client mode): 0x7374ff70
2025-11-25T21:54:09.179 [DEBUG] [Thread-6398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:54:09.193 [DEBUG] [Thread-6398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:54:09.193 [INFO] [Thread-6398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] client lang: <none>
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] server lang: <none>
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] kex follows: False
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:54:09.201 [DEBUG] [Thread-6398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:54:09.202 [DEBUG] [Thread-6398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:54:09.202 [DEBUG] [Thread-6398] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:54:09.202 [DEBUG] [Thread-6398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:54:09.202 [DEBUG] [Thread-6398] [transport.py] [_log()] Compression: none
2025-11-25T21:54:09.202 [DEBUG] [Thread-6398] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:54:09.259 [DEBUG] [Thread-6398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:54:09.260 [DEBUG] [Thread-6398] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:54:09.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:54:09.261 [DEBUG] [Thread-6398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:54:09.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:54:09.315 [DEBUG] [Thread-6398] [transport.py] [_log()] userauth is OK
2025-11-25T21:54:09.316 [DEBUG] [Thread-6398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:54:09.316 [DEBUG] [Thread-6398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:54:09.316 [DEBUG] [Thread-6398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:54:09.316 [DEBUG] [Thread-6398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:54:09.335 [INFO] [Thread-6398] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:54:09.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:54:09.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:54:10.159 [DEBUG] [Thread-6398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:54:10.160 [DEBUG] [Thread-6398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:54:10.208 [DEBUG] [Thread-6398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:54:10.208 [DEBUG] [Thread-6398] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:54:10.218 [DEBUG] [Thread-6398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:54:10.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:54:10.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:54:10.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:54:10.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:54:10.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:54:10.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:54:10.253 [DEBUG] [Thread-6398] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:54:13.145 [DEBUG] [Thread-6400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:14.654 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:25.082 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:28.195 [DEBUG] [Thread-6401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:35.496 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:40.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:54:40.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:54:40.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:54:40.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 54, 11), 27.57, 15.22, 0.0, 10.5, 21.18, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:54:40.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:54:11
2025-11-25T21:54:41.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:54:41.222 [DEBUG] [Thread-6402] [transport.py] [_log()] starting thread (client mode): 0x70d3a980
2025-11-25T21:54:41.222 [DEBUG] [Thread-6402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:54:41.242 [DEBUG] [Thread-6402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:54:41.243 [INFO] [Thread-6402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:54:41.246 [DEBUG] [Thread-6402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:54:41.246 [DEBUG] [Thread-6402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:54:41.246 [DEBUG] [Thread-6402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:54:41.246 [DEBUG] [Thread-6402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:54:41.246 [DEBUG] [Thread-6402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] client lang: <none>
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] server lang: <none>
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] kex follows: False
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:54:41.247 [DEBUG] [Thread-6402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:54:41.248 [DEBUG] [Thread-6402] [transport.py] [_log()] Compression: none
2025-11-25T21:54:41.248 [DEBUG] [Thread-6402] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:54:41.266 [DEBUG] [Thread-6402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:54:41.267 [DEBUG] [Thread-6402] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:54:41.267 [DEBUG] [Thread-6402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:54:41.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:54:41.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:54:41.270 [DEBUG] [Thread-6402] [transport.py] [_log()] userauth is OK
2025-11-25T21:54:41.270 [DEBUG] [Thread-6402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:54:41.270 [DEBUG] [Thread-6402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:54:41.270 [DEBUG] [Thread-6402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:54:41.271 [DEBUG] [Thread-6402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:54:41.293 [INFO] [Thread-6402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:54:41.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:54:41.932 [DEBUG] [Thread-6402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:54:41.933 [DEBUG] [Thread-6402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:54:41.933 [DEBUG] [Thread-6402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:54:41.974 [DEBUG] [Thread-6402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:54:41.974 [DEBUG] [Thread-6402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:54:41.978 [DEBUG] [Thread-6402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:54:41.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:54:41.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:54:41.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:54:41.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:54:42.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:54:42.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:54:42.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:54:42.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:54:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:54:42.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.829265 -999.00  +21.50   8.82     20   -2.20 1 1 1 1 1     0    0 23.71 16.28 ZNESW 9.3 8.8 177.0 13.2 21.1 -25.9 21.1 -24.9 20.8 -24.0 21.0 -25.0
2025-11-25T21:54:42.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:54:42.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:54:42.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.829265
2025-11-25T21:54:42.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:54:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:54:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:54:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:54:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:54:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:54:11', tmtdew=27.57, humidity=15.22, cloud=0.0, wind=10.5, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:54:11', seeing=1.29, atlas_timestamp='2025-11-25T19:54:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:51:00')
2025-11-25T21:54:42.006 [DEBUG] [Thread-6402] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:54:42.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:54:42.101 [DEBUG] [Thread-6405] [transport.py] [_log()] starting thread (client mode): 0x70d41780
2025-11-25T21:54:42.102 [DEBUG] [Thread-6405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:54:42.116 [DEBUG] [Thread-6405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:54:42.117 [INFO] [Thread-6405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:54:42.124 [DEBUG] [Thread-6405] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:54:42.124 [DEBUG] [Thread-6405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:54:42.124 [DEBUG] [Thread-6405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:54:42.124 [DEBUG] [Thread-6405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:54:42.124 [DEBUG] [Thread-6405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:54:42.124 [DEBUG] [Thread-6405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:54:42.124 [DEBUG] [Thread-6405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:54:42.124 [DEBUG] [Thread-6405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] client lang: <none>
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] server lang: <none>
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] kex follows: False
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] Compression: none
2025-11-25T21:54:42.125 [DEBUG] [Thread-6405] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:54:42.183 [DEBUG] [Thread-6405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:54:42.183 [DEBUG] [Thread-6405] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:54:42.184 [DEBUG] [Thread-6405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:54:42.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:54:42.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:54:42.239 [DEBUG] [Thread-6405] [transport.py] [_log()] userauth is OK
2025-11-25T21:54:42.240 [DEBUG] [Thread-6405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:54:42.240 [DEBUG] [Thread-6405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:54:42.240 [DEBUG] [Thread-6405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:54:42.240 [DEBUG] [Thread-6405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:54:42.259 [INFO] [Thread-6405] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:54:42.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:54:42.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:54:43.080 [DEBUG] [Thread-6405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:54:43.080 [DEBUG] [Thread-6405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:54:43.129 [DEBUG] [Thread-6405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:54:43.130 [DEBUG] [Thread-6405] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:54:43.142 [DEBUG] [Thread-6405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:54:43.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:54:43.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:54:43.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:54:43.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:54:43.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:54:43.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:54:43.179 [DEBUG] [Thread-6405] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:54:43.229 [DEBUG] [Thread-6407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:45.899 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:47.466 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:47.467 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:56.300 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:54:58.275 [DEBUG] [Thread-6408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:01.850 [DEBUG] [Thread-6409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:06.677 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:13.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:55:13.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:55:13.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:55:13.305 [DEBUG] [Thread-6410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:13.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 54, 43), 27.42, 15.28, 0.0, 14.42, 21.13, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:55:13.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:54:43
2025-11-25T21:55:14.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:55:14.151 [DEBUG] [Thread-6411] [transport.py] [_log()] starting thread (client mode): 0x70d437f0
2025-11-25T21:55:14.151 [DEBUG] [Thread-6411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:55:14.170 [DEBUG] [Thread-6411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:55:14.170 [INFO] [Thread-6411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:55:14.173 [DEBUG] [Thread-6411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:55:14.173 [DEBUG] [Thread-6411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] client lang: <none>
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] server lang: <none>
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] kex follows: False
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] Compression: none
2025-11-25T21:55:14.174 [DEBUG] [Thread-6411] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:55:14.191 [DEBUG] [Thread-6411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:55:14.191 [DEBUG] [Thread-6411] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:55:14.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:55:14.192 [DEBUG] [Thread-6411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:55:14.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:55:14.194 [DEBUG] [Thread-6411] [transport.py] [_log()] userauth is OK
2025-11-25T21:55:14.194 [DEBUG] [Thread-6411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:55:14.194 [DEBUG] [Thread-6411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:55:14.194 [DEBUG] [Thread-6411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:55:14.194 [DEBUG] [Thread-6411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:55:14.208 [INFO] [Thread-6411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:55:14.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:55:15.277 [DEBUG] [Thread-6411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:55:15.277 [DEBUG] [Thread-6411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:55:15.277 [DEBUG] [Thread-6411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:55:15.317 [DEBUG] [Thread-6411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:55:15.317 [DEBUG] [Thread-6411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:55:15.318 [DEBUG] [Thread-6411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:55:15.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:55:15.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:55:15.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:55:15.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:55:15.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:55:15.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:55:15.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:55:15.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:55:15.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:55:15.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.829612 -999.00  +21.40   9.45     20   -2.20 1 1 1 1 1     0    0 24.05 18.10 ZNESW 12.3 9.4 178.4 13.4 21.1 -26.0 21.1 -25.2 20.7 -24.1 21.0 -25.2
2025-11-25T21:55:15.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:55:15.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:55:15.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.829612
2025-11-25T21:55:15.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:55:15.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:55:15.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:55:15.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:55:15.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:55:15.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:54:43', tmtdew=27.42, humidity=15.28, cloud=0.0, wind=14.42, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:54:43', seeing=1.18, atlas_timestamp='2025-11-25T19:54:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:51:00')
2025-11-25T21:55:15.338 [DEBUG] [Thread-6411] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:55:15.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:55:15.424 [DEBUG] [Thread-6414] [transport.py] [_log()] starting thread (client mode): 0x70d74640
2025-11-25T21:55:15.424 [DEBUG] [Thread-6414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:55:15.439 [DEBUG] [Thread-6414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:55:15.439 [INFO] [Thread-6414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] client lang: <none>
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] server lang: <none>
2025-11-25T21:55:15.446 [DEBUG] [Thread-6414] [transport.py] [_log()] kex follows: False
2025-11-25T21:55:15.447 [DEBUG] [Thread-6414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:55:15.447 [DEBUG] [Thread-6414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:55:15.447 [DEBUG] [Thread-6414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:55:15.447 [DEBUG] [Thread-6414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:55:15.447 [DEBUG] [Thread-6414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:55:15.447 [DEBUG] [Thread-6414] [transport.py] [_log()] Compression: none
2025-11-25T21:55:15.447 [DEBUG] [Thread-6414] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:55:15.501 [DEBUG] [Thread-6414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:55:15.502 [DEBUG] [Thread-6414] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:55:15.502 [DEBUG] [Thread-6414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:55:15.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:55:15.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:55:15.559 [DEBUG] [Thread-6414] [transport.py] [_log()] userauth is OK
2025-11-25T21:55:15.559 [DEBUG] [Thread-6414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:55:15.559 [DEBUG] [Thread-6414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:55:15.559 [DEBUG] [Thread-6414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:55:15.559 [DEBUG] [Thread-6414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:55:15.575 [INFO] [Thread-6414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:55:15.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:55:15.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:55:16.414 [DEBUG] [Thread-6414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:55:16.414 [DEBUG] [Thread-6414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:55:16.462 [DEBUG] [Thread-6414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:55:16.462 [DEBUG] [Thread-6414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:55:16.470 [DEBUG] [Thread-6414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:55:16.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:55:16.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:55:16.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:55:16.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:55:16.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:55:16.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:55:16.501 [DEBUG] [Thread-6414] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:55:17.057 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:27.435 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:28.340 [DEBUG] [Thread-6416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:37.813 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:43.392 [DEBUG] [Thread-6417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:46.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:55:46.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:55:46.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
2025-11-25T21:55:47.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 55, 15), 27.41, 15.28, 0.0, 13.75, 21.09, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:55:47.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:55:15
2025-11-25T21:55:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:55:47.469 [DEBUG] [Thread-6418] [transport.py] [_log()] starting thread (client mode): 0x70d41750
2025-11-25T21:55:47.469 [DEBUG] [Thread-6418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:55:47.486 [DEBUG] [Thread-6418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:55:47.486 [INFO] [Thread-6418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] client lang: <none>
2025-11-25T21:55:47.488 [DEBUG] [Thread-6418] [transport.py] [_log()] server lang: <none>
2025-11-25T21:55:47.489 [DEBUG] [Thread-6418] [transport.py] [_log()] kex follows: False
2025-11-25T21:55:47.489 [DEBUG] [Thread-6418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:55:47.489 [DEBUG] [Thread-6418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:55:47.489 [DEBUG] [Thread-6418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:55:47.489 [DEBUG] [Thread-6418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:55:47.489 [DEBUG] [Thread-6418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:55:47.489 [DEBUG] [Thread-6418] [transport.py] [_log()] Compression: none
2025-11-25T21:55:47.489 [DEBUG] [Thread-6418] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:55:47.499 [DEBUG] [Thread-6418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:55:47.500 [DEBUG] [Thread-6418] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:55:47.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:55:47.501 [DEBUG] [Thread-6418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:55:47.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:55:47.502 [DEBUG] [Thread-6418] [transport.py] [_log()] userauth is OK
2025-11-25T21:55:47.503 [DEBUG] [Thread-6418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:55:47.503 [DEBUG] [Thread-6418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:55:47.503 [DEBUG] [Thread-6418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:55:47.503 [DEBUG] [Thread-6418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:55:47.521 [INFO] [Thread-6418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:55:47.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:55:47.670 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:47.671 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:48.143 [DEBUG] [Thread-6418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:55:48.143 [DEBUG] [Thread-6418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:55:48.143 [DEBUG] [Thread-6418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:55:48.184 [DEBUG] [Thread-6418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:55:48.184 [DEBUG] [Thread-6418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:55:48.186 [DEBUG] [Thread-6418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:55:48.191 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:48.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:55:48.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:55:48.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:55:48.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:55:48.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:55:48.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:55:48.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:55:48.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:55:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:55:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.829959 -999.00  +21.40   8.97     20   -2.20 1 1 1 1 1     0    0 23.90 20.51 ZNESW 9.0 9.0 177.2 13.2 21.1 -25.9 21.1 -25.2 20.7 -24.2 21.0 -25.2
2025-11-25T21:55:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:55:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:55:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.829959
2025-11-25T21:55:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:55:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:55:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:55:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:55:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:55:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:55:15', tmtdew=27.41, humidity=15.28, cloud=0.0, wind=13.75, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:55:15', seeing=1.18, atlas_timestamp='2025-11-25T19:55:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:51:00')
2025-11-25T21:55:48.206 [DEBUG] [Thread-6418] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:55:48.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:55:48.291 [DEBUG] [Thread-6421] [transport.py] [_log()] starting thread (client mode): 0x70d75c30
2025-11-25T21:55:48.291 [DEBUG] [Thread-6421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:55:48.306 [DEBUG] [Thread-6421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:55:48.306 [INFO] [Thread-6421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] client lang: <none>
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] server lang: <none>
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] kex follows: False
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] Compression: none
2025-11-25T21:55:48.316 [DEBUG] [Thread-6421] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:55:48.375 [DEBUG] [Thread-6421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:55:48.375 [DEBUG] [Thread-6421] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:55:48.375 [DEBUG] [Thread-6421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:55:48.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:55:48.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:55:48.431 [DEBUG] [Thread-6421] [transport.py] [_log()] userauth is OK
2025-11-25T21:55:48.431 [DEBUG] [Thread-6421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:55:48.431 [DEBUG] [Thread-6421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:55:48.431 [DEBUG] [Thread-6421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:55:48.431 [DEBUG] [Thread-6421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:55:48.448 [INFO] [Thread-6421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:55:48.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:55:48.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:55:49.350 [DEBUG] [Thread-6421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:55:49.350 [DEBUG] [Thread-6421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:55:49.398 [DEBUG] [Thread-6421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:55:49.398 [DEBUG] [Thread-6421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:55:49.406 [DEBUG] [Thread-6421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:55:49.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:55:49.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:55:49.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:55:49.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:55:49.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:55:49.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:55:49.438 [DEBUG] [Thread-6421] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:55:58.430 [DEBUG] [Thread-6423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:55:58.570 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:01.906 [DEBUG] [Thread-6424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:08.951 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:13.477 [DEBUG] [Thread-6425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:19.326 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:56:19.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:56:19.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:56:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 55, 47), 27.42, 15.33, 0.0, 13.2, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:56:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:55:47
2025-11-25T21:56:20.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:56:20.447 [DEBUG] [Thread-6426] [transport.py] [_log()] starting thread (client mode): 0x70d74e80
2025-11-25T21:56:20.447 [DEBUG] [Thread-6426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:56:20.467 [DEBUG] [Thread-6426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:56:20.467 [INFO] [Thread-6426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] client lang: <none>
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] server lang: <none>
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] kex follows: False
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:56:20.470 [DEBUG] [Thread-6426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:56:20.471 [DEBUG] [Thread-6426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:56:20.471 [DEBUG] [Thread-6426] [transport.py] [_log()] Compression: none
2025-11-25T21:56:20.471 [DEBUG] [Thread-6426] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:56:20.484 [DEBUG] [Thread-6426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:56:20.485 [DEBUG] [Thread-6426] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:56:20.485 [DEBUG] [Thread-6426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:56:20.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:56:20.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:56:20.486 [DEBUG] [Thread-6426] [transport.py] [_log()] userauth is OK
2025-11-25T21:56:20.486 [DEBUG] [Thread-6426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:56:20.486 [DEBUG] [Thread-6426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:56:20.486 [DEBUG] [Thread-6426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:56:20.486 [DEBUG] [Thread-6426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:56:20.506 [INFO] [Thread-6426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:56:20.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:56:21.276 [DEBUG] [Thread-6426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:56:21.276 [DEBUG] [Thread-6426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:56:21.277 [DEBUG] [Thread-6426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:56:21.317 [DEBUG] [Thread-6426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:56:21.317 [DEBUG] [Thread-6426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:56:21.319 [DEBUG] [Thread-6426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:56:21.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:56:21.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:56:21.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:56:21.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:56:21.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:56:21.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:56:21.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:56:21.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:56:21.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.830307 -999.00  +21.30   7.45     20   -2.20 1 1 1 1 1     0    0 23.94 20.26 ZNESW 10.2 7.5 165.8 12.1 21.1 -26.0 21.0 -25.1 20.7 -24.0 21.0 -25.2
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.830307
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:56:21.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:55:47', tmtdew=27.42, humidity=15.33, cloud=0.0, wind=13.2, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:55:47', seeing=1.12, atlas_timestamp='2025-11-25T19:55:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:51:00')
2025-11-25T21:56:21.332 [DEBUG] [Thread-6426] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:56:21.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:56:21.416 [DEBUG] [Thread-6429] [transport.py] [_log()] starting thread (client mode): 0x70d74250
2025-11-25T21:56:21.416 [DEBUG] [Thread-6429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:56:21.431 [DEBUG] [Thread-6429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:56:21.431 [INFO] [Thread-6429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] client lang: <none>
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] server lang: <none>
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] kex follows: False
2025-11-25T21:56:21.438 [DEBUG] [Thread-6429] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:56:21.439 [DEBUG] [Thread-6429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:56:21.439 [DEBUG] [Thread-6429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:56:21.439 [DEBUG] [Thread-6429] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:56:21.439 [DEBUG] [Thread-6429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:56:21.439 [DEBUG] [Thread-6429] [transport.py] [_log()] Compression: none
2025-11-25T21:56:21.439 [DEBUG] [Thread-6429] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:56:21.493 [DEBUG] [Thread-6429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:56:21.493 [DEBUG] [Thread-6429] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:56:21.494 [DEBUG] [Thread-6429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:56:21.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:56:21.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:56:21.551 [DEBUG] [Thread-6429] [transport.py] [_log()] userauth is OK
2025-11-25T21:56:21.551 [DEBUG] [Thread-6429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:56:21.552 [DEBUG] [Thread-6429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:56:21.552 [DEBUG] [Thread-6429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:56:21.552 [DEBUG] [Thread-6429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:56:21.569 [INFO] [Thread-6429] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:56:21.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:56:21.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:56:22.390 [DEBUG] [Thread-6429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:56:22.391 [DEBUG] [Thread-6429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:56:22.439 [DEBUG] [Thread-6429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:56:22.440 [DEBUG] [Thread-6429] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:56:22.449 [DEBUG] [Thread-6429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:56:22.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:56:22.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:56:22.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:56:22.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:56:22.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:56:22.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:56:22.486 [DEBUG] [Thread-6429] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:56:28.509 [DEBUG] [Thread-6431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:29.709 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:40.088 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:43.561 [DEBUG] [Thread-6432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:47.873 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:47.874 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:50.466 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:56:52.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:56:52.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:56:52.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:56:53.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 56, 19), 27.45, 15.3, 0.0, 12.74, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:56:53.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:56:19
2025-11-25T21:56:53.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:56:53.528 [DEBUG] [Thread-6433] [transport.py] [_log()] starting thread (client mode): 0x70d391b0
2025-11-25T21:56:53.528 [DEBUG] [Thread-6433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:56:53.547 [DEBUG] [Thread-6433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:56:53.548 [INFO] [Thread-6433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] client lang: <none>
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] server lang: <none>
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] kex follows: False
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] Compression: none
2025-11-25T21:56:53.551 [DEBUG] [Thread-6433] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:56:53.565 [DEBUG] [Thread-6433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:56:53.565 [DEBUG] [Thread-6433] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:56:53.566 [DEBUG] [Thread-6433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:56:53.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:56:53.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:56:53.566 [DEBUG] [Thread-6433] [transport.py] [_log()] userauth is OK
2025-11-25T21:56:53.566 [DEBUG] [Thread-6433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:56:53.566 [DEBUG] [Thread-6433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:56:53.566 [DEBUG] [Thread-6433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:56:53.566 [DEBUG] [Thread-6433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:56:53.576 [INFO] [Thread-6433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:56:53.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:56:54.200 [DEBUG] [Thread-6433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:56:54.200 [DEBUG] [Thread-6433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:56:54.201 [DEBUG] [Thread-6433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:56:54.241 [DEBUG] [Thread-6433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:56:54.241 [DEBUG] [Thread-6433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:56:54.244 [DEBUG] [Thread-6433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:56:54.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:56:54.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:56:54.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:56:54.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:56:54.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:56:54.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:56:54.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:56:54.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:56:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:56:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.830654 -999.00  +21.30   6.86     20   -2.20 1 1 1 1 1     0    0 24.18 21.33 ZNESW 8.4 6.9 169.0 10.9 21.1 -26.2 21.1 -25.4 20.7 -24.3 20.9 -25.4
2025-11-25T21:56:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:56:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:56:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.830654
2025-11-25T21:56:54.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:56:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:56:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:56:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:56:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:56:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:56:19', tmtdew=27.45, humidity=15.3, cloud=0.0, wind=12.74, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:56:51', seeing=1.12, atlas_timestamp='2025-11-25T19:56:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:51:00')
2025-11-25T21:56:54.270 [DEBUG] [Thread-6433] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:56:54.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:56:54.365 [DEBUG] [Thread-6436] [transport.py] [_log()] starting thread (client mode): 0x70d40ca0
2025-11-25T21:56:54.365 [DEBUG] [Thread-6436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:56:54.379 [DEBUG] [Thread-6436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:56:54.379 [INFO] [Thread-6436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:56:54.387 [DEBUG] [Thread-6436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:56:54.387 [DEBUG] [Thread-6436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:56:54.387 [DEBUG] [Thread-6436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:56:54.387 [DEBUG] [Thread-6436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:56:54.388 [DEBUG] [Thread-6436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:56:54.388 [DEBUG] [Thread-6436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:56:54.388 [DEBUG] [Thread-6436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:56:54.388 [DEBUG] [Thread-6436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:56:54.388 [DEBUG] [Thread-6436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:56:54.388 [DEBUG] [Thread-6436] [transport.py] [_log()] client lang: <none>
2025-11-25T21:56:54.388 [DEBUG] [Thread-6436] [transport.py] [_log()] server lang: <none>
2025-11-25T21:56:54.388 [DEBUG] [Thread-6436] [transport.py] [_log()] kex follows: False
2025-11-25T21:56:54.388 [DEBUG] [Thread-6436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:56:54.389 [DEBUG] [Thread-6436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:56:54.389 [DEBUG] [Thread-6436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:56:54.389 [DEBUG] [Thread-6436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:56:54.389 [DEBUG] [Thread-6436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:56:54.389 [DEBUG] [Thread-6436] [transport.py] [_log()] Compression: none
2025-11-25T21:56:54.389 [DEBUG] [Thread-6436] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:56:54.450 [DEBUG] [Thread-6436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:56:54.450 [DEBUG] [Thread-6436] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:56:54.451 [DEBUG] [Thread-6436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:56:54.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:56:54.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:56:54.508 [DEBUG] [Thread-6436] [transport.py] [_log()] userauth is OK
2025-11-25T21:56:54.508 [DEBUG] [Thread-6436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:56:54.508 [DEBUG] [Thread-6436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:56:54.508 [DEBUG] [Thread-6436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:56:54.508 [DEBUG] [Thread-6436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:56:54.527 [INFO] [Thread-6436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:56:54.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:56:54.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:56:55.325 [DEBUG] [Thread-6436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:56:55.325 [DEBUG] [Thread-6436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:56:55.373 [DEBUG] [Thread-6436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:56:55.373 [DEBUG] [Thread-6436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:56:55.382 [DEBUG] [Thread-6436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:56:55.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:56:55.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:56:55.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:56:55.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:56:55.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:56:55.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:56:55.419 [DEBUG] [Thread-6436] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:56:58.596 [DEBUG] [Thread-6438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:00.860 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:01.978 [DEBUG] [Thread-6439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:11.281 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:13.651 [DEBUG] [Thread-6440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:21.730 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:25.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:57:25.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:57:25.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:57:26.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 56, 51), 27.48, 15.27, 0.0, 12.16, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:57:26.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:56:51
2025-11-25T21:57:26.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:57:26.460 [DEBUG] [Thread-6441] [transport.py] [_log()] starting thread (client mode): 0x70d77310
2025-11-25T21:57:26.461 [DEBUG] [Thread-6441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:57:26.476 [DEBUG] [Thread-6441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:57:26.476 [INFO] [Thread-6441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:57:26.479 [DEBUG] [Thread-6441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] client lang: <none>
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] server lang: <none>
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] kex follows: False
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] Compression: none
2025-11-25T21:57:26.480 [DEBUG] [Thread-6441] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:57:26.497 [DEBUG] [Thread-6441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:57:26.497 [DEBUG] [Thread-6441] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:57:26.497 [DEBUG] [Thread-6441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:57:26.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:57:26.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:57:26.498 [DEBUG] [Thread-6441] [transport.py] [_log()] userauth is OK
2025-11-25T21:57:26.498 [DEBUG] [Thread-6441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:57:26.498 [DEBUG] [Thread-6441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:57:26.498 [DEBUG] [Thread-6441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:57:26.498 [DEBUG] [Thread-6441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:57:26.514 [INFO] [Thread-6441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:57:26.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:57:27.306 [DEBUG] [Thread-6441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:57:27.306 [DEBUG] [Thread-6441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:57:27.306 [DEBUG] [Thread-6441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:57:27.347 [DEBUG] [Thread-6441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:57:27.347 [DEBUG] [Thread-6441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:57:27.353 [DEBUG] [Thread-6441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:57:27.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:57:27.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:57:27.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:57:27.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:57:27.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:57:27.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:57:27.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:57:27.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.831349 -999.00  +21.10   9.27     20   -2.30 1 1 1 1 1     0    0 24.08 21.59 ZNESW 5.1 9.3 177.8 11.3 21.0 -26.1 20.9 -25.5 20.7 -24.2 20.8 -25.4
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.831349
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:57:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:56:51', tmtdew=27.48, humidity=15.27, cloud=0.0, wind=12.16, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:57:24', seeing=1.12, atlas_timestamp='2025-11-25T19:57:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.02874999999999872, 0.043250000000000455, 0.0572499999999998, 0.02149999999999963, 0.058499999999998664, 0.10525000000000162, 0.041999999999999815, 0.022250000000001435, 0.07949999999999946, 0.05799999999999983, 0.0677500000000002, 0.02999999999999936, 0.11099999999999888, 0.10475000000000101, 0.07499999999999929, 0.041999999999999815, 0.03125, 0.09350000000000058, 0.09499999999999886, 0.062249999999998806, 0.11499999999999844, 0.12674999999999947, 0.05925000000000047, 0.05674999999999919, 0.03250000000000064, 0.06700000000000017, 0.08874999999999922, 0.08950000000000102, 0.10200000000000031, 0.027499999999999858, 0.08500000000000085, 0.022000000000002018, 0.044249999999998124], zp_timestamp='2025-11-25T19:51:00')
2025-11-25T21:57:27.381 [DEBUG] [Thread-6441] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:57:27.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:57:27.474 [DEBUG] [Thread-6444] [transport.py] [_log()] starting thread (client mode): 0x70d77970
2025-11-25T21:57:27.474 [DEBUG] [Thread-6444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:57:27.488 [DEBUG] [Thread-6444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T21:57:27.488 [INFO] [Thread-6444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] client lang: <none>
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] server lang: <none>
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] kex follows: False
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:57:27.496 [DEBUG] [Thread-6444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:57:27.497 [DEBUG] [Thread-6444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:57:27.497 [DEBUG] [Thread-6444] [transport.py] [_log()] Compression: none
2025-11-25T21:57:27.497 [DEBUG] [Thread-6444] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:57:27.558 [DEBUG] [Thread-6444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:57:27.558 [DEBUG] [Thread-6444] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:57:27.558 [DEBUG] [Thread-6444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T21:57:27.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T21:57:27.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:57:27.615 [DEBUG] [Thread-6444] [transport.py] [_log()] userauth is OK
2025-11-25T21:57:27.615 [DEBUG] [Thread-6444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:57:27.615 [DEBUG] [Thread-6444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:57:27.615 [DEBUG] [Thread-6444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T21:57:27.615 [DEBUG] [Thread-6444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:57:27.632 [INFO] [Thread-6444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:57:27.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T21:57:27.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:57:28.463 [DEBUG] [Thread-6444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:57:28.463 [DEBUG] [Thread-6444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:57:28.511 [DEBUG] [Thread-6444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:57:28.511 [DEBUG] [Thread-6444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:57:28.519 [DEBUG] [Thread-6444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:57:28.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:57:28.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T21:57:28.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T21:57:28.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:57:28.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:57:28.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:57:28.552 [DEBUG] [Thread-6444] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:57:28.685 [DEBUG] [Thread-6446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:32.145 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:42.611 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:43.734 [DEBUG] [Thread-6447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:48.073 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:48.075 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:53.000 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:58.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T21:57:58.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T21:57:58.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T21:57:58.771 [DEBUG] [Thread-6448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:57:59.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 21, 57, 55), 27.38, 15.27, 0.0, 14.56, 21.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T21:57:59.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 21:57:55
2025-11-25T21:57:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T21:57:59.497 [DEBUG] [Thread-6449] [transport.py] [_log()] starting thread (client mode): 0x70d74610
2025-11-25T21:57:59.497 [DEBUG] [Thread-6449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T21:57:59.521 [DEBUG] [Thread-6449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T21:57:59.521 [INFO] [Thread-6449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] client lang: <none>
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] server lang: <none>
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] kex follows: False
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T21:57:59.526 [DEBUG] [Thread-6449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T21:57:59.527 [DEBUG] [Thread-6449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T21:57:59.527 [DEBUG] [Thread-6449] [transport.py] [_log()] Compression: none
2025-11-25T21:57:59.527 [DEBUG] [Thread-6449] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T21:57:59.543 [DEBUG] [Thread-6449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T21:57:59.543 [DEBUG] [Thread-6449] [transport.py] [_log()] Switch to new keys ...
2025-11-25T21:57:59.544 [DEBUG] [Thread-6449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T21:57:59.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T21:57:59.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T21:57:59.546 [DEBUG] [Thread-6449] [transport.py] [_log()] userauth is OK
2025-11-25T21:57:59.546 [DEBUG] [Thread-6449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T21:57:59.546 [DEBUG] [Thread-6449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T21:57:59.546 [DEBUG] [Thread-6449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T21:57:59.546 [DEBUG] [Thread-6449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T21:57:59.581 [INFO] [Thread-6449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T21:57:59.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T21:58:00.228 [DEBUG] [Thread-6449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T21:58:00.228 [DEBUG] [Thread-6449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T21:58:00.228 [DEBUG] [Thread-6449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T21:58:00.269 [DEBUG] [Thread-6449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T21:58:00.269 [DEBUG] [Thread-6449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T21:58:00.272 [DEBUG] [Thread-6449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T21:58:00.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T21:58:00.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T21:58:00.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T21:58:00.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T21:58:00.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T21:58:00.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T21:58:00.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T21:58:00.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T21:58:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T21:58:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.831696 -999.00  +21.10   9.12     20   -2.30 1 1 1 1 1     0    0 23.84 19.93 ZNESW 9.1 9.1 181.8 13.0 21.0 -25.8 21.0 -25.1 20.7 -24.1 20.9 -25.2
2025-11-25T21:58:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T21:58:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T21:58:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.831696
2025-11-25T21:58:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T21:58:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T21:58:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T21:58:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T21:58:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T21:58:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T21:57:55', tmtdew=27.38, humidity=15.27, cloud=0.0, wind=14.56, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T21:57:56', seeing=1.12, atlas_timestamp='2025-11-25T19:57:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.04374999999999929, 0.07225000000000037, 0.05025000000000013, 0.026499999999998636, 0.007500000000000284, 0.08975000000000222, 0.0389999999999997, 0.038750000000000284, 0.05999999999999872, 0.04899999999999949, 0.051750000000000185, 0.03500000000000014, 0.10549999999999926, 0.09524999999999828, 0.03999999999999915, 0.06599999999999895, 0.04925000000000068, 0.0884999999999998, 0.06099999999999817, 0.02824999999999811, 0.1144999999999996, 0.087749999999998, 0.028750000000000497, 0.04475000000000051, 0.03799999999999848, 0.06550000000000011, 0.09275000000000055, 0.10550000000000104, 0.12299999999999933, 0.036000000000001364, 0.09050000000000225, 0.007500000000000284, 0.0337499999999995], zp_timestamp='2025-11-25T19:56:00')
2025-11-25T21:58:00.292 [DEBUG] [Thread-6449] [transport.py] [_log()] EOF in transport thread
2025-11-25T21:58:00.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T21:58:02.055 [DEBUG] [Thread-6452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:03.429 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:13.802 [DEBUG] [Thread-6453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:13.857 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:24.244 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:28.863 [DEBUG] [Thread-6454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:34.640 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:43.895 [DEBUG] [Thread-6455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:45.071 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:48.273 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:48.274 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:55.468 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:58:58.937 [DEBUG] [Thread-6456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:02.139 [DEBUG] [Thread-6457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:05.891 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:13.973 [DEBUG] [Thread-6458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:16.319 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:26.766 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:29.008 [DEBUG] [Thread-6459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:37.153 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:44.046 [DEBUG] [Thread-6460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:47.547 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:48.478 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:48.479 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:57.947 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T21:59:59.083 [DEBUG] [Thread-6461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:02.212 [DEBUG] [Thread-6462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:08.346 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:14.116 [DEBUG] [Thread-6463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:15.053 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T22:00:18.748 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:29.153 [DEBUG] [Thread-6464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:29.205 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:39.657 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:44.185 [DEBUG] [Thread-6465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:45.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:00:45.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:00:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:00:45.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 0, 35), 27.42, 15.24, 0.0, 14.2, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:00:45.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:00:35
2025-11-25T22:00:45.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:00:46.035 [DEBUG] [Thread-6466] [transport.py] [_log()] starting thread (client mode): 0x70d01f30
2025-11-25T22:00:46.035 [DEBUG] [Thread-6466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:00:46.056 [DEBUG] [Thread-6466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:00:46.056 [INFO] [Thread-6466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:00:46.057 [DEBUG] [Thread-6466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:00:46.057 [DEBUG] [Thread-6466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] client lang: <none>
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] server lang: <none>
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] kex follows: False
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:00:46.058 [DEBUG] [Thread-6466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:00:46.059 [DEBUG] [Thread-6466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:00:46.059 [DEBUG] [Thread-6466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:00:46.059 [DEBUG] [Thread-6466] [transport.py] [_log()] Compression: none
2025-11-25T22:00:46.059 [DEBUG] [Thread-6466] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:00:46.077 [DEBUG] [Thread-6466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:00:46.078 [DEBUG] [Thread-6466] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:00:46.079 [DEBUG] [Thread-6466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:00:46.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:00:46.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:00:46.080 [DEBUG] [Thread-6466] [transport.py] [_log()] userauth is OK
2025-11-25T22:00:46.081 [DEBUG] [Thread-6466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:00:46.081 [DEBUG] [Thread-6466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:00:46.081 [DEBUG] [Thread-6466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:00:46.081 [DEBUG] [Thread-6466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:00:46.116 [INFO] [Thread-6466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:00:46.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:00:46.786 [DEBUG] [Thread-6466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:00:46.786 [DEBUG] [Thread-6466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:00:46.787 [DEBUG] [Thread-6466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:00:46.827 [DEBUG] [Thread-6466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:00:46.828 [DEBUG] [Thread-6466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:00:46.831 [DEBUG] [Thread-6466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:00:46.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:00:46.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:00:46.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:00:46.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:00:46.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:00:46.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:00:46.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:00:46.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:00:46.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:00:46.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.833431 -999.00  +21.10  10.81     20   -2.20 1 1 1 1 1     0    0 23.99 14.79 ZNESW 9.2 10.8 158.4 13.1 20.9 -26.1 20.9 -25.6 20.6 -24.3 20.8 -25.2
2025-11-25T22:00:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:00:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:00:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.833431
2025-11-25T22:00:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:00:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:00:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:00:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:00:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:00:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:00:35', tmtdew=27.42, humidity=15.24, cloud=0.0, wind=14.2, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:00:36', seeing=1.27, atlas_timestamp='2025-11-25T20:00:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T19:56:00')
2025-11-25T22:00:46.856 [DEBUG] [Thread-6466] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:00:46.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:00:46.952 [DEBUG] [Thread-6469] [transport.py] [_log()] starting thread (client mode): 0x70d3a4a0
2025-11-25T22:00:46.952 [DEBUG] [Thread-6469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:00:46.967 [DEBUG] [Thread-6469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:00:46.968 [INFO] [Thread-6469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:00:46.976 [DEBUG] [Thread-6469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:00:46.976 [DEBUG] [Thread-6469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:00:46.976 [DEBUG] [Thread-6469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:00:46.976 [DEBUG] [Thread-6469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:00:46.976 [DEBUG] [Thread-6469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:00:46.976 [DEBUG] [Thread-6469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] client lang: <none>
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] server lang: <none>
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] kex follows: False
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] Compression: none
2025-11-25T22:00:46.977 [DEBUG] [Thread-6469] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:00:47.036 [DEBUG] [Thread-6469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:00:47.036 [DEBUG] [Thread-6469] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:00:47.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:00:47.037 [DEBUG] [Thread-6469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:00:47.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:00:47.091 [DEBUG] [Thread-6469] [transport.py] [_log()] userauth is OK
2025-11-25T22:00:47.092 [DEBUG] [Thread-6469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:00:47.092 [DEBUG] [Thread-6469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:00:47.092 [DEBUG] [Thread-6469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:00:47.092 [DEBUG] [Thread-6469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:00:47.111 [INFO] [Thread-6469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:00:47.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:00:47.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:00:48.077 [DEBUG] [Thread-6469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:00:48.078 [DEBUG] [Thread-6469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:00:48.126 [DEBUG] [Thread-6469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:00:48.126 [DEBUG] [Thread-6469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:00:48.135 [DEBUG] [Thread-6469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:00:48.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:00:48.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:00:48.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:00:48.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:00:48.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:00:48.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:00:48.169 [DEBUG] [Thread-6469] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:00:48.683 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:48.684 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:50.139 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:00:59.225 [DEBUG] [Thread-6471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:00.564 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:02.289 [DEBUG] [Thread-6472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:10.999 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:14.274 [DEBUG] [Thread-6473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:18.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:01:18.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:01:18.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:01:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 1, 7), 27.42, 15.24, 0.0, 13.94, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:01:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:01:07
2025-11-25T22:01:18.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:01:19.122 [DEBUG] [Thread-6474] [transport.py] [_log()] starting thread (client mode): 0x70d55f60
2025-11-25T22:01:19.122 [DEBUG] [Thread-6474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:01:19.140 [DEBUG] [Thread-6474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:01:19.140 [INFO] [Thread-6474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] client lang: <none>
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] server lang: <none>
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] kex follows: False
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] Compression: none
2025-11-25T22:01:19.144 [DEBUG] [Thread-6474] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:01:19.162 [DEBUG] [Thread-6474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:01:19.162 [DEBUG] [Thread-6474] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:01:19.163 [DEBUG] [Thread-6474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:01:19.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:01:19.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:01:19.165 [DEBUG] [Thread-6474] [transport.py] [_log()] userauth is OK
2025-11-25T22:01:19.165 [DEBUG] [Thread-6474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:01:19.165 [DEBUG] [Thread-6474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:01:19.165 [DEBUG] [Thread-6474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:01:19.165 [DEBUG] [Thread-6474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:01:19.184 [INFO] [Thread-6474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:01:19.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:01:19.794 [DEBUG] [Thread-6474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:01:19.795 [DEBUG] [Thread-6474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:01:19.795 [DEBUG] [Thread-6474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:01:19.836 [DEBUG] [Thread-6474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:01:19.836 [DEBUG] [Thread-6474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:01:19.840 [DEBUG] [Thread-6474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:01:19.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:01:19.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:01:19.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:01:19.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:01:19.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:01:19.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:01:19.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:01:19.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:01:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:01:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.834126 -999.00  +21.10  10.77     20   -2.20 1 1 1 1 1     0    0 23.37 14.18 ZNESW 7.5 10.8 175.2 11.8 20.9 -26.1 20.9 -25.5 20.6 -24.1 20.8 -25.3
2025-11-25T22:01:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:01:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:01:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.834126
2025-11-25T22:01:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:01:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:01:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:01:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:01:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:01:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:01:07', tmtdew=27.42, humidity=15.24, cloud=0.0, wind=13.94, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:01:08', seeing=1.03, atlas_timestamp='2025-11-25T20:01:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T19:56:00')
2025-11-25T22:01:19.868 [DEBUG] [Thread-6474] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:01:19.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:01:19.963 [DEBUG] [Thread-6477] [transport.py] [_log()] starting thread (client mode): 0x70d7dfc0
2025-11-25T22:01:19.963 [DEBUG] [Thread-6477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:01:19.978 [DEBUG] [Thread-6477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:01:19.978 [INFO] [Thread-6477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:01:19.986 [DEBUG] [Thread-6477] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:01:19.986 [DEBUG] [Thread-6477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:01:19.986 [DEBUG] [Thread-6477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] client lang: <none>
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] server lang: <none>
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] kex follows: False
2025-11-25T22:01:19.987 [DEBUG] [Thread-6477] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:01:19.988 [DEBUG] [Thread-6477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:01:19.988 [DEBUG] [Thread-6477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:01:19.988 [DEBUG] [Thread-6477] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:01:19.988 [DEBUG] [Thread-6477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:01:19.988 [DEBUG] [Thread-6477] [transport.py] [_log()] Compression: none
2025-11-25T22:01:19.988 [DEBUG] [Thread-6477] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:01:20.043 [DEBUG] [Thread-6477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:01:20.044 [DEBUG] [Thread-6477] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:01:20.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:01:20.045 [DEBUG] [Thread-6477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:01:20.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:01:20.100 [DEBUG] [Thread-6477] [transport.py] [_log()] userauth is OK
2025-11-25T22:01:20.100 [DEBUG] [Thread-6477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:01:20.100 [DEBUG] [Thread-6477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:01:20.100 [DEBUG] [Thread-6477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:01:20.100 [DEBUG] [Thread-6477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:01:20.120 [INFO] [Thread-6477] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:01:20.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:01:20.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:01:21.001 [DEBUG] [Thread-6477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:01:21.001 [DEBUG] [Thread-6477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:01:21.049 [DEBUG] [Thread-6477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:01:21.049 [DEBUG] [Thread-6477] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:01:21.058 [DEBUG] [Thread-6477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:01:21.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:01:21.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:01:21.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:01:21.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:01:21.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:01:21.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:01:21.094 [DEBUG] [Thread-6477] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:01:21.419 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:29.314 [DEBUG] [Thread-6479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:31.801 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:42.229 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:44.369 [DEBUG] [Thread-6480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:48.885 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:48.886 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:51.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:01:51.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:01:51.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:01:51.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 1, 39), 27.52, 15.17, 0.0, 13.48, 21.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:01:51.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:01:39
2025-11-25T22:01:51.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:01:52.064 [DEBUG] [Thread-6481] [transport.py] [_log()] starting thread (client mode): 0x70d7f2e0
2025-11-25T22:01:52.064 [DEBUG] [Thread-6481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:01:52.077 [DEBUG] [Thread-6481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:01:52.077 [INFO] [Thread-6481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] client lang: <none>
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] server lang: <none>
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] kex follows: False
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] Compression: none
2025-11-25T22:01:52.080 [DEBUG] [Thread-6481] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:01:52.096 [DEBUG] [Thread-6481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:01:52.097 [DEBUG] [Thread-6481] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:01:52.097 [DEBUG] [Thread-6481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:01:52.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:01:52.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:01:52.099 [DEBUG] [Thread-6481] [transport.py] [_log()] userauth is OK
2025-11-25T22:01:52.100 [DEBUG] [Thread-6481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:01:52.100 [DEBUG] [Thread-6481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:01:52.100 [DEBUG] [Thread-6481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:01:52.100 [DEBUG] [Thread-6481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:01:52.118 [INFO] [Thread-6481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:01:52.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:01:52.629 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:01:52.774 [DEBUG] [Thread-6481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:01:52.774 [DEBUG] [Thread-6481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:01:52.775 [DEBUG] [Thread-6481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:01:52.815 [DEBUG] [Thread-6481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:01:52.815 [DEBUG] [Thread-6481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:01:52.818 [DEBUG] [Thread-6481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:01:52.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:01:52.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:01:52.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:01:52.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:01:52.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:01:52.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:01:52.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:01:52.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:01:52.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:01:52.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.834473 -999.00  +21.10   7.84     20   -2.20 1 1 1 1 1     0    0 23.79 14.97 ZNESW 8.2 7.8 176.2 11.3 20.9 -26.0 20.9 -25.3 20.6 -24.3 20.7 -25.2
2025-11-25T22:01:52.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:01:52.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:01:52.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.834473
2025-11-25T22:01:52.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:01:52.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:01:52.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:01:52.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:01:52.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:01:52.842 [DEBUG] [Thread-6481] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:01:52.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:01:39', tmtdew=27.52, humidity=15.17, cloud=0.0, wind=13.48, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:01:40', seeing=1.05, atlas_timestamp='2025-11-25T20:01:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T19:56:00')
2025-11-25T22:01:52.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:01:52.937 [DEBUG] [Thread-6484] [transport.py] [_log()] starting thread (client mode): 0x70da7850
2025-11-25T22:01:52.938 [DEBUG] [Thread-6484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:01:52.952 [DEBUG] [Thread-6484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:01:52.952 [INFO] [Thread-6484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] client lang: <none>
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] server lang: <none>
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] kex follows: False
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:01:52.960 [DEBUG] [Thread-6484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:01:52.961 [DEBUG] [Thread-6484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:01:52.961 [DEBUG] [Thread-6484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:01:52.961 [DEBUG] [Thread-6484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:01:52.961 [DEBUG] [Thread-6484] [transport.py] [_log()] Compression: none
2025-11-25T22:01:52.961 [DEBUG] [Thread-6484] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:01:53.018 [DEBUG] [Thread-6484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:01:53.018 [DEBUG] [Thread-6484] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:01:53.018 [DEBUG] [Thread-6484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:01:53.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:01:53.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:01:53.076 [DEBUG] [Thread-6484] [transport.py] [_log()] userauth is OK
2025-11-25T22:01:53.076 [DEBUG] [Thread-6484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:01:53.076 [DEBUG] [Thread-6484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:01:53.076 [DEBUG] [Thread-6484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:01:53.076 [DEBUG] [Thread-6484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:01:53.095 [INFO] [Thread-6484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:01:53.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:01:53.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:01:53.920 [DEBUG] [Thread-6484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:01:53.921 [DEBUG] [Thread-6484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:01:53.969 [DEBUG] [Thread-6484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:01:53.969 [DEBUG] [Thread-6484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:01:53.978 [DEBUG] [Thread-6484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:01:53.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:01:53.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:01:53.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:01:54.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:01:54.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:01:54.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:01:54.012 [DEBUG] [Thread-6484] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:01:59.405 [DEBUG] [Thread-6486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:02.345 [DEBUG] [Thread-6487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:03.023 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:13.440 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:14.470 [DEBUG] [Thread-6488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:23.860 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:24.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:02:24.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:02:24.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:02:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 2, 11), 27.53, 15.17, 0.0, 14.65, 21.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:02:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:02:11
2025-11-25T22:02:24.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:02:25.022 [DEBUG] [Thread-6489] [transport.py] [_log()] starting thread (client mode): 0x70da4730
2025-11-25T22:02:25.022 [DEBUG] [Thread-6489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:02:25.042 [DEBUG] [Thread-6489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:02:25.042 [INFO] [Thread-6489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] client lang: <none>
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] server lang: <none>
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] kex follows: False
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] Compression: none
2025-11-25T22:02:25.045 [DEBUG] [Thread-6489] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:02:25.061 [DEBUG] [Thread-6489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:02:25.061 [DEBUG] [Thread-6489] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:02:25.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:02:25.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:02:25.062 [DEBUG] [Thread-6489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:02:25.062 [DEBUG] [Thread-6489] [transport.py] [_log()] userauth is OK
2025-11-25T22:02:25.062 [DEBUG] [Thread-6489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:02:25.063 [DEBUG] [Thread-6489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:02:25.063 [DEBUG] [Thread-6489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:02:25.063 [DEBUG] [Thread-6489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:02:25.072 [INFO] [Thread-6489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:02:25.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:02:25.712 [DEBUG] [Thread-6489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:02:25.712 [DEBUG] [Thread-6489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:02:25.712 [DEBUG] [Thread-6489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:02:25.753 [DEBUG] [Thread-6489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:02:25.753 [DEBUG] [Thread-6489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:02:25.755 [DEBUG] [Thread-6489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:02:25.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:02:25.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:02:25.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:02:25.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:02:25.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:02:25.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:02:25.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:02:25.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:02:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:02:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.834821 -999.00  +21.10   6.54     20   -2.20 1 1 1 1 1     0    0 23.91 13.88 ZNESW 7.8 6.5 160.8 10.0 20.8 -26.1 20.9 -25.5 20.6 -24.2 20.8 -25.2
2025-11-25T22:02:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:02:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:02:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.834821
2025-11-25T22:02:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:02:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:02:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:02:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:02:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:02:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:02:11', tmtdew=27.53, humidity=15.17, cloud=0.0, wind=14.65, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:02:12', seeing=1.08, atlas_timestamp='2025-11-25T20:02:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T19:56:00')
2025-11-25T22:02:25.771 [DEBUG] [Thread-6489] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:02:25.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:02:25.858 [DEBUG] [Thread-6492] [transport.py] [_log()] starting thread (client mode): 0x70da5c30
2025-11-25T22:02:25.858 [DEBUG] [Thread-6492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:02:25.874 [DEBUG] [Thread-6492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:02:25.874 [INFO] [Thread-6492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] client lang: <none>
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] server lang: <none>
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] kex follows: False
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] Compression: none
2025-11-25T22:02:25.882 [DEBUG] [Thread-6492] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:02:25.939 [DEBUG] [Thread-6492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:02:25.939 [DEBUG] [Thread-6492] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:02:25.940 [DEBUG] [Thread-6492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:02:25.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:02:25.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:02:25.995 [DEBUG] [Thread-6492] [transport.py] [_log()] userauth is OK
2025-11-25T22:02:25.995 [DEBUG] [Thread-6492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:02:25.995 [DEBUG] [Thread-6492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:02:25.995 [DEBUG] [Thread-6492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:02:25.995 [DEBUG] [Thread-6492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:02:26.011 [INFO] [Thread-6492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:02:26.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:02:26.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:02:26.917 [DEBUG] [Thread-6492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:02:26.917 [DEBUG] [Thread-6492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:02:26.966 [DEBUG] [Thread-6492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:02:26.966 [DEBUG] [Thread-6492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:02:26.976 [DEBUG] [Thread-6492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:02:26.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:02:26.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:02:26.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:02:27.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:02:27.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:02:27.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:02:27.014 [DEBUG] [Thread-6492] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:02:29.504 [DEBUG] [Thread-6494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:34.274 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:44.559 [DEBUG] [Thread-6495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:44.687 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:49.086 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:49.088 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:55.109 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:02:57.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:02:57.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:02:57.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 2, 43), 27.59, 15.15, 0.0, 14.26, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:02:57.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:02:43
2025-11-25T22:02:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:02:57.983 [DEBUG] [Thread-6496] [transport.py] [_log()] starting thread (client mode): 0x70da7bb0
2025-11-25T22:02:57.983 [DEBUG] [Thread-6496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:02:58.003 [DEBUG] [Thread-6496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:02:58.003 [INFO] [Thread-6496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:02:58.005 [DEBUG] [Thread-6496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:02:58.005 [DEBUG] [Thread-6496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:02:58.005 [DEBUG] [Thread-6496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:02:58.005 [DEBUG] [Thread-6496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] client lang: <none>
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] server lang: <none>
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] kex follows: False
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:02:58.006 [DEBUG] [Thread-6496] [transport.py] [_log()] Compression: none
2025-11-25T22:02:58.007 [DEBUG] [Thread-6496] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:02:58.022 [DEBUG] [Thread-6496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:02:58.023 [DEBUG] [Thread-6496] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:02:58.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:02:58.024 [DEBUG] [Thread-6496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:02:58.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:02:58.026 [DEBUG] [Thread-6496] [transport.py] [_log()] userauth is OK
2025-11-25T22:02:58.026 [DEBUG] [Thread-6496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:02:58.026 [DEBUG] [Thread-6496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:02:58.026 [DEBUG] [Thread-6496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:02:58.027 [DEBUG] [Thread-6496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:02:58.052 [INFO] [Thread-6496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:02:58.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:02:58.682 [DEBUG] [Thread-6496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:02:58.682 [DEBUG] [Thread-6496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:02:58.682 [DEBUG] [Thread-6496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:02:58.723 [DEBUG] [Thread-6496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:02:58.723 [DEBUG] [Thread-6496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:02:58.725 [DEBUG] [Thread-6496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:02:58.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:02:58.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:02:58.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:02:58.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:02:58.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:02:58.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:02:58.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:02:58.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:02:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:02:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.835168 -999.00  +21.00   7.64     20   -2.20 1 1 1 1 1     0    0 23.68 11.86 ZNESW 9.5 7.6 167.4 9.5 20.9 -26.0 20.9 -25.7 20.5 -24.3 20.7 -25.3
2025-11-25T22:02:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:02:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:02:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.835168
2025-11-25T22:02:58.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:02:58.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:02:58.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:02:58.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:02:58.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:02:58.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:02:43', tmtdew=27.59, humidity=15.15, cloud=0.0, wind=14.26, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:02:44', seeing=1.29, atlas_timestamp='2025-11-25T20:02:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T19:56:00')
2025-11-25T22:02:58.745 [DEBUG] [Thread-6496] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:02:58.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:02:58.830 [DEBUG] [Thread-6499] [transport.py] [_log()] starting thread (client mode): 0x70da5a80
2025-11-25T22:02:58.830 [DEBUG] [Thread-6499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:02:58.844 [DEBUG] [Thread-6499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:02:58.844 [INFO] [Thread-6499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] client lang: <none>
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] server lang: <none>
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] kex follows: False
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] Compression: none
2025-11-25T22:02:58.852 [DEBUG] [Thread-6499] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:02:58.910 [DEBUG] [Thread-6499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:02:58.910 [DEBUG] [Thread-6499] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:02:58.910 [DEBUG] [Thread-6499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:02:58.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:02:58.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:02:58.966 [DEBUG] [Thread-6499] [transport.py] [_log()] userauth is OK
2025-11-25T22:02:58.966 [DEBUG] [Thread-6499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:02:58.967 [DEBUG] [Thread-6499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:02:58.967 [DEBUG] [Thread-6499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:02:58.967 [DEBUG] [Thread-6499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:02:58.981 [INFO] [Thread-6499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:02:58.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:02:58.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:02:59.592 [DEBUG] [Thread-6501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:02:59.789 [DEBUG] [Thread-6499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:02:59.789 [DEBUG] [Thread-6499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:02:59.837 [DEBUG] [Thread-6499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:02:59.837 [DEBUG] [Thread-6499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:02:59.845 [DEBUG] [Thread-6499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:02:59.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:02:59.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:02:59.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:02:59.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:02:59.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:02:59.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:02:59.877 [DEBUG] [Thread-6499] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:03:02.397 [DEBUG] [Thread-6502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:05.502 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:14.641 [DEBUG] [Thread-6503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:15.902 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:26.316 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:29.680 [DEBUG] [Thread-6504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:29.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:03:29.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:03:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:03:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 3, 15), 27.56, 15.19, 0.0, 13.91, 21.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:03:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:03:15
2025-11-25T22:03:30.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:03:30.827 [DEBUG] [Thread-6505] [transport.py] [_log()] starting thread (client mode): 0x70da4be0
2025-11-25T22:03:30.827 [DEBUG] [Thread-6505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:03:30.847 [DEBUG] [Thread-6505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:03:30.848 [INFO] [Thread-6505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:03:30.850 [DEBUG] [Thread-6505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] client lang: <none>
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] server lang: <none>
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] kex follows: False
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] Compression: none
2025-11-25T22:03:30.851 [DEBUG] [Thread-6505] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:03:30.866 [DEBUG] [Thread-6505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:03:30.866 [DEBUG] [Thread-6505] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:03:30.867 [DEBUG] [Thread-6505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:03:30.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:03:30.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:03:30.869 [DEBUG] [Thread-6505] [transport.py] [_log()] userauth is OK
2025-11-25T22:03:30.869 [DEBUG] [Thread-6505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:03:30.869 [DEBUG] [Thread-6505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:03:30.869 [DEBUG] [Thread-6505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:03:30.869 [DEBUG] [Thread-6505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:03:30.893 [INFO] [Thread-6505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:03:30.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:03:31.484 [DEBUG] [Thread-6505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:03:31.484 [DEBUG] [Thread-6505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:03:31.485 [DEBUG] [Thread-6505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:03:31.526 [DEBUG] [Thread-6505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:03:31.526 [DEBUG] [Thread-6505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:03:31.529 [DEBUG] [Thread-6505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:03:31.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:03:31.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:03:31.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:03:31.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:03:31.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:03:31.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:03:31.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:03:31.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:03:31.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:03:31.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.835515 -999.00  +21.00   8.55     20   -2.30 1 1 1 1 1     0    0 23.79 11.64 ZNESW 10.0 8.6 164.4 12.4 20.8 -26.1 20.8 -25.6 20.5 -24.3 20.7 -25.3
2025-11-25T22:03:31.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:03:31.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:03:31.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.835515
2025-11-25T22:03:31.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:03:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:03:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:03:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:03:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:03:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:03:15', tmtdew=27.56, humidity=15.19, cloud=0.0, wind=13.91, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:03:16', seeing=1.29, atlas_timestamp='2025-11-25T20:03:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T19:56:00')
2025-11-25T22:03:31.557 [DEBUG] [Thread-6505] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:03:31.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:03:31.670 [DEBUG] [Thread-6508] [transport.py] [_log()] starting thread (client mode): 0x70d7ea40
2025-11-25T22:03:31.670 [DEBUG] [Thread-6508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:03:31.686 [DEBUG] [Thread-6508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:03:31.686 [INFO] [Thread-6508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:03:31.696 [DEBUG] [Thread-6508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:03:31.696 [DEBUG] [Thread-6508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:03:31.696 [DEBUG] [Thread-6508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:03:31.696 [DEBUG] [Thread-6508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] client lang: <none>
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] server lang: <none>
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] kex follows: False
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] Compression: none
2025-11-25T22:03:31.697 [DEBUG] [Thread-6508] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:03:31.761 [DEBUG] [Thread-6508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:03:31.762 [DEBUG] [Thread-6508] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:03:31.762 [DEBUG] [Thread-6508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:03:31.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:03:31.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:03:31.826 [DEBUG] [Thread-6508] [transport.py] [_log()] userauth is OK
2025-11-25T22:03:31.826 [DEBUG] [Thread-6508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:03:31.826 [DEBUG] [Thread-6508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:03:31.826 [DEBUG] [Thread-6508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:03:31.826 [DEBUG] [Thread-6508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:03:31.842 [INFO] [Thread-6508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:03:31.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:03:31.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:03:32.662 [DEBUG] [Thread-6508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:03:32.663 [DEBUG] [Thread-6508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:03:32.710 [DEBUG] [Thread-6508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:03:32.710 [DEBUG] [Thread-6508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:03:32.719 [DEBUG] [Thread-6508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:03:32.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:03:32.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:03:32.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:03:32.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:03:32.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:03:32.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:03:32.759 [DEBUG] [Thread-6508] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:03:36.734 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:44.710 [DEBUG] [Thread-6510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:47.152 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:49.288 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:49.289 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:57.560 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:03:59.761 [DEBUG] [Thread-6511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:02.454 [DEBUG] [Thread-6512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:04:02.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:04: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
2025-11-25T22:04:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 3, 47), 27.6, 15.12, 0.0, 13.32, 21.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:04:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:03:47
2025-11-25T22:04:03.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:04:03.706 [DEBUG] [Thread-6513] [transport.py] [_log()] starting thread (client mode): 0x70d7f0d0
2025-11-25T22:04:03.706 [DEBUG] [Thread-6513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:04:03.728 [DEBUG] [Thread-6513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:04:03.728 [INFO] [Thread-6513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] client lang: <none>
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] server lang: <none>
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] kex follows: False
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:04:03.731 [DEBUG] [Thread-6513] [transport.py] [_log()] Compression: none
2025-11-25T22:04:03.732 [DEBUG] [Thread-6513] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:04:03.749 [DEBUG] [Thread-6513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:04:03.750 [DEBUG] [Thread-6513] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:04:03.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:04:03.751 [DEBUG] [Thread-6513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:04:03.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:04:03.753 [DEBUG] [Thread-6513] [transport.py] [_log()] userauth is OK
2025-11-25T22:04:03.753 [DEBUG] [Thread-6513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:04:03.754 [DEBUG] [Thread-6513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:04:03.754 [DEBUG] [Thread-6513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:04:03.754 [DEBUG] [Thread-6513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:04:03.777 [INFO] [Thread-6513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:04:03.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:04:04.414 [DEBUG] [Thread-6513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:04:04.414 [DEBUG] [Thread-6513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:04:04.414 [DEBUG] [Thread-6513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:04:04.454 [DEBUG] [Thread-6513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:04:04.455 [DEBUG] [Thread-6513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:04:04.458 [DEBUG] [Thread-6513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:04:04.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:04:04.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:04:04.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:04:04.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:04:04.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:04:04.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:04:04.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:04:04.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:04:04.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:04:04.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.835515 -999.00  +21.00   8.55     20   -2.30 1 1 1 1 1     0    0 23.79 11.64 ZNESW 10.0 8.6 164.4 12.4 20.8 -26.1 20.8 -25.6 20.5 -24.3 20.7 -25.3
2025-11-25T22:04:04.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:04:04.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:04:04.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.835515
2025-11-25T22:04:04.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:04:04.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:04:04.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:04:04.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:04:04.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:04:04.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:03:47', tmtdew=27.6, humidity=15.12, cloud=0.0, wind=13.32, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:03:48', seeing=1.29, atlas_timestamp='2025-11-25T20:03:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:04:04.484 [DEBUG] [Thread-6513] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:04:04.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:04:04.579 [DEBUG] [Thread-6516] [transport.py] [_log()] starting thread (client mode): 0x70da41c0
2025-11-25T22:04:04.579 [DEBUG] [Thread-6516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:04:04.593 [DEBUG] [Thread-6516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:04:04.593 [INFO] [Thread-6516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:04:04.601 [DEBUG] [Thread-6516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:04:04.601 [DEBUG] [Thread-6516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:04:04.601 [DEBUG] [Thread-6516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:04:04.601 [DEBUG] [Thread-6516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:04:04.601 [DEBUG] [Thread-6516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:04:04.602 [DEBUG] [Thread-6516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:04:04.602 [DEBUG] [Thread-6516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:04:04.602 [DEBUG] [Thread-6516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:04:04.602 [DEBUG] [Thread-6516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:04:04.602 [DEBUG] [Thread-6516] [transport.py] [_log()] client lang: <none>
2025-11-25T22:04:04.602 [DEBUG] [Thread-6516] [transport.py] [_log()] server lang: <none>
2025-11-25T22:04:04.602 [DEBUG] [Thread-6516] [transport.py] [_log()] kex follows: False
2025-11-25T22:04:04.602 [DEBUG] [Thread-6516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:04:04.603 [DEBUG] [Thread-6516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:04:04.603 [DEBUG] [Thread-6516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:04:04.603 [DEBUG] [Thread-6516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:04:04.603 [DEBUG] [Thread-6516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:04:04.603 [DEBUG] [Thread-6516] [transport.py] [_log()] Compression: none
2025-11-25T22:04:04.603 [DEBUG] [Thread-6516] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:04:04.660 [DEBUG] [Thread-6516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:04:04.660 [DEBUG] [Thread-6516] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:04:04.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:04:04.661 [DEBUG] [Thread-6516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:04:04.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:04:04.716 [DEBUG] [Thread-6516] [transport.py] [_log()] userauth is OK
2025-11-25T22:04:04.716 [DEBUG] [Thread-6516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:04:04.716 [DEBUG] [Thread-6516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:04:04.716 [DEBUG] [Thread-6516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:04:04.716 [DEBUG] [Thread-6516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:04:04.735 [INFO] [Thread-6516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:04:04.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:04:04.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:04:05.606 [DEBUG] [Thread-6516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:04:05.606 [DEBUG] [Thread-6516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:04:05.656 [DEBUG] [Thread-6516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:04:05.656 [DEBUG] [Thread-6516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:04:05.665 [DEBUG] [Thread-6516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:04:05.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:04:05.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:04: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') -> 00000000
2025-11-25T22:04:05.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:04:05.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:04:05.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:04:05.705 [DEBUG] [Thread-6516] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:04:08.029 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:14.794 [DEBUG] [Thread-6518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:18.555 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:28.947 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:29.834 [DEBUG] [Thread-6519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:35.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:04:35.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:04:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:04:36.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 4, 19), 27.55, 15.19, 0.0, 13.16, 21.1, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:04:36.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:04:19
2025-11-25T22:04:36.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:04:36.646 [DEBUG] [Thread-6520] [transport.py] [_log()] starting thread (client mode): 0x70da5690
2025-11-25T22:04:36.646 [DEBUG] [Thread-6520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:04:36.666 [DEBUG] [Thread-6520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:04:36.666 [INFO] [Thread-6520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:04:36.669 [DEBUG] [Thread-6520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:04:36.669 [DEBUG] [Thread-6520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:04:36.669 [DEBUG] [Thread-6520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:04:36.669 [DEBUG] [Thread-6520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:04:36.669 [DEBUG] [Thread-6520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:04:36.669 [DEBUG] [Thread-6520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:04:36.669 [DEBUG] [Thread-6520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] client lang: <none>
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] server lang: <none>
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] kex follows: False
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] Compression: none
2025-11-25T22:04:36.670 [DEBUG] [Thread-6520] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:04:36.687 [DEBUG] [Thread-6520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:04:36.687 [DEBUG] [Thread-6520] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:04:36.688 [DEBUG] [Thread-6520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:04:36.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:04:36.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:04:36.690 [DEBUG] [Thread-6520] [transport.py] [_log()] userauth is OK
2025-11-25T22:04:36.690 [DEBUG] [Thread-6520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:04:36.690 [DEBUG] [Thread-6520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:04:36.690 [DEBUG] [Thread-6520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:04:36.690 [DEBUG] [Thread-6520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:04:36.707 [INFO] [Thread-6520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:04:36.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:04:37.346 [DEBUG] [Thread-6520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:04:37.346 [DEBUG] [Thread-6520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:04:37.346 [DEBUG] [Thread-6520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:04:37.387 [DEBUG] [Thread-6520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:04:37.387 [DEBUG] [Thread-6520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:04:37.390 [DEBUG] [Thread-6520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:04:37.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:04:37.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:04:37.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:04:37.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:04:37.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:04:37.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:04:37.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:04:37.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:04:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:04:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.835863 -999.00  +21.00   6.65     20   -2.30 1 1 1 1 1     0    0 24.04 10.95 ZNESW 8.6 6.7 168.8 14.6 20.8 -26.2 20.8 -25.5 20.5 -24.3 20.7 -25.4
2025-11-25T22:04:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:04:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:04:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.835863
2025-11-25T22:04:37.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:04:37.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:04:37.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:04:37.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:04:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:04:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:04:19', tmtdew=27.55, humidity=15.19, cloud=0.0, wind=13.16, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:04:20', seeing=1.22, atlas_timestamp='2025-11-25T20:03:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:04:37.416 [DEBUG] [Thread-6520] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:04:37.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:04:37.511 [DEBUG] [Thread-6523] [transport.py] [_log()] starting thread (client mode): 0x70d43940
2025-11-25T22:04:37.511 [DEBUG] [Thread-6523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:04:37.525 [DEBUG] [Thread-6523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:04:37.525 [INFO] [Thread-6523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] client lang: <none>
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] server lang: <none>
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] kex follows: False
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:04:37.533 [DEBUG] [Thread-6523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:04:37.534 [DEBUG] [Thread-6523] [transport.py] [_log()] Compression: none
2025-11-25T22:04:37.534 [DEBUG] [Thread-6523] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:04:37.591 [DEBUG] [Thread-6523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:04:37.592 [DEBUG] [Thread-6523] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:04:37.592 [DEBUG] [Thread-6523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:04:37.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:04:37.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:04:37.648 [DEBUG] [Thread-6523] [transport.py] [_log()] userauth is OK
2025-11-25T22:04:37.648 [DEBUG] [Thread-6523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:04:37.648 [DEBUG] [Thread-6523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:04:37.648 [DEBUG] [Thread-6523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:04:37.648 [DEBUG] [Thread-6523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:04:37.667 [INFO] [Thread-6523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:04:37.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:04:37.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:04:38.484 [DEBUG] [Thread-6523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:04:38.485 [DEBUG] [Thread-6523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:04:38.532 [DEBUG] [Thread-6523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:04:38.533 [DEBUG] [Thread-6523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:04:38.542 [DEBUG] [Thread-6523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:04:38.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:04:38.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:04:38.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:04:38.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:04:38.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:04:38.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:04:38.578 [DEBUG] [Thread-6523] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:04:39.345 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:44.871 [DEBUG] [Thread-6525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:49.492 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:49.494 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:49.742 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:04:59.925 [DEBUG] [Thread-6526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:00.145 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:02.528 [DEBUG] [Thread-6527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:05:08.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:05:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:05:09.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 4, 51), 27.44, 15.19, 0.0, 13.67, 20.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:05:09.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:04:51
2025-11-25T22:05:09.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:05:09.543 [DEBUG] [Thread-6528] [transport.py] [_log()] starting thread (client mode): 0x70da4070
2025-11-25T22:05:09.543 [DEBUG] [Thread-6528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:05:09.559 [DEBUG] [Thread-6528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:05:09.559 [INFO] [Thread-6528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:05:09.560 [DEBUG] [Thread-6528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:05:09.560 [DEBUG] [Thread-6528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:05:09.560 [DEBUG] [Thread-6528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:05:09.560 [DEBUG] [Thread-6528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:05:09.560 [DEBUG] [Thread-6528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] client lang: <none>
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] server lang: <none>
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] kex follows: False
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] Compression: none
2025-11-25T22:05:09.561 [DEBUG] [Thread-6528] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:05:09.569 [DEBUG] [Thread-6528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:05:09.570 [DEBUG] [Thread-6528] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:05:09.570 [DEBUG] [Thread-6528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:05:09.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:05:09.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:05:09.571 [DEBUG] [Thread-6528] [transport.py] [_log()] userauth is OK
2025-11-25T22:05:09.571 [DEBUG] [Thread-6528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:05:09.571 [DEBUG] [Thread-6528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:05:09.571 [DEBUG] [Thread-6528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:05:09.571 [DEBUG] [Thread-6528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:05:09.588 [INFO] [Thread-6528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:05:09.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:05:10.527 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:10.542 [DEBUG] [Thread-6528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:05:10.543 [DEBUG] [Thread-6528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:05:10.543 [DEBUG] [Thread-6528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:05:10.584 [DEBUG] [Thread-6528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:05:10.584 [DEBUG] [Thread-6528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:05:10.587 [DEBUG] [Thread-6528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:05:10.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:05:10.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:05:10.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:05:10.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:05:10.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:05:10.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:05:10.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:05:10.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:05:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:05:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.836557 -999.00  +20.90   8.35     20   -2.30 1 1 1 1 1     0    0 23.30 8.06 ZNESW 9.0 8.3 161.6 9.8 20.8 -26.0 20.8 -25.7 20.5 -24.1 20.6 -25.2
2025-11-25T22:05:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:05:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:05:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.836557
2025-11-25T22:05:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:05:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:05:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:05:10.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:05:10.617 [DEBUG] [Thread-6528] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:05:10.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:05:10.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:04:51', tmtdew=27.44, humidity=15.19, cloud=0.0, wind=13.67, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:04:52', seeing=1.25, atlas_timestamp='2025-11-25T20:04:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:05:10.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:05:10.714 [DEBUG] [Thread-6531] [transport.py] [_log()] starting thread (client mode): 0x70da6b90
2025-11-25T22:05:10.714 [DEBUG] [Thread-6531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:05:10.729 [DEBUG] [Thread-6531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:05:10.729 [INFO] [Thread-6531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:05:10.737 [DEBUG] [Thread-6531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:05:10.737 [DEBUG] [Thread-6531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:05:10.737 [DEBUG] [Thread-6531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:05:10.737 [DEBUG] [Thread-6531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:05:10.737 [DEBUG] [Thread-6531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:05:10.737 [DEBUG] [Thread-6531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:05:10.737 [DEBUG] [Thread-6531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:05:10.738 [DEBUG] [Thread-6531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:05:10.738 [DEBUG] [Thread-6531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:05:10.738 [DEBUG] [Thread-6531] [transport.py] [_log()] client lang: <none>
2025-11-25T22:05:10.738 [DEBUG] [Thread-6531] [transport.py] [_log()] server lang: <none>
2025-11-25T22:05:10.738 [DEBUG] [Thread-6531] [transport.py] [_log()] kex follows: False
2025-11-25T22:05:10.738 [DEBUG] [Thread-6531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:05:10.738 [DEBUG] [Thread-6531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:05:10.738 [DEBUG] [Thread-6531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:05:10.738 [DEBUG] [Thread-6531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:05:10.739 [DEBUG] [Thread-6531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:05:10.739 [DEBUG] [Thread-6531] [transport.py] [_log()] Compression: none
2025-11-25T22:05:10.739 [DEBUG] [Thread-6531] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:05:10.796 [DEBUG] [Thread-6531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:05:10.796 [DEBUG] [Thread-6531] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:05:10.797 [DEBUG] [Thread-6531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:05:10.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:05:10.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:05:10.852 [DEBUG] [Thread-6531] [transport.py] [_log()] userauth is OK
2025-11-25T22:05:10.852 [DEBUG] [Thread-6531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:05:10.853 [DEBUG] [Thread-6531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:05:10.853 [DEBUG] [Thread-6531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:05:10.853 [DEBUG] [Thread-6531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:05:10.873 [INFO] [Thread-6531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:05:10.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:05:10.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:05:11.723 [DEBUG] [Thread-6531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:05:11.723 [DEBUG] [Thread-6531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:05:11.771 [DEBUG] [Thread-6531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:05:11.771 [DEBUG] [Thread-6531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:05:11.779 [DEBUG] [Thread-6531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:05:11.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:05:11.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:05:11.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:05:11.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:05:11.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:05:11.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:05:11.811 [DEBUG] [Thread-6531] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:05:14.964 [DEBUG] [Thread-6533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:20.908 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:30.015 [DEBUG] [Thread-6534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:31.327 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:41.781 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:41.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:05:41.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:05:41.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:05:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 5, 24), 27.44, 15.19, 0.0, 14.08, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:05:42.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:05:24
2025-11-25T22:05:42.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:05:42.739 [DEBUG] [Thread-6535] [transport.py] [_log()] starting thread (client mode): 0x70d7fd00
2025-11-25T22:05:42.739 [DEBUG] [Thread-6535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:05:42.761 [DEBUG] [Thread-6535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:05:42.762 [INFO] [Thread-6535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] client lang: <none>
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] server lang: <none>
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] kex follows: False
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:05:42.765 [DEBUG] [Thread-6535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:05:42.766 [DEBUG] [Thread-6535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:05:42.766 [DEBUG] [Thread-6535] [transport.py] [_log()] Compression: none
2025-11-25T22:05:42.766 [DEBUG] [Thread-6535] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:05:42.783 [DEBUG] [Thread-6535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:05:42.784 [DEBUG] [Thread-6535] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:05:42.784 [DEBUG] [Thread-6535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:05:42.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:05:42.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:05:42.786 [DEBUG] [Thread-6535] [transport.py] [_log()] userauth is OK
2025-11-25T22:05:42.787 [DEBUG] [Thread-6535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:05:42.787 [DEBUG] [Thread-6535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:05:42.787 [DEBUG] [Thread-6535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:05:42.787 [DEBUG] [Thread-6535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:05:42.810 [INFO] [Thread-6535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:05:42.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:05:43.444 [DEBUG] [Thread-6535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:05:43.444 [DEBUG] [Thread-6535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:05:43.444 [DEBUG] [Thread-6535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:05:43.485 [DEBUG] [Thread-6535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:05:43.485 [DEBUG] [Thread-6535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:05:43.488 [DEBUG] [Thread-6535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:05:43.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:05:43.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:05:43.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:05:43.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:05:43.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:05:43.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:05:43.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:05:43.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:05:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:05:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.836904 -999.00  +20.90   9.06     20   -2.30 1 1 1 1 1     0    0 23.53 6.46 ZNESW 9.4 9.1 154.2 11.1 20.7 -26.0 20.8 -25.4 20.4 -24.2 20.6 -25.0
2025-11-25T22:05:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:05:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:05:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.836904
2025-11-25T22:05:43.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:05:43.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:05:43.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:05:43.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:05:43.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:05:43.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:05:24', tmtdew=27.44, humidity=15.19, cloud=0.0, wind=14.08, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:05:24', seeing=1.25, atlas_timestamp='2025-11-25T20:05:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:05:43.515 [DEBUG] [Thread-6535] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:05:43.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:05:43.621 [DEBUG] [Thread-6538] [transport.py] [_log()] starting thread (client mode): 0x70d7e7d0
2025-11-25T22:05:43.621 [DEBUG] [Thread-6538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:05:43.635 [DEBUG] [Thread-6538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:05:43.635 [INFO] [Thread-6538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:05:43.642 [DEBUG] [Thread-6538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:05:43.643 [DEBUG] [Thread-6538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:05:43.643 [DEBUG] [Thread-6538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:05:43.643 [DEBUG] [Thread-6538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:05:43.643 [DEBUG] [Thread-6538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:05:43.643 [DEBUG] [Thread-6538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:05:43.643 [DEBUG] [Thread-6538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:05:43.643 [DEBUG] [Thread-6538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:05:43.644 [DEBUG] [Thread-6538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:05:43.644 [DEBUG] [Thread-6538] [transport.py] [_log()] client lang: <none>
2025-11-25T22:05:43.644 [DEBUG] [Thread-6538] [transport.py] [_log()] server lang: <none>
2025-11-25T22:05:43.644 [DEBUG] [Thread-6538] [transport.py] [_log()] kex follows: False
2025-11-25T22:05:43.644 [DEBUG] [Thread-6538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:05:43.644 [DEBUG] [Thread-6538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:05:43.644 [DEBUG] [Thread-6538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:05:43.644 [DEBUG] [Thread-6538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:05:43.645 [DEBUG] [Thread-6538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:05:43.645 [DEBUG] [Thread-6538] [transport.py] [_log()] Compression: none
2025-11-25T22:05:43.645 [DEBUG] [Thread-6538] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:05:43.699 [DEBUG] [Thread-6538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:05:43.700 [DEBUG] [Thread-6538] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:05:43.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:05:43.701 [DEBUG] [Thread-6538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:05:43.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:05:43.755 [DEBUG] [Thread-6538] [transport.py] [_log()] userauth is OK
2025-11-25T22:05:43.756 [DEBUG] [Thread-6538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:05:43.756 [DEBUG] [Thread-6538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:05:43.756 [DEBUG] [Thread-6538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:05:43.756 [DEBUG] [Thread-6538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:05:43.774 [INFO] [Thread-6538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:05:43.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:05:43.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:05:44.597 [DEBUG] [Thread-6538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:05:44.598 [DEBUG] [Thread-6538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:05:44.645 [DEBUG] [Thread-6538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:05:44.646 [DEBUG] [Thread-6538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:05:44.654 [DEBUG] [Thread-6538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:05:44.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:05:44.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:05:44.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:05:44.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:05:44.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:05:44.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:05:44.689 [DEBUG] [Thread-6538] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:05:45.049 [DEBUG] [Thread-6540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:49.695 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:49.696 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:05:52.195 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:00.110 [DEBUG] [Thread-6541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:02.603 [DEBUG] [Thread-6542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:02.643 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:13.061 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:14.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:06:14.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:06:14.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:06:15.139 [DEBUG] [Thread-6543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:15.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 5, 55), 27.38, 15.14, 0.0, 15.72, 20.88, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:06:15.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:05:55
2025-11-25T22:06:15.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:06:15.647 [DEBUG] [Thread-6544] [transport.py] [_log()] starting thread (client mode): 0x70d7ee60
2025-11-25T22:06:15.647 [DEBUG] [Thread-6544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:06:15.668 [DEBUG] [Thread-6544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:06:15.668 [INFO] [Thread-6544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:06:15.671 [DEBUG] [Thread-6544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] client lang: <none>
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] server lang: <none>
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] kex follows: False
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:06:15.672 [DEBUG] [Thread-6544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:06:15.673 [DEBUG] [Thread-6544] [transport.py] [_log()] Compression: none
2025-11-25T22:06:15.673 [DEBUG] [Thread-6544] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:06:15.691 [DEBUG] [Thread-6544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:06:15.692 [DEBUG] [Thread-6544] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:06:15.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:06:15.693 [DEBUG] [Thread-6544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:06:15.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:06:15.695 [DEBUG] [Thread-6544] [transport.py] [_log()] userauth is OK
2025-11-25T22:06:15.695 [DEBUG] [Thread-6544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:06:15.695 [DEBUG] [Thread-6544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:06:15.696 [DEBUG] [Thread-6544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:06:15.696 [DEBUG] [Thread-6544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:06:15.721 [INFO] [Thread-6544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:06:15.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:06:16.391 [DEBUG] [Thread-6544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:06:16.391 [DEBUG] [Thread-6544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:06:16.391 [DEBUG] [Thread-6544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:06:16.432 [DEBUG] [Thread-6544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:06:16.432 [DEBUG] [Thread-6544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:06:16.435 [DEBUG] [Thread-6544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:06:16.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:06:16.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:06:16.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:06:16.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:06:16.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:06:16.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:06:16.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:06:16.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:06:16.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:06:16.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.837251 -999.00  +20.90   7.33     20   -2.30 1 1 1 1 1     0    0 23.16 4.35 ZNESW 6.6 7.3 159.0 12.1 20.8 -26.1 20.7 -25.4 20.4 -24.1 20.6 -25.2
2025-11-25T22:06:16.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:06:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:06:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.837251
2025-11-25T22:06:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:06:16.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:06:16.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:06:16.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:06:16.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:06:16.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:05:55', tmtdew=27.38, humidity=15.14, cloud=0.0, wind=15.72, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:05:56', seeing=1.49, atlas_timestamp='2025-11-25T20:05:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:06:16.463 [DEBUG] [Thread-6544] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:06:16.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:06:16.559 [DEBUG] [Thread-6547] [transport.py] [_log()] starting thread (client mode): 0x70d747c0
2025-11-25T22:06:16.559 [DEBUG] [Thread-6547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:06:16.574 [DEBUG] [Thread-6547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:06:16.574 [INFO] [Thread-6547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] client lang: <none>
2025-11-25T22:06:16.582 [DEBUG] [Thread-6547] [transport.py] [_log()] server lang: <none>
2025-11-25T22:06:16.583 [DEBUG] [Thread-6547] [transport.py] [_log()] kex follows: False
2025-11-25T22:06:16.583 [DEBUG] [Thread-6547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:06:16.583 [DEBUG] [Thread-6547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:06:16.583 [DEBUG] [Thread-6547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:06:16.583 [DEBUG] [Thread-6547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:06:16.583 [DEBUG] [Thread-6547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:06:16.583 [DEBUG] [Thread-6547] [transport.py] [_log()] Compression: none
2025-11-25T22:06:16.583 [DEBUG] [Thread-6547] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:06:16.640 [DEBUG] [Thread-6547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:06:16.640 [DEBUG] [Thread-6547] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:06:16.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:06:16.641 [DEBUG] [Thread-6547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:06:16.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:06:16.695 [DEBUG] [Thread-6547] [transport.py] [_log()] userauth is OK
2025-11-25T22:06:16.696 [DEBUG] [Thread-6547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:06:16.696 [DEBUG] [Thread-6547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:06:16.696 [DEBUG] [Thread-6547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:06:16.696 [DEBUG] [Thread-6547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:06:16.715 [INFO] [Thread-6547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:06:16.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:06:16.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:06:17.550 [DEBUG] [Thread-6547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:06:17.550 [DEBUG] [Thread-6547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:06:17.598 [DEBUG] [Thread-6547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:06:17.598 [DEBUG] [Thread-6547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:06:17.607 [DEBUG] [Thread-6547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:06:17.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:06:17.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:06:17.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:06:17.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:06:17.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:06:17.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:06:17.644 [DEBUG] [Thread-6547] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:06:23.489 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:30.173 [DEBUG] [Thread-6549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:33.907 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:44.306 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:45.222 [DEBUG] [Thread-6550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:47.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:06:47.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:06:47.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:06:48.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 6, 28), 27.44, 15.07, 0.0, 14.56, 20.88, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:06:48.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:06:28
2025-11-25T22:06:48.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:06:48.619 [DEBUG] [Thread-6551] [transport.py] [_log()] starting thread (client mode): 0x70d7f070
2025-11-25T22:06:48.619 [DEBUG] [Thread-6551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:06:48.642 [DEBUG] [Thread-6551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:06:48.642 [INFO] [Thread-6551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] client lang: <none>
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] server lang: <none>
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] kex follows: False
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:06:48.645 [DEBUG] [Thread-6551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:06:48.646 [DEBUG] [Thread-6551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:06:48.646 [DEBUG] [Thread-6551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:06:48.646 [DEBUG] [Thread-6551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:06:48.646 [DEBUG] [Thread-6551] [transport.py] [_log()] Compression: none
2025-11-25T22:06:48.646 [DEBUG] [Thread-6551] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:06:48.662 [DEBUG] [Thread-6551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:06:48.662 [DEBUG] [Thread-6551] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:06:48.663 [DEBUG] [Thread-6551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:06:48.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:06:48.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:06:48.665 [DEBUG] [Thread-6551] [transport.py] [_log()] userauth is OK
2025-11-25T22:06:48.665 [DEBUG] [Thread-6551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:06:48.665 [DEBUG] [Thread-6551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:06:48.665 [DEBUG] [Thread-6551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:06:48.665 [DEBUG] [Thread-6551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:06:48.689 [INFO] [Thread-6551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:06:48.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:06:49.325 [DEBUG] [Thread-6551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:06:49.325 [DEBUG] [Thread-6551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:06:49.326 [DEBUG] [Thread-6551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:06:49.366 [DEBUG] [Thread-6551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:06:49.366 [DEBUG] [Thread-6551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:06:49.370 [DEBUG] [Thread-6551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:06:49.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:06:49.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:06:49.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:06:49.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:06:49.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:06:49.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:06:49.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:06:49.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:06:49.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:06:49.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.837598 -999.00  +20.80   8.44     20   -2.40 1 1 1 1 1     0    0 23.70 2.77 ZNESW 8.7 8.4 170.6 10.5 20.7 -26.1 20.7 -25.4 20.4 -24.2 20.6 -25.1
2025-11-25T22:06:49.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:06:49.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:06:49.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.837598
2025-11-25T22:06:49.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:06:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:06:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:06:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:06:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:06:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:06:28', tmtdew=27.44, humidity=15.07, cloud=0.0, wind=14.56, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:06:28', seeing=1.42, atlas_timestamp='2025-11-25T20:06:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:06:49.397 [DEBUG] [Thread-6551] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:06:49.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:06:49.498 [DEBUG] [Thread-6554] [transport.py] [_log()] starting thread (client mode): 0x70d7df60
2025-11-25T22:06:49.498 [DEBUG] [Thread-6554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:06:49.514 [DEBUG] [Thread-6554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:06:49.515 [INFO] [Thread-6554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:06:49.522 [DEBUG] [Thread-6554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:06:49.522 [DEBUG] [Thread-6554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:06:49.522 [DEBUG] [Thread-6554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] client lang: <none>
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] server lang: <none>
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] kex follows: False
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] Compression: none
2025-11-25T22:06:49.523 [DEBUG] [Thread-6554] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:06:49.583 [DEBUG] [Thread-6554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:06:49.584 [DEBUG] [Thread-6554] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:06:49.584 [DEBUG] [Thread-6554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:06:49.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:06:49.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:06:49.639 [DEBUG] [Thread-6554] [transport.py] [_log()] userauth is OK
2025-11-25T22:06:49.639 [DEBUG] [Thread-6554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:06:49.639 [DEBUG] [Thread-6554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:06:49.639 [DEBUG] [Thread-6554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:06:49.639 [DEBUG] [Thread-6554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:06:49.658 [INFO] [Thread-6554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:06:49.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:06:49.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:06:49.892 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:49.893 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:06:50.588 [DEBUG] [Thread-6554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:06:50.588 [DEBUG] [Thread-6554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:06:50.636 [DEBUG] [Thread-6554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:06:50.636 [DEBUG] [Thread-6554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:06:50.646 [DEBUG] [Thread-6554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:06:50.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:06:50.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:06:50.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:06:50.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:06:50.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:06:50.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:06:50.683 [DEBUG] [Thread-6554] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:06:54.707 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:00.257 [DEBUG] [Thread-6556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:02.677 [DEBUG] [Thread-6557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:05.105 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:15.300 [DEBUG] [Thread-6558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:15.512 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:20.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:07:20.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:07:20.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:07:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 6, 28), 27.59, 15.07, 0.0, 14.56, 20.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:07:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:06:28
2025-11-25T22:07:21.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:07:21.693 [DEBUG] [Thread-6559] [transport.py] [_log()] starting thread (client mode): 0x70d42200
2025-11-25T22:07:21.694 [DEBUG] [Thread-6559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:07:21.713 [DEBUG] [Thread-6559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:07:21.713 [INFO] [Thread-6559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:07:21.716 [DEBUG] [Thread-6559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] client lang: <none>
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] server lang: <none>
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] kex follows: False
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] Compression: none
2025-11-25T22:07:21.717 [DEBUG] [Thread-6559] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:07:21.732 [DEBUG] [Thread-6559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:07:21.732 [DEBUG] [Thread-6559] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:07:21.732 [DEBUG] [Thread-6559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:07:21.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:07:21.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:07:21.733 [DEBUG] [Thread-6559] [transport.py] [_log()] userauth is OK
2025-11-25T22:07:21.733 [DEBUG] [Thread-6559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:07:21.733 [DEBUG] [Thread-6559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:07:21.733 [DEBUG] [Thread-6559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:07:21.733 [DEBUG] [Thread-6559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:07:21.747 [INFO] [Thread-6559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:07:21.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:07:22.376 [DEBUG] [Thread-6559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:07:22.376 [DEBUG] [Thread-6559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:07:22.376 [DEBUG] [Thread-6559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:07:22.417 [DEBUG] [Thread-6559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:07:22.417 [DEBUG] [Thread-6559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:07:22.419 [DEBUG] [Thread-6559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:07:22.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:07:22.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:07:22.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:07:22.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:07:22.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:07:22.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:07:22.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:07:22.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:07:22.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:07:22.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.837946 -999.00  +20.70   7.98     20   -2.50 1 1 1 1 1     0    0 23.66 1.54 ZNESW 9.8 8.0 169.8 10.1 20.7 -26.0 20.7 -25.6 20.4 -24.3 20.6 -25.1
2025-11-25T22:07:22.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:07:22.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:07:22.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.837946
2025-11-25T22:07:22.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:07:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:07:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:07:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:07:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:07:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:06:28', tmtdew=27.59, humidity=15.07, cloud=0.0, wind=14.56, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:07:00', seeing=1.25, atlas_timestamp='2025-11-25T20:06:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:07:22.438 [DEBUG] [Thread-6559] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:07:22.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:07:22.527 [DEBUG] [Thread-6562] [transport.py] [_log()] starting thread (client mode): 0x70da70d0
2025-11-25T22:07:22.527 [DEBUG] [Thread-6562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:07:22.545 [DEBUG] [Thread-6562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:07:22.545 [INFO] [Thread-6562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] client lang: <none>
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] server lang: <none>
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] kex follows: False
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:07:22.552 [DEBUG] [Thread-6562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:07:22.553 [DEBUG] [Thread-6562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:07:22.553 [DEBUG] [Thread-6562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:07:22.553 [DEBUG] [Thread-6562] [transport.py] [_log()] Compression: none
2025-11-25T22:07:22.553 [DEBUG] [Thread-6562] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:07:22.613 [DEBUG] [Thread-6562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:07:22.613 [DEBUG] [Thread-6562] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:07:22.613 [DEBUG] [Thread-6562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:07:22.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:07:22.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:07:22.671 [DEBUG] [Thread-6562] [transport.py] [_log()] userauth is OK
2025-11-25T22:07:22.671 [DEBUG] [Thread-6562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:07:22.671 [DEBUG] [Thread-6562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:07:22.671 [DEBUG] [Thread-6562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:07:22.671 [DEBUG] [Thread-6562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:07:22.685 [INFO] [Thread-6562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:07:22.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:07:22.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:07:23.531 [DEBUG] [Thread-6562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:07:23.531 [DEBUG] [Thread-6562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:07:23.579 [DEBUG] [Thread-6562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:07:23.579 [DEBUG] [Thread-6562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:07:23.587 [DEBUG] [Thread-6562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:07:23.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:07:23.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:07:23.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:07:23.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:07:23.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:07:23.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:07:23.622 [DEBUG] [Thread-6562] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:07:25.901 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:30.333 [DEBUG] [Thread-6564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:36.320 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:45.384 [DEBUG] [Thread-6565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:46.729 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:50.099 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:50.101 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:07:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:07:53.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:07:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:07:54.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 7, 32), 27.65, 15.02, 0.0, 15.37, 21.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:07:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:07:32
2025-11-25T22:07:54.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:07:54.587 [DEBUG] [Thread-6566] [transport.py] [_log()] starting thread (client mode): 0x70d7f700
2025-11-25T22:07:54.588 [DEBUG] [Thread-6566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:07:54.608 [DEBUG] [Thread-6566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:07:54.608 [INFO] [Thread-6566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:07:54.611 [DEBUG] [Thread-6566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:07:54.611 [DEBUG] [Thread-6566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:07:54.611 [DEBUG] [Thread-6566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:07:54.611 [DEBUG] [Thread-6566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:07:54.611 [DEBUG] [Thread-6566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:07:54.611 [DEBUG] [Thread-6566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] client lang: <none>
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] server lang: <none>
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] kex follows: False
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] Compression: none
2025-11-25T22:07:54.612 [DEBUG] [Thread-6566] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:07:54.629 [DEBUG] [Thread-6566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:07:54.629 [DEBUG] [Thread-6566] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:07:54.630 [DEBUG] [Thread-6566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:07:54.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:07:54.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:07:54.673 [DEBUG] [Thread-6566] [transport.py] [_log()] userauth is OK
2025-11-25T22:07:54.674 [DEBUG] [Thread-6566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:07:54.674 [DEBUG] [Thread-6566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:07:54.674 [DEBUG] [Thread-6566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:07:54.674 [DEBUG] [Thread-6566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:07:54.706 [INFO] [Thread-6566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:07:54.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:07:55.366 [DEBUG] [Thread-6566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:07:55.367 [DEBUG] [Thread-6566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:07:55.367 [DEBUG] [Thread-6566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:07:55.408 [DEBUG] [Thread-6566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:07:55.408 [DEBUG] [Thread-6566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:07:55.411 [DEBUG] [Thread-6566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:07:55.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:07:55.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:07:55.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:07:55.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:07:55.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:07:55.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:07:55.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:07:55.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:07:55.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:07:55.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.838293 -999.00  +20.80  10.30     20   -2.60 1 1 1 1 1     0    0 23.18 0.56 ZNESW 10.7 10.3 192.4 15.2 20.7 -25.9 20.6 -25.2 20.4 -24.1 20.6 -25.0
2025-11-25T22:07:55.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:07:55.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:07:55.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.838293
2025-11-25T22:07:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:07:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:07:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:07:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:07:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:07:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:07:32', tmtdew=27.65, humidity=15.02, cloud=0.0, wind=15.37, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:07:32', seeing=1.24, atlas_timestamp='2025-11-25T20:07:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:07:55.440 [DEBUG] [Thread-6566] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:07:55.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:07:55.535 [DEBUG] [Thread-6569] [transport.py] [_log()] starting thread (client mode): 0x70d402b0
2025-11-25T22:07:55.535 [DEBUG] [Thread-6569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:07:55.549 [DEBUG] [Thread-6569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:07:55.550 [INFO] [Thread-6569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:07:55.557 [DEBUG] [Thread-6569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] client lang: <none>
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] server lang: <none>
2025-11-25T22:07:55.558 [DEBUG] [Thread-6569] [transport.py] [_log()] kex follows: False
2025-11-25T22:07:55.559 [DEBUG] [Thread-6569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:07:55.559 [DEBUG] [Thread-6569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:07:55.559 [DEBUG] [Thread-6569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:07:55.559 [DEBUG] [Thread-6569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:07:55.559 [DEBUG] [Thread-6569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:07:55.559 [DEBUG] [Thread-6569] [transport.py] [_log()] Compression: none
2025-11-25T22:07:55.559 [DEBUG] [Thread-6569] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:07:55.615 [DEBUG] [Thread-6569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:07:55.616 [DEBUG] [Thread-6569] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:07:55.616 [DEBUG] [Thread-6569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:07:55.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:07:55.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:07:55.672 [DEBUG] [Thread-6569] [transport.py] [_log()] userauth is OK
2025-11-25T22:07:55.672 [DEBUG] [Thread-6569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:07:55.672 [DEBUG] [Thread-6569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:07:55.672 [DEBUG] [Thread-6569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:07:55.672 [DEBUG] [Thread-6569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:07:55.691 [INFO] [Thread-6569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:07:55.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:07:55.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:07:56.513 [DEBUG] [Thread-6569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:07:56.513 [DEBUG] [Thread-6569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:07:56.561 [DEBUG] [Thread-6569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:07:56.561 [DEBUG] [Thread-6569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:07:56.571 [DEBUG] [Thread-6569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:07:56.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:07:56.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:07:56.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:07:56.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:07:56.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:07:56.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:07:56.603 [DEBUG] [Thread-6569] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:07:57.151 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:00.413 [DEBUG] [Thread-6571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:02.751 [DEBUG] [Thread-6572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:07.570 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:15.450 [DEBUG] [Thread-6573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:18.005 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:26.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:08:26.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:08:26.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:08:27.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 8, 4), 27.63, 15.04, 0.0, 14.88, 20.96, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:08:27.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:08:04
2025-11-25T22:08:27.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:08:27.551 [DEBUG] [Thread-6574] [transport.py] [_log()] starting thread (client mode): 0x70d6b3a0
2025-11-25T22:08:27.551 [DEBUG] [Thread-6574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:08:27.572 [DEBUG] [Thread-6574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:08:27.572 [INFO] [Thread-6574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:08:27.575 [DEBUG] [Thread-6574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:08:27.575 [DEBUG] [Thread-6574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] client lang: <none>
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] server lang: <none>
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] kex follows: False
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] Compression: none
2025-11-25T22:08:27.576 [DEBUG] [Thread-6574] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:08:27.594 [DEBUG] [Thread-6574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:08:27.594 [DEBUG] [Thread-6574] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:08:27.595 [DEBUG] [Thread-6574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:08:27.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:08:27.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:08:27.637 [DEBUG] [Thread-6574] [transport.py] [_log()] userauth is OK
2025-11-25T22:08:27.638 [DEBUG] [Thread-6574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:08:27.638 [DEBUG] [Thread-6574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:08:27.638 [DEBUG] [Thread-6574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:08:27.638 [DEBUG] [Thread-6574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:08:27.669 [INFO] [Thread-6574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:08:27.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:08:28.305 [DEBUG] [Thread-6574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:08:28.305 [DEBUG] [Thread-6574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:08:28.306 [DEBUG] [Thread-6574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:08:28.347 [DEBUG] [Thread-6574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:08:28.347 [DEBUG] [Thread-6574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:08:28.351 [DEBUG] [Thread-6574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:08:28.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:08:28.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:08:28.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:08:28.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:08:28.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:08:28.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:08:28.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:08:28.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:08:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:08:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.838641 -999.00  +20.90   7.22     20   -2.50 1 1 1 1 1     0    0 23.48 -0.24 ZNESW 8.9 7.2 178.4 11.8 20.7 -25.9 20.7 -25.1 20.4 -24.0 20.6 -25.2
2025-11-25T22:08:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:08:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:08:28.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.838641
2025-11-25T22:08:28.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:08:28.378 [DEBUG] [Thread-6574] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:08:28.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:08:28.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:08:28.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:08:28.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:08:28.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:08:04', tmtdew=27.63, humidity=15.04, cloud=0.0, wind=14.88, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:08:04', seeing=1.18, atlas_timestamp='2025-11-25T20:07:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:08:28.402 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:28.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:08:28.476 [DEBUG] [Thread-6577] [transport.py] [_log()] starting thread (client mode): 0x70d77550
2025-11-25T22:08:28.476 [DEBUG] [Thread-6577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:08:28.491 [DEBUG] [Thread-6577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:08:28.491 [INFO] [Thread-6577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:08:28.499 [DEBUG] [Thread-6577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:08:28.500 [DEBUG] [Thread-6577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:08:28.500 [DEBUG] [Thread-6577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:08:28.500 [DEBUG] [Thread-6577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:08:28.500 [DEBUG] [Thread-6577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:08:28.500 [DEBUG] [Thread-6577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:08:28.500 [DEBUG] [Thread-6577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:08:28.500 [DEBUG] [Thread-6577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:08:28.500 [DEBUG] [Thread-6577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:08:28.500 [DEBUG] [Thread-6577] [transport.py] [_log()] client lang: <none>
2025-11-25T22:08:28.501 [DEBUG] [Thread-6577] [transport.py] [_log()] server lang: <none>
2025-11-25T22:08:28.501 [DEBUG] [Thread-6577] [transport.py] [_log()] kex follows: False
2025-11-25T22:08:28.501 [DEBUG] [Thread-6577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:08:28.501 [DEBUG] [Thread-6577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:08:28.501 [DEBUG] [Thread-6577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:08:28.501 [DEBUG] [Thread-6577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:08:28.501 [DEBUG] [Thread-6577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:08:28.502 [DEBUG] [Thread-6577] [transport.py] [_log()] Compression: none
2025-11-25T22:08:28.502 [DEBUG] [Thread-6577] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:08:28.560 [DEBUG] [Thread-6577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:08:28.560 [DEBUG] [Thread-6577] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:08:28.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:08:28.561 [DEBUG] [Thread-6577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:08:28.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:08:28.615 [DEBUG] [Thread-6577] [transport.py] [_log()] userauth is OK
2025-11-25T22:08:28.616 [DEBUG] [Thread-6577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:08:28.616 [DEBUG] [Thread-6577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:08:28.616 [DEBUG] [Thread-6577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:08:28.616 [DEBUG] [Thread-6577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:08:28.635 [INFO] [Thread-6577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:08:28.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:08:28.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:08:29.529 [DEBUG] [Thread-6577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:08:29.537 [DEBUG] [Thread-6577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:08:29.577 [DEBUG] [Thread-6577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:08:29.577 [DEBUG] [Thread-6577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:08:29.586 [DEBUG] [Thread-6577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:08:29.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:08:29.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:08:29.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:08:29.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:08:29.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:08:29.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:08:29.620 [DEBUG] [Thread-6577] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:08:30.488 [DEBUG] [Thread-6579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:38.836 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:45.548 [DEBUG] [Thread-6580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:49.280 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:50.302 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:50.303 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:08:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:08:59.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:08:59.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:08:59.694 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 8, 36), 27.85, 15.0, 0.0, 15.65, 21.13, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:09:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:08:36
2025-11-25T22:09:00.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:09:00.585 [DEBUG] [Thread-6581] [transport.py] [_log()] starting thread (client mode): 0x70d42ad0
2025-11-25T22:09:00.586 [DEBUG] [Thread-6581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:09:00.587 [DEBUG] [Thread-6582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:00.606 [DEBUG] [Thread-6581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:09:00.606 [INFO] [Thread-6581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:09:00.609 [DEBUG] [Thread-6581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] client lang: <none>
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] server lang: <none>
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] kex follows: False
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] Compression: none
2025-11-25T22:09:00.610 [DEBUG] [Thread-6581] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:09:00.628 [DEBUG] [Thread-6581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:09:00.628 [DEBUG] [Thread-6581] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:09:00.629 [DEBUG] [Thread-6581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:09:00.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:09:00.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:09:00.631 [DEBUG] [Thread-6581] [transport.py] [_log()] userauth is OK
2025-11-25T22:09:00.631 [DEBUG] [Thread-6581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:09:00.631 [DEBUG] [Thread-6581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:09:00.631 [DEBUG] [Thread-6581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:09:00.631 [DEBUG] [Thread-6581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:09:00.653 [INFO] [Thread-6581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:09:00.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:09:01.295 [DEBUG] [Thread-6581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:09:01.295 [DEBUG] [Thread-6581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:09:01.296 [DEBUG] [Thread-6581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:09:01.337 [DEBUG] [Thread-6581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:09:01.337 [DEBUG] [Thread-6581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:09:01.341 [DEBUG] [Thread-6581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:09:01.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:09:01.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:09:01.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:09:01.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:09:01.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:09:01.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:09:01.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:09:01.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:09:01.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:09:01.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.839334 -999.00  +20.90   8.60     20   -2.50 1 1 1 1 1     0    0 23.53 -1.62 ZNESW 10.9 8.6 160.2 11.4 20.6 -25.9 20.6 -25.4 20.4 -24.1 20.6 -24.9
2025-11-25T22:09:01.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:09:01.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:09:01.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.839334
2025-11-25T22:09:01.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:09:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:09:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:09:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:09:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:09:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:08:36', tmtdew=27.85, humidity=15.0, cloud=0.0, wind=15.65, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:08:36', seeing=1.18, atlas_timestamp='2025-11-25T20:08:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:09:01.370 [DEBUG] [Thread-6581] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:09:01.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:09:01.473 [DEBUG] [Thread-6585] [transport.py] [_log()] starting thread (client mode): 0x70d010c0
2025-11-25T22:09:01.473 [DEBUG] [Thread-6585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:09:01.488 [DEBUG] [Thread-6585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:09:01.488 [INFO] [Thread-6585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] client lang: <none>
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] server lang: <none>
2025-11-25T22:09:01.496 [DEBUG] [Thread-6585] [transport.py] [_log()] kex follows: False
2025-11-25T22:09:01.497 [DEBUG] [Thread-6585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:09:01.497 [DEBUG] [Thread-6585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:09:01.497 [DEBUG] [Thread-6585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:09:01.497 [DEBUG] [Thread-6585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:09:01.497 [DEBUG] [Thread-6585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:09:01.497 [DEBUG] [Thread-6585] [transport.py] [_log()] Compression: none
2025-11-25T22:09:01.497 [DEBUG] [Thread-6585] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:09:01.555 [DEBUG] [Thread-6585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:09:01.556 [DEBUG] [Thread-6585] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:09:01.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:09:01.557 [DEBUG] [Thread-6585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:09:01.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:09:01.612 [DEBUG] [Thread-6585] [transport.py] [_log()] userauth is OK
2025-11-25T22:09:01.612 [DEBUG] [Thread-6585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:09:01.612 [DEBUG] [Thread-6585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:09:01.612 [DEBUG] [Thread-6585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:09:01.612 [DEBUG] [Thread-6585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:09:01.632 [INFO] [Thread-6585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:09:01.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:09:01.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:09:02.525 [DEBUG] [Thread-6585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:09:02.525 [DEBUG] [Thread-6585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:09:02.574 [DEBUG] [Thread-6585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:09:02.574 [DEBUG] [Thread-6585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:09:02.583 [DEBUG] [Thread-6585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:09:02.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:09: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')
2025-11-25T22:09:02.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:09:02.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:09:02.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:09:02.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:09:02.620 [DEBUG] [Thread-6585] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:09:02.825 [DEBUG] [Thread-6587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:10.093 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:15.614 [DEBUG] [Thread-6588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:20.511 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:30.658 [DEBUG] [Thread-6589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:30.925 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:32.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:09:32.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:09:32.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:09:33.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 9, 8), 27.87, 14.99, 0.0, 16.41, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:09:33.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:09:08
2025-11-25T22:09:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:09:33.560 [DEBUG] [Thread-6590] [transport.py] [_log()] starting thread (client mode): 0x70d77be0
2025-11-25T22:09:33.560 [DEBUG] [Thread-6590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:09:33.580 [DEBUG] [Thread-6590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:09:33.580 [INFO] [Thread-6590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] client lang: <none>
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] server lang: <none>
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] kex follows: False
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:09:33.583 [DEBUG] [Thread-6590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:09:33.584 [DEBUG] [Thread-6590] [transport.py] [_log()] Compression: none
2025-11-25T22:09:33.584 [DEBUG] [Thread-6590] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:09:33.601 [DEBUG] [Thread-6590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:09:33.601 [DEBUG] [Thread-6590] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:09:33.602 [DEBUG] [Thread-6590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:09:33.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:09:33.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:09:33.604 [DEBUG] [Thread-6590] [transport.py] [_log()] userauth is OK
2025-11-25T22:09:33.604 [DEBUG] [Thread-6590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:09:33.604 [DEBUG] [Thread-6590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:09:33.604 [DEBUG] [Thread-6590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:09:33.605 [DEBUG] [Thread-6590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:09:33.629 [INFO] [Thread-6590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:09:33.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:09:34.276 [DEBUG] [Thread-6590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:09:34.276 [DEBUG] [Thread-6590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:09:34.276 [DEBUG] [Thread-6590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:09:34.317 [DEBUG] [Thread-6590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:09:34.317 [DEBUG] [Thread-6590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:09:34.320 [DEBUG] [Thread-6590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:09:34.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:09:34.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:09:34.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:09:34.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:09:34.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:09:34.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:09:34.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:09:34.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:09:34.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:09:34.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.839682 -999.00  +20.80   7.77     20   -2.50 1 1 1 1 1     0    0 23.17 -2.50 ZNESW 6.6 7.8 167.6 11.8 20.7 -26.1 20.7 -25.4 20.4 -24.2 20.6 -25.2
2025-11-25T22:09:34.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:09:34.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:09:34.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.839682
2025-11-25T22:09:34.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:09:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:09:34.347 [DEBUG] [Thread-6590] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:09:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:09:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:09:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:09:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:09:08', tmtdew=27.87, humidity=14.99, cloud=0.0, wind=16.41, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:09:08', seeing=1.18, atlas_timestamp='2025-11-25T20:09:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.03725000000000023, 0.009249999999999758, -0.008500000000001506, -0.037499999999999645, 0.06975000000000087, 0.004999999999999005, 0.025249999999999773, 0.010500000000000398, 0.008000000000000895, 0.036749999999999616, 0.01699999999999946, 0.08999999999999986, 0.10325000000000095, 0.019000000000000128, -0.002000000000000668, 0.05224999999999902, 0.06450000000000067, 0.06199999999999939, -0.0017500000000012506, 0.08799999999999919, 0.1092499999999994, -0.018749999999998934, 0.01875000000000071, -0.008500000000001506, 0.04049999999999976, 0.04875000000000007, 0.10299999999999976, 0.08650000000000091, -0.022999999999999687, 0.10100000000000087, 0.0, -0.022750000000002046], zp_timestamp='2025-11-25T20:01:00')
2025-11-25T22:09:34.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:09:34.442 [DEBUG] [Thread-6593] [transport.py] [_log()] starting thread (client mode): 0x70da5840
2025-11-25T22:09:34.442 [DEBUG] [Thread-6593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:09:34.457 [DEBUG] [Thread-6593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:09:34.457 [INFO] [Thread-6593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:09:34.464 [DEBUG] [Thread-6593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] client lang: <none>
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] server lang: <none>
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] kex follows: False
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] Compression: none
2025-11-25T22:09:34.465 [DEBUG] [Thread-6593] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:09:34.522 [DEBUG] [Thread-6593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:09:34.522 [DEBUG] [Thread-6593] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:09:34.523 [DEBUG] [Thread-6593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:09:34.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:09:34.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:09:34.579 [DEBUG] [Thread-6593] [transport.py] [_log()] userauth is OK
2025-11-25T22:09:34.579 [DEBUG] [Thread-6593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:09:34.579 [DEBUG] [Thread-6593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:09:34.580 [DEBUG] [Thread-6593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:09:34.580 [DEBUG] [Thread-6593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:09:34.599 [INFO] [Thread-6593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:09:34.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:09:34.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:09:35.430 [DEBUG] [Thread-6593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:09:35.430 [DEBUG] [Thread-6593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:09:35.478 [DEBUG] [Thread-6593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:09:35.478 [DEBUG] [Thread-6593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:09:35.487 [DEBUG] [Thread-6593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:09:35.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:09:35.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:09:35.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:09:35.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:09:35.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:09:35.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:09:35.523 [DEBUG] [Thread-6593] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:09:41.320 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:45.692 [DEBUG] [Thread-6595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:50.505 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:50.506 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:09:51.757 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:00.739 [DEBUG] [Thread-6596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:02.152 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:02.909 [DEBUG] [Thread-6597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:05.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:10:05.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:10:05.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:10:06.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 9, 40), 27.98, 14.35, 0.0, 13.97, 21.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:10:06.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:09:40
2025-11-25T22:10:06.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:10:06.467 [DEBUG] [Thread-6598] [transport.py] [_log()] starting thread (client mode): 0x70d02050
2025-11-25T22:10:06.467 [DEBUG] [Thread-6598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:10:06.486 [DEBUG] [Thread-6598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:10:06.486 [INFO] [Thread-6598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:10:06.489 [DEBUG] [Thread-6598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] client lang: <none>
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] server lang: <none>
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] kex follows: False
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:10:06.490 [DEBUG] [Thread-6598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:10:06.491 [DEBUG] [Thread-6598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:10:06.491 [DEBUG] [Thread-6598] [transport.py] [_log()] Compression: none
2025-11-25T22:10:06.491 [DEBUG] [Thread-6598] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:10:06.508 [DEBUG] [Thread-6598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:10:06.509 [DEBUG] [Thread-6598] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:10:06.509 [DEBUG] [Thread-6598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:10:06.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:10:06.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:10:06.512 [DEBUG] [Thread-6598] [transport.py] [_log()] userauth is OK
2025-11-25T22:10:06.512 [DEBUG] [Thread-6598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:10:06.512 [DEBUG] [Thread-6598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:10:06.512 [DEBUG] [Thread-6598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:10:06.512 [DEBUG] [Thread-6598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:10:06.538 [INFO] [Thread-6598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:10:06.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:10:07.161 [DEBUG] [Thread-6598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:10:07.162 [DEBUG] [Thread-6598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:10:07.162 [DEBUG] [Thread-6598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:10:07.202 [DEBUG] [Thread-6598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:10:07.202 [DEBUG] [Thread-6598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:10:07.205 [DEBUG] [Thread-6598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:10:07.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:10:07.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:10:07.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:10:07.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:10:07.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:10:07.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:10:07.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:10:07.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:10:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:10:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.840029 -999.00  +20.70   6.46     20   -2.60 1 1 1 1 1     0    0 23.10 -3.56 ZNESW 6.7 6.5 160.2 8.7 20.6 -26.1 20.6 -25.6 20.4 -24.3 20.5 -25.3
2025-11-25T22:10:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:10:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:10:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.840029
2025-11-25T22:10:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:10:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:10:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:10:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:10:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:10:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:09:40', tmtdew=27.98, humidity=14.35, cloud=0.0, wind=13.97, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:09:40', seeing=1.24, atlas_timestamp='2025-11-25T20:09:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.0072499999999990905, 0.04925000000000068, 0.024499999999999744, 0.03550000000000075, 0.07025000000000148, -0.0024999999999995026, 0.03775000000000084, 0.045499999999998764, -0.0034999999999989484, 0.011749999999999261, -0.029500000000000526, 0.06599999999999895, 0.0702499999999997, -0.009000000000000341, -0.02000000000000135, 0.004249999999998977, 0.05850000000000044, 0.04699999999999882, -0.04275000000000162, 0.09849999999999781, 0.044249999999998124, 0.01925000000000132, 0.024250000000000327, -0.006000000000000227, 0.025000000000000355, 0.05975000000000108, 0.09699999999999953, 0.06300000000000061, -0.0045000000000001705, 0.06600000000000072, 0.018499999999999517, -0.06225000000000058], zp_timestamp='2025-11-25T20:06:00')
2025-11-25T22:10:07.229 [DEBUG] [Thread-6598] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:10:07.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:10:07.343 [DEBUG] [Thread-6601] [transport.py] [_log()] starting thread (client mode): 0x70d7e320
2025-11-25T22:10:07.343 [DEBUG] [Thread-6601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:10:07.357 [DEBUG] [Thread-6601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:10:07.357 [INFO] [Thread-6601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] client lang: <none>
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] server lang: <none>
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] kex follows: False
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:10:07.365 [DEBUG] [Thread-6601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:10:07.366 [DEBUG] [Thread-6601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:10:07.366 [DEBUG] [Thread-6601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:10:07.366 [DEBUG] [Thread-6601] [transport.py] [_log()] Compression: none
2025-11-25T22:10:07.366 [DEBUG] [Thread-6601] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:10:07.422 [DEBUG] [Thread-6601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:10:07.423 [DEBUG] [Thread-6601] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:10:07.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:10:07.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:10:07.424 [DEBUG] [Thread-6601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:10:07.479 [DEBUG] [Thread-6601] [transport.py] [_log()] userauth is OK
2025-11-25T22:10:07.479 [DEBUG] [Thread-6601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:10:07.479 [DEBUG] [Thread-6601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:10:07.479 [DEBUG] [Thread-6601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:10:07.479 [DEBUG] [Thread-6601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:10:07.501 [INFO] [Thread-6601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:10:07.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:10:07.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:10:08.390 [DEBUG] [Thread-6601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:10:08.390 [DEBUG] [Thread-6601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:10:08.437 [DEBUG] [Thread-6601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:10:08.438 [DEBUG] [Thread-6601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:10:08.447 [DEBUG] [Thread-6601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:10:08.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:10:08.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:10: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
2025-11-25T22:10:08.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:10:08.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:10:08.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:10:08.486 [DEBUG] [Thread-6601] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:10:12.547 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:15.770 [DEBUG] [Thread-6603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:22.944 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:30.826 [DEBUG] [Thread-6604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:33.341 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:10:38.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:10:38.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:10:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 10, 12), 28.02, 14.34, 0.0, 14.72, 21.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:10:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:10:12
2025-11-25T22:10:39.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:10:39.432 [DEBUG] [Thread-6605] [transport.py] [_log()] starting thread (client mode): 0x70d43df0
2025-11-25T22:10:39.432 [DEBUG] [Thread-6605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:10:39.451 [DEBUG] [Thread-6605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:10:39.452 [INFO] [Thread-6605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] client lang: <none>
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] server lang: <none>
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] kex follows: False
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] Compression: none
2025-11-25T22:10:39.455 [DEBUG] [Thread-6605] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:10:39.463 [DEBUG] [Thread-6605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:10:39.464 [DEBUG] [Thread-6605] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:10:39.464 [DEBUG] [Thread-6605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:10:39.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:10:39.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:10:39.466 [DEBUG] [Thread-6605] [transport.py] [_log()] userauth is OK
2025-11-25T22:10:39.466 [DEBUG] [Thread-6605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:10:39.466 [DEBUG] [Thread-6605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:10:39.466 [DEBUG] [Thread-6605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:10:39.466 [DEBUG] [Thread-6605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:10:39.491 [INFO] [Thread-6605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:10:39.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:10:40.126 [DEBUG] [Thread-6605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:10:40.127 [DEBUG] [Thread-6605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:10:40.127 [DEBUG] [Thread-6605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:10:40.168 [DEBUG] [Thread-6605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:10:40.168 [DEBUG] [Thread-6605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:10:40.172 [DEBUG] [Thread-6605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:10:40.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:10:40.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:10:40.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:10:40.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:10:40.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:10:40.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:10:40.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:10:40.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:10:40.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:10:40.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.840376 -999.00  +20.70   6.70     20   -2.50 1 1 1 1 1     0    0 23.01 -4.71 ZNESW 6.4 6.7 171.2 7.8 20.6 -26.0 20.6 -25.4 20.3 -24.2 20.5 -25.2
2025-11-25T22:10:40.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:10:40.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:10:40.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.840376
2025-11-25T22:10:40.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:10:40.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:10:40.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:10:40.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:10:40.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:10:40.199 [DEBUG] [Thread-6605] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:10:40.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:10:12', tmtdew=28.02, humidity=14.34, cloud=0.0, wind=14.72, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:10:12', seeing=1.65, atlas_timestamp='2025-11-25T20:10:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.0072499999999990905, 0.04925000000000068, 0.024499999999999744, 0.03550000000000075, 0.07025000000000148, -0.0024999999999995026, 0.03775000000000084, 0.045499999999998764, -0.0034999999999989484, 0.011749999999999261, -0.029500000000000526, 0.06599999999999895, 0.0702499999999997, -0.009000000000000341, -0.02000000000000135, 0.004249999999998977, 0.05850000000000044, 0.04699999999999882, -0.04275000000000162, 0.09849999999999781, 0.044249999999998124, 0.01925000000000132, 0.024250000000000327, -0.006000000000000227, 0.025000000000000355, 0.05975000000000108, 0.09699999999999953, 0.06300000000000061, -0.0045000000000001705, 0.06600000000000072, 0.018499999999999517, -0.06225000000000058], zp_timestamp='2025-11-25T20:06:00')
2025-11-25T22:10:40.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:10:40.294 [DEBUG] [Thread-6608] [transport.py] [_log()] starting thread (client mode): 0x70d75a50
2025-11-25T22:10:40.294 [DEBUG] [Thread-6608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:10:40.308 [DEBUG] [Thread-6608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:10:40.308 [INFO] [Thread-6608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] client lang: <none>
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] server lang: <none>
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] kex follows: False
2025-11-25T22:10:40.316 [DEBUG] [Thread-6608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:10:40.317 [DEBUG] [Thread-6608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:10:40.317 [DEBUG] [Thread-6608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:10:40.317 [DEBUG] [Thread-6608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:10:40.317 [DEBUG] [Thread-6608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:10:40.317 [DEBUG] [Thread-6608] [transport.py] [_log()] Compression: none
2025-11-25T22:10:40.317 [DEBUG] [Thread-6608] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:10:40.375 [DEBUG] [Thread-6608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:10:40.376 [DEBUG] [Thread-6608] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:10:40.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:10:40.377 [DEBUG] [Thread-6608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:10:40.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:10:40.431 [DEBUG] [Thread-6608] [transport.py] [_log()] userauth is OK
2025-11-25T22:10:40.431 [DEBUG] [Thread-6608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:10:40.431 [DEBUG] [Thread-6608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:10:40.432 [DEBUG] [Thread-6608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:10:40.432 [DEBUG] [Thread-6608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:10:40.454 [INFO] [Thread-6608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:10:40.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:10:40.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:10:41.281 [DEBUG] [Thread-6608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:10:41.282 [DEBUG] [Thread-6608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:10:41.330 [DEBUG] [Thread-6608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:10:41.330 [DEBUG] [Thread-6608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:10:41.339 [DEBUG] [Thread-6608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:10:41.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:10:41.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:10:41.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:10:41.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:10:41.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:10:41.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:10:41.376 [DEBUG] [Thread-6608] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:10:43.754 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:45.858 [DEBUG] [Thread-6610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:50.706 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:50.707 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:10:54.170 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:00.906 [DEBUG] [Thread-6611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:02.962 [DEBUG] [Thread-6612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:04.587 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:11:11.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:11:11.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:11:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 10, 44), 28.08, 14.22, 0.0, 9.3, 21.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:11:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:10:44
2025-11-25T22:11:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:11:12.337 [DEBUG] [Thread-6613] [transport.py] [_log()] starting thread (client mode): 0x70da5510
2025-11-25T22:11:12.337 [DEBUG] [Thread-6613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:11:12.357 [DEBUG] [Thread-6613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:11:12.357 [INFO] [Thread-6613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:11:12.361 [DEBUG] [Thread-6613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:11:12.361 [DEBUG] [Thread-6613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:11:12.361 [DEBUG] [Thread-6613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:11:12.361 [DEBUG] [Thread-6613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:11:12.361 [DEBUG] [Thread-6613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:11:12.361 [DEBUG] [Thread-6613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:11:12.361 [DEBUG] [Thread-6613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] client lang: <none>
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] server lang: <none>
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] kex follows: False
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] Compression: none
2025-11-25T22:11:12.362 [DEBUG] [Thread-6613] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:11:12.380 [DEBUG] [Thread-6613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:11:12.380 [DEBUG] [Thread-6613] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:11:12.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:11:12.381 [DEBUG] [Thread-6613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:11:12.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:11:12.383 [DEBUG] [Thread-6613] [transport.py] [_log()] userauth is OK
2025-11-25T22:11:12.383 [DEBUG] [Thread-6613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:11:12.383 [DEBUG] [Thread-6613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:11:12.384 [DEBUG] [Thread-6613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:11:12.384 [DEBUG] [Thread-6613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:11:12.409 [INFO] [Thread-6613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:11:12.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:11:12.987 [DEBUG] [Thread-6613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:11:12.987 [DEBUG] [Thread-6613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:11:12.988 [DEBUG] [Thread-6613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:11:13.028 [DEBUG] [Thread-6613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:11:13.028 [DEBUG] [Thread-6613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:11:13.031 [DEBUG] [Thread-6613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:11:13.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:11:13.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:11:13.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:11:13.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:11:13.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:11:13.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:11:13.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:11:13.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:11:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:11:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.840723 -999.00  +20.70   6.47     20   -2.50 1 1 1 1 1     0    0 23.25 -6.01 ZNESW 6.2 6.5 159.0 8.1 20.6 -26.0 20.6 -25.4 20.3 -24.2 20.6 -25.1
2025-11-25T22:11:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:11:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:11:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.840723
2025-11-25T22:11:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:11:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:11:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:11:13.058 [DEBUG] [Thread-6613] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:11:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:11:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:11:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:10:44', tmtdew=28.08, humidity=14.22, cloud=0.0, wind=9.3, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:10:44', seeing=1.25, atlas_timestamp='2025-11-25T20:10:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.0072499999999990905, 0.04925000000000068, 0.024499999999999744, 0.03550000000000075, 0.07025000000000148, -0.0024999999999995026, 0.03775000000000084, 0.045499999999998764, -0.0034999999999989484, 0.011749999999999261, -0.029500000000000526, 0.06599999999999895, 0.0702499999999997, -0.009000000000000341, -0.02000000000000135, 0.004249999999998977, 0.05850000000000044, 0.04699999999999882, -0.04275000000000162, 0.09849999999999781, 0.044249999999998124, 0.01925000000000132, 0.024250000000000327, -0.006000000000000227, 0.025000000000000355, 0.05975000000000108, 0.09699999999999953, 0.06300000000000061, -0.0045000000000001705, 0.06600000000000072, 0.018499999999999517, -0.06225000000000058], zp_timestamp='2025-11-25T20:06:00')
2025-11-25T22:11:13.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:11:13.154 [DEBUG] [Thread-6616] [transport.py] [_log()] starting thread (client mode): 0x7374eb90
2025-11-25T22:11:13.154 [DEBUG] [Thread-6616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:11:13.168 [DEBUG] [Thread-6616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:11:13.169 [INFO] [Thread-6616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:11:13.176 [DEBUG] [Thread-6616] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:11:13.176 [DEBUG] [Thread-6616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:11:13.176 [DEBUG] [Thread-6616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:11:13.176 [DEBUG] [Thread-6616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:11:13.176 [DEBUG] [Thread-6616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:11:13.176 [DEBUG] [Thread-6616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:11:13.177 [DEBUG] [Thread-6616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:11:13.177 [DEBUG] [Thread-6616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:11:13.177 [DEBUG] [Thread-6616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:11:13.177 [DEBUG] [Thread-6616] [transport.py] [_log()] client lang: <none>
2025-11-25T22:11:13.177 [DEBUG] [Thread-6616] [transport.py] [_log()] server lang: <none>
2025-11-25T22:11:13.177 [DEBUG] [Thread-6616] [transport.py] [_log()] kex follows: False
2025-11-25T22:11:13.177 [DEBUG] [Thread-6616] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:11:13.177 [DEBUG] [Thread-6616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:11:13.177 [DEBUG] [Thread-6616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:11:13.178 [DEBUG] [Thread-6616] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:11:13.178 [DEBUG] [Thread-6616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:11:13.178 [DEBUG] [Thread-6616] [transport.py] [_log()] Compression: none
2025-11-25T22:11:13.178 [DEBUG] [Thread-6616] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:11:13.234 [DEBUG] [Thread-6616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:11:13.235 [DEBUG] [Thread-6616] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:11:13.235 [DEBUG] [Thread-6616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:11:13.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:11:13.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:11:13.291 [DEBUG] [Thread-6616] [transport.py] [_log()] userauth is OK
2025-11-25T22:11:13.291 [DEBUG] [Thread-6616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:11:13.291 [DEBUG] [Thread-6616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:11:13.291 [DEBUG] [Thread-6616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:11:13.291 [DEBUG] [Thread-6616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:11:13.309 [INFO] [Thread-6616] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:11:13.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:11:13.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:11:14.152 [DEBUG] [Thread-6616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:11:14.153 [DEBUG] [Thread-6616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:11:14.201 [DEBUG] [Thread-6616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:11:14.201 [DEBUG] [Thread-6616] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:11:14.212 [DEBUG] [Thread-6616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:11:14.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:11:14.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:11:14.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:11:14.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:11:14.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:11:14.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:11:14.259 [DEBUG] [Thread-6616] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:11:14.986 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:15.939 [DEBUG] [Thread-6618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:25.362 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:30.987 [DEBUG] [Thread-6619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:35.773 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:44.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:11:44.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:11:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:11:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 11, 16), 28.08, 14.22, 0.0, 10.46, 21.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:11:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:11:16
2025-11-25T22:11:45.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:11:45.253 [DEBUG] [Thread-6620] [transport.py] [_log()] starting thread (client mode): 0x70d391b0
2025-11-25T22:11:45.253 [DEBUG] [Thread-6620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:11:45.273 [DEBUG] [Thread-6620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:11:45.273 [INFO] [Thread-6620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:11:45.276 [DEBUG] [Thread-6620] [transport.py] [_log()] client lang: <none>
2025-11-25T22:11:45.277 [DEBUG] [Thread-6620] [transport.py] [_log()] server lang: <none>
2025-11-25T22:11:45.277 [DEBUG] [Thread-6620] [transport.py] [_log()] kex follows: False
2025-11-25T22:11:45.277 [DEBUG] [Thread-6620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:11:45.277 [DEBUG] [Thread-6620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:11:45.277 [DEBUG] [Thread-6620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:11:45.277 [DEBUG] [Thread-6620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:11:45.277 [DEBUG] [Thread-6620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:11:45.277 [DEBUG] [Thread-6620] [transport.py] [_log()] Compression: none
2025-11-25T22:11:45.277 [DEBUG] [Thread-6620] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:11:45.292 [DEBUG] [Thread-6620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:11:45.293 [DEBUG] [Thread-6620] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:11:45.293 [DEBUG] [Thread-6620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:11:45.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:11:45.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:11:45.293 [DEBUG] [Thread-6620] [transport.py] [_log()] userauth is OK
2025-11-25T22:11:45.293 [DEBUG] [Thread-6620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:11:45.293 [DEBUG] [Thread-6620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:11:45.293 [DEBUG] [Thread-6620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:11:45.294 [DEBUG] [Thread-6620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:11:45.302 [INFO] [Thread-6620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:11:45.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:11:45.942 [DEBUG] [Thread-6620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:11:45.943 [DEBUG] [Thread-6620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:11:45.943 [DEBUG] [Thread-6620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:11:45.984 [DEBUG] [Thread-6620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:11:45.984 [DEBUG] [Thread-6620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:11:45.989 [DEBUG] [Thread-6620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:11:46.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:11:46.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:11:46.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:11:46.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:11:46.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:11:46.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:11:46.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:11:46.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:11:46.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:11:46.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.841071 -999.00  +20.80   5.72     20   -2.50 1 1 1 1 1     0    0 23.23 -5.93 ZNESW 7.8 5.7 154.6 8.4 20.6 -26.0 20.6 -25.3 20.3 -24.2 20.5 -25.0
2025-11-25T22:11:46.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:11:46.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:11:46.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.841071
2025-11-25T22:11:46.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:11:46.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:11:46.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:11:46.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:11:46.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:11:46.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:11:16', tmtdew=28.08, humidity=14.22, cloud=0.0, wind=10.46, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:11:16', seeing=1.25, atlas_timestamp='2025-11-25T20:11:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.0072499999999990905, 0.04925000000000068, 0.024499999999999744, 0.03550000000000075, 0.07025000000000148, -0.0024999999999995026, 0.03775000000000084, 0.045499999999998764, -0.0034999999999989484, 0.011749999999999261, -0.029500000000000526, 0.06599999999999895, 0.0702499999999997, -0.009000000000000341, -0.02000000000000135, 0.004249999999998977, 0.05850000000000044, 0.04699999999999882, -0.04275000000000162, 0.09849999999999781, 0.044249999999998124, 0.01925000000000132, 0.024250000000000327, -0.006000000000000227, 0.025000000000000355, 0.05975000000000108, 0.09699999999999953, 0.06300000000000061, -0.0045000000000001705, 0.06600000000000072, 0.018499999999999517, -0.06225000000000058], zp_timestamp='2025-11-25T20:06:00')
2025-11-25T22:11:46.019 [DEBUG] [Thread-6620] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:11:46.023 [DEBUG] [Thread-6623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:46.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:11:46.114 [DEBUG] [Thread-6624] [transport.py] [_log()] starting thread (client mode): 0x70d42110
2025-11-25T22:11:46.114 [DEBUG] [Thread-6624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:11:46.129 [DEBUG] [Thread-6624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:11:46.129 [INFO] [Thread-6624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] client lang: <none>
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] server lang: <none>
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] kex follows: False
2025-11-25T22:11:46.137 [DEBUG] [Thread-6624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:11:46.138 [DEBUG] [Thread-6624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:11:46.138 [DEBUG] [Thread-6624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:11:46.138 [DEBUG] [Thread-6624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:11:46.138 [DEBUG] [Thread-6624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:11:46.138 [DEBUG] [Thread-6624] [transport.py] [_log()] Compression: none
2025-11-25T22:11:46.138 [DEBUG] [Thread-6624] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:11:46.177 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:46.199 [DEBUG] [Thread-6624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:11:46.200 [DEBUG] [Thread-6624] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:11:46.200 [DEBUG] [Thread-6624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:11:46.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:11:46.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:11:46.255 [DEBUG] [Thread-6624] [transport.py] [_log()] userauth is OK
2025-11-25T22:11:46.256 [DEBUG] [Thread-6624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:11:46.256 [DEBUG] [Thread-6624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:11:46.256 [DEBUG] [Thread-6624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:11:46.256 [DEBUG] [Thread-6624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:11:46.274 [INFO] [Thread-6624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:11:46.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:11:46.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:11:47.151 [DEBUG] [Thread-6624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:11:47.151 [DEBUG] [Thread-6624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:11:47.199 [DEBUG] [Thread-6624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:11:47.199 [DEBUG] [Thread-6624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:11:47.208 [DEBUG] [Thread-6624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:11:47.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:11:47.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:11:47.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:11:47.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:11:47.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:11:47.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:11:47.245 [DEBUG] [Thread-6624] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:11:50.911 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:50.912 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:11:56.572 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:01.070 [DEBUG] [Thread-6626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:03.025 [DEBUG] [Thread-6627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:06.966 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:16.104 [DEBUG] [Thread-6628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:17.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:12:17.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:12:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:12:17.434 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:17.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 11, 48), 27.97, 14.84, 0.0, 14.33, 21.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:12:17.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:11:48
2025-11-25T22:12:18.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:12:18.256 [DEBUG] [Thread-6629] [transport.py] [_log()] starting thread (client mode): 0x70d6ba60
2025-11-25T22:12:18.256 [DEBUG] [Thread-6629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:12:18.276 [DEBUG] [Thread-6629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:12:18.276 [INFO] [Thread-6629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] client lang: <none>
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] server lang: <none>
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] kex follows: False
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] Compression: none
2025-11-25T22:12:18.278 [DEBUG] [Thread-6629] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:12:18.288 [DEBUG] [Thread-6629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:12:18.288 [DEBUG] [Thread-6629] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:12:18.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:12:18.289 [DEBUG] [Thread-6629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:12:18.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:12:18.289 [DEBUG] [Thread-6629] [transport.py] [_log()] userauth is OK
2025-11-25T22:12:18.289 [DEBUG] [Thread-6629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:12:18.289 [DEBUG] [Thread-6629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:12:18.289 [DEBUG] [Thread-6629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:12:18.289 [DEBUG] [Thread-6629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:12:18.307 [INFO] [Thread-6629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:12:18.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:12:18.963 [DEBUG] [Thread-6629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:12:18.963 [DEBUG] [Thread-6629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:12:18.963 [DEBUG] [Thread-6629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:12:19.005 [DEBUG] [Thread-6629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:12:19.005 [DEBUG] [Thread-6629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:12:19.007 [DEBUG] [Thread-6629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:12:19.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:12:19.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:12:19.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:12:19.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:12:19.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:12:19.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:12:19.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.841765 -999.00  +20.70   8.16     20   -2.70 1 1 1 1 1     0    0 23.02 -6.56 ZNESW 7.3 8.2 171.6 10.4 20.6 -26.1 20.6 -25.6 20.2 -24.2 20.4 -25.1
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.841765
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:12:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:11:48', tmtdew=27.97, humidity=14.84, cloud=0.0, wind=14.33, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:11:48', seeing=1.29, atlas_timestamp='2025-11-25T20:12:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.0072499999999990905, 0.04925000000000068, 0.024499999999999744, 0.03550000000000075, 0.07025000000000148, -0.0024999999999995026, 0.03775000000000084, 0.045499999999998764, -0.0034999999999989484, 0.011749999999999261, -0.029500000000000526, 0.06599999999999895, 0.0702499999999997, -0.009000000000000341, -0.02000000000000135, 0.004249999999998977, 0.05850000000000044, 0.04699999999999882, -0.04275000000000162, 0.09849999999999781, 0.044249999999998124, 0.01925000000000132, 0.024250000000000327, -0.006000000000000227, 0.025000000000000355, 0.05975000000000108, 0.09699999999999953, 0.06300000000000061, -0.0045000000000001705, 0.06600000000000072, 0.018499999999999517, -0.06225000000000058], zp_timestamp='2025-11-25T20:06:00')
2025-11-25T22:12:19.024 [DEBUG] [Thread-6629] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:12:19.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:12:19.109 [DEBUG] [Thread-6632] [transport.py] [_log()] starting thread (client mode): 0x70d57fa0
2025-11-25T22:12:19.109 [DEBUG] [Thread-6632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:12:19.123 [DEBUG] [Thread-6632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:12:19.123 [INFO] [Thread-6632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] client lang: <none>
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] server lang: <none>
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] kex follows: False
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] Compression: none
2025-11-25T22:12:19.131 [DEBUG] [Thread-6632] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:12:19.186 [DEBUG] [Thread-6632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:12:19.186 [DEBUG] [Thread-6632] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:12:19.186 [DEBUG] [Thread-6632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:12:19.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:12:19.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:12:19.243 [DEBUG] [Thread-6632] [transport.py] [_log()] userauth is OK
2025-11-25T22:12:19.243 [DEBUG] [Thread-6632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:12:19.243 [DEBUG] [Thread-6632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:12:19.243 [DEBUG] [Thread-6632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:12:19.243 [DEBUG] [Thread-6632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:12:19.260 [INFO] [Thread-6632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:12:19.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:12:19.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:12:20.103 [DEBUG] [Thread-6632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:12:20.103 [DEBUG] [Thread-6632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:12:20.151 [DEBUG] [Thread-6632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:12:20.151 [DEBUG] [Thread-6632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:12:20.160 [DEBUG] [Thread-6632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:12:20.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:12:20.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:12:20.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:12:20.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:12:20.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:12:20.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:12:20.191 [DEBUG] [Thread-6632] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:12:27.839 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:31.136 [DEBUG] [Thread-6634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:38.233 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:46.196 [DEBUG] [Thread-6635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:48.609 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:50.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:12:50.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:12:50.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:12:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 12, 20), 27.95, 14.85, 0.0, 14.95, 21.03, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:12:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:12:20
2025-11-25T22:12:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:12:51.113 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:51.114 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:12:51.148 [DEBUG] [Thread-6636] [transport.py] [_log()] starting thread (client mode): 0x70da5180
2025-11-25T22:12:51.149 [DEBUG] [Thread-6636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:12:51.168 [DEBUG] [Thread-6636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:12:51.168 [INFO] [Thread-6636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:12:51.171 [DEBUG] [Thread-6636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:12:51.171 [DEBUG] [Thread-6636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:12:51.171 [DEBUG] [Thread-6636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:12:51.171 [DEBUG] [Thread-6636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:12:51.171 [DEBUG] [Thread-6636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:12:51.171 [DEBUG] [Thread-6636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:12:51.171 [DEBUG] [Thread-6636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:12:51.171 [DEBUG] [Thread-6636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:12:51.171 [DEBUG] [Thread-6636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] client lang: <none>
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] server lang: <none>
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] kex follows: False
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] Compression: none
2025-11-25T22:12:51.172 [DEBUG] [Thread-6636] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:12:51.191 [DEBUG] [Thread-6636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:12:51.192 [DEBUG] [Thread-6636] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:12:51.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:12:51.193 [DEBUG] [Thread-6636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:12:51.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:12:51.194 [DEBUG] [Thread-6636] [transport.py] [_log()] userauth is OK
2025-11-25T22:12:51.194 [DEBUG] [Thread-6636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:12:51.195 [DEBUG] [Thread-6636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:12:51.195 [DEBUG] [Thread-6636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:12:51.195 [DEBUG] [Thread-6636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:12:51.216 [INFO] [Thread-6636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:12:51.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:12:51.843 [DEBUG] [Thread-6636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:12:51.843 [DEBUG] [Thread-6636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:12:51.843 [DEBUG] [Thread-6636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:12:51.885 [DEBUG] [Thread-6636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:12:51.885 [DEBUG] [Thread-6636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:12:51.887 [DEBUG] [Thread-6636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:12:51.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:12:51.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:12:51.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:12:51.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:12:51.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:12:51.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:12:51.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:12:51.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:12:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:12:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.842112 -999.00  +20.70  10.33     20   -2.80 1 1 1 1 1     0    0 22.91 -6.35 ZNESW 11.8 10.3 178.8 12.5 20.6 -25.7 20.6 -25.2 20.3 -24.0 20.5 -25.0
2025-11-25T22:12:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:12:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:12:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.842112
2025-11-25T22:12:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:12:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:12:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:12:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:12:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:12:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:12:20', tmtdew=27.95, humidity=14.85, cloud=0.0, wind=14.95, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:12:20', seeing=1.22, atlas_timestamp='2025-11-25T20:12:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:12:51.905 [DEBUG] [Thread-6636] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:12:52.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:12:52.016 [DEBUG] [Thread-6639] [transport.py] [_log()] starting thread (client mode): 0x70d57940
2025-11-25T22:12:52.016 [DEBUG] [Thread-6639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:12:52.031 [DEBUG] [Thread-6639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:12:52.032 [INFO] [Thread-6639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] client lang: <none>
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] server lang: <none>
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] kex follows: False
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] Compression: none
2025-11-25T22:12:52.039 [DEBUG] [Thread-6639] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:12:52.094 [DEBUG] [Thread-6639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:12:52.094 [DEBUG] [Thread-6639] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:12:52.095 [DEBUG] [Thread-6639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:12:52.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:12:52.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:12:52.151 [DEBUG] [Thread-6639] [transport.py] [_log()] userauth is OK
2025-11-25T22:12:52.151 [DEBUG] [Thread-6639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:12:52.151 [DEBUG] [Thread-6639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:12:52.151 [DEBUG] [Thread-6639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:12:52.151 [DEBUG] [Thread-6639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:12:52.166 [INFO] [Thread-6639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:12:52.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:12:52.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:12:53.018 [DEBUG] [Thread-6639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:12:53.018 [DEBUG] [Thread-6639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:12:53.066 [DEBUG] [Thread-6639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:12:53.066 [DEBUG] [Thread-6639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:12:53.074 [DEBUG] [Thread-6639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:12:53.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:12:53.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:12:53.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:12:53.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:12:53.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:12:53.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:12:53.106 [DEBUG] [Thread-6639] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:12:59.021 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:01.232 [DEBUG] [Thread-6641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:03.079 [DEBUG] [Thread-6642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:09.407 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:16.287 [DEBUG] [Thread-6643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:19.803 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:23.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:13:23.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:13:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:13:23.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 12, 52), 28.11, 14.39, 0.0, 13.75, 21.08, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:13:23.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:12:52
2025-11-25T22:13:23.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:13:24.044 [DEBUG] [Thread-6644] [transport.py] [_log()] starting thread (client mode): 0x70d55ed0
2025-11-25T22:13:24.044 [DEBUG] [Thread-6644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:13:24.065 [DEBUG] [Thread-6644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:13:24.065 [INFO] [Thread-6644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:13:24.067 [DEBUG] [Thread-6644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:13:24.067 [DEBUG] [Thread-6644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] client lang: <none>
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] server lang: <none>
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] kex follows: False
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:13:24.068 [DEBUG] [Thread-6644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:13:24.069 [DEBUG] [Thread-6644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:13:24.069 [DEBUG] [Thread-6644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:13:24.069 [DEBUG] [Thread-6644] [transport.py] [_log()] Compression: none
2025-11-25T22:13:24.069 [DEBUG] [Thread-6644] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:13:24.088 [DEBUG] [Thread-6644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:13:24.089 [DEBUG] [Thread-6644] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:13:24.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:13:24.090 [DEBUG] [Thread-6644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:13:24.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:13:24.092 [DEBUG] [Thread-6644] [transport.py] [_log()] userauth is OK
2025-11-25T22:13:24.093 [DEBUG] [Thread-6644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:13:24.093 [DEBUG] [Thread-6644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:13:24.093 [DEBUG] [Thread-6644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:13:24.093 [DEBUG] [Thread-6644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:13:24.109 [INFO] [Thread-6644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:13:24.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:13:24.684 [DEBUG] [Thread-6644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:13:24.685 [DEBUG] [Thread-6644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:13:24.685 [DEBUG] [Thread-6644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:13:24.725 [DEBUG] [Thread-6644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:13:24.725 [DEBUG] [Thread-6644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:13:24.727 [DEBUG] [Thread-6644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:13:24.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:13:24.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:13:24.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:13:24.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:13:24.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:13:24.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:13:24.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.842459 -999.00  +20.80   9.18     20   -2.80 1 1 1 1 1     0    0 22.70 -6.32 ZNESW 9.2 9.2 169.4 14.6 20.6 -25.9 20.6 -24.7 20.3 -23.9 20.5 -25.1
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.842459
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:13:24.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:12:52', tmtdew=28.11, humidity=14.39, cloud=0.0, wind=13.75, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:12:52', seeing=1.28, atlas_timestamp='2025-11-25T20:13:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:13:24.742 [DEBUG] [Thread-6644] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:13:24.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:13:24.826 [DEBUG] [Thread-6647] [transport.py] [_log()] starting thread (client mode): 0x70d54c40
2025-11-25T22:13:24.826 [DEBUG] [Thread-6647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:13:24.840 [DEBUG] [Thread-6647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:13:24.841 [INFO] [Thread-6647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] client lang: <none>
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] server lang: <none>
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] kex follows: False
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:13:24.848 [DEBUG] [Thread-6647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:13:24.849 [DEBUG] [Thread-6647] [transport.py] [_log()] Compression: none
2025-11-25T22:13:24.849 [DEBUG] [Thread-6647] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:13:24.909 [DEBUG] [Thread-6647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:13:24.909 [DEBUG] [Thread-6647] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:13:24.909 [DEBUG] [Thread-6647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:13:24.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:13:24.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:13:24.967 [DEBUG] [Thread-6647] [transport.py] [_log()] userauth is OK
2025-11-25T22:13:24.967 [DEBUG] [Thread-6647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:13:24.968 [DEBUG] [Thread-6647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:13:24.968 [DEBUG] [Thread-6647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:13:24.968 [DEBUG] [Thread-6647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:13:24.982 [INFO] [Thread-6647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:13:24.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:13:24.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:13:25.834 [DEBUG] [Thread-6647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:13:25.834 [DEBUG] [Thread-6647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:13:25.882 [DEBUG] [Thread-6647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:13:25.882 [DEBUG] [Thread-6647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:13:25.891 [DEBUG] [Thread-6647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:13:25.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:13:25.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:13:25.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:13:25.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:13:25.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:13:25.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:13:25.922 [DEBUG] [Thread-6647] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:13:30.199 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:31.323 [DEBUG] [Thread-6649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:40.599 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:46.381 [DEBUG] [Thread-6650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:51.016 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:51.315 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:51.317 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:13:55.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:13:55.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:13: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
2025-11-25T22:13:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 13, 24), 28.06, 14.44, 0.0, 13.46, 21.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:13:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:13:24
2025-11-25T22:13:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:13:56.878 [DEBUG] [Thread-6651] [transport.py] [_log()] starting thread (client mode): 0x7374e950
2025-11-25T22:13:56.878 [DEBUG] [Thread-6651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:13:56.895 [DEBUG] [Thread-6651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:13:56.895 [INFO] [Thread-6651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] client lang: <none>
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] server lang: <none>
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] kex follows: False
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] Compression: none
2025-11-25T22:13:56.897 [DEBUG] [Thread-6651] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:13:56.906 [DEBUG] [Thread-6651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:13:56.906 [DEBUG] [Thread-6651] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:13:56.906 [DEBUG] [Thread-6651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:13:56.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:13:56.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:13:56.907 [DEBUG] [Thread-6651] [transport.py] [_log()] userauth is OK
2025-11-25T22:13:56.908 [DEBUG] [Thread-6651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:13:56.908 [DEBUG] [Thread-6651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:13:56.908 [DEBUG] [Thread-6651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:13:56.908 [DEBUG] [Thread-6651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:13:56.917 [INFO] [Thread-6651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:13:56.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:13:57.492 [DEBUG] [Thread-6651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:13:57.492 [DEBUG] [Thread-6651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:13:57.492 [DEBUG] [Thread-6651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:13:57.533 [DEBUG] [Thread-6651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:13:57.533 [DEBUG] [Thread-6651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:13:57.535 [DEBUG] [Thread-6651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:13:57.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:13:57.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:13:57.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:13:57.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:13:57.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:13:57.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:13:57.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:13:57.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:13:57.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:13:57.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.842807 -999.00  +20.90   7.70     20   -2.80 1 1 1 1 1     0    0 23.35 -5.61 ZNESW 9.3 7.7 167.4 12.5 20.6 -26.0 20.6 -25.2 20.3 -24.1 20.5 -25.1
2025-11-25T22:13:57.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:13:57.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:13:57.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.842807
2025-11-25T22:13:57.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:13:57.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:13:57.550 [DEBUG] [Thread-6651] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:13:57.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:13:57.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:13:57.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:13:57.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:13:24', tmtdew=28.06, humidity=14.44, cloud=0.0, wind=13.46, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:13:24', seeing=1.28, atlas_timestamp='2025-11-25T20:13:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:13:57.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:13:57.636 [DEBUG] [Thread-6654] [transport.py] [_log()] starting thread (client mode): 0x70d036d0
2025-11-25T22:13:57.636 [DEBUG] [Thread-6654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:13:57.651 [DEBUG] [Thread-6654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:13:57.651 [INFO] [Thread-6654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] client lang: <none>
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] server lang: <none>
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] kex follows: False
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] Compression: none
2025-11-25T22:13:57.659 [DEBUG] [Thread-6654] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:13:57.718 [DEBUG] [Thread-6654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:13:57.718 [DEBUG] [Thread-6654] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:13:57.719 [DEBUG] [Thread-6654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:13:57.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:13:57.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:13:57.779 [DEBUG] [Thread-6654] [transport.py] [_log()] userauth is OK
2025-11-25T22:13:57.779 [DEBUG] [Thread-6654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:13:57.779 [DEBUG] [Thread-6654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:13:57.779 [DEBUG] [Thread-6654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:13:57.779 [DEBUG] [Thread-6654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:13:57.796 [INFO] [Thread-6654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:13:57.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:13:57.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:13:58.626 [DEBUG] [Thread-6654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:13:58.626 [DEBUG] [Thread-6654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:13:58.674 [DEBUG] [Thread-6654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:13:58.674 [DEBUG] [Thread-6654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:13:58.683 [DEBUG] [Thread-6654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:13:58.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:13:58.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:13:58.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:13:58.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:13:58.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:13:58.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:13:58.719 [DEBUG] [Thread-6654] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:14:01.419 [DEBUG] [Thread-6656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:01.436 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:03.153 [DEBUG] [Thread-6657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:11.879 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:16.470 [DEBUG] [Thread-6658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:22.310 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:14:28.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:14:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:14:29.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 13, 56), 28.09, 14.45, 0.0, 13.61, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:14:29.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:13:56
2025-11-25T22:14:29.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:14:29.734 [DEBUG] [Thread-6659] [transport.py] [_log()] starting thread (client mode): 0x70d57a60
2025-11-25T22:14:29.734 [DEBUG] [Thread-6659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:14:29.754 [DEBUG] [Thread-6659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:14:29.754 [INFO] [Thread-6659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] client lang: <none>
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] server lang: <none>
2025-11-25T22:14:29.758 [DEBUG] [Thread-6659] [transport.py] [_log()] kex follows: False
2025-11-25T22:14:29.759 [DEBUG] [Thread-6659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:14:29.759 [DEBUG] [Thread-6659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:14:29.759 [DEBUG] [Thread-6659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:14:29.759 [DEBUG] [Thread-6659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:14:29.759 [DEBUG] [Thread-6659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:14:29.759 [DEBUG] [Thread-6659] [transport.py] [_log()] Compression: none
2025-11-25T22:14:29.759 [DEBUG] [Thread-6659] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:14:29.766 [DEBUG] [Thread-6659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:14:29.766 [DEBUG] [Thread-6659] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:14:29.767 [DEBUG] [Thread-6659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:14:29.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:14:29.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:14:29.767 [DEBUG] [Thread-6659] [transport.py] [_log()] userauth is OK
2025-11-25T22:14:29.767 [DEBUG] [Thread-6659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:14:29.767 [DEBUG] [Thread-6659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:14:29.767 [DEBUG] [Thread-6659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:14:29.767 [DEBUG] [Thread-6659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:14:29.777 [INFO] [Thread-6659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:14:29.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:14:30.404 [DEBUG] [Thread-6659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:14:30.404 [DEBUG] [Thread-6659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:14:30.404 [DEBUG] [Thread-6659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:14:30.445 [DEBUG] [Thread-6659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:14:30.445 [DEBUG] [Thread-6659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:14:30.447 [DEBUG] [Thread-6659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:14:30.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:14:30.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:14:30.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:14:30.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:14:30.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:14:30.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:14:30.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:14:30.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:14:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:14:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.843154 -999.00  +20.80   9.22     19   -2.90 1 1 1 1 1     0    0 23.38 -4.24 ZNESW 9.0 9.2 169.0 14.4 20.6 -25.8 20.6 -25.3 20.2 -24.1 20.5 -25.1
2025-11-25T22:14:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:14:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:14:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.843154
2025-11-25T22:14:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:14:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:14:30.467 [DEBUG] [Thread-6659] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:14:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:14:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:14:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:14:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:13:56', tmtdew=28.09, humidity=14.45, cloud=0.0, wind=13.61, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:14:28', seeing=1.29, atlas_timestamp='2025-11-25T20:14:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:14:30.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:14:30.563 [DEBUG] [Thread-6662] [transport.py] [_log()] starting thread (client mode): 0x70d39030
2025-11-25T22:14:30.563 [DEBUG] [Thread-6662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:14:30.578 [DEBUG] [Thread-6662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:14:30.578 [INFO] [Thread-6662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] client lang: <none>
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] server lang: <none>
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] kex follows: False
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] Compression: none
2025-11-25T22:14:30.586 [DEBUG] [Thread-6662] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:14:30.644 [DEBUG] [Thread-6662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:14:30.644 [DEBUG] [Thread-6662] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:14:30.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:14:30.645 [DEBUG] [Thread-6662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:14:30.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:14:30.700 [DEBUG] [Thread-6662] [transport.py] [_log()] userauth is OK
2025-11-25T22:14:30.700 [DEBUG] [Thread-6662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:14:30.700 [DEBUG] [Thread-6662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:14:30.700 [DEBUG] [Thread-6662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:14:30.700 [DEBUG] [Thread-6662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:14:30.719 [INFO] [Thread-6662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:14:30.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:14:30.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:14:31.503 [DEBUG] [Thread-6664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:31.546 [DEBUG] [Thread-6662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:14:31.546 [DEBUG] [Thread-6662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:14:31.594 [DEBUG] [Thread-6662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:14:31.594 [DEBUG] [Thread-6662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:14:31.603 [DEBUG] [Thread-6662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:14:31.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:14:31.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:14:31.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:14:31.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:14:31.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:14:31.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:14:31.640 [DEBUG] [Thread-6662] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:14:32.714 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:43.110 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:46.553 [DEBUG] [Thread-6665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:51.519 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:51.520 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:14:53.506 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:01.583 [DEBUG] [Thread-6666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:15:01.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:15:01.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:15:02.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 14, 28), 28.05, 14.5, 0.0, 14.29, 21.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:15:02.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:14:28
2025-11-25T22:15:02.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:15:02.665 [DEBUG] [Thread-6667] [transport.py] [_log()] starting thread (client mode): 0x70d00640
2025-11-25T22:15:02.665 [DEBUG] [Thread-6667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:15:02.687 [DEBUG] [Thread-6667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:15:02.687 [INFO] [Thread-6667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:15:02.690 [DEBUG] [Thread-6667] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:15:02.690 [DEBUG] [Thread-6667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:15:02.690 [DEBUG] [Thread-6667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:15:02.690 [DEBUG] [Thread-6667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:15:02.690 [DEBUG] [Thread-6667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:15:02.690 [DEBUG] [Thread-6667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] client lang: <none>
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] server lang: <none>
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] kex follows: False
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] Compression: none
2025-11-25T22:15:02.691 [DEBUG] [Thread-6667] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:15:02.709 [DEBUG] [Thread-6667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:15:02.710 [DEBUG] [Thread-6667] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:15:02.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:15:02.711 [DEBUG] [Thread-6667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:15:02.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:15:02.713 [DEBUG] [Thread-6667] [transport.py] [_log()] userauth is OK
2025-11-25T22:15:02.713 [DEBUG] [Thread-6667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:15:02.713 [DEBUG] [Thread-6667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:15:02.713 [DEBUG] [Thread-6667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:15:02.713 [DEBUG] [Thread-6667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:15:02.735 [INFO] [Thread-6667] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:15:02.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:15:03.226 [DEBUG] [Thread-6669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:03.484 [DEBUG] [Thread-6667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:15:03.485 [DEBUG] [Thread-6667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:15:03.485 [DEBUG] [Thread-6667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:15:03.526 [DEBUG] [Thread-6667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:15:03.526 [DEBUG] [Thread-6667] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:15:03.528 [DEBUG] [Thread-6667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:15:03.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:15:03.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:15:03.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:15:03.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:15:03.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:15:03.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:15:03.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:15:03.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:15:03.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:15:03.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.843154 -999.00  +20.80   9.22     19   -2.90 1 1 1 1 1     0    0 23.38 -4.24 ZNESW 9.0 9.2 169.0 14.4 20.6 -25.8 20.6 -25.3 20.2 -24.1 20.5 -25.1
2025-11-25T22:15:03.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:15:03.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:15:03.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.843154
2025-11-25T22:15:03.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:15:03.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:15:03.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:15:03.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:15:03.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:15:03.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:14:28', tmtdew=28.05, humidity=14.5, cloud=0.0, wind=14.29, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:15:00', seeing=1.31, atlas_timestamp='2025-11-25T20:14:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:15:03.563 [DEBUG] [Thread-6667] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:15:03.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:15:03.663 [DEBUG] [Thread-6671] [transport.py] [_log()] starting thread (client mode): 0x70d38b50
2025-11-25T22:15:03.663 [DEBUG] [Thread-6671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:15:03.678 [DEBUG] [Thread-6671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:15:03.678 [INFO] [Thread-6671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:15:03.686 [DEBUG] [Thread-6671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:15:03.686 [DEBUG] [Thread-6671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:15:03.686 [DEBUG] [Thread-6671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:15:03.686 [DEBUG] [Thread-6671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:15:03.686 [DEBUG] [Thread-6671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:15:03.686 [DEBUG] [Thread-6671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:15:03.687 [DEBUG] [Thread-6671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:15:03.687 [DEBUG] [Thread-6671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:15:03.687 [DEBUG] [Thread-6671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:15:03.687 [DEBUG] [Thread-6671] [transport.py] [_log()] client lang: <none>
2025-11-25T22:15:03.687 [DEBUG] [Thread-6671] [transport.py] [_log()] server lang: <none>
2025-11-25T22:15:03.687 [DEBUG] [Thread-6671] [transport.py] [_log()] kex follows: False
2025-11-25T22:15:03.687 [DEBUG] [Thread-6671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:15:03.688 [DEBUG] [Thread-6671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:15:03.688 [DEBUG] [Thread-6671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:15:03.688 [DEBUG] [Thread-6671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:15:03.688 [DEBUG] [Thread-6671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:15:03.688 [DEBUG] [Thread-6671] [transport.py] [_log()] Compression: none
2025-11-25T22:15:03.688 [DEBUG] [Thread-6671] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:15:03.743 [DEBUG] [Thread-6671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:15:03.744 [DEBUG] [Thread-6671] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:15:03.744 [DEBUG] [Thread-6671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:15:03.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:15:03.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:15:03.799 [DEBUG] [Thread-6671] [transport.py] [_log()] userauth is OK
2025-11-25T22:15:03.800 [DEBUG] [Thread-6671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:15:03.800 [DEBUG] [Thread-6671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:15:03.800 [DEBUG] [Thread-6671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:15:03.800 [DEBUG] [Thread-6671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:15:03.820 [INFO] [Thread-6671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:15:03.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:15:03.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:15:03.903 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:04.645 [DEBUG] [Thread-6671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:15:04.645 [DEBUG] [Thread-6671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:15:04.696 [DEBUG] [Thread-6671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:15:04.697 [DEBUG] [Thread-6671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:15:04.706 [DEBUG] [Thread-6671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:15:04.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:15:04.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:15:04.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:15:04.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:15:04.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:15:04.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:15:04.741 [DEBUG] [Thread-6671] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:15:14.299 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:16.616 [DEBUG] [Thread-6673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:24.718 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:31.668 [DEBUG] [Thread-6674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:34.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:15:34.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:15:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:15:35.130 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:35.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 15, 32), 28.27, 14.3, 0.0, 12.83, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:15:35.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:15:32
2025-11-25T22:15:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:15:35.711 [DEBUG] [Thread-6675] [transport.py] [_log()] starting thread (client mode): 0x70d3a080
2025-11-25T22:15:35.711 [DEBUG] [Thread-6675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:15:35.721 [DEBUG] [Thread-6675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:15:35.721 [INFO] [Thread-6675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:15:35.724 [DEBUG] [Thread-6675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:15:35.724 [DEBUG] [Thread-6675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] client lang: <none>
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] server lang: <none>
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] kex follows: False
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] Compression: none
2025-11-25T22:15:35.725 [DEBUG] [Thread-6675] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:15:35.743 [DEBUG] [Thread-6675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:15:35.743 [DEBUG] [Thread-6675] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:15:35.744 [DEBUG] [Thread-6675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:15:35.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:15:35.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:15:35.746 [DEBUG] [Thread-6675] [transport.py] [_log()] userauth is OK
2025-11-25T22:15:35.746 [DEBUG] [Thread-6675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:15:35.746 [DEBUG] [Thread-6675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:15:35.746 [DEBUG] [Thread-6675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:15:35.746 [DEBUG] [Thread-6675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:15:35.771 [INFO] [Thread-6675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:15:35.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:15:36.363 [DEBUG] [Thread-6675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:15:36.363 [DEBUG] [Thread-6675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:15:36.363 [DEBUG] [Thread-6675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:15:36.404 [DEBUG] [Thread-6675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:15:36.404 [DEBUG] [Thread-6675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:15:36.408 [DEBUG] [Thread-6675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:15:36.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:15:36.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:15:36.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:15:36.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:15:36.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:15:36.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:15:36.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:15:36.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:15:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:15:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.843501 -999.00  +20.90   8.81     19   -3.00 1 1 1 1 1     0    0 23.09 -1.97 ZNESW 6.5 8.8 167.2 13.8 20.6 -25.8 20.6 -25.3 20.3 -24.0 20.5 -25.1
2025-11-25T22:15:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:15:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:15:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.843501
2025-11-25T22:15:36.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:15:36.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:15:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:15:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:15:36.433 [DEBUG] [Thread-6675] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:15:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:15:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:15:32', tmtdew=28.27, humidity=14.3, cloud=0.0, wind=12.83, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:15:32', seeing=1.23, atlas_timestamp='2025-11-25T20:14:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:15:36.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:15:36.528 [DEBUG] [Thread-6678] [transport.py] [_log()] starting thread (client mode): 0x70d6a950
2025-11-25T22:15:36.528 [DEBUG] [Thread-6678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:15:36.543 [DEBUG] [Thread-6678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:15:36.543 [INFO] [Thread-6678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:15:36.550 [DEBUG] [Thread-6678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] client lang: <none>
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] server lang: <none>
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] kex follows: False
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] Compression: none
2025-11-25T22:15:36.551 [DEBUG] [Thread-6678] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:15:36.611 [DEBUG] [Thread-6678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:15:36.612 [DEBUG] [Thread-6678] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:15:36.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:15:36.613 [DEBUG] [Thread-6678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:15:36.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:15:36.667 [DEBUG] [Thread-6678] [transport.py] [_log()] userauth is OK
2025-11-25T22:15:36.667 [DEBUG] [Thread-6678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:15:36.667 [DEBUG] [Thread-6678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:15:36.667 [DEBUG] [Thread-6678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:15:36.667 [DEBUG] [Thread-6678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:15:36.687 [INFO] [Thread-6678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:15:36.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:15:36.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:15:37.541 [DEBUG] [Thread-6678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:15:37.541 [DEBUG] [Thread-6678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:15:37.589 [DEBUG] [Thread-6678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:15:37.589 [DEBUG] [Thread-6678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:15:37.599 [DEBUG] [Thread-6678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:15:37.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:15:37.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:15:37.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:15:37.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:15:37.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:15:37.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:15:37.637 [DEBUG] [Thread-6678] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:15:45.543 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:46.702 [DEBUG] [Thread-6680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:51.722 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:51.723 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:15:55.960 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:01.765 [DEBUG] [Thread-6681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:03.302 [DEBUG] [Thread-6682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:06.378 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:07.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:16:07.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:16:07.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:16:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 16, 4), 28.3, 14.27, 0.0, 12.26, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:16:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:16:04
2025-11-25T22:16:08.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:16:08.602 [DEBUG] [Thread-6683] [transport.py] [_log()] starting thread (client mode): 0x70d545e0
2025-11-25T22:16:08.602 [DEBUG] [Thread-6683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:16:08.623 [DEBUG] [Thread-6683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:16:08.623 [INFO] [Thread-6683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] client lang: <none>
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] server lang: <none>
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] kex follows: False
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] Compression: none
2025-11-25T22:16:08.627 [DEBUG] [Thread-6683] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:16:08.648 [DEBUG] [Thread-6683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:16:08.649 [DEBUG] [Thread-6683] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:16:08.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:16:08.650 [DEBUG] [Thread-6683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:16:08.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:16:08.652 [DEBUG] [Thread-6683] [transport.py] [_log()] userauth is OK
2025-11-25T22:16:08.652 [DEBUG] [Thread-6683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:16:08.652 [DEBUG] [Thread-6683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:16:08.652 [DEBUG] [Thread-6683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:16:08.652 [DEBUG] [Thread-6683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:16:08.675 [INFO] [Thread-6683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:16:08.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:16:09.336 [DEBUG] [Thread-6683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:16:09.337 [DEBUG] [Thread-6683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:16:09.337 [DEBUG] [Thread-6683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:16:09.378 [DEBUG] [Thread-6683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:16:09.378 [DEBUG] [Thread-6683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:16:09.381 [DEBUG] [Thread-6683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:16:09.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:16:09.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:16:09.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:16:09.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:16:09.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:16:09.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:16:09.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:16:09.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:16:09.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:16:09.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.843848 -999.00  +20.90   7.68     19   -2.90 1 1 1 1 1     0    0 23.62 -0.03 ZNESW 9.1 7.7 159.2 9.9 20.6 -26.0 20.6 -25.4 20.2 -24.0 20.5 -25.1
2025-11-25T22:16:09.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:16:09.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:16:09.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.843848
2025-11-25T22:16:09.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:16:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:16:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:16:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:16:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:16:09.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:16:04', tmtdew=28.3, humidity=14.27, cloud=0.0, wind=12.26, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:16:04', seeing=1.31, atlas_timestamp='2025-11-25T20:15:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:16:09.407 [DEBUG] [Thread-6683] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:16:09.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:16:09.515 [DEBUG] [Thread-6686] [transport.py] [_log()] starting thread (client mode): 0x7374f3a0
2025-11-25T22:16:09.515 [DEBUG] [Thread-6686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:16:09.530 [DEBUG] [Thread-6686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:16:09.530 [INFO] [Thread-6686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:16:09.537 [DEBUG] [Thread-6686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:16:09.537 [DEBUG] [Thread-6686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:16:09.537 [DEBUG] [Thread-6686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] client lang: <none>
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] server lang: <none>
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] kex follows: False
2025-11-25T22:16:09.538 [DEBUG] [Thread-6686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:16:09.539 [DEBUG] [Thread-6686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:16:09.539 [DEBUG] [Thread-6686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:16:09.539 [DEBUG] [Thread-6686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:16:09.539 [DEBUG] [Thread-6686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:16:09.539 [DEBUG] [Thread-6686] [transport.py] [_log()] Compression: none
2025-11-25T22:16:09.539 [DEBUG] [Thread-6686] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:16:09.595 [DEBUG] [Thread-6686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:16:09.596 [DEBUG] [Thread-6686] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:16:09.596 [DEBUG] [Thread-6686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:16:09.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:16:09.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:16:09.652 [DEBUG] [Thread-6686] [transport.py] [_log()] userauth is OK
2025-11-25T22:16:09.652 [DEBUG] [Thread-6686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:16:09.652 [DEBUG] [Thread-6686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:16:09.652 [DEBUG] [Thread-6686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:16:09.652 [DEBUG] [Thread-6686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:16:09.675 [INFO] [Thread-6686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:16:09.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:16:09.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:16:10.519 [DEBUG] [Thread-6686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:16:10.519 [DEBUG] [Thread-6686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:16:10.566 [DEBUG] [Thread-6686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:16:10.566 [DEBUG] [Thread-6686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:16:10.575 [DEBUG] [Thread-6686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:16:10.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:16:10.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:16:10.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:16:10.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:16:10.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:16:10.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:16:10.610 [DEBUG] [Thread-6686] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:16:16.772 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:16.794 [DEBUG] [Thread-6688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:27.173 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:31.844 [DEBUG] [Thread-6689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:37.563 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:40.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:16:40.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:16:40.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:16:41.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 16, 36), 28.08, 14.3, 0.0, 13.87, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:16:41.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:16:36
2025-11-25T22:16:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:16:41.601 [DEBUG] [Thread-6690] [transport.py] [_log()] starting thread (client mode): 0x70d03fa0
2025-11-25T22:16:41.601 [DEBUG] [Thread-6690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:16:41.623 [DEBUG] [Thread-6690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:16:41.623 [INFO] [Thread-6690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] client lang: <none>
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] server lang: <none>
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] kex follows: False
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:16:41.626 [DEBUG] [Thread-6690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:16:41.627 [DEBUG] [Thread-6690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:16:41.627 [DEBUG] [Thread-6690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:16:41.627 [DEBUG] [Thread-6690] [transport.py] [_log()] Compression: none
2025-11-25T22:16:41.627 [DEBUG] [Thread-6690] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:16:41.642 [DEBUG] [Thread-6690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:16:41.643 [DEBUG] [Thread-6690] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:16:41.643 [DEBUG] [Thread-6690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:16:41.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:16:41.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:16:41.644 [DEBUG] [Thread-6690] [transport.py] [_log()] userauth is OK
2025-11-25T22:16:41.644 [DEBUG] [Thread-6690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:16:41.644 [DEBUG] [Thread-6690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:16:41.644 [DEBUG] [Thread-6690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:16:41.644 [DEBUG] [Thread-6690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:16:41.659 [INFO] [Thread-6690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:16:41.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:16:42.270 [DEBUG] [Thread-6690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:16:42.270 [DEBUG] [Thread-6690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:16:42.270 [DEBUG] [Thread-6690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:16:42.311 [DEBUG] [Thread-6690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:16:42.311 [DEBUG] [Thread-6690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:16:42.313 [DEBUG] [Thread-6690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:16:42.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:16:42.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:16:42.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:16:42.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:16:42.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:16:42.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:16:42.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.844543 -999.00  +20.90  12.06     19   -3.00 1 1 1 1 1     0    0 24.12 2.75 ZNESW 9.0 12.1 159.2 13.1 20.6 -25.7 20.6 -25.3 20.3 -24.0 20.5 -24.8
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.844543
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:16:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:16:36', tmtdew=28.08, humidity=14.3, cloud=0.0, wind=13.87, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:16:36', seeing=1.14, atlas_timestamp='2025-11-25T20:16:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:16:42.330 [DEBUG] [Thread-6690] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:16:42.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:16:42.416 [DEBUG] [Thread-6693] [transport.py] [_log()] starting thread (client mode): 0x70d380a0
2025-11-25T22:16:42.416 [DEBUG] [Thread-6693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:16:42.431 [DEBUG] [Thread-6693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:16:42.431 [INFO] [Thread-6693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] client lang: <none>
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] server lang: <none>
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] kex follows: False
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] Compression: none
2025-11-25T22:16:42.438 [DEBUG] [Thread-6693] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:16:42.494 [DEBUG] [Thread-6693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:16:42.494 [DEBUG] [Thread-6693] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:16:42.494 [DEBUG] [Thread-6693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:16:42.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:16:42.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:16:42.551 [DEBUG] [Thread-6693] [transport.py] [_log()] userauth is OK
2025-11-25T22:16:42.551 [DEBUG] [Thread-6693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:16:42.551 [DEBUG] [Thread-6693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:16:42.551 [DEBUG] [Thread-6693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:16:42.551 [DEBUG] [Thread-6693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:16:42.565 [INFO] [Thread-6693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:16:42.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:16:42.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:16:43.378 [DEBUG] [Thread-6693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:16:43.378 [DEBUG] [Thread-6693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:16:43.426 [DEBUG] [Thread-6693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:16:43.426 [DEBUG] [Thread-6693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:16:43.434 [DEBUG] [Thread-6693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:16:43.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:16:43.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:16:43.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:16:43.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:16:43.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:16:43.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:16:43.466 [DEBUG] [Thread-6693] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:16:46.877 [DEBUG] [Thread-6695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:47.959 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:51.922 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:51.923 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:16:58.360 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:01.933 [DEBUG] [Thread-6696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:03.382 [DEBUG] [Thread-6697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:08.777 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:17:13.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:17:13.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:17:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 17, 8), 28.11, 14.27, 0.0, 13.29, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:17:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:17:08
2025-11-25T22:17:14.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:17:14.391 [DEBUG] [Thread-6698] [transport.py] [_log()] starting thread (client mode): 0x70d74be0
2025-11-25T22:17:14.392 [DEBUG] [Thread-6698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:17:14.412 [DEBUG] [Thread-6698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:17:14.412 [INFO] [Thread-6698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] client lang: <none>
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] server lang: <none>
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] kex follows: False
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] Compression: none
2025-11-25T22:17:14.416 [DEBUG] [Thread-6698] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:17:14.434 [DEBUG] [Thread-6698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:17:14.434 [DEBUG] [Thread-6698] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:17:14.435 [DEBUG] [Thread-6698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:17:14.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:17:14.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:17:14.437 [DEBUG] [Thread-6698] [transport.py] [_log()] userauth is OK
2025-11-25T22:17:14.437 [DEBUG] [Thread-6698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:17:14.437 [DEBUG] [Thread-6698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:17:14.437 [DEBUG] [Thread-6698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:17:14.437 [DEBUG] [Thread-6698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:17:14.459 [INFO] [Thread-6698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:17:14.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:17:15.081 [DEBUG] [Thread-6698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:17:15.081 [DEBUG] [Thread-6698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:17:15.082 [DEBUG] [Thread-6698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:17:15.122 [DEBUG] [Thread-6698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:17:15.122 [DEBUG] [Thread-6698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:17:15.124 [DEBUG] [Thread-6698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:17:15.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:17:15.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:17:15.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:17:15.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:17:15.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:17:15.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:17:15.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:17:15.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:17:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:17:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.844890 -999.00  +20.90   7.58     19   -2.90 1 1 1 1 1     0    0 23.49 4.19 ZNESW 7.9 7.6 160.2 12.2 20.6 -25.8 20.6 -24.9 20.3 -23.9 20.5 -25.2
2025-11-25T22:17:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:17:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:17:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.844890
2025-11-25T22:17:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:17:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:17:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:17:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:17:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:17:15.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:17:08', tmtdew=28.11, humidity=14.27, cloud=0.0, wind=13.29, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:17:08', seeing=1.14, atlas_timestamp='2025-11-25T20:16:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:17:15.144 [DEBUG] [Thread-6698] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:17:15.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:17:15.229 [DEBUG] [Thread-6701] [transport.py] [_log()] starting thread (client mode): 0x70d01d50
2025-11-25T22:17:15.229 [DEBUG] [Thread-6701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:17:15.244 [DEBUG] [Thread-6701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:17:15.244 [INFO] [Thread-6701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] client lang: <none>
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] server lang: <none>
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] kex follows: False
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] Compression: none
2025-11-25T22:17:15.252 [DEBUG] [Thread-6701] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:17:15.310 [DEBUG] [Thread-6701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:17:15.310 [DEBUG] [Thread-6701] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:17:15.310 [DEBUG] [Thread-6701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:17:15.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:17:15.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:17:15.368 [DEBUG] [Thread-6701] [transport.py] [_log()] userauth is OK
2025-11-25T22:17:15.368 [DEBUG] [Thread-6701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:17:15.368 [DEBUG] [Thread-6701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:17:15.368 [DEBUG] [Thread-6701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:17:15.368 [DEBUG] [Thread-6701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:17:15.383 [INFO] [Thread-6701] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:17:15.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:17:15.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:17:16.264 [DEBUG] [Thread-6701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:17:16.264 [DEBUG] [Thread-6701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:17:16.312 [DEBUG] [Thread-6701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:17:16.312 [DEBUG] [Thread-6701] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:17:16.320 [DEBUG] [Thread-6701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:17:16.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:17: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')
2025-11-25T22:17: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
2025-11-25T22:17:16.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:17:16.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:17:16.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:17:16.353 [DEBUG] [Thread-6701] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:17:16.966 [DEBUG] [Thread-6703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:19.197 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:29.616 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:32.005 [DEBUG] [Thread-6704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:40.070 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:46.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:17:46.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:17:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:17:47.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 17, 40), 28.18, 14.19, 0.0, 11.72, 20.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:17:47.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:17:40
2025-11-25T22:17:47.042 [DEBUG] [Thread-6705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:47.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:17:47.296 [DEBUG] [Thread-6706] [transport.py] [_log()] starting thread (client mode): 0x70d74820
2025-11-25T22:17:47.297 [DEBUG] [Thread-6706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:17:47.307 [DEBUG] [Thread-6706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:17:47.307 [INFO] [Thread-6706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] client lang: <none>
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] server lang: <none>
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] kex follows: False
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:17:47.311 [DEBUG] [Thread-6706] [transport.py] [_log()] Compression: none
2025-11-25T22:17:47.312 [DEBUG] [Thread-6706] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:17:47.331 [DEBUG] [Thread-6706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:17:47.331 [DEBUG] [Thread-6706] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:17:47.332 [DEBUG] [Thread-6706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:17:47.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:17:47.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:17:47.334 [DEBUG] [Thread-6706] [transport.py] [_log()] userauth is OK
2025-11-25T22:17:47.335 [DEBUG] [Thread-6706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:17:47.335 [DEBUG] [Thread-6706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:17:47.335 [DEBUG] [Thread-6706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:17:47.335 [DEBUG] [Thread-6706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:17:47.360 [INFO] [Thread-6706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:17:47.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:17:47.998 [DEBUG] [Thread-6706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:17:47.998 [DEBUG] [Thread-6706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:17:47.999 [DEBUG] [Thread-6706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:17:48.039 [DEBUG] [Thread-6706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:17:48.039 [DEBUG] [Thread-6706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:17:48.042 [DEBUG] [Thread-6706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:17:48.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:17:48.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:17:48.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:17:48.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:17:48.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:17:48.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:17:48.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:17:48.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:17:48.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:17:48.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.845237 -999.00  +20.90   6.47     19   -2.90 1 1 1 1 1     0    0 23.84 5.21 ZNESW 11.3 6.5 158.7 10.9 20.6 -25.7 20.6 -25.2 20.2 -24.1 20.4 -25.1
2025-11-25T22:17:48.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:17:48.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:17:48.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.845237
2025-11-25T22:17:48.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:17:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:17:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:17:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:17:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:17:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:17:40', tmtdew=28.18, humidity=14.19, cloud=0.0, wind=11.72, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:17:40', seeing=1.12, atlas_timestamp='2025-11-25T20:17:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:17:48.071 [DEBUG] [Thread-6706] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:17:48.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:17:48.170 [DEBUG] [Thread-6709] [transport.py] [_log()] starting thread (client mode): 0x70d39c90
2025-11-25T22:17:48.170 [DEBUG] [Thread-6709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:17:48.185 [DEBUG] [Thread-6709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:17:48.185 [INFO] [Thread-6709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:17:48.193 [DEBUG] [Thread-6709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:17:48.193 [DEBUG] [Thread-6709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:17:48.193 [DEBUG] [Thread-6709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:17:48.194 [DEBUG] [Thread-6709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:17:48.194 [DEBUG] [Thread-6709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:17:48.194 [DEBUG] [Thread-6709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:17:48.194 [DEBUG] [Thread-6709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:17:48.194 [DEBUG] [Thread-6709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:17:48.194 [DEBUG] [Thread-6709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:17:48.194 [DEBUG] [Thread-6709] [transport.py] [_log()] client lang: <none>
2025-11-25T22:17:48.194 [DEBUG] [Thread-6709] [transport.py] [_log()] server lang: <none>
2025-11-25T22:17:48.194 [DEBUG] [Thread-6709] [transport.py] [_log()] kex follows: False
2025-11-25T22:17:48.195 [DEBUG] [Thread-6709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:17:48.195 [DEBUG] [Thread-6709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:17:48.195 [DEBUG] [Thread-6709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:17:48.195 [DEBUG] [Thread-6709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:17:48.195 [DEBUG] [Thread-6709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:17:48.195 [DEBUG] [Thread-6709] [transport.py] [_log()] Compression: none
2025-11-25T22:17:48.195 [DEBUG] [Thread-6709] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:17:48.257 [DEBUG] [Thread-6709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:17:48.257 [DEBUG] [Thread-6709] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:17:48.258 [DEBUG] [Thread-6709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:17:48.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:17:48.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:17:48.316 [DEBUG] [Thread-6709] [transport.py] [_log()] userauth is OK
2025-11-25T22:17:48.316 [DEBUG] [Thread-6709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:17:48.316 [DEBUG] [Thread-6709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:17:48.316 [DEBUG] [Thread-6709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:17:48.316 [DEBUG] [Thread-6709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:17:48.336 [INFO] [Thread-6709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:17:48.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:17:48.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:17:49.212 [DEBUG] [Thread-6709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:17:49.212 [DEBUG] [Thread-6709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:17:49.260 [DEBUG] [Thread-6709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:17:49.260 [DEBUG] [Thread-6709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:17:49.270 [DEBUG] [Thread-6709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:17:49.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:17:49.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:17:49.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:17:49.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:17:49.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:17:49.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:17:49.307 [DEBUG] [Thread-6709] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:17:50.553 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:52.126 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:17:52.127 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:00.971 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:02.073 [DEBUG] [Thread-6711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:03.457 [DEBUG] [Thread-6712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:11.391 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:17.127 [DEBUG] [Thread-6713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:19.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:18:19.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:18:19.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:18:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 18, 12), 28.15, 14.22, 0.0, 12.23, 20.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:18:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:18:12
2025-11-25T22:18:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:18:20.261 [DEBUG] [Thread-6714] [transport.py] [_log()] starting thread (client mode): 0x70d38040
2025-11-25T22:18:20.262 [DEBUG] [Thread-6714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:18:20.281 [DEBUG] [Thread-6714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:18:20.281 [INFO] [Thread-6714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] client lang: <none>
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] server lang: <none>
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] kex follows: False
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:18:20.284 [DEBUG] [Thread-6714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:18:20.285 [DEBUG] [Thread-6714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:18:20.285 [DEBUG] [Thread-6714] [transport.py] [_log()] Compression: none
2025-11-25T22:18:20.285 [DEBUG] [Thread-6714] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:18:20.302 [DEBUG] [Thread-6714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:18:20.303 [DEBUG] [Thread-6714] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:18:20.304 [DEBUG] [Thread-6714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:18:20.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:18:20.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:18:20.306 [DEBUG] [Thread-6714] [transport.py] [_log()] userauth is OK
2025-11-25T22:18:20.306 [DEBUG] [Thread-6714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:18:20.306 [DEBUG] [Thread-6714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:18:20.306 [DEBUG] [Thread-6714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:18:20.307 [DEBUG] [Thread-6714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:18:20.332 [INFO] [Thread-6714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:18:20.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:18:20.922 [DEBUG] [Thread-6714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:18:20.922 [DEBUG] [Thread-6714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:18:20.922 [DEBUG] [Thread-6714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:18:20.964 [DEBUG] [Thread-6714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:18:20.964 [DEBUG] [Thread-6714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:18:20.967 [DEBUG] [Thread-6714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:18:20.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:18:20.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:18:20.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:18:20.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:18:20.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:18:20.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:18:20.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:18:20.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:18:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:18:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.845584 -999.00  +20.90   8.04     19   -2.90 1 1 1 1 1     0    0 23.89 6.26 ZNESW 7.8 8.0 158.2 14.3 20.6 -25.9 20.6 -25.2 20.3 -24.0 20.4 -25.0
2025-11-25T22:18:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:18:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:18:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.845584
2025-11-25T22:18:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:18:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:18:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:18:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:18:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:18:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:18:12', tmtdew=28.15, humidity=14.22, cloud=0.0, wind=12.23, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:18:12', seeing=1.09, atlas_timestamp='2025-11-25T20:17:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.024750000000000938, 0.03225000000000122, -0.002000000000000668, 0.02549999999999919, 0.08825000000000216, 0.044500000000001094, 0.04225000000000101, 0.08549999999999969, 0.04600000000000115, 0.06424999999999947, 0.0129999999999999, 0.0934999999999988, 0.12874999999999837, 0.06199999999999939, 0.022499999999999076, 0.060249999999999915, 0.061500000000000554, 0.10049999999999848, 0.04724999999999824, 0.0909999999999993, 0.11374999999999957, 0.06125000000000114, 0.06174999999999997, 0.030499999999998195, 0.09699999999999953, 0.12274999999999991, 0.11749999999999972, 0.16100000000000136, 0.11050000000000182, 0.10300000000000153, 0.058000000000001606, 0.006249999999997868], zp_timestamp='2025-11-25T20:11:00')
2025-11-25T22:18:20.994 [DEBUG] [Thread-6714] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:18:21.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:18:21.090 [DEBUG] [Thread-6717] [transport.py] [_log()] starting thread (client mode): 0x70d3b460
2025-11-25T22:18:21.090 [DEBUG] [Thread-6717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:18:21.105 [DEBUG] [Thread-6717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:18:21.105 [INFO] [Thread-6717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] client lang: <none>
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] server lang: <none>
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] kex follows: False
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:18:21.113 [DEBUG] [Thread-6717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:18:21.114 [DEBUG] [Thread-6717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:18:21.114 [DEBUG] [Thread-6717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:18:21.114 [DEBUG] [Thread-6717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:18:21.114 [DEBUG] [Thread-6717] [transport.py] [_log()] Compression: none
2025-11-25T22:18:21.114 [DEBUG] [Thread-6717] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:18:21.171 [DEBUG] [Thread-6717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:18:21.172 [DEBUG] [Thread-6717] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:18:21.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:18:21.173 [DEBUG] [Thread-6717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:18:21.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:18:21.229 [DEBUG] [Thread-6717] [transport.py] [_log()] userauth is OK
2025-11-25T22:18:21.230 [DEBUG] [Thread-6717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:18:21.230 [DEBUG] [Thread-6717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:18:21.230 [DEBUG] [Thread-6717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:18:21.230 [DEBUG] [Thread-6717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:18:21.248 [INFO] [Thread-6717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:18:21.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:18:21.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:18:21.855 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:22.103 [DEBUG] [Thread-6717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:18:22.104 [DEBUG] [Thread-6717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:18:22.152 [DEBUG] [Thread-6717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:18:22.152 [DEBUG] [Thread-6717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:18:22.161 [DEBUG] [Thread-6717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:18:22.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:18:22.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:18:22.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:18:22.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:18:22.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:18:22.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:18:22.199 [DEBUG] [Thread-6717] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:18:32.163 [DEBUG] [Thread-6719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:32.251 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:42.646 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:47.208 [DEBUG] [Thread-6720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:18:52.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:18:52.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:18:52.331 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:52.332 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 18, 44), 28.1, 14.24, 0.0, 14.42, 21.0, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:18:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:18:44
2025-11-25T22:18:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:18:53.061 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:18:53.151 [DEBUG] [Thread-6721] [transport.py] [_log()] starting thread (client mode): 0x70d6abc0
2025-11-25T22:18:53.151 [DEBUG] [Thread-6721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:18:53.171 [DEBUG] [Thread-6721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:18:53.171 [INFO] [Thread-6721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] client lang: <none>
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] server lang: <none>
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] kex follows: False
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:18:53.175 [DEBUG] [Thread-6721] [transport.py] [_log()] Compression: none
2025-11-25T22:18:53.176 [DEBUG] [Thread-6721] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:18:53.191 [DEBUG] [Thread-6721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:18:53.192 [DEBUG] [Thread-6721] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:18:53.193 [DEBUG] [Thread-6721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:18:53.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:18:53.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:18:53.195 [DEBUG] [Thread-6721] [transport.py] [_log()] userauth is OK
2025-11-25T22:18:53.195 [DEBUG] [Thread-6721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:18:53.195 [DEBUG] [Thread-6721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:18:53.195 [DEBUG] [Thread-6721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:18:53.195 [DEBUG] [Thread-6721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:18:53.217 [INFO] [Thread-6721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:18:53.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:18:53.842 [DEBUG] [Thread-6721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:18:53.842 [DEBUG] [Thread-6721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:18:53.843 [DEBUG] [Thread-6721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:18:53.884 [DEBUG] [Thread-6721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:18:53.884 [DEBUG] [Thread-6721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:18:53.887 [DEBUG] [Thread-6721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:18:53.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:18:53.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:18:53.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:18:53.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:18:53.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:18:53.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:18:53.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:18:53.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:18:53.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:18:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.845932 -999.00  +20.90   7.82     19   -2.90 1 1 1 1 1     0    0 24.14 7.24 ZNESW 7.0 7.8 173.4 11.6 20.5 -25.9 20.6 -25.0 20.2 -24.0 20.4 -25.1
2025-11-25T22:18:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:18:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:18:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.845932
2025-11-25T22:18:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:18:53.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:18:53.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:18:53.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:18:53.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:18:53.912 [DEBUG] [Thread-6721] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:18:53.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:18:44', tmtdew=28.1, humidity=14.24, cloud=0.0, wind=14.42, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:18:44', seeing=1.16, atlas_timestamp='2025-11-25T20:18:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.0022500000000000853, 0.039250000000000895, -0.04200000000000159, 0.0045000000000001705, 0.07125000000000092, 0.014499999999999957, 0.015249999999999986, 0.05649999999999977, -0.0009999999999994458, 0.024250000000000327, -0.009999999999999787, 0.0600000000000005, 0.051249999999999574, 0.004999999999999005, 0.021999999999998465, 0.040749999999999176, 0.06550000000000011, 0.07499999999999929, 0.02624999999999922, 0.10499999999999865, 0.0572499999999998, 0.03625000000000078, 0.039250000000000895, 0.010999999999999233, 0.05850000000000044, 0.08525000000000027, 0.0754999999999999, 0.0730000000000004, 0.07850000000000179, 0.0600000000000005, 0.008000000000000895, -0.034250000000000114], zp_timestamp='2025-11-25T20:16:00')
2025-11-25T22:18:53.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:18:54.008 [DEBUG] [Thread-6724] [transport.py] [_log()] starting thread (client mode): 0x70d74e50
2025-11-25T22:18:54.008 [DEBUG] [Thread-6724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:18:54.022 [DEBUG] [Thread-6724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:18:54.022 [INFO] [Thread-6724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:18:54.030 [DEBUG] [Thread-6724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:18:54.030 [DEBUG] [Thread-6724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:18:54.030 [DEBUG] [Thread-6724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] client lang: <none>
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] server lang: <none>
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] kex follows: False
2025-11-25T22:18:54.031 [DEBUG] [Thread-6724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:18:54.032 [DEBUG] [Thread-6724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:18:54.032 [DEBUG] [Thread-6724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:18:54.032 [DEBUG] [Thread-6724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:18:54.032 [DEBUG] [Thread-6724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:18:54.032 [DEBUG] [Thread-6724] [transport.py] [_log()] Compression: none
2025-11-25T22:18:54.032 [DEBUG] [Thread-6724] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:18:54.088 [DEBUG] [Thread-6724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:18:54.089 [DEBUG] [Thread-6724] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:18:54.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:18:54.090 [DEBUG] [Thread-6724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:18:54.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:18:54.149 [DEBUG] [Thread-6724] [transport.py] [_log()] userauth is OK
2025-11-25T22:18:54.149 [DEBUG] [Thread-6724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:18:54.149 [DEBUG] [Thread-6724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:18:54.150 [DEBUG] [Thread-6724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:18:54.150 [DEBUG] [Thread-6724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:18:54.169 [INFO] [Thread-6724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:18:54.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:18:54.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:18:54.998 [DEBUG] [Thread-6724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:18:54.998 [DEBUG] [Thread-6724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:18:55.046 [DEBUG] [Thread-6724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:18:55.047 [DEBUG] [Thread-6724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:18:55.057 [DEBUG] [Thread-6724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:18:55.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:18:55.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:18:55.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:18:55.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:18:55.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:18:55.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:18:55.095 [DEBUG] [Thread-6724] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:19:02.248 [DEBUG] [Thread-6726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:03.473 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:03.525 [DEBUG] [Thread-6727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:13.892 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:17.305 [DEBUG] [Thread-6728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:24.299 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:19:25.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:19:25.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:19:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 19, 16), 28.13, 14.21, 0.0, 13.15, 21.01, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:19:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:19:16
2025-11-25T22:19:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:19:26.036 [DEBUG] [Thread-6729] [transport.py] [_log()] starting thread (client mode): 0x70d40460
2025-11-25T22:19:26.037 [DEBUG] [Thread-6729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:19:26.047 [DEBUG] [Thread-6729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:19:26.047 [INFO] [Thread-6729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:19:26.049 [DEBUG] [Thread-6729] [transport.py] [_log()] client lang: <none>
2025-11-25T22:19:26.050 [DEBUG] [Thread-6729] [transport.py] [_log()] server lang: <none>
2025-11-25T22:19:26.050 [DEBUG] [Thread-6729] [transport.py] [_log()] kex follows: False
2025-11-25T22:19:26.050 [DEBUG] [Thread-6729] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:19:26.050 [DEBUG] [Thread-6729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:19:26.050 [DEBUG] [Thread-6729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:19:26.050 [DEBUG] [Thread-6729] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:19:26.050 [DEBUG] [Thread-6729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:19:26.050 [DEBUG] [Thread-6729] [transport.py] [_log()] Compression: none
2025-11-25T22:19:26.050 [DEBUG] [Thread-6729] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:19:26.062 [DEBUG] [Thread-6729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:19:26.063 [DEBUG] [Thread-6729] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:19:26.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:19:26.064 [DEBUG] [Thread-6729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:19:26.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:19:26.065 [DEBUG] [Thread-6729] [transport.py] [_log()] userauth is OK
2025-11-25T22:19:26.065 [DEBUG] [Thread-6729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:19:26.066 [DEBUG] [Thread-6729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:19:26.066 [DEBUG] [Thread-6729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:19:26.066 [DEBUG] [Thread-6729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:19:26.091 [INFO] [Thread-6729] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:19:26.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:19:26.698 [DEBUG] [Thread-6729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:19:26.698 [DEBUG] [Thread-6729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:19:26.699 [DEBUG] [Thread-6729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:19:26.739 [DEBUG] [Thread-6729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:19:26.739 [DEBUG] [Thread-6729] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:19:26.742 [DEBUG] [Thread-6729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:19:26.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:19:26.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:19:26.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:19:26.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:19:26.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:19:26.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:19:26.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:19:26.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:19:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:19:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.846279 -999.00  +20.90   8.11     19   -2.90 1 1 1 1 1     0    0 23.34 8.64 ZNESW 8.2 8.1 172.4 10.0 20.5 -25.9 20.5 -25.4 20.2 -24.1 20.4 -25.2
2025-11-25T22:19:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:19:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:19:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.846279
2025-11-25T22:19:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:19:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:19:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:19:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:19:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:19:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:19:16', tmtdew=28.13, humidity=14.21, cloud=0.0, wind=13.15, temperature=21.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:19:16', seeing=1.16, atlas_timestamp='2025-11-25T20:18:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.0022500000000000853, 0.039250000000000895, -0.04200000000000159, 0.0045000000000001705, 0.07125000000000092, 0.014499999999999957, 0.015249999999999986, 0.05649999999999977, -0.0009999999999994458, 0.024250000000000327, -0.009999999999999787, 0.0600000000000005, 0.051249999999999574, 0.004999999999999005, 0.021999999999998465, 0.040749999999999176, 0.06550000000000011, 0.07499999999999929, 0.02624999999999922, 0.10499999999999865, 0.0572499999999998, 0.03625000000000078, 0.039250000000000895, 0.010999999999999233, 0.05850000000000044, 0.08525000000000027, 0.0754999999999999, 0.0730000000000004, 0.07850000000000179, 0.0600000000000005, 0.008000000000000895, -0.034250000000000114], zp_timestamp='2025-11-25T20:16:00')
2025-11-25T22:19:26.772 [DEBUG] [Thread-6729] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:19:26.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:19:26.869 [DEBUG] [Thread-6732] [transport.py] [_log()] starting thread (client mode): 0x70d6b100
2025-11-25T22:19:26.869 [DEBUG] [Thread-6732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:19:26.883 [DEBUG] [Thread-6732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:19:26.884 [INFO] [Thread-6732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:19:26.891 [DEBUG] [Thread-6732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:19:26.891 [DEBUG] [Thread-6732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:19:26.891 [DEBUG] [Thread-6732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] client lang: <none>
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] server lang: <none>
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] kex follows: False
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] Compression: none
2025-11-25T22:19:26.892 [DEBUG] [Thread-6732] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:19:26.952 [DEBUG] [Thread-6732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:19:26.952 [DEBUG] [Thread-6732] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:19:26.953 [DEBUG] [Thread-6732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:19:26.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:19:26.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:19:27.008 [DEBUG] [Thread-6732] [transport.py] [_log()] userauth is OK
2025-11-25T22:19:27.008 [DEBUG] [Thread-6732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:19:27.008 [DEBUG] [Thread-6732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:19:27.008 [DEBUG] [Thread-6732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:19:27.009 [DEBUG] [Thread-6732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:19:27.027 [INFO] [Thread-6732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:19:27.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:19:27.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:19:27.910 [DEBUG] [Thread-6732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:19:27.910 [DEBUG] [Thread-6732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:19:27.961 [DEBUG] [Thread-6732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:19:27.961 [DEBUG] [Thread-6732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:19:27.974 [DEBUG] [Thread-6732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:19:27.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:19:27.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:19:27.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:19:28.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:19:28.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:19:28.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:19:28.011 [DEBUG] [Thread-6732] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:19:32.338 [DEBUG] [Thread-6734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:34.688 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:45.122 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:47.382 [DEBUG] [Thread-6735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:52.534 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:52.535 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:55.520 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:19:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:19:58.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:19:58.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:19:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 19, 48), 28.28, 14.19, 0.0, 8.91, 21.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:19:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:19:48
2025-11-25T22:19:58.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:19:58.961 [DEBUG] [Thread-6736] [transport.py] [_log()] starting thread (client mode): 0x70d75540
2025-11-25T22:19:58.961 [DEBUG] [Thread-6736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:19:58.982 [DEBUG] [Thread-6736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:19:58.982 [INFO] [Thread-6736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:19:58.985 [DEBUG] [Thread-6736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:19:58.985 [DEBUG] [Thread-6736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:19:58.985 [DEBUG] [Thread-6736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] client lang: <none>
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] server lang: <none>
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] kex follows: False
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:19:58.986 [DEBUG] [Thread-6736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:19:58.987 [DEBUG] [Thread-6736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:19:58.987 [DEBUG] [Thread-6736] [transport.py] [_log()] Compression: none
2025-11-25T22:19:58.987 [DEBUG] [Thread-6736] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:19:59.004 [DEBUG] [Thread-6736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:19:59.005 [DEBUG] [Thread-6736] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:19:59.006 [DEBUG] [Thread-6736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:19:59.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:19:59.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:19:59.008 [DEBUG] [Thread-6736] [transport.py] [_log()] userauth is OK
2025-11-25T22:19:59.008 [DEBUG] [Thread-6736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:19:59.009 [DEBUG] [Thread-6736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:19:59.009 [DEBUG] [Thread-6736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:19:59.009 [DEBUG] [Thread-6736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:19:59.033 [INFO] [Thread-6736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:19:59.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:19:59.661 [DEBUG] [Thread-6736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:19:59.662 [DEBUG] [Thread-6736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:19:59.662 [DEBUG] [Thread-6736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:19:59.703 [DEBUG] [Thread-6736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:19:59.703 [DEBUG] [Thread-6736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:19:59.706 [DEBUG] [Thread-6736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:19:59.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:19:59.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:19:59.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:19:59.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:19:59.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:19:59.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:19:59.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:19:59.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:19:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:19:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.846973 -999.00  +20.90   8.52     19   -2.90 1 1 1 1 1     0    0 23.95 13.87 ZNESW 8.0 8.5 182.2 9.7 20.5 -25.8 20.5 -25.1 20.2 -24.1 20.4 -25.0
2025-11-25T22:19:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:19:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:19:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.846973
2025-11-25T22:19:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:19:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:19:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:19:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:19:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:19:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:19:48', tmtdew=28.28, humidity=14.19, cloud=0.0, wind=8.91, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:19:48', seeing=1.04, atlas_timestamp='2025-11-25T20:19:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.0022500000000000853, 0.039250000000000895, -0.04200000000000159, 0.0045000000000001705, 0.07125000000000092, 0.014499999999999957, 0.015249999999999986, 0.05649999999999977, -0.0009999999999994458, 0.024250000000000327, -0.009999999999999787, 0.0600000000000005, 0.051249999999999574, 0.004999999999999005, 0.021999999999998465, 0.040749999999999176, 0.06550000000000011, 0.07499999999999929, 0.02624999999999922, 0.10499999999999865, 0.0572499999999998, 0.03625000000000078, 0.039250000000000895, 0.010999999999999233, 0.05850000000000044, 0.08525000000000027, 0.0754999999999999, 0.0730000000000004, 0.07850000000000179, 0.0600000000000005, 0.008000000000000895, -0.034250000000000114], zp_timestamp='2025-11-25T20:16:00')
2025-11-25T22:19:59.732 [DEBUG] [Thread-6736] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:19:59.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:19:59.825 [DEBUG] [Thread-6739] [transport.py] [_log()] starting thread (client mode): 0x70d749d0
2025-11-25T22:19:59.826 [DEBUG] [Thread-6739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:19:59.841 [DEBUG] [Thread-6739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:19:59.841 [INFO] [Thread-6739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:19:59.848 [DEBUG] [Thread-6739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:19:59.848 [DEBUG] [Thread-6739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:19:59.848 [DEBUG] [Thread-6739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:19:59.848 [DEBUG] [Thread-6739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] client lang: <none>
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] server lang: <none>
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] kex follows: False
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] Compression: none
2025-11-25T22:19:59.849 [DEBUG] [Thread-6739] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:19:59.911 [DEBUG] [Thread-6739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:19:59.911 [DEBUG] [Thread-6739] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:19:59.912 [DEBUG] [Thread-6739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:19:59.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:19:59.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:19:59.968 [DEBUG] [Thread-6739] [transport.py] [_log()] userauth is OK
2025-11-25T22:19:59.968 [DEBUG] [Thread-6739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:19:59.968 [DEBUG] [Thread-6739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:19:59.968 [DEBUG] [Thread-6739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:19:59.968 [DEBUG] [Thread-6739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:19:59.987 [INFO] [Thread-6739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:19:59.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:19:59.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:20:00.849 [DEBUG] [Thread-6739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:20:00.850 [DEBUG] [Thread-6739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:20:00.898 [DEBUG] [Thread-6739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:20:00.898 [DEBUG] [Thread-6739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:20:00.907 [DEBUG] [Thread-6739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:20:00.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:20:00.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:20:00.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:20:00.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:20:00.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:20:00.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:20:00.949 [DEBUG] [Thread-6739] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:20:02.415 [DEBUG] [Thread-6741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:03.582 [DEBUG] [Thread-6742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:05.916 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:16.310 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:17.475 [DEBUG] [Thread-6743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:26.729 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:30.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:20:30.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:20:30.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:20:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 20, 20), 28.19, 14.27, 0.0, 8.86, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:20:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:20:20
2025-11-25T22:20:31.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:20:31.871 [DEBUG] [Thread-6744] [transport.py] [_log()] starting thread (client mode): 0x70d6bcd0
2025-11-25T22:20:31.871 [DEBUG] [Thread-6744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:20:31.891 [DEBUG] [Thread-6744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:20:31.891 [INFO] [Thread-6744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] client lang: <none>
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] server lang: <none>
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] kex follows: False
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] Compression: none
2025-11-25T22:20:31.894 [DEBUG] [Thread-6744] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:20:31.903 [DEBUG] [Thread-6744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:20:31.903 [DEBUG] [Thread-6744] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:20:31.903 [DEBUG] [Thread-6744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:20:31.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:20:31.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:20:31.905 [DEBUG] [Thread-6744] [transport.py] [_log()] userauth is OK
2025-11-25T22:20:31.906 [DEBUG] [Thread-6744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:20:31.906 [DEBUG] [Thread-6744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:20:31.906 [DEBUG] [Thread-6744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:20:31.906 [DEBUG] [Thread-6744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:20:31.920 [INFO] [Thread-6744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:20:31.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:20:32.508 [DEBUG] [Thread-6746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:32.532 [DEBUG] [Thread-6744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:20:32.532 [DEBUG] [Thread-6744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:20:32.532 [DEBUG] [Thread-6744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:20:32.573 [DEBUG] [Thread-6744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:20:32.573 [DEBUG] [Thread-6744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:20:32.577 [DEBUG] [Thread-6744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:20:32.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:20:32.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:20:32.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:20:32.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:20:32.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:20:32.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:20:32.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:20:32.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:20:32.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:20:32.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.847320 -999.00  +20.90  10.46     19   -2.90 1 1 1 1 1     0    0 23.73 14.61 ZNESW 9.5 10.5 177.4 12.0 20.6 -25.9 20.6 -25.0 20.2 -24.0 20.4 -24.9
2025-11-25T22:20:32.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:20:32.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:20:32.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.847320
2025-11-25T22:20:32.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:20:32.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:20:32.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:20:32.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:20:32.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:20:32.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:20:20', tmtdew=28.19, humidity=14.27, cloud=0.0, wind=8.86, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:20:20', seeing=1.07, atlas_timestamp='2025-11-25T20:20:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.0022500000000000853, 0.039250000000000895, -0.04200000000000159, 0.0045000000000001705, 0.07125000000000092, 0.014499999999999957, 0.015249999999999986, 0.05649999999999977, -0.0009999999999994458, 0.024250000000000327, -0.009999999999999787, 0.0600000000000005, 0.051249999999999574, 0.004999999999999005, 0.021999999999998465, 0.040749999999999176, 0.06550000000000011, 0.07499999999999929, 0.02624999999999922, 0.10499999999999865, 0.0572499999999998, 0.03625000000000078, 0.039250000000000895, 0.010999999999999233, 0.05850000000000044, 0.08525000000000027, 0.0754999999999999, 0.0730000000000004, 0.07850000000000179, 0.0600000000000005, 0.008000000000000895, -0.034250000000000114], zp_timestamp='2025-11-25T20:16:00')
2025-11-25T22:20:32.605 [DEBUG] [Thread-6744] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:20:32.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:20:32.701 [DEBUG] [Thread-6748] [transport.py] [_log()] starting thread (client mode): 0x70d563e0
2025-11-25T22:20:32.701 [DEBUG] [Thread-6748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:20:32.718 [DEBUG] [Thread-6748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:20:32.718 [INFO] [Thread-6748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:20:32.729 [DEBUG] [Thread-6748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:20:32.729 [DEBUG] [Thread-6748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:20:32.730 [DEBUG] [Thread-6748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:20:32.730 [DEBUG] [Thread-6748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:20:32.730 [DEBUG] [Thread-6748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:20:32.730 [DEBUG] [Thread-6748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:20:32.730 [DEBUG] [Thread-6748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:20:32.730 [DEBUG] [Thread-6748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:20:32.730 [DEBUG] [Thread-6748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:20:32.730 [DEBUG] [Thread-6748] [transport.py] [_log()] client lang: <none>
2025-11-25T22:20:32.730 [DEBUG] [Thread-6748] [transport.py] [_log()] server lang: <none>
2025-11-25T22:20:32.731 [DEBUG] [Thread-6748] [transport.py] [_log()] kex follows: False
2025-11-25T22:20:32.731 [DEBUG] [Thread-6748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:20:32.731 [DEBUG] [Thread-6748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:20:32.731 [DEBUG] [Thread-6748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:20:32.731 [DEBUG] [Thread-6748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:20:32.731 [DEBUG] [Thread-6748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:20:32.731 [DEBUG] [Thread-6748] [transport.py] [_log()] Compression: none
2025-11-25T22:20:32.732 [DEBUG] [Thread-6748] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:20:32.792 [DEBUG] [Thread-6748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:20:32.793 [DEBUG] [Thread-6748] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:20:32.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:20:32.794 [DEBUG] [Thread-6748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:20:32.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:20:32.852 [DEBUG] [Thread-6748] [transport.py] [_log()] userauth is OK
2025-11-25T22:20:32.852 [DEBUG] [Thread-6748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:20:32.852 [DEBUG] [Thread-6748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:20:32.853 [DEBUG] [Thread-6748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:20:32.853 [DEBUG] [Thread-6748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:20:32.871 [INFO] [Thread-6748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:20:32.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:20:32.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:20:33.689 [DEBUG] [Thread-6748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:20:33.689 [DEBUG] [Thread-6748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:20:33.737 [DEBUG] [Thread-6748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:20:33.737 [DEBUG] [Thread-6748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:20:33.746 [DEBUG] [Thread-6748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:20:33.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:20:33.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:20:33.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:20:33.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:20:33.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:20:33.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:20:33.783 [DEBUG] [Thread-6748] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:20:37.156 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:47.541 [DEBUG] [Thread-6750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:47.555 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:52.738 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:52.740 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:20:57.956 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:02.590 [DEBUG] [Thread-6751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:03.634 [DEBUG] [Thread-6752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:03.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:21:03.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:21:03.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:21:04.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 20, 52), 27.97, 14.4, 0.0, 11.96, 20.85, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:21:04.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:20:52
2025-11-25T22:21:04.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:21:04.765 [DEBUG] [Thread-6753] [transport.py] [_log()] starting thread (client mode): 0x70da6f50
2025-11-25T22:21:04.765 [DEBUG] [Thread-6753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:21:04.785 [DEBUG] [Thread-6753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:21:04.785 [INFO] [Thread-6753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] client lang: <none>
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] server lang: <none>
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] kex follows: False
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:21:04.788 [DEBUG] [Thread-6753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:21:04.789 [DEBUG] [Thread-6753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:21:04.789 [DEBUG] [Thread-6753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:21:04.789 [DEBUG] [Thread-6753] [transport.py] [_log()] Compression: none
2025-11-25T22:21:04.789 [DEBUG] [Thread-6753] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:21:04.804 [DEBUG] [Thread-6753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:21:04.804 [DEBUG] [Thread-6753] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:21:04.804 [DEBUG] [Thread-6753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:21:04.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:21:04.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:21:04.805 [DEBUG] [Thread-6753] [transport.py] [_log()] userauth is OK
2025-11-25T22:21:04.805 [DEBUG] [Thread-6753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:21:04.805 [DEBUG] [Thread-6753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:21:04.805 [DEBUG] [Thread-6753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:21:04.805 [DEBUG] [Thread-6753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:21:04.817 [INFO] [Thread-6753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:21:04.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:21:05.419 [DEBUG] [Thread-6753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:21:05.420 [DEBUG] [Thread-6753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:21:05.421 [DEBUG] [Thread-6753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:21:05.460 [DEBUG] [Thread-6753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:21:05.460 [DEBUG] [Thread-6753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:21:05.462 [DEBUG] [Thread-6753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:21:05.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:21:05.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:21:05.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:21:05.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:21:05.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:21:05.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:21:05.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:21:05.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:21:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:21:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.847668 -999.00  +20.90   7.60     19   -2.90 1 1 1 1 1     0    0 23.92 14.61 ZNESW 7.0 7.6 160.6 10.4 20.5 -26.0 20.6 -25.5 20.2 -24.2 20.4 -25.1
2025-11-25T22:21:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:21:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:21:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.847668
2025-11-25T22:21:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:21:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:21:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:21:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:21:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:21:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:20:52', tmtdew=27.97, humidity=14.4, cloud=0.0, wind=11.96, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:20:52', seeing=1.07, atlas_timestamp='2025-11-25T20:20:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.0022500000000000853, 0.039250000000000895, -0.04200000000000159, 0.0045000000000001705, 0.07125000000000092, 0.014499999999999957, 0.015249999999999986, 0.05649999999999977, -0.0009999999999994458, 0.024250000000000327, -0.009999999999999787, 0.0600000000000005, 0.051249999999999574, 0.004999999999999005, 0.021999999999998465, 0.040749999999999176, 0.06550000000000011, 0.07499999999999929, 0.02624999999999922, 0.10499999999999865, 0.0572499999999998, 0.03625000000000078, 0.039250000000000895, 0.010999999999999233, 0.05850000000000044, 0.08525000000000027, 0.0754999999999999, 0.0730000000000004, 0.07850000000000179, 0.0600000000000005, 0.008000000000000895, -0.034250000000000114], zp_timestamp='2025-11-25T20:16:00')
2025-11-25T22:21:05.486 [DEBUG] [Thread-6753] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:21:05.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:21:05.584 [DEBUG] [Thread-6756] [transport.py] [_log()] starting thread (client mode): 0x70d57b80
2025-11-25T22:21:05.584 [DEBUG] [Thread-6756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:21:05.598 [DEBUG] [Thread-6756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:21:05.598 [INFO] [Thread-6756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:21:05.606 [DEBUG] [Thread-6756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:21:05.606 [DEBUG] [Thread-6756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:21:05.606 [DEBUG] [Thread-6756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:21:05.606 [DEBUG] [Thread-6756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:21:05.606 [DEBUG] [Thread-6756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:21:05.606 [DEBUG] [Thread-6756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:21:05.606 [DEBUG] [Thread-6756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:21:05.606 [DEBUG] [Thread-6756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] client lang: <none>
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] server lang: <none>
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] kex follows: False
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] Compression: none
2025-11-25T22:21:05.607 [DEBUG] [Thread-6756] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:21:05.664 [DEBUG] [Thread-6756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:21:05.664 [DEBUG] [Thread-6756] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:21:05.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:21:05.665 [DEBUG] [Thread-6756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:21:05.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:21:05.719 [DEBUG] [Thread-6756] [transport.py] [_log()] userauth is OK
2025-11-25T22:21:05.720 [DEBUG] [Thread-6756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:21:05.720 [DEBUG] [Thread-6756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:21:05.720 [DEBUG] [Thread-6756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:21:05.720 [DEBUG] [Thread-6756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:21:05.738 [INFO] [Thread-6756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:21:05.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:21:05.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:21:06.557 [DEBUG] [Thread-6756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:21:06.557 [DEBUG] [Thread-6756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:21:06.606 [DEBUG] [Thread-6756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:21:06.606 [DEBUG] [Thread-6756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:21:06.615 [DEBUG] [Thread-6756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:21:06.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:21:06.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:21:06.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:21:06.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:21:06.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:21:06.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:21:06.652 [DEBUG] [Thread-6756] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:21:08.359 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:17.624 [DEBUG] [Thread-6758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:18.750 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:29.127 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:32.678 [DEBUG] [Thread-6759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:36.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:21:36.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:21:36.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:21:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 21, 24), 27.96, 14.4, 0.0, 12.53, 20.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:21:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:21:24
2025-11-25T22:21:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:21:37.648 [DEBUG] [Thread-6760] [transport.py] [_log()] starting thread (client mode): 0x70d7fbb0
2025-11-25T22:21:37.648 [DEBUG] [Thread-6760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:21:37.669 [DEBUG] [Thread-6760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:21:37.669 [INFO] [Thread-6760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] client lang: <none>
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] server lang: <none>
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] kex follows: False
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] Compression: none
2025-11-25T22:21:37.672 [DEBUG] [Thread-6760] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:21:37.690 [DEBUG] [Thread-6760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:21:37.690 [DEBUG] [Thread-6760] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:21:37.690 [DEBUG] [Thread-6760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:21:37.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:21:37.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:21:37.691 [DEBUG] [Thread-6760] [transport.py] [_log()] userauth is OK
2025-11-25T22:21:37.691 [DEBUG] [Thread-6760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:21:37.691 [DEBUG] [Thread-6760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:21:37.691 [DEBUG] [Thread-6760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:21:37.691 [DEBUG] [Thread-6760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:21:37.700 [INFO] [Thread-6760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:21:37.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:21:38.340 [DEBUG] [Thread-6760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:21:38.341 [DEBUG] [Thread-6760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:21:38.341 [DEBUG] [Thread-6760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:21:38.381 [DEBUG] [Thread-6760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:21:38.381 [DEBUG] [Thread-6760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:21:38.383 [DEBUG] [Thread-6760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:21:38.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:21:38.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:21:38.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:21:38.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:21:38.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:21:38.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:21:38.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.848015 -999.00  +20.90   6.26     20   -2.80 1 1 1 1 1     0    0 24.36 17.39 ZNESW 6.7 6.3 157.2 8.7 20.5 -26.1 20.5 -25.4 20.2 -24.1 20.4 -25.1
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.848015
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:21:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:21:24', tmtdew=27.96, humidity=14.4, cloud=0.0, wind=12.53, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:21:24', seeing=1.13, atlas_timestamp='2025-11-25T20:21:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.01574999999999882, 0.0022500000000000853, 0.039250000000000895, -0.04200000000000159, 0.0045000000000001705, 0.07125000000000092, 0.014499999999999957, 0.015249999999999986, 0.05649999999999977, -0.0009999999999994458, 0.024250000000000327, -0.009999999999999787, 0.0600000000000005, 0.051249999999999574, 0.004999999999999005, 0.021999999999998465, 0.040749999999999176, 0.06550000000000011, 0.07499999999999929, 0.02624999999999922, 0.10499999999999865, 0.0572499999999998, 0.03625000000000078, 0.039250000000000895, 0.010999999999999233, 0.05850000000000044, 0.08525000000000027, 0.0754999999999999, 0.0730000000000004, 0.07850000000000179, 0.0600000000000005, 0.008000000000000895, -0.034250000000000114], zp_timestamp='2025-11-25T20:16:00')
2025-11-25T22:21:38.403 [DEBUG] [Thread-6760] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:21:38.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:21:38.487 [DEBUG] [Thread-6763] [transport.py] [_log()] starting thread (client mode): 0x70d3ac80
2025-11-25T22:21:38.487 [DEBUG] [Thread-6763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:21:38.505 [DEBUG] [Thread-6763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:21:38.505 [INFO] [Thread-6763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] client lang: <none>
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] server lang: <none>
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] kex follows: False
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] Compression: none
2025-11-25T22:21:38.513 [DEBUG] [Thread-6763] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:21:38.569 [DEBUG] [Thread-6763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:21:38.569 [DEBUG] [Thread-6763] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:21:38.569 [DEBUG] [Thread-6763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:21:38.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:21:38.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:21:38.627 [DEBUG] [Thread-6763] [transport.py] [_log()] userauth is OK
2025-11-25T22:21:38.627 [DEBUG] [Thread-6763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:21:38.627 [DEBUG] [Thread-6763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:21:38.627 [DEBUG] [Thread-6763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:21:38.627 [DEBUG] [Thread-6763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:21:38.643 [INFO] [Thread-6763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:21:38.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:21:38.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:21:39.471 [DEBUG] [Thread-6763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:21:39.471 [DEBUG] [Thread-6763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:21:39.519 [DEBUG] [Thread-6763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:21:39.519 [DEBUG] [Thread-6763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:21:39.525 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:39.527 [DEBUG] [Thread-6763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:21:39.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:21:39.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:21:39.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:21:39.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:21:39.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:21:39.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:21:39.559 [DEBUG] [Thread-6763] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:21:47.717 [DEBUG] [Thread-6765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:49.935 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:52.945 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:21:52.948 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:00.359 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:02.773 [DEBUG] [Thread-6766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:03.692 [DEBUG] [Thread-6767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:09.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:22:09.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:22:09.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:22:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 21, 56), 28.12, 14.39, 0.0, 12.12, 20.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:22:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:21:56
2025-11-25T22:22:10.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:22:10.492 [DEBUG] [Thread-6768] [transport.py] [_log()] starting thread (client mode): 0x70d749d0
2025-11-25T22:22:10.492 [DEBUG] [Thread-6768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:22:10.512 [DEBUG] [Thread-6768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:22:10.512 [INFO] [Thread-6768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] client lang: <none>
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] server lang: <none>
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] kex follows: False
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] Compression: none
2025-11-25T22:22:10.515 [DEBUG] [Thread-6768] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:22:10.531 [DEBUG] [Thread-6768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:22:10.531 [DEBUG] [Thread-6768] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:22:10.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:22:10.533 [DEBUG] [Thread-6768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:22:10.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:22:10.534 [DEBUG] [Thread-6768] [transport.py] [_log()] userauth is OK
2025-11-25T22:22:10.535 [DEBUG] [Thread-6768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:22:10.535 [DEBUG] [Thread-6768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:22:10.535 [DEBUG] [Thread-6768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:22:10.535 [DEBUG] [Thread-6768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:22:10.554 [INFO] [Thread-6768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:22:10.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:22:10.775 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:11.183 [DEBUG] [Thread-6768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:22:11.183 [DEBUG] [Thread-6768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:22:11.183 [DEBUG] [Thread-6768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:22:11.224 [DEBUG] [Thread-6768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:22:11.224 [DEBUG] [Thread-6768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:22:11.228 [DEBUG] [Thread-6768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:22:11.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:22:11.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:22:11.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:22:11.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:22:11.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:22:11.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:22:11.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:22:11.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:22:11.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:22:11.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.848362 -999.00  +20.80   6.75     20   -2.90 1 1 1 1 1     0    0 23.84 17.89 ZNESW 6.4 6.8 174.6 8.9 20.5 -26.1 20.5 -25.5 20.2 -24.1 20.4 -25.1
2025-11-25T22:22:11.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:22:11.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:22:11.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.848362
2025-11-25T22:22:11.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:22:11.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:22:11.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:22:11.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:22:11.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:22:11.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:21:56', tmtdew=28.12, humidity=14.39, cloud=0.0, wind=12.12, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:21:56', seeing=1.38, atlas_timestamp='2025-11-25T20:21:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:22:11.254 [DEBUG] [Thread-6768] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:22:11.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:22:11.350 [DEBUG] [Thread-6771] [transport.py] [_log()] starting thread (client mode): 0x70d7eef0
2025-11-25T22:22:11.350 [DEBUG] [Thread-6771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:22:11.365 [DEBUG] [Thread-6771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:22:11.365 [INFO] [Thread-6771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:22:11.373 [DEBUG] [Thread-6771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] client lang: <none>
2025-11-25T22:22:11.374 [DEBUG] [Thread-6771] [transport.py] [_log()] server lang: <none>
2025-11-25T22:22:11.375 [DEBUG] [Thread-6771] [transport.py] [_log()] kex follows: False
2025-11-25T22:22:11.375 [DEBUG] [Thread-6771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:22:11.375 [DEBUG] [Thread-6771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:22:11.375 [DEBUG] [Thread-6771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:22:11.375 [DEBUG] [Thread-6771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:22:11.375 [DEBUG] [Thread-6771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:22:11.375 [DEBUG] [Thread-6771] [transport.py] [_log()] Compression: none
2025-11-25T22:22:11.376 [DEBUG] [Thread-6771] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:22:11.433 [DEBUG] [Thread-6771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:22:11.433 [DEBUG] [Thread-6771] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:22:11.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:22:11.435 [DEBUG] [Thread-6771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:22:11.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:22:11.492 [DEBUG] [Thread-6771] [transport.py] [_log()] userauth is OK
2025-11-25T22:22:11.492 [DEBUG] [Thread-6771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:22:11.493 [DEBUG] [Thread-6771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:22:11.493 [DEBUG] [Thread-6771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:22:11.493 [DEBUG] [Thread-6771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:22:11.518 [INFO] [Thread-6771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:22:11.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:22:11.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:22:12.364 [DEBUG] [Thread-6771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:22:12.365 [DEBUG] [Thread-6771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:22:12.412 [DEBUG] [Thread-6771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:22:12.413 [DEBUG] [Thread-6771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:22:12.423 [DEBUG] [Thread-6771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:22:12.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:22:12.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:22:12.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:22:12.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:22:12.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:22:12.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:22:12.460 [DEBUG] [Thread-6771] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:22:17.804 [DEBUG] [Thread-6773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:21.186 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:31.583 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:32.854 [DEBUG] [Thread-6774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:41.977 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:42.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:22:42.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:22:42.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:22:43.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 22, 28), 28.14, 14.37, 0.0, 11.47, 20.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:22:43.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:22:28
2025-11-25T22:22:43.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:22:43.407 [DEBUG] [Thread-6775] [transport.py] [_log()] starting thread (client mode): 0x70d036a0
2025-11-25T22:22:43.408 [DEBUG] [Thread-6775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:22:43.428 [DEBUG] [Thread-6775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:22:43.428 [INFO] [Thread-6775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:22:43.430 [DEBUG] [Thread-6775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:22:43.430 [DEBUG] [Thread-6775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] client lang: <none>
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] server lang: <none>
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] kex follows: False
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] Compression: none
2025-11-25T22:22:43.431 [DEBUG] [Thread-6775] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:22:43.448 [DEBUG] [Thread-6775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:22:43.449 [DEBUG] [Thread-6775] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:22:43.449 [DEBUG] [Thread-6775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:22:43.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:22:43.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:22:43.493 [DEBUG] [Thread-6775] [transport.py] [_log()] userauth is OK
2025-11-25T22:22:43.494 [DEBUG] [Thread-6775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:22:43.494 [DEBUG] [Thread-6775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:22:43.494 [DEBUG] [Thread-6775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:22:43.494 [DEBUG] [Thread-6775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:22:43.525 [INFO] [Thread-6775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:22:43.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:22:44.163 [DEBUG] [Thread-6775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:22:44.163 [DEBUG] [Thread-6775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:22:44.164 [DEBUG] [Thread-6775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:22:44.203 [DEBUG] [Thread-6775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:22:44.203 [DEBUG] [Thread-6775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:22:44.206 [DEBUG] [Thread-6775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:22:44.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:22:44.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:22:44.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:22:44.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:22:44.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:22:44.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:22:44.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:22:44.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:22:44.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:22:44.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.848709 -999.00  +20.70   6.30     20   -3.00 1 1 1 1 1     0    0 23.75 19.06 ZNESW 5.5 6.3 158.8 8.3 20.5 -25.9 20.5 -25.5 20.2 -24.2 20.4 -25.1
2025-11-25T22:22:44.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:22:44.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:22:44.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.848709
2025-11-25T22:22:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:22:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:22:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:22:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:22:44.228 [DEBUG] [Thread-6775] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:22:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:22:44.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:22:28', tmtdew=28.14, humidity=14.37, cloud=0.0, wind=11.47, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:22:28', seeing=1.02, atlas_timestamp='2025-11-25T20:22:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:22:44.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:22:44.322 [DEBUG] [Thread-6778] [transport.py] [_log()] starting thread (client mode): 0x70d75b40
2025-11-25T22:22:44.322 [DEBUG] [Thread-6778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:22:44.340 [DEBUG] [Thread-6778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:22:44.340 [INFO] [Thread-6778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:22:44.348 [DEBUG] [Thread-6778] [transport.py] [_log()] client lang: <none>
2025-11-25T22:22:44.349 [DEBUG] [Thread-6778] [transport.py] [_log()] server lang: <none>
2025-11-25T22:22:44.349 [DEBUG] [Thread-6778] [transport.py] [_log()] kex follows: False
2025-11-25T22:22:44.349 [DEBUG] [Thread-6778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:22:44.349 [DEBUG] [Thread-6778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:22:44.349 [DEBUG] [Thread-6778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:22:44.349 [DEBUG] [Thread-6778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:22:44.349 [DEBUG] [Thread-6778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:22:44.349 [DEBUG] [Thread-6778] [transport.py] [_log()] Compression: none
2025-11-25T22:22:44.349 [DEBUG] [Thread-6778] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:22:44.410 [DEBUG] [Thread-6778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:22:44.411 [DEBUG] [Thread-6778] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:22:44.411 [DEBUG] [Thread-6778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:22:44.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:22:44.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:22:44.468 [DEBUG] [Thread-6778] [transport.py] [_log()] userauth is OK
2025-11-25T22:22:44.469 [DEBUG] [Thread-6778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:22:44.469 [DEBUG] [Thread-6778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:22:44.469 [DEBUG] [Thread-6778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:22:44.469 [DEBUG] [Thread-6778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:22:44.487 [INFO] [Thread-6778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:22:44.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:22:44.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:22:45.357 [DEBUG] [Thread-6778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:22:45.357 [DEBUG] [Thread-6778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:22:45.405 [DEBUG] [Thread-6778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:22:45.405 [DEBUG] [Thread-6778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:22:45.414 [DEBUG] [Thread-6778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:22:45.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:22:45.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:22:45.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:22:45.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:22:45.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:22:45.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:22:45.445 [DEBUG] [Thread-6778] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:22:47.892 [DEBUG] [Thread-6780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:52.377 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:53.180 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:22:53.181 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:02.769 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:02.940 [DEBUG] [Thread-6781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:03.743 [DEBUG] [Thread-6782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:13.177 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:15.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:23:15.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:23:15.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:23:16.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 23), 28.29, 14.3, 0.0, 11.58, 20.77, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:23:16.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:23:00
2025-11-25T22:23:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:23:16.374 [DEBUG] [Thread-6783] [transport.py] [_log()] starting thread (client mode): 0x70da5a80
2025-11-25T22:23:16.374 [DEBUG] [Thread-6783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:23:16.396 [DEBUG] [Thread-6783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:23:16.396 [INFO] [Thread-6783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] client lang: <none>
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] server lang: <none>
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] kex follows: False
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:23:16.400 [DEBUG] [Thread-6783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:23:16.401 [DEBUG] [Thread-6783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:23:16.401 [DEBUG] [Thread-6783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:23:16.401 [DEBUG] [Thread-6783] [transport.py] [_log()] Compression: none
2025-11-25T22:23:16.401 [DEBUG] [Thread-6783] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:23:16.415 [DEBUG] [Thread-6783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:23:16.415 [DEBUG] [Thread-6783] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:23:16.416 [DEBUG] [Thread-6783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:23:16.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:23:16.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:23:16.421 [DEBUG] [Thread-6783] [transport.py] [_log()] userauth is OK
2025-11-25T22:23:16.421 [DEBUG] [Thread-6783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:23:16.421 [DEBUG] [Thread-6783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:23:16.421 [DEBUG] [Thread-6783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:23:16.421 [DEBUG] [Thread-6783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:23:16.449 [INFO] [Thread-6783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:23:16.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:23:17.045 [DEBUG] [Thread-6783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:23:17.046 [DEBUG] [Thread-6783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:23:17.046 [DEBUG] [Thread-6783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:23:17.086 [DEBUG] [Thread-6783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:23:17.087 [DEBUG] [Thread-6783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:23:17.090 [DEBUG] [Thread-6783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:23:17.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:23:17.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:23:17.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:23:17.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:23:17.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:23:17.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:23:17.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:23:17.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:23:17.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:23:17.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.849404 -999.00  +20.70   8.11     19   -3.20 1 1 1 1 1     0    0 24.64 22.14 ZNESW 8.6 8.1 161.0 11.4 20.4 -26.0 20.4 -25.4 20.1 -24.1 20.3 -25.1
2025-11-25T22:23:17.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:23:17.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:23:17.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.849404
2025-11-25T22:23:17.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:23:17.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:23:17.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:23:17.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:23:17.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:23:17.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:23:00', tmtdew=28.29, humidity=14.3, cloud=0.0, wind=11.58, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:23:00', seeing=1.04, atlas_timestamp='2025-11-25T20:23:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:23:17.116 [DEBUG] [Thread-6783] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:23:17.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:23:17.213 [DEBUG] [Thread-6786] [transport.py] [_log()] starting thread (client mode): 0x70da6380
2025-11-25T22:23:17.213 [DEBUG] [Thread-6786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:23:17.228 [DEBUG] [Thread-6786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:23:17.228 [INFO] [Thread-6786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] client lang: <none>
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] server lang: <none>
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] kex follows: False
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:23:17.236 [DEBUG] [Thread-6786] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:23:17.237 [DEBUG] [Thread-6786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:23:17.237 [DEBUG] [Thread-6786] [transport.py] [_log()] Compression: none
2025-11-25T22:23:17.237 [DEBUG] [Thread-6786] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:23:17.296 [DEBUG] [Thread-6786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:23:17.296 [DEBUG] [Thread-6786] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:23:17.297 [DEBUG] [Thread-6786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:23:17.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:23:17.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:23:17.352 [DEBUG] [Thread-6786] [transport.py] [_log()] userauth is OK
2025-11-25T22:23:17.352 [DEBUG] [Thread-6786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:23:17.352 [DEBUG] [Thread-6786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:23:17.352 [DEBUG] [Thread-6786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:23:17.352 [DEBUG] [Thread-6786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:23:17.371 [INFO] [Thread-6786] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:23:17.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:23:17.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:23:17.980 [DEBUG] [Thread-6788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:18.237 [DEBUG] [Thread-6786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:23:18.238 [DEBUG] [Thread-6786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:23:18.286 [DEBUG] [Thread-6786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:23:18.286 [DEBUG] [Thread-6786] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:23:18.295 [DEBUG] [Thread-6786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:23:18.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:23:18.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:23:18.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:23:18.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:23:18.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:23:18.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:23:18.332 [DEBUG] [Thread-6786] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:23:23.563 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:33.039 [DEBUG] [Thread-6789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:33.985 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:44.400 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:48.072 [DEBUG] [Thread-6790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:48.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:23:48.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:23:48.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:23:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 23, 32), 28.37, 14.21, 0.0, 12.44, 20.73, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:23:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:23:32
2025-11-25T22:23:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:23:49.241 [DEBUG] [Thread-6791] [transport.py] [_log()] starting thread (client mode): 0x70d2a5f0
2025-11-25T22:23:49.241 [DEBUG] [Thread-6791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:23:49.261 [DEBUG] [Thread-6791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:23:49.262 [INFO] [Thread-6791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:23:49.262 [DEBUG] [Thread-6791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:23:49.262 [DEBUG] [Thread-6791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] client lang: <none>
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] server lang: <none>
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] kex follows: False
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] Compression: none
2025-11-25T22:23:49.263 [DEBUG] [Thread-6791] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:23:49.274 [DEBUG] [Thread-6791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:23:49.275 [DEBUG] [Thread-6791] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:23:49.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:23:49.275 [DEBUG] [Thread-6791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:23:49.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:23:49.277 [DEBUG] [Thread-6791] [transport.py] [_log()] userauth is OK
2025-11-25T22:23:49.278 [DEBUG] [Thread-6791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:23:49.278 [DEBUG] [Thread-6791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:23:49.278 [DEBUG] [Thread-6791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:23:49.278 [DEBUG] [Thread-6791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:23:49.302 [INFO] [Thread-6791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:23:49.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:23:49.827 [DEBUG] [Thread-6791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:23:49.827 [DEBUG] [Thread-6791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:23:49.827 [DEBUG] [Thread-6791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:23:49.868 [DEBUG] [Thread-6791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:23:49.868 [DEBUG] [Thread-6791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:23:49.871 [DEBUG] [Thread-6791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:23:49.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:23:49.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:23:49.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:23:49.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:23:49.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:23:49.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:23:49.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:23:49.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:23:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:23:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.849751 -999.00  +20.70   7.24     19   -3.30 1 1 1 1 1     0    0 23.91 24.68 ZNESW 8.2 7.2 162.0 10.2 20.5 -26.0 20.4 -25.4 20.1 -24.1 20.4 -24.8
2025-11-25T22:23:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:23:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:23:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.849751
2025-11-25T22:23:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:23:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:23:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:23:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:23:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:23:49.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:23:32', tmtdew=28.37, humidity=14.21, cloud=0.0, wind=12.44, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:23:32', seeing=0.94, atlas_timestamp='2025-11-25T20:23:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:23:49.897 [DEBUG] [Thread-6791] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:23:49.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:23:49.993 [DEBUG] [Thread-6794] [transport.py] [_log()] starting thread (client mode): 0x70da6890
2025-11-25T22:23:49.993 [DEBUG] [Thread-6794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:23:50.008 [DEBUG] [Thread-6794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:23:50.008 [INFO] [Thread-6794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] client lang: <none>
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] server lang: <none>
2025-11-25T22:23:50.016 [DEBUG] [Thread-6794] [transport.py] [_log()] kex follows: False
2025-11-25T22:23:50.017 [DEBUG] [Thread-6794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:23:50.017 [DEBUG] [Thread-6794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:23:50.017 [DEBUG] [Thread-6794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:23:50.017 [DEBUG] [Thread-6794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:23:50.017 [DEBUG] [Thread-6794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:23:50.017 [DEBUG] [Thread-6794] [transport.py] [_log()] Compression: none
2025-11-25T22:23:50.017 [DEBUG] [Thread-6794] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:23:50.076 [DEBUG] [Thread-6794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:23:50.077 [DEBUG] [Thread-6794] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:23:50.078 [DEBUG] [Thread-6794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:23:50.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:23:50.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:23:50.136 [DEBUG] [Thread-6794] [transport.py] [_log()] userauth is OK
2025-11-25T22:23:50.136 [DEBUG] [Thread-6794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:23:50.136 [DEBUG] [Thread-6794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:23:50.137 [DEBUG] [Thread-6794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:23:50.137 [DEBUG] [Thread-6794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:23:50.156 [INFO] [Thread-6794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:23:50.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:23:50.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:23:51.009 [DEBUG] [Thread-6794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:23:51.009 [DEBUG] [Thread-6794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:23:51.057 [DEBUG] [Thread-6794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:23:51.057 [DEBUG] [Thread-6794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:23:51.066 [DEBUG] [Thread-6794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:23:51.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:23:51.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:23:51.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:23:51.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:23:51.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:23:51.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:23:51.102 [DEBUG] [Thread-6794] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:23:53.381 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:53.382 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:23:54.814 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:03.112 [DEBUG] [Thread-6796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:03.813 [DEBUG] [Thread-6797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:05.227 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:15.648 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:18.158 [DEBUG] [Thread-6798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:21.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:24:21.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:24:21.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:24:21.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 24, 4), 28.48, 14.11, 0.0, 12.32, 20.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:24:21.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:24:04
2025-11-25T22:24:21.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:24:22.022 [DEBUG] [Thread-6799] [transport.py] [_log()] starting thread (client mode): 0x70da7dc0
2025-11-25T22:24:22.022 [DEBUG] [Thread-6799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:24:22.043 [DEBUG] [Thread-6799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:24:22.044 [INFO] [Thread-6799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:24:22.045 [DEBUG] [Thread-6799] [transport.py] [_log()] client lang: <none>
2025-11-25T22:24:22.046 [DEBUG] [Thread-6799] [transport.py] [_log()] server lang: <none>
2025-11-25T22:24:22.046 [DEBUG] [Thread-6799] [transport.py] [_log()] kex follows: False
2025-11-25T22:24:22.046 [DEBUG] [Thread-6799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:24:22.046 [DEBUG] [Thread-6799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:24:22.046 [DEBUG] [Thread-6799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:24:22.046 [DEBUG] [Thread-6799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:24:22.046 [DEBUG] [Thread-6799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:24:22.046 [DEBUG] [Thread-6799] [transport.py] [_log()] Compression: none
2025-11-25T22:24:22.046 [DEBUG] [Thread-6799] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:24:22.058 [DEBUG] [Thread-6799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:24:22.059 [DEBUG] [Thread-6799] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:24:22.060 [DEBUG] [Thread-6799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:24:22.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:24:22.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:24:22.062 [DEBUG] [Thread-6799] [transport.py] [_log()] userauth is OK
2025-11-25T22:24:22.062 [DEBUG] [Thread-6799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:24:22.063 [DEBUG] [Thread-6799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:24:22.063 [DEBUG] [Thread-6799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:24:22.063 [DEBUG] [Thread-6799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:24:22.088 [INFO] [Thread-6799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:24:22.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:24:22.702 [DEBUG] [Thread-6799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:24:22.702 [DEBUG] [Thread-6799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:24:22.703 [DEBUG] [Thread-6799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:24:22.743 [DEBUG] [Thread-6799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:24:22.743 [DEBUG] [Thread-6799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:24:22.746 [DEBUG] [Thread-6799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:24:22.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:24:22.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:24:22.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:24:22.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:24:22.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:24:22.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:24:22.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:24:22.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:24:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:24:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.850098 -999.00  +20.70  10.27     19   -3.60 1 1 1 1 1     0    0 24.21 27.27 ZNESW 10.4 10.3 185.8 12.3 20.4 -25.8 20.4 -25.4 20.1 -24.0 20.4 -24.6
2025-11-25T22:24:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:24:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:24:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.850098
2025-11-25T22:24:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:24:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:24:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:24:22.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:24:22.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:24:22.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:24:04', tmtdew=28.48, humidity=14.11, cloud=0.0, wind=12.32, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:24:04', seeing=0.94, atlas_timestamp='2025-11-25T20:24:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:24:22.769 [DEBUG] [Thread-6799] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:24:22.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:24:22.865 [DEBUG] [Thread-6802] [transport.py] [_log()] starting thread (client mode): 0x70da6830
2025-11-25T22:24:22.866 [DEBUG] [Thread-6802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:24:22.880 [DEBUG] [Thread-6802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:24:22.880 [INFO] [Thread-6802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] client lang: <none>
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] server lang: <none>
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] kex follows: False
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] Compression: none
2025-11-25T22:24:22.888 [DEBUG] [Thread-6802] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:24:22.947 [DEBUG] [Thread-6802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:24:22.948 [DEBUG] [Thread-6802] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:24:22.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:24:22.949 [DEBUG] [Thread-6802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:24:22.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:24:23.004 [DEBUG] [Thread-6802] [transport.py] [_log()] userauth is OK
2025-11-25T22:24:23.004 [DEBUG] [Thread-6802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:24:23.004 [DEBUG] [Thread-6802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:24:23.004 [DEBUG] [Thread-6802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:24:23.004 [DEBUG] [Thread-6802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:24:23.026 [INFO] [Thread-6802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:24:23.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:24:23.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:24:23.847 [DEBUG] [Thread-6802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:24:23.847 [DEBUG] [Thread-6802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:24:23.895 [DEBUG] [Thread-6802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:24:23.895 [DEBUG] [Thread-6802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:24:23.905 [DEBUG] [Thread-6802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:24:23.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:24:23.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:24:23.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:24:23.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:24:23.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:24:23.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:24:23.941 [DEBUG] [Thread-6802] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:24:26.043 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:33.195 [DEBUG] [Thread-6804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:36.439 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:46.837 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:48.244 [DEBUG] [Thread-6805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:53.588 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:53.589 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:24:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:24:53.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:24:53.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:24:54.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 24, 36), 28.59, 14.04, 0.0, 13.59, 20.77, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:24:54.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:24:36
2025-11-25T22:24:54.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:24:54.851 [DEBUG] [Thread-6806] [transport.py] [_log()] starting thread (client mode): 0x70d018a0
2025-11-25T22:24:54.851 [DEBUG] [Thread-6806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:24:54.865 [DEBUG] [Thread-6806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:24:54.865 [INFO] [Thread-6806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:24:54.868 [DEBUG] [Thread-6806] [transport.py] [_log()] client lang: <none>
2025-11-25T22:24:54.869 [DEBUG] [Thread-6806] [transport.py] [_log()] server lang: <none>
2025-11-25T22:24:54.869 [DEBUG] [Thread-6806] [transport.py] [_log()] kex follows: False
2025-11-25T22:24:54.869 [DEBUG] [Thread-6806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:24:54.869 [DEBUG] [Thread-6806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:24:54.869 [DEBUG] [Thread-6806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:24:54.869 [DEBUG] [Thread-6806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:24:54.869 [DEBUG] [Thread-6806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:24:54.869 [DEBUG] [Thread-6806] [transport.py] [_log()] Compression: none
2025-11-25T22:24:54.869 [DEBUG] [Thread-6806] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:24:54.885 [DEBUG] [Thread-6806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:24:54.886 [DEBUG] [Thread-6806] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:24:54.887 [DEBUG] [Thread-6806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:24:54.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:24:54.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:24:54.889 [DEBUG] [Thread-6806] [transport.py] [_log()] userauth is OK
2025-11-25T22:24:54.889 [DEBUG] [Thread-6806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:24:54.889 [DEBUG] [Thread-6806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:24:54.889 [DEBUG] [Thread-6806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:24:54.889 [DEBUG] [Thread-6806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:24:54.909 [INFO] [Thread-6806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:24:54.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:24:55.519 [DEBUG] [Thread-6806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:24:55.519 [DEBUG] [Thread-6806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:24:55.519 [DEBUG] [Thread-6806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:24:55.559 [DEBUG] [Thread-6806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:24:55.560 [DEBUG] [Thread-6806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:24:55.563 [DEBUG] [Thread-6806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:24:55.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:24:55.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:24:55.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:24:55.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:24:55.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:24:55.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:24:55.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:24:55.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:24:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:24:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.850445 -999.00  +20.90  10.14     18   -3.50 1 1 1 1 1     0    0 25.01 34.21 ZNESW 9.3 10.1 180.8 12.5 20.5 -25.6 20.5 -24.3 20.2 -24.0 20.4 -24.6
2025-11-25T22:24:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:24:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:24:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.850445
2025-11-25T22:24:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:24:55.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:24:55.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:24:55.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:24:55.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:24:55.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:24:36', tmtdew=28.59, humidity=14.04, cloud=0.0, wind=13.59, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:24:37', seeing=1.08, atlas_timestamp='2025-11-25T20:24:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:24:55.585 [DEBUG] [Thread-6806] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:24:55.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:24:55.683 [DEBUG] [Thread-6809] [transport.py] [_log()] starting thread (client mode): 0x70d020e0
2025-11-25T22:24:55.683 [DEBUG] [Thread-6809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:24:55.697 [DEBUG] [Thread-6809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:24:55.698 [INFO] [Thread-6809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:24:55.705 [DEBUG] [Thread-6809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:24:55.705 [DEBUG] [Thread-6809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:24:55.705 [DEBUG] [Thread-6809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:24:55.705 [DEBUG] [Thread-6809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:24:55.705 [DEBUG] [Thread-6809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] client lang: <none>
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] server lang: <none>
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] kex follows: False
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:24:55.706 [DEBUG] [Thread-6809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:24:55.707 [DEBUG] [Thread-6809] [transport.py] [_log()] Compression: none
2025-11-25T22:24:55.707 [DEBUG] [Thread-6809] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:24:55.763 [DEBUG] [Thread-6809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:24:55.764 [DEBUG] [Thread-6809] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:24:55.764 [DEBUG] [Thread-6809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:24:55.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:24:55.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:24:55.819 [DEBUG] [Thread-6809] [transport.py] [_log()] userauth is OK
2025-11-25T22:24:55.820 [DEBUG] [Thread-6809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:24:55.820 [DEBUG] [Thread-6809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:24:55.820 [DEBUG] [Thread-6809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:24:55.820 [DEBUG] [Thread-6809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:24:55.839 [INFO] [Thread-6809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:24:55.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:24:55.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:24:56.680 [DEBUG] [Thread-6809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:24:56.680 [DEBUG] [Thread-6809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:24:56.728 [DEBUG] [Thread-6809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:24:56.728 [DEBUG] [Thread-6809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:24:56.737 [DEBUG] [Thread-6809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:24:56.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:24:56.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:24:56.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:24:56.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:24:56.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:24:56.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:24:56.771 [DEBUG] [Thread-6809] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:24:57.233 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:03.278 [DEBUG] [Thread-6811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:03.892 [DEBUG] [Thread-6812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:07.629 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:18.026 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:18.329 [DEBUG] [Thread-6813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:26.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:25:26.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:25:26.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:25:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 25, 8), 28.54, 14.09, 0.0, 12.83, 20.75, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:25:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:25:08
2025-11-25T22:25:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:25:27.714 [DEBUG] [Thread-6814] [transport.py] [_log()] starting thread (client mode): 0x70d029b0
2025-11-25T22:25:27.714 [DEBUG] [Thread-6814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:25:27.735 [DEBUG] [Thread-6814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:25:27.735 [INFO] [Thread-6814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:25:27.738 [DEBUG] [Thread-6814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] client lang: <none>
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] server lang: <none>
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] kex follows: False
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] Compression: none
2025-11-25T22:25:27.739 [DEBUG] [Thread-6814] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:25:27.753 [DEBUG] [Thread-6814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:25:27.754 [DEBUG] [Thread-6814] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:25:27.754 [DEBUG] [Thread-6814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:25:27.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:25:27.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:25:27.756 [DEBUG] [Thread-6814] [transport.py] [_log()] userauth is OK
2025-11-25T22:25:27.756 [DEBUG] [Thread-6814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:25:27.756 [DEBUG] [Thread-6814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:25:27.756 [DEBUG] [Thread-6814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:25:27.756 [DEBUG] [Thread-6814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:25:27.777 [INFO] [Thread-6814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:25:27.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:25:28.358 [DEBUG] [Thread-6814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:25:28.358 [DEBUG] [Thread-6814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:25:28.359 [DEBUG] [Thread-6814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:25:28.400 [DEBUG] [Thread-6814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:25:28.400 [DEBUG] [Thread-6814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:25:28.404 [DEBUG] [Thread-6814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:25:28.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:25:28.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:25:28.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:25:28.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:25:28.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:25:28.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:25:28.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:25:28.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:25:28.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:25:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.850445 -999.00  +20.90  10.14     18   -3.50 1 1 1 1 1     0    0 25.01 34.21 ZNESW 9.3 10.1 180.8 12.5 20.5 -25.6 20.5 -24.3 20.2 -24.0 20.4 -24.6
2025-11-25T22:25:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:25:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:25:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.850445
2025-11-25T22:25:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:25:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:25:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:25:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:25:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:25:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:25:08', tmtdew=28.54, humidity=14.09, cloud=0.0, wind=12.83, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:25:09', seeing=1.07, atlas_timestamp='2025-11-25T20:24:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:25:28.430 [DEBUG] [Thread-6814] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:25:28.441 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:28.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:25:28.528 [DEBUG] [Thread-6817] [transport.py] [_log()] starting thread (client mode): 0x70d7f0d0
2025-11-25T22:25:28.528 [DEBUG] [Thread-6817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:25:28.546 [DEBUG] [Thread-6817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:25:28.547 [INFO] [Thread-6817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:25:28.554 [DEBUG] [Thread-6817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:25:28.554 [DEBUG] [Thread-6817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:25:28.554 [DEBUG] [Thread-6817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:25:28.554 [DEBUG] [Thread-6817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:25:28.554 [DEBUG] [Thread-6817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:25:28.554 [DEBUG] [Thread-6817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:25:28.554 [DEBUG] [Thread-6817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] client lang: <none>
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] server lang: <none>
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] kex follows: False
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] Compression: none
2025-11-25T22:25:28.555 [DEBUG] [Thread-6817] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:25:28.610 [DEBUG] [Thread-6817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:25:28.611 [DEBUG] [Thread-6817] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:25:28.611 [DEBUG] [Thread-6817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:25:28.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:25:28.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:25:28.668 [DEBUG] [Thread-6817] [transport.py] [_log()] userauth is OK
2025-11-25T22:25:28.669 [DEBUG] [Thread-6817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:25:28.669 [DEBUG] [Thread-6817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:25:28.669 [DEBUG] [Thread-6817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:25:28.669 [DEBUG] [Thread-6817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:25:28.689 [INFO] [Thread-6817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:25:28.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:25:28.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:25:29.577 [DEBUG] [Thread-6817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:25:29.577 [DEBUG] [Thread-6817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:25:29.625 [DEBUG] [Thread-6817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:25:29.625 [DEBUG] [Thread-6817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:25:29.634 [DEBUG] [Thread-6817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:25:29.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:25:29.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:25:29.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:25:29.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:25:29.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:25:29.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:25:29.670 [DEBUG] [Thread-6817] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:25:33.361 [DEBUG] [Thread-6819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:38.856 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:48.411 [DEBUG] [Thread-6820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:49.274 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:53.795 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:53.796 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:59.670 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:25:59.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:25:59.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:25:59.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:26:00.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 25, 40), 28.7, 13.59, 0.0, 8.96, 20.9, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:26:00.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:25:40
2025-11-25T22:26:00.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:26:00.659 [DEBUG] [Thread-6821] [transport.py] [_log()] starting thread (client mode): 0x70d7dfc0
2025-11-25T22:26:00.659 [DEBUG] [Thread-6821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:26:00.678 [DEBUG] [Thread-6821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:26:00.679 [INFO] [Thread-6821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] client lang: <none>
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] server lang: <none>
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] kex follows: False
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] Compression: none
2025-11-25T22:26:00.682 [DEBUG] [Thread-6821] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:26:00.690 [DEBUG] [Thread-6821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:26:00.690 [DEBUG] [Thread-6821] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:26:00.690 [DEBUG] [Thread-6821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:26:00.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:26:00.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:26:00.691 [DEBUG] [Thread-6821] [transport.py] [_log()] userauth is OK
2025-11-25T22:26:00.691 [DEBUG] [Thread-6821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:26:00.691 [DEBUG] [Thread-6821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:26:00.691 [DEBUG] [Thread-6821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:26:00.691 [DEBUG] [Thread-6821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:26:00.720 [INFO] [Thread-6821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:26:00.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:26:01.341 [DEBUG] [Thread-6821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:26:01.341 [DEBUG] [Thread-6821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:26:01.342 [DEBUG] [Thread-6821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:26:01.382 [DEBUG] [Thread-6821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:26:01.382 [DEBUG] [Thread-6821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:26:01.385 [DEBUG] [Thread-6821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:26:01.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:26:01.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:26:01.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:26:01.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:26:01.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:26:01.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:26:01.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.850792 -999.00  +21.00   8.23     18   -3.50 1 1 1 1 1     0    0 24.60 36.72 ZNESW 9.6 8.2 186.0 11.8 20.5 -25.8 20.6 -25.0 20.2 -24.0 20.4 -25.0
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.850792
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:26:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:25:40', tmtdew=28.7, humidity=13.59, cloud=0.0, wind=8.96, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:25:41', seeing=1.17, atlas_timestamp='2025-11-25T20:25:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:26:01.402 [DEBUG] [Thread-6821] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:26:01.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:26:01.487 [DEBUG] [Thread-6824] [transport.py] [_log()] starting thread (client mode): 0x70da75b0
2025-11-25T22:26:01.487 [DEBUG] [Thread-6824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:26:01.501 [DEBUG] [Thread-6824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:26:01.502 [INFO] [Thread-6824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] client lang: <none>
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] server lang: <none>
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] kex follows: False
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:26:01.509 [DEBUG] [Thread-6824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:26:01.510 [DEBUG] [Thread-6824] [transport.py] [_log()] Compression: none
2025-11-25T22:26:01.510 [DEBUG] [Thread-6824] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:26:01.570 [DEBUG] [Thread-6824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:26:01.570 [DEBUG] [Thread-6824] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:26:01.570 [DEBUG] [Thread-6824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:26:01.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:26:01.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:26:01.627 [DEBUG] [Thread-6824] [transport.py] [_log()] userauth is OK
2025-11-25T22:26:01.627 [DEBUG] [Thread-6824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:26:01.627 [DEBUG] [Thread-6824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:26:01.627 [DEBUG] [Thread-6824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:26:01.627 [DEBUG] [Thread-6824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:26:01.648 [INFO] [Thread-6824] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:26:01.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:26:01.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:26:02.477 [DEBUG] [Thread-6824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:26:02.478 [DEBUG] [Thread-6824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:26:02.525 [DEBUG] [Thread-6824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:26:02.525 [DEBUG] [Thread-6824] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:26:02.534 [DEBUG] [Thread-6824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:26:02.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:26:02.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:26:02.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:26:02.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:26:02.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:26:02.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:26:02.566 [DEBUG] [Thread-6824] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:26:03.442 [DEBUG] [Thread-6826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:03.966 [DEBUG] [Thread-6827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:10.077 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:18.483 [DEBUG] [Thread-6828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:20.464 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:30.859 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:32.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:26:32.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:26:32.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:26:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 26, 12), 28.7, 13.61, 0.0, 10.2, 20.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:26:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:26:12
2025-11-25T22:26:33.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:26:33.484 [DEBUG] [Thread-6829] [transport.py] [_log()] starting thread (client mode): 0x70da78e0
2025-11-25T22:26:33.484 [DEBUG] [Thread-6829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:26:33.504 [DEBUG] [Thread-6829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:26:33.505 [INFO] [Thread-6829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] client lang: <none>
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] server lang: <none>
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] kex follows: False
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] Compression: none
2025-11-25T22:26:33.508 [DEBUG] [Thread-6829] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:26:33.521 [DEBUG] [Thread-6831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:33.525 [DEBUG] [Thread-6829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:26:33.525 [DEBUG] [Thread-6829] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:26:33.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:26:33.526 [DEBUG] [Thread-6829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:26:33.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:26:33.528 [DEBUG] [Thread-6829] [transport.py] [_log()] userauth is OK
2025-11-25T22:26:33.528 [DEBUG] [Thread-6829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:26:33.529 [DEBUG] [Thread-6829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:26:33.529 [DEBUG] [Thread-6829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:26:33.529 [DEBUG] [Thread-6829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:26:33.553 [INFO] [Thread-6829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:26:33.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:26:34.167 [DEBUG] [Thread-6829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:26:34.167 [DEBUG] [Thread-6829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:26:34.167 [DEBUG] [Thread-6829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:26:34.208 [DEBUG] [Thread-6829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:26:34.208 [DEBUG] [Thread-6829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:26:34.211 [DEBUG] [Thread-6829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:26:34.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:26:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:26:34.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:26:34.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:26:34.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:26:34.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:26:34.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:26:34.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:26:34.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:26:34.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.851140 -999.00  +21.00   7.61     19   -3.40 1 1 1 1 1     0    0 24.73 41.20 ZNESW 6.4 7.6 177.8 10.0 20.5 -25.7 20.5 -24.7 20.2 -23.9 20.4 -24.9
2025-11-25T22:26:34.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:26:34.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:26:34.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.851140
2025-11-25T22:26:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:26:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:26:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:26:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:26:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:26:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:26:12', tmtdew=28.7, humidity=13.61, cloud=0.0, wind=10.2, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:26:13', seeing=1.04, atlas_timestamp='2025-11-25T20:25:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:26:34.240 [DEBUG] [Thread-6829] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:26:34.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:26:34.336 [DEBUG] [Thread-6833] [transport.py] [_log()] starting thread (client mode): 0x70d410f0
2025-11-25T22:26:34.336 [DEBUG] [Thread-6833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:26:34.351 [DEBUG] [Thread-6833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:26:34.351 [INFO] [Thread-6833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:26:34.359 [DEBUG] [Thread-6833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:26:34.359 [DEBUG] [Thread-6833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:26:34.359 [DEBUG] [Thread-6833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:26:34.359 [DEBUG] [Thread-6833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:26:34.359 [DEBUG] [Thread-6833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:26:34.359 [DEBUG] [Thread-6833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:26:34.359 [DEBUG] [Thread-6833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:26:34.359 [DEBUG] [Thread-6833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:26:34.359 [DEBUG] [Thread-6833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] client lang: <none>
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] server lang: <none>
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] kex follows: False
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] Compression: none
2025-11-25T22:26:34.360 [DEBUG] [Thread-6833] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:26:34.420 [DEBUG] [Thread-6833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:26:34.420 [DEBUG] [Thread-6833] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:26:34.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:26:34.422 [DEBUG] [Thread-6833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:26:34.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:26:34.476 [DEBUG] [Thread-6833] [transport.py] [_log()] userauth is OK
2025-11-25T22:26:34.476 [DEBUG] [Thread-6833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:26:34.477 [DEBUG] [Thread-6833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:26:34.477 [DEBUG] [Thread-6833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:26:34.477 [DEBUG] [Thread-6833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:26:34.496 [INFO] [Thread-6833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:26:34.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:26:34.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:26:35.325 [DEBUG] [Thread-6833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:26:35.325 [DEBUG] [Thread-6833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:26:35.373 [DEBUG] [Thread-6833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:26:35.373 [DEBUG] [Thread-6833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:26:35.382 [DEBUG] [Thread-6833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:26:35.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:26:35.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:26:35.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:26:35.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:26:35.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:26:35.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:26:35.420 [DEBUG] [Thread-6833] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:26:41.262 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:48.552 [DEBUG] [Thread-6835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:51.656 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:53.998 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:26:53.999 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:02.112 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:03.605 [DEBUG] [Thread-6836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:04.052 [DEBUG] [Thread-6837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:27:05.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:27:05.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:27:06.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 26, 44), 28.5, 14.26, 0.0, 8.93, 20.88, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:27:06.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:26:44
2025-11-25T22:27:06.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:27:06.354 [DEBUG] [Thread-6838] [transport.py] [_log()] starting thread (client mode): 0x70da5510
2025-11-25T22:27:06.354 [DEBUG] [Thread-6838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:27:06.376 [DEBUG] [Thread-6838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:27:06.376 [INFO] [Thread-6838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:27:06.379 [DEBUG] [Thread-6838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:27:06.379 [DEBUG] [Thread-6838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:27:06.379 [DEBUG] [Thread-6838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:27:06.379 [DEBUG] [Thread-6838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:27:06.379 [DEBUG] [Thread-6838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:27:06.379 [DEBUG] [Thread-6838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] client lang: <none>
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] server lang: <none>
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] kex follows: False
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] Compression: none
2025-11-25T22:27:06.380 [DEBUG] [Thread-6838] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:27:06.397 [DEBUG] [Thread-6838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:27:06.397 [DEBUG] [Thread-6838] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:27:06.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:27:06.398 [DEBUG] [Thread-6838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:27:06.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:27:06.400 [DEBUG] [Thread-6838] [transport.py] [_log()] userauth is OK
2025-11-25T22:27:06.400 [DEBUG] [Thread-6838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:27:06.400 [DEBUG] [Thread-6838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:27:06.400 [DEBUG] [Thread-6838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:27:06.400 [DEBUG] [Thread-6838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:27:06.423 [INFO] [Thread-6838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:27:06.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:27:07.048 [DEBUG] [Thread-6838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:27:07.048 [DEBUG] [Thread-6838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:27:07.049 [DEBUG] [Thread-6838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:27:07.089 [DEBUG] [Thread-6838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:27:07.089 [DEBUG] [Thread-6838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:27:07.092 [DEBUG] [Thread-6838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:27:07.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:27:07.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:27:07.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:27:07.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:27:07.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:27:07.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:27:07.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:27:07.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:27:07.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:27:07.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.851487 -999.00  +21.10   9.29     19   -3.30 1 1 1 1 1     0    0 24.91 45.58 ZNESW 9.2 9.3 169.6 10.9 20.5 -25.7 20.5 -25.2 20.2 -24.0 20.4 -24.9
2025-11-25T22:27:07.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:27:07.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:27:07.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.851487
2025-11-25T22:27:07.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:27:07.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:27:07.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:27:07.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:27:07.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:27:07.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:26:44', tmtdew=28.5, humidity=14.26, cloud=0.0, wind=8.93, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:26:45', seeing=1.04, atlas_timestamp='2025-11-25T20:26:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:27:07.110 [DEBUG] [Thread-6838] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:27:07.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:27:07.205 [DEBUG] [Thread-6841] [transport.py] [_log()] starting thread (client mode): 0x70da6ad0
2025-11-25T22:27:07.206 [DEBUG] [Thread-6841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:27:07.220 [DEBUG] [Thread-6841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:27:07.220 [INFO] [Thread-6841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] client lang: <none>
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] server lang: <none>
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] kex follows: False
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] Compression: none
2025-11-25T22:27:07.227 [DEBUG] [Thread-6841] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:27:07.287 [DEBUG] [Thread-6841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:27:07.287 [DEBUG] [Thread-6841] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:27:07.287 [DEBUG] [Thread-6841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:27:07.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:27:07.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:27:07.348 [DEBUG] [Thread-6841] [transport.py] [_log()] userauth is OK
2025-11-25T22:27:07.348 [DEBUG] [Thread-6841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:27:07.348 [DEBUG] [Thread-6841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:27:07.348 [DEBUG] [Thread-6841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:27:07.348 [DEBUG] [Thread-6841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:27:07.370 [INFO] [Thread-6841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:27:07.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:27:07.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:27:08.230 [DEBUG] [Thread-6841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:27:08.231 [DEBUG] [Thread-6841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:27:08.278 [DEBUG] [Thread-6841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:27:08.278 [DEBUG] [Thread-6841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:27:08.287 [DEBUG] [Thread-6841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:27:08.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:27:08.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:27:08.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:27:08.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:27:08.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:27:08.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:27:08.323 [DEBUG] [Thread-6841] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:27:12.567 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:18.633 [DEBUG] [Thread-6843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:22.972 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:33.374 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:33.684 [DEBUG] [Thread-6844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:38.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:27:38.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:27:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:27:38.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 27, 17), 28.64, 14.11, 0.0, 9.14, 20.92, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:27:38.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:27:17
2025-11-25T22:27:39.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:27:39.263 [DEBUG] [Thread-6845] [transport.py] [_log()] starting thread (client mode): 0x70d7ffd0
2025-11-25T22:27:39.264 [DEBUG] [Thread-6845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:27:39.286 [DEBUG] [Thread-6845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:27:39.286 [INFO] [Thread-6845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:27:39.288 [DEBUG] [Thread-6845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] client lang: <none>
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] server lang: <none>
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] kex follows: False
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] Compression: none
2025-11-25T22:27:39.289 [DEBUG] [Thread-6845] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:27:39.307 [DEBUG] [Thread-6845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:27:39.307 [DEBUG] [Thread-6845] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:27:39.308 [DEBUG] [Thread-6845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:27:39.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:27:39.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:27:39.310 [DEBUG] [Thread-6845] [transport.py] [_log()] userauth is OK
2025-11-25T22:27:39.310 [DEBUG] [Thread-6845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:27:39.310 [DEBUG] [Thread-6845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:27:39.310 [DEBUG] [Thread-6845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:27:39.310 [DEBUG] [Thread-6845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:27:39.334 [INFO] [Thread-6845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:27:39.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:27:39.970 [DEBUG] [Thread-6845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:27:39.970 [DEBUG] [Thread-6845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:27:39.970 [DEBUG] [Thread-6845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:27:40.011 [DEBUG] [Thread-6845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:27:40.011 [DEBUG] [Thread-6845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:27:40.014 [DEBUG] [Thread-6845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:27:40.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:27:40.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:27:40.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:27:40.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:27:40.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:27:40.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:27:40.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:27:40.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:27:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:27:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.852182 -999.00  +21.10   5.75     19   -3.20 1 1 1 1 1     0    0 25.22 47.58 NA 5.4 5.8 160.0 9.9 20.5 -25.8 20.6 -25.4 20.2 -24.2 20.4 -25.1
2025-11-25T22:27:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:27:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:27:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.852182
2025-11-25T22:27:40.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:27:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:27:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:27:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:27:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:27:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:27:17', tmtdew=28.64, humidity=14.11, cloud=0.0, wind=9.14, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:27:17', seeing=0.87, atlas_timestamp='2025-11-25T20:27:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, -0.019249999999999545, 0.01025000000000098, -0.057500000000000995, 0.042500000000000426, 0.09325000000000117, -0.0235000000000003, 0.022250000000001435, 0.014499999999999957, 0.02200000000000024, 0.013749999999998153, 0.005000000000000782, 0.04299999999999926, 0.07574999999999932, 0.019999999999999574, -0.002500000000001279, -0.012250000000001648, 0.07949999999999946, 0.06599999999999895, 0.00024999999999941735, 0.047999999999998266, 0.09674999999999834, 0.016250000000001208, 0.027749999999999275, -0.005499999999999616, 0.0495000000000001, 0.06925000000000026, 0.07150000000000034, 0.11650000000000027, 0.015000000000000568, 0.04550000000000054, -0.0009999999999994458, -0.04875000000000185], zp_timestamp='2025-11-25T20:21:00')
2025-11-25T22:27:40.041 [DEBUG] [Thread-6845] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:27:40.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:27:40.139 [DEBUG] [Thread-6848] [transport.py] [_log()] starting thread (client mode): 0x70d036d0
2025-11-25T22:27:40.139 [DEBUG] [Thread-6848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:27:40.153 [DEBUG] [Thread-6848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:27:40.153 [INFO] [Thread-6848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:27:40.161 [DEBUG] [Thread-6848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:27:40.161 [DEBUG] [Thread-6848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:27:40.161 [DEBUG] [Thread-6848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:27:40.161 [DEBUG] [Thread-6848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:27:40.161 [DEBUG] [Thread-6848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:27:40.161 [DEBUG] [Thread-6848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] client lang: <none>
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] server lang: <none>
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] kex follows: False
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] Compression: none
2025-11-25T22:27:40.162 [DEBUG] [Thread-6848] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:27:40.220 [DEBUG] [Thread-6848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:27:40.220 [DEBUG] [Thread-6848] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:27:40.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:27:40.221 [DEBUG] [Thread-6848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:27:40.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:27:40.276 [DEBUG] [Thread-6848] [transport.py] [_log()] userauth is OK
2025-11-25T22:27:40.276 [DEBUG] [Thread-6848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:27:40.276 [DEBUG] [Thread-6848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:27:40.277 [DEBUG] [Thread-6848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:27:40.277 [DEBUG] [Thread-6848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:27:40.296 [INFO] [Thread-6848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:27:40.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:27:40.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:27:41.111 [DEBUG] [Thread-6848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:27:41.111 [DEBUG] [Thread-6848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:27:41.160 [DEBUG] [Thread-6848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:27:41.160 [DEBUG] [Thread-6848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:27:41.169 [DEBUG] [Thread-6848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:27:41.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:27:41.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:27:41.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:27:41.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:27:41.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:27:41.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:27:41.206 [DEBUG] [Thread-6848] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:27:43.770 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:48.720 [DEBUG] [Thread-6850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:54.177 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:54.208 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:27:54.208 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:03.779 [DEBUG] [Thread-6851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:04.128 [DEBUG] [Thread-6852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:04.611 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:11.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:28:11.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:28:11.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:28:11.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 27, 49), 28.5, 14.09, 0.0, 10.87, 20.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:28:11.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:27:49
2025-11-25T22:28:11.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:28:12.121 [DEBUG] [Thread-6853] [transport.py] [_log()] starting thread (client mode): 0x70d42ce0
2025-11-25T22:28:12.122 [DEBUG] [Thread-6853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:28:12.135 [DEBUG] [Thread-6853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:28:12.135 [INFO] [Thread-6853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] client lang: <none>
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] server lang: <none>
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] kex follows: False
2025-11-25T22:28:12.138 [DEBUG] [Thread-6853] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:28:12.139 [DEBUG] [Thread-6853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:28:12.139 [DEBUG] [Thread-6853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:28:12.139 [DEBUG] [Thread-6853] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:28:12.139 [DEBUG] [Thread-6853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:28:12.139 [DEBUG] [Thread-6853] [transport.py] [_log()] Compression: none
2025-11-25T22:28:12.139 [DEBUG] [Thread-6853] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:28:12.146 [DEBUG] [Thread-6853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:28:12.147 [DEBUG] [Thread-6853] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:28:12.147 [DEBUG] [Thread-6853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:28:12.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:28:12.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:28:12.148 [DEBUG] [Thread-6853] [transport.py] [_log()] userauth is OK
2025-11-25T22:28:12.148 [DEBUG] [Thread-6853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:28:12.149 [DEBUG] [Thread-6853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:28:12.149 [DEBUG] [Thread-6853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:28:12.149 [DEBUG] [Thread-6853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:28:12.166 [INFO] [Thread-6853] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:28:12.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:28:12.956 [DEBUG] [Thread-6853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:28:12.956 [DEBUG] [Thread-6853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:28:12.957 [DEBUG] [Thread-6853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:28:12.996 [DEBUG] [Thread-6853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:28:12.997 [DEBUG] [Thread-6853] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:28:12.999 [DEBUG] [Thread-6853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:28:13.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:28:13.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:28:13.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:28:13.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:28:13.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:28:13.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:28:13.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:28:13.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:28:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:28:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.852529 -999.00  +21.00   6.83     19   -3.30 1 1 1 1 1     0    0 25.44 47.34 ZNESW 6.5 6.8 167.8 8.0 20.5 -26.0 20.5 -25.4 20.2 -24.0 20.4 -25.1
2025-11-25T22:28:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:28:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:28:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.852529
2025-11-25T22:28:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:28:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:28:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:28:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:28:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:28:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:27:49', tmtdew=28.5, humidity=14.09, cloud=0.0, wind=10.87, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:27:49', seeing=1.07, atlas_timestamp='2025-11-25T20:27:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, -0.029249999999999332, 0.03125, -0.026500000000000412, 0.0005000000000006111, 0.05125000000000135, -0.01649999999999885, 0.035250000000001336, 0.0389999999999997, 0.01950000000000074, 0.02624999999999922, -0.02999999999999936, 0.051000000000000156, 0.0962499999999995, 0.03200000000000003, -0.008000000000000895, 0.0072499999999990905, 0.057000000000000384, 0.07599999999999874, -0.008750000000000924, 0.06599999999999895, 0.0747499999999981, -0.009249999999997982, 0.003750000000000142, -0.010000000000001563, 0.051000000000000156, 0.07424999999999926, 0.08549999999999969, 0.0625, 0.08300000000000018, 0.045000000000001705, -0.036999999999999034, -0.02775000000000105], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:28:13.025 [DEBUG] [Thread-6853] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:28:13.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:28:13.120 [DEBUG] [Thread-6856] [transport.py] [_log()] starting thread (client mode): 0x7374d390
2025-11-25T22:28:13.120 [DEBUG] [Thread-6856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:28:13.134 [DEBUG] [Thread-6856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:28:13.135 [INFO] [Thread-6856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:28:13.142 [DEBUG] [Thread-6856] [transport.py] [_log()] client lang: <none>
2025-11-25T22:28:13.143 [DEBUG] [Thread-6856] [transport.py] [_log()] server lang: <none>
2025-11-25T22:28:13.143 [DEBUG] [Thread-6856] [transport.py] [_log()] kex follows: False
2025-11-25T22:28:13.143 [DEBUG] [Thread-6856] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:28:13.143 [DEBUG] [Thread-6856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:28:13.143 [DEBUG] [Thread-6856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:28:13.143 [DEBUG] [Thread-6856] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:28:13.143 [DEBUG] [Thread-6856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:28:13.143 [DEBUG] [Thread-6856] [transport.py] [_log()] Compression: none
2025-11-25T22:28:13.143 [DEBUG] [Thread-6856] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:28:13.200 [DEBUG] [Thread-6856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:28:13.200 [DEBUG] [Thread-6856] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:28:13.201 [DEBUG] [Thread-6856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:28:13.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:28:13.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:28:13.256 [DEBUG] [Thread-6856] [transport.py] [_log()] userauth is OK
2025-11-25T22:28:13.256 [DEBUG] [Thread-6856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:28:13.256 [DEBUG] [Thread-6856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:28:13.256 [DEBUG] [Thread-6856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:28:13.257 [DEBUG] [Thread-6856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:28:13.279 [INFO] [Thread-6856] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:28:13.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:28:13.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:28:14.130 [DEBUG] [Thread-6856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:28:14.130 [DEBUG] [Thread-6856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:28:14.179 [DEBUG] [Thread-6856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:28:14.179 [DEBUG] [Thread-6856] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:28:14.188 [DEBUG] [Thread-6856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:28:14.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:28:14.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:28:14.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:28:14.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:28:14.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:28:14.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:28:14.225 [DEBUG] [Thread-6856] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:28:15.027 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:15.567 [DEBUG] [Thread-4685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:18.820 [DEBUG] [Thread-6858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:21.799 [DEBUG] [Thread-4685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:25.441 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:33.871 [DEBUG] [Thread-6859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:35.875 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:44.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:28:44.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:28:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:28:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 28, 21), 28.46, 14.12, 0.0, 10.41, 20.75, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:28:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:28:21
2025-11-25T22:28:45.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:28:45.154 [DEBUG] [Thread-6860] [transport.py] [_log()] starting thread (client mode): 0x70d03fa0
2025-11-25T22:28:45.154 [DEBUG] [Thread-6860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:28:45.175 [DEBUG] [Thread-6860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:28:45.175 [INFO] [Thread-6860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:28:45.178 [DEBUG] [Thread-6860] [transport.py] [_log()] client lang: <none>
2025-11-25T22:28:45.179 [DEBUG] [Thread-6860] [transport.py] [_log()] server lang: <none>
2025-11-25T22:28:45.179 [DEBUG] [Thread-6860] [transport.py] [_log()] kex follows: False
2025-11-25T22:28:45.179 [DEBUG] [Thread-6860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:28:45.179 [DEBUG] [Thread-6860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:28:45.179 [DEBUG] [Thread-6860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:28:45.179 [DEBUG] [Thread-6860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:28:45.179 [DEBUG] [Thread-6860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:28:45.179 [DEBUG] [Thread-6860] [transport.py] [_log()] Compression: none
2025-11-25T22:28:45.179 [DEBUG] [Thread-6860] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:28:45.198 [DEBUG] [Thread-6860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:28:45.199 [DEBUG] [Thread-6860] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:28:45.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:28:45.201 [DEBUG] [Thread-6860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:28:45.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:28:45.203 [DEBUG] [Thread-6860] [transport.py] [_log()] userauth is OK
2025-11-25T22:28:45.203 [DEBUG] [Thread-6860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:28:45.203 [DEBUG] [Thread-6860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:28:45.203 [DEBUG] [Thread-6860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:28:45.203 [DEBUG] [Thread-6860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:28:45.238 [INFO] [Thread-6860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:28:45.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:28:45.895 [DEBUG] [Thread-6860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:28:45.895 [DEBUG] [Thread-6860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:28:45.896 [DEBUG] [Thread-6860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:28:45.936 [DEBUG] [Thread-6860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:28:45.936 [DEBUG] [Thread-6860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:28:45.939 [DEBUG] [Thread-6860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:28:45.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:28:45.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:28:45.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:28:45.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:28:45.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:28:45.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:28:45.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:28:45.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:28:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:28:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.852876 -999.00  +21.00   5.57     19   -3.30 1 1 1 1 1     0    0 25.52 51.83 ZNESW 6.3 5.6 149.0 7.5 20.6 -25.9 20.5 -25.5 20.2 -24.0 20.4 -25.2
2025-11-25T22:28:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:28:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:28:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.852876
2025-11-25T22:28:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:28:45.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:28:45.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:28:45.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:28:45.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:28:45.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:28:21', tmtdew=28.46, humidity=14.12, cloud=0.0, wind=10.41, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:28:21', seeing=1.16, atlas_timestamp='2025-11-25T20:28:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, -0.029249999999999332, 0.03125, -0.026500000000000412, 0.0005000000000006111, 0.05125000000000135, -0.01649999999999885, 0.035250000000001336, 0.0389999999999997, 0.01950000000000074, 0.02624999999999922, -0.02999999999999936, 0.051000000000000156, 0.0962499999999995, 0.03200000000000003, -0.008000000000000895, 0.0072499999999990905, 0.057000000000000384, 0.07599999999999874, -0.008750000000000924, 0.06599999999999895, 0.0747499999999981, -0.009249999999997982, 0.003750000000000142, -0.010000000000001563, 0.051000000000000156, 0.07424999999999926, 0.08549999999999969, 0.0625, 0.08300000000000018, 0.045000000000001705, -0.036999999999999034, -0.02775000000000105], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:28:45.977 [DEBUG] [Thread-6860] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:28:46.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:28:46.073 [DEBUG] [Thread-6863] [transport.py] [_log()] starting thread (client mode): 0x7374ff70
2025-11-25T22:28:46.073 [DEBUG] [Thread-6863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:28:46.086 [DEBUG] [Thread-6863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:28:46.086 [INFO] [Thread-6863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] client lang: <none>
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] server lang: <none>
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] kex follows: False
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] Compression: none
2025-11-25T22:28:46.094 [DEBUG] [Thread-6863] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:28:46.151 [DEBUG] [Thread-6863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:28:46.151 [DEBUG] [Thread-6863] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:28:46.152 [DEBUG] [Thread-6863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:28:46.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:28:46.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:28:46.207 [DEBUG] [Thread-6863] [transport.py] [_log()] userauth is OK
2025-11-25T22:28:46.208 [DEBUG] [Thread-6863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:28:46.208 [DEBUG] [Thread-6863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:28:46.208 [DEBUG] [Thread-6863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:28:46.208 [DEBUG] [Thread-6863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:28:46.233 [INFO] [Thread-6863] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:28:46.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:28:46.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:28:46.333 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:47.101 [DEBUG] [Thread-6863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:28:47.102 [DEBUG] [Thread-6863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:28:47.150 [DEBUG] [Thread-6863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:28:47.150 [DEBUG] [Thread-6863] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:28:47.159 [DEBUG] [Thread-6863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:28:47.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:28:47.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:28:47.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:28:47.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:28:47.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:28:47.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:28:47.194 [DEBUG] [Thread-6863] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:28:48.907 [DEBUG] [Thread-6865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:54.416 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:54.417 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:28:56.766 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:03.947 [DEBUG] [Thread-6866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:04.189 [DEBUG] [Thread-6867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:07.149 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:17.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:29:17.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:29:17.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:29:17.550 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:17.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 28, 53), 28.63, 14.11, 0.0, 12.62, 20.75, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:29:17.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:28:53
2025-11-25T22:29:17.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:29:18.125 [DEBUG] [Thread-6868] [transport.py] [_log()] starting thread (client mode): 0x70d030a0
2025-11-25T22:29:18.125 [DEBUG] [Thread-6868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:29:18.145 [DEBUG] [Thread-6868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:29:18.145 [INFO] [Thread-6868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] client lang: <none>
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] server lang: <none>
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] kex follows: False
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] Compression: none
2025-11-25T22:29:18.146 [DEBUG] [Thread-6868] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:29:18.155 [DEBUG] [Thread-6868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:29:18.156 [DEBUG] [Thread-6868] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:29:18.156 [DEBUG] [Thread-6868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:29:18.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:29:18.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:29:18.158 [DEBUG] [Thread-6868] [transport.py] [_log()] userauth is OK
2025-11-25T22:29:18.158 [DEBUG] [Thread-6868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:29:18.158 [DEBUG] [Thread-6868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:29:18.158 [DEBUG] [Thread-6868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:29:18.158 [DEBUG] [Thread-6868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:29:18.176 [INFO] [Thread-6868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:29:18.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:29:18.964 [DEBUG] [Thread-6868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:29:18.964 [DEBUG] [Thread-6868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:29:18.965 [DEBUG] [Thread-6868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:29:18.977 [DEBUG] [Thread-6870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:19.005 [DEBUG] [Thread-6868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:29:19.005 [DEBUG] [Thread-6868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:29:19.010 [DEBUG] [Thread-6868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:29:19.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:29:19.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:29:19.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:29:19.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:29:19.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:29:19.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:29:19.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:29:19.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:29:19.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:29:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.853223 -999.00  +20.90   7.04     19   -3.40 1 1 1 1 1     0    0 24.80 50.66 ZNESW 7.6 7.0 179.4 8.7 20.5 -26.1 20.5 -25.5 20.2 -24.2 20.4 -25.0
2025-11-25T22:29:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:29:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:29:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.853223
2025-11-25T22:29:19.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:29:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:29:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:29:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:29:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:29:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:28:53', tmtdew=28.63, humidity=14.11, cloud=0.0, wind=12.62, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:28:53', seeing=1.16, atlas_timestamp='2025-11-25T20:28:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, -0.029249999999999332, 0.03125, -0.026500000000000412, 0.0005000000000006111, 0.05125000000000135, -0.01649999999999885, 0.035250000000001336, 0.0389999999999997, 0.01950000000000074, 0.02624999999999922, -0.02999999999999936, 0.051000000000000156, 0.0962499999999995, 0.03200000000000003, -0.008000000000000895, 0.0072499999999990905, 0.057000000000000384, 0.07599999999999874, -0.008750000000000924, 0.06599999999999895, 0.0747499999999981, -0.009249999999997982, 0.003750000000000142, -0.010000000000001563, 0.051000000000000156, 0.07424999999999926, 0.08549999999999969, 0.0625, 0.08300000000000018, 0.045000000000001705, -0.036999999999999034, -0.02775000000000105], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:29:19.038 [DEBUG] [Thread-6868] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:29:19.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:29:19.132 [DEBUG] [Thread-6872] [transport.py] [_log()] starting thread (client mode): 0x70d6b5b0
2025-11-25T22:29:19.132 [DEBUG] [Thread-6872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:29:19.145 [DEBUG] [Thread-6872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:29:19.146 [INFO] [Thread-6872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:29:19.153 [DEBUG] [Thread-6872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:29:19.153 [DEBUG] [Thread-6872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] client lang: <none>
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] server lang: <none>
2025-11-25T22:29:19.154 [DEBUG] [Thread-6872] [transport.py] [_log()] kex follows: False
2025-11-25T22:29:19.155 [DEBUG] [Thread-6872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:29:19.155 [DEBUG] [Thread-6872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:29:19.155 [DEBUG] [Thread-6872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:29:19.155 [DEBUG] [Thread-6872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:29:19.155 [DEBUG] [Thread-6872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:29:19.155 [DEBUG] [Thread-6872] [transport.py] [_log()] Compression: none
2025-11-25T22:29:19.155 [DEBUG] [Thread-6872] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:29:19.217 [DEBUG] [Thread-6872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:29:19.217 [DEBUG] [Thread-6872] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:29:19.218 [DEBUG] [Thread-6872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:29:19.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:29:19.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:29:19.275 [DEBUG] [Thread-6872] [transport.py] [_log()] userauth is OK
2025-11-25T22:29:19.276 [DEBUG] [Thread-6872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:29:19.276 [DEBUG] [Thread-6872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:29:19.276 [DEBUG] [Thread-6872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:29:19.276 [DEBUG] [Thread-6872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:29:19.295 [INFO] [Thread-6872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:29:19.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:29:19.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:29:20.152 [DEBUG] [Thread-6872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:29:20.152 [DEBUG] [Thread-6872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:29:20.200 [DEBUG] [Thread-6872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:29:20.200 [DEBUG] [Thread-6872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:29:20.209 [DEBUG] [Thread-6872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:29:20.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:29:20.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:29:20.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:29:20.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:29:20.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:29:20.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:29:20.246 [DEBUG] [Thread-6872] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:29:27.962 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:34.015 [DEBUG] [Thread-6874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:38.378 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:48.776 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:49.063 [DEBUG] [Thread-6875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:50.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:29:50.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:29:50.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:29:50.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 29, 25), 28.68, 14.06, 0.0, 13.11, 20.78, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:29:50.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:29:25
2025-11-25T22:29:51.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:29:51.174 [DEBUG] [Thread-6876] [transport.py] [_log()] starting thread (client mode): 0x70da7580
2025-11-25T22:29:51.174 [DEBUG] [Thread-6876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:29:51.194 [DEBUG] [Thread-6876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:29:51.194 [INFO] [Thread-6876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] client lang: <none>
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] server lang: <none>
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] kex follows: False
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:29:51.197 [DEBUG] [Thread-6876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:29:51.198 [DEBUG] [Thread-6876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:29:51.198 [DEBUG] [Thread-6876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:29:51.198 [DEBUG] [Thread-6876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:29:51.198 [DEBUG] [Thread-6876] [transport.py] [_log()] Compression: none
2025-11-25T22:29:51.198 [DEBUG] [Thread-6876] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:29:51.214 [DEBUG] [Thread-6876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:29:51.215 [DEBUG] [Thread-6876] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:29:51.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:29:51.215 [DEBUG] [Thread-6876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:29:51.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:29:51.217 [DEBUG] [Thread-6876] [transport.py] [_log()] userauth is OK
2025-11-25T22:29:51.217 [DEBUG] [Thread-6876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:29:51.217 [DEBUG] [Thread-6876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:29:51.217 [DEBUG] [Thread-6876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:29:51.217 [DEBUG] [Thread-6876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:29:51.240 [INFO] [Thread-6876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:29:51.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:29:51.893 [DEBUG] [Thread-6876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:29:51.894 [DEBUG] [Thread-6876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:29:51.894 [DEBUG] [Thread-6876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:29:51.935 [DEBUG] [Thread-6876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:29:51.935 [DEBUG] [Thread-6876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:29:51.938 [DEBUG] [Thread-6876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:29:51.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:29:51.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:29:51.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:29:51.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:29:51.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:29:51.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:29:51.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:29:51.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:29:51.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:29:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.853570 -999.00  +20.90   6.01     19   -3.50 1 1 1 1 1     0    0 25.46 53.07 ZNESW 10.1 6.0 165.8 12.2 20.5 -25.9 20.5 -25.2 20.1 -24.2 20.3 -25.1
2025-11-25T22:29:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:29:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:29:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.853570
2025-11-25T22:29:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:29:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:29:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:29:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:29:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:29:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:29:25', tmtdew=28.68, humidity=14.06, cloud=0.0, wind=13.11, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:29:25', seeing=1.17, atlas_timestamp='2025-11-25T20:29:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, -0.029249999999999332, 0.03125, -0.026500000000000412, 0.0005000000000006111, 0.05125000000000135, -0.01649999999999885, 0.035250000000001336, 0.0389999999999997, 0.01950000000000074, 0.02624999999999922, -0.02999999999999936, 0.051000000000000156, 0.0962499999999995, 0.03200000000000003, -0.008000000000000895, 0.0072499999999990905, 0.057000000000000384, 0.07599999999999874, -0.008750000000000924, 0.06599999999999895, 0.0747499999999981, -0.009249999999997982, 0.003750000000000142, -0.010000000000001563, 0.051000000000000156, 0.07424999999999926, 0.08549999999999969, 0.0625, 0.08300000000000018, 0.045000000000001705, -0.036999999999999034, -0.02775000000000105], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:29:51.967 [DEBUG] [Thread-6876] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:29:52.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:29:52.057 [DEBUG] [Thread-6879] [transport.py] [_log()] starting thread (client mode): 0x70d41390
2025-11-25T22:29:52.058 [DEBUG] [Thread-6879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:29:52.072 [DEBUG] [Thread-6879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:29:52.072 [INFO] [Thread-6879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:29:52.079 [DEBUG] [Thread-6879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] client lang: <none>
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] server lang: <none>
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] kex follows: False
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:29:52.080 [DEBUG] [Thread-6879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:29:52.081 [DEBUG] [Thread-6879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:29:52.081 [DEBUG] [Thread-6879] [transport.py] [_log()] Compression: none
2025-11-25T22:29:52.081 [DEBUG] [Thread-6879] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:29:52.141 [DEBUG] [Thread-6879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:29:52.141 [DEBUG] [Thread-6879] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:29:52.141 [DEBUG] [Thread-6879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:29:52.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:29:52.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:29:52.199 [DEBUG] [Thread-6879] [transport.py] [_log()] userauth is OK
2025-11-25T22:29:52.200 [DEBUG] [Thread-6879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:29:52.200 [DEBUG] [Thread-6879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:29:52.200 [DEBUG] [Thread-6879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:29:52.200 [DEBUG] [Thread-6879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:29:52.219 [INFO] [Thread-6879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:29:52.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:29:52.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:29:53.033 [DEBUG] [Thread-6879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:29:53.033 [DEBUG] [Thread-6879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:29:53.081 [DEBUG] [Thread-6879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:29:53.081 [DEBUG] [Thread-6879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:29:53.090 [DEBUG] [Thread-6879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:29:53.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:29:53.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:29:53.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:29:53.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:29:53.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:29:53.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:29:53.127 [DEBUG] [Thread-6879] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:29:54.619 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:54.620 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:29:59.171 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:04.101 [DEBUG] [Thread-6881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:04.246 [DEBUG] [Thread-6882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:09.588 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:19.153 [DEBUG] [Thread-6883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:20.003 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:23.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:30:23.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:30:23.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:30:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 29, 57), 28.91, 13.47, 0.0, 8.7, 20.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:30:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:29:57
2025-11-25T22:30:23.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:30:24.064 [DEBUG] [Thread-6884] [transport.py] [_log()] starting thread (client mode): 0x7374dcc0
2025-11-25T22:30:24.064 [DEBUG] [Thread-6884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:30:24.086 [DEBUG] [Thread-6884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:30:24.086 [INFO] [Thread-6884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] client lang: <none>
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] server lang: <none>
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] kex follows: False
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:30:24.088 [DEBUG] [Thread-6884] [transport.py] [_log()] Compression: none
2025-11-25T22:30:24.089 [DEBUG] [Thread-6884] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:30:24.097 [DEBUG] [Thread-6884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:30:24.097 [DEBUG] [Thread-6884] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:30:24.098 [DEBUG] [Thread-6884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:30:24.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:30:24.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:30:24.100 [DEBUG] [Thread-6884] [transport.py] [_log()] userauth is OK
2025-11-25T22:30:24.100 [DEBUG] [Thread-6884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:30:24.100 [DEBUG] [Thread-6884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:30:24.100 [DEBUG] [Thread-6884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:30:24.100 [DEBUG] [Thread-6884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:30:24.124 [INFO] [Thread-6884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:30:24.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:30:24.916 [DEBUG] [Thread-6884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:30:24.917 [DEBUG] [Thread-6884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:30:24.917 [DEBUG] [Thread-6884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:30:24.958 [DEBUG] [Thread-6884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:30:24.958 [DEBUG] [Thread-6884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:30:24.962 [DEBUG] [Thread-6884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:30:24.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:30:24.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:30:24.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:30:24.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:30:24.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:30:24.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:30:24.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:30:24.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:30:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:30:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.853918 -999.00  +20.90   6.83     19   -3.50 1 1 1 1 1     0    0 25.67 56.19 ZNESW 6.8 6.8 161.8 8.6 20.5 -25.9 20.5 -25.5 20.1 -24.1 20.4 -25.0
2025-11-25T22:30:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:30:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:30:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.853918
2025-11-25T22:30:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:30:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:30:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:30:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:30:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:30:24.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:29:57', tmtdew=28.91, humidity=13.47, cloud=0.0, wind=8.7, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:29:58', seeing=1.06, atlas_timestamp='2025-11-25T20:29:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, -0.029249999999999332, 0.03125, -0.026500000000000412, 0.0005000000000006111, 0.05125000000000135, -0.01649999999999885, 0.035250000000001336, 0.0389999999999997, 0.01950000000000074, 0.02624999999999922, -0.02999999999999936, 0.051000000000000156, 0.0962499999999995, 0.03200000000000003, -0.008000000000000895, 0.0072499999999990905, 0.057000000000000384, 0.07599999999999874, -0.008750000000000924, 0.06599999999999895, 0.0747499999999981, -0.009249999999997982, 0.003750000000000142, -0.010000000000001563, 0.051000000000000156, 0.07424999999999926, 0.08549999999999969, 0.0625, 0.08300000000000018, 0.045000000000001705, -0.036999999999999034, -0.02775000000000105], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:30:24.984 [DEBUG] [Thread-6884] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:30:25.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:30:25.078 [DEBUG] [Thread-6887] [transport.py] [_log()] starting thread (client mode): 0x70d7fb20
2025-11-25T22:30:25.078 [DEBUG] [Thread-6887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:30:25.097 [DEBUG] [Thread-6887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:30:25.097 [INFO] [Thread-6887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:30:25.105 [DEBUG] [Thread-6887] [transport.py] [_log()] client lang: <none>
2025-11-25T22:30:25.106 [DEBUG] [Thread-6887] [transport.py] [_log()] server lang: <none>
2025-11-25T22:30:25.106 [DEBUG] [Thread-6887] [transport.py] [_log()] kex follows: False
2025-11-25T22:30:25.106 [DEBUG] [Thread-6887] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:30:25.106 [DEBUG] [Thread-6887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:30:25.106 [DEBUG] [Thread-6887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:30:25.106 [DEBUG] [Thread-6887] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:30:25.106 [DEBUG] [Thread-6887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:30:25.106 [DEBUG] [Thread-6887] [transport.py] [_log()] Compression: none
2025-11-25T22:30:25.106 [DEBUG] [Thread-6887] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:30:25.164 [DEBUG] [Thread-6887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:30:25.165 [DEBUG] [Thread-6887] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:30:25.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:30:25.166 [DEBUG] [Thread-6887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:30:25.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:30:25.224 [DEBUG] [Thread-6887] [transport.py] [_log()] userauth is OK
2025-11-25T22:30:25.224 [DEBUG] [Thread-6887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:30:25.224 [DEBUG] [Thread-6887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:30:25.224 [DEBUG] [Thread-6887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:30:25.224 [DEBUG] [Thread-6887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:30:25.250 [INFO] [Thread-6887] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:30:25.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:30:25.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:30:26.141 [DEBUG] [Thread-6887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:30:26.141 [DEBUG] [Thread-6887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:30:26.189 [DEBUG] [Thread-6887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:30:26.189 [DEBUG] [Thread-6887] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:30:26.201 [DEBUG] [Thread-6887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:30:26.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:30:26.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:30:26.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:30:26.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:30:26.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:30:26.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:30:26.240 [DEBUG] [Thread-6887] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:30:30.416 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:34.183 [DEBUG] [Thread-6889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:40.836 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:49.244 [DEBUG] [Thread-6890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:51.251 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:54.818 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:54.819 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:30:56.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:30:56.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:30:56.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:30:56.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 30, 30), 29.0, 13.41, 0.0, 10.2, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:30:56.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:30:30
2025-11-25T22:30:57.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:30:57.220 [DEBUG] [Thread-6891] [transport.py] [_log()] starting thread (client mode): 0x70d6be50
2025-11-25T22:30:57.220 [DEBUG] [Thread-6891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:30:57.239 [DEBUG] [Thread-6891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:30:57.240 [INFO] [Thread-6891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] client lang: <none>
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] server lang: <none>
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] kex follows: False
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] Compression: none
2025-11-25T22:30:57.243 [DEBUG] [Thread-6891] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:30:57.257 [DEBUG] [Thread-6891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:30:57.257 [DEBUG] [Thread-6891] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:30:57.257 [DEBUG] [Thread-6891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:30:57.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:30:57.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:30:57.258 [DEBUG] [Thread-6891] [transport.py] [_log()] userauth is OK
2025-11-25T22:30:57.258 [DEBUG] [Thread-6891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:30:57.258 [DEBUG] [Thread-6891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:30:57.258 [DEBUG] [Thread-6891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:30:57.258 [DEBUG] [Thread-6891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:30:57.273 [INFO] [Thread-6891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:30:57.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:30:57.928 [DEBUG] [Thread-6891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:30:57.928 [DEBUG] [Thread-6891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:30:57.928 [DEBUG] [Thread-6891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:30:57.969 [DEBUG] [Thread-6891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:30:57.969 [DEBUG] [Thread-6891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:30:57.972 [DEBUG] [Thread-6891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:30:57.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:30:57.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:30:57.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:30:57.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:30:57.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:30:57.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:30:57.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:30:57.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.854612 -999.00  +20.90   6.49     19   -3.50 1 1 1 1 1     0    0 25.28 58.07 ZNESW 5.7 6.5 160.0 8.6 20.4 -25.9 20.4 -25.3 20.1 -24.1 20.3 -25.1
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.854612
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:30:57.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:30:30', tmtdew=29.0, humidity=13.41, cloud=0.0, wind=10.2, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:30:30', seeing=1.07, atlas_timestamp='2025-11-25T20:30:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:30:57.993 [DEBUG] [Thread-6891] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:30:58.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:30:58.092 [DEBUG] [Thread-6894] [transport.py] [_log()] starting thread (client mode): 0x70d3a230
2025-11-25T22:30:58.092 [DEBUG] [Thread-6894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:30:58.106 [DEBUG] [Thread-6894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:30:58.106 [INFO] [Thread-6894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:30:58.113 [DEBUG] [Thread-6894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:30:58.113 [DEBUG] [Thread-6894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:30:58.113 [DEBUG] [Thread-6894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:30:58.113 [DEBUG] [Thread-6894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] client lang: <none>
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] server lang: <none>
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] kex follows: False
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] Compression: none
2025-11-25T22:30:58.114 [DEBUG] [Thread-6894] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:30:58.170 [DEBUG] [Thread-6894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:30:58.170 [DEBUG] [Thread-6894] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:30:58.170 [DEBUG] [Thread-6894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:30:58.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:30:58.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:30:58.227 [DEBUG] [Thread-6894] [transport.py] [_log()] userauth is OK
2025-11-25T22:30:58.227 [DEBUG] [Thread-6894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:30:58.227 [DEBUG] [Thread-6894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:30:58.227 [DEBUG] [Thread-6894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:30:58.227 [DEBUG] [Thread-6894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:30:58.240 [INFO] [Thread-6894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:30:58.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:30:58.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:30:59.049 [DEBUG] [Thread-6894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:30:59.050 [DEBUG] [Thread-6894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:30:59.097 [DEBUG] [Thread-6894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:30:59.097 [DEBUG] [Thread-6894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:30:59.106 [DEBUG] [Thread-6894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:30:59.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:30:59.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:30:59.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:30:59.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:30:59.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:30:59.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:30:59.137 [DEBUG] [Thread-6894] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:31:01.644 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:04.278 [DEBUG] [Thread-6896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:04.298 [DEBUG] [Thread-6897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:12.045 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:19.319 [DEBUG] [Thread-6898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:22.443 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:29.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:31:29.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:31:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:31:29.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 31, 2), 29.09, 13.32, 0.0, 8.86, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:31:29.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:31:02
2025-11-25T22:31:29.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:31:30.099 [DEBUG] [Thread-6899] [transport.py] [_log()] starting thread (client mode): 0x7374cd60
2025-11-25T22:31:30.100 [DEBUG] [Thread-6899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:31:30.119 [DEBUG] [Thread-6899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:31:30.119 [INFO] [Thread-6899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:31:30.122 [DEBUG] [Thread-6899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] client lang: <none>
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] server lang: <none>
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] kex follows: False
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] Compression: none
2025-11-25T22:31:30.123 [DEBUG] [Thread-6899] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:31:30.140 [DEBUG] [Thread-6899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:31:30.141 [DEBUG] [Thread-6899] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:31:30.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:31:30.142 [DEBUG] [Thread-6899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:31:30.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:31:30.185 [DEBUG] [Thread-6899] [transport.py] [_log()] userauth is OK
2025-11-25T22:31:30.185 [DEBUG] [Thread-6899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:31:30.185 [DEBUG] [Thread-6899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:31:30.185 [DEBUG] [Thread-6899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:31:30.185 [DEBUG] [Thread-6899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:31:30.211 [INFO] [Thread-6899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:31:30.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:31:30.868 [DEBUG] [Thread-6899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:31:30.868 [DEBUG] [Thread-6899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:31:30.869 [DEBUG] [Thread-6899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:31:30.909 [DEBUG] [Thread-6899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:31:30.909 [DEBUG] [Thread-6899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:31:30.912 [DEBUG] [Thread-6899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:31:30.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:31:30.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:31:30.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:31:30.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:31:30.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:31:30.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:31:30.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:31:30.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:31:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:31:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.854959 -999.00  +20.90   6.48     19   -3.50 1 1 1 1 1     0    0 25.46 57.18 ZNESW 7.2 6.5 177.8 7.0 20.4 -26.1 20.4 -25.5 20.1 -24.2 20.3 -25.1
2025-11-25T22:31:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:31:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:31:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.854959
2025-11-25T22:31:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:31:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:31:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:31:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:31:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:31:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:31:02', tmtdew=29.09, humidity=13.32, cloud=0.0, wind=8.86, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:31:02', seeing=0.99, atlas_timestamp='2025-11-25T20:31:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:31:30.941 [DEBUG] [Thread-6899] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:31:31.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:31:31.036 [DEBUG] [Thread-6902] [transport.py] [_log()] starting thread (client mode): 0x70d75900
2025-11-25T22:31:31.037 [DEBUG] [Thread-6902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:31:31.051 [DEBUG] [Thread-6902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:31:31.051 [INFO] [Thread-6902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:31:31.058 [DEBUG] [Thread-6902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:31:31.058 [DEBUG] [Thread-6902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:31:31.058 [DEBUG] [Thread-6902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] client lang: <none>
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] server lang: <none>
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] kex follows: False
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:31:31.059 [DEBUG] [Thread-6902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:31:31.060 [DEBUG] [Thread-6902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:31:31.060 [DEBUG] [Thread-6902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:31:31.060 [DEBUG] [Thread-6902] [transport.py] [_log()] Compression: none
2025-11-25T22:31:31.060 [DEBUG] [Thread-6902] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:31:31.114 [DEBUG] [Thread-6902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:31:31.115 [DEBUG] [Thread-6902] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:31:31.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:31:31.116 [DEBUG] [Thread-6902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:31:31.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:31:31.171 [DEBUG] [Thread-6902] [transport.py] [_log()] userauth is OK
2025-11-25T22:31:31.171 [DEBUG] [Thread-6902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:31:31.171 [DEBUG] [Thread-6902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:31:31.171 [DEBUG] [Thread-6902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:31:31.171 [DEBUG] [Thread-6902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:31:31.192 [INFO] [Thread-6902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:31:31.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:31:31.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:31:32.058 [DEBUG] [Thread-6902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:31:32.059 [DEBUG] [Thread-6902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:31:32.107 [DEBUG] [Thread-6902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:31:32.107 [DEBUG] [Thread-6902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:31:32.116 [DEBUG] [Thread-6902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:31:32.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:31:32.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:31:32.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:31:32.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:31:32.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:31:32.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:31:32.158 [DEBUG] [Thread-6902] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:31:32.837 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:34.351 [DEBUG] [Thread-6904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:43.252 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:49.401 [DEBUG] [Thread-6905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:53.666 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:55.029 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:31:55.030 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:02.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:32:02.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:32:02.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:32:02.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 31, 34), 28.92, 13.34, 0.0, 8.81, 21.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:32:02.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:31:34
2025-11-25T22:32:02.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:32:03.133 [DEBUG] [Thread-6906] [transport.py] [_log()] starting thread (client mode): 0x70d00640
2025-11-25T22:32:03.133 [DEBUG] [Thread-6906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:32:03.152 [DEBUG] [Thread-6906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:32:03.153 [INFO] [Thread-6906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:32:03.156 [DEBUG] [Thread-6906] [transport.py] [_log()] client lang: <none>
2025-11-25T22:32:03.157 [DEBUG] [Thread-6906] [transport.py] [_log()] server lang: <none>
2025-11-25T22:32:03.157 [DEBUG] [Thread-6906] [transport.py] [_log()] kex follows: False
2025-11-25T22:32:03.157 [DEBUG] [Thread-6906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:32:03.157 [DEBUG] [Thread-6906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:32:03.157 [DEBUG] [Thread-6906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:32:03.157 [DEBUG] [Thread-6906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:32:03.157 [DEBUG] [Thread-6906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:32:03.157 [DEBUG] [Thread-6906] [transport.py] [_log()] Compression: none
2025-11-25T22:32:03.157 [DEBUG] [Thread-6906] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:32:03.174 [DEBUG] [Thread-6906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:32:03.175 [DEBUG] [Thread-6906] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:32:03.175 [DEBUG] [Thread-6906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:32:03.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:32:03.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:32:03.177 [DEBUG] [Thread-6906] [transport.py] [_log()] userauth is OK
2025-11-25T22:32:03.178 [DEBUG] [Thread-6906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:32:03.178 [DEBUG] [Thread-6906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:32:03.178 [DEBUG] [Thread-6906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:32:03.178 [DEBUG] [Thread-6906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:32:03.214 [INFO] [Thread-6906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:32:03.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:32:03.868 [DEBUG] [Thread-6906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:32:03.868 [DEBUG] [Thread-6906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:32:03.869 [DEBUG] [Thread-6906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:32:03.909 [DEBUG] [Thread-6906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:32:03.909 [DEBUG] [Thread-6906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:32:03.913 [DEBUG] [Thread-6906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:32:03.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:32:03.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:32:03.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:32:03.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:32:03.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:32:03.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:32:03.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:32:03.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:32:03.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:32:03.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.855307 -999.00  +20.80   7.49     19   -3.50 1 1 1 1 1     0    0 25.80 57.25 ZNESW 7.9 7.5 163.0 8.5 20.4 -25.8 20.4 -25.4 20.1 -24.0 20.3 -25.0
2025-11-25T22:32:03.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:32:03.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:32:03.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.855307
2025-11-25T22:32:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:32:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:32:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:32:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:32:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:32:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:31:34', tmtdew=28.92, humidity=13.34, cloud=0.0, wind=8.81, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:31:34', seeing=1.13, atlas_timestamp='2025-11-25T20:31:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:32:03.938 [DEBUG] [Thread-6906] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:32:04.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:32:04.033 [DEBUG] [Thread-6909] [transport.py] [_log()] starting thread (client mode): 0x70d020b0
2025-11-25T22:32:04.033 [DEBUG] [Thread-6909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:32:04.048 [DEBUG] [Thread-6909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:32:04.048 [INFO] [Thread-6909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:32:04.055 [DEBUG] [Thread-6909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:32:04.055 [DEBUG] [Thread-6909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] client lang: <none>
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] server lang: <none>
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] kex follows: False
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] Compression: none
2025-11-25T22:32:04.056 [DEBUG] [Thread-6909] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:32:04.081 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:04.116 [DEBUG] [Thread-6909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:32:04.116 [DEBUG] [Thread-6909] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:32:04.117 [DEBUG] [Thread-6909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:32:04.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:32:04.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:32:04.172 [DEBUG] [Thread-6909] [transport.py] [_log()] userauth is OK
2025-11-25T22:32:04.172 [DEBUG] [Thread-6909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:32:04.172 [DEBUG] [Thread-6909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:32:04.172 [DEBUG] [Thread-6909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:32:04.172 [DEBUG] [Thread-6909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:32:04.192 [INFO] [Thread-6909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:32:04.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:32:04.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:32:04.354 [DEBUG] [Thread-6911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:04.438 [DEBUG] [Thread-6912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:05.095 [DEBUG] [Thread-6909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:32:05.095 [DEBUG] [Thread-6909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:32:05.143 [DEBUG] [Thread-6909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:32:05.143 [DEBUG] [Thread-6909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:32:05.153 [DEBUG] [Thread-6909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:32:05.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:32:05.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:32:05.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:32:05.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:32:05.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:32:05.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:32:05.189 [DEBUG] [Thread-6909] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:32:14.480 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:19.486 [DEBUG] [Thread-6913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:24.846 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:34.523 [DEBUG] [Thread-6914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:35.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:32:35.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:32:35.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:32:35.220 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 32, 6), 28.91, 13.32, 0.0, 9.92, 20.93, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:32:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:32:06
2025-11-25T22:32:35.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:32:36.131 [DEBUG] [Thread-6915] [transport.py] [_log()] starting thread (client mode): 0x70da7b80
2025-11-25T22:32:36.132 [DEBUG] [Thread-6915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:32:36.151 [DEBUG] [Thread-6915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:32:36.151 [INFO] [Thread-6915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:32:36.154 [DEBUG] [Thread-6915] [transport.py] [_log()] client lang: <none>
2025-11-25T22:32:36.155 [DEBUG] [Thread-6915] [transport.py] [_log()] server lang: <none>
2025-11-25T22:32:36.155 [DEBUG] [Thread-6915] [transport.py] [_log()] kex follows: False
2025-11-25T22:32:36.155 [DEBUG] [Thread-6915] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:32:36.155 [DEBUG] [Thread-6915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:32:36.155 [DEBUG] [Thread-6915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:32:36.155 [DEBUG] [Thread-6915] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:32:36.155 [DEBUG] [Thread-6915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:32:36.155 [DEBUG] [Thread-6915] [transport.py] [_log()] Compression: none
2025-11-25T22:32:36.155 [DEBUG] [Thread-6915] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:32:36.171 [DEBUG] [Thread-6915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:32:36.172 [DEBUG] [Thread-6915] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:32:36.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:32:36.173 [DEBUG] [Thread-6915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:32:36.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:32:36.217 [DEBUG] [Thread-6915] [transport.py] [_log()] userauth is OK
2025-11-25T22:32:36.217 [DEBUG] [Thread-6915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:32:36.217 [DEBUG] [Thread-6915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:32:36.217 [DEBUG] [Thread-6915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:32:36.217 [DEBUG] [Thread-6915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:32:36.236 [INFO] [Thread-6915] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:32:36.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:32:36.859 [DEBUG] [Thread-6915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:32:36.859 [DEBUG] [Thread-6915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:32:36.860 [DEBUG] [Thread-6915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:32:36.900 [DEBUG] [Thread-6915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:32:36.900 [DEBUG] [Thread-6915] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:32:36.904 [DEBUG] [Thread-6915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:32:36.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:32:36.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:32:36.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:32:36.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:32:36.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:32:36.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:32:36.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:32:36.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:32:36.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:32:36.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.855654 -999.00  +20.80   6.71     19   -3.60 1 1 1 1 1     0    0 25.46 60.37 ZNESW 5.8 6.7 176.4 9.1 20.4 -25.9 20.4 -25.4 20.1 -24.0 20.3 -25.0
2025-11-25T22:32:36.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:32:36.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:32:36.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.855654
2025-11-25T22:32:36.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:32:36.930 [DEBUG] [Thread-6915] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:32:36.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:32:36.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:32:36.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:32:36.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:32:36.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:32:06', tmtdew=28.91, humidity=13.32, cloud=0.0, wind=9.92, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:32:07', seeing=0.83, atlas_timestamp='2025-11-25T20:32:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:32:37.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:32:37.029 [DEBUG] [Thread-6918] [transport.py] [_log()] starting thread (client mode): 0x70d6aad0
2025-11-25T22:32:37.029 [DEBUG] [Thread-6918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:32:37.044 [DEBUG] [Thread-6918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:32:37.044 [INFO] [Thread-6918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:32:37.052 [DEBUG] [Thread-6918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:32:37.052 [DEBUG] [Thread-6918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:32:37.052 [DEBUG] [Thread-6918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:32:37.052 [DEBUG] [Thread-6918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:32:37.052 [DEBUG] [Thread-6918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:32:37.052 [DEBUG] [Thread-6918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:32:37.053 [DEBUG] [Thread-6918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:32:37.053 [DEBUG] [Thread-6918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:32:37.053 [DEBUG] [Thread-6918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:32:37.053 [DEBUG] [Thread-6918] [transport.py] [_log()] client lang: <none>
2025-11-25T22:32:37.053 [DEBUG] [Thread-6918] [transport.py] [_log()] server lang: <none>
2025-11-25T22:32:37.053 [DEBUG] [Thread-6918] [transport.py] [_log()] kex follows: False
2025-11-25T22:32:37.053 [DEBUG] [Thread-6918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:32:37.053 [DEBUG] [Thread-6918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:32:37.054 [DEBUG] [Thread-6918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:32:37.054 [DEBUG] [Thread-6918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:32:37.054 [DEBUG] [Thread-6918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:32:37.054 [DEBUG] [Thread-6918] [transport.py] [_log()] Compression: none
2025-11-25T22:32:37.054 [DEBUG] [Thread-6918] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:32:37.112 [DEBUG] [Thread-6918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:32:37.112 [DEBUG] [Thread-6918] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:32:37.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:32:37.114 [DEBUG] [Thread-6918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:32:37.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:32:37.167 [DEBUG] [Thread-6918] [transport.py] [_log()] userauth is OK
2025-11-25T22:32:37.167 [DEBUG] [Thread-6918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:32:37.168 [DEBUG] [Thread-6918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:32:37.168 [DEBUG] [Thread-6918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:32:37.168 [DEBUG] [Thread-6918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:32:37.187 [INFO] [Thread-6918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:32:37.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:32:37.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:32:38.021 [DEBUG] [Thread-6918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:32:38.021 [DEBUG] [Thread-6918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:32:38.069 [DEBUG] [Thread-6918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:32:38.069 [DEBUG] [Thread-6918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:32:38.081 [DEBUG] [Thread-6918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:32:38.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:32:38.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:32:38.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:32:38.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:32:38.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:32:38.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:32:38.117 [DEBUG] [Thread-6918] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:32:45.620 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:49.552 [DEBUG] [Thread-6920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:55.239 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:55.241 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:32:56.019 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:04.427 [DEBUG] [Thread-6921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:04.603 [DEBUG] [Thread-6922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:06.414 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:08.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:33:08.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:33:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:33:08.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 32, 38), 28.89, 13.41, 0.0, 11.08, 20.95, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:33:08.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:32:38
2025-11-25T22:33:08.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:33:09.063 [DEBUG] [Thread-6923] [transport.py] [_log()] starting thread (client mode): 0x70da4640
2025-11-25T22:33:09.063 [DEBUG] [Thread-6923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:33:09.082 [DEBUG] [Thread-6923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:33:09.082 [INFO] [Thread-6923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] client lang: <none>
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] server lang: <none>
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] kex follows: False
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:33:09.085 [DEBUG] [Thread-6923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:33:09.086 [DEBUG] [Thread-6923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:33:09.086 [DEBUG] [Thread-6923] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:33:09.086 [DEBUG] [Thread-6923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:33:09.086 [DEBUG] [Thread-6923] [transport.py] [_log()] Compression: none
2025-11-25T22:33:09.086 [DEBUG] [Thread-6923] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:33:09.104 [DEBUG] [Thread-6923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:33:09.104 [DEBUG] [Thread-6923] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:33:09.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:33:09.105 [DEBUG] [Thread-6923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:33:09.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:33:09.107 [DEBUG] [Thread-6923] [transport.py] [_log()] userauth is OK
2025-11-25T22:33:09.108 [DEBUG] [Thread-6923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:33:09.108 [DEBUG] [Thread-6923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:33:09.108 [DEBUG] [Thread-6923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:33:09.108 [DEBUG] [Thread-6923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:33:09.132 [INFO] [Thread-6923] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:33:09.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:33:09.792 [DEBUG] [Thread-6923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:33:09.793 [DEBUG] [Thread-6923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:33:09.793 [DEBUG] [Thread-6923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:33:09.834 [DEBUG] [Thread-6923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:33:09.834 [DEBUG] [Thread-6923] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:33:09.838 [DEBUG] [Thread-6923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:33:09.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:33:09.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:33:09.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:33:09.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:33:09.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:33:09.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:33:09.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:33:09.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:33:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:33:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.856001 -999.00  +20.80   6.80     19   -3.60 1 1 1 1 1     0    0 26.04 59.17 ZNESW 6.0 6.8 165.4 8.2 20.4 -26.0 20.4 -25.0 20.1 -24.1 20.3 -25.2
2025-11-25T22:33:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:33:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:33:09.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.856001
2025-11-25T22:33:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:33:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:33:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:33:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:33:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:33:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:32:38', tmtdew=28.89, humidity=13.41, cloud=0.0, wind=11.08, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:32:39', seeing=0.83, atlas_timestamp='2025-11-25T20:32:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:33:09.868 [DEBUG] [Thread-6923] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:33:09.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:33:09.963 [DEBUG] [Thread-6926] [transport.py] [_log()] starting thread (client mode): 0x70d40be0
2025-11-25T22:33:09.963 [DEBUG] [Thread-6926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:33:09.978 [DEBUG] [Thread-6926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:33:09.978 [INFO] [Thread-6926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] client lang: <none>
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] server lang: <none>
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] kex follows: False
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:33:09.986 [DEBUG] [Thread-6926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:33:09.987 [DEBUG] [Thread-6926] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:33:09.987 [DEBUG] [Thread-6926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:33:09.987 [DEBUG] [Thread-6926] [transport.py] [_log()] Compression: none
2025-11-25T22:33:09.987 [DEBUG] [Thread-6926] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:33:10.044 [DEBUG] [Thread-6926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:33:10.045 [DEBUG] [Thread-6926] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:33:10.045 [DEBUG] [Thread-6926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:33:10.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:33:10.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:33:10.104 [DEBUG] [Thread-6926] [transport.py] [_log()] userauth is OK
2025-11-25T22:33:10.104 [DEBUG] [Thread-6926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:33:10.104 [DEBUG] [Thread-6926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:33:10.104 [DEBUG] [Thread-6926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:33:10.104 [DEBUG] [Thread-6926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:33:10.122 [INFO] [Thread-6926] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:33:10.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:33:10.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:33:10.964 [DEBUG] [Thread-6926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:33:10.964 [DEBUG] [Thread-6926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:33:11.012 [DEBUG] [Thread-6926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:33:11.012 [DEBUG] [Thread-6926] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:33:11.021 [DEBUG] [Thread-6926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:33:11.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:33:11.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:33:11.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:33:11.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:33:11.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:33:11.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:33:11.057 [DEBUG] [Thread-6926] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:33:16.829 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:19.641 [DEBUG] [Thread-6928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:27.248 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:34.690 [DEBUG] [Thread-6929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:37.665 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:33:41.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:33:41.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:33:41.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 33, 10), 28.88, 13.41, 0.0, 10.69, 20.92, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:33:41.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:33:10
2025-11-25T22:33:41.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:33:42.005 [DEBUG] [Thread-6930] [transport.py] [_log()] starting thread (client mode): 0x70d43c40
2025-11-25T22:33:42.005 [DEBUG] [Thread-6930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:33:42.027 [DEBUG] [Thread-6930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:33:42.027 [INFO] [Thread-6930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:33:42.030 [DEBUG] [Thread-6930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:33:42.031 [DEBUG] [Thread-6930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:33:42.031 [DEBUG] [Thread-6930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:33:42.031 [DEBUG] [Thread-6930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:33:42.031 [DEBUG] [Thread-6930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:33:42.031 [DEBUG] [Thread-6930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:33:42.031 [DEBUG] [Thread-6930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:33:42.031 [DEBUG] [Thread-6930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:33:42.031 [DEBUG] [Thread-6930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:33:42.031 [DEBUG] [Thread-6930] [transport.py] [_log()] client lang: <none>
2025-11-25T22:33:42.032 [DEBUG] [Thread-6930] [transport.py] [_log()] server lang: <none>
2025-11-25T22:33:42.032 [DEBUG] [Thread-6930] [transport.py] [_log()] kex follows: False
2025-11-25T22:33:42.032 [DEBUG] [Thread-6930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:33:42.032 [DEBUG] [Thread-6930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:33:42.032 [DEBUG] [Thread-6930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:33:42.032 [DEBUG] [Thread-6930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:33:42.032 [DEBUG] [Thread-6930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:33:42.032 [DEBUG] [Thread-6930] [transport.py] [_log()] Compression: none
2025-11-25T22:33:42.032 [DEBUG] [Thread-6930] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:33:42.053 [DEBUG] [Thread-6930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:33:42.054 [DEBUG] [Thread-6930] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:33:42.055 [DEBUG] [Thread-6930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:33:42.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:33:42.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:33:42.056 [DEBUG] [Thread-6930] [transport.py] [_log()] userauth is OK
2025-11-25T22:33:42.057 [DEBUG] [Thread-6930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:33:42.057 [DEBUG] [Thread-6930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:33:42.057 [DEBUG] [Thread-6930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:33:42.057 [DEBUG] [Thread-6930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:33:42.082 [INFO] [Thread-6930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:33:42.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:33:42.737 [DEBUG] [Thread-6930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:33:42.737 [DEBUG] [Thread-6930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:33:42.738 [DEBUG] [Thread-6930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:33:42.779 [DEBUG] [Thread-6930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:33:42.779 [DEBUG] [Thread-6930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:33:42.782 [DEBUG] [Thread-6930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:33:42.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:33:42.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:33:42.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:33:42.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:33:42.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:33:42.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:33:42.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:33:42.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:33:42.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:33:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.856348 -999.00  +20.80   6.12     19   -3.50 1 1 1 1 1     0    0 25.91 64.30 ZNESW 5.0 6.1 155.4 11.2 20.4 -26.0 20.4 -25.5 20.1 -24.2 20.3 -25.0
2025-11-25T22:33:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:33:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:33:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.856348
2025-11-25T22:33:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:33:42.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:33:42.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:33:42.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:33:42.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:33:42.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:33:10', tmtdew=28.88, humidity=13.41, cloud=0.0, wind=10.69, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:33:11', seeing=0.83, atlas_timestamp='2025-11-25T20:33:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:26:00')
2025-11-25T22:33:42.806 [DEBUG] [Thread-6930] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:33:42.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:33:42.901 [DEBUG] [Thread-6933] [transport.py] [_log()] starting thread (client mode): 0x70da4fa0
2025-11-25T22:33:42.901 [DEBUG] [Thread-6933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:33:42.920 [DEBUG] [Thread-6933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:33:42.920 [INFO] [Thread-6933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:33:42.927 [DEBUG] [Thread-6933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:33:42.927 [DEBUG] [Thread-6933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:33:42.927 [DEBUG] [Thread-6933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] client lang: <none>
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] server lang: <none>
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] kex follows: False
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] Compression: none
2025-11-25T22:33:42.928 [DEBUG] [Thread-6933] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:33:42.987 [DEBUG] [Thread-6933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:33:42.987 [DEBUG] [Thread-6933] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:33:42.987 [DEBUG] [Thread-6933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:33:42.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:33:42.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:33:43.046 [DEBUG] [Thread-6933] [transport.py] [_log()] userauth is OK
2025-11-25T22:33:43.046 [DEBUG] [Thread-6933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:33:43.046 [DEBUG] [Thread-6933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:33:43.046 [DEBUG] [Thread-6933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:33:43.046 [DEBUG] [Thread-6933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:33:43.060 [INFO] [Thread-6933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:33:43.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:33:43.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:33:43.969 [DEBUG] [Thread-6933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:33:43.969 [DEBUG] [Thread-6933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:33:44.017 [DEBUG] [Thread-6933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:33:44.017 [DEBUG] [Thread-6933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:33:44.025 [DEBUG] [Thread-6933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:33:44.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:33:44.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:33:44.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:33:44.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:33:44.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:33:44.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:33:44.057 [DEBUG] [Thread-6933] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:33:48.069 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:49.724 [DEBUG] [Thread-6935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:55.444 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:55.447 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:33:58.455 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:04.511 [DEBUG] [Thread-6936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:04.770 [DEBUG] [Thread-6937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:08.853 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:14.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:34:14.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:34:14.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:34:14.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 33, 42), 28.82, 13.46, 0.0, 11.21, 20.83, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:34:14.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:33:42
2025-11-25T22:34:14.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:34:15.009 [DEBUG] [Thread-6938] [transport.py] [_log()] starting thread (client mode): 0x70d74940
2025-11-25T22:34:15.009 [DEBUG] [Thread-6938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:34:15.029 [DEBUG] [Thread-6938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:34:15.029 [INFO] [Thread-6938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:34:15.032 [DEBUG] [Thread-6938] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] client lang: <none>
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] server lang: <none>
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] kex follows: False
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:34:15.038 [DEBUG] [Thread-6938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:34:15.039 [DEBUG] [Thread-6938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:34:15.039 [DEBUG] [Thread-6938] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:34:15.039 [DEBUG] [Thread-6938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:34:15.039 [DEBUG] [Thread-6938] [transport.py] [_log()] Compression: none
2025-11-25T22:34:15.039 [DEBUG] [Thread-6938] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:34:15.058 [DEBUG] [Thread-6938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:34:15.059 [DEBUG] [Thread-6938] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:34:15.059 [DEBUG] [Thread-6938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:34:15.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:34:15.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:34:15.062 [DEBUG] [Thread-6938] [transport.py] [_log()] userauth is OK
2025-11-25T22:34:15.062 [DEBUG] [Thread-6938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:34:15.062 [DEBUG] [Thread-6938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:34:15.062 [DEBUG] [Thread-6938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:34:15.062 [DEBUG] [Thread-6938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:34:15.086 [INFO] [Thread-6938] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:34:15.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:34:15.733 [DEBUG] [Thread-6938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:34:15.733 [DEBUG] [Thread-6938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:34:15.733 [DEBUG] [Thread-6938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:34:15.774 [DEBUG] [Thread-6938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:34:15.774 [DEBUG] [Thread-6938] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:34:15.777 [DEBUG] [Thread-6938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:34:15.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:34:15.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:34:15.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:34:15.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:34:15.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:34:15.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:34:15.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.857043 -999.00  +20.70   7.67     19   -3.50 1 1 1 1 1     0    0 26.27 68.35 ZNESW 6.2 7.7 160.6 8.7 20.4 -26.0 20.4 -25.5 20.1 -24.1 20.3 -25.1
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.857043
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:34:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:33:42', tmtdew=28.82, humidity=13.46, cloud=0.0, wind=11.21, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:33:43', seeing=0.86, atlas_timestamp='2025-11-25T20:34:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:34:15.797 [DEBUG] [Thread-6938] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:34:15.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:34:15.883 [DEBUG] [Thread-6941] [transport.py] [_log()] starting thread (client mode): 0x70d55300
2025-11-25T22:34:15.883 [DEBUG] [Thread-6941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:34:15.898 [DEBUG] [Thread-6941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:34:15.898 [INFO] [Thread-6941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:34:15.905 [DEBUG] [Thread-6941] [transport.py] [_log()] client lang: <none>
2025-11-25T22:34:15.906 [DEBUG] [Thread-6941] [transport.py] [_log()] server lang: <none>
2025-11-25T22:34:15.906 [DEBUG] [Thread-6941] [transport.py] [_log()] kex follows: False
2025-11-25T22:34:15.906 [DEBUG] [Thread-6941] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:34:15.906 [DEBUG] [Thread-6941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:34:15.906 [DEBUG] [Thread-6941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:34:15.906 [DEBUG] [Thread-6941] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:34:15.906 [DEBUG] [Thread-6941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:34:15.906 [DEBUG] [Thread-6941] [transport.py] [_log()] Compression: none
2025-11-25T22:34:15.906 [DEBUG] [Thread-6941] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:34:15.963 [DEBUG] [Thread-6941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:34:15.963 [DEBUG] [Thread-6941] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:34:15.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:34:15.964 [DEBUG] [Thread-6941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:34:15.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:34:16.022 [DEBUG] [Thread-6941] [transport.py] [_log()] userauth is OK
2025-11-25T22:34:16.022 [DEBUG] [Thread-6941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:34:16.022 [DEBUG] [Thread-6941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:34:16.022 [DEBUG] [Thread-6941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:34:16.022 [DEBUG] [Thread-6941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:34:16.040 [INFO] [Thread-6941] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:34:16.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:34:16.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:34:16.882 [DEBUG] [Thread-6941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:34:16.882 [DEBUG] [Thread-6941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:34:16.930 [DEBUG] [Thread-6941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:34:16.930 [DEBUG] [Thread-6941] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:34:16.938 [DEBUG] [Thread-6941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:34:16.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:34:16.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')
2025-11-25T22:34: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
2025-11-25T22:34:16.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:34:16.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:34:16.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:34:16.970 [DEBUG] [Thread-6941] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:34:19.249 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:19.802 [DEBUG] [Thread-6943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:29.647 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:34.846 [DEBUG] [Thread-6944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:40.046 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:34:46.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:34: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
2025-11-25T22:34:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 34, 14), 28.79, 13.49, 0.0, 11.59, 20.85, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:34:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:34:14
2025-11-25T22:34:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:34:47.983 [DEBUG] [Thread-6945] [transport.py] [_log()] starting thread (client mode): 0x70d57730
2025-11-25T22:34:47.983 [DEBUG] [Thread-6945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:34:48.004 [DEBUG] [Thread-6945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:34:48.004 [INFO] [Thread-6945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:34:48.005 [DEBUG] [Thread-6945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] client lang: <none>
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] server lang: <none>
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] kex follows: False
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] Compression: none
2025-11-25T22:34:48.006 [DEBUG] [Thread-6945] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:34:48.017 [DEBUG] [Thread-6945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:34:48.018 [DEBUG] [Thread-6945] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:34:48.018 [DEBUG] [Thread-6945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:34:48.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:34:48.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:34:48.019 [DEBUG] [Thread-6945] [transport.py] [_log()] userauth is OK
2025-11-25T22:34:48.019 [DEBUG] [Thread-6945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:34:48.019 [DEBUG] [Thread-6945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:34:48.019 [DEBUG] [Thread-6945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:34:48.019 [DEBUG] [Thread-6945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:34:48.030 [INFO] [Thread-6945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:34:48.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:34:48.617 [DEBUG] [Thread-6945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:34:48.617 [DEBUG] [Thread-6945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:34:48.617 [DEBUG] [Thread-6945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:34:48.658 [DEBUG] [Thread-6945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:34:48.658 [DEBUG] [Thread-6945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:34:48.661 [DEBUG] [Thread-6945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:34:48.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:34:48.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:34:48.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:34:48.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:34:48.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:34:48.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:34:48.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.857390 -999.00  +20.70   7.55     19   -3.50 1 1 1 1 1     0    0 25.77 62.96 ZNESW 7.3 7.5 159.8 9.0 20.3 -25.7 20.4 -25.3 20.0 -23.9 20.3 -25.0
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.857390
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:34:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:34:14', tmtdew=28.79, humidity=13.49, cloud=0.0, wind=11.59, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:34:15', seeing=0.83, atlas_timestamp='2025-11-25T20:34:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:34:48.681 [DEBUG] [Thread-6945] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:34:48.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:34:48.766 [DEBUG] [Thread-6948] [transport.py] [_log()] starting thread (client mode): 0x70d55570
2025-11-25T22:34:48.766 [DEBUG] [Thread-6948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:34:48.783 [DEBUG] [Thread-6948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:34:48.783 [INFO] [Thread-6948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] client lang: <none>
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] server lang: <none>
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] kex follows: False
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] Compression: none
2025-11-25T22:34:48.791 [DEBUG] [Thread-6948] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:34:48.847 [DEBUG] [Thread-6948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:34:48.847 [DEBUG] [Thread-6948] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:34:48.848 [DEBUG] [Thread-6948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:34:48.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:34:48.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:34:48.903 [DEBUG] [Thread-6948] [transport.py] [_log()] userauth is OK
2025-11-25T22:34:48.903 [DEBUG] [Thread-6948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:34:48.903 [DEBUG] [Thread-6948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:34:48.903 [DEBUG] [Thread-6948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:34:48.903 [DEBUG] [Thread-6948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:34:48.918 [INFO] [Thread-6948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:34:48.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:34:48.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:34:49.850 [DEBUG] [Thread-6948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:34:49.850 [DEBUG] [Thread-6948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:34:49.877 [DEBUG] [Thread-6950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:49.897 [DEBUG] [Thread-6948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:34:49.897 [DEBUG] [Thread-6948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:34:49.906 [DEBUG] [Thread-6948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:34:49.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:34:49.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:34:49.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:34:49.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:34:49.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:34:49.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:34:49.942 [DEBUG] [Thread-6948] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:34:50.458 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:55.650 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:34:55.651 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:00.875 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:04.583 [DEBUG] [Thread-6951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:04.931 [DEBUG] [Thread-6952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:11.296 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:35:19.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:35:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:35:19.966 [DEBUG] [Thread-6953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:20.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 34, 46), 28.66, 14.06, 0.0, 9.53, 20.73, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:35:20.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:34:46
2025-11-25T22:35:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:35:20.990 [DEBUG] [Thread-6954] [transport.py] [_log()] starting thread (client mode): 0x70d01b10
2025-11-25T22:35:20.990 [DEBUG] [Thread-6954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:35:21.002 [DEBUG] [Thread-6954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:35:21.002 [INFO] [Thread-6954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] client lang: <none>
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] server lang: <none>
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] kex follows: False
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] Compression: none
2025-11-25T22:35:21.004 [DEBUG] [Thread-6954] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:35:21.013 [DEBUG] [Thread-6954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:35:21.013 [DEBUG] [Thread-6954] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:35:21.014 [DEBUG] [Thread-6954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:35:21.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:35:21.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:35:21.014 [DEBUG] [Thread-6954] [transport.py] [_log()] userauth is OK
2025-11-25T22:35:21.015 [DEBUG] [Thread-6954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:35:21.015 [DEBUG] [Thread-6954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:35:21.015 [DEBUG] [Thread-6954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:35:21.015 [DEBUG] [Thread-6954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:35:21.033 [INFO] [Thread-6954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:35:21.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:35:21.602 [DEBUG] [Thread-6954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:35:21.603 [DEBUG] [Thread-6954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:35:21.603 [DEBUG] [Thread-6954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:35:21.644 [DEBUG] [Thread-6954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:35:21.644 [DEBUG] [Thread-6954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:35:21.647 [DEBUG] [Thread-6954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:35:21.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:35:21.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:35:21.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:35:21.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:35:21.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:35:21.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:35:21.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:35:21.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:35:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:35:21.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.857737 -999.00  +20.70   5.36     19   -3.50 1 1 1 1 1     0    0 26.07 61.54 ZNESW 4.8 5.4 146.6 7.6 20.4 -25.8 20.4 -25.3 20.1 -24.1 20.2 -25.1
2025-11-25T22:35:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:35:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:35:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.857737
2025-11-25T22:35:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:35:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:35:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:35:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:35:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:35:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:34:46', tmtdew=28.66, humidity=14.06, cloud=0.0, wind=9.53, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:35:19', seeing=0.96, atlas_timestamp='2025-11-25T20:35:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:35:21.668 [DEBUG] [Thread-6954] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:35:21.697 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:21.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:35:21.765 [DEBUG] [Thread-6957] [transport.py] [_log()] starting thread (client mode): 0x70d54850
2025-11-25T22:35:21.765 [DEBUG] [Thread-6957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:35:21.783 [DEBUG] [Thread-6957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:35:21.784 [INFO] [Thread-6957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:35:21.791 [DEBUG] [Thread-6957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] client lang: <none>
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] server lang: <none>
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] kex follows: False
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:35:21.792 [DEBUG] [Thread-6957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:35:21.793 [DEBUG] [Thread-6957] [transport.py] [_log()] Compression: none
2025-11-25T22:35:21.793 [DEBUG] [Thread-6957] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:35:21.852 [DEBUG] [Thread-6957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:35:21.852 [DEBUG] [Thread-6957] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:35:21.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:35:21.853 [DEBUG] [Thread-6957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:35:21.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:35:21.908 [DEBUG] [Thread-6957] [transport.py] [_log()] userauth is OK
2025-11-25T22:35:21.908 [DEBUG] [Thread-6957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:35:21.909 [DEBUG] [Thread-6957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:35:21.909 [DEBUG] [Thread-6957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:35:21.909 [DEBUG] [Thread-6957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:35:21.927 [INFO] [Thread-6957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:35:21.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:35:21.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:35:22.753 [DEBUG] [Thread-6957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:35:22.754 [DEBUG] [Thread-6957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:35:22.801 [DEBUG] [Thread-6957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:35:22.801 [DEBUG] [Thread-6957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:35:22.809 [DEBUG] [Thread-6957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:35:22.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:35:22.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:35:22.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:35:22.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:35:22.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:35:22.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:35:22.841 [DEBUG] [Thread-6957] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:35:32.127 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:34.995 [DEBUG] [Thread-6959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:42.519 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:50.035 [DEBUG] [Thread-6960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:35:52.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:35:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:35:52.912 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:53.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 35, 18), 28.61, 14.11, 0.0, 8.82, 20.73, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:35:53.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:35:18
2025-11-25T22:35:53.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:35:53.870 [DEBUG] [Thread-6961] [transport.py] [_log()] starting thread (client mode): 0x70d005e0
2025-11-25T22:35:53.870 [DEBUG] [Thread-6961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:35:53.891 [DEBUG] [Thread-6961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:35:53.891 [INFO] [Thread-6961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:35:53.894 [DEBUG] [Thread-6961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:35:53.894 [DEBUG] [Thread-6961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:35:53.894 [DEBUG] [Thread-6961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:35:53.894 [DEBUG] [Thread-6961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:35:53.894 [DEBUG] [Thread-6961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:35:53.894 [DEBUG] [Thread-6961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:35:53.894 [DEBUG] [Thread-6961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:35:53.894 [DEBUG] [Thread-6961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] client lang: <none>
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] server lang: <none>
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] kex follows: False
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] Compression: none
2025-11-25T22:35:53.895 [DEBUG] [Thread-6961] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:35:53.910 [DEBUG] [Thread-6961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:35:53.910 [DEBUG] [Thread-6961] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:35:53.910 [DEBUG] [Thread-6961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:35:53.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:35:53.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:35:53.911 [DEBUG] [Thread-6961] [transport.py] [_log()] userauth is OK
2025-11-25T22:35:53.911 [DEBUG] [Thread-6961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:35:53.911 [DEBUG] [Thread-6961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:35:53.911 [DEBUG] [Thread-6961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:35:53.911 [DEBUG] [Thread-6961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:35:53.920 [INFO] [Thread-6961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:35:53.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:35:54.532 [DEBUG] [Thread-6961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:35:54.532 [DEBUG] [Thread-6961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:35:54.532 [DEBUG] [Thread-6961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:35:54.573 [DEBUG] [Thread-6961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:35:54.573 [DEBUG] [Thread-6961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:35:54.575 [DEBUG] [Thread-6961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:35:54.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:35:54.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:35:54.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:35:54.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:35:54.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:35:54.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:35:54.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.857737 -999.00  +20.70   5.36     19   -3.50 1 1 1 1 1     0    0 26.07 61.54 ZNESW 4.8 5.4 146.6 7.6 20.4 -25.8 20.4 -25.3 20.1 -24.1 20.2 -25.1
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.857737
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:35:54.592 [DEBUG] [Thread-6961] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:35:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:35:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:35:18', tmtdew=28.61, humidity=14.11, cloud=0.0, wind=8.82, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:35:51', seeing=0.88, atlas_timestamp='2025-11-25T20:35:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:35:54.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:35:54.682 [DEBUG] [Thread-6964] [transport.py] [_log()] starting thread (client mode): 0x70d38a60
2025-11-25T22:35:54.683 [DEBUG] [Thread-6964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:35:54.697 [DEBUG] [Thread-6964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:35:54.697 [INFO] [Thread-6964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:35:54.704 [DEBUG] [Thread-6964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:35:54.704 [DEBUG] [Thread-6964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:35:54.704 [DEBUG] [Thread-6964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:35:54.704 [DEBUG] [Thread-6964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:35:54.704 [DEBUG] [Thread-6964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:35:54.704 [DEBUG] [Thread-6964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:35:54.704 [DEBUG] [Thread-6964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:35:54.704 [DEBUG] [Thread-6964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] client lang: <none>
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] server lang: <none>
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] kex follows: False
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] Compression: none
2025-11-25T22:35:54.705 [DEBUG] [Thread-6964] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:35:54.761 [DEBUG] [Thread-6964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:35:54.761 [DEBUG] [Thread-6964] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:35:54.761 [DEBUG] [Thread-6964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:35:54.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:35:54.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:35:54.819 [DEBUG] [Thread-6964] [transport.py] [_log()] userauth is OK
2025-11-25T22:35:54.819 [DEBUG] [Thread-6964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:35:54.819 [DEBUG] [Thread-6964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:35:54.819 [DEBUG] [Thread-6964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:35:54.819 [DEBUG] [Thread-6964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:35:54.833 [INFO] [Thread-6964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:35:54.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:35:54.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:35:55.629 [DEBUG] [Thread-6964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:35:55.630 [DEBUG] [Thread-6964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:35:55.677 [DEBUG] [Thread-6964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:35:55.677 [DEBUG] [Thread-6964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:35:55.685 [DEBUG] [Thread-6964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:35:55.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:35:55.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:35:55.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:35:55.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:35:55.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:35:55.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:35:55.717 [DEBUG] [Thread-6964] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:35:55.852 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:35:55.853 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:03.307 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:04.661 [DEBUG] [Thread-6966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:05.067 [DEBUG] [Thread-6967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:13.706 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:20.124 [DEBUG] [Thread-6968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:24.130 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:25.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:36:25.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:36:25.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:36:26.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 36, 23), 28.42, 14.14, 0.0, 9.16, 20.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:36:26.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:36:23
2025-11-25T22:36:26.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:36:26.674 [DEBUG] [Thread-6969] [transport.py] [_log()] starting thread (client mode): 0x70d3a410
2025-11-25T22:36:26.674 [DEBUG] [Thread-6969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:36:26.695 [DEBUG] [Thread-6969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:36:26.695 [INFO] [Thread-6969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:36:26.696 [DEBUG] [Thread-6969] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] client lang: <none>
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] server lang: <none>
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] kex follows: False
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] Compression: none
2025-11-25T22:36:26.697 [DEBUG] [Thread-6969] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:36:26.708 [DEBUG] [Thread-6969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:36:26.709 [DEBUG] [Thread-6969] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:36:26.709 [DEBUG] [Thread-6969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:36:26.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:36:26.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:36:26.711 [DEBUG] [Thread-6969] [transport.py] [_log()] userauth is OK
2025-11-25T22:36:26.712 [DEBUG] [Thread-6969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:36:26.712 [DEBUG] [Thread-6969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:36:26.712 [DEBUG] [Thread-6969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:36:26.712 [DEBUG] [Thread-6969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:36:26.737 [INFO] [Thread-6969] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:36:26.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:36:27.392 [DEBUG] [Thread-6969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:36:27.392 [DEBUG] [Thread-6969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:36:27.392 [DEBUG] [Thread-6969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:36:27.433 [DEBUG] [Thread-6969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:36:27.433 [DEBUG] [Thread-6969] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:36:27.436 [DEBUG] [Thread-6969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:36:27.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:36:27.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:36:27.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:36:27.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:36:27.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:36:27.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:36:27.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:36:27.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:36:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:36:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.858085 -999.00  +20.70   4.06     19   -3.50 1 1 1 1 1     0    0 25.65 60.04 ZNESW 5.9 4.1 149.6 7.6 20.4 -25.8 20.4 -25.4 20.1 -24.1 20.2 -25.0
2025-11-25T22:36:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:36:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:36:27.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.858085
2025-11-25T22:36:27.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:36:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:36:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:36:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:36:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:36:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:36:23', tmtdew=28.42, humidity=14.14, cloud=0.0, wind=9.16, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:36:23', seeing=0.9, atlas_timestamp='2025-11-25T20:35:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:36:27.465 [DEBUG] [Thread-6969] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:36:27.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:36:27.562 [DEBUG] [Thread-6972] [transport.py] [_log()] starting thread (client mode): 0x70d6a9b0
2025-11-25T22:36:27.563 [DEBUG] [Thread-6972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:36:27.578 [DEBUG] [Thread-6972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:36:27.578 [INFO] [Thread-6972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:36:27.586 [DEBUG] [Thread-6972] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:36:27.586 [DEBUG] [Thread-6972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:36:27.586 [DEBUG] [Thread-6972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] client lang: <none>
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] server lang: <none>
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] kex follows: False
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] Compression: none
2025-11-25T22:36:27.587 [DEBUG] [Thread-6972] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:36:27.643 [DEBUG] [Thread-6972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:36:27.643 [DEBUG] [Thread-6972] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:36:27.644 [DEBUG] [Thread-6972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:36:27.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:36:27.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:36:27.699 [DEBUG] [Thread-6972] [transport.py] [_log()] userauth is OK
2025-11-25T22:36:27.699 [DEBUG] [Thread-6972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:36:27.700 [DEBUG] [Thread-6972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:36:27.700 [DEBUG] [Thread-6972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:36:27.700 [DEBUG] [Thread-6972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:36:27.718 [INFO] [Thread-6972] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:36:27.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:36:27.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:36:28.554 [DEBUG] [Thread-6972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:36:28.555 [DEBUG] [Thread-6972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:36:28.603 [DEBUG] [Thread-6972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:36:28.603 [DEBUG] [Thread-6972] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:36:28.612 [DEBUG] [Thread-6972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:36:28.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:36:28.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:36:28.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:36:28.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:36:28.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:36:28.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:36:28.649 [DEBUG] [Thread-6972] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:36:34.583 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:35.159 [DEBUG] [Thread-6974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:44.990 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:50.200 [DEBUG] [Thread-6975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:55.388 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:56.057 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:56.058 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:36:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:36:58.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:36:58.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:36:59.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 36, 55), 28.38, 14.17, 0.0, 9.62, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:36:59.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:36:55
2025-11-25T22:36:59.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:36:59.600 [DEBUG] [Thread-6976] [transport.py] [_log()] starting thread (client mode): 0x70d39390
2025-11-25T22:36:59.600 [DEBUG] [Thread-6976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:36:59.621 [DEBUG] [Thread-6976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:36:59.621 [INFO] [Thread-6976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:36:59.624 [DEBUG] [Thread-6976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] client lang: <none>
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] server lang: <none>
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] kex follows: False
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] Compression: none
2025-11-25T22:36:59.625 [DEBUG] [Thread-6976] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:36:59.642 [DEBUG] [Thread-6976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:36:59.642 [DEBUG] [Thread-6976] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:36:59.643 [DEBUG] [Thread-6976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:36:59.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:36:59.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:36:59.645 [DEBUG] [Thread-6976] [transport.py] [_log()] userauth is OK
2025-11-25T22:36:59.645 [DEBUG] [Thread-6976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:36:59.645 [DEBUG] [Thread-6976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:36:59.645 [DEBUG] [Thread-6976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:36:59.645 [DEBUG] [Thread-6976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:36:59.670 [INFO] [Thread-6976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:36:59.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:37:00.336 [DEBUG] [Thread-6976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:37:00.336 [DEBUG] [Thread-6976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:37:00.337 [DEBUG] [Thread-6976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:37:00.377 [DEBUG] [Thread-6976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:37:00.377 [DEBUG] [Thread-6976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:37:00.379 [DEBUG] [Thread-6976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:37:00.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:37:00.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:37:00.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:37:00.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:37:00.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:37:00.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:37:00.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.858431 -999.00  +20.70   6.39     19   -3.50 1 1 1 1 1     0    0 26.01 56.68 ZNESW 6.0 6.4 162.8 8.2 20.3 -25.8 20.3 -25.4 20.0 -23.9 20.2 -25.2
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.858431
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:37:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:36:55', tmtdew=28.38, humidity=14.17, cloud=0.0, wind=9.62, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:36:55', seeing=0.9, atlas_timestamp='2025-11-25T20:36:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:37:00.400 [DEBUG] [Thread-6976] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:37:00.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:37:00.482 [DEBUG] [Thread-6979] [transport.py] [_log()] starting thread (client mode): 0x70d39180
2025-11-25T22:37:00.482 [DEBUG] [Thread-6979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:37:00.496 [DEBUG] [Thread-6979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:37:00.496 [INFO] [Thread-6979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] client lang: <none>
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] server lang: <none>
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] kex follows: False
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:37:00.504 [DEBUG] [Thread-6979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:37:00.505 [DEBUG] [Thread-6979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:37:00.505 [DEBUG] [Thread-6979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:37:00.505 [DEBUG] [Thread-6979] [transport.py] [_log()] Compression: none
2025-11-25T22:37:00.505 [DEBUG] [Thread-6979] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:37:00.563 [DEBUG] [Thread-6979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:37:00.563 [DEBUG] [Thread-6979] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:37:00.564 [DEBUG] [Thread-6979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:37:00.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:37:00.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:37:00.620 [DEBUG] [Thread-6979] [transport.py] [_log()] userauth is OK
2025-11-25T22:37:00.620 [DEBUG] [Thread-6979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:37:00.620 [DEBUG] [Thread-6979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:37:00.620 [DEBUG] [Thread-6979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:37:00.620 [DEBUG] [Thread-6979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:37:00.640 [INFO] [Thread-6979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:37:00.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:37:00.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:37:01.473 [DEBUG] [Thread-6979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:37:01.473 [DEBUG] [Thread-6979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:37:01.521 [DEBUG] [Thread-6979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:37:01.521 [DEBUG] [Thread-6979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:37:01.531 [DEBUG] [Thread-6979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:37:01.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:37:01.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:37:01.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:37:01.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:37:01.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:37:01.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:37:01.568 [DEBUG] [Thread-6979] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:37:04.739 [DEBUG] [Thread-6981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:05.231 [DEBUG] [Thread-6982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:05.785 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:16.182 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:20.282 [DEBUG] [Thread-6983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:26.593 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:31.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:37:31.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:37:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:37:32.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 37, 27), 28.35, 14.21, 0.0, 9.46, 20.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:37:32.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:37:27
2025-11-25T22:37:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:37:32.528 [DEBUG] [Thread-6984] [transport.py] [_log()] starting thread (client mode): 0x70d68d00
2025-11-25T22:37:32.528 [DEBUG] [Thread-6984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:37:32.551 [DEBUG] [Thread-6984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:37:32.551 [INFO] [Thread-6984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:37:32.554 [DEBUG] [Thread-6984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] client lang: <none>
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] server lang: <none>
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] kex follows: False
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] Compression: none
2025-11-25T22:37:32.555 [DEBUG] [Thread-6984] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:37:32.574 [DEBUG] [Thread-6984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:37:32.574 [DEBUG] [Thread-6984] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:37:32.575 [DEBUG] [Thread-6984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:37:32.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:37:32.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:37:32.577 [DEBUG] [Thread-6984] [transport.py] [_log()] userauth is OK
2025-11-25T22:37:32.577 [DEBUG] [Thread-6984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:37:32.577 [DEBUG] [Thread-6984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:37:32.577 [DEBUG] [Thread-6984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:37:32.577 [DEBUG] [Thread-6984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:37:32.613 [INFO] [Thread-6984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:37:32.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:37:33.334 [DEBUG] [Thread-6984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:37:33.335 [DEBUG] [Thread-6984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:37:33.335 [DEBUG] [Thread-6984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:37:33.376 [DEBUG] [Thread-6984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:37:33.376 [DEBUG] [Thread-6984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:37:33.381 [DEBUG] [Thread-6984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:37:33.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:37:33.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:37:33.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:37:33.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:37:33.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:37:33.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:37:33.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:37:33.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:37:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:37:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.858779 -999.00  +20.70   7.78     19   -3.50 1 1 1 1 1     0    0 26.11 57.73 ZNESW 6.8 7.8 147.2 9.4 20.3 -25.8 20.3 -25.2 20.0 -23.8 20.2 -24.9
2025-11-25T22:37:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:37:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:37:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.858779
2025-11-25T22:37:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:37:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:37:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:37:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:37:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:37:33.407 [DEBUG] [Thread-6984] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:37:33.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:37:27', tmtdew=28.35, humidity=14.21, cloud=0.0, wind=9.46, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:37:27', seeing=1.09, atlas_timestamp='2025-11-25T20:36:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:37:33.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:37:33.503 [DEBUG] [Thread-6987] [transport.py] [_log()] starting thread (client mode): 0x7374cf70
2025-11-25T22:37:33.503 [DEBUG] [Thread-6987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:37:33.519 [DEBUG] [Thread-6987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:37:33.519 [INFO] [Thread-6987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:37:33.527 [DEBUG] [Thread-6987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:37:33.527 [DEBUG] [Thread-6987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] client lang: <none>
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] server lang: <none>
2025-11-25T22:37:33.528 [DEBUG] [Thread-6987] [transport.py] [_log()] kex follows: False
2025-11-25T22:37:33.529 [DEBUG] [Thread-6987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:37:33.529 [DEBUG] [Thread-6987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:37:33.529 [DEBUG] [Thread-6987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:37:33.529 [DEBUG] [Thread-6987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:37:33.529 [DEBUG] [Thread-6987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:37:33.529 [DEBUG] [Thread-6987] [transport.py] [_log()] Compression: none
2025-11-25T22:37:33.529 [DEBUG] [Thread-6987] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:37:33.588 [DEBUG] [Thread-6987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:37:33.589 [DEBUG] [Thread-6987] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:37:33.589 [DEBUG] [Thread-6987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:37:33.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:37:33.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:37:33.644 [DEBUG] [Thread-6987] [transport.py] [_log()] userauth is OK
2025-11-25T22:37:33.644 [DEBUG] [Thread-6987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:37:33.644 [DEBUG] [Thread-6987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:37:33.644 [DEBUG] [Thread-6987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:37:33.645 [DEBUG] [Thread-6987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:37:33.663 [INFO] [Thread-6987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:37:33.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:37:33.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:37:34.554 [DEBUG] [Thread-6987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:37:34.554 [DEBUG] [Thread-6987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:37:34.602 [DEBUG] [Thread-6987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:37:34.602 [DEBUG] [Thread-6987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:37:34.611 [DEBUG] [Thread-6987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:37:34.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:37: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')
2025-11-25T22:37:34.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:37:34.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:37:34.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:37:34.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:37:34.649 [DEBUG] [Thread-6987] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:37:35.318 [DEBUG] [Thread-6989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:36.974 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:47.421 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:50.372 [DEBUG] [Thread-6990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:56.259 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:56.261 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:37:57.823 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:04.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:38:04.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:38:04.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:38:04.791 [DEBUG] [Thread-6991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 37, 59), 28.22, 14.17, 0.0, 9.76, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:38:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:37:59
2025-11-25T22:38:05.403 [DEBUG] [Thread-6992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:05.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:38:05.617 [DEBUG] [Thread-6993] [transport.py] [_log()] starting thread (client mode): 0x70d29960
2025-11-25T22:38:05.617 [DEBUG] [Thread-6993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:38:05.637 [DEBUG] [Thread-6993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:38:05.637 [INFO] [Thread-6993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:38:05.640 [DEBUG] [Thread-6993] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:38:05.640 [DEBUG] [Thread-6993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:38:05.640 [DEBUG] [Thread-6993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:38:05.640 [DEBUG] [Thread-6993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] client lang: <none>
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] server lang: <none>
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] kex follows: False
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:38:05.641 [DEBUG] [Thread-6993] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:38:05.642 [DEBUG] [Thread-6993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:38:05.642 [DEBUG] [Thread-6993] [transport.py] [_log()] Compression: none
2025-11-25T22:38:05.642 [DEBUG] [Thread-6993] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:38:05.661 [DEBUG] [Thread-6993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:38:05.662 [DEBUG] [Thread-6993] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:38:05.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:38:05.663 [DEBUG] [Thread-6993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:38:05.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:38:05.665 [DEBUG] [Thread-6993] [transport.py] [_log()] userauth is OK
2025-11-25T22:38:05.665 [DEBUG] [Thread-6993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:38:05.665 [DEBUG] [Thread-6993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:38:05.665 [DEBUG] [Thread-6993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:38:05.665 [DEBUG] [Thread-6993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:38:05.690 [INFO] [Thread-6993] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:38:05.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:38:06.338 [DEBUG] [Thread-6993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:38:06.338 [DEBUG] [Thread-6993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:38:06.339 [DEBUG] [Thread-6993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:38:06.379 [DEBUG] [Thread-6993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:38:06.379 [DEBUG] [Thread-6993] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:38:06.382 [DEBUG] [Thread-6993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:38:06.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:38:06.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:38:06.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:38:06.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:38:06.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:38:06.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:38:06.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:38:06.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:38:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:38:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.859126 -999.00  +20.70   5.94     19   -3.50 1 1 1 1 1     0    0 26.27 58.11 ZNESW 6.5 5.9 156.8 7.8 20.3 -25.7 20.3 -25.3 20.0 -24.0 20.2 -25.0
2025-11-25T22:38:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:38:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:38:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.859126
2025-11-25T22:38:06.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:38:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:38:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:38:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:38:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:38:06.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:37:59', tmtdew=28.22, humidity=14.17, cloud=0.0, wind=9.76, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:37:59', seeing=1.03, atlas_timestamp='2025-11-25T20:37:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:38:06.411 [DEBUG] [Thread-6993] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:38:06.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:38:06.507 [DEBUG] [Thread-6996] [transport.py] [_log()] starting thread (client mode): 0x7374feb0
2025-11-25T22:38:06.507 [DEBUG] [Thread-6996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:38:06.522 [DEBUG] [Thread-6996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:38:06.522 [INFO] [Thread-6996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:38:06.530 [DEBUG] [Thread-6996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:38:06.530 [DEBUG] [Thread-6996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:38:06.530 [DEBUG] [Thread-6996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:38:06.530 [DEBUG] [Thread-6996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:38:06.530 [DEBUG] [Thread-6996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:38:06.530 [DEBUG] [Thread-6996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:38:06.531 [DEBUG] [Thread-6996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:38:06.531 [DEBUG] [Thread-6996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:38:06.531 [DEBUG] [Thread-6996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:38:06.531 [DEBUG] [Thread-6996] [transport.py] [_log()] client lang: <none>
2025-11-25T22:38:06.531 [DEBUG] [Thread-6996] [transport.py] [_log()] server lang: <none>
2025-11-25T22:38:06.531 [DEBUG] [Thread-6996] [transport.py] [_log()] kex follows: False
2025-11-25T22:38:06.531 [DEBUG] [Thread-6996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:38:06.531 [DEBUG] [Thread-6996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:38:06.532 [DEBUG] [Thread-6996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:38:06.532 [DEBUG] [Thread-6996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:38:06.532 [DEBUG] [Thread-6996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:38:06.532 [DEBUG] [Thread-6996] [transport.py] [_log()] Compression: none
2025-11-25T22:38:06.532 [DEBUG] [Thread-6996] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:38:06.592 [DEBUG] [Thread-6996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:38:06.593 [DEBUG] [Thread-6996] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:38:06.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:38:06.594 [DEBUG] [Thread-6996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:38:06.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:38:06.648 [DEBUG] [Thread-6996] [transport.py] [_log()] userauth is OK
2025-11-25T22:38:06.648 [DEBUG] [Thread-6996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:38:06.648 [DEBUG] [Thread-6996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:38:06.648 [DEBUG] [Thread-6996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:38:06.648 [DEBUG] [Thread-6996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:38:06.667 [INFO] [Thread-6996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:38:06.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:38:06.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:38:07.512 [DEBUG] [Thread-6996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:38:07.512 [DEBUG] [Thread-6996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:38:07.559 [DEBUG] [Thread-6996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:38:07.560 [DEBUG] [Thread-6996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:38:07.569 [DEBUG] [Thread-6996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:38:07.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:38:07.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:38:07.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:38:07.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:38:07.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:38:07.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:38:07.606 [DEBUG] [Thread-6996] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:38:08.239 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:18.661 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:20.436 [DEBUG] [Thread-6998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:29.070 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:35.499 [DEBUG] [Thread-6999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:38:37.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:38: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
2025-11-25T22:38:38.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 38, 31), 28.14, 14.26, 0.0, 9.42, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:38:38.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:38:31
2025-11-25T22:38:38.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:38:38.573 [DEBUG] [Thread-7000] [transport.py] [_log()] starting thread (client mode): 0x70d6aa70
2025-11-25T22:38:38.573 [DEBUG] [Thread-7000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:38:38.592 [DEBUG] [Thread-7000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:38:38.593 [INFO] [Thread-7000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] client lang: <none>
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] server lang: <none>
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] kex follows: False
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] Compression: none
2025-11-25T22:38:38.596 [DEBUG] [Thread-7000] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:38:38.615 [DEBUG] [Thread-7000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:38:38.616 [DEBUG] [Thread-7000] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:38:38.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:38:38.617 [DEBUG] [Thread-7000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:38:38.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:38:38.619 [DEBUG] [Thread-7000] [transport.py] [_log()] userauth is OK
2025-11-25T22:38:38.619 [DEBUG] [Thread-7000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:38:38.619 [DEBUG] [Thread-7000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:38:38.619 [DEBUG] [Thread-7000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:38:38.619 [DEBUG] [Thread-7000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:38:38.644 [INFO] [Thread-7000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:38:38.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:38:39.389 [DEBUG] [Thread-7000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:38:39.390 [DEBUG] [Thread-7000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:38:39.390 [DEBUG] [Thread-7000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:38:39.431 [DEBUG] [Thread-7000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:38:39.431 [DEBUG] [Thread-7000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:38:39.434 [DEBUG] [Thread-7000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:38:39.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:38:39.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:38:39.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:38:39.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:38:39.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:38:39.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:38:39.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:38:39.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.859820 -999.00  +20.70   7.06     19   -3.50 1 1 1 1 1     0    0 25.92 57.89 ZNESW 6.3 7.1 155.0 9.3 20.3 -25.8 20.3 -25.5 20.0 -24.0 20.1 -25.0
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.859820
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:38:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:38:31', tmtdew=28.14, humidity=14.26, cloud=0.0, wind=9.42, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:38:31', seeing=1.2, atlas_timestamp='2025-11-25T20:38:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:38:39.456 [DEBUG] [Thread-7000] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:38:39.488 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:39.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:38:39.547 [DEBUG] [Thread-7003] [transport.py] [_log()] starting thread (client mode): 0x70d3ba00
2025-11-25T22:38:39.547 [DEBUG] [Thread-7003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:38:39.561 [DEBUG] [Thread-7003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:38:39.561 [INFO] [Thread-7003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:38:39.569 [DEBUG] [Thread-7003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:38:39.569 [DEBUG] [Thread-7003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:38:39.569 [DEBUG] [Thread-7003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:38:39.569 [DEBUG] [Thread-7003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:38:39.569 [DEBUG] [Thread-7003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:38:39.569 [DEBUG] [Thread-7003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:38:39.569 [DEBUG] [Thread-7003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:38:39.569 [DEBUG] [Thread-7003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] client lang: <none>
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] server lang: <none>
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] kex follows: False
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] Compression: none
2025-11-25T22:38:39.570 [DEBUG] [Thread-7003] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:38:39.628 [DEBUG] [Thread-7003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:38:39.629 [DEBUG] [Thread-7003] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:38:39.629 [DEBUG] [Thread-7003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:38:39.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:38:39.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:38:39.684 [DEBUG] [Thread-7003] [transport.py] [_log()] userauth is OK
2025-11-25T22:38:39.684 [DEBUG] [Thread-7003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:38:39.684 [DEBUG] [Thread-7003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:38:39.684 [DEBUG] [Thread-7003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:38:39.684 [DEBUG] [Thread-7003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:38:39.702 [INFO] [Thread-7003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:38:39.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:38:39.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:38:40.578 [DEBUG] [Thread-7003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:38:40.578 [DEBUG] [Thread-7003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:38:40.627 [DEBUG] [Thread-7003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:38:40.627 [DEBUG] [Thread-7003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:38:40.636 [DEBUG] [Thread-7003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:38:40.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:38:40.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:38:40.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:38:40.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:38:40.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:38:40.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:38:40.673 [DEBUG] [Thread-7003] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:38:49.885 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:50.539 [DEBUG] [Thread-7005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:56.460 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:38:56.461 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:00.280 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:04.847 [DEBUG] [Thread-7006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:05.586 [DEBUG] [Thread-7007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:10.680 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:10.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:39:10.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:39:10.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:39:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 39, 3), 28.16, 14.24, 0.0, 10.8, 20.3, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:39:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:39:03
2025-11-25T22:39:11.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:39:11.640 [DEBUG] [Thread-7008] [transport.py] [_log()] starting thread (client mode): 0x7374f220
2025-11-25T22:39:11.640 [DEBUG] [Thread-7008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:39:11.661 [DEBUG] [Thread-7008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:39:11.661 [INFO] [Thread-7008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:39:11.664 [DEBUG] [Thread-7008] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:39:11.664 [DEBUG] [Thread-7008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] client lang: <none>
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] server lang: <none>
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] kex follows: False
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] Compression: none
2025-11-25T22:39:11.665 [DEBUG] [Thread-7008] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:39:11.679 [DEBUG] [Thread-7008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:39:11.679 [DEBUG] [Thread-7008] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:39:11.680 [DEBUG] [Thread-7008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:39:11.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:39:11.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:39:11.680 [DEBUG] [Thread-7008] [transport.py] [_log()] userauth is OK
2025-11-25T22:39:11.680 [DEBUG] [Thread-7008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:39:11.680 [DEBUG] [Thread-7008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:39:11.680 [DEBUG] [Thread-7008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:39:11.680 [DEBUG] [Thread-7008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:39:11.689 [INFO] [Thread-7008] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:39:11.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:39:12.334 [DEBUG] [Thread-7008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:39:12.335 [DEBUG] [Thread-7008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:39:12.335 [DEBUG] [Thread-7008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:39:12.376 [DEBUG] [Thread-7008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:39:12.377 [DEBUG] [Thread-7008] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:39:12.380 [DEBUG] [Thread-7008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:39:12.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:39:12.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:39:12.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:39:12.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:39:12.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:39:12.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:39:12.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:39:12.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.860167 -999.00  +20.70   8.38     19   -3.50 1 1 1 1 1     0    0 26.02 54.97 ZNESW 7.2 8.4 138.0 9.1 20.3 -25.7 20.2 -25.3 20.0 -24.0 20.1 -24.9
2025-11-25T22:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.860167
2025-11-25T22:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:39:12.402 [DEBUG] [Thread-7008] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:39:12.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:39:03', tmtdew=28.16, humidity=14.24, cloud=0.0, wind=10.8, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:39:03', seeing=0.98, atlas_timestamp='2025-11-25T20:38:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22: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
2025-11-25T22:39:12.499 [DEBUG] [Thread-7011] [transport.py] [_log()] starting thread (client mode): 0x70d41840
2025-11-25T22:39:12.499 [DEBUG] [Thread-7011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:39:12.514 [DEBUG] [Thread-7011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:39:12.514 [INFO] [Thread-7011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] client lang: <none>
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] server lang: <none>
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] kex follows: False
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] Compression: none
2025-11-25T22:39:12.521 [DEBUG] [Thread-7011] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:39:12.579 [DEBUG] [Thread-7011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:39:12.580 [DEBUG] [Thread-7011] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:39:12.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:39:12.580 [DEBUG] [Thread-7011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:39:12.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:39:12.636 [DEBUG] [Thread-7011] [transport.py] [_log()] userauth is OK
2025-11-25T22:39:12.636 [DEBUG] [Thread-7011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:39:12.636 [DEBUG] [Thread-7011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:39:12.636 [DEBUG] [Thread-7011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:39:12.636 [DEBUG] [Thread-7011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:39:12.660 [INFO] [Thread-7011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:39:12.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:39:12.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:39:13.485 [DEBUG] [Thread-7011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:39:13.485 [DEBUG] [Thread-7011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:39:13.534 [DEBUG] [Thread-7011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:39:13.534 [DEBUG] [Thread-7011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:39:13.543 [DEBUG] [Thread-7011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:39:13.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:39:13.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:39:13.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:39:13.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:39:13.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:39:13.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:39:13.581 [DEBUG] [Thread-7011] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:39:20.623 [DEBUG] [Thread-7013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:21.074 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:31.486 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:35.683 [DEBUG] [Thread-7014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:41.880 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:43.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:39:43.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:39:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:39:44.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 39, 35), 28.62, 13.67, 0.0, 13.83, 20.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:39:44.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:39:35
2025-11-25T22:39:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:39:44.523 [DEBUG] [Thread-7015] [transport.py] [_log()] starting thread (client mode): 0x70d6b250
2025-11-25T22:39:44.523 [DEBUG] [Thread-7015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:39:44.539 [DEBUG] [Thread-7015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:39:44.539 [INFO] [Thread-7015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:39:44.542 [DEBUG] [Thread-7015] [transport.py] [_log()] client lang: <none>
2025-11-25T22:39:44.543 [DEBUG] [Thread-7015] [transport.py] [_log()] server lang: <none>
2025-11-25T22:39:44.543 [DEBUG] [Thread-7015] [transport.py] [_log()] kex follows: False
2025-11-25T22:39:44.543 [DEBUG] [Thread-7015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:39:44.543 [DEBUG] [Thread-7015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:39:44.543 [DEBUG] [Thread-7015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:39:44.543 [DEBUG] [Thread-7015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:39:44.543 [DEBUG] [Thread-7015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:39:44.543 [DEBUG] [Thread-7015] [transport.py] [_log()] Compression: none
2025-11-25T22:39:44.543 [DEBUG] [Thread-7015] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:39:44.559 [DEBUG] [Thread-7015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:39:44.560 [DEBUG] [Thread-7015] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:39:44.560 [DEBUG] [Thread-7015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:39:44.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:39:44.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:39:44.562 [DEBUG] [Thread-7015] [transport.py] [_log()] userauth is OK
2025-11-25T22:39:44.562 [DEBUG] [Thread-7015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:39:44.562 [DEBUG] [Thread-7015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:39:44.562 [DEBUG] [Thread-7015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:39:44.563 [DEBUG] [Thread-7015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:39:44.577 [INFO] [Thread-7015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:39:44.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:39:45.333 [DEBUG] [Thread-7015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:39:45.333 [DEBUG] [Thread-7015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:39:45.333 [DEBUG] [Thread-7015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:39:45.374 [DEBUG] [Thread-7015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:39:45.374 [DEBUG] [Thread-7015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:39:45.376 [DEBUG] [Thread-7015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:39:45.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:39:45.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:39:45.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:39:45.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:39:45.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:39:45.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:39:45.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:39:45.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:39:45.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:39:45.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.860515 -999.00  +20.70   5.98     19   -3.50 1 1 1 1 1     0    0 25.44 54.49 ZNESW 7.3 6.0 146.3 9.9 20.3 -25.8 20.3 -25.2 20.0 -24.1 20.1 -24.9
2025-11-25T22:39:45.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:39:45.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:39:45.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.860515
2025-11-25T22:39:45.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:39:45.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:39:45.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:39:45.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:39:45.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:39:45.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:39:35', tmtdew=28.62, humidity=13.67, cloud=0.0, wind=13.83, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:39:35', seeing=1.01, atlas_timestamp='2025-11-25T20:39:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.004249999999998977, 0.06625000000000014, -0.015499999999999403, 0.07750000000000057, 0.1122500000000013, 0.023999999999999133, 0.013750000000001705, 0.045999999999999375, 0.028999999999999915, 0.05874999999999986, -0.04499999999999993, 0.09499999999999886, 0.09324999999999939, 0.014499999999999957, 0.009000000000000341, 0.018249999999998323, 0.059499999999999886, 0.08549999999999791, 0.01524999999999821, 0.05599999999999916, 0.0902499999999975, 0.08075000000000188, 0.01124999999999865, 0.016000000000000014, 0.05150000000000077, 0.04925000000000068, 0.08650000000000091, 0.09600000000000009, 0.09250000000000114, 0.018000000000000682, -0.0039999999999995595, -0.011250000000000426], zp_timestamp='2025-11-25T20:31:00')
2025-11-25T22:39:45.394 [DEBUG] [Thread-7015] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:39:45.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:39:45.478 [DEBUG] [Thread-7018] [transport.py] [_log()] starting thread (client mode): 0x70d6a920
2025-11-25T22:39:45.478 [DEBUG] [Thread-7018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:39:45.493 [DEBUG] [Thread-7018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:39:45.493 [INFO] [Thread-7018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:39:45.501 [DEBUG] [Thread-7018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:39:45.501 [DEBUG] [Thread-7018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:39:45.501 [DEBUG] [Thread-7018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:39:45.501 [DEBUG] [Thread-7018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:39:45.501 [DEBUG] [Thread-7018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:39:45.501 [DEBUG] [Thread-7018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:39:45.501 [DEBUG] [Thread-7018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:39:45.501 [DEBUG] [Thread-7018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] client lang: <none>
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] server lang: <none>
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] kex follows: False
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] Compression: none
2025-11-25T22:39:45.502 [DEBUG] [Thread-7018] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:39:45.559 [DEBUG] [Thread-7018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:39:45.560 [DEBUG] [Thread-7018] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:39:45.560 [DEBUG] [Thread-7018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:39:45.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:39:45.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:39:45.619 [DEBUG] [Thread-7018] [transport.py] [_log()] userauth is OK
2025-11-25T22:39:45.619 [DEBUG] [Thread-7018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:39:45.620 [DEBUG] [Thread-7018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:39:45.620 [DEBUG] [Thread-7018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:39:45.620 [DEBUG] [Thread-7018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:39:45.637 [INFO] [Thread-7018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:39:45.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:39:45.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:39:46.467 [DEBUG] [Thread-7018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:39:46.467 [DEBUG] [Thread-7018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:39:46.514 [DEBUG] [Thread-7018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:39:46.515 [DEBUG] [Thread-7018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:39:46.524 [DEBUG] [Thread-7018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:39:46.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:39:46.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:39:46.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:39:46.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:39:46.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:39:46.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:39:46.560 [DEBUG] [Thread-7018] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:39:50.709 [DEBUG] [Thread-7020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:52.338 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:56.735 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:39:56.737 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:02.777 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:04.905 [DEBUG] [Thread-7021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:05.759 [DEBUG] [Thread-7022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:13.229 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:40:16.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:40:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:40:17.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 40, 7), 28.87, 13.41, 0.0, 14.66, 20.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:40:17.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:40:07
2025-11-25T22:40:17.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:40:17.548 [DEBUG] [Thread-7023] [transport.py] [_log()] starting thread (client mode): 0x70d3ae60
2025-11-25T22:40:17.548 [DEBUG] [Thread-7023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:40:17.568 [DEBUG] [Thread-7023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:40:17.568 [INFO] [Thread-7023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] client lang: <none>
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] server lang: <none>
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] kex follows: False
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] Compression: none
2025-11-25T22:40:17.572 [DEBUG] [Thread-7023] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:40:17.587 [DEBUG] [Thread-7023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:40:17.587 [DEBUG] [Thread-7023] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:40:17.588 [DEBUG] [Thread-7023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:40:17.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:40:17.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:40:17.588 [DEBUG] [Thread-7023] [transport.py] [_log()] userauth is OK
2025-11-25T22:40:17.588 [DEBUG] [Thread-7023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:40:17.588 [DEBUG] [Thread-7023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:40:17.588 [DEBUG] [Thread-7023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:40:17.588 [DEBUG] [Thread-7023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:40:17.604 [INFO] [Thread-7023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:40:17.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:40:18.241 [DEBUG] [Thread-7023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:40:18.241 [DEBUG] [Thread-7023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:40:18.241 [DEBUG] [Thread-7023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:40:18.282 [DEBUG] [Thread-7023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:40:18.282 [DEBUG] [Thread-7023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:40:18.285 [DEBUG] [Thread-7023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:40:18.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:40:18.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:40:18.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:40:18.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:40:18.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:40:18.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:40:18.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.860862 -999.00  +20.70  11.64     19   -3.60 1 1 1 1 1     0    0 26.18 54.26 ZNESW 8.8 11.6 176.6 13.6 20.2 -25.7 20.2 -25.3 20.0 -23.8 20.2 -24.7
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.860862
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:40:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:40:07', tmtdew=28.87, humidity=13.41, cloud=0.0, wind=14.66, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:40:07', seeing=1.01, atlas_timestamp='2025-11-25T20:39:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016750000000000043, -0.055749999999999744, -0.012249999999999872, 0.0034999999999989484, 0.011499999999999844, 0.056250000000000355, -0.005499999999999616, 0.005250000000000199, 0.011499999999999844, 0.0, 0.02775000000000105, -0.053500000000001435, 0.038000000000000256, 0.049249999999998906, -0.024499999999999744, -0.031000000000000583, -0.017250000000000654, 0.022499999999999076, 0.036999999999999034, 0.004249999999998977, 0.0259999999999998, 0.03074999999999939, -0.00024999999999941735, -0.04625000000000057, -0.02450000000000152, 0.013499999999998735, 0.03974999999999973, 0.06949999999999967, 0.15549999999999997, 0.08000000000000185, 0.03850000000000087, -0.013999999999999346, -0.06225000000000058], zp_timestamp='2025-11-25T20:36:00')
2025-11-25T22:40:18.302 [DEBUG] [Thread-7023] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:40:18.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:40:18.388 [DEBUG] [Thread-7026] [transport.py] [_log()] starting thread (client mode): 0x70d681f0
2025-11-25T22:40:18.388 [DEBUG] [Thread-7026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:40:18.403 [DEBUG] [Thread-7026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:40:18.403 [INFO] [Thread-7026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] client lang: <none>
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] server lang: <none>
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] kex follows: False
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] Compression: none
2025-11-25T22:40:18.411 [DEBUG] [Thread-7026] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:40:18.466 [DEBUG] [Thread-7026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:40:18.466 [DEBUG] [Thread-7026] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:40:18.466 [DEBUG] [Thread-7026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:40:18.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:40:18.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:40:18.523 [DEBUG] [Thread-7026] [transport.py] [_log()] userauth is OK
2025-11-25T22:40:18.524 [DEBUG] [Thread-7026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:40:18.524 [DEBUG] [Thread-7026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:40:18.524 [DEBUG] [Thread-7026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:40:18.524 [DEBUG] [Thread-7026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:40:18.537 [INFO] [Thread-7026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:40:18.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:40:18.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:40:19.421 [DEBUG] [Thread-7026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:40:19.421 [DEBUG] [Thread-7026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:40:19.470 [DEBUG] [Thread-7026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:40:19.470 [DEBUG] [Thread-7026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:40:19.479 [DEBUG] [Thread-7026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:40:19.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:40:19.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:40:19.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:40:19.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:40:19.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:40:19.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:40:19.512 [DEBUG] [Thread-7026] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:40:20.792 [DEBUG] [Thread-7028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:23.668 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:34.102 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:35.857 [DEBUG] [Thread-7029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:44.536 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:49.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:40:49.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:40:49.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:40:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 40, 39), 29.05, 13.44, 0.0, 10.39, 20.73, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:40:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:40:39
2025-11-25T22:40:50.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:40:50.468 [DEBUG] [Thread-7030] [transport.py] [_log()] starting thread (client mode): 0x7374ef80
2025-11-25T22:40:50.468 [DEBUG] [Thread-7030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:40:50.486 [DEBUG] [Thread-7030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:40:50.486 [INFO] [Thread-7030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:40:50.490 [DEBUG] [Thread-7030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:40:50.490 [DEBUG] [Thread-7030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:40:50.490 [DEBUG] [Thread-7030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:40:50.490 [DEBUG] [Thread-7030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:40:50.490 [DEBUG] [Thread-7030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:40:50.490 [DEBUG] [Thread-7030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:40:50.490 [DEBUG] [Thread-7030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] client lang: <none>
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] server lang: <none>
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] kex follows: False
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] Compression: none
2025-11-25T22:40:50.491 [DEBUG] [Thread-7030] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:40:50.509 [DEBUG] [Thread-7030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:40:50.510 [DEBUG] [Thread-7030] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:40:50.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:40:50.511 [DEBUG] [Thread-7030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:40:50.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:40:50.513 [DEBUG] [Thread-7030] [transport.py] [_log()] userauth is OK
2025-11-25T22:40:50.513 [DEBUG] [Thread-7030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:40:50.513 [DEBUG] [Thread-7030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:40:50.513 [DEBUG] [Thread-7030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:40:50.513 [DEBUG] [Thread-7030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:40:50.536 [INFO] [Thread-7030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:40:50.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:40:50.891 [DEBUG] [Thread-7032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:51.197 [DEBUG] [Thread-7030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:40:51.197 [DEBUG] [Thread-7030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:40:51.197 [DEBUG] [Thread-7030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:40:51.238 [DEBUG] [Thread-7030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:40:51.238 [DEBUG] [Thread-7030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:40:51.240 [DEBUG] [Thread-7030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:40:51.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:40:51.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:40:51.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:40:51.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:40:51.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:40:51.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:40:51.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:40:51.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:40:51.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:40:51.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.861209 -999.00  +20.70   6.74     19   -3.50 1 1 1 1 1     0    0 26.17 53.73 ZNESW 7.5 6.7 175.4 10.5 20.3 -25.7 20.3 -25.3 20.0 -23.8 20.1 -24.9
2025-11-25T22:40:51.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:40:51.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:40:51.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.861209
2025-11-25T22:40:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:40:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:40:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:40:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:40:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:40:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:40:39', tmtdew=29.05, humidity=13.44, cloud=0.0, wind=10.39, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:40:39', seeing=0.98, atlas_timestamp='2025-11-25T20:40:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016750000000000043, -0.055749999999999744, -0.012249999999999872, 0.0034999999999989484, 0.011499999999999844, 0.056250000000000355, -0.005499999999999616, 0.005250000000000199, 0.011499999999999844, 0.0, 0.02775000000000105, -0.053500000000001435, 0.038000000000000256, 0.049249999999998906, -0.024499999999999744, -0.031000000000000583, -0.017250000000000654, 0.022499999999999076, 0.036999999999999034, 0.004249999999998977, 0.0259999999999998, 0.03074999999999939, -0.00024999999999941735, -0.04625000000000057, -0.02450000000000152, 0.013499999999998735, 0.03974999999999973, 0.06949999999999967, 0.15549999999999997, 0.08000000000000185, 0.03850000000000087, -0.013999999999999346, -0.06225000000000058], zp_timestamp='2025-11-25T20:36:00')
2025-11-25T22:40:51.260 [DEBUG] [Thread-7030] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:40:51.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:40:51.346 [DEBUG] [Thread-7034] [transport.py] [_log()] starting thread (client mode): 0x70d40fd0
2025-11-25T22:40:51.346 [DEBUG] [Thread-7034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:40:51.363 [DEBUG] [Thread-7034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:40:51.363 [INFO] [Thread-7034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] client lang: <none>
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] server lang: <none>
2025-11-25T22:40:51.370 [DEBUG] [Thread-7034] [transport.py] [_log()] kex follows: False
2025-11-25T22:40:51.371 [DEBUG] [Thread-7034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:40:51.371 [DEBUG] [Thread-7034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:40:51.371 [DEBUG] [Thread-7034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:40:51.371 [DEBUG] [Thread-7034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:40:51.371 [DEBUG] [Thread-7034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:40:51.371 [DEBUG] [Thread-7034] [transport.py] [_log()] Compression: none
2025-11-25T22:40:51.371 [DEBUG] [Thread-7034] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:40:51.426 [DEBUG] [Thread-7034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:40:51.426 [DEBUG] [Thread-7034] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:40:51.427 [DEBUG] [Thread-7034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:40:51.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:40:51.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:40:51.483 [DEBUG] [Thread-7034] [transport.py] [_log()] userauth is OK
2025-11-25T22:40:51.484 [DEBUG] [Thread-7034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:40:51.484 [DEBUG] [Thread-7034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:40:51.484 [DEBUG] [Thread-7034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:40:51.484 [DEBUG] [Thread-7034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:40:51.498 [INFO] [Thread-7034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:40:51.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:40:51.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:40:52.316 [DEBUG] [Thread-7034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:40:52.316 [DEBUG] [Thread-7034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:40:52.364 [DEBUG] [Thread-7034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:40:52.364 [DEBUG] [Thread-7034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:40:52.372 [DEBUG] [Thread-7034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:40:52.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:40:52.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:40:52.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:40:52.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:40:52.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:40:52.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:40:52.404 [DEBUG] [Thread-7034] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:40:54.994 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:56.938 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:40:56.939 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:04.982 [DEBUG] [Thread-7036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:05.379 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:05.926 [DEBUG] [Thread-7037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:15.810 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:20.982 [DEBUG] [Thread-7038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:41:22.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:41:22.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:41:23.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 41, 11), 29.18, 13.32, 0.0, 10.38, 20.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:41:23.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:41:11
2025-11-25T22:41:23.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:41:23.348 [DEBUG] [Thread-7039] [transport.py] [_log()] starting thread (client mode): 0x70d6a530
2025-11-25T22:41:23.348 [DEBUG] [Thread-7039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:41:23.369 [DEBUG] [Thread-7039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:41:23.369 [INFO] [Thread-7039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] client lang: <none>
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] server lang: <none>
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] kex follows: False
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] Compression: none
2025-11-25T22:41:23.372 [DEBUG] [Thread-7039] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:41:23.390 [DEBUG] [Thread-7039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:41:23.390 [DEBUG] [Thread-7039] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:41:23.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:41:23.391 [DEBUG] [Thread-7039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:41:23.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:41:23.393 [DEBUG] [Thread-7039] [transport.py] [_log()] userauth is OK
2025-11-25T22:41:23.393 [DEBUG] [Thread-7039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:41:23.394 [DEBUG] [Thread-7039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:41:23.394 [DEBUG] [Thread-7039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:41:23.394 [DEBUG] [Thread-7039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:41:23.412 [INFO] [Thread-7039] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:41:23.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:41:24.063 [DEBUG] [Thread-7039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:41:24.063 [DEBUG] [Thread-7039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:41:24.063 [DEBUG] [Thread-7039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:41:24.104 [DEBUG] [Thread-7039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:41:24.104 [DEBUG] [Thread-7039] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:41:24.107 [DEBUG] [Thread-7039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:41:24.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:41:24.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:41:24.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:41:24.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:41:24.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:41:24.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:41:24.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:41:24.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:41:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:41:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.861556 -999.00  +20.70   7.24     19   -3.60 1 1 1 1 1     0    0 25.33 47.15 ZNESW 7.5 7.2 155.0 9.5 20.3 -25.8 20.2 -25.3 19.9 -24.0 20.1 -24.9
2025-11-25T22:41:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:41:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:41:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.861556
2025-11-25T22:41:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:41:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:41:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:41:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:41:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:41:24.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:41:11', tmtdew=29.18, humidity=13.32, cloud=0.0, wind=10.38, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:41:11', seeing=0.99, atlas_timestamp='2025-11-25T20:40:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016750000000000043, -0.055749999999999744, -0.012249999999999872, 0.0034999999999989484, 0.011499999999999844, 0.056250000000000355, -0.005499999999999616, 0.005250000000000199, 0.011499999999999844, 0.0, 0.02775000000000105, -0.053500000000001435, 0.038000000000000256, 0.049249999999998906, -0.024499999999999744, -0.031000000000000583, -0.017250000000000654, 0.022499999999999076, 0.036999999999999034, 0.004249999999998977, 0.0259999999999998, 0.03074999999999939, -0.00024999999999941735, -0.04625000000000057, -0.02450000000000152, 0.013499999999998735, 0.03974999999999973, 0.06949999999999967, 0.15549999999999997, 0.08000000000000185, 0.03850000000000087, -0.013999999999999346, -0.06225000000000058], zp_timestamp='2025-11-25T20:36:00')
2025-11-25T22:41:24.132 [DEBUG] [Thread-7039] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:41:24.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:41:24.239 [DEBUG] [Thread-7042] [transport.py] [_log()] starting thread (client mode): 0x70d7e6b0
2025-11-25T22:41:24.239 [DEBUG] [Thread-7042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:41:24.254 [DEBUG] [Thread-7042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:41:24.254 [INFO] [Thread-7042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:41:24.261 [DEBUG] [Thread-7042] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:41:24.261 [DEBUG] [Thread-7042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:41:24.261 [DEBUG] [Thread-7042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:41:24.261 [DEBUG] [Thread-7042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:41:24.261 [DEBUG] [Thread-7042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] client lang: <none>
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] server lang: <none>
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] kex follows: False
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] Compression: none
2025-11-25T22:41:24.262 [DEBUG] [Thread-7042] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:41:24.324 [DEBUG] [Thread-7042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:41:24.325 [DEBUG] [Thread-7042] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:41:24.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:41:24.326 [DEBUG] [Thread-7042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:41:24.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:41:24.380 [DEBUG] [Thread-7042] [transport.py] [_log()] userauth is OK
2025-11-25T22:41:24.380 [DEBUG] [Thread-7042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:41:24.380 [DEBUG] [Thread-7042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:41:24.380 [DEBUG] [Thread-7042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:41:24.380 [DEBUG] [Thread-7042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:41:24.400 [INFO] [Thread-7042] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:41:24.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:41:24.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:41:25.244 [DEBUG] [Thread-7042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:41:25.244 [DEBUG] [Thread-7042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:41:25.292 [DEBUG] [Thread-7042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:41:25.292 [DEBUG] [Thread-7042] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:41:25.301 [DEBUG] [Thread-7042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:41:25.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:41:25.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:41:25.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:41:25.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:41:25.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:41:25.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:41:25.342 [DEBUG] [Thread-7042] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:41:26.207 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:36.015 [DEBUG] [Thread-7044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:36.605 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:47.026 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:51.069 [DEBUG] [Thread-7045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:41:55.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:41:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:41:56.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 41, 43), 29.07, 13.29, 0.0, 8.81, 20.83, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:41:56.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:41:43
2025-11-25T22:41:56.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:41:56.296 [DEBUG] [Thread-7046] [transport.py] [_log()] starting thread (client mode): 0x70d765f0
2025-11-25T22:41:56.296 [DEBUG] [Thread-7046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:41:56.316 [DEBUG] [Thread-7046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:41:56.316 [INFO] [Thread-7046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:41:56.319 [DEBUG] [Thread-7046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:41:56.319 [DEBUG] [Thread-7046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:41:56.319 [DEBUG] [Thread-7046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] client lang: <none>
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] server lang: <none>
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] kex follows: False
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] Compression: none
2025-11-25T22:41:56.320 [DEBUG] [Thread-7046] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:41:56.338 [DEBUG] [Thread-7046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:41:56.339 [DEBUG] [Thread-7046] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:41:56.340 [DEBUG] [Thread-7046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:41:56.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:41:56.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:41:56.342 [DEBUG] [Thread-7046] [transport.py] [_log()] userauth is OK
2025-11-25T22:41:56.343 [DEBUG] [Thread-7046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:41:56.343 [DEBUG] [Thread-7046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:41:56.343 [DEBUG] [Thread-7046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:41:56.343 [DEBUG] [Thread-7046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:41:56.367 [INFO] [Thread-7046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:41:56.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:41:56.977 [DEBUG] [Thread-7046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:41:56.977 [DEBUG] [Thread-7046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:41:56.978 [DEBUG] [Thread-7046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:41:57.019 [DEBUG] [Thread-7046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:41:57.019 [DEBUG] [Thread-7046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:41:57.022 [DEBUG] [Thread-7046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:41:57.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:41:57.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:41:57.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:41:57.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:41:57.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:41:57.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:41:57.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:41:57.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:41:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:41:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.862251 -999.00  +20.70   7.34     18   -3.80 1 1 1 1 1     0    0 25.42 42.56 ZNESW 5.8 7.3 132.4 9.2 20.2 -25.7 20.3 -25.1 20.0 -23.9 20.2 -24.7
2025-11-25T22:41:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:41:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:41:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.862251
2025-11-25T22:41:57.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:41:57.046 [DEBUG] [Thread-7046] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:41:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:41:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:41:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:41:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:41:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:41:43', tmtdew=29.07, humidity=13.29, cloud=0.0, wind=8.81, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:41:43', seeing=0.99, atlas_timestamp='2025-11-25T20:41:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016750000000000043, -0.055749999999999744, -0.012249999999999872, 0.0034999999999989484, 0.011499999999999844, 0.056250000000000355, -0.005499999999999616, 0.005250000000000199, 0.011499999999999844, 0.0, 0.02775000000000105, -0.053500000000001435, 0.038000000000000256, 0.049249999999998906, -0.024499999999999744, -0.031000000000000583, -0.017250000000000654, 0.022499999999999076, 0.036999999999999034, 0.004249999999998977, 0.0259999999999998, 0.03074999999999939, -0.00024999999999941735, -0.04625000000000057, -0.02450000000000152, 0.013499999999998735, 0.03974999999999973, 0.06949999999999967, 0.15549999999999997, 0.08000000000000185, 0.03850000000000087, -0.013999999999999346, -0.06225000000000058], zp_timestamp='2025-11-25T20:36:00')
2025-11-25T22:41:57.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:41:57.143 [DEBUG] [Thread-7049] [transport.py] [_log()] starting thread (client mode): 0x7374ff70
2025-11-25T22:41:57.143 [DEBUG] [Thread-7049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:41:57.145 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:57.146 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:57.158 [DEBUG] [Thread-7049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:41:57.158 [INFO] [Thread-7049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:41:57.165 [DEBUG] [Thread-7049] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:41:57.165 [DEBUG] [Thread-7049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] client lang: <none>
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] server lang: <none>
2025-11-25T22:41:57.166 [DEBUG] [Thread-7049] [transport.py] [_log()] kex follows: False
2025-11-25T22:41:57.167 [DEBUG] [Thread-7049] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:41:57.167 [DEBUG] [Thread-7049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:41:57.167 [DEBUG] [Thread-7049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:41:57.167 [DEBUG] [Thread-7049] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:41:57.167 [DEBUG] [Thread-7049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:41:57.167 [DEBUG] [Thread-7049] [transport.py] [_log()] Compression: none
2025-11-25T22:41:57.167 [DEBUG] [Thread-7049] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:41:57.223 [DEBUG] [Thread-7049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:41:57.223 [DEBUG] [Thread-7049] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:41:57.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:41:57.224 [DEBUG] [Thread-7049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:41:57.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:41:57.279 [DEBUG] [Thread-7049] [transport.py] [_log()] userauth is OK
2025-11-25T22:41:57.279 [DEBUG] [Thread-7049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:41:57.279 [DEBUG] [Thread-7049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:41:57.279 [DEBUG] [Thread-7049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:41:57.279 [DEBUG] [Thread-7049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:41:57.298 [INFO] [Thread-7049] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:41:57.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:41:57.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:41:57.483 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:41:58.127 [DEBUG] [Thread-7049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:41:58.127 [DEBUG] [Thread-7049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:41:58.176 [DEBUG] [Thread-7049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:41:58.176 [DEBUG] [Thread-7049] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:41:58.184 [DEBUG] [Thread-7049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:41:58.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:41:58.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:41:58.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:41:58.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:41:58.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:41:58.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:41:58.219 [DEBUG] [Thread-7049] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:42:05.057 [DEBUG] [Thread-7051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:06.100 [DEBUG] [Thread-7052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:07.885 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:18.285 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:21.137 [DEBUG] [Thread-7053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:28.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:42:28.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:42:28.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:42:28.678 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:28.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 42, 15), 29.13, 13.23, 0.0, 9.35, 20.78, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:42:28.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:42:15
2025-11-25T22:42:29.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:42:29.183 [DEBUG] [Thread-7054] [transport.py] [_log()] starting thread (client mode): 0x70d38190
2025-11-25T22:42:29.183 [DEBUG] [Thread-7054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:42:29.202 [DEBUG] [Thread-7054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:42:29.202 [INFO] [Thread-7054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:42:29.205 [DEBUG] [Thread-7054] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] client lang: <none>
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] server lang: <none>
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] kex follows: False
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] Compression: none
2025-11-25T22:42:29.206 [DEBUG] [Thread-7054] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:42:29.224 [DEBUG] [Thread-7054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:42:29.225 [DEBUG] [Thread-7054] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:42:29.225 [DEBUG] [Thread-7054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:42:29.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:42:29.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:42:29.227 [DEBUG] [Thread-7054] [transport.py] [_log()] userauth is OK
2025-11-25T22:42:29.228 [DEBUG] [Thread-7054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:42:29.228 [DEBUG] [Thread-7054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:42:29.228 [DEBUG] [Thread-7054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:42:29.228 [DEBUG] [Thread-7054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:42:29.247 [INFO] [Thread-7054] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:42:29.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:42:29.855 [DEBUG] [Thread-7054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:42:29.856 [DEBUG] [Thread-7054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:42:29.856 [DEBUG] [Thread-7054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:42:29.897 [DEBUG] [Thread-7054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:42:29.897 [DEBUG] [Thread-7054] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:42:29.901 [DEBUG] [Thread-7054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:42:29.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:42:29.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:42:29.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:42:29.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:42:29.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:42:29.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:42:29.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:42:29.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:42:29.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:42:29.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.862598 -999.00  +20.80   7.30     18   -3.70 1 1 1 1 1     0    0 25.67 40.25 ZNESW 6.4 7.3 148.2 9.8 20.3 -25.7 20.3 -25.1 20.0 -23.7 20.1 -24.7
2025-11-25T22:42:29.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:42:29.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:42:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.862598
2025-11-25T22:42:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:42:29.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:42:29.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:42:29.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:42:29.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:42:29.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:42:15', tmtdew=29.13, humidity=13.23, cloud=0.0, wind=9.35, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:42:15', seeing=1.15, atlas_timestamp='2025-11-25T20:42:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016750000000000043, -0.055749999999999744, -0.012249999999999872, 0.0034999999999989484, 0.011499999999999844, 0.056250000000000355, -0.005499999999999616, 0.005250000000000199, 0.011499999999999844, 0.0, 0.02775000000000105, -0.053500000000001435, 0.038000000000000256, 0.049249999999998906, -0.024499999999999744, -0.031000000000000583, -0.017250000000000654, 0.022499999999999076, 0.036999999999999034, 0.004249999999998977, 0.0259999999999998, 0.03074999999999939, -0.00024999999999941735, -0.04625000000000057, -0.02450000000000152, 0.013499999999998735, 0.03974999999999973, 0.06949999999999967, 0.15549999999999997, 0.08000000000000185, 0.03850000000000087, -0.013999999999999346, -0.06225000000000058], zp_timestamp='2025-11-25T20:36:00')
2025-11-25T22:42:29.926 [DEBUG] [Thread-7054] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:42:30.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:42:30.021 [DEBUG] [Thread-7057] [transport.py] [_log()] starting thread (client mode): 0x7374c520
2025-11-25T22:42:30.021 [DEBUG] [Thread-7057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:42:30.036 [DEBUG] [Thread-7057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:42:30.036 [INFO] [Thread-7057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:42:30.044 [DEBUG] [Thread-7057] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:42:30.044 [DEBUG] [Thread-7057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:42:30.044 [DEBUG] [Thread-7057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:42:30.045 [DEBUG] [Thread-7057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:42:30.045 [DEBUG] [Thread-7057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:42:30.045 [DEBUG] [Thread-7057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:42:30.045 [DEBUG] [Thread-7057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:42:30.045 [DEBUG] [Thread-7057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:42:30.045 [DEBUG] [Thread-7057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:42:30.045 [DEBUG] [Thread-7057] [transport.py] [_log()] client lang: <none>
2025-11-25T22:42:30.045 [DEBUG] [Thread-7057] [transport.py] [_log()] server lang: <none>
2025-11-25T22:42:30.045 [DEBUG] [Thread-7057] [transport.py] [_log()] kex follows: False
2025-11-25T22:42:30.046 [DEBUG] [Thread-7057] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:42:30.046 [DEBUG] [Thread-7057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:42:30.046 [DEBUG] [Thread-7057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:42:30.046 [DEBUG] [Thread-7057] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:42:30.046 [DEBUG] [Thread-7057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:42:30.046 [DEBUG] [Thread-7057] [transport.py] [_log()] Compression: none
2025-11-25T22:42:30.046 [DEBUG] [Thread-7057] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:42:30.105 [DEBUG] [Thread-7057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:42:30.106 [DEBUG] [Thread-7057] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:42:30.107 [DEBUG] [Thread-7057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:42:30.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:42:30.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:42:30.164 [DEBUG] [Thread-7057] [transport.py] [_log()] userauth is OK
2025-11-25T22:42:30.165 [DEBUG] [Thread-7057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:42:30.165 [DEBUG] [Thread-7057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:42:30.165 [DEBUG] [Thread-7057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:42:30.165 [DEBUG] [Thread-7057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:42:30.184 [INFO] [Thread-7057] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:42:30.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:42:30.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:42:31.043 [DEBUG] [Thread-7057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:42:31.043 [DEBUG] [Thread-7057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:42:31.091 [DEBUG] [Thread-7057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:42:31.091 [DEBUG] [Thread-7057] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:42:31.100 [DEBUG] [Thread-7057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:42:31.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:42:31.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:42:31.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:42:31.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:42:31.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:42:31.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:42:31.136 [DEBUG] [Thread-7057] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:42:36.173 [DEBUG] [Thread-7059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:39.079 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:49.474 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:51.224 [DEBUG] [Thread-7060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:57.353 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:57.354 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:42:59.873 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:43:01.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:43:01.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:43:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 42, 47), 29.06, 13.26, 0.0, 10.98, 20.78, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:43:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:42:47
2025-11-25T22:43:01.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:43:02.090 [DEBUG] [Thread-7061] [transport.py] [_log()] starting thread (client mode): 0x70d7eef0
2025-11-25T22:43:02.090 [DEBUG] [Thread-7061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:43:02.111 [DEBUG] [Thread-7061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:43:02.111 [INFO] [Thread-7061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:43:02.114 [DEBUG] [Thread-7061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] client lang: <none>
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] server lang: <none>
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] kex follows: False
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:43:02.115 [DEBUG] [Thread-7061] [transport.py] [_log()] Compression: none
2025-11-25T22:43:02.116 [DEBUG] [Thread-7061] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:43:02.133 [DEBUG] [Thread-7061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:43:02.133 [DEBUG] [Thread-7061] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:43:02.134 [DEBUG] [Thread-7061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:43:02.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:43:02.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:43:02.136 [DEBUG] [Thread-7061] [transport.py] [_log()] userauth is OK
2025-11-25T22:43:02.136 [DEBUG] [Thread-7061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:43:02.136 [DEBUG] [Thread-7061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:43:02.136 [DEBUG] [Thread-7061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:43:02.136 [DEBUG] [Thread-7061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:43:02.158 [INFO] [Thread-7061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:43:02.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:43:02.785 [DEBUG] [Thread-7061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:43:02.785 [DEBUG] [Thread-7061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:43:02.785 [DEBUG] [Thread-7061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:43:02.827 [DEBUG] [Thread-7061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:43:02.827 [DEBUG] [Thread-7061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:43:02.831 [DEBUG] [Thread-7061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:43:02.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:43:02.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:43:02.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:43:02.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:43:02.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:43:02.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:43:02.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:43:02.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:43:02.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:43:02.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.862945 -999.00  +20.80   5.17     18   -3.70 1 1 1 1 1     0    0 25.28 38.16 ZNESW 6.1 5.2 152.6 8.6 20.3 -25.7 20.3 -25.1 20.0 -23.8 20.2 -24.7
2025-11-25T22:43:02.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:43:02.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:43:02.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.862945
2025-11-25T22:43:02.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:43:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:43:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:43:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:43:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:43:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:42:47', tmtdew=29.06, humidity=13.26, cloud=0.0, wind=10.98, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:42:47', seeing=1.03, atlas_timestamp='2025-11-25T20:42:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, -0.005749999999999034, 0.07474999999999987, 0.010499999999998622, 0.06349999999999945, 0.14874999999999972, -0.0010000000000012221, 0.06725000000000136, 0.05649999999999977, 0.08950000000000102, 0.05025000000000013, 0.02800000000000047, 0.11100000000000065, 0.09725000000000072, 0.011499999999999844, 0.02999999999999936, 0.06524999999999892, 0.05149999999999899, 0.08349999999999902, 0.032249999999999446, 0.09849999999999781, 0.05674999999999919, 0.08675000000000033, 0.04574999999999996, 0.026999999999999247, 0.05450000000000088, 0.08174999999999955, 0.08450000000000024, 0.1620000000000008, 0.15800000000000125, 0.11600000000000144, 0.012500000000001066, -0.004250000000000753], zp_timestamp='2025-11-25T20:41:00')
2025-11-25T22:43:02.857 [DEBUG] [Thread-7061] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:43:02.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:43:02.953 [DEBUG] [Thread-7064] [transport.py] [_log()] starting thread (client mode): 0x70d3be50
2025-11-25T22:43:02.953 [DEBUG] [Thread-7064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:43:02.967 [DEBUG] [Thread-7064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:43:02.967 [INFO] [Thread-7064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:43:02.975 [DEBUG] [Thread-7064] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:43:02.976 [DEBUG] [Thread-7064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:43:02.976 [DEBUG] [Thread-7064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:43:02.976 [DEBUG] [Thread-7064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:43:02.976 [DEBUG] [Thread-7064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:43:02.976 [DEBUG] [Thread-7064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:43:02.976 [DEBUG] [Thread-7064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:43:02.976 [DEBUG] [Thread-7064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:43:02.976 [DEBUG] [Thread-7064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:43:02.976 [DEBUG] [Thread-7064] [transport.py] [_log()] client lang: <none>
2025-11-25T22:43:02.977 [DEBUG] [Thread-7064] [transport.py] [_log()] server lang: <none>
2025-11-25T22:43:02.977 [DEBUG] [Thread-7064] [transport.py] [_log()] kex follows: False
2025-11-25T22:43:02.977 [DEBUG] [Thread-7064] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:43:02.977 [DEBUG] [Thread-7064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:43:02.977 [DEBUG] [Thread-7064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:43:02.977 [DEBUG] [Thread-7064] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:43:02.977 [DEBUG] [Thread-7064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:43:02.978 [DEBUG] [Thread-7064] [transport.py] [_log()] Compression: none
2025-11-25T22:43:02.978 [DEBUG] [Thread-7064] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:43:03.044 [DEBUG] [Thread-7064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:43:03.045 [DEBUG] [Thread-7064] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:43:03.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:43:03.046 [DEBUG] [Thread-7064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:43:03.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:43:03.105 [DEBUG] [Thread-7064] [transport.py] [_log()] userauth is OK
2025-11-25T22:43:03.106 [DEBUG] [Thread-7064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:43:03.106 [DEBUG] [Thread-7064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:43:03.106 [DEBUG] [Thread-7064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:43:03.106 [DEBUG] [Thread-7064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:43:03.131 [INFO] [Thread-7064] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:43:03.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:43:03.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:43:04.055 [DEBUG] [Thread-7064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:43:04.055 [DEBUG] [Thread-7064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:43:04.103 [DEBUG] [Thread-7064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:43:04.103 [DEBUG] [Thread-7064] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:43:04.112 [DEBUG] [Thread-7064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:43:04.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:43:04.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:43:04.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:43:04.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:43:04.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:43:04.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:43:04.150 [DEBUG] [Thread-7064] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:43:05.133 [DEBUG] [Thread-7066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:06.259 [DEBUG] [Thread-7067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:10.269 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:20.685 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:21.303 [DEBUG] [Thread-7068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:31.096 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:34.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:43:34.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:43:34.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:43:34.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 43, 19), 29.04, 13.28, 0.0, 10.87, 20.8, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:43:34.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:43:19
2025-11-25T22:43:34.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:43:35.099 [DEBUG] [Thread-7069] [transport.py] [_log()] starting thread (client mode): 0x70da56c0
2025-11-25T22:43:35.099 [DEBUG] [Thread-7069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:43:35.119 [DEBUG] [Thread-7069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:43:35.119 [INFO] [Thread-7069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:43:35.122 [DEBUG] [Thread-7069] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:43:35.122 [DEBUG] [Thread-7069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:43:35.122 [DEBUG] [Thread-7069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:43:35.122 [DEBUG] [Thread-7069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:43:35.122 [DEBUG] [Thread-7069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:43:35.122 [DEBUG] [Thread-7069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] client lang: <none>
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] server lang: <none>
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] kex follows: False
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] Compression: none
2025-11-25T22:43:35.123 [DEBUG] [Thread-7069] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:43:35.140 [DEBUG] [Thread-7069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:43:35.141 [DEBUG] [Thread-7069] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:43:35.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:43:35.142 [DEBUG] [Thread-7069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:43:35.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:43:35.144 [DEBUG] [Thread-7069] [transport.py] [_log()] userauth is OK
2025-11-25T22:43:35.144 [DEBUG] [Thread-7069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:43:35.145 [DEBUG] [Thread-7069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:43:35.145 [DEBUG] [Thread-7069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:43:35.145 [DEBUG] [Thread-7069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:43:35.160 [INFO] [Thread-7069] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:43:35.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:43:35.739 [DEBUG] [Thread-7069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:43:35.739 [DEBUG] [Thread-7069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:43:35.740 [DEBUG] [Thread-7069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:43:35.780 [DEBUG] [Thread-7069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:43:35.780 [DEBUG] [Thread-7069] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:43:35.783 [DEBUG] [Thread-7069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:43:35.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:43:35.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:43:35.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:43:35.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:43:35.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:43:35.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:43:35.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:43:35.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:43:35.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:43:35.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.863292 -999.00  +20.90   5.44     18   -3.60 1 1 1 1 1     0    0 25.01 36.71 ZNESW 5.0 5.4 140.8 8.1 20.3 -25.7 20.3 -25.1 20.0 -23.9 20.2 -24.9
2025-11-25T22:43:35.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:43:35.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:43:35.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.863292
2025-11-25T22:43:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:43:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:43:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:43:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:43:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:43:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:43:19', tmtdew=29.04, humidity=13.28, cloud=0.0, wind=10.87, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:43:19', seeing=0.98, atlas_timestamp='2025-11-25T20:43:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, -0.005749999999999034, 0.07474999999999987, 0.010499999999998622, 0.06349999999999945, 0.14874999999999972, -0.0010000000000012221, 0.06725000000000136, 0.05649999999999977, 0.08950000000000102, 0.05025000000000013, 0.02800000000000047, 0.11100000000000065, 0.09725000000000072, 0.011499999999999844, 0.02999999999999936, 0.06524999999999892, 0.05149999999999899, 0.08349999999999902, 0.032249999999999446, 0.09849999999999781, 0.05674999999999919, 0.08675000000000033, 0.04574999999999996, 0.026999999999999247, 0.05450000000000088, 0.08174999999999955, 0.08450000000000024, 0.1620000000000008, 0.15800000000000125, 0.11600000000000144, 0.012500000000001066, -0.004250000000000753], zp_timestamp='2025-11-25T20:41:00')
2025-11-25T22:43:35.808 [DEBUG] [Thread-7069] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:43:35.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:43:35.904 [DEBUG] [Thread-7072] [transport.py] [_log()] starting thread (client mode): 0x70da5c30
2025-11-25T22:43:35.904 [DEBUG] [Thread-7072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:43:35.917 [DEBUG] [Thread-7072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:43:35.918 [INFO] [Thread-7072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] client lang: <none>
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] server lang: <none>
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] kex follows: False
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:43:35.925 [DEBUG] [Thread-7072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:43:35.926 [DEBUG] [Thread-7072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:43:35.926 [DEBUG] [Thread-7072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:43:35.926 [DEBUG] [Thread-7072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:43:35.926 [DEBUG] [Thread-7072] [transport.py] [_log()] Compression: none
2025-11-25T22:43:35.926 [DEBUG] [Thread-7072] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:43:35.983 [DEBUG] [Thread-7072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:43:35.984 [DEBUG] [Thread-7072] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:43:35.984 [DEBUG] [Thread-7072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:43:35.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:43:35.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:43:36.039 [DEBUG] [Thread-7072] [transport.py] [_log()] userauth is OK
2025-11-25T22:43:36.039 [DEBUG] [Thread-7072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:43:36.039 [DEBUG] [Thread-7072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:43:36.040 [DEBUG] [Thread-7072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:43:36.040 [DEBUG] [Thread-7072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:43:36.057 [INFO] [Thread-7072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:43:36.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:43:36.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:43:36.334 [DEBUG] [Thread-7074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:36.879 [DEBUG] [Thread-7072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:43:36.879 [DEBUG] [Thread-7072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:43:36.927 [DEBUG] [Thread-7072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:43:36.927 [DEBUG] [Thread-7072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:43:36.936 [DEBUG] [Thread-7072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:43:36.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:43:36.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:43:36.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:43:36.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:43:36.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:43:36.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:43:36.968 [DEBUG] [Thread-7072] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:43:41.526 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:51.388 [DEBUG] [Thread-7075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:51.957 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:57.556 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:43:57.557 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:02.383 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:05.208 [DEBUG] [Thread-7076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:06.416 [DEBUG] [Thread-7077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:06.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:44:06.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:44:06.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:44:07.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 43, 51), 29.14, 13.21, 0.0, 8.65, 20.78, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:44:07.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:43:51
2025-11-25T22:44:07.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:44:07.924 [DEBUG] [Thread-7078] [transport.py] [_log()] starting thread (client mode): 0x70d41330
2025-11-25T22:44:07.924 [DEBUG] [Thread-7078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:44:07.945 [DEBUG] [Thread-7078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:44:07.945 [INFO] [Thread-7078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] client lang: <none>
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] server lang: <none>
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] kex follows: False
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] Compression: none
2025-11-25T22:44:07.948 [DEBUG] [Thread-7078] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:44:07.966 [DEBUG] [Thread-7078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:44:07.966 [DEBUG] [Thread-7078] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:44:07.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:44:07.968 [DEBUG] [Thread-7078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:44:07.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:44:07.970 [DEBUG] [Thread-7078] [transport.py] [_log()] userauth is OK
2025-11-25T22:44:07.970 [DEBUG] [Thread-7078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:44:07.970 [DEBUG] [Thread-7078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:44:07.970 [DEBUG] [Thread-7078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:44:07.970 [DEBUG] [Thread-7078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:44:07.995 [INFO] [Thread-7078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:44:07.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:44:08.621 [DEBUG] [Thread-7078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:44:08.621 [DEBUG] [Thread-7078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:44:08.621 [DEBUG] [Thread-7078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:44:08.661 [DEBUG] [Thread-7078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:44:08.662 [DEBUG] [Thread-7078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:44:08.664 [DEBUG] [Thread-7078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:44:08.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:44:08.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:44:08.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:44:08.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:44:08.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:44:08.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:44:08.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:44:08.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:44:08.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:44:08.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.863640 -999.00  +20.90   6.73     18   -3.70 1 1 1 1 1     0    0 24.95 38.65 ZNESW 6.5 6.7 148.0 8.5 20.3 -25.7 20.3 -25.2 20.0 -23.9 20.2 -25.0
2025-11-25T22:44:08.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:44:08.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:44:08.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.863640
2025-11-25T22:44:08.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:44:08.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:44:08.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:44:08.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:44:08.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:44:08.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:43:51', tmtdew=29.14, humidity=13.21, cloud=0.0, wind=8.65, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:43:51', seeing=0.99, atlas_timestamp='2025-11-25T20:43:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, -0.005749999999999034, 0.07474999999999987, 0.010499999999998622, 0.06349999999999945, 0.14874999999999972, -0.0010000000000012221, 0.06725000000000136, 0.05649999999999977, 0.08950000000000102, 0.05025000000000013, 0.02800000000000047, 0.11100000000000065, 0.09725000000000072, 0.011499999999999844, 0.02999999999999936, 0.06524999999999892, 0.05149999999999899, 0.08349999999999902, 0.032249999999999446, 0.09849999999999781, 0.05674999999999919, 0.08675000000000033, 0.04574999999999996, 0.026999999999999247, 0.05450000000000088, 0.08174999999999955, 0.08450000000000024, 0.1620000000000008, 0.15800000000000125, 0.11600000000000144, 0.012500000000001066, -0.004250000000000753], zp_timestamp='2025-11-25T20:41:00')
2025-11-25T22:44:08.691 [DEBUG] [Thread-7078] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:44:08.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:44:08.787 [DEBUG] [Thread-7081] [transport.py] [_log()] starting thread (client mode): 0x7374f8e0
2025-11-25T22:44:08.787 [DEBUG] [Thread-7081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:44:08.802 [DEBUG] [Thread-7081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:44:08.802 [INFO] [Thread-7081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:44:08.809 [DEBUG] [Thread-7081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] client lang: <none>
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] server lang: <none>
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] kex follows: False
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] Compression: none
2025-11-25T22:44:08.810 [DEBUG] [Thread-7081] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:44:08.868 [DEBUG] [Thread-7081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:44:08.868 [DEBUG] [Thread-7081] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:44:08.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:44:08.869 [DEBUG] [Thread-7081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:44:08.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:44:08.928 [DEBUG] [Thread-7081] [transport.py] [_log()] userauth is OK
2025-11-25T22:44:08.928 [DEBUG] [Thread-7081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:44:08.928 [DEBUG] [Thread-7081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:44:08.928 [DEBUG] [Thread-7081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:44:08.928 [DEBUG] [Thread-7081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:44:08.947 [INFO] [Thread-7081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:44:08.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:44:08.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:44:09.780 [DEBUG] [Thread-7081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:44:09.781 [DEBUG] [Thread-7081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:44:09.829 [DEBUG] [Thread-7081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:44:09.829 [DEBUG] [Thread-7081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:44:09.839 [DEBUG] [Thread-7081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:44:09.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:44:09.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:44:09.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:44:09.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:44:09.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:44:09.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:44:09.878 [DEBUG] [Thread-7081] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:44:12.780 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:21.454 [DEBUG] [Thread-7083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:23.180 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:33.575 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:36.500 [DEBUG] [Thread-7084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:44:39.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:44:39.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:44:40.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 44, 23), 29.07, 13.29, 0.0, 8.82, 20.82, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:44:40.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:44:23
2025-11-25T22:44:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:44:40.826 [DEBUG] [Thread-7085] [transport.py] [_log()] starting thread (client mode): 0x70d7ea70
2025-11-25T22:44:40.827 [DEBUG] [Thread-7085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:44:40.841 [DEBUG] [Thread-7085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:44:40.841 [INFO] [Thread-7085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:44:40.844 [DEBUG] [Thread-7085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:44:40.844 [DEBUG] [Thread-7085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:44:40.844 [DEBUG] [Thread-7085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:44:40.844 [DEBUG] [Thread-7085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] client lang: <none>
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] server lang: <none>
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] kex follows: False
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] Compression: none
2025-11-25T22:44:40.845 [DEBUG] [Thread-7085] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:44:40.863 [DEBUG] [Thread-7085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:44:40.864 [DEBUG] [Thread-7085] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:44:40.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:44:40.865 [DEBUG] [Thread-7085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:44:40.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:44:40.867 [DEBUG] [Thread-7085] [transport.py] [_log()] userauth is OK
2025-11-25T22:44:40.867 [DEBUG] [Thread-7085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:44:40.867 [DEBUG] [Thread-7085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:44:40.867 [DEBUG] [Thread-7085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:44:40.867 [DEBUG] [Thread-7085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:44:40.889 [INFO] [Thread-7085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:44:40.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:44:41.546 [DEBUG] [Thread-7085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:44:41.546 [DEBUG] [Thread-7085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:44:41.547 [DEBUG] [Thread-7085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:44:41.587 [DEBUG] [Thread-7085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:44:41.588 [DEBUG] [Thread-7085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:44:41.589 [DEBUG] [Thread-7085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:44:41.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:44:41.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:44:41.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:44:41.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:44:41.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:44:41.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:44:41.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:44:41.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:44:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:44:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.863987 -999.00  +20.90   5.73     18   -3.70 1 1 1 1 1     0    0 25.64 37.68 ZNESW 4.7 5.7 151.6 7.8 20.3 -25.6 20.3 -25.1 20.0 -23.8 20.1 -24.8
2025-11-25T22:44:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:44:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:44:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.863987
2025-11-25T22:44:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:44:41.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:44:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:44:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:44:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:44:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:44:23', tmtdew=29.07, humidity=13.29, cloud=0.0, wind=8.82, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:44:23', seeing=0.95, atlas_timestamp='2025-11-25T20:44:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, -0.005749999999999034, 0.07474999999999987, 0.010499999999998622, 0.06349999999999945, 0.14874999999999972, -0.0010000000000012221, 0.06725000000000136, 0.05649999999999977, 0.08950000000000102, 0.05025000000000013, 0.02800000000000047, 0.11100000000000065, 0.09725000000000072, 0.011499999999999844, 0.02999999999999936, 0.06524999999999892, 0.05149999999999899, 0.08349999999999902, 0.032249999999999446, 0.09849999999999781, 0.05674999999999919, 0.08675000000000033, 0.04574999999999996, 0.026999999999999247, 0.05450000000000088, 0.08174999999999955, 0.08450000000000024, 0.1620000000000008, 0.15800000000000125, 0.11600000000000144, 0.012500000000001066, -0.004250000000000753], zp_timestamp='2025-11-25T20:41:00')
2025-11-25T22:44:41.607 [DEBUG] [Thread-7085] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:44:41.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:44:41.702 [DEBUG] [Thread-7088] [transport.py] [_log()] starting thread (client mode): 0x70d38b50
2025-11-25T22:44:41.702 [DEBUG] [Thread-7088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:44:41.717 [DEBUG] [Thread-7088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:44:41.717 [INFO] [Thread-7088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:44:41.725 [DEBUG] [Thread-7088] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:44:41.725 [DEBUG] [Thread-7088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:44:41.725 [DEBUG] [Thread-7088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:44:41.725 [DEBUG] [Thread-7088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:44:41.725 [DEBUG] [Thread-7088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:44:41.725 [DEBUG] [Thread-7088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] client lang: <none>
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] server lang: <none>
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] kex follows: False
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] Compression: none
2025-11-25T22:44:41.726 [DEBUG] [Thread-7088] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:44:41.783 [DEBUG] [Thread-7088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:44:41.783 [DEBUG] [Thread-7088] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:44:41.784 [DEBUG] [Thread-7088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:44:41.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:44:41.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:44:41.840 [DEBUG] [Thread-7088] [transport.py] [_log()] userauth is OK
2025-11-25T22:44:41.840 [DEBUG] [Thread-7088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:44:41.840 [DEBUG] [Thread-7088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:44:41.840 [DEBUG] [Thread-7088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:44:41.840 [DEBUG] [Thread-7088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:44:41.859 [INFO] [Thread-7088] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:44:41.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:44:41.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:44:42.699 [DEBUG] [Thread-7088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:44:42.699 [DEBUG] [Thread-7088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:44:42.747 [DEBUG] [Thread-7088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:44:42.747 [DEBUG] [Thread-7088] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:44:42.756 [DEBUG] [Thread-7088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:44:42.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:44:42.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:44:42.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:44:42.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:44:42.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:44:42.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:44:42.794 [DEBUG] [Thread-7088] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:44:43.975 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:51.533 [DEBUG] [Thread-7090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:54.387 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:57.758 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:44:57.759 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:04.802 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:05.276 [DEBUG] [Thread-7091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:06.584 [DEBUG] [Thread-7092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:12.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:45:12.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:45:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:45:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 44, 55), 29.05, 13.26, 0.0, 9.09, 20.77, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:45:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:44:55
2025-11-25T22:45:13.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:45:13.798 [DEBUG] [Thread-7093] [transport.py] [_log()] starting thread (client mode): 0x70d55030
2025-11-25T22:45:13.798 [DEBUG] [Thread-7093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:45:13.816 [DEBUG] [Thread-7093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:45:13.816 [INFO] [Thread-7093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] client lang: <none>
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] server lang: <none>
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] kex follows: False
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] Compression: none
2025-11-25T22:45:13.819 [DEBUG] [Thread-7093] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:45:13.833 [DEBUG] [Thread-7093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:45:13.833 [DEBUG] [Thread-7093] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:45:13.833 [DEBUG] [Thread-7093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:45:13.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:45:13.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:45:13.834 [DEBUG] [Thread-7093] [transport.py] [_log()] userauth is OK
2025-11-25T22:45:13.834 [DEBUG] [Thread-7093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:45:13.834 [DEBUG] [Thread-7093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:45:13.834 [DEBUG] [Thread-7093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:45:13.834 [DEBUG] [Thread-7093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:45:13.851 [INFO] [Thread-7093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:45:13.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:45:14.481 [DEBUG] [Thread-7093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:45:14.481 [DEBUG] [Thread-7093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:45:14.481 [DEBUG] [Thread-7093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:45:14.521 [DEBUG] [Thread-7093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:45:14.521 [DEBUG] [Thread-7093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:45:14.523 [DEBUG] [Thread-7093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:45:14.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:45:14.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:45:14.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:45:14.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:45:14.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:45:14.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:45:14.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:45:14.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:45:14.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:45:14.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.864681 -999.00  +20.90   4.08     18   -3.70 1 1 1 1 1     0    0 25.09 40.56 ZNESW 5.4 4.1 154.2 7.1 20.3 -25.7 20.3 -25.2 20.0 -24.0 20.1 -25.0
2025-11-25T22:45:14.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:45:14.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:45:14.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.864681
2025-11-25T22:45:14.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:45:14.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:45:14.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:45:14.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:45:14.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:45:14.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:44:55', tmtdew=29.05, humidity=13.26, cloud=0.0, wind=9.09, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:44:55', seeing=0.95, atlas_timestamp='2025-11-25T20:45:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, -0.005749999999999034, 0.07474999999999987, 0.010499999999998622, 0.06349999999999945, 0.14874999999999972, -0.0010000000000012221, 0.06725000000000136, 0.05649999999999977, 0.08950000000000102, 0.05025000000000013, 0.02800000000000047, 0.11100000000000065, 0.09725000000000072, 0.011499999999999844, 0.02999999999999936, 0.06524999999999892, 0.05149999999999899, 0.08349999999999902, 0.032249999999999446, 0.09849999999999781, 0.05674999999999919, 0.08675000000000033, 0.04574999999999996, 0.026999999999999247, 0.05450000000000088, 0.08174999999999955, 0.08450000000000024, 0.1620000000000008, 0.15800000000000125, 0.11600000000000144, 0.012500000000001066, -0.004250000000000753], zp_timestamp='2025-11-25T20:41:00')
2025-11-25T22:45:14.543 [DEBUG] [Thread-7093] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:45:14.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:45:14.629 [DEBUG] [Thread-7096] [transport.py] [_log()] starting thread (client mode): 0x70d7ea40
2025-11-25T22:45:14.629 [DEBUG] [Thread-7096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:45:14.643 [DEBUG] [Thread-7096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:45:14.644 [INFO] [Thread-7096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] client lang: <none>
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] server lang: <none>
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] kex follows: False
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] Compression: none
2025-11-25T22:45:14.651 [DEBUG] [Thread-7096] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:45:14.706 [DEBUG] [Thread-7096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:45:14.706 [DEBUG] [Thread-7096] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:45:14.706 [DEBUG] [Thread-7096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:45:14.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:45:14.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:45:14.763 [DEBUG] [Thread-7096] [transport.py] [_log()] userauth is OK
2025-11-25T22:45:14.763 [DEBUG] [Thread-7096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:45:14.763 [DEBUG] [Thread-7096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:45:14.763 [DEBUG] [Thread-7096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:45:14.763 [DEBUG] [Thread-7096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:45:14.777 [INFO] [Thread-7096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:45:14.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:45:14.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:45:15.228 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:15.678 [DEBUG] [Thread-7096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:45:15.678 [DEBUG] [Thread-7096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:45:15.726 [DEBUG] [Thread-7096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:45:15.726 [DEBUG] [Thread-7096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:45:15.735 [DEBUG] [Thread-7096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:45:15.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:45:15.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:45: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') -> 00000000
2025-11-25T22:45:15.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:45:15.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:45:15.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:45:15.766 [DEBUG] [Thread-7096] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:45:21.617 [DEBUG] [Thread-7098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:25.652 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:36.049 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:36.669 [DEBUG] [Thread-7099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:45.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:45:45.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:45:45.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:45:46.445 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 45, 27), 29.04, 13.28, 0.0, 8.72, 20.78, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:45:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:45:27
2025-11-25T22:45:46.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:45:46.726 [DEBUG] [Thread-7100] [transport.py] [_log()] starting thread (client mode): 0x70d54eb0
2025-11-25T22:45:46.726 [DEBUG] [Thread-7100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:45:46.745 [DEBUG] [Thread-7100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:45:46.745 [INFO] [Thread-7100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:45:46.747 [DEBUG] [Thread-7100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] client lang: <none>
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] server lang: <none>
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] kex follows: False
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] Compression: none
2025-11-25T22:45:46.748 [DEBUG] [Thread-7100] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:45:46.763 [DEBUG] [Thread-7100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:45:46.763 [DEBUG] [Thread-7100] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:45:46.764 [DEBUG] [Thread-7100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:45:46.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:45:46.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:45:46.766 [DEBUG] [Thread-7100] [transport.py] [_log()] userauth is OK
2025-11-25T22:45:46.766 [DEBUG] [Thread-7100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:45:46.766 [DEBUG] [Thread-7100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:45:46.766 [DEBUG] [Thread-7100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:45:46.767 [DEBUG] [Thread-7100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:45:46.791 [INFO] [Thread-7100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:45:46.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:45:47.405 [DEBUG] [Thread-7100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:45:47.406 [DEBUG] [Thread-7100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:45:47.406 [DEBUG] [Thread-7100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:45:47.447 [DEBUG] [Thread-7100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:45:47.447 [DEBUG] [Thread-7100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:45:47.450 [DEBUG] [Thread-7100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:45:47.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:45:47.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:45:47.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:45:47.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:45:47.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:45:47.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:45:47.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:45:47.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:45:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:45:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.865029 -999.00  +20.90   5.44     18   -3.80 1 1 1 1 1     0    0 25.50 41.60 ZNESW 5.1 5.4 157.8 7.2 20.3 -25.7 20.3 -25.3 20.0 -23.9 20.1 -24.7
2025-11-25T22:45:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:45:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:45:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.865029
2025-11-25T22:45:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:45:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:45:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:45:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:45:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:45:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:45:27', tmtdew=29.04, humidity=13.28, cloud=0.0, wind=8.72, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:45:27', seeing=0.92, atlas_timestamp='2025-11-25T20:45:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, -0.005749999999999034, 0.07474999999999987, 0.010499999999998622, 0.06349999999999945, 0.14874999999999972, -0.0010000000000012221, 0.06725000000000136, 0.05649999999999977, 0.08950000000000102, 0.05025000000000013, 0.02800000000000047, 0.11100000000000065, 0.09725000000000072, 0.011499999999999844, 0.02999999999999936, 0.06524999999999892, 0.05149999999999899, 0.08349999999999902, 0.032249999999999446, 0.09849999999999781, 0.05674999999999919, 0.08675000000000033, 0.04574999999999996, 0.026999999999999247, 0.05450000000000088, 0.08174999999999955, 0.08450000000000024, 0.1620000000000008, 0.15800000000000125, 0.11600000000000144, 0.012500000000001066, -0.004250000000000753], zp_timestamp='2025-11-25T20:41:00')
2025-11-25T22:45:47.469 [DEBUG] [Thread-7100] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:45:47.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:45:47.563 [DEBUG] [Thread-7103] [transport.py] [_log()] starting thread (client mode): 0x70da4130
2025-11-25T22:45:47.563 [DEBUG] [Thread-7103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:45:47.576 [DEBUG] [Thread-7103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:45:47.576 [INFO] [Thread-7103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:45:47.583 [DEBUG] [Thread-7103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:45:47.583 [DEBUG] [Thread-7103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] client lang: <none>
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] server lang: <none>
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] kex follows: False
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] Compression: none
2025-11-25T22:45:47.584 [DEBUG] [Thread-7103] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:45:47.642 [DEBUG] [Thread-7103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:45:47.642 [DEBUG] [Thread-7103] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:45:47.642 [DEBUG] [Thread-7103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:45:47.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:45:47.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:45:47.699 [DEBUG] [Thread-7103] [transport.py] [_log()] userauth is OK
2025-11-25T22:45:47.699 [DEBUG] [Thread-7103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:45:47.699 [DEBUG] [Thread-7103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:45:47.699 [DEBUG] [Thread-7103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:45:47.699 [DEBUG] [Thread-7103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:45:47.712 [INFO] [Thread-7103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:45:47.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:45:47.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:45:48.667 [DEBUG] [Thread-7103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:45:48.667 [DEBUG] [Thread-7103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:45:48.715 [DEBUG] [Thread-7103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:45:48.715 [DEBUG] [Thread-7103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:45:48.724 [DEBUG] [Thread-7103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:45:48.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:45:48.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:45:48.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:45:48.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:45:48.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:45:48.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:45:48.760 [DEBUG] [Thread-7103] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:45:51.701 [DEBUG] [Thread-7105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:56.839 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:57.963 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:45:57.964 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:05.352 [DEBUG] [Thread-7106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:06.743 [DEBUG] [Thread-7107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:07.239 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:17.634 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:18.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:46:18.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:46: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
2025-11-25T22:46:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 45, 59), 28.96, 13.29, 0.0, 9.37, 20.67, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:46:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:45:59
2025-11-25T22:46:19.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:46:19.720 [DEBUG] [Thread-7108] [transport.py] [_log()] starting thread (client mode): 0x70da6410
2025-11-25T22:46:19.720 [DEBUG] [Thread-7108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:46:19.734 [DEBUG] [Thread-7108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:46:19.734 [INFO] [Thread-7108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:46:19.735 [DEBUG] [Thread-7108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:46:19.735 [DEBUG] [Thread-7108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:46:19.735 [DEBUG] [Thread-7108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:46:19.735 [DEBUG] [Thread-7108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:46:19.735 [DEBUG] [Thread-7108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:46:19.735 [DEBUG] [Thread-7108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:46:19.735 [DEBUG] [Thread-7108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:46:19.735 [DEBUG] [Thread-7108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] client lang: <none>
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] server lang: <none>
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] kex follows: False
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] Compression: none
2025-11-25T22:46:19.736 [DEBUG] [Thread-7108] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:46:19.746 [DEBUG] [Thread-7108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:46:19.747 [DEBUG] [Thread-7108] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:46:19.747 [DEBUG] [Thread-7108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:46:19.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:46:19.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:46:19.748 [DEBUG] [Thread-7108] [transport.py] [_log()] userauth is OK
2025-11-25T22:46:19.748 [DEBUG] [Thread-7108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:46:19.748 [DEBUG] [Thread-7108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:46:19.748 [DEBUG] [Thread-7108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:46:19.749 [DEBUG] [Thread-7108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:46:19.763 [INFO] [Thread-7108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:46:19.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:46:20.395 [DEBUG] [Thread-7108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:46:20.395 [DEBUG] [Thread-7108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:46:20.395 [DEBUG] [Thread-7108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:46:20.435 [DEBUG] [Thread-7108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:46:20.435 [DEBUG] [Thread-7108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:46:20.438 [DEBUG] [Thread-7108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:46:20.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:46:20.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:46:20.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:46:20.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:46:20.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:46:20.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:46:20.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:46:20.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:46:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:46:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.865376 -999.00  +20.90   4.54     18   -3.70 1 1 1 1 1     0    0 25.42 38.34 ZNESW 4.7 4.5 141.4 6.0 20.3 -25.8 20.3 -25.2 19.9 -23.9 20.2 -24.7
2025-11-25T22:46:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:46:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:46:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.865376
2025-11-25T22:46:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:46:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:46:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:46:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:46:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:46:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:45:59', tmtdew=28.96, humidity=13.29, cloud=0.0, wind=9.37, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:45:59', seeing=1.19, atlas_timestamp='2025-11-25T20:46:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.03275000000000006, -0.005749999999999034, 0.07474999999999987, 0.010499999999998622, 0.06349999999999945, 0.14874999999999972, -0.0010000000000012221, 0.06725000000000136, 0.05649999999999977, 0.08950000000000102, 0.05025000000000013, 0.02800000000000047, 0.11100000000000065, 0.09725000000000072, 0.011499999999999844, 0.02999999999999936, 0.06524999999999892, 0.05149999999999899, 0.08349999999999902, 0.032249999999999446, 0.09849999999999781, 0.05674999999999919, 0.08675000000000033, 0.04574999999999996, 0.026999999999999247, 0.05450000000000088, 0.08174999999999955, 0.08450000000000024, 0.1620000000000008, 0.15800000000000125, 0.11600000000000144, 0.012500000000001066, -0.004250000000000753], zp_timestamp='2025-11-25T20:41:00')
2025-11-25T22:46:20.456 [DEBUG] [Thread-7108] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:46:20.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:46:21.777 [DEBUG] [Thread-7111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:28.053 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:36.839 [DEBUG] [Thread-7112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:38.464 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:48.883 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:51.874 [DEBUG] [Thread-7113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:58.166 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:58.167 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:46:59.279 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:05.405 [DEBUG] [Thread-7114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:06.907 [DEBUG] [Thread-7115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:09.674 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:20.074 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:21.944 [DEBUG] [Thread-7116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:30.534 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:36.982 [DEBUG] [Thread-7117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:40.943 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:51.335 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:52.014 [DEBUG] [Thread-7118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:58.372 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:47:58.374 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:01.754 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:05.462 [DEBUG] [Thread-7119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:07.052 [DEBUG] [Thread-7120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:12.172 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:22.081 [DEBUG] [Thread-7121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:22.582 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:33.039 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:35.021 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T22:48:37.117 [DEBUG] [Thread-7122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:43.456 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:52.153 [DEBUG] [Thread-7123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:53.851 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:58.576 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:48:58.577 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:04.285 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:49:05.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:49: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
2025-11-25T22:49:05.534 [DEBUG] [Thread-7124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 48, 39), 28.8, 13.82, 0.0, 9.83, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:49:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:48:39
2025-11-25T22:49:05.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:49:05.998 [DEBUG] [Thread-7125] [transport.py] [_log()] starting thread (client mode): 0x70da5360
2025-11-25T22:49:05.998 [DEBUG] [Thread-7125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:49:06.020 [DEBUG] [Thread-7125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:49:06.021 [INFO] [Thread-7125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:49:06.024 [DEBUG] [Thread-7125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:49:06.024 [DEBUG] [Thread-7125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:49:06.024 [DEBUG] [Thread-7125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:49:06.024 [DEBUG] [Thread-7125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:49:06.024 [DEBUG] [Thread-7125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] client lang: <none>
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] server lang: <none>
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] kex follows: False
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:49:06.025 [DEBUG] [Thread-7125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:49:06.026 [DEBUG] [Thread-7125] [transport.py] [_log()] Compression: none
2025-11-25T22:49:06.026 [DEBUG] [Thread-7125] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:49:06.044 [DEBUG] [Thread-7125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:49:06.045 [DEBUG] [Thread-7125] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:49:06.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:49:06.046 [DEBUG] [Thread-7125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:49:06.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:49:06.048 [DEBUG] [Thread-7125] [transport.py] [_log()] userauth is OK
2025-11-25T22:49:06.048 [DEBUG] [Thread-7125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:49:06.049 [DEBUG] [Thread-7125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:49:06.049 [DEBUG] [Thread-7125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:49:06.049 [DEBUG] [Thread-7125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:49:06.072 [INFO] [Thread-7125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:49:06.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:49:06.824 [DEBUG] [Thread-7125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:49:06.824 [DEBUG] [Thread-7125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:49:06.824 [DEBUG] [Thread-7125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:49:06.864 [DEBUG] [Thread-7125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:49:06.865 [DEBUG] [Thread-7125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:49:06.868 [DEBUG] [Thread-7125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:49:06.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:49:06.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:49:06.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:49:06.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:49:06.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:49:06.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:49:06.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:49:06.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:49:06.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:49:06.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.866765 -999.00  +20.90   6.34     18   -3.70 1 1 1 1 1     0    0 26.00 36.72 ZNESW 5.6 6.3 172.8 7.5 20.3 -25.9 20.3 -25.3 20.0 -23.9 20.1 -24.8
2025-11-25T22:49:06.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:49:06.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:49:06.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.866765
2025-11-25T22:49:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:49:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:49:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:49:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:49:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:49:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:48:39', tmtdew=28.8, humidity=13.82, cloud=0.0, wind=9.83, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:48:39', seeing=1.03, atlas_timestamp='2025-11-25T20:48:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.06174999999999997, 0.004749999999999588, -0.054000000000002046, 0.01950000000000074, 0.056250000000000355, 0.036999999999999034, -0.006249999999997868, 0.00849999999999973, 0.004999999999999005, 0.012249999999999872, -0.034000000000000696, 0.019499999999998963, 0.09124999999999872, -0.0070000000000014495, -0.0005000000000006111, 0.011250000000000426, 0.03550000000000075, 0.026999999999999247, -0.019750000000001933, 0.017999999999998906, 0.02424999999999855, -0.013249999999999318, 0.0027500000000006963, -0.02900000000000169, 0.019499999999998963, 0.020250000000000767, 0.048500000000000654, 0.09399999999999942, 0.09100000000000108, 0.0519999999999996, -0.01899999999999835, -0.05975000000000108], zp_timestamp='2025-11-25T20:47:00')
2025-11-25T22:49:06.893 [DEBUG] [Thread-7125] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:49:06.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:49:06.988 [DEBUG] [Thread-7128] [transport.py] [_log()] starting thread (client mode): 0x70d7f1c0
2025-11-25T22:49:06.988 [DEBUG] [Thread-7128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:49:07.003 [DEBUG] [Thread-7128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:49:07.003 [INFO] [Thread-7128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:49:07.015 [DEBUG] [Thread-7128] [transport.py] [_log()] client lang: <none>
2025-11-25T22:49:07.016 [DEBUG] [Thread-7128] [transport.py] [_log()] server lang: <none>
2025-11-25T22:49:07.016 [DEBUG] [Thread-7128] [transport.py] [_log()] kex follows: False
2025-11-25T22:49:07.016 [DEBUG] [Thread-7128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:49:07.016 [DEBUG] [Thread-7128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:49:07.016 [DEBUG] [Thread-7128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:49:07.016 [DEBUG] [Thread-7128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:49:07.016 [DEBUG] [Thread-7128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:49:07.016 [DEBUG] [Thread-7128] [transport.py] [_log()] Compression: none
2025-11-25T22:49:07.016 [DEBUG] [Thread-7128] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:49:07.071 [DEBUG] [Thread-7128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:49:07.071 [DEBUG] [Thread-7128] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:49:07.072 [DEBUG] [Thread-7128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:49:07.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:49:07.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:49:07.127 [DEBUG] [Thread-7128] [transport.py] [_log()] userauth is OK
2025-11-25T22:49:07.127 [DEBUG] [Thread-7128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:49:07.127 [DEBUG] [Thread-7128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:49:07.127 [DEBUG] [Thread-7128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:49:07.127 [DEBUG] [Thread-7128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:49:07.145 [INFO] [Thread-7128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:49:07.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:49:07.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:49:07.186 [DEBUG] [Thread-7130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:07.963 [DEBUG] [Thread-7128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:49:07.963 [DEBUG] [Thread-7128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:49:08.011 [DEBUG] [Thread-7128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:49:08.011 [DEBUG] [Thread-7128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:49:08.020 [DEBUG] [Thread-7128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:49:08.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:49:08.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:49:08.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:49:08.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:49:08.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:49:08.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:49:08.057 [DEBUG] [Thread-7128] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:49:14.682 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:22.253 [DEBUG] [Thread-7131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:25.114 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:35.513 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:37.286 [DEBUG] [Thread-7132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:38.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:49:38.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:49:38.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:49:38.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 49, 11), 28.78, 13.86, 0.0, 8.95, 20.53, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:49:38.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:49:11
2025-11-25T22:49:38.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:49:39.032 [DEBUG] [Thread-7133] [transport.py] [_log()] starting thread (client mode): 0x70d7ea70
2025-11-25T22:49:39.032 [DEBUG] [Thread-7133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:49:39.052 [DEBUG] [Thread-7133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:49:39.052 [INFO] [Thread-7133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:49:39.055 [DEBUG] [Thread-7133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] client lang: <none>
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] server lang: <none>
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] kex follows: False
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] Compression: none
2025-11-25T22:49:39.056 [DEBUG] [Thread-7133] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:49:39.073 [DEBUG] [Thread-7133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:49:39.073 [DEBUG] [Thread-7133] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:49:39.074 [DEBUG] [Thread-7133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:49:39.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:49:39.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:49:39.076 [DEBUG] [Thread-7133] [transport.py] [_log()] userauth is OK
2025-11-25T22:49:39.077 [DEBUG] [Thread-7133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:49:39.077 [DEBUG] [Thread-7133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:49:39.077 [DEBUG] [Thread-7133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:49:39.077 [DEBUG] [Thread-7133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:49:39.101 [INFO] [Thread-7133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:49:39.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:49:39.752 [DEBUG] [Thread-7133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:49:39.752 [DEBUG] [Thread-7133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:49:39.753 [DEBUG] [Thread-7133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:49:39.793 [DEBUG] [Thread-7133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:49:39.793 [DEBUG] [Thread-7133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:49:39.797 [DEBUG] [Thread-7133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:49:39.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:49:39.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:49:39.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:49:39.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:49:39.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:49:39.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:49:39.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:49:39.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:49:39.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:49:39.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.867459 -999.00  +20.80   6.82     18   -3.80 1 1 1 1 1     0    0 25.31 32.41 ZNESW 7.2 6.8 161.4 9.3 20.3 -25.7 20.3 -25.1 19.9 -24.0 20.1 -24.9
2025-11-25T22:49:39.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:49:39.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:49:39.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.867459
2025-11-25T22:49:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:49:39.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:49:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:49:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:49:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:49:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:49:11', tmtdew=28.78, humidity=13.86, cloud=0.0, wind=8.95, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:49:11', seeing=1.23, atlas_timestamp='2025-11-25T20:49:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.06174999999999997, 0.004749999999999588, -0.054000000000002046, 0.01950000000000074, 0.056250000000000355, 0.036999999999999034, -0.006249999999997868, 0.00849999999999973, 0.004999999999999005, 0.012249999999999872, -0.034000000000000696, 0.019499999999998963, 0.09124999999999872, -0.0070000000000014495, -0.0005000000000006111, 0.011250000000000426, 0.03550000000000075, 0.026999999999999247, -0.019750000000001933, 0.017999999999998906, 0.02424999999999855, -0.013249999999999318, 0.0027500000000006963, -0.02900000000000169, 0.019499999999998963, 0.020250000000000767, 0.048500000000000654, 0.09399999999999942, 0.09100000000000108, 0.0519999999999996, -0.01899999999999835, -0.05975000000000108], zp_timestamp='2025-11-25T20:47:00')
2025-11-25T22:49:39.824 [DEBUG] [Thread-7133] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:49:39.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:49:39.920 [DEBUG] [Thread-7136] [transport.py] [_log()] starting thread (client mode): 0x70da6560
2025-11-25T22:49:39.920 [DEBUG] [Thread-7136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:49:39.934 [DEBUG] [Thread-7136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:49:39.934 [INFO] [Thread-7136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:49:39.942 [DEBUG] [Thread-7136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:49:39.942 [DEBUG] [Thread-7136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:49:39.942 [DEBUG] [Thread-7136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:49:39.942 [DEBUG] [Thread-7136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:49:39.942 [DEBUG] [Thread-7136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:49:39.942 [DEBUG] [Thread-7136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] client lang: <none>
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] server lang: <none>
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] kex follows: False
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] Compression: none
2025-11-25T22:49:39.943 [DEBUG] [Thread-7136] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:49:40.000 [DEBUG] [Thread-7136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:49:40.001 [DEBUG] [Thread-7136] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:49:40.001 [DEBUG] [Thread-7136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:49:40.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:49:40.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:49:40.056 [DEBUG] [Thread-7136] [transport.py] [_log()] userauth is OK
2025-11-25T22:49:40.056 [DEBUG] [Thread-7136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:49:40.057 [DEBUG] [Thread-7136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:49:40.057 [DEBUG] [Thread-7136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:49:40.057 [DEBUG] [Thread-7136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:49:40.075 [INFO] [Thread-7136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:49:40.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:49:40.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:49:40.907 [DEBUG] [Thread-7136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:49:40.907 [DEBUG] [Thread-7136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:49:40.955 [DEBUG] [Thread-7136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:49:40.955 [DEBUG] [Thread-7136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:49:40.964 [DEBUG] [Thread-7136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:49:40.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:49:40.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:49:40.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:49:40.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:49:40.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:49:40.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:49:40.998 [DEBUG] [Thread-7136] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:49:45.908 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:52.318 [DEBUG] [Thread-7138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:56.326 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:58.779 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:49:58.780 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:05.613 [DEBUG] [Thread-7139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:06.739 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:07.372 [DEBUG] [Thread-7140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:10.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:50:10.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:50:10.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:50:11.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 49, 43), 28.86, 13.37, 0.0, 8.95, 20.52, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:50:11.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:49:43
2025-11-25T22:50:11.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:50:11.997 [DEBUG] [Thread-7141] [transport.py] [_log()] starting thread (client mode): 0x70da7f40
2025-11-25T22:50:11.997 [DEBUG] [Thread-7141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:50:12.007 [DEBUG] [Thread-7141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:50:12.007 [INFO] [Thread-7141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:50:12.008 [DEBUG] [Thread-7141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:50:12.008 [DEBUG] [Thread-7141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:50:12.008 [DEBUG] [Thread-7141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:50:12.008 [DEBUG] [Thread-7141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:50:12.008 [DEBUG] [Thread-7141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:50:12.008 [DEBUG] [Thread-7141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:50:12.008 [DEBUG] [Thread-7141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:50:12.008 [DEBUG] [Thread-7141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:50:12.008 [DEBUG] [Thread-7141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] client lang: <none>
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] server lang: <none>
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] kex follows: False
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] Compression: none
2025-11-25T22:50:12.009 [DEBUG] [Thread-7141] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:50:12.016 [DEBUG] [Thread-7141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:50:12.016 [DEBUG] [Thread-7141] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:50:12.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:50:12.016 [DEBUG] [Thread-7141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:50:12.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:50:12.016 [DEBUG] [Thread-7141] [transport.py] [_log()] userauth is OK
2025-11-25T22:50:12.016 [DEBUG] [Thread-7141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:50:12.016 [DEBUG] [Thread-7141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:50:12.016 [DEBUG] [Thread-7141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:50:12.017 [DEBUG] [Thread-7141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:50:12.031 [INFO] [Thread-7141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:50:12.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:50:13.539 [DEBUG] [Thread-7141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:50:13.539 [DEBUG] [Thread-7141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:50:13.539 [DEBUG] [Thread-7141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:50:13.579 [DEBUG] [Thread-7141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:50:13.579 [DEBUG] [Thread-7141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:50:13.581 [DEBUG] [Thread-7141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:50:13.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:50:13.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:50:13.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:50:13.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:50:13.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:50:13.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:50:13.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.867806 -999.00  +20.70   6.91     18   -3.90 1 1 1 1 1     0    0 25.35 30.65 ZNESW 6.0 6.9 155.6 10.5 20.2 -25.8 20.3 -25.3 20.0 -24.1 20.1 -25.0
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.867806
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:50:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:49:43', tmtdew=28.86, humidity=13.37, cloud=0.0, wind=8.95, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:49:43', seeing=0.86, atlas_timestamp='2025-11-25T20:49:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.06174999999999997, 0.004749999999999588, -0.054000000000002046, 0.01950000000000074, 0.056250000000000355, 0.036999999999999034, -0.006249999999997868, 0.00849999999999973, 0.004999999999999005, 0.012249999999999872, -0.034000000000000696, 0.019499999999998963, 0.09124999999999872, -0.0070000000000014495, -0.0005000000000006111, 0.011250000000000426, 0.03550000000000075, 0.026999999999999247, -0.019750000000001933, 0.017999999999998906, 0.02424999999999855, -0.013249999999999318, 0.0027500000000006963, -0.02900000000000169, 0.019499999999998963, 0.020250000000000767, 0.048500000000000654, 0.09399999999999942, 0.09100000000000108, 0.0519999999999996, -0.01899999999999835, -0.05975000000000108], zp_timestamp='2025-11-25T20:47:00')
2025-11-25T22:50:13.607 [DEBUG] [Thread-7141] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:50:13.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:50:13.697 [DEBUG] [Thread-7144] [transport.py] [_log()] starting thread (client mode): 0x70d40040
2025-11-25T22:50:13.697 [DEBUG] [Thread-7144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:50:13.714 [DEBUG] [Thread-7144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:50:13.714 [INFO] [Thread-7144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:50:13.721 [DEBUG] [Thread-7144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:50:13.721 [DEBUG] [Thread-7144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:50:13.721 [DEBUG] [Thread-7144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:50:13.721 [DEBUG] [Thread-7144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:50:13.721 [DEBUG] [Thread-7144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:50:13.721 [DEBUG] [Thread-7144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] client lang: <none>
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] server lang: <none>
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] kex follows: False
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] Compression: none
2025-11-25T22:50:13.722 [DEBUG] [Thread-7144] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:50:13.780 [DEBUG] [Thread-7144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:50:13.780 [DEBUG] [Thread-7144] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:50:13.780 [DEBUG] [Thread-7144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:50:13.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:50:13.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:50:13.837 [DEBUG] [Thread-7144] [transport.py] [_log()] userauth is OK
2025-11-25T22:50:13.838 [DEBUG] [Thread-7144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:50:13.838 [DEBUG] [Thread-7144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:50:13.838 [DEBUG] [Thread-7144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:50:13.838 [DEBUG] [Thread-7144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:50:13.852 [INFO] [Thread-7144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:50:13.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:50:13.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:50:14.658 [DEBUG] [Thread-7144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:50:14.658 [DEBUG] [Thread-7144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:50:14.707 [DEBUG] [Thread-7144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:50:14.707 [DEBUG] [Thread-7144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:50:14.719 [DEBUG] [Thread-7144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:50:14.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:50:14.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:50:14.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:50:14.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:50:14.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:50:14.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:50:14.751 [DEBUG] [Thread-7144] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:50:17.143 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:22.402 [DEBUG] [Thread-7146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:27.542 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:37.466 [DEBUG] [Thread-7147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:37.936 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:44.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:50:44.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:50: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
2025-11-25T22:50:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 50, 15), 28.85, 13.37, 0.0, 9.46, 20.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:50:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:50:15
2025-11-25T22:50:45.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:50:45.723 [DEBUG] [Thread-7148] [transport.py] [_log()] starting thread (client mode): 0x70d40730
2025-11-25T22:50:45.723 [DEBUG] [Thread-7148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:50:45.743 [DEBUG] [Thread-7148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:50:45.743 [INFO] [Thread-7148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:50:45.746 [DEBUG] [Thread-7148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] client lang: <none>
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] server lang: <none>
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] kex follows: False
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:50:45.747 [DEBUG] [Thread-7148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:50:45.748 [DEBUG] [Thread-7148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:50:45.748 [DEBUG] [Thread-7148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:50:45.748 [DEBUG] [Thread-7148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:50:45.748 [DEBUG] [Thread-7148] [transport.py] [_log()] Compression: none
2025-11-25T22:50:45.748 [DEBUG] [Thread-7148] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:50:45.757 [DEBUG] [Thread-7148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:50:45.758 [DEBUG] [Thread-7148] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:50:45.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:50:45.759 [DEBUG] [Thread-7148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:50:45.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:50:45.760 [DEBUG] [Thread-7148] [transport.py] [_log()] userauth is OK
2025-11-25T22:50:45.761 [DEBUG] [Thread-7148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:50:45.761 [DEBUG] [Thread-7148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:50:45.761 [DEBUG] [Thread-7148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:50:45.761 [DEBUG] [Thread-7148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:50:45.786 [INFO] [Thread-7148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:50:45.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:50:46.393 [DEBUG] [Thread-7148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:50:46.394 [DEBUG] [Thread-7148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:50:46.394 [DEBUG] [Thread-7148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:50:46.434 [DEBUG] [Thread-7148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:50:46.434 [DEBUG] [Thread-7148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:50:46.436 [DEBUG] [Thread-7148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:50:46.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:50:46.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:50:46.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:50:46.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:50:46.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:50:46.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:50:46.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:50:46.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:50:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:50:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.868153 -999.00  +20.70   6.44     18   -3.80 1 1 1 1 1     0    0 24.97 28.04 ZNESW 6.2 6.4 165.6 8.3 20.2 -25.7 20.2 -25.3 19.9 -23.9 20.1 -25.0
2025-11-25T22:50:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:50:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:50:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.868153
2025-11-25T22:50:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:50:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:50:46.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:50:46.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:50:46.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:50:46.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:50:15', tmtdew=28.85, humidity=13.37, cloud=0.0, wind=9.46, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:50:15', seeing=0.95, atlas_timestamp='2025-11-25T20:50:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.06174999999999997, 0.004749999999999588, -0.054000000000002046, 0.01950000000000074, 0.056250000000000355, 0.036999999999999034, -0.006249999999997868, 0.00849999999999973, 0.004999999999999005, 0.012249999999999872, -0.034000000000000696, 0.019499999999998963, 0.09124999999999872, -0.0070000000000014495, -0.0005000000000006111, 0.011250000000000426, 0.03550000000000075, 0.026999999999999247, -0.019750000000001933, 0.017999999999998906, 0.02424999999999855, -0.013249999999999318, 0.0027500000000006963, -0.02900000000000169, 0.019499999999998963, 0.020250000000000767, 0.048500000000000654, 0.09399999999999942, 0.09100000000000108, 0.0519999999999996, -0.01899999999999835, -0.05975000000000108], zp_timestamp='2025-11-25T20:47:00')
2025-11-25T22:50:46.451 [DEBUG] [Thread-7148] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:50:46.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:50:46.545 [DEBUG] [Thread-7151] [transport.py] [_log()] starting thread (client mode): 0x70da6b90
2025-11-25T22:50:46.545 [DEBUG] [Thread-7151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:50:46.560 [DEBUG] [Thread-7151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:50:46.560 [INFO] [Thread-7151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:50:46.567 [DEBUG] [Thread-7151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] client lang: <none>
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] server lang: <none>
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] kex follows: False
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] Compression: none
2025-11-25T22:50:46.568 [DEBUG] [Thread-7151] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:50:46.626 [DEBUG] [Thread-7151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:50:46.626 [DEBUG] [Thread-7151] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:50:46.626 [DEBUG] [Thread-7151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:50:46.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:50:46.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:50:46.684 [DEBUG] [Thread-7151] [transport.py] [_log()] userauth is OK
2025-11-25T22:50:46.684 [DEBUG] [Thread-7151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:50:46.684 [DEBUG] [Thread-7151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:50:46.684 [DEBUG] [Thread-7151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:50:46.684 [DEBUG] [Thread-7151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:50:46.708 [INFO] [Thread-7151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:50:46.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:50:46.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:50:47.557 [DEBUG] [Thread-7151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:50:47.557 [DEBUG] [Thread-7151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:50:47.605 [DEBUG] [Thread-7151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:50:47.605 [DEBUG] [Thread-7151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:50:47.613 [DEBUG] [Thread-7151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:50:47.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:50:47.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:50:47.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:50:47.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:50:47.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:50:47.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:50:47.644 [DEBUG] [Thread-7151] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:50:48.373 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:52.496 [DEBUG] [Thread-7153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:58.768 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:58.993 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:50:58.995 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:05.691 [DEBUG] [Thread-7154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:07.540 [DEBUG] [Thread-7155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:09.166 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:51:17.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:51:17.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:51:18.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 50, 47), 28.87, 13.41, 0.0, 9.0, 20.5, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:51:18.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:50:47
2025-11-25T22:51:18.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:51:18.602 [DEBUG] [Thread-7156] [transport.py] [_log()] starting thread (client mode): 0x70d7ed40
2025-11-25T22:51:18.602 [DEBUG] [Thread-7156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:51:18.626 [DEBUG] [Thread-7156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:51:18.627 [INFO] [Thread-7156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:51:18.629 [DEBUG] [Thread-7156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:51:18.629 [DEBUG] [Thread-7156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:51:18.629 [DEBUG] [Thread-7156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:51:18.629 [DEBUG] [Thread-7156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:51:18.629 [DEBUG] [Thread-7156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] client lang: <none>
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] server lang: <none>
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] kex follows: False
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] Compression: none
2025-11-25T22:51:18.630 [DEBUG] [Thread-7156] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:51:18.642 [DEBUG] [Thread-7156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:51:18.643 [DEBUG] [Thread-7156] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:51:18.643 [DEBUG] [Thread-7156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:51:18.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:51:18.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:51:18.647 [DEBUG] [Thread-7156] [transport.py] [_log()] userauth is OK
2025-11-25T22:51:18.648 [DEBUG] [Thread-7156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:51:18.648 [DEBUG] [Thread-7156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:51:18.648 [DEBUG] [Thread-7156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:51:18.648 [DEBUG] [Thread-7156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:51:18.663 [INFO] [Thread-7156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:51:18.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:51:19.432 [DEBUG] [Thread-7156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:51:19.432 [DEBUG] [Thread-7156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:51:19.433 [DEBUG] [Thread-7156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:51:19.474 [DEBUG] [Thread-7156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:51:19.474 [DEBUG] [Thread-7156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:51:19.478 [DEBUG] [Thread-7156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:51:19.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:51:19.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:51:19.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:51:19.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:51:19.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:51:19.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:51:19.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:51:19.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:51:19.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:51:19.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.868501 -999.00  +20.70   7.45     18   -3.80 1 1 1 1 1     0    0 25.39 27.45 ZNESW 7.0 7.5 169.4 8.2 20.2 -25.9 20.2 -25.3 19.9 -24.1 20.1 -25.0
2025-11-25T22:51:19.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:51:19.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:51:19.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.868501
2025-11-25T22:51:19.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:51:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:51:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:51:19.505 [DEBUG] [Thread-7156] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:51:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:51:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:51:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:50:47', tmtdew=28.87, humidity=13.41, cloud=0.0, wind=9.0, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:50:47', seeing=0.95, atlas_timestamp='2025-11-25T20:50:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.06174999999999997, 0.004749999999999588, -0.054000000000002046, 0.01950000000000074, 0.056250000000000355, 0.036999999999999034, -0.006249999999997868, 0.00849999999999973, 0.004999999999999005, 0.012249999999999872, -0.034000000000000696, 0.019499999999998963, 0.09124999999999872, -0.0070000000000014495, -0.0005000000000006111, 0.011250000000000426, 0.03550000000000075, 0.026999999999999247, -0.019750000000001933, 0.017999999999998906, 0.02424999999999855, -0.013249999999999318, 0.0027500000000006963, -0.02900000000000169, 0.019499999999998963, 0.020250000000000767, 0.048500000000000654, 0.09399999999999942, 0.09100000000000108, 0.0519999999999996, -0.01899999999999835, -0.05975000000000108], zp_timestamp='2025-11-25T20:47:00')
2025-11-25T22:51:19.566 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:19.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:51:19.612 [DEBUG] [Thread-7159] [transport.py] [_log()] starting thread (client mode): 0x70d7f1f0
2025-11-25T22:51:19.612 [DEBUG] [Thread-7159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:51:19.626 [DEBUG] [Thread-7159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:51:19.626 [INFO] [Thread-7159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] client lang: <none>
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] server lang: <none>
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] kex follows: False
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:51:19.634 [DEBUG] [Thread-7159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:51:19.635 [DEBUG] [Thread-7159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:51:19.635 [DEBUG] [Thread-7159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:51:19.635 [DEBUG] [Thread-7159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:51:19.635 [DEBUG] [Thread-7159] [transport.py] [_log()] Compression: none
2025-11-25T22:51:19.635 [DEBUG] [Thread-7159] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:51:19.698 [DEBUG] [Thread-7159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:51:19.698 [DEBUG] [Thread-7159] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:51:19.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:51:19.699 [DEBUG] [Thread-7159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:51:19.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:51:19.756 [DEBUG] [Thread-7159] [transport.py] [_log()] userauth is OK
2025-11-25T22:51:19.756 [DEBUG] [Thread-7159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:51:19.757 [DEBUG] [Thread-7159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:51:19.757 [DEBUG] [Thread-7159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:51:19.757 [DEBUG] [Thread-7159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:51:19.771 [INFO] [Thread-7159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:51:19.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:51:19.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:51:20.608 [DEBUG] [Thread-7159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:51:20.608 [DEBUG] [Thread-7159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:51:20.657 [DEBUG] [Thread-7159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:51:20.657 [DEBUG] [Thread-7159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:51:20.665 [DEBUG] [Thread-7159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:51:20.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:51:20.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:51:20.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:51:20.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:51:20.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:51:20.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:51:20.697 [DEBUG] [Thread-7159] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:51:22.576 [DEBUG] [Thread-7161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:29.979 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:37.629 [DEBUG] [Thread-7162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:40.433 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:50.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:51:50.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:51:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:51:50.897 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 51, 19), 28.87, 13.39, 0.0, 9.6, 20.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:51:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:51:19
2025-11-25T22:51:51.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:51:51.655 [DEBUG] [Thread-7163] [transport.py] [_log()] starting thread (client mode): 0x70d41180
2025-11-25T22:51:51.655 [DEBUG] [Thread-7163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:51:51.675 [DEBUG] [Thread-7163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:51:51.675 [INFO] [Thread-7163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] client lang: <none>
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] server lang: <none>
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] kex follows: False
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] Compression: none
2025-11-25T22:51:51.678 [DEBUG] [Thread-7163] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:51:51.695 [DEBUG] [Thread-7163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:51:51.695 [DEBUG] [Thread-7163] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:51:51.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:51:51.696 [DEBUG] [Thread-7163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:51:51.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:51:51.698 [DEBUG] [Thread-7163] [transport.py] [_log()] userauth is OK
2025-11-25T22:51:51.698 [DEBUG] [Thread-7163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:51:51.698 [DEBUG] [Thread-7163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:51:51.698 [DEBUG] [Thread-7163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:51:51.698 [DEBUG] [Thread-7163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:51:51.721 [INFO] [Thread-7163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:51:51.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:51:52.353 [DEBUG] [Thread-7163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:51:52.353 [DEBUG] [Thread-7163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:51:52.353 [DEBUG] [Thread-7163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:51:52.394 [DEBUG] [Thread-7163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:51:52.395 [DEBUG] [Thread-7163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:51:52.397 [DEBUG] [Thread-7163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:51:52.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:51:52.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:51:52.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:51:52.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:51:52.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:51:52.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:51:52.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.868848 -999.00  +20.70   5.86     18   -3.80 1 1 1 1 1     0    0 24.94 25.75 ZNESW 5.8 5.9 164.0 7.5 20.2 -25.8 20.2 -25.3 19.9 -24.1 20.1 -25.0
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.868848
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:51:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:51:19', tmtdew=28.87, humidity=13.39, cloud=0.0, wind=9.6, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:51:19', seeing=0.99, atlas_timestamp='2025-11-25T20:51:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:51:00')
2025-11-25T22:51:52.416 [DEBUG] [Thread-7163] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:51:52.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:51:52.503 [DEBUG] [Thread-7166] [transport.py] [_log()] starting thread (client mode): 0x7374f010
2025-11-25T22:51:52.503 [DEBUG] [Thread-7166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:51:52.519 [DEBUG] [Thread-7166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:51:52.519 [INFO] [Thread-7166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] client lang: <none>
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] server lang: <none>
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] kex follows: False
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] Compression: none
2025-11-25T22:51:52.527 [DEBUG] [Thread-7166] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:51:52.585 [DEBUG] [Thread-7166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:51:52.585 [DEBUG] [Thread-7166] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:51:52.585 [DEBUG] [Thread-7166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:51:52.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:51:52.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:51:52.643 [DEBUG] [Thread-7166] [transport.py] [_log()] userauth is OK
2025-11-25T22:51:52.643 [DEBUG] [Thread-7166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:51:52.643 [DEBUG] [Thread-7166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:51:52.643 [DEBUG] [Thread-7166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:51:52.643 [DEBUG] [Thread-7166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:51:52.658 [INFO] [Thread-7166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:51:52.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:51:52.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:51:52.661 [DEBUG] [Thread-7168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:53.484 [DEBUG] [Thread-7166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:51:53.484 [DEBUG] [Thread-7166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:51:53.533 [DEBUG] [Thread-7166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:51:53.533 [DEBUG] [Thread-7166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:51:53.542 [DEBUG] [Thread-7166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:51:53.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:51: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')
2025-11-25T22:51:53.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:51:53.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:51:53.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:51:53.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:51:53.576 [DEBUG] [Thread-7166] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:51:59.198 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:51:59.199 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:01.282 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:05.762 [DEBUG] [Thread-7169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:07.708 [DEBUG] [Thread-7170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:11.674 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:22.088 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:22.744 [DEBUG] [Thread-7171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:23.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:52:23.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:52:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:52:24.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 51, 51), 28.79, 13.47, 0.0, 9.62, 20.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:52:24.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:51:51
2025-11-25T22:52:24.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:52:24.604 [DEBUG] [Thread-7172] [transport.py] [_log()] starting thread (client mode): 0x70d7f6a0
2025-11-25T22:52:24.604 [DEBUG] [Thread-7172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:52:24.631 [DEBUG] [Thread-7172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:52:24.631 [INFO] [Thread-7172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] client lang: <none>
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] server lang: <none>
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] kex follows: False
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] Compression: none
2025-11-25T22:52:24.633 [DEBUG] [Thread-7172] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:52:24.641 [DEBUG] [Thread-7172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:52:24.641 [DEBUG] [Thread-7172] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:52:24.642 [DEBUG] [Thread-7172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:52:24.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:52:24.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:52:24.643 [DEBUG] [Thread-7172] [transport.py] [_log()] userauth is OK
2025-11-25T22:52:24.643 [DEBUG] [Thread-7172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:52:24.643 [DEBUG] [Thread-7172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:52:24.643 [DEBUG] [Thread-7172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:52:24.643 [DEBUG] [Thread-7172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:52:24.660 [INFO] [Thread-7172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:52:24.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:52:25.394 [DEBUG] [Thread-7172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:52:25.394 [DEBUG] [Thread-7172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:52:25.394 [DEBUG] [Thread-7172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:52:25.434 [DEBUG] [Thread-7172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:52:25.434 [DEBUG] [Thread-7172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:52:25.436 [DEBUG] [Thread-7172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:52:25.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:52:25.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:52:25.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:52:25.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:52:25.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:52:25.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:52:25.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.869195 -999.00  +20.70   5.03     18   -3.80 1 1 1 1 1     0    0 24.63 23.16 ZNESW 5.5 5.0 160.1 7.2 20.2 -25.8 20.2 -25.4 19.9 -24.0 20.1 -25.0
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.869195
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:52:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:51:51', tmtdew=28.79, humidity=13.47, cloud=0.0, wind=9.62, temperature=20.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:51:51', seeing=0.94, atlas_timestamp='2025-11-25T20:51:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:51:00')
2025-11-25T22:52:25.455 [DEBUG] [Thread-7172] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:52:25.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:52:25.542 [DEBUG] [Thread-7175] [transport.py] [_log()] starting thread (client mode): 0x70d42fb0
2025-11-25T22:52:25.542 [DEBUG] [Thread-7175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:52:25.556 [DEBUG] [Thread-7175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:52:25.556 [INFO] [Thread-7175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] client lang: <none>
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] server lang: <none>
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] kex follows: False
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] Compression: none
2025-11-25T22:52:25.564 [DEBUG] [Thread-7175] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:52:25.626 [DEBUG] [Thread-7175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:52:25.626 [DEBUG] [Thread-7175] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:52:25.626 [DEBUG] [Thread-7175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:52:25.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:52:25.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:52:25.683 [DEBUG] [Thread-7175] [transport.py] [_log()] userauth is OK
2025-11-25T22:52:25.684 [DEBUG] [Thread-7175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:52:25.684 [DEBUG] [Thread-7175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:52:25.684 [DEBUG] [Thread-7175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:52:25.684 [DEBUG] [Thread-7175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:52:25.707 [INFO] [Thread-7175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:52:25.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:52:25.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:52:26.568 [DEBUG] [Thread-7175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:52:26.569 [DEBUG] [Thread-7175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:52:26.617 [DEBUG] [Thread-7175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:52:26.617 [DEBUG] [Thread-7175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:52:26.628 [DEBUG] [Thread-7175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:52:26.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:52:26.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:52:26.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:52:26.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:52:26.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:52:26.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:52:26.665 [DEBUG] [Thread-7175] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:52:32.542 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:37.780 [DEBUG] [Thread-7177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:43.006 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:52.833 [DEBUG] [Thread-7178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:53.446 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:52:56.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:52:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:52:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 52, 23), 28.79, 13.47, 0.0, 9.28, 20.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:52:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:52:23
2025-11-25T22:52:57.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:52:57.687 [DEBUG] [Thread-7179] [transport.py] [_log()] starting thread (client mode): 0x70d41660
2025-11-25T22:52:57.687 [DEBUG] [Thread-7179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:52:57.707 [DEBUG] [Thread-7179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:52:57.707 [INFO] [Thread-7179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] client lang: <none>
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] server lang: <none>
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] kex follows: False
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] Compression: none
2025-11-25T22:52:57.709 [DEBUG] [Thread-7179] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:52:57.717 [DEBUG] [Thread-7179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:52:57.717 [DEBUG] [Thread-7179] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:52:57.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:52:57.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:52:57.718 [DEBUG] [Thread-7179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:52:57.718 [DEBUG] [Thread-7179] [transport.py] [_log()] userauth is OK
2025-11-25T22:52:57.718 [DEBUG] [Thread-7179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:52:57.718 [DEBUG] [Thread-7179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:52:57.718 [DEBUG] [Thread-7179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:52:57.718 [DEBUG] [Thread-7179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:52:57.730 [INFO] [Thread-7179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:52:57.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:52:58.372 [DEBUG] [Thread-7179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:52:58.372 [DEBUG] [Thread-7179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:52:58.373 [DEBUG] [Thread-7179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:52:58.414 [DEBUG] [Thread-7179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:52:58.414 [DEBUG] [Thread-7179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:52:58.417 [DEBUG] [Thread-7179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:52:58.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:52:58.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:52:58.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:52:58.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:52:58.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:52:58.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:52:58.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:52:58.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:52:58.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:52:58.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.869890 -999.00  +20.70   6.26     18   -3.80 1 1 1 1 1     0    0 24.96 18.69 ZNESW 5.5 6.3 172.2 7.5 20.2 -25.8 20.2 -25.2 19.9 -24.0 20.1 -25.1
2025-11-25T22:52:58.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:52:58.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:52:58.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.869890
2025-11-25T22:52:58.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:52:58.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:52:58.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:52:58.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:52:58.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:52:58.440 [DEBUG] [Thread-7179] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:52:58.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:52:23', tmtdew=28.79, humidity=13.47, cloud=0.0, wind=9.28, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:52:55', seeing=0.77, atlas_timestamp='2025-11-25T20:52:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:51:00')
2025-11-25T22:52:58.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:52:58.535 [DEBUG] [Thread-7182] [transport.py] [_log()] starting thread (client mode): 0x70d6a860
2025-11-25T22:52:58.535 [DEBUG] [Thread-7182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:52:58.550 [DEBUG] [Thread-7182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:52:58.550 [INFO] [Thread-7182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:52:58.564 [DEBUG] [Thread-7182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:52:58.564 [DEBUG] [Thread-7182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:52:58.564 [DEBUG] [Thread-7182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:52:58.564 [DEBUG] [Thread-7182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] client lang: <none>
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] server lang: <none>
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] kex follows: False
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:52:58.565 [DEBUG] [Thread-7182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:52:58.566 [DEBUG] [Thread-7182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:52:58.566 [DEBUG] [Thread-7182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:52:58.566 [DEBUG] [Thread-7182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:52:58.566 [DEBUG] [Thread-7182] [transport.py] [_log()] Compression: none
2025-11-25T22:52:58.566 [DEBUG] [Thread-7182] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:52:58.622 [DEBUG] [Thread-7182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:52:58.622 [DEBUG] [Thread-7182] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:52:58.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:52:58.623 [DEBUG] [Thread-7182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:52:58.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:52:58.682 [DEBUG] [Thread-7182] [transport.py] [_log()] userauth is OK
2025-11-25T22:52:58.682 [DEBUG] [Thread-7182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:52:58.682 [DEBUG] [Thread-7182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:52:58.682 [DEBUG] [Thread-7182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:52:58.682 [DEBUG] [Thread-7182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:52:58.700 [INFO] [Thread-7182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:52:58.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:52:58.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:52:59.401 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:59.402 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:52:59.530 [DEBUG] [Thread-7182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:52:59.530 [DEBUG] [Thread-7182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:52:59.583 [DEBUG] [Thread-7182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:52:59.583 [DEBUG] [Thread-7182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:52:59.599 [DEBUG] [Thread-7182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:52:59.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:52:59.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:52: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') -> 00000000
2025-11-25T22:52:59.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:52:59.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:52:59.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:52:59.650 [DEBUG] [Thread-7182] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:53:03.880 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:05.836 [DEBUG] [Thread-7184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:07.875 [DEBUG] [Thread-7185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:14.317 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:22.927 [DEBUG] [Thread-7186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:24.749 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:53:29.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:53:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:53:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 53, 27), 28.76, 13.51, 0.0, 10.2, 20.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:53:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:53:27
2025-11-25T22:53:30.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:53:30.617 [DEBUG] [Thread-7187] [transport.py] [_log()] starting thread (client mode): 0x70d436a0
2025-11-25T22:53:30.617 [DEBUG] [Thread-7187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:53:30.639 [DEBUG] [Thread-7187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:53:30.639 [INFO] [Thread-7187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:53:30.642 [DEBUG] [Thread-7187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] client lang: <none>
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] server lang: <none>
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] kex follows: False
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:53:30.643 [DEBUG] [Thread-7187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:53:30.644 [DEBUG] [Thread-7187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:53:30.644 [DEBUG] [Thread-7187] [transport.py] [_log()] Compression: none
2025-11-25T22:53:30.644 [DEBUG] [Thread-7187] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:53:30.660 [DEBUG] [Thread-7187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:53:30.661 [DEBUG] [Thread-7187] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:53:30.661 [DEBUG] [Thread-7187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:53:30.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:53:30.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:53:30.663 [DEBUG] [Thread-7187] [transport.py] [_log()] userauth is OK
2025-11-25T22:53:30.663 [DEBUG] [Thread-7187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:53:30.663 [DEBUG] [Thread-7187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:53:30.663 [DEBUG] [Thread-7187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:53:30.664 [DEBUG] [Thread-7187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:53:30.688 [INFO] [Thread-7187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:53:30.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:53:31.322 [DEBUG] [Thread-7187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:53:31.322 [DEBUG] [Thread-7187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:53:31.323 [DEBUG] [Thread-7187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:53:31.364 [DEBUG] [Thread-7187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:53:31.364 [DEBUG] [Thread-7187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:53:31.367 [DEBUG] [Thread-7187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:53:31.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:53:31.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:53:31.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:53:31.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:53:31.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:53:31.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:53:31.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:53:31.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:53:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:53:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.870237 -999.00  +20.70   6.16     18   -3.80 1 1 1 1 1     0    0 25.10 16.17 ZNESW 6.0 6.2 169.6 7.7 20.2 -25.6 20.1 -25.1 19.9 -24.1 20.1 -25.1
2025-11-25T22:53:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:53:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:53:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.870237
2025-11-25T22:53:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:53:31.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:53:31.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:53:31.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:53:31.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:53:31.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:53:27', tmtdew=28.76, humidity=13.51, cloud=0.0, wind=10.2, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:53:27', seeing=0.77, atlas_timestamp='2025-11-25T20:53:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:51:00')
2025-11-25T22:53:31.392 [DEBUG] [Thread-7187] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:53:31.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:53:31.487 [DEBUG] [Thread-7190] [transport.py] [_log()] starting thread (client mode): 0x70d74130
2025-11-25T22:53:31.487 [DEBUG] [Thread-7190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:53:31.502 [DEBUG] [Thread-7190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:53:31.502 [INFO] [Thread-7190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] client lang: <none>
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] server lang: <none>
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] kex follows: False
2025-11-25T22:53:31.509 [DEBUG] [Thread-7190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:53:31.510 [DEBUG] [Thread-7190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:53:31.510 [DEBUG] [Thread-7190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:53:31.510 [DEBUG] [Thread-7190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:53:31.510 [DEBUG] [Thread-7190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:53:31.510 [DEBUG] [Thread-7190] [transport.py] [_log()] Compression: none
2025-11-25T22:53:31.510 [DEBUG] [Thread-7190] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:53:31.570 [DEBUG] [Thread-7190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:53:31.570 [DEBUG] [Thread-7190] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:53:31.571 [DEBUG] [Thread-7190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:53:31.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:53:31.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:53:31.626 [DEBUG] [Thread-7190] [transport.py] [_log()] userauth is OK
2025-11-25T22:53:31.626 [DEBUG] [Thread-7190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:53:31.626 [DEBUG] [Thread-7190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:53:31.626 [DEBUG] [Thread-7190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:53:31.627 [DEBUG] [Thread-7190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:53:31.645 [INFO] [Thread-7190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:53:31.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:53:31.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:53:32.480 [DEBUG] [Thread-7190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:53:32.480 [DEBUG] [Thread-7190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:53:32.529 [DEBUG] [Thread-7190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:53:32.529 [DEBUG] [Thread-7190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:53:32.538 [DEBUG] [Thread-7190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:53:32.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:53:32.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:53:32.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:53:32.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:53:32.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:53:32.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:53:32.580 [DEBUG] [Thread-7190] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:53:35.154 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:37.964 [DEBUG] [Thread-7192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:45.572 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:53.023 [DEBUG] [Thread-7193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:55.962 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:59.604 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:53:59.605 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:02.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:54:02.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:54:02.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:54:03.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 53, 59), 28.76, 13.49, 0.0, 9.63, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:54:03.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:53:59
2025-11-25T22:54:03.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:54:03.541 [DEBUG] [Thread-7194] [transport.py] [_log()] starting thread (client mode): 0x7374d210
2025-11-25T22:54:03.542 [DEBUG] [Thread-7194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:54:03.561 [DEBUG] [Thread-7194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:54:03.561 [INFO] [Thread-7194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:54:03.564 [DEBUG] [Thread-7194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] client lang: <none>
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] server lang: <none>
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] kex follows: False
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] Compression: none
2025-11-25T22:54:03.565 [DEBUG] [Thread-7194] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:54:03.578 [DEBUG] [Thread-7194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:54:03.578 [DEBUG] [Thread-7194] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:54:03.579 [DEBUG] [Thread-7194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:54:03.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:54:03.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:54:03.580 [DEBUG] [Thread-7194] [transport.py] [_log()] userauth is OK
2025-11-25T22:54:03.580 [DEBUG] [Thread-7194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:54:03.581 [DEBUG] [Thread-7194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:54:03.581 [DEBUG] [Thread-7194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:54:03.581 [DEBUG] [Thread-7194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:54:03.594 [INFO] [Thread-7194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:54:03.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:54:04.178 [DEBUG] [Thread-7194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:54:04.178 [DEBUG] [Thread-7194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:54:04.178 [DEBUG] [Thread-7194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:54:04.219 [DEBUG] [Thread-7194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:54:04.219 [DEBUG] [Thread-7194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:54:04.223 [DEBUG] [Thread-7194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:54:04.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:54:04.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:54:04.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:54:04.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:54:04.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:54:04.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:54:04.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:54:04.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:54:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:54:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.870584 -999.00  +20.60   6.87     18   -3.90 1 1 1 1 1     0    0 24.46 13.95 ZNESW 5.8 6.9 155.4 8.4 20.1 -25.8 20.2 -25.3 19.8 -24.0 20.0 -24.9
2025-11-25T22:54:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:54:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:54:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.870584
2025-11-25T22:54:04.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:54:04.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:54:04.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:54:04.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:54:04.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:54:04.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:53:59', tmtdew=28.76, humidity=13.49, cloud=0.0, wind=9.63, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:53:59', seeing=0.81, atlas_timestamp='2025-11-25T20:53:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:51:00')
2025-11-25T22:54:04.249 [DEBUG] [Thread-7194] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:54:04.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:54:04.344 [DEBUG] [Thread-7197] [transport.py] [_log()] starting thread (client mode): 0x70d7d480
2025-11-25T22:54:04.344 [DEBUG] [Thread-7197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:54:04.359 [DEBUG] [Thread-7197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:54:04.359 [INFO] [Thread-7197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:54:04.366 [DEBUG] [Thread-7197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] client lang: <none>
2025-11-25T22:54:04.367 [DEBUG] [Thread-7197] [transport.py] [_log()] server lang: <none>
2025-11-25T22:54:04.368 [DEBUG] [Thread-7197] [transport.py] [_log()] kex follows: False
2025-11-25T22:54:04.368 [DEBUG] [Thread-7197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:54:04.368 [DEBUG] [Thread-7197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:54:04.368 [DEBUG] [Thread-7197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:54:04.368 [DEBUG] [Thread-7197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:54:04.368 [DEBUG] [Thread-7197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:54:04.368 [DEBUG] [Thread-7197] [transport.py] [_log()] Compression: none
2025-11-25T22:54:04.368 [DEBUG] [Thread-7197] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:54:04.428 [DEBUG] [Thread-7197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:54:04.428 [DEBUG] [Thread-7197] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:54:04.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:54:04.429 [DEBUG] [Thread-7197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:54:04.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:54:04.487 [DEBUG] [Thread-7197] [transport.py] [_log()] userauth is OK
2025-11-25T22:54:04.487 [DEBUG] [Thread-7197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:54:04.487 [DEBUG] [Thread-7197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:54:04.487 [DEBUG] [Thread-7197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:54:04.487 [DEBUG] [Thread-7197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:54:04.511 [INFO] [Thread-7197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:54:04.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:54:04.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:54:05.341 [DEBUG] [Thread-7197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:54:05.342 [DEBUG] [Thread-7197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:54:05.390 [DEBUG] [Thread-7197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:54:05.390 [DEBUG] [Thread-7197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:54:05.399 [DEBUG] [Thread-7197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:54:05.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:54:05.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:54:05.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:54:05.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:54:05.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:54:05.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:54:05.436 [DEBUG] [Thread-7197] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:54:05.911 [DEBUG] [Thread-7199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:06.343 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:08.053 [DEBUG] [Thread-7200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:16.721 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:23.116 [DEBUG] [Thread-7201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:27.607 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:54:35.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:54:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:54:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 54, 31), 28.74, 13.51, 0.0, 7.94, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:54:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:54:31
2025-11-25T22:54:36.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:54:36.417 [DEBUG] [Thread-7202] [transport.py] [_log()] starting thread (client mode): 0x70d6b6d0
2025-11-25T22:54:36.417 [DEBUG] [Thread-7202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:54:36.436 [DEBUG] [Thread-7202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:54:36.436 [INFO] [Thread-7202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] client lang: <none>
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] server lang: <none>
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] kex follows: False
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] Compression: none
2025-11-25T22:54:36.440 [DEBUG] [Thread-7202] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:54:36.456 [DEBUG] [Thread-7202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:54:36.456 [DEBUG] [Thread-7202] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:54:36.456 [DEBUG] [Thread-7202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:54:36.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:54:36.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:54:36.457 [DEBUG] [Thread-7202] [transport.py] [_log()] userauth is OK
2025-11-25T22:54:36.457 [DEBUG] [Thread-7202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:54:36.457 [DEBUG] [Thread-7202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:54:36.457 [DEBUG] [Thread-7202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:54:36.457 [DEBUG] [Thread-7202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:54:36.487 [INFO] [Thread-7202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:54:36.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:54:37.107 [DEBUG] [Thread-7202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:54:37.108 [DEBUG] [Thread-7202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:54:37.109 [DEBUG] [Thread-7202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:54:37.149 [DEBUG] [Thread-7202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:54:37.149 [DEBUG] [Thread-7202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:54:37.152 [DEBUG] [Thread-7202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:54:37.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:54:37.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:54:37.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:54:37.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:54:37.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:54:37.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:54:37.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:54:37.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:54:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:54:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.870931 -999.00  +20.60   6.03     18   -3.90 1 1 1 1 1     0    0 24.97 12.59 ZNESW 6.0 6.0 162.0 7.7 20.1 -25.8 20.1 -25.3 19.8 -24.0 20.0 -25.0
2025-11-25T22:54:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:54:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:54:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.870931
2025-11-25T22:54:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:54:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:54:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:54:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:54:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:54:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:54:31', tmtdew=28.74, humidity=13.51, cloud=0.0, wind=7.94, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:54:31', seeing=0.81, atlas_timestamp='2025-11-25T20:54:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:51:00')
2025-11-25T22:54:37.178 [DEBUG] [Thread-7202] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:54:37.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:54:37.274 [DEBUG] [Thread-7205] [transport.py] [_log()] starting thread (client mode): 0x70d39e40
2025-11-25T22:54:37.274 [DEBUG] [Thread-7205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:54:37.288 [DEBUG] [Thread-7205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:54:37.288 [INFO] [Thread-7205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] client lang: <none>
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] server lang: <none>
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] kex follows: False
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] Compression: none
2025-11-25T22:54:37.296 [DEBUG] [Thread-7205] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:54:37.356 [DEBUG] [Thread-7205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:54:37.357 [DEBUG] [Thread-7205] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:54:37.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:54:37.358 [DEBUG] [Thread-7205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:54:37.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:54:37.412 [DEBUG] [Thread-7205] [transport.py] [_log()] userauth is OK
2025-11-25T22:54:37.412 [DEBUG] [Thread-7205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:54:37.412 [DEBUG] [Thread-7205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:54:37.412 [DEBUG] [Thread-7205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:54:37.412 [DEBUG] [Thread-7205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:54:37.432 [INFO] [Thread-7205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:54:37.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:54:37.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:54:38.152 [DEBUG] [Thread-7207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:38.242 [DEBUG] [Thread-7205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:54:38.242 [DEBUG] [Thread-7205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:54:38.270 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:38.290 [DEBUG] [Thread-7205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:54:38.291 [DEBUG] [Thread-7205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:54:38.299 [DEBUG] [Thread-7205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:54:38.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:54:38.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:54:38.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:54:38.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:54:38.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:54:38.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:54:38.334 [DEBUG] [Thread-7205] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:54:48.665 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:53.200 [DEBUG] [Thread-7208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:59.063 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:59.805 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:54:59.806 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:05.988 [DEBUG] [Thread-7209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:08.236 [DEBUG] [Thread-7210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:08.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:55:08.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:55:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:55:09.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 55, 3), 28.92, 13.34, 0.0, 7.91, 20.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:55:09.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:55:03
2025-11-25T22:55:09.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:55:09.360 [DEBUG] [Thread-7211] [transport.py] [_log()] starting thread (client mode): 0x7374f3a0
2025-11-25T22:55:09.360 [DEBUG] [Thread-7211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:55:09.380 [DEBUG] [Thread-7211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:55:09.380 [INFO] [Thread-7211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] client lang: <none>
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] server lang: <none>
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] kex follows: False
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:55:09.383 [DEBUG] [Thread-7211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:55:09.384 [DEBUG] [Thread-7211] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:55:09.384 [DEBUG] [Thread-7211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:55:09.384 [DEBUG] [Thread-7211] [transport.py] [_log()] Compression: none
2025-11-25T22:55:09.384 [DEBUG] [Thread-7211] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:55:09.399 [DEBUG] [Thread-7211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:55:09.399 [DEBUG] [Thread-7211] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:55:09.399 [DEBUG] [Thread-7211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:55:09.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:55:09.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:55:09.400 [DEBUG] [Thread-7211] [transport.py] [_log()] userauth is OK
2025-11-25T22:55:09.400 [DEBUG] [Thread-7211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:55:09.400 [DEBUG] [Thread-7211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:55:09.400 [DEBUG] [Thread-7211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:55:09.400 [DEBUG] [Thread-7211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:55:09.409 [INFO] [Thread-7211] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:55:09.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:55:09.457 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:10.036 [DEBUG] [Thread-7211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:55:10.036 [DEBUG] [Thread-7211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:55:10.036 [DEBUG] [Thread-7211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:55:10.077 [DEBUG] [Thread-7211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:55:10.077 [DEBUG] [Thread-7211] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:55:10.080 [DEBUG] [Thread-7211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:55:10.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:55:10.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:55:10.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:55:10.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:55:10.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:55:10.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:55:10.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:55:10.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.871278 -999.00  +20.60   6.12     18   -3.90 1 1 1 1 1     0    0 24.94 12.30 ZNESW 5.7 6.1 163.8 8.7 20.1 -25.7 20.1 -25.2 19.8 -23.9 20.0 -25.1
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.871278
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:55:10.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:55:03', tmtdew=28.92, humidity=13.34, cloud=0.0, wind=7.91, temperature=20.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:55:03', seeing=0.85, atlas_timestamp='2025-11-25T20:54:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:53:00')
2025-11-25T22:55:10.101 [DEBUG] [Thread-7211] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:55:10.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:55:10.188 [DEBUG] [Thread-7214] [transport.py] [_log()] starting thread (client mode): 0x70da63b0
2025-11-25T22:55:10.188 [DEBUG] [Thread-7214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:55:10.202 [DEBUG] [Thread-7214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:55:10.202 [INFO] [Thread-7214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] client lang: <none>
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] server lang: <none>
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] kex follows: False
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] Compression: none
2025-11-25T22:55:10.210 [DEBUG] [Thread-7214] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:55:10.267 [DEBUG] [Thread-7214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:55:10.267 [DEBUG] [Thread-7214] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:55:10.267 [DEBUG] [Thread-7214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:55:10.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:55:10.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:55:10.324 [DEBUG] [Thread-7214] [transport.py] [_log()] userauth is OK
2025-11-25T22:55:10.324 [DEBUG] [Thread-7214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:55:10.324 [DEBUG] [Thread-7214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:55:10.324 [DEBUG] [Thread-7214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:55:10.324 [DEBUG] [Thread-7214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:55:10.338 [INFO] [Thread-7214] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:55:10.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:55:10.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:55:11.158 [DEBUG] [Thread-7214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:55:11.159 [DEBUG] [Thread-7214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:55:11.206 [DEBUG] [Thread-7214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:55:11.206 [DEBUG] [Thread-7214] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:55:11.215 [DEBUG] [Thread-7214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:55:11.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:55:11.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:55:11.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:55:11.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:55:11.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:55:11.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:55:11.246 [DEBUG] [Thread-7214] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:55:19.857 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:23.271 [DEBUG] [Thread-7216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:30.255 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:38.321 [DEBUG] [Thread-7217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:40.668 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:55:41.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:55:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:55:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 55, 35), 28.95, 13.29, 0.0, 8.77, 20.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:55:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:55:35
2025-11-25T22:55:42.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:55:42.195 [DEBUG] [Thread-7218] [transport.py] [_log()] starting thread (client mode): 0x70d7d480
2025-11-25T22:55:42.195 [DEBUG] [Thread-7218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:55:42.215 [DEBUG] [Thread-7218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:55:42.215 [INFO] [Thread-7218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:55:42.216 [DEBUG] [Thread-7218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:55:42.216 [DEBUG] [Thread-7218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:55:42.216 [DEBUG] [Thread-7218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] client lang: <none>
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] server lang: <none>
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] kex follows: False
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] Compression: none
2025-11-25T22:55:42.217 [DEBUG] [Thread-7218] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:55:42.230 [DEBUG] [Thread-7218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:55:42.231 [DEBUG] [Thread-7218] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:55:42.232 [DEBUG] [Thread-7218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:55:42.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:55:42.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:55:42.234 [DEBUG] [Thread-7218] [transport.py] [_log()] userauth is OK
2025-11-25T22:55:42.234 [DEBUG] [Thread-7218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:55:42.234 [DEBUG] [Thread-7218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:55:42.234 [DEBUG] [Thread-7218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:55:42.235 [DEBUG] [Thread-7218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:55:42.257 [INFO] [Thread-7218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:55:42.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:55:42.877 [DEBUG] [Thread-7218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:55:42.877 [DEBUG] [Thread-7218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:55:42.878 [DEBUG] [Thread-7218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:55:42.919 [DEBUG] [Thread-7218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:55:42.919 [DEBUG] [Thread-7218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:55:42.922 [DEBUG] [Thread-7218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:55:42.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:55:42.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:55:42.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:55:42.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:55:42.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:55:42.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:55:42.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:55:42.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:55:42.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:55:42.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.871973 -999.00  +20.60   8.14     18   -4.00 1 1 1 1 1     0    0 25.10 13.70 ZNESW 7.6 8.1 166.2 9.8 20.1 -25.6 20.1 -25.2 19.8 -23.7 20.0 -24.9
2025-11-25T22:55:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:55:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:55:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.871973
2025-11-25T22:55:42.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:55:42.944 [DEBUG] [Thread-7218] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:55:42.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:55:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:55:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:55:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:55:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:55:35', tmtdew=28.95, humidity=13.29, cloud=0.0, wind=8.77, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:55:35', seeing=0.93, atlas_timestamp='2025-11-25T20:55:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:53:00')
2025-11-25T22:55:43.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:55:43.041 [DEBUG] [Thread-7221] [transport.py] [_log()] starting thread (client mode): 0x70d57f40
2025-11-25T22:55:43.041 [DEBUG] [Thread-7221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:55:43.056 [DEBUG] [Thread-7221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:55:43.056 [INFO] [Thread-7221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:55:43.064 [DEBUG] [Thread-7221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:55:43.064 [DEBUG] [Thread-7221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:55:43.064 [DEBUG] [Thread-7221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:55:43.064 [DEBUG] [Thread-7221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:55:43.065 [DEBUG] [Thread-7221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:55:43.065 [DEBUG] [Thread-7221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:55:43.065 [DEBUG] [Thread-7221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:55:43.065 [DEBUG] [Thread-7221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:55:43.065 [DEBUG] [Thread-7221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:55:43.065 [DEBUG] [Thread-7221] [transport.py] [_log()] client lang: <none>
2025-11-25T22:55:43.065 [DEBUG] [Thread-7221] [transport.py] [_log()] server lang: <none>
2025-11-25T22:55:43.065 [DEBUG] [Thread-7221] [transport.py] [_log()] kex follows: False
2025-11-25T22:55:43.065 [DEBUG] [Thread-7221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:55:43.066 [DEBUG] [Thread-7221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:55:43.066 [DEBUG] [Thread-7221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:55:43.066 [DEBUG] [Thread-7221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:55:43.066 [DEBUG] [Thread-7221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:55:43.066 [DEBUG] [Thread-7221] [transport.py] [_log()] Compression: none
2025-11-25T22:55:43.066 [DEBUG] [Thread-7221] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:55:43.122 [DEBUG] [Thread-7221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:55:43.123 [DEBUG] [Thread-7221] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:55:43.123 [DEBUG] [Thread-7221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:55:43.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:55:43.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:55:43.178 [DEBUG] [Thread-7221] [transport.py] [_log()] userauth is OK
2025-11-25T22:55:43.178 [DEBUG] [Thread-7221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:55:43.178 [DEBUG] [Thread-7221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:55:43.178 [DEBUG] [Thread-7221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:55:43.178 [DEBUG] [Thread-7221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:55:43.197 [INFO] [Thread-7221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:55:43.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:55:43.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:55:44.038 [DEBUG] [Thread-7221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:55:44.038 [DEBUG] [Thread-7221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:55:44.085 [DEBUG] [Thread-7221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:55:44.086 [DEBUG] [Thread-7221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:55:44.095 [DEBUG] [Thread-7221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:55:44.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:55:44.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:55:44.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:55:44.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:55:44.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:55:44.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:55:44.132 [DEBUG] [Thread-7221] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:55:51.083 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:55:53.357 [DEBUG] [Thread-7223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:00.012 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:00.013 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:01.498 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:06.045 [DEBUG] [Thread-7224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:08.422 [DEBUG] [Thread-7225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:11.897 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:14.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:56:14.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:56:14.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:56:14.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 56, 7), 28.84, 13.37, 0.0, 8.56, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:56:14.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:56:07
2025-11-25T22:56:14.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:56:15.108 [DEBUG] [Thread-7226] [transport.py] [_log()] starting thread (client mode): 0x70d75330
2025-11-25T22:56:15.108 [DEBUG] [Thread-7226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:56:15.126 [DEBUG] [Thread-7226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:56:15.126 [INFO] [Thread-7226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:56:15.127 [DEBUG] [Thread-7226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:56:15.127 [DEBUG] [Thread-7226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:56:15.127 [DEBUG] [Thread-7226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:56:15.127 [DEBUG] [Thread-7226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:56:15.127 [DEBUG] [Thread-7226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:56:15.127 [DEBUG] [Thread-7226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:56:15.127 [DEBUG] [Thread-7226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:56:15.127 [DEBUG] [Thread-7226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:56:15.127 [DEBUG] [Thread-7226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] client lang: <none>
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] server lang: <none>
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] kex follows: False
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] Compression: none
2025-11-25T22:56:15.128 [DEBUG] [Thread-7226] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:56:15.140 [DEBUG] [Thread-7226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:56:15.141 [DEBUG] [Thread-7226] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:56:15.141 [DEBUG] [Thread-7226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:56:15.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:56:15.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:56:15.143 [DEBUG] [Thread-7226] [transport.py] [_log()] userauth is OK
2025-11-25T22:56:15.143 [DEBUG] [Thread-7226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:56:15.143 [DEBUG] [Thread-7226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:56:15.143 [DEBUG] [Thread-7226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:56:15.143 [DEBUG] [Thread-7226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:56:15.167 [INFO] [Thread-7226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:56:15.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:56:15.732 [DEBUG] [Thread-7226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:56:15.732 [DEBUG] [Thread-7226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:56:15.733 [DEBUG] [Thread-7226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:56:15.773 [DEBUG] [Thread-7226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:56:15.773 [DEBUG] [Thread-7226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:56:15.775 [DEBUG] [Thread-7226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:56:15.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:56:15.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:56:15.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:56:15.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:56:15.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:56:15.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:56:15.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:56:15.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:56:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:56:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.872320 -999.00  +20.60   6.13     18   -4.00 1 1 1 1 1     0    0 24.83 14.05 ZNESW 5.7 6.1 159.4 7.5 20.1 -25.8 20.1 -25.3 19.8 -24.1 20.0 -24.9
2025-11-25T22:56:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:56:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:56:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.872320
2025-11-25T22:56:15.788 [DEBUG] [Thread-7226] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:56:15.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:56:15.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:56:15.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:56:15.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:56:15.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:56:15.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:56:07', tmtdew=28.84, humidity=13.37, cloud=0.0, wind=8.56, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:56:07', seeing=0.93, atlas_timestamp='2025-11-25T20:56:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:53:00')
2025-11-25T22:56:15.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:56:15.877 [DEBUG] [Thread-7229] [transport.py] [_log()] starting thread (client mode): 0x70d6bbe0
2025-11-25T22:56:15.877 [DEBUG] [Thread-7229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:56:15.892 [DEBUG] [Thread-7229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:56:15.892 [INFO] [Thread-7229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:56:15.900 [DEBUG] [Thread-7229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:56:15.900 [DEBUG] [Thread-7229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:56:15.900 [DEBUG] [Thread-7229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:56:15.901 [DEBUG] [Thread-7229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:56:15.901 [DEBUG] [Thread-7229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:56:15.901 [DEBUG] [Thread-7229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:56:15.901 [DEBUG] [Thread-7229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:56:15.901 [DEBUG] [Thread-7229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:56:15.901 [DEBUG] [Thread-7229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:56:15.901 [DEBUG] [Thread-7229] [transport.py] [_log()] client lang: <none>
2025-11-25T22:56:15.901 [DEBUG] [Thread-7229] [transport.py] [_log()] server lang: <none>
2025-11-25T22:56:15.901 [DEBUG] [Thread-7229] [transport.py] [_log()] kex follows: False
2025-11-25T22:56:15.902 [DEBUG] [Thread-7229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:56:15.902 [DEBUG] [Thread-7229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:56:15.902 [DEBUG] [Thread-7229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:56:15.902 [DEBUG] [Thread-7229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:56:15.902 [DEBUG] [Thread-7229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:56:15.902 [DEBUG] [Thread-7229] [transport.py] [_log()] Compression: none
2025-11-25T22:56:15.902 [DEBUG] [Thread-7229] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:56:15.960 [DEBUG] [Thread-7229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:56:15.961 [DEBUG] [Thread-7229] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:56:15.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:56:15.962 [DEBUG] [Thread-7229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:56:15.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:56:16.019 [DEBUG] [Thread-7229] [transport.py] [_log()] userauth is OK
2025-11-25T22:56:16.019 [DEBUG] [Thread-7229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:56:16.020 [DEBUG] [Thread-7229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:56:16.020 [DEBUG] [Thread-7229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:56:16.020 [DEBUG] [Thread-7229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:56:16.042 [INFO] [Thread-7229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:56:16.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:56:16.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:56:16.908 [DEBUG] [Thread-7229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:56:16.909 [DEBUG] [Thread-7229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:56:16.957 [DEBUG] [Thread-7229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:56:16.957 [DEBUG] [Thread-7229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:56:16.966 [DEBUG] [Thread-7229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:56:16.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:56:16.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:56:16.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:56:16.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:56:16.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:56:16.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:56:17.003 [DEBUG] [Thread-7229] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:56:22.291 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:23.457 [DEBUG] [Thread-7231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:32.691 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:38.506 [DEBUG] [Thread-7232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:43.089 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:47.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:56:47.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:56:47.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:56:47.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 56, 39), 28.97, 13.34, 0.0, 8.84, 20.4, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:56:47.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:56:39
2025-11-25T22:56:47.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:56:47.977 [DEBUG] [Thread-7233] [transport.py] [_log()] starting thread (client mode): 0x70d74610
2025-11-25T22:56:47.977 [DEBUG] [Thread-7233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:56:47.996 [DEBUG] [Thread-7233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:56:47.996 [INFO] [Thread-7233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:56:47.999 [DEBUG] [Thread-7233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:56:47.999 [DEBUG] [Thread-7233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:56:47.999 [DEBUG] [Thread-7233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:56:47.999 [DEBUG] [Thread-7233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] client lang: <none>
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] server lang: <none>
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] kex follows: False
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:56:48.000 [DEBUG] [Thread-7233] [transport.py] [_log()] Compression: none
2025-11-25T22:56:48.001 [DEBUG] [Thread-7233] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:56:48.013 [DEBUG] [Thread-7233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:56:48.014 [DEBUG] [Thread-7233] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:56:48.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:56:48.014 [DEBUG] [Thread-7233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:56:48.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:56:48.015 [DEBUG] [Thread-7233] [transport.py] [_log()] userauth is OK
2025-11-25T22:56:48.015 [DEBUG] [Thread-7233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:56:48.015 [DEBUG] [Thread-7233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:56:48.015 [DEBUG] [Thread-7233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:56:48.015 [DEBUG] [Thread-7233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:56:48.026 [INFO] [Thread-7233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:56:48.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:56:48.637 [DEBUG] [Thread-7233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:56:48.637 [DEBUG] [Thread-7233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:56:48.637 [DEBUG] [Thread-7233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:56:48.677 [DEBUG] [Thread-7233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:56:48.677 [DEBUG] [Thread-7233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:56:48.680 [DEBUG] [Thread-7233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:56:48.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:56:48.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:56:48.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:56:48.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:56:48.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:56:48.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:56:48.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:56:48.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:56:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:56:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.872320 -999.00  +20.60   6.13     18   -4.00 1 1 1 1 1     0    0 24.83 14.05 ZNESW 5.7 6.1 159.4 7.5 20.1 -25.8 20.1 -25.3 19.8 -24.1 20.0 -24.9
2025-11-25T22:56:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:56:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:56:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.872320
2025-11-25T22:56:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:56:48.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:56:48.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:56:48.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:56:48.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:56:48.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:56:39', tmtdew=28.97, humidity=13.34, cloud=0.0, wind=8.84, temperature=20.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:56:39', seeing=0.93, atlas_timestamp='2025-11-25T20:56:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:53:00')
2025-11-25T22:56:48.703 [DEBUG] [Thread-7233] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:56:48.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:56:48.800 [DEBUG] [Thread-7236] [transport.py] [_log()] starting thread (client mode): 0x70da6da0
2025-11-25T22:56:48.800 [DEBUG] [Thread-7236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:56:48.816 [DEBUG] [Thread-7236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:56:48.816 [INFO] [Thread-7236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:56:48.823 [DEBUG] [Thread-7236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:56:48.823 [DEBUG] [Thread-7236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] client lang: <none>
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] server lang: <none>
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] kex follows: False
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:56:48.824 [DEBUG] [Thread-7236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:56:48.825 [DEBUG] [Thread-7236] [transport.py] [_log()] Compression: none
2025-11-25T22:56:48.825 [DEBUG] [Thread-7236] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:56:48.883 [DEBUG] [Thread-7236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:56:48.883 [DEBUG] [Thread-7236] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:56:48.884 [DEBUG] [Thread-7236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:56:48.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:56:48.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:56:48.939 [DEBUG] [Thread-7236] [transport.py] [_log()] userauth is OK
2025-11-25T22:56:48.939 [DEBUG] [Thread-7236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:56:48.939 [DEBUG] [Thread-7236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:56:48.939 [DEBUG] [Thread-7236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:56:48.939 [DEBUG] [Thread-7236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:56:48.959 [INFO] [Thread-7236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:56:48.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:56:48.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:56:49.812 [DEBUG] [Thread-7236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:56:49.812 [DEBUG] [Thread-7236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:56:49.860 [DEBUG] [Thread-7236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:56:49.860 [DEBUG] [Thread-7236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:56:49.869 [DEBUG] [Thread-7236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:56:49.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:56:49.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:56:49.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:56:49.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:56:49.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:56:49.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:56:49.902 [DEBUG] [Thread-7236] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:56:53.486 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:56:53.536 [DEBUG] [Thread-7238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:00.216 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:00.217 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:03.886 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:06.096 [DEBUG] [Thread-7239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:08.598 [DEBUG] [Thread-7240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:14.298 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:57:19.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:57:19.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:57:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 57, 11), 29.04, 13.28, 0.0, 8.45, 20.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:57:20.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:57:11
2025-11-25T22:57:20.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:57:20.858 [DEBUG] [Thread-7241] [transport.py] [_log()] starting thread (client mode): 0x70d57d00
2025-11-25T22:57:20.858 [DEBUG] [Thread-7241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:57:20.877 [DEBUG] [Thread-7241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:57:20.877 [INFO] [Thread-7241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] client lang: <none>
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] server lang: <none>
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] kex follows: False
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] Compression: none
2025-11-25T22:57:20.879 [DEBUG] [Thread-7241] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:57:20.895 [DEBUG] [Thread-7241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:57:20.895 [DEBUG] [Thread-7241] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:57:20.896 [DEBUG] [Thread-7241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:57:20.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:57:20.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:57:20.897 [DEBUG] [Thread-7241] [transport.py] [_log()] userauth is OK
2025-11-25T22:57:20.897 [DEBUG] [Thread-7241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:57:20.897 [DEBUG] [Thread-7241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:57:20.897 [DEBUG] [Thread-7241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:57:20.897 [DEBUG] [Thread-7241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:57:20.915 [INFO] [Thread-7241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:57:20.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:57:21.638 [DEBUG] [Thread-7241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:57:21.638 [DEBUG] [Thread-7241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:57:21.638 [DEBUG] [Thread-7241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:57:21.678 [DEBUG] [Thread-7241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:57:21.679 [DEBUG] [Thread-7241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:57:21.682 [DEBUG] [Thread-7241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:57:21.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:57:21.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:57:21.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:57:21.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:57:21.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:57:21.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:57:21.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:57:21.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:57:21.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:57:21.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.872667 -999.00  +20.60   6.90     18   -4.00 1 1 1 1 1     0    0 24.75 15.43 ZNESW 7.9 6.9 160.4 11.8 20.1 -25.8 20.1 -25.2 19.8 -23.9 20.0 -25.0
2025-11-25T22:57:21.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:57:21.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:57:21.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.872667
2025-11-25T22:57:21.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:57:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:57:21.711 [DEBUG] [Thread-7241] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:57:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:57:21.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:57:21.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:57:21.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:57:11', tmtdew=29.04, humidity=13.28, cloud=0.0, wind=8.45, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:57:11', seeing=0.9, atlas_timestamp='2025-11-25T20:56:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.0417500000000004, 0.02075000000000138, -0.011499999999999844, 0.010999999999999233, 0.05525000000000091, 0.045999999999999375, -0.007749999999999702, -0.03950000000000031, 0.025000000000000355, 0.02024999999999899, -0.05600000000000094, 0.024499999999999744, 0.10824999999999996, 0.028999999999999915, -0.0010000000000012221, -0.0072499999999990905, 0.02549999999999919, 0.05850000000000044, 0.03524999999999956, 0.050499999999999545, 0.06674999999999898, 0.043250000000000455, 0.025750000000000384, -0.017000000000001236, 0.008000000000000895, 0.06625000000000014, 0.050499999999999545, 0.09600000000000009, 0.10150000000000148, 0.07550000000000168, -0.022999999999999687, -0.047250000000000014], zp_timestamp='2025-11-25T20:53:00')
2025-11-25T22:57:21.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:57:21.811 [DEBUG] [Thread-7244] [transport.py] [_log()] starting thread (client mode): 0x70d6a440
2025-11-25T22:57:21.811 [DEBUG] [Thread-7244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:57:21.826 [DEBUG] [Thread-7244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:57:21.826 [INFO] [Thread-7244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:57:21.833 [DEBUG] [Thread-7244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] client lang: <none>
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] server lang: <none>
2025-11-25T22:57:21.834 [DEBUG] [Thread-7244] [transport.py] [_log()] kex follows: False
2025-11-25T22:57:21.835 [DEBUG] [Thread-7244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:57:21.835 [DEBUG] [Thread-7244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:57:21.835 [DEBUG] [Thread-7244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:57:21.835 [DEBUG] [Thread-7244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:57:21.835 [DEBUG] [Thread-7244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:57:21.835 [DEBUG] [Thread-7244] [transport.py] [_log()] Compression: none
2025-11-25T22:57:21.835 [DEBUG] [Thread-7244] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:57:21.891 [DEBUG] [Thread-7244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:57:21.892 [DEBUG] [Thread-7244] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:57:21.892 [DEBUG] [Thread-7244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:57:21.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:57:21.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:57:21.949 [DEBUG] [Thread-7244] [transport.py] [_log()] userauth is OK
2025-11-25T22:57:21.949 [DEBUG] [Thread-7244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:57:21.949 [DEBUG] [Thread-7244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:57:21.949 [DEBUG] [Thread-7244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:57:21.949 [DEBUG] [Thread-7244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:57:21.967 [INFO] [Thread-7244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:57:21.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:57:21.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:57:22.741 [DEBUG] [Thread-7244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:57:22.741 [DEBUG] [Thread-7244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:57:22.790 [DEBUG] [Thread-7244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:57:22.790 [DEBUG] [Thread-7244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:57:22.799 [DEBUG] [Thread-7244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:57:22.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:57:22.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:57:22.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:57:22.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:57:22.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:57:22.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:57:22.841 [DEBUG] [Thread-7244] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:57:23.638 [DEBUG] [Thread-7246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:24.714 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:35.124 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:38.689 [DEBUG] [Thread-7247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:45.526 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:52.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:57:52.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:57:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:57:53.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 57, 43), 28.99, 13.33, 0.0, 8.93, 20.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:57:53.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:57:43
2025-11-25T22:57:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:57:53.718 [DEBUG] [Thread-7248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:57:53.793 [DEBUG] [Thread-7249] [transport.py] [_log()] starting thread (client mode): 0x70d561a0
2025-11-25T22:57:53.794 [DEBUG] [Thread-7249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:57:53.808 [DEBUG] [Thread-7249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:57:53.809 [INFO] [Thread-7249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] client lang: <none>
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] server lang: <none>
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] kex follows: False
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:57:53.810 [DEBUG] [Thread-7249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:57:53.811 [DEBUG] [Thread-7249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:57:53.811 [DEBUG] [Thread-7249] [transport.py] [_log()] Compression: none
2025-11-25T22:57:53.811 [DEBUG] [Thread-7249] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:57:53.829 [DEBUG] [Thread-7249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:57:53.830 [DEBUG] [Thread-7249] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:57:53.830 [DEBUG] [Thread-7249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:57:53.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:57:53.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:57:53.832 [DEBUG] [Thread-7249] [transport.py] [_log()] userauth is OK
2025-11-25T22:57:53.833 [DEBUG] [Thread-7249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:57:53.833 [DEBUG] [Thread-7249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:57:53.833 [DEBUG] [Thread-7249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:57:53.833 [DEBUG] [Thread-7249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:57:53.858 [INFO] [Thread-7249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:57:53.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:57:54.517 [DEBUG] [Thread-7249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:57:54.517 [DEBUG] [Thread-7249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:57:54.518 [DEBUG] [Thread-7249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:57:54.559 [DEBUG] [Thread-7249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:57:54.559 [DEBUG] [Thread-7249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:57:54.562 [DEBUG] [Thread-7249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:57:54.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:57:54.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:57:54.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:57:54.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:57:54.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:57:54.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:57:54.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:57:54.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:57:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:57:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.873015 -999.00  +20.60   7.10     18   -4.00 1 1 1 1 1     0    0 24.45 16.59 ZNESW 7.3 7.1 175.0 9.1 20.1 -25.8 20.1 -25.2 19.8 -24.0 20.0 -25.0
2025-11-25T22:57:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:57:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:57:54.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.873015
2025-11-25T22:57:54.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:57:54.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:57:54.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:57:54.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:57:54.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:57:54.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:57:43', tmtdew=28.99, humidity=13.33, cloud=0.0, wind=8.93, temperature=20.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:57:43', seeing=0.89, atlas_timestamp='2025-11-25T20:57:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.014249999999998764, 0.013250000000001094, -0.019000000000001904, 0.0495000000000001, 0.06725000000000136, 0.030999999999998806, 0.01624999999999943, 0.019499999999998963, 0.0235000000000003, 0.060249999999999915, -0.028999999999999915, 0.0649999999999995, 0.0857499999999991, 0.041499999999999204, 0.00849999999999973, -0.0022500000000000853, 0.028499999999999304, 0.03500000000000014, 0.01524999999999821, 0.08749999999999858, 0.04224999999999923, 0.026750000000001606, 0.024750000000000938, -0.023000000000001464, 0.018000000000000682, 0.060750000000000526, 0.022499999999999076, 0.15249999999999986, 0.09300000000000175, 0.06800000000000139, -0.012000000000000455, -0.016250000000001208], zp_timestamp='2025-11-25T20:55:00')
2025-11-25T22:57:54.588 [DEBUG] [Thread-7249] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:57:54.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:57:54.684 [DEBUG] [Thread-7252] [transport.py] [_log()] starting thread (client mode): 0x70d54580
2025-11-25T22:57:54.684 [DEBUG] [Thread-7252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:57:54.701 [DEBUG] [Thread-7252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:57:54.701 [INFO] [Thread-7252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:57:54.709 [DEBUG] [Thread-7252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:57:54.709 [DEBUG] [Thread-7252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:57:54.709 [DEBUG] [Thread-7252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:57:54.709 [DEBUG] [Thread-7252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:57:54.709 [DEBUG] [Thread-7252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:57:54.709 [DEBUG] [Thread-7252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:57:54.709 [DEBUG] [Thread-7252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:57:54.709 [DEBUG] [Thread-7252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:57:54.709 [DEBUG] [Thread-7252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] client lang: <none>
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] server lang: <none>
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] kex follows: False
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] Compression: none
2025-11-25T22:57:54.710 [DEBUG] [Thread-7252] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:57:54.775 [DEBUG] [Thread-7252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:57:54.776 [DEBUG] [Thread-7252] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:57:54.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:57:54.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:57:54.778 [DEBUG] [Thread-7252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:57:54.837 [DEBUG] [Thread-7252] [transport.py] [_log()] userauth is OK
2025-11-25T22:57:54.837 [DEBUG] [Thread-7252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:57:54.837 [DEBUG] [Thread-7252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:57:54.838 [DEBUG] [Thread-7252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:57:54.838 [DEBUG] [Thread-7252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:57:54.857 [INFO] [Thread-7252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:57:54.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:57:54.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:57:55.704 [DEBUG] [Thread-7252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:57:55.704 [DEBUG] [Thread-7252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:57:55.752 [DEBUG] [Thread-7252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:57:55.752 [DEBUG] [Thread-7252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:57:55.761 [DEBUG] [Thread-7252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:57:55.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:57:55.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:57:55.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:57:55.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:57:55.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:57:55.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:57:55.799 [DEBUG] [Thread-7252] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:57:55.921 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:00.444 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:00.446 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:06.165 [DEBUG] [Thread-7254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:06.320 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:08.752 [DEBUG] [Thread-7255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:16.715 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:23.810 [DEBUG] [Thread-7256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:58:25.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:58:25.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:58:26.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 58, 15), 28.98, 13.33, 0.0, 9.25, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:58:26.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:58:15
2025-11-25T22:58:26.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:58:26.757 [DEBUG] [Thread-7257] [transport.py] [_log()] starting thread (client mode): 0x70d395a0
2025-11-25T22:58:26.758 [DEBUG] [Thread-7257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:58:26.769 [DEBUG] [Thread-7257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:58:26.769 [INFO] [Thread-7257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] client lang: <none>
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] server lang: <none>
2025-11-25T22:58:26.772 [DEBUG] [Thread-7257] [transport.py] [_log()] kex follows: False
2025-11-25T22:58:26.773 [DEBUG] [Thread-7257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:58:26.773 [DEBUG] [Thread-7257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:58:26.773 [DEBUG] [Thread-7257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:58:26.773 [DEBUG] [Thread-7257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:58:26.773 [DEBUG] [Thread-7257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:58:26.773 [DEBUG] [Thread-7257] [transport.py] [_log()] Compression: none
2025-11-25T22:58:26.773 [DEBUG] [Thread-7257] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:58:26.791 [DEBUG] [Thread-7257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:58:26.791 [DEBUG] [Thread-7257] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:58:26.792 [DEBUG] [Thread-7257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:58:26.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:58:26.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:58:26.794 [DEBUG] [Thread-7257] [transport.py] [_log()] userauth is OK
2025-11-25T22:58:26.794 [DEBUG] [Thread-7257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:58:26.794 [DEBUG] [Thread-7257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:58:26.794 [DEBUG] [Thread-7257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:58:26.794 [DEBUG] [Thread-7257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:58:26.813 [INFO] [Thread-7257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:58:26.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:58:27.112 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:27.593 [DEBUG] [Thread-7257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:58:27.593 [DEBUG] [Thread-7257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:58:27.593 [DEBUG] [Thread-7257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:58:27.634 [DEBUG] [Thread-7257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:58:27.634 [DEBUG] [Thread-7257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:58:27.637 [DEBUG] [Thread-7257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:58:27.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:58:27.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:58:27.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:58:27.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:58:27.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:58:27.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:58:27.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:58:27.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:58:27.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:58:27.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.873362 -999.00  +20.60   7.48     18   -4.10 1 1 1 1 1     0    0 25.40 18.69 ZNESW 8.8 7.5 146.2 12.5 20.1 -25.6 20.1 -25.2 19.8 -23.8 20.0 -24.8
2025-11-25T22:58:27.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:58:27.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:58:27.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.873362
2025-11-25T22:58:27.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:58:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:58:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:58:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:58:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:58:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:58:15', tmtdew=28.98, humidity=13.33, cloud=0.0, wind=9.25, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:58:15', seeing=0.91, atlas_timestamp='2025-11-25T20:57:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.014249999999998764, 0.013250000000001094, -0.019000000000001904, 0.0495000000000001, 0.06725000000000136, 0.030999999999998806, 0.01624999999999943, 0.019499999999998963, 0.0235000000000003, 0.060249999999999915, -0.028999999999999915, 0.0649999999999995, 0.0857499999999991, 0.041499999999999204, 0.00849999999999973, -0.0022500000000000853, 0.028499999999999304, 0.03500000000000014, 0.01524999999999821, 0.08749999999999858, 0.04224999999999923, 0.026750000000001606, 0.024750000000000938, -0.023000000000001464, 0.018000000000000682, 0.060750000000000526, 0.022499999999999076, 0.15249999999999986, 0.09300000000000175, 0.06800000000000139, -0.012000000000000455, -0.016250000000001208], zp_timestamp='2025-11-25T20:55:00')
2025-11-25T22:58:27.669 [DEBUG] [Thread-7257] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:58:27.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:58:27.764 [DEBUG] [Thread-7260] [transport.py] [_log()] starting thread (client mode): 0x70d38e80
2025-11-25T22:58:27.764 [DEBUG] [Thread-7260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:58:27.778 [DEBUG] [Thread-7260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:58:27.779 [INFO] [Thread-7260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] client lang: <none>
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] server lang: <none>
2025-11-25T22:58:27.787 [DEBUG] [Thread-7260] [transport.py] [_log()] kex follows: False
2025-11-25T22:58:27.788 [DEBUG] [Thread-7260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:58:27.788 [DEBUG] [Thread-7260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:58:27.788 [DEBUG] [Thread-7260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:58:27.788 [DEBUG] [Thread-7260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:58:27.788 [DEBUG] [Thread-7260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:58:27.788 [DEBUG] [Thread-7260] [transport.py] [_log()] Compression: none
2025-11-25T22:58:27.788 [DEBUG] [Thread-7260] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:58:27.846 [DEBUG] [Thread-7260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:58:27.846 [DEBUG] [Thread-7260] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:58:27.847 [DEBUG] [Thread-7260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:58:27.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:58:27.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:58:27.902 [DEBUG] [Thread-7260] [transport.py] [_log()] userauth is OK
2025-11-25T22:58:27.902 [DEBUG] [Thread-7260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:58:27.902 [DEBUG] [Thread-7260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:58:27.903 [DEBUG] [Thread-7260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:58:27.903 [DEBUG] [Thread-7260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:58:27.922 [INFO] [Thread-7260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:58:27.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:58:27.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:58:28.748 [DEBUG] [Thread-7260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:58:28.749 [DEBUG] [Thread-7260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:58:28.797 [DEBUG] [Thread-7260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:58:28.797 [DEBUG] [Thread-7260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:58:28.807 [DEBUG] [Thread-7260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:58:28.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:58:28.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:58:28.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:58:28.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:58:28.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:58:28.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:58:28.843 [DEBUG] [Thread-7260] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:58:37.507 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:38.848 [DEBUG] [Thread-7262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:47.926 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:53.897 [DEBUG] [Thread-7263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:58.320 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:58:58.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:58:58.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:58:58.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:58:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 58, 47), 28.92, 13.39, 0.0, 8.49, 20.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:58:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:58:47
2025-11-25T22:58:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:58:59.807 [DEBUG] [Thread-7264] [transport.py] [_log()] starting thread (client mode): 0x70d7eb60
2025-11-25T22:58:59.807 [DEBUG] [Thread-7264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:58:59.826 [DEBUG] [Thread-7264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:58:59.826 [INFO] [Thread-7264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] client lang: <none>
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] server lang: <none>
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] kex follows: False
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] Compression: none
2025-11-25T22:58:59.830 [DEBUG] [Thread-7264] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:58:59.839 [DEBUG] [Thread-7264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:58:59.840 [DEBUG] [Thread-7264] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:58:59.840 [DEBUG] [Thread-7264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:58:59.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:58:59.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:58:59.842 [DEBUG] [Thread-7264] [transport.py] [_log()] userauth is OK
2025-11-25T22:58:59.842 [DEBUG] [Thread-7264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:58:59.842 [DEBUG] [Thread-7264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:58:59.842 [DEBUG] [Thread-7264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:58:59.842 [DEBUG] [Thread-7264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:58:59.878 [INFO] [Thread-7264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:58:59.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:59:00.521 [DEBUG] [Thread-7264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:59:00.522 [DEBUG] [Thread-7264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:59:00.522 [DEBUG] [Thread-7264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:59:00.562 [DEBUG] [Thread-7264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:59:00.563 [DEBUG] [Thread-7264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:59:00.565 [DEBUG] [Thread-7264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:59:00.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:59:00.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:59:00.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:59:00.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:59:00.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:59:00.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:59:00.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:59:00.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:59:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:59:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.873709 -999.00  +20.70   7.55     18   -4.00 1 1 1 1 1     0    0 25.04 18.36 ZNESW 6.8 7.5 153.4 11.1 20.1 -25.6 20.1 -25.2 19.8 -23.9 20.0 -25.0
2025-11-25T22:59:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:59:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:59:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.873709
2025-11-25T22:59:00.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:59:00.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:59:00.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:59:00.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:59:00.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:59:00.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:58:47', tmtdew=28.92, humidity=13.39, cloud=0.0, wind=8.49, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:58:47', seeing=0.91, atlas_timestamp='2025-11-25T20:58:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.014249999999998764, 0.013250000000001094, -0.019000000000001904, 0.0495000000000001, 0.06725000000000136, 0.030999999999998806, 0.01624999999999943, 0.019499999999998963, 0.0235000000000003, 0.060249999999999915, -0.028999999999999915, 0.0649999999999995, 0.0857499999999991, 0.041499999999999204, 0.00849999999999973, -0.0022500000000000853, 0.028499999999999304, 0.03500000000000014, 0.01524999999999821, 0.08749999999999858, 0.04224999999999923, 0.026750000000001606, 0.024750000000000938, -0.023000000000001464, 0.018000000000000682, 0.060750000000000526, 0.022499999999999076, 0.15249999999999986, 0.09300000000000175, 0.06800000000000139, -0.012000000000000455, -0.016250000000001208], zp_timestamp='2025-11-25T20:55:00')
2025-11-25T22:59:00.590 [DEBUG] [Thread-7264] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:59:00.650 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:00.650 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:00.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:59:00.687 [DEBUG] [Thread-7267] [transport.py] [_log()] starting thread (client mode): 0x70da7610
2025-11-25T22:59:00.687 [DEBUG] [Thread-7267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:59:00.702 [DEBUG] [Thread-7267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:59:00.703 [INFO] [Thread-7267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:59:00.712 [DEBUG] [Thread-7267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] client lang: <none>
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] server lang: <none>
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] kex follows: False
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:59:00.713 [DEBUG] [Thread-7267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:59:00.714 [DEBUG] [Thread-7267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:59:00.714 [DEBUG] [Thread-7267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:59:00.714 [DEBUG] [Thread-7267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:59:00.714 [DEBUG] [Thread-7267] [transport.py] [_log()] Compression: none
2025-11-25T22:59:00.714 [DEBUG] [Thread-7267] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:59:00.777 [DEBUG] [Thread-7267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:59:00.777 [DEBUG] [Thread-7267] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:59:00.778 [DEBUG] [Thread-7267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:59:00.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:59:00.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:59:00.835 [DEBUG] [Thread-7267] [transport.py] [_log()] userauth is OK
2025-11-25T22:59:00.835 [DEBUG] [Thread-7267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:59:00.835 [DEBUG] [Thread-7267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:59:00.835 [DEBUG] [Thread-7267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:59:00.835 [DEBUG] [Thread-7267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:59:00.854 [INFO] [Thread-7267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:59:00.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:59:00.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:59:01.702 [DEBUG] [Thread-7267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:59:01.702 [DEBUG] [Thread-7267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:59:01.753 [DEBUG] [Thread-7267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:59:01.754 [DEBUG] [Thread-7267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:59:01.765 [DEBUG] [Thread-7267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:59:01.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:59:01.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:59:01.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:59:01.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:59:01.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:59:01.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:59:01.802 [DEBUG] [Thread-7267] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:59:06.223 [DEBUG] [Thread-7269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:08.698 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:08.928 [DEBUG] [Thread-7270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:19.097 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:23.989 [DEBUG] [Thread-7271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:29.495 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:31.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T22:59:31.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T22:59:31.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T22:59:32.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 59, 19), 28.89, 13.41, 0.0, 8.58, 20.24, 0, 0, 0, 2, 0, 0),)
2025-11-25T22:59:32.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:59:19
2025-11-25T22:59:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T22:59:32.815 [DEBUG] [Thread-7272] [transport.py] [_log()] starting thread (client mode): 0x70d6aa70
2025-11-25T22:59:32.815 [DEBUG] [Thread-7272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:59:32.836 [DEBUG] [Thread-7272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T22:59:32.836 [INFO] [Thread-7272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] client lang: <none>
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] server lang: <none>
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] kex follows: False
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] Compression: none
2025-11-25T22:59:32.839 [DEBUG] [Thread-7272] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:59:32.855 [DEBUG] [Thread-7272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:59:32.855 [DEBUG] [Thread-7272] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:59:32.855 [DEBUG] [Thread-7272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T22:59:32.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T22:59:32.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:59:32.896 [DEBUG] [Thread-7272] [transport.py] [_log()] userauth is OK
2025-11-25T22:59:32.896 [DEBUG] [Thread-7272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:59:32.896 [DEBUG] [Thread-7272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:59:32.897 [DEBUG] [Thread-7272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T22:59:32.897 [DEBUG] [Thread-7272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:59:32.923 [INFO] [Thread-7272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:59:32.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:59:33.739 [DEBUG] [Thread-7272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:59:33.739 [DEBUG] [Thread-7272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:59:33.739 [DEBUG] [Thread-7272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T22:59:33.780 [DEBUG] [Thread-7272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:59:33.780 [DEBUG] [Thread-7272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:59:33.783 [DEBUG] [Thread-7272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:59:33.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:59:33.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T22:59:33.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T22:59:33.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T22:59:33.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:59:33.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T22:59:33.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:59:33.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:59:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T22:59:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.874403 -999.00  +20.70  10.74     18   -4.10 1 1 1 1 1     0    0 24.98 19.84 ZNESW 9.5 10.7 178.8 12.5 20.1 -25.6 20.1 -25.3 19.8 -23.8 20.0 -24.8
2025-11-25T22:59:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T22:59:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T22:59:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.874403
2025-11-25T22:59:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T22:59:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T22:59:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T22:59:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T22:59:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T22:59:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:59:19', tmtdew=28.89, humidity=13.41, cloud=0.0, wind=8.58, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:59:19', seeing=0.88, atlas_timestamp='2025-11-25T20:59:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.014249999999998764, 0.013250000000001094, -0.019000000000001904, 0.0495000000000001, 0.06725000000000136, 0.030999999999998806, 0.01624999999999943, 0.019499999999998963, 0.0235000000000003, 0.060249999999999915, -0.028999999999999915, 0.0649999999999995, 0.0857499999999991, 0.041499999999999204, 0.00849999999999973, -0.0022500000000000853, 0.028499999999999304, 0.03500000000000014, 0.01524999999999821, 0.08749999999999858, 0.04224999999999923, 0.026750000000001606, 0.024750000000000938, -0.023000000000001464, 0.018000000000000682, 0.060750000000000526, 0.022499999999999076, 0.15249999999999986, 0.09300000000000175, 0.06800000000000139, -0.012000000000000455, -0.016250000000001208], zp_timestamp='2025-11-25T20:55:00')
2025-11-25T22:59:33.801 [DEBUG] [Thread-7272] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:59:33.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T22:59:33.889 [DEBUG] [Thread-7275] [transport.py] [_log()] starting thread (client mode): 0x70d6b970
2025-11-25T22:59:33.889 [DEBUG] [Thread-7275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T22:59:33.904 [DEBUG] [Thread-7275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T22:59:33.904 [INFO] [Thread-7275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] client lang: <none>
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] server lang: <none>
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] kex follows: False
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] Compression: none
2025-11-25T22:59:33.912 [DEBUG] [Thread-7275] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T22:59:33.969 [DEBUG] [Thread-7275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T22:59:33.969 [DEBUG] [Thread-7275] [transport.py] [_log()] Switch to new keys ...
2025-11-25T22:59:33.970 [DEBUG] [Thread-7275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T22:59:33.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T22:59:33.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T22:59:34.027 [DEBUG] [Thread-7275] [transport.py] [_log()] userauth is OK
2025-11-25T22:59:34.027 [DEBUG] [Thread-7275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T22:59:34.027 [DEBUG] [Thread-7275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T22:59:34.027 [DEBUG] [Thread-7275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T22:59:34.027 [DEBUG] [Thread-7275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T22:59:34.044 [INFO] [Thread-7275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T22:59:34.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T22:59:34.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T22:59:34.897 [DEBUG] [Thread-7275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T22:59:34.897 [DEBUG] [Thread-7275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T22:59:34.947 [DEBUG] [Thread-7275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T22:59:34.947 [DEBUG] [Thread-7275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T22:59:34.955 [DEBUG] [Thread-7275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T22:59:34.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T22:59:34.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T22:59:34.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T22:59:34.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T22:59:34.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T22:59:34.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T22:59:34.986 [DEBUG] [Thread-7275] [transport.py] [_log()] EOF in transport thread
2025-11-25T22:59:39.024 [DEBUG] [Thread-7277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:39.873 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:50.269 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T22:59:54.079 [DEBUG] [Thread-7278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:00.669 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:00.853 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:00.855 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:05.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:00:05.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:00:05.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:00:05.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 22, 59, 51), 28.75, 13.44, 0.0, 10.62, 20.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:00:05.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 22:59:51
2025-11-25T23:00:05.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:00:05.961 [DEBUG] [Thread-7279] [transport.py] [_log()] starting thread (client mode): 0x70d6bb50
2025-11-25T23:00:05.961 [DEBUG] [Thread-7279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:00:05.982 [DEBUG] [Thread-7279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:00:05.982 [INFO] [Thread-7279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:00:05.983 [DEBUG] [Thread-7279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] client lang: <none>
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] server lang: <none>
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] kex follows: False
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] Compression: none
2025-11-25T23:00:05.984 [DEBUG] [Thread-7279] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:00:05.997 [DEBUG] [Thread-7279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:00:05.997 [DEBUG] [Thread-7279] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:00:05.998 [DEBUG] [Thread-7279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:00:05.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:00:05.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:00:06.000 [DEBUG] [Thread-7279] [transport.py] [_log()] userauth is OK
2025-11-25T23:00:06.000 [DEBUG] [Thread-7279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:00:06.000 [DEBUG] [Thread-7279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:00:06.000 [DEBUG] [Thread-7279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:00:06.000 [DEBUG] [Thread-7279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:00:06.024 [INFO] [Thread-7279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:00:06.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:00:06.303 [DEBUG] [Thread-7281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:08.543 [DEBUG] [Thread-7279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:00:08.543 [DEBUG] [Thread-7279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:00:08.543 [DEBUG] [Thread-7279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:00:08.583 [DEBUG] [Thread-7279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:00:08.583 [DEBUG] [Thread-7279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:00:08.585 [DEBUG] [Thread-7279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:00:08.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:00:08.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:00:08.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:00:08.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:00:08.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:00:08.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:00:08.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:00:08.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:00:08.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.874751 -999.00  +20.70  10.41     18   -4.10 1 1 1 1 1     0    0 25.41 21.64 ZNESW 9.6 10.4 168.6 13.4 20.1 -25.7 20.2 -25.2 19.8 -23.8 20.0 -24.9
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.874751
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:00:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T22:59:51', tmtdew=28.75, humidity=13.44, cloud=0.0, wind=10.62, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T22:59:51', seeing=0.88, atlas_timestamp='2025-11-25T20:59:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.014249999999998764, 0.013250000000001094, -0.019000000000001904, 0.0495000000000001, 0.06725000000000136, 0.030999999999998806, 0.01624999999999943, 0.019499999999998963, 0.0235000000000003, 0.060249999999999915, -0.028999999999999915, 0.0649999999999995, 0.0857499999999991, 0.041499999999999204, 0.00849999999999973, -0.0022500000000000853, 0.028499999999999304, 0.03500000000000014, 0.01524999999999821, 0.08749999999999858, 0.04224999999999923, 0.026750000000001606, 0.024750000000000938, -0.023000000000001464, 0.018000000000000682, 0.060750000000000526, 0.022499999999999076, 0.15249999999999986, 0.09300000000000175, 0.06800000000000139, -0.012000000000000455, -0.016250000000001208], zp_timestamp='2025-11-25T20:55:00')
2025-11-25T23:00:08.611 [DEBUG] [Thread-7279] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:00:08.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:00:08.696 [DEBUG] [Thread-7283] [transport.py] [_log()] starting thread (client mode): 0x70d3b5b0
2025-11-25T23:00:08.696 [DEBUG] [Thread-7283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:00:08.711 [DEBUG] [Thread-7283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:00:08.711 [INFO] [Thread-7283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:00:08.722 [DEBUG] [Thread-7283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:00:08.722 [DEBUG] [Thread-7283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:00:08.722 [DEBUG] [Thread-7283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] client lang: <none>
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] server lang: <none>
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] kex follows: False
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] Compression: none
2025-11-25T23:00:08.723 [DEBUG] [Thread-7283] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:00:08.777 [DEBUG] [Thread-7283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:00:08.777 [DEBUG] [Thread-7283] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:00:08.777 [DEBUG] [Thread-7283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:00:08.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:00:08.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:00:08.835 [DEBUG] [Thread-7283] [transport.py] [_log()] userauth is OK
2025-11-25T23:00:08.835 [DEBUG] [Thread-7283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:00:08.835 [DEBUG] [Thread-7283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:00:08.835 [DEBUG] [Thread-7283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:00:08.835 [DEBUG] [Thread-7283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:00:08.853 [INFO] [Thread-7283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:00:08.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:00:08.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:00:09.111 [DEBUG] [Thread-7285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:09.675 [DEBUG] [Thread-7283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:00:09.675 [DEBUG] [Thread-7283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:00:09.725 [DEBUG] [Thread-7283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:00:09.725 [DEBUG] [Thread-7283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:00:09.737 [DEBUG] [Thread-7283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:00:09.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:00:09.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:00:09.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:00:09.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:00:09.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:00:09.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:00:09.781 [DEBUG] [Thread-7283] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:00:11.066 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:21.527 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:24.151 [DEBUG] [Thread-7286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:31.931 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:39.185 [DEBUG] [Thread-7287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:39.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:00:39.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:00:39.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:00:40.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 0, 23), 28.76, 13.44, 0.0, 10.98, 20.24, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:00:40.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:00:23
2025-11-25T23:00:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:00:40.739 [DEBUG] [Thread-7288] [transport.py] [_log()] starting thread (client mode): 0x70d6b430
2025-11-25T23:00:40.739 [DEBUG] [Thread-7288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:00:40.759 [DEBUG] [Thread-7288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:00:40.759 [INFO] [Thread-7288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:00:40.762 [DEBUG] [Thread-7288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] client lang: <none>
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] server lang: <none>
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] kex follows: False
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] Compression: none
2025-11-25T23:00:40.763 [DEBUG] [Thread-7288] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:00:40.780 [DEBUG] [Thread-7288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:00:40.781 [DEBUG] [Thread-7288] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:00:40.781 [DEBUG] [Thread-7288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:00:40.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:00:40.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:00:40.783 [DEBUG] [Thread-7288] [transport.py] [_log()] userauth is OK
2025-11-25T23:00:40.783 [DEBUG] [Thread-7288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:00:40.784 [DEBUG] [Thread-7288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:00:40.784 [DEBUG] [Thread-7288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:00:40.784 [DEBUG] [Thread-7288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:00:40.820 [INFO] [Thread-7288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:00:40.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:00:41.448 [DEBUG] [Thread-7288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:00:41.449 [DEBUG] [Thread-7288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:00:41.449 [DEBUG] [Thread-7288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:00:41.490 [DEBUG] [Thread-7288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:00:41.490 [DEBUG] [Thread-7288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:00:41.493 [DEBUG] [Thread-7288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:00:41.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:00:41.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:00:41.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:00:41.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:00:41.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:00:41.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:00:41.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:00:41.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:00:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:00:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.875098 -999.00  +20.70   7.98     18   -4.10 1 1 1 1 1     0    0 25.21 21.21 ZNESW 8.6 8.0 169.4 10.9 20.2 -25.8 20.1 -25.3 19.8 -24.0 20.0 -24.8
2025-11-25T23:00:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:00:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:00:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.875098
2025-11-25T23:00:41.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:00:41.518 [DEBUG] [Thread-7288] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:00:41.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:00:41.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:00:41.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:00:41.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:00:41.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:00:23', tmtdew=28.76, humidity=13.44, cloud=0.0, wind=10.98, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:00:23', seeing=1.07, atlas_timestamp='2025-11-25T21:00:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.014249999999998764, 0.013250000000001094, -0.019000000000001904, 0.0495000000000001, 0.06725000000000136, 0.030999999999998806, 0.01624999999999943, 0.019499999999998963, 0.0235000000000003, 0.060249999999999915, -0.028999999999999915, 0.0649999999999995, 0.0857499999999991, 0.041499999999999204, 0.00849999999999973, -0.0022500000000000853, 0.028499999999999304, 0.03500000000000014, 0.01524999999999821, 0.08749999999999858, 0.04224999999999923, 0.026750000000001606, 0.024750000000000938, -0.023000000000001464, 0.018000000000000682, 0.060750000000000526, 0.022499999999999076, 0.15249999999999986, 0.09300000000000175, 0.06800000000000139, -0.012000000000000455, -0.016250000000001208], zp_timestamp='2025-11-25T20:55:00')
2025-11-25T23:00:41.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:00:41.612 [DEBUG] [Thread-7291] [transport.py] [_log()] starting thread (client mode): 0x70d6b4f0
2025-11-25T23:00:41.612 [DEBUG] [Thread-7291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:00:41.627 [DEBUG] [Thread-7291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:00:41.627 [INFO] [Thread-7291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:00:41.635 [DEBUG] [Thread-7291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:00:41.635 [DEBUG] [Thread-7291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:00:41.635 [DEBUG] [Thread-7291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] client lang: <none>
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] server lang: <none>
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] kex follows: False
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:00:41.636 [DEBUG] [Thread-7291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:00:41.637 [DEBUG] [Thread-7291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:00:41.637 [DEBUG] [Thread-7291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:00:41.637 [DEBUG] [Thread-7291] [transport.py] [_log()] Compression: none
2025-11-25T23:00:41.637 [DEBUG] [Thread-7291] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:00:41.697 [DEBUG] [Thread-7291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:00:41.698 [DEBUG] [Thread-7291] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:00:41.698 [DEBUG] [Thread-7291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:00:41.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:00:41.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:00:41.756 [DEBUG] [Thread-7291] [transport.py] [_log()] userauth is OK
2025-11-25T23:00:41.756 [DEBUG] [Thread-7291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:00:41.756 [DEBUG] [Thread-7291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:00:41.757 [DEBUG] [Thread-7291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:00:41.757 [DEBUG] [Thread-7291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:00:41.775 [INFO] [Thread-7291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:00:41.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:00:41.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:00:42.359 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:42.573 [DEBUG] [Thread-7291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:00:42.574 [DEBUG] [Thread-7291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:00:42.621 [DEBUG] [Thread-7291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:00:42.621 [DEBUG] [Thread-7291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:00:42.631 [DEBUG] [Thread-7291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:00:42.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:00:42.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:00:42.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:00:42.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:00:42.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:00:42.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:00:42.668 [DEBUG] [Thread-7291] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:00:52.764 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:00:54.219 [DEBUG] [Thread-7293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:01.059 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:01.060 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:03.180 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:06.389 [DEBUG] [Thread-7294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:09.258 [DEBUG] [Thread-7295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:12.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:01:12.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:01:12.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:01:13.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 0, 55), 28.82, 13.42, 0.0, 8.4, 20.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:01:13.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:00:55
2025-11-25T23:01:13.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:01:13.576 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:13.633 [DEBUG] [Thread-7296] [transport.py] [_log()] starting thread (client mode): 0x70d77c10
2025-11-25T23:01:13.634 [DEBUG] [Thread-7296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:01:13.654 [DEBUG] [Thread-7296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:01:13.654 [INFO] [Thread-7296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:01:13.657 [DEBUG] [Thread-7296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:01:13.657 [DEBUG] [Thread-7296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] client lang: <none>
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] server lang: <none>
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] kex follows: False
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] Compression: none
2025-11-25T23:01:13.658 [DEBUG] [Thread-7296] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:01:13.677 [DEBUG] [Thread-7296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:01:13.677 [DEBUG] [Thread-7296] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:01:13.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:01:13.678 [DEBUG] [Thread-7296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:01:13.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:01:13.680 [DEBUG] [Thread-7296] [transport.py] [_log()] userauth is OK
2025-11-25T23:01:13.681 [DEBUG] [Thread-7296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:01:13.681 [DEBUG] [Thread-7296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:01:13.681 [DEBUG] [Thread-7296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:01:13.681 [DEBUG] [Thread-7296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:01:13.714 [INFO] [Thread-7296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:01:13.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:01:14.308 [DEBUG] [Thread-7296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:01:14.308 [DEBUG] [Thread-7296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:01:14.309 [DEBUG] [Thread-7296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:01:14.350 [DEBUG] [Thread-7296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:01:14.350 [DEBUG] [Thread-7296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:01:14.354 [DEBUG] [Thread-7296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:01:14.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:01:14.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:01:14.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:01:14.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:01:14.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:01:14.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:01:14.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:01:14.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:01:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:01:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.875445 -999.00  +20.70   7.07     18   -4.10 1 1 1 1 1     0    0 25.74 24.02 ZNESW 7.1 7.1 163.8 8.7 20.1 -25.8 20.1 -25.4 19.8 -23.9 20.0 -25.0
2025-11-25T23:01:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:01:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:01:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.875445
2025-11-25T23:01:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:01:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:01:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:01:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:01:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:01:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:00:55', tmtdew=28.82, humidity=13.42, cloud=0.0, wind=8.4, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:00:55', seeing=0.86, atlas_timestamp='2025-11-25T21:00:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T20:59:00')
2025-11-25T23:01:14.382 [DEBUG] [Thread-7296] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:01:14.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:01:14.479 [DEBUG] [Thread-7299] [transport.py] [_log()] starting thread (client mode): 0x70d74a00
2025-11-25T23:01:14.479 [DEBUG] [Thread-7299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:01:14.495 [DEBUG] [Thread-7299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:01:14.495 [INFO] [Thread-7299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] client lang: <none>
2025-11-25T23:01:14.503 [DEBUG] [Thread-7299] [transport.py] [_log()] server lang: <none>
2025-11-25T23:01:14.504 [DEBUG] [Thread-7299] [transport.py] [_log()] kex follows: False
2025-11-25T23:01:14.504 [DEBUG] [Thread-7299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:01:14.504 [DEBUG] [Thread-7299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:01:14.504 [DEBUG] [Thread-7299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:01:14.504 [DEBUG] [Thread-7299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:01:14.504 [DEBUG] [Thread-7299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:01:14.504 [DEBUG] [Thread-7299] [transport.py] [_log()] Compression: none
2025-11-25T23:01:14.504 [DEBUG] [Thread-7299] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:01:14.561 [DEBUG] [Thread-7299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:01:14.562 [DEBUG] [Thread-7299] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:01:14.563 [DEBUG] [Thread-7299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:01:14.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:01:14.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:01:14.617 [DEBUG] [Thread-7299] [transport.py] [_log()] userauth is OK
2025-11-25T23:01:14.618 [DEBUG] [Thread-7299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:01:14.618 [DEBUG] [Thread-7299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:01:14.618 [DEBUG] [Thread-7299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:01:14.618 [DEBUG] [Thread-7299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:01:14.636 [INFO] [Thread-7299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:01:14.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:01:14.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:01:15.444 [DEBUG] [Thread-7299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:01:15.444 [DEBUG] [Thread-7299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:01:15.492 [DEBUG] [Thread-7299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:01:15.492 [DEBUG] [Thread-7299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:01:15.501 [DEBUG] [Thread-7299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:01:15.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:01:15.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:01:15.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:01:15.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:01:15.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:01:15.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:01:15.538 [DEBUG] [Thread-7299] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:01:23.975 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:24.292 [DEBUG] [Thread-7301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:34.370 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:39.342 [DEBUG] [Thread-7302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:44.814 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:45.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:01:45.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:01:45.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:01:46.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 1, 27), 28.77, 13.46, 0.0, 8.84, 20.12, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:01:46.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:01:27
2025-11-25T23:01:46.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:01:46.467 [DEBUG] [Thread-7303] [transport.py] [_log()] starting thread (client mode): 0x70d54e50
2025-11-25T23:01:46.467 [DEBUG] [Thread-7303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:01:46.487 [DEBUG] [Thread-7303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:01:46.488 [INFO] [Thread-7303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:01:46.490 [DEBUG] [Thread-7303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] client lang: <none>
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] server lang: <none>
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] kex follows: False
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] Compression: none
2025-11-25T23:01:46.491 [DEBUG] [Thread-7303] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:01:46.509 [DEBUG] [Thread-7303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:01:46.510 [DEBUG] [Thread-7303] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:01:46.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:01:46.511 [DEBUG] [Thread-7303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:01:46.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:01:46.553 [DEBUG] [Thread-7303] [transport.py] [_log()] userauth is OK
2025-11-25T23:01:46.553 [DEBUG] [Thread-7303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:01:46.553 [DEBUG] [Thread-7303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:01:46.554 [DEBUG] [Thread-7303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:01:46.554 [DEBUG] [Thread-7303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:01:46.585 [INFO] [Thread-7303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:01:46.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:01:47.335 [DEBUG] [Thread-7303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:01:47.336 [DEBUG] [Thread-7303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:01:47.336 [DEBUG] [Thread-7303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:01:47.377 [DEBUG] [Thread-7303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:01:47.377 [DEBUG] [Thread-7303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:01:47.380 [DEBUG] [Thread-7303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:01:47.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:01:47.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:01:47.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:01:47.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:01:47.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:01:47.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:01:47.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:01:47.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:01:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:01:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.875792 -999.00  +20.70   7.10     18   -4.00 1 1 1 1 1     0    0 25.87 25.90 ZNESW 6.2 7.1 155.0 8.1 20.2 -25.8 20.1 -25.3 19.9 -24.0 20.0 -24.9
2025-11-25T23:01:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:01:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:01:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.875792
2025-11-25T23:01:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:01:47.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:01:47.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:01:47.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:01:47.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:01:47.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:01:27', tmtdew=28.77, humidity=13.46, cloud=0.0, wind=8.84, temperature=20.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:01:27', seeing=0.78, atlas_timestamp='2025-11-25T21:01:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T20:59:00')
2025-11-25T23:01:47.407 [DEBUG] [Thread-7303] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:01:47.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:01:47.505 [DEBUG] [Thread-7306] [transport.py] [_log()] starting thread (client mode): 0x70d55db0
2025-11-25T23:01:47.505 [DEBUG] [Thread-7306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:01:47.520 [DEBUG] [Thread-7306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:01:47.520 [INFO] [Thread-7306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:01:47.527 [DEBUG] [Thread-7306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] client lang: <none>
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] server lang: <none>
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] kex follows: False
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:01:47.528 [DEBUG] [Thread-7306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:01:47.529 [DEBUG] [Thread-7306] [transport.py] [_log()] Compression: none
2025-11-25T23:01:47.529 [DEBUG] [Thread-7306] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:01:47.586 [DEBUG] [Thread-7306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:01:47.586 [DEBUG] [Thread-7306] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:01:47.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:01:47.587 [DEBUG] [Thread-7306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:01:47.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:01:47.642 [DEBUG] [Thread-7306] [transport.py] [_log()] userauth is OK
2025-11-25T23:01:47.642 [DEBUG] [Thread-7306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:01:47.642 [DEBUG] [Thread-7306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:01:47.642 [DEBUG] [Thread-7306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:01:47.643 [DEBUG] [Thread-7306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:01:47.662 [INFO] [Thread-7306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:01:47.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:01:47.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:01:48.511 [DEBUG] [Thread-7306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:01:48.511 [DEBUG] [Thread-7306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:01:48.559 [DEBUG] [Thread-7306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:01:48.559 [DEBUG] [Thread-7306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:01:48.568 [DEBUG] [Thread-7306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:01:48.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:01:48.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:01:48.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:01:48.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:01:48.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:01:48.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:01:48.605 [DEBUG] [Thread-7306] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:01:54.380 [DEBUG] [Thread-7308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:01:55.201 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:01.263 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:01.263 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:05.600 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:06.458 [DEBUG] [Thread-7309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:09.433 [DEBUG] [Thread-7310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:16.064 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:18.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:02:18.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:02:18.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:02:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 1, 59), 28.76, 13.49, 0.0, 8.82, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:02:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:01:59
2025-11-25T23:02:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:02:19.536 [DEBUG] [Thread-7311] [transport.py] [_log()] starting thread (client mode): 0x70d6b730
2025-11-25T23:02:19.536 [DEBUG] [Thread-7311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:02:19.557 [DEBUG] [Thread-7311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:02:19.557 [INFO] [Thread-7311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:02:19.560 [DEBUG] [Thread-7311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:02:19.561 [DEBUG] [Thread-7311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:02:19.561 [DEBUG] [Thread-7311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:02:19.561 [DEBUG] [Thread-7311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:02:19.561 [DEBUG] [Thread-7311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:02:19.561 [DEBUG] [Thread-7311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:02:19.561 [DEBUG] [Thread-7311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:02:19.561 [DEBUG] [Thread-7311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:02:19.561 [DEBUG] [Thread-7311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:02:19.561 [DEBUG] [Thread-7311] [transport.py] [_log()] client lang: <none>
2025-11-25T23:02:19.562 [DEBUG] [Thread-7311] [transport.py] [_log()] server lang: <none>
2025-11-25T23:02:19.562 [DEBUG] [Thread-7311] [transport.py] [_log()] kex follows: False
2025-11-25T23:02:19.562 [DEBUG] [Thread-7311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:02:19.562 [DEBUG] [Thread-7311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:02:19.562 [DEBUG] [Thread-7311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:02:19.562 [DEBUG] [Thread-7311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:02:19.562 [DEBUG] [Thread-7311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:02:19.562 [DEBUG] [Thread-7311] [transport.py] [_log()] Compression: none
2025-11-25T23:02:19.562 [DEBUG] [Thread-7311] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:02:19.582 [DEBUG] [Thread-7311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:02:19.583 [DEBUG] [Thread-7311] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:02:19.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:02:19.584 [DEBUG] [Thread-7311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:02:19.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:02:19.586 [DEBUG] [Thread-7311] [transport.py] [_log()] userauth is OK
2025-11-25T23:02:19.586 [DEBUG] [Thread-7311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:02:19.586 [DEBUG] [Thread-7311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:02:19.586 [DEBUG] [Thread-7311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:02:19.586 [DEBUG] [Thread-7311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:02:19.622 [INFO] [Thread-7311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:02:19.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:02:20.274 [DEBUG] [Thread-7311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:02:20.274 [DEBUG] [Thread-7311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:02:20.274 [DEBUG] [Thread-7311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:02:20.315 [DEBUG] [Thread-7311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:02:20.315 [DEBUG] [Thread-7311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:02:20.318 [DEBUG] [Thread-7311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:02:20.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:02:20.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:02:20.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:02:20.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:02:20.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:02:20.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:02:20.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:02:20.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:02:20.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:02:20.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.876140 -999.00  +20.70   8.19     18   -4.20 1 1 1 1 1     0    0 25.50 28.84 ZNESW 6.7 8.2 157.6 8.9 20.1 -25.8 20.2 -25.4 19.9 -24.0 20.1 -24.9
2025-11-25T23:02:20.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:02:20.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:02:20.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.876140
2025-11-25T23:02:20.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:02:20.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:02:20.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:02:20.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:02:20.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:02:20.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:01:59', tmtdew=28.76, humidity=13.49, cloud=0.0, wind=8.82, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:01:59', seeing=0.82, atlas_timestamp='2025-11-25T21:01:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T20:59:00')
2025-11-25T23:02:20.345 [DEBUG] [Thread-7311] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:02:20.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:02:20.443 [DEBUG] [Thread-7314] [transport.py] [_log()] starting thread (client mode): 0x70d765c0
2025-11-25T23:02:20.443 [DEBUG] [Thread-7314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:02:20.457 [DEBUG] [Thread-7314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:02:20.457 [INFO] [Thread-7314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] client lang: <none>
2025-11-25T23:02:20.465 [DEBUG] [Thread-7314] [transport.py] [_log()] server lang: <none>
2025-11-25T23:02:20.466 [DEBUG] [Thread-7314] [transport.py] [_log()] kex follows: False
2025-11-25T23:02:20.466 [DEBUG] [Thread-7314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:02:20.466 [DEBUG] [Thread-7314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:02:20.466 [DEBUG] [Thread-7314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:02:20.466 [DEBUG] [Thread-7314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:02:20.466 [DEBUG] [Thread-7314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:02:20.466 [DEBUG] [Thread-7314] [transport.py] [_log()] Compression: none
2025-11-25T23:02:20.466 [DEBUG] [Thread-7314] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:02:20.521 [DEBUG] [Thread-7314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:02:20.522 [DEBUG] [Thread-7314] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:02:20.523 [DEBUG] [Thread-7314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:02:20.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:02:20.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:02:20.578 [DEBUG] [Thread-7314] [transport.py] [_log()] userauth is OK
2025-11-25T23:02:20.579 [DEBUG] [Thread-7314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:02:20.579 [DEBUG] [Thread-7314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:02:20.579 [DEBUG] [Thread-7314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:02:20.579 [DEBUG] [Thread-7314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:02:20.597 [INFO] [Thread-7314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:02:20.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:02:20.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:02:21.415 [DEBUG] [Thread-7314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:02:21.415 [DEBUG] [Thread-7314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:02:21.464 [DEBUG] [Thread-7314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:02:21.464 [DEBUG] [Thread-7314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:02:21.473 [DEBUG] [Thread-7314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:02:21.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:02:21.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:02:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:02:21.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:02:21.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:02:21.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:02:21.509 [DEBUG] [Thread-7314] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:02:24.476 [DEBUG] [Thread-7316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:26.470 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:36.883 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:39.523 [DEBUG] [Thread-7317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:47.280 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:51.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:02:51.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:02:51.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:02:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 2, 31), 28.82, 13.42, 0.0, 8.26, 20.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:02:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:02:31
2025-11-25T23:02:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:02:52.433 [DEBUG] [Thread-7318] [transport.py] [_log()] starting thread (client mode): 0x70d6b3d0
2025-11-25T23:02:52.434 [DEBUG] [Thread-7318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:02:52.455 [DEBUG] [Thread-7318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:02:52.455 [INFO] [Thread-7318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] client lang: <none>
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] server lang: <none>
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] kex follows: False
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] Compression: none
2025-11-25T23:02:52.457 [DEBUG] [Thread-7318] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:02:52.466 [DEBUG] [Thread-7318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:02:52.467 [DEBUG] [Thread-7318] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:02:52.467 [DEBUG] [Thread-7318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:02:52.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:02:52.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:02:52.469 [DEBUG] [Thread-7318] [transport.py] [_log()] userauth is OK
2025-11-25T23:02:52.470 [DEBUG] [Thread-7318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:02:52.470 [DEBUG] [Thread-7318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:02:52.470 [DEBUG] [Thread-7318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:02:52.470 [DEBUG] [Thread-7318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:02:52.488 [INFO] [Thread-7318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:02:52.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:02:53.096 [DEBUG] [Thread-7318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:02:53.097 [DEBUG] [Thread-7318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:02:53.097 [DEBUG] [Thread-7318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:02:53.138 [DEBUG] [Thread-7318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:02:53.138 [DEBUG] [Thread-7318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:02:53.141 [DEBUG] [Thread-7318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:02:53.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:02:53.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:02:53.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:02:53.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:02:53.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:02:53.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:02:53.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:02:53.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:02:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:02:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.876487 -999.00  +20.70   6.84     18   -4.10 1 1 1 1 1     0    0 25.34 28.66 ZNESW 5.6 6.8 155.8 8.8 20.2 -25.8 20.1 -25.3 19.8 -24.0 20.1 -24.9
2025-11-25T23:02:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:02:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:02:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.876487
2025-11-25T23:02:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:02:53.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:02:53.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:02:53.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:02:53.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:02:53.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:02:31', tmtdew=28.82, humidity=13.42, cloud=0.0, wind=8.26, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:02:31', seeing=0.94, atlas_timestamp='2025-11-25T21:02:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T20:59:00')
2025-11-25T23:02:53.169 [DEBUG] [Thread-7318] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:02:53.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:02:53.267 [DEBUG] [Thread-7321] [transport.py] [_log()] starting thread (client mode): 0x70d38370
2025-11-25T23:02:53.267 [DEBUG] [Thread-7321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:02:53.282 [DEBUG] [Thread-7321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:02:53.282 [INFO] [Thread-7321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:02:53.290 [DEBUG] [Thread-7321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:02:53.290 [DEBUG] [Thread-7321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:02:53.290 [DEBUG] [Thread-7321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:02:53.290 [DEBUG] [Thread-7321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:02:53.290 [DEBUG] [Thread-7321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:02:53.290 [DEBUG] [Thread-7321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:02:53.290 [DEBUG] [Thread-7321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:02:53.290 [DEBUG] [Thread-7321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:02:53.290 [DEBUG] [Thread-7321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] client lang: <none>
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] server lang: <none>
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] kex follows: False
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] Compression: none
2025-11-25T23:02:53.291 [DEBUG] [Thread-7321] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:02:53.353 [DEBUG] [Thread-7321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:02:53.354 [DEBUG] [Thread-7321] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:02:53.355 [DEBUG] [Thread-7321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:02:53.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:02:53.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:02:53.411 [DEBUG] [Thread-7321] [transport.py] [_log()] userauth is OK
2025-11-25T23:02:53.411 [DEBUG] [Thread-7321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:02:53.411 [DEBUG] [Thread-7321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:02:53.412 [DEBUG] [Thread-7321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:02:53.412 [DEBUG] [Thread-7321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:02:53.430 [INFO] [Thread-7321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:02:53.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:02:53.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:02:54.260 [DEBUG] [Thread-7321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:02:54.260 [DEBUG] [Thread-7321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:02:54.309 [DEBUG] [Thread-7321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:02:54.309 [DEBUG] [Thread-7321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:02:54.318 [DEBUG] [Thread-7321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:02:54.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:02:54.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:02:54.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:02:54.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:02:54.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:02:54.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:02:54.355 [DEBUG] [Thread-7321] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:02:54.554 [DEBUG] [Thread-7323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:02:57.675 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:01.464 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:01.465 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:06.533 [DEBUG] [Thread-7324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:08.073 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:09.603 [DEBUG] [Thread-7325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:18.470 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:03:24.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:03:24.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:03:24.638 [DEBUG] [Thread-7326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 3, 3), 28.88, 13.36, 0.0, 9.46, 20.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:03:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:03:03
2025-11-25T23:03:25.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:03:25.298 [DEBUG] [Thread-7327] [transport.py] [_log()] starting thread (client mode): 0x70d3b9d0
2025-11-25T23:03:25.298 [DEBUG] [Thread-7327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:03:25.316 [DEBUG] [Thread-7327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:03:25.316 [INFO] [Thread-7327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] client lang: <none>
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] server lang: <none>
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] kex follows: False
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] Compression: none
2025-11-25T23:03:25.319 [DEBUG] [Thread-7327] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:03:25.338 [DEBUG] [Thread-7327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:03:25.338 [DEBUG] [Thread-7327] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:03:25.339 [DEBUG] [Thread-7327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:03:25.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:03:25.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:03:25.341 [DEBUG] [Thread-7327] [transport.py] [_log()] userauth is OK
2025-11-25T23:03:25.341 [DEBUG] [Thread-7327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:03:25.341 [DEBUG] [Thread-7327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:03:25.341 [DEBUG] [Thread-7327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:03:25.342 [DEBUG] [Thread-7327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:03:25.367 [INFO] [Thread-7327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:03:25.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:03:26.008 [DEBUG] [Thread-7327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:03:26.008 [DEBUG] [Thread-7327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:03:26.009 [DEBUG] [Thread-7327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:03:26.050 [DEBUG] [Thread-7327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:03:26.050 [DEBUG] [Thread-7327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:03:26.053 [DEBUG] [Thread-7327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:03:26.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:03:26.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:03:26.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:03:26.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:03:26.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:03:26.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:03:26.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:03:26.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:03:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:03:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.877181 -999.00  +20.70   5.43     18   -4.00 1 1 1 1 1     0    0 25.51 29.30 ZNESW 9.2 5.4 151.0 7.6 20.1 -26.0 20.1 -25.4 19.8 -24.0 20.0 -25.2
2025-11-25T23:03:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:03:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:03:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.877181
2025-11-25T23:03:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:03:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:03:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:03:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:03:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:03:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:03:03', tmtdew=28.88, humidity=13.36, cloud=0.0, wind=9.46, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:03:03', seeing=0.83, atlas_timestamp='2025-11-25T21:03:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T20:59:00')
2025-11-25T23:03:26.079 [DEBUG] [Thread-7327] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:03:26.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:03:26.175 [DEBUG] [Thread-7330] [transport.py] [_log()] starting thread (client mode): 0x70d56410
2025-11-25T23:03:26.175 [DEBUG] [Thread-7330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:03:26.189 [DEBUG] [Thread-7330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:03:26.190 [INFO] [Thread-7330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:03:26.197 [DEBUG] [Thread-7330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] client lang: <none>
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] server lang: <none>
2025-11-25T23:03:26.198 [DEBUG] [Thread-7330] [transport.py] [_log()] kex follows: False
2025-11-25T23:03:26.199 [DEBUG] [Thread-7330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:03:26.199 [DEBUG] [Thread-7330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:03:26.199 [DEBUG] [Thread-7330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:03:26.199 [DEBUG] [Thread-7330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:03:26.199 [DEBUG] [Thread-7330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:03:26.199 [DEBUG] [Thread-7330] [transport.py] [_log()] Compression: none
2025-11-25T23:03:26.199 [DEBUG] [Thread-7330] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:03:26.256 [DEBUG] [Thread-7330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:03:26.256 [DEBUG] [Thread-7330] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:03:26.257 [DEBUG] [Thread-7330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:03:26.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:03:26.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:03:26.312 [DEBUG] [Thread-7330] [transport.py] [_log()] userauth is OK
2025-11-25T23:03:26.312 [DEBUG] [Thread-7330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:03:26.312 [DEBUG] [Thread-7330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:03:26.312 [DEBUG] [Thread-7330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:03:26.312 [DEBUG] [Thread-7330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:03:26.331 [INFO] [Thread-7330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:03:26.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:03:26.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:03:27.211 [DEBUG] [Thread-7330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:03:27.212 [DEBUG] [Thread-7330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:03:27.260 [DEBUG] [Thread-7330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:03:27.260 [DEBUG] [Thread-7330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:03:27.270 [DEBUG] [Thread-7330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:03:27.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:03:27.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:03:27.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:03:27.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:03:27.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:03:27.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:03:27.308 [DEBUG] [Thread-7330] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:03:28.867 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:39.262 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:39.673 [DEBUG] [Thread-7332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:49.676 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:54.721 [DEBUG] [Thread-7333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:03:57.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:03:57.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:03:57.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:03:57.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 3, 35), 28.96, 13.37, 0.0, 12.09, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:03:57.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:03:35
2025-11-25T23:03:58.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:03:58.246 [DEBUG] [Thread-7334] [transport.py] [_log()] starting thread (client mode): 0x70d6b040
2025-11-25T23:03:58.246 [DEBUG] [Thread-7334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:03:58.262 [DEBUG] [Thread-7334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:03:58.262 [INFO] [Thread-7334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:03:58.264 [DEBUG] [Thread-7334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:03:58.264 [DEBUG] [Thread-7334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:03:58.264 [DEBUG] [Thread-7334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] client lang: <none>
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] server lang: <none>
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] kex follows: False
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] Compression: none
2025-11-25T23:03:58.265 [DEBUG] [Thread-7334] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:03:58.283 [DEBUG] [Thread-7334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:03:58.284 [DEBUG] [Thread-7334] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:03:58.284 [DEBUG] [Thread-7334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:03:58.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:03:58.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:03:58.287 [DEBUG] [Thread-7334] [transport.py] [_log()] userauth is OK
2025-11-25T23:03:58.287 [DEBUG] [Thread-7334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:03:58.287 [DEBUG] [Thread-7334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:03:58.287 [DEBUG] [Thread-7334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:03:58.287 [DEBUG] [Thread-7334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:03:58.311 [INFO] [Thread-7334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:03:58.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:03:58.959 [DEBUG] [Thread-7334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:03:58.959 [DEBUG] [Thread-7334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:03:58.960 [DEBUG] [Thread-7334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:03:59.001 [DEBUG] [Thread-7334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:03:59.001 [DEBUG] [Thread-7334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:03:59.005 [DEBUG] [Thread-7334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:03:59.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:03:59.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:03:59.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:03:59.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:03:59.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:03:59.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:03:59.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:03:59.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:03:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:03:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.877528 -999.00  +20.70   8.87     18   -4.10 1 1 1 1 1     0    0 26.34 30.61 ZNESW 9.6 8.9 174.2 11.4 20.1 -25.9 20.2 -25.4 19.8 -23.9 20.0 -25.2
2025-11-25T23:03:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:03:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:03:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.877528
2025-11-25T23:03:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:03:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:03:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:03:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:03:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:03:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:03:35', tmtdew=28.96, humidity=13.37, cloud=0.0, wind=12.09, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:03:35', seeing=0.83, atlas_timestamp='2025-11-25T21:03:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T21:02:00')
2025-11-25T23:03:59.032 [DEBUG] [Thread-7334] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:03:59.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:03:59.126 [DEBUG] [Thread-7337] [transport.py] [_log()] starting thread (client mode): 0x70d43940
2025-11-25T23:03:59.126 [DEBUG] [Thread-7337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:03:59.140 [DEBUG] [Thread-7337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:03:59.140 [INFO] [Thread-7337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] client lang: <none>
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] server lang: <none>
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] kex follows: False
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:03:59.148 [DEBUG] [Thread-7337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:03:59.149 [DEBUG] [Thread-7337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:03:59.149 [DEBUG] [Thread-7337] [transport.py] [_log()] Compression: none
2025-11-25T23:03:59.149 [DEBUG] [Thread-7337] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:03:59.208 [DEBUG] [Thread-7337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:03:59.208 [DEBUG] [Thread-7337] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:03:59.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:03:59.209 [DEBUG] [Thread-7337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:03:59.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:03:59.264 [DEBUG] [Thread-7337] [transport.py] [_log()] userauth is OK
2025-11-25T23:03:59.264 [DEBUG] [Thread-7337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:03:59.264 [DEBUG] [Thread-7337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:03:59.265 [DEBUG] [Thread-7337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:03:59.265 [DEBUG] [Thread-7337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:03:59.284 [INFO] [Thread-7337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:03:59.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:03:59.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:04:00.086 [DEBUG] [Thread-7337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:04:00.087 [DEBUG] [Thread-7337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:04:00.094 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:00.135 [DEBUG] [Thread-7337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:04:00.135 [DEBUG] [Thread-7337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:04:00.144 [DEBUG] [Thread-7337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:04:00.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:04:00.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:04:00.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:04:00.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:04:00.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:04:00.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:04:00.181 [DEBUG] [Thread-7337] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:04:01.667 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:01.668 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:06.605 [DEBUG] [Thread-7339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:09.751 [DEBUG] [Thread-7340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:10.513 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:20.953 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:24.793 [DEBUG] [Thread-7341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:04:30.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:04:30.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:04:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 4, 7), 28.99, 13.34, 0.0, 12.16, 20.15, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:04:30.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:04:07
2025-11-25T23:04:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:04:31.172 [DEBUG] [Thread-7342] [transport.py] [_log()] starting thread (client mode): 0x70d56500
2025-11-25T23:04:31.172 [DEBUG] [Thread-7342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:04:31.192 [DEBUG] [Thread-7342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:04:31.192 [INFO] [Thread-7342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] client lang: <none>
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] server lang: <none>
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] kex follows: False
2025-11-25T23:04:31.193 [DEBUG] [Thread-7342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:04:31.194 [DEBUG] [Thread-7342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:04:31.194 [DEBUG] [Thread-7342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:04:31.194 [DEBUG] [Thread-7342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:04:31.194 [DEBUG] [Thread-7342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:04:31.194 [DEBUG] [Thread-7342] [transport.py] [_log()] Compression: none
2025-11-25T23:04:31.194 [DEBUG] [Thread-7342] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:04:31.211 [DEBUG] [Thread-7342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:04:31.211 [DEBUG] [Thread-7342] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:04:31.212 [DEBUG] [Thread-7342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:04:31.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:04:31.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:04:31.213 [DEBUG] [Thread-7342] [transport.py] [_log()] userauth is OK
2025-11-25T23:04:31.213 [DEBUG] [Thread-7342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:04:31.213 [DEBUG] [Thread-7342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:04:31.213 [DEBUG] [Thread-7342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:04:31.213 [DEBUG] [Thread-7342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:04:31.222 [INFO] [Thread-7342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:04:31.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:04:31.380 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:31.879 [DEBUG] [Thread-7342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:04:31.880 [DEBUG] [Thread-7342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:04:31.880 [DEBUG] [Thread-7342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:04:31.920 [DEBUG] [Thread-7342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:04:31.921 [DEBUG] [Thread-7342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:04:31.923 [DEBUG] [Thread-7342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:04:31.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:04:31.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:04:31.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:04:31.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:04:31.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:04:31.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:04:31.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:04:31.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:04:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.877876 -999.00  +20.60   5.05     18   -4.10 1 1 1 1 1     0    0 25.76 31.09 ZNESW 6.2 5.0 159.0 9.6 20.1 -26.0 20.1 -25.5 19.8 -24.2 20.0 -25.1
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.877876
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:04:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:04:07', tmtdew=28.99, humidity=13.34, cloud=0.0, wind=12.16, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:04:07', seeing=1.02, atlas_timestamp='2025-11-25T21:04:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T21:02:00')
2025-11-25T23:04:31.942 [DEBUG] [Thread-7342] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:04:32.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:04:32.025 [DEBUG] [Thread-7345] [transport.py] [_log()] starting thread (client mode): 0x70d569b0
2025-11-25T23:04:32.025 [DEBUG] [Thread-7345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:04:32.040 [DEBUG] [Thread-7345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:04:32.040 [INFO] [Thread-7345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] client lang: <none>
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] server lang: <none>
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] kex follows: False
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] Compression: none
2025-11-25T23:04:32.048 [DEBUG] [Thread-7345] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:04:32.109 [DEBUG] [Thread-7345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:04:32.109 [DEBUG] [Thread-7345] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:04:32.109 [DEBUG] [Thread-7345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:04:32.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:04:32.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:04:32.168 [DEBUG] [Thread-7345] [transport.py] [_log()] userauth is OK
2025-11-25T23:04:32.168 [DEBUG] [Thread-7345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:04:32.168 [DEBUG] [Thread-7345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:04:32.168 [DEBUG] [Thread-7345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:04:32.168 [DEBUG] [Thread-7345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:04:32.181 [INFO] [Thread-7345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:04:32.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:04:32.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:04:33.009 [DEBUG] [Thread-7345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:04:33.010 [DEBUG] [Thread-7345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:04:33.057 [DEBUG] [Thread-7345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:04:33.057 [DEBUG] [Thread-7345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:04:33.065 [DEBUG] [Thread-7345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:04:33.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:04:33.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:04:33.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:04:33.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:04:33.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:04:33.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:04:33.103 [DEBUG] [Thread-7345] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:04:39.825 [DEBUG] [Thread-7347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:41.812 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:52.218 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:04:54.873 [DEBUG] [Thread-7348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:01.870 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:01.871 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:02.637 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:03.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:05:03.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:05:03.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:05:03.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 4, 39), 28.95, 13.39, 0.0, 11.77, 20.2, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:05:03.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:04:39
2025-11-25T23:05:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:05:04.064 [DEBUG] [Thread-7349] [transport.py] [_log()] starting thread (client mode): 0x70d68160
2025-11-25T23:05:04.064 [DEBUG] [Thread-7349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:05:04.084 [DEBUG] [Thread-7349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:05:04.084 [INFO] [Thread-7349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:05:04.087 [DEBUG] [Thread-7349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:05:04.087 [DEBUG] [Thread-7349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:05:04.087 [DEBUG] [Thread-7349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] client lang: <none>
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] server lang: <none>
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] kex follows: False
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] Compression: none
2025-11-25T23:05:04.088 [DEBUG] [Thread-7349] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:05:04.105 [DEBUG] [Thread-7349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:05:04.105 [DEBUG] [Thread-7349] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:05:04.106 [DEBUG] [Thread-7349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:05:04.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:05:04.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:05:04.108 [DEBUG] [Thread-7349] [transport.py] [_log()] userauth is OK
2025-11-25T23:05:04.108 [DEBUG] [Thread-7349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:05:04.108 [DEBUG] [Thread-7349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:05:04.108 [DEBUG] [Thread-7349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:05:04.108 [DEBUG] [Thread-7349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:05:04.132 [INFO] [Thread-7349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:05:04.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:05:05.415 [DEBUG] [Thread-7349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:05:05.415 [DEBUG] [Thread-7349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:05:05.416 [DEBUG] [Thread-7349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:05:05.455 [DEBUG] [Thread-7349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:05:05.455 [DEBUG] [Thread-7349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:05:05.458 [DEBUG] [Thread-7349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:05:05.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:05:05.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:05:05.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:05:05.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:05:05.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:05:05.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:05:05.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:05:05.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:05:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:05:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.878223 -999.00  +20.60   7.85     18   -4.30 1 1 1 1 1     0    0 25.57 27.82 ZNESW 6.3 7.8 164.0 8.9 20.1 -25.9 20.1 -25.4 19.8 -24.0 20.0 -25.2
2025-11-25T23:05:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:05:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:05:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.878223
2025-11-25T23:05:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:05:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:05:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:05:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:05:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:05:05.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:04:39', tmtdew=28.95, humidity=13.39, cloud=0.0, wind=11.77, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:04:39', seeing=1.01, atlas_timestamp='2025-11-25T21:04:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T21:02:00')
2025-11-25T23:05:05.506 [DEBUG] [Thread-7349] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:05:05.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:05:05.602 [DEBUG] [Thread-7352] [transport.py] [_log()] starting thread (client mode): 0x70d6bb80
2025-11-25T23:05:05.602 [DEBUG] [Thread-7352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:05:05.618 [DEBUG] [Thread-7352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:05:05.618 [INFO] [Thread-7352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:05:05.625 [DEBUG] [Thread-7352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] client lang: <none>
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] server lang: <none>
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] kex follows: False
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] Compression: none
2025-11-25T23:05:05.626 [DEBUG] [Thread-7352] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:05:05.685 [DEBUG] [Thread-7352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:05:05.686 [DEBUG] [Thread-7352] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:05:05.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:05:05.687 [DEBUG] [Thread-7352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:05:05.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:05:05.741 [DEBUG] [Thread-7352] [transport.py] [_log()] userauth is OK
2025-11-25T23:05:05.742 [DEBUG] [Thread-7352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:05:05.742 [DEBUG] [Thread-7352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:05:05.742 [DEBUG] [Thread-7352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:05:05.742 [DEBUG] [Thread-7352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:05:05.760 [INFO] [Thread-7352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:05:05.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:05:05.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:05:06.613 [DEBUG] [Thread-7352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:05:06.613 [DEBUG] [Thread-7352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:05:06.661 [DEBUG] [Thread-7352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:05:06.661 [DEBUG] [Thread-7352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:05:06.669 [DEBUG] [Thread-7352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:05:06.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:05:06.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:05:06.684 [DEBUG] [Thread-7354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:06.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:05:06.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:05:06.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:05:06.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:05:06.701 [DEBUG] [Thread-7352] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:05:09.904 [DEBUG] [Thread-7355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:13.065 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:23.522 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:24.942 [DEBUG] [Thread-7356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:33.973 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:36.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:05:36.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:05:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:05:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 5, 11), 29.06, 13.28, 0.0, 12.11, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:05:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:05:11
2025-11-25T23:05:37.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:05:37.637 [DEBUG] [Thread-7357] [transport.py] [_log()] starting thread (client mode): 0x70d6bfa0
2025-11-25T23:05:37.637 [DEBUG] [Thread-7357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:05:37.652 [DEBUG] [Thread-7357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:05:37.652 [INFO] [Thread-7357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] client lang: <none>
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] server lang: <none>
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] kex follows: False
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] Compression: none
2025-11-25T23:05:37.655 [DEBUG] [Thread-7357] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:05:37.673 [DEBUG] [Thread-7357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:05:37.673 [DEBUG] [Thread-7357] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:05:37.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:05:37.674 [DEBUG] [Thread-7357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:05:37.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:05:37.676 [DEBUG] [Thread-7357] [transport.py] [_log()] userauth is OK
2025-11-25T23:05:37.676 [DEBUG] [Thread-7357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:05:37.677 [DEBUG] [Thread-7357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:05:37.677 [DEBUG] [Thread-7357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:05:37.677 [DEBUG] [Thread-7357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:05:37.694 [INFO] [Thread-7357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:05:37.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:05:38.334 [DEBUG] [Thread-7357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:05:38.335 [DEBUG] [Thread-7357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:05:38.335 [DEBUG] [Thread-7357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:05:38.376 [DEBUG] [Thread-7357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:05:38.376 [DEBUG] [Thread-7357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:05:38.379 [DEBUG] [Thread-7357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:05:38.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:05:38.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:05:38.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:05:38.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:05:38.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:05:38.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:05:38.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:05:38.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:05:38.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:05:38.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.878570 -999.00  +20.60   6.66     18   -4.30 1 1 1 1 1     0    0 25.81 29.10 ZNESW 6.7 6.7 160.4 8.8 20.1 -25.9 20.1 -25.3 19.8 -24.0 20.0 -25.1
2025-11-25T23:05:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:05:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:05:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.878570
2025-11-25T23:05:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:05:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:05:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:05:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:05:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:05:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:05:11', tmtdew=29.06, humidity=13.28, cloud=0.0, wind=12.11, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:05:11', seeing=1.0, atlas_timestamp='2025-11-25T21:05:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T21:02:00')
2025-11-25T23:05:38.410 [DEBUG] [Thread-7357] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:05:38.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:05:38.504 [DEBUG] [Thread-7360] [transport.py] [_log()] starting thread (client mode): 0x70da7250
2025-11-25T23:05:38.505 [DEBUG] [Thread-7360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:05:38.519 [DEBUG] [Thread-7360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:05:38.519 [INFO] [Thread-7360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] client lang: <none>
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] server lang: <none>
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] kex follows: False
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:05:38.527 [DEBUG] [Thread-7360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:05:38.528 [DEBUG] [Thread-7360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:05:38.528 [DEBUG] [Thread-7360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:05:38.528 [DEBUG] [Thread-7360] [transport.py] [_log()] Compression: none
2025-11-25T23:05:38.528 [DEBUG] [Thread-7360] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:05:38.585 [DEBUG] [Thread-7360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:05:38.586 [DEBUG] [Thread-7360] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:05:38.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:05:38.587 [DEBUG] [Thread-7360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:05:38.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:05:38.641 [DEBUG] [Thread-7360] [transport.py] [_log()] userauth is OK
2025-11-25T23:05:38.641 [DEBUG] [Thread-7360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:05:38.642 [DEBUG] [Thread-7360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:05:38.642 [DEBUG] [Thread-7360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:05:38.642 [DEBUG] [Thread-7360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:05:38.660 [INFO] [Thread-7360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:05:38.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:05:38.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:05:39.450 [DEBUG] [Thread-7360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:05:39.451 [DEBUG] [Thread-7360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:05:39.498 [DEBUG] [Thread-7360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:05:39.499 [DEBUG] [Thread-7360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:05:39.508 [DEBUG] [Thread-7360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:05:39.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:05:39.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:05:39.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:05:39.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:05:39.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:05:39.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:05:39.545 [DEBUG] [Thread-7360] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:05:39.982 [DEBUG] [Thread-7362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:44.420 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:54.831 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:05:55.033 [DEBUG] [Thread-7363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:02.071 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:02.071 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:05.233 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:06.762 [DEBUG] [Thread-7364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:09.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:06:09.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:06:09.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:06:10.068 [DEBUG] [Thread-7365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 5, 43), 29.2, 13.26, 0.0, 8.82, 20.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:06:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:05:43
2025-11-25T23:06:10.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:06:10.502 [DEBUG] [Thread-7366] [transport.py] [_log()] starting thread (client mode): 0x70da4970
2025-11-25T23:06:10.502 [DEBUG] [Thread-7366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:06:10.523 [DEBUG] [Thread-7366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:06:10.523 [INFO] [Thread-7366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:06:10.525 [DEBUG] [Thread-7366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:06:10.525 [DEBUG] [Thread-7366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] client lang: <none>
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] server lang: <none>
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] kex follows: False
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] Compression: none
2025-11-25T23:06:10.526 [DEBUG] [Thread-7366] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:06:10.545 [DEBUG] [Thread-7366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:06:10.545 [DEBUG] [Thread-7366] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:06:10.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:06:10.546 [DEBUG] [Thread-7366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:06:10.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:06:10.548 [DEBUG] [Thread-7366] [transport.py] [_log()] userauth is OK
2025-11-25T23:06:10.548 [DEBUG] [Thread-7366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:06:10.548 [DEBUG] [Thread-7366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:06:10.548 [DEBUG] [Thread-7366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:06:10.548 [DEBUG] [Thread-7366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:06:10.572 [INFO] [Thread-7366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:06:10.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:06:11.191 [DEBUG] [Thread-7366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:06:11.191 [DEBUG] [Thread-7366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:06:11.192 [DEBUG] [Thread-7366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:06:11.232 [DEBUG] [Thread-7366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:06:11.232 [DEBUG] [Thread-7366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:06:11.236 [DEBUG] [Thread-7366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:06:11.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:06:11.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:06:11.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:06:11.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:06:11.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:06:11.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:06:11.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:06:11.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:06:11.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:06:11.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.878917 -999.00  +20.60   5.64     18   -4.20 1 1 1 1 1     0    0 25.32 25.56 ZNESW 6.0 5.6 146.4 8.9 20.1 -26.0 20.1 -25.4 19.8 -24.1 20.0 -25.1
2025-11-25T23:06:11.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:06:11.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:06:11.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.878917
2025-11-25T23:06:11.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:06:11.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:06:11.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:06:11.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:06:11.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:06:11.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:05:43', tmtdew=29.2, humidity=13.26, cloud=0.0, wind=8.82, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:05:43', seeing=1.07, atlas_timestamp='2025-11-25T21:05:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T21:02:00')
2025-11-25T23:06:11.262 [DEBUG] [Thread-7366] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:06:11.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:06:11.358 [DEBUG] [Thread-7369] [transport.py] [_log()] starting thread (client mode): 0x70d57d90
2025-11-25T23:06:11.358 [DEBUG] [Thread-7369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:06:11.375 [DEBUG] [Thread-7369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:06:11.375 [INFO] [Thread-7369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:06:11.383 [DEBUG] [Thread-7369] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:06:11.383 [DEBUG] [Thread-7369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:06:11.383 [DEBUG] [Thread-7369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:06:11.383 [DEBUG] [Thread-7369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:06:11.383 [DEBUG] [Thread-7369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:06:11.383 [DEBUG] [Thread-7369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] client lang: <none>
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] server lang: <none>
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] kex follows: False
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] Compression: none
2025-11-25T23:06:11.384 [DEBUG] [Thread-7369] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:06:11.446 [DEBUG] [Thread-7369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:06:11.447 [DEBUG] [Thread-7369] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:06:11.447 [DEBUG] [Thread-7369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:06:11.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:06:11.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:06:11.504 [DEBUG] [Thread-7369] [transport.py] [_log()] userauth is OK
2025-11-25T23:06:11.505 [DEBUG] [Thread-7369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:06:11.505 [DEBUG] [Thread-7369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:06:11.505 [DEBUG] [Thread-7369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:06:11.505 [DEBUG] [Thread-7369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:06:11.524 [INFO] [Thread-7369] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:06:11.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:06:11.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:06:12.380 [DEBUG] [Thread-7369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:06:12.380 [DEBUG] [Thread-7369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:06:12.428 [DEBUG] [Thread-7369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:06:12.428 [DEBUG] [Thread-7369] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:06:12.438 [DEBUG] [Thread-7369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:06:12.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:06:12.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:06:12.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:06:12.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:06:12.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:06:12.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:06:12.472 [DEBUG] [Thread-7369] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:06:15.628 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:25.096 [DEBUG] [Thread-7371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:26.007 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:36.387 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:40.139 [DEBUG] [Thread-7372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:06:42.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:06:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:06:43.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 6, 15), 29.2, 13.28, 0.0, 9.12, 20.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:06:43.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:06:15
2025-11-25T23:06:43.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:06:43.427 [DEBUG] [Thread-7373] [transport.py] [_log()] starting thread (client mode): 0x70d6afe0
2025-11-25T23:06:43.427 [DEBUG] [Thread-7373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:06:43.437 [DEBUG] [Thread-7373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:06:43.437 [INFO] [Thread-7373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] client lang: <none>
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] server lang: <none>
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] kex follows: False
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] Compression: none
2025-11-25T23:06:43.440 [DEBUG] [Thread-7373] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:06:43.457 [DEBUG] [Thread-7373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:06:43.457 [DEBUG] [Thread-7373] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:06:43.458 [DEBUG] [Thread-7373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:06:43.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:06:43.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:06:43.459 [DEBUG] [Thread-7373] [transport.py] [_log()] userauth is OK
2025-11-25T23:06:43.460 [DEBUG] [Thread-7373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:06:43.460 [DEBUG] [Thread-7373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:06:43.460 [DEBUG] [Thread-7373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:06:43.460 [DEBUG] [Thread-7373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:06:43.483 [INFO] [Thread-7373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:06:43.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:06:44.101 [DEBUG] [Thread-7373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:06:44.101 [DEBUG] [Thread-7373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:06:44.102 [DEBUG] [Thread-7373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:06:44.142 [DEBUG] [Thread-7373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:06:44.142 [DEBUG] [Thread-7373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:06:44.146 [DEBUG] [Thread-7373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:06:44.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:06:44.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:06:44.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:06:44.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:06:44.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:06:44.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:06:44.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:06:44.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:06:44.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:06:44.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.879612 -999.00  +20.50   7.46     18   -4.20 1 1 1 1 1     0    0 25.34 23.05 ZNESW 6.7 7.5 156.8 9.1 20.1 -25.7 20.1 -25.3 19.8 -24.1 19.9 -25.1
2025-11-25T23:06:44.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:06:44.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:06:44.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.879612
2025-11-25T23:06:44.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:06:44.172 [DEBUG] [Thread-7373] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:06:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:06:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:06:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:06:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:06:44.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:06:15', tmtdew=29.2, humidity=13.28, cloud=0.0, wind=9.12, temperature=20.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:06:15', seeing=0.83, atlas_timestamp='2025-11-25T21:06:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.11925000000000097, -0.13175000000000026, -0.11275000000000013, -0.1374999999999993, -0.10849999999999937, -0.0747499999999981, -0.11450000000000138, -0.09375, -0.10449999999999982, -0.14199999999999946, -0.11175000000000068, -0.176499999999999, -0.0940000000000012, -0.08175000000000132, -0.10000000000000142, -0.10000000000000142, -0.11374999999999957, -0.17549999999999955, -0.10749999999999993, -0.13625000000000043, -0.12900000000000134, -0.1042500000000004, -0.05174999999999841, -0.07275000000000098, -0.1620000000000008, -0.2575000000000003, -0.13625000000000043, -0.0365000000000002, -0.09699999999999953, -0.13599999999999923, -0.008999999999998565, -0.06299999999999883, -0.19775000000000098], zp_timestamp='2025-11-25T21:02:00')
2025-11-25T23:06:44.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:06:44.268 [DEBUG] [Thread-7376] [transport.py] [_log()] starting thread (client mode): 0x70d55600
2025-11-25T23:06:44.268 [DEBUG] [Thread-7376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:06:44.285 [DEBUG] [Thread-7376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:06:44.285 [INFO] [Thread-7376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] client lang: <none>
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] server lang: <none>
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] kex follows: False
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:06:44.293 [DEBUG] [Thread-7376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:06:44.294 [DEBUG] [Thread-7376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:06:44.294 [DEBUG] [Thread-7376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:06:44.294 [DEBUG] [Thread-7376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:06:44.294 [DEBUG] [Thread-7376] [transport.py] [_log()] Compression: none
2025-11-25T23:06:44.294 [DEBUG] [Thread-7376] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:06:44.349 [DEBUG] [Thread-7376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:06:44.349 [DEBUG] [Thread-7376] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:06:44.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:06:44.350 [DEBUG] [Thread-7376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:06:44.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:06:44.406 [DEBUG] [Thread-7376] [transport.py] [_log()] userauth is OK
2025-11-25T23:06:44.406 [DEBUG] [Thread-7376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:06:44.406 [DEBUG] [Thread-7376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:06:44.406 [DEBUG] [Thread-7376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:06:44.406 [DEBUG] [Thread-7376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:06:44.429 [INFO] [Thread-7376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:06:44.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:06:44.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:06:45.210 [DEBUG] [Thread-7376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:06:45.211 [DEBUG] [Thread-7376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:06:45.259 [DEBUG] [Thread-7376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:06:45.259 [DEBUG] [Thread-7376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:06:45.268 [DEBUG] [Thread-7376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:06:45.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:06:45.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:06:45.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:06:45.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:06:45.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:06:45.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:06:45.305 [DEBUG] [Thread-7376] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:06:46.783 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:55.171 [DEBUG] [Thread-7378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:06:57.178 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:02.273 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:02.274 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:06.828 [DEBUG] [Thread-7379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:07.574 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:10.214 [DEBUG] [Thread-7380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:15.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:07:15.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:07:15.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:07:15.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 6, 47), 29.21, 13.14, 0.0, 10.13, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:07:15.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:06:47
2025-11-25T23:07:16.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:07:16.260 [DEBUG] [Thread-7381] [transport.py] [_log()] starting thread (client mode): 0x70d6abf0
2025-11-25T23:07:16.260 [DEBUG] [Thread-7381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:07:16.281 [DEBUG] [Thread-7381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:07:16.281 [INFO] [Thread-7381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] client lang: <none>
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] server lang: <none>
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] kex follows: False
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:07:16.284 [DEBUG] [Thread-7381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:07:16.285 [DEBUG] [Thread-7381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:07:16.285 [DEBUG] [Thread-7381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:07:16.285 [DEBUG] [Thread-7381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:07:16.285 [DEBUG] [Thread-7381] [transport.py] [_log()] Compression: none
2025-11-25T23:07:16.285 [DEBUG] [Thread-7381] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:07:16.302 [DEBUG] [Thread-7381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:07:16.302 [DEBUG] [Thread-7381] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:07:16.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:07:16.303 [DEBUG] [Thread-7381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:07:16.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:07:16.305 [DEBUG] [Thread-7381] [transport.py] [_log()] userauth is OK
2025-11-25T23:07:16.305 [DEBUG] [Thread-7381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:07:16.306 [DEBUG] [Thread-7381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:07:16.306 [DEBUG] [Thread-7381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:07:16.306 [DEBUG] [Thread-7381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:07:16.327 [INFO] [Thread-7381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:07:16.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:07:16.979 [DEBUG] [Thread-7381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:07:16.979 [DEBUG] [Thread-7381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:07:16.980 [DEBUG] [Thread-7381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:07:17.020 [DEBUG] [Thread-7381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:07:17.021 [DEBUG] [Thread-7381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:07:17.024 [DEBUG] [Thread-7381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:07:17.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:07:17.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:07:17.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:07:17.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:07:17.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:07:17.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:07:17.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:07:17.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:07:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:07:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.879612 -999.00  +20.50   7.46     18   -4.20 1 1 1 1 1     0    0 25.34 23.05 ZNESW 6.7 7.5 156.8 9.1 20.1 -25.7 20.1 -25.3 19.8 -24.1 19.9 -25.1
2025-11-25T23:07:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:07:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:07:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.879612
2025-11-25T23:07:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:07:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:07:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:07:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:07:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:07:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:06:47', tmtdew=29.21, humidity=13.14, cloud=0.0, wind=10.13, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:06:47', seeing=0.88, atlas_timestamp='2025-11-25T21:06:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:05:00')
2025-11-25T23:07:17.049 [DEBUG] [Thread-7381] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:07:17.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:07:17.144 [DEBUG] [Thread-7384] [transport.py] [_log()] starting thread (client mode): 0x70d54790
2025-11-25T23:07:17.144 [DEBUG] [Thread-7384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:07:17.160 [DEBUG] [Thread-7384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:07:17.160 [INFO] [Thread-7384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:07:17.167 [DEBUG] [Thread-7384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:07:17.168 [DEBUG] [Thread-7384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:07:17.168 [DEBUG] [Thread-7384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:07:17.168 [DEBUG] [Thread-7384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:07:17.168 [DEBUG] [Thread-7384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:07:17.168 [DEBUG] [Thread-7384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:07:17.168 [DEBUG] [Thread-7384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:07:17.168 [DEBUG] [Thread-7384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:07:17.168 [DEBUG] [Thread-7384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:07:17.169 [DEBUG] [Thread-7384] [transport.py] [_log()] client lang: <none>
2025-11-25T23:07:17.169 [DEBUG] [Thread-7384] [transport.py] [_log()] server lang: <none>
2025-11-25T23:07:17.169 [DEBUG] [Thread-7384] [transport.py] [_log()] kex follows: False
2025-11-25T23:07:17.169 [DEBUG] [Thread-7384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:07:17.169 [DEBUG] [Thread-7384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:07:17.169 [DEBUG] [Thread-7384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:07:17.169 [DEBUG] [Thread-7384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:07:17.170 [DEBUG] [Thread-7384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:07:17.170 [DEBUG] [Thread-7384] [transport.py] [_log()] Compression: none
2025-11-25T23:07:17.170 [DEBUG] [Thread-7384] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:07:17.226 [DEBUG] [Thread-7384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:07:17.227 [DEBUG] [Thread-7384] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:07:17.228 [DEBUG] [Thread-7384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:07:17.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:07:17.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:07:17.282 [DEBUG] [Thread-7384] [transport.py] [_log()] userauth is OK
2025-11-25T23:07:17.283 [DEBUG] [Thread-7384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:07:17.283 [DEBUG] [Thread-7384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:07:17.283 [DEBUG] [Thread-7384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:07:17.283 [DEBUG] [Thread-7384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:07:17.302 [INFO] [Thread-7384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:07:17.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:07:17.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:07:17.986 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:18.202 [DEBUG] [Thread-7384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:07:18.202 [DEBUG] [Thread-7384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:07:18.252 [DEBUG] [Thread-7384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:07:18.252 [DEBUG] [Thread-7384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:07:18.263 [DEBUG] [Thread-7384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:07:18.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:07:18.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:07:18.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:07:18.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:07:18.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:07:18.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:07:18.306 [DEBUG] [Thread-7384] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:07:25.246 [DEBUG] [Thread-7386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:28.451 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:38.864 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:40.292 [DEBUG] [Thread-7387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:07:48.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:07:48.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:07:48.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 7, 19), 29.2, 13.16, 0.0, 9.95, 20.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:07:48.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:07:19
2025-11-25T23:07:49.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:07:49.252 [DEBUG] [Thread-7388] [transport.py] [_log()] starting thread (client mode): 0x70d3a080
2025-11-25T23:07:49.252 [DEBUG] [Thread-7388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:07:49.255 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:49.273 [DEBUG] [Thread-7388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:07:49.273 [INFO] [Thread-7388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:07:49.275 [DEBUG] [Thread-7388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:07:49.275 [DEBUG] [Thread-7388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:07:49.275 [DEBUG] [Thread-7388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:07:49.275 [DEBUG] [Thread-7388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:07:49.275 [DEBUG] [Thread-7388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:07:49.275 [DEBUG] [Thread-7388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] client lang: <none>
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] server lang: <none>
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] kex follows: False
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] Compression: none
2025-11-25T23:07:49.276 [DEBUG] [Thread-7388] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:07:49.286 [DEBUG] [Thread-7388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:07:49.286 [DEBUG] [Thread-7388] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:07:49.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:07:49.287 [DEBUG] [Thread-7388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:07:49.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:07:49.289 [DEBUG] [Thread-7388] [transport.py] [_log()] userauth is OK
2025-11-25T23:07:49.290 [DEBUG] [Thread-7388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:07:49.290 [DEBUG] [Thread-7388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:07:49.290 [DEBUG] [Thread-7388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:07:49.290 [DEBUG] [Thread-7388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:07:49.314 [INFO] [Thread-7388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:07:49.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:07:49.979 [DEBUG] [Thread-7388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:07:49.979 [DEBUG] [Thread-7388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:07:49.979 [DEBUG] [Thread-7388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:07:50.020 [DEBUG] [Thread-7388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:07:50.020 [DEBUG] [Thread-7388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:07:50.023 [DEBUG] [Thread-7388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:07:50.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:07:50.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:07:50.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:07:50.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:07:50.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:07:50.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:07:50.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:07:50.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:07:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:07:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.879959 -999.00  +20.50   6.57     18   -4.20 1 1 1 1 1     0    0 25.70 23.63 ZNESW 6.6 6.6 150.2 8.2 20.1 -25.9 20.1 -25.3 19.8 -24.1 19.9 -25.1
2025-11-25T23:07:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:07:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:07:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.879959
2025-11-25T23:07:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:07:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:07:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:07:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:07:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:07:50.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:07:19', tmtdew=29.2, humidity=13.16, cloud=0.0, wind=9.95, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:07:19', seeing=0.88, atlas_timestamp='2025-11-25T21:07:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:05:00')
2025-11-25T23:07:50.049 [DEBUG] [Thread-7388] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:07:50.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:07:50.145 [DEBUG] [Thread-7391] [transport.py] [_log()] starting thread (client mode): 0x70da4d30
2025-11-25T23:07:50.145 [DEBUG] [Thread-7391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:07:50.159 [DEBUG] [Thread-7391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:07:50.160 [INFO] [Thread-7391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:07:50.167 [DEBUG] [Thread-7391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:07:50.167 [DEBUG] [Thread-7391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:07:50.167 [DEBUG] [Thread-7391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:07:50.167 [DEBUG] [Thread-7391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:07:50.167 [DEBUG] [Thread-7391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] client lang: <none>
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] server lang: <none>
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] kex follows: False
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] Compression: none
2025-11-25T23:07:50.168 [DEBUG] [Thread-7391] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:07:50.229 [DEBUG] [Thread-7391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:07:50.230 [DEBUG] [Thread-7391] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:07:50.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:07:50.231 [DEBUG] [Thread-7391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:07:50.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:07:50.286 [DEBUG] [Thread-7391] [transport.py] [_log()] userauth is OK
2025-11-25T23:07:50.287 [DEBUG] [Thread-7391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:07:50.287 [DEBUG] [Thread-7391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:07:50.287 [DEBUG] [Thread-7391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:07:50.287 [DEBUG] [Thread-7391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:07:50.306 [INFO] [Thread-7391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:07:50.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:07:50.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:07:51.173 [DEBUG] [Thread-7391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:07:51.173 [DEBUG] [Thread-7391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:07:51.221 [DEBUG] [Thread-7391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:07:51.222 [DEBUG] [Thread-7391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:07:51.231 [DEBUG] [Thread-7391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:07:51.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:07: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')
2025-11-25T23:07:51.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:07:51.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:07:51.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:07:51.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:07:51.268 [DEBUG] [Thread-7391] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:07:55.323 [DEBUG] [Thread-7393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:07:59.652 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:02.475 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:02.477 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:06.880 [DEBUG] [Thread-7394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:10.048 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:10.374 [DEBUG] [Thread-7395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:20.447 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:21.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:08:21.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:08:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:08:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 7, 51), 29.2, 13.13, 0.0, 12.09, 20.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:08:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:07:51
2025-11-25T23:08:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:08:22.210 [DEBUG] [Thread-7396] [transport.py] [_log()] starting thread (client mode): 0x70d43dc0
2025-11-25T23:08:22.210 [DEBUG] [Thread-7396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:08:22.231 [DEBUG] [Thread-7396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:08:22.231 [INFO] [Thread-7396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] client lang: <none>
2025-11-25T23:08:22.234 [DEBUG] [Thread-7396] [transport.py] [_log()] server lang: <none>
2025-11-25T23:08:22.235 [DEBUG] [Thread-7396] [transport.py] [_log()] kex follows: False
2025-11-25T23:08:22.235 [DEBUG] [Thread-7396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:08:22.235 [DEBUG] [Thread-7396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:08:22.235 [DEBUG] [Thread-7396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:08:22.235 [DEBUG] [Thread-7396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:08:22.235 [DEBUG] [Thread-7396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:08:22.235 [DEBUG] [Thread-7396] [transport.py] [_log()] Compression: none
2025-11-25T23:08:22.235 [DEBUG] [Thread-7396] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:08:22.250 [DEBUG] [Thread-7396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:08:22.251 [DEBUG] [Thread-7396] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:08:22.251 [DEBUG] [Thread-7396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:08:22.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:08:22.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:08:22.253 [DEBUG] [Thread-7396] [transport.py] [_log()] userauth is OK
2025-11-25T23:08:22.253 [DEBUG] [Thread-7396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:08:22.254 [DEBUG] [Thread-7396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:08:22.254 [DEBUG] [Thread-7396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:08:22.254 [DEBUG] [Thread-7396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:08:22.281 [INFO] [Thread-7396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:08:22.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:08:22.873 [DEBUG] [Thread-7396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:08:22.873 [DEBUG] [Thread-7396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:08:22.873 [DEBUG] [Thread-7396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:08:22.914 [DEBUG] [Thread-7396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:08:22.914 [DEBUG] [Thread-7396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:08:22.917 [DEBUG] [Thread-7396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:08:22.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:08:22.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:08:22.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:08:22.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:08:22.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:08:22.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:08:22.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:08:22.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:08:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:08:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.880306 -999.00  +20.50   6.10     18   -4.20 1 1 1 1 1     0    0 25.28 21.13 ZNESW 5.6 6.1 164.6 9.6 20.1 -25.9 20.1 -25.3 19.8 -23.9 19.9 -24.9
2025-11-25T23:08:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:08:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:08:22.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.880306
2025-11-25T23:08:22.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:08:22.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:08:22.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:08:22.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:08:22.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:08:22.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:07:51', tmtdew=29.2, humidity=13.13, cloud=0.0, wind=12.09, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:07:51', seeing=0.88, atlas_timestamp='2025-11-25T21:07:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:05:00')
2025-11-25T23:08:22.943 [DEBUG] [Thread-7396] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:08:23.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:08:23.042 [DEBUG] [Thread-7399] [transport.py] [_log()] starting thread (client mode): 0x70d41a20
2025-11-25T23:08:23.042 [DEBUG] [Thread-7399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:08:23.056 [DEBUG] [Thread-7399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:08:23.056 [INFO] [Thread-7399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:08:23.064 [DEBUG] [Thread-7399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:08:23.064 [DEBUG] [Thread-7399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:08:23.065 [DEBUG] [Thread-7399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:08:23.065 [DEBUG] [Thread-7399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:08:23.065 [DEBUG] [Thread-7399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:08:23.065 [DEBUG] [Thread-7399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:08:23.065 [DEBUG] [Thread-7399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:08:23.065 [DEBUG] [Thread-7399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:08:23.065 [DEBUG] [Thread-7399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:08:23.065 [DEBUG] [Thread-7399] [transport.py] [_log()] client lang: <none>
2025-11-25T23:08:23.065 [DEBUG] [Thread-7399] [transport.py] [_log()] server lang: <none>
2025-11-25T23:08:23.066 [DEBUG] [Thread-7399] [transport.py] [_log()] kex follows: False
2025-11-25T23:08:23.066 [DEBUG] [Thread-7399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:08:23.066 [DEBUG] [Thread-7399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:08:23.066 [DEBUG] [Thread-7399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:08:23.066 [DEBUG] [Thread-7399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:08:23.066 [DEBUG] [Thread-7399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:08:23.066 [DEBUG] [Thread-7399] [transport.py] [_log()] Compression: none
2025-11-25T23:08:23.066 [DEBUG] [Thread-7399] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:08:23.122 [DEBUG] [Thread-7399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:08:23.123 [DEBUG] [Thread-7399] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:08:23.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:08:23.124 [DEBUG] [Thread-7399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:08:23.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:08:23.186 [DEBUG] [Thread-7399] [transport.py] [_log()] userauth is OK
2025-11-25T23:08:23.186 [DEBUG] [Thread-7399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:08:23.186 [DEBUG] [Thread-7399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:08:23.186 [DEBUG] [Thread-7399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:08:23.186 [DEBUG] [Thread-7399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:08:23.200 [INFO] [Thread-7399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:08:23.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:08:23.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:08:24.013 [DEBUG] [Thread-7399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:08:24.013 [DEBUG] [Thread-7399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:08:24.061 [DEBUG] [Thread-7399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:08:24.061 [DEBUG] [Thread-7399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:08:24.069 [DEBUG] [Thread-7399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:08:24.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:08:24.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:08:24.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:08:24.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:08:24.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:08:24.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:08:24.101 [DEBUG] [Thread-7399] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:08:25.403 [DEBUG] [Thread-7401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:30.843 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:40.447 [DEBUG] [Thread-7402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:41.240 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:51.658 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:54.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:08:54.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:08:54.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:08:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 8, 23), 29.19, 13.13, 0.0, 11.75, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:08:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:08:23
2025-11-25T23:08:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:08:55.069 [DEBUG] [Thread-7403] [transport.py] [_log()] starting thread (client mode): 0x70d56890
2025-11-25T23:08:55.069 [DEBUG] [Thread-7403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:08:55.088 [DEBUG] [Thread-7403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:08:55.089 [INFO] [Thread-7403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] client lang: <none>
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] server lang: <none>
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] kex follows: False
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:08:55.092 [DEBUG] [Thread-7403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:08:55.093 [DEBUG] [Thread-7403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:08:55.093 [DEBUG] [Thread-7403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:08:55.093 [DEBUG] [Thread-7403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:08:55.093 [DEBUG] [Thread-7403] [transport.py] [_log()] Compression: none
2025-11-25T23:08:55.093 [DEBUG] [Thread-7403] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:08:55.100 [DEBUG] [Thread-7403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:08:55.101 [DEBUG] [Thread-7403] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:08:55.101 [DEBUG] [Thread-7403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:08:55.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:08:55.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:08:55.102 [DEBUG] [Thread-7403] [transport.py] [_log()] userauth is OK
2025-11-25T23:08:55.102 [DEBUG] [Thread-7403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:08:55.102 [DEBUG] [Thread-7403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:08:55.102 [DEBUG] [Thread-7403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:08:55.102 [DEBUG] [Thread-7403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:08:55.115 [INFO] [Thread-7403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:08:55.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:08:55.479 [DEBUG] [Thread-7405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:08:55.759 [DEBUG] [Thread-7403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:08:55.759 [DEBUG] [Thread-7403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:08:55.759 [DEBUG] [Thread-7403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:08:55.800 [DEBUG] [Thread-7403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:08:55.800 [DEBUG] [Thread-7403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:08:55.803 [DEBUG] [Thread-7403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:08:55.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:08:55.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:08:55.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:08:55.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:08:55.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:08:55.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:08:55.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:08:55.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:08:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:08:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.880653 -999.00  +20.50   7.05     18   -4.20 1 1 1 1 1     0    0 25.45 20.01 ZNESW 6.4 7.0 170.2 8.9 20.0 -25.8 20.0 -25.3 19.7 -24.1 19.9 -25.1
2025-11-25T23:08:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:08:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:08:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.880653
2025-11-25T23:08:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:08:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:08:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:08:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:08:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:08:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:08:23', tmtdew=29.19, humidity=13.13, cloud=0.0, wind=11.75, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:08:23', seeing=0.83, atlas_timestamp='2025-11-25T21:08:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:05:00')
2025-11-25T23:08:55.824 [DEBUG] [Thread-7403] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:08:55.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:08:55.911 [DEBUG] [Thread-7407] [transport.py] [_log()] starting thread (client mode): 0x70d7e3e0
2025-11-25T23:08:55.911 [DEBUG] [Thread-7407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:08:55.926 [DEBUG] [Thread-7407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:08:55.926 [INFO] [Thread-7407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] client lang: <none>
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] server lang: <none>
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] kex follows: False
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] Compression: none
2025-11-25T23:08:55.933 [DEBUG] [Thread-7407] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:08:55.990 [DEBUG] [Thread-7407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:08:55.990 [DEBUG] [Thread-7407] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:08:55.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:08:55.990 [DEBUG] [Thread-7407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:08:55.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:08:56.047 [DEBUG] [Thread-7407] [transport.py] [_log()] userauth is OK
2025-11-25T23:08:56.047 [DEBUG] [Thread-7407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:08:56.047 [DEBUG] [Thread-7407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:08:56.047 [DEBUG] [Thread-7407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:08:56.047 [DEBUG] [Thread-7407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:08:56.061 [INFO] [Thread-7407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:08:56.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:08:56.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:08:56.909 [DEBUG] [Thread-7407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:08:56.909 [DEBUG] [Thread-7407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:08:56.958 [DEBUG] [Thread-7407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:08:56.958 [DEBUG] [Thread-7407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:08:56.968 [DEBUG] [Thread-7407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:08:56.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:08:56.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:08:56.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:08:56.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:08:56.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:08:56.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:08:57.002 [DEBUG] [Thread-7407] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:09:02.076 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:02.677 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:02.678 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:06.956 [DEBUG] [Thread-7409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:10.514 [DEBUG] [Thread-7410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:12.534 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:22.958 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:25.577 [DEBUG] [Thread-7411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:09:27.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:09:27.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:09:27.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 8, 55), 29.19, 13.18, 0.0, 9.95, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:09:27.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:08:55
2025-11-25T23:09:27.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:09:27.990 [DEBUG] [Thread-7412] [transport.py] [_log()] starting thread (client mode): 0x70dbf790
2025-11-25T23:09:27.990 [DEBUG] [Thread-7412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:09:28.010 [DEBUG] [Thread-7412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:09:28.010 [INFO] [Thread-7412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] client lang: <none>
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] server lang: <none>
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] kex follows: False
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:09:28.013 [DEBUG] [Thread-7412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:09:28.014 [DEBUG] [Thread-7412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:09:28.014 [DEBUG] [Thread-7412] [transport.py] [_log()] Compression: none
2025-11-25T23:09:28.014 [DEBUG] [Thread-7412] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:09:28.028 [DEBUG] [Thread-7412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:09:28.028 [DEBUG] [Thread-7412] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:09:28.028 [DEBUG] [Thread-7412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:09:28.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:09:28.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:09:28.029 [DEBUG] [Thread-7412] [transport.py] [_log()] userauth is OK
2025-11-25T23:09:28.029 [DEBUG] [Thread-7412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:09:28.029 [DEBUG] [Thread-7412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:09:28.029 [DEBUG] [Thread-7412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:09:28.029 [DEBUG] [Thread-7412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:09:28.044 [INFO] [Thread-7412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:09:28.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:09:28.710 [DEBUG] [Thread-7412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:09:28.710 [DEBUG] [Thread-7412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:09:28.710 [DEBUG] [Thread-7412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:09:28.751 [DEBUG] [Thread-7412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:09:28.751 [DEBUG] [Thread-7412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:09:28.754 [DEBUG] [Thread-7412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:09:28.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:09:28.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:09:28.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:09:28.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:09:28.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:09:28.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:09:28.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:09:28.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:09:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:09:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.881001 -999.00  +20.40   6.85     18   -4.20 1 1 1 1 1     0    0 25.00 16.97 ZNESW 6.6 6.8 151.6 9.9 20.1 -25.8 20.0 -25.4 19.7 -23.9 19.9 -24.9
2025-11-25T23:09:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:09:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:09:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.881001
2025-11-25T23:09:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:09:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:09:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:09:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:09:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:09:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:08:55', tmtdew=29.19, humidity=13.18, cloud=0.0, wind=9.95, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:08:55', seeing=0.81, atlas_timestamp='2025-11-25T21:08:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:05:00')
2025-11-25T23:09:28.774 [DEBUG] [Thread-7412] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:09:28.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:09:28.861 [DEBUG] [Thread-7415] [transport.py] [_log()] starting thread (client mode): 0x70d75ae0
2025-11-25T23:09:28.861 [DEBUG] [Thread-7415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:09:28.876 [DEBUG] [Thread-7415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:09:28.876 [INFO] [Thread-7415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] client lang: <none>
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] server lang: <none>
2025-11-25T23:09:28.883 [DEBUG] [Thread-7415] [transport.py] [_log()] kex follows: False
2025-11-25T23:09:28.884 [DEBUG] [Thread-7415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:09:28.884 [DEBUG] [Thread-7415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:09:28.884 [DEBUG] [Thread-7415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:09:28.884 [DEBUG] [Thread-7415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:09:28.884 [DEBUG] [Thread-7415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:09:28.884 [DEBUG] [Thread-7415] [transport.py] [_log()] Compression: none
2025-11-25T23:09:28.884 [DEBUG] [Thread-7415] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:09:28.938 [DEBUG] [Thread-7415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:09:28.938 [DEBUG] [Thread-7415] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:09:28.938 [DEBUG] [Thread-7415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:09:28.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:09:28.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:09:28.995 [DEBUG] [Thread-7415] [transport.py] [_log()] userauth is OK
2025-11-25T23:09:28.995 [DEBUG] [Thread-7415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:09:28.995 [DEBUG] [Thread-7415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:09:28.995 [DEBUG] [Thread-7415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:09:28.995 [DEBUG] [Thread-7415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:09:29.010 [INFO] [Thread-7415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:09:29.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:09:29.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:09:29.870 [DEBUG] [Thread-7415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:09:29.870 [DEBUG] [Thread-7415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:09:29.917 [DEBUG] [Thread-7415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:09:29.917 [DEBUG] [Thread-7415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:09:29.925 [DEBUG] [Thread-7415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:09:29.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:09:29.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:09:29.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:09:29.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:09:29.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:09:29.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:09:29.957 [DEBUG] [Thread-7415] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:09:33.353 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:40.610 [DEBUG] [Thread-7417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:43.753 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:54.130 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:55.662 [DEBUG] [Thread-7418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:09:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:09:59.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:09:59.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:10:00.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 9, 27), 29.2, 13.16, 0.0, 10.71, 20.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:10:00.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:09:27
2025-11-25T23:10:00.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:10:00.941 [DEBUG] [Thread-7419] [transport.py] [_log()] starting thread (client mode): 0x70d7ebf0
2025-11-25T23:10:00.941 [DEBUG] [Thread-7419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:10:00.953 [DEBUG] [Thread-7419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:10:00.953 [INFO] [Thread-7419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:10:00.956 [DEBUG] [Thread-7419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:10:00.956 [DEBUG] [Thread-7419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:10:00.956 [DEBUG] [Thread-7419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] client lang: <none>
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] server lang: <none>
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] kex follows: False
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] Compression: none
2025-11-25T23:10:00.957 [DEBUG] [Thread-7419] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:10:00.966 [DEBUG] [Thread-7419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:10:00.966 [DEBUG] [Thread-7419] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:10:00.967 [DEBUG] [Thread-7419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:10:00.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:10:00.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:10:00.968 [DEBUG] [Thread-7419] [transport.py] [_log()] userauth is OK
2025-11-25T23:10:00.968 [DEBUG] [Thread-7419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:10:00.968 [DEBUG] [Thread-7419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:10:00.968 [DEBUG] [Thread-7419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:10:00.968 [DEBUG] [Thread-7419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:10:00.980 [INFO] [Thread-7419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:10:00.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:10:01.622 [DEBUG] [Thread-7419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:10:01.622 [DEBUG] [Thread-7419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:10:01.622 [DEBUG] [Thread-7419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:10:01.663 [DEBUG] [Thread-7419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:10:01.663 [DEBUG] [Thread-7419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:10:01.665 [DEBUG] [Thread-7419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:10:01.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:10:01.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:10:01.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:10:01.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:10:01.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:10:01.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:10:01.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:10:01.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:10:01.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:10:01.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.881348 -999.00  +20.50   5.80     18   -4.30 1 1 1 1 1     0    0 25.06 15.49 ZNESW 6.1 5.8 151.0 10.6 20.1 -25.7 20.0 -25.1 19.8 -24.0 19.9 -24.9
2025-11-25T23:10:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:10:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:10:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.881348
2025-11-25T23:10:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:10:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:10:01.680 [DEBUG] [Thread-7419] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:10:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:10:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:10:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:10:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:09:27', tmtdew=29.2, humidity=13.16, cloud=0.0, wind=10.71, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:09:28', seeing=0.7, atlas_timestamp='2025-11-25T21:09:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:07:00')
2025-11-25T23:10:01.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:10:01.771 [DEBUG] [Thread-7422] [transport.py] [_log()] starting thread (client mode): 0x70da6f50
2025-11-25T23:10:01.771 [DEBUG] [Thread-7422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:10:01.786 [DEBUG] [Thread-7422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:10:01.786 [INFO] [Thread-7422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] client lang: <none>
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] server lang: <none>
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] kex follows: False
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:10:01.793 [DEBUG] [Thread-7422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:10:01.794 [DEBUG] [Thread-7422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:10:01.794 [DEBUG] [Thread-7422] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:10:01.794 [DEBUG] [Thread-7422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:10:01.794 [DEBUG] [Thread-7422] [transport.py] [_log()] Compression: none
2025-11-25T23:10:01.794 [DEBUG] [Thread-7422] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:10:01.850 [DEBUG] [Thread-7422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:10:01.851 [DEBUG] [Thread-7422] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:10:01.851 [DEBUG] [Thread-7422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:10:01.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:10:01.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:10:01.908 [DEBUG] [Thread-7422] [transport.py] [_log()] userauth is OK
2025-11-25T23:10:01.908 [DEBUG] [Thread-7422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:10:01.908 [DEBUG] [Thread-7422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:10:01.908 [DEBUG] [Thread-7422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:10:01.908 [DEBUG] [Thread-7422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:10:01.922 [INFO] [Thread-7422] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:10:01.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:10:01.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:10:02.758 [DEBUG] [Thread-7422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:10:02.759 [DEBUG] [Thread-7422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:10:02.807 [DEBUG] [Thread-7422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:10:02.807 [DEBUG] [Thread-7422] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:10:02.817 [DEBUG] [Thread-7422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:10:02.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:10:02.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:10:02.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:10:02.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:10:02.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:10:02.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:10:02.853 [DEBUG] [Thread-7422] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:10:02.880 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:02.881 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:04.508 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:07.028 [DEBUG] [Thread-7424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:10.693 [DEBUG] [Thread-7425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:14.951 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:25.338 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:25.749 [DEBUG] [Thread-7426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:10:32.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:10:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:10:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 9, 59), 29.18, 13.18, 0.0, 11.61, 20.22, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:10:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:09:59
2025-11-25T23:10:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:10:33.863 [DEBUG] [Thread-7427] [transport.py] [_log()] starting thread (client mode): 0x70d7ef80
2025-11-25T23:10:33.863 [DEBUG] [Thread-7427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:10:33.884 [DEBUG] [Thread-7427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:10:33.884 [INFO] [Thread-7427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] client lang: <none>
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] server lang: <none>
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] kex follows: False
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] Compression: none
2025-11-25T23:10:33.887 [DEBUG] [Thread-7427] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:10:33.904 [DEBUG] [Thread-7427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:10:33.904 [DEBUG] [Thread-7427] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:10:33.904 [DEBUG] [Thread-7427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:10:33.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:10:33.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:10:33.948 [DEBUG] [Thread-7427] [transport.py] [_log()] userauth is OK
2025-11-25T23:10:33.948 [DEBUG] [Thread-7427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:10:33.948 [DEBUG] [Thread-7427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:10:33.948 [DEBUG] [Thread-7427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:10:33.948 [DEBUG] [Thread-7427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:10:33.976 [INFO] [Thread-7427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:10:33.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:10:34.623 [DEBUG] [Thread-7427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:10:34.623 [DEBUG] [Thread-7427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:10:34.624 [DEBUG] [Thread-7427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:10:34.664 [DEBUG] [Thread-7427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:10:34.664 [DEBUG] [Thread-7427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:10:34.668 [DEBUG] [Thread-7427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:10:34.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:10:34.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:10:34.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:10:34.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:10:34.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:10:34.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:10:34.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:10:34.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:10:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:10:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.882042 -999.00  +20.50   8.04     18   -4.30 1 1 1 1 1     0    0 24.93 13.56 ZNESW 6.9 8.0 169.6 10.9 20.0 -25.8 20.0 -25.2 19.7 -24.0 19.9 -24.9
2025-11-25T23:10:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:10:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:10:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.882042
2025-11-25T23:10:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:10:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:10:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:10:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:10:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:10:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:09:59', tmtdew=29.18, humidity=13.18, cloud=0.0, wind=11.61, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:10:32', seeing=0.76, atlas_timestamp='2025-11-25T21:10:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:07:00')
2025-11-25T23:10:34.695 [DEBUG] [Thread-7427] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:10:34.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:10:34.790 [DEBUG] [Thread-7430] [transport.py] [_log()] starting thread (client mode): 0x70d7ff70
2025-11-25T23:10:34.790 [DEBUG] [Thread-7430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:10:34.807 [DEBUG] [Thread-7430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:10:34.807 [INFO] [Thread-7430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:10:34.815 [DEBUG] [Thread-7430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:10:34.815 [DEBUG] [Thread-7430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:10:34.815 [DEBUG] [Thread-7430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:10:34.815 [DEBUG] [Thread-7430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:10:34.815 [DEBUG] [Thread-7430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:10:34.815 [DEBUG] [Thread-7430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:10:34.815 [DEBUG] [Thread-7430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] client lang: <none>
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] server lang: <none>
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] kex follows: False
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:10:34.816 [DEBUG] [Thread-7430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:10:34.817 [DEBUG] [Thread-7430] [transport.py] [_log()] Compression: none
2025-11-25T23:10:34.817 [DEBUG] [Thread-7430] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:10:34.872 [DEBUG] [Thread-7430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:10:34.873 [DEBUG] [Thread-7430] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:10:34.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:10:34.874 [DEBUG] [Thread-7430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:10:34.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:10:34.929 [DEBUG] [Thread-7430] [transport.py] [_log()] userauth is OK
2025-11-25T23:10:34.929 [DEBUG] [Thread-7430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:10:34.930 [DEBUG] [Thread-7430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:10:34.930 [DEBUG] [Thread-7430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:10:34.930 [DEBUG] [Thread-7430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:10:34.949 [INFO] [Thread-7430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:10:34.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:10:34.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:10:35.734 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:35.856 [DEBUG] [Thread-7430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:10:35.856 [DEBUG] [Thread-7430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:10:35.904 [DEBUG] [Thread-7430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:10:35.904 [DEBUG] [Thread-7430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:10:35.913 [DEBUG] [Thread-7430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:10:35.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:10: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')
2025-11-25T23:10: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
2025-11-25T23:10:35.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:10:35.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:10:35.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:10:35.950 [DEBUG] [Thread-7430] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:10:40.788 [DEBUG] [Thread-7432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:46.152 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:55.827 [DEBUG] [Thread-7433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:10:56.544 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:03.082 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:03.083 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:05.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:11:05.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:11:05.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:11:06.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 10, 31), 29.16, 13.19, 0.0, 11.72, 20.22, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:11:06.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:10:31
2025-11-25T23:11:06.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:11:06.908 [DEBUG] [Thread-7434] [transport.py] [_log()] starting thread (client mode): 0x70d7c3a0
2025-11-25T23:11:06.908 [DEBUG] [Thread-7434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:11:06.930 [DEBUG] [Thread-7434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:11:06.930 [INFO] [Thread-7434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] client lang: <none>
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] server lang: <none>
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] kex follows: False
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] Compression: none
2025-11-25T23:11:06.933 [DEBUG] [Thread-7434] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:11:06.941 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:06.950 [DEBUG] [Thread-7434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:11:06.950 [DEBUG] [Thread-7434] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:11:06.951 [DEBUG] [Thread-7434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:11:06.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:11:06.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:11:06.953 [DEBUG] [Thread-7434] [transport.py] [_log()] userauth is OK
2025-11-25T23:11:06.953 [DEBUG] [Thread-7434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:11:06.953 [DEBUG] [Thread-7434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:11:06.953 [DEBUG] [Thread-7434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:11:06.953 [DEBUG] [Thread-7434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:11:06.975 [INFO] [Thread-7434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:11:06.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:11:07.084 [DEBUG] [Thread-7436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:07.821 [DEBUG] [Thread-7434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:11:07.821 [DEBUG] [Thread-7434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:11:07.822 [DEBUG] [Thread-7434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:11:07.862 [DEBUG] [Thread-7434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:11:07.862 [DEBUG] [Thread-7434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:11:07.865 [DEBUG] [Thread-7434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:11:07.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:11:07.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:11:07.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:11:07.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:11:07.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:11:07.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:11:07.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:11:07.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:11:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:11:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.882389 -999.00  +20.40   9.28     18   -4.40 1 1 1 1 1     0    0 25.10 11.69 ZNESW 10.5 9.3 163.0 12.0 20.1 -25.8 20.1 -25.2 19.7 -23.9 19.9 -25.0
2025-11-25T23:11:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:11:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:11:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.882389
2025-11-25T23:11:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:11:07.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:11:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:11:07.893 [DEBUG] [Thread-7434] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:11:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:11:07.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:11:07.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:10:31', tmtdew=29.16, humidity=13.19, cloud=0.0, wind=11.72, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:11:04', seeing=0.86, atlas_timestamp='2025-11-25T21:10:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:07:00')
2025-11-25T23:11:07.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:11:07.998 [DEBUG] [Thread-7438] [transport.py] [_log()] starting thread (client mode): 0x70d766e0
2025-11-25T23:11:07.999 [DEBUG] [Thread-7438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:11:08.013 [DEBUG] [Thread-7438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:11:08.014 [INFO] [Thread-7438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:11:08.021 [DEBUG] [Thread-7438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:11:08.021 [DEBUG] [Thread-7438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:11:08.021 [DEBUG] [Thread-7438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:11:08.021 [DEBUG] [Thread-7438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:11:08.021 [DEBUG] [Thread-7438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:11:08.021 [DEBUG] [Thread-7438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:11:08.021 [DEBUG] [Thread-7438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:11:08.021 [DEBUG] [Thread-7438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] client lang: <none>
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] server lang: <none>
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] kex follows: False
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] Compression: none
2025-11-25T23:11:08.022 [DEBUG] [Thread-7438] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:11:08.082 [DEBUG] [Thread-7438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:11:08.082 [DEBUG] [Thread-7438] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:11:08.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:11:08.083 [DEBUG] [Thread-7438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:11:08.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:11:08.141 [DEBUG] [Thread-7438] [transport.py] [_log()] userauth is OK
2025-11-25T23:11:08.141 [DEBUG] [Thread-7438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:11:08.142 [DEBUG] [Thread-7438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:11:08.142 [DEBUG] [Thread-7438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:11:08.142 [DEBUG] [Thread-7438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:11:08.165 [INFO] [Thread-7438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:11:08.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:11:08.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:11:08.983 [DEBUG] [Thread-7438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:11:08.983 [DEBUG] [Thread-7438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:11:09.032 [DEBUG] [Thread-7438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:11:09.032 [DEBUG] [Thread-7438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:11:09.041 [DEBUG] [Thread-7438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:11:09.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:11:09.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:11:09.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:11:09.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:11:09.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:11:09.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:11:09.078 [DEBUG] [Thread-7438] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:11:10.861 [DEBUG] [Thread-7440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:17.341 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:25.903 [DEBUG] [Thread-7441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:27.740 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:38.135 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:11:39.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:11:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:11:39.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 11, 35), 29.37, 13.13, 0.0, 8.98, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:11:39.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:11:35
2025-11-25T23:11:39.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:11:40.053 [DEBUG] [Thread-7442] [transport.py] [_log()] starting thread (client mode): 0x70d74a00
2025-11-25T23:11:40.053 [DEBUG] [Thread-7442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:11:40.072 [DEBUG] [Thread-7442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:11:40.072 [INFO] [Thread-7442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:11:40.075 [DEBUG] [Thread-7442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:11:40.075 [DEBUG] [Thread-7442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] client lang: <none>
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] server lang: <none>
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] kex follows: False
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] Compression: none
2025-11-25T23:11:40.076 [DEBUG] [Thread-7442] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:11:40.094 [DEBUG] [Thread-7442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:11:40.094 [DEBUG] [Thread-7442] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:11:40.095 [DEBUG] [Thread-7442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:11:40.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:11:40.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:11:40.097 [DEBUG] [Thread-7442] [transport.py] [_log()] userauth is OK
2025-11-25T23:11:40.097 [DEBUG] [Thread-7442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:11:40.097 [DEBUG] [Thread-7442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:11:40.097 [DEBUG] [Thread-7442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:11:40.097 [DEBUG] [Thread-7442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:11:40.116 [INFO] [Thread-7442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:11:40.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:11:40.757 [DEBUG] [Thread-7442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:11:40.757 [DEBUG] [Thread-7442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:11:40.758 [DEBUG] [Thread-7442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:11:40.799 [DEBUG] [Thread-7442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:11:40.799 [DEBUG] [Thread-7442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:11:40.802 [DEBUG] [Thread-7442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:11:40.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:11:40.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:11:40.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:11:40.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:11:40.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:11:40.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:11:40.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:11:40.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:11:40.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:11:40.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.882737 -999.00  +20.50   9.99     18   -4.40 1 1 1 1 1     0    0 25.00 11.68 ZNESW 9.4 10.0 163.2 12.6 20.1 -25.4 20.0 -25.2 19.7 -23.8 19.9 -24.9
2025-11-25T23:11:40.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:11:40.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:11:40.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.882737
2025-11-25T23:11:40.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:11:40.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:11:40.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:11:40.825 [DEBUG] [Thread-7442] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:11:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:11:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:11:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:11:35', tmtdew=29.37, humidity=13.13, cloud=0.0, wind=8.98, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:11:36', seeing=0.86, atlas_timestamp='2025-11-25T21:11:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:07:00')
2025-11-25T23:11:40.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:11:40.922 [DEBUG] [Thread-7445] [transport.py] [_log()] starting thread (client mode): 0x7374fcd0
2025-11-25T23:11:40.922 [DEBUG] [Thread-7445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:11:40.936 [DEBUG] [Thread-7445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:11:40.937 [INFO] [Thread-7445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:11:40.938 [DEBUG] [Thread-7447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:40.944 [DEBUG] [Thread-7445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:11:40.944 [DEBUG] [Thread-7445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:11:40.944 [DEBUG] [Thread-7445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:11:40.944 [DEBUG] [Thread-7445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:11:40.944 [DEBUG] [Thread-7445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:11:40.944 [DEBUG] [Thread-7445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:11:40.944 [DEBUG] [Thread-7445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:11:40.945 [DEBUG] [Thread-7445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:11:40.945 [DEBUG] [Thread-7445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:11:40.945 [DEBUG] [Thread-7445] [transport.py] [_log()] client lang: <none>
2025-11-25T23:11:40.945 [DEBUG] [Thread-7445] [transport.py] [_log()] server lang: <none>
2025-11-25T23:11:40.945 [DEBUG] [Thread-7445] [transport.py] [_log()] kex follows: False
2025-11-25T23:11:40.945 [DEBUG] [Thread-7445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:11:40.945 [DEBUG] [Thread-7445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:11:40.945 [DEBUG] [Thread-7445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:11:40.945 [DEBUG] [Thread-7445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:11:40.946 [DEBUG] [Thread-7445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:11:40.946 [DEBUG] [Thread-7445] [transport.py] [_log()] Compression: none
2025-11-25T23:11:40.946 [DEBUG] [Thread-7445] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:11:41.001 [DEBUG] [Thread-7445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:11:41.002 [DEBUG] [Thread-7445] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:11:41.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:11:41.003 [DEBUG] [Thread-7445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:11:41.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:11:41.061 [DEBUG] [Thread-7445] [transport.py] [_log()] userauth is OK
2025-11-25T23:11:41.061 [DEBUG] [Thread-7445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:11:41.061 [DEBUG] [Thread-7445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:11:41.061 [DEBUG] [Thread-7445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:11:41.061 [DEBUG] [Thread-7445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:11:41.079 [INFO] [Thread-7445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:11:41.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:11:41.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:11:41.907 [DEBUG] [Thread-7445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:11:41.907 [DEBUG] [Thread-7445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:11:41.954 [DEBUG] [Thread-7445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:11:41.954 [DEBUG] [Thread-7445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:11:41.963 [DEBUG] [Thread-7445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:11:41.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:11:41.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:11:41.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:11:41.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:11:41.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:11:41.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:11:41.997 [DEBUG] [Thread-7445] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:11:48.531 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:55.987 [DEBUG] [Thread-7448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:11:58.949 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:03.287 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:03.288 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:07.161 [DEBUG] [Thread-7449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:09.367 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:11.019 [DEBUG] [Thread-7450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:12.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:12:12.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:12:12.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:12:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 12, 8), 29.33, 13.18, 0.0, 10.22, 20.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:12:12.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:12:08
2025-11-25T23:12:12.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:12:12.972 [DEBUG] [Thread-7451] [transport.py] [_log()] starting thread (client mode): 0x70d7f010
2025-11-25T23:12:12.972 [DEBUG] [Thread-7451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:12:12.992 [DEBUG] [Thread-7451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:12:12.992 [INFO] [Thread-7451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:12:12.995 [DEBUG] [Thread-7451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] client lang: <none>
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] server lang: <none>
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] kex follows: False
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] Compression: none
2025-11-25T23:12:12.996 [DEBUG] [Thread-7451] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:12:13.012 [DEBUG] [Thread-7451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:12:13.013 [DEBUG] [Thread-7451] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:12:13.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:12:13.014 [DEBUG] [Thread-7451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:12:13.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:12:13.016 [DEBUG] [Thread-7451] [transport.py] [_log()] userauth is OK
2025-11-25T23:12:13.016 [DEBUG] [Thread-7451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:12:13.016 [DEBUG] [Thread-7451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:12:13.016 [DEBUG] [Thread-7451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:12:13.016 [DEBUG] [Thread-7451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:12:13.034 [INFO] [Thread-7451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:12:13.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:12:13.668 [DEBUG] [Thread-7451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:12:13.669 [DEBUG] [Thread-7451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:12:13.669 [DEBUG] [Thread-7451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:12:13.710 [DEBUG] [Thread-7451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:12:13.710 [DEBUG] [Thread-7451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:12:13.713 [DEBUG] [Thread-7451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:12:13.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:12:13.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:12:13.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:12:13.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:12:13.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:12:13.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:12:13.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:12:13.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:12:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:12:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.883084 -999.00  +20.60   9.03     18   -4.40 1 1 1 1 1     0    0 25.15 12.31 ZNESW 7.5 9.0 162.0 11.8 20.0 -25.7 20.0 -25.2 19.7 -24.0 19.9 -24.5
2025-11-25T23:12:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:12:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:12:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.883084
2025-11-25T23:12:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:12:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:12:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:12:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:12:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:12:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:12:08', tmtdew=29.33, humidity=13.18, cloud=0.0, wind=10.22, temperature=20.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:12:08', seeing=0.75, atlas_timestamp='2025-11-25T21:11:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:07:00')
2025-11-25T23:12:13.741 [DEBUG] [Thread-7451] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:12:13.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:12:13.837 [DEBUG] [Thread-7454] [transport.py] [_log()] starting thread (client mode): 0x70da7c70
2025-11-25T23:12:13.837 [DEBUG] [Thread-7454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:12:13.852 [DEBUG] [Thread-7454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:12:13.852 [INFO] [Thread-7454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:12:13.860 [DEBUG] [Thread-7454] [transport.py] [_log()] client lang: <none>
2025-11-25T23:12:13.861 [DEBUG] [Thread-7454] [transport.py] [_log()] server lang: <none>
2025-11-25T23:12:13.861 [DEBUG] [Thread-7454] [transport.py] [_log()] kex follows: False
2025-11-25T23:12:13.861 [DEBUG] [Thread-7454] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:12:13.861 [DEBUG] [Thread-7454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:12:13.861 [DEBUG] [Thread-7454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:12:13.861 [DEBUG] [Thread-7454] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:12:13.861 [DEBUG] [Thread-7454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:12:13.861 [DEBUG] [Thread-7454] [transport.py] [_log()] Compression: none
2025-11-25T23:12:13.861 [DEBUG] [Thread-7454] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:12:13.919 [DEBUG] [Thread-7454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:12:13.919 [DEBUG] [Thread-7454] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:12:13.920 [DEBUG] [Thread-7454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:12:13.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:12:13.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:12:13.978 [DEBUG] [Thread-7454] [transport.py] [_log()] userauth is OK
2025-11-25T23:12:13.978 [DEBUG] [Thread-7454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:12:13.978 [DEBUG] [Thread-7454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:12:13.979 [DEBUG] [Thread-7454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:12:13.979 [DEBUG] [Thread-7454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:12:13.997 [INFO] [Thread-7454] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:12:13.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:12:13.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:12:14.827 [DEBUG] [Thread-7454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:12:14.828 [DEBUG] [Thread-7454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:12:14.876 [DEBUG] [Thread-7454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:12:14.876 [DEBUG] [Thread-7454] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:12:14.885 [DEBUG] [Thread-7454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:12:14.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:12:14.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:12:14.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:12:14.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:12:14.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:12:14.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:12:14.921 [DEBUG] [Thread-7454] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:12:19.808 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:26.057 [DEBUG] [Thread-7456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:30.212 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:40.608 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:41.112 [DEBUG] [Thread-7457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:44.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:12:44.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:12:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:12:45.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 12, 39), 29.32, 13.13, 0.0, 12.19, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:12:45.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:12:39
2025-11-25T23:12:45.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:12:45.876 [DEBUG] [Thread-7458] [transport.py] [_log()] starting thread (client mode): 0x70d7f3a0
2025-11-25T23:12:45.876 [DEBUG] [Thread-7458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:12:45.891 [DEBUG] [Thread-7458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:12:45.891 [INFO] [Thread-7458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:12:45.894 [DEBUG] [Thread-7458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:12:45.894 [DEBUG] [Thread-7458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:12:45.894 [DEBUG] [Thread-7458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:12:45.894 [DEBUG] [Thread-7458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] client lang: <none>
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] server lang: <none>
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] kex follows: False
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] Compression: none
2025-11-25T23:12:45.895 [DEBUG] [Thread-7458] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:12:45.912 [DEBUG] [Thread-7458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:12:45.913 [DEBUG] [Thread-7458] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:12:45.913 [DEBUG] [Thread-7458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:12:45.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:12:45.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:12:45.915 [DEBUG] [Thread-7458] [transport.py] [_log()] userauth is OK
2025-11-25T23:12:45.916 [DEBUG] [Thread-7458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:12:45.916 [DEBUG] [Thread-7458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:12:45.916 [DEBUG] [Thread-7458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:12:45.916 [DEBUG] [Thread-7458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:12:45.942 [INFO] [Thread-7458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:12:45.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:12:46.601 [DEBUG] [Thread-7458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:12:46.601 [DEBUG] [Thread-7458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:12:46.602 [DEBUG] [Thread-7458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:12:46.643 [DEBUG] [Thread-7458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:12:46.643 [DEBUG] [Thread-7458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:12:46.647 [DEBUG] [Thread-7458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:12:46.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:12:46.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:12:46.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:12:46.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:12:46.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:12:46.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:12:46.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:12:46.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:12:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:12:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.883431 -999.00  +20.60   8.70     18   -4.30 1 1 1 1 1     0    0 25.27 13.46 ZNESW 9.5 8.7 169.8 10.6 20.0 -25.7 20.1 -25.2 19.7 -23.9 19.9 -24.8
2025-11-25T23:12:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:12:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:12:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.883431
2025-11-25T23:12:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:12:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:12:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:12:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:12:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:12:46.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:12:39', tmtdew=29.32, humidity=13.13, cloud=0.0, wind=12.19, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:12:40', seeing=0.82, atlas_timestamp='2025-11-25T21:12:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.0702499999999997, 0.024750000000000938, -0.013000000000001677, 0.040500000000001535, 0.05075000000000074, -0.014000000000001123, 0.003750000000000142, -0.029500000000000526, 0.009000000000000341, 0.030249999999998778, -0.034000000000000696, 0.07199999999999918, 0.08525000000000027, 0.027999999999998693, -0.012000000000000455, 0.0002500000000011937, 0.04049999999999976, 0.04699999999999882, -0.028750000000000497, 0.03549999999999898, 0.05274999999999963, 0.021250000000000213, -0.006249999999999645, -0.02200000000000024, -0.01249999999999929, 0.06124999999999936, 0.05349999999999966, 0.08800000000000097, 0.04749999999999943, 0.05000000000000071, -0.0365000000000002, -0.026250000000000995], zp_timestamp='2025-11-25T21:07:00')
2025-11-25T23:12:46.675 [DEBUG] [Thread-7458] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:12:46.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:12:46.770 [DEBUG] [Thread-7461] [transport.py] [_log()] starting thread (client mode): 0x70d7df30
2025-11-25T23:12:46.771 [DEBUG] [Thread-7461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:12:46.785 [DEBUG] [Thread-7461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:12:46.785 [INFO] [Thread-7461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:12:46.792 [DEBUG] [Thread-7461] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:12:46.792 [DEBUG] [Thread-7461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:12:46.792 [DEBUG] [Thread-7461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:12:46.792 [DEBUG] [Thread-7461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:12:46.792 [DEBUG] [Thread-7461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:12:46.792 [DEBUG] [Thread-7461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] client lang: <none>
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] server lang: <none>
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] kex follows: False
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] Compression: none
2025-11-25T23:12:46.793 [DEBUG] [Thread-7461] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:12:46.850 [DEBUG] [Thread-7461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:12:46.850 [DEBUG] [Thread-7461] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:12:46.851 [DEBUG] [Thread-7461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:12:46.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:12:46.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:12:46.906 [DEBUG] [Thread-7461] [transport.py] [_log()] userauth is OK
2025-11-25T23:12:46.906 [DEBUG] [Thread-7461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:12:46.907 [DEBUG] [Thread-7461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:12:46.907 [DEBUG] [Thread-7461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:12:46.907 [DEBUG] [Thread-7461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:12:46.925 [INFO] [Thread-7461] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:12:46.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:12:46.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:12:47.787 [DEBUG] [Thread-7461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:12:47.787 [DEBUG] [Thread-7461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:12:47.835 [DEBUG] [Thread-7461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:12:47.835 [DEBUG] [Thread-7461] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:12:47.844 [DEBUG] [Thread-7461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:12:47.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:12:47.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:12:47.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:12:47.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:12:47.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:12:47.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:12:47.881 [DEBUG] [Thread-7461] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:12:51.055 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:12:56.146 [DEBUG] [Thread-7463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:01.523 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:03.491 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:03.493 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:07.235 [DEBUG] [Thread-7464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:11.199 [DEBUG] [Thread-7465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:11.909 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:17.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:13:17.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:13:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:13:18.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 13, 12), 29.34, 13.11, 0.0, 12.14, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:13:18.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:13:12
2025-11-25T23:13:18.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:13:18.816 [DEBUG] [Thread-7466] [transport.py] [_log()] starting thread (client mode): 0x70d756c0
2025-11-25T23:13:18.816 [DEBUG] [Thread-7466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:13:18.832 [DEBUG] [Thread-7466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:13:18.832 [INFO] [Thread-7466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] client lang: <none>
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] server lang: <none>
2025-11-25T23:13:18.835 [DEBUG] [Thread-7466] [transport.py] [_log()] kex follows: False
2025-11-25T23:13:18.836 [DEBUG] [Thread-7466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:13:18.836 [DEBUG] [Thread-7466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:13:18.836 [DEBUG] [Thread-7466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:13:18.836 [DEBUG] [Thread-7466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:13:18.836 [DEBUG] [Thread-7466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:13:18.836 [DEBUG] [Thread-7466] [transport.py] [_log()] Compression: none
2025-11-25T23:13:18.836 [DEBUG] [Thread-7466] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:13:18.854 [DEBUG] [Thread-7466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:13:18.855 [DEBUG] [Thread-7466] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:13:18.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:13:18.856 [DEBUG] [Thread-7466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:13:18.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:13:18.858 [DEBUG] [Thread-7466] [transport.py] [_log()] userauth is OK
2025-11-25T23:13:18.858 [DEBUG] [Thread-7466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:13:18.858 [DEBUG] [Thread-7466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:13:18.859 [DEBUG] [Thread-7466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:13:18.859 [DEBUG] [Thread-7466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:13:18.894 [INFO] [Thread-7466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:13:18.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:13:19.577 [DEBUG] [Thread-7466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:13:19.578 [DEBUG] [Thread-7466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:13:19.578 [DEBUG] [Thread-7466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:13:19.619 [DEBUG] [Thread-7466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:13:19.619 [DEBUG] [Thread-7466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:13:19.622 [DEBUG] [Thread-7466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:13:19.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:13:19.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:13:19.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:13:19.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:13:19.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:13:19.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:13:19.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:13:19.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:13:19.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:13:19.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.884125 -999.00  +20.50   6.10     18   -4.30 1 1 1 1 1     0    0 25.04 13.18 ZNESW 8.6 6.1 162.0 9.0 20.0 -25.8 20.1 -25.4 19.7 -23.8 19.9 -24.9
2025-11-25T23:13:19.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:13:19.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:13:19.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.884125
2025-11-25T23:13:19.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:13:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:13:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:13:19.650 [DEBUG] [Thread-7466] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:13:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:13:19.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:13:19.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:13:12', tmtdew=29.34, humidity=13.11, cloud=0.0, wind=12.14, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:13:12', seeing=0.87, atlas_timestamp='2025-11-25T21:13:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.02674999999999983, -0.00274999999999892, -0.005000000000000782, 0.04100000000000037, -0.00274999999999892, 0.036999999999999034, 0.0032500000000013074, 0.028499999999999304, 0.025000000000000355, 0.02224999999999966, -0.04049999999999976, 0.0600000000000005, 0.08624999999999972, 0.0019999999999988916, -0.03200000000000003, -0.006750000000000256, 0.037499999999999645, 0.050499999999999545, 0.04124999999999979, 0.0589999999999975, 0.09174999999999933, 0.02525000000000155, -0.017750000000001265, -0.023000000000001464, -0.00849999999999973, 0.040749999999999176, 0.06649999999999956, 0.10599999999999987, 0.11500000000000021, 0.06800000000000139, 0.0010000000000012221, -0.03625000000000078], zp_timestamp='2025-11-25T21:12:00')
2025-11-25T23:13:19.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:13:19.746 [DEBUG] [Thread-7469] [transport.py] [_log()] starting thread (client mode): 0x70d7df90
2025-11-25T23:13:19.747 [DEBUG] [Thread-7469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:13:19.762 [DEBUG] [Thread-7469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:13:19.762 [INFO] [Thread-7469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:13:19.770 [DEBUG] [Thread-7469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:13:19.770 [DEBUG] [Thread-7469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:13:19.770 [DEBUG] [Thread-7469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:13:19.770 [DEBUG] [Thread-7469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:13:19.770 [DEBUG] [Thread-7469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:13:19.771 [DEBUG] [Thread-7469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:13:19.771 [DEBUG] [Thread-7469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:13:19.771 [DEBUG] [Thread-7469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:13:19.771 [DEBUG] [Thread-7469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:13:19.771 [DEBUG] [Thread-7469] [transport.py] [_log()] client lang: <none>
2025-11-25T23:13:19.771 [DEBUG] [Thread-7469] [transport.py] [_log()] server lang: <none>
2025-11-25T23:13:19.771 [DEBUG] [Thread-7469] [transport.py] [_log()] kex follows: False
2025-11-25T23:13:19.771 [DEBUG] [Thread-7469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:13:19.771 [DEBUG] [Thread-7469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:13:19.772 [DEBUG] [Thread-7469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:13:19.772 [DEBUG] [Thread-7469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:13:19.772 [DEBUG] [Thread-7469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:13:19.772 [DEBUG] [Thread-7469] [transport.py] [_log()] Compression: none
2025-11-25T23:13:19.772 [DEBUG] [Thread-7469] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:13:19.830 [DEBUG] [Thread-7469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:13:19.831 [DEBUG] [Thread-7469] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:13:19.832 [DEBUG] [Thread-7469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:13:19.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:13:19.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:13:19.887 [DEBUG] [Thread-7469] [transport.py] [_log()] userauth is OK
2025-11-25T23:13:19.887 [DEBUG] [Thread-7469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:13:19.887 [DEBUG] [Thread-7469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:13:19.887 [DEBUG] [Thread-7469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:13:19.887 [DEBUG] [Thread-7469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:13:19.906 [INFO] [Thread-7469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:13:19.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:13:19.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:13:20.760 [DEBUG] [Thread-7469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:13:20.761 [DEBUG] [Thread-7469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:13:20.809 [DEBUG] [Thread-7469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:13:20.809 [DEBUG] [Thread-7469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:13:20.818 [DEBUG] [Thread-7469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:13:20.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:13:20.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:13:20.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:13:20.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:13:20.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:13:20.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:13:20.855 [DEBUG] [Thread-7469] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:13:22.307 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:26.228 [DEBUG] [Thread-7471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:32.704 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:41.294 [DEBUG] [Thread-7472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:43.143 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:13:50.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:13:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:13:51.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 13, 44), 29.3, 13.16, 0.0, 9.53, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:13:51.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:13:44
2025-11-25T23:13:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:13:51.849 [DEBUG] [Thread-7473] [transport.py] [_log()] starting thread (client mode): 0x70d750c0
2025-11-25T23:13:51.849 [DEBUG] [Thread-7473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:13:51.869 [DEBUG] [Thread-7473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:13:51.869 [INFO] [Thread-7473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] client lang: <none>
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] server lang: <none>
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] kex follows: False
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] Compression: none
2025-11-25T23:13:51.872 [DEBUG] [Thread-7473] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:13:51.888 [DEBUG] [Thread-7473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:13:51.888 [DEBUG] [Thread-7473] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:13:51.888 [DEBUG] [Thread-7473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:13:51.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:13:51.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:13:51.889 [DEBUG] [Thread-7473] [transport.py] [_log()] userauth is OK
2025-11-25T23:13:51.889 [DEBUG] [Thread-7473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:13:51.889 [DEBUG] [Thread-7473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:13:51.889 [DEBUG] [Thread-7473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:13:51.889 [DEBUG] [Thread-7473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:13:51.899 [INFO] [Thread-7473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:13:51.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:13:52.488 [DEBUG] [Thread-7473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:13:52.489 [DEBUG] [Thread-7473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:13:52.489 [DEBUG] [Thread-7473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:13:52.529 [DEBUG] [Thread-7473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:13:52.529 [DEBUG] [Thread-7473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:13:52.532 [DEBUG] [Thread-7473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:13:52.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:13:52.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:13:52.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:13:52.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:13:52.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:13:52.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:13:52.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.884473 -999.00  +20.50   7.16     18   -4.30 1 1 1 1 1     0    0 24.90 12.93 ZNESW 8.6 7.2 171.0 9.9 20.0 -25.8 20.0 -25.3 19.7 -23.9 19.9 -25.0
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.884473
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:13:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:13:44', tmtdew=29.3, humidity=13.16, cloud=0.0, wind=9.53, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:13:44', seeing=0.75, atlas_timestamp='2025-11-25T21:13:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.02674999999999983, -0.00274999999999892, -0.005000000000000782, 0.04100000000000037, -0.00274999999999892, 0.036999999999999034, 0.0032500000000013074, 0.028499999999999304, 0.025000000000000355, 0.02224999999999966, -0.04049999999999976, 0.0600000000000005, 0.08624999999999972, 0.0019999999999988916, -0.03200000000000003, -0.006750000000000256, 0.037499999999999645, 0.050499999999999545, 0.04124999999999979, 0.0589999999999975, 0.09174999999999933, 0.02525000000000155, -0.017750000000001265, -0.023000000000001464, -0.00849999999999973, 0.040749999999999176, 0.06649999999999956, 0.10599999999999987, 0.11500000000000021, 0.06800000000000139, 0.0010000000000012221, -0.03625000000000078], zp_timestamp='2025-11-25T21:12:00')
2025-11-25T23:13:52.552 [DEBUG] [Thread-7473] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:13:52.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:13:52.635 [DEBUG] [Thread-7476] [transport.py] [_log()] starting thread (client mode): 0x70d6bf40
2025-11-25T23:13:52.636 [DEBUG] [Thread-7476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:13:52.651 [DEBUG] [Thread-7476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:13:52.651 [INFO] [Thread-7476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] client lang: <none>
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] server lang: <none>
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] kex follows: False
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] Compression: none
2025-11-25T23:13:52.659 [DEBUG] [Thread-7476] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:13:52.717 [DEBUG] [Thread-7476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:13:52.717 [DEBUG] [Thread-7476] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:13:52.717 [DEBUG] [Thread-7476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:13:52.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:13:52.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:13:52.777 [DEBUG] [Thread-7476] [transport.py] [_log()] userauth is OK
2025-11-25T23:13:52.777 [DEBUG] [Thread-7476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:13:52.777 [DEBUG] [Thread-7476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:13:52.777 [DEBUG] [Thread-7476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:13:52.777 [DEBUG] [Thread-7476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:13:52.791 [INFO] [Thread-7476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:13:52.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:13:52.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:13:53.557 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:13:53.634 [DEBUG] [Thread-7476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:13:53.634 [DEBUG] [Thread-7476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:13:53.682 [DEBUG] [Thread-7476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:13:53.682 [DEBUG] [Thread-7476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:13:53.693 [DEBUG] [Thread-7476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:13:53.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:13:53.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:13:53.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:13:53.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:13:53.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:13:53.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:13:53.728 [DEBUG] [Thread-7476] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:13:56.324 [DEBUG] [Thread-7478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:03.698 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:03.699 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:03.975 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:07.311 [DEBUG] [Thread-7479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:11.375 [DEBUG] [Thread-7480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:14.382 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:23.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:14:23.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:14:23.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:14:24.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 14, 16), 29.3, 13.16, 0.0, 10.25, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:14:24.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:14:16
2025-11-25T23:14:24.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:14:24.664 [DEBUG] [Thread-7481] [transport.py] [_log()] starting thread (client mode): 0x70d74190
2025-11-25T23:14:24.664 [DEBUG] [Thread-7481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:14:24.684 [DEBUG] [Thread-7481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:14:24.684 [INFO] [Thread-7481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:14:24.686 [DEBUG] [Thread-7481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:14:24.686 [DEBUG] [Thread-7481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:14:24.686 [DEBUG] [Thread-7481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:14:24.686 [DEBUG] [Thread-7481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] client lang: <none>
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] server lang: <none>
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] kex follows: False
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:14:24.687 [DEBUG] [Thread-7481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:14:24.688 [DEBUG] [Thread-7481] [transport.py] [_log()] Compression: none
2025-11-25T23:14:24.688 [DEBUG] [Thread-7481] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:14:24.702 [DEBUG] [Thread-7481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:14:24.703 [DEBUG] [Thread-7481] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:14:24.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:14:24.704 [DEBUG] [Thread-7481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:14:24.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:14:24.706 [DEBUG] [Thread-7481] [transport.py] [_log()] userauth is OK
2025-11-25T23:14:24.706 [DEBUG] [Thread-7481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:14:24.706 [DEBUG] [Thread-7481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:14:24.706 [DEBUG] [Thread-7481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:14:24.706 [DEBUG] [Thread-7481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:14:24.731 [INFO] [Thread-7481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:14:24.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:14:24.783 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:25.392 [DEBUG] [Thread-7481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:14:25.393 [DEBUG] [Thread-7481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:14:25.393 [DEBUG] [Thread-7481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:14:25.433 [DEBUG] [Thread-7481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:14:25.433 [DEBUG] [Thread-7481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:14:25.436 [DEBUG] [Thread-7481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:14:25.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:14:25.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:14:25.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:14:25.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:14:25.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:14:25.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:14:25.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.884820 -999.00  +20.50   6.60     18   -4.30 1 1 1 1 1     0    0 25.53 13.21 ZNESW 6.3 6.6 160.2 8.8 20.1 -25.6 20.1 -24.9 19.7 -24.0 19.9 -24.7
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.884820
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:14:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:14:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:14:16', tmtdew=29.3, humidity=13.16, cloud=0.0, wind=10.25, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:14:16', seeing=0.89, atlas_timestamp='2025-11-25T21:14:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.02674999999999983, -0.00274999999999892, -0.005000000000000782, 0.04100000000000037, -0.00274999999999892, 0.036999999999999034, 0.0032500000000013074, 0.028499999999999304, 0.025000000000000355, 0.02224999999999966, -0.04049999999999976, 0.0600000000000005, 0.08624999999999972, 0.0019999999999988916, -0.03200000000000003, -0.006750000000000256, 0.037499999999999645, 0.050499999999999545, 0.04124999999999979, 0.0589999999999975, 0.09174999999999933, 0.02525000000000155, -0.017750000000001265, -0.023000000000001464, -0.00849999999999973, 0.040749999999999176, 0.06649999999999956, 0.10599999999999987, 0.11500000000000021, 0.06800000000000139, 0.0010000000000012221, -0.03625000000000078], zp_timestamp='2025-11-25T21:12:00')
2025-11-25T23:14:25.454 [DEBUG] [Thread-7481] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:14:25.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:14:25.540 [DEBUG] [Thread-7484] [transport.py] [_log()] starting thread (client mode): 0x70d74a60
2025-11-25T23:14:25.541 [DEBUG] [Thread-7484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:14:25.555 [DEBUG] [Thread-7484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:14:25.555 [INFO] [Thread-7484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] client lang: <none>
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] server lang: <none>
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] kex follows: False
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] Compression: none
2025-11-25T23:14:25.563 [DEBUG] [Thread-7484] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:14:25.621 [DEBUG] [Thread-7484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:14:25.621 [DEBUG] [Thread-7484] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:14:25.621 [DEBUG] [Thread-7484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:14:25.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:14:25.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:14:25.678 [DEBUG] [Thread-7484] [transport.py] [_log()] userauth is OK
2025-11-25T23:14:25.678 [DEBUG] [Thread-7484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:14:25.678 [DEBUG] [Thread-7484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:14:25.678 [DEBUG] [Thread-7484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:14:25.678 [DEBUG] [Thread-7484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:14:25.692 [INFO] [Thread-7484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:14:25.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:14:25.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:14:26.411 [DEBUG] [Thread-7486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:26.551 [DEBUG] [Thread-7484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:14:26.551 [DEBUG] [Thread-7484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:14:26.602 [DEBUG] [Thread-7484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:14:26.602 [DEBUG] [Thread-7484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:14:26.611 [DEBUG] [Thread-7484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:14:26.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:14:26.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:14:26.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:14:26.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:14:26.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:14:26.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:14:26.642 [DEBUG] [Thread-7484] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:14:35.179 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:41.448 [DEBUG] [Thread-7487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:45.576 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:55.971 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:56.483 [DEBUG] [Thread-7488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:14:56.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:14:56.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:14:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:14:57.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 14, 48), 29.29, 13.16, 0.0, 11.06, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:14:57.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:14:48
2025-11-25T23:14:57.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:14:57.567 [DEBUG] [Thread-7489] [transport.py] [_log()] starting thread (client mode): 0x70d77340
2025-11-25T23:14:57.567 [DEBUG] [Thread-7489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:14:57.586 [DEBUG] [Thread-7489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:14:57.586 [INFO] [Thread-7489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:14:57.589 [DEBUG] [Thread-7489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:14:57.589 [DEBUG] [Thread-7489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:14:57.589 [DEBUG] [Thread-7489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:14:57.589 [DEBUG] [Thread-7489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:14:57.589 [DEBUG] [Thread-7489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:14:57.589 [DEBUG] [Thread-7489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:14:57.589 [DEBUG] [Thread-7489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:14:57.589 [DEBUG] [Thread-7489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:14:57.589 [DEBUG] [Thread-7489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] client lang: <none>
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] server lang: <none>
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] kex follows: False
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] Compression: none
2025-11-25T23:14:57.590 [DEBUG] [Thread-7489] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:14:57.606 [DEBUG] [Thread-7489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:14:57.607 [DEBUG] [Thread-7489] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:14:57.607 [DEBUG] [Thread-7489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:14:57.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:14:57.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:14:57.608 [DEBUG] [Thread-7489] [transport.py] [_log()] userauth is OK
2025-11-25T23:14:57.608 [DEBUG] [Thread-7489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:14:57.608 [DEBUG] [Thread-7489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:14:57.609 [DEBUG] [Thread-7489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:14:57.609 [DEBUG] [Thread-7489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:14:57.621 [INFO] [Thread-7489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:14:57.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:14:58.194 [DEBUG] [Thread-7489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:14:58.194 [DEBUG] [Thread-7489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:14:58.195 [DEBUG] [Thread-7489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:14:58.236 [DEBUG] [Thread-7489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:14:58.236 [DEBUG] [Thread-7489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:14:58.240 [DEBUG] [Thread-7489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:14:58.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:14:58.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:14:58.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:14:58.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:14:58.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:14:58.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:14:58.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:14:58.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:14:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:14:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.885167 -999.00  +20.50   7.05     18   -4.30 1 1 1 1 1     0    0 25.37 13.74 ZNESW 6.8 7.0 171.2 8.4 20.0 -25.8 20.0 -25.3 19.7 -23.8 19.9 -24.9
2025-11-25T23:14:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:14:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:14:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.885167
2025-11-25T23:14:58.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:14:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:14:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:14:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:14:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:14:58.265 [DEBUG] [Thread-7489] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:14:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:14:48', tmtdew=29.29, humidity=13.16, cloud=0.0, wind=11.06, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:14:48', seeing=0.89, atlas_timestamp='2025-11-25T21:14:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.02674999999999983, -0.00274999999999892, -0.005000000000000782, 0.04100000000000037, -0.00274999999999892, 0.036999999999999034, 0.0032500000000013074, 0.028499999999999304, 0.025000000000000355, 0.02224999999999966, -0.04049999999999976, 0.0600000000000005, 0.08624999999999972, 0.0019999999999988916, -0.03200000000000003, -0.006750000000000256, 0.037499999999999645, 0.050499999999999545, 0.04124999999999979, 0.0589999999999975, 0.09174999999999933, 0.02525000000000155, -0.017750000000001265, -0.023000000000001464, -0.00849999999999973, 0.040749999999999176, 0.06649999999999956, 0.10599999999999987, 0.11500000000000021, 0.06800000000000139, 0.0010000000000012221, -0.03625000000000078], zp_timestamp='2025-11-25T21:12:00')
2025-11-25T23:14:58.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:14:58.360 [DEBUG] [Thread-7492] [transport.py] [_log()] starting thread (client mode): 0x70da4730
2025-11-25T23:14:58.360 [DEBUG] [Thread-7492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:14:58.378 [DEBUG] [Thread-7492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:14:58.379 [INFO] [Thread-7492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:14:58.386 [DEBUG] [Thread-7492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:14:58.386 [DEBUG] [Thread-7492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:14:58.386 [DEBUG] [Thread-7492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:14:58.386 [DEBUG] [Thread-7492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] client lang: <none>
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] server lang: <none>
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] kex follows: False
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] Compression: none
2025-11-25T23:14:58.387 [DEBUG] [Thread-7492] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:14:58.444 [DEBUG] [Thread-7492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:14:58.445 [DEBUG] [Thread-7492] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:14:58.445 [DEBUG] [Thread-7492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:14:58.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:14:58.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:14:58.500 [DEBUG] [Thread-7492] [transport.py] [_log()] userauth is OK
2025-11-25T23:14:58.500 [DEBUG] [Thread-7492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:14:58.500 [DEBUG] [Thread-7492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:14:58.500 [DEBUG] [Thread-7492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:14:58.500 [DEBUG] [Thread-7492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:14:58.518 [INFO] [Thread-7492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:14:58.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:14:58.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:14:59.365 [DEBUG] [Thread-7492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:14:59.365 [DEBUG] [Thread-7492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:14:59.413 [DEBUG] [Thread-7492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:14:59.413 [DEBUG] [Thread-7492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:14:59.422 [DEBUG] [Thread-7492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:14:59.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:14:59.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:14:59.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:14:59.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:14:59.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:14:59.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:14:59.457 [DEBUG] [Thread-7492] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:15:03.903 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:03.904 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:06.370 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:07.361 [DEBUG] [Thread-7494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:11.517 [DEBUG] [Thread-7495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:16.765 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:26.567 [DEBUG] [Thread-7496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:27.181 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:29.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:15:29.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:15:29.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:15:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 15, 20), 29.22, 13.23, 0.0, 11.26, 20.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:15:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:15:20
2025-11-25T23:15:30.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:15:30.383 [DEBUG] [Thread-7497] [transport.py] [_log()] starting thread (client mode): 0x7374d780
2025-11-25T23:15:30.383 [DEBUG] [Thread-7497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:15:30.399 [DEBUG] [Thread-7497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:15:30.400 [INFO] [Thread-7497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:15:30.402 [DEBUG] [Thread-7497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:15:30.402 [DEBUG] [Thread-7497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:15:30.402 [DEBUG] [Thread-7497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] client lang: <none>
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] server lang: <none>
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] kex follows: False
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] Compression: none
2025-11-25T23:15:30.403 [DEBUG] [Thread-7497] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:15:30.420 [DEBUG] [Thread-7497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:15:30.421 [DEBUG] [Thread-7497] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:15:30.421 [DEBUG] [Thread-7497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:15:30.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:15:30.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:15:30.465 [DEBUG] [Thread-7497] [transport.py] [_log()] userauth is OK
2025-11-25T23:15:30.465 [DEBUG] [Thread-7497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:15:30.465 [DEBUG] [Thread-7497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:15:30.465 [DEBUG] [Thread-7497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:15:30.465 [DEBUG] [Thread-7497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:15:30.479 [INFO] [Thread-7497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:15:30.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:15:31.057 [DEBUG] [Thread-7497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:15:31.057 [DEBUG] [Thread-7497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:15:31.058 [DEBUG] [Thread-7497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:15:31.098 [DEBUG] [Thread-7497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:15:31.098 [DEBUG] [Thread-7497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:15:31.101 [DEBUG] [Thread-7497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:15:31.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:15:31.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:15:31.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:15:31.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:15:31.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:15:31.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:15:31.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:15:31.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:15:31.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:15:31.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.885514 -999.00  +20.40   8.16     18   -4.40 1 1 1 1 1     0    0 24.97 13.77 ZNESW 8.1 8.2 164.2 10.0 20.0 -25.8 20.0 -25.4 19.7 -24.0 19.9 -25.0
2025-11-25T23:15:31.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:15:31.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:15:31.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.885514
2025-11-25T23:15:31.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:15:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:15:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:15:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:15:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:15:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:15:20', tmtdew=29.22, humidity=13.23, cloud=0.0, wind=11.26, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:15:20', seeing=0.8, atlas_timestamp='2025-11-25T21:15:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.02674999999999983, -0.00274999999999892, -0.005000000000000782, 0.04100000000000037, -0.00274999999999892, 0.036999999999999034, 0.0032500000000013074, 0.028499999999999304, 0.025000000000000355, 0.02224999999999966, -0.04049999999999976, 0.0600000000000005, 0.08624999999999972, 0.0019999999999988916, -0.03200000000000003, -0.006750000000000256, 0.037499999999999645, 0.050499999999999545, 0.04124999999999979, 0.0589999999999975, 0.09174999999999933, 0.02525000000000155, -0.017750000000001265, -0.023000000000001464, -0.00849999999999973, 0.040749999999999176, 0.06649999999999956, 0.10599999999999987, 0.11500000000000021, 0.06800000000000139, 0.0010000000000012221, -0.03625000000000078], zp_timestamp='2025-11-25T21:12:00')
2025-11-25T23:15:31.127 [DEBUG] [Thread-7497] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:15:31.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:15:31.222 [DEBUG] [Thread-7500] [transport.py] [_log()] starting thread (client mode): 0x70d43820
2025-11-25T23:15:31.222 [DEBUG] [Thread-7500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:15:31.236 [DEBUG] [Thread-7500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:15:31.236 [INFO] [Thread-7500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] client lang: <none>
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] server lang: <none>
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] kex follows: False
2025-11-25T23:15:31.244 [DEBUG] [Thread-7500] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:15:31.245 [DEBUG] [Thread-7500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:15:31.245 [DEBUG] [Thread-7500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:15:31.245 [DEBUG] [Thread-7500] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:15:31.245 [DEBUG] [Thread-7500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:15:31.245 [DEBUG] [Thread-7500] [transport.py] [_log()] Compression: none
2025-11-25T23:15:31.245 [DEBUG] [Thread-7500] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:15:31.308 [DEBUG] [Thread-7500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:15:31.309 [DEBUG] [Thread-7500] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:15:31.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:15:31.310 [DEBUG] [Thread-7500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:15:31.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:15:31.364 [DEBUG] [Thread-7500] [transport.py] [_log()] userauth is OK
2025-11-25T23:15:31.364 [DEBUG] [Thread-7500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:15:31.364 [DEBUG] [Thread-7500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:15:31.365 [DEBUG] [Thread-7500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:15:31.365 [DEBUG] [Thread-7500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:15:31.384 [INFO] [Thread-7500] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:15:31.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:15:31.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:15:32.232 [DEBUG] [Thread-7500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:15:32.232 [DEBUG] [Thread-7500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:15:32.279 [DEBUG] [Thread-7500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:15:32.279 [DEBUG] [Thread-7500] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:15:32.288 [DEBUG] [Thread-7500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:15:32.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:15:32.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:15:32.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:15:32.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:15:32.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:15:32.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:15:32.320 [DEBUG] [Thread-7500] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:15:37.644 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:41.604 [DEBUG] [Thread-7502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:48.055 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:56.642 [DEBUG] [Thread-7503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:15:58.448 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:02.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:16:02.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:16:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:16:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 15, 52), 29.24, 13.21, 0.0, 9.53, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:16:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:15:52
2025-11-25T23:16:03.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:16:03.233 [DEBUG] [Thread-7504] [transport.py] [_log()] starting thread (client mode): 0x70d6bf40
2025-11-25T23:16:03.233 [DEBUG] [Thread-7504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:16:03.252 [DEBUG] [Thread-7504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:16:03.252 [INFO] [Thread-7504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] client lang: <none>
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] server lang: <none>
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] kex follows: False
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] Compression: none
2025-11-25T23:16:03.254 [DEBUG] [Thread-7504] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:16:03.271 [DEBUG] [Thread-7504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:16:03.272 [DEBUG] [Thread-7504] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:16:03.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:16:03.273 [DEBUG] [Thread-7504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:16:03.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:16:03.275 [DEBUG] [Thread-7504] [transport.py] [_log()] userauth is OK
2025-11-25T23:16:03.275 [DEBUG] [Thread-7504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:16:03.275 [DEBUG] [Thread-7504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:16:03.275 [DEBUG] [Thread-7504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:16:03.275 [DEBUG] [Thread-7504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:16:03.294 [INFO] [Thread-7504] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:16:03.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:16:03.941 [DEBUG] [Thread-7504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:16:03.941 [DEBUG] [Thread-7504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:16:03.941 [DEBUG] [Thread-7504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:16:03.981 [DEBUG] [Thread-7504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:16:03.982 [DEBUG] [Thread-7504] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:16:03.984 [DEBUG] [Thread-7504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:16:03.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:16:04.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:16:04.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:16:04.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:16:04.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:16:04.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:16:04.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:16:04.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:16:04.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:16:04.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.885514 -999.00  +20.40   8.16     18   -4.40 1 1 1 1 1     0    0 24.97 13.77 ZNESW 8.1 8.2 164.2 10.0 20.0 -25.8 20.0 -25.4 19.7 -24.0 19.9 -25.0
2025-11-25T23:16:04.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:16:04.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:16:04.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.885514
2025-11-25T23:16:04.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:16:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:16:04.012 [DEBUG] [Thread-7504] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:16:04.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:16:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:16:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:16:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:15:52', tmtdew=29.24, humidity=13.21, cloud=0.0, wind=9.53, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:15:52', seeing=0.89, atlas_timestamp='2025-11-25T21:15:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:14:00')
2025-11-25T23:16:04.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:16:04.108 [DEBUG] [Thread-7507] [transport.py] [_log()] starting thread (client mode): 0x70d41180
2025-11-25T23:16:04.108 [DEBUG] [Thread-7507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:16:04.123 [DEBUG] [Thread-7507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:16:04.123 [INFO] [Thread-7507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:16:04.131 [DEBUG] [Thread-7507] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:16:04.131 [DEBUG] [Thread-7507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:16:04.131 [DEBUG] [Thread-7507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:16:04.132 [DEBUG] [Thread-7507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:16:04.132 [DEBUG] [Thread-7507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:16:04.132 [DEBUG] [Thread-7507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:16:04.132 [DEBUG] [Thread-7507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:16:04.132 [DEBUG] [Thread-7507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:16:04.132 [DEBUG] [Thread-7507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:16:04.132 [DEBUG] [Thread-7507] [transport.py] [_log()] client lang: <none>
2025-11-25T23:16:04.132 [DEBUG] [Thread-7507] [transport.py] [_log()] server lang: <none>
2025-11-25T23:16:04.132 [DEBUG] [Thread-7507] [transport.py] [_log()] kex follows: False
2025-11-25T23:16:04.133 [DEBUG] [Thread-7507] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:16:04.133 [DEBUG] [Thread-7507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:16:04.133 [DEBUG] [Thread-7507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:16:04.133 [DEBUG] [Thread-7507] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:16:04.133 [DEBUG] [Thread-7507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:16:04.133 [DEBUG] [Thread-7507] [transport.py] [_log()] Compression: none
2025-11-25T23:16:04.133 [DEBUG] [Thread-7507] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:16:04.191 [DEBUG] [Thread-7507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:16:04.192 [DEBUG] [Thread-7507] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:16:04.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:16:04.193 [DEBUG] [Thread-7507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:16:04.194 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:04.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:16:04.196 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:04.250 [DEBUG] [Thread-7507] [transport.py] [_log()] userauth is OK
2025-11-25T23:16:04.250 [DEBUG] [Thread-7507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:16:04.250 [DEBUG] [Thread-7507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:16:04.250 [DEBUG] [Thread-7507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:16:04.250 [DEBUG] [Thread-7507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:16:04.269 [INFO] [Thread-7507] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:16:04.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:16:04.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:16:05.164 [DEBUG] [Thread-7507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:16:05.165 [DEBUG] [Thread-7507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:16:05.212 [DEBUG] [Thread-7507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:16:05.213 [DEBUG] [Thread-7507] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:16:05.222 [DEBUG] [Thread-7507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:16:05.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:16:05.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:16:05.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:16:05.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:16:05.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:16:05.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:16:05.259 [DEBUG] [Thread-7507] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:16:07.428 [DEBUG] [Thread-7509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:08.891 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:11.675 [DEBUG] [Thread-7510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:19.325 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:26.714 [DEBUG] [Thread-7511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:29.753 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:35.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:16:35.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:16:35.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:16:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 16, 24), 29.32, 13.14, 0.0, 9.46, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:16:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:16:24
2025-11-25T23:16:36.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:16:36.170 [DEBUG] [Thread-7512] [transport.py] [_log()] starting thread (client mode): 0x70d7f520
2025-11-25T23:16:36.170 [DEBUG] [Thread-7512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:16:36.190 [DEBUG] [Thread-7512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:16:36.190 [INFO] [Thread-7512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:16:36.193 [DEBUG] [Thread-7512] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:16:36.193 [DEBUG] [Thread-7512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:16:36.193 [DEBUG] [Thread-7512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:16:36.193 [DEBUG] [Thread-7512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:16:36.193 [DEBUG] [Thread-7512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:16:36.193 [DEBUG] [Thread-7512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:16:36.193 [DEBUG] [Thread-7512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:16:36.193 [DEBUG] [Thread-7512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] client lang: <none>
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] server lang: <none>
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] kex follows: False
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] Compression: none
2025-11-25T23:16:36.194 [DEBUG] [Thread-7512] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:16:36.212 [DEBUG] [Thread-7512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:16:36.213 [DEBUG] [Thread-7512] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:16:36.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:16:36.214 [DEBUG] [Thread-7512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:16:36.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:16:36.216 [DEBUG] [Thread-7512] [transport.py] [_log()] userauth is OK
2025-11-25T23:16:36.216 [DEBUG] [Thread-7512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:16:36.216 [DEBUG] [Thread-7512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:16:36.216 [DEBUG] [Thread-7512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:16:36.216 [DEBUG] [Thread-7512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:16:36.240 [INFO] [Thread-7512] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:16:36.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:16:36.883 [DEBUG] [Thread-7512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:16:36.884 [DEBUG] [Thread-7512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:16:36.884 [DEBUG] [Thread-7512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:16:36.925 [DEBUG] [Thread-7512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:16:36.925 [DEBUG] [Thread-7512] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:16:36.929 [DEBUG] [Thread-7512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:16:36.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:16:36.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:16:36.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:16:36.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:16:36.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:16:36.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:16:36.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:16:36.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:16:36.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:16:36.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.885862 -999.00  +20.40   5.90     18   -4.40 1 1 1 1 1     0    0 25.26 14.30 ZNESW 5.8 5.9 166.3 9.9 20.0 -25.8 20.0 -25.2 19.7 -24.1 19.9 -24.9
2025-11-25T23:16:36.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:16:36.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:16:36.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.885862
2025-11-25T23:16:36.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:16:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:16:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:16:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:16:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:16:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:16:24', tmtdew=29.32, humidity=13.14, cloud=0.0, wind=9.46, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:16:24', seeing=0.81, atlas_timestamp='2025-11-25T21:15:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:14:00')
2025-11-25T23:16:36.954 [DEBUG] [Thread-7512] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:16:37.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:16:37.049 [DEBUG] [Thread-7515] [transport.py] [_log()] starting thread (client mode): 0x70d3bfd0
2025-11-25T23:16:37.049 [DEBUG] [Thread-7515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:16:37.067 [DEBUG] [Thread-7515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:16:37.067 [INFO] [Thread-7515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] client lang: <none>
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] server lang: <none>
2025-11-25T23:16:37.075 [DEBUG] [Thread-7515] [transport.py] [_log()] kex follows: False
2025-11-25T23:16:37.076 [DEBUG] [Thread-7515] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:16:37.076 [DEBUG] [Thread-7515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:16:37.076 [DEBUG] [Thread-7515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:16:37.076 [DEBUG] [Thread-7515] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:16:37.076 [DEBUG] [Thread-7515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:16:37.076 [DEBUG] [Thread-7515] [transport.py] [_log()] Compression: none
2025-11-25T23:16:37.076 [DEBUG] [Thread-7515] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:16:37.132 [DEBUG] [Thread-7515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:16:37.133 [DEBUG] [Thread-7515] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:16:37.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:16:37.134 [DEBUG] [Thread-7515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:16:37.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:16:37.189 [DEBUG] [Thread-7515] [transport.py] [_log()] userauth is OK
2025-11-25T23:16:37.189 [DEBUG] [Thread-7515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:16:37.189 [DEBUG] [Thread-7515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:16:37.189 [DEBUG] [Thread-7515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:16:37.189 [DEBUG] [Thread-7515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:16:37.209 [INFO] [Thread-7515] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:16:37.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:16:37.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:16:38.029 [DEBUG] [Thread-7515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:16:38.029 [DEBUG] [Thread-7515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:16:38.077 [DEBUG] [Thread-7515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:16:38.077 [DEBUG] [Thread-7515] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:16:38.086 [DEBUG] [Thread-7515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:16:38.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:16:38.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:16:38.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:16:38.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:16:38.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:16:38.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:16:38.123 [DEBUG] [Thread-7515] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:16:40.149 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:41.753 [DEBUG] [Thread-7517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:50.549 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:16:56.806 [DEBUG] [Thread-7518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:00.961 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:04.397 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:04.398 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:07.495 [DEBUG] [Thread-7519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:08.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:17:08.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:17:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:17:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 16, 56), 29.43, 13.13, 0.0, 9.26, 20.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:17:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:16:56
2025-11-25T23:17:08.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:17:09.064 [DEBUG] [Thread-7520] [transport.py] [_log()] starting thread (client mode): 0x70da4d60
2025-11-25T23:17:09.064 [DEBUG] [Thread-7520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:17:09.086 [DEBUG] [Thread-7520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:17:09.086 [INFO] [Thread-7520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:17:09.087 [DEBUG] [Thread-7520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:17:09.087 [DEBUG] [Thread-7520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:17:09.087 [DEBUG] [Thread-7520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:17:09.087 [DEBUG] [Thread-7520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:17:09.087 [DEBUG] [Thread-7520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:17:09.087 [DEBUG] [Thread-7520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:17:09.087 [DEBUG] [Thread-7520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:17:09.087 [DEBUG] [Thread-7520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] client lang: <none>
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] server lang: <none>
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] kex follows: False
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] Compression: none
2025-11-25T23:17:09.088 [DEBUG] [Thread-7520] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:17:09.106 [DEBUG] [Thread-7520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:17:09.106 [DEBUG] [Thread-7520] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:17:09.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:17:09.108 [DEBUG] [Thread-7520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:17:09.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:17:09.109 [DEBUG] [Thread-7520] [transport.py] [_log()] userauth is OK
2025-11-25T23:17:09.110 [DEBUG] [Thread-7520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:17:09.110 [DEBUG] [Thread-7520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:17:09.110 [DEBUG] [Thread-7520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:17:09.110 [DEBUG] [Thread-7520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:17:09.135 [INFO] [Thread-7520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:17:09.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:17:09.842 [DEBUG] [Thread-7520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:17:09.842 [DEBUG] [Thread-7520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:17:09.842 [DEBUG] [Thread-7520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:17:09.884 [DEBUG] [Thread-7520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:17:09.884 [DEBUG] [Thread-7520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:17:09.887 [DEBUG] [Thread-7520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:17:09.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:17:09.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:17:09.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:17:09.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:17:09.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:17:09.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:17:09.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:17:09.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:17:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:17:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.886556 -999.00  +20.40   6.55     18   -4.40 1 1 1 1 1     0    0 25.11 13.91 ZNESW 9.3 6.5 162.6 10.2 20.0 -25.8 20.0 -25.3 19.6 -23.9 19.9 -25.0
2025-11-25T23:17:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:17:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:17:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.886556
2025-11-25T23:17:09.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:17:09.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:17:09.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:17:09.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:17:09.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:17:09.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:16:56', tmtdew=29.43, humidity=13.13, cloud=0.0, wind=9.26, temperature=20.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:16:56', seeing=0.81, atlas_timestamp='2025-11-25T21:16:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:14:00')
2025-11-25T23:17:09.905 [DEBUG] [Thread-7520] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:17:09.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:17:10.000 [DEBUG] [Thread-7523] [transport.py] [_log()] starting thread (client mode): 0x70d42410
2025-11-25T23:17:10.000 [DEBUG] [Thread-7523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:17:10.014 [DEBUG] [Thread-7523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:17:10.015 [INFO] [Thread-7523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:17:10.022 [DEBUG] [Thread-7523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:17:10.022 [DEBUG] [Thread-7523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:17:10.022 [DEBUG] [Thread-7523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:17:10.022 [DEBUG] [Thread-7523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] client lang: <none>
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] server lang: <none>
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] kex follows: False
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] Compression: none
2025-11-25T23:17:10.023 [DEBUG] [Thread-7523] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:17:10.080 [DEBUG] [Thread-7523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:17:10.081 [DEBUG] [Thread-7523] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:17:10.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:17:10.082 [DEBUG] [Thread-7523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:17:10.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:17:10.137 [DEBUG] [Thread-7523] [transport.py] [_log()] userauth is OK
2025-11-25T23:17:10.137 [DEBUG] [Thread-7523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:17:10.137 [DEBUG] [Thread-7523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:17:10.137 [DEBUG] [Thread-7523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:17:10.138 [DEBUG] [Thread-7523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:17:10.156 [INFO] [Thread-7523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:17:10.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:17:10.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:17:10.964 [DEBUG] [Thread-7523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:17:10.964 [DEBUG] [Thread-7523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:17:11.012 [DEBUG] [Thread-7523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:17:11.012 [DEBUG] [Thread-7523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:17:11.023 [DEBUG] [Thread-7523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:17:11.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:17:11.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:17:11.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:17:11.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:17:11.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:17:11.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:17:11.059 [DEBUG] [Thread-7523] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:17:11.377 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:11.837 [DEBUG] [Thread-7525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:21.844 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:26.878 [DEBUG] [Thread-7526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:32.223 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:41.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:17:41.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:17:41.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:17:41.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 17, 28), 29.41, 13.13, 0.0, 10.99, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:17:41.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:17:28
2025-11-25T23:17:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:17:41.905 [DEBUG] [Thread-7527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:41.999 [DEBUG] [Thread-7528] [transport.py] [_log()] starting thread (client mode): 0x70da7220
2025-11-25T23:17:42.000 [DEBUG] [Thread-7528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:17:42.019 [DEBUG] [Thread-7528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:17:42.019 [INFO] [Thread-7528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:17:42.022 [DEBUG] [Thread-7528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] client lang: <none>
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] server lang: <none>
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] kex follows: False
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] Compression: none
2025-11-25T23:17:42.023 [DEBUG] [Thread-7528] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:17:42.041 [DEBUG] [Thread-7528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:17:42.042 [DEBUG] [Thread-7528] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:17:42.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:17:42.043 [DEBUG] [Thread-7528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:17:42.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:17:42.085 [DEBUG] [Thread-7528] [transport.py] [_log()] userauth is OK
2025-11-25T23:17:42.086 [DEBUG] [Thread-7528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:17:42.086 [DEBUG] [Thread-7528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:17:42.086 [DEBUG] [Thread-7528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:17:42.086 [DEBUG] [Thread-7528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:17:42.124 [INFO] [Thread-7528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:17:42.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:17:42.605 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:42.789 [DEBUG] [Thread-7528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:17:42.789 [DEBUG] [Thread-7528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:17:42.790 [DEBUG] [Thread-7528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:17:42.830 [DEBUG] [Thread-7528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:17:42.830 [DEBUG] [Thread-7528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:17:42.834 [DEBUG] [Thread-7528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:17:42.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:17:42.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:17:42.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:17:42.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:17:42.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:17:42.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:17:42.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:17:42.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:17:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:17:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.886903 -999.00  +20.40   6.89     18   -4.40 1 1 1 1 1     0    0 25.17 13.94 ZNESW 7.8 6.9 159.8 10.5 19.9 -25.8 20.0 -25.4 19.6 -23.9 19.9 -25.0
2025-11-25T23:17:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:17:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:17:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.886903
2025-11-25T23:17:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:17:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:17:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:17:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:17:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:17:42.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:17:28', tmtdew=29.41, humidity=13.13, cloud=0.0, wind=10.99, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:17:28', seeing=0.94, atlas_timestamp='2025-11-25T21:17:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:14:00')
2025-11-25T23:17:42.862 [DEBUG] [Thread-7528] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:17:42.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:17:42.957 [DEBUG] [Thread-7531] [transport.py] [_log()] starting thread (client mode): 0x70d74640
2025-11-25T23:17:42.957 [DEBUG] [Thread-7531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:17:42.972 [DEBUG] [Thread-7531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:17:42.972 [INFO] [Thread-7531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] client lang: <none>
2025-11-25T23:17:42.980 [DEBUG] [Thread-7531] [transport.py] [_log()] server lang: <none>
2025-11-25T23:17:42.981 [DEBUG] [Thread-7531] [transport.py] [_log()] kex follows: False
2025-11-25T23:17:42.981 [DEBUG] [Thread-7531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:17:42.981 [DEBUG] [Thread-7531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:17:42.981 [DEBUG] [Thread-7531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:17:42.981 [DEBUG] [Thread-7531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:17:42.981 [DEBUG] [Thread-7531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:17:42.981 [DEBUG] [Thread-7531] [transport.py] [_log()] Compression: none
2025-11-25T23:17:42.981 [DEBUG] [Thread-7531] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:17:43.037 [DEBUG] [Thread-7531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:17:43.038 [DEBUG] [Thread-7531] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:17:43.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:17:43.039 [DEBUG] [Thread-7531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:17:43.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:17:43.094 [DEBUG] [Thread-7531] [transport.py] [_log()] userauth is OK
2025-11-25T23:17:43.094 [DEBUG] [Thread-7531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:17:43.094 [DEBUG] [Thread-7531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:17:43.095 [DEBUG] [Thread-7531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:17:43.095 [DEBUG] [Thread-7531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:17:43.113 [INFO] [Thread-7531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:17:43.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:17:43.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:17:43.951 [DEBUG] [Thread-7531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:17:43.951 [DEBUG] [Thread-7531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:17:43.999 [DEBUG] [Thread-7531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:17:43.999 [DEBUG] [Thread-7531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:17:44.008 [DEBUG] [Thread-7531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:17:44.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:17:44.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:17:44.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:17:44.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:17:44.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:17:44.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:17:44.046 [DEBUG] [Thread-7531] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:17:53.023 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:17:56.947 [DEBUG] [Thread-7533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:03.521 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:04.605 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:04.606 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:07.571 [DEBUG] [Thread-7534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:11.996 [DEBUG] [Thread-7535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:13.956 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:18:14.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:18:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:18:14.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 17, 28), 29.41, 13.13, 0.0, 10.99, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:18:14.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:17:28
2025-11-25T23:18:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:18:15.007 [DEBUG] [Thread-7536] [transport.py] [_log()] starting thread (client mode): 0x70d571c0
2025-11-25T23:18:15.007 [DEBUG] [Thread-7536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:18:15.029 [DEBUG] [Thread-7536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:18:15.029 [INFO] [Thread-7536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:18:15.031 [DEBUG] [Thread-7536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:18:15.031 [DEBUG] [Thread-7536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:18:15.031 [DEBUG] [Thread-7536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:18:15.031 [DEBUG] [Thread-7536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:18:15.031 [DEBUG] [Thread-7536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] client lang: <none>
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] server lang: <none>
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] kex follows: False
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:18:15.032 [DEBUG] [Thread-7536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:18:15.033 [DEBUG] [Thread-7536] [transport.py] [_log()] Compression: none
2025-11-25T23:18:15.033 [DEBUG] [Thread-7536] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:18:15.051 [DEBUG] [Thread-7536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:18:15.051 [DEBUG] [Thread-7536] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:18:15.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:18:15.053 [DEBUG] [Thread-7536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:18:15.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:18:15.055 [DEBUG] [Thread-7536] [transport.py] [_log()] userauth is OK
2025-11-25T23:18:15.055 [DEBUG] [Thread-7536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:18:15.055 [DEBUG] [Thread-7536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:18:15.056 [DEBUG] [Thread-7536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:18:15.056 [DEBUG] [Thread-7536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:18:15.096 [INFO] [Thread-7536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:18:15.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:18:15.890 [DEBUG] [Thread-7536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:18:15.890 [DEBUG] [Thread-7536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:18:15.891 [DEBUG] [Thread-7536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:18:15.931 [DEBUG] [Thread-7536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:18:15.931 [DEBUG] [Thread-7536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:18:15.933 [DEBUG] [Thread-7536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:18:15.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:18:15.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:18:15.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:18:15.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:18:15.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:18:15.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:18:15.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:18:15.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:18:15.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:18:15.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.887250 -999.00  +20.40   7.44     18   -4.30 1 1 1 1 1     0    0 25.19 14.59 ZNESW 11.0 7.4 166.8 11.3 20.0 -25.8 19.9 -25.2 19.6 -24.0 19.9 -24.8
2025-11-25T23:18:15.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:18:15.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:18:15.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.887250
2025-11-25T23:18:15.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:18:15.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:18:15.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:18:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:18:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:18:15.955 [DEBUG] [Thread-7536] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:18:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:17:28', tmtdew=29.41, humidity=13.13, cloud=0.0, wind=10.99, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:18:00', seeing=0.84, atlas_timestamp='2025-11-25T21:17:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:14:00')
2025-11-25T23:18:16.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:18:16.059 [DEBUG] [Thread-7539] [transport.py] [_log()] starting thread (client mode): 0x70da5b70
2025-11-25T23:18:16.060 [DEBUG] [Thread-7539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:18:16.074 [DEBUG] [Thread-7539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:18:16.074 [INFO] [Thread-7539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] client lang: <none>
2025-11-25T23:18:16.082 [DEBUG] [Thread-7539] [transport.py] [_log()] server lang: <none>
2025-11-25T23:18:16.083 [DEBUG] [Thread-7539] [transport.py] [_log()] kex follows: False
2025-11-25T23:18:16.083 [DEBUG] [Thread-7539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:18:16.083 [DEBUG] [Thread-7539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:18:16.083 [DEBUG] [Thread-7539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:18:16.083 [DEBUG] [Thread-7539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:18:16.083 [DEBUG] [Thread-7539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:18:16.083 [DEBUG] [Thread-7539] [transport.py] [_log()] Compression: none
2025-11-25T23:18:16.083 [DEBUG] [Thread-7539] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:18:16.141 [DEBUG] [Thread-7539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:18:16.142 [DEBUG] [Thread-7539] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:18:16.142 [DEBUG] [Thread-7539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:18:16.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:18:16.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:18:16.197 [DEBUG] [Thread-7539] [transport.py] [_log()] userauth is OK
2025-11-25T23:18:16.197 [DEBUG] [Thread-7539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:18:16.197 [DEBUG] [Thread-7539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:18:16.198 [DEBUG] [Thread-7539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:18:16.198 [DEBUG] [Thread-7539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:18:16.215 [INFO] [Thread-7539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:18:16.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:18:16.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:18:17.046 [DEBUG] [Thread-7539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:18:17.046 [DEBUG] [Thread-7539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:18:17.095 [DEBUG] [Thread-7539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:18:17.095 [DEBUG] [Thread-7539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:18:17.107 [DEBUG] [Thread-7539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:18:17.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:18:17.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:18:17.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:18:17.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:18:17.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:18:17.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:18:17.145 [DEBUG] [Thread-7539] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:18:24.388 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:27.031 [DEBUG] [Thread-7541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:34.845 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:42.084 [DEBUG] [Thread-7542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:45.294 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:18:47.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:18:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:18:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 18, 32), 29.39, 13.16, 0.0, 9.97, 20.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:18:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:18:32
2025-11-25T23:18:47.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:18:48.152 [DEBUG] [Thread-7543] [transport.py] [_log()] starting thread (client mode): 0x70d38490
2025-11-25T23:18:48.153 [DEBUG] [Thread-7543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:18:48.172 [DEBUG] [Thread-7543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:18:48.172 [INFO] [Thread-7543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:18:48.175 [DEBUG] [Thread-7543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] client lang: <none>
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] server lang: <none>
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] kex follows: False
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] Compression: none
2025-11-25T23:18:48.176 [DEBUG] [Thread-7543] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:18:48.187 [DEBUG] [Thread-7543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:18:48.187 [DEBUG] [Thread-7543] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:18:48.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:18:48.188 [DEBUG] [Thread-7543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:18:48.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:18:48.188 [DEBUG] [Thread-7543] [transport.py] [_log()] userauth is OK
2025-11-25T23:18:48.188 [DEBUG] [Thread-7543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:18:48.188 [DEBUG] [Thread-7543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:18:48.188 [DEBUG] [Thread-7543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:18:48.188 [DEBUG] [Thread-7543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:18:48.203 [INFO] [Thread-7543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:18:48.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:18:48.874 [DEBUG] [Thread-7543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:18:48.874 [DEBUG] [Thread-7543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:18:48.874 [DEBUG] [Thread-7543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:18:48.914 [DEBUG] [Thread-7543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:18:48.914 [DEBUG] [Thread-7543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:18:48.917 [DEBUG] [Thread-7543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:18:48.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:18:48.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:18:48.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:18:48.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:18:48.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:18:48.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:18:48.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:18:48.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:18:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:18:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.887598 -999.00  +20.50   9.68     18   -4.40 1 1 1 1 1     0    0 25.40 14.14 ZNESW 10.9 9.7 170.8 13.4 20.0 -25.6 20.0 -25.0 19.6 -23.9 19.9 -24.8
2025-11-25T23:18:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:18:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:18:48.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.887598
2025-11-25T23:18:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:18:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:18:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:18:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:18:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:18:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:18:32', tmtdew=29.39, humidity=13.16, cloud=0.0, wind=9.97, temperature=20.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:18:32', seeing=1.0, atlas_timestamp='2025-11-25T21:18:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:14:00')
2025-11-25T23:18:48.934 [DEBUG] [Thread-7543] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:18:49.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:18:49.019 [DEBUG] [Thread-7546] [transport.py] [_log()] starting thread (client mode): 0x70da6620
2025-11-25T23:18:49.020 [DEBUG] [Thread-7546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:18:49.034 [DEBUG] [Thread-7546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:18:49.034 [INFO] [Thread-7546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] client lang: <none>
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] server lang: <none>
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] kex follows: False
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] Compression: none
2025-11-25T23:18:49.042 [DEBUG] [Thread-7546] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:18:49.100 [DEBUG] [Thread-7546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:18:49.100 [DEBUG] [Thread-7546] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:18:49.100 [DEBUG] [Thread-7546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:18:49.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:18:49.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:18:49.157 [DEBUG] [Thread-7546] [transport.py] [_log()] userauth is OK
2025-11-25T23:18:49.157 [DEBUG] [Thread-7546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:18:49.157 [DEBUG] [Thread-7546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:18:49.157 [DEBUG] [Thread-7546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:18:49.157 [DEBUG] [Thread-7546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:18:49.174 [INFO] [Thread-7546] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:18:49.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:18:49.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:18:50.023 [DEBUG] [Thread-7546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:18:50.024 [DEBUG] [Thread-7546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:18:50.071 [DEBUG] [Thread-7546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:18:50.071 [DEBUG] [Thread-7546] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:18:50.079 [DEBUG] [Thread-7546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:18:50.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:18:50.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:18:50.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:18:50.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:18:50.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:18:50.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:18:50.116 [DEBUG] [Thread-7546] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:18:55.784 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:18:57.122 [DEBUG] [Thread-7548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:04.806 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:04.807 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:06.215 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:07.659 [DEBUG] [Thread-7549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:12.175 [DEBUG] [Thread-7550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:16.628 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:19:20.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:19:20.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:19:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 19, 4), 29.43, 13.11, 0.0, 9.74, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:19:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:19:04
2025-11-25T23:19:20.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:19:21.037 [DEBUG] [Thread-7551] [transport.py] [_log()] starting thread (client mode): 0x70d6bf40
2025-11-25T23:19:21.037 [DEBUG] [Thread-7551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:19:21.057 [DEBUG] [Thread-7551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:19:21.058 [INFO] [Thread-7551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] client lang: <none>
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] server lang: <none>
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] kex follows: False
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] Compression: none
2025-11-25T23:19:21.061 [DEBUG] [Thread-7551] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:19:21.079 [DEBUG] [Thread-7551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:19:21.079 [DEBUG] [Thread-7551] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:19:21.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:19:21.080 [DEBUG] [Thread-7551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:19:21.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:19:21.082 [DEBUG] [Thread-7551] [transport.py] [_log()] userauth is OK
2025-11-25T23:19:21.082 [DEBUG] [Thread-7551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:19:21.083 [DEBUG] [Thread-7551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:19:21.083 [DEBUG] [Thread-7551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:19:21.083 [DEBUG] [Thread-7551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:19:21.107 [INFO] [Thread-7551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:19:21.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:19:21.905 [DEBUG] [Thread-7551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:19:21.905 [DEBUG] [Thread-7551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:19:21.906 [DEBUG] [Thread-7551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:19:21.946 [DEBUG] [Thread-7551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:19:21.946 [DEBUG] [Thread-7551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:19:21.950 [DEBUG] [Thread-7551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:19:21.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:19:21.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:19:21.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:19:21.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:19:21.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:19:21.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:19:21.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:19:21.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:19:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:19:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.887945 -999.00  +20.50   8.32     18   -4.40 1 1 1 1 1     0    0 25.38 14.03 ZNESW 6.9 8.3 167.2 10.9 20.0 -25.9 20.0 -24.9 19.6 -24.0 -999.0 -999.0
2025-11-25T23:19:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:19:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:19:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.887945
2025-11-25T23:19:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:19:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:19:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:19:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:19:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:19:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:19:04', tmtdew=29.43, humidity=13.11, cloud=0.0, wind=9.74, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:19:04', seeing=1.0, atlas_timestamp='2025-11-25T21:18:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:18:00')
2025-11-25T23:19:21.979 [DEBUG] [Thread-7551] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:19:22.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:19:22.075 [DEBUG] [Thread-7554] [transport.py] [_log()] starting thread (client mode): 0x70da7e80
2025-11-25T23:19:22.075 [DEBUG] [Thread-7554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:19:22.089 [DEBUG] [Thread-7554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:19:22.090 [INFO] [Thread-7554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:19:22.097 [DEBUG] [Thread-7554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:19:22.097 [DEBUG] [Thread-7554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:19:22.097 [DEBUG] [Thread-7554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] client lang: <none>
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] server lang: <none>
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] kex follows: False
2025-11-25T23:19:22.098 [DEBUG] [Thread-7554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:19:22.099 [DEBUG] [Thread-7554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:19:22.099 [DEBUG] [Thread-7554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:19:22.099 [DEBUG] [Thread-7554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:19:22.099 [DEBUG] [Thread-7554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:19:22.099 [DEBUG] [Thread-7554] [transport.py] [_log()] Compression: none
2025-11-25T23:19:22.099 [DEBUG] [Thread-7554] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:19:22.158 [DEBUG] [Thread-7554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:19:22.158 [DEBUG] [Thread-7554] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:19:22.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:19:22.159 [DEBUG] [Thread-7554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:19:22.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:19:22.217 [DEBUG] [Thread-7554] [transport.py] [_log()] userauth is OK
2025-11-25T23:19:22.218 [DEBUG] [Thread-7554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:19:22.218 [DEBUG] [Thread-7554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:19:22.218 [DEBUG] [Thread-7554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:19:22.218 [DEBUG] [Thread-7554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:19:22.241 [INFO] [Thread-7554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:19:22.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:19:22.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:19:23.072 [DEBUG] [Thread-7554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:19:23.072 [DEBUG] [Thread-7554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:19:23.120 [DEBUG] [Thread-7554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:19:23.120 [DEBUG] [Thread-7554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:19:23.130 [DEBUG] [Thread-7554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:19:23.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:19:23.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:19:23.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:19:23.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:19:23.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:19:23.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:19:23.167 [DEBUG] [Thread-7554] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:19:27.024 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:27.211 [DEBUG] [Thread-7556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:37.420 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:42.250 [DEBUG] [Thread-7557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:47.818 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:53.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:19:53.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:19:53.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:19:53.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 19, 36), 29.29, 13.16, 0.0, 9.05, 20.24, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:19:53.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:19:36
2025-11-25T23:19:53.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:19:54.104 [DEBUG] [Thread-7558] [transport.py] [_log()] starting thread (client mode): 0x70d38490
2025-11-25T23:19:54.105 [DEBUG] [Thread-7558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:19:54.124 [DEBUG] [Thread-7558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:19:54.124 [INFO] [Thread-7558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:19:54.127 [DEBUG] [Thread-7558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:19:54.127 [DEBUG] [Thread-7558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:19:54.127 [DEBUG] [Thread-7558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:19:54.127 [DEBUG] [Thread-7558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:19:54.127 [DEBUG] [Thread-7558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:19:54.127 [DEBUG] [Thread-7558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:19:54.127 [DEBUG] [Thread-7558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:19:54.127 [DEBUG] [Thread-7558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] client lang: <none>
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] server lang: <none>
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] kex follows: False
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] Compression: none
2025-11-25T23:19:54.128 [DEBUG] [Thread-7558] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:19:54.144 [DEBUG] [Thread-7558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:19:54.145 [DEBUG] [Thread-7558] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:19:54.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:19:54.146 [DEBUG] [Thread-7558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:19:54.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:19:54.148 [DEBUG] [Thread-7558] [transport.py] [_log()] userauth is OK
2025-11-25T23:19:54.148 [DEBUG] [Thread-7558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:19:54.149 [DEBUG] [Thread-7558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:19:54.149 [DEBUG] [Thread-7558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:19:54.149 [DEBUG] [Thread-7558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:19:54.172 [INFO] [Thread-7558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:19:54.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:19:54.785 [DEBUG] [Thread-7558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:19:54.785 [DEBUG] [Thread-7558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:19:54.785 [DEBUG] [Thread-7558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:19:54.826 [DEBUG] [Thread-7558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:19:54.826 [DEBUG] [Thread-7558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:19:54.829 [DEBUG] [Thread-7558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:19:54.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:19:54.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:19:54.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:19:54.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:19:54.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:19:54.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:19:54.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:19:54.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:19:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:19:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.888292 -999.00  +20.50   9.66     18   -4.50 1 1 1 1 1     0    0 25.31 14.55 ZNESW 8.3 9.7 178.0 14.5 20.0 -25.6 20.0 -25.3 19.7 -23.9 19.9 -24.9
2025-11-25T23:19:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:19:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:19:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.888292
2025-11-25T23:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:19:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:19:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:19:36', tmtdew=29.29, humidity=13.16, cloud=0.0, wind=9.05, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:19:36', seeing=1.05, atlas_timestamp='2025-11-25T21:19:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:18:00')
2025-11-25T23:19:54.858 [DEBUG] [Thread-7558] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:19:54.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:19:54.953 [DEBUG] [Thread-7561] [transport.py] [_log()] starting thread (client mode): 0x70dbc160
2025-11-25T23:19:54.953 [DEBUG] [Thread-7561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:19:54.969 [DEBUG] [Thread-7561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:19:54.969 [INFO] [Thread-7561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:19:54.976 [DEBUG] [Thread-7561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:19:54.976 [DEBUG] [Thread-7561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:19:54.977 [DEBUG] [Thread-7561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:19:54.977 [DEBUG] [Thread-7561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:19:54.977 [DEBUG] [Thread-7561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:19:54.977 [DEBUG] [Thread-7561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:19:54.977 [DEBUG] [Thread-7561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:19:54.977 [DEBUG] [Thread-7561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:19:54.977 [DEBUG] [Thread-7561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:19:54.977 [DEBUG] [Thread-7561] [transport.py] [_log()] client lang: <none>
2025-11-25T23:19:54.977 [DEBUG] [Thread-7561] [transport.py] [_log()] server lang: <none>
2025-11-25T23:19:54.978 [DEBUG] [Thread-7561] [transport.py] [_log()] kex follows: False
2025-11-25T23:19:54.978 [DEBUG] [Thread-7561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:19:54.978 [DEBUG] [Thread-7561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:19:54.978 [DEBUG] [Thread-7561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:19:54.978 [DEBUG] [Thread-7561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:19:54.978 [DEBUG] [Thread-7561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:19:54.978 [DEBUG] [Thread-7561] [transport.py] [_log()] Compression: none
2025-11-25T23:19:54.979 [DEBUG] [Thread-7561] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:19:55.033 [DEBUG] [Thread-7561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:19:55.034 [DEBUG] [Thread-7561] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:19:55.034 [DEBUG] [Thread-7561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:19:55.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:19:55.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:19:55.091 [DEBUG] [Thread-7561] [transport.py] [_log()] userauth is OK
2025-11-25T23:19:55.091 [DEBUG] [Thread-7561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:19:55.091 [DEBUG] [Thread-7561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:19:55.091 [DEBUG] [Thread-7561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:19:55.091 [DEBUG] [Thread-7561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:19:55.110 [INFO] [Thread-7561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:19:55.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:19:55.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:19:55.952 [DEBUG] [Thread-7561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:19:55.953 [DEBUG] [Thread-7561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:19:56.001 [DEBUG] [Thread-7561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:19:56.001 [DEBUG] [Thread-7561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:19:56.010 [DEBUG] [Thread-7561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:19:56.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:19:56.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:19:56.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:19:56.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:19:56.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:19:56.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:19:56.047 [DEBUG] [Thread-7561] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:19:57.289 [DEBUG] [Thread-7563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:19:58.212 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:05.008 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:05.009 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:07.738 [DEBUG] [Thread-7564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:08.610 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:12.333 [DEBUG] [Thread-7565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:19.005 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:26.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:20:26.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:20:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:20:26.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 20, 8), 29.34, 13.11, 0.0, 9.9, 20.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:20:26.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:20:08
2025-11-25T23:20:26.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:20:26.967 [DEBUG] [Thread-7566] [transport.py] [_log()] starting thread (client mode): 0x70dbe4a0
2025-11-25T23:20:26.967 [DEBUG] [Thread-7566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:20:26.978 [DEBUG] [Thread-7566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:20:26.978 [INFO] [Thread-7566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:20:26.981 [DEBUG] [Thread-7566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:20:26.981 [DEBUG] [Thread-7566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:20:26.981 [DEBUG] [Thread-7566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:20:26.981 [DEBUG] [Thread-7566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] client lang: <none>
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] server lang: <none>
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] kex follows: False
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] Compression: none
2025-11-25T23:20:26.982 [DEBUG] [Thread-7566] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:20:26.999 [DEBUG] [Thread-7566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:20:27.000 [DEBUG] [Thread-7566] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:20:27.001 [DEBUG] [Thread-7566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:20:27.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:20:27.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:20:27.004 [DEBUG] [Thread-7566] [transport.py] [_log()] userauth is OK
2025-11-25T23:20:27.004 [DEBUG] [Thread-7566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:20:27.004 [DEBUG] [Thread-7566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:20:27.004 [DEBUG] [Thread-7566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:20:27.005 [DEBUG] [Thread-7566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:20:27.028 [INFO] [Thread-7566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:20:27.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:20:27.366 [DEBUG] [Thread-7568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:27.873 [DEBUG] [Thread-7566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:20:27.874 [DEBUG] [Thread-7566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:20:27.874 [DEBUG] [Thread-7566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:20:27.915 [DEBUG] [Thread-7566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:20:27.915 [DEBUG] [Thread-7566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:20:27.918 [DEBUG] [Thread-7566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:20:27.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:20:27.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:20:27.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:20:27.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:20:27.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:20:27.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:20:27.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:20:27.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:20:27.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:20:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.888986 -999.00  +20.60   7.26     18   -4.40 1 1 1 1 1     0    0 24.97 16.28 ZNESW 7.2 7.3 153.8 10.2 20.0 -26.0 20.0 -25.2 19.7 -24.1 19.8 -24.9
2025-11-25T23:20:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:20:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:20:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.888986
2025-11-25T23:20:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:20:27.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:20:27.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:20:27.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:20:27.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:20:27.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:20:08', tmtdew=29.34, humidity=13.11, cloud=0.0, wind=9.9, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:20:08', seeing=0.94, atlas_timestamp='2025-11-25T21:20:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:18:00')
2025-11-25T23:20:27.944 [DEBUG] [Thread-7566] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:20:28.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:20:28.041 [DEBUG] [Thread-7570] [transport.py] [_log()] starting thread (client mode): 0x70d39840
2025-11-25T23:20:28.041 [DEBUG] [Thread-7570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:20:28.058 [DEBUG] [Thread-7570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:20:28.059 [INFO] [Thread-7570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] client lang: <none>
2025-11-25T23:20:28.066 [DEBUG] [Thread-7570] [transport.py] [_log()] server lang: <none>
2025-11-25T23:20:28.067 [DEBUG] [Thread-7570] [transport.py] [_log()] kex follows: False
2025-11-25T23:20:28.067 [DEBUG] [Thread-7570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:20:28.067 [DEBUG] [Thread-7570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:20:28.067 [DEBUG] [Thread-7570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:20:28.067 [DEBUG] [Thread-7570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:20:28.067 [DEBUG] [Thread-7570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:20:28.067 [DEBUG] [Thread-7570] [transport.py] [_log()] Compression: none
2025-11-25T23:20:28.067 [DEBUG] [Thread-7570] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:20:28.126 [DEBUG] [Thread-7570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:20:28.127 [DEBUG] [Thread-7570] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:20:28.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:20:28.128 [DEBUG] [Thread-7570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:20:28.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:20:28.186 [DEBUG] [Thread-7570] [transport.py] [_log()] userauth is OK
2025-11-25T23:20:28.187 [DEBUG] [Thread-7570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:20:28.187 [DEBUG] [Thread-7570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:20:28.187 [DEBUG] [Thread-7570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:20:28.187 [DEBUG] [Thread-7570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:20:28.207 [INFO] [Thread-7570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:20:28.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:20:28.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:20:29.050 [DEBUG] [Thread-7570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:20:29.050 [DEBUG] [Thread-7570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:20:29.101 [DEBUG] [Thread-7570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:20:29.101 [DEBUG] [Thread-7570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:20:29.110 [DEBUG] [Thread-7570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:20:29.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:20:29.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:20:29.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:20:29.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:20:29.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:20:29.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:20:29.144 [DEBUG] [Thread-7570] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:20:29.423 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:39.838 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:42.399 [DEBUG] [Thread-7572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:50.251 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:57.455 [DEBUG] [Thread-7573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:20:59.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:20:59.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:20:59.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:20:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 20, 40), 29.25, 13.16, 0.0, 12.09, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:20:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:20:40
2025-11-25T23:20:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:21:00.104 [DEBUG] [Thread-7574] [transport.py] [_log()] starting thread (client mode): 0x70dbc550
2025-11-25T23:21:00.104 [DEBUG] [Thread-7574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:21:00.125 [DEBUG] [Thread-7574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:21:00.126 [INFO] [Thread-7574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] client lang: <none>
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] server lang: <none>
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] kex follows: False
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] Compression: none
2025-11-25T23:21:00.127 [DEBUG] [Thread-7574] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:21:00.140 [DEBUG] [Thread-7574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:21:00.140 [DEBUG] [Thread-7574] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:21:00.141 [DEBUG] [Thread-7574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:21:00.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:21:00.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:21:00.143 [DEBUG] [Thread-7574] [transport.py] [_log()] userauth is OK
2025-11-25T23:21:00.143 [DEBUG] [Thread-7574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:21:00.143 [DEBUG] [Thread-7574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:21:00.143 [DEBUG] [Thread-7574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:21:00.144 [DEBUG] [Thread-7574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:21:00.160 [INFO] [Thread-7574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:21:00.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:21:00.652 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:00.769 [DEBUG] [Thread-7574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:21:00.769 [DEBUG] [Thread-7574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:21:00.770 [DEBUG] [Thread-7574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:21:00.810 [DEBUG] [Thread-7574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:21:00.810 [DEBUG] [Thread-7574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:21:00.813 [DEBUG] [Thread-7574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:21:00.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:21:00.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:21:00.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:21:00.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:21:00.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:21:00.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:21:00.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:21:00.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:21:00.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:21:00.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.889334 -999.00  +20.60   8.60     18   -4.40 1 1 1 1 1     0    0 25.42 17.86 ZNESW 8.3 8.6 162.0 12.9 20.0 -25.8 20.0 -25.3 19.7 -24.0 19.9 -24.9
2025-11-25T23:21:00.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:21:00.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:21:00.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.889334
2025-11-25T23:21:00.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:21:00.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:21:00.839 [DEBUG] [Thread-7574] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:21:00.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:21:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:21:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:21:00.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:20:40', tmtdew=29.25, humidity=13.16, cloud=0.0, wind=12.09, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:20:40', seeing=1.18, atlas_timestamp='2025-11-25T21:20:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:18:00')
2025-11-25T23:21:00.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:21:00.936 [DEBUG] [Thread-7577] [transport.py] [_log()] starting thread (client mode): 0x70d751e0
2025-11-25T23:21:00.936 [DEBUG] [Thread-7577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:21:00.951 [DEBUG] [Thread-7577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:21:00.951 [INFO] [Thread-7577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:21:00.959 [DEBUG] [Thread-7577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:21:00.959 [DEBUG] [Thread-7577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] client lang: <none>
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] server lang: <none>
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] kex follows: False
2025-11-25T23:21:00.960 [DEBUG] [Thread-7577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:21:00.961 [DEBUG] [Thread-7577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:21:00.961 [DEBUG] [Thread-7577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:21:00.961 [DEBUG] [Thread-7577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:21:00.961 [DEBUG] [Thread-7577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:21:00.961 [DEBUG] [Thread-7577] [transport.py] [_log()] Compression: none
2025-11-25T23:21:00.961 [DEBUG] [Thread-7577] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:21:01.022 [DEBUG] [Thread-7577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:21:01.023 [DEBUG] [Thread-7577] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:21:01.024 [DEBUG] [Thread-7577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:21:01.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:21:01.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:21:01.078 [DEBUG] [Thread-7577] [transport.py] [_log()] userauth is OK
2025-11-25T23:21:01.079 [DEBUG] [Thread-7577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:21:01.079 [DEBUG] [Thread-7577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:21:01.079 [DEBUG] [Thread-7577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:21:01.079 [DEBUG] [Thread-7577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:21:01.098 [INFO] [Thread-7577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:21:01.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:21:01.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:21:01.983 [DEBUG] [Thread-7577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:21:01.983 [DEBUG] [Thread-7577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:21:02.031 [DEBUG] [Thread-7577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:21:02.031 [DEBUG] [Thread-7577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:21:02.040 [DEBUG] [Thread-7577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:21:02.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:21:02.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:21:02.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:21:02.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:21:02.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:21:02.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:21:02.077 [DEBUG] [Thread-7577] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:21:05.226 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:05.227 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:07.812 [DEBUG] [Thread-7579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:11.045 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:12.489 [DEBUG] [Thread-7580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:21.451 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:27.536 [DEBUG] [Thread-7581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:31.913 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:32.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:21:32.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:21:32.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:21:32.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 21, 12), 29.26, 13.14, 0.0, 12.07, 20.25, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:21:32.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:21:12
2025-11-25T23:21:32.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:21:33.019 [DEBUG] [Thread-7582] [transport.py] [_log()] starting thread (client mode): 0x70dbfd90
2025-11-25T23:21:33.019 [DEBUG] [Thread-7582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:21:33.038 [DEBUG] [Thread-7582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:21:33.039 [INFO] [Thread-7582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:21:33.042 [DEBUG] [Thread-7582] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] client lang: <none>
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] server lang: <none>
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] kex follows: False
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] Compression: none
2025-11-25T23:21:33.043 [DEBUG] [Thread-7582] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:21:33.059 [DEBUG] [Thread-7582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:21:33.060 [DEBUG] [Thread-7582] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:21:33.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:21:33.061 [DEBUG] [Thread-7582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:21:33.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:21:33.064 [DEBUG] [Thread-7582] [transport.py] [_log()] userauth is OK
2025-11-25T23:21:33.064 [DEBUG] [Thread-7582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:21:33.064 [DEBUG] [Thread-7582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:21:33.064 [DEBUG] [Thread-7582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:21:33.064 [DEBUG] [Thread-7582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:21:33.085 [INFO] [Thread-7582] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:21:33.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:21:33.711 [DEBUG] [Thread-7582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:21:33.712 [DEBUG] [Thread-7582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:21:33.712 [DEBUG] [Thread-7582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:21:33.753 [DEBUG] [Thread-7582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:21:33.753 [DEBUG] [Thread-7582] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:21:33.757 [DEBUG] [Thread-7582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:21:33.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:21:33.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:21:33.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:21:33.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:21:33.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:21:33.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:21:33.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:21:33.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:21:33.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:21:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.889681 -999.00  +20.60  13.83     17   -4.60 1 1 1 1 1     0    0 25.11 17.71 ZNESW 11.4 13.8 156.4 16.0 20.1 -25.7 20.0 -25.1 19.7 -23.8 19.9 -24.9
2025-11-25T23:21:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:21:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:21:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.889681
2025-11-25T23:21:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:21:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:21:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:21:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:21:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:21:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:21:12', tmtdew=29.26, humidity=13.14, cloud=0.0, wind=12.07, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:21:12', seeing=1.26, atlas_timestamp='2025-11-25T21:21:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.0017499999999994742, 0.03625000000000078, -0.008500000000001506, 0.05649999999999977, 0.06925000000000026, 0.057000000000000384, -0.02325000000000088, 0.007999999999999119, 0.012000000000000455, 0.0572499999999998, -0.0649999999999995, 0.02099999999999902, 0.07124999999999915, -0.009999999999999787, 0.009999999999999787, -0.026250000000000995, 0.037499999999999645, 0.0389999999999997, -0.01875000000000071, 0.07949999999999946, 0.010749999999998039, 0.03625000000000078, -0.032249999999999446, -0.005000000000000782, -0.01249999999999929, 0.03225000000000122, 0.03550000000000075, 0.10299999999999976, 0.10400000000000098, 0.053000000000000824, -0.026999999999999247, -0.05925000000000047], zp_timestamp='2025-11-25T21:18:00')
2025-11-25T23:21:33.781 [DEBUG] [Thread-7582] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:21:33.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:21:33.876 [DEBUG] [Thread-7585] [transport.py] [_log()] starting thread (client mode): 0x70dbd060
2025-11-25T23:21:33.876 [DEBUG] [Thread-7585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:21:33.894 [DEBUG] [Thread-7585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:21:33.894 [INFO] [Thread-7585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:21:33.901 [DEBUG] [Thread-7585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] client lang: <none>
2025-11-25T23:21:33.902 [DEBUG] [Thread-7585] [transport.py] [_log()] server lang: <none>
2025-11-25T23:21:33.903 [DEBUG] [Thread-7585] [transport.py] [_log()] kex follows: False
2025-11-25T23:21:33.903 [DEBUG] [Thread-7585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:21:33.903 [DEBUG] [Thread-7585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:21:33.903 [DEBUG] [Thread-7585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:21:33.903 [DEBUG] [Thread-7585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:21:33.903 [DEBUG] [Thread-7585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:21:33.903 [DEBUG] [Thread-7585] [transport.py] [_log()] Compression: none
2025-11-25T23:21:33.903 [DEBUG] [Thread-7585] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:21:33.961 [DEBUG] [Thread-7585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:21:33.962 [DEBUG] [Thread-7585] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:21:33.962 [DEBUG] [Thread-7585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:21:33.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:21:33.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:21:34.020 [DEBUG] [Thread-7585] [transport.py] [_log()] userauth is OK
2025-11-25T23:21:34.021 [DEBUG] [Thread-7585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:21:34.021 [DEBUG] [Thread-7585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:21:34.021 [DEBUG] [Thread-7585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:21:34.021 [DEBUG] [Thread-7585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:21:34.042 [INFO] [Thread-7585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:21:34.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:21:34.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:21:34.868 [DEBUG] [Thread-7585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:21:34.869 [DEBUG] [Thread-7585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:21:34.917 [DEBUG] [Thread-7585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:21:34.917 [DEBUG] [Thread-7585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:21:34.926 [DEBUG] [Thread-7585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:21:34.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:21:34.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:21:34.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:21:34.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:21:34.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:21:34.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:21:34.965 [DEBUG] [Thread-7585] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:21:42.313 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:42.572 [DEBUG] [Thread-7587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:52.709 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:21:57.622 [DEBUG] [Thread-7588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:03.130 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:04.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:22:04.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:22:04.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:22:05.428 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:05.429 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:05.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 21, 44), 29.66, 12.58, 0.0, 15.1, 20.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:22:05.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:21:44
2025-11-25T23:22:05.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:22:05.928 [DEBUG] [Thread-7589] [transport.py] [_log()] starting thread (client mode): 0x70dbfa60
2025-11-25T23:22:05.928 [DEBUG] [Thread-7589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:22:05.948 [DEBUG] [Thread-7589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:22:05.948 [INFO] [Thread-7589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:22:05.951 [DEBUG] [Thread-7589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:22:05.951 [DEBUG] [Thread-7589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] client lang: <none>
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] server lang: <none>
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] kex follows: False
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] Compression: none
2025-11-25T23:22:05.952 [DEBUG] [Thread-7589] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:22:05.970 [DEBUG] [Thread-7589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:22:05.971 [DEBUG] [Thread-7589] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:22:05.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:22:05.972 [DEBUG] [Thread-7589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:22:05.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:22:05.974 [DEBUG] [Thread-7589] [transport.py] [_log()] userauth is OK
2025-11-25T23:22:05.974 [DEBUG] [Thread-7589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:22:05.974 [DEBUG] [Thread-7589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:22:05.974 [DEBUG] [Thread-7589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:22:05.974 [DEBUG] [Thread-7589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:22:05.999 [INFO] [Thread-7589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:22:06.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:22:06.609 [DEBUG] [Thread-7589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:22:06.610 [DEBUG] [Thread-7589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:22:06.610 [DEBUG] [Thread-7589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:22:06.651 [DEBUG] [Thread-7589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:22:06.651 [DEBUG] [Thread-7589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:22:06.655 [DEBUG] [Thread-7589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:22:06.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:22:06.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:22:06.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:22:06.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:22:06.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:22:06.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:22:06.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:22:06.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:22:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:22:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.890028 -999.00  +20.70  10.53     18   -4.40 1 1 1 1 1     0    0 25.25 17.49 ZNESW 12.8 10.5 170.2 13.4 20.0 -25.8 20.1 -25.4 19.7 -24.0 19.9 -25.0
2025-11-25T23:22:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:22:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:22:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.890028
2025-11-25T23:22:06.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:22:06.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:22:06.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:22:06.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:22:06.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:22:06.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:21:44', tmtdew=29.66, humidity=12.58, cloud=0.0, wind=15.1, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:21:44', seeing=1.09, atlas_timestamp='2025-11-25T21:21:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:20:00')
2025-11-25T23:22:06.683 [DEBUG] [Thread-7589] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:22:06.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:22:06.782 [DEBUG] [Thread-7592] [transport.py] [_log()] starting thread (client mode): 0x70d39030
2025-11-25T23:22:06.782 [DEBUG] [Thread-7592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:22:06.797 [DEBUG] [Thread-7592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:22:06.797 [INFO] [Thread-7592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:22:06.804 [DEBUG] [Thread-7592] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] client lang: <none>
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] server lang: <none>
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] kex follows: False
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:22:06.805 [DEBUG] [Thread-7592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:22:06.806 [DEBUG] [Thread-7592] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:22:06.806 [DEBUG] [Thread-7592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:22:06.806 [DEBUG] [Thread-7592] [transport.py] [_log()] Compression: none
2025-11-25T23:22:06.806 [DEBUG] [Thread-7592] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:22:06.862 [DEBUG] [Thread-7592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:22:06.862 [DEBUG] [Thread-7592] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:22:06.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:22:06.862 [DEBUG] [Thread-7592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:22:06.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:22:06.921 [DEBUG] [Thread-7592] [transport.py] [_log()] userauth is OK
2025-11-25T23:22:06.921 [DEBUG] [Thread-7592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:22:06.922 [DEBUG] [Thread-7592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:22:06.922 [DEBUG] [Thread-7592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:22:06.922 [DEBUG] [Thread-7592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:22:06.936 [INFO] [Thread-7592] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:22:06.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:22:06.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:22:07.748 [DEBUG] [Thread-7592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:22:07.749 [DEBUG] [Thread-7592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:22:07.799 [DEBUG] [Thread-7592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:22:07.799 [DEBUG] [Thread-7592] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:22:07.808 [DEBUG] [Thread-7592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:22:07.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:22:07.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:22:07.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:22:07.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:22:07.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:22:07.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:22:07.846 [DEBUG] [Thread-7592] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:22:07.903 [DEBUG] [Thread-7594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:12.654 [DEBUG] [Thread-7595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:13.541 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:23.957 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:27.698 [DEBUG] [Thread-7596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:34.374 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:22:37.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:22:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:22:38.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 22, 16), 29.63, 12.61, 0.0, 14.42, 20.42, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:22:38.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:22:16
2025-11-25T23:22:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:22:38.814 [DEBUG] [Thread-7597] [transport.py] [_log()] starting thread (client mode): 0x70d3bd30
2025-11-25T23:22:38.814 [DEBUG] [Thread-7597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:22:38.835 [DEBUG] [Thread-7597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:22:38.835 [INFO] [Thread-7597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:22:38.838 [DEBUG] [Thread-7597] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:22:38.838 [DEBUG] [Thread-7597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:22:38.838 [DEBUG] [Thread-7597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] client lang: <none>
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] server lang: <none>
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] kex follows: False
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:22:38.839 [DEBUG] [Thread-7597] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:22:38.840 [DEBUG] [Thread-7597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:22:38.840 [DEBUG] [Thread-7597] [transport.py] [_log()] Compression: none
2025-11-25T23:22:38.840 [DEBUG] [Thread-7597] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:22:38.860 [DEBUG] [Thread-7597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:22:38.861 [DEBUG] [Thread-7597] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:22:38.862 [DEBUG] [Thread-7597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:22:38.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:22:38.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:22:38.864 [DEBUG] [Thread-7597] [transport.py] [_log()] userauth is OK
2025-11-25T23:22:38.864 [DEBUG] [Thread-7597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:22:38.864 [DEBUG] [Thread-7597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:22:38.864 [DEBUG] [Thread-7597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:22:38.864 [DEBUG] [Thread-7597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:22:38.889 [INFO] [Thread-7597] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:22:38.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:22:39.552 [DEBUG] [Thread-7597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:22:39.552 [DEBUG] [Thread-7597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:22:39.552 [DEBUG] [Thread-7597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:22:39.594 [DEBUG] [Thread-7597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:22:39.594 [DEBUG] [Thread-7597] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:22:39.596 [DEBUG] [Thread-7597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:22:39.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:22:39.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:22:39.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:22:39.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:22:39.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:22:39.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:22:39.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:22:39.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:22:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:22:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.890375 -999.00  +20.70   7.37     17   -4.60 1 1 1 1 1     0    0 25.87 18.63 ZNESW 9.0 7.4 161.2 14.4 20.1 -25.8 20.1 -25.1 19.8 -23.8 19.9 -24.8
2025-11-25T23:22:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:22:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:22:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.890375
2025-11-25T23:22:39.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:22:39.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:22:39.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:22:39.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:22:39.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:22:39.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:22:16', tmtdew=29.63, humidity=12.61, cloud=0.0, wind=14.42, temperature=20.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:22:17', seeing=0.84, atlas_timestamp='2025-11-25T21:22:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:20:00')
2025-11-25T23:22:39.615 [DEBUG] [Thread-7597] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:22:39.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:22:39.701 [DEBUG] [Thread-7600] [transport.py] [_log()] starting thread (client mode): 0x70d38ee0
2025-11-25T23:22:39.701 [DEBUG] [Thread-7600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:22:39.716 [DEBUG] [Thread-7600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:22:39.716 [INFO] [Thread-7600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] client lang: <none>
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] server lang: <none>
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] kex follows: False
2025-11-25T23:22:39.724 [DEBUG] [Thread-7600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:22:39.725 [DEBUG] [Thread-7600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:22:39.725 [DEBUG] [Thread-7600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:22:39.725 [DEBUG] [Thread-7600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:22:39.725 [DEBUG] [Thread-7600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:22:39.725 [DEBUG] [Thread-7600] [transport.py] [_log()] Compression: none
2025-11-25T23:22:39.725 [DEBUG] [Thread-7600] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:22:39.787 [DEBUG] [Thread-7600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:22:39.788 [DEBUG] [Thread-7600] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:22:39.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:22:39.789 [DEBUG] [Thread-7600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:22:39.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:22:39.843 [DEBUG] [Thread-7600] [transport.py] [_log()] userauth is OK
2025-11-25T23:22:39.844 [DEBUG] [Thread-7600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:22:39.844 [DEBUG] [Thread-7600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:22:39.844 [DEBUG] [Thread-7600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:22:39.844 [DEBUG] [Thread-7600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:22:39.863 [INFO] [Thread-7600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:22:39.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:22:39.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:22:40.683 [DEBUG] [Thread-7600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:22:40.683 [DEBUG] [Thread-7600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:22:40.731 [DEBUG] [Thread-7600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:22:40.731 [DEBUG] [Thread-7600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:22:40.740 [DEBUG] [Thread-7600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:22:40.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:22:40.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:22:40.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:22:40.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:22:40.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:22:40.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:22:40.777 [DEBUG] [Thread-7600] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:22:42.733 [DEBUG] [Thread-7602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:44.833 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:55.221 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:22:57.788 [DEBUG] [Thread-7603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:05.630 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:05.631 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:05.657 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:07.972 [DEBUG] [Thread-7604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:10.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:23:10.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:23:10.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:23:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 22, 48), 29.66, 12.59, 0.0, 12.28, 20.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:23:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:22:48
2025-11-25T23:23:11.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:23:11.777 [DEBUG] [Thread-7605] [transport.py] [_log()] starting thread (client mode): 0x70dbcb80
2025-11-25T23:23:11.777 [DEBUG] [Thread-7605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:23:11.797 [DEBUG] [Thread-7605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:23:11.797 [INFO] [Thread-7605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] client lang: <none>
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] server lang: <none>
2025-11-25T23:23:11.800 [DEBUG] [Thread-7605] [transport.py] [_log()] kex follows: False
2025-11-25T23:23:11.801 [DEBUG] [Thread-7605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:23:11.801 [DEBUG] [Thread-7605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:23:11.801 [DEBUG] [Thread-7605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:23:11.801 [DEBUG] [Thread-7605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:23:11.801 [DEBUG] [Thread-7605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:23:11.801 [DEBUG] [Thread-7605] [transport.py] [_log()] Compression: none
2025-11-25T23:23:11.801 [DEBUG] [Thread-7605] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:23:11.816 [DEBUG] [Thread-7605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:23:11.816 [DEBUG] [Thread-7605] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:23:11.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:23:11.817 [DEBUG] [Thread-7605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:23:11.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:23:11.817 [DEBUG] [Thread-7605] [transport.py] [_log()] userauth is OK
2025-11-25T23:23:11.817 [DEBUG] [Thread-7605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:23:11.818 [DEBUG] [Thread-7605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:23:11.818 [DEBUG] [Thread-7605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:23:11.818 [DEBUG] [Thread-7605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:23:11.827 [INFO] [Thread-7605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:23:11.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:23:12.435 [DEBUG] [Thread-7605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:23:12.435 [DEBUG] [Thread-7605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:23:12.435 [DEBUG] [Thread-7605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:23:12.476 [DEBUG] [Thread-7605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:23:12.476 [DEBUG] [Thread-7605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:23:12.477 [DEBUG] [Thread-7605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:23:12.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:23:12.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:23:12.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:23:12.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:23:12.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:23:12.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:23:12.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.890723 -999.00  +20.70   7.25     17   -4.50 1 1 1 1 1     0    0 25.20 19.51 ZNESW 6.8 7.2 159.6 11.2 20.1 -25.9 20.1 -25.4 19.7 -24.1 19.9 -24.9
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.890723
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:23:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:22:48', tmtdew=29.66, humidity=12.59, cloud=0.0, wind=12.28, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:22:49', seeing=0.84, atlas_timestamp='2025-11-25T21:22:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:20:00')
2025-11-25T23:23:12.494 [DEBUG] [Thread-7605] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:23:12.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:23:12.599 [DEBUG] [Thread-7608] [transport.py] [_log()] starting thread (client mode): 0x70d55b40
2025-11-25T23:23:12.599 [DEBUG] [Thread-7608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:23:12.614 [DEBUG] [Thread-7608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:23:12.614 [INFO] [Thread-7608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] client lang: <none>
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] server lang: <none>
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] kex follows: False
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] Compression: none
2025-11-25T23:23:12.622 [DEBUG] [Thread-7608] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:23:12.680 [DEBUG] [Thread-7608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:23:12.680 [DEBUG] [Thread-7608] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:23:12.680 [DEBUG] [Thread-7608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:23:12.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:23:12.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:23:12.736 [DEBUG] [Thread-7608] [transport.py] [_log()] userauth is OK
2025-11-25T23:23:12.736 [DEBUG] [Thread-7608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:23:12.736 [DEBUG] [Thread-7608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:23:12.736 [DEBUG] [Thread-7608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:23:12.736 [DEBUG] [Thread-7608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:23:12.750 [INFO] [Thread-7608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:23:12.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:23:12.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:23:12.819 [DEBUG] [Thread-7610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:13.595 [DEBUG] [Thread-7608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:23:13.595 [DEBUG] [Thread-7608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:23:13.643 [DEBUG] [Thread-7608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:23:13.643 [DEBUG] [Thread-7608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:23:13.652 [DEBUG] [Thread-7608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:23:13.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:23:13.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:23:13.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:23:13.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:23:13.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:23:13.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:23:13.689 [DEBUG] [Thread-7608] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:23:16.055 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:26.451 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:27.860 [DEBUG] [Thread-7611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:36.853 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:42.904 [DEBUG] [Thread-7612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:43.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:23:43.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:23:43.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:23:44.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 23, 20), 29.69, 12.56, 0.0, 12.07, 20.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:23:44.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:23:20
2025-11-25T23:23:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:23:44.652 [DEBUG] [Thread-7613] [transport.py] [_log()] starting thread (client mode): 0x70dbc4c0
2025-11-25T23:23:44.653 [DEBUG] [Thread-7613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:23:44.672 [DEBUG] [Thread-7613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:23:44.672 [INFO] [Thread-7613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] client lang: <none>
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] server lang: <none>
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] kex follows: False
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] Compression: none
2025-11-25T23:23:44.674 [DEBUG] [Thread-7613] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:23:44.681 [DEBUG] [Thread-7613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:23:44.681 [DEBUG] [Thread-7613] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:23:44.681 [DEBUG] [Thread-7613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:23:44.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:23:44.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:23:44.682 [DEBUG] [Thread-7613] [transport.py] [_log()] userauth is OK
2025-11-25T23:23:44.682 [DEBUG] [Thread-7613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:23:44.682 [DEBUG] [Thread-7613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:23:44.682 [DEBUG] [Thread-7613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:23:44.682 [DEBUG] [Thread-7613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:23:44.691 [INFO] [Thread-7613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:23:44.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:23:45.331 [DEBUG] [Thread-7613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:23:45.331 [DEBUG] [Thread-7613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:23:45.331 [DEBUG] [Thread-7613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:23:45.372 [DEBUG] [Thread-7613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:23:45.372 [DEBUG] [Thread-7613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:23:45.375 [DEBUG] [Thread-7613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:23:45.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:23:45.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:23:45.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:23:45.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:23:45.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:23:45.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:23:45.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.891417 -999.00  +20.70   8.18     17   -4.50 1 1 1 1 1     0    0 24.96 21.17 ZNESW 7.9 8.2 160.0 10.6 20.1 -25.8 20.1 -25.4 19.7 -24.1 19.9 -25.0
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.891417
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:23:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:23:45.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:23:20', tmtdew=29.69, humidity=12.56, cloud=0.0, wind=12.07, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:23:20', seeing=0.84, atlas_timestamp='2025-11-25T21:23:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:20:00')
2025-11-25T23:23:45.393 [DEBUG] [Thread-7613] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:23:45.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:23:45.485 [DEBUG] [Thread-7616] [transport.py] [_log()] starting thread (client mode): 0x70dbe8c0
2025-11-25T23:23:45.485 [DEBUG] [Thread-7616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:23:45.500 [DEBUG] [Thread-7616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:23:45.500 [INFO] [Thread-7616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] client lang: <none>
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] server lang: <none>
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] kex follows: False
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] Compression: none
2025-11-25T23:23:45.508 [DEBUG] [Thread-7616] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:23:45.564 [DEBUG] [Thread-7616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:23:45.564 [DEBUG] [Thread-7616] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:23:45.565 [DEBUG] [Thread-7616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:23:45.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:23:45.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:23:45.622 [DEBUG] [Thread-7616] [transport.py] [_log()] userauth is OK
2025-11-25T23:23:45.622 [DEBUG] [Thread-7616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:23:45.622 [DEBUG] [Thread-7616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:23:45.622 [DEBUG] [Thread-7616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:23:45.622 [DEBUG] [Thread-7616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:23:45.636 [INFO] [Thread-7616] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:23:45.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:23:45.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:23:46.462 [DEBUG] [Thread-7616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:23:46.462 [DEBUG] [Thread-7616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:23:46.510 [DEBUG] [Thread-7616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:23:46.510 [DEBUG] [Thread-7616] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:23:46.518 [DEBUG] [Thread-7616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:23:46.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:23:46.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:23:46.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
2025-11-25T23:23:46.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:23:46.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:23:46.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:23:46.550 [DEBUG] [Thread-7616] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:23:47.279 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:57.697 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:23:57.939 [DEBUG] [Thread-7618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:05.833 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:05.834 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:08.036 [DEBUG] [Thread-7619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:08.111 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:13.002 [DEBUG] [Thread-7620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:16.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:24:16.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:24: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
2025-11-25T23:24:17.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 23, 52), 29.68, 12.58, 0.0, 12.21, 20.49, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:24:17.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:23:52
2025-11-25T23:24:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:24:17.486 [DEBUG] [Thread-7621] [transport.py] [_log()] starting thread (client mode): 0x70d3b640
2025-11-25T23:24:17.486 [DEBUG] [Thread-7621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:24:17.506 [DEBUG] [Thread-7621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:24:17.506 [INFO] [Thread-7621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:24:17.508 [DEBUG] [Thread-7621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] client lang: <none>
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] server lang: <none>
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] kex follows: False
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] Compression: none
2025-11-25T23:24:17.509 [DEBUG] [Thread-7621] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:24:17.526 [DEBUG] [Thread-7621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:24:17.527 [DEBUG] [Thread-7621] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:24:17.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:24:17.528 [DEBUG] [Thread-7621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:24:17.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:24:17.529 [DEBUG] [Thread-7621] [transport.py] [_log()] userauth is OK
2025-11-25T23:24:17.530 [DEBUG] [Thread-7621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:24:17.530 [DEBUG] [Thread-7621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:24:17.530 [DEBUG] [Thread-7621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:24:17.530 [DEBUG] [Thread-7621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:24:17.553 [INFO] [Thread-7621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:24:17.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:24:18.108 [DEBUG] [Thread-7621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:24:18.109 [DEBUG] [Thread-7621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:24:18.109 [DEBUG] [Thread-7621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:24:18.150 [DEBUG] [Thread-7621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:24:18.150 [DEBUG] [Thread-7621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:24:18.154 [DEBUG] [Thread-7621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:24:18.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:24:18.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:24:18.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:24:18.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:24:18.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:24:18.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:24:18.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:24:18.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:24:18.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:24:18.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.891764 -999.00  +20.70   9.57     17   -4.50 1 1 1 1 1     0    0 25.02 22.72 ZNESW 8.6 9.6 153.4 11.1 20.1 -25.9 20.1 -25.4 19.7 -24.1 19.9 -25.2
2025-11-25T23:24:18.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:24:18.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:24:18.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.891764
2025-11-25T23:24:18.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:24:18.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:24:18.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:24:18.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:24:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:24:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:23:52', tmtdew=29.68, humidity=12.58, cloud=0.0, wind=12.21, temperature=20.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:23:52', seeing=0.93, atlas_timestamp='2025-11-25T21:24:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:20:00')
2025-11-25T23:24:18.182 [DEBUG] [Thread-7621] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:24:18.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:24:18.281 [DEBUG] [Thread-7624] [transport.py] [_log()] starting thread (client mode): 0x70d3b190
2025-11-25T23:24:18.281 [DEBUG] [Thread-7624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:24:18.296 [DEBUG] [Thread-7624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:24:18.296 [INFO] [Thread-7624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] client lang: <none>
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] server lang: <none>
2025-11-25T23:24:18.304 [DEBUG] [Thread-7624] [transport.py] [_log()] kex follows: False
2025-11-25T23:24:18.305 [DEBUG] [Thread-7624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:24:18.305 [DEBUG] [Thread-7624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:24:18.305 [DEBUG] [Thread-7624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:24:18.305 [DEBUG] [Thread-7624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:24:18.305 [DEBUG] [Thread-7624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:24:18.305 [DEBUG] [Thread-7624] [transport.py] [_log()] Compression: none
2025-11-25T23:24:18.305 [DEBUG] [Thread-7624] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:24:18.365 [DEBUG] [Thread-7624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:24:18.365 [DEBUG] [Thread-7624] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:24:18.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:24:18.366 [DEBUG] [Thread-7624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:24:18.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:24:18.421 [DEBUG] [Thread-7624] [transport.py] [_log()] userauth is OK
2025-11-25T23:24:18.421 [DEBUG] [Thread-7624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:24:18.421 [DEBUG] [Thread-7624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:24:18.421 [DEBUG] [Thread-7624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:24:18.422 [DEBUG] [Thread-7624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:24:18.440 [INFO] [Thread-7624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:24:18.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:24:18.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:24:18.574 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:19.270 [DEBUG] [Thread-7624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:24:19.270 [DEBUG] [Thread-7624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:24:19.318 [DEBUG] [Thread-7624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:24:19.318 [DEBUG] [Thread-7624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:24:19.328 [DEBUG] [Thread-7624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:24:19.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:24:19.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:24:19.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:24:19.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:24:19.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:24:19.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:24:19.364 [DEBUG] [Thread-7624] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:24:28.034 [DEBUG] [Thread-7626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:29.002 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:39.435 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:43.084 [DEBUG] [Thread-7627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:24:49.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:24:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:24:49.828 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:24:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 24, 24), 29.74, 12.51, 0.0, 12.33, 20.47, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:24:50.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:24:24
2025-11-25T23:24:50.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:24:50.298 [DEBUG] [Thread-7628] [transport.py] [_log()] starting thread (client mode): 0x70d39cf0
2025-11-25T23:24:50.298 [DEBUG] [Thread-7628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:24:50.318 [DEBUG] [Thread-7628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:24:50.318 [INFO] [Thread-7628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] client lang: <none>
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] server lang: <none>
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] kex follows: False
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] Compression: none
2025-11-25T23:24:50.319 [DEBUG] [Thread-7628] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:24:50.327 [DEBUG] [Thread-7628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:24:50.327 [DEBUG] [Thread-7628] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:24:50.327 [DEBUG] [Thread-7628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:24:50.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:24:50.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:24:50.328 [DEBUG] [Thread-7628] [transport.py] [_log()] userauth is OK
2025-11-25T23:24:50.328 [DEBUG] [Thread-7628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:24:50.328 [DEBUG] [Thread-7628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:24:50.328 [DEBUG] [Thread-7628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:24:50.328 [DEBUG] [Thread-7628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:24:50.337 [INFO] [Thread-7628] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:24:50.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:24:50.926 [DEBUG] [Thread-7628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:24:50.926 [DEBUG] [Thread-7628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:24:50.926 [DEBUG] [Thread-7628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:24:50.967 [DEBUG] [Thread-7628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:24:50.967 [DEBUG] [Thread-7628] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:24:50.970 [DEBUG] [Thread-7628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:24:50.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:24:50.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:24:50.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:24:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:24:50.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:24:50.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:24:50.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:24:50.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:24:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:24:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.892112 -999.00  +20.70   9.99     17   -4.50 1 1 1 1 1     0    0 25.76 23.88 ZNESW 11.1 10.0 163.4 11.8 20.1 -26.0 20.0 -25.3 19.7 -24.0 19.9 -24.9
2025-11-25T23:24:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:24:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:24:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.892112
2025-11-25T23:24:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:24:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:24:50.990 [DEBUG] [Thread-7628] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:24:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:24:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:24:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:24:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:24:24', tmtdew=29.74, humidity=12.51, cloud=0.0, wind=12.33, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:24:24', seeing=0.94, atlas_timestamp='2025-11-25T21:24:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:20:00')
2025-11-25T23:24:51.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:24:51.084 [DEBUG] [Thread-7631] [transport.py] [_log()] starting thread (client mode): 0x70d7f0a0
2025-11-25T23:24:51.085 [DEBUG] [Thread-7631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:24:51.099 [DEBUG] [Thread-7631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:24:51.099 [INFO] [Thread-7631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] client lang: <none>
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] server lang: <none>
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] kex follows: False
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:24:51.107 [DEBUG] [Thread-7631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:24:51.108 [DEBUG] [Thread-7631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:24:51.108 [DEBUG] [Thread-7631] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:24:51.108 [DEBUG] [Thread-7631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:24:51.108 [DEBUG] [Thread-7631] [transport.py] [_log()] Compression: none
2025-11-25T23:24:51.108 [DEBUG] [Thread-7631] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:24:51.167 [DEBUG] [Thread-7631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:24:51.167 [DEBUG] [Thread-7631] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:24:51.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:24:51.169 [DEBUG] [Thread-7631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:24:51.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:24:51.223 [DEBUG] [Thread-7631] [transport.py] [_log()] userauth is OK
2025-11-25T23:24:51.224 [DEBUG] [Thread-7631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:24:51.224 [DEBUG] [Thread-7631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:24:51.224 [DEBUG] [Thread-7631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:24:51.224 [DEBUG] [Thread-7631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:24:51.246 [INFO] [Thread-7631] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:24:51.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:24:51.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:24:52.082 [DEBUG] [Thread-7631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:24:52.082 [DEBUG] [Thread-7631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:24:52.130 [DEBUG] [Thread-7631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:24:52.130 [DEBUG] [Thread-7631] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:24:52.139 [DEBUG] [Thread-7631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:24:52.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:24:52.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:24: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') -> 00000000
2025-11-25T23:24:52.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:24:52.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:24:52.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:24:52.173 [DEBUG] [Thread-7631] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:24:58.118 [DEBUG] [Thread-7633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:00.235 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:06.035 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:06.037 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:08.093 [DEBUG] [Thread-7634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:10.626 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:13.161 [DEBUG] [Thread-7635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:21.061 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:22.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:25:22.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:25:22.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:25:22.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 24, 56), 29.61, 12.49, 0.0, 11.58, 20.44, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:25:22.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:24:56
2025-11-25T23:25:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:25:23.119 [DEBUG] [Thread-7636] [transport.py] [_log()] starting thread (client mode): 0x70d38940
2025-11-25T23:25:23.119 [DEBUG] [Thread-7636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:25:23.140 [DEBUG] [Thread-7636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:25:23.140 [INFO] [Thread-7636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:25:23.143 [DEBUG] [Thread-7636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] client lang: <none>
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] server lang: <none>
2025-11-25T23:25:23.144 [DEBUG] [Thread-7636] [transport.py] [_log()] kex follows: False
2025-11-25T23:25:23.145 [DEBUG] [Thread-7636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:25:23.145 [DEBUG] [Thread-7636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:25:23.145 [DEBUG] [Thread-7636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:25:23.145 [DEBUG] [Thread-7636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:25:23.145 [DEBUG] [Thread-7636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:25:23.145 [DEBUG] [Thread-7636] [transport.py] [_log()] Compression: none
2025-11-25T23:25:23.145 [DEBUG] [Thread-7636] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:25:23.164 [DEBUG] [Thread-7636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:25:23.164 [DEBUG] [Thread-7636] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:25:23.165 [DEBUG] [Thread-7636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:25:23.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:25:23.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:25:23.167 [DEBUG] [Thread-7636] [transport.py] [_log()] userauth is OK
2025-11-25T23:25:23.167 [DEBUG] [Thread-7636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:25:23.167 [DEBUG] [Thread-7636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:25:23.168 [DEBUG] [Thread-7636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:25:23.168 [DEBUG] [Thread-7636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:25:23.184 [INFO] [Thread-7636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:25:23.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:25:23.811 [DEBUG] [Thread-7636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:25:23.812 [DEBUG] [Thread-7636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:25:23.812 [DEBUG] [Thread-7636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:25:23.853 [DEBUG] [Thread-7636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:25:23.853 [DEBUG] [Thread-7636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:25:23.856 [DEBUG] [Thread-7636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:25:23.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:25:23.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:25:23.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:25:23.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:25:23.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:25:23.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:25:23.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:25:23.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:25:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:25:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.892112 -999.00  +20.70   9.99     17   -4.50 1 1 1 1 1     0    0 25.76 23.88 ZNESW 11.1 10.0 163.4 11.8 20.1 -26.0 20.0 -25.3 19.7 -24.0 19.9 -24.9
2025-11-25T23:25:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:25:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:25:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.892112
2025-11-25T23:25:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:25:23.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:25:23.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:25:23.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:25:23.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:25:23.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:24:56', tmtdew=29.61, humidity=12.49, cloud=0.0, wind=11.58, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:24:57', seeing=0.81, atlas_timestamp='2025-11-25T21:24:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:24:00')
2025-11-25T23:25:23.885 [DEBUG] [Thread-7636] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:25:23.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:25:23.978 [DEBUG] [Thread-7639] [transport.py] [_log()] starting thread (client mode): 0x70d57460
2025-11-25T23:25:23.978 [DEBUG] [Thread-7639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:25:23.992 [DEBUG] [Thread-7639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:25:23.993 [INFO] [Thread-7639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:25:24.000 [DEBUG] [Thread-7639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] client lang: <none>
2025-11-25T23:25:24.001 [DEBUG] [Thread-7639] [transport.py] [_log()] server lang: <none>
2025-11-25T23:25:24.002 [DEBUG] [Thread-7639] [transport.py] [_log()] kex follows: False
2025-11-25T23:25:24.002 [DEBUG] [Thread-7639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:25:24.002 [DEBUG] [Thread-7639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:25:24.002 [DEBUG] [Thread-7639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:25:24.002 [DEBUG] [Thread-7639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:25:24.002 [DEBUG] [Thread-7639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:25:24.002 [DEBUG] [Thread-7639] [transport.py] [_log()] Compression: none
2025-11-25T23:25:24.002 [DEBUG] [Thread-7639] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:25:24.061 [DEBUG] [Thread-7639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:25:24.061 [DEBUG] [Thread-7639] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:25:24.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:25:24.062 [DEBUG] [Thread-7639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:25:24.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:25:24.117 [DEBUG] [Thread-7639] [transport.py] [_log()] userauth is OK
2025-11-25T23:25:24.117 [DEBUG] [Thread-7639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:25:24.117 [DEBUG] [Thread-7639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:25:24.117 [DEBUG] [Thread-7639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:25:24.117 [DEBUG] [Thread-7639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:25:24.135 [INFO] [Thread-7639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:25:24.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:25:24.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:25:24.987 [DEBUG] [Thread-7639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:25:24.987 [DEBUG] [Thread-7639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:25:25.034 [DEBUG] [Thread-7639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:25:25.035 [DEBUG] [Thread-7639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:25:25.044 [DEBUG] [Thread-7639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:25:25.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:25:25.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:25:25.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:25:25.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:25:25.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:25:25.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:25:25.077 [DEBUG] [Thread-7639] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:25:28.202 [DEBUG] [Thread-7641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:31.476 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:41.889 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:43.264 [DEBUG] [Thread-7642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:52.305 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:25:55.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:25:55.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:25:55.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:25:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 25, 28), 29.55, 12.54, 0.0, 12.95, 20.41, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:25:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:25:28
2025-11-25T23:25:55.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:25:56.040 [DEBUG] [Thread-7643] [transport.py] [_log()] starting thread (client mode): 0x70d54ca0
2025-11-25T23:25:56.040 [DEBUG] [Thread-7643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:25:56.060 [DEBUG] [Thread-7643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:25:56.060 [INFO] [Thread-7643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] client lang: <none>
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] server lang: <none>
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] kex follows: False
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] Compression: none
2025-11-25T23:25:56.063 [DEBUG] [Thread-7643] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:25:56.080 [DEBUG] [Thread-7643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:25:56.080 [DEBUG] [Thread-7643] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:25:56.081 [DEBUG] [Thread-7643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:25:56.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:25:56.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:25:56.083 [DEBUG] [Thread-7643] [transport.py] [_log()] userauth is OK
2025-11-25T23:25:56.083 [DEBUG] [Thread-7643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:25:56.083 [DEBUG] [Thread-7643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:25:56.083 [DEBUG] [Thread-7643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:25:56.084 [DEBUG] [Thread-7643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:25:56.103 [INFO] [Thread-7643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:25:56.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:25:56.755 [DEBUG] [Thread-7643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:25:56.755 [DEBUG] [Thread-7643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:25:56.755 [DEBUG] [Thread-7643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:25:56.796 [DEBUG] [Thread-7643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:25:56.796 [DEBUG] [Thread-7643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:25:56.799 [DEBUG] [Thread-7643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:25:56.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:25:56.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:25:56.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:25:56.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:25:56.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:25:56.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:25:56.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:25:56.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:25:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:25:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.892458 -999.00  +20.70   9.94     17   -4.50 1 1 1 1 1     0    0 25.92 24.94 ZNESW 8.0 9.9 153.0 13.9 20.1 -25.8 20.0 -25.3 19.8 -23.9 19.9 -25.0
2025-11-25T23:25:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:25:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:25:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.892458
2025-11-25T23:25:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:25:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:25:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:25:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:25:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:25:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:25:28', tmtdew=29.55, humidity=12.54, cloud=0.0, wind=12.95, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:25:29', seeing=0.82, atlas_timestamp='2025-11-25T21:25:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:24:00')
2025-11-25T23:25:56.826 [DEBUG] [Thread-7643] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:25:56.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:25:56.921 [DEBUG] [Thread-7646] [transport.py] [_log()] starting thread (client mode): 0x7374fcd0
2025-11-25T23:25:56.922 [DEBUG] [Thread-7646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:25:56.936 [DEBUG] [Thread-7646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:25:56.936 [INFO] [Thread-7646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] client lang: <none>
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] server lang: <none>
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] kex follows: False
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:25:56.944 [DEBUG] [Thread-7646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:25:56.945 [DEBUG] [Thread-7646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:25:56.945 [DEBUG] [Thread-7646] [transport.py] [_log()] Compression: none
2025-11-25T23:25:56.945 [DEBUG] [Thread-7646] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:25:57.004 [DEBUG] [Thread-7646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:25:57.004 [DEBUG] [Thread-7646] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:25:57.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:25:57.005 [DEBUG] [Thread-7646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:25:57.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:25:57.059 [DEBUG] [Thread-7646] [transport.py] [_log()] userauth is OK
2025-11-25T23:25:57.060 [DEBUG] [Thread-7646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:25:57.060 [DEBUG] [Thread-7646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:25:57.060 [DEBUG] [Thread-7646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:25:57.060 [DEBUG] [Thread-7646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:25:57.079 [INFO] [Thread-7646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:25:57.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:25:57.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:25:57.903 [DEBUG] [Thread-7646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:25:57.903 [DEBUG] [Thread-7646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:25:57.952 [DEBUG] [Thread-7646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:25:57.952 [DEBUG] [Thread-7646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:25:57.961 [DEBUG] [Thread-7646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:25:57.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:25:57.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:25:57.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:25:57.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:25:57.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:25:57.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:25:57.999 [DEBUG] [Thread-7646] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:25:58.303 [DEBUG] [Thread-7648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:02.703 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:06.238 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:06.239 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:08.146 [DEBUG] [Thread-7649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:13.096 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:13.354 [DEBUG] [Thread-7650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:23.496 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:28.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:26:28.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:26:28.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:26:28.386 [DEBUG] [Thread-7651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:28.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 26), 29.61, 12.53, 0.0, 12.05, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:26:28.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:26:00
2025-11-25T23:26:28.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:26:28.960 [DEBUG] [Thread-7652] [transport.py] [_log()] starting thread (client mode): 0x70dbc580
2025-11-25T23:26:28.960 [DEBUG] [Thread-7652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:26:28.976 [DEBUG] [Thread-7652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:26:28.976 [INFO] [Thread-7652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:26:28.979 [DEBUG] [Thread-7652] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:26:28.979 [DEBUG] [Thread-7652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:26:28.979 [DEBUG] [Thread-7652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:26:28.979 [DEBUG] [Thread-7652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:26:28.979 [DEBUG] [Thread-7652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] client lang: <none>
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] server lang: <none>
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] kex follows: False
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] Compression: none
2025-11-25T23:26:28.980 [DEBUG] [Thread-7652] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:26:28.997 [DEBUG] [Thread-7652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:26:28.998 [DEBUG] [Thread-7652] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:26:28.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:26:28.999 [DEBUG] [Thread-7652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:26:29.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:26:29.001 [DEBUG] [Thread-7652] [transport.py] [_log()] userauth is OK
2025-11-25T23:26:29.001 [DEBUG] [Thread-7652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:26:29.001 [DEBUG] [Thread-7652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:26:29.001 [DEBUG] [Thread-7652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:26:29.002 [DEBUG] [Thread-7652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:26:29.020 [INFO] [Thread-7652] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:26:29.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:26:29.660 [DEBUG] [Thread-7652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:26:29.661 [DEBUG] [Thread-7652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:26:29.661 [DEBUG] [Thread-7652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:26:29.702 [DEBUG] [Thread-7652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:26:29.702 [DEBUG] [Thread-7652] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:26:29.705 [DEBUG] [Thread-7652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:26:29.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:26:29.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:26:29.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:26:29.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:26:29.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:26:29.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:26:29.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:26:29.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:26:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:26:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.892806 -999.00  +20.70   8.35     17   -4.50 1 1 1 1 1     0    0 25.31 23.65 ZNESW 9.4 8.3 160.6 12.5 20.1 -25.9 20.0 -25.4 19.8 -24.1 19.9 -24.9
2025-11-25T23:26:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:26:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:26:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.892806
2025-11-25T23:26:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:26:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:26:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:26:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:26:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:26:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:26:00', tmtdew=29.61, humidity=12.53, cloud=0.0, wind=12.05, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:26:01', seeing=0.82, atlas_timestamp='2025-11-25T21:25:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:24:00')
2025-11-25T23:26:29.729 [DEBUG] [Thread-7652] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:26:29.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:26:29.822 [DEBUG] [Thread-7655] [transport.py] [_log()] starting thread (client mode): 0x70d56860
2025-11-25T23:26:29.822 [DEBUG] [Thread-7655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:26:29.837 [DEBUG] [Thread-7655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:26:29.837 [INFO] [Thread-7655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:26:29.844 [DEBUG] [Thread-7655] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:26:29.844 [DEBUG] [Thread-7655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] client lang: <none>
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] server lang: <none>
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] kex follows: False
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:26:29.845 [DEBUG] [Thread-7655] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:26:29.846 [DEBUG] [Thread-7655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:26:29.846 [DEBUG] [Thread-7655] [transport.py] [_log()] Compression: none
2025-11-25T23:26:29.846 [DEBUG] [Thread-7655] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:26:29.905 [DEBUG] [Thread-7655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:26:29.905 [DEBUG] [Thread-7655] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:26:29.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:26:29.906 [DEBUG] [Thread-7655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:26:29.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:26:29.961 [DEBUG] [Thread-7655] [transport.py] [_log()] userauth is OK
2025-11-25T23:26:29.962 [DEBUG] [Thread-7655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:26:29.962 [DEBUG] [Thread-7655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:26:29.962 [DEBUG] [Thread-7655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:26:29.962 [DEBUG] [Thread-7655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:26:29.980 [INFO] [Thread-7655] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:26:29.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:26:29.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:26:30.800 [DEBUG] [Thread-7655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:26:30.800 [DEBUG] [Thread-7655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:26:30.847 [DEBUG] [Thread-7655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:26:30.847 [DEBUG] [Thread-7655] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:26:30.856 [DEBUG] [Thread-7655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:26:30.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:26:30.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:26:30.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:26:30.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:26:30.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:26:30.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:26:30.890 [DEBUG] [Thread-7655] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:26:33.873 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:43.418 [DEBUG] [Thread-7657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:44.505 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:54.902 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:26:58.471 [DEBUG] [Thread-7658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:00.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:27:00.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:27:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:27:01.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 26, 32), 29.64, 12.51, 0.0, 12.26, 20.41, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:27:01.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:26:32
2025-11-25T23:27:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:27:01.827 [DEBUG] [Thread-7659] [transport.py] [_log()] starting thread (client mode): 0x70d6b430
2025-11-25T23:27:01.828 [DEBUG] [Thread-7659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:27:01.848 [DEBUG] [Thread-7659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:27:01.848 [INFO] [Thread-7659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:27:01.851 [DEBUG] [Thread-7659] [transport.py] [_log()] client lang: <none>
2025-11-25T23:27:01.852 [DEBUG] [Thread-7659] [transport.py] [_log()] server lang: <none>
2025-11-25T23:27:01.852 [DEBUG] [Thread-7659] [transport.py] [_log()] kex follows: False
2025-11-25T23:27:01.852 [DEBUG] [Thread-7659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:27:01.852 [DEBUG] [Thread-7659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:27:01.852 [DEBUG] [Thread-7659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:27:01.852 [DEBUG] [Thread-7659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:27:01.852 [DEBUG] [Thread-7659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:27:01.852 [DEBUG] [Thread-7659] [transport.py] [_log()] Compression: none
2025-11-25T23:27:01.852 [DEBUG] [Thread-7659] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:27:01.867 [DEBUG] [Thread-7659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:27:01.867 [DEBUG] [Thread-7659] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:27:01.868 [DEBUG] [Thread-7659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:27:01.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:27:01.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:27:01.913 [DEBUG] [Thread-7659] [transport.py] [_log()] userauth is OK
2025-11-25T23:27:01.914 [DEBUG] [Thread-7659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:27:01.914 [DEBUG] [Thread-7659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:27:01.914 [DEBUG] [Thread-7659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:27:01.914 [DEBUG] [Thread-7659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:27:01.951 [INFO] [Thread-7659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:27:01.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:27:02.551 [DEBUG] [Thread-7659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:27:02.552 [DEBUG] [Thread-7659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:27:02.552 [DEBUG] [Thread-7659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:27:02.593 [DEBUG] [Thread-7659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:27:02.593 [DEBUG] [Thread-7659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:27:02.597 [DEBUG] [Thread-7659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:27:02.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:27:02.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:27:02.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:27:02.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:27:02.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:27:02.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:27:02.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:27:02.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:27:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:27:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.893153 -999.00  +20.60  10.50     18   -4.50 1 1 1 1 1     0    0 25.39 24.05 ZNESW 7.2 10.5 137.4 12.7 20.1 -26.0 20.1 -25.5 19.7 -24.0 19.9 -25.2
2025-11-25T23:27:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:27:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:27:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.893153
2025-11-25T23:27:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:27:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:27:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:27:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:27:02.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:27:02.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:26:32', tmtdew=29.64, humidity=12.51, cloud=0.0, wind=12.26, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:26:33', seeing=0.87, atlas_timestamp='2025-11-25T21:26:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:24:00')
2025-11-25T23:27:02.617 [DEBUG] [Thread-7659] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:27:02.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:27:02.713 [DEBUG] [Thread-7662] [transport.py] [_log()] starting thread (client mode): 0x70d7f5e0
2025-11-25T23:27:02.713 [DEBUG] [Thread-7662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:27:02.729 [DEBUG] [Thread-7662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:27:02.729 [INFO] [Thread-7662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:27:02.737 [DEBUG] [Thread-7662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:27:02.737 [DEBUG] [Thread-7662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:27:02.738 [DEBUG] [Thread-7662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:27:02.738 [DEBUG] [Thread-7662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:27:02.738 [DEBUG] [Thread-7662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:27:02.738 [DEBUG] [Thread-7662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:27:02.738 [DEBUG] [Thread-7662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:27:02.738 [DEBUG] [Thread-7662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:27:02.738 [DEBUG] [Thread-7662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:27:02.738 [DEBUG] [Thread-7662] [transport.py] [_log()] client lang: <none>
2025-11-25T23:27:02.739 [DEBUG] [Thread-7662] [transport.py] [_log()] server lang: <none>
2025-11-25T23:27:02.739 [DEBUG] [Thread-7662] [transport.py] [_log()] kex follows: False
2025-11-25T23:27:02.739 [DEBUG] [Thread-7662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:27:02.739 [DEBUG] [Thread-7662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:27:02.739 [DEBUG] [Thread-7662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:27:02.739 [DEBUG] [Thread-7662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:27:02.739 [DEBUG] [Thread-7662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:27:02.739 [DEBUG] [Thread-7662] [transport.py] [_log()] Compression: none
2025-11-25T23:27:02.740 [DEBUG] [Thread-7662] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:27:02.797 [DEBUG] [Thread-7662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:27:02.798 [DEBUG] [Thread-7662] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:27:02.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:27:02.799 [DEBUG] [Thread-7662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:27:02.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:27:02.856 [DEBUG] [Thread-7662] [transport.py] [_log()] userauth is OK
2025-11-25T23:27:02.856 [DEBUG] [Thread-7662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:27:02.856 [DEBUG] [Thread-7662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:27:02.857 [DEBUG] [Thread-7662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:27:02.857 [DEBUG] [Thread-7662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:27:02.875 [INFO] [Thread-7662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:27:02.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:27:02.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:27:03.787 [DEBUG] [Thread-7662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:27:03.788 [DEBUG] [Thread-7662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:27:03.836 [DEBUG] [Thread-7662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:27:03.836 [DEBUG] [Thread-7662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:27:03.846 [DEBUG] [Thread-7662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:27:03.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:27:03.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:27:03.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:27:03.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:27:03.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:27:03.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:27:03.886 [DEBUG] [Thread-7662] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:27:05.298 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:06.440 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:06.441 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:08.226 [DEBUG] [Thread-7664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:13.507 [DEBUG] [Thread-7665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:15.692 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:26.140 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:28.568 [DEBUG] [Thread-7666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:33.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:27:33.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:27:33.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:27:34.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 27, 4), 29.65, 12.51, 0.0, 11.7, 20.45, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:27:34.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:27:04
2025-11-25T23:27:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:27:34.837 [DEBUG] [Thread-7667] [transport.py] [_log()] starting thread (client mode): 0x7374ef80
2025-11-25T23:27:34.837 [DEBUG] [Thread-7667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:27:34.856 [DEBUG] [Thread-7667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:27:34.856 [INFO] [Thread-7667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] client lang: <none>
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] server lang: <none>
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] kex follows: False
2025-11-25T23:27:34.859 [DEBUG] [Thread-7667] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:27:34.860 [DEBUG] [Thread-7667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:27:34.860 [DEBUG] [Thread-7667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:27:34.860 [DEBUG] [Thread-7667] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:27:34.860 [DEBUG] [Thread-7667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:27:34.860 [DEBUG] [Thread-7667] [transport.py] [_log()] Compression: none
2025-11-25T23:27:34.860 [DEBUG] [Thread-7667] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:27:34.878 [DEBUG] [Thread-7667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:27:34.879 [DEBUG] [Thread-7667] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:27:34.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:27:34.880 [DEBUG] [Thread-7667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:27:34.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:27:34.882 [DEBUG] [Thread-7667] [transport.py] [_log()] userauth is OK
2025-11-25T23:27:34.882 [DEBUG] [Thread-7667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:27:34.883 [DEBUG] [Thread-7667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:27:34.883 [DEBUG] [Thread-7667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:27:34.883 [DEBUG] [Thread-7667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:27:34.897 [INFO] [Thread-7667] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:27:34.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:27:35.530 [DEBUG] [Thread-7667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:27:35.531 [DEBUG] [Thread-7667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:27:35.531 [DEBUG] [Thread-7667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:27:35.572 [DEBUG] [Thread-7667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:27:35.572 [DEBUG] [Thread-7667] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:27:35.574 [DEBUG] [Thread-7667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:27:35.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:27:35.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:27:35.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:27:35.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:27:35.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:27:35.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:27:35.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:27:35.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:27:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:27:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.893848 -999.00  +20.60  12.08     17   -4.60 1 1 1 1 1     0    0 25.27 22.11 ZNESW 15.2 12.1 159.0 15.3 20.1 -25.9 20.1 -25.4 19.8 -23.9 20.0 -25.0
2025-11-25T23:27:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:27:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:27:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.893848
2025-11-25T23:27:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:27:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:27:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:27:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:27:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:27:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:27:04', tmtdew=29.65, humidity=12.51, cloud=0.0, wind=11.7, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:27:05', seeing=1.14, atlas_timestamp='2025-11-25T21:27:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.03474999999999895, -0.021749999999999048, -0.008500000000001506, 0.050499999999999545, 0.03775000000000084, 0.0495000000000001, -0.019249999999999545, 0.02499999999999858, 0.0030000000000001137, 0.034250000000000114, -0.033500000000000085, 0.036999999999999034, 0.09424999999999883, -0.02800000000000047, -0.005500000000001393, -0.015750000000000597, 0.028499999999999304, 0.010999999999999233, -0.04875000000000185, 0.0799999999999983, 0.08424999999999905, -0.0072499999999990905, -0.04075000000000095, -0.011000000000001009, -0.03849999999999909, 0.0467499999999994, 0.0065000000000008384, 0.09149999999999991, 0.10200000000000031, 0.06400000000000183, 0.0010000000000012221, -0.047750000000000625], zp_timestamp='2025-11-25T21:24:00')
2025-11-25T23:27:35.595 [DEBUG] [Thread-7667] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:27:35.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:27:35.679 [DEBUG] [Thread-7670] [transport.py] [_log()] starting thread (client mode): 0x70d6a950
2025-11-25T23:27:35.680 [DEBUG] [Thread-7670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:27:35.694 [DEBUG] [Thread-7670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:27:35.694 [INFO] [Thread-7670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] client lang: <none>
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] server lang: <none>
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] kex follows: False
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:27:35.702 [DEBUG] [Thread-7670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:27:35.703 [DEBUG] [Thread-7670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:27:35.703 [DEBUG] [Thread-7670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:27:35.703 [DEBUG] [Thread-7670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:27:35.703 [DEBUG] [Thread-7670] [transport.py] [_log()] Compression: none
2025-11-25T23:27:35.703 [DEBUG] [Thread-7670] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:27:35.762 [DEBUG] [Thread-7670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:27:35.763 [DEBUG] [Thread-7670] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:27:35.764 [DEBUG] [Thread-7670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:27:35.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:27:35.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:27:35.819 [DEBUG] [Thread-7670] [transport.py] [_log()] userauth is OK
2025-11-25T23:27:35.819 [DEBUG] [Thread-7670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:27:35.819 [DEBUG] [Thread-7670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:27:35.819 [DEBUG] [Thread-7670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:27:35.819 [DEBUG] [Thread-7670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:27:35.838 [INFO] [Thread-7670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:27:35.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:27:35.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:27:36.524 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:36.672 [DEBUG] [Thread-7670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:27:36.672 [DEBUG] [Thread-7670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:27:36.721 [DEBUG] [Thread-7670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:27:36.721 [DEBUG] [Thread-7670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:27:36.730 [DEBUG] [Thread-7670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:27:36.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:27:36.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:27:36.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:27:36.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:27:36.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:27:36.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:27:36.773 [DEBUG] [Thread-7670] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:27:43.599 [DEBUG] [Thread-7672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:46.944 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:57.339 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:27:58.661 [DEBUG] [Thread-7673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:06.645 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:06.646 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:06.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:28:06.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:28:06.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:28:07.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 27, 36), 29.57, 12.99, 0.0, 15.39, 20.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:28:07.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:27:36
2025-11-25T23:28:07.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:28:07.734 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:07.785 [DEBUG] [Thread-7674] [transport.py] [_log()] starting thread (client mode): 0x70d384f0
2025-11-25T23:28:07.786 [DEBUG] [Thread-7674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:28:07.805 [DEBUG] [Thread-7674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:28:07.805 [INFO] [Thread-7674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] client lang: <none>
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] server lang: <none>
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] kex follows: False
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] Compression: none
2025-11-25T23:28:07.808 [DEBUG] [Thread-7674] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:28:07.824 [DEBUG] [Thread-7674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:28:07.824 [DEBUG] [Thread-7674] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:28:07.824 [DEBUG] [Thread-7674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:28:07.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:28:07.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:28:07.824 [DEBUG] [Thread-7674] [transport.py] [_log()] userauth is OK
2025-11-25T23:28:07.824 [DEBUG] [Thread-7674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:28:07.825 [DEBUG] [Thread-7674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:28:07.825 [DEBUG] [Thread-7674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:28:07.825 [DEBUG] [Thread-7674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:28:07.833 [INFO] [Thread-7674] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:28:07.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:28:08.279 [DEBUG] [Thread-7676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:08.483 [DEBUG] [Thread-7674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:28:08.483 [DEBUG] [Thread-7674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:28:08.483 [DEBUG] [Thread-7674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:28:08.523 [DEBUG] [Thread-7674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:28:08.523 [DEBUG] [Thread-7674] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:28:08.525 [DEBUG] [Thread-7674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:28:08.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:28:08.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:28:08.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:28:08.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:28:08.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:28:08.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:28:08.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:28:08.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:28:08.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:28:08.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.894195 -999.00  +20.70  11.51     17   -4.60 1 1 1 1 1     0    0 25.87 23.08 ZNESW 12.1 11.5 157.4 17.2 20.1 -25.9 20.1 -25.3 19.8 -24.1 19.9 -24.9
2025-11-25T23:28:08.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:28:08.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:28:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.894195
2025-11-25T23:28:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:28:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:28:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:28:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:28:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:28:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:27:36', tmtdew=29.57, humidity=12.99, cloud=0.0, wind=15.39, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:27:37', seeing=1.14, atlas_timestamp='2025-11-25T21:27:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.0337499999999995, 0.023249999999999105, 0.014499999999999957, 0.03450000000000131, 0.013249999999999318, 0.045999999999999375, -0.027749999999999275, -0.005000000000000782, 0.012000000000000455, 0.04025000000000034, -0.0649999999999995, 0.047999999999998266, 0.0752499999999987, 0.019000000000000128, -0.025000000000000355, -0.025750000000000384, 0.03500000000000014, 0.037499999999999645, -0.00575000000000081, 0.03849999999999909, 0.11474999999999724, -0.006249999999999645, -0.030250000000000554, -0.030000000000001137, -0.026999999999999247, 0.0417500000000004, 0.0495000000000001, 0.10899999999999999, 0.06600000000000072, 0.0810000000000013, -0.018000000000000682, -0.06325000000000003], zp_timestamp='2025-11-25T21:27:00')
2025-11-25T23:28:08.544 [DEBUG] [Thread-7674] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:28:08.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:28:08.628 [DEBUG] [Thread-7678] [transport.py] [_log()] starting thread (client mode): 0x70d7e410
2025-11-25T23:28:08.628 [DEBUG] [Thread-7678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:28:08.642 [DEBUG] [Thread-7678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:28:08.642 [INFO] [Thread-7678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] client lang: <none>
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] server lang: <none>
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] kex follows: False
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] Compression: none
2025-11-25T23:28:08.650 [DEBUG] [Thread-7678] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:28:08.707 [DEBUG] [Thread-7678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:28:08.708 [DEBUG] [Thread-7678] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:28:08.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:28:08.708 [DEBUG] [Thread-7678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:28:08.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:28:08.769 [DEBUG] [Thread-7678] [transport.py] [_log()] userauth is OK
2025-11-25T23:28:08.769 [DEBUG] [Thread-7678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:28:08.769 [DEBUG] [Thread-7678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:28:08.769 [DEBUG] [Thread-7678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:28:08.769 [DEBUG] [Thread-7678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:28:08.787 [INFO] [Thread-7678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:28:08.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:28:08.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:28:09.598 [DEBUG] [Thread-7678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:28:09.599 [DEBUG] [Thread-7678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:28:09.647 [DEBUG] [Thread-7678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:28:09.647 [DEBUG] [Thread-7678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:28:09.655 [DEBUG] [Thread-7678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:28:09.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:28:09.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:28:09.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:28:09.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:28:09.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:28:09.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:28:09.686 [DEBUG] [Thread-7678] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:28:13.700 [DEBUG] [Thread-7680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:18.129 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:28.525 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:28.765 [DEBUG] [Thread-7681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:38.925 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:28:39.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:28:39.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:28:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 28, 8), 29.56, 12.99, 0.0, 16.07, 20.27, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:28:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:28:08
2025-11-25T23:28:40.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:28:40.657 [DEBUG] [Thread-7682] [transport.py] [_log()] starting thread (client mode): 0x70da4f70
2025-11-25T23:28:40.657 [DEBUG] [Thread-7682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:28:40.677 [DEBUG] [Thread-7682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:28:40.677 [INFO] [Thread-7682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:28:40.680 [DEBUG] [Thread-7682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:28:40.680 [DEBUG] [Thread-7682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] client lang: <none>
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] server lang: <none>
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] kex follows: False
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:28:40.681 [DEBUG] [Thread-7682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:28:40.682 [DEBUG] [Thread-7682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:28:40.682 [DEBUG] [Thread-7682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:28:40.682 [DEBUG] [Thread-7682] [transport.py] [_log()] Compression: none
2025-11-25T23:28:40.682 [DEBUG] [Thread-7682] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:28:40.700 [DEBUG] [Thread-7682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:28:40.701 [DEBUG] [Thread-7682] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:28:40.702 [DEBUG] [Thread-7682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:28:40.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:28:40.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:28:40.704 [DEBUG] [Thread-7682] [transport.py] [_log()] userauth is OK
2025-11-25T23:28:40.704 [DEBUG] [Thread-7682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:28:40.704 [DEBUG] [Thread-7682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:28:40.704 [DEBUG] [Thread-7682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:28:40.704 [DEBUG] [Thread-7682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:28:40.727 [INFO] [Thread-7682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:28:40.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:28:41.507 [DEBUG] [Thread-7682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:28:41.507 [DEBUG] [Thread-7682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:28:41.507 [DEBUG] [Thread-7682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:28:41.548 [DEBUG] [Thread-7682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:28:41.548 [DEBUG] [Thread-7682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:28:41.550 [DEBUG] [Thread-7682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:28:41.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:28:41.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:28:41.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:28:41.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:28:41.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:28:41.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:28:41.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:28:41.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:28:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:28:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.894542 -999.00  +20.70  12.41     17   -4.60 1 1 1 1 1     0    0 25.85 27.15 ZNESW 12.0 12.4 156.4 15.7 20.1 -25.7 20.1 -25.5 19.8 -23.9 19.9 -25.2
2025-11-25T23:28:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:28:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:28:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.894542
2025-11-25T23:28:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:28:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:28:41.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:28:41.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:28:41.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:28:41.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:28:08', tmtdew=29.56, humidity=12.99, cloud=0.0, wind=16.07, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:28:09', seeing=1.17, atlas_timestamp='2025-11-25T21:28:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.0337499999999995, 0.023249999999999105, 0.014499999999999957, 0.03450000000000131, 0.013249999999999318, 0.045999999999999375, -0.027749999999999275, -0.005000000000000782, 0.012000000000000455, 0.04025000000000034, -0.0649999999999995, 0.047999999999998266, 0.0752499999999987, 0.019000000000000128, -0.025000000000000355, -0.025750000000000384, 0.03500000000000014, 0.037499999999999645, -0.00575000000000081, 0.03849999999999909, 0.11474999999999724, -0.006249999999999645, -0.030250000000000554, -0.030000000000001137, -0.026999999999999247, 0.0417500000000004, 0.0495000000000001, 0.10899999999999999, 0.06600000000000072, 0.0810000000000013, -0.018000000000000682, -0.06325000000000003], zp_timestamp='2025-11-25T21:27:00')
2025-11-25T23:28:41.564 [DEBUG] [Thread-7682] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:28:41.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:28:41.649 [DEBUG] [Thread-7685] [transport.py] [_log()] starting thread (client mode): 0x7374dcc0
2025-11-25T23:28:41.649 [DEBUG] [Thread-7685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:28:41.663 [DEBUG] [Thread-7685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:28:41.663 [INFO] [Thread-7685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] client lang: <none>
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] server lang: <none>
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] kex follows: False
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] Compression: none
2025-11-25T23:28:41.671 [DEBUG] [Thread-7685] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:28:41.726 [DEBUG] [Thread-7685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:28:41.726 [DEBUG] [Thread-7685] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:28:41.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:28:41.727 [DEBUG] [Thread-7685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:28:41.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:28:41.783 [DEBUG] [Thread-7685] [transport.py] [_log()] userauth is OK
2025-11-25T23:28:41.783 [DEBUG] [Thread-7685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:28:41.783 [DEBUG] [Thread-7685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:28:41.783 [DEBUG] [Thread-7685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:28:41.783 [DEBUG] [Thread-7685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:28:41.801 [INFO] [Thread-7685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:28:41.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:28:41.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:28:42.623 [DEBUG] [Thread-7685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:28:42.623 [DEBUG] [Thread-7685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:28:42.671 [DEBUG] [Thread-7685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:28:42.671 [DEBUG] [Thread-7685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:28:42.679 [DEBUG] [Thread-7685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:28:42.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:28:42.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:28:42.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:28:42.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:28:42.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:28:42.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:28:42.711 [DEBUG] [Thread-7685] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:28:43.797 [DEBUG] [Thread-7687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:49.320 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:58.838 [DEBUG] [Thread-7688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:28:59.733 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:06.847 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:06.848 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:08.356 [DEBUG] [Thread-7689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:10.155 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:12.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:29:12.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:29: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
2025-11-25T23:29:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 28, 41), 29.65, 12.46, 0.0, 18.12, 20.35, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:29:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:28:41
2025-11-25T23:29:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:29:13.643 [DEBUG] [Thread-7690] [transport.py] [_log()] starting thread (client mode): 0x70da7e20
2025-11-25T23:29:13.643 [DEBUG] [Thread-7690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:29:13.663 [DEBUG] [Thread-7690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:29:13.664 [INFO] [Thread-7690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] client lang: <none>
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] server lang: <none>
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] kex follows: False
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] Compression: none
2025-11-25T23:29:13.667 [DEBUG] [Thread-7690] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:29:13.684 [DEBUG] [Thread-7690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:29:13.685 [DEBUG] [Thread-7690] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:29:13.685 [DEBUG] [Thread-7690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:29:13.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:29:13.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:29:13.687 [DEBUG] [Thread-7690] [transport.py] [_log()] userauth is OK
2025-11-25T23:29:13.687 [DEBUG] [Thread-7690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:29:13.687 [DEBUG] [Thread-7690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:29:13.687 [DEBUG] [Thread-7690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:29:13.688 [DEBUG] [Thread-7690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:29:13.712 [INFO] [Thread-7690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:29:13.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:29:13.880 [DEBUG] [Thread-7692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:14.346 [DEBUG] [Thread-7690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:29:14.346 [DEBUG] [Thread-7690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:29:14.347 [DEBUG] [Thread-7690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:29:14.387 [DEBUG] [Thread-7690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:29:14.387 [DEBUG] [Thread-7690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:29:14.391 [DEBUG] [Thread-7690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:29:14.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:29:14.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:29:14.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:29:14.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:29:14.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:29:14.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:29:14.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:29:14.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:29:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:29:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.894889 -999.00  +20.70  13.58     17   -4.70 1 1 1 1 1     0    0 25.65 28.18 ZNESW 13.7 13.6 179.4 19.2 20.1 -25.8 20.1 -25.5 19.8 -24.0 20.0 -24.8
2025-11-25T23:29:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:29:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:29:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.894889
2025-11-25T23:29:14.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:29:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:29:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:29:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:29:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:29:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:28:41', tmtdew=29.65, humidity=12.46, cloud=0.0, wind=18.12, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:28:41', seeing=0.93, atlas_timestamp='2025-11-25T21:28:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.0337499999999995, 0.023249999999999105, 0.014499999999999957, 0.03450000000000131, 0.013249999999999318, 0.045999999999999375, -0.027749999999999275, -0.005000000000000782, 0.012000000000000455, 0.04025000000000034, -0.0649999999999995, 0.047999999999998266, 0.0752499999999987, 0.019000000000000128, -0.025000000000000355, -0.025750000000000384, 0.03500000000000014, 0.037499999999999645, -0.00575000000000081, 0.03849999999999909, 0.11474999999999724, -0.006249999999999645, -0.030250000000000554, -0.030000000000001137, -0.026999999999999247, 0.0417500000000004, 0.0495000000000001, 0.10899999999999999, 0.06600000000000072, 0.0810000000000013, -0.018000000000000682, -0.06325000000000003], zp_timestamp='2025-11-25T21:27:00')
2025-11-25T23:29:14.417 [DEBUG] [Thread-7690] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:29:14.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:29:14.512 [DEBUG] [Thread-7694] [transport.py] [_log()] starting thread (client mode): 0x70dbe5c0
2025-11-25T23:29:14.512 [DEBUG] [Thread-7694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:29:14.527 [DEBUG] [Thread-7694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:29:14.527 [INFO] [Thread-7694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] client lang: <none>
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] server lang: <none>
2025-11-25T23:29:14.535 [DEBUG] [Thread-7694] [transport.py] [_log()] kex follows: False
2025-11-25T23:29:14.536 [DEBUG] [Thread-7694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:29:14.536 [DEBUG] [Thread-7694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:29:14.536 [DEBUG] [Thread-7694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:29:14.536 [DEBUG] [Thread-7694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:29:14.536 [DEBUG] [Thread-7694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:29:14.536 [DEBUG] [Thread-7694] [transport.py] [_log()] Compression: none
2025-11-25T23:29:14.536 [DEBUG] [Thread-7694] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:29:14.594 [DEBUG] [Thread-7694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:29:14.595 [DEBUG] [Thread-7694] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:29:14.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:29:14.595 [DEBUG] [Thread-7694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:29:14.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:29:14.650 [DEBUG] [Thread-7694] [transport.py] [_log()] userauth is OK
2025-11-25T23:29:14.650 [DEBUG] [Thread-7694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:29:14.651 [DEBUG] [Thread-7694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:29:14.651 [DEBUG] [Thread-7694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:29:14.651 [DEBUG] [Thread-7694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:29:14.670 [INFO] [Thread-7694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:29:14.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:29:14.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:29:15.483 [DEBUG] [Thread-7694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:29:15.483 [DEBUG] [Thread-7694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:29:15.531 [DEBUG] [Thread-7694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:29:15.531 [DEBUG] [Thread-7694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:29:15.539 [DEBUG] [Thread-7694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:29:15.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:29:15.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:29:15.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:29:15.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:29:15.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:29:15.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:29:15.570 [DEBUG] [Thread-7694] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:29:20.566 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:28.911 [DEBUG] [Thread-7696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:30.964 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:41.362 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:43.974 [DEBUG] [Thread-7697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:45.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:29:45.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:29:45.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:29:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 29, 13), 29.67, 12.44, 0.0, 17.43, 20.39, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:29:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:29:13
2025-11-25T23:29:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:29:46.526 [DEBUG] [Thread-7698] [transport.py] [_log()] starting thread (client mode): 0x70d38040
2025-11-25T23:29:46.527 [DEBUG] [Thread-7698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:29:46.547 [DEBUG] [Thread-7698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:29:46.547 [INFO] [Thread-7698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] client lang: <none>
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] server lang: <none>
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] kex follows: False
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] Compression: none
2025-11-25T23:29:46.551 [DEBUG] [Thread-7698] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:29:46.569 [DEBUG] [Thread-7698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:29:46.569 [DEBUG] [Thread-7698] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:29:46.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:29:46.570 [DEBUG] [Thread-7698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:29:46.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:29:46.572 [DEBUG] [Thread-7698] [transport.py] [_log()] userauth is OK
2025-11-25T23:29:46.572 [DEBUG] [Thread-7698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:29:46.572 [DEBUG] [Thread-7698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:29:46.573 [DEBUG] [Thread-7698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:29:46.573 [DEBUG] [Thread-7698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:29:46.596 [INFO] [Thread-7698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:29:46.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:29:47.357 [DEBUG] [Thread-7698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:29:47.357 [DEBUG] [Thread-7698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:29:47.357 [DEBUG] [Thread-7698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:29:47.398 [DEBUG] [Thread-7698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:29:47.398 [DEBUG] [Thread-7698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:29:47.401 [DEBUG] [Thread-7698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:29:47.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:29:47.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:29:47.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:29:47.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:29:47.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:29:47.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:29:47.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:29:47.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:29:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.895236 -999.00  +20.70  10.09     17   -4.60 1 1 1 1 1     0    0 26.17 32.61 ZNESW 8.3 10.1 150.8 14.6 20.1 -25.9 20.1 -25.1 19.8 -24.1 20.0 -25.1
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.895236
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:29:47.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:29:13', tmtdew=29.67, humidity=12.44, cloud=0.0, wind=17.43, temperature=20.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:29:14', seeing=0.9, atlas_timestamp='2025-11-25T21:29:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.0337499999999995, 0.023249999999999105, 0.014499999999999957, 0.03450000000000131, 0.013249999999999318, 0.045999999999999375, -0.027749999999999275, -0.005000000000000782, 0.012000000000000455, 0.04025000000000034, -0.0649999999999995, 0.047999999999998266, 0.0752499999999987, 0.019000000000000128, -0.025000000000000355, -0.025750000000000384, 0.03500000000000014, 0.037499999999999645, -0.00575000000000081, 0.03849999999999909, 0.11474999999999724, -0.006249999999999645, -0.030250000000000554, -0.030000000000001137, -0.026999999999999247, 0.0417500000000004, 0.0495000000000001, 0.10899999999999999, 0.06600000000000072, 0.0810000000000013, -0.018000000000000682, -0.06325000000000003], zp_timestamp='2025-11-25T21:27:00')
2025-11-25T23:29:47.419 [DEBUG] [Thread-7698] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:29:47.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:29:47.506 [DEBUG] [Thread-7701] [transport.py] [_log()] starting thread (client mode): 0x70d42800
2025-11-25T23:29:47.506 [DEBUG] [Thread-7701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:29:47.520 [DEBUG] [Thread-7701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:29:47.521 [INFO] [Thread-7701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] client lang: <none>
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] server lang: <none>
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] kex follows: False
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] Compression: none
2025-11-25T23:29:47.528 [DEBUG] [Thread-7701] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:29:47.584 [DEBUG] [Thread-7701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:29:47.584 [DEBUG] [Thread-7701] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:29:47.584 [DEBUG] [Thread-7701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:29:47.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:29:47.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:29:47.641 [DEBUG] [Thread-7701] [transport.py] [_log()] userauth is OK
2025-11-25T23:29:47.641 [DEBUG] [Thread-7701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:29:47.641 [DEBUG] [Thread-7701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:29:47.641 [DEBUG] [Thread-7701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:29:47.641 [DEBUG] [Thread-7701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:29:47.657 [INFO] [Thread-7701] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:29:47.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:29:47.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:29:48.574 [DEBUG] [Thread-7701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:29:48.574 [DEBUG] [Thread-7701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:29:48.622 [DEBUG] [Thread-7701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:29:48.622 [DEBUG] [Thread-7701] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:29:48.630 [DEBUG] [Thread-7701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:29:48.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:29:48.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:29:48.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:29:48.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:29:48.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:29:48.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:29:48.664 [DEBUG] [Thread-7701] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:29:51.761 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:29:59.008 [DEBUG] [Thread-7703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:02.157 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:07.050 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:07.051 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:08.433 [DEBUG] [Thread-7704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:12.552 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:14.050 [DEBUG] [Thread-7705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:18.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:30:18.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:30: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
2025-11-25T23:30:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 29, 46), 29.9, 12.33, 0.0, 12.69, 20.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:30:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:29:46
2025-11-25T23:30:19.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:30:19.708 [DEBUG] [Thread-7706] [transport.py] [_log()] starting thread (client mode): 0x70d6a740
2025-11-25T23:30:19.708 [DEBUG] [Thread-7706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:30:19.728 [DEBUG] [Thread-7706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:30:19.728 [INFO] [Thread-7706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] client lang: <none>
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] server lang: <none>
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] kex follows: False
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] Compression: none
2025-11-25T23:30:19.732 [DEBUG] [Thread-7706] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:30:19.748 [DEBUG] [Thread-7706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:30:19.748 [DEBUG] [Thread-7706] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:30:19.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:30:19.748 [DEBUG] [Thread-7706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:30:19.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:30:19.749 [DEBUG] [Thread-7706] [transport.py] [_log()] userauth is OK
2025-11-25T23:30:19.749 [DEBUG] [Thread-7706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:30:19.749 [DEBUG] [Thread-7706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:30:19.749 [DEBUG] [Thread-7706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:30:19.749 [DEBUG] [Thread-7706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:30:19.759 [INFO] [Thread-7706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:30:19.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:30:20.395 [DEBUG] [Thread-7706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:30:20.395 [DEBUG] [Thread-7706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:30:20.395 [DEBUG] [Thread-7706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:30:20.436 [DEBUG] [Thread-7706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:30:20.436 [DEBUG] [Thread-7706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:30:20.438 [DEBUG] [Thread-7706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:30:20.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:30:20.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:30:20.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:30:20.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:30:20.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:30:20.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:30:20.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:30:20.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:30:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:30:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.895584 -999.00  +20.70   8.47     17   -4.70 1 1 1 1 1     0    0 25.76 35.34 ZNESW 7.7 8.5 155.8 12.2 20.1 -26.1 20.1 -25.5 19.8 -24.1 19.9 -25.1
2025-11-25T23:30:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:30:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:30:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.895584
2025-11-25T23:30:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:30:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:30:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:30:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:30:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:30:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:29:46', tmtdew=29.9, humidity=12.33, cloud=0.0, wind=12.69, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:29:46', seeing=1.03, atlas_timestamp='2025-11-25T21:29:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.0337499999999995, 0.023249999999999105, 0.014499999999999957, 0.03450000000000131, 0.013249999999999318, 0.045999999999999375, -0.027749999999999275, -0.005000000000000782, 0.012000000000000455, 0.04025000000000034, -0.0649999999999995, 0.047999999999998266, 0.0752499999999987, 0.019000000000000128, -0.025000000000000355, -0.025750000000000384, 0.03500000000000014, 0.037499999999999645, -0.00575000000000081, 0.03849999999999909, 0.11474999999999724, -0.006249999999999645, -0.030250000000000554, -0.030000000000001137, -0.026999999999999247, 0.0417500000000004, 0.0495000000000001, 0.10899999999999999, 0.06600000000000072, 0.0810000000000013, -0.018000000000000682, -0.06325000000000003], zp_timestamp='2025-11-25T21:27:00')
2025-11-25T23:30:20.458 [DEBUG] [Thread-7706] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:30:20.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:30:20.542 [DEBUG] [Thread-7709] [transport.py] [_log()] starting thread (client mode): 0x70d6bbe0
2025-11-25T23:30:20.542 [DEBUG] [Thread-7709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:30:20.556 [DEBUG] [Thread-7709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:30:20.557 [INFO] [Thread-7709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] client lang: <none>
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] server lang: <none>
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] kex follows: False
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] Compression: none
2025-11-25T23:30:20.564 [DEBUG] [Thread-7709] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:30:20.623 [DEBUG] [Thread-7709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:30:20.623 [DEBUG] [Thread-7709] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:30:20.623 [DEBUG] [Thread-7709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:30:20.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:30:20.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:30:20.680 [DEBUG] [Thread-7709] [transport.py] [_log()] userauth is OK
2025-11-25T23:30:20.681 [DEBUG] [Thread-7709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:30:20.681 [DEBUG] [Thread-7709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:30:20.681 [DEBUG] [Thread-7709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:30:20.681 [DEBUG] [Thread-7709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:30:20.700 [INFO] [Thread-7709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:30:20.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:30:20.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:30:21.537 [DEBUG] [Thread-7709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:30:21.537 [DEBUG] [Thread-7709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:30:21.584 [DEBUG] [Thread-7709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:30:21.584 [DEBUG] [Thread-7709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:30:21.593 [DEBUG] [Thread-7709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:30:21.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:30:21.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:30:21.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:30:21.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:30:21.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:30:21.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:30:21.626 [DEBUG] [Thread-7709] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:30:22.950 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:29.087 [DEBUG] [Thread-7711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:33.404 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:43.818 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:44.147 [DEBUG] [Thread-7712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:51.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:30:51.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:30:51.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:30:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 30, 18), 29.85, 12.38, 0.0, 11.82, 20.54, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:30:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:30:18
2025-11-25T23:30:52.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:30:52.647 [DEBUG] [Thread-7713] [transport.py] [_log()] starting thread (client mode): 0x70d747c0
2025-11-25T23:30:52.647 [DEBUG] [Thread-7713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:30:52.667 [DEBUG] [Thread-7713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:30:52.667 [INFO] [Thread-7713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:30:52.668 [DEBUG] [Thread-7713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:30:52.668 [DEBUG] [Thread-7713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] client lang: <none>
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] server lang: <none>
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] kex follows: False
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:30:52.669 [DEBUG] [Thread-7713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:30:52.670 [DEBUG] [Thread-7713] [transport.py] [_log()] Compression: none
2025-11-25T23:30:52.670 [DEBUG] [Thread-7713] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:30:52.683 [DEBUG] [Thread-7713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:30:52.683 [DEBUG] [Thread-7713] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:30:52.684 [DEBUG] [Thread-7713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:30:52.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:30:52.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:30:52.685 [DEBUG] [Thread-7713] [transport.py] [_log()] userauth is OK
2025-11-25T23:30:52.685 [DEBUG] [Thread-7713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:30:52.686 [DEBUG] [Thread-7713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:30:52.686 [DEBUG] [Thread-7713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:30:52.686 [DEBUG] [Thread-7713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:30:52.704 [INFO] [Thread-7713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:30:52.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:30:53.313 [DEBUG] [Thread-7713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:30:53.314 [DEBUG] [Thread-7713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:30:53.314 [DEBUG] [Thread-7713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:30:53.355 [DEBUG] [Thread-7713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:30:53.355 [DEBUG] [Thread-7713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:30:53.358 [DEBUG] [Thread-7713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:30:53.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:30:53.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:30:53.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:30:53.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:30:53.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:30:53.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:30:53.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:30:53.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:30:53.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:30:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.896278 -999.00  +20.70   7.13     17   -4.60 1 1 1 1 1     0    0 25.73 41.01 ZNESW 6.7 7.1 159.0 11.2 20.2 -26.1 20.1 -25.6 19.8 -24.4 20.0 -25.3
2025-11-25T23:30:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:30:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:30:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.896278
2025-11-25T23:30:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:30:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:30:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:30:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:30:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:30:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:30:18', tmtdew=29.85, humidity=12.38, cloud=0.0, wind=11.82, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:30:50', seeing=0.79, atlas_timestamp='2025-11-25T21:30:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.0337499999999995, 0.023249999999999105, 0.014499999999999957, 0.03450000000000131, 0.013249999999999318, 0.045999999999999375, -0.027749999999999275, -0.005000000000000782, 0.012000000000000455, 0.04025000000000034, -0.0649999999999995, 0.047999999999998266, 0.0752499999999987, 0.019000000000000128, -0.025000000000000355, -0.025750000000000384, 0.03500000000000014, 0.037499999999999645, -0.00575000000000081, 0.03849999999999909, 0.11474999999999724, -0.006249999999999645, -0.030250000000000554, -0.030000000000001137, -0.026999999999999247, 0.0417500000000004, 0.0495000000000001, 0.10899999999999999, 0.06600000000000072, 0.0810000000000013, -0.018000000000000682, -0.06325000000000003], zp_timestamp='2025-11-25T21:27:00')
2025-11-25T23:30:53.385 [DEBUG] [Thread-7713] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:30:53.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:30:53.480 [DEBUG] [Thread-7716] [transport.py] [_log()] starting thread (client mode): 0x70d75c30
2025-11-25T23:30:53.481 [DEBUG] [Thread-7716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:30:53.494 [DEBUG] [Thread-7716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:30:53.494 [INFO] [Thread-7716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:30:53.501 [DEBUG] [Thread-7716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] client lang: <none>
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] server lang: <none>
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] kex follows: False
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] Compression: none
2025-11-25T23:30:53.502 [DEBUG] [Thread-7716] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:30:53.560 [DEBUG] [Thread-7716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:30:53.560 [DEBUG] [Thread-7716] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:30:53.561 [DEBUG] [Thread-7716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:30:53.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:30:53.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:30:53.615 [DEBUG] [Thread-7716] [transport.py] [_log()] userauth is OK
2025-11-25T23:30:53.615 [DEBUG] [Thread-7716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:30:53.615 [DEBUG] [Thread-7716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:30:53.616 [DEBUG] [Thread-7716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:30:53.616 [DEBUG] [Thread-7716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:30:53.638 [INFO] [Thread-7716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:30:53.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:30:53.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:30:54.242 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:30:54.504 [DEBUG] [Thread-7716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:30:54.505 [DEBUG] [Thread-7716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:30:54.553 [DEBUG] [Thread-7716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:30:54.553 [DEBUG] [Thread-7716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:30:54.562 [DEBUG] [Thread-7716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:30:54.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:30:54.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:30:54.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:30:54.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:30:54.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:30:54.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:30:54.598 [DEBUG] [Thread-7716] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:30:59.181 [DEBUG] [Thread-7718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:04.625 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:07.252 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:07.253 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:08.510 [DEBUG] [Thread-7719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:14.230 [DEBUG] [Thread-7720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:15.047 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:31:24.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:31:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:31:25.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 30, 50), 29.64, 12.41, 0.0, 9.51, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:31:25.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:30:50
2025-11-25T23:31:25.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:31:25.442 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:25.555 [DEBUG] [Thread-7721] [transport.py] [_log()] starting thread (client mode): 0x70d6a950
2025-11-25T23:31:25.555 [DEBUG] [Thread-7721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:31:25.578 [DEBUG] [Thread-7721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:31:25.579 [INFO] [Thread-7721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:31:25.582 [DEBUG] [Thread-7721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:31:25.582 [DEBUG] [Thread-7721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:31:25.582 [DEBUG] [Thread-7721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:31:25.582 [DEBUG] [Thread-7721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:31:25.582 [DEBUG] [Thread-7721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:31:25.582 [DEBUG] [Thread-7721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:31:25.582 [DEBUG] [Thread-7721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:31:25.582 [DEBUG] [Thread-7721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] client lang: <none>
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] server lang: <none>
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] kex follows: False
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] Compression: none
2025-11-25T23:31:25.583 [DEBUG] [Thread-7721] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:31:25.600 [DEBUG] [Thread-7721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:31:25.600 [DEBUG] [Thread-7721] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:31:25.601 [DEBUG] [Thread-7721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:31:25.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:31:25.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:31:25.603 [DEBUG] [Thread-7721] [transport.py] [_log()] userauth is OK
2025-11-25T23:31:25.603 [DEBUG] [Thread-7721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:31:25.603 [DEBUG] [Thread-7721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:31:25.603 [DEBUG] [Thread-7721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:31:25.603 [DEBUG] [Thread-7721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:31:25.626 [INFO] [Thread-7721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:31:25.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:31:26.281 [DEBUG] [Thread-7721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:31:26.281 [DEBUG] [Thread-7721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:31:26.282 [DEBUG] [Thread-7721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:31:26.322 [DEBUG] [Thread-7721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:31:26.322 [DEBUG] [Thread-7721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:31:26.326 [DEBUG] [Thread-7721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:31:26.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:31:26.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:31:26.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:31:26.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:31:26.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:31:26.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:31:26.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:31:26.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:31:26.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:31:26.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.896625 -999.00  +20.70   7.42     17   -4.50 1 1 1 1 1     0    0 26.38 40.94 ZNESW 9.4 7.4 146.9 10.3 20.1 -26.2 20.1 -25.6 19.8 -24.3 20.0 -25.3
2025-11-25T23:31:26.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:31:26.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:31:26.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.896625
2025-11-25T23:31:26.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:31:26.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:31:26.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:31:26.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:31:26.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:31:26.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:30:50', tmtdew=29.64, humidity=12.41, cloud=0.0, wind=9.51, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:31:22', seeing=0.79, atlas_timestamp='2025-11-25T21:31:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:29:00')
2025-11-25T23:31:26.352 [DEBUG] [Thread-7721] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:31:26.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:31:26.459 [DEBUG] [Thread-7724] [transport.py] [_log()] starting thread (client mode): 0x70dbc340
2025-11-25T23:31:26.459 [DEBUG] [Thread-7724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:31:26.474 [DEBUG] [Thread-7724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:31:26.474 [INFO] [Thread-7724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:31:26.482 [DEBUG] [Thread-7724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:31:26.482 [DEBUG] [Thread-7724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:31:26.482 [DEBUG] [Thread-7724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:31:26.482 [DEBUG] [Thread-7724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:31:26.482 [DEBUG] [Thread-7724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:31:26.482 [DEBUG] [Thread-7724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:31:26.482 [DEBUG] [Thread-7724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:31:26.482 [DEBUG] [Thread-7724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:31:26.482 [DEBUG] [Thread-7724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] client lang: <none>
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] server lang: <none>
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] kex follows: False
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] Compression: none
2025-11-25T23:31:26.483 [DEBUG] [Thread-7724] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:31:26.543 [DEBUG] [Thread-7724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:31:26.543 [DEBUG] [Thread-7724] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:31:26.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:31:26.545 [DEBUG] [Thread-7724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:31:26.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:31:26.605 [DEBUG] [Thread-7724] [transport.py] [_log()] userauth is OK
2025-11-25T23:31:26.606 [DEBUG] [Thread-7724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:31:26.606 [DEBUG] [Thread-7724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:31:26.606 [DEBUG] [Thread-7724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:31:26.606 [DEBUG] [Thread-7724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:31:26.625 [INFO] [Thread-7724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:31:26.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:31:26.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:31:27.461 [DEBUG] [Thread-7724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:31:27.462 [DEBUG] [Thread-7724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:31:27.510 [DEBUG] [Thread-7724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:31:27.510 [DEBUG] [Thread-7724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:31:27.519 [DEBUG] [Thread-7724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:31:27.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:31:27.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:31:27.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:31:27.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:31:27.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:31:27.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:31:27.556 [DEBUG] [Thread-7724] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:31:29.261 [DEBUG] [Thread-7726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:35.877 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:44.316 [DEBUG] [Thread-7727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:46.271 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:56.759 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:57.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:31:57.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:31:57.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:31:58.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 31, 54), 29.49, 12.96, 0.0, 12.53, 20.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:31:58.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:31:54
2025-11-25T23:31:58.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:31:58.513 [DEBUG] [Thread-7728] [transport.py] [_log()] starting thread (client mode): 0x70d39510
2025-11-25T23:31:58.513 [DEBUG] [Thread-7728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:31:58.532 [DEBUG] [Thread-7728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:31:58.532 [INFO] [Thread-7728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:31:58.535 [DEBUG] [Thread-7728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:31:58.535 [DEBUG] [Thread-7728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:31:58.535 [DEBUG] [Thread-7728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:31:58.535 [DEBUG] [Thread-7728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] client lang: <none>
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] server lang: <none>
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] kex follows: False
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] Compression: none
2025-11-25T23:31:58.536 [DEBUG] [Thread-7728] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:31:58.553 [DEBUG] [Thread-7728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:31:58.554 [DEBUG] [Thread-7728] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:31:58.555 [DEBUG] [Thread-7728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:31:58.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:31:58.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:31:58.557 [DEBUG] [Thread-7728] [transport.py] [_log()] userauth is OK
2025-11-25T23:31:58.557 [DEBUG] [Thread-7728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:31:58.557 [DEBUG] [Thread-7728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:31:58.557 [DEBUG] [Thread-7728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:31:58.557 [DEBUG] [Thread-7728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:31:58.581 [INFO] [Thread-7728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:31:58.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:31:59.229 [DEBUG] [Thread-7728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:31:59.229 [DEBUG] [Thread-7728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:31:59.229 [DEBUG] [Thread-7728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:31:59.270 [DEBUG] [Thread-7728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:31:59.270 [DEBUG] [Thread-7728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:31:59.273 [DEBUG] [Thread-7728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:31:59.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:31:59.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:31:59.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:31:59.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:31:59.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:31:59.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:31:59.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:31:59.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:31:59.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:31:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.896973 -999.00  +20.70   7.43     17   -4.50 1 1 1 1 1     0    0 25.99 41.55 ZNESW 8.0 7.4 139.4 11.4 20.1 -26.2 20.1 -25.7 19.8 -24.4 20.0 -25.3
2025-11-25T23:31:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:31:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:31:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.896973
2025-11-25T23:31:59.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:31:59.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:31:59.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:31:59.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:31:59.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:31:59.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:31:54', tmtdew=29.49, humidity=12.96, cloud=0.0, wind=12.53, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:31:54', seeing=0.94, atlas_timestamp='2025-11-25T21:31:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:29:00')
2025-11-25T23:31:59.300 [DEBUG] [Thread-7728] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:31:59.346 [DEBUG] [Thread-7731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:31:59.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:31:59.407 [DEBUG] [Thread-7732] [transport.py] [_log()] starting thread (client mode): 0x70d6a860
2025-11-25T23:31:59.407 [DEBUG] [Thread-7732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:31:59.421 [DEBUG] [Thread-7732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:31:59.421 [INFO] [Thread-7732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:31:59.429 [DEBUG] [Thread-7732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:31:59.429 [DEBUG] [Thread-7732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:31:59.429 [DEBUG] [Thread-7732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:31:59.429 [DEBUG] [Thread-7732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:31:59.429 [DEBUG] [Thread-7732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:31:59.429 [DEBUG] [Thread-7732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:31:59.430 [DEBUG] [Thread-7732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:31:59.430 [DEBUG] [Thread-7732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:31:59.430 [DEBUG] [Thread-7732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:31:59.430 [DEBUG] [Thread-7732] [transport.py] [_log()] client lang: <none>
2025-11-25T23:31:59.430 [DEBUG] [Thread-7732] [transport.py] [_log()] server lang: <none>
2025-11-25T23:31:59.430 [DEBUG] [Thread-7732] [transport.py] [_log()] kex follows: False
2025-11-25T23:31:59.430 [DEBUG] [Thread-7732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:31:59.430 [DEBUG] [Thread-7732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:31:59.430 [DEBUG] [Thread-7732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:31:59.431 [DEBUG] [Thread-7732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:31:59.431 [DEBUG] [Thread-7732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:31:59.431 [DEBUG] [Thread-7732] [transport.py] [_log()] Compression: none
2025-11-25T23:31:59.431 [DEBUG] [Thread-7732] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:31:59.490 [DEBUG] [Thread-7732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:31:59.491 [DEBUG] [Thread-7732] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:31:59.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:31:59.492 [DEBUG] [Thread-7732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:31:59.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:31:59.549 [DEBUG] [Thread-7732] [transport.py] [_log()] userauth is OK
2025-11-25T23:31:59.549 [DEBUG] [Thread-7732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:31:59.550 [DEBUG] [Thread-7732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:31:59.550 [DEBUG] [Thread-7732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:31:59.550 [DEBUG] [Thread-7732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:31:59.568 [INFO] [Thread-7732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:31:59.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:31:59.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:32:00.459 [DEBUG] [Thread-7732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:32:00.459 [DEBUG] [Thread-7732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:32:00.508 [DEBUG] [Thread-7732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:32:00.508 [DEBUG] [Thread-7732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:32:00.517 [DEBUG] [Thread-7732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:32:00.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:32: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')
2025-11-25T23:32:00.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:32:00.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:32:00.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:32:00.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:32:00.552 [DEBUG] [Thread-7732] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:32:07.211 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:07.451 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:07.453 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:08.587 [DEBUG] [Thread-7734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:14.392 [DEBUG] [Thread-7735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:17.690 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:28.084 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:29.429 [DEBUG] [Thread-7736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:30.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:32:30.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:32:30.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:32:31.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 32, 26), 29.44, 13.01, 0.0, 17.22, 20.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:32:31.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:32:26
2025-11-25T23:32:31.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:32:31.518 [DEBUG] [Thread-7737] [transport.py] [_log()] starting thread (client mode): 0x7374c370
2025-11-25T23:32:31.518 [DEBUG] [Thread-7737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:32:31.538 [DEBUG] [Thread-7737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:32:31.538 [INFO] [Thread-7737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:32:31.541 [DEBUG] [Thread-7737] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:32:31.541 [DEBUG] [Thread-7737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:32:31.541 [DEBUG] [Thread-7737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:32:31.541 [DEBUG] [Thread-7737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:32:31.541 [DEBUG] [Thread-7737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:32:31.541 [DEBUG] [Thread-7737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] client lang: <none>
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] server lang: <none>
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] kex follows: False
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] Compression: none
2025-11-25T23:32:31.542 [DEBUG] [Thread-7737] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:32:31.556 [DEBUG] [Thread-7737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:32:31.556 [DEBUG] [Thread-7737] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:32:31.556 [DEBUG] [Thread-7737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:32:31.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:32:31.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:32:31.557 [DEBUG] [Thread-7737] [transport.py] [_log()] userauth is OK
2025-11-25T23:32:31.557 [DEBUG] [Thread-7737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:32:31.557 [DEBUG] [Thread-7737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:32:31.557 [DEBUG] [Thread-7737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:32:31.557 [DEBUG] [Thread-7737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:32:31.572 [INFO] [Thread-7737] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:32:31.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:32:32.213 [DEBUG] [Thread-7737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:32:32.213 [DEBUG] [Thread-7737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:32:32.213 [DEBUG] [Thread-7737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:32:32.254 [DEBUG] [Thread-7737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:32:32.254 [DEBUG] [Thread-7737] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:32:32.256 [DEBUG] [Thread-7737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:32:32.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:32:32.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:32:32.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:32:32.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:32:32.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:32:32.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:32:32.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:32:32.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:32:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:32:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.897320 -999.00  +20.60   8.69     18   -4.50 1 1 1 1 1     0    0 25.88 43.39 ZNESW 8.3 8.7 162.6 11.1 20.1 -26.2 20.1 -25.7 19.8 -24.2 20.0 -25.4
2025-11-25T23:32:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:32:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:32:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.897320
2025-11-25T23:32:32.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:32:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:32:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:32:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:32:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:32:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:32:26', tmtdew=29.44, humidity=13.01, cloud=0.0, wind=17.22, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:32:26', seeing=1.02, atlas_timestamp='2025-11-25T21:32:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:29:00')
2025-11-25T23:32:32.274 [DEBUG] [Thread-7737] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:32:32.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:32:32.359 [DEBUG] [Thread-7740] [transport.py] [_log()] starting thread (client mode): 0x70d75c30
2025-11-25T23:32:32.359 [DEBUG] [Thread-7740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:32:32.373 [DEBUG] [Thread-7740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:32:32.373 [INFO] [Thread-7740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] client lang: <none>
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] server lang: <none>
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] kex follows: False
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] Compression: none
2025-11-25T23:32:32.381 [DEBUG] [Thread-7740] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:32:32.439 [DEBUG] [Thread-7740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:32:32.439 [DEBUG] [Thread-7740] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:32:32.439 [DEBUG] [Thread-7740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:32:32.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:32:32.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:32:32.496 [DEBUG] [Thread-7740] [transport.py] [_log()] userauth is OK
2025-11-25T23:32:32.496 [DEBUG] [Thread-7740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:32:32.496 [DEBUG] [Thread-7740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:32:32.496 [DEBUG] [Thread-7740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:32:32.496 [DEBUG] [Thread-7740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:32:32.510 [INFO] [Thread-7740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:32:32.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:32:32.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:32:33.350 [DEBUG] [Thread-7740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:32:33.350 [DEBUG] [Thread-7740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:32:33.400 [DEBUG] [Thread-7740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:32:33.400 [DEBUG] [Thread-7740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:32:33.409 [DEBUG] [Thread-7740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:32:33.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:32:33.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:32:33.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:32:33.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:32:33.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:32:33.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:32:33.445 [DEBUG] [Thread-7740] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:32:38.483 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:44.463 [DEBUG] [Thread-7742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:48.887 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:59.274 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:32:59.510 [DEBUG] [Thread-7743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:33:03.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:33:03.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:33:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 32, 58), 29.56, 12.83, 0.0, 16.57, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:33:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:32:58
2025-11-25T23:33:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:33:04.443 [DEBUG] [Thread-7744] [transport.py] [_log()] starting thread (client mode): 0x70d75330
2025-11-25T23:33:04.444 [DEBUG] [Thread-7744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:33:04.463 [DEBUG] [Thread-7744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:33:04.464 [INFO] [Thread-7744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] client lang: <none>
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] server lang: <none>
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] kex follows: False
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] Compression: none
2025-11-25T23:33:04.467 [DEBUG] [Thread-7744] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:33:04.482 [DEBUG] [Thread-7744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:33:04.483 [DEBUG] [Thread-7744] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:33:04.483 [DEBUG] [Thread-7744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:33:04.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:33:04.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:33:04.525 [DEBUG] [Thread-7744] [transport.py] [_log()] userauth is OK
2025-11-25T23:33:04.525 [DEBUG] [Thread-7744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:33:04.525 [DEBUG] [Thread-7744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:33:04.525 [DEBUG] [Thread-7744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:33:04.525 [DEBUG] [Thread-7744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:33:04.540 [INFO] [Thread-7744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:33:04.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:33:05.181 [DEBUG] [Thread-7744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:33:05.181 [DEBUG] [Thread-7744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:33:05.181 [DEBUG] [Thread-7744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:33:05.222 [DEBUG] [Thread-7744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:33:05.222 [DEBUG] [Thread-7744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:33:05.225 [DEBUG] [Thread-7744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:33:05.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:33:05.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:33:05.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:33:05.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:33:05.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:33:05.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:33:05.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:33:05.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.897667 -999.00  +20.50   8.57     18   -4.50 1 1 1 1 1     0    0 26.67 42.60 ZNESW 11.2 8.6 168.6 14.6 20.1 -26.2 20.0 -25.5 19.7 -24.2 19.9 -25.2
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.897667
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:33:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:32:58', tmtdew=29.56, humidity=12.83, cloud=0.0, wind=16.57, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:32:58', seeing=1.0, atlas_timestamp='2025-11-25T21:32:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:29:00')
2025-11-25T23:33:05.246 [DEBUG] [Thread-7744] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:33:05.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:33:05.331 [DEBUG] [Thread-7747] [transport.py] [_log()] starting thread (client mode): 0x70d424d0
2025-11-25T23:33:05.332 [DEBUG] [Thread-7747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:33:05.346 [DEBUG] [Thread-7747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:33:05.346 [INFO] [Thread-7747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:33:05.353 [DEBUG] [Thread-7747] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:33:05.353 [DEBUG] [Thread-7747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:33:05.353 [DEBUG] [Thread-7747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:33:05.353 [DEBUG] [Thread-7747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] client lang: <none>
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] server lang: <none>
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] kex follows: False
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] Compression: none
2025-11-25T23:33:05.354 [DEBUG] [Thread-7747] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:33:05.414 [DEBUG] [Thread-7747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:33:05.414 [DEBUG] [Thread-7747] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:33:05.415 [DEBUG] [Thread-7747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:33:05.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:33:05.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:33:05.471 [DEBUG] [Thread-7747] [transport.py] [_log()] userauth is OK
2025-11-25T23:33:05.472 [DEBUG] [Thread-7747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:33:05.472 [DEBUG] [Thread-7747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:33:05.472 [DEBUG] [Thread-7747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:33:05.472 [DEBUG] [Thread-7747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:33:05.486 [INFO] [Thread-7747] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:33:05.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:33:05.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:33:06.334 [DEBUG] [Thread-7747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:33:06.334 [DEBUG] [Thread-7747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:33:06.382 [DEBUG] [Thread-7747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:33:06.382 [DEBUG] [Thread-7747] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:33:06.390 [DEBUG] [Thread-7747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:33:06.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:33:06.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:33:06.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:33:06.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:33:06.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:33:06.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:33:06.422 [DEBUG] [Thread-7747] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:33:07.660 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:07.661 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:08.639 [DEBUG] [Thread-7749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:09.670 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:14.537 [DEBUG] [Thread-7750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:20.067 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:29.586 [DEBUG] [Thread-7751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:30.475 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:36.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:33:36.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:33:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:33:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 33, 30), 29.58, 12.85, 0.0, 14.36, 20.24, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:33:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:33:30
2025-11-25T23:33:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:33:37.374 [DEBUG] [Thread-7752] [transport.py] [_log()] starting thread (client mode): 0x7374e4a0
2025-11-25T23:33:37.374 [DEBUG] [Thread-7752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:33:37.385 [DEBUG] [Thread-7752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:33:37.385 [INFO] [Thread-7752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] client lang: <none>
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] server lang: <none>
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] kex follows: False
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:33:37.387 [DEBUG] [Thread-7752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:33:37.388 [DEBUG] [Thread-7752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:33:37.388 [DEBUG] [Thread-7752] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:33:37.388 [DEBUG] [Thread-7752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:33:37.388 [DEBUG] [Thread-7752] [transport.py] [_log()] Compression: none
2025-11-25T23:33:37.388 [DEBUG] [Thread-7752] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:33:37.399 [DEBUG] [Thread-7752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:33:37.399 [DEBUG] [Thread-7752] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:33:37.399 [DEBUG] [Thread-7752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:33:37.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:33:37.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:33:37.401 [DEBUG] [Thread-7752] [transport.py] [_log()] userauth is OK
2025-11-25T23:33:37.401 [DEBUG] [Thread-7752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:33:37.401 [DEBUG] [Thread-7752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:33:37.401 [DEBUG] [Thread-7752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:33:37.401 [DEBUG] [Thread-7752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:33:37.423 [INFO] [Thread-7752] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:33:37.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:33:38.012 [DEBUG] [Thread-7752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:33:38.012 [DEBUG] [Thread-7752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:33:38.013 [DEBUG] [Thread-7752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:33:38.053 [DEBUG] [Thread-7752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:33:38.053 [DEBUG] [Thread-7752] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:33:38.056 [DEBUG] [Thread-7752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:33:38.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:33:38.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:33:38.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:33:38.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:33:38.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:33:38.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:33:38.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:33:38.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:33:38.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:33:38.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.898014 -999.00  +20.50  11.70     17   -4.70 1 1 1 1 1     0    0 26.43 48.55 ZNESW 12.4 11.7 179.9 16.9 20.1 -26.0 20.0 -25.1 19.8 -24.1 19.9 -25.3
2025-11-25T23:33:38.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:33:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:33:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.898014
2025-11-25T23:33:38.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:33:38.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:33:38.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:33:38.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:33:38.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:33:38.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:33:30', tmtdew=29.58, humidity=12.85, cloud=0.0, wind=14.36, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:33:30', seeing=0.79, atlas_timestamp='2025-11-25T21:33:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:29:00')
2025-11-25T23:33:38.084 [DEBUG] [Thread-7752] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:33:38.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:33:38.179 [DEBUG] [Thread-7755] [transport.py] [_log()] starting thread (client mode): 0x70da7c70
2025-11-25T23:33:38.179 [DEBUG] [Thread-7755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:33:38.193 [DEBUG] [Thread-7755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:33:38.194 [INFO] [Thread-7755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:33:38.201 [DEBUG] [Thread-7755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:33:38.201 [DEBUG] [Thread-7755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:33:38.201 [DEBUG] [Thread-7755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:33:38.201 [DEBUG] [Thread-7755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:33:38.201 [DEBUG] [Thread-7755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] client lang: <none>
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] server lang: <none>
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] kex follows: False
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] Compression: none
2025-11-25T23:33:38.202 [DEBUG] [Thread-7755] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:33:38.259 [DEBUG] [Thread-7755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:33:38.260 [DEBUG] [Thread-7755] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:33:38.260 [DEBUG] [Thread-7755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:33:38.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:33:38.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:33:38.315 [DEBUG] [Thread-7755] [transport.py] [_log()] userauth is OK
2025-11-25T23:33:38.316 [DEBUG] [Thread-7755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:33:38.316 [DEBUG] [Thread-7755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:33:38.316 [DEBUG] [Thread-7755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:33:38.316 [DEBUG] [Thread-7755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:33:38.334 [INFO] [Thread-7755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:33:38.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:33:38.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:33:39.220 [DEBUG] [Thread-7755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:33:39.221 [DEBUG] [Thread-7755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:33:39.269 [DEBUG] [Thread-7755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:33:39.269 [DEBUG] [Thread-7755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:33:39.279 [DEBUG] [Thread-7755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:33:39.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:33:39.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:33: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') -> 00000000
2025-11-25T23:33:39.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:33:39.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:33:39.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:33:39.316 [DEBUG] [Thread-7755] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:33:40.879 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:44.616 [DEBUG] [Thread-7757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:51.297 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:33:59.668 [DEBUG] [Thread-7758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:01.713 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:07.872 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:07.873 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:08.697 [DEBUG] [Thread-7759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:34:09.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:34:09.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:34:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 34, 2), 29.64, 12.8, 0.0, 13.43, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:34:09.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:34:02
2025-11-25T23:34:10.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:34:10.266 [DEBUG] [Thread-7760] [transport.py] [_log()] starting thread (client mode): 0x7374ff70
2025-11-25T23:34:10.266 [DEBUG] [Thread-7760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:34:10.286 [DEBUG] [Thread-7760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:34:10.287 [INFO] [Thread-7760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] client lang: <none>
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] server lang: <none>
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] kex follows: False
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:34:10.290 [DEBUG] [Thread-7760] [transport.py] [_log()] Compression: none
2025-11-25T23:34:10.291 [DEBUG] [Thread-7760] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:34:10.309 [DEBUG] [Thread-7760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:34:10.310 [DEBUG] [Thread-7760] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:34:10.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:34:10.311 [DEBUG] [Thread-7760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:34:10.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:34:10.313 [DEBUG] [Thread-7760] [transport.py] [_log()] userauth is OK
2025-11-25T23:34:10.314 [DEBUG] [Thread-7760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:34:10.314 [DEBUG] [Thread-7760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:34:10.314 [DEBUG] [Thread-7760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:34:10.314 [DEBUG] [Thread-7760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:34:10.339 [INFO] [Thread-7760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:34:10.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:34:10.942 [DEBUG] [Thread-7760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:34:10.942 [DEBUG] [Thread-7760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:34:10.943 [DEBUG] [Thread-7760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:34:10.983 [DEBUG] [Thread-7760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:34:10.983 [DEBUG] [Thread-7760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:34:10.986 [DEBUG] [Thread-7760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:34:10.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:34:10.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:34:11.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:34:11.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:34:11.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:34:11.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:34:11.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:34:11.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:34:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:34:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.898362 -999.00  +20.60  12.97     17   -4.60 1 1 1 1 1     0    0 26.44 45.39 ZNESW 12.3 13.0 172.8 17.1 20.1 -26.0 20.1 -25.5 19.8 -24.2 19.9 -25.2
2025-11-25T23:34:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:34:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:34:11.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.898362
2025-11-25T23:34:11.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:34:11.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:34:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:34:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:34:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:34:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:34:02', tmtdew=29.64, humidity=12.8, cloud=0.0, wind=13.43, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:34:02', seeing=0.93, atlas_timestamp='2025-11-25T21:33:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:33:00')
2025-11-25T23:34:11.011 [DEBUG] [Thread-7760] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:34:11.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:34:11.107 [DEBUG] [Thread-7763] [transport.py] [_log()] starting thread (client mode): 0x70d74b20
2025-11-25T23:34:11.107 [DEBUG] [Thread-7763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:34:11.122 [DEBUG] [Thread-7763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:34:11.122 [INFO] [Thread-7763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:34:11.130 [DEBUG] [Thread-7763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:34:11.131 [DEBUG] [Thread-7763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:34:11.131 [DEBUG] [Thread-7763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:34:11.131 [DEBUG] [Thread-7763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:34:11.131 [DEBUG] [Thread-7763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:34:11.131 [DEBUG] [Thread-7763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:34:11.131 [DEBUG] [Thread-7763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:34:11.131 [DEBUG] [Thread-7763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:34:11.132 [DEBUG] [Thread-7763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:34:11.132 [DEBUG] [Thread-7763] [transport.py] [_log()] client lang: <none>
2025-11-25T23:34:11.132 [DEBUG] [Thread-7763] [transport.py] [_log()] server lang: <none>
2025-11-25T23:34:11.132 [DEBUG] [Thread-7763] [transport.py] [_log()] kex follows: False
2025-11-25T23:34:11.132 [DEBUG] [Thread-7763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:34:11.132 [DEBUG] [Thread-7763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:34:11.132 [DEBUG] [Thread-7763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:34:11.132 [DEBUG] [Thread-7763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:34:11.133 [DEBUG] [Thread-7763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:34:11.133 [DEBUG] [Thread-7763] [transport.py] [_log()] Compression: none
2025-11-25T23:34:11.133 [DEBUG] [Thread-7763] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:34:11.191 [DEBUG] [Thread-7763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:34:11.192 [DEBUG] [Thread-7763] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:34:11.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:34:11.193 [DEBUG] [Thread-7763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:34:11.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:34:11.251 [DEBUG] [Thread-7763] [transport.py] [_log()] userauth is OK
2025-11-25T23:34:11.251 [DEBUG] [Thread-7763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:34:11.251 [DEBUG] [Thread-7763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:34:11.252 [DEBUG] [Thread-7763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:34:11.252 [DEBUG] [Thread-7763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:34:11.270 [INFO] [Thread-7763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:34:11.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:34:11.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:34:12.121 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:12.123 [DEBUG] [Thread-7763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:34:12.123 [DEBUG] [Thread-7763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:34:12.171 [DEBUG] [Thread-7763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:34:12.171 [DEBUG] [Thread-7763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:34:12.180 [DEBUG] [Thread-7763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:34:12.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:34:12.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:34:12.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:34:12.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:34:12.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:34:12.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:34:12.215 [DEBUG] [Thread-7763] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:34:14.702 [DEBUG] [Thread-7765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:22.508 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:29.752 [DEBUG] [Thread-7766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:32.902 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:34:42.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:34:42.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:34:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 34, 34), 29.86, 12.26, 0.0, 10.25, 20.37, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:34:42.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:34:34
2025-11-25T23:34:43.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:34:43.152 [DEBUG] [Thread-7767] [transport.py] [_log()] starting thread (client mode): 0x70da5cf0
2025-11-25T23:34:43.152 [DEBUG] [Thread-7767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:34:43.164 [DEBUG] [Thread-7767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:34:43.164 [INFO] [Thread-7767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:34:43.165 [DEBUG] [Thread-7767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:34:43.165 [DEBUG] [Thread-7767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:34:43.165 [DEBUG] [Thread-7767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:34:43.165 [DEBUG] [Thread-7767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:34:43.165 [DEBUG] [Thread-7767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:34:43.165 [DEBUG] [Thread-7767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:34:43.165 [DEBUG] [Thread-7767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] client lang: <none>
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] server lang: <none>
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] kex follows: False
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] Compression: none
2025-11-25T23:34:43.166 [DEBUG] [Thread-7767] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:34:43.177 [DEBUG] [Thread-7767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:34:43.177 [DEBUG] [Thread-7767] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:34:43.178 [DEBUG] [Thread-7767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:34:43.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:34:43.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:34:43.179 [DEBUG] [Thread-7767] [transport.py] [_log()] userauth is OK
2025-11-25T23:34:43.179 [DEBUG] [Thread-7767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:34:43.179 [DEBUG] [Thread-7767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:34:43.179 [DEBUG] [Thread-7767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:34:43.179 [DEBUG] [Thread-7767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:34:43.191 [INFO] [Thread-7767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:34:43.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:34:43.300 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:43.808 [DEBUG] [Thread-7767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:34:43.808 [DEBUG] [Thread-7767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:34:43.809 [DEBUG] [Thread-7767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:34:43.848 [DEBUG] [Thread-7767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:34:43.849 [DEBUG] [Thread-7767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:34:43.851 [DEBUG] [Thread-7767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:34:43.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:34:43.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:34:43.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:34:43.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:34:43.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:34:43.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:34:43.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:34:43.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:34:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:34:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.899056 -999.00  +20.50   6.13     17   -4.60 1 1 1 1 1     0    0 25.95 37.92 ZNESW 6.9 6.1 145.2 10.6 20.1 -26.3 20.1 -25.6 19.8 -24.4 20.0 -25.3
2025-11-25T23:34:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:34:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:34:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.899056
2025-11-25T23:34:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:34:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:34:43.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:34:43.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:34:43.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:34:43.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:34:34', tmtdew=29.86, humidity=12.26, cloud=0.0, wind=10.25, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:34:34', seeing=0.93, atlas_timestamp='2025-11-25T21:34:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:33:00')
2025-11-25T23:34:43.876 [DEBUG] [Thread-7767] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:34:43.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:34:43.971 [DEBUG] [Thread-7770] [transport.py] [_log()] starting thread (client mode): 0x70d43c40
2025-11-25T23:34:43.971 [DEBUG] [Thread-7770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:34:43.986 [DEBUG] [Thread-7770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:34:43.986 [INFO] [Thread-7770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:34:43.994 [DEBUG] [Thread-7770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:34:43.994 [DEBUG] [Thread-7770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:34:43.995 [DEBUG] [Thread-7770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:34:43.995 [DEBUG] [Thread-7770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:34:43.995 [DEBUG] [Thread-7770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:34:43.995 [DEBUG] [Thread-7770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:34:43.995 [DEBUG] [Thread-7770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:34:43.995 [DEBUG] [Thread-7770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:34:43.995 [DEBUG] [Thread-7770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:34:43.995 [DEBUG] [Thread-7770] [transport.py] [_log()] client lang: <none>
2025-11-25T23:34:43.996 [DEBUG] [Thread-7770] [transport.py] [_log()] server lang: <none>
2025-11-25T23:34:43.996 [DEBUG] [Thread-7770] [transport.py] [_log()] kex follows: False
2025-11-25T23:34:43.996 [DEBUG] [Thread-7770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:34:43.996 [DEBUG] [Thread-7770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:34:43.996 [DEBUG] [Thread-7770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:34:43.996 [DEBUG] [Thread-7770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:34:43.996 [DEBUG] [Thread-7770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:34:43.996 [DEBUG] [Thread-7770] [transport.py] [_log()] Compression: none
2025-11-25T23:34:43.997 [DEBUG] [Thread-7770] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:34:44.054 [DEBUG] [Thread-7770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:34:44.055 [DEBUG] [Thread-7770] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:34:44.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:34:44.056 [DEBUG] [Thread-7770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:34:44.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:34:44.110 [DEBUG] [Thread-7770] [transport.py] [_log()] userauth is OK
2025-11-25T23:34:44.110 [DEBUG] [Thread-7770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:34:44.110 [DEBUG] [Thread-7770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:34:44.110 [DEBUG] [Thread-7770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:34:44.110 [DEBUG] [Thread-7770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:34:44.129 [INFO] [Thread-7770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:34:44.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:34:44.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:34:44.788 [DEBUG] [Thread-7772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:44.963 [DEBUG] [Thread-7770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:34:44.964 [DEBUG] [Thread-7770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:34:45.012 [DEBUG] [Thread-7770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:34:45.012 [DEBUG] [Thread-7770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:34:45.021 [DEBUG] [Thread-7770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:34:45.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:34:45.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:34:45.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:34:45.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:34:45.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:34:45.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:34:45.055 [DEBUG] [Thread-7770] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:34:53.700 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:34:59.841 [DEBUG] [Thread-7773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:04.092 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:08.089 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:08.090 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:08.760 [DEBUG] [Thread-7774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:14.596 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:14.871 [DEBUG] [Thread-7775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:15.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:35:15.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:35:15.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:35:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 35, 6), 29.74, 12.38, 0.0, 10.18, 20.36, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:35:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:35:06
2025-11-25T23:35:15.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:35:16.010 [DEBUG] [Thread-7776] [transport.py] [_log()] starting thread (client mode): 0x70d40280
2025-11-25T23:35:16.010 [DEBUG] [Thread-7776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:35:16.034 [DEBUG] [Thread-7776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:35:16.034 [INFO] [Thread-7776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:35:16.037 [DEBUG] [Thread-7776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:35:16.037 [DEBUG] [Thread-7776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:35:16.037 [DEBUG] [Thread-7776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:35:16.037 [DEBUG] [Thread-7776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:35:16.037 [DEBUG] [Thread-7776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:35:16.037 [DEBUG] [Thread-7776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:35:16.037 [DEBUG] [Thread-7776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:35:16.037 [DEBUG] [Thread-7776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] client lang: <none>
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] server lang: <none>
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] kex follows: False
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] Compression: none
2025-11-25T23:35:16.038 [DEBUG] [Thread-7776] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:35:16.057 [DEBUG] [Thread-7776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:35:16.057 [DEBUG] [Thread-7776] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:35:16.058 [DEBUG] [Thread-7776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:35:16.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:35:16.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:35:16.068 [DEBUG] [Thread-7776] [transport.py] [_log()] userauth is OK
2025-11-25T23:35:16.068 [DEBUG] [Thread-7776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:35:16.068 [DEBUG] [Thread-7776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:35:16.069 [DEBUG] [Thread-7776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:35:16.069 [DEBUG] [Thread-7776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:35:16.093 [INFO] [Thread-7776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:35:16.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:35:16.849 [DEBUG] [Thread-7776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:35:16.849 [DEBUG] [Thread-7776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:35:16.850 [DEBUG] [Thread-7776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:35:16.891 [DEBUG] [Thread-7776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:35:16.891 [DEBUG] [Thread-7776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:35:16.894 [DEBUG] [Thread-7776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:35:16.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:35:16.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:35:16.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:35:16.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:35:16.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:35:16.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:35:16.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:35:16.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:35:16.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:35:16.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.899056 -999.00  +20.50   6.13     17   -4.60 1 1 1 1 1     0    0 25.95 37.92 ZNESW 6.9 6.1 145.2 10.6 20.1 -26.3 20.1 -25.6 19.8 -24.4 20.0 -25.3
2025-11-25T23:35:16.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:35:16.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:35:16.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.899056
2025-11-25T23:35:16.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:35:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:35:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:35:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:35:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:35:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:35:06', tmtdew=29.74, humidity=12.38, cloud=0.0, wind=10.18, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:35:06', seeing=0.93, atlas_timestamp='2025-11-25T21:34:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:33:00')
2025-11-25T23:35:16.925 [DEBUG] [Thread-7776] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:35:17.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:35:17.020 [DEBUG] [Thread-7779] [transport.py] [_log()] starting thread (client mode): 0x70da5ff0
2025-11-25T23:35:17.020 [DEBUG] [Thread-7779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:35:17.038 [DEBUG] [Thread-7779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:35:17.038 [INFO] [Thread-7779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:35:17.046 [DEBUG] [Thread-7779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:35:17.046 [DEBUG] [Thread-7779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:35:17.046 [DEBUG] [Thread-7779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:35:17.047 [DEBUG] [Thread-7779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:35:17.047 [DEBUG] [Thread-7779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:35:17.047 [DEBUG] [Thread-7779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:35:17.047 [DEBUG] [Thread-7779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:35:17.047 [DEBUG] [Thread-7779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:35:17.047 [DEBUG] [Thread-7779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:35:17.047 [DEBUG] [Thread-7779] [transport.py] [_log()] client lang: <none>
2025-11-25T23:35:17.047 [DEBUG] [Thread-7779] [transport.py] [_log()] server lang: <none>
2025-11-25T23:35:17.048 [DEBUG] [Thread-7779] [transport.py] [_log()] kex follows: False
2025-11-25T23:35:17.048 [DEBUG] [Thread-7779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:35:17.048 [DEBUG] [Thread-7779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:35:17.048 [DEBUG] [Thread-7779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:35:17.048 [DEBUG] [Thread-7779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:35:17.048 [DEBUG] [Thread-7779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:35:17.049 [DEBUG] [Thread-7779] [transport.py] [_log()] Compression: none
2025-11-25T23:35:17.049 [DEBUG] [Thread-7779] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:35:17.105 [DEBUG] [Thread-7779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:35:17.106 [DEBUG] [Thread-7779] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:35:17.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:35:17.107 [DEBUG] [Thread-7779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:35:17.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:35:17.161 [DEBUG] [Thread-7779] [transport.py] [_log()] userauth is OK
2025-11-25T23:35:17.162 [DEBUG] [Thread-7779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:35:17.162 [DEBUG] [Thread-7779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:35:17.162 [DEBUG] [Thread-7779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:35:17.162 [DEBUG] [Thread-7779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:35:17.181 [INFO] [Thread-7779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:35:17.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:35:17.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:35:18.016 [DEBUG] [Thread-7779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:35:18.016 [DEBUG] [Thread-7779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:35:18.064 [DEBUG] [Thread-7779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:35:18.064 [DEBUG] [Thread-7779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:35:18.076 [DEBUG] [Thread-7779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:35:18.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:35:18.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:35:18.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:35:18.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:35:18.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:35:18.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:35:18.113 [DEBUG] [Thread-7779] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:35:25.247 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:29.908 [DEBUG] [Thread-7781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:35.624 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:44.954 [DEBUG] [Thread-7782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:46.025 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:48.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:35:48.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:35:48.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:35:48.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 35, 38), 29.59, 12.91, 0.0, 12.09, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:35:48.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:35:38
2025-11-25T23:35:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:35:49.086 [DEBUG] [Thread-7783] [transport.py] [_log()] starting thread (client mode): 0x70d7e590
2025-11-25T23:35:49.086 [DEBUG] [Thread-7783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:35:49.107 [DEBUG] [Thread-7783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:35:49.107 [INFO] [Thread-7783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:35:49.108 [DEBUG] [Thread-7783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:35:49.108 [DEBUG] [Thread-7783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:35:49.108 [DEBUG] [Thread-7783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:35:49.108 [DEBUG] [Thread-7783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] client lang: <none>
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] server lang: <none>
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] kex follows: False
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:35:49.109 [DEBUG] [Thread-7783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:35:49.110 [DEBUG] [Thread-7783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:35:49.110 [DEBUG] [Thread-7783] [transport.py] [_log()] Compression: none
2025-11-25T23:35:49.110 [DEBUG] [Thread-7783] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:35:49.124 [DEBUG] [Thread-7783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:35:49.125 [DEBUG] [Thread-7783] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:35:49.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:35:49.126 [DEBUG] [Thread-7783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:35:49.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:35:49.128 [DEBUG] [Thread-7783] [transport.py] [_log()] userauth is OK
2025-11-25T23:35:49.128 [DEBUG] [Thread-7783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:35:49.128 [DEBUG] [Thread-7783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:35:49.128 [DEBUG] [Thread-7783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:35:49.128 [DEBUG] [Thread-7783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:35:49.154 [INFO] [Thread-7783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:35:49.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:35:49.793 [DEBUG] [Thread-7783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:35:49.794 [DEBUG] [Thread-7783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:35:49.794 [DEBUG] [Thread-7783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:35:49.835 [DEBUG] [Thread-7783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:35:49.835 [DEBUG] [Thread-7783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:35:49.839 [DEBUG] [Thread-7783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:35:49.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:35:49.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:35:49.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:35:49.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:35:49.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:35:49.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:35:49.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:35:49.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:35:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:35:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.899403 -999.00  +20.50   8.39     18   -4.50 1 1 1 1 1     0    0 26.29 30.72 ZNESW 7.2 8.4 154.8 10.3 20.1 -26.1 20.0 -25.5 19.7 -24.3 19.9 -25.2
2025-11-25T23:35:49.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:35:49.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:35:49.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.899403
2025-11-25T23:35:49.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:35:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:35:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:35:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:35:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:35:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:35:38', tmtdew=29.59, humidity=12.91, cloud=0.0, wind=12.09, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:35:38', seeing=0.77, atlas_timestamp='2025-11-25T21:35:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:33:00')
2025-11-25T23:35:49.866 [DEBUG] [Thread-7783] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:35:49.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:35:49.961 [DEBUG] [Thread-7786] [transport.py] [_log()] starting thread (client mode): 0x70d3a230
2025-11-25T23:35:49.961 [DEBUG] [Thread-7786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:35:49.979 [DEBUG] [Thread-7786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:35:49.979 [INFO] [Thread-7786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:35:49.987 [DEBUG] [Thread-7786] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:35:49.987 [DEBUG] [Thread-7786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:35:49.987 [DEBUG] [Thread-7786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:35:49.987 [DEBUG] [Thread-7786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:35:49.987 [DEBUG] [Thread-7786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:35:49.987 [DEBUG] [Thread-7786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:35:49.987 [DEBUG] [Thread-7786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:35:49.987 [DEBUG] [Thread-7786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:35:49.987 [DEBUG] [Thread-7786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] client lang: <none>
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] server lang: <none>
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] kex follows: False
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] Compression: none
2025-11-25T23:35:49.988 [DEBUG] [Thread-7786] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:35:50.045 [DEBUG] [Thread-7786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:35:50.046 [DEBUG] [Thread-7786] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:35:50.047 [DEBUG] [Thread-7786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:35:50.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:35:50.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:35:50.105 [DEBUG] [Thread-7786] [transport.py] [_log()] userauth is OK
2025-11-25T23:35:50.105 [DEBUG] [Thread-7786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:35:50.105 [DEBUG] [Thread-7786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:35:50.105 [DEBUG] [Thread-7786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:35:50.105 [DEBUG] [Thread-7786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:35:50.125 [INFO] [Thread-7786] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:35:50.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:35:50.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:35:51.002 [DEBUG] [Thread-7786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:35:51.002 [DEBUG] [Thread-7786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:35:51.051 [DEBUG] [Thread-7786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:35:51.051 [DEBUG] [Thread-7786] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:35:51.060 [DEBUG] [Thread-7786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:35:51.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:35:51.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:35:51.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:35:51.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:35:51.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:35:51.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:35:51.098 [DEBUG] [Thread-7786] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:35:56.438 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:35:59.995 [DEBUG] [Thread-7788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:06.837 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:08.291 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:08.292 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:08.839 [DEBUG] [Thread-7789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:15.045 [DEBUG] [Thread-7790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:17.232 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:21.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:36:21.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:36:21.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:36:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 36, 10), 29.49, 12.99, 0.0, 12.76, 20.21, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:36:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:36:10
2025-11-25T23:36:21.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:36:22.051 [DEBUG] [Thread-7791] [transport.py] [_log()] starting thread (client mode): 0x70d42e30
2025-11-25T23:36:22.051 [DEBUG] [Thread-7791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:36:22.067 [DEBUG] [Thread-7791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:36:22.067 [INFO] [Thread-7791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:36:22.068 [DEBUG] [Thread-7791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:36:22.068 [DEBUG] [Thread-7791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:36:22.068 [DEBUG] [Thread-7791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:36:22.068 [DEBUG] [Thread-7791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] client lang: <none>
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] server lang: <none>
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] kex follows: False
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] Compression: none
2025-11-25T23:36:22.069 [DEBUG] [Thread-7791] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:36:22.076 [DEBUG] [Thread-7791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:36:22.077 [DEBUG] [Thread-7791] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:36:22.077 [DEBUG] [Thread-7791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:36:22.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:36:22.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:36:22.078 [DEBUG] [Thread-7791] [transport.py] [_log()] userauth is OK
2025-11-25T23:36:22.078 [DEBUG] [Thread-7791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:36:22.079 [DEBUG] [Thread-7791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:36:22.079 [DEBUG] [Thread-7791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:36:22.079 [DEBUG] [Thread-7791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:36:22.101 [INFO] [Thread-7791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:36:22.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:36:22.759 [DEBUG] [Thread-7791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:36:22.759 [DEBUG] [Thread-7791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:36:22.759 [DEBUG] [Thread-7791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:36:22.800 [DEBUG] [Thread-7791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:36:22.800 [DEBUG] [Thread-7791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:36:22.804 [DEBUG] [Thread-7791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:36:22.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:36:22.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:36:22.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:36:22.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:36:22.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:36:22.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:36:22.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:36:22.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:36:22.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:36:22.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.899750 -999.00  +20.50   8.50     18   -4.50 1 1 1 1 1     0    0 26.23 30.59 ZNESW 8.8 8.5 172.6 11.8 20.1 -26.2 20.0 -25.7 19.8 -24.4 19.9 -25.4
2025-11-25T23:36:22.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:36:22.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:36:22.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.899750
2025-11-25T23:36:22.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:36:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:36:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:36:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:36:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:36:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:36:10', tmtdew=29.49, humidity=12.99, cloud=0.0, wind=12.76, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:36:10', seeing=0.74, atlas_timestamp='2025-11-25T21:35:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:33:00')
2025-11-25T23:36:22.830 [DEBUG] [Thread-7791] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:36:22.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:36:22.928 [DEBUG] [Thread-7794] [transport.py] [_log()] starting thread (client mode): 0x7374fa60
2025-11-25T23:36:22.928 [DEBUG] [Thread-7794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:36:22.943 [DEBUG] [Thread-7794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:36:22.943 [INFO] [Thread-7794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:36:22.951 [DEBUG] [Thread-7794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:36:22.951 [DEBUG] [Thread-7794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:36:22.951 [DEBUG] [Thread-7794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:36:22.951 [DEBUG] [Thread-7794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:36:22.951 [DEBUG] [Thread-7794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:36:22.951 [DEBUG] [Thread-7794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:36:22.951 [DEBUG] [Thread-7794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:36:22.951 [DEBUG] [Thread-7794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:36:22.951 [DEBUG] [Thread-7794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] client lang: <none>
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] server lang: <none>
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] kex follows: False
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] Compression: none
2025-11-25T23:36:22.952 [DEBUG] [Thread-7794] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:36:23.008 [DEBUG] [Thread-7794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:36:23.009 [DEBUG] [Thread-7794] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:36:23.009 [DEBUG] [Thread-7794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:36:23.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:36:23.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:36:23.064 [DEBUG] [Thread-7794] [transport.py] [_log()] userauth is OK
2025-11-25T23:36:23.064 [DEBUG] [Thread-7794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:36:23.064 [DEBUG] [Thread-7794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:36:23.065 [DEBUG] [Thread-7794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:36:23.065 [DEBUG] [Thread-7794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:36:23.083 [INFO] [Thread-7794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:36:23.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:36:23.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:36:23.922 [DEBUG] [Thread-7794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:36:23.922 [DEBUG] [Thread-7794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:36:23.970 [DEBUG] [Thread-7794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:36:23.970 [DEBUG] [Thread-7794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:36:23.979 [DEBUG] [Thread-7794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:36:23.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:36:23.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:36:23.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:36:24.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:36:24.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:36:24.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:36:24.019 [DEBUG] [Thread-7794] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:36:27.629 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:30.082 [DEBUG] [Thread-7796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:38.027 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:45.137 [DEBUG] [Thread-7797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:48.420 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:36:54.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:36:54.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:36:54.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:36:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 36, 42), 29.48, 12.96, 0.0, 12.78, 20.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:36:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:36:42
2025-11-25T23:36:54.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:36:54.967 [DEBUG] [Thread-7798] [transport.py] [_log()] starting thread (client mode): 0x70d38490
2025-11-25T23:36:54.967 [DEBUG] [Thread-7798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:36:54.987 [DEBUG] [Thread-7798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:36:54.987 [INFO] [Thread-7798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:36:54.990 [DEBUG] [Thread-7798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:36:54.990 [DEBUG] [Thread-7798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:36:54.990 [DEBUG] [Thread-7798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:36:54.990 [DEBUG] [Thread-7798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:36:54.990 [DEBUG] [Thread-7798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:36:54.990 [DEBUG] [Thread-7798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] client lang: <none>
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] server lang: <none>
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] kex follows: False
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] Compression: none
2025-11-25T23:36:54.991 [DEBUG] [Thread-7798] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:36:55.009 [DEBUG] [Thread-7798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:36:55.009 [DEBUG] [Thread-7798] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:36:55.010 [DEBUG] [Thread-7798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:36:55.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:36:55.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:36:55.012 [DEBUG] [Thread-7798] [transport.py] [_log()] userauth is OK
2025-11-25T23:36:55.012 [DEBUG] [Thread-7798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:36:55.013 [DEBUG] [Thread-7798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:36:55.013 [DEBUG] [Thread-7798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:36:55.013 [DEBUG] [Thread-7798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:36:55.037 [INFO] [Thread-7798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:36:55.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:36:55.664 [DEBUG] [Thread-7798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:36:55.664 [DEBUG] [Thread-7798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:36:55.665 [DEBUG] [Thread-7798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:36:55.705 [DEBUG] [Thread-7798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:36:55.705 [DEBUG] [Thread-7798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:36:55.709 [DEBUG] [Thread-7798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:36:55.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:36:55.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:36:55.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:36:55.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:36:55.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:36:55.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:36:55.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:36:55.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:36:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:36:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.900098 -999.00  +20.40   7.12     18   -4.50 1 1 1 1 1     0    0 25.53 26.19 ZNESW 7.4 7.1 161.6 12.6 20.1 -26.3 20.0 -25.8 19.6 -24.1 19.9 -25.4
2025-11-25T23:36:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:36:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:36:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.900098
2025-11-25T23:36:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:36:55.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:36:55.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:36:55.735 [DEBUG] [Thread-7798] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:36:55.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:36:55.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:36:55.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:36:42', tmtdew=29.48, humidity=12.96, cloud=0.0, wind=12.78, temperature=20.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:36:42', seeing=1.04, atlas_timestamp='2025-11-25T21:36:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01624999999999943, -0.006750000000000256, 0.02075000000000138, -0.006000000000000227, 0.04749999999999943, 0.047250000000000014, 0.025999999999998025, -0.011749999999999261, 0.016000000000000014, 0.015000000000000568, 0.047250000000000014, -0.025000000000000355, 0.08300000000000018, 0.07374999999999865, 0.007500000000000284, -0.002000000000000668, -0.0017499999999994742, 0.0389999999999997, 0.02099999999999902, -0.004750000000001364, 0.03149999999999764, 0.07174999999999798, 0.08325000000000138, -0.009249999999999758, -0.021000000000000796, -0.010500000000000398, 0.038750000000000284, 0.05649999999999977, 0.11299999999999955, 0.07000000000000028, 0.1075000000000017, -0.013999999999999346, -0.03325000000000067], zp_timestamp='2025-11-25T21:33:00')
2025-11-25T23:36:55.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:36:55.831 [DEBUG] [Thread-7801] [transport.py] [_log()] starting thread (client mode): 0x70da4b80
2025-11-25T23:36:55.831 [DEBUG] [Thread-7801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:36:55.846 [DEBUG] [Thread-7801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:36:55.846 [INFO] [Thread-7801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:36:55.854 [DEBUG] [Thread-7801] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:36:55.855 [DEBUG] [Thread-7801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:36:55.855 [DEBUG] [Thread-7801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:36:55.855 [DEBUG] [Thread-7801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:36:55.855 [DEBUG] [Thread-7801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:36:55.855 [DEBUG] [Thread-7801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:36:55.855 [DEBUG] [Thread-7801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:36:55.855 [DEBUG] [Thread-7801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:36:55.855 [DEBUG] [Thread-7801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:36:55.855 [DEBUG] [Thread-7801] [transport.py] [_log()] client lang: <none>
2025-11-25T23:36:55.856 [DEBUG] [Thread-7801] [transport.py] [_log()] server lang: <none>
2025-11-25T23:36:55.856 [DEBUG] [Thread-7801] [transport.py] [_log()] kex follows: False
2025-11-25T23:36:55.856 [DEBUG] [Thread-7801] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:36:55.856 [DEBUG] [Thread-7801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:36:55.856 [DEBUG] [Thread-7801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:36:55.856 [DEBUG] [Thread-7801] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:36:55.856 [DEBUG] [Thread-7801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:36:55.857 [DEBUG] [Thread-7801] [transport.py] [_log()] Compression: none
2025-11-25T23:36:55.857 [DEBUG] [Thread-7801] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:36:55.912 [DEBUG] [Thread-7801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:36:55.912 [DEBUG] [Thread-7801] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:36:55.913 [DEBUG] [Thread-7801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:36:55.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:36:55.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:36:55.968 [DEBUG] [Thread-7801] [transport.py] [_log()] userauth is OK
2025-11-25T23:36:55.969 [DEBUG] [Thread-7801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:36:55.969 [DEBUG] [Thread-7801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:36:55.969 [DEBUG] [Thread-7801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:36:55.969 [DEBUG] [Thread-7801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:36:55.988 [INFO] [Thread-7801] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:36:55.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:36:55.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:36:56.838 [DEBUG] [Thread-7801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:36:56.839 [DEBUG] [Thread-7801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:36:56.888 [DEBUG] [Thread-7801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:36:56.889 [DEBUG] [Thread-7801] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:36:56.898 [DEBUG] [Thread-7801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:36:56.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:36:56.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:36:56.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:36:56.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:36:56.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:36:56.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:36:56.934 [DEBUG] [Thread-7801] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:36:58.819 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:00.170 [DEBUG] [Thread-7803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:08.490 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:08.491 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:08.926 [DEBUG] [Thread-7804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:09.214 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:15.210 [DEBUG] [Thread-7805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:19.613 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:26.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:37:26.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:37:26.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:37:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 37, 14), 29.41, 13.03, 0.0, 13.71, 20.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:37:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:37:14
2025-11-25T23:37:27.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:37:27.954 [DEBUG] [Thread-7806] [transport.py] [_log()] starting thread (client mode): 0x70d75c30
2025-11-25T23:37:27.954 [DEBUG] [Thread-7806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:37:27.978 [DEBUG] [Thread-7806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:37:27.978 [INFO] [Thread-7806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:37:27.981 [DEBUG] [Thread-7806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:37:27.981 [DEBUG] [Thread-7806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] client lang: <none>
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] server lang: <none>
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] kex follows: False
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] Compression: none
2025-11-25T23:37:27.982 [DEBUG] [Thread-7806] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:37:27.997 [DEBUG] [Thread-7806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:37:27.998 [DEBUG] [Thread-7806] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:37:27.998 [DEBUG] [Thread-7806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:37:27.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:37:27.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:37:27.999 [DEBUG] [Thread-7806] [transport.py] [_log()] userauth is OK
2025-11-25T23:37:27.999 [DEBUG] [Thread-7806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:37:27.999 [DEBUG] [Thread-7806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:37:27.999 [DEBUG] [Thread-7806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:37:27.999 [DEBUG] [Thread-7806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:37:28.018 [INFO] [Thread-7806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:37:28.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:37:28.688 [DEBUG] [Thread-7806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:37:28.688 [DEBUG] [Thread-7806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:37:28.688 [DEBUG] [Thread-7806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:37:28.729 [DEBUG] [Thread-7806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:37:28.729 [DEBUG] [Thread-7806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:37:28.731 [DEBUG] [Thread-7806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:37:28.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:37:28.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:37:28.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:37:28.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:37:28.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:37:28.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:37:28.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:37:28.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:37:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:37:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.900445 -999.00  +20.40   9.03     18   -4.60 1 1 1 1 1     0    0 26.52 26.29 ZNESW 7.7 9.0 150.2 11.3 20.1 -26.1 20.0 -25.5 19.7 -24.2 19.9 -25.2
2025-11-25T23:37:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:37:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:37:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.900445
2025-11-25T23:37:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:37:28.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:37:28.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:37:28.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:37:28.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:37:28.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:37:14', tmtdew=29.41, humidity=13.03, cloud=0.0, wind=13.71, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:37:14', seeing=0.98, atlas_timestamp='2025-11-25T21:36:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:35:00')
2025-11-25T23:37:28.749 [DEBUG] [Thread-7806] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:37:28.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:37:28.835 [DEBUG] [Thread-7809] [transport.py] [_log()] starting thread (client mode): 0x70d7df30
2025-11-25T23:37:28.835 [DEBUG] [Thread-7809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:37:28.849 [DEBUG] [Thread-7809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:37:28.849 [INFO] [Thread-7809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] client lang: <none>
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] server lang: <none>
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] kex follows: False
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] Compression: none
2025-11-25T23:37:28.857 [DEBUG] [Thread-7809] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:37:28.917 [DEBUG] [Thread-7809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:37:28.917 [DEBUG] [Thread-7809] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:37:28.917 [DEBUG] [Thread-7809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:37:28.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:37:28.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:37:28.975 [DEBUG] [Thread-7809] [transport.py] [_log()] userauth is OK
2025-11-25T23:37:28.975 [DEBUG] [Thread-7809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:37:28.975 [DEBUG] [Thread-7809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:37:28.975 [DEBUG] [Thread-7809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:37:28.975 [DEBUG] [Thread-7809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:37:28.989 [INFO] [Thread-7809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:37:28.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:37:28.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:37:29.840 [DEBUG] [Thread-7809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:37:29.840 [DEBUG] [Thread-7809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:37:29.888 [DEBUG] [Thread-7809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:37:29.888 [DEBUG] [Thread-7809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:37:29.896 [DEBUG] [Thread-7809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:37:29.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:37:29.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')
2025-11-25T23:37:29.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:37:29.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:37:29.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:37:29.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:37:29.928 [DEBUG] [Thread-7809] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:37:30.027 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:30.237 [DEBUG] [Thread-7811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:40.434 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:45.290 [DEBUG] [Thread-7812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:50.861 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:37:59.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:37:59.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:37:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:38:00.331 [DEBUG] [Thread-7813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 37, 46), 29.57, 12.91, 0.0, 12.42, 20.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:38:00.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:37:46
2025-11-25T23:38:00.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:38:00.912 [DEBUG] [Thread-7814] [transport.py] [_log()] starting thread (client mode): 0x70d3b010
2025-11-25T23:38:00.912 [DEBUG] [Thread-7814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:38:00.933 [DEBUG] [Thread-7814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:38:00.933 [INFO] [Thread-7814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:38:00.936 [DEBUG] [Thread-7814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] client lang: <none>
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] server lang: <none>
2025-11-25T23:38:00.937 [DEBUG] [Thread-7814] [transport.py] [_log()] kex follows: False
2025-11-25T23:38:00.938 [DEBUG] [Thread-7814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:38:00.938 [DEBUG] [Thread-7814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:38:00.938 [DEBUG] [Thread-7814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:38:00.938 [DEBUG] [Thread-7814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:38:00.938 [DEBUG] [Thread-7814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:38:00.938 [DEBUG] [Thread-7814] [transport.py] [_log()] Compression: none
2025-11-25T23:38:00.938 [DEBUG] [Thread-7814] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:38:00.957 [DEBUG] [Thread-7814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:38:00.958 [DEBUG] [Thread-7814] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:38:00.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:38:00.959 [DEBUG] [Thread-7814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:38:00.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:38:00.961 [DEBUG] [Thread-7814] [transport.py] [_log()] userauth is OK
2025-11-25T23:38:00.961 [DEBUG] [Thread-7814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:38:00.961 [DEBUG] [Thread-7814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:38:00.961 [DEBUG] [Thread-7814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:38:00.961 [DEBUG] [Thread-7814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:38:00.987 [INFO] [Thread-7814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:38:00.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:38:01.257 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:01.669 [DEBUG] [Thread-7814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:38:01.670 [DEBUG] [Thread-7814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:38:01.670 [DEBUG] [Thread-7814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:38:01.711 [DEBUG] [Thread-7814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:38:01.711 [DEBUG] [Thread-7814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:38:01.714 [DEBUG] [Thread-7814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:38:01.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:38:01.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:38:01.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:38:01.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:38:01.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:38:01.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:38:01.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:38:01.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:38:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:38:01.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.900792 -999.00  +20.40   7.39     18   -4.50 1 1 1 1 1     0    0 25.94 25.71 ZNESW 7.7 7.4 155.6 10.2 20.1 -26.2 20.0 -25.6 19.6 -24.2 19.9 -25.1
2025-11-25T23:38:01.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:38:01.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:38:01.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.900792
2025-11-25T23:38:01.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:38:01.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:38:01.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:38:01.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:38:01.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:38:01.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:37:46', tmtdew=29.57, humidity=12.91, cloud=0.0, wind=12.42, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:37:47', seeing=0.76, atlas_timestamp='2025-11-25T21:37:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:35:00')
2025-11-25T23:38:01.738 [DEBUG] [Thread-7814] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:38:01.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:38:01.834 [DEBUG] [Thread-7817] [transport.py] [_log()] starting thread (client mode): 0x7374caf0
2025-11-25T23:38:01.834 [DEBUG] [Thread-7817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:38:01.849 [DEBUG] [Thread-7817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:38:01.849 [INFO] [Thread-7817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] client lang: <none>
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] server lang: <none>
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] kex follows: False
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] Compression: none
2025-11-25T23:38:01.857 [DEBUG] [Thread-7817] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:38:01.917 [DEBUG] [Thread-7817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:38:01.917 [DEBUG] [Thread-7817] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:38:01.918 [DEBUG] [Thread-7817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:38:01.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:38:01.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:38:01.974 [DEBUG] [Thread-7817] [transport.py] [_log()] userauth is OK
2025-11-25T23:38:01.974 [DEBUG] [Thread-7817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:38:01.975 [DEBUG] [Thread-7817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:38:01.975 [DEBUG] [Thread-7817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:38:01.975 [DEBUG] [Thread-7817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:38:01.994 [INFO] [Thread-7817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:38:01.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:38:01.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:38:02.880 [DEBUG] [Thread-7817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:38:02.880 [DEBUG] [Thread-7817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:38:02.932 [DEBUG] [Thread-7817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:38:02.932 [DEBUG] [Thread-7817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:38:02.941 [DEBUG] [Thread-7817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:38:02.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:38:02.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:38:02.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:38:02.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:38:02.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:38:02.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:38:02.978 [DEBUG] [Thread-7817] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:38:08.695 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:08.696 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:09.002 [DEBUG] [Thread-7819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:11.652 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:15.363 [DEBUG] [Thread-7820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:22.095 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:30.417 [DEBUG] [Thread-7821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:32.519 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:32.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:38:32.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:38:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:38:33.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 38, 18), 29.53, 12.96, 0.0, 12.4, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:38:33.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:38:18
2025-11-25T23:38:33.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:38:33.932 [DEBUG] [Thread-7822] [transport.py] [_log()] starting thread (client mode): 0x70d3b460
2025-11-25T23:38:33.933 [DEBUG] [Thread-7822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:38:33.953 [DEBUG] [Thread-7822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:38:33.953 [INFO] [Thread-7822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:38:33.956 [DEBUG] [Thread-7822] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:38:33.956 [DEBUG] [Thread-7822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:38:33.956 [DEBUG] [Thread-7822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:38:33.956 [DEBUG] [Thread-7822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:38:33.956 [DEBUG] [Thread-7822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:38:33.956 [DEBUG] [Thread-7822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:38:33.956 [DEBUG] [Thread-7822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:38:33.956 [DEBUG] [Thread-7822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] client lang: <none>
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] server lang: <none>
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] kex follows: False
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] Compression: none
2025-11-25T23:38:33.957 [DEBUG] [Thread-7822] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:38:33.975 [DEBUG] [Thread-7822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:38:33.976 [DEBUG] [Thread-7822] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:38:33.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:38:33.977 [DEBUG] [Thread-7822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:38:33.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:38:33.979 [DEBUG] [Thread-7822] [transport.py] [_log()] userauth is OK
2025-11-25T23:38:33.980 [DEBUG] [Thread-7822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:38:33.980 [DEBUG] [Thread-7822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:38:33.980 [DEBUG] [Thread-7822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:38:33.980 [DEBUG] [Thread-7822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:38:34.005 [INFO] [Thread-7822] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:38:34.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:38:34.630 [DEBUG] [Thread-7822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:38:34.631 [DEBUG] [Thread-7822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:38:34.631 [DEBUG] [Thread-7822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:38:34.672 [DEBUG] [Thread-7822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:38:34.672 [DEBUG] [Thread-7822] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:38:34.676 [DEBUG] [Thread-7822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:38:34.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:38:34.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:38:34.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:38:34.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:38:34.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:38:34.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:38:34.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:38:34.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:38:34.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:38:34.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.901486 -999.00  +20.40   7.72     18   -4.50 1 1 1 1 1     0    0 26.02 20.35 ZNESW 8.2 7.7 152.0 11.5 20.0 -26.2 20.0 -25.5 19.7 -24.2 19.9 -25.1
2025-11-25T23:38:34.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:38:34.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:38:34.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.901486
2025-11-25T23:38:34.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:38:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:38:34.701 [DEBUG] [Thread-7822] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:38:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:38:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:38:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:38:34.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:38:18', tmtdew=29.53, humidity=12.96, cloud=0.0, wind=12.4, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:38:20', seeing=0.86, atlas_timestamp='2025-11-25T21:38:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:35:00')
2025-11-25T23:38:34.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:38:34.797 [DEBUG] [Thread-7825] [transport.py] [_log()] starting thread (client mode): 0x70d681f0
2025-11-25T23:38:34.797 [DEBUG] [Thread-7825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:38:34.813 [DEBUG] [Thread-7825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:38:34.813 [INFO] [Thread-7825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:38:34.821 [DEBUG] [Thread-7825] [transport.py] [_log()] client lang: <none>
2025-11-25T23:38:34.822 [DEBUG] [Thread-7825] [transport.py] [_log()] server lang: <none>
2025-11-25T23:38:34.822 [DEBUG] [Thread-7825] [transport.py] [_log()] kex follows: False
2025-11-25T23:38:34.822 [DEBUG] [Thread-7825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:38:34.822 [DEBUG] [Thread-7825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:38:34.822 [DEBUG] [Thread-7825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:38:34.822 [DEBUG] [Thread-7825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:38:34.822 [DEBUG] [Thread-7825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:38:34.822 [DEBUG] [Thread-7825] [transport.py] [_log()] Compression: none
2025-11-25T23:38:34.822 [DEBUG] [Thread-7825] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:38:34.878 [DEBUG] [Thread-7825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:38:34.879 [DEBUG] [Thread-7825] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:38:34.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:38:34.880 [DEBUG] [Thread-7825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:38:34.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:38:34.934 [DEBUG] [Thread-7825] [transport.py] [_log()] userauth is OK
2025-11-25T23:38:34.934 [DEBUG] [Thread-7825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:38:34.934 [DEBUG] [Thread-7825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:38:34.934 [DEBUG] [Thread-7825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:38:34.934 [DEBUG] [Thread-7825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:38:34.953 [INFO] [Thread-7825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:38:34.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:38:34.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:38:35.791 [DEBUG] [Thread-7825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:38:35.791 [DEBUG] [Thread-7825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:38:35.839 [DEBUG] [Thread-7825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:38:35.839 [DEBUG] [Thread-7825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:38:35.849 [DEBUG] [Thread-7825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:38:35.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:38:35.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:38:35.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:38:35.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:38:35.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:38:35.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:38:35.886 [DEBUG] [Thread-7825] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:38:42.936 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:45.451 [DEBUG] [Thread-7827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:38:53.348 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:00.495 [DEBUG] [Thread-7828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:03.802 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:05.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:39:05.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:39:05.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:39:06.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 38, 51), 29.48, 12.96, 0.0, 10.08, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:39:06.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:38:51
2025-11-25T23:39:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:39:06.826 [DEBUG] [Thread-7829] [transport.py] [_log()] starting thread (client mode): 0x70dbd1b0
2025-11-25T23:39:06.826 [DEBUG] [Thread-7829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:39:06.847 [DEBUG] [Thread-7829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:39:06.847 [INFO] [Thread-7829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:39:06.850 [DEBUG] [Thread-7829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:39:06.850 [DEBUG] [Thread-7829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:39:06.850 [DEBUG] [Thread-7829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:39:06.850 [DEBUG] [Thread-7829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:39:06.850 [DEBUG] [Thread-7829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:39:06.850 [DEBUG] [Thread-7829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] client lang: <none>
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] server lang: <none>
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] kex follows: False
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:39:06.851 [DEBUG] [Thread-7829] [transport.py] [_log()] Compression: none
2025-11-25T23:39:06.852 [DEBUG] [Thread-7829] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:39:06.870 [DEBUG] [Thread-7829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:39:06.871 [DEBUG] [Thread-7829] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:39:06.872 [DEBUG] [Thread-7829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:39:06.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:39:06.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:39:06.875 [DEBUG] [Thread-7829] [transport.py] [_log()] userauth is OK
2025-11-25T23:39:06.875 [DEBUG] [Thread-7829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:39:06.875 [DEBUG] [Thread-7829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:39:06.875 [DEBUG] [Thread-7829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:39:06.875 [DEBUG] [Thread-7829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:39:06.912 [INFO] [Thread-7829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:39:06.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:39:07.555 [DEBUG] [Thread-7829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:39:07.556 [DEBUG] [Thread-7829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:39:07.556 [DEBUG] [Thread-7829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:39:07.597 [DEBUG] [Thread-7829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:39:07.597 [DEBUG] [Thread-7829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:39:07.600 [DEBUG] [Thread-7829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:39:07.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:39:07.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:39:07.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:39:07.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:39:07.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:39:07.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:39:07.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:39:07.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:39:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:39:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.901834 -999.00  +20.40   7.45     18   -4.50 1 1 1 1 1     0    0 25.80 17.63 ZNESW 9.4 7.5 161.4 10.7 20.0 -26.2 20.0 -25.6 19.7 -24.2 19.9 -25.2
2025-11-25T23:39:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:39:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:39:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.901834
2025-11-25T23:39:07.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:39:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:39:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:39:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:39:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:39:07.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:38:51', tmtdew=29.48, humidity=12.96, cloud=0.0, wind=10.08, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:38:52', seeing=0.86, atlas_timestamp='2025-11-25T21:38:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:35:00')
2025-11-25T23:39:07.627 [DEBUG] [Thread-7829] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:39:07.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:39:07.722 [DEBUG] [Thread-7832] [transport.py] [_log()] starting thread (client mode): 0x70dbc4c0
2025-11-25T23:39:07.723 [DEBUG] [Thread-7832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:39:07.737 [DEBUG] [Thread-7832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:39:07.737 [INFO] [Thread-7832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:39:07.745 [DEBUG] [Thread-7832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:39:07.745 [DEBUG] [Thread-7832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:39:07.745 [DEBUG] [Thread-7832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:39:07.745 [DEBUG] [Thread-7832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:39:07.745 [DEBUG] [Thread-7832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] client lang: <none>
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] server lang: <none>
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] kex follows: False
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] Compression: none
2025-11-25T23:39:07.746 [DEBUG] [Thread-7832] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:39:07.806 [DEBUG] [Thread-7832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:39:07.806 [DEBUG] [Thread-7832] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:39:07.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:39:07.808 [DEBUG] [Thread-7832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:39:07.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:39:07.861 [DEBUG] [Thread-7832] [transport.py] [_log()] userauth is OK
2025-11-25T23:39:07.862 [DEBUG] [Thread-7832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:39:07.862 [DEBUG] [Thread-7832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:39:07.862 [DEBUG] [Thread-7832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:39:07.862 [DEBUG] [Thread-7832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:39:07.881 [INFO] [Thread-7832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:39:07.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:39:07.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:39:08.685 [DEBUG] [Thread-7832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:39:08.685 [DEBUG] [Thread-7832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:39:08.734 [DEBUG] [Thread-7832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:39:08.734 [DEBUG] [Thread-7832] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:39:08.744 [DEBUG] [Thread-7832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:39:08.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:39:08.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:39:08.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:39:08.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:39:08.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:39:08.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:39:08.778 [DEBUG] [Thread-7832] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:39:08.896 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:08.897 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:09.086 [DEBUG] [Thread-7834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:14.222 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:15.532 [DEBUG] [Thread-7835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:24.636 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:30.578 [DEBUG] [Thread-7836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:35.033 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:38.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:39:38.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:39:38.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:39:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 39, 23), 29.45, 12.99, 0.0, 9.99, 20.17, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:39:39.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:39:23
2025-11-25T23:39:39.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:39:39.749 [DEBUG] [Thread-7837] [transport.py] [_log()] starting thread (client mode): 0x70dbfdc0
2025-11-25T23:39:39.749 [DEBUG] [Thread-7837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:39:39.769 [DEBUG] [Thread-7837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:39:39.769 [INFO] [Thread-7837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:39:39.770 [DEBUG] [Thread-7837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:39:39.770 [DEBUG] [Thread-7837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:39:39.770 [DEBUG] [Thread-7837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:39:39.770 [DEBUG] [Thread-7837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:39:39.770 [DEBUG] [Thread-7837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:39:39.770 [DEBUG] [Thread-7837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:39:39.770 [DEBUG] [Thread-7837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:39:39.770 [DEBUG] [Thread-7837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:39:39.770 [DEBUG] [Thread-7837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] client lang: <none>
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] server lang: <none>
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] kex follows: False
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] Compression: none
2025-11-25T23:39:39.771 [DEBUG] [Thread-7837] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:39:39.788 [DEBUG] [Thread-7837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:39:39.788 [DEBUG] [Thread-7837] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:39:39.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:39:39.790 [DEBUG] [Thread-7837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:39:39.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:39:39.792 [DEBUG] [Thread-7837] [transport.py] [_log()] userauth is OK
2025-11-25T23:39:39.792 [DEBUG] [Thread-7837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:39:39.792 [DEBUG] [Thread-7837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:39:39.792 [DEBUG] [Thread-7837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:39:39.792 [DEBUG] [Thread-7837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:39:39.817 [INFO] [Thread-7837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:39:39.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:39:40.444 [DEBUG] [Thread-7837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:39:40.444 [DEBUG] [Thread-7837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:39:40.445 [DEBUG] [Thread-7837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:39:40.486 [DEBUG] [Thread-7837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:39:40.486 [DEBUG] [Thread-7837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:39:40.489 [DEBUG] [Thread-7837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:39:40.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:39:40.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:39:40.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:39:40.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:39:40.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:39:40.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:39:40.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:39:40.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:39:40.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:39:40.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.902181 -999.00  +20.40   6.50     18   -4.50 1 1 1 1 1     0    0 25.08 15.90 ZNESW 9.2 6.5 155.2 11.2 20.0 -26.2 20.0 -25.6 19.7 -24.3 19.9 -25.2
2025-11-25T23:39:40.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:39:40.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:39:40.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.902181
2025-11-25T23:39:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:39:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:39:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:39:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:39:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:39:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:39:23', tmtdew=29.45, humidity=12.99, cloud=0.0, wind=9.99, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:39:24', seeing=0.75, atlas_timestamp='2025-11-25T21:39:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:35:00')
2025-11-25T23:39:40.516 [DEBUG] [Thread-7837] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:39:40.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:39:40.611 [DEBUG] [Thread-7840] [transport.py] [_log()] starting thread (client mode): 0x70d57d60
2025-11-25T23:39:40.611 [DEBUG] [Thread-7840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:39:40.631 [DEBUG] [Thread-7840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:39:40.631 [INFO] [Thread-7840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:39:40.638 [DEBUG] [Thread-7840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:39:40.639 [DEBUG] [Thread-7840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:39:40.639 [DEBUG] [Thread-7840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:39:40.639 [DEBUG] [Thread-7840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:39:40.639 [DEBUG] [Thread-7840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:39:40.639 [DEBUG] [Thread-7840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:39:40.639 [DEBUG] [Thread-7840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:39:40.639 [DEBUG] [Thread-7840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:39:40.640 [DEBUG] [Thread-7840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:39:40.640 [DEBUG] [Thread-7840] [transport.py] [_log()] client lang: <none>
2025-11-25T23:39:40.640 [DEBUG] [Thread-7840] [transport.py] [_log()] server lang: <none>
2025-11-25T23:39:40.640 [DEBUG] [Thread-7840] [transport.py] [_log()] kex follows: False
2025-11-25T23:39:40.640 [DEBUG] [Thread-7840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:39:40.640 [DEBUG] [Thread-7840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:39:40.640 [DEBUG] [Thread-7840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:39:40.641 [DEBUG] [Thread-7840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:39:40.641 [DEBUG] [Thread-7840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:39:40.641 [DEBUG] [Thread-7840] [transport.py] [_log()] Compression: none
2025-11-25T23:39:40.641 [DEBUG] [Thread-7840] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:39:40.698 [DEBUG] [Thread-7840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:39:40.698 [DEBUG] [Thread-7840] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:39:40.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:39:40.699 [DEBUG] [Thread-7840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:39:40.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:39:40.757 [DEBUG] [Thread-7840] [transport.py] [_log()] userauth is OK
2025-11-25T23:39:40.757 [DEBUG] [Thread-7840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:39:40.758 [DEBUG] [Thread-7840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:39:40.758 [DEBUG] [Thread-7840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:39:40.758 [DEBUG] [Thread-7840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:39:40.777 [INFO] [Thread-7840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:39:40.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:39:40.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:39:41.625 [DEBUG] [Thread-7840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:39:41.625 [DEBUG] [Thread-7840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:39:41.673 [DEBUG] [Thread-7840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:39:41.673 [DEBUG] [Thread-7840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:39:41.685 [DEBUG] [Thread-7840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:39:41.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:39:41.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:39:41.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:39:41.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:39:41.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:39:41.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:39:41.729 [DEBUG] [Thread-7840] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:39:45.481 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:45.615 [DEBUG] [Thread-7842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:39:55.865 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:00.657 [DEBUG] [Thread-7843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:06.263 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:09.100 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:09.101 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:09.175 [DEBUG] [Thread-7844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:11.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:40:11.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:40:11.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:40:12.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 39, 55), 29.26, 13.03, 0.0, 11.38, 20.07, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:40:12.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:39:55
2025-11-25T23:40:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:40:12.692 [DEBUG] [Thread-7845] [transport.py] [_log()] starting thread (client mode): 0x70da6b60
2025-11-25T23:40:12.692 [DEBUG] [Thread-7845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:40:12.712 [DEBUG] [Thread-7845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:40:12.712 [INFO] [Thread-7845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:40:12.715 [DEBUG] [Thread-7845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:40:12.715 [DEBUG] [Thread-7845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:40:12.715 [DEBUG] [Thread-7845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:40:12.715 [DEBUG] [Thread-7845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:40:12.715 [DEBUG] [Thread-7845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:40:12.715 [DEBUG] [Thread-7845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] client lang: <none>
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] server lang: <none>
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] kex follows: False
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] Compression: none
2025-11-25T23:40:12.716 [DEBUG] [Thread-7845] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:40:12.733 [DEBUG] [Thread-7845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:40:12.734 [DEBUG] [Thread-7845] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:40:12.734 [DEBUG] [Thread-7845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:40:12.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:40:12.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:40:12.736 [DEBUG] [Thread-7845] [transport.py] [_log()] userauth is OK
2025-11-25T23:40:12.737 [DEBUG] [Thread-7845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:40:12.737 [DEBUG] [Thread-7845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:40:12.737 [DEBUG] [Thread-7845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:40:12.737 [DEBUG] [Thread-7845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:40:12.762 [INFO] [Thread-7845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:40:12.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:40:13.442 [DEBUG] [Thread-7845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:40:13.443 [DEBUG] [Thread-7845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:40:13.443 [DEBUG] [Thread-7845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:40:13.483 [DEBUG] [Thread-7845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:40:13.484 [DEBUG] [Thread-7845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:40:13.487 [DEBUG] [Thread-7845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:40:13.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:40:13.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:40:13.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:40:13.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:40:13.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:40:13.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:40:13.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:40:13.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:40:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:40:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.902528 -999.00  +20.30   8.38     18   -4.50 1 1 1 1 1     0    0 25.40 14.01 ZNESW 10.8 8.4 165.8 11.6 19.9 -26.2 19.9 -25.6 19.6 -24.3 19.8 -25.3
2025-11-25T23:40:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:40:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:40:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.902528
2025-11-25T23:40:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:40:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:40:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:40:13.512 [DEBUG] [Thread-7845] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:40:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:40:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:40:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:39:55', tmtdew=29.26, humidity=13.03, cloud=0.0, wind=11.38, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:39:56', seeing=0.75, atlas_timestamp='2025-11-25T21:39:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:38:00')
2025-11-25T23:40:13.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:40:13.609 [DEBUG] [Thread-7848] [transport.py] [_log()] starting thread (client mode): 0x70d7e680
2025-11-25T23:40:13.609 [DEBUG] [Thread-7848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:40:13.623 [DEBUG] [Thread-7848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:40:13.624 [INFO] [Thread-7848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] client lang: <none>
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] server lang: <none>
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] kex follows: False
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:40:13.631 [DEBUG] [Thread-7848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:40:13.632 [DEBUG] [Thread-7848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:40:13.632 [DEBUG] [Thread-7848] [transport.py] [_log()] Compression: none
2025-11-25T23:40:13.632 [DEBUG] [Thread-7848] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:40:13.688 [DEBUG] [Thread-7848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:40:13.689 [DEBUG] [Thread-7848] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:40:13.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:40:13.690 [DEBUG] [Thread-7848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:40:13.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:40:13.745 [DEBUG] [Thread-7848] [transport.py] [_log()] userauth is OK
2025-11-25T23:40:13.745 [DEBUG] [Thread-7848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:40:13.745 [DEBUG] [Thread-7848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:40:13.745 [DEBUG] [Thread-7848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:40:13.745 [DEBUG] [Thread-7848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:40:13.764 [INFO] [Thread-7848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:40:13.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:40:13.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:40:14.581 [DEBUG] [Thread-7848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:40:14.581 [DEBUG] [Thread-7848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:40:14.629 [DEBUG] [Thread-7848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:40:14.629 [DEBUG] [Thread-7848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:40:14.638 [DEBUG] [Thread-7848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:40:14.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:40:14.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:40:14.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:40:14.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:40:14.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:40:14.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:40:14.676 [DEBUG] [Thread-7848] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:40:15.692 [DEBUG] [Thread-7850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:16.656 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:27.097 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:30.755 [DEBUG] [Thread-7851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:37.507 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:44.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:40:44.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:40:44.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:40:45.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 40, 27), 29.23, 13.04, 0.0, 11.68, 19.99, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:40:45.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:40:27
2025-11-25T23:40:45.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:40:45.605 [DEBUG] [Thread-7852] [transport.py] [_log()] starting thread (client mode): 0x70d681f0
2025-11-25T23:40:45.605 [DEBUG] [Thread-7852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:40:45.625 [DEBUG] [Thread-7852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:40:45.625 [INFO] [Thread-7852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:40:45.628 [DEBUG] [Thread-7852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:40:45.628 [DEBUG] [Thread-7852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:40:45.628 [DEBUG] [Thread-7852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:40:45.628 [DEBUG] [Thread-7852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:40:45.628 [DEBUG] [Thread-7852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] client lang: <none>
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] server lang: <none>
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] kex follows: False
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] Compression: none
2025-11-25T23:40:45.629 [DEBUG] [Thread-7852] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:40:45.647 [DEBUG] [Thread-7852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:40:45.648 [DEBUG] [Thread-7852] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:40:45.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:40:45.649 [DEBUG] [Thread-7852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:40:45.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:40:45.650 [DEBUG] [Thread-7852] [transport.py] [_log()] userauth is OK
2025-11-25T23:40:45.651 [DEBUG] [Thread-7852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:40:45.651 [DEBUG] [Thread-7852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:40:45.651 [DEBUG] [Thread-7852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:40:45.651 [DEBUG] [Thread-7852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:40:45.673 [INFO] [Thread-7852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:40:45.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:40:45.787 [DEBUG] [Thread-7854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:46.317 [DEBUG] [Thread-7852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:40:46.317 [DEBUG] [Thread-7852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:40:46.317 [DEBUG] [Thread-7852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:40:46.358 [DEBUG] [Thread-7852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:40:46.358 [DEBUG] [Thread-7852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:40:46.361 [DEBUG] [Thread-7852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:40:46.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:40:46.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:40:46.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:40:46.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:40:46.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:40:46.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:40:46.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:40:46.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:40:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:40:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.902875 -999.00  +20.30   9.17     18   -4.50 1 1 1 1 1     0    0 25.22 12.12 ZNESW 8.4 9.2 155.2 10.9 19.9 -26.3 19.9 -25.6 19.6 -24.3 19.9 -25.2
2025-11-25T23:40:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:40:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:40:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.902875
2025-11-25T23:40:46.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:40:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:40:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:40:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:40:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:40:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:40:27', tmtdew=29.23, humidity=13.04, cloud=0.0, wind=11.68, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:40:28', seeing=0.77, atlas_timestamp='2025-11-25T21:40:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:38:00')
2025-11-25T23:40:46.387 [DEBUG] [Thread-7852] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:40:46.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:40:46.482 [DEBUG] [Thread-7856] [transport.py] [_log()] starting thread (client mode): 0x70dbc2b0
2025-11-25T23:40:46.482 [DEBUG] [Thread-7856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:40:46.499 [DEBUG] [Thread-7856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:40:46.499 [INFO] [Thread-7856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:40:46.507 [DEBUG] [Thread-7856] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:40:46.507 [DEBUG] [Thread-7856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:40:46.507 [DEBUG] [Thread-7856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:40:46.507 [DEBUG] [Thread-7856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:40:46.507 [DEBUG] [Thread-7856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:40:46.507 [DEBUG] [Thread-7856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:40:46.507 [DEBUG] [Thread-7856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] client lang: <none>
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] server lang: <none>
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] kex follows: False
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] Compression: none
2025-11-25T23:40:46.508 [DEBUG] [Thread-7856] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:40:46.565 [DEBUG] [Thread-7856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:40:46.565 [DEBUG] [Thread-7856] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:40:46.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:40:46.567 [DEBUG] [Thread-7856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:40:46.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:40:46.624 [DEBUG] [Thread-7856] [transport.py] [_log()] userauth is OK
2025-11-25T23:40:46.625 [DEBUG] [Thread-7856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:40:46.625 [DEBUG] [Thread-7856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:40:46.625 [DEBUG] [Thread-7856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:40:46.625 [DEBUG] [Thread-7856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:40:46.643 [INFO] [Thread-7856] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:40:46.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:40:46.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:40:47.633 [DEBUG] [Thread-7856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:40:47.634 [DEBUG] [Thread-7856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:40:47.682 [DEBUG] [Thread-7856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:40:47.682 [DEBUG] [Thread-7856] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:40:47.691 [DEBUG] [Thread-7856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:40:47.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:40:47.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:40:47.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:40:47.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:40:47.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:40:47.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:40:47.727 [DEBUG] [Thread-7856] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:40:47.923 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:40:58.339 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:00.825 [DEBUG] [Thread-7858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:08.737 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:09.255 [DEBUG] [Thread-7859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:09.302 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:09.303 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:15.873 [DEBUG] [Thread-7860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:17.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:41:17.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:41:17.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:41:18.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 40, 59), 29.19, 13.09, 0.0, 11.68, 20.04, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:41:18.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:40:59
2025-11-25T23:41:18.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:41:18.683 [DEBUG] [Thread-7861] [transport.py] [_log()] starting thread (client mode): 0x70d57e80
2025-11-25T23:41:18.683 [DEBUG] [Thread-7861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:41:18.704 [DEBUG] [Thread-7861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:41:18.704 [INFO] [Thread-7861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] client lang: <none>
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] server lang: <none>
2025-11-25T23:41:18.707 [DEBUG] [Thread-7861] [transport.py] [_log()] kex follows: False
2025-11-25T23:41:18.708 [DEBUG] [Thread-7861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:41:18.708 [DEBUG] [Thread-7861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:41:18.708 [DEBUG] [Thread-7861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:41:18.708 [DEBUG] [Thread-7861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:41:18.708 [DEBUG] [Thread-7861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:41:18.708 [DEBUG] [Thread-7861] [transport.py] [_log()] Compression: none
2025-11-25T23:41:18.708 [DEBUG] [Thread-7861] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:41:18.726 [DEBUG] [Thread-7861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:41:18.726 [DEBUG] [Thread-7861] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:41:18.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:41:18.727 [DEBUG] [Thread-7861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:41:18.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:41:18.729 [DEBUG] [Thread-7861] [transport.py] [_log()] userauth is OK
2025-11-25T23:41:18.730 [DEBUG] [Thread-7861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:41:18.730 [DEBUG] [Thread-7861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:41:18.730 [DEBUG] [Thread-7861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:41:18.730 [DEBUG] [Thread-7861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:41:18.754 [INFO] [Thread-7861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:41:18.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:41:19.132 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:19.392 [DEBUG] [Thread-7861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:41:19.392 [DEBUG] [Thread-7861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:41:19.393 [DEBUG] [Thread-7861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:41:19.432 [DEBUG] [Thread-7861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:41:19.433 [DEBUG] [Thread-7861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:41:19.439 [DEBUG] [Thread-7861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:41:19.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:41:19.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:41:19.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:41:19.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:41:19.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:41:19.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:41:19.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:41:19.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:41:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:41:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.903222 -999.00  +20.30   8.05     18   -4.50 1 1 1 1 1     0    0 25.00 9.53 ZNESW 8.2 8.1 153.0 13.4 19.9 -26.3 19.9 -25.5 19.6 -24.3 19.9 -25.3
2025-11-25T23:41:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:41:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:41:19.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.903222
2025-11-25T23:41:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:41:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:41:19.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:41:19.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:41:19.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:41:19.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:40:59', tmtdew=29.19, humidity=13.09, cloud=0.0, wind=11.68, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:41:00', seeing=0.77, atlas_timestamp='2025-11-25T21:40:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:38:00')
2025-11-25T23:41:19.461 [DEBUG] [Thread-7861] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:41:19.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:41:19.558 [DEBUG] [Thread-7864] [transport.py] [_log()] starting thread (client mode): 0x70d74730
2025-11-25T23:41:19.558 [DEBUG] [Thread-7864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:41:19.572 [DEBUG] [Thread-7864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:41:19.573 [INFO] [Thread-7864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] client lang: <none>
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] server lang: <none>
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] kex follows: False
2025-11-25T23:41:19.582 [DEBUG] [Thread-7864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:41:19.583 [DEBUG] [Thread-7864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:41:19.583 [DEBUG] [Thread-7864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:41:19.583 [DEBUG] [Thread-7864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:41:19.583 [DEBUG] [Thread-7864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:41:19.583 [DEBUG] [Thread-7864] [transport.py] [_log()] Compression: none
2025-11-25T23:41:19.583 [DEBUG] [Thread-7864] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:41:19.640 [DEBUG] [Thread-7864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:41:19.641 [DEBUG] [Thread-7864] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:41:19.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:41:19.642 [DEBUG] [Thread-7864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:41:19.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:41:19.695 [DEBUG] [Thread-7864] [transport.py] [_log()] userauth is OK
2025-11-25T23:41:19.695 [DEBUG] [Thread-7864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:41:19.695 [DEBUG] [Thread-7864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:41:19.695 [DEBUG] [Thread-7864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:41:19.695 [DEBUG] [Thread-7864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:41:19.709 [INFO] [Thread-7864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:41:19.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:41:19.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:41:20.538 [DEBUG] [Thread-7864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:41:20.538 [DEBUG] [Thread-7864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:41:20.586 [DEBUG] [Thread-7864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:41:20.586 [DEBUG] [Thread-7864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:41:20.595 [DEBUG] [Thread-7864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:41:20.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:41:20.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:41:20.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
2025-11-25T23:41:20.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:41:20.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:41:20.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:41:20.631 [DEBUG] [Thread-7864] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:41:29.553 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:30.907 [DEBUG] [Thread-7866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:39.973 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:45.959 [DEBUG] [Thread-7867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:50.367 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:41:50.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:41:50.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:41:50.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:41:51.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 41, 31), 29.2, 13.08, 0.0, 11.81, 19.99, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:41:51.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:41:31
2025-11-25T23:41:51.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:41:51.600 [DEBUG] [Thread-7868] [transport.py] [_log()] starting thread (client mode): 0x70d56020
2025-11-25T23:41:51.601 [DEBUG] [Thread-7868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:41:51.621 [DEBUG] [Thread-7868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:41:51.621 [INFO] [Thread-7868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:41:51.624 [DEBUG] [Thread-7868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:41:51.624 [DEBUG] [Thread-7868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:41:51.624 [DEBUG] [Thread-7868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:41:51.624 [DEBUG] [Thread-7868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:41:51.624 [DEBUG] [Thread-7868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] client lang: <none>
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] server lang: <none>
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] kex follows: False
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] Compression: none
2025-11-25T23:41:51.625 [DEBUG] [Thread-7868] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:41:51.636 [DEBUG] [Thread-7868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:41:51.636 [DEBUG] [Thread-7868] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:41:51.636 [DEBUG] [Thread-7868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:41:51.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:41:51.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:41:51.637 [DEBUG] [Thread-7868] [transport.py] [_log()] userauth is OK
2025-11-25T23:41:51.637 [DEBUG] [Thread-7868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:41:51.637 [DEBUG] [Thread-7868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:41:51.637 [DEBUG] [Thread-7868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:41:51.637 [DEBUG] [Thread-7868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:41:51.652 [INFO] [Thread-7868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:41:51.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:41:52.302 [DEBUG] [Thread-7868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:41:52.302 [DEBUG] [Thread-7868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:41:52.302 [DEBUG] [Thread-7868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:41:52.344 [DEBUG] [Thread-7868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:41:52.344 [DEBUG] [Thread-7868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:41:52.347 [DEBUG] [Thread-7868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:41:52.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:41:52.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:41:52.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:41:52.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:41:52.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:41:52.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:41:52.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.903917 -999.00  +20.20   7.36     18   -4.50 1 1 1 1 1     0    0 25.30 6.31 ZNESW 6.7 7.4 162.0 9.4 19.9 -26.3 19.9 -25.5 19.6 -24.3 19.8 -25.4
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.903917
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:41:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:41:31', tmtdew=29.2, humidity=13.08, cloud=0.0, wind=11.81, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:41:32', seeing=0.92, atlas_timestamp='2025-11-25T21:41:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:38:00')
2025-11-25T23:41:52.364 [DEBUG] [Thread-7868] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:41:52.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:41:52.450 [DEBUG] [Thread-7871] [transport.py] [_log()] starting thread (client mode): 0x70d555a0
2025-11-25T23:41:52.450 [DEBUG] [Thread-7871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:41:52.464 [DEBUG] [Thread-7871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:41:52.464 [INFO] [Thread-7871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] client lang: <none>
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] server lang: <none>
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] kex follows: False
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] Compression: none
2025-11-25T23:41:52.472 [DEBUG] [Thread-7871] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:41:52.530 [DEBUG] [Thread-7871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:41:52.531 [DEBUG] [Thread-7871] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:41:52.531 [DEBUG] [Thread-7871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:41:52.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:41:52.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:41:52.587 [DEBUG] [Thread-7871] [transport.py] [_log()] userauth is OK
2025-11-25T23:41:52.587 [DEBUG] [Thread-7871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:41:52.587 [DEBUG] [Thread-7871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:41:52.587 [DEBUG] [Thread-7871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:41:52.587 [DEBUG] [Thread-7871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:41:52.601 [INFO] [Thread-7871] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:41:52.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:41:52.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:41:53.508 [DEBUG] [Thread-7871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:41:53.509 [DEBUG] [Thread-7871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:41:53.557 [DEBUG] [Thread-7871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:41:53.557 [DEBUG] [Thread-7871] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:41:53.566 [DEBUG] [Thread-7871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:41:53.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:41:53.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:41:53.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:41:53.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:41:53.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:41:53.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:41:53.603 [DEBUG] [Thread-7871] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:42:00.764 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:00.992 [DEBUG] [Thread-7873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:09.314 [DEBUG] [Thread-7874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:09.504 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:09.506 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:11.223 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:16.048 [DEBUG] [Thread-7875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:21.672 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:23.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:42:23.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:42:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:42:24.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 42, 3), 29.14, 13.13, 0.0, 12.97, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:42:24.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:42:03
2025-11-25T23:42:24.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:42:24.604 [DEBUG] [Thread-7876] [transport.py] [_log()] starting thread (client mode): 0x70d6a110
2025-11-25T23:42:24.604 [DEBUG] [Thread-7876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:42:24.625 [DEBUG] [Thread-7876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:42:24.625 [INFO] [Thread-7876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] client lang: <none>
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] server lang: <none>
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] kex follows: False
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] Compression: none
2025-11-25T23:42:24.628 [DEBUG] [Thread-7876] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:42:24.645 [DEBUG] [Thread-7876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:42:24.646 [DEBUG] [Thread-7876] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:42:24.646 [DEBUG] [Thread-7876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:42:24.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:42:24.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:42:24.647 [DEBUG] [Thread-7876] [transport.py] [_log()] userauth is OK
2025-11-25T23:42:24.647 [DEBUG] [Thread-7876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:42:24.647 [DEBUG] [Thread-7876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:42:24.647 [DEBUG] [Thread-7876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:42:24.647 [DEBUG] [Thread-7876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:42:24.656 [INFO] [Thread-7876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:42:24.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:42:25.294 [DEBUG] [Thread-7876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:42:25.294 [DEBUG] [Thread-7876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:42:25.294 [DEBUG] [Thread-7876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:42:25.335 [DEBUG] [Thread-7876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:42:25.335 [DEBUG] [Thread-7876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:42:25.338 [DEBUG] [Thread-7876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:42:25.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:42:25.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:42:25.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:42:25.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:42:25.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:42:25.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:42:25.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.904264 -999.00  +20.20   8.10     18   -4.50 1 1 1 1 1     0    0 25.05 4.26 ZNESW 8.2 8.1 156.2 10.4 19.9 -26.3 19.9 -25.7 19.6 -24.4 19.8 -25.3
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.904264
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:42:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:42:03', tmtdew=29.14, humidity=13.13, cloud=0.0, wind=12.97, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:42:04', seeing=0.87, atlas_timestamp='2025-11-25T21:42:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:38:00')
2025-11-25T23:42:25.354 [DEBUG] [Thread-7876] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:42:25.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:42:25.441 [DEBUG] [Thread-7879] [transport.py] [_log()] starting thread (client mode): 0x70d56770
2025-11-25T23:42:25.441 [DEBUG] [Thread-7879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:42:25.456 [DEBUG] [Thread-7879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:42:25.456 [INFO] [Thread-7879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] client lang: <none>
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] server lang: <none>
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] kex follows: False
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] Compression: none
2025-11-25T23:42:25.464 [DEBUG] [Thread-7879] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:42:25.522 [DEBUG] [Thread-7879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:42:25.522 [DEBUG] [Thread-7879] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:42:25.522 [DEBUG] [Thread-7879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:42:25.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:42:25.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:42:25.578 [DEBUG] [Thread-7879] [transport.py] [_log()] userauth is OK
2025-11-25T23:42:25.578 [DEBUG] [Thread-7879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:42:25.579 [DEBUG] [Thread-7879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:42:25.579 [DEBUG] [Thread-7879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:42:25.579 [DEBUG] [Thread-7879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:42:25.594 [INFO] [Thread-7879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:42:25.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:42:25.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:42:26.470 [DEBUG] [Thread-7879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:42:26.470 [DEBUG] [Thread-7879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:42:26.518 [DEBUG] [Thread-7879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:42:26.518 [DEBUG] [Thread-7879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:42:26.526 [DEBUG] [Thread-7879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:42:26.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:42:26.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:42:26.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:42:26.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:42:26.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:42:26.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:42:26.557 [DEBUG] [Thread-7879] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:42:31.085 [DEBUG] [Thread-7881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:32.080 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:42.492 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:46.138 [DEBUG] [Thread-7882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:52.909 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:42:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:42:56.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:42:56.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:42:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 42, 35), 29.07, 13.21, 0.0, 10.68, 19.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:42:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:42:35
2025-11-25T23:42:57.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:42:57.492 [DEBUG] [Thread-7883] [transport.py] [_log()] starting thread (client mode): 0x70dd1090
2025-11-25T23:42:57.492 [DEBUG] [Thread-7883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:42:57.512 [DEBUG] [Thread-7883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:42:57.512 [INFO] [Thread-7883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:42:57.513 [DEBUG] [Thread-7883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:42:57.513 [DEBUG] [Thread-7883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:42:57.513 [DEBUG] [Thread-7883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:42:57.513 [DEBUG] [Thread-7883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:42:57.513 [DEBUG] [Thread-7883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:42:57.513 [DEBUG] [Thread-7883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] client lang: <none>
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] server lang: <none>
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] kex follows: False
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] Compression: none
2025-11-25T23:42:57.514 [DEBUG] [Thread-7883] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:42:57.531 [DEBUG] [Thread-7883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:42:57.531 [DEBUG] [Thread-7883] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:42:57.532 [DEBUG] [Thread-7883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:42:57.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:42:57.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:42:57.534 [DEBUG] [Thread-7883] [transport.py] [_log()] userauth is OK
2025-11-25T23:42:57.535 [DEBUG] [Thread-7883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:42:57.535 [DEBUG] [Thread-7883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:42:57.535 [DEBUG] [Thread-7883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:42:57.535 [DEBUG] [Thread-7883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:42:57.555 [INFO] [Thread-7883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:42:57.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:42:58.196 [DEBUG] [Thread-7883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:42:58.196 [DEBUG] [Thread-7883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:42:58.197 [DEBUG] [Thread-7883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:42:58.237 [DEBUG] [Thread-7883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:42:58.237 [DEBUG] [Thread-7883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:42:58.241 [DEBUG] [Thread-7883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:42:58.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:42:58.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:42:58.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:42:58.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:42:58.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:42:58.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:42:58.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:42:58.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:42:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:42:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.904611 -999.00  +20.20   8.95     18   -4.60 1 1 1 1 1     0    0 24.93 2.26 ZNESW 8.6 8.9 162.3 11.1 19.9 -26.2 19.9 -25.7 19.5 -24.3 19.7 -25.2
2025-11-25T23:42:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:42:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:42:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.904611
2025-11-25T23:42:58.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:42:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:42:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:42:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:42:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:42:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:42:35', tmtdew=29.07, humidity=13.21, cloud=0.0, wind=10.68, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:42:36', seeing=0.83, atlas_timestamp='2025-11-25T21:42:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.023749999999999716, -0.016750000000000043, -0.02850000000000108, 0.05150000000000077, 0.03325000000000067, 0.030499999999998195, -0.006249999999997868, 0.006999999999997897, 0.006000000000000227, 0.020250000000000767, -0.02200000000000024, 0.04499999999999993, 0.05424999999999969, 0.036999999999999034, -0.018499999999999517, -0.016750000000000043, 0.03049999999999997, 0.025000000000000355, -0.024250000000002103, 0.004999999999999005, 0.10574999999999868, 0.011250000000000426, -0.03524999999999956, -0.040000000000000924, -0.0235000000000003, 0.0007500000000000284, 0.013500000000000512, 0.09399999999999942, 0.0660000000000025, 0.05000000000000071, -0.017499999999998295, -0.07325000000000159], zp_timestamp='2025-11-25T21:38:00')
2025-11-25T23:42:58.265 [DEBUG] [Thread-7883] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:42:58.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:42:58.361 [DEBUG] [Thread-7886] [transport.py] [_log()] starting thread (client mode): 0x70dbfaf0
2025-11-25T23:42:58.361 [DEBUG] [Thread-7886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:42:58.376 [DEBUG] [Thread-7886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:42:58.376 [INFO] [Thread-7886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:42:58.384 [DEBUG] [Thread-7886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:42:58.384 [DEBUG] [Thread-7886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:42:58.384 [DEBUG] [Thread-7886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] client lang: <none>
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] server lang: <none>
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] kex follows: False
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:42:58.385 [DEBUG] [Thread-7886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:42:58.386 [DEBUG] [Thread-7886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:42:58.386 [DEBUG] [Thread-7886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:42:58.386 [DEBUG] [Thread-7886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:42:58.386 [DEBUG] [Thread-7886] [transport.py] [_log()] Compression: none
2025-11-25T23:42:58.386 [DEBUG] [Thread-7886] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:42:58.448 [DEBUG] [Thread-7886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:42:58.448 [DEBUG] [Thread-7886] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:42:58.449 [DEBUG] [Thread-7886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:42:58.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:42:58.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:42:58.507 [DEBUG] [Thread-7886] [transport.py] [_log()] userauth is OK
2025-11-25T23:42:58.507 [DEBUG] [Thread-7886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:42:58.508 [DEBUG] [Thread-7886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:42:58.508 [DEBUG] [Thread-7886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:42:58.508 [DEBUG] [Thread-7886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:42:58.526 [INFO] [Thread-7886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:42:58.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:42:58.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:42:59.380 [DEBUG] [Thread-7886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:42:59.380 [DEBUG] [Thread-7886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:42:59.428 [DEBUG] [Thread-7886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:42:59.428 [DEBUG] [Thread-7886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:42:59.437 [DEBUG] [Thread-7886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:42:59.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:42:59.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:42: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
2025-11-25T23:42:59.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:42:59.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:42:59.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:42:59.475 [DEBUG] [Thread-7886] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:43:01.178 [DEBUG] [Thread-7888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:03.307 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:09.366 [DEBUG] [Thread-7889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:09.707 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:09.708 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:13.739 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:16.227 [DEBUG] [Thread-7890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:24.140 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:29.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:43:29.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:43:29.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:43:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 43, 7), 29.03, 13.23, 0.0, 10.64, 19.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:43:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:43:07
2025-11-25T23:43:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:43:30.435 [DEBUG] [Thread-7891] [transport.py] [_log()] starting thread (client mode): 0x7374dff0
2025-11-25T23:43:30.435 [DEBUG] [Thread-7891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:43:30.450 [DEBUG] [Thread-7891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:43:30.450 [INFO] [Thread-7891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] client lang: <none>
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] server lang: <none>
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] kex follows: False
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] Compression: none
2025-11-25T23:43:30.454 [DEBUG] [Thread-7891] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:43:30.471 [DEBUG] [Thread-7891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:43:30.471 [DEBUG] [Thread-7891] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:43:30.472 [DEBUG] [Thread-7891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:43:30.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:43:30.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:43:30.473 [DEBUG] [Thread-7891] [transport.py] [_log()] userauth is OK
2025-11-25T23:43:30.474 [DEBUG] [Thread-7891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:43:30.474 [DEBUG] [Thread-7891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:43:30.474 [DEBUG] [Thread-7891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:43:30.474 [DEBUG] [Thread-7891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:43:30.497 [INFO] [Thread-7891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:43:30.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:43:31.133 [DEBUG] [Thread-7891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:43:31.133 [DEBUG] [Thread-7891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:43:31.134 [DEBUG] [Thread-7891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:43:31.173 [DEBUG] [Thread-7891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:43:31.174 [DEBUG] [Thread-7891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:43:31.176 [DEBUG] [Thread-7891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:43:31.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:43:31.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:43:31.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:43:31.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:43:31.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:43:31.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:43:31.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:43:31.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:43:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:43:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.904959 -999.00  +20.20  11.48     18   -4.70 1 1 1 1 1     0    0 25.08 0.90 ZNESW 9.3 11.5 152.8 14.7 19.9 -25.9 19.9 -25.5 19.6 -24.0 19.7 -25.0
2025-11-25T23:43:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:43:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:43:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.904959
2025-11-25T23:43:31.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:43:31.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:43:31.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:43:31.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:43:31.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:43:31.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:43:07', tmtdew=29.03, humidity=13.23, cloud=0.0, wind=10.64, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:43:08', seeing=0.83, atlas_timestamp='2025-11-25T21:43:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.014749999999999375, 0.01925000000000132, -0.022000000000002018, -0.009499999999999176, 0.054250000000001464, -0.019999999999999574, 0.0022500000000000853, 0.0024999999999995026, 0.0, 0.019249999999999545, -0.04899999999999949, 0.04100000000000037, 0.07624999999999993, -0.03450000000000131, -0.006000000000000227, -0.012750000000000483, 0.013500000000000512, 0.05749999999999922, -0.020250000000000767, 0.043499999999998096, 0.039749999999997954, 0.034750000000000725, -0.051249999999999574, -0.05450000000000088, -0.01249999999999929, -0.015249999999999986, 0.046499999999999986, 0.08099999999999952, 0.03300000000000125, 0.09000000000000163, -0.032999999999999474, -0.04925000000000068], zp_timestamp='2025-11-25T21:41:00')
2025-11-25T23:43:31.202 [DEBUG] [Thread-7891] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:43:31.264 [DEBUG] [Thread-7894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:31.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:43:31.297 [DEBUG] [Thread-7895] [transport.py] [_log()] starting thread (client mode): 0x7374c850
2025-11-25T23:43:31.297 [DEBUG] [Thread-7895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:43:31.312 [DEBUG] [Thread-7895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:43:31.313 [INFO] [Thread-7895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] client lang: <none>
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] server lang: <none>
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] kex follows: False
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:43:31.320 [DEBUG] [Thread-7895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:43:31.321 [DEBUG] [Thread-7895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:43:31.321 [DEBUG] [Thread-7895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:43:31.321 [DEBUG] [Thread-7895] [transport.py] [_log()] Compression: none
2025-11-25T23:43:31.321 [DEBUG] [Thread-7895] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:43:31.377 [DEBUG] [Thread-7895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:43:31.378 [DEBUG] [Thread-7895] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:43:31.378 [DEBUG] [Thread-7895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:43:31.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:43:31.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:43:31.434 [DEBUG] [Thread-7895] [transport.py] [_log()] userauth is OK
2025-11-25T23:43:31.434 [DEBUG] [Thread-7895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:43:31.434 [DEBUG] [Thread-7895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:43:31.434 [DEBUG] [Thread-7895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:43:31.434 [DEBUG] [Thread-7895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:43:31.456 [INFO] [Thread-7895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:43:31.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:43:31.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:43:32.323 [DEBUG] [Thread-7895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:43:32.324 [DEBUG] [Thread-7895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:43:32.372 [DEBUG] [Thread-7895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:43:32.372 [DEBUG] [Thread-7895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:43:32.381 [DEBUG] [Thread-7895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:43:32.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:43:32.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:43:32.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:43:32.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:43:32.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:43:32.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:43:32.419 [DEBUG] [Thread-7895] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:43:34.532 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:44.928 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:46.303 [DEBUG] [Thread-7897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:43:55.329 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:01.340 [DEBUG] [Thread-7898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:44:02.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:44:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:44:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 43, 39), 28.95, 13.26, 0.0, 10.25, 19.81, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:44:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:43:39
2025-11-25T23:44:03.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:44:03.367 [DEBUG] [Thread-7899] [transport.py] [_log()] starting thread (client mode): 0x70dd1ae0
2025-11-25T23:44:03.367 [DEBUG] [Thread-7899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:44:03.385 [DEBUG] [Thread-7899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:44:03.385 [INFO] [Thread-7899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] client lang: <none>
2025-11-25T23:44:03.387 [DEBUG] [Thread-7899] [transport.py] [_log()] server lang: <none>
2025-11-25T23:44:03.388 [DEBUG] [Thread-7899] [transport.py] [_log()] kex follows: False
2025-11-25T23:44:03.388 [DEBUG] [Thread-7899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:44:03.388 [DEBUG] [Thread-7899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:44:03.388 [DEBUG] [Thread-7899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:44:03.388 [DEBUG] [Thread-7899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:44:03.388 [DEBUG] [Thread-7899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:44:03.388 [DEBUG] [Thread-7899] [transport.py] [_log()] Compression: none
2025-11-25T23:44:03.388 [DEBUG] [Thread-7899] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:44:03.403 [DEBUG] [Thread-7899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:44:03.404 [DEBUG] [Thread-7899] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:44:03.405 [DEBUG] [Thread-7899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:44:03.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:44:03.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:44:03.408 [DEBUG] [Thread-7899] [transport.py] [_log()] userauth is OK
2025-11-25T23:44:03.408 [DEBUG] [Thread-7899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:44:03.408 [DEBUG] [Thread-7899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:44:03.408 [DEBUG] [Thread-7899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:44:03.408 [DEBUG] [Thread-7899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:44:03.446 [INFO] [Thread-7899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:44:03.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:44:04.061 [DEBUG] [Thread-7899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:44:04.062 [DEBUG] [Thread-7899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:44:04.062 [DEBUG] [Thread-7899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:44:04.102 [DEBUG] [Thread-7899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:44:04.103 [DEBUG] [Thread-7899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:44:04.105 [DEBUG] [Thread-7899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:44:04.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:44:04.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:44:04.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:44:04.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:44:04.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:44:04.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:44:04.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:44:04.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:44:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:44:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.905306 -999.00  +20.30  10.17     18   -4.60 1 1 1 1 1     0    0 25.01 -0.67 ZNESW 9.1 10.2 140.8 14.3 19.9 -26.1 19.8 -25.5 19.6 -24.2 19.7 -25.2
2025-11-25T23:44:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:44:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:44:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.905306
2025-11-25T23:44:04.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:44:04.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:44:04.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:44:04.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:44:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:44:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:43:39', tmtdew=28.95, humidity=13.26, cloud=0.0, wind=10.25, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:43:40', seeing=0.91, atlas_timestamp='2025-11-25T21:43:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.014749999999999375, 0.01925000000000132, -0.022000000000002018, -0.009499999999999176, 0.054250000000001464, -0.019999999999999574, 0.0022500000000000853, 0.0024999999999995026, 0.0, 0.019249999999999545, -0.04899999999999949, 0.04100000000000037, 0.07624999999999993, -0.03450000000000131, -0.006000000000000227, -0.012750000000000483, 0.013500000000000512, 0.05749999999999922, -0.020250000000000767, 0.043499999999998096, 0.039749999999997954, 0.034750000000000725, -0.051249999999999574, -0.05450000000000088, -0.01249999999999929, -0.015249999999999986, 0.046499999999999986, 0.08099999999999952, 0.03300000000000125, 0.09000000000000163, -0.032999999999999474, -0.04925000000000068], zp_timestamp='2025-11-25T21:41:00')
2025-11-25T23:44:04.129 [DEBUG] [Thread-7899] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:44:04.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:44:04.224 [DEBUG] [Thread-7902] [transport.py] [_log()] starting thread (client mode): 0x7374fcd0
2025-11-25T23:44:04.224 [DEBUG] [Thread-7902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:44:04.239 [DEBUG] [Thread-7902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:44:04.239 [INFO] [Thread-7902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] client lang: <none>
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] server lang: <none>
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] kex follows: False
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] Compression: none
2025-11-25T23:44:04.247 [DEBUG] [Thread-7902] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:44:04.306 [DEBUG] [Thread-7902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:44:04.307 [DEBUG] [Thread-7902] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:44:04.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:44:04.308 [DEBUG] [Thread-7902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:44:04.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:44:04.362 [DEBUG] [Thread-7902] [transport.py] [_log()] userauth is OK
2025-11-25T23:44:04.362 [DEBUG] [Thread-7902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:44:04.362 [DEBUG] [Thread-7902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:44:04.362 [DEBUG] [Thread-7902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:44:04.362 [DEBUG] [Thread-7902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:44:04.381 [INFO] [Thread-7902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:44:04.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:44:04.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:44:05.201 [DEBUG] [Thread-7902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:44:05.201 [DEBUG] [Thread-7902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:44:05.249 [DEBUG] [Thread-7902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:44:05.249 [DEBUG] [Thread-7902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:44:05.258 [DEBUG] [Thread-7902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:44:05.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:44:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:44:05.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:44:05.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:44:05.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:44:05.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:44:05.295 [DEBUG] [Thread-7902] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:44:05.745 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:09.428 [DEBUG] [Thread-7904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:09.910 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:09.911 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:16.207 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:16.372 [DEBUG] [Thread-7905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:26.617 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:31.414 [DEBUG] [Thread-7906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:35.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:44:35.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:44:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:44:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 44, 11), 28.91, 13.29, 0.0, 12.09, 19.79, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:44:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:44:11
2025-11-25T23:44:36.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:44:36.236 [DEBUG] [Thread-7907] [transport.py] [_log()] starting thread (client mode): 0x70dd3f10
2025-11-25T23:44:36.236 [DEBUG] [Thread-7907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:44:36.259 [DEBUG] [Thread-7907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:44:36.259 [INFO] [Thread-7907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] client lang: <none>
2025-11-25T23:44:36.262 [DEBUG] [Thread-7907] [transport.py] [_log()] server lang: <none>
2025-11-25T23:44:36.263 [DEBUG] [Thread-7907] [transport.py] [_log()] kex follows: False
2025-11-25T23:44:36.263 [DEBUG] [Thread-7907] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:44:36.263 [DEBUG] [Thread-7907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:44:36.263 [DEBUG] [Thread-7907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:44:36.263 [DEBUG] [Thread-7907] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:44:36.263 [DEBUG] [Thread-7907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:44:36.263 [DEBUG] [Thread-7907] [transport.py] [_log()] Compression: none
2025-11-25T23:44:36.263 [DEBUG] [Thread-7907] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:44:36.280 [DEBUG] [Thread-7907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:44:36.281 [DEBUG] [Thread-7907] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:44:36.281 [DEBUG] [Thread-7907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:44:36.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:44:36.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:44:36.283 [DEBUG] [Thread-7907] [transport.py] [_log()] userauth is OK
2025-11-25T23:44:36.284 [DEBUG] [Thread-7907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:44:36.284 [DEBUG] [Thread-7907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:44:36.284 [DEBUG] [Thread-7907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:44:36.284 [DEBUG] [Thread-7907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:44:36.308 [INFO] [Thread-7907] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:44:36.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:44:36.935 [DEBUG] [Thread-7907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:44:36.935 [DEBUG] [Thread-7907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:44:36.936 [DEBUG] [Thread-7907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:44:36.976 [DEBUG] [Thread-7907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:44:36.977 [DEBUG] [Thread-7907] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:44:36.979 [DEBUG] [Thread-7907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:44:36.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:44:36.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:44:36.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:44:36.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:44:37.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:44:37.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:44:37.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:44:37.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:44:37.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:44:37.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.905306 -999.00  +20.30  10.17     18   -4.60 1 1 1 1 1     0    0 25.01 -0.67 ZNESW 9.1 10.2 140.8 14.3 19.9 -26.1 19.8 -25.5 19.6 -24.2 19.7 -25.2
2025-11-25T23:44:37.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:44:37.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:44:37.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.905306
2025-11-25T23:44:37.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:44:37.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:44:37.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:44:37.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:44:37.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:44:37.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:44:11', tmtdew=28.91, humidity=13.29, cloud=0.0, wind=12.09, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:44:12', seeing=0.87, atlas_timestamp='2025-11-25T21:43:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.014749999999999375, 0.01925000000000132, -0.022000000000002018, -0.009499999999999176, 0.054250000000001464, -0.019999999999999574, 0.0022500000000000853, 0.0024999999999995026, 0.0, 0.019249999999999545, -0.04899999999999949, 0.04100000000000037, 0.07624999999999993, -0.03450000000000131, -0.006000000000000227, -0.012750000000000483, 0.013500000000000512, 0.05749999999999922, -0.020250000000000767, 0.043499999999998096, 0.039749999999997954, 0.034750000000000725, -0.051249999999999574, -0.05450000000000088, -0.01249999999999929, -0.015249999999999986, 0.046499999999999986, 0.08099999999999952, 0.03300000000000125, 0.09000000000000163, -0.032999999999999474, -0.04925000000000068], zp_timestamp='2025-11-25T21:41:00')
2025-11-25T23:44:37.004 [DEBUG] [Thread-7907] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:44:37.058 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:37.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:44:37.101 [DEBUG] [Thread-7910] [transport.py] [_log()] starting thread (client mode): 0x70dd2560
2025-11-25T23:44:37.101 [DEBUG] [Thread-7910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:44:37.116 [DEBUG] [Thread-7910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:44:37.117 [INFO] [Thread-7910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:44:37.124 [DEBUG] [Thread-7910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:44:37.124 [DEBUG] [Thread-7910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:44:37.124 [DEBUG] [Thread-7910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:44:37.124 [DEBUG] [Thread-7910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:44:37.124 [DEBUG] [Thread-7910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:44:37.124 [DEBUG] [Thread-7910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] client lang: <none>
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] server lang: <none>
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] kex follows: False
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] Compression: none
2025-11-25T23:44:37.125 [DEBUG] [Thread-7910] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:44:37.182 [DEBUG] [Thread-7910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:44:37.182 [DEBUG] [Thread-7910] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:44:37.183 [DEBUG] [Thread-7910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:44:37.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:44:37.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:44:37.238 [DEBUG] [Thread-7910] [transport.py] [_log()] userauth is OK
2025-11-25T23:44:37.238 [DEBUG] [Thread-7910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:44:37.238 [DEBUG] [Thread-7910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:44:37.239 [DEBUG] [Thread-7910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:44:37.239 [DEBUG] [Thread-7910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:44:37.257 [INFO] [Thread-7910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:44:37.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:44:37.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:44:38.085 [DEBUG] [Thread-7910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:44:38.085 [DEBUG] [Thread-7910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:44:38.134 [DEBUG] [Thread-7910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:44:38.134 [DEBUG] [Thread-7910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:44:38.143 [DEBUG] [Thread-7910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:44:38.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:44:38.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:44:38.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:44:38.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:44:38.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:44:38.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:44:38.180 [DEBUG] [Thread-7910] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:44:46.449 [DEBUG] [Thread-7912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:47.512 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:44:57.947 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:01.497 [DEBUG] [Thread-7913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:08.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:45:08.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:45:08.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:45:08.418 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:08.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 44, 43), 29.06, 13.11, 0.0, 13.46, 19.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:45:08.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:44:43
2025-11-25T23:45:08.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:45:09.121 [DEBUG] [Thread-7914] [transport.py] [_log()] starting thread (client mode): 0x70dd3670
2025-11-25T23:45:09.121 [DEBUG] [Thread-7914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:45:09.141 [DEBUG] [Thread-7914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:45:09.141 [INFO] [Thread-7914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] client lang: <none>
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] server lang: <none>
2025-11-25T23:45:09.142 [DEBUG] [Thread-7914] [transport.py] [_log()] kex follows: False
2025-11-25T23:45:09.143 [DEBUG] [Thread-7914] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:45:09.143 [DEBUG] [Thread-7914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:45:09.143 [DEBUG] [Thread-7914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:45:09.143 [DEBUG] [Thread-7914] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:45:09.143 [DEBUG] [Thread-7914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:45:09.143 [DEBUG] [Thread-7914] [transport.py] [_log()] Compression: none
2025-11-25T23:45:09.143 [DEBUG] [Thread-7914] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:45:09.150 [DEBUG] [Thread-7914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:45:09.151 [DEBUG] [Thread-7914] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:45:09.151 [DEBUG] [Thread-7914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:45:09.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:45:09.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:45:09.153 [DEBUG] [Thread-7914] [transport.py] [_log()] userauth is OK
2025-11-25T23:45:09.153 [DEBUG] [Thread-7914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:45:09.153 [DEBUG] [Thread-7914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:45:09.153 [DEBUG] [Thread-7914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:45:09.153 [DEBUG] [Thread-7914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:45:09.177 [INFO] [Thread-7914] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:45:09.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:45:09.502 [DEBUG] [Thread-7916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:09.810 [DEBUG] [Thread-7914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:45:09.810 [DEBUG] [Thread-7914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:45:09.810 [DEBUG] [Thread-7914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:45:09.851 [DEBUG] [Thread-7914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:45:09.851 [DEBUG] [Thread-7914] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:45:09.855 [DEBUG] [Thread-7914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:45:09.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:45:09.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:45:09.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:45:09.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:45:09.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:45:09.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:45:09.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:45:09.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:45:09.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:45:09.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.905653 -999.00  +20.30   6.64     18   -4.50 1 1 1 1 1     0    0 24.99 -2.65 ZNESW 8.3 6.6 151.6 12.6 19.9 -26.2 19.8 -25.5 19.6 -24.2 19.8 -25.1
2025-11-25T23:45:09.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:45:09.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:45:09.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.905653
2025-11-25T23:45:09.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:45:09.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:45:09.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:45:09.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:45:09.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:45:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:44:43', tmtdew=29.06, humidity=13.11, cloud=0.0, wind=13.46, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:44:44', seeing=0.96, atlas_timestamp='2025-11-25T21:44:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.014749999999999375, 0.01925000000000132, -0.022000000000002018, -0.009499999999999176, 0.054250000000001464, -0.019999999999999574, 0.0022500000000000853, 0.0024999999999995026, 0.0, 0.019249999999999545, -0.04899999999999949, 0.04100000000000037, 0.07624999999999993, -0.03450000000000131, -0.006000000000000227, -0.012750000000000483, 0.013500000000000512, 0.05749999999999922, -0.020250000000000767, 0.043499999999998096, 0.039749999999997954, 0.034750000000000725, -0.051249999999999574, -0.05450000000000088, -0.01249999999999929, -0.015249999999999986, 0.046499999999999986, 0.08099999999999952, 0.03300000000000125, 0.09000000000000163, -0.032999999999999474, -0.04925000000000068], zp_timestamp='2025-11-25T21:41:00')
2025-11-25T23:45:09.882 [DEBUG] [Thread-7914] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:45:09.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:45:09.977 [DEBUG] [Thread-7918] [transport.py] [_log()] starting thread (client mode): 0x70d56bc0
2025-11-25T23:45:09.978 [DEBUG] [Thread-7918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:45:09.992 [DEBUG] [Thread-7918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:45:09.992 [INFO] [Thread-7918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:45:09.999 [DEBUG] [Thread-7918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] client lang: <none>
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] server lang: <none>
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] kex follows: False
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] Compression: none
2025-11-25T23:45:10.000 [DEBUG] [Thread-7918] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:45:10.058 [DEBUG] [Thread-7918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:45:10.058 [DEBUG] [Thread-7918] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:45:10.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:45:10.059 [DEBUG] [Thread-7918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:45:10.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:45:10.114 [DEBUG] [Thread-7918] [transport.py] [_log()] userauth is OK
2025-11-25T23:45:10.114 [DEBUG] [Thread-7918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:45:10.114 [DEBUG] [Thread-7918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:45:10.114 [DEBUG] [Thread-7918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:45:10.114 [DEBUG] [Thread-7918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:45:10.115 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:10.116 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:10.140 [INFO] [Thread-7918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:45:10.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:45:10.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:45:10.988 [DEBUG] [Thread-7918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:45:10.989 [DEBUG] [Thread-7918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:45:11.037 [DEBUG] [Thread-7918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:45:11.037 [DEBUG] [Thread-7918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:45:11.046 [DEBUG] [Thread-7918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:45:11.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:45:11.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:45:11.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:45:11.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:45:11.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:45:11.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:45:11.083 [DEBUG] [Thread-7918] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:45:16.529 [DEBUG] [Thread-7920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:18.851 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:29.277 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:31.569 [DEBUG] [Thread-7921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:39.672 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:41.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:45:41.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:45:41.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:45:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 45, 15), 29.14, 13.04, 0.0, 12.51, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:45:41.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:45:15
2025-11-25T23:45:41.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:45:42.046 [DEBUG] [Thread-7922] [transport.py] [_log()] starting thread (client mode): 0x70dd0040
2025-11-25T23:45:42.046 [DEBUG] [Thread-7922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:45:42.066 [DEBUG] [Thread-7922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:45:42.066 [INFO] [Thread-7922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] client lang: <none>
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] server lang: <none>
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] kex follows: False
2025-11-25T23:45:42.069 [DEBUG] [Thread-7922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:45:42.070 [DEBUG] [Thread-7922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:45:42.070 [DEBUG] [Thread-7922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:45:42.070 [DEBUG] [Thread-7922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:45:42.070 [DEBUG] [Thread-7922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:45:42.070 [DEBUG] [Thread-7922] [transport.py] [_log()] Compression: none
2025-11-25T23:45:42.070 [DEBUG] [Thread-7922] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:45:42.086 [DEBUG] [Thread-7922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:45:42.087 [DEBUG] [Thread-7922] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:45:42.087 [DEBUG] [Thread-7922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:45:42.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:45:42.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:45:42.089 [DEBUG] [Thread-7922] [transport.py] [_log()] userauth is OK
2025-11-25T23:45:42.089 [DEBUG] [Thread-7922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:45:42.089 [DEBUG] [Thread-7922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:45:42.089 [DEBUG] [Thread-7922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:45:42.089 [DEBUG] [Thread-7922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:45:42.111 [INFO] [Thread-7922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:45:42.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:45:42.736 [DEBUG] [Thread-7922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:45:42.736 [DEBUG] [Thread-7922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:45:42.736 [DEBUG] [Thread-7922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:45:42.776 [DEBUG] [Thread-7922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:45:42.776 [DEBUG] [Thread-7922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:45:42.779 [DEBUG] [Thread-7922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:45:42.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:45:42.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:45:42.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:45:42.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:45:42.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:45:42.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:45:42.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:45:42.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:45:42.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:45:42.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.906347 -999.00  +20.30   6.45     18   -4.50 1 1 1 1 1     0    0 24.65 -6.86 ZNESW 6.6 6.5 171.0 11.8 19.9 -26.1 19.8 -25.6 19.5 -24.3 19.8 -25.3
2025-11-25T23:45:42.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:45:42.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:45:42.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.906347
2025-11-25T23:45:42.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:45:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:45:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:45:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:45:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:45:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:45:15', tmtdew=29.14, humidity=13.04, cloud=0.0, wind=12.51, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:45:16', seeing=0.95, atlas_timestamp='2025-11-25T21:45:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.014749999999999375, 0.01925000000000132, -0.022000000000002018, -0.009499999999999176, 0.054250000000001464, -0.019999999999999574, 0.0022500000000000853, 0.0024999999999995026, 0.0, 0.019249999999999545, -0.04899999999999949, 0.04100000000000037, 0.07624999999999993, -0.03450000000000131, -0.006000000000000227, -0.012750000000000483, 0.013500000000000512, 0.05749999999999922, -0.020250000000000767, 0.043499999999998096, 0.039749999999997954, 0.034750000000000725, -0.051249999999999574, -0.05450000000000088, -0.01249999999999929, -0.015249999999999986, 0.046499999999999986, 0.08099999999999952, 0.03300000000000125, 0.09000000000000163, -0.032999999999999474, -0.04925000000000068], zp_timestamp='2025-11-25T21:41:00')
2025-11-25T23:45:42.805 [DEBUG] [Thread-7922] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:45:42.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:45:42.903 [DEBUG] [Thread-7925] [transport.py] [_log()] starting thread (client mode): 0x70dd0820
2025-11-25T23:45:42.903 [DEBUG] [Thread-7925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:45:42.918 [DEBUG] [Thread-7925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:45:42.918 [INFO] [Thread-7925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:45:42.925 [DEBUG] [Thread-7925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:45:42.925 [DEBUG] [Thread-7925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] client lang: <none>
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] server lang: <none>
2025-11-25T23:45:42.926 [DEBUG] [Thread-7925] [transport.py] [_log()] kex follows: False
2025-11-25T23:45:42.927 [DEBUG] [Thread-7925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:45:42.927 [DEBUG] [Thread-7925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:45:42.927 [DEBUG] [Thread-7925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:45:42.927 [DEBUG] [Thread-7925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:45:42.927 [DEBUG] [Thread-7925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:45:42.927 [DEBUG] [Thread-7925] [transport.py] [_log()] Compression: none
2025-11-25T23:45:42.927 [DEBUG] [Thread-7925] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:45:42.985 [DEBUG] [Thread-7925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:45:42.986 [DEBUG] [Thread-7925] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:45:42.986 [DEBUG] [Thread-7925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:45:42.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:45:42.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:45:43.041 [DEBUG] [Thread-7925] [transport.py] [_log()] userauth is OK
2025-11-25T23:45:43.041 [DEBUG] [Thread-7925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:45:43.041 [DEBUG] [Thread-7925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:45:43.041 [DEBUG] [Thread-7925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:45:43.041 [DEBUG] [Thread-7925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:45:43.063 [INFO] [Thread-7925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:45:43.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:45:43.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:45:43.891 [DEBUG] [Thread-7925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:45:43.891 [DEBUG] [Thread-7925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:45:43.939 [DEBUG] [Thread-7925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:45:43.939 [DEBUG] [Thread-7925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:45:43.948 [DEBUG] [Thread-7925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:45:43.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:45:43.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:45:43.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:45:43.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:45:43.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:45:43.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:45:43.988 [DEBUG] [Thread-7925] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:45:46.600 [DEBUG] [Thread-7927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:45:50.086 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:00.506 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:01.662 [DEBUG] [Thread-7928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:09.572 [DEBUG] [Thread-7929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:10.318 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:10.319 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:10.959 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:46:14.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:46:14.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:46:14.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 45, 47), 29.19, 13.06, 0.0, 12.32, 20.04, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:46:14.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:45:47
2025-11-25T23:46:14.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:46:14.923 [DEBUG] [Thread-7930] [transport.py] [_log()] starting thread (client mode): 0x7374c850
2025-11-25T23:46:14.923 [DEBUG] [Thread-7930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:46:14.944 [DEBUG] [Thread-7930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:46:14.944 [INFO] [Thread-7930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:46:14.947 [DEBUG] [Thread-7930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:46:14.948 [DEBUG] [Thread-7930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:46:14.948 [DEBUG] [Thread-7930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:46:14.948 [DEBUG] [Thread-7930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:46:14.948 [DEBUG] [Thread-7930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:46:14.948 [DEBUG] [Thread-7930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:46:14.948 [DEBUG] [Thread-7930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:46:14.948 [DEBUG] [Thread-7930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:46:14.948 [DEBUG] [Thread-7930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:46:14.949 [DEBUG] [Thread-7930] [transport.py] [_log()] client lang: <none>
2025-11-25T23:46:14.949 [DEBUG] [Thread-7930] [transport.py] [_log()] server lang: <none>
2025-11-25T23:46:14.949 [DEBUG] [Thread-7930] [transport.py] [_log()] kex follows: False
2025-11-25T23:46:14.949 [DEBUG] [Thread-7930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:46:14.949 [DEBUG] [Thread-7930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:46:14.949 [DEBUG] [Thread-7930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:46:14.949 [DEBUG] [Thread-7930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:46:14.949 [DEBUG] [Thread-7930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:46:14.949 [DEBUG] [Thread-7930] [transport.py] [_log()] Compression: none
2025-11-25T23:46:14.950 [DEBUG] [Thread-7930] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:46:14.968 [DEBUG] [Thread-7930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:46:14.969 [DEBUG] [Thread-7930] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:46:14.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:46:14.970 [DEBUG] [Thread-7930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:46:14.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:46:14.973 [DEBUG] [Thread-7930] [transport.py] [_log()] userauth is OK
2025-11-25T23:46:14.973 [DEBUG] [Thread-7930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:46:14.973 [DEBUG] [Thread-7930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:46:14.973 [DEBUG] [Thread-7930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:46:14.973 [DEBUG] [Thread-7930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:46:14.992 [INFO] [Thread-7930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:46:14.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:46:15.605 [DEBUG] [Thread-7930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:46:15.605 [DEBUG] [Thread-7930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:46:15.605 [DEBUG] [Thread-7930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:46:15.646 [DEBUG] [Thread-7930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:46:15.646 [DEBUG] [Thread-7930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:46:15.649 [DEBUG] [Thread-7930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:46:15.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:46:15.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:46:15.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:46:15.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:46:15.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:46:15.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:46:15.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:46:15.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:46:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:46:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.906695 -999.00  +20.20   7.65     18   -4.60 1 1 1 1 1     0    0 24.20 -10.08 ZNESW 9.7 7.7 148.0 10.3 19.8 -26.2 19.9 -25.6 19.5 -24.4 19.7 -25.3
2025-11-25T23:46:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:46:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:46:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.906695
2025-11-25T23:46:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:46:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:46:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:46:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:46:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:46:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:45:47', tmtdew=29.19, humidity=13.06, cloud=0.0, wind=12.32, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:45:48', seeing=0.99, atlas_timestamp='2025-11-25T21:45:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.00975000000000037, -0.008249999999998536, 0.01249999999999929, 0.025000000000000355, 0.08024999999999949, 0.0039999999999995595, -0.0017499999999994742, 0.02949999999999875, -0.01899999999999835, 0.04124999999999979, -0.040000000000000924, 0.08899999999999864, 0.10574999999999868, -0.04449999999999932, -0.009999999999999787, -0.010749999999999815, 0.018499999999999517, 0.021499999999997854, -0.04275000000000162, 0.021999999999998465, 0.07874999999999943, 0.026750000000001606, -0.01124999999999865, -0.010000000000001563, -0.0365000000000002, 0.010749999999999815, 0.03149999999999942, 0.11550000000000082, 0.07700000000000173, 0.07550000000000168, -0.019499999999998963, -0.03625000000000078], zp_timestamp='2025-11-25T21:44:00')
2025-11-25T23:46:15.669 [DEBUG] [Thread-7930] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:46:15.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:46:15.765 [DEBUG] [Thread-7933] [transport.py] [_log()] starting thread (client mode): 0x70dd3d30
2025-11-25T23:46:15.765 [DEBUG] [Thread-7933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:46:15.780 [DEBUG] [Thread-7933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:46:15.780 [INFO] [Thread-7933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:46:15.788 [DEBUG] [Thread-7933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:46:15.788 [DEBUG] [Thread-7933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:46:15.788 [DEBUG] [Thread-7933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:46:15.789 [DEBUG] [Thread-7933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:46:15.789 [DEBUG] [Thread-7933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:46:15.789 [DEBUG] [Thread-7933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:46:15.789 [DEBUG] [Thread-7933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:46:15.789 [DEBUG] [Thread-7933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:46:15.789 [DEBUG] [Thread-7933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:46:15.789 [DEBUG] [Thread-7933] [transport.py] [_log()] client lang: <none>
2025-11-25T23:46:15.789 [DEBUG] [Thread-7933] [transport.py] [_log()] server lang: <none>
2025-11-25T23:46:15.789 [DEBUG] [Thread-7933] [transport.py] [_log()] kex follows: False
2025-11-25T23:46:15.790 [DEBUG] [Thread-7933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:46:15.790 [DEBUG] [Thread-7933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:46:15.790 [DEBUG] [Thread-7933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:46:15.790 [DEBUG] [Thread-7933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:46:15.790 [DEBUG] [Thread-7933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:46:15.790 [DEBUG] [Thread-7933] [transport.py] [_log()] Compression: none
2025-11-25T23:46:15.790 [DEBUG] [Thread-7933] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:46:15.845 [DEBUG] [Thread-7933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:46:15.846 [DEBUG] [Thread-7933] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:46:15.847 [DEBUG] [Thread-7933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:46:15.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:46:15.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:46:15.904 [DEBUG] [Thread-7933] [transport.py] [_log()] userauth is OK
2025-11-25T23:46:15.905 [DEBUG] [Thread-7933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:46:15.905 [DEBUG] [Thread-7933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:46:15.905 [DEBUG] [Thread-7933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:46:15.905 [DEBUG] [Thread-7933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:46:15.924 [INFO] [Thread-7933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:46:15.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:46:15.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:46:16.695 [DEBUG] [Thread-7935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:16.969 [DEBUG] [Thread-7933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:46:16.970 [DEBUG] [Thread-7933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:46:17.018 [DEBUG] [Thread-7933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:46:17.018 [DEBUG] [Thread-7933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:46:17.027 [DEBUG] [Thread-7933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:46:17.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:46:17.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:46:17.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:46:17.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:46:17.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:46:17.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:46:17.063 [DEBUG] [Thread-7933] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:46:21.371 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:31.770 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:31.772 [DEBUG] [Thread-7936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:42.167 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:46.807 [DEBUG] [Thread-7937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:46:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:46:47.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:46:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:46:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 46, 19), 29.15, 13.09, 0.0, 12.05, 20.04, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:46:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:46:19
2025-11-25T23:46:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:46:48.057 [DEBUG] [Thread-7938] [transport.py] [_log()] starting thread (client mode): 0x70d68280
2025-11-25T23:46:48.058 [DEBUG] [Thread-7938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:46:48.078 [DEBUG] [Thread-7938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:46:48.078 [INFO] [Thread-7938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:46:48.081 [DEBUG] [Thread-7938] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] client lang: <none>
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] server lang: <none>
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] kex follows: False
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] Compression: none
2025-11-25T23:46:48.082 [DEBUG] [Thread-7938] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:46:48.098 [DEBUG] [Thread-7938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:46:48.098 [DEBUG] [Thread-7938] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:46:48.098 [DEBUG] [Thread-7938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:46:48.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:46:48.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:46:48.099 [DEBUG] [Thread-7938] [transport.py] [_log()] userauth is OK
2025-11-25T23:46:48.099 [DEBUG] [Thread-7938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:46:48.099 [DEBUG] [Thread-7938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:46:48.099 [DEBUG] [Thread-7938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:46:48.099 [DEBUG] [Thread-7938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:46:48.111 [INFO] [Thread-7938] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:46:48.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:46:48.780 [DEBUG] [Thread-7938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:46:48.780 [DEBUG] [Thread-7938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:46:48.780 [DEBUG] [Thread-7938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:46:48.821 [DEBUG] [Thread-7938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:46:48.821 [DEBUG] [Thread-7938] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:46:48.824 [DEBUG] [Thread-7938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:46:48.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:46:48.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:46:48.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:46:48.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:46:48.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:46:48.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:46:48.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.907042 -999.00  +20.20   8.62     18   -4.60 1 1 1 1 1     0    0 24.80 -11.85 ZNESW 7.7 8.6 154.4 14.2 19.8 -26.3 19.9 -25.5 19.6 -24.4 19.7 -25.2
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.907042
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:46:48.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:46:48.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:46:19', tmtdew=29.15, humidity=13.09, cloud=0.0, wind=12.05, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:46:20', seeing=0.77, atlas_timestamp='2025-11-25T21:46:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.00975000000000037, -0.008249999999998536, 0.01249999999999929, 0.025000000000000355, 0.08024999999999949, 0.0039999999999995595, -0.0017499999999994742, 0.02949999999999875, -0.01899999999999835, 0.04124999999999979, -0.040000000000000924, 0.08899999999999864, 0.10574999999999868, -0.04449999999999932, -0.009999999999999787, -0.010749999999999815, 0.018499999999999517, 0.021499999999997854, -0.04275000000000162, 0.021999999999998465, 0.07874999999999943, 0.026750000000001606, -0.01124999999999865, -0.010000000000001563, -0.0365000000000002, 0.010749999999999815, 0.03149999999999942, 0.11550000000000082, 0.07700000000000173, 0.07550000000000168, -0.019499999999998963, -0.03625000000000078], zp_timestamp='2025-11-25T21:44:00')
2025-11-25T23:46:48.841 [DEBUG] [Thread-7938] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:46:48.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:46:48.928 [DEBUG] [Thread-7941] [transport.py] [_log()] starting thread (client mode): 0x70dbc9a0
2025-11-25T23:46:48.928 [DEBUG] [Thread-7941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:46:48.942 [DEBUG] [Thread-7941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:46:48.942 [INFO] [Thread-7941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] client lang: <none>
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] server lang: <none>
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] kex follows: False
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] Compression: none
2025-11-25T23:46:48.950 [DEBUG] [Thread-7941] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:46:49.007 [DEBUG] [Thread-7941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:46:49.007 [DEBUG] [Thread-7941] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:46:49.008 [DEBUG] [Thread-7941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:46:49.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:46:49.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:46:49.064 [DEBUG] [Thread-7941] [transport.py] [_log()] userauth is OK
2025-11-25T23:46:49.064 [DEBUG] [Thread-7941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:46:49.064 [DEBUG] [Thread-7941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:46:49.064 [DEBUG] [Thread-7941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:46:49.064 [DEBUG] [Thread-7941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:46:49.078 [INFO] [Thread-7941] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:46:49.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:46:49.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:46:49.942 [DEBUG] [Thread-7941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:46:49.942 [DEBUG] [Thread-7941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:46:49.990 [DEBUG] [Thread-7941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:46:49.990 [DEBUG] [Thread-7941] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:46:49.998 [DEBUG] [Thread-7941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:46:50.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:46:50.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:46:50.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:46:50.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:46:50.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:46:50.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:46:50.030 [DEBUG] [Thread-7941] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:46:52.563 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:01.838 [DEBUG] [Thread-7943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:02.960 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:09.649 [DEBUG] [Thread-7944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:10.518 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:10.520 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:13.356 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:16.883 [DEBUG] [Thread-7945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:20.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:47:20.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:47: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
2025-11-25T23:47:20.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 46, 51), 29.21, 13.16, 0.0, 14.68, 19.97, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:47:20.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:46:51
2025-11-25T23:47:20.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:47:20.975 [DEBUG] [Thread-7946] [transport.py] [_log()] starting thread (client mode): 0x7374ceb0
2025-11-25T23:47:20.975 [DEBUG] [Thread-7946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:47:20.995 [DEBUG] [Thread-7946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:47:20.995 [INFO] [Thread-7946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:47:20.998 [DEBUG] [Thread-7946] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:47:20.998 [DEBUG] [Thread-7946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] client lang: <none>
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] server lang: <none>
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] kex follows: False
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:47:20.999 [DEBUG] [Thread-7946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:47:21.000 [DEBUG] [Thread-7946] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:47:21.000 [DEBUG] [Thread-7946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:47:21.000 [DEBUG] [Thread-7946] [transport.py] [_log()] Compression: none
2025-11-25T23:47:21.000 [DEBUG] [Thread-7946] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:47:21.018 [DEBUG] [Thread-7946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:47:21.018 [DEBUG] [Thread-7946] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:47:21.019 [DEBUG] [Thread-7946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:47:21.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:47:21.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:47:21.061 [DEBUG] [Thread-7946] [transport.py] [_log()] userauth is OK
2025-11-25T23:47:21.062 [DEBUG] [Thread-7946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:47:21.062 [DEBUG] [Thread-7946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:47:21.062 [DEBUG] [Thread-7946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:47:21.062 [DEBUG] [Thread-7946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:47:21.098 [INFO] [Thread-7946] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:47:21.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:47:21.761 [DEBUG] [Thread-7946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:47:21.761 [DEBUG] [Thread-7946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:47:21.762 [DEBUG] [Thread-7946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:47:21.801 [DEBUG] [Thread-7946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:47:21.802 [DEBUG] [Thread-7946] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:47:21.805 [DEBUG] [Thread-7946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:47:21.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:47:21.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:47:21.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:47:21.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:47:21.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:47:21.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:47:21.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:47:21.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:47:21.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:47:21.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.907389 -999.00  +20.10  10.89     18   -4.60 1 1 1 1 1     0    0 24.41 -13.54 ZNESW 9.0 10.9 166.8 12.6 19.9 -26.1 19.8 -25.7 19.6 -24.2 19.7 -25.4
2025-11-25T23:47:21.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:47:21.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:47:21.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.907389
2025-11-25T23:47:21.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:47:21.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:47:21.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:47:21.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:47:21.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:47:21.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:46:51', tmtdew=29.21, humidity=13.16, cloud=0.0, wind=14.68, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:46:52', seeing=0.77, atlas_timestamp='2025-11-25T21:46:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.00975000000000037, -0.008249999999998536, 0.01249999999999929, 0.025000000000000355, 0.08024999999999949, 0.0039999999999995595, -0.0017499999999994742, 0.02949999999999875, -0.01899999999999835, 0.04124999999999979, -0.040000000000000924, 0.08899999999999864, 0.10574999999999868, -0.04449999999999932, -0.009999999999999787, -0.010749999999999815, 0.018499999999999517, 0.021499999999997854, -0.04275000000000162, 0.021999999999998465, 0.07874999999999943, 0.026750000000001606, -0.01124999999999865, -0.010000000000001563, -0.0365000000000002, 0.010749999999999815, 0.03149999999999942, 0.11550000000000082, 0.07700000000000173, 0.07550000000000168, -0.019499999999998963, -0.03625000000000078], zp_timestamp='2025-11-25T21:44:00')
2025-11-25T23:47:21.831 [DEBUG] [Thread-7946] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:47:21.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:47:21.928 [DEBUG] [Thread-7949] [transport.py] [_log()] starting thread (client mode): 0x70d56500
2025-11-25T23:47:21.929 [DEBUG] [Thread-7949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:47:21.943 [DEBUG] [Thread-7949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:47:21.943 [INFO] [Thread-7949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:47:21.951 [DEBUG] [Thread-7949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:47:21.951 [DEBUG] [Thread-7949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:47:21.951 [DEBUG] [Thread-7949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:47:21.951 [DEBUG] [Thread-7949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:47:21.951 [DEBUG] [Thread-7949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:47:21.951 [DEBUG] [Thread-7949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] client lang: <none>
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] server lang: <none>
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] kex follows: False
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] Compression: none
2025-11-25T23:47:21.952 [DEBUG] [Thread-7949] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:47:22.009 [DEBUG] [Thread-7949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:47:22.010 [DEBUG] [Thread-7949] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:47:22.010 [DEBUG] [Thread-7949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:47:22.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:47:22.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:47:22.064 [DEBUG] [Thread-7949] [transport.py] [_log()] userauth is OK
2025-11-25T23:47:22.064 [DEBUG] [Thread-7949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:47:22.065 [DEBUG] [Thread-7949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:47:22.065 [DEBUG] [Thread-7949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:47:22.065 [DEBUG] [Thread-7949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:47:22.083 [INFO] [Thread-7949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:47:22.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:47:22.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:47:22.939 [DEBUG] [Thread-7949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:47:22.939 [DEBUG] [Thread-7949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:47:22.987 [DEBUG] [Thread-7949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:47:22.987 [DEBUG] [Thread-7949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:47:22.995 [DEBUG] [Thread-7949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:47:23.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:47:23.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:47:23.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:47:23.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:47:23.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:47:23.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:47:23.026 [DEBUG] [Thread-7949] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:47:23.732 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:31.915 [DEBUG] [Thread-7951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:34.126 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:44.544 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:46.968 [DEBUG] [Thread-7952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:47:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:47:53.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:47:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:47:53.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 47, 24), 29.18, 13.18, 0.0, 13.98, 19.87, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:47:53.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:47:24
2025-11-25T23:47:53.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:47:53.947 [DEBUG] [Thread-7953] [transport.py] [_log()] starting thread (client mode): 0x70d55390
2025-11-25T23:47:53.948 [DEBUG] [Thread-7953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:47:53.968 [DEBUG] [Thread-7953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:47:53.968 [INFO] [Thread-7953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] client lang: <none>
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] server lang: <none>
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] kex follows: False
2025-11-25T23:47:53.971 [DEBUG] [Thread-7953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:47:53.972 [DEBUG] [Thread-7953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:47:53.972 [DEBUG] [Thread-7953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:47:53.972 [DEBUG] [Thread-7953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:47:53.972 [DEBUG] [Thread-7953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:47:53.972 [DEBUG] [Thread-7953] [transport.py] [_log()] Compression: none
2025-11-25T23:47:53.972 [DEBUG] [Thread-7953] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:47:53.990 [DEBUG] [Thread-7953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:47:53.991 [DEBUG] [Thread-7953] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:47:53.991 [DEBUG] [Thread-7953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:47:53.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:47:53.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:47:53.993 [DEBUG] [Thread-7953] [transport.py] [_log()] userauth is OK
2025-11-25T23:47:53.994 [DEBUG] [Thread-7953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:47:53.994 [DEBUG] [Thread-7953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:47:53.994 [DEBUG] [Thread-7953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:47:53.994 [DEBUG] [Thread-7953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:47:54.018 [INFO] [Thread-7953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:47:54.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:47:54.656 [DEBUG] [Thread-7953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:47:54.657 [DEBUG] [Thread-7953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:47:54.657 [DEBUG] [Thread-7953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:47:54.698 [DEBUG] [Thread-7953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:47:54.698 [DEBUG] [Thread-7953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:47:54.701 [DEBUG] [Thread-7953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:47:54.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:47:54.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:47:54.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:47:54.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:47:54.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:47:54.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:47:54.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:47:54.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:47:54.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:47:54.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.907736 -999.00  +20.10  10.76     18   -4.70 1 1 1 1 1     0    0 25.01 -17.84 ZNESW 8.4 10.8 163.8 14.1 19.8 -26.2 19.8 -25.6 19.5 -24.4 19.7 -25.2
2025-11-25T23:47:54.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:47:54.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:47:54.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.907736
2025-11-25T23:47:54.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:47:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:47:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:47:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:47:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:47:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:47:24', tmtdew=29.18, humidity=13.18, cloud=0.0, wind=13.98, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:47:24', seeing=0.68, atlas_timestamp='2025-11-25T21:47:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.00975000000000037, -0.008249999999998536, 0.01249999999999929, 0.025000000000000355, 0.08024999999999949, 0.0039999999999995595, -0.0017499999999994742, 0.02949999999999875, -0.01899999999999835, 0.04124999999999979, -0.040000000000000924, 0.08899999999999864, 0.10574999999999868, -0.04449999999999932, -0.009999999999999787, -0.010749999999999815, 0.018499999999999517, 0.021499999999997854, -0.04275000000000162, 0.021999999999998465, 0.07874999999999943, 0.026750000000001606, -0.01124999999999865, -0.010000000000001563, -0.0365000000000002, 0.010749999999999815, 0.03149999999999942, 0.11550000000000082, 0.07700000000000173, 0.07550000000000168, -0.019499999999998963, -0.03625000000000078], zp_timestamp='2025-11-25T21:44:00')
2025-11-25T23:47:54.727 [DEBUG] [Thread-7953] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:47:54.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:47:54.960 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:02.000 [DEBUG] [Thread-7956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:05.359 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:09.731 [DEBUG] [Thread-7957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:10.721 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:10.723 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:15.759 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:17.043 [DEBUG] [Thread-7958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:26.169 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:32.079 [DEBUG] [Thread-7959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:36.586 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:46.984 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:47.113 [DEBUG] [Thread-7960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:48:57.378 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:02.148 [DEBUG] [Thread-7961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:07.832 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:09.809 [DEBUG] [Thread-7962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:10.934 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:10.935 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:17.180 [DEBUG] [Thread-7963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:18.249 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:28.666 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:32.213 [DEBUG] [Thread-7964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:39.060 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:47.249 [DEBUG] [Thread-7965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:49.445 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:49:59.843 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:02.283 [DEBUG] [Thread-7966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:09.613 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-25T23:50:09.887 [DEBUG] [Thread-7967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:10.218 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:11.136 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:11.138 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:17.320 [DEBUG] [Thread-7968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:20.598 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:30.995 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:32.353 [DEBUG] [Thread-7969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:39.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:50:39.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:50:39.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:50:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 50, 36), 29.33, 13.04, 0.0, 13.55, 20.01, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:50:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:50:36
2025-11-25T23:50:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:50:40.596 [DEBUG] [Thread-7970] [transport.py] [_log()] starting thread (client mode): 0x70d3b760
2025-11-25T23:50:40.596 [DEBUG] [Thread-7970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:50:40.616 [DEBUG] [Thread-7970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:50:40.616 [INFO] [Thread-7970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] client lang: <none>
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] server lang: <none>
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] kex follows: False
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:50:40.620 [DEBUG] [Thread-7970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:50:40.621 [DEBUG] [Thread-7970] [transport.py] [_log()] Compression: none
2025-11-25T23:50:40.621 [DEBUG] [Thread-7970] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:50:40.639 [DEBUG] [Thread-7970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:50:40.639 [DEBUG] [Thread-7970] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:50:40.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:50:40.640 [DEBUG] [Thread-7970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:50:40.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:50:40.643 [DEBUG] [Thread-7970] [transport.py] [_log()] userauth is OK
2025-11-25T23:50:40.643 [DEBUG] [Thread-7970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:50:40.643 [DEBUG] [Thread-7970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:50:40.643 [DEBUG] [Thread-7970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:50:40.643 [DEBUG] [Thread-7970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:50:40.664 [INFO] [Thread-7970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:50:40.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:50:41.278 [DEBUG] [Thread-7970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:50:41.279 [DEBUG] [Thread-7970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:50:41.279 [DEBUG] [Thread-7970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:50:41.320 [DEBUG] [Thread-7970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:50:41.320 [DEBUG] [Thread-7970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:50:41.324 [DEBUG] [Thread-7970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:50:41.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:50:41.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:50:41.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:50:41.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:50:41.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:50:41.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:50:41.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:50:41.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:50:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:50:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.909819 -999.00  +20.30   9.52     18   -4.60 1 1 1 1 1     0    0 24.11 -20.36 ZNESW 10.2 9.5 160.8 13.1 19.8 -26.1 19.8 -25.5 19.5 -24.3 19.7 -25.2
2025-11-25T23:50:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:50:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:50:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.909819
2025-11-25T23:50:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:50:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:50:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:50:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:50:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:50:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:50:36', tmtdew=29.33, humidity=13.04, cloud=0.0, wind=13.55, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:50:36', seeing=0.9, atlas_timestamp='2025-11-25T21:50:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.00975000000000037, -0.008249999999998536, 0.01249999999999929, 0.025000000000000355, 0.08024999999999949, 0.0039999999999995595, -0.0017499999999994742, 0.02949999999999875, -0.01899999999999835, 0.04124999999999979, -0.040000000000000924, 0.08899999999999864, 0.10574999999999868, -0.04449999999999932, -0.009999999999999787, -0.010749999999999815, 0.018499999999999517, 0.021499999999997854, -0.04275000000000162, 0.021999999999998465, 0.07874999999999943, 0.026750000000001606, -0.01124999999999865, -0.010000000000001563, -0.0365000000000002, 0.010749999999999815, 0.03149999999999942, 0.11550000000000082, 0.07700000000000173, 0.07550000000000168, -0.019499999999998963, -0.03625000000000078], zp_timestamp='2025-11-25T21:47:00')
2025-11-25T23:50:41.351 [DEBUG] [Thread-7970] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:50:41.409 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:41.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:50:41.446 [DEBUG] [Thread-7973] [transport.py] [_log()] starting thread (client mode): 0x7374d390
2025-11-25T23:50:41.446 [DEBUG] [Thread-7973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:50:41.461 [DEBUG] [Thread-7973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:50:41.461 [INFO] [Thread-7973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:50:41.468 [DEBUG] [Thread-7973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:50:41.468 [DEBUG] [Thread-7973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:50:41.468 [DEBUG] [Thread-7973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:50:41.468 [DEBUG] [Thread-7973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] client lang: <none>
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] server lang: <none>
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] kex follows: False
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] Compression: none
2025-11-25T23:50:41.469 [DEBUG] [Thread-7973] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:50:41.531 [DEBUG] [Thread-7973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:50:41.532 [DEBUG] [Thread-7973] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:50:41.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:50:41.533 [DEBUG] [Thread-7973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:50:41.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:50:41.588 [DEBUG] [Thread-7973] [transport.py] [_log()] userauth is OK
2025-11-25T23:50:41.588 [DEBUG] [Thread-7973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:50:41.588 [DEBUG] [Thread-7973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:50:41.588 [DEBUG] [Thread-7973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:50:41.588 [DEBUG] [Thread-7973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:50:41.606 [INFO] [Thread-7973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:50:41.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:50:41.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:50:42.415 [DEBUG] [Thread-7973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:50:42.415 [DEBUG] [Thread-7973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:50:42.463 [DEBUG] [Thread-7973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:50:42.463 [DEBUG] [Thread-7973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:50:42.472 [DEBUG] [Thread-7973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:50:42.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:50:42.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:50:42.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:50:42.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:50:42.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:50:42.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:50:42.511 [DEBUG] [Thread-7973] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:50:47.384 [DEBUG] [Thread-7975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:50:51.792 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:02.203 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:02.438 [DEBUG] [Thread-7976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:09.959 [DEBUG] [Thread-7977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:11.342 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:11.343 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:51:12.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:51:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:51:12.564 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 51, 8), 29.37, 13.04, 0.0, 12.53, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:51:13.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:51:08
2025-11-25T23:51:13.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:51:13.459 [DEBUG] [Thread-7978] [transport.py] [_log()] starting thread (client mode): 0x7374f220
2025-11-25T23:51:13.459 [DEBUG] [Thread-7978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:51:13.478 [DEBUG] [Thread-7978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:51:13.479 [INFO] [Thread-7978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:51:13.482 [DEBUG] [Thread-7978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:51:13.482 [DEBUG] [Thread-7978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] client lang: <none>
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] server lang: <none>
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] kex follows: False
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] Compression: none
2025-11-25T23:51:13.483 [DEBUG] [Thread-7978] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:51:13.500 [DEBUG] [Thread-7978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:51:13.501 [DEBUG] [Thread-7978] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:51:13.501 [DEBUG] [Thread-7978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:51:13.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:51:13.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:51:13.503 [DEBUG] [Thread-7978] [transport.py] [_log()] userauth is OK
2025-11-25T23:51:13.503 [DEBUG] [Thread-7978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:51:13.504 [DEBUG] [Thread-7978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:51:13.504 [DEBUG] [Thread-7978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:51:13.504 [DEBUG] [Thread-7978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:51:13.528 [INFO] [Thread-7978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:51:13.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:51:14.155 [DEBUG] [Thread-7978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:51:14.155 [DEBUG] [Thread-7978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:51:14.156 [DEBUG] [Thread-7978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:51:14.197 [DEBUG] [Thread-7978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:51:14.197 [DEBUG] [Thread-7978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:51:14.200 [DEBUG] [Thread-7978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:51:14.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:51:14.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:51:14.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:51:14.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:51:14.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:51:14.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:51:14.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:51:14.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:51:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:51:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.910167 -999.00  +20.20   8.24     18   -4.70 1 1 1 1 1     0    0 23.98 -22.17 ZNESW 10.1 8.2 153.0 13.5 19.8 -26.1 19.8 -25.7 19.5 -24.0 19.7 -25.3
2025-11-25T23:51:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:51:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:51:14.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.910167
2025-11-25T23:51:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:51:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:51:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:51:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:51:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:51:14.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:51:08', tmtdew=29.37, humidity=13.04, cloud=0.0, wind=12.53, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:51:08', seeing=0.87, atlas_timestamp='2025-11-25T21:50:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.00975000000000037, -0.008249999999998536, 0.01249999999999929, 0.025000000000000355, 0.08024999999999949, 0.0039999999999995595, -0.0017499999999994742, 0.02949999999999875, -0.01899999999999835, 0.04124999999999979, -0.040000000000000924, 0.08899999999999864, 0.10574999999999868, -0.04449999999999932, -0.009999999999999787, -0.010749999999999815, 0.018499999999999517, 0.021499999999997854, -0.04275000000000162, 0.021999999999998465, 0.07874999999999943, 0.026750000000001606, -0.01124999999999865, -0.010000000000001563, -0.0365000000000002, 0.010749999999999815, 0.03149999999999942, 0.11550000000000082, 0.07700000000000173, 0.07550000000000168, -0.019499999999998963, -0.03625000000000078], zp_timestamp='2025-11-25T21:47:00')
2025-11-25T23:51:14.226 [DEBUG] [Thread-7978] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:51:14.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:51:14.325 [DEBUG] [Thread-7981] [transport.py] [_log()] starting thread (client mode): 0x70d6b250
2025-11-25T23:51:14.325 [DEBUG] [Thread-7981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:51:14.340 [DEBUG] [Thread-7981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:51:14.340 [INFO] [Thread-7981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:51:14.347 [DEBUG] [Thread-7981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:51:14.347 [DEBUG] [Thread-7981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] client lang: <none>
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] server lang: <none>
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] kex follows: False
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] Compression: none
2025-11-25T23:51:14.348 [DEBUG] [Thread-7981] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:51:14.407 [DEBUG] [Thread-7981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:51:14.408 [DEBUG] [Thread-7981] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:51:14.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:51:14.409 [DEBUG] [Thread-7981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:51:14.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:51:14.463 [DEBUG] [Thread-7981] [transport.py] [_log()] userauth is OK
2025-11-25T23:51:14.463 [DEBUG] [Thread-7981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:51:14.463 [DEBUG] [Thread-7981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:51:14.463 [DEBUG] [Thread-7981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:51:14.463 [DEBUG] [Thread-7981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:51:14.485 [INFO] [Thread-7981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:51:14.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:51:14.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:51:15.388 [DEBUG] [Thread-7981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:51:15.388 [DEBUG] [Thread-7981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:51:15.437 [DEBUG] [Thread-7981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:51:15.437 [DEBUG] [Thread-7981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:51:15.446 [DEBUG] [Thread-7981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:51:15.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:51:15.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:51:15.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:51:15.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:51:15.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:51:15.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:51:15.482 [DEBUG] [Thread-7981] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:51:17.469 [DEBUG] [Thread-7983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:22.943 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:32.535 [DEBUG] [Thread-7984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:33.321 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:43.711 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:51:45.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:51:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:51:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 51, 40), 29.33, 13.09, 0.0, 12.46, 19.96, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:51:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:51:40
2025-11-25T23:51:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:51:46.487 [DEBUG] [Thread-7985] [transport.py] [_log()] starting thread (client mode): 0x70d543d0
2025-11-25T23:51:46.487 [DEBUG] [Thread-7985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:51:46.508 [DEBUG] [Thread-7985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:51:46.508 [INFO] [Thread-7985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:51:46.509 [DEBUG] [Thread-7985] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:51:46.509 [DEBUG] [Thread-7985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:51:46.509 [DEBUG] [Thread-7985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:51:46.509 [DEBUG] [Thread-7985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:51:46.509 [DEBUG] [Thread-7985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:51:46.509 [DEBUG] [Thread-7985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:51:46.509 [DEBUG] [Thread-7985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:51:46.509 [DEBUG] [Thread-7985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:51:46.509 [DEBUG] [Thread-7985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] client lang: <none>
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] server lang: <none>
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] kex follows: False
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] Compression: none
2025-11-25T23:51:46.510 [DEBUG] [Thread-7985] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:51:46.517 [DEBUG] [Thread-7985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:51:46.517 [DEBUG] [Thread-7985] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:51:46.517 [DEBUG] [Thread-7985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:51:46.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:51:46.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:51:46.518 [DEBUG] [Thread-7985] [transport.py] [_log()] userauth is OK
2025-11-25T23:51:46.518 [DEBUG] [Thread-7985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:51:46.518 [DEBUG] [Thread-7985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:51:46.518 [DEBUG] [Thread-7985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:51:46.518 [DEBUG] [Thread-7985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:51:46.528 [INFO] [Thread-7985] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:51:46.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:51:47.171 [DEBUG] [Thread-7985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:51:47.171 [DEBUG] [Thread-7985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:51:47.172 [DEBUG] [Thread-7985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:51:47.212 [DEBUG] [Thread-7985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:51:47.212 [DEBUG] [Thread-7985] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:51:47.214 [DEBUG] [Thread-7985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:51:47.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:51:47.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:51:47.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:51:47.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:51:47.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:51:47.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:51:47.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:51:47.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:51:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:51:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.910514 -999.00  +20.20  11.62     18   -4.70 1 1 1 1 1     0    0 23.97 -21.39 ZNESW 13.1 11.6 168.1 13.4 19.9 -26.2 19.8 -25.6 19.5 -24.0 19.7 -25.2
2025-11-25T23:51:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:51:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:51:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.910514
2025-11-25T23:51:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:51:47.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:51:47.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:51:47.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:51:47.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:51:47.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:51:40', tmtdew=29.33, humidity=13.09, cloud=0.0, wind=12.46, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:51:40', seeing=0.87, atlas_timestamp='2025-11-25T21:51:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.00975000000000037, -0.008249999999998536, 0.01249999999999929, 0.025000000000000355, 0.08024999999999949, 0.0039999999999995595, -0.0017499999999994742, 0.02949999999999875, -0.01899999999999835, 0.04124999999999979, -0.040000000000000924, 0.08899999999999864, 0.10574999999999868, -0.04449999999999932, -0.009999999999999787, -0.010749999999999815, 0.018499999999999517, 0.021499999999997854, -0.04275000000000162, 0.021999999999998465, 0.07874999999999943, 0.026750000000001606, -0.01124999999999865, -0.010000000000001563, -0.0365000000000002, 0.010749999999999815, 0.03149999999999942, 0.11550000000000082, 0.07700000000000173, 0.07550000000000168, -0.019499999999998963, -0.03625000000000078], zp_timestamp='2025-11-25T21:47:00')
2025-11-25T23:51:47.233 [DEBUG] [Thread-7985] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:51:47.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:51:47.321 [DEBUG] [Thread-7988] [transport.py] [_log()] starting thread (client mode): 0x70d3b9d0
2025-11-25T23:51:47.321 [DEBUG] [Thread-7988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:51:47.337 [DEBUG] [Thread-7988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:51:47.337 [INFO] [Thread-7988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:51:47.347 [DEBUG] [Thread-7988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] client lang: <none>
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] server lang: <none>
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] kex follows: False
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] Compression: none
2025-11-25T23:51:47.348 [DEBUG] [Thread-7988] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:51:47.402 [DEBUG] [Thread-7988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:51:47.402 [DEBUG] [Thread-7988] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:51:47.402 [DEBUG] [Thread-7988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:51:47.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:51:47.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:51:47.458 [DEBUG] [Thread-7988] [transport.py] [_log()] userauth is OK
2025-11-25T23:51:47.458 [DEBUG] [Thread-7988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:51:47.458 [DEBUG] [Thread-7988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:51:47.458 [DEBUG] [Thread-7988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:51:47.458 [DEBUG] [Thread-7988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:51:47.476 [INFO] [Thread-7988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:51:47.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:51:47.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:51:47.566 [DEBUG] [Thread-7990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:51:48.370 [DEBUG] [Thread-7988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:51:48.370 [DEBUG] [Thread-7988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:51:48.418 [DEBUG] [Thread-7988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:51:48.418 [DEBUG] [Thread-7988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:51:48.426 [DEBUG] [Thread-7988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:51:48.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:51:48.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:51:48.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:51:48.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:51:48.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:51:48.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:51:48.458 [DEBUG] [Thread-7988] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:51:54.098 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:02.616 [DEBUG] [Thread-7991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:04.508 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:10.031 [DEBUG] [Thread-7992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:11.617 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:11.618 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:14.883 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:17.650 [DEBUG] [Thread-7993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:18.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:52:18.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:52:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:52:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 52, 12), 29.34, 13.08, 0.0, 12.74, 19.96, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:52:19.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:52:12
2025-11-25T23:52:19.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:52:19.428 [DEBUG] [Thread-7994] [transport.py] [_log()] starting thread (client mode): 0x70d3a290
2025-11-25T23:52:19.428 [DEBUG] [Thread-7994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:52:19.447 [DEBUG] [Thread-7994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:52:19.447 [INFO] [Thread-7994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:52:19.450 [DEBUG] [Thread-7994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] client lang: <none>
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] server lang: <none>
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] kex follows: False
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:52:19.451 [DEBUG] [Thread-7994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:52:19.452 [DEBUG] [Thread-7994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:52:19.452 [DEBUG] [Thread-7994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:52:19.452 [DEBUG] [Thread-7994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:52:19.452 [DEBUG] [Thread-7994] [transport.py] [_log()] Compression: none
2025-11-25T23:52:19.452 [DEBUG] [Thread-7994] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:52:19.466 [DEBUG] [Thread-7994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:52:19.467 [DEBUG] [Thread-7994] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:52:19.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:52:19.468 [DEBUG] [Thread-7994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:52:19.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:52:19.509 [DEBUG] [Thread-7994] [transport.py] [_log()] userauth is OK
2025-11-25T23:52:19.509 [DEBUG] [Thread-7994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:52:19.509 [DEBUG] [Thread-7994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:52:19.509 [DEBUG] [Thread-7994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:52:19.509 [DEBUG] [Thread-7994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:52:19.534 [INFO] [Thread-7994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:52:19.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:52:20.161 [DEBUG] [Thread-7994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:52:20.162 [DEBUG] [Thread-7994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:52:20.162 [DEBUG] [Thread-7994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:52:20.203 [DEBUG] [Thread-7994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:52:20.203 [DEBUG] [Thread-7994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:52:20.205 [DEBUG] [Thread-7994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:52:20.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:52:20.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:52:20.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:52:20.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:52:20.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:52:20.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:52:20.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:52:20.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:52:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:52:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.911209 -999.00  +20.30  12.22     17   -4.80 1 1 1 1 1     0    0 24.74 -20.24 ZNESW 13.4 12.2 141.8 16.1 19.9 -26.1 19.8 -25.4 19.6 -24.2 19.7 -25.0
2025-11-25T23:52:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:52:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:52:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.911209
2025-11-25T23:52:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:52:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:52:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:52:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:52:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:52:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:52:12', tmtdew=29.34, humidity=13.08, cloud=0.0, wind=12.74, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:52:12', seeing=0.86, atlas_timestamp='2025-11-25T21:52:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:50:00')
2025-11-25T23:52:20.227 [DEBUG] [Thread-7994] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:52:20.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:52:20.315 [DEBUG] [Thread-7997] [transport.py] [_log()] starting thread (client mode): 0x70da5540
2025-11-25T23:52:20.315 [DEBUG] [Thread-7997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:52:20.330 [DEBUG] [Thread-7997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:52:20.330 [INFO] [Thread-7997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] client lang: <none>
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] server lang: <none>
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] kex follows: False
2025-11-25T23:52:20.338 [DEBUG] [Thread-7997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:52:20.339 [DEBUG] [Thread-7997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:52:20.339 [DEBUG] [Thread-7997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:52:20.339 [DEBUG] [Thread-7997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:52:20.339 [DEBUG] [Thread-7997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:52:20.339 [DEBUG] [Thread-7997] [transport.py] [_log()] Compression: none
2025-11-25T23:52:20.339 [DEBUG] [Thread-7997] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:52:20.399 [DEBUG] [Thread-7997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:52:20.400 [DEBUG] [Thread-7997] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:52:20.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:52:20.401 [DEBUG] [Thread-7997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:52:20.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:52:20.455 [DEBUG] [Thread-7997] [transport.py] [_log()] userauth is OK
2025-11-25T23:52:20.455 [DEBUG] [Thread-7997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:52:20.456 [DEBUG] [Thread-7997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:52:20.456 [DEBUG] [Thread-7997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:52:20.456 [DEBUG] [Thread-7997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:52:20.478 [INFO] [Thread-7997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:52:20.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:52:20.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:52:21.287 [DEBUG] [Thread-7997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:52:21.288 [DEBUG] [Thread-7997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:52:21.335 [DEBUG] [Thread-7997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:52:21.335 [DEBUG] [Thread-7997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:52:21.343 [DEBUG] [Thread-7997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:52:21.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:52:21.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:52:21.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
2025-11-25T23:52:21.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:52:21.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:52:21.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:52:21.375 [DEBUG] [Thread-7997] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:52:25.246 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:32.681 [DEBUG] [Thread-7999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:35.674 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:46.063 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:47.738 [DEBUG] [Thread-8000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:52:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:52:51.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:52:51.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:52:52.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 52, 44), 29.33, 13.03, 0.0, 13.96, 19.84, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:52:52.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:52:44
2025-11-25T23:52:52.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:52:52.342 [DEBUG] [Thread-8001] [transport.py] [_log()] starting thread (client mode): 0x70da6a70
2025-11-25T23:52:52.343 [DEBUG] [Thread-8001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:52:52.362 [DEBUG] [Thread-8001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:52:52.362 [INFO] [Thread-8001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] client lang: <none>
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] server lang: <none>
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] kex follows: False
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] Compression: none
2025-11-25T23:52:52.366 [DEBUG] [Thread-8001] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:52:52.374 [DEBUG] [Thread-8001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:52:52.375 [DEBUG] [Thread-8001] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:52:52.375 [DEBUG] [Thread-8001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:52:52.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:52:52.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:52:52.377 [DEBUG] [Thread-8001] [transport.py] [_log()] userauth is OK
2025-11-25T23:52:52.377 [DEBUG] [Thread-8001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:52:52.377 [DEBUG] [Thread-8001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:52:52.377 [DEBUG] [Thread-8001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:52:52.377 [DEBUG] [Thread-8001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:52:52.396 [INFO] [Thread-8001] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:52:52.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:52:52.995 [DEBUG] [Thread-8001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:52:52.995 [DEBUG] [Thread-8001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:52:52.995 [DEBUG] [Thread-8001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:52:53.036 [DEBUG] [Thread-8001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:52:53.036 [DEBUG] [Thread-8001] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:52:53.040 [DEBUG] [Thread-8001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:52:53.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:52:53.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:52:53.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:52:53.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:52:53.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:52:53.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:52:53.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:52:53.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:52:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:52:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.911556 -999.00  +20.40  12.01     17   -4.80 1 1 1 1 1     0    0 24.55 -17.21 ZNESW 12.1 12.0 161.8 14.2 19.9 -26.1 19.8 -25.5 19.6 -24.3 19.7 -24.9
2025-11-25T23:52:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:52:53.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:52:53.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.911556
2025-11-25T23:52:53.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:52:53.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:52:53.066 [DEBUG] [Thread-8001] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:52:53.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:52:53.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:52:53.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:52:53.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:52:44', tmtdew=29.33, humidity=13.03, cloud=0.0, wind=13.96, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:52:44', seeing=0.87, atlas_timestamp='2025-11-25T21:52:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:50:00')
2025-11-25T23:52:53.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:52:53.161 [DEBUG] [Thread-8004] [transport.py] [_log()] starting thread (client mode): 0x70dbd1b0
2025-11-25T23:52:53.161 [DEBUG] [Thread-8004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:52:53.176 [DEBUG] [Thread-8004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:52:53.177 [INFO] [Thread-8004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:52:53.184 [DEBUG] [Thread-8004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:52:53.184 [DEBUG] [Thread-8004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:52:53.184 [DEBUG] [Thread-8004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:52:53.184 [DEBUG] [Thread-8004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] client lang: <none>
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] server lang: <none>
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] kex follows: False
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] Compression: none
2025-11-25T23:52:53.185 [DEBUG] [Thread-8004] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:52:53.242 [DEBUG] [Thread-8004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:52:53.243 [DEBUG] [Thread-8004] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:52:53.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:52:53.243 [DEBUG] [Thread-8004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:52:53.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:52:53.299 [DEBUG] [Thread-8004] [transport.py] [_log()] userauth is OK
2025-11-25T23:52:53.299 [DEBUG] [Thread-8004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:52:53.299 [DEBUG] [Thread-8004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:52:53.299 [DEBUG] [Thread-8004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:52:53.299 [DEBUG] [Thread-8004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:52:53.318 [INFO] [Thread-8004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:52:53.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:52:53.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:52:54.136 [DEBUG] [Thread-8004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:52:54.136 [DEBUG] [Thread-8004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:52:54.184 [DEBUG] [Thread-8004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:52:54.184 [DEBUG] [Thread-8004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:52:54.193 [DEBUG] [Thread-8004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:52:54.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:52:54.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:52:54.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:52:54.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:52:54.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:52:54.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:52:54.230 [DEBUG] [Thread-8004] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:52:56.475 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:02.774 [DEBUG] [Thread-8006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:06.870 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:10.089 [DEBUG] [Thread-8007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:11.818 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:11.819 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:17.271 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:17.814 [DEBUG] [Thread-8008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:24.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:53:24.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:53:24.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:53:24.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 53, 16), 29.3, 13.08, 0.0, 12.83, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:53:24.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:53:16
2025-11-25T23:53:25.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:53:25.175 [DEBUG] [Thread-8009] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-25T23:53:25.175 [DEBUG] [Thread-8009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:53:25.195 [DEBUG] [Thread-8009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:53:25.195 [INFO] [Thread-8009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:53:25.198 [DEBUG] [Thread-8009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:53:25.198 [DEBUG] [Thread-8009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:53:25.198 [DEBUG] [Thread-8009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] client lang: <none>
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] server lang: <none>
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] kex follows: False
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:53:25.199 [DEBUG] [Thread-8009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:53:25.200 [DEBUG] [Thread-8009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:53:25.200 [DEBUG] [Thread-8009] [transport.py] [_log()] Compression: none
2025-11-25T23:53:25.200 [DEBUG] [Thread-8009] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:53:25.219 [DEBUG] [Thread-8009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:53:25.219 [DEBUG] [Thread-8009] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:53:25.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:53:25.221 [DEBUG] [Thread-8009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:53:25.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:53:25.223 [DEBUG] [Thread-8009] [transport.py] [_log()] userauth is OK
2025-11-25T23:53:25.223 [DEBUG] [Thread-8009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:53:25.223 [DEBUG] [Thread-8009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:53:25.223 [DEBUG] [Thread-8009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:53:25.223 [DEBUG] [Thread-8009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:53:25.246 [INFO] [Thread-8009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:53:25.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:53:25.907 [DEBUG] [Thread-8009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:53:25.908 [DEBUG] [Thread-8009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:53:25.908 [DEBUG] [Thread-8009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:53:25.949 [DEBUG] [Thread-8009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:53:25.949 [DEBUG] [Thread-8009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:53:25.953 [DEBUG] [Thread-8009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:53:25.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:53:25.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:53:25.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:53:25.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:53:25.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:53:25.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:53:25.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:53:25.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:53:25.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:53:25.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.911903 -999.00  +20.40   8.14     17   -4.70 1 1 1 1 1     0    0 24.42 -16.58 ZNESW 6.8 8.1 168.2 13.2 19.9 -26.4 19.8 -25.6 19.5 -24.2 19.7 -25.2
2025-11-25T23:53:25.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:53:25.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:53:25.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.911903
2025-11-25T23:53:25.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:53:25.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:53:25.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:53:25.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:53:25.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:53:25.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:53:16', tmtdew=29.3, humidity=13.08, cloud=0.0, wind=12.83, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:53:16', seeing=0.9, atlas_timestamp='2025-11-25T21:53:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:50:00')
2025-11-25T23:53:25.977 [DEBUG] [Thread-8009] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:53:26.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:53:26.073 [DEBUG] [Thread-8012] [transport.py] [_log()] starting thread (client mode): 0x70d6bfd0
2025-11-25T23:53:26.073 [DEBUG] [Thread-8012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:53:26.089 [DEBUG] [Thread-8012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:53:26.089 [INFO] [Thread-8012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:53:26.096 [DEBUG] [Thread-8012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] client lang: <none>
2025-11-25T23:53:26.097 [DEBUG] [Thread-8012] [transport.py] [_log()] server lang: <none>
2025-11-25T23:53:26.098 [DEBUG] [Thread-8012] [transport.py] [_log()] kex follows: False
2025-11-25T23:53:26.098 [DEBUG] [Thread-8012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:53:26.098 [DEBUG] [Thread-8012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:53:26.098 [DEBUG] [Thread-8012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:53:26.098 [DEBUG] [Thread-8012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:53:26.098 [DEBUG] [Thread-8012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:53:26.098 [DEBUG] [Thread-8012] [transport.py] [_log()] Compression: none
2025-11-25T23:53:26.098 [DEBUG] [Thread-8012] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:53:26.155 [DEBUG] [Thread-8012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:53:26.156 [DEBUG] [Thread-8012] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:53:26.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:53:26.157 [DEBUG] [Thread-8012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:53:26.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:53:26.214 [DEBUG] [Thread-8012] [transport.py] [_log()] userauth is OK
2025-11-25T23:53:26.215 [DEBUG] [Thread-8012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:53:26.215 [DEBUG] [Thread-8012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:53:26.215 [DEBUG] [Thread-8012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:53:26.215 [DEBUG] [Thread-8012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:53:26.236 [INFO] [Thread-8012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:53:26.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:53:26.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:53:27.134 [DEBUG] [Thread-8012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:53:27.134 [DEBUG] [Thread-8012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:53:27.182 [DEBUG] [Thread-8012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:53:27.182 [DEBUG] [Thread-8012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:53:27.191 [DEBUG] [Thread-8012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:53:27.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:53: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')
2025-11-25T23:53:27.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:53:27.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:53:27.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:53:27.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:53:27.228 [DEBUG] [Thread-8012] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:53:27.683 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:32.847 [DEBUG] [Thread-8014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:38.135 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:47.903 [DEBUG] [Thread-8015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:48.512 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:53:57.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:53:57.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:53:57.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 53, 48), 29.33, 13.04, 0.0, 13.22, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:53:57.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:53:48
2025-11-25T23:53:58.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:53:58.161 [DEBUG] [Thread-8016] [transport.py] [_log()] starting thread (client mode): 0x70d6ac20
2025-11-25T23:53:58.161 [DEBUG] [Thread-8016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:53:58.181 [DEBUG] [Thread-8016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:53:58.182 [INFO] [Thread-8016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:53:58.184 [DEBUG] [Thread-8016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] client lang: <none>
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] server lang: <none>
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] kex follows: False
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] Compression: none
2025-11-25T23:53:58.185 [DEBUG] [Thread-8016] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:53:58.201 [DEBUG] [Thread-8016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:53:58.201 [DEBUG] [Thread-8016] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:53:58.202 [DEBUG] [Thread-8016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:53:58.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:53:58.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:53:58.204 [DEBUG] [Thread-8016] [transport.py] [_log()] userauth is OK
2025-11-25T23:53:58.204 [DEBUG] [Thread-8016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:53:58.204 [DEBUG] [Thread-8016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:53:58.204 [DEBUG] [Thread-8016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:53:58.204 [DEBUG] [Thread-8016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:53:58.230 [INFO] [Thread-8016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:53:58.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:53:58.851 [DEBUG] [Thread-8016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:53:58.851 [DEBUG] [Thread-8016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:53:58.851 [DEBUG] [Thread-8016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:53:58.871 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:53:58.892 [DEBUG] [Thread-8016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:53:58.892 [DEBUG] [Thread-8016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:53:58.896 [DEBUG] [Thread-8016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:53:58.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:53:58.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:53:58.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:53:58.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:53:58.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:53:58.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:53:58.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:53:58.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:53:58.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:53:58.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.912250 -999.00  +20.30   8.65     17   -4.80 1 1 1 1 1     0    0 24.41 -17.20 ZNESW 12.3 8.7 156.0 11.9 19.9 -26.3 19.8 -25.7 19.6 -24.3 19.7 -25.4
2025-11-25T23:53:58.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:53:58.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:53:58.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.912250
2025-11-25T23:53:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:53:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:53:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:53:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:53:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:53:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:53:48', tmtdew=29.33, humidity=13.04, cloud=0.0, wind=13.22, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:53:48', seeing=0.82, atlas_timestamp='2025-11-25T21:53:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:50:00')
2025-11-25T23:53:58.924 [DEBUG] [Thread-8016] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:53:59.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:53:59.019 [DEBUG] [Thread-8019] [transport.py] [_log()] starting thread (client mode): 0x70d75780
2025-11-25T23:53:59.020 [DEBUG] [Thread-8019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:53:59.034 [DEBUG] [Thread-8019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:53:59.034 [INFO] [Thread-8019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:53:59.042 [DEBUG] [Thread-8019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] client lang: <none>
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] server lang: <none>
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] kex follows: False
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] Compression: none
2025-11-25T23:53:59.043 [DEBUG] [Thread-8019] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:53:59.101 [DEBUG] [Thread-8019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:53:59.102 [DEBUG] [Thread-8019] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:53:59.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:53:59.103 [DEBUG] [Thread-8019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:53:59.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:53:59.158 [DEBUG] [Thread-8019] [transport.py] [_log()] userauth is OK
2025-11-25T23:53:59.158 [DEBUG] [Thread-8019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:53:59.159 [DEBUG] [Thread-8019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:53:59.159 [DEBUG] [Thread-8019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:53:59.159 [DEBUG] [Thread-8019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:53:59.178 [INFO] [Thread-8019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:53:59.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:53:59.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:53:59.998 [DEBUG] [Thread-8019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:53:59.998 [DEBUG] [Thread-8019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:54:00.045 [DEBUG] [Thread-8019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:54:00.045 [DEBUG] [Thread-8019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:54:00.053 [DEBUG] [Thread-8019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:54:00.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:54:00.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:54:00.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:54:00.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:54:00.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:54:00.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:54:00.085 [DEBUG] [Thread-8019] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:54:02.944 [DEBUG] [Thread-8021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:54:09.272 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:54:10.147 [DEBUG] [Thread-8022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:54:12.018 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:54:12.019 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:54:17.987 [DEBUG] [Thread-8023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:54:19.668 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:54:30.063 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:54:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:54:30.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:54:30.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:54:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 54, 20), 29.34, 13.03, 0.0, 15.4, 19.89, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:54:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:54:20
2025-11-25T23:54:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:54:31.030 [DEBUG] [Thread-8024] [transport.py] [_log()] starting thread (client mode): 0x70d6bb80
2025-11-25T23:54:31.030 [DEBUG] [Thread-8024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:54:31.045 [DEBUG] [Thread-8024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:54:31.045 [INFO] [Thread-8024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] client lang: <none>
2025-11-25T23:54:31.047 [DEBUG] [Thread-8024] [transport.py] [_log()] server lang: <none>
2025-11-25T23:54:31.048 [DEBUG] [Thread-8024] [transport.py] [_log()] kex follows: False
2025-11-25T23:54:31.048 [DEBUG] [Thread-8024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:54:31.048 [DEBUG] [Thread-8024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:54:31.048 [DEBUG] [Thread-8024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:54:31.048 [DEBUG] [Thread-8024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:54:31.048 [DEBUG] [Thread-8024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:54:31.048 [DEBUG] [Thread-8024] [transport.py] [_log()] Compression: none
2025-11-25T23:54:31.048 [DEBUG] [Thread-8024] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:54:31.062 [DEBUG] [Thread-8024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:54:31.062 [DEBUG] [Thread-8024] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:54:31.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:54:31.063 [DEBUG] [Thread-8024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:54:31.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:54:31.065 [DEBUG] [Thread-8024] [transport.py] [_log()] userauth is OK
2025-11-25T23:54:31.065 [DEBUG] [Thread-8024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:54:31.065 [DEBUG] [Thread-8024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:54:31.066 [DEBUG] [Thread-8024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:54:31.066 [DEBUG] [Thread-8024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:54:31.085 [INFO] [Thread-8024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:54:31.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:54:31.664 [DEBUG] [Thread-8024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:54:31.665 [DEBUG] [Thread-8024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:54:31.665 [DEBUG] [Thread-8024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:54:31.706 [DEBUG] [Thread-8024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:54:31.706 [DEBUG] [Thread-8024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:54:31.709 [DEBUG] [Thread-8024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:54:31.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:54:31.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:54:31.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:54:31.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:54:31.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:54:31.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:54:31.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:54:31.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:54:31.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:54:31.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.912597 -999.00  +20.20   8.15     17   -4.80 1 1 1 1 1     0    0 24.36 -16.85 ZNESW 8.4 8.2 167.7 11.9 19.9 -26.4 19.8 -25.6 19.4 -24.3 19.7 -25.5
2025-11-25T23:54:31.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:54:31.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:54:31.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.912597
2025-11-25T23:54:31.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:54:31.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:54:31.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:54:31.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:54:31.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:54:31.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:54:20', tmtdew=29.34, humidity=13.03, cloud=0.0, wind=15.4, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:54:20', seeing=0.96, atlas_timestamp='2025-11-25T21:54:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:50:00')
2025-11-25T23:54:31.730 [DEBUG] [Thread-8024] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:54:31.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:54:31.830 [DEBUG] [Thread-8027] [transport.py] [_log()] starting thread (client mode): 0x70d3a560
2025-11-25T23:54:31.830 [DEBUG] [Thread-8027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:54:31.844 [DEBUG] [Thread-8027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:54:31.845 [INFO] [Thread-8027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:54:31.852 [DEBUG] [Thread-8027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:54:31.852 [DEBUG] [Thread-8027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:54:31.852 [DEBUG] [Thread-8027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:54:31.852 [DEBUG] [Thread-8027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:54:31.852 [DEBUG] [Thread-8027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] client lang: <none>
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] server lang: <none>
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] kex follows: False
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] Compression: none
2025-11-25T23:54:31.853 [DEBUG] [Thread-8027] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:54:31.911 [DEBUG] [Thread-8027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:54:31.912 [DEBUG] [Thread-8027] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:54:31.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:54:31.913 [DEBUG] [Thread-8027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:54:31.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:54:31.973 [DEBUG] [Thread-8027] [transport.py] [_log()] userauth is OK
2025-11-25T23:54:31.973 [DEBUG] [Thread-8027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:54:31.973 [DEBUG] [Thread-8027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:54:31.973 [DEBUG] [Thread-8027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:54:31.973 [DEBUG] [Thread-8027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:54:31.992 [INFO] [Thread-8027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:54:31.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:54:31.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:54:32.856 [DEBUG] [Thread-8027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:54:32.856 [DEBUG] [Thread-8027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:54:32.905 [DEBUG] [Thread-8027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:54:32.905 [DEBUG] [Thread-8027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:54:32.914 [DEBUG] [Thread-8027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:54:32.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:54:32.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:54:32.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
2025-11-25T23:54:32.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:54:32.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:54:32.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:54:32.953 [DEBUG] [Thread-8027] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:54:33.020 [DEBUG] [Thread-8029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:54:48.083 [DEBUG] [Thread-8030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:02.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:55:02.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:55:02.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:55:03.118 [DEBUG] [Thread-8031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:03.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 54, 52), 29.55, 12.43, 0.0, 15.26, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:55:03.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:54:52
2025-11-25T23:55:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:55:03.907 [DEBUG] [Thread-8032] [transport.py] [_log()] starting thread (client mode): 0x70d38370
2025-11-25T23:55:03.908 [DEBUG] [Thread-8032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:55:03.928 [DEBUG] [Thread-8032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:55:03.929 [INFO] [Thread-8032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:55:03.932 [DEBUG] [Thread-8032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:55:03.932 [DEBUG] [Thread-8032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:55:03.932 [DEBUG] [Thread-8032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:55:03.932 [DEBUG] [Thread-8032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:55:03.932 [DEBUG] [Thread-8032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:55:03.932 [DEBUG] [Thread-8032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:55:03.932 [DEBUG] [Thread-8032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:55:03.932 [DEBUG] [Thread-8032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] client lang: <none>
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] server lang: <none>
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] kex follows: False
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] Compression: none
2025-11-25T23:55:03.933 [DEBUG] [Thread-8032] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:55:03.954 [DEBUG] [Thread-8032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:55:03.955 [DEBUG] [Thread-8032] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:55:03.955 [DEBUG] [Thread-8032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:55:03.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:55:03.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:55:03.958 [DEBUG] [Thread-8032] [transport.py] [_log()] userauth is OK
2025-11-25T23:55:03.958 [DEBUG] [Thread-8032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:55:03.958 [DEBUG] [Thread-8032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:55:03.958 [DEBUG] [Thread-8032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:55:03.958 [DEBUG] [Thread-8032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:55:03.992 [INFO] [Thread-8032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:55:03.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:55:05.035 [DEBUG] [Thread-8032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:55:05.036 [DEBUG] [Thread-8032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:55:05.036 [DEBUG] [Thread-8032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:55:05.076 [DEBUG] [Thread-8032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:55:05.076 [DEBUG] [Thread-8032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:55:05.079 [DEBUG] [Thread-8032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:55:05.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:55:05.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:55:05.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:55:05.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:55:05.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:55:05.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:55:05.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:55:05.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:55:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:55:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.912945 -999.00  +20.20   9.65     18   -4.80 1 1 1 1 1     0    0 24.37 -16.52 ZNESW 9.5 9.7 148.1 13.6 19.9 -26.3 19.8 -25.7 19.5 -24.4 19.8 -25.1
2025-11-25T23:55:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:55:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:55:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.912945
2025-11-25T23:55:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:55:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:55:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:55:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:55:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:55:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:54:52', tmtdew=29.55, humidity=12.43, cloud=0.0, wind=15.26, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:54:52', seeing=0.96, atlas_timestamp='2025-11-25T21:54:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:50:00')
2025-11-25T23:55:05.106 [DEBUG] [Thread-8032] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:55:05.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:55:05.198 [DEBUG] [Thread-8035] [transport.py] [_log()] starting thread (client mode): 0x70da5540
2025-11-25T23:55:05.198 [DEBUG] [Thread-8035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:55:05.212 [DEBUG] [Thread-8035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:55:05.213 [INFO] [Thread-8035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:55:05.220 [DEBUG] [Thread-8035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:55:05.220 [DEBUG] [Thread-8035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:55:05.220 [DEBUG] [Thread-8035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:55:05.220 [DEBUG] [Thread-8035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] client lang: <none>
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] server lang: <none>
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] kex follows: False
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:55:05.221 [DEBUG] [Thread-8035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:55:05.222 [DEBUG] [Thread-8035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:55:05.222 [DEBUG] [Thread-8035] [transport.py] [_log()] Compression: none
2025-11-25T23:55:05.222 [DEBUG] [Thread-8035] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:55:05.278 [DEBUG] [Thread-8035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:55:05.278 [DEBUG] [Thread-8035] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:55:05.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:55:05.280 [DEBUG] [Thread-8035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:55:05.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:55:05.338 [DEBUG] [Thread-8035] [transport.py] [_log()] userauth is OK
2025-11-25T23:55:05.338 [DEBUG] [Thread-8035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:55:05.339 [DEBUG] [Thread-8035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:55:05.339 [DEBUG] [Thread-8035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:55:05.339 [DEBUG] [Thread-8035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:55:05.361 [INFO] [Thread-8035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:55:05.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:55:05.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:55:06.198 [DEBUG] [Thread-8035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:55:06.198 [DEBUG] [Thread-8035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:55:06.246 [DEBUG] [Thread-8035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:55:06.246 [DEBUG] [Thread-8035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:55:06.255 [DEBUG] [Thread-8035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:55:06.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:55:06.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:55:06.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:55:06.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:55:06.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:55:06.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:55:06.295 [DEBUG] [Thread-8035] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:55:10.220 [DEBUG] [Thread-8037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:12.221 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:12.221 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:18.151 [DEBUG] [Thread-8038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:33.198 [DEBUG] [Thread-8039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:36.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:55:36.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:55:36.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:55:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 55, 24), 29.58, 12.4, 0.0, 16.09, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:55:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:55:24
2025-11-25T23:55:37.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:55:37.254 [DEBUG] [Thread-8040] [transport.py] [_log()] starting thread (client mode): 0x70dd2e90
2025-11-25T23:55:37.254 [DEBUG] [Thread-8040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:55:37.273 [DEBUG] [Thread-8040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:55:37.274 [INFO] [Thread-8040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] client lang: <none>
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] server lang: <none>
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] kex follows: False
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] Compression: none
2025-11-25T23:55:37.277 [DEBUG] [Thread-8040] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:55:37.295 [DEBUG] [Thread-8040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:55:37.295 [DEBUG] [Thread-8040] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:55:37.296 [DEBUG] [Thread-8040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:55:37.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:55:37.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:55:37.298 [DEBUG] [Thread-8040] [transport.py] [_log()] userauth is OK
2025-11-25T23:55:37.298 [DEBUG] [Thread-8040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:55:37.298 [DEBUG] [Thread-8040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:55:37.298 [DEBUG] [Thread-8040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:55:37.298 [DEBUG] [Thread-8040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:55:37.318 [INFO] [Thread-8040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:55:37.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:55:37.945 [DEBUG] [Thread-8040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:55:37.946 [DEBUG] [Thread-8040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:55:37.946 [DEBUG] [Thread-8040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:55:37.987 [DEBUG] [Thread-8040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:55:37.987 [DEBUG] [Thread-8040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:55:37.991 [DEBUG] [Thread-8040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:55:38.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:55:38.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:55:38.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:55:38.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:55:38.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:55:38.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:55:38.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:55:38.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:55:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:55:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.912945 -999.00  +20.20   9.65     18   -4.80 1 1 1 1 1     0    0 24.37 -16.52 ZNESW 9.5 9.7 148.1 13.6 19.9 -26.3 19.8 -25.7 19.5 -24.4 19.8 -25.1
2025-11-25T23:55:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:55:38.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:55:38.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.912945
2025-11-25T23:55:38.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:55:38.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:55:38.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:55:38.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:55:38.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:55:38.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:55:24', tmtdew=29.58, humidity=12.4, cloud=0.0, wind=16.09, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:55:24', seeing=0.86, atlas_timestamp='2025-11-25T21:54:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:54:00')
2025-11-25T23:55:38.019 [DEBUG] [Thread-8040] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:55:38.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:55:38.114 [DEBUG] [Thread-8043] [transport.py] [_log()] starting thread (client mode): 0x70dbf640
2025-11-25T23:55:38.114 [DEBUG] [Thread-8043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:55:38.129 [DEBUG] [Thread-8043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:55:38.129 [INFO] [Thread-8043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:55:38.137 [DEBUG] [Thread-8043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:55:38.137 [DEBUG] [Thread-8043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:55:38.137 [DEBUG] [Thread-8043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:55:38.137 [DEBUG] [Thread-8043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:55:38.137 [DEBUG] [Thread-8043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:55:38.137 [DEBUG] [Thread-8043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:55:38.137 [DEBUG] [Thread-8043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] client lang: <none>
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] server lang: <none>
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] kex follows: False
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] Compression: none
2025-11-25T23:55:38.138 [DEBUG] [Thread-8043] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:55:38.192 [DEBUG] [Thread-8043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:55:38.192 [DEBUG] [Thread-8043] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:55:38.192 [DEBUG] [Thread-8043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:55:38.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:55:38.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:55:38.250 [DEBUG] [Thread-8043] [transport.py] [_log()] userauth is OK
2025-11-25T23:55:38.250 [DEBUG] [Thread-8043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:55:38.250 [DEBUG] [Thread-8043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:55:38.250 [DEBUG] [Thread-8043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:55:38.250 [DEBUG] [Thread-8043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:55:38.267 [INFO] [Thread-8043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:55:38.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:55:38.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:55:39.103 [DEBUG] [Thread-8043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:55:39.104 [DEBUG] [Thread-8043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:55:39.151 [DEBUG] [Thread-8043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:55:39.152 [DEBUG] [Thread-8043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:55:39.161 [DEBUG] [Thread-8043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:55:39.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:55:39.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:55:39.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:55:39.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:55:39.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:55:39.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:55:39.198 [DEBUG] [Thread-8043] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:55:45.312 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:48.234 [DEBUG] [Thread-8045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:48.508 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:53.626 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:55:59.010 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:03.290 [DEBUG] [Thread-8046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:09.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:56:09.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:56: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
2025-11-25T23:56:09.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 55, 56), 29.69, 12.4, 0.0, 14.4, 20.14, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:56:09.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:55:56
2025-11-25T23:56:10.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:56:10.225 [DEBUG] [Thread-8047] [transport.py] [_log()] starting thread (client mode): 0x70d427d0
2025-11-25T23:56:10.226 [DEBUG] [Thread-8047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:56:10.236 [DEBUG] [Thread-8047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:56:10.236 [INFO] [Thread-8047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] client lang: <none>
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] server lang: <none>
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] kex follows: False
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] Compression: none
2025-11-25T23:56:10.238 [DEBUG] [Thread-8047] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:56:10.249 [DEBUG] [Thread-8047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:56:10.249 [DEBUG] [Thread-8047] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:56:10.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:56:10.249 [DEBUG] [Thread-8047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:56:10.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:56:10.250 [DEBUG] [Thread-8047] [transport.py] [_log()] userauth is OK
2025-11-25T23:56:10.250 [DEBUG] [Thread-8047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:56:10.250 [DEBUG] [Thread-8047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:56:10.250 [DEBUG] [Thread-8047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:56:10.250 [DEBUG] [Thread-8047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:56:10.260 [INFO] [Thread-8047] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:56:10.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:56:10.293 [DEBUG] [Thread-8049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:11.072 [DEBUG] [Thread-8047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:56:11.073 [DEBUG] [Thread-8047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:56:11.073 [DEBUG] [Thread-8047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:56:11.114 [DEBUG] [Thread-8047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:56:11.114 [DEBUG] [Thread-8047] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:56:11.116 [DEBUG] [Thread-8047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:56:11.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:56:11.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:56:11.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:56:11.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:56:11.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:56:11.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:56:11.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:56:11.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:56:11.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:56:11.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.913639 -999.00  +20.20   9.15     18   -4.70 1 1 1 1 1     0    0 24.76 -16.99 ZNESW 7.8 9.2 157.8 12.5 19.8 -26.3 19.8 -25.7 19.5 -24.4 19.7 -25.4
2025-11-25T23:56:11.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:56:11.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:56:11.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.913639
2025-11-25T23:56:11.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:56:11.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:56:11.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:56:11.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:56:11.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:56:11.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:55:56', tmtdew=29.69, humidity=12.4, cloud=0.0, wind=14.4, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:55:56', seeing=0.86, atlas_timestamp='2025-11-25T21:55:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:54:00')
2025-11-25T23:56:11.141 [DEBUG] [Thread-8047] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:56:11.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:56:11.237 [DEBUG] [Thread-8051] [transport.py] [_log()] starting thread (client mode): 0x70d7e620
2025-11-25T23:56:11.237 [DEBUG] [Thread-8051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:56:11.252 [DEBUG] [Thread-8051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:56:11.252 [INFO] [Thread-8051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:56:11.260 [DEBUG] [Thread-8051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:56:11.260 [DEBUG] [Thread-8051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:56:11.260 [DEBUG] [Thread-8051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:56:11.260 [DEBUG] [Thread-8051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:56:11.260 [DEBUG] [Thread-8051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:56:11.260 [DEBUG] [Thread-8051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:56:11.260 [DEBUG] [Thread-8051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:56:11.260 [DEBUG] [Thread-8051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:56:11.260 [DEBUG] [Thread-8051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] client lang: <none>
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] server lang: <none>
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] kex follows: False
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] Compression: none
2025-11-25T23:56:11.261 [DEBUG] [Thread-8051] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:56:11.318 [DEBUG] [Thread-8051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:56:11.319 [DEBUG] [Thread-8051] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:56:11.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:56:11.320 [DEBUG] [Thread-8051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:56:11.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:56:11.374 [DEBUG] [Thread-8051] [transport.py] [_log()] userauth is OK
2025-11-25T23:56:11.375 [DEBUG] [Thread-8051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:56:11.375 [DEBUG] [Thread-8051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:56:11.375 [DEBUG] [Thread-8051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:56:11.375 [DEBUG] [Thread-8051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:56:11.393 [INFO] [Thread-8051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:56:11.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:56:11.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:56:12.291 [DEBUG] [Thread-8051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:56:12.291 [DEBUG] [Thread-8051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:56:12.338 [DEBUG] [Thread-8051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:56:12.339 [DEBUG] [Thread-8051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:56:12.347 [DEBUG] [Thread-8051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:56:12.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:56:12.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:56:12.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:56:12.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:56:12.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:56:12.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:56:12.382 [DEBUG] [Thread-8051] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:56:12.425 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:12.426 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:18.319 [DEBUG] [Thread-8053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:18.566 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:23.994 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:33.369 [DEBUG] [Thread-8054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:42.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:56:42.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:56:42.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:56:42.425 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 56, 28), 29.64, 12.44, 0.0, 14.75, 20.16, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:56:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:56:28
2025-11-25T23:56:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:56:43.369 [DEBUG] [Thread-8055] [transport.py] [_log()] starting thread (client mode): 0x70da5540
2025-11-25T23:56:43.369 [DEBUG] [Thread-8055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:56:43.391 [DEBUG] [Thread-8055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:56:43.391 [INFO] [Thread-8055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] client lang: <none>
2025-11-25T23:56:43.395 [DEBUG] [Thread-8055] [transport.py] [_log()] server lang: <none>
2025-11-25T23:56:43.396 [DEBUG] [Thread-8055] [transport.py] [_log()] kex follows: False
2025-11-25T23:56:43.396 [DEBUG] [Thread-8055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:56:43.396 [DEBUG] [Thread-8055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:56:43.396 [DEBUG] [Thread-8055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:56:43.396 [DEBUG] [Thread-8055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:56:43.396 [DEBUG] [Thread-8055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:56:43.396 [DEBUG] [Thread-8055] [transport.py] [_log()] Compression: none
2025-11-25T23:56:43.396 [DEBUG] [Thread-8055] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:56:43.411 [DEBUG] [Thread-8055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:56:43.411 [DEBUG] [Thread-8055] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:56:43.412 [DEBUG] [Thread-8055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:56:43.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:56:43.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:56:43.413 [DEBUG] [Thread-8055] [transport.py] [_log()] userauth is OK
2025-11-25T23:56:43.413 [DEBUG] [Thread-8055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:56:43.413 [DEBUG] [Thread-8055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:56:43.413 [DEBUG] [Thread-8055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:56:43.413 [DEBUG] [Thread-8055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:56:43.422 [INFO] [Thread-8055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:56:43.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:56:44.064 [DEBUG] [Thread-8055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:56:44.064 [DEBUG] [Thread-8055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:56:44.064 [DEBUG] [Thread-8055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:56:44.105 [DEBUG] [Thread-8055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:56:44.105 [DEBUG] [Thread-8055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:56:44.108 [DEBUG] [Thread-8055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:56:44.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:56:44.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:56:44.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:56:44.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:56:44.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:56:44.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:56:44.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:56:44.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:56:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:56:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.913986 -999.00  +20.20   9.11     18   -4.70 1 1 1 1 1     0    0 24.52 -15.66 ZNESW 7.5 9.1 143.6 11.8 19.8 -26.3 19.8 -25.8 19.5 -24.3 19.7 -25.5
2025-11-25T23:56:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:56:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:56:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.913986
2025-11-25T23:56:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:56:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:56:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:56:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:56:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:56:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:56:28', tmtdew=29.64, humidity=12.44, cloud=0.0, wind=14.75, temperature=20.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:56:28', seeing=0.63, atlas_timestamp='2025-11-25T21:56:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:54:00')
2025-11-25T23:56:44.129 [DEBUG] [Thread-8055] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:56:44.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:56:44.229 [DEBUG] [Thread-8058] [transport.py] [_log()] starting thread (client mode): 0x7374df30
2025-11-25T23:56:44.229 [DEBUG] [Thread-8058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:56:44.243 [DEBUG] [Thread-8058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:56:44.243 [INFO] [Thread-8058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] client lang: <none>
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] server lang: <none>
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] kex follows: False
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] Compression: none
2025-11-25T23:56:44.251 [DEBUG] [Thread-8058] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:56:44.309 [DEBUG] [Thread-8058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:56:44.309 [DEBUG] [Thread-8058] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:56:44.309 [DEBUG] [Thread-8058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:56:44.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:56:44.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:56:44.368 [DEBUG] [Thread-8058] [transport.py] [_log()] userauth is OK
2025-11-25T23:56:44.368 [DEBUG] [Thread-8058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:56:44.368 [DEBUG] [Thread-8058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:56:44.368 [DEBUG] [Thread-8058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:56:44.368 [DEBUG] [Thread-8058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:56:44.383 [INFO] [Thread-8058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:56:44.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:56:44.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:56:45.205 [DEBUG] [Thread-8058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:56:45.205 [DEBUG] [Thread-8058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:56:45.253 [DEBUG] [Thread-8058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:56:45.253 [DEBUG] [Thread-8058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:56:45.261 [DEBUG] [Thread-8058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:56:45.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:56:45.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:56:45.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:56:45.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:56:45.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:56:45.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:56:45.293 [DEBUG] [Thread-8058] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:56:46.819 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:48.403 [DEBUG] [Thread-8060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:52.983 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:56:57.387 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:57:03.444 [DEBUG] [Thread-8061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:57:10.371 [DEBUG] [Thread-8062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:57:12.626 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:57:12.627 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:57:15.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:57:15.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:57: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
2025-11-25T23:57:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 56, 28), 29.59, 12.44, 0.0, 12.95, 20.11, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:57:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:56:28
2025-11-25T23:57:16.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:57:16.242 [DEBUG] [Thread-8063] [transport.py] [_log()] starting thread (client mode): 0x70d42110
2025-11-25T23:57:16.242 [DEBUG] [Thread-8063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:57:16.262 [DEBUG] [Thread-8063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:57:16.262 [INFO] [Thread-8063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:57:16.265 [DEBUG] [Thread-8063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:57:16.265 [DEBUG] [Thread-8063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:57:16.265 [DEBUG] [Thread-8063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:57:16.265 [DEBUG] [Thread-8063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:57:16.265 [DEBUG] [Thread-8063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:57:16.265 [DEBUG] [Thread-8063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] client lang: <none>
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] server lang: <none>
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] kex follows: False
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] Compression: none
2025-11-25T23:57:16.266 [DEBUG] [Thread-8063] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:57:16.287 [DEBUG] [Thread-8063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:57:16.287 [DEBUG] [Thread-8063] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:57:16.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:57:16.288 [DEBUG] [Thread-8063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:57:16.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:57:16.290 [DEBUG] [Thread-8063] [transport.py] [_log()] userauth is OK
2025-11-25T23:57:16.290 [DEBUG] [Thread-8063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:57:16.290 [DEBUG] [Thread-8063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:57:16.290 [DEBUG] [Thread-8063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:57:16.290 [DEBUG] [Thread-8063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:57:16.316 [INFO] [Thread-8063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:57:16.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:57:16.964 [DEBUG] [Thread-8063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:57:16.964 [DEBUG] [Thread-8063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:57:16.964 [DEBUG] [Thread-8063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:57:17.005 [DEBUG] [Thread-8063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:57:17.005 [DEBUG] [Thread-8063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:57:17.009 [DEBUG] [Thread-8063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:57:17.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:57:17.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:57:17.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:57:17.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:57:17.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:57:17.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:57:17.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:57:17.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:57:17.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:57:17.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.914333 -999.00  +20.20   7.19     18   -4.70 1 1 1 1 1     0    0 24.38 -17.57 ZNESW 9.4 7.2 144.2 9.6 19.8 -26.3 19.8 -25.7 19.5 -24.5 19.7 -25.5
2025-11-25T23:57:17.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:57:17.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:57:17.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.914333
2025-11-25T23:57:17.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:57:17.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:57:17.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:57:17.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:57:17.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:57:17.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:56:28', tmtdew=29.59, humidity=12.44, cloud=0.0, wind=12.95, temperature=20.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:57:00', seeing=0.83, atlas_timestamp='2025-11-25T21:56:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:54:00')
2025-11-25T23:57:17.034 [DEBUG] [Thread-8063] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:57:17.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:57:17.131 [DEBUG] [Thread-8066] [transport.py] [_log()] starting thread (client mode): 0x70d43bb0
2025-11-25T23:57:17.131 [DEBUG] [Thread-8066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:57:17.145 [DEBUG] [Thread-8066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:57:17.145 [INFO] [Thread-8066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:57:17.153 [DEBUG] [Thread-8066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:57:17.153 [DEBUG] [Thread-8066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:57:17.153 [DEBUG] [Thread-8066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:57:17.153 [DEBUG] [Thread-8066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:57:17.154 [DEBUG] [Thread-8066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:57:17.154 [DEBUG] [Thread-8066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:57:17.154 [DEBUG] [Thread-8066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:57:17.154 [DEBUG] [Thread-8066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:57:17.154 [DEBUG] [Thread-8066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:57:17.154 [DEBUG] [Thread-8066] [transport.py] [_log()] client lang: <none>
2025-11-25T23:57:17.154 [DEBUG] [Thread-8066] [transport.py] [_log()] server lang: <none>
2025-11-25T23:57:17.154 [DEBUG] [Thread-8066] [transport.py] [_log()] kex follows: False
2025-11-25T23:57:17.154 [DEBUG] [Thread-8066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:57:17.155 [DEBUG] [Thread-8066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:57:17.155 [DEBUG] [Thread-8066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:57:17.155 [DEBUG] [Thread-8066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:57:17.155 [DEBUG] [Thread-8066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:57:17.155 [DEBUG] [Thread-8066] [transport.py] [_log()] Compression: none
2025-11-25T23:57:17.155 [DEBUG] [Thread-8066] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:57:17.211 [DEBUG] [Thread-8066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:57:17.211 [DEBUG] [Thread-8066] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:57:17.212 [DEBUG] [Thread-8066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:57:17.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:57:17.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:57:17.267 [DEBUG] [Thread-8066] [transport.py] [_log()] userauth is OK
2025-11-25T23:57:17.267 [DEBUG] [Thread-8066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:57:17.268 [DEBUG] [Thread-8066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:57:17.268 [DEBUG] [Thread-8066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:57:17.268 [DEBUG] [Thread-8066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:57:17.286 [INFO] [Thread-8066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:57:17.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:57:17.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:57:18.163 [DEBUG] [Thread-8066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:57:18.164 [DEBUG] [Thread-8066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:57:18.212 [DEBUG] [Thread-8066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:57:18.212 [DEBUG] [Thread-8066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:57:18.221 [DEBUG] [Thread-8066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:57:18.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:57:18.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:57:18.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:57:18.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:57:18.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:57:18.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:57:18.259 [DEBUG] [Thread-8066] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:57:18.481 [DEBUG] [Thread-8068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:57:33.524 [DEBUG] [Thread-8069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:57:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:57:48.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:57:48.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:57:48.557 [DEBUG] [Thread-8070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:57:48.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 57, 32), 29.59, 12.43, 0.0, 13.59, 20.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:57:48.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:57:32
2025-11-25T23:57:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:57:49.217 [DEBUG] [Thread-8071] [transport.py] [_log()] starting thread (client mode): 0x70d42650
2025-11-25T23:57:49.217 [DEBUG] [Thread-8071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:57:49.237 [DEBUG] [Thread-8071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:57:49.237 [INFO] [Thread-8071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] client lang: <none>
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] server lang: <none>
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] kex follows: False
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] Compression: none
2025-11-25T23:57:49.238 [DEBUG] [Thread-8071] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:57:49.246 [DEBUG] [Thread-8071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:57:49.246 [DEBUG] [Thread-8071] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:57:49.247 [DEBUG] [Thread-8071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:57:49.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:57:49.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:57:49.248 [DEBUG] [Thread-8071] [transport.py] [_log()] userauth is OK
2025-11-25T23:57:49.249 [DEBUG] [Thread-8071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:57:49.249 [DEBUG] [Thread-8071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:57:49.249 [DEBUG] [Thread-8071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:57:49.249 [DEBUG] [Thread-8071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:57:49.265 [INFO] [Thread-8071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:57:49.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:57:49.912 [DEBUG] [Thread-8071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:57:49.912 [DEBUG] [Thread-8071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:57:49.912 [DEBUG] [Thread-8071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:57:49.953 [DEBUG] [Thread-8071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:57:49.953 [DEBUG] [Thread-8071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:57:49.956 [DEBUG] [Thread-8071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:57:49.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:57:49.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:57:49.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:57:49.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:57:49.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:57:49.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:57:49.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:57:49.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:57:49.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:57:49.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.914681 -999.00  +20.20   8.15     18   -4.80 1 1 1 1 1     0    0 24.62 -17.15 ZNESW 8.0 8.2 141.5 12.4 19.8 -26.4 19.8 -25.8 19.4 -24.0 19.7 -25.4
2025-11-25T23:57:49.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:57:49.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:57:49.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.914681
2025-11-25T23:57:49.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:57:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:57:49.983 [DEBUG] [Thread-8071] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:57:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:57:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:57:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:57:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:57:32', tmtdew=29.59, humidity=12.43, cloud=0.0, wind=13.59, temperature=20.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:57:32', seeing=0.83, atlas_timestamp='2025-11-25T21:57:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, 0.006249999999999645, -0.02024999999999899, 0.027499999999999858, 0.05150000000000077, 0.04925000000000068, 0.01750000000000007, -0.021249999999998437, -0.005500000000001393, 0.002000000000000668, 0.0442499999999999, -0.022999999999999687, 0.07499999999999929, 0.06475000000000009, -0.004000000000001336, 0.009999999999999787, -0.01425000000000054, 0.026500000000000412, 0.026999999999999247, -0.01675000000000182, 0.02899999999999814, 0.03575000000000017, 0.04475000000000051, -0.02474999999999916, -0.011000000000001009, -0.04550000000000054, -0.009249999999999758, 0.04600000000000115, 0.13000000000000078, 0.04800000000000182, 0.09299999999999997, -0.019499999999998963, -0.028750000000000497], zp_timestamp='2025-11-25T21:54:00')
2025-11-25T23:57:50.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:57:50.079 [DEBUG] [Thread-8074] [transport.py] [_log()] starting thread (client mode): 0x70d74460
2025-11-25T23:57:50.079 [DEBUG] [Thread-8074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:57:50.094 [DEBUG] [Thread-8074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:57:50.094 [INFO] [Thread-8074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:57:50.101 [DEBUG] [Thread-8074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:57:50.102 [DEBUG] [Thread-8074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:57:50.102 [DEBUG] [Thread-8074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:57:50.102 [DEBUG] [Thread-8074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:57:50.102 [DEBUG] [Thread-8074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:57:50.102 [DEBUG] [Thread-8074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:57:50.102 [DEBUG] [Thread-8074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:57:50.102 [DEBUG] [Thread-8074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:57:50.102 [DEBUG] [Thread-8074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:57:50.103 [DEBUG] [Thread-8074] [transport.py] [_log()] client lang: <none>
2025-11-25T23:57:50.103 [DEBUG] [Thread-8074] [transport.py] [_log()] server lang: <none>
2025-11-25T23:57:50.103 [DEBUG] [Thread-8074] [transport.py] [_log()] kex follows: False
2025-11-25T23:57:50.103 [DEBUG] [Thread-8074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:57:50.103 [DEBUG] [Thread-8074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:57:50.103 [DEBUG] [Thread-8074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:57:50.103 [DEBUG] [Thread-8074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:57:50.103 [DEBUG] [Thread-8074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:57:50.104 [DEBUG] [Thread-8074] [transport.py] [_log()] Compression: none
2025-11-25T23:57:50.104 [DEBUG] [Thread-8074] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:57:50.160 [DEBUG] [Thread-8074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:57:50.161 [DEBUG] [Thread-8074] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:57:50.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:57:50.162 [DEBUG] [Thread-8074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:57:50.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:57:50.219 [DEBUG] [Thread-8074] [transport.py] [_log()] userauth is OK
2025-11-25T23:57:50.220 [DEBUG] [Thread-8074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:57:50.220 [DEBUG] [Thread-8074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:57:50.220 [DEBUG] [Thread-8074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:57:50.220 [DEBUG] [Thread-8074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:57:50.239 [INFO] [Thread-8074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:57:50.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:57:50.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:57:51.092 [DEBUG] [Thread-8074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:57:51.093 [DEBUG] [Thread-8074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:57:51.140 [DEBUG] [Thread-8074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:57:51.140 [DEBUG] [Thread-8074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:57:51.149 [DEBUG] [Thread-8074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:57:51.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:57:51.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:57:51.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:57:51.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:57:51.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:57:51.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:57:51.181 [DEBUG] [Thread-8074] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:58:03.592 [DEBUG] [Thread-8076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:05.448 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:09.579 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:10.440 [DEBUG] [Thread-8077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:12.829 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:12.831 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:18.649 [DEBUG] [Thread-8078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:20.973 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:21.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:58:21.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:58:21.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:58:21.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 58, 4), 29.54, 12.48, 0.0, 13.43, 20.02, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:58:21.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:58:04
2025-11-25T23:58:22.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:58:22.159 [DEBUG] [Thread-8079] [transport.py] [_log()] starting thread (client mode): 0x70d7f0d0
2025-11-25T23:58:22.159 [DEBUG] [Thread-8079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:58:22.178 [DEBUG] [Thread-8079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:58:22.178 [INFO] [Thread-8079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:58:22.181 [DEBUG] [Thread-8079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:58:22.181 [DEBUG] [Thread-8079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] client lang: <none>
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] server lang: <none>
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] kex follows: False
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:58:22.182 [DEBUG] [Thread-8079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:58:22.183 [DEBUG] [Thread-8079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:58:22.183 [DEBUG] [Thread-8079] [transport.py] [_log()] Compression: none
2025-11-25T23:58:22.183 [DEBUG] [Thread-8079] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:58:22.201 [DEBUG] [Thread-8079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:58:22.202 [DEBUG] [Thread-8079] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:58:22.202 [DEBUG] [Thread-8079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:58:22.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:58:22.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:58:22.204 [DEBUG] [Thread-8079] [transport.py] [_log()] userauth is OK
2025-11-25T23:58:22.204 [DEBUG] [Thread-8079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:58:22.204 [DEBUG] [Thread-8079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:58:22.204 [DEBUG] [Thread-8079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:58:22.204 [DEBUG] [Thread-8079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:58:22.228 [INFO] [Thread-8079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:58:22.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:58:22.836 [DEBUG] [Thread-8079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:58:22.836 [DEBUG] [Thread-8079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:58:22.837 [DEBUG] [Thread-8079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:58:22.877 [DEBUG] [Thread-8079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:58:22.877 [DEBUG] [Thread-8079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:58:22.880 [DEBUG] [Thread-8079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:58:22.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:58:22.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:58:22.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:58:22.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:58:22.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:58:22.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:58:22.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:58:22.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:58:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:58:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.915028 -999.00  +20.10   9.30     18   -4.80 1 1 1 1 1     0    0 24.84 -16.18 ZNESW 9.5 9.3 156.0 12.5 19.8 -26.2 19.8 -25.7 19.4 -24.6 19.6 -25.6
2025-11-25T23:58:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:58:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:58:22.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.915028
2025-11-25T23:58:22.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:58:22.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:58:22.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:58:22.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:58:22.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:58:22.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:58:04', tmtdew=29.54, humidity=12.48, cloud=0.0, wind=13.43, temperature=20.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:58:04', seeing=0.83, atlas_timestamp='2025-11-25T21:57:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.00575000000000081, -0.0547500000000003, 0.015499999999999403, 0.0035000000000007248, 0.054250000000001464, 0.02999999999999936, -0.01974999999999838, -0.002500000000001279, 0.0039999999999995595, 0.04224999999999923, -0.026000000000001577, 0.08900000000000041, 0.0832499999999996, -0.014000000000001123, -0.015000000000000568, -0.014749999999999375, 0.014499999999999957, 0.03200000000000003, -0.039750000000001506, 0.03199999999999825, 0.04124999999999801, 0.016250000000001208, -0.03074999999999939, -0.023000000000001464, -0.032999999999999474, -0.015750000000000597, 0.06199999999999939, 0.12650000000000006, 0.04600000000000115, 0.0730000000000004, -0.045999999999999375, -0.04525000000000112], zp_timestamp='2025-11-25T21:57:00')
2025-11-25T23:58:22.903 [DEBUG] [Thread-8079] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:58:22.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:58:22.998 [DEBUG] [Thread-8082] [transport.py] [_log()] starting thread (client mode): 0x70d40df0
2025-11-25T23:58:22.999 [DEBUG] [Thread-8082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:58:23.017 [DEBUG] [Thread-8082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:58:23.017 [INFO] [Thread-8082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:58:23.024 [DEBUG] [Thread-8082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] client lang: <none>
2025-11-25T23:58:23.025 [DEBUG] [Thread-8082] [transport.py] [_log()] server lang: <none>
2025-11-25T23:58:23.026 [DEBUG] [Thread-8082] [transport.py] [_log()] kex follows: False
2025-11-25T23:58:23.026 [DEBUG] [Thread-8082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:58:23.026 [DEBUG] [Thread-8082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:58:23.026 [DEBUG] [Thread-8082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:58:23.026 [DEBUG] [Thread-8082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:58:23.026 [DEBUG] [Thread-8082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:58:23.026 [DEBUG] [Thread-8082] [transport.py] [_log()] Compression: none
2025-11-25T23:58:23.026 [DEBUG] [Thread-8082] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:58:23.083 [DEBUG] [Thread-8082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:58:23.083 [DEBUG] [Thread-8082] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:58:23.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:58:23.084 [DEBUG] [Thread-8082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:58:23.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:58:23.139 [DEBUG] [Thread-8082] [transport.py] [_log()] userauth is OK
2025-11-25T23:58:23.140 [DEBUG] [Thread-8082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:58:23.140 [DEBUG] [Thread-8082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:58:23.140 [DEBUG] [Thread-8082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:58:23.140 [DEBUG] [Thread-8082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:58:23.162 [INFO] [Thread-8082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:58:23.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:58:23.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:58:23.977 [DEBUG] [Thread-8082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:58:23.977 [DEBUG] [Thread-8082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:58:24.024 [DEBUG] [Thread-8082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:58:24.024 [DEBUG] [Thread-8082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:58:24.033 [DEBUG] [Thread-8082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:58:24.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:58:24.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:58:24.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:58:24.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:58:24.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:58:24.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:58:24.068 [DEBUG] [Thread-8082] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:58:31.368 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:33.682 [DEBUG] [Thread-8084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:41.767 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:48.726 [DEBUG] [Thread-8085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:52.167 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:58:54.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:58:54.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:58:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:58:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 58, 36), 29.41, 12.96, 0.0, 14.75, 19.92, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:58:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:58:36
2025-11-25T23:58:54.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:58:55.004 [DEBUG] [Thread-8086] [transport.py] [_log()] starting thread (client mode): 0x7374d360
2025-11-25T23:58:55.004 [DEBUG] [Thread-8086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:58:55.025 [DEBUG] [Thread-8086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:58:55.025 [INFO] [Thread-8086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:58:55.028 [DEBUG] [Thread-8086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:58:55.028 [DEBUG] [Thread-8086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] client lang: <none>
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] server lang: <none>
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] kex follows: False
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] Compression: none
2025-11-25T23:58:55.029 [DEBUG] [Thread-8086] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:58:55.048 [DEBUG] [Thread-8086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:58:55.049 [DEBUG] [Thread-8086] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:58:55.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:58:55.050 [DEBUG] [Thread-8086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:58:55.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:58:55.052 [DEBUG] [Thread-8086] [transport.py] [_log()] userauth is OK
2025-11-25T23:58:55.052 [DEBUG] [Thread-8086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:58:55.052 [DEBUG] [Thread-8086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:58:55.053 [DEBUG] [Thread-8086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:58:55.053 [DEBUG] [Thread-8086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:58:55.076 [INFO] [Thread-8086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:58:55.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:58:55.748 [DEBUG] [Thread-8086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:58:55.748 [DEBUG] [Thread-8086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:58:55.749 [DEBUG] [Thread-8086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:58:55.790 [DEBUG] [Thread-8086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:58:55.790 [DEBUG] [Thread-8086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:58:55.794 [DEBUG] [Thread-8086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:58:55.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:58:55.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:58:55.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:58:55.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:58:55.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:58:55.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:58:55.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:58:55.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:58:55.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:58:55.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.915375 -999.00  +20.10   9.41     18   -4.80 1 1 1 1 1     0    0 24.66 -15.35 ZNESW 8.4 9.4 145.2 14.5 19.8 -26.2 19.7 -25.7 19.4 -24.6 19.7 -25.3
2025-11-25T23:58:55.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:58:55.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:58:55.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.915375
2025-11-25T23:58:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:58:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:58:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:58:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:58:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:58:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:58:36', tmtdew=29.41, humidity=12.96, cloud=0.0, wind=14.75, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:58:36', seeing=0.83, atlas_timestamp='2025-11-25T21:58:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.00575000000000081, -0.0547500000000003, 0.015499999999999403, 0.0035000000000007248, 0.054250000000001464, 0.02999999999999936, -0.01974999999999838, -0.002500000000001279, 0.0039999999999995595, 0.04224999999999923, -0.026000000000001577, 0.08900000000000041, 0.0832499999999996, -0.014000000000001123, -0.015000000000000568, -0.014749999999999375, 0.014499999999999957, 0.03200000000000003, -0.039750000000001506, 0.03199999999999825, 0.04124999999999801, 0.016250000000001208, -0.03074999999999939, -0.023000000000001464, -0.032999999999999474, -0.015750000000000597, 0.06199999999999939, 0.12650000000000006, 0.04600000000000115, 0.0730000000000004, -0.045999999999999375, -0.04525000000000112], zp_timestamp='2025-11-25T21:57:00')
2025-11-25T23:58:55.821 [DEBUG] [Thread-8086] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:58:55.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:58:55.916 [DEBUG] [Thread-8089] [transport.py] [_log()] starting thread (client mode): 0x70d40e50
2025-11-25T23:58:55.916 [DEBUG] [Thread-8089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:58:55.935 [DEBUG] [Thread-8089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:58:55.936 [INFO] [Thread-8089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:58:55.943 [DEBUG] [Thread-8089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:58:55.943 [DEBUG] [Thread-8089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] client lang: <none>
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] server lang: <none>
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] kex follows: False
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:58:55.944 [DEBUG] [Thread-8089] [transport.py] [_log()] Compression: none
2025-11-25T23:58:55.945 [DEBUG] [Thread-8089] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:58:56.004 [DEBUG] [Thread-8089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:58:56.005 [DEBUG] [Thread-8089] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:58:56.006 [DEBUG] [Thread-8089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:58:56.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:58:56.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:58:56.064 [DEBUG] [Thread-8089] [transport.py] [_log()] userauth is OK
2025-11-25T23:58:56.064 [DEBUG] [Thread-8089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:58:56.064 [DEBUG] [Thread-8089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:58:56.073 [DEBUG] [Thread-8089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:58:56.074 [DEBUG] [Thread-8089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:58:56.093 [INFO] [Thread-8089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:58:56.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:58:56.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:58:56.920 [DEBUG] [Thread-8089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:58:56.921 [DEBUG] [Thread-8089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:58:56.969 [DEBUG] [Thread-8089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:58:56.969 [DEBUG] [Thread-8089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:58:56.978 [DEBUG] [Thread-8089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:58:56.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:58:56.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:58:56.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:58:57.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:58:57.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:58:57.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:58:57.015 [DEBUG] [Thread-8089] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:59:02.559 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:03.765 [DEBUG] [Thread-8091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:10.510 [DEBUG] [Thread-8092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:12.954 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:13.032 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:13.033 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:18.813 [DEBUG] [Thread-8093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:23.350 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:59:27.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:59:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-25T23:59:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 59, 8), 29.31, 13.04, 0.0, 14.58, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-25T23:59:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:59:08
2025-11-25T23:59:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-25T23:59:27.971 [DEBUG] [Thread-8094] [transport.py] [_log()] starting thread (client mode): 0x70d7e620
2025-11-25T23:59:27.971 [DEBUG] [Thread-8094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:59:27.981 [DEBUG] [Thread-8094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-25T23:59:27.982 [INFO] [Thread-8094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] client lang: <none>
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] server lang: <none>
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] kex follows: False
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] Compression: none
2025-11-25T23:59:27.985 [DEBUG] [Thread-8094] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:59:28.000 [DEBUG] [Thread-8094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:59:28.000 [DEBUG] [Thread-8094] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:59:28.000 [DEBUG] [Thread-8094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-25T23:59:28.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-25T23:59:28.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:59:28.001 [DEBUG] [Thread-8094] [transport.py] [_log()] userauth is OK
2025-11-25T23:59:28.001 [DEBUG] [Thread-8094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:59:28.001 [DEBUG] [Thread-8094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:59:28.001 [DEBUG] [Thread-8094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-25T23:59:28.001 [DEBUG] [Thread-8094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:59:28.013 [INFO] [Thread-8094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:59:28.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:59:28.616 [DEBUG] [Thread-8094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:59:28.617 [DEBUG] [Thread-8094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:59:28.617 [DEBUG] [Thread-8094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-25T23:59:28.658 [DEBUG] [Thread-8094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:59:28.658 [DEBUG] [Thread-8094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:59:28.661 [DEBUG] [Thread-8094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:59:28.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:59:28.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-25T23:59:28.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-25T23:59:28.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-25T23:59:28.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:59:28.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-25T23:59:28.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:59:28.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:59:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-25T23:59:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.916070 -999.00  +20.20  13.62     17   -4.90 1 1 1 1 1     0    0 24.17 -11.36 ZNESW 8.4 13.6 164.8 17.5 19.8 -26.3 19.8 -25.7 19.4 -24.3 19.7 -25.1
2025-11-25T23:59:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-25T23:59:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-25T23:59:28.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.916070
2025-11-25T23:59:28.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-25T23:59:28.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-25T23:59:28.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-25T23:59:28.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-25T23:59:28.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-25T23:59:28.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:59:08', tmtdew=29.31, humidity=13.04, cloud=0.0, wind=14.58, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:59:08', seeing=0.87, atlas_timestamp='2025-11-25T21:59:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.00575000000000081, -0.0547500000000003, 0.015499999999999403, 0.0035000000000007248, 0.054250000000001464, 0.02999999999999936, -0.01974999999999838, -0.002500000000001279, 0.0039999999999995595, 0.04224999999999923, -0.026000000000001577, 0.08900000000000041, 0.0832499999999996, -0.014000000000001123, -0.015000000000000568, -0.014749999999999375, 0.014499999999999957, 0.03200000000000003, -0.039750000000001506, 0.03199999999999825, 0.04124999999999801, 0.016250000000001208, -0.03074999999999939, -0.023000000000001464, -0.032999999999999474, -0.015750000000000597, 0.06199999999999939, 0.12650000000000006, 0.04600000000000115, 0.0730000000000004, -0.045999999999999375, -0.04525000000000112], zp_timestamp='2025-11-25T21:57:00')
2025-11-25T23:59:28.686 [DEBUG] [Thread-8094] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:59:28.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-25T23:59:28.782 [DEBUG] [Thread-8097] [transport.py] [_log()] starting thread (client mode): 0x70d38d00
2025-11-25T23:59:28.782 [DEBUG] [Thread-8097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-25T23:59:28.797 [DEBUG] [Thread-8097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-25T23:59:28.797 [INFO] [Thread-8097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] client lang: <none>
2025-11-25T23:59:28.805 [DEBUG] [Thread-8097] [transport.py] [_log()] server lang: <none>
2025-11-25T23:59:28.806 [DEBUG] [Thread-8097] [transport.py] [_log()] kex follows: False
2025-11-25T23:59:28.806 [DEBUG] [Thread-8097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-25T23:59:28.806 [DEBUG] [Thread-8097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-25T23:59:28.806 [DEBUG] [Thread-8097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-25T23:59:28.806 [DEBUG] [Thread-8097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-25T23:59:28.806 [DEBUG] [Thread-8097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-25T23:59:28.806 [DEBUG] [Thread-8097] [transport.py] [_log()] Compression: none
2025-11-25T23:59:28.806 [DEBUG] [Thread-8097] [transport.py] [_log()] === End of kex handshake ===
2025-11-25T23:59:28.864 [DEBUG] [Thread-8097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-25T23:59:28.865 [DEBUG] [Thread-8097] [transport.py] [_log()] Switch to new keys ...
2025-11-25T23:59:28.865 [DEBUG] [Thread-8097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-25T23:59:28.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-25T23:59:28.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-25T23:59:28.920 [DEBUG] [Thread-8097] [transport.py] [_log()] userauth is OK
2025-11-25T23:59:28.920 [DEBUG] [Thread-8097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-25T23:59:28.920 [DEBUG] [Thread-8097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-25T23:59:28.921 [DEBUG] [Thread-8097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-25T23:59:28.921 [DEBUG] [Thread-8097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-25T23:59:28.939 [INFO] [Thread-8097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-25T23:59:28.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-25T23:59:28.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-25T23:59:29.767 [DEBUG] [Thread-8097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-25T23:59:29.767 [DEBUG] [Thread-8097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-25T23:59:29.818 [DEBUG] [Thread-8097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-25T23:59:29.818 [DEBUG] [Thread-8097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-25T23:59:29.828 [DEBUG] [Thread-8097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-25T23:59:29.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-25T23:59:29.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-25T23:59:29.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-25T23:59:29.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-25T23:59:29.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-25T23:59:29.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-25T23:59:29.864 [DEBUG] [Thread-8097] [transport.py] [_log()] EOF in transport thread
2025-11-25T23:59:33.748 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:33.849 [DEBUG] [Thread-8099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:44.208 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:48.907 [DEBUG] [Thread-8100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:54.626 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-25T23:59:59.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-25T23:59:59.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-25T23:59:59.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:00:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 25, 23, 59, 40), 29.26, 13.11, 0.0, 13.82, 19.89, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:00:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-25 23:59:40
2025-11-26T00:00:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:00:00.838 [DEBUG] [Thread-8101] [transport.py] [_log()] starting thread (client mode): 0x70d3a5f0
2025-11-26T00:00:00.838 [DEBUG] [Thread-8101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:00:00.858 [DEBUG] [Thread-8101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:00:00.858 [INFO] [Thread-8101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:00:00.861 [DEBUG] [Thread-8101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] client lang: <none>
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] server lang: <none>
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] kex follows: False
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] Compression: none
2025-11-26T00:00:00.862 [DEBUG] [Thread-8101] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:00:00.880 [DEBUG] [Thread-8101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:00:00.881 [DEBUG] [Thread-8101] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:00:00.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:00:00.882 [DEBUG] [Thread-8101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:00:00.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:00:00.884 [DEBUG] [Thread-8101] [transport.py] [_log()] userauth is OK
2025-11-26T00:00:00.884 [DEBUG] [Thread-8101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:00:00.884 [DEBUG] [Thread-8101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:00:00.885 [DEBUG] [Thread-8101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:00:00.885 [DEBUG] [Thread-8101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:00:00.909 [INFO] [Thread-8101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:00:00.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:00:01.518 [DEBUG] [Thread-8101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:00:01.518 [DEBUG] [Thread-8101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:00:01.518 [DEBUG] [Thread-8101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:00:01.559 [DEBUG] [Thread-8101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:00:01.560 [DEBUG] [Thread-8101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:00:01.562 [DEBUG] [Thread-8101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:00:01.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:00:01.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:00:01.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:00:01.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:00:01.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:00:01.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:00:01.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:00:01.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:00:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:00:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.916417 -999.00  +20.20  10.38     18   -4.80 1 1 1 1 1     0    0 24.58 -8.97 ZNESW 9.7 10.4 146.8 14.5 19.8 -26.4 19.8 -25.7 19.5 -24.3 19.7 -25.4
2025-11-26T00:00:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:00:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:00:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.916417
2025-11-26T00:00:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:00:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:00:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:00:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:00:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:00:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-25T23:59:40', tmtdew=29.26, humidity=13.11, cloud=0.0, wind=13.82, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-25T23:59:40', seeing=0.9, atlas_timestamp='2025-11-25T21:59:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.00575000000000081, -0.0547500000000003, 0.015499999999999403, 0.0035000000000007248, 0.054250000000001464, 0.02999999999999936, -0.01974999999999838, -0.002500000000001279, 0.0039999999999995595, 0.04224999999999923, -0.026000000000001577, 0.08900000000000041, 0.0832499999999996, -0.014000000000001123, -0.015000000000000568, -0.014749999999999375, 0.014499999999999957, 0.03200000000000003, -0.039750000000001506, 0.03199999999999825, 0.04124999999999801, 0.016250000000001208, -0.03074999999999939, -0.023000000000001464, -0.032999999999999474, -0.015750000000000597, 0.06199999999999939, 0.12650000000000006, 0.04600000000000115, 0.0730000000000004, -0.045999999999999375, -0.04525000000000112], zp_timestamp='2025-11-25T21:57:00')
2025-11-26T00:00:01.576 [DEBUG] [Thread-8101] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:00:01.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:00:01.753 [DEBUG] [Thread-8104] [transport.py] [_log()] starting thread (client mode): 0x70d74d30
2025-11-26T00:00:01.753 [DEBUG] [Thread-8104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:00:01.768 [DEBUG] [Thread-8104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:00:01.768 [INFO] [Thread-8104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] client lang: <none>
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] server lang: <none>
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] kex follows: False
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] Compression: none
2025-11-26T00:00:01.776 [DEBUG] [Thread-8104] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:00:01.834 [DEBUG] [Thread-8104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:00:01.834 [DEBUG] [Thread-8104] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:00:01.834 [DEBUG] [Thread-8104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:00:01.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:00:01.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:00:01.892 [DEBUG] [Thread-8104] [transport.py] [_log()] userauth is OK
2025-11-26T00:00:01.892 [DEBUG] [Thread-8104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:00:01.892 [DEBUG] [Thread-8104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:00:01.892 [DEBUG] [Thread-8104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:00:01.892 [DEBUG] [Thread-8104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:00:01.910 [INFO] [Thread-8104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:00:01.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:00:01.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:00:02.786 [DEBUG] [Thread-8104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:00:02.786 [DEBUG] [Thread-8104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:00:02.835 [DEBUG] [Thread-8104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:00:02.835 [DEBUG] [Thread-8104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:00:02.845 [DEBUG] [Thread-8104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:00:02.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:00:02.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:00:02.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
2025-11-26T00:00:02.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:00:02.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:00:02.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:00:02.884 [DEBUG] [Thread-8104] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:00:03.940 [DEBUG] [Thread-8106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:05.071 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:10.583 [DEBUG] [Thread-8107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:13.233 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:13.234 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:15.482 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:18.992 [DEBUG] [Thread-8108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:25.883 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:32.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:00:32.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:00:32.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:00:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 0, 12), 29.28, 13.08, 0.0, 14.68, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:00:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:00:12
2025-11-26T00:00:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:00:33.854 [DEBUG] [Thread-8109] [transport.py] [_log()] starting thread (client mode): 0x70da75e0
2025-11-26T00:00:33.854 [DEBUG] [Thread-8109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:00:33.877 [DEBUG] [Thread-8109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:00:33.877 [INFO] [Thread-8109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:00:33.880 [DEBUG] [Thread-8109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:00:33.880 [DEBUG] [Thread-8109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:00:33.880 [DEBUG] [Thread-8109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:00:33.880 [DEBUG] [Thread-8109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:00:33.880 [DEBUG] [Thread-8109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:00:33.880 [DEBUG] [Thread-8109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:00:33.880 [DEBUG] [Thread-8109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] client lang: <none>
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] server lang: <none>
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] kex follows: False
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:00:33.881 [DEBUG] [Thread-8109] [transport.py] [_log()] Compression: none
2025-11-26T00:00:33.882 [DEBUG] [Thread-8109] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:00:33.896 [DEBUG] [Thread-8109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:00:33.896 [DEBUG] [Thread-8109] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:00:33.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:00:33.897 [DEBUG] [Thread-8109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:00:33.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:00:33.899 [DEBUG] [Thread-8109] [transport.py] [_log()] userauth is OK
2025-11-26T00:00:33.899 [DEBUG] [Thread-8109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:00:33.899 [DEBUG] [Thread-8109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:00:33.899 [DEBUG] [Thread-8109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:00:33.899 [DEBUG] [Thread-8109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:00:33.917 [INFO] [Thread-8109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:00:33.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:00:34.025 [DEBUG] [Thread-8111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:34.534 [DEBUG] [Thread-8109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:00:34.535 [DEBUG] [Thread-8109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:00:34.535 [DEBUG] [Thread-8109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:00:34.575 [DEBUG] [Thread-8109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:00:34.576 [DEBUG] [Thread-8109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:00:34.578 [DEBUG] [Thread-8109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:00:34.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:00:34.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:00:34.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:00:34.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:00:34.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:00:34.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:00:34.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:00:34.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:00:34.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:00:34.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.916764 -999.00  +20.20  13.05     17   -4.90 1 1 1 1 1     0    0 24.98 -6.67 ZNESW 12.3 13.1 152.8 14.8 19.8 -26.2 19.8 -25.7 19.5 -24.4 19.7 -25.4
2025-11-26T00:00:34.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:00:34.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:00:34.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.916764
2025-11-26T00:00:34.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:00:34.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:00:34.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:00:34.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:00:34.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:00:34.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:00:12', tmtdew=29.28, humidity=13.08, cloud=0.0, wind=14.68, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:00:12', seeing=0.98, atlas_timestamp='2025-11-25T22:00:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.00575000000000081, -0.0547500000000003, 0.015499999999999403, 0.0035000000000007248, 0.054250000000001464, 0.02999999999999936, -0.01974999999999838, -0.002500000000001279, 0.0039999999999995595, 0.04224999999999923, -0.026000000000001577, 0.08900000000000041, 0.0832499999999996, -0.014000000000001123, -0.015000000000000568, -0.014749999999999375, 0.014499999999999957, 0.03200000000000003, -0.039750000000001506, 0.03199999999999825, 0.04124999999999801, 0.016250000000001208, -0.03074999999999939, -0.023000000000001464, -0.032999999999999474, -0.015750000000000597, 0.06199999999999939, 0.12650000000000006, 0.04600000000000115, 0.0730000000000004, -0.045999999999999375, -0.04525000000000112], zp_timestamp='2025-11-25T21:57:00')
2025-11-26T00:00:34.603 [DEBUG] [Thread-8109] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:00:34.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:00:34.698 [DEBUG] [Thread-8113] [transport.py] [_log()] starting thread (client mode): 0x70d40490
2025-11-26T00:00:34.699 [DEBUG] [Thread-8113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:00:34.713 [DEBUG] [Thread-8113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:00:34.713 [INFO] [Thread-8113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:00:34.720 [DEBUG] [Thread-8113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:00:34.720 [DEBUG] [Thread-8113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] client lang: <none>
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] server lang: <none>
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] kex follows: False
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] Compression: none
2025-11-26T00:00:34.721 [DEBUG] [Thread-8113] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:00:34.784 [DEBUG] [Thread-8113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:00:34.784 [DEBUG] [Thread-8113] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:00:34.785 [DEBUG] [Thread-8113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:00:34.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:00:34.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:00:34.840 [DEBUG] [Thread-8113] [transport.py] [_log()] userauth is OK
2025-11-26T00:00:34.840 [DEBUG] [Thread-8113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:00:34.840 [DEBUG] [Thread-8113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:00:34.840 [DEBUG] [Thread-8113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:00:34.840 [DEBUG] [Thread-8113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:00:34.861 [INFO] [Thread-8113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:00:34.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:00:34.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:00:35.682 [DEBUG] [Thread-8113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:00:35.682 [DEBUG] [Thread-8113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:00:35.731 [DEBUG] [Thread-8113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:00:35.731 [DEBUG] [Thread-8113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:00:35.740 [DEBUG] [Thread-8113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:00:35.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:00:35.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:00:35.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:00:35.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:00:35.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:00:35.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:00:35.778 [DEBUG] [Thread-8113] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:00:36.261 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:46.666 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:49.063 [DEBUG] [Thread-8115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:00:57.052 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:04.119 [DEBUG] [Thread-8116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:05.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:01:05.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:01:05.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:01:06.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 0, 44), 29.3, 13.09, 0.0, 12.86, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:01:06.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:00:44
2025-11-26T00:01:06.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:01:06.801 [DEBUG] [Thread-8117] [transport.py] [_log()] starting thread (client mode): 0x70d7e3e0
2025-11-26T00:01:06.801 [DEBUG] [Thread-8117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:01:06.814 [DEBUG] [Thread-8117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:01:06.814 [INFO] [Thread-8117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:01:06.816 [DEBUG] [Thread-8117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] client lang: <none>
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] server lang: <none>
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] kex follows: False
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] Compression: none
2025-11-26T00:01:06.817 [DEBUG] [Thread-8117] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:01:06.824 [DEBUG] [Thread-8117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:01:06.824 [DEBUG] [Thread-8117] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:01:06.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:01:06.824 [DEBUG] [Thread-8117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:01:06.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:01:06.825 [DEBUG] [Thread-8117] [transport.py] [_log()] userauth is OK
2025-11-26T00:01:06.825 [DEBUG] [Thread-8117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:01:06.825 [DEBUG] [Thread-8117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:01:06.825 [DEBUG] [Thread-8117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:01:06.825 [DEBUG] [Thread-8117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:01:06.833 [INFO] [Thread-8117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:01:06.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:01:07.408 [DEBUG] [Thread-8117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:01:07.408 [DEBUG] [Thread-8117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:01:07.408 [DEBUG] [Thread-8117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:01:07.449 [DEBUG] [Thread-8117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:01:07.449 [DEBUG] [Thread-8117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:01:07.451 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:07.452 [DEBUG] [Thread-8117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:01:07.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:01:07.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:01:07.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:01:07.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:01:07.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:01:07.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:01:07.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:01:07.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:01:07.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:01:07.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.917111 -999.00  +20.30   9.66     17   -4.80 1 1 1 1 1     0    0 25.00 -4.65 ZNESW 7.5 9.7 140.0 14.1 19.8 -26.3 19.8 -25.7 19.4 -24.2 19.7 -25.4
2025-11-26T00:01:07.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:01:07.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:01:07.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.917111
2025-11-26T00:01:07.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:01:07.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:01:07.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:01:07.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:01:07.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:01:07.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:00:44', tmtdew=29.3, humidity=13.09, cloud=0.0, wind=12.86, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:00:44', seeing=0.95, atlas_timestamp='2025-11-25T22:00:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.00575000000000081, -0.0547500000000003, 0.015499999999999403, 0.0035000000000007248, 0.054250000000001464, 0.02999999999999936, -0.01974999999999838, -0.002500000000001279, 0.0039999999999995595, 0.04224999999999923, -0.026000000000001577, 0.08900000000000041, 0.0832499999999996, -0.014000000000001123, -0.015000000000000568, -0.014749999999999375, 0.014499999999999957, 0.03200000000000003, -0.039750000000001506, 0.03199999999999825, 0.04124999999999801, 0.016250000000001208, -0.03074999999999939, -0.023000000000001464, -0.032999999999999474, -0.015750000000000597, 0.06199999999999939, 0.12650000000000006, 0.04600000000000115, 0.0730000000000004, -0.045999999999999375, -0.04525000000000112], zp_timestamp='2025-11-25T21:57:00')
2025-11-26T00:01:07.472 [DEBUG] [Thread-8117] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:01:07.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:01:07.557 [DEBUG] [Thread-8120] [transport.py] [_log()] starting thread (client mode): 0x7374de10
2025-11-26T00:01:07.557 [DEBUG] [Thread-8120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:01:07.572 [DEBUG] [Thread-8120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:01:07.572 [INFO] [Thread-8120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:01:07.579 [DEBUG] [Thread-8120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:01:07.579 [DEBUG] [Thread-8120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:01:07.579 [DEBUG] [Thread-8120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:01:07.579 [DEBUG] [Thread-8120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:01:07.579 [DEBUG] [Thread-8120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:01:07.579 [DEBUG] [Thread-8120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:01:07.579 [DEBUG] [Thread-8120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] client lang: <none>
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] server lang: <none>
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] kex follows: False
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] Compression: none
2025-11-26T00:01:07.580 [DEBUG] [Thread-8120] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:01:07.634 [DEBUG] [Thread-8120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:01:07.635 [DEBUG] [Thread-8120] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:01:07.635 [DEBUG] [Thread-8120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:01:07.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:01:07.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:01:07.692 [DEBUG] [Thread-8120] [transport.py] [_log()] userauth is OK
2025-11-26T00:01:07.692 [DEBUG] [Thread-8120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:01:07.692 [DEBUG] [Thread-8120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:01:07.692 [DEBUG] [Thread-8120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:01:07.692 [DEBUG] [Thread-8120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:01:07.709 [INFO] [Thread-8120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:01:07.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:01:07.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:01:08.576 [DEBUG] [Thread-8120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:01:08.576 [DEBUG] [Thread-8120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:01:08.623 [DEBUG] [Thread-8120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:01:08.623 [DEBUG] [Thread-8120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:01:08.632 [DEBUG] [Thread-8120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:01:08.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:01:08.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:01:08.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:01:08.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:01:08.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:01:08.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:01:08.663 [DEBUG] [Thread-8120] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:01:10.660 [DEBUG] [Thread-8122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:13.434 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:13.436 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:17.847 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:19.155 [DEBUG] [Thread-8123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:28.246 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:34.216 [DEBUG] [Thread-8124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:01:38.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:01:38.670 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01: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
2025-11-26T00:01:39.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 1, 16), 29.27, 13.13, 0.0, 13.06, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:01:39.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:01:16
2025-11-26T00:01:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:01:39.625 [DEBUG] [Thread-8125] [transport.py] [_log()] starting thread (client mode): 0x70d39e70
2025-11-26T00:01:39.625 [DEBUG] [Thread-8125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:01:39.644 [DEBUG] [Thread-8125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:01:39.644 [INFO] [Thread-8125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:01:39.647 [DEBUG] [Thread-8125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] client lang: <none>
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] server lang: <none>
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] kex follows: False
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] Compression: none
2025-11-26T00:01:39.648 [DEBUG] [Thread-8125] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:01:39.666 [DEBUG] [Thread-8125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:01:39.667 [DEBUG] [Thread-8125] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:01:39.667 [DEBUG] [Thread-8125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:01:39.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:01:39.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:01:39.669 [DEBUG] [Thread-8125] [transport.py] [_log()] userauth is OK
2025-11-26T00:01:39.670 [DEBUG] [Thread-8125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:01:39.670 [DEBUG] [Thread-8125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:01:39.670 [DEBUG] [Thread-8125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:01:39.670 [DEBUG] [Thread-8125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:01:39.695 [INFO] [Thread-8125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:01:39.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:01:40.295 [DEBUG] [Thread-8125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:01:40.296 [DEBUG] [Thread-8125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:01:40.296 [DEBUG] [Thread-8125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:01:40.337 [DEBUG] [Thread-8125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:01:40.337 [DEBUG] [Thread-8125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:01:40.340 [DEBUG] [Thread-8125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:01:40.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:01:40.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:01:40.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:01:40.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:01:40.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:01:40.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:01:40.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:01:40.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:01:40.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:01:40.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.917458 -999.00  +20.20   7.47     18   -4.80 1 1 1 1 1     0    0 24.63 -2.39 ZNESW 8.3 7.5 145.6 10.6 19.8 -26.5 19.8 -25.8 19.5 -24.6 19.7 -25.2
2025-11-26T00:01:40.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:01:40.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:01:40.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.917458
2025-11-26T00:01:40.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:01:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:01:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:01:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:01:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:01:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:01:16', tmtdew=29.27, humidity=13.13, cloud=0.0, wind=13.06, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:01:16', seeing=0.98, atlas_timestamp='2025-11-25T22:01:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T21:59:00')
2025-11-26T00:01:40.368 [DEBUG] [Thread-8125] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:01:40.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:01:40.464 [DEBUG] [Thread-8128] [transport.py] [_log()] starting thread (client mode): 0x70d3a4a0
2025-11-26T00:01:40.464 [DEBUG] [Thread-8128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:01:40.479 [DEBUG] [Thread-8128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:01:40.480 [INFO] [Thread-8128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:01:40.487 [DEBUG] [Thread-8128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:01:40.487 [DEBUG] [Thread-8128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:01:40.488 [DEBUG] [Thread-8128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:01:40.488 [DEBUG] [Thread-8128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:01:40.488 [DEBUG] [Thread-8128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:01:40.488 [DEBUG] [Thread-8128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:01:40.488 [DEBUG] [Thread-8128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:01:40.488 [DEBUG] [Thread-8128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:01:40.488 [DEBUG] [Thread-8128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:01:40.488 [DEBUG] [Thread-8128] [transport.py] [_log()] client lang: <none>
2025-11-26T00:01:40.489 [DEBUG] [Thread-8128] [transport.py] [_log()] server lang: <none>
2025-11-26T00:01:40.489 [DEBUG] [Thread-8128] [transport.py] [_log()] kex follows: False
2025-11-26T00:01:40.489 [DEBUG] [Thread-8128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:01:40.489 [DEBUG] [Thread-8128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:01:40.489 [DEBUG] [Thread-8128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:01:40.489 [DEBUG] [Thread-8128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:01:40.489 [DEBUG] [Thread-8128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:01:40.489 [DEBUG] [Thread-8128] [transport.py] [_log()] Compression: none
2025-11-26T00:01:40.490 [DEBUG] [Thread-8128] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:01:40.543 [DEBUG] [Thread-8128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:01:40.543 [DEBUG] [Thread-8128] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:01:40.543 [DEBUG] [Thread-8128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:01:40.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:01:40.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:01:40.600 [DEBUG] [Thread-8128] [transport.py] [_log()] userauth is OK
2025-11-26T00:01:40.601 [DEBUG] [Thread-8128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:01:40.601 [DEBUG] [Thread-8128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:01:40.601 [DEBUG] [Thread-8128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:01:40.601 [DEBUG] [Thread-8128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:01:40.625 [INFO] [Thread-8128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:01:40.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:01:40.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:01:41.460 [DEBUG] [Thread-8128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:01:41.461 [DEBUG] [Thread-8128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:01:41.509 [DEBUG] [Thread-8128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:01:41.509 [DEBUG] [Thread-8128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:01:41.518 [DEBUG] [Thread-8128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:01:41.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:01:41.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:01: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
2025-11-26T00:01:41.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:01:41.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:01:41.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:01:41.554 [DEBUG] [Thread-8128] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:01:49.058 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:49.248 [DEBUG] [Thread-8130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:01:59.453 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:04.291 [DEBUG] [Thread-8131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:09.850 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:10.740 [DEBUG] [Thread-8132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:11.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:02:11.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:02:11.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:02:12.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 1, 48), 29.15, 13.14, 0.0, 12.69, 19.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:02:12.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:01:48
2025-11-26T00:02:12.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:02:12.528 [DEBUG] [Thread-8133] [transport.py] [_log()] starting thread (client mode): 0x70da6e30
2025-11-26T00:02:12.528 [DEBUG] [Thread-8133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:02:12.547 [DEBUG] [Thread-8133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:02:12.547 [INFO] [Thread-8133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] client lang: <none>
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] server lang: <none>
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] kex follows: False
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:02:12.550 [DEBUG] [Thread-8133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:02:12.551 [DEBUG] [Thread-8133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:02:12.551 [DEBUG] [Thread-8133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:02:12.551 [DEBUG] [Thread-8133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:02:12.551 [DEBUG] [Thread-8133] [transport.py] [_log()] Compression: none
2025-11-26T00:02:12.551 [DEBUG] [Thread-8133] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:02:12.567 [DEBUG] [Thread-8133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:02:12.567 [DEBUG] [Thread-8133] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:02:12.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:02:12.567 [DEBUG] [Thread-8133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:02:12.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:02:12.567 [DEBUG] [Thread-8133] [transport.py] [_log()] userauth is OK
2025-11-26T00:02:12.567 [DEBUG] [Thread-8133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:02:12.567 [DEBUG] [Thread-8133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:02:12.568 [DEBUG] [Thread-8133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:02:12.568 [DEBUG] [Thread-8133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:02:12.588 [INFO] [Thread-8133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:02:12.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:02:13.154 [DEBUG] [Thread-8133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:02:13.154 [DEBUG] [Thread-8133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:02:13.154 [DEBUG] [Thread-8133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:02:13.195 [DEBUG] [Thread-8133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:02:13.195 [DEBUG] [Thread-8133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:02:13.199 [DEBUG] [Thread-8133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:02:13.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:02:13.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:02:13.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:02:13.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:02:13.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:02:13.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:02:13.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:02:13.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:02:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:02:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.918153 -999.00  +20.20   7.81     18   -4.70 1 1 1 1 1     0    0 24.84 -0.35 ZNESW 9.6 7.8 151.6 12.4 19.8 -26.3 19.8 -25.8 19.5 -24.5 19.6 -25.3
2025-11-26T00:02:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:02:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:02:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.918153
2025-11-26T00:02:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:02:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:02:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:02:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:02:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:02:13.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:01:48', tmtdew=29.15, humidity=13.14, cloud=0.0, wind=12.69, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:01:48', seeing=0.98, atlas_timestamp='2025-11-25T22:02:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T21:59:00')
2025-11-26T00:02:13.220 [DEBUG] [Thread-8133] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:02:13.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:02:13.316 [DEBUG] [Thread-8136] [transport.py] [_log()] starting thread (client mode): 0x70da4790
2025-11-26T00:02:13.317 [DEBUG] [Thread-8136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:02:13.330 [DEBUG] [Thread-8136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:02:13.330 [INFO] [Thread-8136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] client lang: <none>
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] server lang: <none>
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] kex follows: False
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:02:13.338 [DEBUG] [Thread-8136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:02:13.339 [DEBUG] [Thread-8136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:02:13.339 [DEBUG] [Thread-8136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:02:13.339 [DEBUG] [Thread-8136] [transport.py] [_log()] Compression: none
2025-11-26T00:02:13.339 [DEBUG] [Thread-8136] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:02:13.402 [DEBUG] [Thread-8136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:02:13.403 [DEBUG] [Thread-8136] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:02:13.403 [DEBUG] [Thread-8136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:02:13.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:02:13.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:02:13.463 [DEBUG] [Thread-8136] [transport.py] [_log()] userauth is OK
2025-11-26T00:02:13.463 [DEBUG] [Thread-8136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:02:13.463 [DEBUG] [Thread-8136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:02:13.463 [DEBUG] [Thread-8136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:02:13.464 [DEBUG] [Thread-8136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:02:13.482 [INFO] [Thread-8136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:02:13.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:02:13.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:02:13.646 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:13.648 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:14.322 [DEBUG] [Thread-8136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:02:14.323 [DEBUG] [Thread-8136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:02:14.371 [DEBUG] [Thread-8136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:02:14.371 [DEBUG] [Thread-8136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:02:14.381 [DEBUG] [Thread-8136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:02:14.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:02:14.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:02:14.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:02:14.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:02:14.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:02:14.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:02:14.418 [DEBUG] [Thread-8136] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:02:19.327 [DEBUG] [Thread-8138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:20.245 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:30.692 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:34.369 [DEBUG] [Thread-8139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:41.088 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:44.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:02:44.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:02:44.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:02:45.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 2, 20), 29.15, 13.14, 0.0, 13.0, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:02:45.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:02:20
2025-11-26T00:02:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:02:45.345 [DEBUG] [Thread-8140] [transport.py] [_log()] starting thread (client mode): 0x70d3be50
2025-11-26T00:02:45.345 [DEBUG] [Thread-8140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:02:45.365 [DEBUG] [Thread-8140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:02:45.365 [INFO] [Thread-8140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] client lang: <none>
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] server lang: <none>
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] kex follows: False
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] Compression: none
2025-11-26T00:02:45.368 [DEBUG] [Thread-8140] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:02:45.385 [DEBUG] [Thread-8140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:02:45.385 [DEBUG] [Thread-8140] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:02:45.385 [DEBUG] [Thread-8140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:02:45.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:02:45.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:02:45.386 [DEBUG] [Thread-8140] [transport.py] [_log()] userauth is OK
2025-11-26T00:02:45.386 [DEBUG] [Thread-8140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:02:45.386 [DEBUG] [Thread-8140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:02:45.386 [DEBUG] [Thread-8140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:02:45.386 [DEBUG] [Thread-8140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:02:45.399 [INFO] [Thread-8140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:02:45.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:02:46.076 [DEBUG] [Thread-8140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:02:46.076 [DEBUG] [Thread-8140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:02:46.077 [DEBUG] [Thread-8140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:02:46.118 [DEBUG] [Thread-8140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:02:46.118 [DEBUG] [Thread-8140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:02:46.122 [DEBUG] [Thread-8140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:02:46.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:02:46.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:02:46.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:02:46.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:02:46.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:02:46.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:02:46.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:02:46.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:02:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:02:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.918153 -999.00  +20.20   7.81     18   -4.70 1 1 1 1 1     0    0 24.84 -0.35 ZNESW 9.6 7.8 151.6 12.4 19.8 -26.3 19.8 -25.8 19.5 -24.5 19.6 -25.3
2025-11-26T00:02:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:02:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:02:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.918153
2025-11-26T00:02:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:02:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:02:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:02:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:02:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:02:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:02:20', tmtdew=29.15, humidity=13.14, cloud=0.0, wind=13.0, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:02:20', seeing=0.85, atlas_timestamp='2025-11-25T22:02:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T21:59:00')
2025-11-26T00:02:46.150 [DEBUG] [Thread-8140] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:02:46.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:02:46.254 [DEBUG] [Thread-8143] [transport.py] [_log()] starting thread (client mode): 0x70dbdc60
2025-11-26T00:02:46.254 [DEBUG] [Thread-8143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:02:46.275 [DEBUG] [Thread-8143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:02:46.275 [INFO] [Thread-8143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] client lang: <none>
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] server lang: <none>
2025-11-26T00:02:46.285 [DEBUG] [Thread-8143] [transport.py] [_log()] kex follows: False
2025-11-26T00:02:46.286 [DEBUG] [Thread-8143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:02:46.286 [DEBUG] [Thread-8143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:02:46.286 [DEBUG] [Thread-8143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:02:46.286 [DEBUG] [Thread-8143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:02:46.286 [DEBUG] [Thread-8143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:02:46.286 [DEBUG] [Thread-8143] [transport.py] [_log()] Compression: none
2025-11-26T00:02:46.286 [DEBUG] [Thread-8143] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:02:46.347 [DEBUG] [Thread-8143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:02:46.347 [DEBUG] [Thread-8143] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:02:46.348 [DEBUG] [Thread-8143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:02:46.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:02:46.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:02:46.407 [DEBUG] [Thread-8143] [transport.py] [_log()] userauth is OK
2025-11-26T00:02:46.407 [DEBUG] [Thread-8143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:02:46.407 [DEBUG] [Thread-8143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:02:46.407 [DEBUG] [Thread-8143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:02:46.408 [DEBUG] [Thread-8143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:02:46.431 [INFO] [Thread-8143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:02:46.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:02:46.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:02:47.295 [DEBUG] [Thread-8143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:02:47.295 [DEBUG] [Thread-8143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:02:47.343 [DEBUG] [Thread-8143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:02:47.343 [DEBUG] [Thread-8143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:02:47.352 [DEBUG] [Thread-8143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:02:47.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:02:47.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:02:47.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
2025-11-26T00:02:47.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:02:47.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:02:47.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:02:47.388 [DEBUG] [Thread-8143] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:02:49.402 [DEBUG] [Thread-8145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:02:51.493 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:01.907 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:04.448 [DEBUG] [Thread-8146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:10.818 [DEBUG] [Thread-8147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:12.332 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:13.851 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:13.852 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:17.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:03:17.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:03:17.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:03:18.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 2, 52), 29.16, 13.14, 0.0, 12.7, 19.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:03:18.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:02:52
2025-11-26T00:03:18.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:03:18.342 [DEBUG] [Thread-8148] [transport.py] [_log()] starting thread (client mode): 0x70d3ab90
2025-11-26T00:03:18.342 [DEBUG] [Thread-8148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:03:18.362 [DEBUG] [Thread-8148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:03:18.363 [INFO] [Thread-8148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] client lang: <none>
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] server lang: <none>
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] kex follows: False
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] Compression: none
2025-11-26T00:03:18.366 [DEBUG] [Thread-8148] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:03:18.384 [DEBUG] [Thread-8148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:03:18.385 [DEBUG] [Thread-8148] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:03:18.385 [DEBUG] [Thread-8148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:03:18.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:03:18.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:03:18.387 [DEBUG] [Thread-8148] [transport.py] [_log()] userauth is OK
2025-11-26T00:03:18.388 [DEBUG] [Thread-8148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:03:18.388 [DEBUG] [Thread-8148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:03:18.388 [DEBUG] [Thread-8148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:03:18.388 [DEBUG] [Thread-8148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:03:18.426 [INFO] [Thread-8148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:03:18.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:03:19.226 [DEBUG] [Thread-8148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:03:19.227 [DEBUG] [Thread-8148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:03:19.227 [DEBUG] [Thread-8148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:03:19.267 [DEBUG] [Thread-8148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:03:19.268 [DEBUG] [Thread-8148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:03:19.271 [DEBUG] [Thread-8148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:03:19.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:03:19.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:03:19.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:03:19.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:03:19.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:03:19.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:03:19.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:03:19.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:03:19.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:03:19.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.918500 -999.00  +20.20  11.82     18   -4.70 1 1 1 1 1     0    0 24.86 0.23 ZNESW 8.6 11.8 135.0 13.2 19.8 -26.3 19.8 -25.8 19.4 -24.4 19.7 -25.5
2025-11-26T00:03:19.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:03:19.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:03:19.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.918500
2025-11-26T00:03:19.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:03:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:03:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:03:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:03:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:03:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:02:52', tmtdew=29.16, humidity=13.14, cloud=0.0, wind=12.7, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:02:52', seeing=0.84, atlas_timestamp='2025-11-25T22:02:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T21:59:00')
2025-11-26T00:03:19.296 [DEBUG] [Thread-8148] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:03:19.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:03:19.395 [DEBUG] [Thread-8151] [transport.py] [_log()] starting thread (client mode): 0x70d39c00
2025-11-26T00:03:19.396 [DEBUG] [Thread-8151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:03:19.410 [DEBUG] [Thread-8151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:03:19.410 [INFO] [Thread-8151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:03:19.418 [DEBUG] [Thread-8151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:03:19.418 [DEBUG] [Thread-8151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:03:19.419 [DEBUG] [Thread-8151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:03:19.419 [DEBUG] [Thread-8151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:03:19.419 [DEBUG] [Thread-8151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:03:19.419 [DEBUG] [Thread-8151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:03:19.419 [DEBUG] [Thread-8151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:03:19.419 [DEBUG] [Thread-8151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:03:19.419 [DEBUG] [Thread-8151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:03:19.419 [DEBUG] [Thread-8151] [transport.py] [_log()] client lang: <none>
2025-11-26T00:03:19.420 [DEBUG] [Thread-8151] [transport.py] [_log()] server lang: <none>
2025-11-26T00:03:19.420 [DEBUG] [Thread-8151] [transport.py] [_log()] kex follows: False
2025-11-26T00:03:19.420 [DEBUG] [Thread-8151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:03:19.420 [DEBUG] [Thread-8151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:03:19.420 [DEBUG] [Thread-8151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:03:19.420 [DEBUG] [Thread-8151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:03:19.420 [DEBUG] [Thread-8151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:03:19.420 [DEBUG] [Thread-8151] [transport.py] [_log()] Compression: none
2025-11-26T00:03:19.421 [DEBUG] [Thread-8151] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:03:19.477 [DEBUG] [Thread-8151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:03:19.478 [DEBUG] [Thread-8151] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:03:19.479 [DEBUG] [Thread-8151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:03:19.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:03:19.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:03:19.483 [DEBUG] [Thread-8153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:19.537 [DEBUG] [Thread-8151] [transport.py] [_log()] userauth is OK
2025-11-26T00:03:19.537 [DEBUG] [Thread-8151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:03:19.537 [DEBUG] [Thread-8151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:03:19.537 [DEBUG] [Thread-8151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:03:19.537 [DEBUG] [Thread-8151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:03:19.555 [INFO] [Thread-8151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:03:19.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:03:19.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:03:20.386 [DEBUG] [Thread-8151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:03:20.386 [DEBUG] [Thread-8151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:03:20.435 [DEBUG] [Thread-8151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:03:20.435 [DEBUG] [Thread-8151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:03:20.444 [DEBUG] [Thread-8151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:03:20.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:03:20.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:03:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:03:20.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:03:20.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:03:20.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:03:20.481 [DEBUG] [Thread-8151] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:03:22.745 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:33.154 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:34.534 [DEBUG] [Thread-8154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:43.554 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:49.565 [DEBUG] [Thread-8155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:03:50.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:03:50.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:03:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:03:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 3, 24), 29.18, 13.13, 0.0, 13.2, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:03:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:03:24
2025-11-26T00:03:51.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:03:51.454 [DEBUG] [Thread-8156] [transport.py] [_log()] starting thread (client mode): 0x70dbec80
2025-11-26T00:03:51.454 [DEBUG] [Thread-8156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:03:51.474 [DEBUG] [Thread-8156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:03:51.474 [INFO] [Thread-8156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:03:51.477 [DEBUG] [Thread-8156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] client lang: <none>
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] server lang: <none>
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] kex follows: False
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] Compression: none
2025-11-26T00:03:51.478 [DEBUG] [Thread-8156] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:03:51.495 [DEBUG] [Thread-8156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:03:51.496 [DEBUG] [Thread-8156] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:03:51.496 [DEBUG] [Thread-8156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:03:51.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:03:51.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:03:51.498 [DEBUG] [Thread-8156] [transport.py] [_log()] userauth is OK
2025-11-26T00:03:51.499 [DEBUG] [Thread-8156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:03:51.499 [DEBUG] [Thread-8156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:03:51.499 [DEBUG] [Thread-8156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:03:51.499 [DEBUG] [Thread-8156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:03:51.524 [INFO] [Thread-8156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:03:51.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:03:52.134 [DEBUG] [Thread-8156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:03:52.134 [DEBUG] [Thread-8156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:03:52.135 [DEBUG] [Thread-8156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:03:52.175 [DEBUG] [Thread-8156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:03:52.175 [DEBUG] [Thread-8156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:03:52.179 [DEBUG] [Thread-8156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:03:52.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:03:52.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:03:52.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:03:52.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:03:52.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:03:52.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:03:52.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:03:52.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:03:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:03:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.918847 -999.00  +20.20  12.61     18   -4.70 1 1 1 1 1     0    0 24.89 1.15 ZNESW 8.2 12.6 138.8 14.2 19.8 -26.4 19.7 -25.7 19.4 -24.4 19.6 -25.4
2025-11-26T00:03:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:03:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:03:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.918847
2025-11-26T00:03:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:03:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:03:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:03:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:03:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:03:52.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:03:24', tmtdew=29.18, humidity=13.13, cloud=0.0, wind=13.2, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:03:24', seeing=0.94, atlas_timestamp='2025-11-25T22:03:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T21:59:00')
2025-11-26T00:03:52.206 [DEBUG] [Thread-8156] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:03:52.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:03:52.301 [DEBUG] [Thread-8159] [transport.py] [_log()] starting thread (client mode): 0x70dbc850
2025-11-26T00:03:52.301 [DEBUG] [Thread-8159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:03:52.315 [DEBUG] [Thread-8159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:03:52.315 [INFO] [Thread-8159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:03:52.323 [DEBUG] [Thread-8159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:03:52.323 [DEBUG] [Thread-8159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:03:52.323 [DEBUG] [Thread-8159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:03:52.323 [DEBUG] [Thread-8159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:03:52.323 [DEBUG] [Thread-8159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:03:52.323 [DEBUG] [Thread-8159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:03:52.323 [DEBUG] [Thread-8159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:03:52.323 [DEBUG] [Thread-8159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:03:52.323 [DEBUG] [Thread-8159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] client lang: <none>
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] server lang: <none>
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] kex follows: False
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] Compression: none
2025-11-26T00:03:52.324 [DEBUG] [Thread-8159] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:03:52.380 [DEBUG] [Thread-8159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:03:52.380 [DEBUG] [Thread-8159] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:03:52.381 [DEBUG] [Thread-8159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:03:52.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:03:52.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:03:52.441 [DEBUG] [Thread-8159] [transport.py] [_log()] userauth is OK
2025-11-26T00:03:52.441 [DEBUG] [Thread-8159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:03:52.441 [DEBUG] [Thread-8159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:03:52.441 [DEBUG] [Thread-8159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:03:52.441 [DEBUG] [Thread-8159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:03:52.463 [INFO] [Thread-8159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:03:52.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:03:52.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:03:53.283 [DEBUG] [Thread-8159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:03:53.284 [DEBUG] [Thread-8159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:03:53.331 [DEBUG] [Thread-8159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:03:53.331 [DEBUG] [Thread-8159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:03:53.340 [DEBUG] [Thread-8159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:03:53.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:03:53.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:03:53.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:03:53.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:03:53.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:03:53.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:03:53.377 [DEBUG] [Thread-8159] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:03:53.954 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:04.348 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:04.600 [DEBUG] [Thread-8161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:10.887 [DEBUG] [Thread-8162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:14.056 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:14.057 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:14.742 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:19.655 [DEBUG] [Thread-8163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:23.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:04:23.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:04:23.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:04:24.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 3, 56), 29.25, 13.14, 0.0, 14.93, 19.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:04:24.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:03:56
2025-11-26T00:04:24.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:04:24.339 [DEBUG] [Thread-8164] [transport.py] [_log()] starting thread (client mode): 0x70d3a200
2025-11-26T00:04:24.339 [DEBUG] [Thread-8164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:04:24.361 [DEBUG] [Thread-8164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:04:24.361 [INFO] [Thread-8164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:04:24.364 [DEBUG] [Thread-8164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:04:24.364 [DEBUG] [Thread-8164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:04:24.364 [DEBUG] [Thread-8164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:04:24.364 [DEBUG] [Thread-8164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:04:24.364 [DEBUG] [Thread-8164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:04:24.364 [DEBUG] [Thread-8164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] client lang: <none>
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] server lang: <none>
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] kex follows: False
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:04:24.365 [DEBUG] [Thread-8164] [transport.py] [_log()] Compression: none
2025-11-26T00:04:24.366 [DEBUG] [Thread-8164] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:04:24.376 [DEBUG] [Thread-8164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:04:24.377 [DEBUG] [Thread-8164] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:04:24.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:04:24.378 [DEBUG] [Thread-8164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:04:24.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:04:24.380 [DEBUG] [Thread-8164] [transport.py] [_log()] userauth is OK
2025-11-26T00:04:24.381 [DEBUG] [Thread-8164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:04:24.381 [DEBUG] [Thread-8164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:04:24.381 [DEBUG] [Thread-8164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:04:24.381 [DEBUG] [Thread-8164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:04:24.407 [INFO] [Thread-8164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:04:24.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:04:25.141 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:25.169 [DEBUG] [Thread-8164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:04:25.169 [DEBUG] [Thread-8164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:04:25.169 [DEBUG] [Thread-8164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:04:25.210 [DEBUG] [Thread-8164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:04:25.210 [DEBUG] [Thread-8164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:04:25.213 [DEBUG] [Thread-8164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:04:25.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:04:25.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:04:25.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:04:25.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:04:25.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:04:25.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:04:25.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:04:25.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:04:25.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:04:25.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.919195 -999.00  +20.20   9.81     18   -4.80 1 1 1 1 1     0    0 25.19 2.52 ZNESW 8.9 9.8 148.8 13.5 19.8 -26.3 19.7 -25.7 19.4 -24.5 19.6 -25.4
2025-11-26T00:04:25.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:04:25.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:04:25.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.919195
2025-11-26T00:04:25.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:04:25.238 [DEBUG] [Thread-8164] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:04:25.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:04:25.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:04:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:04:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:04:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:03:56', tmtdew=29.25, humidity=13.14, cloud=0.0, wind=14.93, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:03:56', seeing=0.94, atlas_timestamp='2025-11-25T22:03:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T22:02:00')
2025-11-26T00:04:25.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:04:25.336 [DEBUG] [Thread-8167] [transport.py] [_log()] starting thread (client mode): 0x70d42350
2025-11-26T00:04:25.336 [DEBUG] [Thread-8167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:04:25.350 [DEBUG] [Thread-8167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:04:25.351 [INFO] [Thread-8167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:04:25.358 [DEBUG] [Thread-8167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] client lang: <none>
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] server lang: <none>
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] kex follows: False
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] Compression: none
2025-11-26T00:04:25.359 [DEBUG] [Thread-8167] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:04:25.418 [DEBUG] [Thread-8167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:04:25.419 [DEBUG] [Thread-8167] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:04:25.420 [DEBUG] [Thread-8167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:04:25.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:04:25.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:04:25.481 [DEBUG] [Thread-8167] [transport.py] [_log()] userauth is OK
2025-11-26T00:04:25.481 [DEBUG] [Thread-8167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:04:25.481 [DEBUG] [Thread-8167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:04:25.481 [DEBUG] [Thread-8167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:04:25.481 [DEBUG] [Thread-8167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:04:25.499 [INFO] [Thread-8167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:04:25.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:04:25.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:04:26.364 [DEBUG] [Thread-8167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:04:26.364 [DEBUG] [Thread-8167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:04:26.415 [DEBUG] [Thread-8167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:04:26.415 [DEBUG] [Thread-8167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:04:26.428 [DEBUG] [Thread-8167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:04:26.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:04: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')
2025-11-26T00:04:26.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:04:26.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:04:26.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:04:26.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:04:26.470 [DEBUG] [Thread-8167] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:04:34.695 [DEBUG] [Thread-8169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:35.574 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:45.972 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:49.751 [DEBUG] [Thread-8170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:56.367 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:04:56.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:04:56.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:04:56.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:04:57.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 4, 28), 29.21, 13.18, 0.0, 14.12, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:04:57.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:04:28
2025-11-26T00:04:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:04:57.453 [DEBUG] [Thread-8171] [transport.py] [_log()] starting thread (client mode): 0x70d43b50
2025-11-26T00:04:57.453 [DEBUG] [Thread-8171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:04:57.478 [DEBUG] [Thread-8171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:04:57.478 [INFO] [Thread-8171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:04:57.481 [DEBUG] [Thread-8171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:04:57.481 [DEBUG] [Thread-8171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:04:57.481 [DEBUG] [Thread-8171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] client lang: <none>
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] server lang: <none>
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] kex follows: False
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] Compression: none
2025-11-26T00:04:57.482 [DEBUG] [Thread-8171] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:04:57.501 [DEBUG] [Thread-8171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:04:57.501 [DEBUG] [Thread-8171] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:04:57.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:04:57.503 [DEBUG] [Thread-8171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:04:57.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:04:57.505 [DEBUG] [Thread-8171] [transport.py] [_log()] userauth is OK
2025-11-26T00:04:57.505 [DEBUG] [Thread-8171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:04:57.505 [DEBUG] [Thread-8171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:04:57.505 [DEBUG] [Thread-8171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:04:57.506 [DEBUG] [Thread-8171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:04:57.531 [INFO] [Thread-8171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:04:57.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:04:58.162 [DEBUG] [Thread-8171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:04:58.162 [DEBUG] [Thread-8171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:04:58.162 [DEBUG] [Thread-8171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:04:58.202 [DEBUG] [Thread-8171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:04:58.203 [DEBUG] [Thread-8171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:04:58.205 [DEBUG] [Thread-8171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:04:58.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:04:58.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:04:58.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:04:58.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:04:58.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:04:58.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:04:58.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.919542 -999.00  +20.20   8.36     18   -4.80 1 1 1 1 1     0    0 25.39 4.37 ZNESW 10.9 8.4 142.0 13.1 19.8 -26.3 19.8 -25.7 19.4 -24.4 19.6 -25.4
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.919542
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:04:58.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:04:58.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:04:28', tmtdew=29.21, humidity=13.18, cloud=0.0, wind=14.12, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:04:28', seeing=0.86, atlas_timestamp='2025-11-25T22:04:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T22:02:00')
2025-11-26T00:04:58.224 [DEBUG] [Thread-8171] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:04:58.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:04:58.307 [DEBUG] [Thread-8174] [transport.py] [_log()] starting thread (client mode): 0x70d6afe0
2025-11-26T00:04:58.307 [DEBUG] [Thread-8174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:04:58.321 [DEBUG] [Thread-8174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:04:58.321 [INFO] [Thread-8174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:04:58.329 [DEBUG] [Thread-8174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] client lang: <none>
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] server lang: <none>
2025-11-26T00:04:58.330 [DEBUG] [Thread-8174] [transport.py] [_log()] kex follows: False
2025-11-26T00:04:58.331 [DEBUG] [Thread-8174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:04:58.331 [DEBUG] [Thread-8174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:04:58.331 [DEBUG] [Thread-8174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:04:58.331 [DEBUG] [Thread-8174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:04:58.331 [DEBUG] [Thread-8174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:04:58.331 [DEBUG] [Thread-8174] [transport.py] [_log()] Compression: none
2025-11-26T00:04:58.331 [DEBUG] [Thread-8174] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:04:58.389 [DEBUG] [Thread-8174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:04:58.390 [DEBUG] [Thread-8174] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:04:58.390 [DEBUG] [Thread-8174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:04:58.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:04:58.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:04:58.445 [DEBUG] [Thread-8174] [transport.py] [_log()] userauth is OK
2025-11-26T00:04:58.446 [DEBUG] [Thread-8174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:04:58.446 [DEBUG] [Thread-8174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:04:58.446 [DEBUG] [Thread-8174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:04:58.446 [DEBUG] [Thread-8174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:04:58.465 [INFO] [Thread-8174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:04:58.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:04:58.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:04:59.273 [DEBUG] [Thread-8174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:04:59.273 [DEBUG] [Thread-8174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:04:59.321 [DEBUG] [Thread-8174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:04:59.321 [DEBUG] [Thread-8174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:04:59.330 [DEBUG] [Thread-8174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:04:59.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:04:59.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:04:59.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:04:59.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:04:59.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:04:59.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:04:59.366 [DEBUG] [Thread-8174] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:05:04.782 [DEBUG] [Thread-8176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:06.785 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:10.945 [DEBUG] [Thread-8177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:14.259 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:14.261 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:17.180 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:19.839 [DEBUG] [Thread-8178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:27.577 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:05:29.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:05:29.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:05:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 4, 28), 29.16, 13.18, 0.0, 12.32, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:05:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:04:28
2025-11-26T00:05:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:05:30.353 [DEBUG] [Thread-8179] [transport.py] [_log()] starting thread (client mode): 0x70d754e0
2025-11-26T00:05:30.353 [DEBUG] [Thread-8179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:05:30.374 [DEBUG] [Thread-8179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:05:30.374 [INFO] [Thread-8179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] client lang: <none>
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] server lang: <none>
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] kex follows: False
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:05:30.376 [DEBUG] [Thread-8179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:05:30.377 [DEBUG] [Thread-8179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:05:30.377 [DEBUG] [Thread-8179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:05:30.377 [DEBUG] [Thread-8179] [transport.py] [_log()] Compression: none
2025-11-26T00:05:30.377 [DEBUG] [Thread-8179] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:05:30.390 [DEBUG] [Thread-8179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:05:30.390 [DEBUG] [Thread-8179] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:05:30.390 [DEBUG] [Thread-8179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:05:30.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:05:30.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:05:30.390 [DEBUG] [Thread-8179] [transport.py] [_log()] userauth is OK
2025-11-26T00:05:30.391 [DEBUG] [Thread-8179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:05:30.391 [DEBUG] [Thread-8179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:05:30.391 [DEBUG] [Thread-8179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:05:30.391 [DEBUG] [Thread-8179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:05:30.404 [INFO] [Thread-8179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:05:30.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:05:31.006 [DEBUG] [Thread-8179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:05:31.006 [DEBUG] [Thread-8179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:05:31.006 [DEBUG] [Thread-8179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:05:31.047 [DEBUG] [Thread-8179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:05:31.047 [DEBUG] [Thread-8179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:05:31.049 [DEBUG] [Thread-8179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:05:31.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:05:31.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:05:31.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:05:31.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:05:31.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:05:31.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:05:31.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.919889 -999.00  +20.20  11.94     18   -4.80 1 1 1 1 1     0    0 24.72 5.87 ZNESW 10.8 11.9 141.6 14.4 19.8 -26.4 19.8 -25.7 19.4 -24.3 19.6 -25.5
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.919889
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:05:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:04:28', tmtdew=29.16, humidity=13.18, cloud=0.0, wind=12.32, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:05:00', seeing=0.89, atlas_timestamp='2025-11-25T22:04:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T22:02:00')
2025-11-26T00:05:31.065 [DEBUG] [Thread-8179] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:05:31.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:05:31.151 [DEBUG] [Thread-8182] [transport.py] [_log()] starting thread (client mode): 0x70dbce20
2025-11-26T00:05:31.151 [DEBUG] [Thread-8182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:05:31.165 [DEBUG] [Thread-8182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:05:31.165 [INFO] [Thread-8182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] client lang: <none>
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] server lang: <none>
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] kex follows: False
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] Compression: none
2025-11-26T00:05:31.173 [DEBUG] [Thread-8182] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:05:31.227 [DEBUG] [Thread-8182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:05:31.227 [DEBUG] [Thread-8182] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:05:31.227 [DEBUG] [Thread-8182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:05:31.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:05:31.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:05:31.284 [DEBUG] [Thread-8182] [transport.py] [_log()] userauth is OK
2025-11-26T00:05:31.285 [DEBUG] [Thread-8182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:05:31.285 [DEBUG] [Thread-8182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:05:31.285 [DEBUG] [Thread-8182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:05:31.285 [DEBUG] [Thread-8182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:05:31.302 [INFO] [Thread-8182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:05:31.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:05:31.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:05:32.162 [DEBUG] [Thread-8182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:05:32.162 [DEBUG] [Thread-8182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:05:32.209 [DEBUG] [Thread-8182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:05:32.209 [DEBUG] [Thread-8182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:05:32.218 [DEBUG] [Thread-8182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:05:32.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:05:32.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:05:32.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:05:32.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:05:32.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:05:32.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:05:32.250 [DEBUG] [Thread-8182] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:05:34.869 [DEBUG] [Thread-8184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:37.989 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:48.434 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:49.924 [DEBUG] [Thread-8185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:05:58.834 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:02.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:06:02.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:06:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:06:02.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 5, 32), 29.11, 13.23, 0.0, 13.57, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:06:02.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:05:32
2025-11-26T00:06:03.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:06:03.219 [DEBUG] [Thread-8186] [transport.py] [_log()] starting thread (client mode): 0x70dd2a40
2025-11-26T00:06:03.219 [DEBUG] [Thread-8186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:06:03.240 [DEBUG] [Thread-8186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:06:03.241 [INFO] [Thread-8186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] client lang: <none>
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] server lang: <none>
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] kex follows: False
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] Compression: none
2025-11-26T00:06:03.244 [DEBUG] [Thread-8186] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:06:03.262 [DEBUG] [Thread-8186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:06:03.263 [DEBUG] [Thread-8186] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:06:03.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:06:03.264 [DEBUG] [Thread-8186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:06:03.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:06:03.266 [DEBUG] [Thread-8186] [transport.py] [_log()] userauth is OK
2025-11-26T00:06:03.267 [DEBUG] [Thread-8186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:06:03.267 [DEBUG] [Thread-8186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:06:03.267 [DEBUG] [Thread-8186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:06:03.267 [DEBUG] [Thread-8186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:06:03.304 [INFO] [Thread-8186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:06:03.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:06:03.951 [DEBUG] [Thread-8186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:06:03.951 [DEBUG] [Thread-8186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:06:03.951 [DEBUG] [Thread-8186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:06:03.992 [DEBUG] [Thread-8186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:06:03.992 [DEBUG] [Thread-8186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:06:03.994 [DEBUG] [Thread-8186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:06:04.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:06:04.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:06:04.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:06:04.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:06:04.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:06:04.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:06:04.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.920583 -999.00  +20.20   9.56     18   -4.70 1 1 1 1 1     0    0 24.56 7.17 ZNESW 10.8 9.6 149.0 11.5 19.8 -26.4 19.7 -25.7 19.4 -24.5 19.7 -25.4
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.920583
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:06:04.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:05:32', tmtdew=29.11, humidity=13.23, cloud=0.0, wind=13.57, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:05:32', seeing=0.97, atlas_timestamp='2025-11-25T22:05:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T22:02:00')
2025-11-26T00:06:04.014 [DEBUG] [Thread-8186] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:06:04.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:06:04.100 [DEBUG] [Thread-8189] [transport.py] [_log()] starting thread (client mode): 0x70d56260
2025-11-26T00:06:04.100 [DEBUG] [Thread-8189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:06:04.116 [DEBUG] [Thread-8189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:06:04.116 [INFO] [Thread-8189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] client lang: <none>
2025-11-26T00:06:04.124 [DEBUG] [Thread-8189] [transport.py] [_log()] server lang: <none>
2025-11-26T00:06:04.125 [DEBUG] [Thread-8189] [transport.py] [_log()] kex follows: False
2025-11-26T00:06:04.125 [DEBUG] [Thread-8189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:06:04.125 [DEBUG] [Thread-8189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:06:04.125 [DEBUG] [Thread-8189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:06:04.125 [DEBUG] [Thread-8189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:06:04.125 [DEBUG] [Thread-8189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:06:04.125 [DEBUG] [Thread-8189] [transport.py] [_log()] Compression: none
2025-11-26T00:06:04.125 [DEBUG] [Thread-8189] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:06:04.180 [DEBUG] [Thread-8189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:06:04.180 [DEBUG] [Thread-8189] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:06:04.180 [DEBUG] [Thread-8189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:06:04.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:06:04.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:06:04.237 [DEBUG] [Thread-8189] [transport.py] [_log()] userauth is OK
2025-11-26T00:06:04.237 [DEBUG] [Thread-8189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:06:04.237 [DEBUG] [Thread-8189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:06:04.237 [DEBUG] [Thread-8189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:06:04.237 [DEBUG] [Thread-8189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:06:04.251 [INFO] [Thread-8189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:06:04.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:06:04.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:06:04.960 [DEBUG] [Thread-8191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:05.112 [DEBUG] [Thread-8189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:06:05.112 [DEBUG] [Thread-8189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:06:05.160 [DEBUG] [Thread-8189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:06:05.160 [DEBUG] [Thread-8189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:06:05.169 [DEBUG] [Thread-8189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:06:05.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:06:05.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:06:05.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:06:05.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:06:05.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:06:05.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:06:05.200 [DEBUG] [Thread-8189] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:06:09.261 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:11.008 [DEBUG] [Thread-8192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:14.462 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:14.463 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:19.690 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:20.002 [DEBUG] [Thread-8193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:30.134 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:35.039 [DEBUG] [Thread-8194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:35.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:06:35.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:06:35.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:06:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 6, 4), 29.11, 13.21, 0.0, 12.76, 19.66, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:06:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:06:04
2025-11-26T00:06:35.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:06:36.134 [DEBUG] [Thread-8195] [transport.py] [_log()] starting thread (client mode): 0x70dd2020
2025-11-26T00:06:36.134 [DEBUG] [Thread-8195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:06:36.155 [DEBUG] [Thread-8195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:06:36.156 [INFO] [Thread-8195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:06:36.156 [DEBUG] [Thread-8195] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] client lang: <none>
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] server lang: <none>
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] kex follows: False
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] Compression: none
2025-11-26T00:06:36.157 [DEBUG] [Thread-8195] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:06:36.169 [DEBUG] [Thread-8195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:06:36.169 [DEBUG] [Thread-8195] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:06:36.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:06:36.170 [DEBUG] [Thread-8195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:06:36.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:06:36.172 [DEBUG] [Thread-8195] [transport.py] [_log()] userauth is OK
2025-11-26T00:06:36.172 [DEBUG] [Thread-8195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:06:36.172 [DEBUG] [Thread-8195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:06:36.172 [DEBUG] [Thread-8195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:06:36.172 [DEBUG] [Thread-8195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:06:36.192 [INFO] [Thread-8195] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:06:36.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:06:36.813 [DEBUG] [Thread-8195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:06:36.814 [DEBUG] [Thread-8195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:06:36.814 [DEBUG] [Thread-8195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:06:36.854 [DEBUG] [Thread-8195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:06:36.854 [DEBUG] [Thread-8195] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:06:36.857 [DEBUG] [Thread-8195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:06:36.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:06:36.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:06:36.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:06:36.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:06:36.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:06:36.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:06:36.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:06:36.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.920931 -999.00  +20.20   9.06     17   -4.90 1 1 1 1 1     0    0 25.22 8.09 ZNESW 7.9 9.1 157.0 13.6 19.8 -26.4 19.7 -25.7 19.4 -24.4 19.6 -25.5
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.920931
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:06:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:06:04', tmtdew=29.11, humidity=13.21, cloud=0.0, wind=12.76, temperature=19.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:06:04', seeing=1.02, atlas_timestamp='2025-11-25T22:06:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T22:02:00')
2025-11-26T00:06:36.870 [DEBUG] [Thread-8195] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:06:36.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:06:36.955 [DEBUG] [Thread-8198] [transport.py] [_log()] starting thread (client mode): 0x70dbc310
2025-11-26T00:06:36.955 [DEBUG] [Thread-8198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:06:36.969 [DEBUG] [Thread-8198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:06:36.969 [INFO] [Thread-8198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] client lang: <none>
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] server lang: <none>
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] kex follows: False
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] Compression: none
2025-11-26T00:06:36.977 [DEBUG] [Thread-8198] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:06:37.032 [DEBUG] [Thread-8198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:06:37.032 [DEBUG] [Thread-8198] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:06:37.032 [DEBUG] [Thread-8198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:06:37.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:06:37.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:06:37.089 [DEBUG] [Thread-8198] [transport.py] [_log()] userauth is OK
2025-11-26T00:06:37.089 [DEBUG] [Thread-8198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:06:37.089 [DEBUG] [Thread-8198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:06:37.089 [DEBUG] [Thread-8198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:06:37.089 [DEBUG] [Thread-8198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:06:37.102 [INFO] [Thread-8198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:06:37.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:06:37.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:06:37.909 [DEBUG] [Thread-8198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:06:37.909 [DEBUG] [Thread-8198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:06:37.957 [DEBUG] [Thread-8198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:06:37.957 [DEBUG] [Thread-8198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:06:37.965 [DEBUG] [Thread-8198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:06:37.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:06:37.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:06:37.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:06:37.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:06:37.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:06:37.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:06:37.997 [DEBUG] [Thread-8198] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:06:40.522 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:50.068 [DEBUG] [Thread-8200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:06:50.921 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:01.315 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:05.121 [DEBUG] [Thread-8201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:07:08.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:07:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:07:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 6, 36), 29.2, 13.23, 0.0, 15.79, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:07:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:06:36
2025-11-26T00:07:08.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:07:09.014 [DEBUG] [Thread-8202] [transport.py] [_log()] starting thread (client mode): 0x70d6a6b0
2025-11-26T00:07:09.014 [DEBUG] [Thread-8202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:07:09.034 [DEBUG] [Thread-8202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:07:09.035 [INFO] [Thread-8202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] client lang: <none>
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] server lang: <none>
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] kex follows: False
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] Compression: none
2025-11-26T00:07:09.038 [DEBUG] [Thread-8202] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:07:09.053 [DEBUG] [Thread-8202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:07:09.054 [DEBUG] [Thread-8202] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:07:09.054 [DEBUG] [Thread-8202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:07:09.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:07:09.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:07:09.055 [DEBUG] [Thread-8202] [transport.py] [_log()] userauth is OK
2025-11-26T00:07:09.055 [DEBUG] [Thread-8202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:07:09.055 [DEBUG] [Thread-8202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:07:09.055 [DEBUG] [Thread-8202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:07:09.055 [DEBUG] [Thread-8202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:07:09.065 [INFO] [Thread-8202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:07:09.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:07:09.648 [DEBUG] [Thread-8202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:07:09.648 [DEBUG] [Thread-8202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:07:09.648 [DEBUG] [Thread-8202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:07:09.689 [DEBUG] [Thread-8202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:07:09.689 [DEBUG] [Thread-8202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:07:09.691 [DEBUG] [Thread-8202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:07:09.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:07:09.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:07:09.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:07:09.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:07:09.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:07:09.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:07:09.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:07:09.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:07:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:07:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.921278 -999.00  +20.20  10.52     17   -4.90 1 1 1 1 1     0    0 24.73 9.33 ZNESW 11.2 10.5 147.8 11.8 19.8 -26.2 19.8 -25.8 19.4 -24.4 19.7 -25.5
2025-11-26T00:07:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:07:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:07:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.921278
2025-11-26T00:07:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:07:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:07:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:07:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:07:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:07:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:06:36', tmtdew=29.2, humidity=13.23, cloud=0.0, wind=15.79, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:06:36', seeing=1.02, atlas_timestamp='2025-11-25T22:06:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.04625000000000057, 0.03725000000000023, 0.06400000000000006, 0.09199999999999875, 0.05925000000000047, 0.04249999999999865, 0.02275000000000027, 0.009499999999999176, 0.025000000000000355, 0.06874999999999964, 0.0005000000000006111, 0.10999999999999943, 0.10475000000000101, -0.011000000000001009, 0.018499999999999517, 0.019249999999999545, 0.051000000000000156, 0.05699999999999861, 0.00274999999999892, 0.07549999999999812, 0.07024999999999793, 0.043250000000000455, 0.03775000000000084, 0.0259999999999998, 0.016500000000000625, 0.042749999999999844, 0.07150000000000034, 0.09850000000000136, 0.09600000000000009, 0.1570000000000018, 0.02000000000000135, -0.011250000000000426], zp_timestamp='2025-11-25T22:02:00')
2025-11-26T00:07:09.709 [DEBUG] [Thread-8202] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:07:09.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:07:09.797 [DEBUG] [Thread-8205] [transport.py] [_log()] starting thread (client mode): 0x70dbfdf0
2025-11-26T00:07:09.797 [DEBUG] [Thread-8205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:07:09.811 [DEBUG] [Thread-8205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:07:09.811 [INFO] [Thread-8205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] client lang: <none>
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] server lang: <none>
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] kex follows: False
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] Compression: none
2025-11-26T00:07:09.820 [DEBUG] [Thread-8205] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:07:09.875 [DEBUG] [Thread-8205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:07:09.875 [DEBUG] [Thread-8205] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:07:09.875 [DEBUG] [Thread-8205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:07:09.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:07:09.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:07:09.934 [DEBUG] [Thread-8205] [transport.py] [_log()] userauth is OK
2025-11-26T00:07:09.934 [DEBUG] [Thread-8205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:07:09.934 [DEBUG] [Thread-8205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:07:09.934 [DEBUG] [Thread-8205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:07:09.934 [DEBUG] [Thread-8205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:07:09.948 [INFO] [Thread-8205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:07:09.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:07:09.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:07:10.755 [DEBUG] [Thread-8205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:07:10.755 [DEBUG] [Thread-8205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:07:10.803 [DEBUG] [Thread-8205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:07:10.803 [DEBUG] [Thread-8205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:07:10.812 [DEBUG] [Thread-8205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:07:10.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:07:10.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:07:10.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:07:10.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:07:10.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:07:10.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:07:10.848 [DEBUG] [Thread-8205] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:07:11.076 [DEBUG] [Thread-8207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:11.751 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:14.665 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:14.667 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:20.156 [DEBUG] [Thread-8208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:22.148 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:32.546 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:35.197 [DEBUG] [Thread-8209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:40.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:07:40.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:07:40.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:07:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 7, 8), 29.24, 13.19, 0.0, 14.33, 19.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:07:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:07:08
2025-11-26T00:07:41.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:07:41.870 [DEBUG] [Thread-8210] [transport.py] [_log()] starting thread (client mode): 0x70d55cf0
2025-11-26T00:07:41.871 [DEBUG] [Thread-8210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:07:41.891 [DEBUG] [Thread-8210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:07:41.891 [INFO] [Thread-8210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] client lang: <none>
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] server lang: <none>
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] kex follows: False
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] Compression: none
2025-11-26T00:07:41.893 [DEBUG] [Thread-8210] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:07:41.901 [DEBUG] [Thread-8210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:07:41.901 [DEBUG] [Thread-8210] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:07:41.901 [DEBUG] [Thread-8210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:07:41.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:07:41.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:07:41.902 [DEBUG] [Thread-8210] [transport.py] [_log()] userauth is OK
2025-11-26T00:07:41.902 [DEBUG] [Thread-8210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:07:41.902 [DEBUG] [Thread-8210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:07:41.902 [DEBUG] [Thread-8210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:07:41.902 [DEBUG] [Thread-8210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:07:41.911 [INFO] [Thread-8210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:07:41.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:07:42.544 [DEBUG] [Thread-8210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:07:42.544 [DEBUG] [Thread-8210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:07:42.544 [DEBUG] [Thread-8210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:07:42.586 [DEBUG] [Thread-8210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:07:42.586 [DEBUG] [Thread-8210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:07:42.589 [DEBUG] [Thread-8210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:07:42.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:07:42.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:07:42.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:07:42.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:07:42.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:07:42.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:07:42.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:07:42.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:07:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:07:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.921625 -999.00  +20.20   7.30     17   -4.90 1 1 1 1 1     0    0 24.96 9.95 ZNESW 8.6 7.3 149.8 10.3 19.8 -26.4 19.7 -25.8 19.4 -24.4 19.6 -25.4
2025-11-26T00:07:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:07:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:07:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.921625
2025-11-26T00:07:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:07:42.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:07:42.615 [DEBUG] [Thread-8210] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:07:42.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:07:42.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:07:42.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:07:42.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:07:08', tmtdew=29.24, humidity=13.19, cloud=0.0, wind=14.33, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:07:40', seeing=0.8, atlas_timestamp='2025-11-25T22:07:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:05:00')
2025-11-26T00:07:42.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:07:42.710 [DEBUG] [Thread-8213] [transport.py] [_log()] starting thread (client mode): 0x70d55570
2025-11-26T00:07:42.710 [DEBUG] [Thread-8213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:07:42.728 [DEBUG] [Thread-8213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:07:42.728 [INFO] [Thread-8213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:07:42.736 [DEBUG] [Thread-8213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:07:42.736 [DEBUG] [Thread-8213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:07:42.736 [DEBUG] [Thread-8213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:07:42.736 [DEBUG] [Thread-8213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:07:42.736 [DEBUG] [Thread-8213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:07:42.736 [DEBUG] [Thread-8213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:07:42.736 [DEBUG] [Thread-8213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] client lang: <none>
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] server lang: <none>
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] kex follows: False
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] Compression: none
2025-11-26T00:07:42.737 [DEBUG] [Thread-8213] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:07:42.797 [DEBUG] [Thread-8213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:07:42.798 [DEBUG] [Thread-8213] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:07:42.798 [DEBUG] [Thread-8213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:07:42.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:07:42.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:07:42.854 [DEBUG] [Thread-8213] [transport.py] [_log()] userauth is OK
2025-11-26T00:07:42.854 [DEBUG] [Thread-8213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:07:42.854 [DEBUG] [Thread-8213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:07:42.854 [DEBUG] [Thread-8213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:07:42.854 [DEBUG] [Thread-8213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:07:42.873 [INFO] [Thread-8213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:07:42.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:07:42.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:07:42.942 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:43.712 [DEBUG] [Thread-8213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:07:43.712 [DEBUG] [Thread-8213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:07:43.759 [DEBUG] [Thread-8213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:07:43.759 [DEBUG] [Thread-8213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:07:43.768 [DEBUG] [Thread-8213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:07:43.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:07:43.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:07:43.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:07:43.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:07:43.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:07:43.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:07:43.806 [DEBUG] [Thread-8213] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:07:50.234 [DEBUG] [Thread-8215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:07:53.359 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:03.771 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:05.286 [DEBUG] [Thread-8216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:11.164 [DEBUG] [Thread-8217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:08:13.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:08:13.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:08:14.197 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:14.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 7, 40), 29.22, 13.21, 0.0, 10.25, 19.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:08:14.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:07:40
2025-11-26T00:08:14.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:08:14.816 [DEBUG] [Thread-8218] [transport.py] [_log()] starting thread (client mode): 0x70d56a70
2025-11-26T00:08:14.816 [DEBUG] [Thread-8218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:08:14.837 [DEBUG] [Thread-8218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:08:14.837 [INFO] [Thread-8218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:08:14.838 [DEBUG] [Thread-8218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:08:14.838 [DEBUG] [Thread-8218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:08:14.838 [DEBUG] [Thread-8218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:08:14.838 [DEBUG] [Thread-8218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:08:14.838 [DEBUG] [Thread-8218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:08:14.838 [DEBUG] [Thread-8218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] client lang: <none>
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] server lang: <none>
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] kex follows: False
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] Compression: none
2025-11-26T00:08:14.839 [DEBUG] [Thread-8218] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:08:14.852 [DEBUG] [Thread-8218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:08:14.852 [DEBUG] [Thread-8218] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:08:14.853 [DEBUG] [Thread-8218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:08:14.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:08:14.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:08:14.855 [DEBUG] [Thread-8218] [transport.py] [_log()] userauth is OK
2025-11-26T00:08:14.855 [DEBUG] [Thread-8218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:08:14.855 [DEBUG] [Thread-8218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:08:14.855 [DEBUG] [Thread-8218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:08:14.855 [DEBUG] [Thread-8218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:08:14.868 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:14.870 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:14.880 [INFO] [Thread-8218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:08:14.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:08:15.510 [DEBUG] [Thread-8218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:08:15.511 [DEBUG] [Thread-8218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:08:15.511 [DEBUG] [Thread-8218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:08:15.552 [DEBUG] [Thread-8218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:08:15.552 [DEBUG] [Thread-8218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:08:15.554 [DEBUG] [Thread-8218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:08:15.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:08:15.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:08:15.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:08:15.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:08:15.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:08:15.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:08:15.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:08:15.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:08:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:08:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.921972 -999.00  +20.20  10.07     17   -4.90 1 1 1 1 1     0    0 25.05 10.94 ZNESW 10.2 10.1 156.6 13.6 19.8 -26.3 19.8 -25.8 19.4 -24.4 19.7 -25.5
2025-11-26T00:08:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:08:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:08:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.921972
2025-11-26T00:08:15.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:08:15.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:08:15.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:08:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:08:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:08:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:07:40', tmtdew=29.22, humidity=13.21, cloud=0.0, wind=10.25, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:08:12', seeing=0.83, atlas_timestamp='2025-11-25T22:07:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:05:00')
2025-11-26T00:08:15.581 [DEBUG] [Thread-8218] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:08:15.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:08:15.677 [DEBUG] [Thread-8221] [transport.py] [_log()] starting thread (client mode): 0x70d6afe0
2025-11-26T00:08:15.677 [DEBUG] [Thread-8221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:08:15.692 [DEBUG] [Thread-8221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:08:15.692 [INFO] [Thread-8221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:08:15.700 [DEBUG] [Thread-8221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:08:15.700 [DEBUG] [Thread-8221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:08:15.700 [DEBUG] [Thread-8221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:08:15.701 [DEBUG] [Thread-8221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:08:15.701 [DEBUG] [Thread-8221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:08:15.701 [DEBUG] [Thread-8221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:08:15.701 [DEBUG] [Thread-8221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:08:15.701 [DEBUG] [Thread-8221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:08:15.701 [DEBUG] [Thread-8221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:08:15.701 [DEBUG] [Thread-8221] [transport.py] [_log()] client lang: <none>
2025-11-26T00:08:15.701 [DEBUG] [Thread-8221] [transport.py] [_log()] server lang: <none>
2025-11-26T00:08:15.701 [DEBUG] [Thread-8221] [transport.py] [_log()] kex follows: False
2025-11-26T00:08:15.702 [DEBUG] [Thread-8221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:08:15.702 [DEBUG] [Thread-8221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:08:15.702 [DEBUG] [Thread-8221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:08:15.702 [DEBUG] [Thread-8221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:08:15.702 [DEBUG] [Thread-8221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:08:15.702 [DEBUG] [Thread-8221] [transport.py] [_log()] Compression: none
2025-11-26T00:08:15.702 [DEBUG] [Thread-8221] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:08:15.758 [DEBUG] [Thread-8221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:08:15.759 [DEBUG] [Thread-8221] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:08:15.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:08:15.760 [DEBUG] [Thread-8221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:08:15.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:08:15.817 [DEBUG] [Thread-8221] [transport.py] [_log()] userauth is OK
2025-11-26T00:08:15.818 [DEBUG] [Thread-8221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:08:15.818 [DEBUG] [Thread-8221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:08:15.818 [DEBUG] [Thread-8221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:08:15.818 [DEBUG] [Thread-8221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:08:15.837 [INFO] [Thread-8221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:08:15.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:08:15.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:08:16.667 [DEBUG] [Thread-8221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:08:16.667 [DEBUG] [Thread-8221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:08:16.715 [DEBUG] [Thread-8221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:08:16.715 [DEBUG] [Thread-8221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:08:16.724 [DEBUG] [Thread-8221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:08:16.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:08:16.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:08:16.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:08:16.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:08:16.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:08:16.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:08:16.761 [DEBUG] [Thread-8221] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:08:20.322 [DEBUG] [Thread-8223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:24.586 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:34.980 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:35.371 [DEBUG] [Thread-8224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:45.379 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:46.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:08:46.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:08:46.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:08:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 8, 44), 29.26, 13.11, 0.0, 15.65, 19.69, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:08:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:08:44
2025-11-26T00:08:47.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:08:47.741 [DEBUG] [Thread-8225] [transport.py] [_log()] starting thread (client mode): 0x70d6ba60
2025-11-26T00:08:47.741 [DEBUG] [Thread-8225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:08:47.754 [DEBUG] [Thread-8225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:08:47.754 [INFO] [Thread-8225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:08:47.757 [DEBUG] [Thread-8225] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] client lang: <none>
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] server lang: <none>
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] kex follows: False
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] Compression: none
2025-11-26T00:08:47.758 [DEBUG] [Thread-8225] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:08:47.777 [DEBUG] [Thread-8225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:08:47.778 [DEBUG] [Thread-8225] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:08:47.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:08:47.778 [DEBUG] [Thread-8225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:08:47.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:08:47.781 [DEBUG] [Thread-8225] [transport.py] [_log()] userauth is OK
2025-11-26T00:08:47.781 [DEBUG] [Thread-8225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:08:47.781 [DEBUG] [Thread-8225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:08:47.781 [DEBUG] [Thread-8225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:08:47.781 [DEBUG] [Thread-8225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:08:47.807 [INFO] [Thread-8225] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:08:47.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:08:48.471 [DEBUG] [Thread-8225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:08:48.472 [DEBUG] [Thread-8225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:08:48.472 [DEBUG] [Thread-8225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:08:48.513 [DEBUG] [Thread-8225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:08:48.513 [DEBUG] [Thread-8225] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:08:48.517 [DEBUG] [Thread-8225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:08:48.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:08:48.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:08:48.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:08:48.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:08:48.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:08:48.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:08:48.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:08:48.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:08:48.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:08:48.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.922320 -999.00  +20.20   8.73     17   -4.90 1 1 1 1 1     0    0 25.50 12.19 ZNESW 8.7 8.7 149.0 11.8 19.8 -26.3 19.8 -25.7 19.4 -24.7 19.6 -25.4
2025-11-26T00:08:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:08:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:08:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.922320
2025-11-26T00:08:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:08:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:08:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:08:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:08:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:08:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:08:44', tmtdew=29.26, humidity=13.11, cloud=0.0, wind=15.65, temperature=19.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:08:44', seeing=0.83, atlas_timestamp='2025-11-25T22:08:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:05:00')
2025-11-26T00:08:48.543 [DEBUG] [Thread-8225] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:08:48.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:08:48.647 [DEBUG] [Thread-8228] [transport.py] [_log()] starting thread (client mode): 0x70d6a3b0
2025-11-26T00:08:48.647 [DEBUG] [Thread-8228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:08:48.661 [DEBUG] [Thread-8228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:08:48.662 [INFO] [Thread-8228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:08:48.669 [DEBUG] [Thread-8228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:08:48.669 [DEBUG] [Thread-8228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:08:48.669 [DEBUG] [Thread-8228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:08:48.669 [DEBUG] [Thread-8228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:08:48.669 [DEBUG] [Thread-8228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:08:48.669 [DEBUG] [Thread-8228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:08:48.669 [DEBUG] [Thread-8228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:08:48.669 [DEBUG] [Thread-8228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:08:48.669 [DEBUG] [Thread-8228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] client lang: <none>
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] server lang: <none>
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] kex follows: False
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] Compression: none
2025-11-26T00:08:48.670 [DEBUG] [Thread-8228] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:08:48.730 [DEBUG] [Thread-8228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:08:48.730 [DEBUG] [Thread-8228] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:08:48.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:08:48.731 [DEBUG] [Thread-8228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:08:48.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:08:48.785 [DEBUG] [Thread-8228] [transport.py] [_log()] userauth is OK
2025-11-26T00:08:48.786 [DEBUG] [Thread-8228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:08:48.786 [DEBUG] [Thread-8228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:08:48.786 [DEBUG] [Thread-8228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:08:48.786 [DEBUG] [Thread-8228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:08:48.804 [INFO] [Thread-8228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:08:48.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:08:48.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:08:49.660 [DEBUG] [Thread-8228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:08:49.661 [DEBUG] [Thread-8228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:08:49.709 [DEBUG] [Thread-8228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:08:49.709 [DEBUG] [Thread-8228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:08:49.719 [DEBUG] [Thread-8228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:08:49.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:08:49.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:08:49.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:08:49.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:08:49.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:08:49.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:08:49.756 [DEBUG] [Thread-8228] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:08:50.399 [DEBUG] [Thread-8230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:08:55.772 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:05.444 [DEBUG] [Thread-8231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:06.171 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:11.235 [DEBUG] [Thread-8232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:15.115 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:15.116 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:16.578 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:19.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:09:19.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:09:19.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:09:20.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 9, 16), 29.28, 13.11, 0.0, 14.42, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:09:20.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:09:16
2025-11-26T00:09:20.472 [DEBUG] [Thread-8233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:20.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:09:20.737 [DEBUG] [Thread-8234] [transport.py] [_log()] starting thread (client mode): 0x70d6a620
2025-11-26T00:09:20.737 [DEBUG] [Thread-8234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:09:20.760 [DEBUG] [Thread-8234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:09:20.760 [INFO] [Thread-8234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:09:20.761 [DEBUG] [Thread-8234] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:09:20.761 [DEBUG] [Thread-8234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] client lang: <none>
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] server lang: <none>
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] kex follows: False
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] Compression: none
2025-11-26T00:09:20.762 [DEBUG] [Thread-8234] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:09:20.770 [DEBUG] [Thread-8234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:09:20.770 [DEBUG] [Thread-8234] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:09:20.770 [DEBUG] [Thread-8234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:09:20.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:09:20.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:09:20.772 [DEBUG] [Thread-8234] [transport.py] [_log()] userauth is OK
2025-11-26T00:09:20.772 [DEBUG] [Thread-8234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:09:20.772 [DEBUG] [Thread-8234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:09:20.772 [DEBUG] [Thread-8234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:09:20.772 [DEBUG] [Thread-8234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:09:20.789 [INFO] [Thread-8234] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:09:20.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:09:21.389 [DEBUG] [Thread-8234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:09:21.389 [DEBUG] [Thread-8234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:09:21.389 [DEBUG] [Thread-8234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:09:21.430 [DEBUG] [Thread-8234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:09:21.430 [DEBUG] [Thread-8234] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:09:21.432 [DEBUG] [Thread-8234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:09:21.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:09:21.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:09:21.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:09:21.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:09:21.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:09:21.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:09:21.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:09:21.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:09:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:09:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.923014 -999.00  +20.20   7.88     17   -4.90 1 1 1 1 1     0    0 25.68 11.80 ZNESW 10.2 7.9 144.6 11.9 19.8 -26.4 19.7 -25.7 19.4 -24.4 19.6 -25.2
2025-11-26T00:09:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:09:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:09:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.923014
2025-11-26T00:09:21.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:09:21.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:09:21.453 [DEBUG] [Thread-8234] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:09:21.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:09:21.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:09:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:09:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:09:16', tmtdew=29.28, humidity=13.11, cloud=0.0, wind=14.42, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:09:16', seeing=1.01, atlas_timestamp='2025-11-25T22:09:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:05:00')
2025-11-26T00:09:21.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:09:21.550 [DEBUG] [Thread-8237] [transport.py] [_log()] starting thread (client mode): 0x70d56f20
2025-11-26T00:09:21.550 [DEBUG] [Thread-8237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:09:21.566 [DEBUG] [Thread-8237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:09:21.566 [INFO] [Thread-8237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:09:21.574 [DEBUG] [Thread-8237] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:09:21.574 [DEBUG] [Thread-8237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:09:21.574 [DEBUG] [Thread-8237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:09:21.574 [DEBUG] [Thread-8237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:09:21.574 [DEBUG] [Thread-8237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:09:21.574 [DEBUG] [Thread-8237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:09:21.575 [DEBUG] [Thread-8237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:09:21.575 [DEBUG] [Thread-8237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:09:21.575 [DEBUG] [Thread-8237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:09:21.575 [DEBUG] [Thread-8237] [transport.py] [_log()] client lang: <none>
2025-11-26T00:09:21.575 [DEBUG] [Thread-8237] [transport.py] [_log()] server lang: <none>
2025-11-26T00:09:21.575 [DEBUG] [Thread-8237] [transport.py] [_log()] kex follows: False
2025-11-26T00:09:21.575 [DEBUG] [Thread-8237] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:09:21.575 [DEBUG] [Thread-8237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:09:21.575 [DEBUG] [Thread-8237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:09:21.576 [DEBUG] [Thread-8237] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:09:21.576 [DEBUG] [Thread-8237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:09:21.576 [DEBUG] [Thread-8237] [transport.py] [_log()] Compression: none
2025-11-26T00:09:21.576 [DEBUG] [Thread-8237] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:09:21.634 [DEBUG] [Thread-8237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:09:21.635 [DEBUG] [Thread-8237] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:09:21.635 [DEBUG] [Thread-8237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:09:21.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:09:21.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:09:21.689 [DEBUG] [Thread-8237] [transport.py] [_log()] userauth is OK
2025-11-26T00:09:21.690 [DEBUG] [Thread-8237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:09:21.690 [DEBUG] [Thread-8237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:09:21.690 [DEBUG] [Thread-8237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:09:21.690 [DEBUG] [Thread-8237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:09:21.713 [INFO] [Thread-8237] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:09:21.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:09:21.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:09:22.533 [DEBUG] [Thread-8237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:09:22.533 [DEBUG] [Thread-8237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:09:22.581 [DEBUG] [Thread-8237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:09:22.581 [DEBUG] [Thread-8237] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:09:22.591 [DEBUG] [Thread-8237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:09:22.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:09:22.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:09:22.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:09:22.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:09:22.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:09:22.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:09:22.630 [DEBUG] [Thread-8237] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:09:26.990 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:35.506 [DEBUG] [Thread-8239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:37.448 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:47.903 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:50.557 [DEBUG] [Thread-8240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:09:52.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:09:52.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:09:52.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:09:53.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 9, 48), 29.46, 12.54, 0.0, 11.03, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:09:53.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:09:48
2025-11-26T00:09:53.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:09:53.643 [DEBUG] [Thread-8241] [transport.py] [_log()] starting thread (client mode): 0x70d56a70
2025-11-26T00:09:53.643 [DEBUG] [Thread-8241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:09:53.663 [DEBUG] [Thread-8241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:09:53.663 [INFO] [Thread-8241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] client lang: <none>
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] server lang: <none>
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] kex follows: False
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:09:53.667 [DEBUG] [Thread-8241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:09:53.668 [DEBUG] [Thread-8241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:09:53.668 [DEBUG] [Thread-8241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:09:53.668 [DEBUG] [Thread-8241] [transport.py] [_log()] Compression: none
2025-11-26T00:09:53.668 [DEBUG] [Thread-8241] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:09:53.682 [DEBUG] [Thread-8241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:09:53.683 [DEBUG] [Thread-8241] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:09:53.683 [DEBUG] [Thread-8241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:09:53.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:09:53.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:09:53.683 [DEBUG] [Thread-8241] [transport.py] [_log()] userauth is OK
2025-11-26T00:09:53.683 [DEBUG] [Thread-8241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:09:53.684 [DEBUG] [Thread-8241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:09:53.684 [DEBUG] [Thread-8241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:09:53.684 [DEBUG] [Thread-8241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:09:53.693 [INFO] [Thread-8241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:09:53.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:09:54.294 [DEBUG] [Thread-8241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:09:54.294 [DEBUG] [Thread-8241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:09:54.294 [DEBUG] [Thread-8241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:09:54.335 [DEBUG] [Thread-8241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:09:54.335 [DEBUG] [Thread-8241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:09:54.338 [DEBUG] [Thread-8241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:09:54.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:09:54.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:09:54.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:09:54.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:09:54.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:09:54.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:09:54.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:09:54.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:09:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:09:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.923361 -999.00  +20.20   8.88     17   -4.90 1 1 1 1 1     0    0 25.55 12.94 ZNESW 9.1 8.9 138.8 14.8 19.8 -26.4 19.8 -25.9 19.4 -24.4 19.6 -25.5
2025-11-26T00:09:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:09:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:09:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.923361
2025-11-26T00:09:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:09:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:09:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:09:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:09:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:09:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:09:48', tmtdew=29.46, humidity=12.54, cloud=0.0, wind=11.03, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:09:48', seeing=1.11, atlas_timestamp='2025-11-25T22:09:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:05:00')
2025-11-26T00:09:54.368 [DEBUG] [Thread-8241] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:09:54.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:09:54.463 [DEBUG] [Thread-8244] [transport.py] [_log()] starting thread (client mode): 0x70d54a00
2025-11-26T00:09:54.463 [DEBUG] [Thread-8244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:09:54.478 [DEBUG] [Thread-8244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:09:54.478 [INFO] [Thread-8244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:09:54.486 [DEBUG] [Thread-8244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:09:54.486 [DEBUG] [Thread-8244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:09:54.486 [DEBUG] [Thread-8244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:09:54.487 [DEBUG] [Thread-8244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:09:54.487 [DEBUG] [Thread-8244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:09:54.487 [DEBUG] [Thread-8244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:09:54.487 [DEBUG] [Thread-8244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:09:54.487 [DEBUG] [Thread-8244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:09:54.487 [DEBUG] [Thread-8244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:09:54.487 [DEBUG] [Thread-8244] [transport.py] [_log()] client lang: <none>
2025-11-26T00:09:54.487 [DEBUG] [Thread-8244] [transport.py] [_log()] server lang: <none>
2025-11-26T00:09:54.487 [DEBUG] [Thread-8244] [transport.py] [_log()] kex follows: False
2025-11-26T00:09:54.488 [DEBUG] [Thread-8244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:09:54.488 [DEBUG] [Thread-8244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:09:54.488 [DEBUG] [Thread-8244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:09:54.488 [DEBUG] [Thread-8244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:09:54.488 [DEBUG] [Thread-8244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:09:54.488 [DEBUG] [Thread-8244] [transport.py] [_log()] Compression: none
2025-11-26T00:09:54.488 [DEBUG] [Thread-8244] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:09:54.545 [DEBUG] [Thread-8244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:09:54.546 [DEBUG] [Thread-8244] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:09:54.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:09:54.547 [DEBUG] [Thread-8244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:09:54.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:09:54.602 [DEBUG] [Thread-8244] [transport.py] [_log()] userauth is OK
2025-11-26T00:09:54.602 [DEBUG] [Thread-8244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:09:54.602 [DEBUG] [Thread-8244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:09:54.602 [DEBUG] [Thread-8244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:09:54.602 [DEBUG] [Thread-8244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:09:54.621 [INFO] [Thread-8244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:09:54.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:09:54.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:09:55.437 [DEBUG] [Thread-8244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:09:55.437 [DEBUG] [Thread-8244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:09:55.485 [DEBUG] [Thread-8244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:09:55.485 [DEBUG] [Thread-8244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:09:55.494 [DEBUG] [Thread-8244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:09:55.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:09:55.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:09:55.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:09:55.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:09:55.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:09:55.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:09:55.531 [DEBUG] [Thread-8244] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:09:58.335 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:05.589 [DEBUG] [Thread-8246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:08.719 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:11.315 [DEBUG] [Thread-8247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:15.318 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:15.319 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:19.119 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:20.649 [DEBUG] [Thread-8248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:10:25.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:10:25.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:10:26.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 10, 20), 29.43, 12.58, 0.0, 12.18, 19.96, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:10:26.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:10:20
2025-11-26T00:10:26.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:10:26.559 [DEBUG] [Thread-8249] [transport.py] [_log()] starting thread (client mode): 0x70d57940
2025-11-26T00:10:26.559 [DEBUG] [Thread-8249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:10:26.580 [DEBUG] [Thread-8249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:10:26.580 [INFO] [Thread-8249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] client lang: <none>
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] server lang: <none>
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] kex follows: False
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] Compression: none
2025-11-26T00:10:26.583 [DEBUG] [Thread-8249] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:10:26.602 [DEBUG] [Thread-8249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:10:26.603 [DEBUG] [Thread-8249] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:10:26.603 [DEBUG] [Thread-8249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:10:26.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:10:26.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:10:26.603 [DEBUG] [Thread-8249] [transport.py] [_log()] userauth is OK
2025-11-26T00:10:26.603 [DEBUG] [Thread-8249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:10:26.603 [DEBUG] [Thread-8249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:10:26.603 [DEBUG] [Thread-8249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:10:26.604 [DEBUG] [Thread-8249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:10:26.618 [INFO] [Thread-8249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:10:26.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:10:27.202 [DEBUG] [Thread-8249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:10:27.202 [DEBUG] [Thread-8249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:10:27.202 [DEBUG] [Thread-8249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:10:27.243 [DEBUG] [Thread-8249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:10:27.243 [DEBUG] [Thread-8249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:10:27.245 [DEBUG] [Thread-8249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:10:27.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:10:27.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:10:27.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:10:27.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:10:27.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:10:27.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:10:27.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.923708 -999.00  +20.20   7.70     17   -4.90 1 1 1 1 1     0    0 24.98 11.87 ZNESW 8.3 7.7 172.8 11.7 19.8 -26.3 19.7 -25.9 19.4 -24.5 19.6 -25.6
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.923708
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:10:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:10:20', tmtdew=29.43, humidity=12.58, cloud=0.0, wind=12.18, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:10:20', seeing=0.96, atlas_timestamp='2025-11-25T22:10:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:08:00')
2025-11-26T00:10:27.265 [DEBUG] [Thread-8249] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:10:27.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:10:27.352 [DEBUG] [Thread-8252] [transport.py] [_log()] starting thread (client mode): 0x7374c670
2025-11-26T00:10:27.352 [DEBUG] [Thread-8252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:10:27.366 [DEBUG] [Thread-8252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:10:27.366 [INFO] [Thread-8252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] client lang: <none>
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] server lang: <none>
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] kex follows: False
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:10:27.373 [DEBUG] [Thread-8252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:10:27.374 [DEBUG] [Thread-8252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:10:27.374 [DEBUG] [Thread-8252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:10:27.374 [DEBUG] [Thread-8252] [transport.py] [_log()] Compression: none
2025-11-26T00:10:27.374 [DEBUG] [Thread-8252] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:10:27.432 [DEBUG] [Thread-8252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:10:27.432 [DEBUG] [Thread-8252] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:10:27.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:10:27.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:10:27.433 [DEBUG] [Thread-8252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:10:27.489 [DEBUG] [Thread-8252] [transport.py] [_log()] userauth is OK
2025-11-26T00:10:27.489 [DEBUG] [Thread-8252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:10:27.489 [DEBUG] [Thread-8252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:10:27.489 [DEBUG] [Thread-8252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:10:27.489 [DEBUG] [Thread-8252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:10:27.507 [INFO] [Thread-8252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:10:27.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:10:27.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:10:28.373 [DEBUG] [Thread-8252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:10:28.373 [DEBUG] [Thread-8252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:10:28.422 [DEBUG] [Thread-8252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:10:28.422 [DEBUG] [Thread-8252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:10:28.431 [DEBUG] [Thread-8252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:10:28.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:10:28.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:10:28.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:10:28.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:10:28.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:10:28.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:10:28.462 [DEBUG] [Thread-8252] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:10:29.544 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:35.678 [DEBUG] [Thread-8254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:39.912 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:50.317 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:50.732 [DEBUG] [Thread-8255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:10:58.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:10:58.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:10:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:10:59.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 10, 52), 29.47, 12.58, 0.0, 14.19, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:10:59.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:10:52
2025-11-26T00:10:59.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:10:59.429 [DEBUG] [Thread-8256] [transport.py] [_log()] starting thread (client mode): 0x70dd3970
2025-11-26T00:10:59.429 [DEBUG] [Thread-8256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:10:59.442 [DEBUG] [Thread-8256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:10:59.442 [INFO] [Thread-8256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:10:59.444 [DEBUG] [Thread-8256] [transport.py] [_log()] client lang: <none>
2025-11-26T00:10:59.445 [DEBUG] [Thread-8256] [transport.py] [_log()] server lang: <none>
2025-11-26T00:10:59.445 [DEBUG] [Thread-8256] [transport.py] [_log()] kex follows: False
2025-11-26T00:10:59.445 [DEBUG] [Thread-8256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:10:59.445 [DEBUG] [Thread-8256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:10:59.445 [DEBUG] [Thread-8256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:10:59.445 [DEBUG] [Thread-8256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:10:59.445 [DEBUG] [Thread-8256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:10:59.445 [DEBUG] [Thread-8256] [transport.py] [_log()] Compression: none
2025-11-26T00:10:59.445 [DEBUG] [Thread-8256] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:10:59.458 [DEBUG] [Thread-8256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:10:59.458 [DEBUG] [Thread-8256] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:10:59.459 [DEBUG] [Thread-8256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:10:59.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:10:59.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:10:59.460 [DEBUG] [Thread-8256] [transport.py] [_log()] userauth is OK
2025-11-26T00:10:59.460 [DEBUG] [Thread-8256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:10:59.460 [DEBUG] [Thread-8256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:10:59.460 [DEBUG] [Thread-8256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:10:59.460 [DEBUG] [Thread-8256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:10:59.483 [INFO] [Thread-8256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:10:59.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:11:00.096 [DEBUG] [Thread-8256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:11:00.097 [DEBUG] [Thread-8256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:11:00.097 [DEBUG] [Thread-8256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:11:00.137 [DEBUG] [Thread-8256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:11:00.137 [DEBUG] [Thread-8256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:11:00.140 [DEBUG] [Thread-8256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:11:00.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:11:00.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:11:00.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:11:00.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:11:00.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:11:00.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:11:00.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:11:00.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:11:00.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:11:00.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.924056 -999.00  +20.20  10.46     17   -4.90 1 1 1 1 1     0    0 25.49 11.76 ZNESW 9.3 10.5 138.6 13.0 19.7 -26.3 19.7 -25.7 19.4 -24.4 19.6 -25.5
2025-11-26T00:11:00.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:11:00.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:11:00.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.924056
2025-11-26T00:11:00.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:11:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:11:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:11:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:11:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:11:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:10:52', tmtdew=29.47, humidity=12.58, cloud=0.0, wind=14.19, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:10:52', seeing=0.96, atlas_timestamp='2025-11-25T22:10:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:08:00')
2025-11-26T00:11:00.157 [DEBUG] [Thread-8256] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:11:00.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:11:00.241 [DEBUG] [Thread-8259] [transport.py] [_log()] starting thread (client mode): 0x70d68070
2025-11-26T00:11:00.241 [DEBUG] [Thread-8259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:11:00.255 [DEBUG] [Thread-8259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:11:00.256 [INFO] [Thread-8259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:11:00.263 [DEBUG] [Thread-8259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:11:00.263 [DEBUG] [Thread-8259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:11:00.263 [DEBUG] [Thread-8259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:11:00.263 [DEBUG] [Thread-8259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:11:00.263 [DEBUG] [Thread-8259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:11:00.263 [DEBUG] [Thread-8259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:11:00.263 [DEBUG] [Thread-8259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:11:00.263 [DEBUG] [Thread-8259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:11:00.263 [DEBUG] [Thread-8259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] client lang: <none>
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] server lang: <none>
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] kex follows: False
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] Compression: none
2025-11-26T00:11:00.264 [DEBUG] [Thread-8259] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:11:00.322 [DEBUG] [Thread-8259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:11:00.322 [DEBUG] [Thread-8259] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:11:00.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:11:00.324 [DEBUG] [Thread-8259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:11:00.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:11:00.379 [DEBUG] [Thread-8259] [transport.py] [_log()] userauth is OK
2025-11-26T00:11:00.379 [DEBUG] [Thread-8259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:11:00.379 [DEBUG] [Thread-8259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:11:00.379 [DEBUG] [Thread-8259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:11:00.379 [DEBUG] [Thread-8259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:11:00.403 [INFO] [Thread-8259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:11:00.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:11:00.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:11:00.719 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:01.291 [DEBUG] [Thread-8259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:11:01.291 [DEBUG] [Thread-8259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:11:01.341 [DEBUG] [Thread-8259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:11:01.341 [DEBUG] [Thread-8259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:11:01.354 [DEBUG] [Thread-8259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:11:01.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:11:01.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:11:01.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:11:01.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:11:01.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:11:01.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:11:01.390 [DEBUG] [Thread-8259] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:11:05.764 [DEBUG] [Thread-8261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:11.138 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:11.372 [DEBUG] [Thread-8262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:15.522 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:15.524 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:20.802 [DEBUG] [Thread-8263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:21.554 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:31.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:11:31.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:11:31.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:11:32.041 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 11, 24), 29.41, 12.61, 0.0, 15.47, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:11:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:11:24
2025-11-26T00:11:32.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:11:32.351 [DEBUG] [Thread-8264] [transport.py] [_log()] starting thread (client mode): 0x70dd02e0
2025-11-26T00:11:32.351 [DEBUG] [Thread-8264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:11:32.362 [DEBUG] [Thread-8264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:11:32.362 [INFO] [Thread-8264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] client lang: <none>
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] server lang: <none>
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] kex follows: False
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] Compression: none
2025-11-26T00:11:32.364 [DEBUG] [Thread-8264] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:11:32.386 [DEBUG] [Thread-8264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:11:32.386 [DEBUG] [Thread-8264] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:11:32.387 [DEBUG] [Thread-8264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:11:32.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:11:32.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:11:32.389 [DEBUG] [Thread-8264] [transport.py] [_log()] userauth is OK
2025-11-26T00:11:32.389 [DEBUG] [Thread-8264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:11:32.389 [DEBUG] [Thread-8264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:11:32.389 [DEBUG] [Thread-8264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:11:32.389 [DEBUG] [Thread-8264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:11:32.416 [INFO] [Thread-8264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:11:32.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:11:32.991 [DEBUG] [Thread-8264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:11:32.991 [DEBUG] [Thread-8264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:11:32.991 [DEBUG] [Thread-8264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:11:33.032 [DEBUG] [Thread-8264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:11:33.032 [DEBUG] [Thread-8264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:11:33.035 [DEBUG] [Thread-8264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:11:33.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:11:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:11:33.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:11:33.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:11:33.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:11:33.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:11:33.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:11:33.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:11:33.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:11:33.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.924403 -999.00  +20.20  10.63     17   -4.90 1 1 1 1 1     0    0 25.60 12.40 ZNESW 8.8 10.6 149.2 13.3 19.8 -26.4 19.7 -25.9 19.4 -24.5 19.6 -25.3
2025-11-26T00:11:33.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:11:33.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:11:33.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.924403
2025-11-26T00:11:33.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:11:33.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:11:33.063 [DEBUG] [Thread-8264] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:11:33.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:11:33.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:11:33.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:11:33.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:11:24', tmtdew=29.41, humidity=12.61, cloud=0.0, wind=15.47, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:11:24', seeing=1.11, atlas_timestamp='2025-11-25T22:11:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:08:00')
2025-11-26T00:11:33.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:11:33.155 [DEBUG] [Thread-8267] [transport.py] [_log()] starting thread (client mode): 0x70d55f00
2025-11-26T00:11:33.155 [DEBUG] [Thread-8267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:11:33.169 [DEBUG] [Thread-8267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:11:33.169 [INFO] [Thread-8267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:11:33.177 [DEBUG] [Thread-8267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:11:33.177 [DEBUG] [Thread-8267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:11:33.177 [DEBUG] [Thread-8267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:11:33.177 [DEBUG] [Thread-8267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:11:33.177 [DEBUG] [Thread-8267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:11:33.177 [DEBUG] [Thread-8267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:11:33.177 [DEBUG] [Thread-8267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:11:33.177 [DEBUG] [Thread-8267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] client lang: <none>
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] server lang: <none>
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] kex follows: False
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] Compression: none
2025-11-26T00:11:33.178 [DEBUG] [Thread-8267] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:11:33.238 [DEBUG] [Thread-8267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:11:33.238 [DEBUG] [Thread-8267] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:11:33.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:11:33.240 [DEBUG] [Thread-8267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:11:33.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:11:33.294 [DEBUG] [Thread-8267] [transport.py] [_log()] userauth is OK
2025-11-26T00:11:33.294 [DEBUG] [Thread-8267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:11:33.294 [DEBUG] [Thread-8267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:11:33.294 [DEBUG] [Thread-8267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:11:33.303 [DEBUG] [Thread-8267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:11:33.322 [INFO] [Thread-8267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:11:33.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:11:33.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:11:34.166 [DEBUG] [Thread-8267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:11:34.166 [DEBUG] [Thread-8267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:11:34.214 [DEBUG] [Thread-8267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:11:34.214 [DEBUG] [Thread-8267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:11:34.223 [DEBUG] [Thread-8267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:11:34.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:11:34.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:11:34.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:11:34.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:11:34.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:11:34.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:11:34.260 [DEBUG] [Thread-8267] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:11:35.838 [DEBUG] [Thread-8269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:42.464 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:50.900 [DEBUG] [Thread-8270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:11:52.861 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:03.256 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:04.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:12:04.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:12:04.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:12:04.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 11, 56), 29.31, 12.66, 0.0, 15.21, 19.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:12:04.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:11:56
2025-11-26T00:12:05.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:12:05.232 [DEBUG] [Thread-8271] [transport.py] [_log()] starting thread (client mode): 0x70dd1450
2025-11-26T00:12:05.232 [DEBUG] [Thread-8271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:12:05.252 [DEBUG] [Thread-8271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:12:05.252 [INFO] [Thread-8271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:12:05.255 [DEBUG] [Thread-8271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] client lang: <none>
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] server lang: <none>
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] kex follows: False
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] Compression: none
2025-11-26T00:12:05.256 [DEBUG] [Thread-8271] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:12:05.276 [DEBUG] [Thread-8271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:12:05.276 [DEBUG] [Thread-8271] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:12:05.277 [DEBUG] [Thread-8271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:12:05.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:12:05.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:12:05.279 [DEBUG] [Thread-8271] [transport.py] [_log()] userauth is OK
2025-11-26T00:12:05.279 [DEBUG] [Thread-8271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:12:05.279 [DEBUG] [Thread-8271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:12:05.280 [DEBUG] [Thread-8271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:12:05.280 [DEBUG] [Thread-8271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:12:05.304 [INFO] [Thread-8271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:12:05.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:12:05.938 [DEBUG] [Thread-8273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:05.954 [DEBUG] [Thread-8271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:12:05.955 [DEBUG] [Thread-8271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:12:05.955 [DEBUG] [Thread-8271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:12:05.996 [DEBUG] [Thread-8271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:12:05.996 [DEBUG] [Thread-8271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:12:05.999 [DEBUG] [Thread-8271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:12:06.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:12:06.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:12:06.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:12:06.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:12:06.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:12:06.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:12:06.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:12:06.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:12:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:12:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.924403 -999.00  +20.20  10.63     17   -4.90 1 1 1 1 1     0    0 25.60 12.40 ZNESW 8.8 10.6 149.2 13.3 19.8 -26.4 19.7 -25.9 19.4 -24.5 19.6 -25.3
2025-11-26T00:12:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:12:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:12:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.924403
2025-11-26T00:12:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:12:06.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:12:06.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:12:06.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:12:06.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:12:06.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:11:56', tmtdew=29.31, humidity=12.66, cloud=0.0, wind=15.21, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:11:56', seeing=0.91, atlas_timestamp='2025-11-25T22:11:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:08:00')
2025-11-26T00:12:06.019 [DEBUG] [Thread-8271] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:12:06.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:12:06.113 [DEBUG] [Thread-8275] [transport.py] [_log()] starting thread (client mode): 0x70dd3940
2025-11-26T00:12:06.114 [DEBUG] [Thread-8275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:12:06.127 [DEBUG] [Thread-8275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:12:06.128 [INFO] [Thread-8275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] client lang: <none>
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] server lang: <none>
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] kex follows: False
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:12:06.135 [DEBUG] [Thread-8275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:12:06.136 [DEBUG] [Thread-8275] [transport.py] [_log()] Compression: none
2025-11-26T00:12:06.136 [DEBUG] [Thread-8275] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:12:06.198 [DEBUG] [Thread-8275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:12:06.198 [DEBUG] [Thread-8275] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:12:06.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:12:06.200 [DEBUG] [Thread-8275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:12:06.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:12:06.255 [DEBUG] [Thread-8275] [transport.py] [_log()] userauth is OK
2025-11-26T00:12:06.255 [DEBUG] [Thread-8275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:12:06.256 [DEBUG] [Thread-8275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:12:06.256 [DEBUG] [Thread-8275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:12:06.256 [DEBUG] [Thread-8275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:12:06.274 [INFO] [Thread-8275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:12:06.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:12:06.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:12:07.126 [DEBUG] [Thread-8275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:12:07.126 [DEBUG] [Thread-8275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:12:07.174 [DEBUG] [Thread-8275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:12:07.174 [DEBUG] [Thread-8275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:12:07.184 [DEBUG] [Thread-8275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:12:07.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:12:07.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:12:07.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:12:07.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:12:07.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:12:07.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:12:07.222 [DEBUG] [Thread-8275] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:12:11.447 [DEBUG] [Thread-8277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:13.652 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:15.726 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:15.727 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:20.976 [DEBUG] [Thread-8278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:24.096 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:34.485 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:36.026 [DEBUG] [Thread-8279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:12:37.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:12:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:12:37.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 12, 28), 29.34, 12.63, 0.0, 15.23, 19.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:12:37.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:12:28
2025-11-26T00:12:38.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:12:38.198 [DEBUG] [Thread-8280] [transport.py] [_log()] starting thread (client mode): 0x70dd0f10
2025-11-26T00:12:38.198 [DEBUG] [Thread-8280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:12:38.220 [DEBUG] [Thread-8280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:12:38.220 [INFO] [Thread-8280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:12:38.223 [DEBUG] [Thread-8280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:12:38.223 [DEBUG] [Thread-8280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:12:38.223 [DEBUG] [Thread-8280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] client lang: <none>
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] server lang: <none>
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] kex follows: False
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:12:38.224 [DEBUG] [Thread-8280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:12:38.225 [DEBUG] [Thread-8280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:12:38.225 [DEBUG] [Thread-8280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:12:38.225 [DEBUG] [Thread-8280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:12:38.225 [DEBUG] [Thread-8280] [transport.py] [_log()] Compression: none
2025-11-26T00:12:38.225 [DEBUG] [Thread-8280] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:12:38.243 [DEBUG] [Thread-8280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:12:38.244 [DEBUG] [Thread-8280] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:12:38.244 [DEBUG] [Thread-8280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:12:38.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:12:38.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:12:38.246 [DEBUG] [Thread-8280] [transport.py] [_log()] userauth is OK
2025-11-26T00:12:38.247 [DEBUG] [Thread-8280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:12:38.247 [DEBUG] [Thread-8280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:12:38.247 [DEBUG] [Thread-8280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:12:38.247 [DEBUG] [Thread-8280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:12:38.266 [INFO] [Thread-8280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:12:38.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:12:38.899 [DEBUG] [Thread-8280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:12:38.899 [DEBUG] [Thread-8280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:12:38.899 [DEBUG] [Thread-8280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:12:38.940 [DEBUG] [Thread-8280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:12:38.940 [DEBUG] [Thread-8280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:12:38.943 [DEBUG] [Thread-8280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:12:38.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:12:38.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:12:38.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:12:38.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:12:38.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:12:38.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:12:38.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:12:38.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:12:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:12:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.924750 -999.00  +20.20  12.10     17   -5.00 1 1 1 1 1     0    0 25.21 12.19 ZNESW 10.4 12.1 139.0 14.1 19.8 -26.3 19.7 -25.9 19.4 -24.6 19.6 -25.4
2025-11-26T00:12:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:12:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:12:38.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.924750
2025-11-26T00:12:38.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:12:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:12:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:12:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:12:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:12:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:12:28', tmtdew=29.34, humidity=12.63, cloud=0.0, wind=15.23, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:12:28', seeing=0.9, atlas_timestamp='2025-11-25T22:11:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[0.007749999999999702, 0.007250000000000867, 0.02075000000000138, 0.02949999999999875, 0.023499999999998522, 0.10624999999999929, 0.06799999999999962, 0.017250000000000654, 0.028499999999999304, 0.019999999999999574, 0.07925000000000004, 0.005000000000000782, 0.10099999999999909, 0.1352499999999992, 0.04699999999999882, -0.01950000000000074, 0.012249999999999872, 0.041499999999999204, 0.04099999999999859, 0.017249999999998877, 0.08199999999999896, 0.06174999999999997, 0.05725000000000158, 0.011749999999999261, 0.0259999999999998, 0.015499999999999403, 0.02275000000000027, 0.05349999999999966, 0.16900000000000048, 0.11350000000000193, 0.13250000000000028, -0.045999999999999375, 0.03125], zp_timestamp='2025-11-25T22:08:00')
2025-11-26T00:12:38.966 [DEBUG] [Thread-8280] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:12:39.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:12:39.062 [DEBUG] [Thread-8283] [transport.py] [_log()] starting thread (client mode): 0x70d55a50
2025-11-26T00:12:39.062 [DEBUG] [Thread-8283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:12:39.081 [DEBUG] [Thread-8283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:12:39.082 [INFO] [Thread-8283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:12:39.089 [DEBUG] [Thread-8283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:12:39.089 [DEBUG] [Thread-8283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:12:39.089 [DEBUG] [Thread-8283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] client lang: <none>
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] server lang: <none>
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] kex follows: False
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] Compression: none
2025-11-26T00:12:39.090 [DEBUG] [Thread-8283] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:12:39.150 [DEBUG] [Thread-8283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:12:39.150 [DEBUG] [Thread-8283] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:12:39.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:12:39.151 [DEBUG] [Thread-8283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:12:39.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:12:39.206 [DEBUG] [Thread-8283] [transport.py] [_log()] userauth is OK
2025-11-26T00:12:39.206 [DEBUG] [Thread-8283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:12:39.206 [DEBUG] [Thread-8283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:12:39.206 [DEBUG] [Thread-8283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:12:39.206 [DEBUG] [Thread-8283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:12:39.232 [INFO] [Thread-8283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:12:39.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:12:39.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:12:40.121 [DEBUG] [Thread-8283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:12:40.121 [DEBUG] [Thread-8283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:12:40.170 [DEBUG] [Thread-8283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:12:40.170 [DEBUG] [Thread-8283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:12:40.180 [DEBUG] [Thread-8283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:12:40.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:12:40.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:12:40.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:12:40.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:12:40.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:12:40.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:12:40.216 [DEBUG] [Thread-8283] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:12:44.882 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:51.063 [DEBUG] [Thread-8285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:12:55.298 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:05.710 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:06.115 [DEBUG] [Thread-8286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:10.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:13:10.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:13:10.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:13:10.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 12, 28), 29.34, 12.63, 0.0, 13.43, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:13:10.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:12:28
2025-11-26T00:13:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:13:11.193 [DEBUG] [Thread-8287] [transport.py] [_log()] starting thread (client mode): 0x70dd2f50
2025-11-26T00:13:11.193 [DEBUG] [Thread-8287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:13:11.214 [DEBUG] [Thread-8287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:13:11.214 [INFO] [Thread-8287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:13:11.217 [DEBUG] [Thread-8287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:13:11.217 [DEBUG] [Thread-8287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:13:11.217 [DEBUG] [Thread-8287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:13:11.217 [DEBUG] [Thread-8287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] client lang: <none>
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] server lang: <none>
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] kex follows: False
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:13:11.218 [DEBUG] [Thread-8287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:13:11.219 [DEBUG] [Thread-8287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:13:11.219 [DEBUG] [Thread-8287] [transport.py] [_log()] Compression: none
2025-11-26T00:13:11.219 [DEBUG] [Thread-8287] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:13:11.235 [DEBUG] [Thread-8287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:13:11.236 [DEBUG] [Thread-8287] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:13:11.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:13:11.237 [DEBUG] [Thread-8287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:13:11.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:13:11.239 [DEBUG] [Thread-8287] [transport.py] [_log()] userauth is OK
2025-11-26T00:13:11.239 [DEBUG] [Thread-8287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:13:11.239 [DEBUG] [Thread-8287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:13:11.239 [DEBUG] [Thread-8287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:13:11.239 [DEBUG] [Thread-8287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:13:11.264 [INFO] [Thread-8287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:13:11.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:13:11.505 [DEBUG] [Thread-8289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:11.908 [DEBUG] [Thread-8287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:13:11.908 [DEBUG] [Thread-8287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:13:11.908 [DEBUG] [Thread-8287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:13:11.948 [DEBUG] [Thread-8287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:13:11.948 [DEBUG] [Thread-8287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:13:11.951 [DEBUG] [Thread-8287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:13:11.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:13:11.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:13:11.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:13:11.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:13:11.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:13:11.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:13:11.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:13:11.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:13:11.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:13:11.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.925444 -999.00  +20.20   8.40     17   -4.90 1 1 1 1 1     0    0 25.28 11.09 ZNESW 8.2 8.4 155.1 13.3 19.8 -26.3 19.7 -25.8 19.4 -24.3 19.6 -25.2
2025-11-26T00:13:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:13:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:13:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.925444
2025-11-26T00:13:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:13:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:13:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:13:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:13:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:13:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:12:28', tmtdew=29.34, humidity=12.63, cloud=0.0, wind=13.43, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:13:00', seeing=0.96, atlas_timestamp='2025-11-25T22:12:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.019249999999999545, 0.005250000000001975, 0.0034999999999989484, 0.03449999999999953, 0.015249999999999986, 0.02200000000000024, -0.012749999999998707, -0.0129999999999999, -0.006000000000000227, 0.051249999999999574, -0.009000000000000341, 0.06599999999999895, 0.10024999999999906, -0.025000000000000355, -0.05400000000000027, -0.015750000000000597, 0.023999999999999133, 0.023999999999999133, -0.027250000000002217, 0.08449999999999847, 0.0337499999999995, 0.028750000000000497, -0.01925000000000132, -0.02000000000000135, -0.018499999999999517, -0.003249999999999531, 0.0625, 0.09149999999999991, 0.09500000000000242, 0.12100000000000044, -0.03849999999999909, -0.025249999999999773], zp_timestamp='2025-11-25T22:11:00')
2025-11-26T00:13:11.975 [DEBUG] [Thread-8287] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:13:12.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:13:12.070 [DEBUG] [Thread-8291] [transport.py] [_log()] starting thread (client mode): 0x7374fcd0
2025-11-26T00:13:12.070 [DEBUG] [Thread-8291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:13:12.085 [DEBUG] [Thread-8291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:13:12.085 [INFO] [Thread-8291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:13:12.093 [DEBUG] [Thread-8291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:13:12.093 [DEBUG] [Thread-8291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:13:12.093 [DEBUG] [Thread-8291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:13:12.093 [DEBUG] [Thread-8291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:13:12.093 [DEBUG] [Thread-8291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:13:12.093 [DEBUG] [Thread-8291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:13:12.093 [DEBUG] [Thread-8291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:13:12.093 [DEBUG] [Thread-8291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] client lang: <none>
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] server lang: <none>
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] kex follows: False
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] Compression: none
2025-11-26T00:13:12.094 [DEBUG] [Thread-8291] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:13:12.153 [DEBUG] [Thread-8291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:13:12.154 [DEBUG] [Thread-8291] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:13:12.154 [DEBUG] [Thread-8291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:13:12.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:13:12.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:13:12.209 [DEBUG] [Thread-8291] [transport.py] [_log()] userauth is OK
2025-11-26T00:13:12.209 [DEBUG] [Thread-8291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:13:12.209 [DEBUG] [Thread-8291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:13:12.209 [DEBUG] [Thread-8291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:13:12.209 [DEBUG] [Thread-8291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:13:12.228 [INFO] [Thread-8291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:13:12.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:13:12.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:13:13.060 [DEBUG] [Thread-8291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:13:13.060 [DEBUG] [Thread-8291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:13:13.109 [DEBUG] [Thread-8291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:13:13.109 [DEBUG] [Thread-8291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:13:13.118 [DEBUG] [Thread-8291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:13:13.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:13:13.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:13:13.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:13:13.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:13:13.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:13:13.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:13:13.155 [DEBUG] [Thread-8291] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:13:15.927 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:15.928 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:16.131 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:21.154 [DEBUG] [Thread-8293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:26.542 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:36.212 [DEBUG] [Thread-8294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:36.940 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:43.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:13:43.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:13:43.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:13:43.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 13, 32), 29.32, 12.66, 0.0, 12.88, 19.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:13:43.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:13:32
2025-11-26T00:13:43.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:13:44.107 [DEBUG] [Thread-8295] [transport.py] [_log()] starting thread (client mode): 0x70dbe530
2025-11-26T00:13:44.107 [DEBUG] [Thread-8295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:13:44.127 [DEBUG] [Thread-8295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:13:44.127 [INFO] [Thread-8295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:13:44.130 [DEBUG] [Thread-8295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:13:44.130 [DEBUG] [Thread-8295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:13:44.130 [DEBUG] [Thread-8295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:13:44.130 [DEBUG] [Thread-8295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] client lang: <none>
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] server lang: <none>
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] kex follows: False
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:13:44.131 [DEBUG] [Thread-8295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:13:44.132 [DEBUG] [Thread-8295] [transport.py] [_log()] Compression: none
2025-11-26T00:13:44.132 [DEBUG] [Thread-8295] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:13:44.152 [DEBUG] [Thread-8295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:13:44.153 [DEBUG] [Thread-8295] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:13:44.153 [DEBUG] [Thread-8295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:13:44.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:13:44.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:13:44.155 [DEBUG] [Thread-8295] [transport.py] [_log()] userauth is OK
2025-11-26T00:13:44.156 [DEBUG] [Thread-8295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:13:44.156 [DEBUG] [Thread-8295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:13:44.156 [DEBUG] [Thread-8295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:13:44.156 [DEBUG] [Thread-8295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:13:44.181 [INFO] [Thread-8295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:13:44.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:13:44.842 [DEBUG] [Thread-8295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:13:44.842 [DEBUG] [Thread-8295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:13:44.842 [DEBUG] [Thread-8295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:13:44.883 [DEBUG] [Thread-8295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:13:44.883 [DEBUG] [Thread-8295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:13:44.886 [DEBUG] [Thread-8295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:13:44.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:13:44.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:13:44.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:13:44.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:13:44.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:13:44.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:13:44.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:13:44.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:13:44.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:13:44.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.925792 -999.00  +20.10   9.86     17   -4.90 1 1 1 1 1     0    0 25.07 11.23 ZNESW 9.5 9.9 160.0 14.3 19.8 -26.3 19.7 -25.7 19.4 -24.7 19.6 -25.4
2025-11-26T00:13:44.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:13:44.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:13:44.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.925792
2025-11-26T00:13:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:13:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:13:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:13:44.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:13:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:13:44.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:13:32', tmtdew=29.32, humidity=12.66, cloud=0.0, wind=12.88, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:13:32', seeing=0.95, atlas_timestamp='2025-11-25T22:13:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.019249999999999545, 0.005250000000001975, 0.0034999999999989484, 0.03449999999999953, 0.015249999999999986, 0.02200000000000024, -0.012749999999998707, -0.0129999999999999, -0.006000000000000227, 0.051249999999999574, -0.009000000000000341, 0.06599999999999895, 0.10024999999999906, -0.025000000000000355, -0.05400000000000027, -0.015750000000000597, 0.023999999999999133, 0.023999999999999133, -0.027250000000002217, 0.08449999999999847, 0.0337499999999995, 0.028750000000000497, -0.01925000000000132, -0.02000000000000135, -0.018499999999999517, -0.003249999999999531, 0.0625, 0.09149999999999991, 0.09500000000000242, 0.12100000000000044, -0.03849999999999909, -0.025249999999999773], zp_timestamp='2025-11-25T22:11:00')
2025-11-26T00:13:44.910 [DEBUG] [Thread-8295] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:13:44.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:13:45.005 [DEBUG] [Thread-8298] [transport.py] [_log()] starting thread (client mode): 0x70d55a50
2025-11-26T00:13:45.005 [DEBUG] [Thread-8298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:13:45.019 [DEBUG] [Thread-8298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:13:45.020 [INFO] [Thread-8298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:13:45.027 [DEBUG] [Thread-8298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:13:45.027 [DEBUG] [Thread-8298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:13:45.027 [DEBUG] [Thread-8298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:13:45.027 [DEBUG] [Thread-8298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] client lang: <none>
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] server lang: <none>
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] kex follows: False
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:13:45.028 [DEBUG] [Thread-8298] [transport.py] [_log()] Compression: none
2025-11-26T00:13:45.029 [DEBUG] [Thread-8298] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:13:45.086 [DEBUG] [Thread-8298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:13:45.087 [DEBUG] [Thread-8298] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:13:45.087 [DEBUG] [Thread-8298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:13:45.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:13:45.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:13:45.145 [DEBUG] [Thread-8298] [transport.py] [_log()] userauth is OK
2025-11-26T00:13:45.145 [DEBUG] [Thread-8298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:13:45.145 [DEBUG] [Thread-8298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:13:45.146 [DEBUG] [Thread-8298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:13:45.146 [DEBUG] [Thread-8298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:13:45.164 [INFO] [Thread-8298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:13:45.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:13:45.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:13:46.009 [DEBUG] [Thread-8298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:13:46.009 [DEBUG] [Thread-8298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:13:46.058 [DEBUG] [Thread-8298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:13:46.059 [DEBUG] [Thread-8298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:13:46.068 [DEBUG] [Thread-8298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:13:46.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:13:46.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:13:46.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:13:46.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:13:46.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:13:46.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:13:46.105 [DEBUG] [Thread-8298] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:13:47.315 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:51.243 [DEBUG] [Thread-8300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:13:57.737 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:06.303 [DEBUG] [Thread-8301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:08.112 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:11.557 [DEBUG] [Thread-8302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:16.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:14:16.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:14:16.129 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:16.130 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:16.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:14:16.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 14, 4), 29.39, 12.59, 0.0, 13.82, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:14:16.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:14:04
2025-11-26T00:14:16.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:14:17.065 [DEBUG] [Thread-8303] [transport.py] [_log()] starting thread (client mode): 0x70dbfe50
2025-11-26T00:14:17.065 [DEBUG] [Thread-8303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:14:17.084 [DEBUG] [Thread-8303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:14:17.085 [INFO] [Thread-8303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] client lang: <none>
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] server lang: <none>
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] kex follows: False
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] Compression: none
2025-11-26T00:14:17.088 [DEBUG] [Thread-8303] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:14:17.106 [DEBUG] [Thread-8303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:14:17.107 [DEBUG] [Thread-8303] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:14:17.107 [DEBUG] [Thread-8303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:14:17.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:14:17.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:14:17.109 [DEBUG] [Thread-8303] [transport.py] [_log()] userauth is OK
2025-11-26T00:14:17.109 [DEBUG] [Thread-8303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:14:17.110 [DEBUG] [Thread-8303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:14:17.110 [DEBUG] [Thread-8303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:14:17.110 [DEBUG] [Thread-8303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:14:17.128 [INFO] [Thread-8303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:14:17.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:14:17.803 [DEBUG] [Thread-8303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:14:17.803 [DEBUG] [Thread-8303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:14:17.803 [DEBUG] [Thread-8303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:14:17.844 [DEBUG] [Thread-8303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:14:17.844 [DEBUG] [Thread-8303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:14:17.848 [DEBUG] [Thread-8303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:14:17.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:14:17.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:14:17.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:14:17.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:14:17.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:14:17.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:14:17.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:14:17.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:14:17.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:14:17.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.926139 -999.00  +20.10  13.14     17   -5.10 1 1 1 1 1     0    0 25.39 10.57 ZNESW 11.5 13.1 144.0 15.4 19.8 -26.3 19.7 -25.7 19.4 -24.3 19.6 -25.5
2025-11-26T00:14:17.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:14:17.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:14:17.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.926139
2025-11-26T00:14:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:14:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:14:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:14:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:14:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:14:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:14:04', tmtdew=29.39, humidity=12.59, cloud=0.0, wind=13.82, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:14:04', seeing=0.95, atlas_timestamp='2025-11-25T22:13:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.019249999999999545, 0.005250000000001975, 0.0034999999999989484, 0.03449999999999953, 0.015249999999999986, 0.02200000000000024, -0.012749999999998707, -0.0129999999999999, -0.006000000000000227, 0.051249999999999574, -0.009000000000000341, 0.06599999999999895, 0.10024999999999906, -0.025000000000000355, -0.05400000000000027, -0.015750000000000597, 0.023999999999999133, 0.023999999999999133, -0.027250000000002217, 0.08449999999999847, 0.0337499999999995, 0.028750000000000497, -0.01925000000000132, -0.02000000000000135, -0.018499999999999517, -0.003249999999999531, 0.0625, 0.09149999999999991, 0.09500000000000242, 0.12100000000000044, -0.03849999999999909, -0.025249999999999773], zp_timestamp='2025-11-25T22:11:00')
2025-11-26T00:14:17.874 [DEBUG] [Thread-8303] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:14:17.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:14:17.971 [DEBUG] [Thread-8306] [transport.py] [_log()] starting thread (client mode): 0x70da6cb0
2025-11-26T00:14:17.971 [DEBUG] [Thread-8306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:14:17.985 [DEBUG] [Thread-8306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:14:17.986 [INFO] [Thread-8306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:14:17.993 [DEBUG] [Thread-8306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:14:17.993 [DEBUG] [Thread-8306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:14:17.993 [DEBUG] [Thread-8306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:14:17.993 [DEBUG] [Thread-8306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:14:17.993 [DEBUG] [Thread-8306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] client lang: <none>
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] server lang: <none>
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] kex follows: False
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] Compression: none
2025-11-26T00:14:17.994 [DEBUG] [Thread-8306] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:14:18.054 [DEBUG] [Thread-8306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:14:18.055 [DEBUG] [Thread-8306] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:14:18.055 [DEBUG] [Thread-8306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:14:18.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:14:18.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:14:18.110 [DEBUG] [Thread-8306] [transport.py] [_log()] userauth is OK
2025-11-26T00:14:18.110 [DEBUG] [Thread-8306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:14:18.110 [DEBUG] [Thread-8306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:14:18.110 [DEBUG] [Thread-8306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:14:18.110 [DEBUG] [Thread-8306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:14:18.129 [INFO] [Thread-8306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:14:18.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:14:18.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:14:18.511 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:18.940 [DEBUG] [Thread-8306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:14:18.940 [DEBUG] [Thread-8306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:14:18.988 [DEBUG] [Thread-8306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:14:18.988 [DEBUG] [Thread-8306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:14:18.997 [DEBUG] [Thread-8306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:14:19.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:14:19.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:14:19.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:14:19.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:14:19.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:14:19.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:14:19.034 [DEBUG] [Thread-8306] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:14:21.332 [DEBUG] [Thread-8308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:28.921 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:36.387 [DEBUG] [Thread-8309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:39.319 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:14:49.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:14:49.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:14:49.719 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:49.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 14, 36), 29.39, 12.59, 0.0, 14.43, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:14:49.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:14:36
2025-11-26T00:14:49.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:14:50.051 [DEBUG] [Thread-8310] [transport.py] [_log()] starting thread (client mode): 0x70dd1870
2025-11-26T00:14:50.051 [DEBUG] [Thread-8310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:14:50.071 [DEBUG] [Thread-8310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:14:50.071 [INFO] [Thread-8310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] client lang: <none>
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] server lang: <none>
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] kex follows: False
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] Compression: none
2025-11-26T00:14:50.074 [DEBUG] [Thread-8310] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:14:50.089 [DEBUG] [Thread-8310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:14:50.089 [DEBUG] [Thread-8310] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:14:50.089 [DEBUG] [Thread-8310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:14:50.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:14:50.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:14:50.090 [DEBUG] [Thread-8310] [transport.py] [_log()] userauth is OK
2025-11-26T00:14:50.090 [DEBUG] [Thread-8310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:14:50.090 [DEBUG] [Thread-8310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:14:50.090 [DEBUG] [Thread-8310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:14:50.090 [DEBUG] [Thread-8310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:14:50.105 [INFO] [Thread-8310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:14:50.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:14:50.712 [DEBUG] [Thread-8310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:14:50.712 [DEBUG] [Thread-8310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:14:50.712 [DEBUG] [Thread-8310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:14:50.753 [DEBUG] [Thread-8310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:14:50.753 [DEBUG] [Thread-8310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:14:50.755 [DEBUG] [Thread-8310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:14:50.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:14:50.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:14:50.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:14:50.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:14:50.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:14:50.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:14:50.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.926486 -999.00  +20.20  11.97     17   -5.00 1 1 1 1 1     0    0 25.42 10.66 ZNESW 9.6 12.0 150.4 15.5 19.8 -26.3 19.7 -25.8 19.4 -24.5 19.6 -25.3
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.926486
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:14:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:14:36', tmtdew=29.39, humidity=12.59, cloud=0.0, wind=14.43, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:14:36', seeing=0.88, atlas_timestamp='2025-11-25T22:14:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.019249999999999545, 0.005250000000001975, 0.0034999999999989484, 0.03449999999999953, 0.015249999999999986, 0.02200000000000024, -0.012749999999998707, -0.0129999999999999, -0.006000000000000227, 0.051249999999999574, -0.009000000000000341, 0.06599999999999895, 0.10024999999999906, -0.025000000000000355, -0.05400000000000027, -0.015750000000000597, 0.023999999999999133, 0.023999999999999133, -0.027250000000002217, 0.08449999999999847, 0.0337499999999995, 0.028750000000000497, -0.01925000000000132, -0.02000000000000135, -0.018499999999999517, -0.003249999999999531, 0.0625, 0.09149999999999991, 0.09500000000000242, 0.12100000000000044, -0.03849999999999909, -0.025249999999999773], zp_timestamp='2025-11-25T22:11:00')
2025-11-26T00:14:50.773 [DEBUG] [Thread-8310] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:14:50.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:14:50.859 [DEBUG] [Thread-8313] [transport.py] [_log()] starting thread (client mode): 0x70dbe440
2025-11-26T00:14:50.859 [DEBUG] [Thread-8313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:14:50.873 [DEBUG] [Thread-8313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:14:50.873 [INFO] [Thread-8313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] client lang: <none>
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] server lang: <none>
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] kex follows: False
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] Compression: none
2025-11-26T00:14:50.881 [DEBUG] [Thread-8313] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:14:50.936 [DEBUG] [Thread-8313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:14:50.936 [DEBUG] [Thread-8313] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:14:50.937 [DEBUG] [Thread-8313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:14:50.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:14:50.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:14:50.993 [DEBUG] [Thread-8313] [transport.py] [_log()] userauth is OK
2025-11-26T00:14:50.993 [DEBUG] [Thread-8313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:14:50.993 [DEBUG] [Thread-8313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:14:50.993 [DEBUG] [Thread-8313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:14:50.993 [DEBUG] [Thread-8313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:14:51.009 [INFO] [Thread-8313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:14:51.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:14:51.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:14:51.418 [DEBUG] [Thread-8315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:14:51.861 [DEBUG] [Thread-8313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:14:51.861 [DEBUG] [Thread-8313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:14:51.909 [DEBUG] [Thread-8313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:14:51.909 [DEBUG] [Thread-8313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:14:51.917 [DEBUG] [Thread-8313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:14:51.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:14:51.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:14:51.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:14:51.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:14:51.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:14:51.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:14:51.948 [DEBUG] [Thread-8313] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:15:00.130 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:06.460 [DEBUG] [Thread-8316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:10.580 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:11.615 [DEBUG] [Thread-8317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:16.332 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:16.333 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:21.000 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:21.496 [DEBUG] [Thread-8318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:21.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:15:21.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:15:21.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:15:22.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 15, 8), 29.39, 12.59, 0.0, 14.43, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:15:22.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:15:08
2025-11-26T00:15:22.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:15:22.905 [DEBUG] [Thread-8319] [transport.py] [_log()] starting thread (client mode): 0x70d54cd0
2025-11-26T00:15:22.905 [DEBUG] [Thread-8319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:15:22.925 [DEBUG] [Thread-8319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:15:22.926 [INFO] [Thread-8319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:15:22.928 [DEBUG] [Thread-8319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] client lang: <none>
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] server lang: <none>
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] kex follows: False
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] Compression: none
2025-11-26T00:15:22.929 [DEBUG] [Thread-8319] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:15:22.946 [DEBUG] [Thread-8319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:15:22.947 [DEBUG] [Thread-8319] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:15:22.947 [DEBUG] [Thread-8319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:15:22.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:15:22.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:15:22.949 [DEBUG] [Thread-8319] [transport.py] [_log()] userauth is OK
2025-11-26T00:15:22.949 [DEBUG] [Thread-8319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:15:22.949 [DEBUG] [Thread-8319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:15:22.949 [DEBUG] [Thread-8319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:15:22.949 [DEBUG] [Thread-8319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:15:22.969 [INFO] [Thread-8319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:15:22.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:15:23.547 [DEBUG] [Thread-8319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:15:23.547 [DEBUG] [Thread-8319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:15:23.547 [DEBUG] [Thread-8319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:15:23.588 [DEBUG] [Thread-8319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:15:23.589 [DEBUG] [Thread-8319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:15:23.592 [DEBUG] [Thread-8319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:15:23.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:15:23.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:15:23.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:15:23.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:15:23.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:15:23.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:15:23.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:15:23.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:15:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:15:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.926833 -999.00  +20.20  10.97     17   -5.00 1 1 1 1 1     0    0 25.43 11.04 ZNESW 10.2 11.0 147.2 15.7 19.8 -26.2 19.7 -25.7 19.4 -24.5 19.6 -25.3
2025-11-26T00:15:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:15:23.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:15:23.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.926833
2025-11-26T00:15:23.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:15:23.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:15:23.616 [DEBUG] [Thread-8319] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:15:23.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:15:23.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:15:23.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:15:23.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:15:08', tmtdew=29.39, humidity=12.59, cloud=0.0, wind=14.43, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:15:08', seeing=0.88, atlas_timestamp='2025-11-25T22:14:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.019249999999999545, 0.005250000000001975, 0.0034999999999989484, 0.03449999999999953, 0.015249999999999986, 0.02200000000000024, -0.012749999999998707, -0.0129999999999999, -0.006000000000000227, 0.051249999999999574, -0.009000000000000341, 0.06599999999999895, 0.10024999999999906, -0.025000000000000355, -0.05400000000000027, -0.015750000000000597, 0.023999999999999133, 0.023999999999999133, -0.027250000000002217, 0.08449999999999847, 0.0337499999999995, 0.028750000000000497, -0.01925000000000132, -0.02000000000000135, -0.018499999999999517, -0.003249999999999531, 0.0625, 0.09149999999999991, 0.09500000000000242, 0.12100000000000044, -0.03849999999999909, -0.025249999999999773], zp_timestamp='2025-11-25T22:11:00')
2025-11-26T00:15:23.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:15:23.709 [DEBUG] [Thread-8322] [transport.py] [_log()] starting thread (client mode): 0x70dbd180
2025-11-26T00:15:23.709 [DEBUG] [Thread-8322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:15:23.724 [DEBUG] [Thread-8322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:15:23.724 [INFO] [Thread-8322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] client lang: <none>
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] server lang: <none>
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] kex follows: False
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] Compression: none
2025-11-26T00:15:23.732 [DEBUG] [Thread-8322] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:15:23.792 [DEBUG] [Thread-8322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:15:23.792 [DEBUG] [Thread-8322] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:15:23.792 [DEBUG] [Thread-8322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:15:23.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:15:23.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:15:23.853 [DEBUG] [Thread-8322] [transport.py] [_log()] userauth is OK
2025-11-26T00:15:23.853 [DEBUG] [Thread-8322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:15:23.853 [DEBUG] [Thread-8322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:15:23.853 [DEBUG] [Thread-8322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:15:23.853 [DEBUG] [Thread-8322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:15:23.866 [INFO] [Thread-8322] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:15:23.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:15:23.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:15:24.733 [DEBUG] [Thread-8322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:15:24.733 [DEBUG] [Thread-8322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:15:24.781 [DEBUG] [Thread-8322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:15:24.781 [DEBUG] [Thread-8322] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:15:24.789 [DEBUG] [Thread-8322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:15:24.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:15:24.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:15:24.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:15:24.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:15:24.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:15:24.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:15:24.820 [DEBUG] [Thread-8322] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:15:31.447 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:36.527 [DEBUG] [Thread-8324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:41.881 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:51.580 [DEBUG] [Thread-8325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:52.309 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:15:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:15:54.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:15:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:15:55.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 15, 40), 29.34, 12.59, 0.0, 14.43, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:15:55.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:15:40
2025-11-26T00:15:55.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:15:55.793 [DEBUG] [Thread-8326] [transport.py] [_log()] starting thread (client mode): 0x70d40a60
2025-11-26T00:15:55.793 [DEBUG] [Thread-8326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:15:55.813 [DEBUG] [Thread-8326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:15:55.813 [INFO] [Thread-8326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:15:55.816 [DEBUG] [Thread-8326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] client lang: <none>
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] server lang: <none>
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] kex follows: False
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] Compression: none
2025-11-26T00:15:55.817 [DEBUG] [Thread-8326] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:15:55.833 [DEBUG] [Thread-8326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:15:55.834 [DEBUG] [Thread-8326] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:15:55.834 [DEBUG] [Thread-8326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:15:55.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:15:55.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:15:55.836 [DEBUG] [Thread-8326] [transport.py] [_log()] userauth is OK
2025-11-26T00:15:55.836 [DEBUG] [Thread-8326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:15:55.837 [DEBUG] [Thread-8326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:15:55.837 [DEBUG] [Thread-8326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:15:55.837 [DEBUG] [Thread-8326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:15:55.854 [INFO] [Thread-8326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:15:55.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:15:56.448 [DEBUG] [Thread-8326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:15:56.448 [DEBUG] [Thread-8326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:15:56.448 [DEBUG] [Thread-8326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:15:56.488 [DEBUG] [Thread-8326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:15:56.489 [DEBUG] [Thread-8326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:15:56.491 [DEBUG] [Thread-8326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:15:56.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:15:56.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:15:56.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:15:56.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:15:56.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:15:56.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:15:56.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:15:56.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:15:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:15:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.927180 -999.00  +20.20  10.23     17   -5.00 1 1 1 1 1     0    0 24.53 11.23 ZNESW 12.7 10.2 155.6 14.8 19.8 -26.3 19.7 -25.7 19.4 -24.4 19.6 -25.3
2025-11-26T00:15:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:15:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:15:56.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.927180
2025-11-26T00:15:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:15:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:15:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:15:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:15:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:15:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:15:40', tmtdew=29.34, humidity=12.59, cloud=0.0, wind=14.43, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:15:40', seeing=0.88, atlas_timestamp='2025-11-25T22:15:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, 0.019249999999999545, 0.005250000000001975, 0.0034999999999989484, 0.03449999999999953, 0.015249999999999986, 0.02200000000000024, -0.012749999999998707, -0.0129999999999999, -0.006000000000000227, 0.051249999999999574, -0.009000000000000341, 0.06599999999999895, 0.10024999999999906, -0.025000000000000355, -0.05400000000000027, -0.015750000000000597, 0.023999999999999133, 0.023999999999999133, -0.027250000000002217, 0.08449999999999847, 0.0337499999999995, 0.028750000000000497, -0.01925000000000132, -0.02000000000000135, -0.018499999999999517, -0.003249999999999531, 0.0625, 0.09149999999999991, 0.09500000000000242, 0.12100000000000044, -0.03849999999999909, -0.025249999999999773], zp_timestamp='2025-11-25T22:11:00')
2025-11-26T00:15:56.515 [DEBUG] [Thread-8326] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:15:56.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:15:56.611 [DEBUG] [Thread-8329] [transport.py] [_log()] starting thread (client mode): 0x70d54cd0
2025-11-26T00:15:56.611 [DEBUG] [Thread-8329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:15:56.628 [DEBUG] [Thread-8329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:15:56.628 [INFO] [Thread-8329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] client lang: <none>
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] server lang: <none>
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] kex follows: False
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] Compression: none
2025-11-26T00:15:56.636 [DEBUG] [Thread-8329] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:15:56.693 [DEBUG] [Thread-8329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:15:56.694 [DEBUG] [Thread-8329] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:15:56.694 [DEBUG] [Thread-8329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:15:56.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:15:56.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:15:56.750 [DEBUG] [Thread-8329] [transport.py] [_log()] userauth is OK
2025-11-26T00:15:56.750 [DEBUG] [Thread-8329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:15:56.750 [DEBUG] [Thread-8329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:15:56.751 [DEBUG] [Thread-8329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:15:56.751 [DEBUG] [Thread-8329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:15:56.769 [INFO] [Thread-8329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:15:56.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:15:56.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:15:57.624 [DEBUG] [Thread-8329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:15:57.624 [DEBUG] [Thread-8329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:15:57.672 [DEBUG] [Thread-8329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:15:57.672 [DEBUG] [Thread-8329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:15:57.681 [DEBUG] [Thread-8329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:15:57.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:15:57.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:15:57.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:15:57.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:15:57.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:15:57.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:15:57.723 [DEBUG] [Thread-8329] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:16:02.701 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:06.613 [DEBUG] [Thread-8331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:11.693 [DEBUG] [Thread-8332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:13.179 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:16.538 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:16.539 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:21.655 [DEBUG] [Thread-8333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:23.615 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:16:27.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:16:27.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:16:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 16, 12), 29.34, 12.58, 0.0, 15.46, 19.68, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:16:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:16:12
2025-11-26T00:16:28.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:16:28.690 [DEBUG] [Thread-8334] [transport.py] [_log()] starting thread (client mode): 0x70dbcfa0
2025-11-26T00:16:28.690 [DEBUG] [Thread-8334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:16:28.710 [DEBUG] [Thread-8334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:16:28.710 [INFO] [Thread-8334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:16:28.713 [DEBUG] [Thread-8334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] client lang: <none>
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] server lang: <none>
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] kex follows: False
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] Compression: none
2025-11-26T00:16:28.714 [DEBUG] [Thread-8334] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:16:28.734 [DEBUG] [Thread-8334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:16:28.735 [DEBUG] [Thread-8334] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:16:28.735 [DEBUG] [Thread-8334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:16:28.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:16:28.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:16:28.737 [DEBUG] [Thread-8334] [transport.py] [_log()] userauth is OK
2025-11-26T00:16:28.737 [DEBUG] [Thread-8334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:16:28.737 [DEBUG] [Thread-8334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:16:28.737 [DEBUG] [Thread-8334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:16:28.738 [DEBUG] [Thread-8334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:16:28.761 [INFO] [Thread-8334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:16:28.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:16:29.398 [DEBUG] [Thread-8334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:16:29.398 [DEBUG] [Thread-8334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:16:29.399 [DEBUG] [Thread-8334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:16:29.439 [DEBUG] [Thread-8334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:16:29.440 [DEBUG] [Thread-8334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:16:29.443 [DEBUG] [Thread-8334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:16:29.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:16:29.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:16:29.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:16:29.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:16:29.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:16:29.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:16:29.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:16:29.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:16:29.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:16:29.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.927875 -999.00  +20.20  12.19     17   -5.00 1 1 1 1 1     0    0 25.16 12.26 ZNESW 9.4 12.2 162.6 15.0 19.8 -26.4 19.7 -25.7 19.4 -24.3 19.6 -25.2
2025-11-26T00:16:29.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:16:29.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:16:29.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.927875
2025-11-26T00:16:29.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:16:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:16:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:16:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:16:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:16:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:16:12', tmtdew=29.34, humidity=12.58, cloud=0.0, wind=15.46, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:16:12', seeing=1.19, atlas_timestamp='2025-11-25T22:16:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:14:00')
2025-11-26T00:16:29.471 [DEBUG] [Thread-8334] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:16:29.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:16:29.565 [DEBUG] [Thread-8337] [transport.py] [_log()] starting thread (client mode): 0x70da6800
2025-11-26T00:16:29.565 [DEBUG] [Thread-8337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:16:29.580 [DEBUG] [Thread-8337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:16:29.580 [INFO] [Thread-8337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:16:29.587 [DEBUG] [Thread-8337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] client lang: <none>
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] server lang: <none>
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] kex follows: False
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] Compression: none
2025-11-26T00:16:29.588 [DEBUG] [Thread-8337] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:16:29.645 [DEBUG] [Thread-8337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:16:29.646 [DEBUG] [Thread-8337] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:16:29.646 [DEBUG] [Thread-8337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:16:29.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:16:29.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:16:29.702 [DEBUG] [Thread-8337] [transport.py] [_log()] userauth is OK
2025-11-26T00:16:29.702 [DEBUG] [Thread-8337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:16:29.702 [DEBUG] [Thread-8337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:16:29.702 [DEBUG] [Thread-8337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:16:29.703 [DEBUG] [Thread-8337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:16:29.721 [INFO] [Thread-8337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:16:29.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:16:29.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:16:30.601 [DEBUG] [Thread-8337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:16:30.601 [DEBUG] [Thread-8337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:16:30.652 [DEBUG] [Thread-8337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:16:30.652 [DEBUG] [Thread-8337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:16:30.664 [DEBUG] [Thread-8337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:16:30.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:16: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')
2025-11-26T00:16:30.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:16:30.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:16:30.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:16:30.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:16:30.702 [DEBUG] [Thread-8337] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:16:34.001 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:36.692 [DEBUG] [Thread-8339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:44.395 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:51.766 [DEBUG] [Thread-8340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:16:54.833 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:00.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:17:00.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:17:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:17:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 16, 44), 29.57, 12.61, 0.0, 15.93, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:17:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:16:44
2025-11-26T00:17:01.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:17:01.666 [DEBUG] [Thread-8341] [transport.py] [_log()] starting thread (client mode): 0x70d3a080
2025-11-26T00:17:01.667 [DEBUG] [Thread-8341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:17:01.687 [DEBUG] [Thread-8341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:17:01.687 [INFO] [Thread-8341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] client lang: <none>
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] server lang: <none>
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] kex follows: False
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] Compression: none
2025-11-26T00:17:01.689 [DEBUG] [Thread-8341] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:17:01.705 [DEBUG] [Thread-8341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:17:01.705 [DEBUG] [Thread-8341] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:17:01.706 [DEBUG] [Thread-8341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:17:01.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:17:01.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:17:01.707 [DEBUG] [Thread-8341] [transport.py] [_log()] userauth is OK
2025-11-26T00:17:01.707 [DEBUG] [Thread-8341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:17:01.707 [DEBUG] [Thread-8341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:17:01.707 [DEBUG] [Thread-8341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:17:01.707 [DEBUG] [Thread-8341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:17:01.726 [INFO] [Thread-8341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:17:01.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:17:02.381 [DEBUG] [Thread-8341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:17:02.381 [DEBUG] [Thread-8341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:17:02.381 [DEBUG] [Thread-8341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:17:02.422 [DEBUG] [Thread-8341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:17:02.422 [DEBUG] [Thread-8341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:17:02.425 [DEBUG] [Thread-8341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:17:02.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:17:02.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:17:02.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:17:02.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:17:02.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:17:02.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:17:02.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:17:02.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:17:02.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:17:02.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.928222 -999.00  +20.20   8.81     17   -5.00 1 1 1 1 1     0    0 25.58 11.53 ZNESW 9.0 8.8 142.4 14.2 19.8 -26.4 19.8 -26.0 19.4 -24.3 19.6 -25.3
2025-11-26T00:17:02.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:17:02.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:17:02.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.928222
2025-11-26T00:17:02.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:17:02.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:17:02.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:17:02.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:17:02.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:17:02.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:16:44', tmtdew=29.57, humidity=12.61, cloud=0.0, wind=15.93, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:16:44', seeing=0.86, atlas_timestamp='2025-11-25T22:16:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:14:00')
2025-11-26T00:17:02.450 [DEBUG] [Thread-8341] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:17:02.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:17:02.545 [DEBUG] [Thread-8344] [transport.py] [_log()] starting thread (client mode): 0x70d3b760
2025-11-26T00:17:02.546 [DEBUG] [Thread-8344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:17:02.560 [DEBUG] [Thread-8344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:17:02.560 [INFO] [Thread-8344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:17:02.568 [DEBUG] [Thread-8344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:17:02.568 [DEBUG] [Thread-8344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:17:02.568 [DEBUG] [Thread-8344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] client lang: <none>
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] server lang: <none>
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] kex follows: False
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] Compression: none
2025-11-26T00:17:02.569 [DEBUG] [Thread-8344] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:17:02.630 [DEBUG] [Thread-8344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:17:02.630 [DEBUG] [Thread-8344] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:17:02.631 [DEBUG] [Thread-8344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:17:02.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:17:02.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:17:02.686 [DEBUG] [Thread-8344] [transport.py] [_log()] userauth is OK
2025-11-26T00:17:02.686 [DEBUG] [Thread-8344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:17:02.686 [DEBUG] [Thread-8344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:17:02.686 [DEBUG] [Thread-8344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:17:02.686 [DEBUG] [Thread-8344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:17:02.704 [INFO] [Thread-8344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:17:02.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:17:02.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:17:03.551 [DEBUG] [Thread-8344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:17:03.552 [DEBUG] [Thread-8344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:17:03.600 [DEBUG] [Thread-8344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:17:03.600 [DEBUG] [Thread-8344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:17:03.611 [DEBUG] [Thread-8344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:17:03.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:17: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')
2025-11-26T00:17:03.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:17:03.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:17:03.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:17:03.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:17:03.656 [DEBUG] [Thread-8344] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:17:05.231 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:06.804 [DEBUG] [Thread-8346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:11.766 [DEBUG] [Thread-8347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:15.629 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:16.743 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:16.744 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:21.851 [DEBUG] [Thread-8348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:26.065 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:33.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:17:33.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:17:33.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:17:34.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 17, 16), 29.6, 12.58, 0.0, 15.39, 19.84, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:17:34.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:17:16
2025-11-26T00:17:34.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:17:34.618 [DEBUG] [Thread-8349] [transport.py] [_log()] starting thread (client mode): 0x70dd3a30
2025-11-26T00:17:34.618 [DEBUG] [Thread-8349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:17:34.637 [DEBUG] [Thread-8349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:17:34.637 [INFO] [Thread-8349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] client lang: <none>
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] server lang: <none>
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] kex follows: False
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] Compression: none
2025-11-26T00:17:34.641 [DEBUG] [Thread-8349] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:17:34.658 [DEBUG] [Thread-8349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:17:34.658 [DEBUG] [Thread-8349] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:17:34.659 [DEBUG] [Thread-8349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:17:34.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:17:34.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:17:34.661 [DEBUG] [Thread-8349] [transport.py] [_log()] userauth is OK
2025-11-26T00:17:34.661 [DEBUG] [Thread-8349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:17:34.661 [DEBUG] [Thread-8349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:17:34.661 [DEBUG] [Thread-8349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:17:34.661 [DEBUG] [Thread-8349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:17:34.685 [INFO] [Thread-8349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:17:34.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:17:35.348 [DEBUG] [Thread-8349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:17:35.348 [DEBUG] [Thread-8349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:17:35.349 [DEBUG] [Thread-8349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:17:35.389 [DEBUG] [Thread-8349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:17:35.390 [DEBUG] [Thread-8349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:17:35.393 [DEBUG] [Thread-8349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:17:35.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:17:35.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:17:35.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:17:35.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:17:35.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:17:35.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:17:35.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:17:35.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:17:35.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:17:35.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.928569 -999.00  +20.20   9.17     17   -5.00 1 1 1 1 1     0    0 25.30 11.54 ZNESW 11.0 9.2 158.3 15.4 19.7 -26.4 19.8 -25.8 19.4 -24.5 19.6 -25.3
2025-11-26T00:17:35.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:17:35.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:17:35.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.928569
2025-11-26T00:17:35.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:17:35.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:17:35.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:17:35.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:17:35.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:17:35.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:17:16', tmtdew=29.6, humidity=12.58, cloud=0.0, wind=15.39, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:17:16', seeing=0.88, atlas_timestamp='2025-11-25T22:17:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:14:00')
2025-11-26T00:17:35.417 [DEBUG] [Thread-8349] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:17:35.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:17:35.511 [DEBUG] [Thread-8352] [transport.py] [_log()] starting thread (client mode): 0x70d41330
2025-11-26T00:17:35.511 [DEBUG] [Thread-8352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:17:35.524 [DEBUG] [Thread-8352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:17:35.524 [INFO] [Thread-8352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:17:35.531 [DEBUG] [Thread-8352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:17:35.531 [DEBUG] [Thread-8352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:17:35.531 [DEBUG] [Thread-8352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] client lang: <none>
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] server lang: <none>
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] kex follows: False
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] Compression: none
2025-11-26T00:17:35.532 [DEBUG] [Thread-8352] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:17:35.589 [DEBUG] [Thread-8352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:17:35.589 [DEBUG] [Thread-8352] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:17:35.590 [DEBUG] [Thread-8352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:17:35.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:17:35.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:17:35.645 [DEBUG] [Thread-8352] [transport.py] [_log()] userauth is OK
2025-11-26T00:17:35.645 [DEBUG] [Thread-8352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:17:35.645 [DEBUG] [Thread-8352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:17:35.645 [DEBUG] [Thread-8352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:17:35.645 [DEBUG] [Thread-8352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:17:35.666 [INFO] [Thread-8352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:17:35.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:17:35.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:17:36.477 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:36.491 [DEBUG] [Thread-8352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:17:36.491 [DEBUG] [Thread-8352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:17:36.539 [DEBUG] [Thread-8352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:17:36.539 [DEBUG] [Thread-8352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:17:36.548 [DEBUG] [Thread-8352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:17:36.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:17:36.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:17:36.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:17:36.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:17:36.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:17:36.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:17:36.580 [DEBUG] [Thread-8352] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:17:36.882 [DEBUG] [Thread-8354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:46.896 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:51.934 [DEBUG] [Thread-8355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:17:57.360 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:06.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:18:06.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:18:06.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:18:06.967 [DEBUG] [Thread-8356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 17, 48), 29.67, 12.49, 0.0, 15.88, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:18:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:17:48
2025-11-26T00:18:07.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:18:07.508 [DEBUG] [Thread-8357] [transport.py] [_log()] starting thread (client mode): 0x70d43dc0
2025-11-26T00:18:07.509 [DEBUG] [Thread-8357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:18:07.528 [DEBUG] [Thread-8357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:18:07.528 [INFO] [Thread-8357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:18:07.531 [DEBUG] [Thread-8357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:18:07.531 [DEBUG] [Thread-8357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:18:07.531 [DEBUG] [Thread-8357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:18:07.531 [DEBUG] [Thread-8357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:18:07.531 [DEBUG] [Thread-8357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:18:07.531 [DEBUG] [Thread-8357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:18:07.531 [DEBUG] [Thread-8357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:18:07.531 [DEBUG] [Thread-8357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:18:07.531 [DEBUG] [Thread-8357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] client lang: <none>
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] server lang: <none>
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] kex follows: False
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] Compression: none
2025-11-26T00:18:07.532 [DEBUG] [Thread-8357] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:18:07.551 [DEBUG] [Thread-8357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:18:07.552 [DEBUG] [Thread-8357] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:18:07.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:18:07.553 [DEBUG] [Thread-8357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:18:07.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:18:07.555 [DEBUG] [Thread-8357] [transport.py] [_log()] userauth is OK
2025-11-26T00:18:07.555 [DEBUG] [Thread-8357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:18:07.556 [DEBUG] [Thread-8357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:18:07.556 [DEBUG] [Thread-8357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:18:07.556 [DEBUG] [Thread-8357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:18:07.580 [INFO] [Thread-8357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:18:07.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:18:07.745 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:08.180 [DEBUG] [Thread-8357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:18:08.180 [DEBUG] [Thread-8357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:18:08.181 [DEBUG] [Thread-8357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:18:08.222 [DEBUG] [Thread-8357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:18:08.222 [DEBUG] [Thread-8357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:18:08.224 [DEBUG] [Thread-8357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:18:08.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:18:08.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:18:08.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:18:08.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:18:08.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:18:08.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:18:08.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:18:08.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:18:08.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:18:08.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.928917 -999.00  +20.20  13.73     17   -5.00 1 1 1 1 1     0    0 25.43 11.49 ZNESW 11.5 13.7 144.8 14.8 19.8 -26.4 19.7 -25.7 19.4 -24.4 19.7 -25.5
2025-11-26T00:18:08.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:18:08.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:18:08.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.928917
2025-11-26T00:18:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:18:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:18:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:18:08.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:18:08.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:18:08.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:17:48', tmtdew=29.67, humidity=12.49, cloud=0.0, wind=15.88, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:17:48', seeing=1.02, atlas_timestamp='2025-11-25T22:17:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:14:00')
2025-11-26T00:18:08.253 [DEBUG] [Thread-8357] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:18:08.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:18:08.350 [DEBUG] [Thread-8360] [transport.py] [_log()] starting thread (client mode): 0x70d7f4c0
2025-11-26T00:18:08.350 [DEBUG] [Thread-8360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:18:08.364 [DEBUG] [Thread-8360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:18:08.365 [INFO] [Thread-8360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:18:08.378 [DEBUG] [Thread-8360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:18:08.378 [DEBUG] [Thread-8360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:18:08.378 [DEBUG] [Thread-8360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:18:08.379 [DEBUG] [Thread-8360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:18:08.379 [DEBUG] [Thread-8360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:18:08.379 [DEBUG] [Thread-8360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:18:08.379 [DEBUG] [Thread-8360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:18:08.379 [DEBUG] [Thread-8360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:18:08.379 [DEBUG] [Thread-8360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:18:08.379 [DEBUG] [Thread-8360] [transport.py] [_log()] client lang: <none>
2025-11-26T00:18:08.379 [DEBUG] [Thread-8360] [transport.py] [_log()] server lang: <none>
2025-11-26T00:18:08.380 [DEBUG] [Thread-8360] [transport.py] [_log()] kex follows: False
2025-11-26T00:18:08.380 [DEBUG] [Thread-8360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:18:08.380 [DEBUG] [Thread-8360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:18:08.380 [DEBUG] [Thread-8360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:18:08.380 [DEBUG] [Thread-8360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:18:08.380 [DEBUG] [Thread-8360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:18:08.380 [DEBUG] [Thread-8360] [transport.py] [_log()] Compression: none
2025-11-26T00:18:08.380 [DEBUG] [Thread-8360] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:18:08.434 [DEBUG] [Thread-8360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:18:08.435 [DEBUG] [Thread-8360] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:18:08.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:18:08.437 [DEBUG] [Thread-8360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:18:08.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:18:08.493 [DEBUG] [Thread-8360] [transport.py] [_log()] userauth is OK
2025-11-26T00:18:08.493 [DEBUG] [Thread-8360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:18:08.494 [DEBUG] [Thread-8360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:18:08.494 [DEBUG] [Thread-8360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:18:08.494 [DEBUG] [Thread-8360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:18:08.518 [INFO] [Thread-8360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:18:08.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:18:08.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:18:09.317 [DEBUG] [Thread-8360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:18:09.317 [DEBUG] [Thread-8360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:18:09.365 [DEBUG] [Thread-8360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:18:09.365 [DEBUG] [Thread-8360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:18:09.374 [DEBUG] [Thread-8360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:18:09.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:18:09.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:18:09.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:18:09.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:18:09.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:18:09.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:18:09.411 [DEBUG] [Thread-8360] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:18:11.839 [DEBUG] [Thread-8362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:16.945 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:16.946 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:18.216 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:21.997 [DEBUG] [Thread-8363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:28.615 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:37.043 [DEBUG] [Thread-8364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:39.056 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:18:39.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:18: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
2025-11-26T00:18:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 18, 20), 29.67, 12.51, 0.0, 15.65, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:18:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:18:20
2025-11-26T00:18:40.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:18:40.382 [DEBUG] [Thread-8365] [transport.py] [_log()] starting thread (client mode): 0x70d39cf0
2025-11-26T00:18:40.382 [DEBUG] [Thread-8365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:18:40.402 [DEBUG] [Thread-8365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:18:40.402 [INFO] [Thread-8365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] client lang: <none>
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] server lang: <none>
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] kex follows: False
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] Compression: none
2025-11-26T00:18:40.404 [DEBUG] [Thread-8365] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:18:40.419 [DEBUG] [Thread-8365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:18:40.420 [DEBUG] [Thread-8365] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:18:40.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:18:40.420 [DEBUG] [Thread-8365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:18:40.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:18:40.423 [DEBUG] [Thread-8365] [transport.py] [_log()] userauth is OK
2025-11-26T00:18:40.423 [DEBUG] [Thread-8365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:18:40.423 [DEBUG] [Thread-8365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:18:40.423 [DEBUG] [Thread-8365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:18:40.423 [DEBUG] [Thread-8365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:18:40.448 [INFO] [Thread-8365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:18:40.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:18:41.075 [DEBUG] [Thread-8365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:18:41.075 [DEBUG] [Thread-8365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:18:41.076 [DEBUG] [Thread-8365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:18:41.116 [DEBUG] [Thread-8365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:18:41.116 [DEBUG] [Thread-8365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:18:41.119 [DEBUG] [Thread-8365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:18:41.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:18:41.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:18:41.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:18:41.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:18:41.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:18:41.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:18:41.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:18:41.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:18:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:18:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.929264 -999.00  +20.20  11.22     17   -5.00 1 1 1 1 1     0    0 25.36 10.09 ZNESW 10.6 11.2 144.0 14.4 19.8 -26.3 19.8 -25.8 19.4 -24.4 19.7 -25.3
2025-11-26T00:18:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:18:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:18:41.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.929264
2025-11-26T00:18:41.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:18:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:18:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:18:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:18:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:18:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:18:20', tmtdew=29.67, humidity=12.51, cloud=0.0, wind=15.65, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:18:20', seeing=1.02, atlas_timestamp='2025-11-25T22:18:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:14:00')
2025-11-26T00:18:41.146 [DEBUG] [Thread-8365] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:18:41.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:18:41.243 [DEBUG] [Thread-8368] [transport.py] [_log()] starting thread (client mode): 0x70d6a740
2025-11-26T00:18:41.243 [DEBUG] [Thread-8368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:18:41.259 [DEBUG] [Thread-8368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:18:41.259 [INFO] [Thread-8368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] client lang: <none>
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] server lang: <none>
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] kex follows: False
2025-11-26T00:18:41.267 [DEBUG] [Thread-8368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:18:41.268 [DEBUG] [Thread-8368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:18:41.268 [DEBUG] [Thread-8368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:18:41.268 [DEBUG] [Thread-8368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:18:41.268 [DEBUG] [Thread-8368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:18:41.268 [DEBUG] [Thread-8368] [transport.py] [_log()] Compression: none
2025-11-26T00:18:41.268 [DEBUG] [Thread-8368] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:18:41.325 [DEBUG] [Thread-8368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:18:41.326 [DEBUG] [Thread-8368] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:18:41.326 [DEBUG] [Thread-8368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:18:41.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:18:41.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:18:41.382 [DEBUG] [Thread-8368] [transport.py] [_log()] userauth is OK
2025-11-26T00:18:41.382 [DEBUG] [Thread-8368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:18:41.382 [DEBUG] [Thread-8368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:18:41.382 [DEBUG] [Thread-8368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:18:41.382 [DEBUG] [Thread-8368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:18:41.402 [INFO] [Thread-8368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:18:41.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:18:41.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:18:42.241 [DEBUG] [Thread-8368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:18:42.241 [DEBUG] [Thread-8368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:18:42.290 [DEBUG] [Thread-8368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:18:42.290 [DEBUG] [Thread-8368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:18:42.299 [DEBUG] [Thread-8368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:18:42.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:18:42.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:18:42.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:18:42.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:18:42.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:18:42.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:18:42.336 [DEBUG] [Thread-8368] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:18:49.446 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:52.075 [DEBUG] [Thread-8370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:18:59.841 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:07.127 [DEBUG] [Thread-8371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:10.238 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:11.915 [DEBUG] [Thread-8372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:12.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:19:12.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:19:12.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:19:13.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 18, 52), 29.68, 12.44, 0.0, 15.26, 19.81, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:19:13.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:18:52
2025-11-26T00:19:13.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:19:13.341 [DEBUG] [Thread-8373] [transport.py] [_log()] starting thread (client mode): 0x70de7700
2025-11-26T00:19:13.341 [DEBUG] [Thread-8373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:19:13.362 [DEBUG] [Thread-8373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:19:13.362 [INFO] [Thread-8373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:19:13.365 [DEBUG] [Thread-8373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:19:13.365 [DEBUG] [Thread-8373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:19:13.365 [DEBUG] [Thread-8373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:19:13.365 [DEBUG] [Thread-8373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:19:13.365 [DEBUG] [Thread-8373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] client lang: <none>
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] server lang: <none>
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] kex follows: False
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] Compression: none
2025-11-26T00:19:13.366 [DEBUG] [Thread-8373] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:19:13.383 [DEBUG] [Thread-8373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:19:13.383 [DEBUG] [Thread-8373] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:19:13.383 [DEBUG] [Thread-8373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:19:13.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:19:13.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:19:13.384 [DEBUG] [Thread-8373] [transport.py] [_log()] userauth is OK
2025-11-26T00:19:13.384 [DEBUG] [Thread-8373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:19:13.384 [DEBUG] [Thread-8373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:19:13.384 [DEBUG] [Thread-8373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:19:13.384 [DEBUG] [Thread-8373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:19:13.399 [INFO] [Thread-8373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:19:13.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:19:14.055 [DEBUG] [Thread-8373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:19:14.055 [DEBUG] [Thread-8373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:19:14.055 [DEBUG] [Thread-8373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:19:14.096 [DEBUG] [Thread-8373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:19:14.096 [DEBUG] [Thread-8373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:19:14.098 [DEBUG] [Thread-8373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:19:14.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:19:14.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:19:14.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:19:14.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:19:14.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:19:14.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:19:14.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:19:14.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:19:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:19:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.929611 -999.00  +20.20  11.73     17   -5.00 1 1 1 1 1     0    0 25.12 10.63 ZNESW 10.9 11.7 141.0 14.8 19.8 -26.2 19.8 -25.8 19.4 -24.2 19.7 -25.5
2025-11-26T00:19:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:19:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:19:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.929611
2025-11-26T00:19:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:19:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:19:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:19:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:19:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:19:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:18:52', tmtdew=29.68, humidity=12.44, cloud=0.0, wind=15.26, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:18:52', seeing=0.98, atlas_timestamp='2025-11-25T22:18:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:17:00')
2025-11-26T00:19:14.110 [DEBUG] [Thread-8373] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:19:14.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:19:14.197 [DEBUG] [Thread-8376] [transport.py] [_log()] starting thread (client mode): 0x70de69e0
2025-11-26T00:19:14.197 [DEBUG] [Thread-8376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:19:14.212 [DEBUG] [Thread-8376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:19:14.212 [INFO] [Thread-8376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:19:14.219 [DEBUG] [Thread-8376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] client lang: <none>
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] server lang: <none>
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] kex follows: False
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] Compression: none
2025-11-26T00:19:14.220 [DEBUG] [Thread-8376] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:19:14.282 [DEBUG] [Thread-8376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:19:14.282 [DEBUG] [Thread-8376] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:19:14.282 [DEBUG] [Thread-8376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:19:14.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:19:14.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:19:14.345 [DEBUG] [Thread-8376] [transport.py] [_log()] userauth is OK
2025-11-26T00:19:14.345 [DEBUG] [Thread-8376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:19:14.345 [DEBUG] [Thread-8376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:19:14.345 [DEBUG] [Thread-8376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:19:14.345 [DEBUG] [Thread-8376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:19:14.359 [INFO] [Thread-8376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:19:14.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:19:14.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:19:15.219 [DEBUG] [Thread-8376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:19:15.220 [DEBUG] [Thread-8376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:19:15.267 [DEBUG] [Thread-8376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:19:15.267 [DEBUG] [Thread-8376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:19:15.275 [DEBUG] [Thread-8376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:19:15.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:19:15.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:19:15.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:19:15.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:19:15.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:19:15.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:19:15.307 [DEBUG] [Thread-8376] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:19:17.148 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:17.150 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:20.632 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:22.160 [DEBUG] [Thread-8378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:31.051 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:37.212 [DEBUG] [Thread-8379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:41.513 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:19:45.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:19:45.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:19:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 19, 24), 29.65, 12.49, 0.0, 15.12, 19.89, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:19:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:19:24
2025-11-26T00:19:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:19:46.284 [DEBUG] [Thread-8380] [transport.py] [_log()] starting thread (client mode): 0x70d38e20
2025-11-26T00:19:46.284 [DEBUG] [Thread-8380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:19:46.296 [DEBUG] [Thread-8380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:19:46.297 [INFO] [Thread-8380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] client lang: <none>
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] server lang: <none>
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] kex follows: False
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] Compression: none
2025-11-26T00:19:46.298 [DEBUG] [Thread-8380] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:19:46.309 [DEBUG] [Thread-8380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:19:46.309 [DEBUG] [Thread-8380] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:19:46.309 [DEBUG] [Thread-8380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:19:46.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:19:46.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:19:46.310 [DEBUG] [Thread-8380] [transport.py] [_log()] userauth is OK
2025-11-26T00:19:46.310 [DEBUG] [Thread-8380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:19:46.311 [DEBUG] [Thread-8380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:19:46.311 [DEBUG] [Thread-8380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:19:46.311 [DEBUG] [Thread-8380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:19:46.322 [INFO] [Thread-8380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:19:46.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:19:46.889 [DEBUG] [Thread-8380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:19:46.889 [DEBUG] [Thread-8380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:19:46.890 [DEBUG] [Thread-8380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:19:46.931 [DEBUG] [Thread-8380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:19:46.931 [DEBUG] [Thread-8380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:19:46.934 [DEBUG] [Thread-8380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:19:46.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:19:46.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:19:46.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:19:46.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:19:46.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:19:46.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:19:46.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:19:46.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:19:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:19:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.930305 -999.00  +20.20  14.21     17   -5.00 1 1 1 1 1     0    0 25.20 12.24 ZNESW 11.4 14.2 145.0 16.3 19.8 -26.4 19.7 -25.7 19.4 -24.6 19.6 -25.5
2025-11-26T00:19:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:19:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:19:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.930305
2025-11-26T00:19:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:19:46.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:19:46.962 [DEBUG] [Thread-8380] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:19:46.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:19:46.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:19:46.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:19:46.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:19:24', tmtdew=29.65, humidity=12.49, cloud=0.0, wind=15.12, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:19:24', seeing=0.94, atlas_timestamp='2025-11-25T22:19:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:17:00')
2025-11-26T00:19:47.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:19:47.057 [DEBUG] [Thread-8383] [transport.py] [_log()] starting thread (client mode): 0x70d7e1a0
2025-11-26T00:19:47.057 [DEBUG] [Thread-8383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:19:47.072 [DEBUG] [Thread-8383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:19:47.072 [INFO] [Thread-8383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:19:47.080 [DEBUG] [Thread-8383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:19:47.080 [DEBUG] [Thread-8383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:19:47.080 [DEBUG] [Thread-8383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:19:47.080 [DEBUG] [Thread-8383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:19:47.081 [DEBUG] [Thread-8383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:19:47.081 [DEBUG] [Thread-8383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:19:47.081 [DEBUG] [Thread-8383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:19:47.081 [DEBUG] [Thread-8383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:19:47.081 [DEBUG] [Thread-8383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:19:47.081 [DEBUG] [Thread-8383] [transport.py] [_log()] client lang: <none>
2025-11-26T00:19:47.081 [DEBUG] [Thread-8383] [transport.py] [_log()] server lang: <none>
2025-11-26T00:19:47.082 [DEBUG] [Thread-8383] [transport.py] [_log()] kex follows: False
2025-11-26T00:19:47.082 [DEBUG] [Thread-8383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:19:47.082 [DEBUG] [Thread-8383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:19:47.082 [DEBUG] [Thread-8383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:19:47.082 [DEBUG] [Thread-8383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:19:47.082 [DEBUG] [Thread-8383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:19:47.082 [DEBUG] [Thread-8383] [transport.py] [_log()] Compression: none
2025-11-26T00:19:47.082 [DEBUG] [Thread-8383] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:19:47.137 [DEBUG] [Thread-8383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:19:47.138 [DEBUG] [Thread-8383] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:19:47.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:19:47.139 [DEBUG] [Thread-8383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:19:47.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:19:47.197 [DEBUG] [Thread-8383] [transport.py] [_log()] userauth is OK
2025-11-26T00:19:47.198 [DEBUG] [Thread-8383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:19:47.198 [DEBUG] [Thread-8383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:19:47.198 [DEBUG] [Thread-8383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:19:47.198 [DEBUG] [Thread-8383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:19:47.217 [INFO] [Thread-8383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:19:47.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:19:47.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:19:48.084 [DEBUG] [Thread-8383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:19:48.084 [DEBUG] [Thread-8383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:19:48.132 [DEBUG] [Thread-8383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:19:48.132 [DEBUG] [Thread-8383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:19:48.140 [DEBUG] [Thread-8383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:19:48.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:19:48.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:19:48.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:19:48.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:19:48.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:19:48.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:19:48.173 [DEBUG] [Thread-8383] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:19:51.919 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:19:52.242 [DEBUG] [Thread-8385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:02.314 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:07.284 [DEBUG] [Thread-8386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:11.989 [DEBUG] [Thread-8387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:12.695 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:17.351 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:17.352 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:20:18.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:20: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
2025-11-26T00:20:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 19, 56), 29.59, 12.49, 0.0, 16.13, 19.81, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:20:18.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:19:56
2025-11-26T00:20:18.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:20:19.146 [DEBUG] [Thread-8388] [transport.py] [_log()] starting thread (client mode): 0x70d39300
2025-11-26T00:20:19.146 [DEBUG] [Thread-8388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:20:19.165 [DEBUG] [Thread-8388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:20:19.166 [INFO] [Thread-8388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:20:19.168 [DEBUG] [Thread-8388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] client lang: <none>
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] server lang: <none>
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] kex follows: False
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] Compression: none
2025-11-26T00:20:19.169 [DEBUG] [Thread-8388] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:20:19.178 [DEBUG] [Thread-8388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:20:19.178 [DEBUG] [Thread-8388] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:20:19.178 [DEBUG] [Thread-8388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:20:19.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:20:19.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:20:19.179 [DEBUG] [Thread-8388] [transport.py] [_log()] userauth is OK
2025-11-26T00:20:19.180 [DEBUG] [Thread-8388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:20:19.180 [DEBUG] [Thread-8388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:20:19.180 [DEBUG] [Thread-8388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:20:19.180 [DEBUG] [Thread-8388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:20:19.193 [INFO] [Thread-8388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:20:19.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:20:19.819 [DEBUG] [Thread-8388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:20:19.819 [DEBUG] [Thread-8388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:20:19.820 [DEBUG] [Thread-8388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:20:19.861 [DEBUG] [Thread-8388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:20:19.861 [DEBUG] [Thread-8388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:20:19.864 [DEBUG] [Thread-8388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:20:19.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:20:19.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:20:19.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:20:19.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:20:19.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:20:19.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:20:19.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:20:19.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:20:19.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:20:19.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.930652 -999.00  +20.20  12.99     17   -5.20 1 1 1 1 1     0    0 25.47 12.96 ZNESW 12.7 13.0 145.0 15.8 19.8 -26.3 19.7 -25.7 19.4 -24.5 19.7 -25.2
2025-11-26T00:20:19.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:20:19.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:20:19.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.930652
2025-11-26T00:20:19.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:20:19.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:20:19.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:20:19.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:20:19.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:20:19.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:19:56', tmtdew=29.59, humidity=12.49, cloud=0.0, wind=16.13, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:19:56', seeing=0.98, atlas_timestamp='2025-11-25T22:20:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:17:00')
2025-11-26T00:20:19.890 [DEBUG] [Thread-8388] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:20:19.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:20:19.986 [DEBUG] [Thread-8391] [transport.py] [_log()] starting thread (client mode): 0x70de7ac0
2025-11-26T00:20:19.986 [DEBUG] [Thread-8391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:20:20.003 [DEBUG] [Thread-8391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:20:20.003 [INFO] [Thread-8391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:20:20.011 [DEBUG] [Thread-8391] [transport.py] [_log()] client lang: <none>
2025-11-26T00:20:20.012 [DEBUG] [Thread-8391] [transport.py] [_log()] server lang: <none>
2025-11-26T00:20:20.012 [DEBUG] [Thread-8391] [transport.py] [_log()] kex follows: False
2025-11-26T00:20:20.012 [DEBUG] [Thread-8391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:20:20.012 [DEBUG] [Thread-8391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:20:20.012 [DEBUG] [Thread-8391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:20:20.012 [DEBUG] [Thread-8391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:20:20.012 [DEBUG] [Thread-8391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:20:20.012 [DEBUG] [Thread-8391] [transport.py] [_log()] Compression: none
2025-11-26T00:20:20.012 [DEBUG] [Thread-8391] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:20:20.070 [DEBUG] [Thread-8391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:20:20.070 [DEBUG] [Thread-8391] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:20:20.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:20:20.072 [DEBUG] [Thread-8391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:20:20.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:20:20.126 [DEBUG] [Thread-8391] [transport.py] [_log()] userauth is OK
2025-11-26T00:20:20.126 [DEBUG] [Thread-8391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:20:20.126 [DEBUG] [Thread-8391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:20:20.126 [DEBUG] [Thread-8391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:20:20.127 [DEBUG] [Thread-8391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:20:20.145 [INFO] [Thread-8391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:20:20.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:20:20.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:20:21.008 [DEBUG] [Thread-8391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:20:21.008 [DEBUG] [Thread-8391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:20:21.057 [DEBUG] [Thread-8391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:20:21.057 [DEBUG] [Thread-8391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:20:21.066 [DEBUG] [Thread-8391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:20:21.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:20:21.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:20:21.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:20:21.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:20:21.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:20:21.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:20:21.103 [DEBUG] [Thread-8391] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:20:22.322 [DEBUG] [Thread-8393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:23.072 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:33.473 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:37.372 [DEBUG] [Thread-8394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:43.895 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:20:51.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:20:51.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:20:51.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 20, 28), 29.6, 12.49, 0.0, 15.85, 19.84, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:20:51.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:20:28
2025-11-26T00:20:51.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:20:52.064 [DEBUG] [Thread-8395] [transport.py] [_log()] starting thread (client mode): 0x70d6bb50
2025-11-26T00:20:52.064 [DEBUG] [Thread-8395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:20:52.076 [DEBUG] [Thread-8395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:20:52.076 [INFO] [Thread-8395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] client lang: <none>
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] server lang: <none>
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] kex follows: False
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] Compression: none
2025-11-26T00:20:52.078 [DEBUG] [Thread-8395] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:20:52.090 [DEBUG] [Thread-8395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:20:52.091 [DEBUG] [Thread-8395] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:20:52.091 [DEBUG] [Thread-8395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:20:52.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:20:52.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:20:52.092 [DEBUG] [Thread-8395] [transport.py] [_log()] userauth is OK
2025-11-26T00:20:52.092 [DEBUG] [Thread-8395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:20:52.092 [DEBUG] [Thread-8395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:20:52.092 [DEBUG] [Thread-8395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:20:52.092 [DEBUG] [Thread-8395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:20:52.106 [INFO] [Thread-8395] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:20:52.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:20:52.410 [DEBUG] [Thread-8397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:20:52.734 [DEBUG] [Thread-8395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:20:52.735 [DEBUG] [Thread-8395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:20:52.735 [DEBUG] [Thread-8395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:20:52.776 [DEBUG] [Thread-8395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:20:52.776 [DEBUG] [Thread-8395] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:20:52.779 [DEBUG] [Thread-8395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:20:52.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:20:52.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:20:52.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:20:52.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:20:52.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:20:52.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:20:52.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:20:52.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:20:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:20:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.931000 -999.00  +20.30  11.07     17   -5.10 1 1 1 1 1     0    0 25.35 15.26 ZNESW 9.3 11.1 157.8 16.5 19.8 -26.5 19.8 -25.7 19.4 -24.3 19.7 -25.4
2025-11-26T00:20:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:20:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:20:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.931000
2025-11-26T00:20:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:20:52.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:20:52.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:20:52.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:20:52.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:20:52.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:20:28', tmtdew=29.6, humidity=12.49, cloud=0.0, wind=15.85, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:20:28', seeing=0.98, atlas_timestamp='2025-11-25T22:20:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:17:00')
2025-11-26T00:20:52.801 [DEBUG] [Thread-8395] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:20:52.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:20:52.896 [DEBUG] [Thread-8399] [transport.py] [_log()] starting thread (client mode): 0x70de4d60
2025-11-26T00:20:52.896 [DEBUG] [Thread-8399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:20:52.910 [DEBUG] [Thread-8399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:20:52.911 [INFO] [Thread-8399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:20:52.918 [DEBUG] [Thread-8399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:20:52.918 [DEBUG] [Thread-8399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:20:52.918 [DEBUG] [Thread-8399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:20:52.918 [DEBUG] [Thread-8399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:20:52.918 [DEBUG] [Thread-8399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:20:52.918 [DEBUG] [Thread-8399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:20:52.918 [DEBUG] [Thread-8399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:20:52.918 [DEBUG] [Thread-8399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] client lang: <none>
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] server lang: <none>
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] kex follows: False
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] Compression: none
2025-11-26T00:20:52.919 [DEBUG] [Thread-8399] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:20:52.977 [DEBUG] [Thread-8399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:20:52.978 [DEBUG] [Thread-8399] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:20:52.978 [DEBUG] [Thread-8399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:20:52.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:20:52.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:20:53.033 [DEBUG] [Thread-8399] [transport.py] [_log()] userauth is OK
2025-11-26T00:20:53.033 [DEBUG] [Thread-8399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:20:53.034 [DEBUG] [Thread-8399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:20:53.034 [DEBUG] [Thread-8399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:20:53.034 [DEBUG] [Thread-8399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:20:53.055 [INFO] [Thread-8399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:20:53.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:20:53.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:20:53.883 [DEBUG] [Thread-8399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:20:53.883 [DEBUG] [Thread-8399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:20:53.931 [DEBUG] [Thread-8399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:20:53.931 [DEBUG] [Thread-8399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:20:53.940 [DEBUG] [Thread-8399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:20:53.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:20:53.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:20:53.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:20:53.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:20:53.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:20:53.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:20:53.977 [DEBUG] [Thread-8399] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:20:54.312 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:04.718 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:07.441 [DEBUG] [Thread-8401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:12.065 [DEBUG] [Thread-8402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:15.130 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:17.554 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:17.555 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:22.481 [DEBUG] [Thread-8403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:24.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:21:24.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:21:24.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:21:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 21), 29.79, 12.41, 0.0, 15.62, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:21:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:21:00
2025-11-26T00:21:24.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:21:24.928 [DEBUG] [Thread-8404] [transport.py] [_log()] starting thread (client mode): 0x70d7f280
2025-11-26T00:21:24.928 [DEBUG] [Thread-8404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:21:24.948 [DEBUG] [Thread-8404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:21:24.948 [INFO] [Thread-8404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] client lang: <none>
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] server lang: <none>
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] kex follows: False
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] Compression: none
2025-11-26T00:21:24.951 [DEBUG] [Thread-8404] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:21:24.967 [DEBUG] [Thread-8404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:21:24.967 [DEBUG] [Thread-8404] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:21:24.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:21:24.968 [DEBUG] [Thread-8404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:21:24.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:21:24.969 [DEBUG] [Thread-8404] [transport.py] [_log()] userauth is OK
2025-11-26T00:21:24.970 [DEBUG] [Thread-8404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:21:24.970 [DEBUG] [Thread-8404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:21:24.970 [DEBUG] [Thread-8404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:21:24.970 [DEBUG] [Thread-8404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:21:24.993 [INFO] [Thread-8404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:21:24.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:21:25.529 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:25.591 [DEBUG] [Thread-8404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:21:25.591 [DEBUG] [Thread-8404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:21:25.592 [DEBUG] [Thread-8404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:21:25.633 [DEBUG] [Thread-8404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:21:25.633 [DEBUG] [Thread-8404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:21:25.637 [DEBUG] [Thread-8404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:21:25.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:21:25.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:21:25.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:21:25.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:21:25.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:21:25.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:21:25.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:21:25.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:21:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:21:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.931000 -999.00  +20.30  11.07     17   -5.10 1 1 1 1 1     0    0 25.35 15.26 ZNESW 9.3 11.1 157.8 16.5 19.8 -26.5 19.8 -25.7 19.4 -24.3 19.7 -25.4
2025-11-26T00:21:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:21:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:21:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.931000
2025-11-26T00:21:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:21:25.659 [DEBUG] [Thread-8404] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:21:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:21:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:21:25.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:21:25.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:21:25.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:21:00', tmtdew=29.79, humidity=12.41, cloud=0.0, wind=15.62, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:21:00', seeing=0.91, atlas_timestamp='2025-11-25T22:20:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:17:00')
2025-11-26T00:21:25.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:21:25.756 [DEBUG] [Thread-8407] [transport.py] [_log()] starting thread (client mode): 0x70d40490
2025-11-26T00:21:25.756 [DEBUG] [Thread-8407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:21:25.769 [DEBUG] [Thread-8407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:21:25.769 [INFO] [Thread-8407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] client lang: <none>
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] server lang: <none>
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] kex follows: False
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] Compression: none
2025-11-26T00:21:25.777 [DEBUG] [Thread-8407] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:21:25.838 [DEBUG] [Thread-8407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:21:25.838 [DEBUG] [Thread-8407] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:21:25.839 [DEBUG] [Thread-8407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:21:25.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:21:25.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:21:25.898 [DEBUG] [Thread-8407] [transport.py] [_log()] userauth is OK
2025-11-26T00:21:25.898 [DEBUG] [Thread-8407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:21:25.898 [DEBUG] [Thread-8407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:21:25.898 [DEBUG] [Thread-8407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:21:25.898 [DEBUG] [Thread-8407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:21:25.918 [INFO] [Thread-8407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:21:25.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:21:25.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:21:26.782 [DEBUG] [Thread-8407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:21:26.782 [DEBUG] [Thread-8407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:21:26.830 [DEBUG] [Thread-8407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:21:26.830 [DEBUG] [Thread-8407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:21:26.841 [DEBUG] [Thread-8407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:21:26.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:21:26.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:21:26.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:21:26.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:21:26.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:21:26.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:21:26.878 [DEBUG] [Thread-8407] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:21:35.905 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:37.517 [DEBUG] [Thread-8409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:46.302 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:52.564 [DEBUG] [Thread-8410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:56.690 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:21:56.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:21:56.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:21:56.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:21:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 21, 32), 29.87, 12.33, 0.0, 16.25, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:21:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:21:32
2025-11-26T00:21:57.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:21:57.844 [DEBUG] [Thread-8411] [transport.py] [_log()] starting thread (client mode): 0x70de4b20
2025-11-26T00:21:57.844 [DEBUG] [Thread-8411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:21:57.864 [DEBUG] [Thread-8411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:21:57.864 [INFO] [Thread-8411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:21:57.867 [DEBUG] [Thread-8411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:21:57.867 [DEBUG] [Thread-8411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] client lang: <none>
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] server lang: <none>
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] kex follows: False
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] Compression: none
2025-11-26T00:21:57.868 [DEBUG] [Thread-8411] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:21:57.885 [DEBUG] [Thread-8411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:21:57.886 [DEBUG] [Thread-8411] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:21:57.887 [DEBUG] [Thread-8411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:21:57.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:21:57.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:21:57.889 [DEBUG] [Thread-8411] [transport.py] [_log()] userauth is OK
2025-11-26T00:21:57.889 [DEBUG] [Thread-8411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:21:57.889 [DEBUG] [Thread-8411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:21:57.889 [DEBUG] [Thread-8411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:21:57.889 [DEBUG] [Thread-8411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:21:57.914 [INFO] [Thread-8411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:21:57.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:21:58.735 [DEBUG] [Thread-8411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:21:58.735 [DEBUG] [Thread-8411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:21:58.735 [DEBUG] [Thread-8411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:21:58.776 [DEBUG] [Thread-8411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:21:58.776 [DEBUG] [Thread-8411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:21:58.779 [DEBUG] [Thread-8411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:21:58.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:21:58.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:21:58.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:21:58.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:21:58.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:21:58.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:21:58.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:21:58.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:21:58.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:21:58.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.931347 -999.00  +20.30  13.49     17   -5.10 1 1 1 1 1     0    0 25.78 15.77 ZNESW 9.4 13.5 139.0 15.2 19.8 -26.4 19.7 -25.7 19.4 -24.6 19.7 -25.2
2025-11-26T00:21:58.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:21:58.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:21:58.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.931347
2025-11-26T00:21:58.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:21:58.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:21:58.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:21:58.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:21:58.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:21:58.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:21:32', tmtdew=29.87, humidity=12.33, cloud=0.0, wind=16.25, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:21:32', seeing=0.89, atlas_timestamp='2025-11-25T22:21:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01774999999999949, 0.003750000000000142, 0.02325000000000088, 0.009499999999999176, 0.0625, 0.04425000000000168, 0.013499999999998735, -0.004749999999999588, 0.007999999999999119, -0.004999999999999005, 0.05325000000000024, -0.006999999999999673, 0.12399999999999878, 0.08124999999999893, -0.014499999999999957, -0.0045000000000001705, 0.008250000000000313, 0.024499999999999744, 0.030999999999998806, -0.005250000000000199, 0.08999999999999986, 0.06874999999999787, 0.04425000000000168, -0.007250000000000867, -0.004000000000001336, -0.02800000000000047, 0.01774999999999949, 0.0495000000000001, 0.14100000000000001, 0.12200000000000166, 0.07800000000000118, -0.0045000000000001705, -0.0012500000000006395], zp_timestamp='2025-11-25T22:17:00')
2025-11-26T00:21:58.807 [DEBUG] [Thread-8411] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:21:58.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:21:58.902 [DEBUG] [Thread-8414] [transport.py] [_log()] starting thread (client mode): 0x70de4a90
2025-11-26T00:21:58.902 [DEBUG] [Thread-8414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:21:58.916 [DEBUG] [Thread-8414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:21:58.916 [INFO] [Thread-8414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:21:58.924 [DEBUG] [Thread-8414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:21:58.924 [DEBUG] [Thread-8414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:21:58.925 [DEBUG] [Thread-8414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:21:58.925 [DEBUG] [Thread-8414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:21:58.925 [DEBUG] [Thread-8414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:21:58.925 [DEBUG] [Thread-8414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:21:58.925 [DEBUG] [Thread-8414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:21:58.925 [DEBUG] [Thread-8414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:21:58.925 [DEBUG] [Thread-8414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:21:58.925 [DEBUG] [Thread-8414] [transport.py] [_log()] client lang: <none>
2025-11-26T00:21:58.925 [DEBUG] [Thread-8414] [transport.py] [_log()] server lang: <none>
2025-11-26T00:21:58.926 [DEBUG] [Thread-8414] [transport.py] [_log()] kex follows: False
2025-11-26T00:21:58.926 [DEBUG] [Thread-8414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:21:58.926 [DEBUG] [Thread-8414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:21:58.926 [DEBUG] [Thread-8414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:21:58.926 [DEBUG] [Thread-8414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:21:58.926 [DEBUG] [Thread-8414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:21:58.926 [DEBUG] [Thread-8414] [transport.py] [_log()] Compression: none
2025-11-26T00:21:58.926 [DEBUG] [Thread-8414] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:21:58.982 [DEBUG] [Thread-8414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:21:58.983 [DEBUG] [Thread-8414] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:21:58.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:21:58.984 [DEBUG] [Thread-8414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:21:58.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:21:59.042 [DEBUG] [Thread-8414] [transport.py] [_log()] userauth is OK
2025-11-26T00:21:59.042 [DEBUG] [Thread-8414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:21:59.042 [DEBUG] [Thread-8414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:21:59.042 [DEBUG] [Thread-8414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:21:59.042 [DEBUG] [Thread-8414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:21:59.062 [INFO] [Thread-8414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:21:59.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:21:59.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:21:59.878 [DEBUG] [Thread-8414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:21:59.878 [DEBUG] [Thread-8414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:21:59.926 [DEBUG] [Thread-8414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:21:59.926 [DEBUG] [Thread-8414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:21:59.936 [DEBUG] [Thread-8414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:21:59.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:21:59.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:21:59.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:21:59.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:21:59.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:21:59.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:21:59.975 [DEBUG] [Thread-8414] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:22:07.104 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:07.601 [DEBUG] [Thread-8416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:12.143 [DEBUG] [Thread-8417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:17.523 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:17.754 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:17.755 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:22.654 [DEBUG] [Thread-8418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:27.904 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:22:29.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:22:29.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:22:30.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 22, 4), 29.88, 12.33, 0.0, 15.28, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:22:30.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:22:04
2025-11-26T00:22:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:22:30.932 [DEBUG] [Thread-8419] [transport.py] [_log()] starting thread (client mode): 0x70de4580
2025-11-26T00:22:30.932 [DEBUG] [Thread-8419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:22:30.952 [DEBUG] [Thread-8419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:22:30.953 [INFO] [Thread-8419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:22:30.955 [DEBUG] [Thread-8419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] client lang: <none>
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] server lang: <none>
2025-11-26T00:22:30.956 [DEBUG] [Thread-8419] [transport.py] [_log()] kex follows: False
2025-11-26T00:22:30.957 [DEBUG] [Thread-8419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:22:30.957 [DEBUG] [Thread-8419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:22:30.957 [DEBUG] [Thread-8419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:22:30.957 [DEBUG] [Thread-8419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:22:30.957 [DEBUG] [Thread-8419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:22:30.957 [DEBUG] [Thread-8419] [transport.py] [_log()] Compression: none
2025-11-26T00:22:30.957 [DEBUG] [Thread-8419] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:22:30.975 [DEBUG] [Thread-8419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:22:30.976 [DEBUG] [Thread-8419] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:22:30.976 [DEBUG] [Thread-8419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:22:30.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:22:30.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:22:30.978 [DEBUG] [Thread-8419] [transport.py] [_log()] userauth is OK
2025-11-26T00:22:30.979 [DEBUG] [Thread-8419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:22:30.979 [DEBUG] [Thread-8419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:22:30.979 [DEBUG] [Thread-8419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:22:30.979 [DEBUG] [Thread-8419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:22:31.004 [INFO] [Thread-8419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:22:31.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:22:31.646 [DEBUG] [Thread-8419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:22:31.647 [DEBUG] [Thread-8419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:22:31.647 [DEBUG] [Thread-8419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:22:31.688 [DEBUG] [Thread-8419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:22:31.688 [DEBUG] [Thread-8419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:22:31.691 [DEBUG] [Thread-8419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:22:31.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:22:31.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:22:31.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:22:31.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:22:31.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:22:31.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:22:31.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:22:31.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:22:31.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:22:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.931694 -999.00  +20.30   6.66     17   -5.10 1 1 1 1 1     0    0 25.71 18.10 ZNESW 9.1 6.7 142.0 12.3 19.8 -26.5 19.8 -26.0 19.4 -24.5 19.7 -25.5
2025-11-26T00:22:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:22:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:22:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.931694
2025-11-26T00:22:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:22:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:22:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:22:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:22:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:22:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:22:04', tmtdew=29.88, humidity=12.33, cloud=0.0, wind=15.28, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:22:04', seeing=0.89, atlas_timestamp='2025-11-25T22:21:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[0.02275000000000027, 0.07025000000000148, 0.08225000000000016, 0.022999999999999687, 0.06350000000000122, 0.12025000000000041, 0.07199999999999918, 0.054250000000001464, 0.026499999999998636, 0.027499999999999858, 0.08124999999999893, 0.03500000000000014, 0.11599999999999966, 0.11374999999999957, 0.07099999999999973, 0.049999999999998934, 0.05925000000000047, 0.05649999999999977, 0.07199999999999918, 0.019249999999999545, 0.11199999999999832, 0.10574999999999868, 0.07725000000000115, 0.056750000000000966, 0.01699999999999946, 0.05400000000000027, 0.028750000000000497, 0.1485000000000003, 0.16900000000000048, 0.12200000000000166, 0.18600000000000172, 0.014000000000001123, 0.004749999999999588], zp_timestamp='2025-11-25T22:20:00')
2025-11-26T00:22:31.718 [DEBUG] [Thread-8419] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:22:31.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:22:31.814 [DEBUG] [Thread-8422] [transport.py] [_log()] starting thread (client mode): 0x70da7c40
2025-11-26T00:22:31.814 [DEBUG] [Thread-8422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:22:31.828 [DEBUG] [Thread-8422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:22:31.828 [INFO] [Thread-8422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:22:31.836 [DEBUG] [Thread-8422] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:22:31.836 [DEBUG] [Thread-8422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:22:31.836 [DEBUG] [Thread-8422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:22:31.836 [DEBUG] [Thread-8422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:22:31.836 [DEBUG] [Thread-8422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:22:31.836 [DEBUG] [Thread-8422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:22:31.836 [DEBUG] [Thread-8422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:22:31.836 [DEBUG] [Thread-8422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:22:31.836 [DEBUG] [Thread-8422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] client lang: <none>
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] server lang: <none>
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] kex follows: False
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] Compression: none
2025-11-26T00:22:31.837 [DEBUG] [Thread-8422] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:22:31.898 [DEBUG] [Thread-8422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:22:31.899 [DEBUG] [Thread-8422] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:22:31.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:22:31.900 [DEBUG] [Thread-8422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:22:31.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:22:31.958 [DEBUG] [Thread-8422] [transport.py] [_log()] userauth is OK
2025-11-26T00:22:31.958 [DEBUG] [Thread-8422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:22:31.958 [DEBUG] [Thread-8422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:22:31.958 [DEBUG] [Thread-8422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:22:31.958 [DEBUG] [Thread-8422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:22:31.977 [INFO] [Thread-8422] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:22:31.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:22:31.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:22:32.838 [DEBUG] [Thread-8422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:22:32.838 [DEBUG] [Thread-8422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:22:32.886 [DEBUG] [Thread-8422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:22:32.886 [DEBUG] [Thread-8422] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:22:32.896 [DEBUG] [Thread-8422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:22:32.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:22: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')
2025-11-26T00:22:32.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:22:32.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:22:32.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:22:32.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:22:32.933 [DEBUG] [Thread-8422] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:22:37.686 [DEBUG] [Thread-8424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:38.289 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:48.710 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:52.729 [DEBUG] [Thread-8425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:22:59.101 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:02.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:23:02.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:23:02.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:23:03.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 22, 36), 29.86, 12.26, 0.0, 14.98, 19.97, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:23:03.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:22:36
2025-11-26T00:23:03.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:23:03.908 [DEBUG] [Thread-8426] [transport.py] [_log()] starting thread (client mode): 0x70d7f400
2025-11-26T00:23:03.908 [DEBUG] [Thread-8426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:23:03.929 [DEBUG] [Thread-8426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:23:03.929 [INFO] [Thread-8426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] client lang: <none>
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] server lang: <none>
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] kex follows: False
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:23:03.933 [DEBUG] [Thread-8426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:23:03.934 [DEBUG] [Thread-8426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:23:03.934 [DEBUG] [Thread-8426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:23:03.934 [DEBUG] [Thread-8426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:23:03.934 [DEBUG] [Thread-8426] [transport.py] [_log()] Compression: none
2025-11-26T00:23:03.934 [DEBUG] [Thread-8426] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:23:03.950 [DEBUG] [Thread-8426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:23:03.951 [DEBUG] [Thread-8426] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:23:03.952 [DEBUG] [Thread-8426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:23:03.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:23:03.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:23:03.954 [DEBUG] [Thread-8426] [transport.py] [_log()] userauth is OK
2025-11-26T00:23:03.954 [DEBUG] [Thread-8426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:23:03.954 [DEBUG] [Thread-8426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:23:03.954 [DEBUG] [Thread-8426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:23:03.954 [DEBUG] [Thread-8426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:23:03.978 [INFO] [Thread-8426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:23:03.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:23:04.599 [DEBUG] [Thread-8426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:23:04.600 [DEBUG] [Thread-8426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:23:04.600 [DEBUG] [Thread-8426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:23:04.641 [DEBUG] [Thread-8426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:23:04.641 [DEBUG] [Thread-8426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:23:04.645 [DEBUG] [Thread-8426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:23:04.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:23:04.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:23:04.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:23:04.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:23:04.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:23:04.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:23:04.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:23:04.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:23:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:23:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.932042 -999.00  +20.20   9.24     17   -5.00 1 1 1 1 1     0    0 25.50 19.66 ZNESW 9.0 9.2 143.6 11.2 19.8 -26.6 19.7 -26.0 19.4 -24.7 19.6 -25.6
2025-11-26T00:23:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:23:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:23:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.932042
2025-11-26T00:23:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:23:04.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:23:04.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:23:04.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:23:04.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:23:04.671 [DEBUG] [Thread-8426] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:23:04.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:22:36', tmtdew=29.86, humidity=12.26, cloud=0.0, wind=14.98, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:22:36', seeing=0.95, atlas_timestamp='2025-11-25T22:22:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[0.02275000000000027, 0.07025000000000148, 0.08225000000000016, 0.022999999999999687, 0.06350000000000122, 0.12025000000000041, 0.07199999999999918, 0.054250000000001464, 0.026499999999998636, 0.027499999999999858, 0.08124999999999893, 0.03500000000000014, 0.11599999999999966, 0.11374999999999957, 0.07099999999999973, 0.049999999999998934, 0.05925000000000047, 0.05649999999999977, 0.07199999999999918, 0.019249999999999545, 0.11199999999999832, 0.10574999999999868, 0.07725000000000115, 0.056750000000000966, 0.01699999999999946, 0.05400000000000027, 0.028750000000000497, 0.1485000000000003, 0.16900000000000048, 0.12200000000000166, 0.18600000000000172, 0.014000000000001123, 0.004749999999999588], zp_timestamp='2025-11-25T22:20:00')
2025-11-26T00:23:04.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:23:04.769 [DEBUG] [Thread-8429] [transport.py] [_log()] starting thread (client mode): 0x70d7d780
2025-11-26T00:23:04.769 [DEBUG] [Thread-8429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:23:04.783 [DEBUG] [Thread-8429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:23:04.784 [INFO] [Thread-8429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] client lang: <none>
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] server lang: <none>
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] kex follows: False
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] Compression: none
2025-11-26T00:23:04.791 [DEBUG] [Thread-8429] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:23:04.849 [DEBUG] [Thread-8429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:23:04.850 [DEBUG] [Thread-8429] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:23:04.851 [DEBUG] [Thread-8429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:23:04.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:23:04.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:23:04.906 [DEBUG] [Thread-8429] [transport.py] [_log()] userauth is OK
2025-11-26T00:23:04.906 [DEBUG] [Thread-8429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:23:04.906 [DEBUG] [Thread-8429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:23:04.906 [DEBUG] [Thread-8429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:23:04.906 [DEBUG] [Thread-8429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:23:04.927 [INFO] [Thread-8429] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:23:04.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:23:04.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:23:05.759 [DEBUG] [Thread-8429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:23:05.760 [DEBUG] [Thread-8429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:23:05.807 [DEBUG] [Thread-8429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:23:05.807 [DEBUG] [Thread-8429] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:23:05.816 [DEBUG] [Thread-8429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:23:05.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:23:05.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:23:05.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:23:05.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:23:05.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:23:05.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:23:05.849 [DEBUG] [Thread-8429] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:23:07.764 [DEBUG] [Thread-8431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:09.515 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:12.224 [DEBUG] [Thread-8432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:17.956 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:17.957 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:19.911 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:22.827 [DEBUG] [Thread-8433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:30.326 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:35.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:23:35.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:23:35.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:23:36.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 23, 8), 30.02, 12.11, 0.0, 15.74, 20.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:23:36.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:23:08
2025-11-26T00:23:36.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:23:36.855 [DEBUG] [Thread-8434] [transport.py] [_log()] starting thread (client mode): 0x70d40c70
2025-11-26T00:23:36.855 [DEBUG] [Thread-8434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:23:36.875 [DEBUG] [Thread-8434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:23:36.875 [INFO] [Thread-8434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] client lang: <none>
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] server lang: <none>
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] kex follows: False
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] Compression: none
2025-11-26T00:23:36.878 [DEBUG] [Thread-8434] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:23:36.893 [DEBUG] [Thread-8434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:23:36.894 [DEBUG] [Thread-8434] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:23:36.894 [DEBUG] [Thread-8434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:23:36.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:23:36.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:23:36.895 [DEBUG] [Thread-8434] [transport.py] [_log()] userauth is OK
2025-11-26T00:23:36.895 [DEBUG] [Thread-8434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:23:36.895 [DEBUG] [Thread-8434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:23:36.895 [DEBUG] [Thread-8434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:23:36.895 [DEBUG] [Thread-8434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:23:36.910 [INFO] [Thread-8434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:23:36.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:23:37.533 [DEBUG] [Thread-8434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:23:37.533 [DEBUG] [Thread-8434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:23:37.533 [DEBUG] [Thread-8434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:23:37.574 [DEBUG] [Thread-8434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:23:37.574 [DEBUG] [Thread-8434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:23:37.576 [DEBUG] [Thread-8434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:23:37.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:23:37.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:23:37.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:23:37.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:23:37.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:23:37.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:23:37.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.932736 -999.00  +20.10   9.11     17   -5.00 1 1 1 1 1     0    0 25.31 17.91 ZNESW 8.5 9.1 138.2 14.1 19.8 -26.3 19.7 -26.0 19.4 -24.5 19.6 -25.6
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.932736
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:23:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:23:08', tmtdew=30.02, humidity=12.11, cloud=0.0, wind=15.74, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:23:08', seeing=0.92, atlas_timestamp='2025-11-25T22:23:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[0.02275000000000027, 0.07025000000000148, 0.08225000000000016, 0.022999999999999687, 0.06350000000000122, 0.12025000000000041, 0.07199999999999918, 0.054250000000001464, 0.026499999999998636, 0.027499999999999858, 0.08124999999999893, 0.03500000000000014, 0.11599999999999966, 0.11374999999999957, 0.07099999999999973, 0.049999999999998934, 0.05925000000000047, 0.05649999999999977, 0.07199999999999918, 0.019249999999999545, 0.11199999999999832, 0.10574999999999868, 0.07725000000000115, 0.056750000000000966, 0.01699999999999946, 0.05400000000000027, 0.028750000000000497, 0.1485000000000003, 0.16900000000000048, 0.12200000000000166, 0.18600000000000172, 0.014000000000001123, 0.004749999999999588], zp_timestamp='2025-11-25T22:20:00')
2025-11-26T00:23:37.592 [DEBUG] [Thread-8434] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:23:37.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:23:37.677 [DEBUG] [Thread-8437] [transport.py] [_log()] starting thread (client mode): 0x70d6b280
2025-11-26T00:23:37.677 [DEBUG] [Thread-8437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:23:37.692 [DEBUG] [Thread-8437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:23:37.692 [INFO] [Thread-8437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] client lang: <none>
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] server lang: <none>
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] kex follows: False
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:23:37.700 [DEBUG] [Thread-8437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:23:37.701 [DEBUG] [Thread-8437] [transport.py] [_log()] Compression: none
2025-11-26T00:23:37.701 [DEBUG] [Thread-8437] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:23:37.756 [DEBUG] [Thread-8437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:23:37.756 [DEBUG] [Thread-8437] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:23:37.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:23:37.757 [DEBUG] [Thread-8437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:23:37.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:23:37.813 [DEBUG] [Thread-8437] [transport.py] [_log()] userauth is OK
2025-11-26T00:23:37.813 [DEBUG] [Thread-8437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:23:37.813 [DEBUG] [Thread-8437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:23:37.813 [DEBUG] [Thread-8437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:23:37.813 [DEBUG] [Thread-8437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:23:37.827 [INFO] [Thread-8437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:23:37.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:23:37.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:23:37.859 [DEBUG] [Thread-8439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:38.669 [DEBUG] [Thread-8437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:23:38.670 [DEBUG] [Thread-8437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:23:38.717 [DEBUG] [Thread-8437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:23:38.718 [DEBUG] [Thread-8437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:23:38.727 [DEBUG] [Thread-8437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:23:38.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:23:38.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:23:38.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:23:38.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:23:38.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:23:38.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:23:38.764 [DEBUG] [Thread-8437] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:23:40.723 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:51.133 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:23:52.897 [DEBUG] [Thread-8440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:01.542 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:07.932 [DEBUG] [Thread-8441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:08.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:24:08.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:24:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:24:09.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 23, 40), 29.97, 12.13, 0.0, 16.02, 20.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:24:09.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:23:40
2025-11-26T00:24:09.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:24:09.729 [DEBUG] [Thread-8442] [transport.py] [_log()] starting thread (client mode): 0x70de4ca0
2025-11-26T00:24:09.729 [DEBUG] [Thread-8442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:24:09.744 [DEBUG] [Thread-8442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:24:09.744 [INFO] [Thread-8442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] client lang: <none>
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] server lang: <none>
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] kex follows: False
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] Compression: none
2025-11-26T00:24:09.747 [DEBUG] [Thread-8442] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:24:09.763 [DEBUG] [Thread-8442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:24:09.763 [DEBUG] [Thread-8442] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:24:09.763 [DEBUG] [Thread-8442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:24:09.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:24:09.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:24:09.764 [DEBUG] [Thread-8442] [transport.py] [_log()] userauth is OK
2025-11-26T00:24:09.764 [DEBUG] [Thread-8442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:24:09.764 [DEBUG] [Thread-8442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:24:09.764 [DEBUG] [Thread-8442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:24:09.764 [DEBUG] [Thread-8442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:24:09.773 [INFO] [Thread-8442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:24:09.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:24:10.359 [DEBUG] [Thread-8442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:24:10.359 [DEBUG] [Thread-8442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:24:10.359 [DEBUG] [Thread-8442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:24:10.400 [DEBUG] [Thread-8442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:24:10.400 [DEBUG] [Thread-8442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:24:10.403 [DEBUG] [Thread-8442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:24:10.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:24:10.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:24:10.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:24:10.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:24:10.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:24:10.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:24:10.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:24:10.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:24:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:24:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.933083 -999.00  +20.00   8.78     17   -5.00 1 1 1 1 1     0    0 25.54 17.34 ZNESW 8.8 8.8 146.2 12.0 19.7 -26.6 19.7 -26.0 19.4 -24.7 19.6 -25.4
2025-11-26T00:24:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:24:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:24:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.933083
2025-11-26T00:24:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:24:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:24:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:24:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:24:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:24:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:23:40', tmtdew=29.97, humidity=12.13, cloud=0.0, wind=16.02, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:23:40', seeing=1.06, atlas_timestamp='2025-11-25T22:23:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[0.02275000000000027, 0.07025000000000148, 0.08225000000000016, 0.022999999999999687, 0.06350000000000122, 0.12025000000000041, 0.07199999999999918, 0.054250000000001464, 0.026499999999998636, 0.027499999999999858, 0.08124999999999893, 0.03500000000000014, 0.11599999999999966, 0.11374999999999957, 0.07099999999999973, 0.049999999999998934, 0.05925000000000047, 0.05649999999999977, 0.07199999999999918, 0.019249999999999545, 0.11199999999999832, 0.10574999999999868, 0.07725000000000115, 0.056750000000000966, 0.01699999999999946, 0.05400000000000027, 0.028750000000000497, 0.1485000000000003, 0.16900000000000048, 0.12200000000000166, 0.18600000000000172, 0.014000000000001123, 0.004749999999999588], zp_timestamp='2025-11-25T22:20:00')
2025-11-26T00:24:10.419 [DEBUG] [Thread-8442] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:24:10.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:24:10.505 [DEBUG] [Thread-8445] [transport.py] [_log()] starting thread (client mode): 0x70dbdcc0
2025-11-26T00:24:10.505 [DEBUG] [Thread-8445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:24:10.519 [DEBUG] [Thread-8445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:24:10.519 [INFO] [Thread-8445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] client lang: <none>
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] server lang: <none>
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] kex follows: False
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:24:10.527 [DEBUG] [Thread-8445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:24:10.528 [DEBUG] [Thread-8445] [transport.py] [_log()] Compression: none
2025-11-26T00:24:10.528 [DEBUG] [Thread-8445] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:24:10.583 [DEBUG] [Thread-8445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:24:10.583 [DEBUG] [Thread-8445] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:24:10.584 [DEBUG] [Thread-8445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:24:10.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:24:10.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:24:10.641 [DEBUG] [Thread-8445] [transport.py] [_log()] userauth is OK
2025-11-26T00:24:10.641 [DEBUG] [Thread-8445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:24:10.641 [DEBUG] [Thread-8445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:24:10.641 [DEBUG] [Thread-8445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:24:10.641 [DEBUG] [Thread-8445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:24:10.658 [INFO] [Thread-8445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:24:10.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:24:10.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:24:11.485 [DEBUG] [Thread-8445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:24:11.485 [DEBUG] [Thread-8445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:24:11.533 [DEBUG] [Thread-8445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:24:11.533 [DEBUG] [Thread-8445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:24:11.542 [DEBUG] [Thread-8445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:24:11.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:24:11.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:24: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') -> 00000000
2025-11-26T00:24:11.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:24:11.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:24:11.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:24:11.576 [DEBUG] [Thread-8445] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:24:11.944 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:12.297 [DEBUG] [Thread-8447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:18.156 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:18.158 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:22.369 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:22.965 [DEBUG] [Thread-8448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:32.777 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:38.018 [DEBUG] [Thread-8449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:24:41.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:24:41.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:24:42.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 24, 12), 29.89, 12.18, 0.0, 15.7, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:24:42.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:24:12
2025-11-26T00:24:42.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:24:42.506 [DEBUG] [Thread-8450] [transport.py] [_log()] starting thread (client mode): 0x70d40c70
2025-11-26T00:24:42.506 [DEBUG] [Thread-8450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:24:42.526 [DEBUG] [Thread-8450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:24:42.526 [INFO] [Thread-8450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:24:42.530 [DEBUG] [Thread-8450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:24:42.530 [DEBUG] [Thread-8450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:24:42.530 [DEBUG] [Thread-8450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:24:42.530 [DEBUG] [Thread-8450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:24:42.530 [DEBUG] [Thread-8450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:24:42.530 [DEBUG] [Thread-8450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:24:42.530 [DEBUG] [Thread-8450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:24:42.530 [DEBUG] [Thread-8450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:24:42.530 [DEBUG] [Thread-8450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] client lang: <none>
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] server lang: <none>
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] kex follows: False
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] Compression: none
2025-11-26T00:24:42.531 [DEBUG] [Thread-8450] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:24:42.550 [DEBUG] [Thread-8450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:24:42.551 [DEBUG] [Thread-8450] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:24:42.552 [DEBUG] [Thread-8450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:24:42.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:24:42.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:24:42.554 [DEBUG] [Thread-8450] [transport.py] [_log()] userauth is OK
2025-11-26T00:24:42.554 [DEBUG] [Thread-8450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:24:42.554 [DEBUG] [Thread-8450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:24:42.554 [DEBUG] [Thread-8450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:24:42.554 [DEBUG] [Thread-8450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:24:42.591 [INFO] [Thread-8450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:24:42.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:24:43.185 [DEBUG] [Thread-8450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:24:43.186 [DEBUG] [Thread-8450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:24:43.186 [DEBUG] [Thread-8450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:24:43.208 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:43.227 [DEBUG] [Thread-8450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:24:43.227 [DEBUG] [Thread-8450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:24:43.230 [DEBUG] [Thread-8450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:24:43.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:24:43.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:24:43.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:24:43.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:24:43.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:24:43.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:24:43.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:24:43.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:24:43.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:24:43.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.933430 -999.00  +19.90   9.59     18   -5.00 1 1 1 1 1     0    0 25.21 16.11 ZNESW 10.7 9.6 145.1 12.7 19.8 -26.4 19.6 -26.0 19.4 -24.7 19.6 -25.7
2025-11-26T00:24:43.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:24:43.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:24:43.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.933430
2025-11-26T00:24:43.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:24:43.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:24:43.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:24:43.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:24:43.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:24:43.257 [DEBUG] [Thread-8450] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:24:43.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:24:12', tmtdew=29.89, humidity=12.18, cloud=0.0, wind=15.7, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:24:12', seeing=1.07, atlas_timestamp='2025-11-25T22:24:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[0.02275000000000027, 0.07025000000000148, 0.08225000000000016, 0.022999999999999687, 0.06350000000000122, 0.12025000000000041, 0.07199999999999918, 0.054250000000001464, 0.026499999999998636, 0.027499999999999858, 0.08124999999999893, 0.03500000000000014, 0.11599999999999966, 0.11374999999999957, 0.07099999999999973, 0.049999999999998934, 0.05925000000000047, 0.05649999999999977, 0.07199999999999918, 0.019249999999999545, 0.11199999999999832, 0.10574999999999868, 0.07725000000000115, 0.056750000000000966, 0.01699999999999946, 0.05400000000000027, 0.028750000000000497, 0.1485000000000003, 0.16900000000000048, 0.12200000000000166, 0.18600000000000172, 0.014000000000001123, 0.004749999999999588], zp_timestamp='2025-11-25T22:20:00')
2025-11-26T00:24:43.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:24:43.353 [DEBUG] [Thread-8453] [transport.py] [_log()] starting thread (client mode): 0x70d41390
2025-11-26T00:24:43.353 [DEBUG] [Thread-8453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:24:43.367 [DEBUG] [Thread-8453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:24:43.367 [INFO] [Thread-8453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:24:43.375 [DEBUG] [Thread-8453] [transport.py] [_log()] client lang: <none>
2025-11-26T00:24:43.376 [DEBUG] [Thread-8453] [transport.py] [_log()] server lang: <none>
2025-11-26T00:24:43.376 [DEBUG] [Thread-8453] [transport.py] [_log()] kex follows: False
2025-11-26T00:24:43.376 [DEBUG] [Thread-8453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:24:43.376 [DEBUG] [Thread-8453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:24:43.376 [DEBUG] [Thread-8453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:24:43.376 [DEBUG] [Thread-8453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:24:43.376 [DEBUG] [Thread-8453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:24:43.376 [DEBUG] [Thread-8453] [transport.py] [_log()] Compression: none
2025-11-26T00:24:43.376 [DEBUG] [Thread-8453] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:24:43.433 [DEBUG] [Thread-8453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:24:43.434 [DEBUG] [Thread-8453] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:24:43.435 [DEBUG] [Thread-8453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:24:43.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:24:43.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:24:43.489 [DEBUG] [Thread-8453] [transport.py] [_log()] userauth is OK
2025-11-26T00:24:43.490 [DEBUG] [Thread-8453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:24:43.490 [DEBUG] [Thread-8453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:24:43.490 [DEBUG] [Thread-8453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:24:43.490 [DEBUG] [Thread-8453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:24:43.509 [INFO] [Thread-8453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:24:43.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:24:43.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:24:44.355 [DEBUG] [Thread-8453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:24:44.356 [DEBUG] [Thread-8453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:24:44.403 [DEBUG] [Thread-8453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:24:44.403 [DEBUG] [Thread-8453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:24:44.413 [DEBUG] [Thread-8453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:24:44.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:24:44.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:24:44.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:24:44.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:24:44.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:24:44.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:24:44.447 [DEBUG] [Thread-8453] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:24:53.049 [DEBUG] [Thread-8455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:24:53.610 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:04.009 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:08.111 [DEBUG] [Thread-8456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:12.355 [DEBUG] [Thread-8457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:14.392 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:14.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:25:14.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:25:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:25:15.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 24, 44), 29.89, 12.2, 0.0, 16.43, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:25:15.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:24:44
2025-11-26T00:25:15.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:25:15.387 [DEBUG] [Thread-8458] [transport.py] [_log()] starting thread (client mode): 0x70de4a00
2025-11-26T00:25:15.387 [DEBUG] [Thread-8458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:25:15.406 [DEBUG] [Thread-8458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:25:15.406 [INFO] [Thread-8458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:25:15.409 [DEBUG] [Thread-8458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:25:15.409 [DEBUG] [Thread-8458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] client lang: <none>
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] server lang: <none>
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] kex follows: False
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] Compression: none
2025-11-26T00:25:15.410 [DEBUG] [Thread-8458] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:25:15.428 [DEBUG] [Thread-8458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:25:15.428 [DEBUG] [Thread-8458] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:25:15.429 [DEBUG] [Thread-8458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:25:15.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:25:15.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:25:15.473 [DEBUG] [Thread-8458] [transport.py] [_log()] userauth is OK
2025-11-26T00:25:15.473 [DEBUG] [Thread-8458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:25:15.473 [DEBUG] [Thread-8458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:25:15.473 [DEBUG] [Thread-8458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:25:15.474 [DEBUG] [Thread-8458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:25:15.493 [INFO] [Thread-8458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:25:15.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:25:16.286 [DEBUG] [Thread-8458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:25:16.286 [DEBUG] [Thread-8458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:25:16.286 [DEBUG] [Thread-8458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:25:16.327 [DEBUG] [Thread-8458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:25:16.327 [DEBUG] [Thread-8458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:25:16.330 [DEBUG] [Thread-8458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:25:16.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:25:16.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:25:16.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:25:16.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:25:16.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:25:16.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:25:16.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:25:16.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:25:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:25:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.933778 -999.00  +19.90  10.33     17   -5.10 1 1 1 1 1     0    0 25.33 14.70 ZNESW 10.7 10.3 139.2 13.2 19.7 -26.5 19.7 -26.0 19.4 -24.7 19.5 -25.6
2025-11-26T00:25:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:25:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:25:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.933778
2025-11-26T00:25:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:25:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:25:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:25:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:25:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:25:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:24:44', tmtdew=29.89, humidity=12.2, cloud=0.0, wind=16.43, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:24:44', seeing=1.09, atlas_timestamp='2025-11-25T22:24:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:24:00')
2025-11-26T00:25:16.358 [DEBUG] [Thread-8458] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:25:16.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:25:16.456 [DEBUG] [Thread-8461] [transport.py] [_log()] starting thread (client mode): 0x7374ca00
2025-11-26T00:25:16.456 [DEBUG] [Thread-8461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:25:16.470 [DEBUG] [Thread-8461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:25:16.471 [INFO] [Thread-8461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] client lang: <none>
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] server lang: <none>
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] kex follows: False
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:25:16.478 [DEBUG] [Thread-8461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:25:16.479 [DEBUG] [Thread-8461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:25:16.479 [DEBUG] [Thread-8461] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:25:16.479 [DEBUG] [Thread-8461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:25:16.479 [DEBUG] [Thread-8461] [transport.py] [_log()] Compression: none
2025-11-26T00:25:16.479 [DEBUG] [Thread-8461] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:25:16.540 [DEBUG] [Thread-8461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:25:16.541 [DEBUG] [Thread-8461] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:25:16.541 [DEBUG] [Thread-8461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:25:16.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:25:16.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:25:16.597 [DEBUG] [Thread-8461] [transport.py] [_log()] userauth is OK
2025-11-26T00:25:16.598 [DEBUG] [Thread-8461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:25:16.598 [DEBUG] [Thread-8461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:25:16.598 [DEBUG] [Thread-8461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:25:16.598 [DEBUG] [Thread-8461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:25:16.619 [INFO] [Thread-8461] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:25:16.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:25:16.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:25:17.454 [DEBUG] [Thread-8461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:25:17.454 [DEBUG] [Thread-8461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:25:17.503 [DEBUG] [Thread-8461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:25:17.503 [DEBUG] [Thread-8461] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:25:17.511 [DEBUG] [Thread-8461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:25:17.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:25:17.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:25:17.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:25:17.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:25:17.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:25:17.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:25:17.551 [DEBUG] [Thread-8461] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:25:18.358 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:18.359 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:23.149 [DEBUG] [Thread-8463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:24.810 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:35.231 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:38.198 [DEBUG] [Thread-8464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:45.620 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:47.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:25:47.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:25:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:25:48.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 25, 16), 29.83, 12.25, 0.0, 15.53, 19.92, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:25:48.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:25:16
2025-11-26T00:25:48.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:25:48.519 [DEBUG] [Thread-8465] [transport.py] [_log()] starting thread (client mode): 0x70da7c40
2025-11-26T00:25:48.519 [DEBUG] [Thread-8465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:25:48.539 [DEBUG] [Thread-8465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:25:48.539 [INFO] [Thread-8465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:25:48.542 [DEBUG] [Thread-8465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] client lang: <none>
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] server lang: <none>
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] kex follows: False
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] Compression: none
2025-11-26T00:25:48.543 [DEBUG] [Thread-8465] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:25:48.559 [DEBUG] [Thread-8465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:25:48.559 [DEBUG] [Thread-8465] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:25:48.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:25:48.560 [DEBUG] [Thread-8465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:25:48.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:25:48.600 [DEBUG] [Thread-8465] [transport.py] [_log()] userauth is OK
2025-11-26T00:25:48.600 [DEBUG] [Thread-8465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:25:48.600 [DEBUG] [Thread-8465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:25:48.601 [DEBUG] [Thread-8465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:25:48.601 [DEBUG] [Thread-8465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:25:48.632 [INFO] [Thread-8465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:25:48.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:25:49.252 [DEBUG] [Thread-8465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:25:49.252 [DEBUG] [Thread-8465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:25:49.252 [DEBUG] [Thread-8465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:25:49.293 [DEBUG] [Thread-8465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:25:49.293 [DEBUG] [Thread-8465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:25:49.296 [DEBUG] [Thread-8465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:25:49.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:25:49.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:25:49.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:25:49.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:25:49.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:25:49.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:25:49.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.934125 -999.00  +19.90  12.07     17   -5.20 1 1 1 1 1     0    0 25.69 15.32 ZNESW 12.0 12.1 141.6 15.2 19.7 -26.4 19.6 -25.9 19.3 -24.6 19.6 -25.5
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.934125
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:25:49.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:25:16', tmtdew=29.83, humidity=12.25, cloud=0.0, wind=15.53, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:25:16', seeing=0.94, atlas_timestamp='2025-11-25T22:25:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:24:00')
2025-11-26T00:25:49.308 [DEBUG] [Thread-8465] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:25:49.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:25:49.400 [DEBUG] [Thread-8468] [transport.py] [_log()] starting thread (client mode): 0x70d39810
2025-11-26T00:25:49.400 [DEBUG] [Thread-8468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:25:49.415 [DEBUG] [Thread-8468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:25:49.415 [INFO] [Thread-8468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] client lang: <none>
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] server lang: <none>
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] kex follows: False
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] Compression: none
2025-11-26T00:25:49.423 [DEBUG] [Thread-8468] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:25:49.479 [DEBUG] [Thread-8468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:25:49.480 [DEBUG] [Thread-8468] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:25:49.480 [DEBUG] [Thread-8468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:25:49.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:25:49.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:25:49.540 [DEBUG] [Thread-8468] [transport.py] [_log()] userauth is OK
2025-11-26T00:25:49.540 [DEBUG] [Thread-8468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:25:49.540 [DEBUG] [Thread-8468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:25:49.541 [DEBUG] [Thread-8468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:25:49.541 [DEBUG] [Thread-8468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:25:49.555 [INFO] [Thread-8468] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:25:49.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:25:49.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:25:50.393 [DEBUG] [Thread-8468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:25:50.393 [DEBUG] [Thread-8468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:25:50.440 [DEBUG] [Thread-8468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:25:50.440 [DEBUG] [Thread-8468] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:25:50.449 [DEBUG] [Thread-8468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:25:50.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:25:50.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:25:50.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
2025-11-26T00:25:50.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:25:50.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:25:50.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:25:50.480 [DEBUG] [Thread-8468] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:25:53.236 [DEBUG] [Thread-8470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:25:56.062 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:06.450 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:08.290 [DEBUG] [Thread-8471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:12.413 [DEBUG] [Thread-8472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:16.866 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:18.557 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:18.559 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:20.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:26:20.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:26:20.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:26:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 25, 48), 29.96, 12.2, 0.0, 15.62, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:26:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:25:48
2025-11-26T00:26:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:26:21.475 [DEBUG] [Thread-8473] [transport.py] [_log()] starting thread (client mode): 0x70de4c10
2025-11-26T00:26:21.475 [DEBUG] [Thread-8473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:26:21.497 [DEBUG] [Thread-8473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:26:21.497 [INFO] [Thread-8473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] client lang: <none>
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] server lang: <none>
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] kex follows: False
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] Compression: none
2025-11-26T00:26:21.500 [DEBUG] [Thread-8473] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:26:21.516 [DEBUG] [Thread-8473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:26:21.516 [DEBUG] [Thread-8473] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:26:21.516 [DEBUG] [Thread-8473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:26:21.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:26:21.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:26:21.517 [DEBUG] [Thread-8473] [transport.py] [_log()] userauth is OK
2025-11-26T00:26:21.517 [DEBUG] [Thread-8473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:26:21.517 [DEBUG] [Thread-8473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:26:21.517 [DEBUG] [Thread-8473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:26:21.517 [DEBUG] [Thread-8473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:26:21.543 [INFO] [Thread-8473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:26:21.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:26:22.187 [DEBUG] [Thread-8473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:26:22.187 [DEBUG] [Thread-8473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:26:22.187 [DEBUG] [Thread-8473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:26:22.227 [DEBUG] [Thread-8473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:26:22.227 [DEBUG] [Thread-8473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:26:22.230 [DEBUG] [Thread-8473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:26:22.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:26:22.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:26:22.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:26:22.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:26:22.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:26:22.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:26:22.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.934472 -999.00  +20.00   9.84     17   -5.20 1 1 1 1 1     0    0 25.62 14.80 ZNESW 10.6 9.8 148.8 12.7 19.7 -26.4 19.6 -25.9 19.3 -24.5 19.6 -25.6
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.934472
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:26:22.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:25:48', tmtdew=29.96, humidity=12.2, cloud=0.0, wind=15.62, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:25:48', seeing=0.94, atlas_timestamp='2025-11-25T22:25:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:24:00')
2025-11-26T00:26:22.248 [DEBUG] [Thread-8473] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:26:22.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:26:22.332 [DEBUG] [Thread-8476] [transport.py] [_log()] starting thread (client mode): 0x70d428f0
2025-11-26T00:26:22.332 [DEBUG] [Thread-8476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:26:22.347 [DEBUG] [Thread-8476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:26:22.347 [INFO] [Thread-8476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] client lang: <none>
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] server lang: <none>
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] kex follows: False
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] Compression: none
2025-11-26T00:26:22.355 [DEBUG] [Thread-8476] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:26:22.412 [DEBUG] [Thread-8476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:26:22.412 [DEBUG] [Thread-8476] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:26:22.412 [DEBUG] [Thread-8476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:26:22.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:26:22.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:26:22.473 [DEBUG] [Thread-8476] [transport.py] [_log()] userauth is OK
2025-11-26T00:26:22.473 [DEBUG] [Thread-8476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:26:22.473 [DEBUG] [Thread-8476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:26:22.473 [DEBUG] [Thread-8476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:26:22.473 [DEBUG] [Thread-8476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:26:22.486 [INFO] [Thread-8476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:26:22.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:26:22.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:26:23.321 [DEBUG] [Thread-8478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:23.322 [DEBUG] [Thread-8476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:26:23.323 [DEBUG] [Thread-8476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:26:23.369 [DEBUG] [Thread-8476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:26:23.369 [DEBUG] [Thread-8476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:26:23.378 [DEBUG] [Thread-8476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:26:23.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:26:23.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:26:23.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:26:23.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:26:23.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:26:23.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:26:23.413 [DEBUG] [Thread-8476] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:26:27.250 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:37.682 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:38.379 [DEBUG] [Thread-8479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:48.053 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:53.407 [DEBUG] [Thread-8480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:26:53.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:26:53.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:26:53.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:26:54.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 26, 20), 29.87, 12.3, 0.0, 17.22, 19.92, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:26:54.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:26:20
2025-11-26T00:26:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:26:54.426 [DEBUG] [Thread-8481] [transport.py] [_log()] starting thread (client mode): 0x70d43ca0
2025-11-26T00:26:54.426 [DEBUG] [Thread-8481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:26:54.448 [DEBUG] [Thread-8481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:26:54.448 [INFO] [Thread-8481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] client lang: <none>
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] server lang: <none>
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] kex follows: False
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] Compression: none
2025-11-26T00:26:54.451 [DEBUG] [Thread-8481] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:26:54.466 [DEBUG] [Thread-8481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:26:54.466 [DEBUG] [Thread-8481] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:26:54.466 [DEBUG] [Thread-8481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:26:54.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:26:54.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:26:54.467 [DEBUG] [Thread-8481] [transport.py] [_log()] userauth is OK
2025-11-26T00:26:54.467 [DEBUG] [Thread-8481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:26:54.467 [DEBUG] [Thread-8481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:26:54.467 [DEBUG] [Thread-8481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:26:54.467 [DEBUG] [Thread-8481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:26:54.476 [INFO] [Thread-8481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:26:54.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:26:55.096 [DEBUG] [Thread-8481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:26:55.096 [DEBUG] [Thread-8481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:26:55.097 [DEBUG] [Thread-8481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:26:55.137 [DEBUG] [Thread-8481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:26:55.137 [DEBUG] [Thread-8481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:26:55.140 [DEBUG] [Thread-8481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:26:55.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:26:55.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:26:55.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:26:55.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:26:55.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:26:55.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:26:55.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:26:55.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:26:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:26:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.935167 -999.00  +20.10  11.24     17   -5.20 1 1 1 1 1     0    0 25.53 16.19 ZNESW 14.6 11.2 134.2 15.2 19.7 -26.4 19.6 -25.9 19.4 -24.5 19.6 -25.3
2025-11-26T00:26:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:26:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:26:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.935167
2025-11-26T00:26:55.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:26:55.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:26:55.163 [DEBUG] [Thread-8481] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:26:55.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:26:55.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:26:55.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:26:55.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:26:20', tmtdew=29.87, humidity=12.3, cloud=0.0, wind=17.22, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:26:52', seeing=1.07, atlas_timestamp='2025-11-25T22:26:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:24:00')
2025-11-26T00:26:55.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:26:55.256 [DEBUG] [Thread-8484] [transport.py] [_log()] starting thread (client mode): 0x70d55120
2025-11-26T00:26:55.256 [DEBUG] [Thread-8484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:26:55.271 [DEBUG] [Thread-8484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:26:55.271 [INFO] [Thread-8484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:26:55.278 [DEBUG] [Thread-8484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:26:55.278 [DEBUG] [Thread-8484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:26:55.278 [DEBUG] [Thread-8484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:26:55.278 [DEBUG] [Thread-8484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] client lang: <none>
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] server lang: <none>
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] kex follows: False
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] Compression: none
2025-11-26T00:26:55.279 [DEBUG] [Thread-8484] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:26:55.336 [DEBUG] [Thread-8484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:26:55.337 [DEBUG] [Thread-8484] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:26:55.337 [DEBUG] [Thread-8484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:26:55.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:26:55.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:26:55.393 [DEBUG] [Thread-8484] [transport.py] [_log()] userauth is OK
2025-11-26T00:26:55.393 [DEBUG] [Thread-8484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:26:55.393 [DEBUG] [Thread-8484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:26:55.393 [DEBUG] [Thread-8484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:26:55.393 [DEBUG] [Thread-8484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:26:55.416 [INFO] [Thread-8484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:26:55.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:26:55.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:26:56.298 [DEBUG] [Thread-8484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:26:56.299 [DEBUG] [Thread-8484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:26:56.347 [DEBUG] [Thread-8484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:26:56.347 [DEBUG] [Thread-8484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:26:56.356 [DEBUG] [Thread-8484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:26:56.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:26:56.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:26:56.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:26:56.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:26:56.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:26:56.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:26:56.392 [DEBUG] [Thread-8484] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:26:58.501 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:08.442 [DEBUG] [Thread-8486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:08.936 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:12.501 [DEBUG] [Thread-8487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:18.759 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:18.760 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:19.331 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:23.499 [DEBUG] [Thread-8488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:26.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:27:26.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:27:26.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:27:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 26, 52), 30.06, 12.11, 0.0, 15.72, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:27:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:26:52
2025-11-26T00:27:27.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:27:27.376 [DEBUG] [Thread-8489] [transport.py] [_log()] starting thread (client mode): 0x70de72e0
2025-11-26T00:27:27.377 [DEBUG] [Thread-8489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:27:27.398 [DEBUG] [Thread-8489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:27:27.398 [INFO] [Thread-8489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] client lang: <none>
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] server lang: <none>
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] kex follows: False
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:27:27.401 [DEBUG] [Thread-8489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:27:27.402 [DEBUG] [Thread-8489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:27:27.402 [DEBUG] [Thread-8489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:27:27.402 [DEBUG] [Thread-8489] [transport.py] [_log()] Compression: none
2025-11-26T00:27:27.402 [DEBUG] [Thread-8489] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:27:27.418 [DEBUG] [Thread-8489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:27:27.419 [DEBUG] [Thread-8489] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:27:27.419 [DEBUG] [Thread-8489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:27:27.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:27:27.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:27:27.421 [DEBUG] [Thread-8489] [transport.py] [_log()] userauth is OK
2025-11-26T00:27:27.421 [DEBUG] [Thread-8489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:27:27.422 [DEBUG] [Thread-8489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:27:27.422 [DEBUG] [Thread-8489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:27:27.422 [DEBUG] [Thread-8489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:27:27.446 [INFO] [Thread-8489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:27:27.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:27:28.085 [DEBUG] [Thread-8489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:27:28.085 [DEBUG] [Thread-8489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:27:28.085 [DEBUG] [Thread-8489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:27:28.126 [DEBUG] [Thread-8489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:27:28.127 [DEBUG] [Thread-8489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:27:28.130 [DEBUG] [Thread-8489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:27:28.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:27:28.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:27:28.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:27:28.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:27:28.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:27:28.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:27:28.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:27:28.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:27:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:27:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.935514 -999.00  +20.10   9.22     17   -5.20 1 1 1 1 1     0    0 25.59 15.39 ZNESW 8.4 9.2 159.3 14.9 19.7 -26.5 19.7 -25.9 19.4 -24.6 19.6 -25.4
2025-11-26T00:27:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:27:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:27:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.935514
2025-11-26T00:27:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:27:28.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:27:28.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:27:28.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:27:28.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:27:28.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:26:52', tmtdew=30.06, humidity=12.11, cloud=0.0, wind=15.72, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:27:24', seeing=0.88, atlas_timestamp='2025-11-25T22:27:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:24:00')
2025-11-26T00:27:28.155 [DEBUG] [Thread-8489] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:27:28.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:27:28.252 [DEBUG] [Thread-8492] [transport.py] [_log()] starting thread (client mode): 0x70da6dd0
2025-11-26T00:27:28.252 [DEBUG] [Thread-8492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:27:28.267 [DEBUG] [Thread-8492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:27:28.267 [INFO] [Thread-8492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:27:28.274 [DEBUG] [Thread-8492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:27:28.274 [DEBUG] [Thread-8492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] client lang: <none>
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] server lang: <none>
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] kex follows: False
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] Compression: none
2025-11-26T00:27:28.275 [DEBUG] [Thread-8492] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:27:28.341 [DEBUG] [Thread-8492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:27:28.342 [DEBUG] [Thread-8492] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:27:28.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:27:28.343 [DEBUG] [Thread-8492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:27:28.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:27:28.401 [DEBUG] [Thread-8492] [transport.py] [_log()] userauth is OK
2025-11-26T00:27:28.402 [DEBUG] [Thread-8492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:27:28.402 [DEBUG] [Thread-8492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:27:28.402 [DEBUG] [Thread-8492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:27:28.402 [DEBUG] [Thread-8492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:27:28.420 [INFO] [Thread-8492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:27:28.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:27:28.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:27:29.256 [DEBUG] [Thread-8492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:27:29.256 [DEBUG] [Thread-8492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:27:29.308 [DEBUG] [Thread-8492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:27:29.308 [DEBUG] [Thread-8492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:27:29.317 [DEBUG] [Thread-8492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:27:29.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:27:29.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:27:29.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:27:29.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:27:29.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:27:29.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:27:29.353 [DEBUG] [Thread-8492] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:27:29.759 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:38.532 [DEBUG] [Thread-8494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:40.144 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:50.544 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:53.586 [DEBUG] [Thread-8495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:27:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:27:59.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:27:59.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:28:00.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 27, 56), 29.98, 12.2, 0.0, 16.02, 19.96, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:28:00.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:27:56
2025-11-26T00:28:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:28:00.350 [DEBUG] [Thread-8496] [transport.py] [_log()] starting thread (client mode): 0x70de46a0
2025-11-26T00:28:00.350 [DEBUG] [Thread-8496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:28:00.371 [DEBUG] [Thread-8496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:28:00.372 [INFO] [Thread-8496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] client lang: <none>
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] server lang: <none>
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] kex follows: False
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] Compression: none
2025-11-26T00:28:00.375 [DEBUG] [Thread-8496] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:28:00.391 [DEBUG] [Thread-8496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:28:00.391 [DEBUG] [Thread-8496] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:28:00.391 [DEBUG] [Thread-8496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:28:00.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:28:00.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:28:00.392 [DEBUG] [Thread-8496] [transport.py] [_log()] userauth is OK
2025-11-26T00:28:00.392 [DEBUG] [Thread-8496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:28:00.392 [DEBUG] [Thread-8496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:28:00.392 [DEBUG] [Thread-8496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:28:00.392 [DEBUG] [Thread-8496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:28:00.408 [INFO] [Thread-8496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:28:00.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:28:00.922 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:01.041 [DEBUG] [Thread-8496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:28:01.041 [DEBUG] [Thread-8496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:28:01.041 [DEBUG] [Thread-8496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:28:01.082 [DEBUG] [Thread-8496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:28:01.082 [DEBUG] [Thread-8496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:28:01.085 [DEBUG] [Thread-8496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:28:01.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:28:01.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:28:01.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:28:01.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:28:01.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:28:01.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:28:01.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.935861 -999.00  +20.10   9.46     17   -5.10 1 1 1 1 1     0    0 25.45 14.64 ZNESW 10.4 9.5 137.8 13.2 19.7 -26.6 19.6 -26.0 19.4 -24.7 19.6 -25.4
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.935861
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:28:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:28:01.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:28:01.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:27:56', tmtdew=29.98, humidity=12.2, cloud=0.0, wind=16.02, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:27:56', seeing=0.88, atlas_timestamp='2025-11-25T22:27:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:24:00')
2025-11-26T00:28:01.103 [DEBUG] [Thread-8496] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:28:01.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:28:01.190 [DEBUG] [Thread-8499] [transport.py] [_log()] starting thread (client mode): 0x70de4d00
2025-11-26T00:28:01.190 [DEBUG] [Thread-8499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:28:01.208 [DEBUG] [Thread-8499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:28:01.208 [INFO] [Thread-8499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:28:01.215 [DEBUG] [Thread-8499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:28:01.215 [DEBUG] [Thread-8499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:28:01.215 [DEBUG] [Thread-8499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] client lang: <none>
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] server lang: <none>
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] kex follows: False
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] Compression: none
2025-11-26T00:28:01.216 [DEBUG] [Thread-8499] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:28:01.273 [DEBUG] [Thread-8499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:28:01.274 [DEBUG] [Thread-8499] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:28:01.274 [DEBUG] [Thread-8499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:28:01.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:28:01.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:28:01.329 [DEBUG] [Thread-8499] [transport.py] [_log()] userauth is OK
2025-11-26T00:28:01.329 [DEBUG] [Thread-8499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:28:01.329 [DEBUG] [Thread-8499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:28:01.329 [DEBUG] [Thread-8499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:28:01.329 [DEBUG] [Thread-8499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:28:01.343 [INFO] [Thread-8499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:28:01.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:28:01.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:28:02.215 [DEBUG] [Thread-8499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:28:02.215 [DEBUG] [Thread-8499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:28:02.266 [DEBUG] [Thread-8499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:28:02.266 [DEBUG] [Thread-8499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:28:02.277 [DEBUG] [Thread-8499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:28:02.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:28:02.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:28:02.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:28:02.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:28:02.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:28:02.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:28:02.309 [DEBUG] [Thread-8499] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:28:08.618 [DEBUG] [Thread-8501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:11.311 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:12.583 [DEBUG] [Thread-8502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:18.963 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:18.964 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:21.703 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:23.674 [DEBUG] [Thread-8503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:32.090 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:32.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:28:32.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:28:32.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:28:33.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 28, 28), 29.85, 12.31, 0.0, 15.76, 19.89, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:28:33.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:28:28
2025-11-26T00:28:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:28:33.285 [DEBUG] [Thread-8504] [transport.py] [_log()] starting thread (client mode): 0x70d40a60
2025-11-26T00:28:33.285 [DEBUG] [Thread-8504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:28:33.306 [DEBUG] [Thread-8504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:28:33.306 [INFO] [Thread-8504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:28:33.309 [DEBUG] [Thread-8504] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:28:33.309 [DEBUG] [Thread-8504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:28:33.309 [DEBUG] [Thread-8504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:28:33.309 [DEBUG] [Thread-8504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] client lang: <none>
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] server lang: <none>
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] kex follows: False
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:28:33.310 [DEBUG] [Thread-8504] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:28:33.311 [DEBUG] [Thread-8504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:28:33.311 [DEBUG] [Thread-8504] [transport.py] [_log()] Compression: none
2025-11-26T00:28:33.311 [DEBUG] [Thread-8504] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:28:33.327 [DEBUG] [Thread-8504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:28:33.328 [DEBUG] [Thread-8504] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:28:33.328 [DEBUG] [Thread-8504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:28:33.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:28:33.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:28:33.330 [DEBUG] [Thread-8504] [transport.py] [_log()] userauth is OK
2025-11-26T00:28:33.330 [DEBUG] [Thread-8504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:28:33.330 [DEBUG] [Thread-8504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:28:33.330 [DEBUG] [Thread-8504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:28:33.330 [DEBUG] [Thread-8504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:28:33.354 [INFO] [Thread-8504] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:28:33.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:28:34.003 [DEBUG] [Thread-8504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:28:34.003 [DEBUG] [Thread-8504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:28:34.004 [DEBUG] [Thread-8504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:28:34.045 [DEBUG] [Thread-8504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:28:34.045 [DEBUG] [Thread-8504] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:28:34.048 [DEBUG] [Thread-8504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:28:34.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:28:34.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:28:34.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:28:34.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:28:34.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:28:34.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:28:34.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:28:34.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:28:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:28:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.936208 -999.00  +20.10   9.97     17   -5.10 1 1 1 1 1     0    0 25.53 12.86 ZNESW 10.1 10.0 151.2 13.8 19.7 -26.3 19.6 -25.7 19.3 -24.5 19.6 -25.4
2025-11-26T00:28:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:28:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:28:34.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.936208
2025-11-26T00:28:34.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:28:34.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:28:34.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:28:34.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:28:34.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:28:34.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:28:28', tmtdew=29.85, humidity=12.31, cloud=0.0, wind=15.76, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:28:28', seeing=0.96, atlas_timestamp='2025-11-25T22:28:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:26:00')
2025-11-26T00:28:34.074 [DEBUG] [Thread-8504] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:28:34.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:28:34.174 [DEBUG] [Thread-8507] [transport.py] [_log()] starting thread (client mode): 0x70d7f9d0
2025-11-26T00:28:34.175 [DEBUG] [Thread-8507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:28:34.189 [DEBUG] [Thread-8507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:28:34.189 [INFO] [Thread-8507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:28:34.197 [DEBUG] [Thread-8507] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:28:34.197 [DEBUG] [Thread-8507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:28:34.197 [DEBUG] [Thread-8507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:28:34.197 [DEBUG] [Thread-8507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:28:34.197 [DEBUG] [Thread-8507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:28:34.197 [DEBUG] [Thread-8507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] client lang: <none>
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] server lang: <none>
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] kex follows: False
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] Compression: none
2025-11-26T00:28:34.198 [DEBUG] [Thread-8507] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:28:34.257 [DEBUG] [Thread-8507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:28:34.258 [DEBUG] [Thread-8507] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:28:34.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:28:34.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:28:34.260 [DEBUG] [Thread-8507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:28:34.313 [DEBUG] [Thread-8507] [transport.py] [_log()] userauth is OK
2025-11-26T00:28:34.313 [DEBUG] [Thread-8507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:28:34.314 [DEBUG] [Thread-8507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:28:34.314 [DEBUG] [Thread-8507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:28:34.314 [DEBUG] [Thread-8507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:28:34.333 [INFO] [Thread-8507] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:28:34.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:28:34.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:28:35.183 [DEBUG] [Thread-8507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:28:35.183 [DEBUG] [Thread-8507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:28:35.231 [DEBUG] [Thread-8507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:28:35.231 [DEBUG] [Thread-8507] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:28:35.239 [DEBUG] [Thread-8507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:28:35.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:28:35.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:28:35.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:28:35.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:28:35.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:28:35.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:28:35.271 [DEBUG] [Thread-8507] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:28:38.704 [DEBUG] [Thread-8509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:42.506 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:52.896 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:28:53.753 [DEBUG] [Thread-8510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:03.313 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:05.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:29:05.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:29:05.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:29:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 29), 29.89, 12.31, 0.0, 17.95, 19.89, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:29:05.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:29:00
2025-11-26T00:29:06.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:29:06.207 [DEBUG] [Thread-8511] [transport.py] [_log()] starting thread (client mode): 0x70da7c40
2025-11-26T00:29:06.207 [DEBUG] [Thread-8511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:29:06.235 [DEBUG] [Thread-8511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:29:06.236 [INFO] [Thread-8511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:29:06.238 [DEBUG] [Thread-8511] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] client lang: <none>
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] server lang: <none>
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] kex follows: False
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:29:06.239 [DEBUG] [Thread-8511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:29:06.240 [DEBUG] [Thread-8511] [transport.py] [_log()] Compression: none
2025-11-26T00:29:06.240 [DEBUG] [Thread-8511] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:29:06.257 [DEBUG] [Thread-8511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:29:06.258 [DEBUG] [Thread-8511] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:29:06.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:29:06.259 [DEBUG] [Thread-8511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:29:06.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:29:06.261 [DEBUG] [Thread-8511] [transport.py] [_log()] userauth is OK
2025-11-26T00:29:06.262 [DEBUG] [Thread-8511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:29:06.262 [DEBUG] [Thread-8511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:29:06.262 [DEBUG] [Thread-8511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:29:06.262 [DEBUG] [Thread-8511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:29:06.284 [INFO] [Thread-8511] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:29:06.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:29:06.923 [DEBUG] [Thread-8511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:29:06.923 [DEBUG] [Thread-8511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:29:06.924 [DEBUG] [Thread-8511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:29:06.965 [DEBUG] [Thread-8511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:29:06.965 [DEBUG] [Thread-8511] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:29:06.968 [DEBUG] [Thread-8511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:29:06.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:29:06.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:29:06.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:29:06.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:29:06.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:29:06.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:29:06.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:29:06.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:29:06.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:29:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.936555 -999.00  +20.10  10.31     17   -5.20 1 1 1 1 1     0    0 25.39 12.32 ZNESW 8.0 10.3 140.2 13.7 19.7 -26.4 19.7 -25.9 19.3 -24.4 19.6 -25.5
2025-11-26T00:29:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:29:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:29:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.936555
2025-11-26T00:29:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:29:06.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:29:06.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:29:06.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:29:06.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:29:06.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:29:00', tmtdew=29.89, humidity=12.31, cloud=0.0, wind=17.95, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:29:00', seeing=0.97, atlas_timestamp='2025-11-25T22:28:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:26:00')
2025-11-26T00:29:06.995 [DEBUG] [Thread-8511] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:29:07.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:29:07.092 [DEBUG] [Thread-8514] [transport.py] [_log()] starting thread (client mode): 0x70d56ce0
2025-11-26T00:29:07.092 [DEBUG] [Thread-8514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:29:07.110 [DEBUG] [Thread-8514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:29:07.110 [INFO] [Thread-8514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:29:07.119 [DEBUG] [Thread-8514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] client lang: <none>
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] server lang: <none>
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] kex follows: False
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:29:07.120 [DEBUG] [Thread-8514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:29:07.121 [DEBUG] [Thread-8514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:29:07.121 [DEBUG] [Thread-8514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:29:07.121 [DEBUG] [Thread-8514] [transport.py] [_log()] Compression: none
2025-11-26T00:29:07.121 [DEBUG] [Thread-8514] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:29:07.183 [DEBUG] [Thread-8514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:29:07.183 [DEBUG] [Thread-8514] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:29:07.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:29:07.184 [DEBUG] [Thread-8514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:29:07.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:29:07.244 [DEBUG] [Thread-8514] [transport.py] [_log()] userauth is OK
2025-11-26T00:29:07.244 [DEBUG] [Thread-8514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:29:07.245 [DEBUG] [Thread-8514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:29:07.245 [DEBUG] [Thread-8514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:29:07.245 [DEBUG] [Thread-8514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:29:07.267 [INFO] [Thread-8514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:29:07.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:29:07.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:29:08.147 [DEBUG] [Thread-8514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:29:08.147 [DEBUG] [Thread-8514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:29:08.196 [DEBUG] [Thread-8514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:29:08.196 [DEBUG] [Thread-8514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:29:08.205 [DEBUG] [Thread-8514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:29:08.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:29:08.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')
2025-11-26T00:29:08.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:29:08.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:29:08.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:29:08.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:29:08.247 [DEBUG] [Thread-8514] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:29:08.791 [DEBUG] [Thread-8516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:12.654 [DEBUG] [Thread-8517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:13.732 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:19.165 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:19.167 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:23.845 [DEBUG] [Thread-8518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:24.154 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:34.540 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:29:38.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:29:38.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:29:38.882 [DEBUG] [Thread-8519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:38.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 29, 32), 29.89, 12.31, 0.0, 18.95, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:29:38.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:29:32
2025-11-26T00:29:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:29:39.223 [DEBUG] [Thread-8520] [transport.py] [_log()] starting thread (client mode): 0x7374f3a0
2025-11-26T00:29:39.223 [DEBUG] [Thread-8520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:29:39.243 [DEBUG] [Thread-8520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:29:39.243 [INFO] [Thread-8520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] client lang: <none>
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] server lang: <none>
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] kex follows: False
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] Compression: none
2025-11-26T00:29:39.246 [DEBUG] [Thread-8520] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:29:39.262 [DEBUG] [Thread-8520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:29:39.263 [DEBUG] [Thread-8520] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:29:39.263 [DEBUG] [Thread-8520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:29:39.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:29:39.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:29:39.264 [DEBUG] [Thread-8520] [transport.py] [_log()] userauth is OK
2025-11-26T00:29:39.265 [DEBUG] [Thread-8520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:29:39.265 [DEBUG] [Thread-8520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:29:39.265 [DEBUG] [Thread-8520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:29:39.265 [DEBUG] [Thread-8520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:29:39.279 [INFO] [Thread-8520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:29:39.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:29:39.890 [DEBUG] [Thread-8520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:29:39.890 [DEBUG] [Thread-8520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:29:39.891 [DEBUG] [Thread-8520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:29:39.931 [DEBUG] [Thread-8520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:29:39.931 [DEBUG] [Thread-8520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:29:39.934 [DEBUG] [Thread-8520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:29:39.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:29:39.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:29:39.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:29:39.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:29:39.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:29:39.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:29:39.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:29:39.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:29:39.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:29:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.936903 -999.00  +20.10   8.97     17   -5.20 1 1 1 1 1     0    0 25.31 12.21 ZNESW 12.4 9.0 144.1 13.0 19.7 -26.5 19.6 -25.9 19.3 -24.6 19.6 -25.6
2025-11-26T00:29:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:29:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:29:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.936903
2025-11-26T00:29:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:29:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:29:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:29:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:29:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:29:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:29:32', tmtdew=29.89, humidity=12.31, cloud=0.0, wind=18.95, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:29:32', seeing=0.97, atlas_timestamp='2025-11-25T22:29:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:26:00')
2025-11-26T00:29:39.961 [DEBUG] [Thread-8520] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:29:40.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:29:40.056 [DEBUG] [Thread-8523] [transport.py] [_log()] starting thread (client mode): 0x7374dbd0
2025-11-26T00:29:40.056 [DEBUG] [Thread-8523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:29:40.070 [DEBUG] [Thread-8523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:29:40.071 [INFO] [Thread-8523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:29:40.078 [DEBUG] [Thread-8523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:29:40.078 [DEBUG] [Thread-8523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:29:40.078 [DEBUG] [Thread-8523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:29:40.078 [DEBUG] [Thread-8523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:29:40.079 [DEBUG] [Thread-8523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:29:40.079 [DEBUG] [Thread-8523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:29:40.079 [DEBUG] [Thread-8523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:29:40.079 [DEBUG] [Thread-8523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:29:40.079 [DEBUG] [Thread-8523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:29:40.079 [DEBUG] [Thread-8523] [transport.py] [_log()] client lang: <none>
2025-11-26T00:29:40.079 [DEBUG] [Thread-8523] [transport.py] [_log()] server lang: <none>
2025-11-26T00:29:40.079 [DEBUG] [Thread-8523] [transport.py] [_log()] kex follows: False
2025-11-26T00:29:40.079 [DEBUG] [Thread-8523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:29:40.080 [DEBUG] [Thread-8523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:29:40.080 [DEBUG] [Thread-8523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:29:40.080 [DEBUG] [Thread-8523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:29:40.080 [DEBUG] [Thread-8523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:29:40.080 [DEBUG] [Thread-8523] [transport.py] [_log()] Compression: none
2025-11-26T00:29:40.080 [DEBUG] [Thread-8523] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:29:40.141 [DEBUG] [Thread-8523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:29:40.142 [DEBUG] [Thread-8523] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:29:40.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:29:40.144 [DEBUG] [Thread-8523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:29:40.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:29:40.205 [DEBUG] [Thread-8523] [transport.py] [_log()] userauth is OK
2025-11-26T00:29:40.206 [DEBUG] [Thread-8523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:29:40.206 [DEBUG] [Thread-8523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:29:40.206 [DEBUG] [Thread-8523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:29:40.206 [DEBUG] [Thread-8523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:29:40.227 [INFO] [Thread-8523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:29:40.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:29:40.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:29:41.040 [DEBUG] [Thread-8523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:29:41.041 [DEBUG] [Thread-8523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:29:41.093 [DEBUG] [Thread-8523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:29:41.093 [DEBUG] [Thread-8523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:29:41.102 [DEBUG] [Thread-8523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:29:41.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:29:41.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:29:41.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:29:41.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:29:41.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:29:41.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:29:41.141 [DEBUG] [Thread-8523] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:29:44.957 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:53.914 [DEBUG] [Thread-8525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:29:55.381 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:05.781 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:08.953 [DEBUG] [Thread-8526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:11.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:30:11.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:30:11.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:30:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 30, 4), 30.03, 12.2, 0.0, 17.47, 19.99, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:30:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:30:04
2025-11-26T00:30:11.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:30:12.105 [DEBUG] [Thread-8527] [transport.py] [_log()] starting thread (client mode): 0x70dd2b30
2025-11-26T00:30:12.105 [DEBUG] [Thread-8527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:30:12.124 [DEBUG] [Thread-8527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:30:12.124 [INFO] [Thread-8527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] client lang: <none>
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] server lang: <none>
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] kex follows: False
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] Compression: none
2025-11-26T00:30:12.126 [DEBUG] [Thread-8527] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:30:12.139 [DEBUG] [Thread-8527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:30:12.140 [DEBUG] [Thread-8527] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:30:12.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:30:12.141 [DEBUG] [Thread-8527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:30:12.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:30:12.143 [DEBUG] [Thread-8527] [transport.py] [_log()] userauth is OK
2025-11-26T00:30:12.143 [DEBUG] [Thread-8527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:30:12.143 [DEBUG] [Thread-8527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:30:12.143 [DEBUG] [Thread-8527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:30:12.143 [DEBUG] [Thread-8527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:30:12.159 [INFO] [Thread-8527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:30:12.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:30:12.725 [DEBUG] [Thread-8529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:12.748 [DEBUG] [Thread-8527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:30:12.749 [DEBUG] [Thread-8527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:30:12.749 [DEBUG] [Thread-8527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:30:12.789 [DEBUG] [Thread-8527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:30:12.790 [DEBUG] [Thread-8527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:30:12.793 [DEBUG] [Thread-8527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:30:12.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:30:12.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:30:12.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:30:12.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:30:12.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:30:12.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:30:12.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:30:12.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:30:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:30:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.937597 -999.00  +20.00  10.45     17   -5.10 1 1 1 1 1     0    0 25.43 12.65 ZNESW 11.1 10.4 145.6 14.8 19.7 -26.5 19.6 -26.0 19.4 -24.7 19.6 -25.6
2025-11-26T00:30:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:30:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:30:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.937597
2025-11-26T00:30:12.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:30:12.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:30:12.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:30:12.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:30:12.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:30:12.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:30:04', tmtdew=30.03, humidity=12.2, cloud=0.0, wind=17.47, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:30:04', seeing=0.83, atlas_timestamp='2025-11-25T22:30:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:26:00')
2025-11-26T00:30:12.818 [DEBUG] [Thread-8527] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:30:12.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:30:12.914 [DEBUG] [Thread-8531] [transport.py] [_log()] starting thread (client mode): 0x70dd22f0
2025-11-26T00:30:12.914 [DEBUG] [Thread-8531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:30:12.928 [DEBUG] [Thread-8531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:30:12.928 [INFO] [Thread-8531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:30:12.935 [DEBUG] [Thread-8531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] client lang: <none>
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] server lang: <none>
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] kex follows: False
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:30:12.936 [DEBUG] [Thread-8531] [transport.py] [_log()] Compression: none
2025-11-26T00:30:12.937 [DEBUG] [Thread-8531] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:30:12.997 [DEBUG] [Thread-8531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:30:12.997 [DEBUG] [Thread-8531] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:30:12.998 [DEBUG] [Thread-8531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:30:12.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:30:12.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:30:13.052 [DEBUG] [Thread-8531] [transport.py] [_log()] userauth is OK
2025-11-26T00:30:13.053 [DEBUG] [Thread-8531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:30:13.053 [DEBUG] [Thread-8531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:30:13.053 [DEBUG] [Thread-8531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:30:13.053 [DEBUG] [Thread-8531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:30:13.077 [INFO] [Thread-8531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:30:13.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:30:13.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:30:13.871 [DEBUG] [Thread-8531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:30:13.871 [DEBUG] [Thread-8531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:30:13.919 [DEBUG] [Thread-8531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:30:13.919 [DEBUG] [Thread-8531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:30:13.928 [DEBUG] [Thread-8531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:30:13.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:30:13.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:30:13.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:30:13.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:30:13.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:30:13.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:30:13.965 [DEBUG] [Thread-8531] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:30:16.145 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:19.372 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:19.373 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:23.990 [DEBUG] [Thread-8533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:26.554 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:36.958 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:39.043 [DEBUG] [Thread-8534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:43.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:30:43.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:30: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
2025-11-26T00:30:44.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 30, 36), 30.08, 12.2, 0.0, 16.71, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:30:44.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:30:36
2025-11-26T00:30:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:30:44.928 [DEBUG] [Thread-8535] [transport.py] [_log()] starting thread (client mode): 0x7374c850
2025-11-26T00:30:44.928 [DEBUG] [Thread-8535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:30:44.948 [DEBUG] [Thread-8535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:30:44.948 [INFO] [Thread-8535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:30:44.951 [DEBUG] [Thread-8535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:30:44.951 [DEBUG] [Thread-8535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:30:44.951 [DEBUG] [Thread-8535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:30:44.951 [DEBUG] [Thread-8535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:30:44.951 [DEBUG] [Thread-8535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] client lang: <none>
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] server lang: <none>
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] kex follows: False
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] Compression: none
2025-11-26T00:30:44.952 [DEBUG] [Thread-8535] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:30:44.970 [DEBUG] [Thread-8535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:30:44.971 [DEBUG] [Thread-8535] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:30:44.971 [DEBUG] [Thread-8535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:30:44.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:30:44.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:30:44.973 [DEBUG] [Thread-8535] [transport.py] [_log()] userauth is OK
2025-11-26T00:30:44.973 [DEBUG] [Thread-8535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:30:44.973 [DEBUG] [Thread-8535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:30:44.974 [DEBUG] [Thread-8535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:30:44.974 [DEBUG] [Thread-8535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:30:44.989 [INFO] [Thread-8535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:30:44.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:30:45.548 [DEBUG] [Thread-8535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:30:45.549 [DEBUG] [Thread-8535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:30:45.549 [DEBUG] [Thread-8535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:30:45.596 [DEBUG] [Thread-8535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:30:45.597 [DEBUG] [Thread-8535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:30:45.601 [DEBUG] [Thread-8535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:30:45.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:30:45.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:30:45.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:30:45.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:30:45.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:30:45.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:30:45.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:30:45.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:30:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:30:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.937597 -999.00  +20.00  10.45     17   -5.10 1 1 1 1 1     0    0 25.43 12.65 ZNESW 11.1 10.4 145.6 14.8 19.7 -26.5 19.6 -26.0 19.4 -24.7 19.6 -25.6
2025-11-26T00:30:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:30:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:30:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.937597
2025-11-26T00:30:45.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:30:45.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:30:45.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:30:45.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:30:45.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:30:45.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:30:36', tmtdew=30.08, humidity=12.2, cloud=0.0, wind=16.71, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:30:36', seeing=1.11, atlas_timestamp='2025-11-25T22:30:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, 0.03125, 0.02325000000000088, 0.024499999999999744, 0.05550000000000033, 0.12325000000000053, 0.0030000000000001137, 0.008250000000000313, 0.01249999999999929, 0.02200000000000024, 0.0442499999999999, 0.01750000000000007, 0.10050000000000026, 0.0752499999999987, 0.026499999999998636, -0.009000000000000341, 0.021749999999999048, 0.02000000000000135, 0.014999999999998792, 0.004249999999998977, 0.09249999999999758, 0.1007499999999979, 0.04075000000000095, 0.007250000000000867, -0.002000000000000668, 0.018499999999999517, 0.011749999999999261, 0.07350000000000101, 0.1330000000000009, 0.10000000000000142, 0.10200000000000031, -0.019999999999999574, -0.010750000000001592], zp_timestamp='2025-11-25T22:26:00')
2025-11-26T00:30:45.630 [DEBUG] [Thread-8535] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:30:45.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:30:45.726 [DEBUG] [Thread-8538] [transport.py] [_log()] starting thread (client mode): 0x70dd15a0
2025-11-26T00:30:45.726 [DEBUG] [Thread-8538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:30:45.742 [DEBUG] [Thread-8538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:30:45.742 [INFO] [Thread-8538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:30:45.749 [DEBUG] [Thread-8538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:30:45.749 [DEBUG] [Thread-8538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:30:45.749 [DEBUG] [Thread-8538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:30:45.749 [DEBUG] [Thread-8538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] client lang: <none>
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] server lang: <none>
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] kex follows: False
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] Compression: none
2025-11-26T00:30:45.750 [DEBUG] [Thread-8538] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:30:45.805 [DEBUG] [Thread-8538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:30:45.805 [DEBUG] [Thread-8538] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:30:45.806 [DEBUG] [Thread-8538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:30:45.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:30:45.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:30:45.862 [DEBUG] [Thread-8538] [transport.py] [_log()] userauth is OK
2025-11-26T00:30:45.862 [DEBUG] [Thread-8538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:30:45.862 [DEBUG] [Thread-8538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:30:45.862 [DEBUG] [Thread-8538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:30:45.862 [DEBUG] [Thread-8538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:30:45.875 [INFO] [Thread-8538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:30:45.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:30:45.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:30:46.727 [DEBUG] [Thread-8538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:30:46.727 [DEBUG] [Thread-8538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:30:46.775 [DEBUG] [Thread-8538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:30:46.775 [DEBUG] [Thread-8538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:30:46.784 [DEBUG] [Thread-8538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:30:46.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:30:46.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:30:46.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:30:46.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:30:46.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:30:46.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:30:46.821 [DEBUG] [Thread-8538] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:30:47.386 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:54.081 [DEBUG] [Thread-8540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:30:57.791 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:08.191 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:09.123 [DEBUG] [Thread-8541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:12.816 [DEBUG] [Thread-8542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:16.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:31:16.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:31:16.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:31:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 31, 8), 30.08, 12.2, 0.0, 15.49, 20.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:31:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:31:08
2025-11-26T00:31:17.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:31:17.761 [DEBUG] [Thread-8543] [transport.py] [_log()] starting thread (client mode): 0x70dd2c20
2025-11-26T00:31:17.761 [DEBUG] [Thread-8543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:31:17.782 [DEBUG] [Thread-8543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:31:17.782 [INFO] [Thread-8543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] client lang: <none>
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] server lang: <none>
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] kex follows: False
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:31:17.785 [DEBUG] [Thread-8543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:31:17.786 [DEBUG] [Thread-8543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:31:17.786 [DEBUG] [Thread-8543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:31:17.786 [DEBUG] [Thread-8543] [transport.py] [_log()] Compression: none
2025-11-26T00:31:17.786 [DEBUG] [Thread-8543] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:31:17.805 [DEBUG] [Thread-8543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:31:17.806 [DEBUG] [Thread-8543] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:31:17.806 [DEBUG] [Thread-8543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:31:17.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:31:17.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:31:17.808 [DEBUG] [Thread-8543] [transport.py] [_log()] userauth is OK
2025-11-26T00:31:17.808 [DEBUG] [Thread-8543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:31:17.808 [DEBUG] [Thread-8543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:31:17.809 [DEBUG] [Thread-8543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:31:17.809 [DEBUG] [Thread-8543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:31:17.831 [INFO] [Thread-8543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:31:17.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:31:18.594 [DEBUG] [Thread-8543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:31:18.594 [DEBUG] [Thread-8543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:31:18.594 [DEBUG] [Thread-8543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:31:18.605 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:18.636 [DEBUG] [Thread-8543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:31:18.636 [DEBUG] [Thread-8543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:31:18.639 [DEBUG] [Thread-8543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:31:18.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:31:18.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:31:18.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:31:18.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:31:18.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:31:18.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:31:18.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:31:18.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:31:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:31:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.937944 -999.00  +20.00   9.45     17   -5.10 1 1 1 1 1     0    0 25.53 13.96 ZNESW 8.6 9.4 143.6 13.4 19.7 -26.6 19.6 -26.0 19.4 -24.6 19.5 -25.5
2025-11-26T00:31:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:31:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:31:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.937944
2025-11-26T00:31:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:31:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:31:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:31:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:31:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:31:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:31:08', tmtdew=30.08, humidity=12.2, cloud=0.0, wind=15.49, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:31:08', seeing=0.98, atlas_timestamp='2025-11-25T22:30:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:30:00')
2025-11-26T00:31:18.665 [DEBUG] [Thread-8543] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:31:18.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:31:18.760 [DEBUG] [Thread-8546] [transport.py] [_log()] starting thread (client mode): 0x7374ca00
2025-11-26T00:31:18.760 [DEBUG] [Thread-8546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:31:18.774 [DEBUG] [Thread-8546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:31:18.774 [INFO] [Thread-8546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:31:18.782 [DEBUG] [Thread-8546] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:31:18.782 [DEBUG] [Thread-8546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:31:18.782 [DEBUG] [Thread-8546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:31:18.782 [DEBUG] [Thread-8546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:31:18.782 [DEBUG] [Thread-8546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:31:18.782 [DEBUG] [Thread-8546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:31:18.782 [DEBUG] [Thread-8546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] client lang: <none>
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] server lang: <none>
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] kex follows: False
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] Compression: none
2025-11-26T00:31:18.783 [DEBUG] [Thread-8546] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:31:18.840 [DEBUG] [Thread-8546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:31:18.841 [DEBUG] [Thread-8546] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:31:18.842 [DEBUG] [Thread-8546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:31:18.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:31:18.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:31:18.896 [DEBUG] [Thread-8546] [transport.py] [_log()] userauth is OK
2025-11-26T00:31:18.897 [DEBUG] [Thread-8546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:31:18.897 [DEBUG] [Thread-8546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:31:18.897 [DEBUG] [Thread-8546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:31:18.897 [DEBUG] [Thread-8546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:31:18.916 [INFO] [Thread-8546] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:31:18.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:31:18.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:31:19.576 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:19.578 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:19.766 [DEBUG] [Thread-8546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:31:19.766 [DEBUG] [Thread-8546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:31:19.814 [DEBUG] [Thread-8546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:31:19.814 [DEBUG] [Thread-8546] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:31:19.826 [DEBUG] [Thread-8546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:31:19.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:31:19.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:31:19.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:31:19.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:31:19.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:31:19.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:31:19.865 [DEBUG] [Thread-8546] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:31:24.154 [DEBUG] [Thread-8548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:29.018 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:39.208 [DEBUG] [Thread-8549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:39.395 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:49.787 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:31:49.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:31:49.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:31:49.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:31:50.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 31, 40), 30.0, 12.23, 0.0, 14.95, 20.01, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:31:50.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:31:40
2025-11-26T00:31:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:31:50.815 [DEBUG] [Thread-8550] [transport.py] [_log()] starting thread (client mode): 0x70dd3520
2025-11-26T00:31:50.816 [DEBUG] [Thread-8550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:31:50.836 [DEBUG] [Thread-8550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:31:50.836 [INFO] [Thread-8550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:31:50.839 [DEBUG] [Thread-8550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:31:50.839 [DEBUG] [Thread-8550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:31:50.839 [DEBUG] [Thread-8550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:31:50.839 [DEBUG] [Thread-8550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:31:50.839 [DEBUG] [Thread-8550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:31:50.839 [DEBUG] [Thread-8550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] client lang: <none>
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] server lang: <none>
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] kex follows: False
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] Compression: none
2025-11-26T00:31:50.840 [DEBUG] [Thread-8550] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:31:50.858 [DEBUG] [Thread-8550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:31:50.858 [DEBUG] [Thread-8550] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:31:50.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:31:50.860 [DEBUG] [Thread-8550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:31:50.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:31:50.862 [DEBUG] [Thread-8550] [transport.py] [_log()] userauth is OK
2025-11-26T00:31:50.862 [DEBUG] [Thread-8550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:31:50.862 [DEBUG] [Thread-8550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:31:50.862 [DEBUG] [Thread-8550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:31:50.862 [DEBUG] [Thread-8550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:31:50.886 [INFO] [Thread-8550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:31:50.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:31:51.528 [DEBUG] [Thread-8550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:31:51.528 [DEBUG] [Thread-8550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:31:51.529 [DEBUG] [Thread-8550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:31:51.569 [DEBUG] [Thread-8550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:31:51.569 [DEBUG] [Thread-8550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:31:51.572 [DEBUG] [Thread-8550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:31:51.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:31:51.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:31:51.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:31:51.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:31:51.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:31:51.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:31:51.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:31:51.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:31:51.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:31:51.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.938291 -999.00  +20.00  10.76     17   -5.20 1 1 1 1 1     0    0 25.17 14.78 ZNESW 11.4 10.8 143.4 13.3 19.7 -26.5 19.6 -25.9 19.3 -24.5 19.6 -25.5
2025-11-26T00:31:51.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:31:51.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:31:51.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.938291
2025-11-26T00:31:51.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:31:51.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:31:51.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:31:51.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:31:51.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:31:51.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:31:40', tmtdew=30.0, humidity=12.23, cloud=0.0, wind=14.95, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:31:40', seeing=1.22, atlas_timestamp='2025-11-25T22:31:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:30:00')
2025-11-26T00:31:51.598 [DEBUG] [Thread-8550] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:31:51.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:31:51.693 [DEBUG] [Thread-8553] [transport.py] [_log()] starting thread (client mode): 0x70dd2620
2025-11-26T00:31:51.694 [DEBUG] [Thread-8553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:31:51.708 [DEBUG] [Thread-8553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:31:51.708 [INFO] [Thread-8553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:31:51.715 [DEBUG] [Thread-8553] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] client lang: <none>
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] server lang: <none>
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] kex follows: False
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] Compression: none
2025-11-26T00:31:51.716 [DEBUG] [Thread-8553] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:31:51.774 [DEBUG] [Thread-8553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:31:51.775 [DEBUG] [Thread-8553] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:31:51.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:31:51.775 [DEBUG] [Thread-8553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:31:51.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:31:51.835 [DEBUG] [Thread-8553] [transport.py] [_log()] userauth is OK
2025-11-26T00:31:51.835 [DEBUG] [Thread-8553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:31:51.835 [DEBUG] [Thread-8553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:31:51.835 [DEBUG] [Thread-8553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:31:51.835 [DEBUG] [Thread-8553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:31:51.854 [INFO] [Thread-8553] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:31:51.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:31:51.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:31:52.717 [DEBUG] [Thread-8553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:31:52.717 [DEBUG] [Thread-8553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:31:52.765 [DEBUG] [Thread-8553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:31:52.765 [DEBUG] [Thread-8553] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:31:52.774 [DEBUG] [Thread-8553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:31:52.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:31:52.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:31:52.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:31:52.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:31:52.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:31:52.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:31:52.811 [DEBUG] [Thread-8553] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:31:54.242 [DEBUG] [Thread-8555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:00.168 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:09.297 [DEBUG] [Thread-8556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:10.576 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:12.890 [DEBUG] [Thread-8557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:19.780 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:19.781 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:20.937 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:22.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:32:22.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:32:22.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:32:23.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 32, 12), 29.94, 12.26, 0.0, 16.32, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:32:23.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:32:12
2025-11-26T00:32:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:32:23.827 [DEBUG] [Thread-8558] [transport.py] [_log()] starting thread (client mode): 0x70dd38e0
2025-11-26T00:32:23.827 [DEBUG] [Thread-8558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:32:23.848 [DEBUG] [Thread-8558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:32:23.848 [INFO] [Thread-8558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] client lang: <none>
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] server lang: <none>
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] kex follows: False
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:32:23.851 [DEBUG] [Thread-8558] [transport.py] [_log()] Compression: none
2025-11-26T00:32:23.852 [DEBUG] [Thread-8558] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:32:23.868 [DEBUG] [Thread-8558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:32:23.868 [DEBUG] [Thread-8558] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:32:23.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:32:23.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:32:23.868 [DEBUG] [Thread-8558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:32:23.869 [DEBUG] [Thread-8558] [transport.py] [_log()] userauth is OK
2025-11-26T00:32:23.869 [DEBUG] [Thread-8558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:32:23.869 [DEBUG] [Thread-8558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:32:23.869 [DEBUG] [Thread-8558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:32:23.869 [DEBUG] [Thread-8558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:32:23.888 [INFO] [Thread-8558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:32:23.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:32:24.327 [DEBUG] [Thread-8560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:24.685 [DEBUG] [Thread-8558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:32:24.685 [DEBUG] [Thread-8558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:32:24.685 [DEBUG] [Thread-8558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:32:24.726 [DEBUG] [Thread-8558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:32:24.726 [DEBUG] [Thread-8558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:32:24.729 [DEBUG] [Thread-8558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:32:24.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:32:24.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:32:24.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:32:24.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:32:24.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:32:24.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:32:24.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:32:24.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:32:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:32:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.938639 -999.00  +19.90   7.92     17   -5.10 1 1 1 1 1     0    0 25.75 14.51 ZNESW 9.0 7.9 141.2 13.0 19.7 -26.5 19.6 -26.1 19.3 -24.5 19.5 -25.8
2025-11-26T00:32:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:32:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:32:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.938639
2025-11-26T00:32:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:32:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:32:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:32:24.748 [DEBUG] [Thread-8558] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:32:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:32:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:32:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:32:12', tmtdew=29.94, humidity=12.26, cloud=0.0, wind=16.32, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:32:12', seeing=1.22, atlas_timestamp='2025-11-25T22:31:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:30:00')
2025-11-26T00:32:24.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:32:24.846 [DEBUG] [Thread-8562] [transport.py] [_log()] starting thread (client mode): 0x70d77340
2025-11-26T00:32:24.846 [DEBUG] [Thread-8562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:32:24.861 [DEBUG] [Thread-8562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:32:24.861 [INFO] [Thread-8562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:32:24.869 [DEBUG] [Thread-8562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:32:24.869 [DEBUG] [Thread-8562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:32:24.869 [DEBUG] [Thread-8562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:32:24.869 [DEBUG] [Thread-8562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:32:24.869 [DEBUG] [Thread-8562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:32:24.869 [DEBUG] [Thread-8562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] client lang: <none>
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] server lang: <none>
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] kex follows: False
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] Compression: none
2025-11-26T00:32:24.870 [DEBUG] [Thread-8562] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:32:24.926 [DEBUG] [Thread-8562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:32:24.927 [DEBUG] [Thread-8562] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:32:24.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:32:24.927 [DEBUG] [Thread-8562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:32:24.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:32:24.983 [DEBUG] [Thread-8562] [transport.py] [_log()] userauth is OK
2025-11-26T00:32:24.983 [DEBUG] [Thread-8562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:32:24.983 [DEBUG] [Thread-8562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:32:24.984 [DEBUG] [Thread-8562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:32:24.984 [DEBUG] [Thread-8562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:32:25.002 [INFO] [Thread-8562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:32:25.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:32:25.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:32:25.862 [DEBUG] [Thread-8562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:32:25.862 [DEBUG] [Thread-8562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:32:25.909 [DEBUG] [Thread-8562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:32:25.909 [DEBUG] [Thread-8562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:32:25.918 [DEBUG] [Thread-8562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:32:25.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:32:25.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:32:25.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:32:25.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:32:25.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:32:25.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:32:25.952 [DEBUG] [Thread-8562] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:32:31.378 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:39.360 [DEBUG] [Thread-8564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:41.728 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:52.131 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:54.408 [DEBUG] [Thread-8565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:32:55.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:32:55.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:32:55.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:32:56.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 32, 44), 29.82, 12.33, 0.0, 15.86, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:32:56.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:32:44
2025-11-26T00:32:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:32:56.977 [DEBUG] [Thread-8566] [transport.py] [_log()] starting thread (client mode): 0x70d56e60
2025-11-26T00:32:56.977 [DEBUG] [Thread-8566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:32:56.996 [DEBUG] [Thread-8566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:32:56.996 [INFO] [Thread-8566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] client lang: <none>
2025-11-26T00:32:56.999 [DEBUG] [Thread-8566] [transport.py] [_log()] server lang: <none>
2025-11-26T00:32:57.000 [DEBUG] [Thread-8566] [transport.py] [_log()] kex follows: False
2025-11-26T00:32:57.000 [DEBUG] [Thread-8566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:32:57.000 [DEBUG] [Thread-8566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:32:57.000 [DEBUG] [Thread-8566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:32:57.000 [DEBUG] [Thread-8566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:32:57.000 [DEBUG] [Thread-8566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:32:57.000 [DEBUG] [Thread-8566] [transport.py] [_log()] Compression: none
2025-11-26T00:32:57.000 [DEBUG] [Thread-8566] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:32:57.017 [DEBUG] [Thread-8566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:32:57.017 [DEBUG] [Thread-8566] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:32:57.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:32:57.018 [DEBUG] [Thread-8566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:32:57.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:32:57.018 [DEBUG] [Thread-8566] [transport.py] [_log()] userauth is OK
2025-11-26T00:32:57.019 [DEBUG] [Thread-8566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:32:57.019 [DEBUG] [Thread-8566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:32:57.019 [DEBUG] [Thread-8566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:32:57.019 [DEBUG] [Thread-8566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:32:57.049 [INFO] [Thread-8566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:32:57.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:32:57.710 [DEBUG] [Thread-8566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:32:57.710 [DEBUG] [Thread-8566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:32:57.710 [DEBUG] [Thread-8566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:32:57.751 [DEBUG] [Thread-8566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:32:57.751 [DEBUG] [Thread-8566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:32:57.753 [DEBUG] [Thread-8566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:32:57.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:32:57.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:32:57.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:32:57.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:32:57.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:32:57.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:32:57.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.938986 -999.00  +19.90  13.11     17   -5.20 1 1 1 1 1     0    0 25.21 12.86 ZNESW 10.4 13.1 139.4 15.0 19.6 -26.5 19.6 -25.9 19.3 -24.6 19.5 -25.6
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.938986
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:32:57.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:32:44', tmtdew=29.82, humidity=12.33, cloud=0.0, wind=15.86, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:32:44', seeing=1.22, atlas_timestamp='2025-11-25T22:32:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:30:00')
2025-11-26T00:32:57.773 [DEBUG] [Thread-8566] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:32:57.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:32:57.861 [DEBUG] [Thread-8569] [transport.py] [_log()] starting thread (client mode): 0x70d56dd0
2025-11-26T00:32:57.862 [DEBUG] [Thread-8569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:32:57.879 [DEBUG] [Thread-8569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:32:57.879 [INFO] [Thread-8569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] client lang: <none>
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] server lang: <none>
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] kex follows: False
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] Compression: none
2025-11-26T00:32:57.887 [DEBUG] [Thread-8569] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:32:57.945 [DEBUG] [Thread-8569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:32:57.945 [DEBUG] [Thread-8569] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:32:57.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:32:57.946 [DEBUG] [Thread-8569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:32:57.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:32:58.002 [DEBUG] [Thread-8569] [transport.py] [_log()] userauth is OK
2025-11-26T00:32:58.002 [DEBUG] [Thread-8569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:32:58.002 [DEBUG] [Thread-8569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:32:58.002 [DEBUG] [Thread-8569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:32:58.002 [DEBUG] [Thread-8569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:32:58.020 [INFO] [Thread-8569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:32:58.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:32:58.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:32:58.843 [DEBUG] [Thread-8569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:32:58.843 [DEBUG] [Thread-8569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:32:58.891 [DEBUG] [Thread-8569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:32:58.891 [DEBUG] [Thread-8569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:32:58.899 [DEBUG] [Thread-8569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:32:58.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:32:58.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:32: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') -> 00000000
2025-11-26T00:32:58.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:32:58.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:32:58.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:32:58.931 [DEBUG] [Thread-8569] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:33:02.525 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:09.445 [DEBUG] [Thread-8571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:12.929 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:12.969 [DEBUG] [Thread-8572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:19.982 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:19.983 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:23.358 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:24.496 [DEBUG] [Thread-8573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:33:28.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:33:28.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:33:29.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 33, 16), 29.82, 12.31, 0.0, 16.06, 19.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:33:29.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:33:16
2025-11-26T00:33:29.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:33:29.899 [DEBUG] [Thread-8574] [transport.py] [_log()] starting thread (client mode): 0x70dd3be0
2025-11-26T00:33:29.899 [DEBUG] [Thread-8574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:33:29.919 [DEBUG] [Thread-8574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:33:29.919 [INFO] [Thread-8574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] client lang: <none>
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] server lang: <none>
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] kex follows: False
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] Compression: none
2025-11-26T00:33:29.921 [DEBUG] [Thread-8574] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:33:29.934 [DEBUG] [Thread-8574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:33:29.935 [DEBUG] [Thread-8574] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:33:29.936 [DEBUG] [Thread-8574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:33:29.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:33:29.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:33:29.938 [DEBUG] [Thread-8574] [transport.py] [_log()] userauth is OK
2025-11-26T00:33:29.938 [DEBUG] [Thread-8574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:33:29.938 [DEBUG] [Thread-8574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:33:29.938 [DEBUG] [Thread-8574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:33:29.938 [DEBUG] [Thread-8574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:33:29.964 [INFO] [Thread-8574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:33:29.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:33:30.755 [DEBUG] [Thread-8574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:33:30.755 [DEBUG] [Thread-8574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:33:30.755 [DEBUG] [Thread-8574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:33:30.796 [DEBUG] [Thread-8574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:33:30.796 [DEBUG] [Thread-8574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:33:30.800 [DEBUG] [Thread-8574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:33:30.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:33:30.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:33:30.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:33:30.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:33:30.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:33:30.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:33:30.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:33:30.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:33:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:33:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.939333 -999.00  +19.90  13.26     17   -5.20 1 1 1 1 1     0    0 25.90 11.38 ZNESW 14.0 13.3 139.0 15.4 19.7 -26.5 19.6 -25.8 19.3 -24.6 19.5 -25.4
2025-11-26T00:33:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:33:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:33:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.939333
2025-11-26T00:33:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:33:30.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:33:30.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:33:30.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:33:30.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:33:30.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:33:16', tmtdew=29.82, humidity=12.31, cloud=0.0, wind=16.06, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:33:16', seeing=0.86, atlas_timestamp='2025-11-25T22:32:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:30:00')
2025-11-26T00:33:30.826 [DEBUG] [Thread-8574] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:33:30.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:33:30.921 [DEBUG] [Thread-8577] [transport.py] [_log()] starting thread (client mode): 0x70dd3cd0
2025-11-26T00:33:30.921 [DEBUG] [Thread-8577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:33:30.936 [DEBUG] [Thread-8577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:33:30.936 [INFO] [Thread-8577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:33:30.944 [DEBUG] [Thread-8577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:33:30.944 [DEBUG] [Thread-8577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:33:30.944 [DEBUG] [Thread-8577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:33:30.944 [DEBUG] [Thread-8577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:33:30.945 [DEBUG] [Thread-8577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:33:30.945 [DEBUG] [Thread-8577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:33:30.945 [DEBUG] [Thread-8577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:33:30.945 [DEBUG] [Thread-8577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:33:30.945 [DEBUG] [Thread-8577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:33:30.945 [DEBUG] [Thread-8577] [transport.py] [_log()] client lang: <none>
2025-11-26T00:33:30.945 [DEBUG] [Thread-8577] [transport.py] [_log()] server lang: <none>
2025-11-26T00:33:30.945 [DEBUG] [Thread-8577] [transport.py] [_log()] kex follows: False
2025-11-26T00:33:30.945 [DEBUG] [Thread-8577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:33:30.946 [DEBUG] [Thread-8577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:33:30.946 [DEBUG] [Thread-8577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:33:30.946 [DEBUG] [Thread-8577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:33:30.946 [DEBUG] [Thread-8577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:33:30.946 [DEBUG] [Thread-8577] [transport.py] [_log()] Compression: none
2025-11-26T00:33:30.946 [DEBUG] [Thread-8577] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:33:31.003 [DEBUG] [Thread-8577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:33:31.004 [DEBUG] [Thread-8577] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:33:31.004 [DEBUG] [Thread-8577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:33:31.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:33:31.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:33:31.059 [DEBUG] [Thread-8577] [transport.py] [_log()] userauth is OK
2025-11-26T00:33:31.059 [DEBUG] [Thread-8577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:33:31.059 [DEBUG] [Thread-8577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:33:31.059 [DEBUG] [Thread-8577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:33:31.059 [DEBUG] [Thread-8577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:33:31.077 [INFO] [Thread-8577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:33:31.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:33:31.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:33:31.923 [DEBUG] [Thread-8577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:33:31.923 [DEBUG] [Thread-8577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:33:31.972 [DEBUG] [Thread-8577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:33:31.972 [DEBUG] [Thread-8577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:33:31.981 [DEBUG] [Thread-8577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:33:31.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:33:31.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:33:31.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:33:32.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:33:32.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:33:32.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:33:32.018 [DEBUG] [Thread-8577] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:33:33.758 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:39.527 [DEBUG] [Thread-8579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:44.196 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:54.568 [DEBUG] [Thread-8580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:33:54.629 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:02.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:34:02.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:34:02.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:34:02.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 33, 48), 29.91, 12.33, 0.0, 15.95, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:34:02.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:33:48
2025-11-26T00:34:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:34:02.982 [DEBUG] [Thread-8581] [transport.py] [_log()] starting thread (client mode): 0x70d54d90
2025-11-26T00:34:02.982 [DEBUG] [Thread-8581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:34:03.002 [DEBUG] [Thread-8581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:34:03.002 [INFO] [Thread-8581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] client lang: <none>
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] server lang: <none>
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] kex follows: False
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:34:03.006 [DEBUG] [Thread-8581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:34:03.007 [DEBUG] [Thread-8581] [transport.py] [_log()] Compression: none
2025-11-26T00:34:03.007 [DEBUG] [Thread-8581] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:34:03.022 [DEBUG] [Thread-8581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:34:03.023 [DEBUG] [Thread-8581] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:34:03.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:34:03.024 [DEBUG] [Thread-8581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:34:03.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:34:03.026 [DEBUG] [Thread-8581] [transport.py] [_log()] userauth is OK
2025-11-26T00:34:03.026 [DEBUG] [Thread-8581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:34:03.027 [DEBUG] [Thread-8581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:34:03.027 [DEBUG] [Thread-8581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:34:03.027 [DEBUG] [Thread-8581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:34:03.046 [INFO] [Thread-8581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:34:03.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:34:03.685 [DEBUG] [Thread-8581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:34:03.685 [DEBUG] [Thread-8581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:34:03.686 [DEBUG] [Thread-8581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:34:03.727 [DEBUG] [Thread-8581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:34:03.727 [DEBUG] [Thread-8581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:34:03.730 [DEBUG] [Thread-8581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:34:03.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:34:03.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:34:03.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:34:03.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:34:03.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:34:03.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:34:03.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:34:03.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:34:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:34:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.940028 -999.00  +20.00  10.47     17   -5.20 1 1 1 1 1     0    0 25.26 9.78 ZNESW 11.7 10.5 130.8 14.5 19.6 -26.5 19.6 -25.9 19.3 -24.5 19.5 -25.8
2025-11-26T00:34:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:34:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:34:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.940028
2025-11-26T00:34:03.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:34:03.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:34:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:34:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:34:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:34:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:33:48', tmtdew=29.91, humidity=12.33, cloud=0.0, wind=15.95, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:33:48', seeing=1.0, atlas_timestamp='2025-11-25T22:33:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:30:00')
2025-11-26T00:34:03.756 [DEBUG] [Thread-8581] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:34:03.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:34:03.851 [DEBUG] [Thread-8584] [transport.py] [_log()] starting thread (client mode): 0x70d75a50
2025-11-26T00:34:03.852 [DEBUG] [Thread-8584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:34:03.866 [DEBUG] [Thread-8584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:34:03.866 [INFO] [Thread-8584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:34:03.874 [DEBUG] [Thread-8584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:34:03.874 [DEBUG] [Thread-8584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:34:03.874 [DEBUG] [Thread-8584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:34:03.875 [DEBUG] [Thread-8584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:34:03.875 [DEBUG] [Thread-8584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:34:03.875 [DEBUG] [Thread-8584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:34:03.875 [DEBUG] [Thread-8584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:34:03.875 [DEBUG] [Thread-8584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:34:03.875 [DEBUG] [Thread-8584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:34:03.875 [DEBUG] [Thread-8584] [transport.py] [_log()] client lang: <none>
2025-11-26T00:34:03.875 [DEBUG] [Thread-8584] [transport.py] [_log()] server lang: <none>
2025-11-26T00:34:03.875 [DEBUG] [Thread-8584] [transport.py] [_log()] kex follows: False
2025-11-26T00:34:03.876 [DEBUG] [Thread-8584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:34:03.876 [DEBUG] [Thread-8584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:34:03.876 [DEBUG] [Thread-8584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:34:03.876 [DEBUG] [Thread-8584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:34:03.876 [DEBUG] [Thread-8584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:34:03.876 [DEBUG] [Thread-8584] [transport.py] [_log()] Compression: none
2025-11-26T00:34:03.876 [DEBUG] [Thread-8584] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:34:03.933 [DEBUG] [Thread-8584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:34:03.934 [DEBUG] [Thread-8584] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:34:03.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:34:03.935 [DEBUG] [Thread-8584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:34:03.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:34:03.992 [DEBUG] [Thread-8584] [transport.py] [_log()] userauth is OK
2025-11-26T00:34:03.992 [DEBUG] [Thread-8584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:34:03.993 [DEBUG] [Thread-8584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:34:03.993 [DEBUG] [Thread-8584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:34:03.993 [DEBUG] [Thread-8584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:34:04.012 [INFO] [Thread-8584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:34:04.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:34:04.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:34:04.882 [DEBUG] [Thread-8584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:34:04.882 [DEBUG] [Thread-8584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:34:04.931 [DEBUG] [Thread-8584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:34:04.931 [DEBUG] [Thread-8584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:34:04.940 [DEBUG] [Thread-8584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:34:04.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:34:04.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:34:04.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:34:04.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:34:04.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:34:04.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:34:04.976 [DEBUG] [Thread-8584] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:34:05.194 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:09.607 [DEBUG] [Thread-8586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:13.028 [DEBUG] [Thread-8587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:15.658 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:20.188 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:20.189 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:24.663 [DEBUG] [Thread-8588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:26.102 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:34.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:34:34.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:34:35.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:34:35.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 34, 20), 29.9, 12.33, 0.0, 14.86, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:34:35.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:34:20
2025-11-26T00:34:35.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:34:35.964 [DEBUG] [Thread-8589] [transport.py] [_log()] starting thread (client mode): 0x70d54be0
2025-11-26T00:34:35.964 [DEBUG] [Thread-8589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:34:35.974 [DEBUG] [Thread-8589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:34:35.974 [INFO] [Thread-8589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] client lang: <none>
2025-11-26T00:34:35.976 [DEBUG] [Thread-8589] [transport.py] [_log()] server lang: <none>
2025-11-26T00:34:35.977 [DEBUG] [Thread-8589] [transport.py] [_log()] kex follows: False
2025-11-26T00:34:35.977 [DEBUG] [Thread-8589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:34:35.977 [DEBUG] [Thread-8589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:34:35.977 [DEBUG] [Thread-8589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:34:35.977 [DEBUG] [Thread-8589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:34:35.977 [DEBUG] [Thread-8589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:34:35.977 [DEBUG] [Thread-8589] [transport.py] [_log()] Compression: none
2025-11-26T00:34:35.977 [DEBUG] [Thread-8589] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:34:35.986 [DEBUG] [Thread-8589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:34:35.986 [DEBUG] [Thread-8589] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:34:35.987 [DEBUG] [Thread-8589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:34:35.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:34:35.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:34:35.988 [DEBUG] [Thread-8589] [transport.py] [_log()] userauth is OK
2025-11-26T00:34:35.988 [DEBUG] [Thread-8589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:34:35.988 [DEBUG] [Thread-8589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:34:35.988 [DEBUG] [Thread-8589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:34:35.988 [DEBUG] [Thread-8589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:34:36.000 [INFO] [Thread-8589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:34:36.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:34:36.499 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:36.809 [DEBUG] [Thread-8589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:34:36.809 [DEBUG] [Thread-8589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:34:36.809 [DEBUG] [Thread-8589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:34:36.851 [DEBUG] [Thread-8589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:34:36.851 [DEBUG] [Thread-8589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:34:36.853 [DEBUG] [Thread-8589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:34:36.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:34:36.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:34:36.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:34:36.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:34:36.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:34:36.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:34:36.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:34:36.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:34:36.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:34:36.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.940375 -999.00  +20.00  11.98     17   -5.30 1 1 1 1 1     0    0 25.73 10.69 ZNESW 13.9 12.0 142.0 16.7 19.6 -26.6 19.6 -26.0 19.3 -24.8 19.5 -25.5
2025-11-26T00:34:36.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:34:36.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:34:36.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.940375
2025-11-26T00:34:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:34:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:34:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:34:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:34:36.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:34:36.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:34:20', tmtdew=29.9, humidity=12.33, cloud=0.0, wind=14.86, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:34:20', seeing=1.1, atlas_timestamp='2025-11-25T22:34:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:33:00')
2025-11-26T00:34:36.874 [DEBUG] [Thread-8589] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:34:36.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:34:36.968 [DEBUG] [Thread-8592] [transport.py] [_log()] starting thread (client mode): 0x70d55810
2025-11-26T00:34:36.968 [DEBUG] [Thread-8592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:34:36.984 [DEBUG] [Thread-8592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:34:36.984 [INFO] [Thread-8592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] client lang: <none>
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] server lang: <none>
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] kex follows: False
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] Compression: none
2025-11-26T00:34:36.992 [DEBUG] [Thread-8592] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:34:37.051 [DEBUG] [Thread-8592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:34:37.051 [DEBUG] [Thread-8592] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:34:37.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:34:37.052 [DEBUG] [Thread-8592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:34:37.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:34:37.109 [DEBUG] [Thread-8592] [transport.py] [_log()] userauth is OK
2025-11-26T00:34:37.109 [DEBUG] [Thread-8592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:34:37.109 [DEBUG] [Thread-8592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:34:37.110 [DEBUG] [Thread-8592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:34:37.110 [DEBUG] [Thread-8592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:34:37.133 [INFO] [Thread-8592] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:34:37.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:34:37.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:34:38.033 [DEBUG] [Thread-8592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:34:38.033 [DEBUG] [Thread-8592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:34:38.085 [DEBUG] [Thread-8592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:34:38.085 [DEBUG] [Thread-8592] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:34:38.096 [DEBUG] [Thread-8592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:34:38.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:34:38.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:34:38.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:34:38.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:34:38.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:34:38.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:34:38.146 [DEBUG] [Thread-8592] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:34:39.698 [DEBUG] [Thread-8594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:46.880 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:54.747 [DEBUG] [Thread-8595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:34:57.296 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:07.680 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:08.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:35:08.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:35:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:35:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 34, 52), 29.8, 12.4, 0.0, 14.26, 19.81, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:35:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:34:52
2025-11-26T00:35:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:35:09.111 [DEBUG] [Thread-8596] [transport.py] [_log()] starting thread (client mode): 0x70d7f940
2025-11-26T00:35:09.112 [DEBUG] [Thread-8596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:35:09.132 [DEBUG] [Thread-8596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:35:09.132 [INFO] [Thread-8596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] client lang: <none>
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] server lang: <none>
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] kex follows: False
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:35:09.135 [DEBUG] [Thread-8596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:35:09.136 [DEBUG] [Thread-8596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:35:09.136 [DEBUG] [Thread-8596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:35:09.136 [DEBUG] [Thread-8596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:35:09.136 [DEBUG] [Thread-8596] [transport.py] [_log()] Compression: none
2025-11-26T00:35:09.136 [DEBUG] [Thread-8596] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:35:09.153 [DEBUG] [Thread-8596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:35:09.153 [DEBUG] [Thread-8596] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:35:09.154 [DEBUG] [Thread-8596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:35:09.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:35:09.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:35:09.197 [DEBUG] [Thread-8596] [transport.py] [_log()] userauth is OK
2025-11-26T00:35:09.197 [DEBUG] [Thread-8596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:35:09.197 [DEBUG] [Thread-8596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:35:09.197 [DEBUG] [Thread-8596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:35:09.197 [DEBUG] [Thread-8596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:35:09.217 [INFO] [Thread-8596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:35:09.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:35:09.781 [DEBUG] [Thread-8598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:10.004 [DEBUG] [Thread-8596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:35:10.005 [DEBUG] [Thread-8596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:35:10.005 [DEBUG] [Thread-8596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:35:10.046 [DEBUG] [Thread-8596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:35:10.046 [DEBUG] [Thread-8596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:35:10.049 [DEBUG] [Thread-8596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:35:10.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:35:10.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:35:10.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:35:10.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:35:10.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:35:10.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:35:10.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:35:10.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:35:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:35:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.940722 -999.00  +20.00  11.79     17   -5.30 1 1 1 1 1     0    0 25.11 10.55 ZNESW 11.6 11.8 140.4 14.9 19.7 -26.4 19.6 -25.8 19.3 -24.6 19.5 -25.5
2025-11-26T00:35:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:35:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:35:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.940722
2025-11-26T00:35:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:35:10.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:35:10.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:35:10.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:35:10.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:35:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:34:52', tmtdew=29.8, humidity=12.4, cloud=0.0, wind=14.26, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:34:52', seeing=0.96, atlas_timestamp='2025-11-25T22:34:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:33:00')
2025-11-26T00:35:10.075 [DEBUG] [Thread-8596] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:35:10.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:35:10.170 [DEBUG] [Thread-8600] [transport.py] [_log()] starting thread (client mode): 0x70dbfd30
2025-11-26T00:35:10.170 [DEBUG] [Thread-8600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:35:10.184 [DEBUG] [Thread-8600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:35:10.185 [INFO] [Thread-8600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:35:10.192 [DEBUG] [Thread-8600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:35:10.192 [DEBUG] [Thread-8600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:35:10.192 [DEBUG] [Thread-8600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:35:10.192 [DEBUG] [Thread-8600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:35:10.192 [DEBUG] [Thread-8600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] client lang: <none>
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] server lang: <none>
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] kex follows: False
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] Compression: none
2025-11-26T00:35:10.193 [DEBUG] [Thread-8600] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:35:10.254 [DEBUG] [Thread-8600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:35:10.255 [DEBUG] [Thread-8600] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:35:10.255 [DEBUG] [Thread-8600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:35:10.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:35:10.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:35:10.315 [DEBUG] [Thread-8600] [transport.py] [_log()] userauth is OK
2025-11-26T00:35:10.315 [DEBUG] [Thread-8600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:35:10.315 [DEBUG] [Thread-8600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:35:10.315 [DEBUG] [Thread-8600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:35:10.315 [DEBUG] [Thread-8600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:35:10.338 [INFO] [Thread-8600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:35:10.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:35:10.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:35:11.198 [DEBUG] [Thread-8600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:35:11.198 [DEBUG] [Thread-8600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:35:11.245 [DEBUG] [Thread-8600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:35:11.246 [DEBUG] [Thread-8600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:35:11.254 [DEBUG] [Thread-8600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:35:11.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:35:11.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:35:11.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:35:11.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:35:11.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:35:11.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:35:11.289 [DEBUG] [Thread-8600] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:35:13.083 [DEBUG] [Thread-8602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:18.079 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:20.391 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:20.392 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:24.817 [DEBUG] [Thread-8603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:28.464 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:38.852 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:39.869 [DEBUG] [Thread-8604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:41.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:35:41.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:35:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:35:41.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 35, 24), 29.76, 12.41, 0.0, 15.3, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:35:41.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:35:24
2025-11-26T00:35:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:35:42.237 [DEBUG] [Thread-8605] [transport.py] [_log()] starting thread (client mode): 0x7374c280
2025-11-26T00:35:42.238 [DEBUG] [Thread-8605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:35:42.257 [DEBUG] [Thread-8605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:35:42.257 [INFO] [Thread-8605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] client lang: <none>
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] server lang: <none>
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] kex follows: False
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] Compression: none
2025-11-26T00:35:42.261 [DEBUG] [Thread-8605] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:35:42.278 [DEBUG] [Thread-8605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:35:42.278 [DEBUG] [Thread-8605] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:35:42.279 [DEBUG] [Thread-8605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:35:42.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:35:42.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:35:42.280 [DEBUG] [Thread-8605] [transport.py] [_log()] userauth is OK
2025-11-26T00:35:42.280 [DEBUG] [Thread-8605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:35:42.280 [DEBUG] [Thread-8605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:35:42.280 [DEBUG] [Thread-8605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:35:42.280 [DEBUG] [Thread-8605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:35:42.297 [INFO] [Thread-8605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:35:42.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:35:42.931 [DEBUG] [Thread-8605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:35:42.931 [DEBUG] [Thread-8605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:35:42.931 [DEBUG] [Thread-8605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:35:42.972 [DEBUG] [Thread-8605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:35:42.972 [DEBUG] [Thread-8605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:35:42.976 [DEBUG] [Thread-8605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:35:42.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:35:42.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:35:42.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:35:42.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:35:42.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:35:42.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:35:42.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:35:42.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:35:42.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:35:42.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.941069 -999.00  +20.00   8.34     17   -5.20 1 1 1 1 1     0    0 25.67 11.03 ZNESW 8.5 8.3 137.4 13.8 19.6 -26.5 19.6 -26.0 19.3 -24.6 19.6 -25.5
2025-11-26T00:35:42.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:35:43.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:35:43.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.941069
2025-11-26T00:35:43.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:35:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:35:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:35:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:35:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:35:43.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:35:24', tmtdew=29.76, humidity=12.41, cloud=0.0, wind=15.3, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:35:24', seeing=1.03, atlas_timestamp='2025-11-25T22:35:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:33:00')
2025-11-26T00:35:43.001 [DEBUG] [Thread-8605] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:35:43.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:35:43.087 [DEBUG] [Thread-8608] [transport.py] [_log()] starting thread (client mode): 0x70d55b70
2025-11-26T00:35:43.088 [DEBUG] [Thread-8608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:35:43.107 [DEBUG] [Thread-8608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:35:43.107 [INFO] [Thread-8608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:35:43.115 [DEBUG] [Thread-8608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:35:43.115 [DEBUG] [Thread-8608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:35:43.115 [DEBUG] [Thread-8608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:35:43.115 [DEBUG] [Thread-8608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:35:43.115 [DEBUG] [Thread-8608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:35:43.115 [DEBUG] [Thread-8608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:35:43.115 [DEBUG] [Thread-8608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] client lang: <none>
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] server lang: <none>
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] kex follows: False
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] Compression: none
2025-11-26T00:35:43.116 [DEBUG] [Thread-8608] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:35:43.172 [DEBUG] [Thread-8608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:35:43.172 [DEBUG] [Thread-8608] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:35:43.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:35:43.173 [DEBUG] [Thread-8608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:35:43.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:35:43.228 [DEBUG] [Thread-8608] [transport.py] [_log()] userauth is OK
2025-11-26T00:35:43.229 [DEBUG] [Thread-8608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:35:43.229 [DEBUG] [Thread-8608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:35:43.229 [DEBUG] [Thread-8608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:35:43.229 [DEBUG] [Thread-8608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:35:43.248 [INFO] [Thread-8608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:35:43.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:35:43.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:35:44.057 [DEBUG] [Thread-8608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:35:44.057 [DEBUG] [Thread-8608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:35:44.105 [DEBUG] [Thread-8608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:35:44.105 [DEBUG] [Thread-8608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:35:44.114 [DEBUG] [Thread-8608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:35:44.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:35:44.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:35:44.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:35:44.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:35:44.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:35:44.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:35:44.151 [DEBUG] [Thread-8608] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:35:49.274 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:54.904 [DEBUG] [Thread-8610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:35:59.643 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:09.953 [DEBUG] [Thread-8611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:10.068 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:13.152 [DEBUG] [Thread-8612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:14.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:36:14.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:36:14.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:36:14.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 35, 56), 29.67, 12.45, 0.0, 15.88, 19.68, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:36:14.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:35:56
2025-11-26T00:36:14.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:36:15.130 [DEBUG] [Thread-8613] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-26T00:36:15.130 [DEBUG] [Thread-8613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:36:15.149 [DEBUG] [Thread-8613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:36:15.150 [INFO] [Thread-8613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] client lang: <none>
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] server lang: <none>
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] kex follows: False
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:36:15.153 [DEBUG] [Thread-8613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:36:15.154 [DEBUG] [Thread-8613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:36:15.154 [DEBUG] [Thread-8613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:36:15.154 [DEBUG] [Thread-8613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:36:15.154 [DEBUG] [Thread-8613] [transport.py] [_log()] Compression: none
2025-11-26T00:36:15.154 [DEBUG] [Thread-8613] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:36:15.170 [DEBUG] [Thread-8613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:36:15.171 [DEBUG] [Thread-8613] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:36:15.171 [DEBUG] [Thread-8613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:36:15.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:36:15.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:36:15.173 [DEBUG] [Thread-8613] [transport.py] [_log()] userauth is OK
2025-11-26T00:36:15.173 [DEBUG] [Thread-8613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:36:15.174 [DEBUG] [Thread-8613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:36:15.174 [DEBUG] [Thread-8613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:36:15.174 [DEBUG] [Thread-8613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:36:15.210 [INFO] [Thread-8613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:36:15.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:36:15.844 [DEBUG] [Thread-8613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:36:15.844 [DEBUG] [Thread-8613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:36:15.845 [DEBUG] [Thread-8613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:36:15.885 [DEBUG] [Thread-8613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:36:15.886 [DEBUG] [Thread-8613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:36:15.889 [DEBUG] [Thread-8613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:36:15.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:36:15.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:36:15.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:36:15.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:36:15.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:36:15.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:36:15.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:36:15.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:36:15.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:36:15.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.941416 -999.00  +20.00  10.99     17   -5.10 1 1 1 1 1     0    0 25.50 8.85 ZNESW 11.5 11.0 134.4 13.4 19.6 -26.6 19.6 -26.0 19.3 -24.8 19.5 -25.7
2025-11-26T00:36:15.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:36:15.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:36:15.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.941416
2025-11-26T00:36:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:36:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:36:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:36:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:36:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:36:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:35:56', tmtdew=29.67, humidity=12.45, cloud=0.0, wind=15.88, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:35:57', seeing=1.03, atlas_timestamp='2025-11-25T22:35:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:33:00')
2025-11-26T00:36:15.918 [DEBUG] [Thread-8613] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:36:16.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:36:16.014 [DEBUG] [Thread-8616] [transport.py] [_log()] starting thread (client mode): 0x70dd09d0
2025-11-26T00:36:16.014 [DEBUG] [Thread-8616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:36:16.029 [DEBUG] [Thread-8616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:36:16.029 [INFO] [Thread-8616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:36:16.036 [DEBUG] [Thread-8616] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] client lang: <none>
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] server lang: <none>
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] kex follows: False
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] Compression: none
2025-11-26T00:36:16.037 [DEBUG] [Thread-8616] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:36:16.093 [DEBUG] [Thread-8616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:36:16.094 [DEBUG] [Thread-8616] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:36:16.094 [DEBUG] [Thread-8616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:36:16.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:36:16.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:36:16.151 [DEBUG] [Thread-8616] [transport.py] [_log()] userauth is OK
2025-11-26T00:36:16.151 [DEBUG] [Thread-8616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:36:16.151 [DEBUG] [Thread-8616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:36:16.151 [DEBUG] [Thread-8616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:36:16.151 [DEBUG] [Thread-8616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:36:16.170 [INFO] [Thread-8616] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:36:16.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:36:16.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:36:16.993 [DEBUG] [Thread-8616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:36:16.993 [DEBUG] [Thread-8616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:36:17.042 [DEBUG] [Thread-8616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:36:17.042 [DEBUG] [Thread-8616] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:36:17.052 [DEBUG] [Thread-8616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:36:17.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:36:17.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:36:17.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:36:17.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:36:17.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:36:17.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:36:17.088 [DEBUG] [Thread-8616] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:36:20.524 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:20.595 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:20.596 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:24.990 [DEBUG] [Thread-8618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:30.937 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:40.041 [DEBUG] [Thread-8619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:41.406 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:36:47.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:36:47.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:36:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 36, 28), 29.75, 12.38, 0.0, 14.66, 19.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:36:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:36:28
2025-11-26T00:36:47.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:36:48.066 [DEBUG] [Thread-8620] [transport.py] [_log()] starting thread (client mode): 0x70d54fd0
2025-11-26T00:36:48.066 [DEBUG] [Thread-8620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:36:48.087 [DEBUG] [Thread-8620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:36:48.087 [INFO] [Thread-8620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] client lang: <none>
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] server lang: <none>
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] kex follows: False
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] Compression: none
2025-11-26T00:36:48.090 [DEBUG] [Thread-8620] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:36:48.107 [DEBUG] [Thread-8620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:36:48.107 [DEBUG] [Thread-8620] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:36:48.108 [DEBUG] [Thread-8620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:36:48.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:36:48.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:36:48.110 [DEBUG] [Thread-8620] [transport.py] [_log()] userauth is OK
2025-11-26T00:36:48.110 [DEBUG] [Thread-8620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:36:48.110 [DEBUG] [Thread-8620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:36:48.110 [DEBUG] [Thread-8620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:36:48.110 [DEBUG] [Thread-8620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:36:48.128 [INFO] [Thread-8620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:36:48.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:36:48.780 [DEBUG] [Thread-8620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:36:48.780 [DEBUG] [Thread-8620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:36:48.781 [DEBUG] [Thread-8620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:36:48.821 [DEBUG] [Thread-8620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:36:48.821 [DEBUG] [Thread-8620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:36:48.824 [DEBUG] [Thread-8620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:36:48.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:36:48.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:36:48.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:36:48.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:36:48.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:36:48.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:36:48.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:36:48.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:36:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:36:48.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.941764 -999.00  +19.90  13.15     17   -5.20 1 1 1 1 1     0    0 25.60 7.11 ZNESW 12.5 13.2 129.2 15.5 19.6 -26.4 19.6 -25.9 19.3 -24.6 19.5 -25.5
2025-11-26T00:36:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:36:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:36:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.941764
2025-11-26T00:36:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:36:48.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:36:48.851 [DEBUG] [Thread-8620] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:36:48.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:36:48.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:36:48.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:36:48.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:36:28', tmtdew=29.75, humidity=12.38, cloud=0.0, wind=14.66, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:36:28', seeing=0.92, atlas_timestamp='2025-11-25T22:36:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.01025000000000098, 0.011250000000000426, 0.018499999999999517, 0.04049999999999976, 0.08525000000000205, 0.030499999999998195, 0.0182500000000001, -0.01750000000000007, 0.0030000000000001137, 0.05325000000000024, -0.011499999999999844, 0.09799999999999898, 0.09224999999999994, -0.002000000000000668, 0.006000000000000227, 0.02224999999999966, -0.011499999999999844, 0.020500000000000185, -0.013750000000001705, 0.07749999999999879, 0.06974999999999909, 0.030250000000000554, -0.00575000000000081, -0.016000000000000014, -0.002000000000000668, 0.019750000000000156, 0.03950000000000031, 0.11100000000000065, 0.0990000000000002, 0.10500000000000043, -0.032999999999999474, -0.004250000000000753], zp_timestamp='2025-11-25T22:33:00')
2025-11-26T00:36:48.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:36:48.946 [DEBUG] [Thread-8623] [transport.py] [_log()] starting thread (client mode): 0x70d54640
2025-11-26T00:36:48.946 [DEBUG] [Thread-8623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:36:48.961 [DEBUG] [Thread-8623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:36:48.961 [INFO] [Thread-8623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:36:48.968 [DEBUG] [Thread-8623] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:36:48.968 [DEBUG] [Thread-8623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:36:48.968 [DEBUG] [Thread-8623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:36:48.968 [DEBUG] [Thread-8623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:36:48.968 [DEBUG] [Thread-8623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] client lang: <none>
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] server lang: <none>
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] kex follows: False
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] Compression: none
2025-11-26T00:36:48.969 [DEBUG] [Thread-8623] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:36:49.040 [DEBUG] [Thread-8623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:36:49.041 [DEBUG] [Thread-8623] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:36:49.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:36:49.042 [DEBUG] [Thread-8623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:36:49.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:36:49.103 [DEBUG] [Thread-8623] [transport.py] [_log()] userauth is OK
2025-11-26T00:36:49.104 [DEBUG] [Thread-8623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:36:49.104 [DEBUG] [Thread-8623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:36:49.104 [DEBUG] [Thread-8623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:36:49.104 [DEBUG] [Thread-8623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:36:49.124 [INFO] [Thread-8623] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:36:49.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:36:49.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:36:49.966 [DEBUG] [Thread-8623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:36:49.966 [DEBUG] [Thread-8623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:36:50.013 [DEBUG] [Thread-8623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:36:50.014 [DEBUG] [Thread-8623] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:36:50.023 [DEBUG] [Thread-8623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:36:50.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:36:50.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:36:50.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:36:50.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:36:50.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:36:50.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:36:50.061 [DEBUG] [Thread-8623] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:36:51.827 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:36:55.074 [DEBUG] [Thread-8625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:02.206 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:10.130 [DEBUG] [Thread-8626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:12.636 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:13.226 [DEBUG] [Thread-8627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:20.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:37:20.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:37:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:37:20.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 37), 29.69, 12.4, 0.0, 12.46, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:37:20.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:37:00
2025-11-26T00:37:20.797 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:20.798 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:20.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:37:21.067 [DEBUG] [Thread-8628] [transport.py] [_log()] starting thread (client mode): 0x70dbe4a0
2025-11-26T00:37:21.067 [DEBUG] [Thread-8628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:37:21.088 [DEBUG] [Thread-8628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:37:21.088 [INFO] [Thread-8628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] client lang: <none>
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] server lang: <none>
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] kex follows: False
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:37:21.092 [DEBUG] [Thread-8628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:37:21.093 [DEBUG] [Thread-8628] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:37:21.093 [DEBUG] [Thread-8628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:37:21.093 [DEBUG] [Thread-8628] [transport.py] [_log()] Compression: none
2025-11-26T00:37:21.093 [DEBUG] [Thread-8628] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:37:21.108 [DEBUG] [Thread-8628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:37:21.109 [DEBUG] [Thread-8628] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:37:21.109 [DEBUG] [Thread-8628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:37:21.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:37:21.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:37:21.110 [DEBUG] [Thread-8628] [transport.py] [_log()] userauth is OK
2025-11-26T00:37:21.110 [DEBUG] [Thread-8628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:37:21.110 [DEBUG] [Thread-8628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:37:21.110 [DEBUG] [Thread-8628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:37:21.110 [DEBUG] [Thread-8628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:37:21.125 [INFO] [Thread-8628] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:37:21.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:37:21.723 [DEBUG] [Thread-8628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:37:21.723 [DEBUG] [Thread-8628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:37:21.723 [DEBUG] [Thread-8628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:37:21.764 [DEBUG] [Thread-8628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:37:21.764 [DEBUG] [Thread-8628] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:37:21.766 [DEBUG] [Thread-8628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:37:21.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:37:21.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:37:21.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:37:21.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:37:21.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:37:21.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:37:21.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.942458 -999.00  +19.90  11.01     17   -5.20 1 1 1 1 1     0    0 25.21 4.82 ZNESW 13.0 11.0 127.6 13.0 19.6 -26.5 19.6 -26.0 19.2 -24.7 19.5 -25.8
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.942458
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:37:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:37:00', tmtdew=29.69, humidity=12.4, cloud=0.0, wind=12.46, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:37:00', seeing=0.81, atlas_timestamp='2025-11-25T22:37:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.0182500000000001, -0.010749999999999815, 0.006499999999999062, 0.005499999999999616, 0.08325000000000138, 0.02149999999999963, -0.025749999999998607, 0.015999999999998238, 0.0030000000000001137, 0.06124999999999936, -0.006000000000000227, 0.09299999999999997, 0.05824999999999925, 0.017999999999998906, 0.0004999999999988347, 0.021249999999998437, 0.0005000000000006111, 0.007999999999999119, -0.017750000000001265, 0.06399999999999828, 0.05274999999999963, -0.01774999999999949, -0.01124999999999865, -0.028999999999999915, 0.006999999999999673, -0.006249999999999645, 0.0365000000000002, 0.11500000000000021, 0.0840000000000014, 0.06700000000000017, -0.02099999999999902, -0.04275000000000162], zp_timestamp='2025-11-25T22:36:00')
2025-11-26T00:37:21.785 [DEBUG] [Thread-8628] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:37:21.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:37:21.872 [DEBUG] [Thread-8631] [transport.py] [_log()] starting thread (client mode): 0x70d57460
2025-11-26T00:37:21.872 [DEBUG] [Thread-8631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:37:21.886 [DEBUG] [Thread-8631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:37:21.886 [INFO] [Thread-8631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] client lang: <none>
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] server lang: <none>
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] kex follows: False
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] Compression: none
2025-11-26T00:37:21.894 [DEBUG] [Thread-8631] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:37:21.950 [DEBUG] [Thread-8631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:37:21.950 [DEBUG] [Thread-8631] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:37:21.950 [DEBUG] [Thread-8631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:37:21.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:37:21.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:37:22.010 [DEBUG] [Thread-8631] [transport.py] [_log()] userauth is OK
2025-11-26T00:37:22.010 [DEBUG] [Thread-8631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:37:22.011 [DEBUG] [Thread-8631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:37:22.011 [DEBUG] [Thread-8631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:37:22.011 [DEBUG] [Thread-8631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:37:22.026 [INFO] [Thread-8631] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:37:22.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:37:22.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:37:22.824 [DEBUG] [Thread-8631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:37:22.824 [DEBUG] [Thread-8631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:37:22.872 [DEBUG] [Thread-8631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:37:22.872 [DEBUG] [Thread-8631] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:37:22.880 [DEBUG] [Thread-8631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:37:22.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:37:22.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:37:22.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:37:22.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:37:22.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:37:22.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:37:22.912 [DEBUG] [Thread-8631] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:37:23.082 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:25.168 [DEBUG] [Thread-8633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:33.491 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:40.231 [DEBUG] [Thread-8634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:43.868 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:52.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:37:52.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:37:52.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:37:53.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 37, 32), 29.69, 12.4, 0.0, 11.79, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:37:53.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:37:32
2025-11-26T00:37:53.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:37:53.893 [DEBUG] [Thread-8635] [transport.py] [_log()] starting thread (client mode): 0x70dbfd60
2025-11-26T00:37:53.893 [DEBUG] [Thread-8635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:37:53.913 [DEBUG] [Thread-8635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:37:53.913 [INFO] [Thread-8635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] client lang: <none>
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] server lang: <none>
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] kex follows: False
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] Compression: none
2025-11-26T00:37:53.916 [DEBUG] [Thread-8635] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:37:53.934 [DEBUG] [Thread-8635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:37:53.934 [DEBUG] [Thread-8635] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:37:53.935 [DEBUG] [Thread-8635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:37:53.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:37:53.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:37:53.937 [DEBUG] [Thread-8635] [transport.py] [_log()] userauth is OK
2025-11-26T00:37:53.937 [DEBUG] [Thread-8635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:37:53.937 [DEBUG] [Thread-8635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:37:53.937 [DEBUG] [Thread-8635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:37:53.938 [DEBUG] [Thread-8635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:37:53.961 [INFO] [Thread-8635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:37:53.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:37:54.276 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:54.604 [DEBUG] [Thread-8635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:37:54.604 [DEBUG] [Thread-8635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:37:54.605 [DEBUG] [Thread-8635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:37:54.646 [DEBUG] [Thread-8635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:37:54.646 [DEBUG] [Thread-8635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:37:54.650 [DEBUG] [Thread-8635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:37:54.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:37:54.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:37:54.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:37:54.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:37:54.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:37:54.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:37:54.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:37:54.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:37:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:37:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.942805 -999.00  +19.90   9.69     17   -5.20 1 1 1 1 1     0    0 25.36 3.98 ZNESW 9.1 9.7 126.4 15.1 19.6 -26.6 19.6 -26.0 19.3 -24.6 19.5 -25.8
2025-11-26T00:37:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:37:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:37:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.942805
2025-11-26T00:37:54.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:37:54.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:37:54.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:37:54.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:37:54.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:37:54.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:37:32', tmtdew=29.69, humidity=12.4, cloud=0.0, wind=11.79, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:37:32', seeing=1.14, atlas_timestamp='2025-11-25T22:37:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.0182500000000001, -0.010749999999999815, 0.006499999999999062, 0.005499999999999616, 0.08325000000000138, 0.02149999999999963, -0.025749999999998607, 0.015999999999998238, 0.0030000000000001137, 0.06124999999999936, -0.006000000000000227, 0.09299999999999997, 0.05824999999999925, 0.017999999999998906, 0.0004999999999988347, 0.021249999999998437, 0.0005000000000006111, 0.007999999999999119, -0.017750000000001265, 0.06399999999999828, 0.05274999999999963, -0.01774999999999949, -0.01124999999999865, -0.028999999999999915, 0.006999999999999673, -0.006249999999999645, 0.0365000000000002, 0.11500000000000021, 0.0840000000000014, 0.06700000000000017, -0.02099999999999902, -0.04275000000000162], zp_timestamp='2025-11-25T22:36:00')
2025-11-26T00:37:54.677 [DEBUG] [Thread-8635] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:37:54.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:37:54.772 [DEBUG] [Thread-8638] [transport.py] [_log()] starting thread (client mode): 0x70de7070
2025-11-26T00:37:54.772 [DEBUG] [Thread-8638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:37:54.786 [DEBUG] [Thread-8638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:37:54.786 [INFO] [Thread-8638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] client lang: <none>
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] server lang: <none>
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] kex follows: False
2025-11-26T00:37:54.794 [DEBUG] [Thread-8638] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:37:54.795 [DEBUG] [Thread-8638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:37:54.795 [DEBUG] [Thread-8638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:37:54.795 [DEBUG] [Thread-8638] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:37:54.795 [DEBUG] [Thread-8638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:37:54.795 [DEBUG] [Thread-8638] [transport.py] [_log()] Compression: none
2025-11-26T00:37:54.795 [DEBUG] [Thread-8638] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:37:54.856 [DEBUG] [Thread-8638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:37:54.857 [DEBUG] [Thread-8638] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:37:54.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:37:54.859 [DEBUG] [Thread-8638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:37:54.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:37:54.912 [DEBUG] [Thread-8638] [transport.py] [_log()] userauth is OK
2025-11-26T00:37:54.912 [DEBUG] [Thread-8638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:37:54.912 [DEBUG] [Thread-8638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:37:54.912 [DEBUG] [Thread-8638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:37:54.912 [DEBUG] [Thread-8638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:37:54.926 [INFO] [Thread-8638] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:37:54.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:37:54.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:37:55.265 [DEBUG] [Thread-8640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:37:55.758 [DEBUG] [Thread-8638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:37:55.758 [DEBUG] [Thread-8638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:37:55.805 [DEBUG] [Thread-8638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:37:55.805 [DEBUG] [Thread-8638] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:37:55.813 [DEBUG] [Thread-8638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:37:55.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:37:55.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:37:55.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:37:55.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:37:55.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:37:55.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:37:55.844 [DEBUG] [Thread-8638] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:38:04.684 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:10.303 [DEBUG] [Thread-8641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:13.305 [DEBUG] [Thread-8642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:15.106 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:20.999 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:21.000 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:25.340 [DEBUG] [Thread-8643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:25.499 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:38:25.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:38:25.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:38:26.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 38, 4), 29.69, 12.4, 0.0, 13.69, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:38:26.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:38:04
2025-11-26T00:38:26.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:38:26.779 [DEBUG] [Thread-8644] [transport.py] [_log()] starting thread (client mode): 0x70dd06d0
2025-11-26T00:38:26.779 [DEBUG] [Thread-8644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:38:26.799 [DEBUG] [Thread-8644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:38:26.799 [INFO] [Thread-8644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:38:26.802 [DEBUG] [Thread-8644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:38:26.802 [DEBUG] [Thread-8644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:38:26.802 [DEBUG] [Thread-8644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] client lang: <none>
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] server lang: <none>
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] kex follows: False
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] Compression: none
2025-11-26T00:38:26.803 [DEBUG] [Thread-8644] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:38:26.822 [DEBUG] [Thread-8644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:38:26.822 [DEBUG] [Thread-8644] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:38:26.823 [DEBUG] [Thread-8644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:38:26.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:38:26.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:38:26.865 [DEBUG] [Thread-8644] [transport.py] [_log()] userauth is OK
2025-11-26T00:38:26.865 [DEBUG] [Thread-8644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:38:26.865 [DEBUG] [Thread-8644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:38:26.865 [DEBUG] [Thread-8644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:38:26.865 [DEBUG] [Thread-8644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:38:26.886 [INFO] [Thread-8644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:38:26.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:38:27.533 [DEBUG] [Thread-8644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:38:27.533 [DEBUG] [Thread-8644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:38:27.534 [DEBUG] [Thread-8644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:38:27.575 [DEBUG] [Thread-8644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:38:27.575 [DEBUG] [Thread-8644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:38:27.578 [DEBUG] [Thread-8644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:38:27.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:38:27.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:38:27.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:38:27.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:38:27.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:38:27.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:38:27.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:38:27.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:38:27.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:38:27.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.943153 -999.00  +19.80  12.50     17   -5.30 1 1 1 1 1     0    0 25.25 2.60 ZNESW 12.8 12.5 126.8 14.1 19.6 -26.6 19.6 -26.0 19.2 -24.7 19.5 -25.8
2025-11-26T00:38:27.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:38:27.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:38:27.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.943153
2025-11-26T00:38:27.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:38:27.605 [DEBUG] [Thread-8644] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:38:27.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:38:27.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:38:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:38:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:38:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:38:04', tmtdew=29.69, humidity=12.4, cloud=0.0, wind=13.69, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:38:04', seeing=1.09, atlas_timestamp='2025-11-25T22:38:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.0182500000000001, -0.010749999999999815, 0.006499999999999062, 0.005499999999999616, 0.08325000000000138, 0.02149999999999963, -0.025749999999998607, 0.015999999999998238, 0.0030000000000001137, 0.06124999999999936, -0.006000000000000227, 0.09299999999999997, 0.05824999999999925, 0.017999999999998906, 0.0004999999999988347, 0.021249999999998437, 0.0005000000000006111, 0.007999999999999119, -0.017750000000001265, 0.06399999999999828, 0.05274999999999963, -0.01774999999999949, -0.01124999999999865, -0.028999999999999915, 0.006999999999999673, -0.006249999999999645, 0.0365000000000002, 0.11500000000000021, 0.0840000000000014, 0.06700000000000017, -0.02099999999999902, -0.04275000000000162], zp_timestamp='2025-11-25T22:36:00')
2025-11-26T00:38:27.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:38:27.701 [DEBUG] [Thread-8647] [transport.py] [_log()] starting thread (client mode): 0x70d54700
2025-11-26T00:38:27.701 [DEBUG] [Thread-8647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:38:27.719 [DEBUG] [Thread-8647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:38:27.719 [INFO] [Thread-8647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:38:27.727 [DEBUG] [Thread-8647] [transport.py] [_log()] client lang: <none>
2025-11-26T00:38:27.728 [DEBUG] [Thread-8647] [transport.py] [_log()] server lang: <none>
2025-11-26T00:38:27.728 [DEBUG] [Thread-8647] [transport.py] [_log()] kex follows: False
2025-11-26T00:38:27.728 [DEBUG] [Thread-8647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:38:27.728 [DEBUG] [Thread-8647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:38:27.728 [DEBUG] [Thread-8647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:38:27.728 [DEBUG] [Thread-8647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:38:27.728 [DEBUG] [Thread-8647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:38:27.728 [DEBUG] [Thread-8647] [transport.py] [_log()] Compression: none
2025-11-26T00:38:27.728 [DEBUG] [Thread-8647] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:38:27.786 [DEBUG] [Thread-8647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:38:27.786 [DEBUG] [Thread-8647] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:38:27.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:38:27.788 [DEBUG] [Thread-8647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:38:27.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:38:27.841 [DEBUG] [Thread-8647] [transport.py] [_log()] userauth is OK
2025-11-26T00:38:27.842 [DEBUG] [Thread-8647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:38:27.842 [DEBUG] [Thread-8647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:38:27.842 [DEBUG] [Thread-8647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:38:27.842 [DEBUG] [Thread-8647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:38:27.860 [INFO] [Thread-8647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:38:27.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:38:27.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:38:28.672 [DEBUG] [Thread-8647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:38:28.672 [DEBUG] [Thread-8647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:38:28.721 [DEBUG] [Thread-8647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:38:28.721 [DEBUG] [Thread-8647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:38:28.730 [DEBUG] [Thread-8647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:38:28.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:38:28.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:38: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') -> 00000000
2025-11-26T00:38:28.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:38:28.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:38:28.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:38:28.767 [DEBUG] [Thread-8647] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:38:35.872 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:40.371 [DEBUG] [Thread-8649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:46.266 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:55.418 [DEBUG] [Thread-8650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:56.689 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:38:58.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:38:58.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:38:58.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:38:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 38, 36), 29.65, 12.38, 0.0, 20.12, 19.54, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:38:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:38:36
2025-11-26T00:38:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:38:59.732 [DEBUG] [Thread-8651] [transport.py] [_log()] starting thread (client mode): 0x70d54520
2025-11-26T00:38:59.732 [DEBUG] [Thread-8651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:38:59.751 [DEBUG] [Thread-8651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:38:59.751 [INFO] [Thread-8651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] client lang: <none>
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] server lang: <none>
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] kex follows: False
2025-11-26T00:38:59.755 [DEBUG] [Thread-8651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:38:59.756 [DEBUG] [Thread-8651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:38:59.756 [DEBUG] [Thread-8651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:38:59.756 [DEBUG] [Thread-8651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:38:59.756 [DEBUG] [Thread-8651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:38:59.756 [DEBUG] [Thread-8651] [transport.py] [_log()] Compression: none
2025-11-26T00:38:59.756 [DEBUG] [Thread-8651] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:38:59.773 [DEBUG] [Thread-8651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:38:59.774 [DEBUG] [Thread-8651] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:38:59.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:38:59.775 [DEBUG] [Thread-8651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:38:59.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:38:59.777 [DEBUG] [Thread-8651] [transport.py] [_log()] userauth is OK
2025-11-26T00:38:59.777 [DEBUG] [Thread-8651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:38:59.777 [DEBUG] [Thread-8651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:38:59.778 [DEBUG] [Thread-8651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:38:59.778 [DEBUG] [Thread-8651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:38:59.801 [INFO] [Thread-8651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:38:59.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:39:00.468 [DEBUG] [Thread-8651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:39:00.468 [DEBUG] [Thread-8651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:39:00.468 [DEBUG] [Thread-8651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:39:00.509 [DEBUG] [Thread-8651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:39:00.509 [DEBUG] [Thread-8651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:39:00.512 [DEBUG] [Thread-8651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:39:00.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:39:00.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:39:00.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:39:00.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:39:00.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:39:00.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:39:00.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:39:00.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:39:00.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:39:00.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.943500 -999.00  +19.80  15.21     17   -5.50 1 1 1 1 1     0    0 25.26 1.80 ZNESW 17.1 15.2 136.4 17.6 19.6 -26.5 19.5 -25.9 19.2 -24.7 19.4 -25.4
2025-11-26T00:39:00.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:39:00.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:39:00.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.943500
2025-11-26T00:39:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:39:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:39:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:39:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:39:00.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:39:00.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:38:36', tmtdew=29.65, humidity=12.38, cloud=0.0, wind=20.12, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:38:36', seeing=1.09, atlas_timestamp='2025-11-25T22:38:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.0182500000000001, -0.010749999999999815, 0.006499999999999062, 0.005499999999999616, 0.08325000000000138, 0.02149999999999963, -0.025749999999998607, 0.015999999999998238, 0.0030000000000001137, 0.06124999999999936, -0.006000000000000227, 0.09299999999999997, 0.05824999999999925, 0.017999999999998906, 0.0004999999999988347, 0.021249999999998437, 0.0005000000000006111, 0.007999999999999119, -0.017750000000001265, 0.06399999999999828, 0.05274999999999963, -0.01774999999999949, -0.01124999999999865, -0.028999999999999915, 0.006999999999999673, -0.006249999999999645, 0.0365000000000002, 0.11500000000000021, 0.0840000000000014, 0.06700000000000017, -0.02099999999999902, -0.04275000000000162], zp_timestamp='2025-11-25T22:36:00')
2025-11-26T00:39:00.538 [DEBUG] [Thread-8651] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:39:00.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:39:00.633 [DEBUG] [Thread-8654] [transport.py] [_log()] starting thread (client mode): 0x70d38b80
2025-11-26T00:39:00.633 [DEBUG] [Thread-8654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:39:00.648 [DEBUG] [Thread-8654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:39:00.648 [INFO] [Thread-8654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:39:00.655 [DEBUG] [Thread-8654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:39:00.655 [DEBUG] [Thread-8654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:39:00.655 [DEBUG] [Thread-8654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] client lang: <none>
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] server lang: <none>
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] kex follows: False
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] Compression: none
2025-11-26T00:39:00.656 [DEBUG] [Thread-8654] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:39:00.714 [DEBUG] [Thread-8654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:39:00.715 [DEBUG] [Thread-8654] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:39:00.715 [DEBUG] [Thread-8654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:39:00.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:39:00.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:39:00.770 [DEBUG] [Thread-8654] [transport.py] [_log()] userauth is OK
2025-11-26T00:39:00.770 [DEBUG] [Thread-8654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:39:00.770 [DEBUG] [Thread-8654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:39:00.770 [DEBUG] [Thread-8654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:39:00.771 [DEBUG] [Thread-8654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:39:00.789 [INFO] [Thread-8654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:39:00.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:39:00.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:39:01.637 [DEBUG] [Thread-8654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:39:01.637 [DEBUG] [Thread-8654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:39:01.685 [DEBUG] [Thread-8654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:39:01.685 [DEBUG] [Thread-8654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:39:01.694 [DEBUG] [Thread-8654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:39:01.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:39:01.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:39:01.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:39:01.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:39:01.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:39:01.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:39:01.733 [DEBUG] [Thread-8654] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:39:07.105 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:10.452 [DEBUG] [Thread-8656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:13.377 [DEBUG] [Thread-8657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:17.485 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:21.199 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:21.200 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:25.493 [DEBUG] [Thread-8658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:27.920 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:31.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:39:31.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:39:31.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:39:32.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 39, 8), 29.67, 12.35, 0.0, 20.7, 19.46, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:39:32.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:39:08
2025-11-26T00:39:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:39:32.695 [DEBUG] [Thread-8659] [transport.py] [_log()] starting thread (client mode): 0x70da6c50
2025-11-26T00:39:32.696 [DEBUG] [Thread-8659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:39:32.716 [DEBUG] [Thread-8659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:39:32.717 [INFO] [Thread-8659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] client lang: <none>
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] server lang: <none>
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] kex follows: False
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] Compression: none
2025-11-26T00:39:32.720 [DEBUG] [Thread-8659] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:39:32.738 [DEBUG] [Thread-8659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:39:32.738 [DEBUG] [Thread-8659] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:39:32.739 [DEBUG] [Thread-8659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:39:32.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:39:32.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:39:32.740 [DEBUG] [Thread-8659] [transport.py] [_log()] userauth is OK
2025-11-26T00:39:32.741 [DEBUG] [Thread-8659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:39:32.741 [DEBUG] [Thread-8659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:39:32.741 [DEBUG] [Thread-8659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:39:32.741 [DEBUG] [Thread-8659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:39:32.762 [INFO] [Thread-8659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:39:32.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:39:33.359 [DEBUG] [Thread-8659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:39:33.359 [DEBUG] [Thread-8659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:39:33.359 [DEBUG] [Thread-8659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:39:33.401 [DEBUG] [Thread-8659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:39:33.401 [DEBUG] [Thread-8659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:39:33.404 [DEBUG] [Thread-8659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:39:33.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:39:33.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:39:33.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:39:33.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:39:33.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:39:33.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:39:33.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:39:33.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:39:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:39:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.943847 -999.00  +20.00  14.28     17   -5.70 1 1 1 1 1     0    0 25.31 3.22 ZNESW 13.4 14.3 135.5 18.2 19.6 -26.3 19.6 -25.8 19.3 -24.2 19.5 -25.3
2025-11-26T00:39:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:39:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:39:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.943847
2025-11-26T00:39:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:39:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:39:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:39:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:39:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:39:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:39:08', tmtdew=29.67, humidity=12.35, cloud=0.0, wind=20.7, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:39:08', seeing=1.33, atlas_timestamp='2025-11-25T22:39:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.0182500000000001, -0.010749999999999815, 0.006499999999999062, 0.005499999999999616, 0.08325000000000138, 0.02149999999999963, -0.025749999999998607, 0.015999999999998238, 0.0030000000000001137, 0.06124999999999936, -0.006000000000000227, 0.09299999999999997, 0.05824999999999925, 0.017999999999998906, 0.0004999999999988347, 0.021249999999998437, 0.0005000000000006111, 0.007999999999999119, -0.017750000000001265, 0.06399999999999828, 0.05274999999999963, -0.01774999999999949, -0.01124999999999865, -0.028999999999999915, 0.006999999999999673, -0.006249999999999645, 0.0365000000000002, 0.11500000000000021, 0.0840000000000014, 0.06700000000000017, -0.02099999999999902, -0.04275000000000162], zp_timestamp='2025-11-25T22:36:00')
2025-11-26T00:39:33.429 [DEBUG] [Thread-8659] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:39:33.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:39:33.522 [DEBUG] [Thread-8662] [transport.py] [_log()] starting thread (client mode): 0x70dbe530
2025-11-26T00:39:33.522 [DEBUG] [Thread-8662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:39:33.536 [DEBUG] [Thread-8662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:39:33.536 [INFO] [Thread-8662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:39:33.543 [DEBUG] [Thread-8662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:39:33.543 [DEBUG] [Thread-8662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:39:33.543 [DEBUG] [Thread-8662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] client lang: <none>
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] server lang: <none>
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] kex follows: False
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] Compression: none
2025-11-26T00:39:33.544 [DEBUG] [Thread-8662] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:39:33.603 [DEBUG] [Thread-8662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:39:33.603 [DEBUG] [Thread-8662] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:39:33.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:39:33.604 [DEBUG] [Thread-8662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:39:33.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:39:33.659 [DEBUG] [Thread-8662] [transport.py] [_log()] userauth is OK
2025-11-26T00:39:33.659 [DEBUG] [Thread-8662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:39:33.659 [DEBUG] [Thread-8662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:39:33.660 [DEBUG] [Thread-8662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:39:33.660 [DEBUG] [Thread-8662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:39:33.680 [INFO] [Thread-8662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:39:33.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:39:33.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:39:34.513 [DEBUG] [Thread-8662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:39:34.514 [DEBUG] [Thread-8662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:39:34.562 [DEBUG] [Thread-8662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:39:34.562 [DEBUG] [Thread-8662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:39:34.571 [DEBUG] [Thread-8662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:39:34.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:39:34.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:39:34.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:39:34.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:39:34.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:39:34.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:39:34.612 [DEBUG] [Thread-8662] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:39:38.336 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:40.529 [DEBUG] [Thread-8664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:48.736 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:55.585 [DEBUG] [Thread-8665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:39:59.151 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:04.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:40:04.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:40:04.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:40:05.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 39, 40), 29.98, 12.43, 0.0, 15.95, 19.68, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:40:05.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:39:40
2025-11-26T00:40:05.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:40:05.548 [DEBUG] [Thread-8666] [transport.py] [_log()] starting thread (client mode): 0x70d7f1f0
2025-11-26T00:40:05.548 [DEBUG] [Thread-8666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:40:05.567 [DEBUG] [Thread-8666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:40:05.567 [INFO] [Thread-8666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:40:05.570 [DEBUG] [Thread-8666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:40:05.570 [DEBUG] [Thread-8666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] client lang: <none>
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] server lang: <none>
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] kex follows: False
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:40:05.571 [DEBUG] [Thread-8666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:40:05.572 [DEBUG] [Thread-8666] [transport.py] [_log()] Compression: none
2025-11-26T00:40:05.572 [DEBUG] [Thread-8666] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:40:05.588 [DEBUG] [Thread-8666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:40:05.589 [DEBUG] [Thread-8666] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:40:05.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:40:05.591 [DEBUG] [Thread-8666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:40:05.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:40:05.593 [DEBUG] [Thread-8666] [transport.py] [_log()] userauth is OK
2025-11-26T00:40:05.593 [DEBUG] [Thread-8666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:40:05.593 [DEBUG] [Thread-8666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:40:05.593 [DEBUG] [Thread-8666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:40:05.594 [DEBUG] [Thread-8666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:40:05.616 [INFO] [Thread-8666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:40:05.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:40:06.286 [DEBUG] [Thread-8666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:40:06.286 [DEBUG] [Thread-8666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:40:06.287 [DEBUG] [Thread-8666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:40:06.326 [DEBUG] [Thread-8666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:40:06.327 [DEBUG] [Thread-8666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:40:06.330 [DEBUG] [Thread-8666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:40:06.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:40:06.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:40:06.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:40:06.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:40:06.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:40:06.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:40:06.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:40:06.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:40:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:40:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.944194 -999.00  +20.10  15.38     17   -5.60 1 1 1 1 1     0    0 25.40 4.76 ZNESW 14.9 15.4 131.8 19.2 19.6 -26.5 19.5 -25.8 19.3 -24.5 19.5 -25.1
2025-11-26T00:40:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:40:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:40:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.944194
2025-11-26T00:40:06.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:40:06.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:40:06.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:40:06.361 [DEBUG] [Thread-8666] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:40:06.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:40:06.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:40:06.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:39:40', tmtdew=29.98, humidity=12.43, cloud=0.0, wind=15.95, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:39:41', seeing=1.12, atlas_timestamp='2025-11-25T22:39:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.0182500000000001, -0.010749999999999815, 0.006499999999999062, 0.005499999999999616, 0.08325000000000138, 0.02149999999999963, -0.025749999999998607, 0.015999999999998238, 0.0030000000000001137, 0.06124999999999936, -0.006000000000000227, 0.09299999999999997, 0.05824999999999925, 0.017999999999998906, 0.0004999999999988347, 0.021249999999998437, 0.0005000000000006111, 0.007999999999999119, -0.017750000000001265, 0.06399999999999828, 0.05274999999999963, -0.01774999999999949, -0.01124999999999865, -0.028999999999999915, 0.006999999999999673, -0.006249999999999645, 0.0365000000000002, 0.11500000000000021, 0.0840000000000014, 0.06700000000000017, -0.02099999999999902, -0.04275000000000162], zp_timestamp='2025-11-25T22:36:00')
2025-11-26T00:40:06.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:40:06.457 [DEBUG] [Thread-8669] [transport.py] [_log()] starting thread (client mode): 0x70de5960
2025-11-26T00:40:06.457 [DEBUG] [Thread-8669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:40:06.473 [DEBUG] [Thread-8669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:40:06.474 [INFO] [Thread-8669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:40:06.481 [DEBUG] [Thread-8669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:40:06.481 [DEBUG] [Thread-8669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:40:06.481 [DEBUG] [Thread-8669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:40:06.481 [DEBUG] [Thread-8669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:40:06.482 [DEBUG] [Thread-8669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:40:06.482 [DEBUG] [Thread-8669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:40:06.482 [DEBUG] [Thread-8669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:40:06.482 [DEBUG] [Thread-8669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:40:06.482 [DEBUG] [Thread-8669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:40:06.482 [DEBUG] [Thread-8669] [transport.py] [_log()] client lang: <none>
2025-11-26T00:40:06.482 [DEBUG] [Thread-8669] [transport.py] [_log()] server lang: <none>
2025-11-26T00:40:06.482 [DEBUG] [Thread-8669] [transport.py] [_log()] kex follows: False
2025-11-26T00:40:06.482 [DEBUG] [Thread-8669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:40:06.483 [DEBUG] [Thread-8669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:40:06.483 [DEBUG] [Thread-8669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:40:06.483 [DEBUG] [Thread-8669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:40:06.483 [DEBUG] [Thread-8669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:40:06.483 [DEBUG] [Thread-8669] [transport.py] [_log()] Compression: none
2025-11-26T00:40:06.483 [DEBUG] [Thread-8669] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:40:06.540 [DEBUG] [Thread-8669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:40:06.541 [DEBUG] [Thread-8669] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:40:06.542 [DEBUG] [Thread-8669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:40:06.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:40:06.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:40:06.603 [DEBUG] [Thread-8669] [transport.py] [_log()] userauth is OK
2025-11-26T00:40:06.603 [DEBUG] [Thread-8669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:40:06.603 [DEBUG] [Thread-8669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:40:06.604 [DEBUG] [Thread-8669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:40:06.604 [DEBUG] [Thread-8669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:40:06.622 [INFO] [Thread-8669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:40:06.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:40:06.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:40:07.458 [DEBUG] [Thread-8669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:40:07.458 [DEBUG] [Thread-8669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:40:07.506 [DEBUG] [Thread-8669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:40:07.506 [DEBUG] [Thread-8669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:40:07.516 [DEBUG] [Thread-8669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:40:07.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:40:07.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:40:07.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:40:07.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:40:07.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:40:07.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:40:07.552 [DEBUG] [Thread-8669] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:40:09.518 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:10.622 [DEBUG] [Thread-8671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:13.452 [DEBUG] [Thread-8672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:19.888 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:21.402 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:21.403 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:25.668 [DEBUG] [Thread-8673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:30.288 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:40:37.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:40:37.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:40:38.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 40, 12), 30.19, 12.25, 0.0, 12.6, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:40:38.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:40:12
2025-11-26T00:40:38.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:40:38.526 [DEBUG] [Thread-8674] [transport.py] [_log()] starting thread (client mode): 0x70d3a4a0
2025-11-26T00:40:38.526 [DEBUG] [Thread-8674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:40:38.547 [DEBUG] [Thread-8674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:40:38.547 [INFO] [Thread-8674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:40:38.548 [DEBUG] [Thread-8674] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] client lang: <none>
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] server lang: <none>
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] kex follows: False
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] Compression: none
2025-11-26T00:40:38.549 [DEBUG] [Thread-8674] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:40:38.562 [DEBUG] [Thread-8674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:40:38.563 [DEBUG] [Thread-8674] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:40:38.563 [DEBUG] [Thread-8674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:40:38.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:40:38.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:40:38.565 [DEBUG] [Thread-8674] [transport.py] [_log()] userauth is OK
2025-11-26T00:40:38.565 [DEBUG] [Thread-8674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:40:38.566 [DEBUG] [Thread-8674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:40:38.566 [DEBUG] [Thread-8674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:40:38.566 [DEBUG] [Thread-8674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:40:38.624 [INFO] [Thread-8674] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:40:38.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:40:39.193 [DEBUG] [Thread-8674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:40:39.193 [DEBUG] [Thread-8674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:40:39.193 [DEBUG] [Thread-8674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:40:39.234 [DEBUG] [Thread-8674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:40:39.234 [DEBUG] [Thread-8674] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:40:39.238 [DEBUG] [Thread-8674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:40:39.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:40:39.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:40:39.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:40:39.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:40:39.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:40:39.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:40:39.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:40:39.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:40:39.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:40:39.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.944194 -999.00  +20.10  15.38     17   -5.60 1 1 1 1 1     0    0 25.40 4.76 ZNESW 14.9 15.4 131.8 19.2 19.6 -26.5 19.5 -25.8 19.3 -24.5 19.5 -25.1
2025-11-26T00:40:39.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:40:39.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:40:39.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.944194
2025-11-26T00:40:39.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:40:39.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:40:39.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:40:39.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:40:39.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:40:39.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:40:12', tmtdew=30.19, humidity=12.25, cloud=0.0, wind=12.6, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:40:13', seeing=1.12, atlas_timestamp='2025-11-25T22:39:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:38:00')
2025-11-26T00:40:39.268 [DEBUG] [Thread-8674] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:40:39.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:40:39.363 [DEBUG] [Thread-8677] [transport.py] [_log()] starting thread (client mode): 0x70d40c70
2025-11-26T00:40:39.363 [DEBUG] [Thread-8677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:40:39.378 [DEBUG] [Thread-8677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:40:39.378 [INFO] [Thread-8677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] client lang: <none>
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] server lang: <none>
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] kex follows: False
2025-11-26T00:40:39.386 [DEBUG] [Thread-8677] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:40:39.387 [DEBUG] [Thread-8677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:40:39.387 [DEBUG] [Thread-8677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:40:39.387 [DEBUG] [Thread-8677] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:40:39.387 [DEBUG] [Thread-8677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:40:39.387 [DEBUG] [Thread-8677] [transport.py] [_log()] Compression: none
2025-11-26T00:40:39.387 [DEBUG] [Thread-8677] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:40:39.449 [DEBUG] [Thread-8677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:40:39.449 [DEBUG] [Thread-8677] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:40:39.450 [DEBUG] [Thread-8677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:40:39.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:40:39.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:40:39.508 [DEBUG] [Thread-8677] [transport.py] [_log()] userauth is OK
2025-11-26T00:40:39.508 [DEBUG] [Thread-8677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:40:39.508 [DEBUG] [Thread-8677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:40:39.508 [DEBUG] [Thread-8677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:40:39.508 [DEBUG] [Thread-8677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:40:39.522 [INFO] [Thread-8677] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:40:39.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:40:39.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:40:40.352 [DEBUG] [Thread-8677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:40:40.352 [DEBUG] [Thread-8677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:40:40.404 [DEBUG] [Thread-8677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:40:40.404 [DEBUG] [Thread-8677] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:40:40.413 [DEBUG] [Thread-8677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:40:40.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:40: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')
2025-11-26T00:40:40.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:40:40.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:40:40.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:40:40.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:40:40.451 [DEBUG] [Thread-8677] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:40:40.675 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:40.704 [DEBUG] [Thread-8679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:51.067 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:40:55.764 [DEBUG] [Thread-8680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:01.446 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:10.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:41:10.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:41:10.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:41:10.795 [DEBUG] [Thread-8681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 40, 44), 30.14, 12.21, 0.0, 15.49, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:41:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:40:44
2025-11-26T00:41:11.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:41:11.419 [DEBUG] [Thread-8682] [transport.py] [_log()] starting thread (client mode): 0x70d413c0
2025-11-26T00:41:11.419 [DEBUG] [Thread-8682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:41:11.439 [DEBUG] [Thread-8682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:41:11.439 [INFO] [Thread-8682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:41:11.442 [DEBUG] [Thread-8682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:41:11.442 [DEBUG] [Thread-8682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:41:11.442 [DEBUG] [Thread-8682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:41:11.442 [DEBUG] [Thread-8682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:41:11.442 [DEBUG] [Thread-8682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:41:11.442 [DEBUG] [Thread-8682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:41:11.442 [DEBUG] [Thread-8682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] client lang: <none>
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] server lang: <none>
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] kex follows: False
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] Compression: none
2025-11-26T00:41:11.443 [DEBUG] [Thread-8682] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:41:11.451 [DEBUG] [Thread-8682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:41:11.452 [DEBUG] [Thread-8682] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:41:11.452 [DEBUG] [Thread-8682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:41:11.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:41:11.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:41:11.453 [DEBUG] [Thread-8682] [transport.py] [_log()] userauth is OK
2025-11-26T00:41:11.454 [DEBUG] [Thread-8682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:41:11.454 [DEBUG] [Thread-8682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:41:11.454 [DEBUG] [Thread-8682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:41:11.454 [DEBUG] [Thread-8682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:41:11.473 [INFO] [Thread-8682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:41:11.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:41:11.877 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:12.037 [DEBUG] [Thread-8682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:41:12.037 [DEBUG] [Thread-8682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:41:12.038 [DEBUG] [Thread-8682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:41:12.078 [DEBUG] [Thread-8682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:41:12.078 [DEBUG] [Thread-8682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:41:12.081 [DEBUG] [Thread-8682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:41:12.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:41:12.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:41:12.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:41:12.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:41:12.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:41:12.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:41:12.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:41:12.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:41:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:41:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.944889 -999.00  +20.20  13.38     17   -5.30 1 1 1 1 1     0    0 25.83 8.91 ZNESW 11.2 13.4 131.0 15.8 19.7 -26.6 19.6 -26.0 19.3 -24.5 19.5 -25.7
2025-11-26T00:41:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:41:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:41:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.944889
2025-11-26T00:41:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:41:12.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:41:12.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:41:12.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:41:12.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:41:12.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:40:44', tmtdew=30.14, humidity=12.21, cloud=0.0, wind=15.49, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:40:45', seeing=1.12, atlas_timestamp='2025-11-25T22:40:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:38:00')
2025-11-26T00:41:12.107 [DEBUG] [Thread-8682] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:41:12.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:41:12.203 [DEBUG] [Thread-8685] [transport.py] [_log()] starting thread (client mode): 0x70d3a710
2025-11-26T00:41:12.204 [DEBUG] [Thread-8685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:41:12.221 [DEBUG] [Thread-8685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:41:12.221 [INFO] [Thread-8685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] client lang: <none>
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] server lang: <none>
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] kex follows: False
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] Compression: none
2025-11-26T00:41:12.229 [DEBUG] [Thread-8685] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:41:12.284 [DEBUG] [Thread-8685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:41:12.284 [DEBUG] [Thread-8685] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:41:12.284 [DEBUG] [Thread-8685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:41:12.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:41:12.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:41:12.341 [DEBUG] [Thread-8685] [transport.py] [_log()] userauth is OK
2025-11-26T00:41:12.341 [DEBUG] [Thread-8685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:41:12.341 [DEBUG] [Thread-8685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:41:12.341 [DEBUG] [Thread-8685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:41:12.341 [DEBUG] [Thread-8685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:41:12.360 [INFO] [Thread-8685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:41:12.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:41:12.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:41:13.184 [DEBUG] [Thread-8685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:41:13.184 [DEBUG] [Thread-8685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:41:13.233 [DEBUG] [Thread-8685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:41:13.233 [DEBUG] [Thread-8685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:41:13.242 [DEBUG] [Thread-8685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:41:13.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:41:13.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:41:13.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:41:13.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:41:13.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:41:13.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:41:13.279 [DEBUG] [Thread-8685] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:41:13.529 [DEBUG] [Thread-8687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:21.602 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:21.604 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:22.260 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:25.827 [DEBUG] [Thread-8688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:32.659 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:40.879 [DEBUG] [Thread-8689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:43.089 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:43.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:41:43.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:41:43.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:41:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 41, 16), 30.09, 12.26, 0.0, 15.35, 19.84, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:41:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:41:16
2025-11-26T00:41:44.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:41:44.223 [DEBUG] [Thread-8690] [transport.py] [_log()] starting thread (client mode): 0x70d41810
2025-11-26T00:41:44.223 [DEBUG] [Thread-8690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:41:44.244 [DEBUG] [Thread-8690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:41:44.244 [INFO] [Thread-8690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:41:44.247 [DEBUG] [Thread-8690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:41:44.247 [DEBUG] [Thread-8690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:41:44.247 [DEBUG] [Thread-8690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:41:44.247 [DEBUG] [Thread-8690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:41:44.247 [DEBUG] [Thread-8690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] client lang: <none>
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] server lang: <none>
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] kex follows: False
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] Compression: none
2025-11-26T00:41:44.248 [DEBUG] [Thread-8690] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:41:44.268 [DEBUG] [Thread-8690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:41:44.268 [DEBUG] [Thread-8690] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:41:44.269 [DEBUG] [Thread-8690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:41:44.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:41:44.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:41:44.271 [DEBUG] [Thread-8690] [transport.py] [_log()] userauth is OK
2025-11-26T00:41:44.271 [DEBUG] [Thread-8690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:41:44.271 [DEBUG] [Thread-8690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:41:44.271 [DEBUG] [Thread-8690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:41:44.272 [DEBUG] [Thread-8690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:41:44.295 [INFO] [Thread-8690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:41:44.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:41:45.081 [DEBUG] [Thread-8690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:41:45.082 [DEBUG] [Thread-8690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:41:45.082 [DEBUG] [Thread-8690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:41:45.123 [DEBUG] [Thread-8690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:41:45.123 [DEBUG] [Thread-8690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:41:45.126 [DEBUG] [Thread-8690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:41:45.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:41:45.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:41:45.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:41:45.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:41:45.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:41:45.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:41:45.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:41:45.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:41:45.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:41:45.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.945237 -999.00  +20.20  16.01     16   -5.70 1 1 1 1 1     0    0 26.25 9.37 ZNESW 15.6 16.0 149.2 17.6 19.6 -26.4 19.6 -25.8 19.3 -24.5 19.6 -25.5
2025-11-26T00:41:45.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:41:45.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:41:45.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.945237
2025-11-26T00:41:45.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:41:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:41:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:41:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:41:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:41:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:41:16', tmtdew=30.09, humidity=12.26, cloud=0.0, wind=15.35, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:41:17', seeing=1.19, atlas_timestamp='2025-11-25T22:41:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:38:00')
2025-11-26T00:41:45.147 [DEBUG] [Thread-8690] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:41:45.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:41:45.241 [DEBUG] [Thread-8693] [transport.py] [_log()] starting thread (client mode): 0x70de6530
2025-11-26T00:41:45.241 [DEBUG] [Thread-8693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:41:45.256 [DEBUG] [Thread-8693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:41:45.256 [INFO] [Thread-8693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:41:45.263 [DEBUG] [Thread-8693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] client lang: <none>
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] server lang: <none>
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] kex follows: False
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:41:45.264 [DEBUG] [Thread-8693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:41:45.265 [DEBUG] [Thread-8693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:41:45.265 [DEBUG] [Thread-8693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:41:45.265 [DEBUG] [Thread-8693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:41:45.265 [DEBUG] [Thread-8693] [transport.py] [_log()] Compression: none
2025-11-26T00:41:45.265 [DEBUG] [Thread-8693] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:41:45.323 [DEBUG] [Thread-8693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:41:45.323 [DEBUG] [Thread-8693] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:41:45.324 [DEBUG] [Thread-8693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:41:45.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:41:45.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:41:45.383 [DEBUG] [Thread-8693] [transport.py] [_log()] userauth is OK
2025-11-26T00:41:45.383 [DEBUG] [Thread-8693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:41:45.383 [DEBUG] [Thread-8693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:41:45.383 [DEBUG] [Thread-8693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:41:45.383 [DEBUG] [Thread-8693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:41:45.402 [INFO] [Thread-8693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:41:45.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:41:45.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:41:46.259 [DEBUG] [Thread-8693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:41:46.260 [DEBUG] [Thread-8693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:41:46.308 [DEBUG] [Thread-8693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:41:46.308 [DEBUG] [Thread-8693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:41:46.317 [DEBUG] [Thread-8693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:41:46.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:41:46.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:41:46.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:41:46.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:41:46.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:41:46.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:41:46.356 [DEBUG] [Thread-8693] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:41:53.495 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:41:55.911 [DEBUG] [Thread-8695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:03.872 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:10.966 [DEBUG] [Thread-8696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:13.607 [DEBUG] [Thread-8697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:14.223 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:16.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:42:16.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:42:16.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:42:17.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 41, 48), 29.98, 12.26, 0.0, 15.39, 19.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:42:17.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:41:48
2025-11-26T00:42:17.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:42:17.325 [DEBUG] [Thread-8698] [transport.py] [_log()] starting thread (client mode): 0x70d3b1f0
2025-11-26T00:42:17.325 [DEBUG] [Thread-8698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:42:17.346 [DEBUG] [Thread-8698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:42:17.346 [INFO] [Thread-8698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:42:17.349 [DEBUG] [Thread-8698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] client lang: <none>
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] server lang: <none>
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] kex follows: False
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] Compression: none
2025-11-26T00:42:17.350 [DEBUG] [Thread-8698] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:42:17.368 [DEBUG] [Thread-8698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:42:17.369 [DEBUG] [Thread-8698] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:42:17.369 [DEBUG] [Thread-8698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:42:17.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:42:17.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:42:17.372 [DEBUG] [Thread-8698] [transport.py] [_log()] userauth is OK
2025-11-26T00:42:17.372 [DEBUG] [Thread-8698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:42:17.372 [DEBUG] [Thread-8698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:42:17.372 [DEBUG] [Thread-8698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:42:17.372 [DEBUG] [Thread-8698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:42:17.387 [INFO] [Thread-8698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:42:17.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:42:18.040 [DEBUG] [Thread-8698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:42:18.040 [DEBUG] [Thread-8698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:42:18.040 [DEBUG] [Thread-8698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:42:18.081 [DEBUG] [Thread-8698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:42:18.081 [DEBUG] [Thread-8698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:42:18.085 [DEBUG] [Thread-8698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:42:18.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:42:18.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:42:18.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:42:18.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:42:18.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:42:18.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:42:18.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:42:18.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:42:18.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:42:18.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.945583 -999.00  +20.20   8.78     17   -5.50 1 1 1 1 1     0    0 25.58 10.35 ZNESW 8.9 8.8 124.6 14.2 19.7 -26.4 19.6 -26.0 19.3 -24.5 19.5 -25.7
2025-11-26T00:42:18.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:42:18.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:42:18.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.945583
2025-11-26T00:42:18.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:42:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:42:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:42:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:42:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:42:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:41:48', tmtdew=29.98, humidity=12.26, cloud=0.0, wind=15.39, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:41:49', seeing=0.98, atlas_timestamp='2025-11-25T22:41:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:38:00')
2025-11-26T00:42:18.111 [DEBUG] [Thread-8698] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:42:18.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:42:18.210 [DEBUG] [Thread-8701] [transport.py] [_log()] starting thread (client mode): 0x70d43100
2025-11-26T00:42:18.210 [DEBUG] [Thread-8701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:42:18.225 [DEBUG] [Thread-8701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:42:18.226 [INFO] [Thread-8701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:42:18.233 [DEBUG] [Thread-8701] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:42:18.233 [DEBUG] [Thread-8701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:42:18.233 [DEBUG] [Thread-8701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] client lang: <none>
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] server lang: <none>
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] kex follows: False
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] Compression: none
2025-11-26T00:42:18.234 [DEBUG] [Thread-8701] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:42:18.291 [DEBUG] [Thread-8701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:42:18.291 [DEBUG] [Thread-8701] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:42:18.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:42:18.292 [DEBUG] [Thread-8701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:42:18.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:42:18.347 [DEBUG] [Thread-8701] [transport.py] [_log()] userauth is OK
2025-11-26T00:42:18.348 [DEBUG] [Thread-8701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:42:18.348 [DEBUG] [Thread-8701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:42:18.348 [DEBUG] [Thread-8701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:42:18.348 [DEBUG] [Thread-8701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:42:18.367 [INFO] [Thread-8701] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:42:18.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:42:18.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:42:19.205 [DEBUG] [Thread-8701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:42:19.205 [DEBUG] [Thread-8701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:42:19.253 [DEBUG] [Thread-8701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:42:19.253 [DEBUG] [Thread-8701] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:42:19.262 [DEBUG] [Thread-8701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:42:19.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:42:19.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:42:19.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:42:19.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:42:19.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:42:19.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:42:19.299 [DEBUG] [Thread-8701] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:42:21.808 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:21.808 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:24.612 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:26.001 [DEBUG] [Thread-8703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:35.085 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:41.050 [DEBUG] [Thread-8704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:45.483 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:49.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:42:49.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:42:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:42:50.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 42, 20), 29.99, 12.25, 0.0, 16.15, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:42:50.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:42:20
2025-11-26T00:42:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:42:50.276 [DEBUG] [Thread-8705] [transport.py] [_log()] starting thread (client mode): 0x70d41420
2025-11-26T00:42:50.277 [DEBUG] [Thread-8705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:42:50.298 [DEBUG] [Thread-8705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:42:50.298 [INFO] [Thread-8705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] client lang: <none>
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] server lang: <none>
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] kex follows: False
2025-11-26T00:42:50.301 [DEBUG] [Thread-8705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:42:50.302 [DEBUG] [Thread-8705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:42:50.302 [DEBUG] [Thread-8705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:42:50.302 [DEBUG] [Thread-8705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:42:50.302 [DEBUG] [Thread-8705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:42:50.302 [DEBUG] [Thread-8705] [transport.py] [_log()] Compression: none
2025-11-26T00:42:50.302 [DEBUG] [Thread-8705] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:42:50.320 [DEBUG] [Thread-8705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:42:50.320 [DEBUG] [Thread-8705] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:42:50.321 [DEBUG] [Thread-8705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:42:50.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:42:50.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:42:50.323 [DEBUG] [Thread-8705] [transport.py] [_log()] userauth is OK
2025-11-26T00:42:50.323 [DEBUG] [Thread-8705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:42:50.323 [DEBUG] [Thread-8705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:42:50.323 [DEBUG] [Thread-8705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:42:50.323 [DEBUG] [Thread-8705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:42:50.339 [INFO] [Thread-8705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:42:50.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:42:51.138 [DEBUG] [Thread-8705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:42:51.138 [DEBUG] [Thread-8705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:42:51.138 [DEBUG] [Thread-8705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:42:51.179 [DEBUG] [Thread-8705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:42:51.179 [DEBUG] [Thread-8705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:42:51.182 [DEBUG] [Thread-8705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:42:51.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:42:51.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:42:51.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:42:51.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:42:51.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:42:51.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:42:51.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:42:51.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:42:51.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:42:51.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.945930 -999.00  +20.10   9.60     17   -5.30 1 1 1 1 1     0    0 25.46 11.64 ZNESW 10.5 9.6 131.4 12.2 19.7 -26.7 19.6 -25.9 19.3 -24.7 19.5 -25.7
2025-11-26T00:42:51.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:42:51.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:42:51.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.945930
2025-11-26T00:42:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:42:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:42:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:42:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:42:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:42:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:42:20', tmtdew=29.99, humidity=12.25, cloud=0.0, wind=16.15, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:42:20', seeing=1.03, atlas_timestamp='2025-11-25T22:42:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:38:00')
2025-11-26T00:42:51.212 [DEBUG] [Thread-8705] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:42:51.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:42:51.307 [DEBUG] [Thread-8708] [transport.py] [_log()] starting thread (client mode): 0x70d43a30
2025-11-26T00:42:51.307 [DEBUG] [Thread-8708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:42:51.323 [DEBUG] [Thread-8708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:42:51.323 [INFO] [Thread-8708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] client lang: <none>
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] server lang: <none>
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] kex follows: False
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:42:51.331 [DEBUG] [Thread-8708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:42:51.332 [DEBUG] [Thread-8708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:42:51.332 [DEBUG] [Thread-8708] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:42:51.332 [DEBUG] [Thread-8708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:42:51.332 [DEBUG] [Thread-8708] [transport.py] [_log()] Compression: none
2025-11-26T00:42:51.332 [DEBUG] [Thread-8708] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:42:51.387 [DEBUG] [Thread-8708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:42:51.388 [DEBUG] [Thread-8708] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:42:51.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:42:51.389 [DEBUG] [Thread-8708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:42:51.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:42:51.444 [DEBUG] [Thread-8708] [transport.py] [_log()] userauth is OK
2025-11-26T00:42:51.444 [DEBUG] [Thread-8708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:42:51.444 [DEBUG] [Thread-8708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:42:51.444 [DEBUG] [Thread-8708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:42:51.444 [DEBUG] [Thread-8708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:42:51.463 [INFO] [Thread-8708] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:42:51.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:42:51.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:42:52.286 [DEBUG] [Thread-8708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:42:52.287 [DEBUG] [Thread-8708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:42:52.335 [DEBUG] [Thread-8708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:42:52.335 [DEBUG] [Thread-8708] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:42:52.344 [DEBUG] [Thread-8708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:42:52.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:42:52.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:42:52.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:42:52.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:42:52.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:42:52.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:42:52.380 [DEBUG] [Thread-8708] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:42:55.879 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:42:56.085 [DEBUG] [Thread-8710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:06.314 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:11.134 [DEBUG] [Thread-8711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:13.658 [DEBUG] [Thread-8712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:16.755 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:22.008 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:22.009 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:22.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:43:22.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:43:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:43:23.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 42, 52), 30.07, 12.08, 0.0, 15.46, 19.69, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:43:23.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:42:52
2025-11-26T00:43:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:43:23.320 [DEBUG] [Thread-8713] [transport.py] [_log()] starting thread (client mode): 0x70d3a710
2025-11-26T00:43:23.320 [DEBUG] [Thread-8713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:43:23.343 [DEBUG] [Thread-8713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:43:23.344 [INFO] [Thread-8713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:43:23.347 [DEBUG] [Thread-8713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] client lang: <none>
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] server lang: <none>
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] kex follows: False
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] Compression: none
2025-11-26T00:43:23.348 [DEBUG] [Thread-8713] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:43:23.364 [DEBUG] [Thread-8713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:43:23.365 [DEBUG] [Thread-8713] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:43:23.365 [DEBUG] [Thread-8713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:43:23.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:43:23.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:43:23.367 [DEBUG] [Thread-8713] [transport.py] [_log()] userauth is OK
2025-11-26T00:43:23.367 [DEBUG] [Thread-8713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:43:23.367 [DEBUG] [Thread-8713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:43:23.367 [DEBUG] [Thread-8713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:43:23.367 [DEBUG] [Thread-8713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:43:23.390 [INFO] [Thread-8713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:43:23.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:43:24.029 [DEBUG] [Thread-8713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:43:24.030 [DEBUG] [Thread-8713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:43:24.030 [DEBUG] [Thread-8713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:43:24.071 [DEBUG] [Thread-8713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:43:24.071 [DEBUG] [Thread-8713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:43:24.074 [DEBUG] [Thread-8713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:43:24.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:43:24.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:43:24.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:43:24.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:43:24.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:43:24.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:43:24.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:43:24.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:43:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:43:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.946277 -999.00  +20.00  10.50     17   -5.40 1 1 1 1 1     0    0 25.87 12.21 ZNESW 11.7 10.5 131.4 14.4 19.6 -26.7 19.6 -26.0 19.3 -24.6 19.5 -25.8
2025-11-26T00:43:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:43:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:43:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.946277
2025-11-26T00:43:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:43:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:43:24.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:43:24.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:43:24.100 [DEBUG] [Thread-8713] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:43:24.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:43:24.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:42:52', tmtdew=30.07, humidity=12.08, cloud=0.0, wind=15.46, temperature=19.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:42:52', seeing=1.09, atlas_timestamp='2025-11-25T22:42:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:42:00')
2025-11-26T00:43:24.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:43:24.197 [DEBUG] [Thread-8716] [transport.py] [_log()] starting thread (client mode): 0x70d42e30
2025-11-26T00:43:24.197 [DEBUG] [Thread-8716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:43:24.212 [DEBUG] [Thread-8716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:43:24.213 [INFO] [Thread-8716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:43:24.220 [DEBUG] [Thread-8716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:43:24.220 [DEBUG] [Thread-8716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:43:24.220 [DEBUG] [Thread-8716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:43:24.220 [DEBUG] [Thread-8716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:43:24.220 [DEBUG] [Thread-8716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] client lang: <none>
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] server lang: <none>
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] kex follows: False
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] Compression: none
2025-11-26T00:43:24.221 [DEBUG] [Thread-8716] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:43:24.280 [DEBUG] [Thread-8716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:43:24.280 [DEBUG] [Thread-8716] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:43:24.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:43:24.281 [DEBUG] [Thread-8716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:43:24.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:43:24.336 [DEBUG] [Thread-8716] [transport.py] [_log()] userauth is OK
2025-11-26T00:43:24.336 [DEBUG] [Thread-8716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:43:24.337 [DEBUG] [Thread-8716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:43:24.337 [DEBUG] [Thread-8716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:43:24.337 [DEBUG] [Thread-8716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:43:24.356 [INFO] [Thread-8716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:43:24.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:43:24.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:43:25.296 [DEBUG] [Thread-8716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:43:25.296 [DEBUG] [Thread-8716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:43:25.344 [DEBUG] [Thread-8716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:43:25.344 [DEBUG] [Thread-8716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:43:25.352 [DEBUG] [Thread-8716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:43:25.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:43:25.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:43:25.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:43:25.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:43:25.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:43:25.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:43:25.384 [DEBUG] [Thread-8716] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:43:26.160 [DEBUG] [Thread-8718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:27.216 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:37.614 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:41.208 [DEBUG] [Thread-8719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:48.054 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:43:55.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:43:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:43:56.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 43, 24), 30.17, 12.01, 0.0, 15.95, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:43:56.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:43:24
2025-11-26T00:43:56.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:43:56.240 [DEBUG] [Thread-8720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:43:56.337 [DEBUG] [Thread-8721] [transport.py] [_log()] starting thread (client mode): 0x70da65c0
2025-11-26T00:43:56.337 [DEBUG] [Thread-8721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:43:56.356 [DEBUG] [Thread-8721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:43:56.357 [INFO] [Thread-8721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] client lang: <none>
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] server lang: <none>
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] kex follows: False
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] Compression: none
2025-11-26T00:43:56.360 [DEBUG] [Thread-8721] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:43:56.369 [DEBUG] [Thread-8721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:43:56.370 [DEBUG] [Thread-8721] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:43:56.370 [DEBUG] [Thread-8721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:43:56.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:43:56.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:43:56.372 [DEBUG] [Thread-8721] [transport.py] [_log()] userauth is OK
2025-11-26T00:43:56.372 [DEBUG] [Thread-8721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:43:56.372 [DEBUG] [Thread-8721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:43:56.372 [DEBUG] [Thread-8721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:43:56.372 [DEBUG] [Thread-8721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:43:56.391 [INFO] [Thread-8721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:43:56.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:43:57.204 [DEBUG] [Thread-8721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:43:57.205 [DEBUG] [Thread-8721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:43:57.205 [DEBUG] [Thread-8721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:43:57.245 [DEBUG] [Thread-8721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:43:57.245 [DEBUG] [Thread-8721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:43:57.247 [DEBUG] [Thread-8721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:43:57.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:43:57.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:43:57.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:43:57.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:43:57.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:43:57.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:43:57.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.946625 -999.00  +20.00  10.58     17   -5.50 1 1 1 1 1     0    0 25.41 11.82 ZNESW 8.7 10.6 128.2 14.1 19.7 -26.6 19.6 -25.9 19.2 -24.8 19.5 -25.7
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.946625
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:43:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:43:24', tmtdew=30.17, humidity=12.01, cloud=0.0, wind=15.95, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:43:24', seeing=1.09, atlas_timestamp='2025-11-25T22:43:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:42:00')
2025-11-26T00:43:57.265 [DEBUG] [Thread-8721] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:43:57.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:43:57.350 [DEBUG] [Thread-8724] [transport.py] [_log()] starting thread (client mode): 0x70da4130
2025-11-26T00:43:57.350 [DEBUG] [Thread-8724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:43:57.368 [DEBUG] [Thread-8724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:43:57.368 [INFO] [Thread-8724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:43:57.375 [DEBUG] [Thread-8724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:43:57.375 [DEBUG] [Thread-8724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] client lang: <none>
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] server lang: <none>
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] kex follows: False
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] Compression: none
2025-11-26T00:43:57.376 [DEBUG] [Thread-8724] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:43:57.431 [DEBUG] [Thread-8724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:43:57.431 [DEBUG] [Thread-8724] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:43:57.431 [DEBUG] [Thread-8724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:43:57.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:43:57.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:43:57.488 [DEBUG] [Thread-8724] [transport.py] [_log()] userauth is OK
2025-11-26T00:43:57.488 [DEBUG] [Thread-8724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:43:57.488 [DEBUG] [Thread-8724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:43:57.488 [DEBUG] [Thread-8724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:43:57.488 [DEBUG] [Thread-8724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:43:57.505 [INFO] [Thread-8724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:43:57.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:43:57.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:43:58.341 [DEBUG] [Thread-8724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:43:58.341 [DEBUG] [Thread-8724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:43:58.389 [DEBUG] [Thread-8724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:43:58.389 [DEBUG] [Thread-8724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:43:58.397 [DEBUG] [Thread-8724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:43:58.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:43:58.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:43:58.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:43:58.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:43:58.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:43:58.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:43:58.429 [DEBUG] [Thread-8724] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:43:58.464 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:08.890 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:11.273 [DEBUG] [Thread-8726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:13.714 [DEBUG] [Thread-8727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:19.272 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:22.212 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:22.213 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:26.325 [DEBUG] [Thread-8728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:44:28.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:44:28.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:44:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 43, 56), 30.44, 11.95, 0.0, 15.99, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:44:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:43:56
2025-11-26T00:44:29.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:44:29.463 [DEBUG] [Thread-8729] [transport.py] [_log()] starting thread (client mode): 0x70d384f0
2025-11-26T00:44:29.463 [DEBUG] [Thread-8729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:44:29.483 [DEBUG] [Thread-8729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:44:29.483 [INFO] [Thread-8729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] client lang: <none>
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] server lang: <none>
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] kex follows: False
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:44:29.487 [DEBUG] [Thread-8729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:44:29.488 [DEBUG] [Thread-8729] [transport.py] [_log()] Compression: none
2025-11-26T00:44:29.488 [DEBUG] [Thread-8729] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:44:29.504 [DEBUG] [Thread-8729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:44:29.504 [DEBUG] [Thread-8729] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:44:29.504 [DEBUG] [Thread-8729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:44:29.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:44:29.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:44:29.548 [DEBUG] [Thread-8729] [transport.py] [_log()] userauth is OK
2025-11-26T00:44:29.548 [DEBUG] [Thread-8729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:44:29.548 [DEBUG] [Thread-8729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:44:29.548 [DEBUG] [Thread-8729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:44:29.548 [DEBUG] [Thread-8729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:44:29.576 [INFO] [Thread-8729] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:44:29.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:44:29.703 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:30.231 [DEBUG] [Thread-8729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:44:30.231 [DEBUG] [Thread-8729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:44:30.231 [DEBUG] [Thread-8729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:44:30.272 [DEBUG] [Thread-8729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:44:30.272 [DEBUG] [Thread-8729] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:44:30.274 [DEBUG] [Thread-8729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:44:30.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:44:30.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:44:30.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:44:30.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:44:30.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:44:30.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:44:30.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.947319 -999.00  +20.00   9.09     17   -5.50 1 1 1 1 1     0    0 25.93 13.14 ZNESW 9.2 9.1 133.2 13.0 19.6 -26.7 19.6 -26.1 19.3 -24.8 19.5 -25.9
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.947319
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:44:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:43:56', tmtdew=30.44, humidity=11.95, cloud=0.0, wind=15.99, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:43:56', seeing=1.13, atlas_timestamp='2025-11-25T22:44:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:42:00')
2025-11-26T00:44:30.294 [DEBUG] [Thread-8729] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:44:30.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:44:30.379 [DEBUG] [Thread-8732] [transport.py] [_log()] starting thread (client mode): 0x70d3b5b0
2025-11-26T00:44:30.379 [DEBUG] [Thread-8732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:44:30.394 [DEBUG] [Thread-8732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:44:30.394 [INFO] [Thread-8732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:44:30.401 [DEBUG] [Thread-8732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:44:30.401 [DEBUG] [Thread-8732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:44:30.401 [DEBUG] [Thread-8732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] client lang: <none>
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] server lang: <none>
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] kex follows: False
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] Compression: none
2025-11-26T00:44:30.402 [DEBUG] [Thread-8732] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:44:30.459 [DEBUG] [Thread-8732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:44:30.460 [DEBUG] [Thread-8732] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:44:30.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:44:30.460 [DEBUG] [Thread-8732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:44:30.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:44:30.517 [DEBUG] [Thread-8732] [transport.py] [_log()] userauth is OK
2025-11-26T00:44:30.517 [DEBUG] [Thread-8732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:44:30.517 [DEBUG] [Thread-8732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:44:30.517 [DEBUG] [Thread-8732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:44:30.517 [DEBUG] [Thread-8732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:44:30.530 [INFO] [Thread-8732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:44:30.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:44:30.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:44:31.346 [DEBUG] [Thread-8732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:44:31.346 [DEBUG] [Thread-8732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:44:31.393 [DEBUG] [Thread-8732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:44:31.393 [DEBUG] [Thread-8732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:44:31.401 [DEBUG] [Thread-8732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:44:31.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:44: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')
2025-11-26T00:44:31.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:44:31.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:44:31.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:44:31.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:44:31.433 [DEBUG] [Thread-8732] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:44:40.039 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:41.357 [DEBUG] [Thread-8734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:50.402 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:44:56.414 [DEBUG] [Thread-8735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:00.820 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:45:01.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:45:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:45:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 44, 28), 30.41, 11.98, 0.0, 14.12, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:45:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:44:28
2025-11-26T00:45:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:45:02.540 [DEBUG] [Thread-8736] [transport.py] [_log()] starting thread (client mode): 0x70da6800
2025-11-26T00:45:02.540 [DEBUG] [Thread-8736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:45:02.572 [DEBUG] [Thread-8736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:45:02.572 [INFO] [Thread-8736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] client lang: <none>
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] server lang: <none>
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] kex follows: False
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] Compression: none
2025-11-26T00:45:02.578 [DEBUG] [Thread-8736] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:45:02.586 [DEBUG] [Thread-8736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:45:02.586 [DEBUG] [Thread-8736] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:45:02.586 [DEBUG] [Thread-8736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:45:02.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:45:02.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:45:02.587 [DEBUG] [Thread-8736] [transport.py] [_log()] userauth is OK
2025-11-26T00:45:02.587 [DEBUG] [Thread-8736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:45:02.587 [DEBUG] [Thread-8736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:45:02.587 [DEBUG] [Thread-8736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:45:02.587 [DEBUG] [Thread-8736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:45:02.602 [INFO] [Thread-8736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:45:02.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:45:03.773 [DEBUG] [Thread-8736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:45:03.773 [DEBUG] [Thread-8736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:45:03.774 [DEBUG] [Thread-8736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:45:03.814 [DEBUG] [Thread-8736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:45:03.814 [DEBUG] [Thread-8736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:45:03.816 [DEBUG] [Thread-8736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:45:03.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:45:03.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:45:03.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:45:03.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:45:03.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:45:03.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:45:03.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:45:03.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:45:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:45:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.947666 -999.00  +19.90   9.42     17   -5.50 1 1 1 1 1     0    0 25.33 13.80 ZNESW 10.8 9.4 141.4 11.8 19.6 -26.7 19.6 -26.0 19.2 -24.8 19.5 -25.6
2025-11-26T00:45:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:45:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:45:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.947666
2025-11-26T00:45:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:45:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:45:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:45:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:45:03.835 [DEBUG] [Thread-8736] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:45:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:45:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:44:28', tmtdew=30.41, humidity=11.98, cloud=0.0, wind=14.12, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:45:01', seeing=1.07, atlas_timestamp='2025-11-25T22:44:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:42:00')
2025-11-26T00:45:03.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:45:03.924 [DEBUG] [Thread-8739] [transport.py] [_log()] starting thread (client mode): 0x70d3a200
2025-11-26T00:45:03.924 [DEBUG] [Thread-8739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:45:03.939 [DEBUG] [Thread-8739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:45:03.939 [INFO] [Thread-8739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:45:03.946 [DEBUG] [Thread-8739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:45:03.946 [DEBUG] [Thread-8739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:45:03.946 [DEBUG] [Thread-8739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:45:03.946 [DEBUG] [Thread-8739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:45:03.946 [DEBUG] [Thread-8739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:45:03.946 [DEBUG] [Thread-8739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] client lang: <none>
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] server lang: <none>
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] kex follows: False
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] Compression: none
2025-11-26T00:45:03.947 [DEBUG] [Thread-8739] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:45:04.004 [DEBUG] [Thread-8739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:45:04.004 [DEBUG] [Thread-8739] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:45:04.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:45:04.005 [DEBUG] [Thread-8739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:45:04.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:45:04.061 [DEBUG] [Thread-8739] [transport.py] [_log()] userauth is OK
2025-11-26T00:45:04.061 [DEBUG] [Thread-8739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:45:04.061 [DEBUG] [Thread-8739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:45:04.061 [DEBUG] [Thread-8739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:45:04.061 [DEBUG] [Thread-8739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:45:04.079 [INFO] [Thread-8739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:45:04.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:45:04.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:45:04.941 [DEBUG] [Thread-8739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:45:04.941 [DEBUG] [Thread-8739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:45:04.989 [DEBUG] [Thread-8739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:45:04.989 [DEBUG] [Thread-8739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:45:04.997 [DEBUG] [Thread-8739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:45:05.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:45:05.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:45:05.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:45:05.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:45:05.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:45:05.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:45:05.029 [DEBUG] [Thread-8739] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:45:11.203 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:11.443 [DEBUG] [Thread-8741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:13.778 [DEBUG] [Thread-8742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:21.620 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:22.415 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:22.416 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:26.488 [DEBUG] [Thread-8743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:32.022 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:35.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:45:35.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:45:35.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:45:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 45), 30.36, 12.0, 0.0, 16.27, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:45:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:45:00
2025-11-26T00:45:35.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:45:35.974 [DEBUG] [Thread-8744] [transport.py] [_log()] starting thread (client mode): 0x70d42fb0
2025-11-26T00:45:35.974 [DEBUG] [Thread-8744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:45:35.995 [DEBUG] [Thread-8744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:45:35.995 [INFO] [Thread-8744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] client lang: <none>
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] server lang: <none>
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] kex follows: False
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] Compression: none
2025-11-26T00:45:35.998 [DEBUG] [Thread-8744] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:45:36.017 [DEBUG] [Thread-8744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:45:36.018 [DEBUG] [Thread-8744] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:45:36.018 [DEBUG] [Thread-8744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:45:36.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:45:36.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:45:36.020 [DEBUG] [Thread-8744] [transport.py] [_log()] userauth is OK
2025-11-26T00:45:36.020 [DEBUG] [Thread-8744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:45:36.020 [DEBUG] [Thread-8744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:45:36.020 [DEBUG] [Thread-8744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:45:36.020 [DEBUG] [Thread-8744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:45:36.044 [INFO] [Thread-8744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:45:36.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:45:36.686 [DEBUG] [Thread-8744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:45:36.687 [DEBUG] [Thread-8744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:45:36.687 [DEBUG] [Thread-8744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:45:36.728 [DEBUG] [Thread-8744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:45:36.728 [DEBUG] [Thread-8744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:45:36.732 [DEBUG] [Thread-8744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:45:36.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:45:36.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:45:36.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:45:36.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:45:36.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:45:36.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:45:36.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:45:36.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:45:36.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:45:36.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.948013 -999.00  +19.80   9.63     17   -5.50 1 1 1 1 1     0    0 26.12 14.07 ZNESW 9.5 9.6 141.4 11.4 19.6 -26.5 19.5 -25.9 19.3 -24.6 19.5 -25.6
2025-11-26T00:45:36.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:45:36.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:45:36.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.948013
2025-11-26T00:45:36.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:45:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:45:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:45:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:45:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:45:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:45:00', tmtdew=30.36, humidity=12.0, cloud=0.0, wind=16.27, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:45:33', seeing=1.22, atlas_timestamp='2025-11-25T22:45:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:42:00')
2025-11-26T00:45:36.758 [DEBUG] [Thread-8744] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:45:36.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:45:36.857 [DEBUG] [Thread-8747] [transport.py] [_log()] starting thread (client mode): 0x70de4280
2025-11-26T00:45:36.857 [DEBUG] [Thread-8747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:45:36.872 [DEBUG] [Thread-8747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:45:36.873 [INFO] [Thread-8747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:45:36.880 [DEBUG] [Thread-8747] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:45:36.880 [DEBUG] [Thread-8747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:45:36.880 [DEBUG] [Thread-8747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] client lang: <none>
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] server lang: <none>
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] kex follows: False
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] Compression: none
2025-11-26T00:45:36.881 [DEBUG] [Thread-8747] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:45:36.941 [DEBUG] [Thread-8747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:45:36.942 [DEBUG] [Thread-8747] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:45:36.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:45:36.943 [DEBUG] [Thread-8747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:45:36.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:45:37.007 [DEBUG] [Thread-8747] [transport.py] [_log()] userauth is OK
2025-11-26T00:45:37.008 [DEBUG] [Thread-8747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:45:37.008 [DEBUG] [Thread-8747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:45:37.008 [DEBUG] [Thread-8747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:45:37.008 [DEBUG] [Thread-8747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:45:37.027 [INFO] [Thread-8747] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:45:37.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:45:37.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:45:37.879 [DEBUG] [Thread-8747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:45:37.880 [DEBUG] [Thread-8747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:45:37.928 [DEBUG] [Thread-8747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:45:37.928 [DEBUG] [Thread-8747] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:45:37.937 [DEBUG] [Thread-8747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:45:37.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:45:37.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')
2025-11-26T00:45:37.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:45:37.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:45:37.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:45:37.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:45:37.971 [DEBUG] [Thread-8747] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:45:41.521 [DEBUG] [Thread-8749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:42.371 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:52.783 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:45:56.567 [DEBUG] [Thread-8750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:03.156 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:07.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:46:07.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:46:07.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:46:08.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 46, 4), 30.28, 12.01, 0.0, 15.79, 19.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:46:08.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:46:04
2025-11-26T00:46:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:46:08.907 [DEBUG] [Thread-8751] [transport.py] [_log()] starting thread (client mode): 0x70de57b0
2025-11-26T00:46:08.907 [DEBUG] [Thread-8751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:46:08.927 [DEBUG] [Thread-8751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:46:08.927 [INFO] [Thread-8751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] client lang: <none>
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] server lang: <none>
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] kex follows: False
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:46:08.930 [DEBUG] [Thread-8751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:46:08.931 [DEBUG] [Thread-8751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:46:08.931 [DEBUG] [Thread-8751] [transport.py] [_log()] Compression: none
2025-11-26T00:46:08.931 [DEBUG] [Thread-8751] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:46:08.945 [DEBUG] [Thread-8751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:46:08.946 [DEBUG] [Thread-8751] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:46:08.946 [DEBUG] [Thread-8751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:46:08.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:46:08.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:46:08.989 [DEBUG] [Thread-8751] [transport.py] [_log()] userauth is OK
2025-11-26T00:46:08.989 [DEBUG] [Thread-8751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:46:08.989 [DEBUG] [Thread-8751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:46:08.989 [DEBUG] [Thread-8751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:46:08.990 [DEBUG] [Thread-8751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:46:09.011 [INFO] [Thread-8751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:46:09.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:46:09.633 [DEBUG] [Thread-8751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:46:09.634 [DEBUG] [Thread-8751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:46:09.634 [DEBUG] [Thread-8751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:46:09.675 [DEBUG] [Thread-8751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:46:09.675 [DEBUG] [Thread-8751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:46:09.678 [DEBUG] [Thread-8751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:46:09.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:46:09.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:46:09.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:46:09.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:46:09.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:46:09.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:46:09.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:46:09.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:46:09.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:46:09.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.948361 -999.00  +19.90  14.52     17   -5.60 1 1 1 1 1     0    0 25.87 14.30 ZNESW 12.7 14.5 141.2 16.3 19.6 -26.5 19.6 -26.0 19.2 -24.5 19.4 -25.6
2025-11-26T00:46:09.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:46:09.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:46:09.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.948361
2025-11-26T00:46:09.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:46:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:46:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:46:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:46:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:46:09.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:46:04', tmtdew=30.28, humidity=12.01, cloud=0.0, wind=15.79, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:46:05', seeing=1.48, atlas_timestamp='2025-11-25T22:45:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.015249999999999986, -0.014749999999999375, -0.010000000000001563, 0.013500000000000512, 0.08425000000000082, -0.0035000000000007248, -0.025749999999998607, -0.007500000000000284, 0.006999999999999673, 0.042749999999999844, -0.005000000000000782, 0.10050000000000026, 0.04324999999999868, -0.014000000000001123, -0.0259999999999998, 0.0072499999999990905, -0.022500000000000853, 0.004499999999998394, -0.047750000000000625, 0.09599999999999831, 0.07774999999999821, 0.015249999999999986, -0.029749999999999943, -0.02000000000000135, -0.01649999999999885, -0.03575000000000017, 0.027499999999999858, 0.11700000000000088, 0.0710000000000015, 0.04600000000000115, -0.023999999999999133, -0.039750000000001506], zp_timestamp='2025-11-25T22:42:00')
2025-11-26T00:46:09.706 [DEBUG] [Thread-8751] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:46:09.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:46:09.812 [DEBUG] [Thread-8754] [transport.py] [_log()] starting thread (client mode): 0x70d68dc0
2025-11-26T00:46:09.812 [DEBUG] [Thread-8754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:46:09.828 [DEBUG] [Thread-8754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:46:09.828 [INFO] [Thread-8754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:46:09.836 [DEBUG] [Thread-8754] [transport.py] [_log()] client lang: <none>
2025-11-26T00:46:09.837 [DEBUG] [Thread-8754] [transport.py] [_log()] server lang: <none>
2025-11-26T00:46:09.837 [DEBUG] [Thread-8754] [transport.py] [_log()] kex follows: False
2025-11-26T00:46:09.837 [DEBUG] [Thread-8754] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:46:09.837 [DEBUG] [Thread-8754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:46:09.837 [DEBUG] [Thread-8754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:46:09.837 [DEBUG] [Thread-8754] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:46:09.837 [DEBUG] [Thread-8754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:46:09.837 [DEBUG] [Thread-8754] [transport.py] [_log()] Compression: none
2025-11-26T00:46:09.837 [DEBUG] [Thread-8754] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:46:09.895 [DEBUG] [Thread-8754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:46:09.895 [DEBUG] [Thread-8754] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:46:09.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:46:09.896 [DEBUG] [Thread-8754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:46:09.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:46:09.952 [DEBUG] [Thread-8754] [transport.py] [_log()] userauth is OK
2025-11-26T00:46:09.952 [DEBUG] [Thread-8754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:46:09.952 [DEBUG] [Thread-8754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:46:09.952 [DEBUG] [Thread-8754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:46:09.952 [DEBUG] [Thread-8754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:46:09.971 [INFO] [Thread-8754] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:46:09.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:46:09.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:46:10.819 [DEBUG] [Thread-8754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:46:10.819 [DEBUG] [Thread-8754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:46:10.868 [DEBUG] [Thread-8754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:46:10.868 [DEBUG] [Thread-8754] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:46:10.877 [DEBUG] [Thread-8754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:46:10.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:46:10.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:46:10.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:46:10.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:46:10.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:46:10.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:46:10.914 [DEBUG] [Thread-8754] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:46:11.603 [DEBUG] [Thread-8756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:13.565 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:13.837 [DEBUG] [Thread-8757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:22.619 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:22.620 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:23.939 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:26.657 [DEBUG] [Thread-8758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:34.339 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:40.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:46:40.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:46:40.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:46:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 46, 36), 30.32, 12.03, 0.0, 15.67, 19.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:46:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:46:36
2025-11-26T00:46:41.691 [DEBUG] [Thread-8759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:41.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:46:41.883 [DEBUG] [Thread-8760] [transport.py] [_log()] starting thread (client mode): 0x70dbf610
2025-11-26T00:46:41.883 [DEBUG] [Thread-8760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:46:41.903 [DEBUG] [Thread-8760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:46:41.903 [INFO] [Thread-8760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:46:41.906 [DEBUG] [Thread-8760] [transport.py] [_log()] client lang: <none>
2025-11-26T00:46:41.907 [DEBUG] [Thread-8760] [transport.py] [_log()] server lang: <none>
2025-11-26T00:46:41.907 [DEBUG] [Thread-8760] [transport.py] [_log()] kex follows: False
2025-11-26T00:46:41.907 [DEBUG] [Thread-8760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:46:41.907 [DEBUG] [Thread-8760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:46:41.907 [DEBUG] [Thread-8760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:46:41.907 [DEBUG] [Thread-8760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:46:41.907 [DEBUG] [Thread-8760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:46:41.907 [DEBUG] [Thread-8760] [transport.py] [_log()] Compression: none
2025-11-26T00:46:41.907 [DEBUG] [Thread-8760] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:46:41.927 [DEBUG] [Thread-8760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:46:41.927 [DEBUG] [Thread-8760] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:46:41.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:46:41.929 [DEBUG] [Thread-8760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:46:41.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:46:41.931 [DEBUG] [Thread-8760] [transport.py] [_log()] userauth is OK
2025-11-26T00:46:41.931 [DEBUG] [Thread-8760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:46:41.932 [DEBUG] [Thread-8760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:46:41.932 [DEBUG] [Thread-8760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:46:41.932 [DEBUG] [Thread-8760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:46:41.967 [INFO] [Thread-8760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:46:41.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:46:42.617 [DEBUG] [Thread-8760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:46:42.617 [DEBUG] [Thread-8760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:46:42.617 [DEBUG] [Thread-8760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:46:42.658 [DEBUG] [Thread-8760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:46:42.658 [DEBUG] [Thread-8760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:46:42.662 [DEBUG] [Thread-8760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:46:42.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:46:42.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:46:42.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:46:42.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:46:42.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:46:42.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:46:42.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:46:42.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:46:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:46:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.948708 -999.00  +19.90  10.12     17   -5.70 1 1 1 1 1     0    0 25.89 16.56 ZNESW 10.2 10.1 130.6 14.3 19.6 -26.7 19.5 -26.1 19.2 -24.8 19.4 -25.6
2025-11-26T00:46:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:46:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:46:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.948708
2025-11-26T00:46:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:46:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:46:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:46:42.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:46:42.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:46:42.688 [DEBUG] [Thread-8760] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:46:42.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:46:36', tmtdew=30.32, humidity=12.03, cloud=0.0, wind=15.67, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:46:37', seeing=1.47, atlas_timestamp='2025-11-25T22:46:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:44:00')
2025-11-26T00:46:42.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:46:42.784 [DEBUG] [Thread-8763] [transport.py] [_log()] starting thread (client mode): 0x70de4a90
2025-11-26T00:46:42.784 [DEBUG] [Thread-8763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:46:42.799 [DEBUG] [Thread-8763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:46:42.799 [INFO] [Thread-8763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:46:42.807 [DEBUG] [Thread-8763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:46:42.807 [DEBUG] [Thread-8763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:46:42.807 [DEBUG] [Thread-8763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:46:42.807 [DEBUG] [Thread-8763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:46:42.807 [DEBUG] [Thread-8763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:46:42.807 [DEBUG] [Thread-8763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:46:42.807 [DEBUG] [Thread-8763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:46:42.807 [DEBUG] [Thread-8763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:46:42.807 [DEBUG] [Thread-8763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] client lang: <none>
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] server lang: <none>
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] kex follows: False
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] Compression: none
2025-11-26T00:46:42.808 [DEBUG] [Thread-8763] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:46:42.870 [DEBUG] [Thread-8763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:46:42.871 [DEBUG] [Thread-8763] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:46:42.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:46:42.872 [DEBUG] [Thread-8763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:46:42.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:46:42.927 [DEBUG] [Thread-8763] [transport.py] [_log()] userauth is OK
2025-11-26T00:46:42.928 [DEBUG] [Thread-8763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:46:42.928 [DEBUG] [Thread-8763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:46:42.928 [DEBUG] [Thread-8763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:46:42.928 [DEBUG] [Thread-8763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:46:42.947 [INFO] [Thread-8763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:46:42.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:46:42.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:46:43.797 [DEBUG] [Thread-8763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:46:43.797 [DEBUG] [Thread-8763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:46:43.845 [DEBUG] [Thread-8763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:46:43.845 [DEBUG] [Thread-8763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:46:43.854 [DEBUG] [Thread-8763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:46:43.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:46:43.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:46:43.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:46:43.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:46:43.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:46:43.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:46:43.891 [DEBUG] [Thread-8763] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:46:44.688 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:55.017 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:46:56.721 [DEBUG] [Thread-8765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:05.425 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:11.772 [DEBUG] [Thread-8766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:13.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:47:13.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:47:13.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:47:13.916 [DEBUG] [Thread-8767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:14.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 47, 9), 30.3, 12.05, 0.0, 15.28, 19.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:47:14.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:47:09
2025-11-26T00:47:14.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:47:14.842 [DEBUG] [Thread-8768] [transport.py] [_log()] starting thread (client mode): 0x70da67a0
2025-11-26T00:47:14.842 [DEBUG] [Thread-8768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:47:14.863 [DEBUG] [Thread-8768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:47:14.863 [INFO] [Thread-8768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:47:14.866 [DEBUG] [Thread-8768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:47:14.866 [DEBUG] [Thread-8768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:47:14.866 [DEBUG] [Thread-8768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:47:14.866 [DEBUG] [Thread-8768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] client lang: <none>
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] server lang: <none>
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] kex follows: False
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] Compression: none
2025-11-26T00:47:14.867 [DEBUG] [Thread-8768] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:47:14.885 [DEBUG] [Thread-8768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:47:14.886 [DEBUG] [Thread-8768] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:47:14.886 [DEBUG] [Thread-8768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:47:14.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:47:14.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:47:14.889 [DEBUG] [Thread-8768] [transport.py] [_log()] userauth is OK
2025-11-26T00:47:14.889 [DEBUG] [Thread-8768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:47:14.889 [DEBUG] [Thread-8768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:47:14.889 [DEBUG] [Thread-8768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:47:14.889 [DEBUG] [Thread-8768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:47:14.914 [INFO] [Thread-8768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:47:14.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:47:15.562 [DEBUG] [Thread-8768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:47:15.562 [DEBUG] [Thread-8768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:47:15.562 [DEBUG] [Thread-8768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:47:15.603 [DEBUG] [Thread-8768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:47:15.603 [DEBUG] [Thread-8768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:47:15.606 [DEBUG] [Thread-8768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:47:15.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:47:15.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:47:15.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:47:15.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:47:15.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:47:15.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:47:15.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:47:15.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:47:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:47:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.949055 -999.00  +19.90  10.37     17   -5.60 1 1 1 1 1     0    0 25.59 16.76 ZNESW 9.6 10.4 127.4 11.8 19.6 -26.6 19.5 -26.0 19.2 -24.7 19.5 -25.6
2025-11-26T00:47:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:47:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:47:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.949055
2025-11-26T00:47:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:47:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:47:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:47:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:47:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:47:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:47:09', tmtdew=30.3, humidity=12.05, cloud=0.0, wind=15.28, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:47:09', seeing=1.28, atlas_timestamp='2025-11-25T22:46:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:44:00')
2025-11-26T00:47:15.630 [DEBUG] [Thread-8768] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:47:15.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:47:15.725 [DEBUG] [Thread-8771] [transport.py] [_log()] starting thread (client mode): 0x70de4400
2025-11-26T00:47:15.725 [DEBUG] [Thread-8771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:47:15.740 [DEBUG] [Thread-8771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:47:15.740 [INFO] [Thread-8771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:47:15.747 [DEBUG] [Thread-8771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] client lang: <none>
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] server lang: <none>
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] kex follows: False
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] Compression: none
2025-11-26T00:47:15.748 [DEBUG] [Thread-8771] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:47:15.807 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:15.808 [DEBUG] [Thread-8771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:47:15.808 [DEBUG] [Thread-8771] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:47:15.809 [DEBUG] [Thread-8771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:47:15.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:47:15.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:47:15.864 [DEBUG] [Thread-8771] [transport.py] [_log()] userauth is OK
2025-11-26T00:47:15.864 [DEBUG] [Thread-8771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:47:15.864 [DEBUG] [Thread-8771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:47:15.864 [DEBUG] [Thread-8771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:47:15.864 [DEBUG] [Thread-8771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:47:15.883 [INFO] [Thread-8771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:47:15.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:47:15.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:47:16.725 [DEBUG] [Thread-8771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:47:16.726 [DEBUG] [Thread-8771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:47:16.773 [DEBUG] [Thread-8771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:47:16.773 [DEBUG] [Thread-8771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:47:16.782 [DEBUG] [Thread-8771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:47:16.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:47:16.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:47:16.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:47:16.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:47:16.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:47:16.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:47:16.816 [DEBUG] [Thread-8771] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:47:22.818 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:22.819 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:26.232 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:26.805 [DEBUG] [Thread-8773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:36.617 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:41.852 [DEBUG] [Thread-8774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:47:46.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:47:46.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:47:47.006 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:47.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 47, 41), 30.41, 11.96, 0.0, 12.18, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:47:47.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:47:41
2025-11-26T00:47:47.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:47:47.746 [DEBUG] [Thread-8775] [transport.py] [_log()] starting thread (client mode): 0x70d7f1c0
2025-11-26T00:47:47.746 [DEBUG] [Thread-8775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:47:47.766 [DEBUG] [Thread-8775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:47:47.767 [INFO] [Thread-8775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:47:47.770 [DEBUG] [Thread-8775] [transport.py] [_log()] client lang: <none>
2025-11-26T00:47:47.771 [DEBUG] [Thread-8775] [transport.py] [_log()] server lang: <none>
2025-11-26T00:47:47.771 [DEBUG] [Thread-8775] [transport.py] [_log()] kex follows: False
2025-11-26T00:47:47.771 [DEBUG] [Thread-8775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:47:47.771 [DEBUG] [Thread-8775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:47:47.771 [DEBUG] [Thread-8775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:47:47.771 [DEBUG] [Thread-8775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:47:47.771 [DEBUG] [Thread-8775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:47:47.771 [DEBUG] [Thread-8775] [transport.py] [_log()] Compression: none
2025-11-26T00:47:47.771 [DEBUG] [Thread-8775] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:47:47.789 [DEBUG] [Thread-8775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:47:47.790 [DEBUG] [Thread-8775] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:47:47.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:47:47.791 [DEBUG] [Thread-8775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:47:47.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:47:47.793 [DEBUG] [Thread-8775] [transport.py] [_log()] userauth is OK
2025-11-26T00:47:47.793 [DEBUG] [Thread-8775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:47:47.793 [DEBUG] [Thread-8775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:47:47.793 [DEBUG] [Thread-8775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:47:47.793 [DEBUG] [Thread-8775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:47:47.816 [INFO] [Thread-8775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:47:47.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:47:48.460 [DEBUG] [Thread-8775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:47:48.460 [DEBUG] [Thread-8775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:47:48.461 [DEBUG] [Thread-8775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:47:48.501 [DEBUG] [Thread-8775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:47:48.501 [DEBUG] [Thread-8775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:47:48.504 [DEBUG] [Thread-8775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:47:48.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:47:48.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:47:48.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:47:48.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:47:48.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:47:48.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:47:48.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:47:48.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:47:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:47:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.949750 -999.00  +19.90   9.87     17   -5.50 1 1 1 1 1     0    0 25.79 18.18 ZNESW 10.4 9.9 133.2 14.4 19.6 -26.4 19.5 -26.0 19.2 -24.6 19.4 -25.3
2025-11-26T00:47:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:47:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:47:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.949750
2025-11-26T00:47:48.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:47:48.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:47:48.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:47:48.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:47:48.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:47:48.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:47:41', tmtdew=30.41, humidity=11.96, cloud=0.0, wind=12.18, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:47:41', seeing=1.23, atlas_timestamp='2025-11-25T22:47:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:44:00')
2025-11-26T00:47:48.522 [DEBUG] [Thread-8775] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:47:48.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:47:48.615 [DEBUG] [Thread-8778] [transport.py] [_log()] starting thread (client mode): 0x70d7df60
2025-11-26T00:47:48.616 [DEBUG] [Thread-8778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:47:48.630 [DEBUG] [Thread-8778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:47:48.630 [INFO] [Thread-8778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:47:48.638 [DEBUG] [Thread-8778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:47:48.638 [DEBUG] [Thread-8778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] client lang: <none>
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] server lang: <none>
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] kex follows: False
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] Compression: none
2025-11-26T00:47:48.639 [DEBUG] [Thread-8778] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:47:48.697 [DEBUG] [Thread-8778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:47:48.698 [DEBUG] [Thread-8778] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:47:48.698 [DEBUG] [Thread-8778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:47:48.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:47:48.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:47:48.756 [DEBUG] [Thread-8778] [transport.py] [_log()] userauth is OK
2025-11-26T00:47:48.757 [DEBUG] [Thread-8778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:47:48.757 [DEBUG] [Thread-8778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:47:48.757 [DEBUG] [Thread-8778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:47:48.757 [DEBUG] [Thread-8778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:47:48.776 [INFO] [Thread-8778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:47:48.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:47:48.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:47:49.636 [DEBUG] [Thread-8778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:47:49.636 [DEBUG] [Thread-8778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:47:49.684 [DEBUG] [Thread-8778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:47:49.684 [DEBUG] [Thread-8778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:47:49.693 [DEBUG] [Thread-8778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:47:49.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:47:49.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:47:49.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:47:49.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:47:49.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:47:49.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:47:49.730 [DEBUG] [Thread-8778] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:47:56.891 [DEBUG] [Thread-8780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:47:57.401 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:07.908 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:11.941 [DEBUG] [Thread-8781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:13.989 [DEBUG] [Thread-8782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:18.294 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:19.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:48:19.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:48:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:48:20.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 48, 13), 30.48, 11.91, 0.0, 12.93, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:48:20.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:48:13
2025-11-26T00:48:20.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:48:20.677 [DEBUG] [Thread-8783] [transport.py] [_log()] starting thread (client mode): 0x70d6a6b0
2025-11-26T00:48:20.677 [DEBUG] [Thread-8783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:48:20.696 [DEBUG] [Thread-8783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:48:20.696 [INFO] [Thread-8783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:48:20.699 [DEBUG] [Thread-8783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:48:20.699 [DEBUG] [Thread-8783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:48:20.699 [DEBUG] [Thread-8783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:48:20.699 [DEBUG] [Thread-8783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:48:20.699 [DEBUG] [Thread-8783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:48:20.699 [DEBUG] [Thread-8783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:48:20.699 [DEBUG] [Thread-8783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:48:20.699 [DEBUG] [Thread-8783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:48:20.699 [DEBUG] [Thread-8783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] client lang: <none>
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] server lang: <none>
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] kex follows: False
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] Compression: none
2025-11-26T00:48:20.700 [DEBUG] [Thread-8783] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:48:20.718 [DEBUG] [Thread-8783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:48:20.718 [DEBUG] [Thread-8783] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:48:20.719 [DEBUG] [Thread-8783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:48:20.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:48:20.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:48:20.721 [DEBUG] [Thread-8783] [transport.py] [_log()] userauth is OK
2025-11-26T00:48:20.721 [DEBUG] [Thread-8783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:48:20.722 [DEBUG] [Thread-8783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:48:20.722 [DEBUG] [Thread-8783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:48:20.722 [DEBUG] [Thread-8783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:48:20.739 [INFO] [Thread-8783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:48:20.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:48:21.401 [DEBUG] [Thread-8783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:48:21.402 [DEBUG] [Thread-8783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:48:21.402 [DEBUG] [Thread-8783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:48:21.443 [DEBUG] [Thread-8783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:48:21.443 [DEBUG] [Thread-8783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:48:21.447 [DEBUG] [Thread-8783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:48:21.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:48:21.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:48:21.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:48:21.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:48:21.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:48:21.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:48:21.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:48:21.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:48:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:48:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.950097 -999.00  +20.00   9.51     17   -5.50 1 1 1 1 1     0    0 25.92 19.55 ZNESW 8.5 9.5 133.2 13.1 19.6 -26.5 19.5 -25.9 19.2 -24.7 19.4 -25.8
2025-11-26T00:48:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:48:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:48:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.950097
2025-11-26T00:48:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:48:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:48:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:48:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:48:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:48:21.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:48:13', tmtdew=30.48, humidity=11.91, cloud=0.0, wind=12.93, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:48:13', seeing=1.17, atlas_timestamp='2025-11-25T22:48:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:44:00')
2025-11-26T00:48:21.474 [DEBUG] [Thread-8783] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:48:21.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:48:21.570 [DEBUG] [Thread-8786] [transport.py] [_log()] starting thread (client mode): 0x70d39270
2025-11-26T00:48:21.571 [DEBUG] [Thread-8786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:48:21.589 [DEBUG] [Thread-8786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:48:21.589 [INFO] [Thread-8786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:48:21.597 [DEBUG] [Thread-8786] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:48:21.597 [DEBUG] [Thread-8786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:48:21.597 [DEBUG] [Thread-8786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:48:21.597 [DEBUG] [Thread-8786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:48:21.597 [DEBUG] [Thread-8786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:48:21.597 [DEBUG] [Thread-8786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:48:21.597 [DEBUG] [Thread-8786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:48:21.597 [DEBUG] [Thread-8786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:48:21.597 [DEBUG] [Thread-8786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] client lang: <none>
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] server lang: <none>
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] kex follows: False
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] Compression: none
2025-11-26T00:48:21.598 [DEBUG] [Thread-8786] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:48:21.655 [DEBUG] [Thread-8786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:48:21.655 [DEBUG] [Thread-8786] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:48:21.655 [DEBUG] [Thread-8786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:48:21.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:48:21.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:48:21.712 [DEBUG] [Thread-8786] [transport.py] [_log()] userauth is OK
2025-11-26T00:48:21.713 [DEBUG] [Thread-8786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:48:21.713 [DEBUG] [Thread-8786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:48:21.713 [DEBUG] [Thread-8786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:48:21.713 [DEBUG] [Thread-8786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:48:21.729 [INFO] [Thread-8786] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:48:21.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:48:21.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:48:22.531 [DEBUG] [Thread-8786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:48:22.531 [DEBUG] [Thread-8786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:48:22.579 [DEBUG] [Thread-8786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:48:22.579 [DEBUG] [Thread-8786] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:48:22.588 [DEBUG] [Thread-8786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:48:22.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:48:22.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:48:22.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:48:22.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:48:22.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:48:22.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:48:22.624 [DEBUG] [Thread-8786] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:48:23.022 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:23.023 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:26.974 [DEBUG] [Thread-8788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:28.712 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:39.124 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:42.041 [DEBUG] [Thread-8789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:49.505 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:52.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:48:52.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:48:52.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:48:53.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 48, 45), 30.38, 11.93, 0.0, 13.31, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:48:53.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:48:45
2025-11-26T00:48:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:48:53.561 [DEBUG] [Thread-8790] [transport.py] [_log()] starting thread (client mode): 0x70d382b0
2025-11-26T00:48:53.561 [DEBUG] [Thread-8790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:48:53.574 [DEBUG] [Thread-8790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:48:53.574 [INFO] [Thread-8790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] client lang: <none>
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] server lang: <none>
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] kex follows: False
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] Compression: none
2025-11-26T00:48:53.575 [DEBUG] [Thread-8790] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:48:53.583 [DEBUG] [Thread-8790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:48:53.584 [DEBUG] [Thread-8790] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:48:53.584 [DEBUG] [Thread-8790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:48:53.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:48:53.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:48:53.585 [DEBUG] [Thread-8790] [transport.py] [_log()] userauth is OK
2025-11-26T00:48:53.585 [DEBUG] [Thread-8790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:48:53.585 [DEBUG] [Thread-8790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:48:53.585 [DEBUG] [Thread-8790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:48:53.585 [DEBUG] [Thread-8790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:48:53.595 [INFO] [Thread-8790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:48:53.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:48:54.200 [DEBUG] [Thread-8790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:48:54.200 [DEBUG] [Thread-8790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:48:54.200 [DEBUG] [Thread-8790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:48:54.240 [DEBUG] [Thread-8790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:48:54.241 [DEBUG] [Thread-8790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:48:54.244 [DEBUG] [Thread-8790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:48:54.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:48:54.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:48:54.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:48:54.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:48:54.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:48:54.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:48:54.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:48:54.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:48:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:48:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.950444 -999.00  +19.90   9.24     17   -5.50 1 1 1 1 1     0    0 26.31 20.01 ZNESW 9.8 9.2 141.8 11.5 19.6 -26.6 19.5 -26.0 19.2 -24.9 19.4 -25.7
2025-11-26T00:48:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:48:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:48:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.950444
2025-11-26T00:48:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:48:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:48:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:48:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:48:54.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:48:54.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:48:45', tmtdew=30.38, humidity=11.93, cloud=0.0, wind=13.31, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:48:45', seeing=1.17, atlas_timestamp='2025-11-25T22:48:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:44:00')
2025-11-26T00:48:54.267 [DEBUG] [Thread-8790] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:48:54.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:48:54.362 [DEBUG] [Thread-8793] [transport.py] [_log()] starting thread (client mode): 0x70d420e0
2025-11-26T00:48:54.362 [DEBUG] [Thread-8793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:48:54.378 [DEBUG] [Thread-8793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:48:54.378 [INFO] [Thread-8793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:48:54.385 [DEBUG] [Thread-8793] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] client lang: <none>
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] server lang: <none>
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] kex follows: False
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] Compression: none
2025-11-26T00:48:54.386 [DEBUG] [Thread-8793] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:48:54.443 [DEBUG] [Thread-8793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:48:54.443 [DEBUG] [Thread-8793] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:48:54.443 [DEBUG] [Thread-8793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:48:54.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:48:54.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:48:54.501 [DEBUG] [Thread-8793] [transport.py] [_log()] userauth is OK
2025-11-26T00:48:54.501 [DEBUG] [Thread-8793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:48:54.501 [DEBUG] [Thread-8793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:48:54.501 [DEBUG] [Thread-8793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:48:54.501 [DEBUG] [Thread-8793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:48:54.517 [INFO] [Thread-8793] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:48:54.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:48:54.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:48:55.360 [DEBUG] [Thread-8793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:48:55.360 [DEBUG] [Thread-8793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:48:55.408 [DEBUG] [Thread-8793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:48:55.408 [DEBUG] [Thread-8793] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:48:55.417 [DEBUG] [Thread-8793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:48:55.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:48:55.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:48:55.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:48:55.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:48:55.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:48:55.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:48:55.454 [DEBUG] [Thread-8793] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:48:57.074 [DEBUG] [Thread-8795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:48:59.908 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:10.267 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:12.128 [DEBUG] [Thread-8796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:14.067 [DEBUG] [Thread-8797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:20.611 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:23.224 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:23.225 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:25.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:49:25.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:49:25.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:49:26.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 49, 17), 30.39, 11.9, 0.0, 14.03, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:49:26.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:49:17
2025-11-26T00:49:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:49:26.419 [DEBUG] [Thread-8798] [transport.py] [_log()] starting thread (client mode): 0x70dd1060
2025-11-26T00:49:26.419 [DEBUG] [Thread-8798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:49:26.430 [DEBUG] [Thread-8798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:49:26.430 [INFO] [Thread-8798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:49:26.431 [DEBUG] [Thread-8798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:49:26.431 [DEBUG] [Thread-8798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:49:26.431 [DEBUG] [Thread-8798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:49:26.431 [DEBUG] [Thread-8798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:49:26.431 [DEBUG] [Thread-8798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:49:26.431 [DEBUG] [Thread-8798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:49:26.431 [DEBUG] [Thread-8798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] client lang: <none>
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] server lang: <none>
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] kex follows: False
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] Compression: none
2025-11-26T00:49:26.432 [DEBUG] [Thread-8798] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:49:26.439 [DEBUG] [Thread-8798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:49:26.439 [DEBUG] [Thread-8798] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:49:26.439 [DEBUG] [Thread-8798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:49:26.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:49:26.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:49:26.440 [DEBUG] [Thread-8798] [transport.py] [_log()] userauth is OK
2025-11-26T00:49:26.440 [DEBUG] [Thread-8798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:49:26.440 [DEBUG] [Thread-8798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:49:26.440 [DEBUG] [Thread-8798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:49:26.440 [DEBUG] [Thread-8798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:49:26.451 [INFO] [Thread-8798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:49:26.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:49:27.049 [DEBUG] [Thread-8798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:49:27.049 [DEBUG] [Thread-8798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:49:27.049 [DEBUG] [Thread-8798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:49:27.089 [DEBUG] [Thread-8798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:49:27.089 [DEBUG] [Thread-8798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:49:27.091 [DEBUG] [Thread-8798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:49:27.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:49:27.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:49:27.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:49:27.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:49:27.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:49:27.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:49:27.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.950791 -999.00  +19.90  12.10     17   -5.60 1 1 1 1 1     0    0 26.10 18.51 ZNESW 9.8 12.1 145.4 14.1 19.5 -26.4 19.5 -25.9 19.2 -24.5 19.4 -25.5
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.950791
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:49:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:49:17', tmtdew=30.39, humidity=11.9, cloud=0.0, wind=14.03, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:49:17', seeing=1.53, atlas_timestamp='2025-11-25T22:49:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:47:00')
2025-11-26T00:49:27.106 [DEBUG] [Thread-8798] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:49:27.159 [DEBUG] [Thread-8801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:27.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:49:27.191 [DEBUG] [Thread-8802] [transport.py] [_log()] starting thread (client mode): 0x70d6a5c0
2025-11-26T00:49:27.191 [DEBUG] [Thread-8802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:49:27.206 [DEBUG] [Thread-8802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:49:27.206 [INFO] [Thread-8802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] client lang: <none>
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] server lang: <none>
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] kex follows: False
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] Compression: none
2025-11-26T00:49:27.214 [DEBUG] [Thread-8802] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:49:27.276 [DEBUG] [Thread-8802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:49:27.276 [DEBUG] [Thread-8802] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:49:27.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:49:27.276 [DEBUG] [Thread-8802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:49:27.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:49:27.333 [DEBUG] [Thread-8802] [transport.py] [_log()] userauth is OK
2025-11-26T00:49:27.333 [DEBUG] [Thread-8802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:49:27.333 [DEBUG] [Thread-8802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:49:27.333 [DEBUG] [Thread-8802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:49:27.333 [DEBUG] [Thread-8802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:49:27.348 [INFO] [Thread-8802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:49:27.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:49:27.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:49:28.177 [DEBUG] [Thread-8802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:49:28.177 [DEBUG] [Thread-8802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:49:28.225 [DEBUG] [Thread-8802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:49:28.225 [DEBUG] [Thread-8802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:49:28.233 [DEBUG] [Thread-8802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:49:28.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:49:28.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:49:28.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:49:28.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:49:28.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:49:28.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:49:28.265 [DEBUG] [Thread-8802] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:49:31.000 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:41.388 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:42.202 [DEBUG] [Thread-8804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:51.788 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:57.241 [DEBUG] [Thread-8805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:49:58.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:49:58.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:49:58.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:49:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 49, 49), 30.23, 12.08, 0.0, 12.11, 19.81, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:49:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:49:49
2025-11-26T00:49:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:49:59.216 [DEBUG] [Thread-8806] [transport.py] [_log()] starting thread (client mode): 0x70dd1a80
2025-11-26T00:49:59.216 [DEBUG] [Thread-8806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:49:59.237 [DEBUG] [Thread-8806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:49:59.237 [INFO] [Thread-8806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] client lang: <none>
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] server lang: <none>
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] kex follows: False
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] Compression: none
2025-11-26T00:49:59.240 [DEBUG] [Thread-8806] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:49:59.256 [DEBUG] [Thread-8806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:49:59.257 [DEBUG] [Thread-8806] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:49:59.258 [DEBUG] [Thread-8806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:49:59.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:49:59.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:49:59.260 [DEBUG] [Thread-8806] [transport.py] [_log()] userauth is OK
2025-11-26T00:49:59.260 [DEBUG] [Thread-8806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:49:59.260 [DEBUG] [Thread-8806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:49:59.260 [DEBUG] [Thread-8806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:49:59.260 [DEBUG] [Thread-8806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:49:59.284 [INFO] [Thread-8806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:49:59.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:50:00.051 [DEBUG] [Thread-8806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:50:00.051 [DEBUG] [Thread-8806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:50:00.052 [DEBUG] [Thread-8806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:50:00.093 [DEBUG] [Thread-8806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:50:00.093 [DEBUG] [Thread-8806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:50:00.095 [DEBUG] [Thread-8806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:50:00.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:50:00.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:50:00.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:50:00.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:50:00.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:50:00.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:50:00.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:50:00.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:50:00.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:50:00.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.951139 -999.00  +19.90   9.84     17   -5.60 1 1 1 1 1     0    0 25.95 17.52 ZNESW 10.4 9.8 136.8 12.8 19.5 -26.5 19.5 -26.1 19.1 -24.6 19.4 -25.5
2025-11-26T00:50:00.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:50:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:50:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.951139
2025-11-26T00:50:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:50:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:50:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:50:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:50:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:50:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:49:49', tmtdew=30.23, humidity=12.08, cloud=0.0, wind=12.11, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:49:49', seeing=1.53, atlas_timestamp='2025-11-25T22:49:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:47:00')
2025-11-26T00:50:00.120 [DEBUG] [Thread-8806] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:50:00.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:50:00.217 [DEBUG] [Thread-8809] [transport.py] [_log()] starting thread (client mode): 0x70d68dc0
2025-11-26T00:50:00.218 [DEBUG] [Thread-8809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:50:00.232 [DEBUG] [Thread-8809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:50:00.232 [INFO] [Thread-8809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:50:00.240 [DEBUG] [Thread-8809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:50:00.240 [DEBUG] [Thread-8809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:50:00.240 [DEBUG] [Thread-8809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:50:00.240 [DEBUG] [Thread-8809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:50:00.240 [DEBUG] [Thread-8809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:50:00.240 [DEBUG] [Thread-8809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:50:00.240 [DEBUG] [Thread-8809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] client lang: <none>
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] server lang: <none>
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] kex follows: False
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] Compression: none
2025-11-26T00:50:00.241 [DEBUG] [Thread-8809] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:50:00.297 [DEBUG] [Thread-8809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:50:00.298 [DEBUG] [Thread-8809] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:50:00.298 [DEBUG] [Thread-8809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:50:00.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:50:00.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:50:00.354 [DEBUG] [Thread-8809] [transport.py] [_log()] userauth is OK
2025-11-26T00:50:00.355 [DEBUG] [Thread-8809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:50:00.355 [DEBUG] [Thread-8809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:50:00.355 [DEBUG] [Thread-8809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:50:00.355 [DEBUG] [Thread-8809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:50:00.374 [INFO] [Thread-8809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:50:00.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:50:00.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:50:01.195 [DEBUG] [Thread-8809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:50:01.196 [DEBUG] [Thread-8809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:50:01.244 [DEBUG] [Thread-8809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:50:01.244 [DEBUG] [Thread-8809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:50:01.253 [DEBUG] [Thread-8809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:50:01.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:50:01.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:50:01.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:50:01.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:50:01.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:50:01.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:50:01.290 [DEBUG] [Thread-8809] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:50:02.152 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:12.275 [DEBUG] [Thread-8811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:12.552 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:14.148 [DEBUG] [Thread-8812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:22.935 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:23.429 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:23.430 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:27.321 [DEBUG] [Thread-8813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:31.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:50:31.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:50:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:50:31.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 50, 21), 30.19, 12.1, 0.0, 12.49, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:50:31.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:50:21
2025-11-26T00:50:32.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:50:32.206 [DEBUG] [Thread-8814] [transport.py] [_log()] starting thread (client mode): 0x70d6bfa0
2025-11-26T00:50:32.206 [DEBUG] [Thread-8814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:50:32.227 [DEBUG] [Thread-8814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:50:32.227 [INFO] [Thread-8814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:50:32.229 [DEBUG] [Thread-8814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] client lang: <none>
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] server lang: <none>
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] kex follows: False
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] Compression: none
2025-11-26T00:50:32.230 [DEBUG] [Thread-8814] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:50:32.247 [DEBUG] [Thread-8814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:50:32.248 [DEBUG] [Thread-8814] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:50:32.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:50:32.249 [DEBUG] [Thread-8814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:50:32.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:50:32.251 [DEBUG] [Thread-8814] [transport.py] [_log()] userauth is OK
2025-11-26T00:50:32.251 [DEBUG] [Thread-8814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:50:32.252 [DEBUG] [Thread-8814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:50:32.252 [DEBUG] [Thread-8814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:50:32.252 [DEBUG] [Thread-8814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:50:32.269 [INFO] [Thread-8814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:50:32.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:50:32.897 [DEBUG] [Thread-8814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:50:32.897 [DEBUG] [Thread-8814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:50:32.898 [DEBUG] [Thread-8814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:50:32.938 [DEBUG] [Thread-8814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:50:32.938 [DEBUG] [Thread-8814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:50:32.942 [DEBUG] [Thread-8814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:50:32.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:50:32.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:50:32.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:50:32.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:50:32.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:50:32.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:50:32.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:50:32.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:50:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:50:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.951139 -999.00  +19.90   9.84     17   -5.60 1 1 1 1 1     0    0 25.95 17.52 ZNESW 10.4 9.8 136.8 12.8 19.5 -26.5 19.5 -26.1 19.1 -24.6 19.4 -25.5
2025-11-26T00:50:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:50:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:50:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.951139
2025-11-26T00:50:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:50:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:50:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:50:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:50:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:50:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:50:21', tmtdew=30.19, humidity=12.1, cloud=0.0, wind=12.49, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:50:21', seeing=1.44, atlas_timestamp='2025-11-25T22:49:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:47:00')
2025-11-26T00:50:32.968 [DEBUG] [Thread-8814] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:50:33.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:50:33.063 [DEBUG] [Thread-8817] [transport.py] [_log()] starting thread (client mode): 0x70dd2b30
2025-11-26T00:50:33.063 [DEBUG] [Thread-8817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:50:33.079 [DEBUG] [Thread-8817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:50:33.079 [INFO] [Thread-8817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:50:33.086 [DEBUG] [Thread-8817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:50:33.086 [DEBUG] [Thread-8817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] client lang: <none>
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] server lang: <none>
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] kex follows: False
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:50:33.087 [DEBUG] [Thread-8817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:50:33.088 [DEBUG] [Thread-8817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:50:33.088 [DEBUG] [Thread-8817] [transport.py] [_log()] Compression: none
2025-11-26T00:50:33.088 [DEBUG] [Thread-8817] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:50:33.145 [DEBUG] [Thread-8817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:50:33.146 [DEBUG] [Thread-8817] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:50:33.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:50:33.146 [DEBUG] [Thread-8817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:50:33.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:50:33.203 [DEBUG] [Thread-8817] [transport.py] [_log()] userauth is OK
2025-11-26T00:50:33.203 [DEBUG] [Thread-8817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:50:33.203 [DEBUG] [Thread-8817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:50:33.203 [DEBUG] [Thread-8817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:50:33.203 [DEBUG] [Thread-8817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:50:33.222 [INFO] [Thread-8817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:50:33.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:50:33.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:50:33.288 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:34.056 [DEBUG] [Thread-8817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:50:34.056 [DEBUG] [Thread-8817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:50:34.104 [DEBUG] [Thread-8817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:50:34.104 [DEBUG] [Thread-8817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:50:34.113 [DEBUG] [Thread-8817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:50:34.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:50:34.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:50:34.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:50:34.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:50:34.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:50:34.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:50:34.150 [DEBUG] [Thread-8817] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:50:42.353 [DEBUG] [Thread-8819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:43.696 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:54.124 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:50:57.395 [DEBUG] [Thread-8820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:04.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:51:04.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:51:04.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:51:04.452 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:04.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 50, 53), 30.25, 12.1, 0.0, 12.58, 19.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:51:04.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:50:53
2025-11-26T00:51:04.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:51:05.083 [DEBUG] [Thread-8821] [transport.py] [_log()] starting thread (client mode): 0x7374e590
2025-11-26T00:51:05.083 [DEBUG] [Thread-8821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:51:05.102 [DEBUG] [Thread-8821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:51:05.103 [INFO] [Thread-8821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] client lang: <none>
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] server lang: <none>
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] kex follows: False
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] Compression: none
2025-11-26T00:51:05.106 [DEBUG] [Thread-8821] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:51:05.123 [DEBUG] [Thread-8821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:51:05.123 [DEBUG] [Thread-8821] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:51:05.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:51:05.124 [DEBUG] [Thread-8821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:51:05.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:51:05.127 [DEBUG] [Thread-8821] [transport.py] [_log()] userauth is OK
2025-11-26T00:51:05.127 [DEBUG] [Thread-8821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:51:05.127 [DEBUG] [Thread-8821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:51:05.127 [DEBUG] [Thread-8821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:51:05.127 [DEBUG] [Thread-8821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:51:05.145 [INFO] [Thread-8821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:51:05.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:51:05.972 [DEBUG] [Thread-8821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:51:05.972 [DEBUG] [Thread-8821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:51:05.973 [DEBUG] [Thread-8821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:51:06.013 [DEBUG] [Thread-8821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:51:06.013 [DEBUG] [Thread-8821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:51:06.017 [DEBUG] [Thread-8821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:51:06.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:51:06.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:51:06.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:51:06.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:51:06.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:51:06.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:51:06.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:51:06.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:51:06.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:51:06.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.951485 -999.00  +19.90  11.39     16   -5.80 1 1 1 1 1     0    0 26.19 20.26 ZNESW 10.2 11.4 131.4 16.4 19.5 -26.3 19.5 -25.9 19.2 -24.5 19.4 -25.6
2025-11-26T00:51:06.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:51:06.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:51:06.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.951485
2025-11-26T00:51:06.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:51:06.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:51:06.045 [DEBUG] [Thread-8821] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:51:06.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:51:06.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:51:06.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:51:06.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:50:53', tmtdew=30.25, humidity=12.1, cloud=0.0, wind=12.58, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:50:53', seeing=1.87, atlas_timestamp='2025-11-25T22:50:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:47:00')
2025-11-26T00:51:06.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:51:06.142 [DEBUG] [Thread-8824] [transport.py] [_log()] starting thread (client mode): 0x70d6bf10
2025-11-26T00:51:06.142 [DEBUG] [Thread-8824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:51:06.157 [DEBUG] [Thread-8824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:51:06.157 [INFO] [Thread-8824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] client lang: <none>
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] server lang: <none>
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] kex follows: False
2025-11-26T00:51:06.165 [DEBUG] [Thread-8824] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:51:06.166 [DEBUG] [Thread-8824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:51:06.166 [DEBUG] [Thread-8824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:51:06.166 [DEBUG] [Thread-8824] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:51:06.166 [DEBUG] [Thread-8824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:51:06.166 [DEBUG] [Thread-8824] [transport.py] [_log()] Compression: none
2025-11-26T00:51:06.166 [DEBUG] [Thread-8824] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:51:06.223 [DEBUG] [Thread-8824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:51:06.223 [DEBUG] [Thread-8824] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:51:06.224 [DEBUG] [Thread-8824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:51:06.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:51:06.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:51:06.279 [DEBUG] [Thread-8824] [transport.py] [_log()] userauth is OK
2025-11-26T00:51:06.279 [DEBUG] [Thread-8824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:51:06.279 [DEBUG] [Thread-8824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:51:06.279 [DEBUG] [Thread-8824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:51:06.279 [DEBUG] [Thread-8824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:51:06.299 [INFO] [Thread-8824] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:51:06.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:51:06.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:51:07.171 [DEBUG] [Thread-8824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:51:07.171 [DEBUG] [Thread-8824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:51:07.220 [DEBUG] [Thread-8824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:51:07.220 [DEBUG] [Thread-8824] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:51:07.229 [DEBUG] [Thread-8824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:51:07.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:51:07.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:51:07.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
2025-11-26T00:51:07.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:51:07.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:51:07.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:51:07.266 [DEBUG] [Thread-8824] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:51:12.430 [DEBUG] [Thread-8826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:14.223 [DEBUG] [Thread-8827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:14.821 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:23.628 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:23.630 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:25.250 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:27.483 [DEBUG] [Thread-8828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:35.622 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:37.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:51:37.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:51:37.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:51:37.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 51, 25), 20.21, 41.35, 0.0, 13.18, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:51:37.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:51:25
2025-11-26T00:51:38.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:51:38.224 [DEBUG] [Thread-8829] [transport.py] [_log()] starting thread (client mode): 0x70d68280
2025-11-26T00:51:38.224 [DEBUG] [Thread-8829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:51:38.246 [DEBUG] [Thread-8829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:51:38.246 [INFO] [Thread-8829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:51:38.249 [DEBUG] [Thread-8829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:51:38.249 [DEBUG] [Thread-8829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] client lang: <none>
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] server lang: <none>
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] kex follows: False
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:51:38.250 [DEBUG] [Thread-8829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:51:38.251 [DEBUG] [Thread-8829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:51:38.251 [DEBUG] [Thread-8829] [transport.py] [_log()] Compression: none
2025-11-26T00:51:38.251 [DEBUG] [Thread-8829] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:51:38.271 [DEBUG] [Thread-8829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:51:38.272 [DEBUG] [Thread-8829] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:51:38.272 [DEBUG] [Thread-8829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:51:38.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:51:38.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:51:38.274 [DEBUG] [Thread-8829] [transport.py] [_log()] userauth is OK
2025-11-26T00:51:38.274 [DEBUG] [Thread-8829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:51:38.274 [DEBUG] [Thread-8829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:51:38.274 [DEBUG] [Thread-8829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:51:38.275 [DEBUG] [Thread-8829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:51:38.313 [INFO] [Thread-8829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:51:38.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:51:38.954 [DEBUG] [Thread-8829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:51:38.954 [DEBUG] [Thread-8829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:51:38.955 [DEBUG] [Thread-8829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:51:38.995 [DEBUG] [Thread-8829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:51:38.995 [DEBUG] [Thread-8829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:51:38.998 [DEBUG] [Thread-8829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:51:39.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:51:39.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:51:39.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:51:39.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:51:39.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:51:39.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:51:39.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:51:39.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:51:39.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:51:39.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.952180 -999.00  +19.90  12.49     16   -5.90 1 1 1 1 1     0    0 26.57 25.11 ZNESW 12.4 12.5 137.0 13.2 19.6 -26.4 19.5 -25.9 19.2 -24.5 19.4 -25.4
2025-11-26T00:51:39.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:51:39.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:51:39.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.952180
2025-11-26T00:51:39.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:51:39.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:51:39.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:51:39.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:51:39.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:51:39.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:51:25', tmtdew=20.21, humidity=41.35, cloud=0.0, wind=13.18, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:51:25', seeing=1.54, atlas_timestamp='2025-11-25T22:51:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:47:00')
2025-11-26T00:51:39.028 [DEBUG] [Thread-8829] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:51:39.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:51:39.138 [DEBUG] [Thread-8832] [transport.py] [_log()] starting thread (client mode): 0x7374f8e0
2025-11-26T00:51:39.138 [DEBUG] [Thread-8832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:51:39.156 [DEBUG] [Thread-8832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:51:39.157 [INFO] [Thread-8832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:51:39.167 [DEBUG] [Thread-8832] [transport.py] [_log()] client lang: <none>
2025-11-26T00:51:39.168 [DEBUG] [Thread-8832] [transport.py] [_log()] server lang: <none>
2025-11-26T00:51:39.168 [DEBUG] [Thread-8832] [transport.py] [_log()] kex follows: False
2025-11-26T00:51:39.168 [DEBUG] [Thread-8832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:51:39.168 [DEBUG] [Thread-8832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:51:39.168 [DEBUG] [Thread-8832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:51:39.168 [DEBUG] [Thread-8832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:51:39.168 [DEBUG] [Thread-8832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:51:39.168 [DEBUG] [Thread-8832] [transport.py] [_log()] Compression: none
2025-11-26T00:51:39.168 [DEBUG] [Thread-8832] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:51:39.223 [DEBUG] [Thread-8832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:51:39.224 [DEBUG] [Thread-8832] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:51:39.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:51:39.225 [DEBUG] [Thread-8832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:51:39.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:51:39.279 [DEBUG] [Thread-8832] [transport.py] [_log()] userauth is OK
2025-11-26T00:51:39.280 [DEBUG] [Thread-8832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:51:39.280 [DEBUG] [Thread-8832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:51:39.280 [DEBUG] [Thread-8832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:51:39.280 [DEBUG] [Thread-8832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:51:39.299 [INFO] [Thread-8832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:51:39.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:51:39.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:51:40.183 [DEBUG] [Thread-8832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:51:40.183 [DEBUG] [Thread-8832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:51:40.231 [DEBUG] [Thread-8832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:51:40.231 [DEBUG] [Thread-8832] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:51:40.241 [DEBUG] [Thread-8832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:51:40.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:51:40.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:51:40.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:51:40.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:51:40.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:51:40.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:51:40.278 [DEBUG] [Thread-8832] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:51:42.515 [DEBUG] [Thread-8834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:46.078 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:56.484 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:51:57.572 [DEBUG] [Thread-8835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:06.891 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:10.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:52:10.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:52:10.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:52:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 51, 57), 20.32, 41.31, 0.0, 12.55, 13.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:52:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:51:57
2025-11-26T00:52:11.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:52:11.235 [DEBUG] [Thread-8836] [transport.py] [_log()] starting thread (client mode): 0x70d54fd0
2025-11-26T00:52:11.235 [DEBUG] [Thread-8836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:52:11.255 [DEBUG] [Thread-8836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:52:11.255 [INFO] [Thread-8836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:52:11.257 [DEBUG] [Thread-8836] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:52:11.257 [DEBUG] [Thread-8836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:52:11.257 [DEBUG] [Thread-8836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:52:11.257 [DEBUG] [Thread-8836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:52:11.257 [DEBUG] [Thread-8836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:52:11.257 [DEBUG] [Thread-8836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:52:11.257 [DEBUG] [Thread-8836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:52:11.257 [DEBUG] [Thread-8836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] client lang: <none>
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] server lang: <none>
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] kex follows: False
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] Compression: none
2025-11-26T00:52:11.258 [DEBUG] [Thread-8836] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:52:11.272 [DEBUG] [Thread-8836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:52:11.273 [DEBUG] [Thread-8836] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:52:11.273 [DEBUG] [Thread-8836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:52:11.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:52:11.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:52:11.317 [DEBUG] [Thread-8836] [transport.py] [_log()] userauth is OK
2025-11-26T00:52:11.317 [DEBUG] [Thread-8836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:52:11.317 [DEBUG] [Thread-8836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:52:11.317 [DEBUG] [Thread-8836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:52:11.317 [DEBUG] [Thread-8836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:52:11.340 [INFO] [Thread-8836] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:52:11.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:52:12.135 [DEBUG] [Thread-8836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:52:12.135 [DEBUG] [Thread-8836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:52:12.135 [DEBUG] [Thread-8836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:52:12.175 [DEBUG] [Thread-8836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:52:12.175 [DEBUG] [Thread-8836] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:52:12.178 [DEBUG] [Thread-8836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:52:12.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:52:12.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:52:12.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:52:12.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:52:12.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:52:12.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:52:12.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:52:12.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:52:12.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:52:12.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.952527 -999.00  +20.00  10.81     16   -5.80 1 1 1 1 1     0    0 26.28 26.40 ZNESW 14.8 10.8 140.0 15.5 19.6 -26.4 19.5 -25.8 19.2 -24.6 -999.0 -999.0
2025-11-26T00:52:12.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:52:12.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:52:12.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.952527
2025-11-26T00:52:12.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:52:12.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:52:12.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:52:12.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:52:12.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:52:12.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:51:57', tmtdew=20.32, humidity=41.31, cloud=0.0, wind=12.55, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:51:57', seeing=1.26, atlas_timestamp='2025-11-25T22:51:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.03225000000000122, 0.039250000000000895, 0.014499999999999957, 0.05649999999999977, 0.11825000000000152, -0.0010000000000012221, 0.0032500000000013074, 0.005499999999999616, -0.006000000000000227, 0.06925000000000026, 0.005000000000000782, 0.09499999999999886, 0.11125000000000007, 0.0129999999999999, 0.009999999999999787, 0.01774999999999949, -0.009500000000000952, 0.0519999999999996, -0.02775000000000105, 0.09199999999999875, 0.08874999999999922, 0.035250000000001336, 0.0017499999999994742, 0.022999999999999687, -0.007499999999998508, 0.036749999999999616, 0.05250000000000021, 0.1720000000000006, 0.10900000000000176, 0.08950000000000102, -0.0034999999999989484, -0.013750000000001705], zp_timestamp='2025-11-25T22:47:00')
2025-11-26T00:52:12.203 [DEBUG] [Thread-8836] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:52:12.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:52:12.300 [DEBUG] [Thread-8839] [transport.py] [_log()] starting thread (client mode): 0x70d56110
2025-11-26T00:52:12.300 [DEBUG] [Thread-8839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:52:12.319 [DEBUG] [Thread-8839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:52:12.319 [INFO] [Thread-8839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:52:12.326 [DEBUG] [Thread-8839] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:52:12.327 [DEBUG] [Thread-8839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:52:12.327 [DEBUG] [Thread-8839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:52:12.327 [DEBUG] [Thread-8839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:52:12.327 [DEBUG] [Thread-8839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:52:12.327 [DEBUG] [Thread-8839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:52:12.327 [DEBUG] [Thread-8839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:52:12.327 [DEBUG] [Thread-8839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:52:12.327 [DEBUG] [Thread-8839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:52:12.328 [DEBUG] [Thread-8839] [transport.py] [_log()] client lang: <none>
2025-11-26T00:52:12.328 [DEBUG] [Thread-8839] [transport.py] [_log()] server lang: <none>
2025-11-26T00:52:12.328 [DEBUG] [Thread-8839] [transport.py] [_log()] kex follows: False
2025-11-26T00:52:12.328 [DEBUG] [Thread-8839] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:52:12.328 [DEBUG] [Thread-8839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:52:12.328 [DEBUG] [Thread-8839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:52:12.328 [DEBUG] [Thread-8839] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:52:12.328 [DEBUG] [Thread-8839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:52:12.328 [DEBUG] [Thread-8839] [transport.py] [_log()] Compression: none
2025-11-26T00:52:12.329 [DEBUG] [Thread-8839] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:52:12.391 [DEBUG] [Thread-8839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:52:12.391 [DEBUG] [Thread-8839] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:52:12.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:52:12.392 [DEBUG] [Thread-8839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:52:12.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:52:12.448 [DEBUG] [Thread-8839] [transport.py] [_log()] userauth is OK
2025-11-26T00:52:12.448 [DEBUG] [Thread-8839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:52:12.448 [DEBUG] [Thread-8839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:52:12.448 [DEBUG] [Thread-8839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:52:12.448 [DEBUG] [Thread-8839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:52:12.468 [INFO] [Thread-8839] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:52:12.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:52:12.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:52:12.605 [DEBUG] [Thread-8841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:13.294 [DEBUG] [Thread-8839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:52:13.294 [DEBUG] [Thread-8839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:52:13.342 [DEBUG] [Thread-8839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:52:13.342 [DEBUG] [Thread-8839] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:52:13.351 [DEBUG] [Thread-8839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:52:13.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:52:13.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:52:13.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:52:13.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:52:13.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:52:13.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:52:13.387 [DEBUG] [Thread-8839] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:52:14.279 [DEBUG] [Thread-8842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:17.295 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:23.840 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:23.841 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:27.654 [DEBUG] [Thread-8843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:27.693 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:38.074 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:42.691 [DEBUG] [Thread-8844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:43.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:52:43.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:52:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:52:44.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 52, 29), 20.28, 41.35, 0.0, 12.63, 13.08, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:52:44.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:52:29
2025-11-26T00:52:44.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:52:44.318 [DEBUG] [Thread-8845] [transport.py] [_log()] starting thread (client mode): 0x70d56fb0
2025-11-26T00:52:44.318 [DEBUG] [Thread-8845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:52:44.339 [DEBUG] [Thread-8845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:52:44.339 [INFO] [Thread-8845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] client lang: <none>
2025-11-26T00:52:44.343 [DEBUG] [Thread-8845] [transport.py] [_log()] server lang: <none>
2025-11-26T00:52:44.344 [DEBUG] [Thread-8845] [transport.py] [_log()] kex follows: False
2025-11-26T00:52:44.344 [DEBUG] [Thread-8845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:52:44.344 [DEBUG] [Thread-8845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:52:44.344 [DEBUG] [Thread-8845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:52:44.344 [DEBUG] [Thread-8845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:52:44.344 [DEBUG] [Thread-8845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:52:44.344 [DEBUG] [Thread-8845] [transport.py] [_log()] Compression: none
2025-11-26T00:52:44.344 [DEBUG] [Thread-8845] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:52:44.361 [DEBUG] [Thread-8845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:52:44.362 [DEBUG] [Thread-8845] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:52:44.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:52:44.363 [DEBUG] [Thread-8845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:52:44.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:52:44.365 [DEBUG] [Thread-8845] [transport.py] [_log()] userauth is OK
2025-11-26T00:52:44.365 [DEBUG] [Thread-8845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:52:44.365 [DEBUG] [Thread-8845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:52:44.365 [DEBUG] [Thread-8845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:52:44.365 [DEBUG] [Thread-8845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:52:44.381 [INFO] [Thread-8845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:52:44.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:52:45.022 [DEBUG] [Thread-8845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:52:45.022 [DEBUG] [Thread-8845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:52:45.022 [DEBUG] [Thread-8845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:52:45.063 [DEBUG] [Thread-8845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:52:45.063 [DEBUG] [Thread-8845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:52:45.066 [DEBUG] [Thread-8845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:52:45.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:52:45.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:52:45.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:52:45.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:52:45.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:52:45.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:52:45.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:52:45.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:52:45.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:52:45.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.952875 -999.00  +20.00  11.20     16   -5.80 1 1 1 1 1     0    0 26.28 26.77 ZNESW 10.3 11.2 122.8 15.4 19.5 -26.4 19.4 -25.8 19.2 -24.5 19.4 -25.4
2025-11-26T00:52:45.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:52:45.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:52:45.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.952875
2025-11-26T00:52:45.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:52:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:52:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:52:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:52:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:52:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:52:29', tmtdew=20.28, humidity=41.35, cloud=0.0, wind=12.63, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:52:29', seeing=1.42, atlas_timestamp='2025-11-25T22:52:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.011749999999999261, -0.019750000000000156, -0.010000000000001563, 0.06799999999999962, 0.059250000000002245, 0.016000000000000014, -0.021749999999999048, -0.013500000000000512, 0.008000000000000895, 0.03575000000000017, -0.028499999999999304, 0.08199999999999896, 0.05674999999999919, -0.019000000000000128, -0.049000000000001265, -0.016750000000000043, -0.0005000000000006111, 0.023999999999999133, -0.028750000000000497, 0.08599999999999852, 0.08924999999999983, 0.016250000000001208, -0.020250000000000767, -0.034000000000000696, 0.006000000000000227, -0.020250000000000767, 0.033500000000000085, 0.10050000000000026, 0.07450000000000045, 0.07700000000000173, -0.02099999999999902, -0.03225000000000122], zp_timestamp='2025-11-25T22:51:00')
2025-11-26T00:52:45.091 [DEBUG] [Thread-8845] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:52:45.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:52:45.187 [DEBUG] [Thread-8848] [transport.py] [_log()] starting thread (client mode): 0x70d56860
2025-11-26T00:52:45.188 [DEBUG] [Thread-8848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:52:45.207 [DEBUG] [Thread-8848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:52:45.207 [INFO] [Thread-8848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:52:45.214 [DEBUG] [Thread-8848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:52:45.214 [DEBUG] [Thread-8848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] client lang: <none>
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] server lang: <none>
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] kex follows: False
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:52:45.215 [DEBUG] [Thread-8848] [transport.py] [_log()] Compression: none
2025-11-26T00:52:45.216 [DEBUG] [Thread-8848] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:52:45.272 [DEBUG] [Thread-8848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:52:45.272 [DEBUG] [Thread-8848] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:52:45.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:52:45.274 [DEBUG] [Thread-8848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:52:45.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:52:45.328 [DEBUG] [Thread-8848] [transport.py] [_log()] userauth is OK
2025-11-26T00:52:45.329 [DEBUG] [Thread-8848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:52:45.329 [DEBUG] [Thread-8848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:52:45.329 [DEBUG] [Thread-8848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:52:45.329 [DEBUG] [Thread-8848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:52:45.347 [INFO] [Thread-8848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:52:45.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:52:45.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:52:46.200 [DEBUG] [Thread-8848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:52:46.200 [DEBUG] [Thread-8848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:52:46.254 [DEBUG] [Thread-8848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:52:46.254 [DEBUG] [Thread-8848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:52:46.263 [DEBUG] [Thread-8848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:52:46.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:52:46.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:52:46.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:52:46.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:52:46.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:52:46.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:52:46.297 [DEBUG] [Thread-8848] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:52:48.556 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:57.728 [DEBUG] [Thread-8850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:52:58.927 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:09.303 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:12.766 [DEBUG] [Thread-8851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:14.330 [DEBUG] [Thread-8852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:53:16.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:53:16.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:53:16.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 53, 1), 20.2, 41.4, 0.0, 12.23, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:53:16.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:53:01
2025-11-26T00:53:17.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:53:17.253 [DEBUG] [Thread-8853] [transport.py] [_log()] starting thread (client mode): 0x7374e740
2025-11-26T00:53:17.253 [DEBUG] [Thread-8853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:53:17.273 [DEBUG] [Thread-8853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:53:17.273 [INFO] [Thread-8853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:53:17.277 [DEBUG] [Thread-8853] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:53:17.277 [DEBUG] [Thread-8853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:53:17.277 [DEBUG] [Thread-8853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:53:17.277 [DEBUG] [Thread-8853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:53:17.277 [DEBUG] [Thread-8853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:53:17.277 [DEBUG] [Thread-8853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:53:17.277 [DEBUG] [Thread-8853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:53:17.277 [DEBUG] [Thread-8853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:53:17.277 [DEBUG] [Thread-8853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] client lang: <none>
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] server lang: <none>
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] kex follows: False
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] Compression: none
2025-11-26T00:53:17.278 [DEBUG] [Thread-8853] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:53:17.295 [DEBUG] [Thread-8853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:53:17.296 [DEBUG] [Thread-8853] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:53:17.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:53:17.297 [DEBUG] [Thread-8853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:53:17.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:53:17.299 [DEBUG] [Thread-8853] [transport.py] [_log()] userauth is OK
2025-11-26T00:53:17.299 [DEBUG] [Thread-8853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:53:17.299 [DEBUG] [Thread-8853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:53:17.299 [DEBUG] [Thread-8853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:53:17.299 [DEBUG] [Thread-8853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:53:17.335 [INFO] [Thread-8853] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:53:17.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:53:18.176 [DEBUG] [Thread-8853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:53:18.177 [DEBUG] [Thread-8853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:53:18.177 [DEBUG] [Thread-8853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:53:18.217 [DEBUG] [Thread-8853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:53:18.217 [DEBUG] [Thread-8853] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:53:18.220 [DEBUG] [Thread-8853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:53:18.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:53:18.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:53:18.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:53:18.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:53:18.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:53:18.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:53:18.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.953222 -999.00  +19.90   9.48     16   -5.80 1 1 1 1 1     0    0 26.09 26.94 ZNESW 9.9 9.5 135.8 12.4 19.6 -26.4 19.4 -25.8 19.1 -24.5 19.4 -25.6
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.953222
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:53:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:53:01', tmtdew=20.2, humidity=41.4, cloud=0.0, wind=12.23, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:53:01', seeing=1.37, atlas_timestamp='2025-11-25T22:52:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.011749999999999261, -0.019750000000000156, -0.010000000000001563, 0.06799999999999962, 0.059250000000002245, 0.016000000000000014, -0.021749999999999048, -0.013500000000000512, 0.008000000000000895, 0.03575000000000017, -0.028499999999999304, 0.08199999999999896, 0.05674999999999919, -0.019000000000000128, -0.049000000000001265, -0.016750000000000043, -0.0005000000000006111, 0.023999999999999133, -0.028750000000000497, 0.08599999999999852, 0.08924999999999983, 0.016250000000001208, -0.020250000000000767, -0.034000000000000696, 0.006000000000000227, -0.020250000000000767, 0.033500000000000085, 0.10050000000000026, 0.07450000000000045, 0.07700000000000173, -0.02099999999999902, -0.03225000000000122], zp_timestamp='2025-11-25T22:51:00')
2025-11-26T00:53:18.237 [DEBUG] [Thread-8853] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:53:18.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:53:18.322 [DEBUG] [Thread-8856] [transport.py] [_log()] starting thread (client mode): 0x7374c850
2025-11-26T00:53:18.322 [DEBUG] [Thread-8856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:53:18.336 [DEBUG] [Thread-8856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:53:18.336 [INFO] [Thread-8856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] client lang: <none>
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] server lang: <none>
2025-11-26T00:53:18.344 [DEBUG] [Thread-8856] [transport.py] [_log()] kex follows: False
2025-11-26T00:53:18.345 [DEBUG] [Thread-8856] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:53:18.345 [DEBUG] [Thread-8856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:53:18.345 [DEBUG] [Thread-8856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:53:18.345 [DEBUG] [Thread-8856] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:53:18.345 [DEBUG] [Thread-8856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:53:18.345 [DEBUG] [Thread-8856] [transport.py] [_log()] Compression: none
2025-11-26T00:53:18.345 [DEBUG] [Thread-8856] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:53:18.408 [DEBUG] [Thread-8856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:53:18.409 [DEBUG] [Thread-8856] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:53:18.410 [DEBUG] [Thread-8856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:53:18.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:53:18.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:53:18.474 [DEBUG] [Thread-8856] [transport.py] [_log()] userauth is OK
2025-11-26T00:53:18.474 [DEBUG] [Thread-8856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:53:18.475 [DEBUG] [Thread-8856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:53:18.475 [DEBUG] [Thread-8856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:53:18.475 [DEBUG] [Thread-8856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:53:18.493 [INFO] [Thread-8856] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:53:18.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:53:18.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:53:19.343 [DEBUG] [Thread-8856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:53:19.344 [DEBUG] [Thread-8856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:53:19.391 [DEBUG] [Thread-8856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:53:19.391 [DEBUG] [Thread-8856] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:53:19.402 [DEBUG] [Thread-8856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:53:19.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:53:19.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:53:19.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:53:19.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:53:19.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:53:19.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:53:19.439 [DEBUG] [Thread-8856] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:53:19.695 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:24.043 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:24.044 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:27.800 [DEBUG] [Thread-8858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:30.129 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:40.603 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:42.850 [DEBUG] [Thread-8859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:49.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:53:49.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:53:49.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
2025-11-26T00:53:50.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 53, 33), 20.17, 41.42, 0.0, 13.36, 13.01, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:53:50.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:53:33
2025-11-26T00:53:50.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:53:50.443 [DEBUG] [Thread-8860] [transport.py] [_log()] starting thread (client mode): 0x7374d780
2025-11-26T00:53:50.443 [DEBUG] [Thread-8860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:53:50.464 [DEBUG] [Thread-8860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:53:50.464 [INFO] [Thread-8860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:53:50.467 [DEBUG] [Thread-8860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:53:50.467 [DEBUG] [Thread-8860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] client lang: <none>
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] server lang: <none>
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] kex follows: False
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] Compression: none
2025-11-26T00:53:50.468 [DEBUG] [Thread-8860] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:53:50.483 [DEBUG] [Thread-8860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:53:50.483 [DEBUG] [Thread-8860] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:53:50.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:53:50.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:53:50.484 [DEBUG] [Thread-8860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:53:50.484 [DEBUG] [Thread-8860] [transport.py] [_log()] userauth is OK
2025-11-26T00:53:50.484 [DEBUG] [Thread-8860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:53:50.484 [DEBUG] [Thread-8860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:53:50.484 [DEBUG] [Thread-8860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:53:50.484 [DEBUG] [Thread-8860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:53:50.504 [INFO] [Thread-8860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:53:50.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:53:50.993 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:53:51.150 [DEBUG] [Thread-8860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:53:51.151 [DEBUG] [Thread-8860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:53:51.151 [DEBUG] [Thread-8860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:53:51.191 [DEBUG] [Thread-8860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:53:51.191 [DEBUG] [Thread-8860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:53:51.194 [DEBUG] [Thread-8860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:53:51.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:53:51.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:53:51.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:53:51.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:53:51.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:53:51.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:53:51.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:53:51.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.953569 -999.00  +20.00  10.69     17   -5.70 1 1 1 1 1     0    0 26.38 26.77 ZNESW 9.8 10.7 130.4 11.7 19.6 -26.5 19.5 -25.9 19.2 -24.4 19.4 -25.5
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.953569
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:53:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:53:33', tmtdew=20.17, humidity=41.42, cloud=0.0, wind=13.36, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:53:33', seeing=1.37, atlas_timestamp='2025-11-25T22:53:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.011749999999999261, -0.019750000000000156, -0.010000000000001563, 0.06799999999999962, 0.059250000000002245, 0.016000000000000014, -0.021749999999999048, -0.013500000000000512, 0.008000000000000895, 0.03575000000000017, -0.028499999999999304, 0.08199999999999896, 0.05674999999999919, -0.019000000000000128, -0.049000000000001265, -0.016750000000000043, -0.0005000000000006111, 0.023999999999999133, -0.028750000000000497, 0.08599999999999852, 0.08924999999999983, 0.016250000000001208, -0.020250000000000767, -0.034000000000000696, 0.006000000000000227, -0.020250000000000767, 0.033500000000000085, 0.10050000000000026, 0.07450000000000045, 0.07700000000000173, -0.02099999999999902, -0.03225000000000122], zp_timestamp='2025-11-25T22:51:00')
2025-11-26T00:53:51.212 [DEBUG] [Thread-8860] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:53:51.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:53:51.297 [DEBUG] [Thread-8863] [transport.py] [_log()] starting thread (client mode): 0x70d55bd0
2025-11-26T00:53:51.297 [DEBUG] [Thread-8863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:53:51.311 [DEBUG] [Thread-8863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:53:51.311 [INFO] [Thread-8863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:53:51.318 [DEBUG] [Thread-8863] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:53:51.318 [DEBUG] [Thread-8863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:53:51.318 [DEBUG] [Thread-8863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:53:51.318 [DEBUG] [Thread-8863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:53:51.318 [DEBUG] [Thread-8863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:53:51.318 [DEBUG] [Thread-8863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:53:51.318 [DEBUG] [Thread-8863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:53:51.318 [DEBUG] [Thread-8863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] client lang: <none>
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] server lang: <none>
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] kex follows: False
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] Compression: none
2025-11-26T00:53:51.319 [DEBUG] [Thread-8863] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:53:51.375 [DEBUG] [Thread-8863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:53:51.375 [DEBUG] [Thread-8863] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:53:51.375 [DEBUG] [Thread-8863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:53:51.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:53:51.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:53:51.432 [DEBUG] [Thread-8863] [transport.py] [_log()] userauth is OK
2025-11-26T00:53:51.432 [DEBUG] [Thread-8863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:53:51.433 [DEBUG] [Thread-8863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:53:51.433 [DEBUG] [Thread-8863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:53:51.433 [DEBUG] [Thread-8863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:53:51.446 [INFO] [Thread-8863] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:53:51.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:53:51.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:53:52.263 [DEBUG] [Thread-8863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:53:52.263 [DEBUG] [Thread-8863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:53:52.311 [DEBUG] [Thread-8863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:53:52.311 [DEBUG] [Thread-8863] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:53:52.320 [DEBUG] [Thread-8863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:53:52.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:53:52.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:53:52.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:53:52.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:53:52.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:53:52.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:53:52.357 [DEBUG] [Thread-8863] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:53:57.883 [DEBUG] [Thread-8865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:01.392 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:11.737 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:12.935 [DEBUG] [Thread-8866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:14.387 [DEBUG] [Thread-8867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:22.151 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:54:22.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:54:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:54:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 54, 5), 20.18, 41.42, 0.0, 12.32, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:54:23.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:54:05
2025-11-26T00:54:23.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:54:23.303 [DEBUG] [Thread-8868] [transport.py] [_log()] starting thread (client mode): 0x70dd03d0
2025-11-26T00:54:23.303 [DEBUG] [Thread-8868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:54:23.323 [DEBUG] [Thread-8868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:54:23.323 [INFO] [Thread-8868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] client lang: <none>
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] server lang: <none>
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] kex follows: False
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] Compression: none
2025-11-26T00:54:23.326 [DEBUG] [Thread-8868] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:54:23.342 [DEBUG] [Thread-8868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:54:23.342 [DEBUG] [Thread-8868] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:54:23.342 [DEBUG] [Thread-8868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:54:23.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:54:23.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:54:23.343 [DEBUG] [Thread-8868] [transport.py] [_log()] userauth is OK
2025-11-26T00:54:23.343 [DEBUG] [Thread-8868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:54:23.343 [DEBUG] [Thread-8868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:54:23.343 [DEBUG] [Thread-8868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:54:23.343 [DEBUG] [Thread-8868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:54:23.369 [INFO] [Thread-8868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:54:23.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:54:24.189 [DEBUG] [Thread-8868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:54:24.189 [DEBUG] [Thread-8868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:54:24.189 [DEBUG] [Thread-8868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:54:24.230 [DEBUG] [Thread-8868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:54:24.230 [DEBUG] [Thread-8868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:54:24.233 [DEBUG] [Thread-8868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:54:24.244 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:24.245 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:24.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:54:24.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:54:24.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:54:24.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:54:24.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:54:24.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:54:24.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.953916 -999.00  +19.90   9.06     17   -5.70 1 1 1 1 1     0    0 26.24 26.69 ZNESW 11.3 9.1 125.6 11.1 19.6 -26.5 -999.0 -999.0 19.2 -24.7 19.4 -25.6
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.953916
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:54:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:54:05', tmtdew=20.18, humidity=41.42, cloud=0.0, wind=12.32, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:54:05', seeing=1.29, atlas_timestamp='2025-11-25T22:53:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.011749999999999261, -0.019750000000000156, -0.010000000000001563, 0.06799999999999962, 0.059250000000002245, 0.016000000000000014, -0.021749999999999048, -0.013500000000000512, 0.008000000000000895, 0.03575000000000017, -0.028499999999999304, 0.08199999999999896, 0.05674999999999919, -0.019000000000000128, -0.049000000000001265, -0.016750000000000043, -0.0005000000000006111, 0.023999999999999133, -0.028750000000000497, 0.08599999999999852, 0.08924999999999983, 0.016250000000001208, -0.020250000000000767, -0.034000000000000696, 0.006000000000000227, -0.020250000000000767, 0.033500000000000085, 0.10050000000000026, 0.07450000000000045, 0.07700000000000173, -0.02099999999999902, -0.03225000000000122], zp_timestamp='2025-11-25T22:51:00')
2025-11-26T00:54:24.252 [DEBUG] [Thread-8868] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:54:24.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:54:24.339 [DEBUG] [Thread-8871] [transport.py] [_log()] starting thread (client mode): 0x70d75330
2025-11-26T00:54:24.339 [DEBUG] [Thread-8871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:54:24.353 [DEBUG] [Thread-8871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:54:24.353 [INFO] [Thread-8871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] client lang: <none>
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] server lang: <none>
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] kex follows: False
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] Compression: none
2025-11-26T00:54:24.361 [DEBUG] [Thread-8871] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:54:24.419 [DEBUG] [Thread-8871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:54:24.419 [DEBUG] [Thread-8871] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:54:24.419 [DEBUG] [Thread-8871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:54:24.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:54:24.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:54:24.476 [DEBUG] [Thread-8871] [transport.py] [_log()] userauth is OK
2025-11-26T00:54:24.476 [DEBUG] [Thread-8871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:54:24.476 [DEBUG] [Thread-8871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:54:24.476 [DEBUG] [Thread-8871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:54:24.476 [DEBUG] [Thread-8871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:54:24.494 [INFO] [Thread-8871] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:54:24.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:54:24.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:54:25.332 [DEBUG] [Thread-8871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:54:25.332 [DEBUG] [Thread-8871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:54:25.379 [DEBUG] [Thread-8871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:54:25.379 [DEBUG] [Thread-8871] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:54:25.387 [DEBUG] [Thread-8871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:54:25.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:54:25.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:54:25.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:54:25.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:54:25.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:54:25.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:54:25.420 [DEBUG] [Thread-8871] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:54:27.972 [DEBUG] [Thread-8873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:32.528 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:42.953 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:43.011 [DEBUG] [Thread-8874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:53.352 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:55.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:54:55.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:54:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:54:56.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 54, 37), 20.05, 41.4, 0.0, 13.45, 12.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:54:56.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:54:37
2025-11-26T00:54:56.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:54:56.334 [DEBUG] [Thread-8875] [transport.py] [_log()] starting thread (client mode): 0x70d77c40
2025-11-26T00:54:56.335 [DEBUG] [Thread-8875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:54:56.357 [DEBUG] [Thread-8875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:54:56.357 [INFO] [Thread-8875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] client lang: <none>
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] server lang: <none>
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] kex follows: False
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] Compression: none
2025-11-26T00:54:56.360 [DEBUG] [Thread-8875] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:54:56.377 [DEBUG] [Thread-8875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:54:56.377 [DEBUG] [Thread-8875] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:54:56.377 [DEBUG] [Thread-8875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:54:56.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:54:56.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:54:56.378 [DEBUG] [Thread-8875] [transport.py] [_log()] userauth is OK
2025-11-26T00:54:56.378 [DEBUG] [Thread-8875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:54:56.378 [DEBUG] [Thread-8875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:54:56.378 [DEBUG] [Thread-8875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:54:56.378 [DEBUG] [Thread-8875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:54:56.394 [INFO] [Thread-8875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:54:56.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:54:57.050 [DEBUG] [Thread-8875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:54:57.051 [DEBUG] [Thread-8875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:54:57.051 [DEBUG] [Thread-8875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:54:57.092 [DEBUG] [Thread-8875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:54:57.092 [DEBUG] [Thread-8875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:54:57.095 [DEBUG] [Thread-8875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:54:57.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:54:57.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:54:57.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:54:57.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:54:57.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:54:57.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:54:57.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:54:57.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:54:57.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:54:57.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.954611 -999.00  +19.90  10.17     16   -5.90 1 1 1 1 1     0    0 26.28 26.03 ZNESW 10.3 10.2 124.7 12.8 19.5 -26.5 19.5 -25.9 19.2 -24.5 19.4 -25.5
2025-11-26T00:54:57.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:54:57.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:54:57.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.954611
2025-11-26T00:54:57.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:54:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:54:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:54:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:54:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:54:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:54:37', tmtdew=20.05, humidity=41.4, cloud=0.0, wind=13.45, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:54:37', seeing=1.53, atlas_timestamp='2025-11-25T22:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.011749999999999261, -0.019750000000000156, -0.010000000000001563, 0.06799999999999962, 0.059250000000002245, 0.016000000000000014, -0.021749999999999048, -0.013500000000000512, 0.008000000000000895, 0.03575000000000017, -0.028499999999999304, 0.08199999999999896, 0.05674999999999919, -0.019000000000000128, -0.049000000000001265, -0.016750000000000043, -0.0005000000000006111, 0.023999999999999133, -0.028750000000000497, 0.08599999999999852, 0.08924999999999983, 0.016250000000001208, -0.020250000000000767, -0.034000000000000696, 0.006000000000000227, -0.020250000000000767, 0.033500000000000085, 0.10050000000000026, 0.07450000000000045, 0.07700000000000173, -0.02099999999999902, -0.03225000000000122], zp_timestamp='2025-11-25T22:51:00')
2025-11-26T00:54:57.125 [DEBUG] [Thread-8875] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:54:57.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:54:57.230 [DEBUG] [Thread-8878] [transport.py] [_log()] starting thread (client mode): 0x70dd2350
2025-11-26T00:54:57.230 [DEBUG] [Thread-8878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:54:57.245 [DEBUG] [Thread-8878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:54:57.245 [INFO] [Thread-8878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] client lang: <none>
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] server lang: <none>
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] kex follows: False
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:54:57.253 [DEBUG] [Thread-8878] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:54:57.254 [DEBUG] [Thread-8878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:54:57.254 [DEBUG] [Thread-8878] [transport.py] [_log()] Compression: none
2025-11-26T00:54:57.254 [DEBUG] [Thread-8878] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:54:57.314 [DEBUG] [Thread-8878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:54:57.314 [DEBUG] [Thread-8878] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:54:57.315 [DEBUG] [Thread-8878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:54:57.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:54:57.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:54:57.369 [DEBUG] [Thread-8878] [transport.py] [_log()] userauth is OK
2025-11-26T00:54:57.370 [DEBUG] [Thread-8878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:54:57.370 [DEBUG] [Thread-8878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:54:57.370 [DEBUG] [Thread-8878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:54:57.370 [DEBUG] [Thread-8878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:54:57.394 [INFO] [Thread-8878] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:54:57.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:54:57.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:54:58.053 [DEBUG] [Thread-8880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:54:58.220 [DEBUG] [Thread-8878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:54:58.220 [DEBUG] [Thread-8878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:54:58.267 [DEBUG] [Thread-8878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:54:58.268 [DEBUG] [Thread-8878] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:54:58.277 [DEBUG] [Thread-8878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:54:58.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:54:58.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:54: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') -> 00000000
2025-11-26T00:54:58.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:54:58.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:54:58.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:54:58.314 [DEBUG] [Thread-8878] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:55:03.768 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:13.098 [DEBUG] [Thread-8881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:14.200 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:14.456 [DEBUG] [Thread-8882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:24.449 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:24.450 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:24.525 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:28.135 [DEBUG] [Thread-8883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:28.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:55:28.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:55:28.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:55:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 55, 9), 20.0, 41.44, 0.0, 12.79, 12.84, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:55:28.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:55:09
2025-11-26T00:55:29.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:55:29.251 [DEBUG] [Thread-8884] [transport.py] [_log()] starting thread (client mode): 0x70dd0580
2025-11-26T00:55:29.251 [DEBUG] [Thread-8884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:55:29.271 [DEBUG] [Thread-8884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:55:29.271 [INFO] [Thread-8884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] client lang: <none>
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] server lang: <none>
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] kex follows: False
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:55:29.274 [DEBUG] [Thread-8884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:55:29.275 [DEBUG] [Thread-8884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:55:29.275 [DEBUG] [Thread-8884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:55:29.275 [DEBUG] [Thread-8884] [transport.py] [_log()] Compression: none
2025-11-26T00:55:29.275 [DEBUG] [Thread-8884] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:55:29.293 [DEBUG] [Thread-8884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:55:29.294 [DEBUG] [Thread-8884] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:55:29.294 [DEBUG] [Thread-8884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:55:29.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:55:29.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:55:29.337 [DEBUG] [Thread-8884] [transport.py] [_log()] userauth is OK
2025-11-26T00:55:29.337 [DEBUG] [Thread-8884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:55:29.338 [DEBUG] [Thread-8884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:55:29.338 [DEBUG] [Thread-8884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:55:29.338 [DEBUG] [Thread-8884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:55:29.360 [INFO] [Thread-8884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:55:29.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:55:29.978 [DEBUG] [Thread-8884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:55:29.979 [DEBUG] [Thread-8884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:55:29.979 [DEBUG] [Thread-8884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:55:30.020 [DEBUG] [Thread-8884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:55:30.020 [DEBUG] [Thread-8884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:55:30.023 [DEBUG] [Thread-8884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:55:30.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:55:30.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:55:30.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:55:30.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:55:30.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:55:30.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:55:30.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:55:30.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:55:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:55:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.954958 -999.00  +20.00   8.98     16   -5.80 1 1 1 1 1     0    0 26.12 24.04 ZNESW 9.7 9.0 140.8 13.1 19.6 -26.4 19.5 -25.9 19.2 -24.6 19.4 -25.4
2025-11-26T00:55:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:55:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:55:30.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.954958
2025-11-26T00:55:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:55:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:55:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:55:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:55:30.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:55:30.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:55:09', tmtdew=20.0, humidity=41.44, cloud=0.0, wind=12.79, temperature=12.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:55:09', seeing=1.22, atlas_timestamp='2025-11-25T22:55:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:54:00')
2025-11-26T00:55:30.051 [DEBUG] [Thread-8884] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:55:30.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:55:30.147 [DEBUG] [Thread-8887] [transport.py] [_log()] starting thread (client mode): 0x70d3b430
2025-11-26T00:55:30.147 [DEBUG] [Thread-8887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:55:30.162 [DEBUG] [Thread-8887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:55:30.162 [INFO] [Thread-8887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:55:30.170 [DEBUG] [Thread-8887] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:55:30.170 [DEBUG] [Thread-8887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:55:30.170 [DEBUG] [Thread-8887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] client lang: <none>
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] server lang: <none>
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] kex follows: False
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] Compression: none
2025-11-26T00:55:30.171 [DEBUG] [Thread-8887] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:55:30.229 [DEBUG] [Thread-8887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:55:30.230 [DEBUG] [Thread-8887] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:55:30.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:55:30.231 [DEBUG] [Thread-8887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:55:30.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:55:30.286 [DEBUG] [Thread-8887] [transport.py] [_log()] userauth is OK
2025-11-26T00:55:30.286 [DEBUG] [Thread-8887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:55:30.287 [DEBUG] [Thread-8887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:55:30.287 [DEBUG] [Thread-8887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:55:30.287 [DEBUG] [Thread-8887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:55:30.307 [INFO] [Thread-8887] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:55:30.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:55:30.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:55:31.139 [DEBUG] [Thread-8887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:55:31.139 [DEBUG] [Thread-8887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:55:31.187 [DEBUG] [Thread-8887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:55:31.188 [DEBUG] [Thread-8887] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:55:31.198 [DEBUG] [Thread-8887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:55:31.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:55: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')
2025-11-26T00:55:31.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:55:31.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:55:31.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:55:31.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:55:31.235 [DEBUG] [Thread-8887] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:55:34.900 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:43.166 [DEBUG] [Thread-8889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:45.318 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:55.664 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:55:58.209 [DEBUG] [Thread-8890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:01.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:56:01.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:56:01.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:56:01.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 55, 41), 20.03, 41.42, 0.0, 13.02, 12.9, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:56:01.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:55:41
2025-11-26T00:56:02.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:56:02.181 [DEBUG] [Thread-8891] [transport.py] [_log()] starting thread (client mode): 0x7374f8e0
2025-11-26T00:56:02.181 [DEBUG] [Thread-8891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:56:02.200 [DEBUG] [Thread-8891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:56:02.200 [INFO] [Thread-8891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:56:02.203 [DEBUG] [Thread-8891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:56:02.203 [DEBUG] [Thread-8891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] client lang: <none>
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] server lang: <none>
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] kex follows: False
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] Compression: none
2025-11-26T00:56:02.204 [DEBUG] [Thread-8891] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:56:02.222 [DEBUG] [Thread-8891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:56:02.222 [DEBUG] [Thread-8891] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:56:02.223 [DEBUG] [Thread-8891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:56:02.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:56:02.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:56:02.225 [DEBUG] [Thread-8891] [transport.py] [_log()] userauth is OK
2025-11-26T00:56:02.225 [DEBUG] [Thread-8891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:56:02.225 [DEBUG] [Thread-8891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:56:02.225 [DEBUG] [Thread-8891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:56:02.225 [DEBUG] [Thread-8891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:56:02.249 [INFO] [Thread-8891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:56:02.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:56:02.889 [DEBUG] [Thread-8891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:56:02.889 [DEBUG] [Thread-8891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:56:02.890 [DEBUG] [Thread-8891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:56:02.930 [DEBUG] [Thread-8891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:56:02.930 [DEBUG] [Thread-8891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:56:02.933 [DEBUG] [Thread-8891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:56:02.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:56:02.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:56:02.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:56:02.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:56:02.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:56:02.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:56:02.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:56:02.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:56:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:56:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.955305 -999.00  +20.00   8.99     16   -5.80 1 1 1 1 1     0    0 26.50 25.74 ZNESW 8.2 9.0 125.0 12.2 19.6 -26.6 19.5 -25.9 19.1 -24.6 19.4 -25.4
2025-11-26T00:56:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:56:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:56:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.955305
2025-11-26T00:56:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:56:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:56:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:56:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:56:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:56:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:55:41', tmtdew=20.03, humidity=41.42, cloud=0.0, wind=13.02, temperature=12.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:55:41', seeing=1.22, atlas_timestamp='2025-11-25T22:55:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:54:00')
2025-11-26T00:56:02.963 [DEBUG] [Thread-8891] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:56:03.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:56:03.059 [DEBUG] [Thread-8894] [transport.py] [_log()] starting thread (client mode): 0x7374de10
2025-11-26T00:56:03.059 [DEBUG] [Thread-8894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:56:03.074 [DEBUG] [Thread-8894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:56:03.074 [INFO] [Thread-8894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] client lang: <none>
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] server lang: <none>
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] kex follows: False
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:56:03.082 [DEBUG] [Thread-8894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:56:03.083 [DEBUG] [Thread-8894] [transport.py] [_log()] Compression: none
2025-11-26T00:56:03.083 [DEBUG] [Thread-8894] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:56:03.142 [DEBUG] [Thread-8894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:56:03.143 [DEBUG] [Thread-8894] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:56:03.143 [DEBUG] [Thread-8894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:56:03.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:56:03.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:56:03.202 [DEBUG] [Thread-8894] [transport.py] [_log()] userauth is OK
2025-11-26T00:56:03.202 [DEBUG] [Thread-8894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:56:03.202 [DEBUG] [Thread-8894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:56:03.202 [DEBUG] [Thread-8894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:56:03.203 [DEBUG] [Thread-8894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:56:03.221 [INFO] [Thread-8894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:56:03.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:56:03.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:56:04.081 [DEBUG] [Thread-8894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:56:04.081 [DEBUG] [Thread-8894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:56:04.129 [DEBUG] [Thread-8894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:56:04.129 [DEBUG] [Thread-8894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:56:04.138 [DEBUG] [Thread-8894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:56:04.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:56:04.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:56:04.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:56:04.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:56:04.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:56:04.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:56:04.175 [DEBUG] [Thread-8894] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:56:06.031 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:13.247 [DEBUG] [Thread-8896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:14.523 [DEBUG] [Thread-8897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:16.442 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:24.651 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:24.653 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:26.811 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:28.303 [DEBUG] [Thread-8898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:56:34.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:56:34.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:56:34.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 56, 13), 20.0, 41.45, 0.0, 13.23, 12.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:56:34.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:56:13
2025-11-26T00:56:34.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:56:35.115 [DEBUG] [Thread-8899] [transport.py] [_log()] starting thread (client mode): 0x7374ff70
2025-11-26T00:56:35.115 [DEBUG] [Thread-8899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:56:35.136 [DEBUG] [Thread-8899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:56:35.136 [INFO] [Thread-8899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:56:35.139 [DEBUG] [Thread-8899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:56:35.139 [DEBUG] [Thread-8899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:56:35.139 [DEBUG] [Thread-8899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:56:35.139 [DEBUG] [Thread-8899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:56:35.139 [DEBUG] [Thread-8899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:56:35.139 [DEBUG] [Thread-8899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:56:35.139 [DEBUG] [Thread-8899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] client lang: <none>
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] server lang: <none>
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] kex follows: False
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] Compression: none
2025-11-26T00:56:35.140 [DEBUG] [Thread-8899] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:56:35.157 [DEBUG] [Thread-8899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:56:35.158 [DEBUG] [Thread-8899] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:56:35.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:56:35.159 [DEBUG] [Thread-8899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:56:35.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:56:35.161 [DEBUG] [Thread-8899] [transport.py] [_log()] userauth is OK
2025-11-26T00:56:35.162 [DEBUG] [Thread-8899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:56:35.162 [DEBUG] [Thread-8899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:56:35.162 [DEBUG] [Thread-8899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:56:35.162 [DEBUG] [Thread-8899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:56:35.186 [INFO] [Thread-8899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:56:35.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:56:35.820 [DEBUG] [Thread-8899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:56:35.820 [DEBUG] [Thread-8899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:56:35.821 [DEBUG] [Thread-8899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:56:35.861 [DEBUG] [Thread-8899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:56:35.861 [DEBUG] [Thread-8899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:56:35.864 [DEBUG] [Thread-8899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:56:35.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:56:35.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:56:35.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:56:35.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:56:35.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:56:35.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:56:35.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:56:35.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:56:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:56:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.955652 -999.00  +19.90   7.03     16   -5.90 1 1 1 1 1     0    0 25.92 24.63 ZNESW 7.7 7.0 126.4 9.1 19.6 -26.5 19.5 -25.9 19.1 -24.5 19.4 -25.5
2025-11-26T00:56:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:56:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:56:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.955652
2025-11-26T00:56:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:56:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:56:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:56:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:56:35.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:56:35.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:56:13', tmtdew=20.0, humidity=41.45, cloud=0.0, wind=13.23, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:56:13', seeing=1.45, atlas_timestamp='2025-11-25T22:56:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:54:00')
2025-11-26T00:56:35.886 [DEBUG] [Thread-8899] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:56:35.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:56:35.982 [DEBUG] [Thread-8902] [transport.py] [_log()] starting thread (client mode): 0x70d757b0
2025-11-26T00:56:35.982 [DEBUG] [Thread-8902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:56:35.997 [DEBUG] [Thread-8902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:56:35.997 [INFO] [Thread-8902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:56:36.004 [DEBUG] [Thread-8902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] client lang: <none>
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] server lang: <none>
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] kex follows: False
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] Compression: none
2025-11-26T00:56:36.005 [DEBUG] [Thread-8902] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:56:36.061 [DEBUG] [Thread-8902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:56:36.062 [DEBUG] [Thread-8902] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:56:36.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:56:36.063 [DEBUG] [Thread-8902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:56:36.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:56:36.118 [DEBUG] [Thread-8902] [transport.py] [_log()] userauth is OK
2025-11-26T00:56:36.118 [DEBUG] [Thread-8902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:56:36.118 [DEBUG] [Thread-8902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:56:36.118 [DEBUG] [Thread-8902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:56:36.119 [DEBUG] [Thread-8902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:56:36.138 [INFO] [Thread-8902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:56:36.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:56:36.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:56:36.959 [DEBUG] [Thread-8902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:56:36.960 [DEBUG] [Thread-8902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:56:37.007 [DEBUG] [Thread-8902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:56:37.008 [DEBUG] [Thread-8902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:56:37.017 [DEBUG] [Thread-8902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:56:37.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:56:37.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:56:37.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:56:37.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:56:37.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:56:37.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:56:37.054 [DEBUG] [Thread-8902] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:56:37.235 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:43.343 [DEBUG] [Thread-8904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:47.640 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:58.066 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:56:58.402 [DEBUG] [Thread-8905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:57:07.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:57:07.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:57:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 56, 45), 20.04, 41.44, 0.0, 9.55, 12.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:57:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:56:45
2025-11-26T00:57:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:57:08.004 [DEBUG] [Thread-8906] [transport.py] [_log()] starting thread (client mode): 0x70d39180
2025-11-26T00:57:08.004 [DEBUG] [Thread-8906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:57:08.025 [DEBUG] [Thread-8906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:57:08.025 [INFO] [Thread-8906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] client lang: <none>
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] server lang: <none>
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] kex follows: False
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:57:08.028 [DEBUG] [Thread-8906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:57:08.029 [DEBUG] [Thread-8906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:57:08.029 [DEBUG] [Thread-8906] [transport.py] [_log()] Compression: none
2025-11-26T00:57:08.029 [DEBUG] [Thread-8906] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:57:08.048 [DEBUG] [Thread-8906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:57:08.049 [DEBUG] [Thread-8906] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:57:08.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:57:08.050 [DEBUG] [Thread-8906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:57:08.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:57:08.052 [DEBUG] [Thread-8906] [transport.py] [_log()] userauth is OK
2025-11-26T00:57:08.053 [DEBUG] [Thread-8906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:57:08.053 [DEBUG] [Thread-8906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:57:08.053 [DEBUG] [Thread-8906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:57:08.053 [DEBUG] [Thread-8906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:57:08.078 [INFO] [Thread-8906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:57:08.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:57:08.461 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:08.721 [DEBUG] [Thread-8906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:57:08.721 [DEBUG] [Thread-8906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:57:08.722 [DEBUG] [Thread-8906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:57:08.762 [DEBUG] [Thread-8906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:57:08.762 [DEBUG] [Thread-8906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:57:08.766 [DEBUG] [Thread-8906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:57:08.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:57:08.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:57:08.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:57:08.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:57:08.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:57:08.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:57:08.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:57:08.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:57:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:57:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.956000 -999.00  +19.90   8.34     16   -5.80 1 1 1 1 1     0    0 25.93 25.94 ZNESW 8.2 8.3 124.8 10.7 19.6 -26.5 19.5 -25.9 19.2 -24.6 19.4 -25.4
2025-11-26T00:57:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:57:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:57:08.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.956000
2025-11-26T00:57:08.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:57:08.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:57:08.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:57:08.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:57:08.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:57:08.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:56:45', tmtdew=20.04, humidity=41.44, cloud=0.0, wind=9.55, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:56:47', seeing=1.3, atlas_timestamp='2025-11-25T22:56:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:54:00')
2025-11-26T00:57:08.792 [DEBUG] [Thread-8906] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:57:08.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:57:08.887 [DEBUG] [Thread-8909] [transport.py] [_log()] starting thread (client mode): 0x70d7f1c0
2025-11-26T00:57:08.887 [DEBUG] [Thread-8909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:57:08.902 [DEBUG] [Thread-8909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:57:08.902 [INFO] [Thread-8909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:57:08.909 [DEBUG] [Thread-8909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] client lang: <none>
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] server lang: <none>
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] kex follows: False
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:57:08.910 [DEBUG] [Thread-8909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:57:08.911 [DEBUG] [Thread-8909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:57:08.911 [DEBUG] [Thread-8909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:57:08.911 [DEBUG] [Thread-8909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:57:08.911 [DEBUG] [Thread-8909] [transport.py] [_log()] Compression: none
2025-11-26T00:57:08.911 [DEBUG] [Thread-8909] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:57:08.966 [DEBUG] [Thread-8909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:57:08.967 [DEBUG] [Thread-8909] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:57:08.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:57:08.968 [DEBUG] [Thread-8909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:57:08.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:57:09.023 [DEBUG] [Thread-8909] [transport.py] [_log()] userauth is OK
2025-11-26T00:57:09.024 [DEBUG] [Thread-8909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:57:09.024 [DEBUG] [Thread-8909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:57:09.024 [DEBUG] [Thread-8909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:57:09.024 [DEBUG] [Thread-8909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:57:09.043 [INFO] [Thread-8909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:57:09.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:57:09.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:57:09.883 [DEBUG] [Thread-8909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:57:09.883 [DEBUG] [Thread-8909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:57:09.931 [DEBUG] [Thread-8909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:57:09.932 [DEBUG] [Thread-8909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:57:09.943 [DEBUG] [Thread-8909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:57:09.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:57:09.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:57:09.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:57:09.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:57:09.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:57:09.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:57:09.979 [DEBUG] [Thread-8909] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:57:13.438 [DEBUG] [Thread-8911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:14.599 [DEBUG] [Thread-8912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:18.787 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:24.854 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:24.856 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:28.493 [DEBUG] [Thread-8913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:29.179 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:39.587 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:40.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:57:40.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:57:40.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:57:40.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 57, 19), 20.05, 41.44, 0.0, 11.2, 12.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:57:40.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:57:19
2025-11-26T00:57:40.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:57:40.925 [DEBUG] [Thread-8914] [transport.py] [_log()] starting thread (client mode): 0x70d6b250
2025-11-26T00:57:40.925 [DEBUG] [Thread-8914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:57:40.945 [DEBUG] [Thread-8914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:57:40.946 [INFO] [Thread-8914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:57:40.946 [DEBUG] [Thread-8914] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:57:40.946 [DEBUG] [Thread-8914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] client lang: <none>
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] server lang: <none>
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] kex follows: False
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] Compression: none
2025-11-26T00:57:40.947 [DEBUG] [Thread-8914] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:57:40.966 [DEBUG] [Thread-8914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:57:40.966 [DEBUG] [Thread-8914] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:57:40.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:57:40.967 [DEBUG] [Thread-8914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:57:40.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:57:40.970 [DEBUG] [Thread-8914] [transport.py] [_log()] userauth is OK
2025-11-26T00:57:40.970 [DEBUG] [Thread-8914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:57:40.970 [DEBUG] [Thread-8914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:57:40.970 [DEBUG] [Thread-8914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:57:40.970 [DEBUG] [Thread-8914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:57:41.005 [INFO] [Thread-8914] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:57:41.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:57:41.676 [DEBUG] [Thread-8914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:57:41.676 [DEBUG] [Thread-8914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:57:41.676 [DEBUG] [Thread-8914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:57:41.716 [DEBUG] [Thread-8914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:57:41.716 [DEBUG] [Thread-8914] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:57:41.719 [DEBUG] [Thread-8914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:57:41.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:57:41.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:57:41.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:57:41.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:57:41.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:57:41.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:57:41.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:57:41.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:57:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:57:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.956347 -999.00  +19.90   9.65     16   -5.80 1 1 1 1 1     0    0 26.46 25.21 ZNESW 7.5 9.7 129.2 12.7 19.6 -26.5 19.5 -26.0 19.2 -24.6 19.4 -25.6
2025-11-26T00:57:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:57:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:57:41.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.956347
2025-11-26T00:57:41.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:57:41.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:57:41.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:57:41.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:57:41.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:57:41.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:57:19', tmtdew=20.05, humidity=41.44, cloud=0.0, wind=11.2, temperature=12.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:57:19', seeing=1.64, atlas_timestamp='2025-11-25T22:57:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:54:00')
2025-11-26T00:57:41.744 [DEBUG] [Thread-8914] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:57:41.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:57:41.842 [DEBUG] [Thread-8917] [transport.py] [_log()] starting thread (client mode): 0x70d752d0
2025-11-26T00:57:41.842 [DEBUG] [Thread-8917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:57:41.857 [DEBUG] [Thread-8917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:57:41.857 [INFO] [Thread-8917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:57:41.864 [DEBUG] [Thread-8917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] client lang: <none>
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] server lang: <none>
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] kex follows: False
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] Compression: none
2025-11-26T00:57:41.865 [DEBUG] [Thread-8917] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:57:41.922 [DEBUG] [Thread-8917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:57:41.922 [DEBUG] [Thread-8917] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:57:41.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:57:41.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:57:41.924 [DEBUG] [Thread-8917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:57:41.978 [DEBUG] [Thread-8917] [transport.py] [_log()] userauth is OK
2025-11-26T00:57:41.978 [DEBUG] [Thread-8917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:57:41.978 [DEBUG] [Thread-8917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:57:41.978 [DEBUG] [Thread-8917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:57:41.978 [DEBUG] [Thread-8917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:57:41.993 [INFO] [Thread-8917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:57:41.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:57:41.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:57:42.829 [DEBUG] [Thread-8917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:57:42.829 [DEBUG] [Thread-8917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:57:42.877 [DEBUG] [Thread-8917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:57:42.877 [DEBUG] [Thread-8917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:57:42.886 [DEBUG] [Thread-8917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:57:42.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:57:42.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:57:42.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:57:42.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:57:42.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:57:42.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:57:42.923 [DEBUG] [Thread-8917] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:57:43.526 [DEBUG] [Thread-8919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:49.934 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:57:58.575 [DEBUG] [Thread-8920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:00.331 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:10.726 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:58:12.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:58:12.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:58:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 57, 51), 20.03, 41.44, 0.0, 12.42, 12.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:58:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:57:51
2025-11-26T00:58:13.608 [DEBUG] [Thread-8921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:13.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:58:13.874 [DEBUG] [Thread-8922] [transport.py] [_log()] starting thread (client mode): 0x70d7f2b0
2025-11-26T00:58:13.874 [DEBUG] [Thread-8922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:58:13.894 [DEBUG] [Thread-8922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:58:13.894 [INFO] [Thread-8922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:58:13.897 [DEBUG] [Thread-8922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] client lang: <none>
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] server lang: <none>
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] kex follows: False
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] Compression: none
2025-11-26T00:58:13.898 [DEBUG] [Thread-8922] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:58:13.915 [DEBUG] [Thread-8922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:58:13.916 [DEBUG] [Thread-8922] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:58:13.916 [DEBUG] [Thread-8922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:58:13.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:58:13.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:58:13.918 [DEBUG] [Thread-8922] [transport.py] [_log()] userauth is OK
2025-11-26T00:58:13.918 [DEBUG] [Thread-8922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:58:13.918 [DEBUG] [Thread-8922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:58:13.919 [DEBUG] [Thread-8922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:58:13.919 [DEBUG] [Thread-8922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:58:13.936 [INFO] [Thread-8922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:58:13.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:58:14.516 [DEBUG] [Thread-8922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:58:14.516 [DEBUG] [Thread-8922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:58:14.516 [DEBUG] [Thread-8922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:58:14.557 [DEBUG] [Thread-8922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:58:14.557 [DEBUG] [Thread-8922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:58:14.560 [DEBUG] [Thread-8922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:58:14.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:58:14.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:58:14.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:58:14.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:58:14.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:58:14.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:58:14.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:58:14.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:58:14.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:58:14.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.957041 -999.00  +20.00  13.14     16   -5.80 1 1 1 1 1     0    0 26.29 25.86 ZNESW 11.5 13.1 138.2 15.9 19.6 -26.5 19.5 -25.9 19.1 -24.5 19.4 -25.3
2025-11-26T00:58:14.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:58:14.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:58:14.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.957041
2025-11-26T00:58:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:58:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:58:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:58:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:58:14.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:58:14.580 [DEBUG] [Thread-8922] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:58:14.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:57:51', tmtdew=20.03, humidity=41.44, cloud=0.0, wind=12.42, temperature=12.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:57:51', seeing=1.64, atlas_timestamp='2025-11-25T22:58:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:54:00')
2025-11-26T00:58:14.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:58:14.667 [DEBUG] [Thread-8925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:14.677 [DEBUG] [Thread-8926] [transport.py] [_log()] starting thread (client mode): 0x70d75840
2025-11-26T00:58:14.677 [DEBUG] [Thread-8926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:58:14.691 [DEBUG] [Thread-8926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:58:14.691 [INFO] [Thread-8926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] client lang: <none>
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] server lang: <none>
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] kex follows: False
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] Compression: none
2025-11-26T00:58:14.699 [DEBUG] [Thread-8926] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:58:14.761 [DEBUG] [Thread-8926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:58:14.762 [DEBUG] [Thread-8926] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:58:14.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:58:14.763 [DEBUG] [Thread-8926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:58:14.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:58:14.783 [DEBUG] [Thread-8926] [transport.py] [_log()] userauth is OK
2025-11-26T00:58:14.783 [DEBUG] [Thread-8926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:58:14.783 [DEBUG] [Thread-8926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:58:14.783 [DEBUG] [Thread-8926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:58:14.783 [DEBUG] [Thread-8926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:58:14.802 [INFO] [Thread-8926] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:58:14.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:58:14.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:58:15.639 [DEBUG] [Thread-8926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:58:15.639 [DEBUG] [Thread-8926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:58:15.687 [DEBUG] [Thread-8926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:58:15.687 [DEBUG] [Thread-8926] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:58:15.697 [DEBUG] [Thread-8926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:58:15.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:58:15.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:58:15.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:58:15.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:58:15.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:58:15.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:58:15.739 [DEBUG] [Thread-8926] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:58:21.149 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:25.061 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:25.063 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:28.641 [DEBUG] [Thread-8928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:31.501 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:41.851 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:43.702 [DEBUG] [Thread-8929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:45.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:58:45.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:58:45.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:58:46.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 58, 23), 20.04, 41.44, 0.0, 13.55, 12.9, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:58:46.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:58:23
2025-11-26T00:58:46.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:58:46.736 [DEBUG] [Thread-8930] [transport.py] [_log()] starting thread (client mode): 0x70d39fc0
2025-11-26T00:58:46.736 [DEBUG] [Thread-8930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:58:46.754 [DEBUG] [Thread-8930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:58:46.754 [INFO] [Thread-8930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] client lang: <none>
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] server lang: <none>
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] kex follows: False
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] Compression: none
2025-11-26T00:58:46.755 [DEBUG] [Thread-8930] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:58:46.767 [DEBUG] [Thread-8930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:58:46.768 [DEBUG] [Thread-8930] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:58:46.768 [DEBUG] [Thread-8930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:58:46.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:58:46.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:58:46.768 [DEBUG] [Thread-8930] [transport.py] [_log()] userauth is OK
2025-11-26T00:58:46.768 [DEBUG] [Thread-8930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:58:46.768 [DEBUG] [Thread-8930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:58:46.769 [DEBUG] [Thread-8930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:58:46.769 [DEBUG] [Thread-8930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:58:46.783 [INFO] [Thread-8930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:58:46.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:58:47.386 [DEBUG] [Thread-8930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:58:47.386 [DEBUG] [Thread-8930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:58:47.386 [DEBUG] [Thread-8930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:58:47.427 [DEBUG] [Thread-8930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:58:47.427 [DEBUG] [Thread-8930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:58:47.429 [DEBUG] [Thread-8930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:58:47.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:58:47.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:58:47.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:58:47.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:58:47.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:58:47.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:58:47.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.957388 -999.00  +19.90   9.84     16   -5.90 1 1 1 1 1     0    0 26.31 28.05 ZNESW 9.9 9.8 146.0 14.8 19.6 -26.6 19.4 -25.9 19.1 -24.6 19.4 -25.5
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.957388
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:58:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:58:23', tmtdew=20.04, humidity=41.44, cloud=0.0, wind=13.55, temperature=12.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:58:23', seeing=1.47, atlas_timestamp='2025-11-25T22:58:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:56:00')
2025-11-26T00:58:47.446 [DEBUG] [Thread-8930] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:58:47.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:58:47.531 [DEBUG] [Thread-8933] [transport.py] [_log()] starting thread (client mode): 0x70d55bd0
2025-11-26T00:58:47.531 [DEBUG] [Thread-8933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:58:47.547 [DEBUG] [Thread-8933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:58:47.547 [INFO] [Thread-8933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] client lang: <none>
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] server lang: <none>
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] kex follows: False
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] Compression: none
2025-11-26T00:58:47.555 [DEBUG] [Thread-8933] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:58:47.614 [DEBUG] [Thread-8933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:58:47.614 [DEBUG] [Thread-8933] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:58:47.614 [DEBUG] [Thread-8933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:58:47.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:58:47.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:58:47.674 [DEBUG] [Thread-8933] [transport.py] [_log()] userauth is OK
2025-11-26T00:58:47.675 [DEBUG] [Thread-8933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:58:47.675 [DEBUG] [Thread-8933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:58:47.675 [DEBUG] [Thread-8933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:58:47.675 [DEBUG] [Thread-8933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:58:47.688 [INFO] [Thread-8933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:58:47.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:58:47.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:58:48.588 [DEBUG] [Thread-8933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:58:48.588 [DEBUG] [Thread-8933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:58:48.635 [DEBUG] [Thread-8933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:58:48.635 [DEBUG] [Thread-8933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:58:48.643 [DEBUG] [Thread-8933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:58:48.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:58:48.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:58:48.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:58:48.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:58:48.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:58:48.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:58:48.675 [DEBUG] [Thread-8933] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:58:52.257 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:58:58.737 [DEBUG] [Thread-8935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:02.664 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:13.078 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:13.800 [DEBUG] [Thread-8936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:14.747 [DEBUG] [Thread-8937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:18.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:59:18.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:59:18.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:59:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 58, 55), 20.1, 41.44, 0.0, 16.48, 12.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:59:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:58:55
2025-11-26T00:59:19.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:59:19.594 [DEBUG] [Thread-8938] [transport.py] [_log()] starting thread (client mode): 0x70d7df30
2025-11-26T00:59:19.595 [DEBUG] [Thread-8938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:59:19.608 [DEBUG] [Thread-8938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:59:19.608 [INFO] [Thread-8938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:59:19.611 [DEBUG] [Thread-8938] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:59:19.611 [DEBUG] [Thread-8938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:59:19.611 [DEBUG] [Thread-8938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:59:19.611 [DEBUG] [Thread-8938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:59:19.611 [DEBUG] [Thread-8938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:59:19.611 [DEBUG] [Thread-8938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:59:19.611 [DEBUG] [Thread-8938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:59:19.611 [DEBUG] [Thread-8938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] client lang: <none>
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] server lang: <none>
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] kex follows: False
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] Compression: none
2025-11-26T00:59:19.612 [DEBUG] [Thread-8938] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:59:19.628 [DEBUG] [Thread-8938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:59:19.629 [DEBUG] [Thread-8938] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:59:19.629 [DEBUG] [Thread-8938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:59:19.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:59:19.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:59:19.632 [DEBUG] [Thread-8938] [transport.py] [_log()] userauth is OK
2025-11-26T00:59:19.632 [DEBUG] [Thread-8938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:59:19.633 [DEBUG] [Thread-8938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:59:19.633 [DEBUG] [Thread-8938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:59:19.633 [DEBUG] [Thread-8938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:59:19.656 [INFO] [Thread-8938] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:59:19.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:59:20.217 [DEBUG] [Thread-8938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:59:20.217 [DEBUG] [Thread-8938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:59:20.218 [DEBUG] [Thread-8938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:59:20.258 [DEBUG] [Thread-8938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:59:20.258 [DEBUG] [Thread-8938] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:59:20.261 [DEBUG] [Thread-8938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:59:20.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:59:20.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:59:20.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:59:20.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:59:20.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:59:20.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:59:20.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:59:20.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:59:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:59:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.957388 -999.00  +19.90   9.84     16   -5.90 1 1 1 1 1     0    0 26.31 28.05 ZNESW 9.9 9.8 146.0 14.8 19.6 -26.6 19.4 -25.9 19.1 -24.6 19.4 -25.5
2025-11-26T00:59:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:59:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:59:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.957388
2025-11-26T00:59:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:59:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:59:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:59:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:59:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:59:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:58:55', tmtdew=20.1, humidity=41.44, cloud=0.0, wind=16.48, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:58:55', seeing=1.65, atlas_timestamp='2025-11-25T22:58:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:56:00')
2025-11-26T00:59:20.281 [DEBUG] [Thread-8938] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:59:20.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:59:20.376 [DEBUG] [Thread-8941] [transport.py] [_log()] starting thread (client mode): 0x70d54c10
2025-11-26T00:59:20.376 [DEBUG] [Thread-8941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:59:20.390 [DEBUG] [Thread-8941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:59:20.390 [INFO] [Thread-8941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] client lang: <none>
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] server lang: <none>
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] kex follows: False
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:59:20.398 [DEBUG] [Thread-8941] [transport.py] [_log()] Compression: none
2025-11-26T00:59:20.399 [DEBUG] [Thread-8941] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:59:20.456 [DEBUG] [Thread-8941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:59:20.457 [DEBUG] [Thread-8941] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:59:20.458 [DEBUG] [Thread-8941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:59:20.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:59:20.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:59:20.516 [DEBUG] [Thread-8941] [transport.py] [_log()] userauth is OK
2025-11-26T00:59:20.516 [DEBUG] [Thread-8941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:59:20.516 [DEBUG] [Thread-8941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:59:20.516 [DEBUG] [Thread-8941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:59:20.516 [DEBUG] [Thread-8941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:59:20.535 [INFO] [Thread-8941] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:59:20.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:59:20.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:59:21.383 [DEBUG] [Thread-8941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:59:21.383 [DEBUG] [Thread-8941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:59:21.432 [DEBUG] [Thread-8941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:59:21.433 [DEBUG] [Thread-8941] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:59:21.444 [DEBUG] [Thread-8941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:59:21.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:59: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')
2025-11-26T00:59:21.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:59:21.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:59:21.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:59:21.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:59:21.489 [DEBUG] [Thread-8941] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:59:23.417 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:25.268 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:25.269 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:28.828 [DEBUG] [Thread-8943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:33.816 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:43.871 [DEBUG] [Thread-8944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:44.261 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:51.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T00:59:51.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T00:59:51.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T00:59:52.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 59, 27), 20.12, 41.42, 0.0, 15.9, 12.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T00:59:52.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:59:27
2025-11-26T00:59:52.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T00:59:52.418 [DEBUG] [Thread-8945] [transport.py] [_log()] starting thread (client mode): 0x70d74ac0
2025-11-26T00:59:52.418 [DEBUG] [Thread-8945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:59:52.438 [DEBUG] [Thread-8945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T00:59:52.438 [INFO] [Thread-8945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T00:59:52.441 [DEBUG] [Thread-8945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] client lang: <none>
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] server lang: <none>
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] kex follows: False
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] Compression: none
2025-11-26T00:59:52.442 [DEBUG] [Thread-8945] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:59:52.460 [DEBUG] [Thread-8945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:59:52.460 [DEBUG] [Thread-8945] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:59:52.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T00:59:52.461 [DEBUG] [Thread-8945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T00:59:52.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:59:52.463 [DEBUG] [Thread-8945] [transport.py] [_log()] userauth is OK
2025-11-26T00:59:52.464 [DEBUG] [Thread-8945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:59:52.464 [DEBUG] [Thread-8945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:59:52.464 [DEBUG] [Thread-8945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T00:59:52.464 [DEBUG] [Thread-8945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:59:52.479 [INFO] [Thread-8945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:59:52.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:59:53.119 [DEBUG] [Thread-8945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:59:53.119 [DEBUG] [Thread-8945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:59:53.119 [DEBUG] [Thread-8945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T00:59:53.160 [DEBUG] [Thread-8945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:59:53.160 [DEBUG] [Thread-8945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:59:53.163 [DEBUG] [Thread-8945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:59:53.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:59:53.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T00:59:53.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T00:59:53.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T00:59:53.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:59:53.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T00:59:53.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:59:53.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:59:53.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T00:59:53.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.957736 -999.00  +19.80  12.54     17   -5.90 1 1 1 1 1     0    0 26.09 28.76 ZNESW 10.5 12.5 131.2 13.9 19.5 -26.4 19.4 -25.9 19.1 -24.6 19.4 -25.5
2025-11-26T00:59:53.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T00:59:53.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T00:59:53.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.957736
2025-11-26T00:59:53.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T00:59:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T00:59:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T00:59:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T00:59:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T00:59:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:59:27', tmtdew=20.12, humidity=41.42, cloud=0.0, wind=15.9, temperature=12.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:59:27', seeing=1.61, atlas_timestamp='2025-11-25T22:59:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:56:00')
2025-11-26T00:59:53.188 [DEBUG] [Thread-8945] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:59:53.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T00:59:53.295 [DEBUG] [Thread-8948] [transport.py] [_log()] starting thread (client mode): 0x70d75840
2025-11-26T00:59:53.295 [DEBUG] [Thread-8948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T00:59:53.310 [DEBUG] [Thread-8948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T00:59:53.310 [INFO] [Thread-8948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T00:59:53.318 [DEBUG] [Thread-8948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T00:59:53.318 [DEBUG] [Thread-8948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T00:59:53.318 [DEBUG] [Thread-8948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T00:59:53.318 [DEBUG] [Thread-8948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:59:53.318 [DEBUG] [Thread-8948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T00:59:53.319 [DEBUG] [Thread-8948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:59:53.319 [DEBUG] [Thread-8948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T00:59:53.319 [DEBUG] [Thread-8948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T00:59:53.319 [DEBUG] [Thread-8948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T00:59:53.319 [DEBUG] [Thread-8948] [transport.py] [_log()] client lang: <none>
2025-11-26T00:59:53.319 [DEBUG] [Thread-8948] [transport.py] [_log()] server lang: <none>
2025-11-26T00:59:53.319 [DEBUG] [Thread-8948] [transport.py] [_log()] kex follows: False
2025-11-26T00:59:53.319 [DEBUG] [Thread-8948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T00:59:53.319 [DEBUG] [Thread-8948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T00:59:53.320 [DEBUG] [Thread-8948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T00:59:53.320 [DEBUG] [Thread-8948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T00:59:53.320 [DEBUG] [Thread-8948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T00:59:53.320 [DEBUG] [Thread-8948] [transport.py] [_log()] Compression: none
2025-11-26T00:59:53.320 [DEBUG] [Thread-8948] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T00:59:53.378 [DEBUG] [Thread-8948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T00:59:53.379 [DEBUG] [Thread-8948] [transport.py] [_log()] Switch to new keys ...
2025-11-26T00:59:53.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T00:59:53.380 [DEBUG] [Thread-8948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T00:59:53.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T00:59:53.436 [DEBUG] [Thread-8948] [transport.py] [_log()] userauth is OK
2025-11-26T00:59:53.437 [DEBUG] [Thread-8948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T00:59:53.437 [DEBUG] [Thread-8948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T00:59:53.437 [DEBUG] [Thread-8948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T00:59:53.437 [DEBUG] [Thread-8948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T00:59:53.456 [INFO] [Thread-8948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T00:59:53.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T00:59:53.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T00:59:54.286 [DEBUG] [Thread-8948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T00:59:54.287 [DEBUG] [Thread-8948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T00:59:54.334 [DEBUG] [Thread-8948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T00:59:54.335 [DEBUG] [Thread-8948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T00:59:54.344 [DEBUG] [Thread-8948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T00:59:54.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T00:59:54.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T00:59:54.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T00:59:54.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T00:59:54.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T00:59:54.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T00:59:54.380 [DEBUG] [Thread-8948] [transport.py] [_log()] EOF in transport thread
2025-11-26T00:59:54.672 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T00:59:58.910 [DEBUG] [Thread-8950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:05.077 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:13.958 [DEBUG] [Thread-8951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:14.820 [DEBUG] [Thread-8952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:15.453 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:24.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:00:24.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:00:24.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:00:25.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 0, 59, 59), 20.19, 41.42, 0.0, 14.06, 12.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:00:25.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 00:59:59
2025-11-26T01:00:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:00:25.313 [DEBUG] [Thread-8953] [transport.py] [_log()] starting thread (client mode): 0x70d3b460
2025-11-26T01:00:25.313 [DEBUG] [Thread-8953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:00:25.334 [DEBUG] [Thread-8953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:00:25.335 [INFO] [Thread-8953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] client lang: <none>
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] server lang: <none>
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] kex follows: False
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] Compression: none
2025-11-26T01:00:25.338 [DEBUG] [Thread-8953] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:00:25.356 [DEBUG] [Thread-8953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:00:25.356 [DEBUG] [Thread-8953] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:00:25.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:00:25.357 [DEBUG] [Thread-8953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:00:25.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:00:25.359 [DEBUG] [Thread-8953] [transport.py] [_log()] userauth is OK
2025-11-26T01:00:25.359 [DEBUG] [Thread-8953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:00:25.359 [DEBUG] [Thread-8953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:00:25.360 [DEBUG] [Thread-8953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:00:25.360 [DEBUG] [Thread-8953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:00:25.384 [INFO] [Thread-8953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:00:25.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:00:25.483 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:25.484 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:25.840 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:26.181 [DEBUG] [Thread-8953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:00:26.181 [DEBUG] [Thread-8953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:00:26.182 [DEBUG] [Thread-8953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:00:26.222 [DEBUG] [Thread-8953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:00:26.222 [DEBUG] [Thread-8953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:00:26.226 [DEBUG] [Thread-8953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:00:26.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:00:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:00:26.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:00:26.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:00:26.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:00:26.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:00:26.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:00:26.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:00:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:00:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.958083 -999.00  +19.80  15.18     16   -6.00 1 1 1 1 1     0    0 26.06 27.61 ZNESW 11.2 15.2 135.6 16.1 19.5 -26.5 19.4 -25.9 19.2 -24.4 19.4 -25.5
2025-11-26T01:00:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:00:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:00:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.958083
2025-11-26T01:00:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:00:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:00:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:00:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:00:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:00:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T00:59:59', tmtdew=20.19, humidity=41.42, cloud=0.0, wind=14.06, temperature=12.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T00:59:59', seeing=1.47, atlas_timestamp='2025-11-25T22:59:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:56:00')
2025-11-26T01:00:26.248 [DEBUG] [Thread-8953] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:00:26.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:00:26.343 [DEBUG] [Thread-8956] [transport.py] [_log()] starting thread (client mode): 0x70d57f10
2025-11-26T01:00:26.344 [DEBUG] [Thread-8956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:00:26.358 [DEBUG] [Thread-8956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:00:26.358 [INFO] [Thread-8956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] client lang: <none>
2025-11-26T01:00:26.366 [DEBUG] [Thread-8956] [transport.py] [_log()] server lang: <none>
2025-11-26T01:00:26.367 [DEBUG] [Thread-8956] [transport.py] [_log()] kex follows: False
2025-11-26T01:00:26.367 [DEBUG] [Thread-8956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:00:26.367 [DEBUG] [Thread-8956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:00:26.367 [DEBUG] [Thread-8956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:00:26.367 [DEBUG] [Thread-8956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:00:26.367 [DEBUG] [Thread-8956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:00:26.367 [DEBUG] [Thread-8956] [transport.py] [_log()] Compression: none
2025-11-26T01:00:26.367 [DEBUG] [Thread-8956] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:00:26.425 [DEBUG] [Thread-8956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:00:26.426 [DEBUG] [Thread-8956] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:00:26.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:00:26.427 [DEBUG] [Thread-8956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:00:26.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:00:26.485 [DEBUG] [Thread-8956] [transport.py] [_log()] userauth is OK
2025-11-26T01:00:26.485 [DEBUG] [Thread-8956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:00:26.485 [DEBUG] [Thread-8956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:00:26.485 [DEBUG] [Thread-8956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:00:26.485 [DEBUG] [Thread-8956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:00:26.504 [INFO] [Thread-8956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:00:26.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:00:26.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:00:27.350 [DEBUG] [Thread-8956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:00:27.350 [DEBUG] [Thread-8956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:00:27.398 [DEBUG] [Thread-8956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:00:27.398 [DEBUG] [Thread-8956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:00:27.407 [DEBUG] [Thread-8956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:00:27.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:00:27.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:00:27.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:00:27.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:00:27.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:00:27.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:00:27.443 [DEBUG] [Thread-8956] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:00:28.996 [DEBUG] [Thread-8958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:36.274 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:44.042 [DEBUG] [Thread-8959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:46.666 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:57.075 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:57.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:00:57.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:00:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:00:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 0, 31), 20.32, 41.32, 0.0, 13.85, 13.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:00:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:00:31
2025-11-26T01:00:58.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:00:58.391 [DEBUG] [Thread-8960] [transport.py] [_log()] starting thread (client mode): 0x70d54910
2025-11-26T01:00:58.391 [DEBUG] [Thread-8960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:00:58.405 [DEBUG] [Thread-8960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:00:58.405 [INFO] [Thread-8960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:00:58.407 [DEBUG] [Thread-8960] [transport.py] [_log()] client lang: <none>
2025-11-26T01:00:58.408 [DEBUG] [Thread-8960] [transport.py] [_log()] server lang: <none>
2025-11-26T01:00:58.408 [DEBUG] [Thread-8960] [transport.py] [_log()] kex follows: False
2025-11-26T01:00:58.408 [DEBUG] [Thread-8960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:00:58.408 [DEBUG] [Thread-8960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:00:58.408 [DEBUG] [Thread-8960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:00:58.408 [DEBUG] [Thread-8960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:00:58.408 [DEBUG] [Thread-8960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:00:58.408 [DEBUG] [Thread-8960] [transport.py] [_log()] Compression: none
2025-11-26T01:00:58.408 [DEBUG] [Thread-8960] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:00:58.421 [DEBUG] [Thread-8960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:00:58.422 [DEBUG] [Thread-8960] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:00:58.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:00:58.424 [DEBUG] [Thread-8960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:00:58.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:00:58.425 [DEBUG] [Thread-8960] [transport.py] [_log()] userauth is OK
2025-11-26T01:00:58.426 [DEBUG] [Thread-8960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:00:58.426 [DEBUG] [Thread-8960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:00:58.426 [DEBUG] [Thread-8960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:00:58.426 [DEBUG] [Thread-8960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:00:58.454 [INFO] [Thread-8960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:00:58.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:00:59.078 [DEBUG] [Thread-8962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:00:59.090 [DEBUG] [Thread-8960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:00:59.090 [DEBUG] [Thread-8960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:00:59.090 [DEBUG] [Thread-8960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:00:59.131 [DEBUG] [Thread-8960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:00:59.131 [DEBUG] [Thread-8960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:00:59.134 [DEBUG] [Thread-8960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:00:59.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:00:59.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:00:59.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:00:59.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:00:59.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:00:59.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:00:59.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:00:59.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:00:59.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:00:59.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.958430 -999.00  +19.90  11.04     16   -5.90 1 1 1 1 1     0    0 26.07 29.15 ZNESW 12.3 11.0 131.0 18.5 19.6 -26.5 19.4 -25.9 19.2 -24.5 19.4 -25.3
2025-11-26T01:00:59.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:00:59.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:00:59.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.958430
2025-11-26T01:00:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:00:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:00:59.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:00:59.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:00:59.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:00:59.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:00:31', tmtdew=20.32, humidity=41.32, cloud=0.0, wind=13.85, temperature=13.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:00:31', seeing=1.61, atlas_timestamp='2025-11-25T23:00:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.021250000000000213, 0.013250000000001094, -0.01750000000000007, 0.05649999999999977, 0.02725000000000044, -0.018500000000001293, -0.03275000000000006, 0.010999999999999233, 0.002000000000000668, 0.02224999999999966, -0.015000000000000568, 0.0799999999999983, 0.08424999999999905, 0.0129999999999999, -0.011000000000001009, -0.0027500000000006963, -0.005499999999999616, 0.016000000000000014, -0.04075000000000095, 0.08199999999999896, 0.06874999999999787, 0.030250000000000554, 0.0017499999999994742, -0.023000000000001464, -0.014499999999999957, -0.0002500000000011937, 0.05850000000000044, 0.11899999999999977, 0.05500000000000149, 0.030000000000001137, -0.006999999999999673, 0.0007500000000000284], zp_timestamp='2025-11-25T22:56:00')
2025-11-26T01:00:59.164 [DEBUG] [Thread-8960] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:00:59.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:00:59.260 [DEBUG] [Thread-8964] [transport.py] [_log()] starting thread (client mode): 0x70de4880
2025-11-26T01:00:59.260 [DEBUG] [Thread-8964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:00:59.274 [DEBUG] [Thread-8964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:00:59.275 [INFO] [Thread-8964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:00:59.282 [DEBUG] [Thread-8964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:00:59.282 [DEBUG] [Thread-8964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] client lang: <none>
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] server lang: <none>
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] kex follows: False
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] Compression: none
2025-11-26T01:00:59.283 [DEBUG] [Thread-8964] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:00:59.341 [DEBUG] [Thread-8964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:00:59.341 [DEBUG] [Thread-8964] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:00:59.342 [DEBUG] [Thread-8964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:00:59.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:00:59.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:00:59.397 [DEBUG] [Thread-8964] [transport.py] [_log()] userauth is OK
2025-11-26T01:00:59.397 [DEBUG] [Thread-8964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:00:59.397 [DEBUG] [Thread-8964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:00:59.397 [DEBUG] [Thread-8964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:00:59.398 [DEBUG] [Thread-8964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:00:59.424 [INFO] [Thread-8964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:00:59.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:00:59.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:01:00.268 [DEBUG] [Thread-8964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:01:00.268 [DEBUG] [Thread-8964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:01:00.315 [DEBUG] [Thread-8964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:01:00.315 [DEBUG] [Thread-8964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:01:00.324 [DEBUG] [Thread-8964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:01:00.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:01:00.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:01:00.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:01:00.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:01:00.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:01:00.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:01:00.357 [DEBUG] [Thread-8964] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:01:07.518 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:14.113 [DEBUG] [Thread-8966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:14.876 [DEBUG] [Thread-8967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:17.833 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:25.685 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:25.686 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:28.258 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:29.165 [DEBUG] [Thread-8968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:30.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:01:30.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:01:30.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:01:31.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 1, 3), 20.36, 41.29, 0.0, 13.45, 13.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:01:31.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:01:03
2025-11-26T01:01:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:01:31.310 [DEBUG] [Thread-8969] [transport.py] [_log()] starting thread (client mode): 0x70dbf070
2025-11-26T01:01:31.310 [DEBUG] [Thread-8969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:01:31.331 [DEBUG] [Thread-8969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:01:31.331 [INFO] [Thread-8969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:01:31.334 [DEBUG] [Thread-8969] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] client lang: <none>
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] server lang: <none>
2025-11-26T01:01:31.335 [DEBUG] [Thread-8969] [transport.py] [_log()] kex follows: False
2025-11-26T01:01:31.336 [DEBUG] [Thread-8969] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:01:31.336 [DEBUG] [Thread-8969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:01:31.336 [DEBUG] [Thread-8969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:01:31.336 [DEBUG] [Thread-8969] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:01:31.336 [DEBUG] [Thread-8969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:01:31.336 [DEBUG] [Thread-8969] [transport.py] [_log()] Compression: none
2025-11-26T01:01:31.336 [DEBUG] [Thread-8969] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:01:31.346 [DEBUG] [Thread-8969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:01:31.347 [DEBUG] [Thread-8969] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:01:31.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:01:31.348 [DEBUG] [Thread-8969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:01:31.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:01:31.351 [DEBUG] [Thread-8969] [transport.py] [_log()] userauth is OK
2025-11-26T01:01:31.351 [DEBUG] [Thread-8969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:01:31.351 [DEBUG] [Thread-8969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:01:31.351 [DEBUG] [Thread-8969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:01:31.351 [DEBUG] [Thread-8969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:01:31.376 [INFO] [Thread-8969] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:01:31.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:01:32.173 [DEBUG] [Thread-8969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:01:32.173 [DEBUG] [Thread-8969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:01:32.173 [DEBUG] [Thread-8969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:01:32.214 [DEBUG] [Thread-8969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:01:32.214 [DEBUG] [Thread-8969] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:01:32.217 [DEBUG] [Thread-8969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:01:32.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:01:32.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:01:32.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:01:32.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:01:32.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:01:32.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:01:32.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:01:32.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:01:32.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:01:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.958777 -999.00  +19.90  11.65     16   -5.90 1 1 1 1 1     0    0 26.83 31.14 ZNESW 12.2 11.7 126.8 14.4 19.5 -26.6 19.5 -26.0 19.1 -24.6 19.4 -25.4
2025-11-26T01:01:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:01:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:01:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.958777
2025-11-26T01:01:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:01:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:01:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:01:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:01:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:01:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:01:03', tmtdew=20.36, humidity=41.29, cloud=0.0, wind=13.45, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:01:03', seeing=1.33, atlas_timestamp='2025-11-25T23:00:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:00:00')
2025-11-26T01:01:32.246 [DEBUG] [Thread-8969] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:01:32.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:01:32.342 [DEBUG] [Thread-8972] [transport.py] [_log()] starting thread (client mode): 0x70d7fb80
2025-11-26T01:01:32.342 [DEBUG] [Thread-8972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:01:32.357 [DEBUG] [Thread-8972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:01:32.357 [INFO] [Thread-8972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:01:32.364 [DEBUG] [Thread-8972] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] client lang: <none>
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] server lang: <none>
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] kex follows: False
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] Compression: none
2025-11-26T01:01:32.365 [DEBUG] [Thread-8972] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:01:32.424 [DEBUG] [Thread-8972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:01:32.425 [DEBUG] [Thread-8972] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:01:32.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:01:32.426 [DEBUG] [Thread-8972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:01:32.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:01:32.481 [DEBUG] [Thread-8972] [transport.py] [_log()] userauth is OK
2025-11-26T01:01:32.481 [DEBUG] [Thread-8972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:01:32.481 [DEBUG] [Thread-8972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:01:32.481 [DEBUG] [Thread-8972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:01:32.481 [DEBUG] [Thread-8972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:01:32.500 [INFO] [Thread-8972] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:01:32.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:01:32.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:01:33.322 [DEBUG] [Thread-8972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:01:33.322 [DEBUG] [Thread-8972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:01:33.370 [DEBUG] [Thread-8972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:01:33.370 [DEBUG] [Thread-8972] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:01:33.379 [DEBUG] [Thread-8972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:01:33.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:01:33.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:01:33.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:01:33.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:01:33.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:01:33.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:01:33.417 [DEBUG] [Thread-8972] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:01:38.617 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:44.207 [DEBUG] [Thread-8974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:49.045 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:59.264 [DEBUG] [Thread-8975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:01:59.360 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:03.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:02:03.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:02:03.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:02:04.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 1, 35), 20.36, 41.32, 0.0, 14.4, 13.08, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:02:04.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:01:35
2025-11-26T01:02:04.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:02:04.353 [DEBUG] [Thread-8976] [transport.py] [_log()] starting thread (client mode): 0x70d7fbe0
2025-11-26T01:02:04.353 [DEBUG] [Thread-8976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:02:04.372 [DEBUG] [Thread-8976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:02:04.373 [INFO] [Thread-8976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] client lang: <none>
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] server lang: <none>
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] kex follows: False
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:02:04.376 [DEBUG] [Thread-8976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:02:04.377 [DEBUG] [Thread-8976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:02:04.377 [DEBUG] [Thread-8976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:02:04.377 [DEBUG] [Thread-8976] [transport.py] [_log()] Compression: none
2025-11-26T01:02:04.377 [DEBUG] [Thread-8976] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:02:04.396 [DEBUG] [Thread-8976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:02:04.397 [DEBUG] [Thread-8976] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:02:04.398 [DEBUG] [Thread-8976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:02:04.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:02:04.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:02:04.400 [DEBUG] [Thread-8976] [transport.py] [_log()] userauth is OK
2025-11-26T01:02:04.400 [DEBUG] [Thread-8976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:02:04.400 [DEBUG] [Thread-8976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:02:04.400 [DEBUG] [Thread-8976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:02:04.400 [DEBUG] [Thread-8976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:02:04.423 [INFO] [Thread-8976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:02:04.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:02:05.029 [DEBUG] [Thread-8976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:02:05.029 [DEBUG] [Thread-8976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:02:05.030 [DEBUG] [Thread-8976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:02:05.070 [DEBUG] [Thread-8976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:02:05.070 [DEBUG] [Thread-8976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:02:05.073 [DEBUG] [Thread-8976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:02:05.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:02:05.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:02:05.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:02:05.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:02:05.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:02:05.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:02:05.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:02:05.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:02:05.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:02:05.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.959472 -999.00  +19.90  10.72     16   -5.90 1 1 1 1 1     0    0 26.74 30.47 ZNESW 10.9 10.7 125.4 12.5 19.6 -26.6 19.4 -25.9 19.1 -24.6 19.4 -25.5
2025-11-26T01:02:05.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:02:05.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:02:05.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.959472
2025-11-26T01:02:05.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:02:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:02:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:02:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:02:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:02:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:01:35', tmtdew=20.36, humidity=41.32, cloud=0.0, wind=14.4, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:01:35', seeing=1.33, atlas_timestamp='2025-11-25T23:01:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:00:00')
2025-11-26T01:02:05.102 [DEBUG] [Thread-8976] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:02:05.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:02:05.196 [DEBUG] [Thread-8979] [transport.py] [_log()] starting thread (client mode): 0x70de4d90
2025-11-26T01:02:05.196 [DEBUG] [Thread-8979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:02:05.211 [DEBUG] [Thread-8979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:02:05.211 [INFO] [Thread-8979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:02:05.218 [DEBUG] [Thread-8979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:02:05.218 [DEBUG] [Thread-8979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:02:05.218 [DEBUG] [Thread-8979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] client lang: <none>
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] server lang: <none>
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] kex follows: False
2025-11-26T01:02:05.219 [DEBUG] [Thread-8979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:02:05.220 [DEBUG] [Thread-8979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:02:05.220 [DEBUG] [Thread-8979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:02:05.220 [DEBUG] [Thread-8979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:02:05.220 [DEBUG] [Thread-8979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:02:05.220 [DEBUG] [Thread-8979] [transport.py] [_log()] Compression: none
2025-11-26T01:02:05.220 [DEBUG] [Thread-8979] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:02:05.280 [DEBUG] [Thread-8979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:02:05.281 [DEBUG] [Thread-8979] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:02:05.282 [DEBUG] [Thread-8979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:02:05.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:02:05.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:02:05.341 [DEBUG] [Thread-8979] [transport.py] [_log()] userauth is OK
2025-11-26T01:02:05.341 [DEBUG] [Thread-8979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:02:05.342 [DEBUG] [Thread-8979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:02:05.342 [DEBUG] [Thread-8979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:02:05.342 [DEBUG] [Thread-8979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:02:05.364 [INFO] [Thread-8979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:02:05.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:02:05.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:02:06.216 [DEBUG] [Thread-8979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:02:06.216 [DEBUG] [Thread-8979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:02:06.265 [DEBUG] [Thread-8979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:02:06.265 [DEBUG] [Thread-8979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:02:06.274 [DEBUG] [Thread-8979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:02:06.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:02:06.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:02:06.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:02:06.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:02:06.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:02:06.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:02:06.311 [DEBUG] [Thread-8979] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:02:09.737 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:14.292 [DEBUG] [Thread-8981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:14.943 [DEBUG] [Thread-8982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:20.181 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:25.889 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:25.890 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:29.341 [DEBUG] [Thread-8983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:30.517 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:02:36.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:02:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:02:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 2, 7), 20.36, 41.31, 0.0, 14.75, 13.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:02:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:02:07
2025-11-26T01:02:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:02:37.279 [DEBUG] [Thread-8984] [transport.py] [_log()] starting thread (client mode): 0x70d7e770
2025-11-26T01:02:37.279 [DEBUG] [Thread-8984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:02:37.299 [DEBUG] [Thread-8984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:02:37.299 [INFO] [Thread-8984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:02:37.302 [DEBUG] [Thread-8984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:02:37.302 [DEBUG] [Thread-8984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] client lang: <none>
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] server lang: <none>
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] kex follows: False
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] Compression: none
2025-11-26T01:02:37.303 [DEBUG] [Thread-8984] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:02:37.318 [DEBUG] [Thread-8984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:02:37.318 [DEBUG] [Thread-8984] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:02:37.318 [DEBUG] [Thread-8984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:02:37.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:02:37.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:02:37.360 [DEBUG] [Thread-8984] [transport.py] [_log()] userauth is OK
2025-11-26T01:02:37.360 [DEBUG] [Thread-8984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:02:37.360 [DEBUG] [Thread-8984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:02:37.360 [DEBUG] [Thread-8984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:02:37.360 [DEBUG] [Thread-8984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:02:37.375 [INFO] [Thread-8984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:02:37.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:02:38.171 [DEBUG] [Thread-8984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:02:38.171 [DEBUG] [Thread-8984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:02:38.171 [DEBUG] [Thread-8984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:02:38.212 [DEBUG] [Thread-8984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:02:38.212 [DEBUG] [Thread-8984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:02:38.215 [DEBUG] [Thread-8984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:02:38.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:02:38.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:02:38.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:02:38.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:02:38.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:02:38.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:02:38.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.959819 -999.00  +19.90  10.95     16   -5.90 1 1 1 1 1     0    0 26.71 29.24 ZNESW 12.4 10.9 137.4 13.4 19.5 -26.5 19.5 -26.0 19.2 -24.6 19.4 -25.4
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.959819
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:02:38.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:02:07', tmtdew=20.36, humidity=41.31, cloud=0.0, wind=14.75, temperature=13.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:02:07', seeing=1.33, atlas_timestamp='2025-11-25T23:02:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:00:00')
2025-11-26T01:02:38.235 [DEBUG] [Thread-8984] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:02:38.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:02:38.320 [DEBUG] [Thread-8987] [transport.py] [_log()] starting thread (client mode): 0x70df3700
2025-11-26T01:02:38.320 [DEBUG] [Thread-8987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:02:38.335 [DEBUG] [Thread-8987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:02:38.335 [INFO] [Thread-8987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:02:38.342 [DEBUG] [Thread-8987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:02:38.342 [DEBUG] [Thread-8987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:02:38.342 [DEBUG] [Thread-8987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:02:38.342 [DEBUG] [Thread-8987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] client lang: <none>
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] server lang: <none>
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] kex follows: False
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] Compression: none
2025-11-26T01:02:38.343 [DEBUG] [Thread-8987] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:02:38.400 [DEBUG] [Thread-8987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:02:38.401 [DEBUG] [Thread-8987] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:02:38.401 [DEBUG] [Thread-8987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:02:38.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:02:38.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:02:38.462 [DEBUG] [Thread-8987] [transport.py] [_log()] userauth is OK
2025-11-26T01:02:38.462 [DEBUG] [Thread-8987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:02:38.462 [DEBUG] [Thread-8987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:02:38.462 [DEBUG] [Thread-8987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:02:38.462 [DEBUG] [Thread-8987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:02:38.479 [INFO] [Thread-8987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:02:38.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:02:38.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:02:39.294 [DEBUG] [Thread-8987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:02:39.294 [DEBUG] [Thread-8987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:02:39.342 [DEBUG] [Thread-8987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:02:39.342 [DEBUG] [Thread-8987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:02:39.351 [DEBUG] [Thread-8987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:02:39.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:02:39.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:02: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') -> 00000000
2025-11-26T01:02:39.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:02:39.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:02:39.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:02:39.388 [DEBUG] [Thread-8987] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:02:40.892 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:44.375 [DEBUG] [Thread-8989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:51.267 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:02:59.429 [DEBUG] [Thread-8990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:01.605 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:09.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:03:09.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:03:09.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:03:10.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 2, 39), 20.34, 41.3, 0.0, 14.38, 13.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:03:10.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:02:39
2025-11-26T01:03:10.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:03:10.327 [DEBUG] [Thread-8991] [transport.py] [_log()] starting thread (client mode): 0x70da4880
2025-11-26T01:03:10.327 [DEBUG] [Thread-8991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:03:10.347 [DEBUG] [Thread-8991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:03:10.347 [INFO] [Thread-8991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:03:10.350 [DEBUG] [Thread-8991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:03:10.350 [DEBUG] [Thread-8991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:03:10.350 [DEBUG] [Thread-8991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:03:10.350 [DEBUG] [Thread-8991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:03:10.350 [DEBUG] [Thread-8991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:03:10.350 [DEBUG] [Thread-8991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:03:10.350 [DEBUG] [Thread-8991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:03:10.350 [DEBUG] [Thread-8991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:03:10.350 [DEBUG] [Thread-8991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] client lang: <none>
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] server lang: <none>
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] kex follows: False
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] Compression: none
2025-11-26T01:03:10.351 [DEBUG] [Thread-8991] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:03:10.364 [DEBUG] [Thread-8991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:03:10.365 [DEBUG] [Thread-8991] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:03:10.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:03:10.366 [DEBUG] [Thread-8991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:03:10.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:03:10.409 [DEBUG] [Thread-8991] [transport.py] [_log()] userauth is OK
2025-11-26T01:03:10.409 [DEBUG] [Thread-8991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:03:10.409 [DEBUG] [Thread-8991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:03:10.409 [DEBUG] [Thread-8991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:03:10.409 [DEBUG] [Thread-8991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:03:10.423 [INFO] [Thread-8991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:03:10.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:03:11.062 [DEBUG] [Thread-8991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:03:11.062 [DEBUG] [Thread-8991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:03:11.063 [DEBUG] [Thread-8991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:03:11.103 [DEBUG] [Thread-8991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:03:11.103 [DEBUG] [Thread-8991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:03:11.105 [DEBUG] [Thread-8991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:03:11.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:03:11.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:03:11.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:03:11.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:03:11.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:03:11.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:03:11.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:03:11.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:03:11.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:03:11.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.960166 -999.00  +19.90  11.40     16   -5.90 1 1 1 1 1     0    0 26.57 28.01 ZNESW 11.6 11.4 132.6 14.3 19.5 -26.5 19.4 -25.8 19.1 -24.6 19.4 -25.6
2025-11-26T01:03:11.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:03:11.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:03:11.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.960166
2025-11-26T01:03:11.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:03:11.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:03:11.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:03:11.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:03:11.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:03:11.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:02:39', tmtdew=20.34, humidity=41.3, cloud=0.0, wind=14.38, temperature=13.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:02:39', seeing=1.52, atlas_timestamp='2025-11-25T23:02:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:00:00')
2025-11-26T01:03:11.125 [DEBUG] [Thread-8991] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:03:11.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:03:11.214 [DEBUG] [Thread-8994] [transport.py] [_log()] starting thread (client mode): 0x70da6410
2025-11-26T01:03:11.214 [DEBUG] [Thread-8994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:03:11.231 [DEBUG] [Thread-8994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:03:11.231 [INFO] [Thread-8994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] client lang: <none>
2025-11-26T01:03:11.238 [DEBUG] [Thread-8994] [transport.py] [_log()] server lang: <none>
2025-11-26T01:03:11.239 [DEBUG] [Thread-8994] [transport.py] [_log()] kex follows: False
2025-11-26T01:03:11.239 [DEBUG] [Thread-8994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:03:11.239 [DEBUG] [Thread-8994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:03:11.239 [DEBUG] [Thread-8994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:03:11.239 [DEBUG] [Thread-8994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:03:11.239 [DEBUG] [Thread-8994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:03:11.239 [DEBUG] [Thread-8994] [transport.py] [_log()] Compression: none
2025-11-26T01:03:11.239 [DEBUG] [Thread-8994] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:03:11.295 [DEBUG] [Thread-8994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:03:11.295 [DEBUG] [Thread-8994] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:03:11.296 [DEBUG] [Thread-8994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:03:11.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:03:11.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:03:11.353 [DEBUG] [Thread-8994] [transport.py] [_log()] userauth is OK
2025-11-26T01:03:11.353 [DEBUG] [Thread-8994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:03:11.353 [DEBUG] [Thread-8994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:03:11.353 [DEBUG] [Thread-8994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:03:11.353 [DEBUG] [Thread-8994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:03:11.367 [INFO] [Thread-8994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:03:11.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:03:11.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:03:11.990 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:12.245 [DEBUG] [Thread-8994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:03:12.246 [DEBUG] [Thread-8994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:03:12.293 [DEBUG] [Thread-8994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:03:12.293 [DEBUG] [Thread-8994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:03:12.301 [DEBUG] [Thread-8994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:03:12.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:03:12.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:03:12.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:03:12.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:03:12.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:03:12.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:03:12.333 [DEBUG] [Thread-8994] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:03:14.462 [DEBUG] [Thread-8996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:14.999 [DEBUG] [Thread-8997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:22.320 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:26.091 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:26.092 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:29.503 [DEBUG] [Thread-8998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:32.762 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:42.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:03:42.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:03:42.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:03:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 3, 11), 20.3, 41.32, 0.0, 15.19, 12.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:03:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:03:11
2025-11-26T01:03:43.119 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:03:43.282 [DEBUG] [Thread-8999] [transport.py] [_log()] starting thread (client mode): 0x70de7b20
2025-11-26T01:03:43.282 [DEBUG] [Thread-8999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:03:43.302 [DEBUG] [Thread-8999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:03:43.302 [INFO] [Thread-8999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:03:43.305 [DEBUG] [Thread-8999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:03:43.311 [DEBUG] [Thread-8999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] client lang: <none>
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] server lang: <none>
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] kex follows: False
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] Compression: none
2025-11-26T01:03:43.312 [DEBUG] [Thread-8999] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:03:43.331 [DEBUG] [Thread-8999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:03:43.332 [DEBUG] [Thread-8999] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:03:43.332 [DEBUG] [Thread-8999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:03:43.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:03:43.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:03:43.334 [DEBUG] [Thread-8999] [transport.py] [_log()] userauth is OK
2025-11-26T01:03:43.334 [DEBUG] [Thread-8999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:03:43.334 [DEBUG] [Thread-8999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:03:43.335 [DEBUG] [Thread-8999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:03:43.335 [DEBUG] [Thread-8999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:03:43.357 [INFO] [Thread-8999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:03:43.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:03:44.174 [DEBUG] [Thread-8999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:03:44.174 [DEBUG] [Thread-8999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:03:44.174 [DEBUG] [Thread-8999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:03:44.215 [DEBUG] [Thread-8999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:03:44.215 [DEBUG] [Thread-8999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:03:44.217 [DEBUG] [Thread-8999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:03:44.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:03:44.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:03:44.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:03:44.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:03:44.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:03:44.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:03:44.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:03:44.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:03:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:03:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.960513 -999.00  +19.80  11.81     16   -5.90 1 1 1 1 1     0    0 26.69 27.87 ZNESW 9.7 11.8 134.8 14.3 19.5 -26.6 19.5 -25.9 19.1 -24.7 19.4 -25.6
2025-11-26T01:03:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:03:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:03:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.960513
2025-11-26T01:03:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:03:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:03:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:03:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:03:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:03:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:03:11', tmtdew=20.3, humidity=41.32, cloud=0.0, wind=15.19, temperature=12.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:03:11', seeing=1.34, atlas_timestamp='2025-11-25T23:03:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:00:00')
2025-11-26T01:03:44.237 [DEBUG] [Thread-8999] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:03:44.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:03:44.323 [DEBUG] [Thread-9002] [transport.py] [_log()] starting thread (client mode): 0x70d425f0
2025-11-26T01:03:44.323 [DEBUG] [Thread-9002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:03:44.338 [DEBUG] [Thread-9002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:03:44.338 [INFO] [Thread-9002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:03:44.345 [DEBUG] [Thread-9002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:03:44.345 [DEBUG] [Thread-9002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:03:44.345 [DEBUG] [Thread-9002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:03:44.345 [DEBUG] [Thread-9002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:03:44.345 [DEBUG] [Thread-9002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:03:44.345 [DEBUG] [Thread-9002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:03:44.345 [DEBUG] [Thread-9002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] client lang: <none>
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] server lang: <none>
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] kex follows: False
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] Compression: none
2025-11-26T01:03:44.346 [DEBUG] [Thread-9002] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:03:44.404 [DEBUG] [Thread-9002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:03:44.404 [DEBUG] [Thread-9002] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:03:44.404 [DEBUG] [Thread-9002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:03:44.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:03:44.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:03:44.461 [DEBUG] [Thread-9002] [transport.py] [_log()] userauth is OK
2025-11-26T01:03:44.461 [DEBUG] [Thread-9002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:03:44.461 [DEBUG] [Thread-9002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:03:44.461 [DEBUG] [Thread-9002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:03:44.461 [DEBUG] [Thread-9002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:03:44.475 [INFO] [Thread-9002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:03:44.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:03:44.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:03:44.537 [DEBUG] [Thread-9004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:45.364 [DEBUG] [Thread-9002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:03:45.364 [DEBUG] [Thread-9002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:03:45.412 [DEBUG] [Thread-9002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:03:45.412 [DEBUG] [Thread-9002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:03:45.420 [DEBUG] [Thread-9002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:03:45.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:03:45.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:03:45.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:03:45.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:03:45.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:03:45.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:03:45.453 [DEBUG] [Thread-9002] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:03:53.518 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:03:59.577 [DEBUG] [Thread-9005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:03.880 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:14.214 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:14.614 [DEBUG] [Thread-9006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:15.056 [DEBUG] [Thread-9007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:15.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:04:15.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:04:15.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:04:16.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 3, 43), 20.4, 40.99, 0.0, 13.46, 13.0, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:04:16.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:03:43
2025-11-26T01:04:16.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:04:16.453 [DEBUG] [Thread-9008] [transport.py] [_log()] starting thread (client mode): 0x70da5480
2025-11-26T01:04:16.453 [DEBUG] [Thread-9008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:04:16.475 [DEBUG] [Thread-9008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:04:16.475 [INFO] [Thread-9008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:04:16.478 [DEBUG] [Thread-9008] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:04:16.478 [DEBUG] [Thread-9008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:04:16.478 [DEBUG] [Thread-9008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:04:16.478 [DEBUG] [Thread-9008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:04:16.478 [DEBUG] [Thread-9008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:04:16.478 [DEBUG] [Thread-9008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:04:16.478 [DEBUG] [Thread-9008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] client lang: <none>
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] server lang: <none>
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] kex follows: False
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] Compression: none
2025-11-26T01:04:16.479 [DEBUG] [Thread-9008] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:04:16.494 [DEBUG] [Thread-9008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:04:16.494 [DEBUG] [Thread-9008] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:04:16.494 [DEBUG] [Thread-9008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:04:16.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:04:16.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:04:16.495 [DEBUG] [Thread-9008] [transport.py] [_log()] userauth is OK
2025-11-26T01:04:16.495 [DEBUG] [Thread-9008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:04:16.495 [DEBUG] [Thread-9008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:04:16.495 [DEBUG] [Thread-9008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:04:16.495 [DEBUG] [Thread-9008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:04:16.506 [INFO] [Thread-9008] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:04:16.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:04:17.143 [DEBUG] [Thread-9008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:04:17.143 [DEBUG] [Thread-9008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:04:17.143 [DEBUG] [Thread-9008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:04:17.184 [DEBUG] [Thread-9008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:04:17.184 [DEBUG] [Thread-9008] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:04:17.186 [DEBUG] [Thread-9008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:04:17.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:04:17.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:04:17.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:04:17.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:04:17.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:04:17.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:04:17.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.960861 -999.00  +19.90  12.30     16   -5.90 1 1 1 1 1     0    0 26.59 27.17 ZNESW 10.8 12.3 131.0 13.4 19.5 -26.5 19.4 -26.0 19.1 -24.6 19.4 -25.4
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.960861
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:04:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:03:43', tmtdew=20.4, humidity=40.99, cloud=0.0, wind=13.46, temperature=13.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:03:43', seeing=1.66, atlas_timestamp='2025-11-25T23:03:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:00:00')
2025-11-26T01:04:17.205 [DEBUG] [Thread-9008] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:04:17.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:04:17.290 [DEBUG] [Thread-9011] [transport.py] [_log()] starting thread (client mode): 0x70da7a30
2025-11-26T01:04:17.291 [DEBUG] [Thread-9011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:04:17.305 [DEBUG] [Thread-9011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:04:17.305 [INFO] [Thread-9011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] client lang: <none>
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] server lang: <none>
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] kex follows: False
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] Compression: none
2025-11-26T01:04:17.312 [DEBUG] [Thread-9011] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:04:17.369 [DEBUG] [Thread-9011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:04:17.369 [DEBUG] [Thread-9011] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:04:17.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:04:17.369 [DEBUG] [Thread-9011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:04:17.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:04:17.425 [DEBUG] [Thread-9011] [transport.py] [_log()] userauth is OK
2025-11-26T01:04:17.425 [DEBUG] [Thread-9011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:04:17.425 [DEBUG] [Thread-9011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:04:17.425 [DEBUG] [Thread-9011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:04:17.426 [DEBUG] [Thread-9011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:04:17.439 [INFO] [Thread-9011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:04:17.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:04:17.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:04:18.295 [DEBUG] [Thread-9011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:04:18.295 [DEBUG] [Thread-9011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:04:18.343 [DEBUG] [Thread-9011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:04:18.344 [DEBUG] [Thread-9011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:04:18.352 [DEBUG] [Thread-9011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:04:18.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:04:18.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:04:18.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:04:18.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:04:18.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:04:18.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:04:18.386 [DEBUG] [Thread-9011] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:04:24.563 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:26.291 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:26.292 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:29.644 [DEBUG] [Thread-9013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:34.896 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:44.687 [DEBUG] [Thread-9014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:45.242 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:48.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:04:48.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:04:48.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:04:49.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 4, 15), 20.42, 40.98, 0.0, 13.39, 13.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:04:49.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:04:15
2025-11-26T01:04:49.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:04:49.424 [DEBUG] [Thread-9015] [transport.py] [_log()] starting thread (client mode): 0x70da4a90
2025-11-26T01:04:49.424 [DEBUG] [Thread-9015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:04:49.446 [DEBUG] [Thread-9015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:04:49.446 [INFO] [Thread-9015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] client lang: <none>
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] server lang: <none>
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] kex follows: False
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] Compression: none
2025-11-26T01:04:49.448 [DEBUG] [Thread-9015] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:04:49.464 [DEBUG] [Thread-9015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:04:49.465 [DEBUG] [Thread-9015] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:04:49.465 [DEBUG] [Thread-9015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:04:49.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:04:49.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:04:49.466 [DEBUG] [Thread-9015] [transport.py] [_log()] userauth is OK
2025-11-26T01:04:49.466 [DEBUG] [Thread-9015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:04:49.466 [DEBUG] [Thread-9015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:04:49.466 [DEBUG] [Thread-9015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:04:49.466 [DEBUG] [Thread-9015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:04:49.476 [INFO] [Thread-9015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:04:49.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:04:50.114 [DEBUG] [Thread-9015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:04:50.114 [DEBUG] [Thread-9015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:04:50.115 [DEBUG] [Thread-9015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:04:50.154 [DEBUG] [Thread-9015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:04:50.155 [DEBUG] [Thread-9015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:04:50.157 [DEBUG] [Thread-9015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:04:50.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:04:50.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:04:50.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:04:50.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:04:50.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:04:50.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:04:50.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:04:50.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:04:50.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:04:50.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.961208 -999.00  +19.90  10.56     16   -5.90 1 1 1 1 1     0    0 26.28 28.81 ZNESW 10.8 10.6 140.4 13.0 19.5 -26.5 19.4 -25.9 19.1 -24.7 19.4 -25.7
2025-11-26T01:04:50.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:04:50.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:04:50.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.961208
2025-11-26T01:04:50.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:04:50.179 [DEBUG] [Thread-9015] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:04:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:04:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:04:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:04:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:04:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:04:15', tmtdew=20.42, humidity=40.98, cloud=0.0, wind=13.39, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:04:47', seeing=1.74, atlas_timestamp='2025-11-25T23:04:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:02:00')
2025-11-26T01:04:50.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:04:50.267 [DEBUG] [Thread-9018] [transport.py] [_log()] starting thread (client mode): 0x70da67a0
2025-11-26T01:04:50.267 [DEBUG] [Thread-9018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:04:50.283 [DEBUG] [Thread-9018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:04:50.283 [INFO] [Thread-9018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:04:50.290 [DEBUG] [Thread-9018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] client lang: <none>
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] server lang: <none>
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] kex follows: False
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:04:50.291 [DEBUG] [Thread-9018] [transport.py] [_log()] Compression: none
2025-11-26T01:04:50.292 [DEBUG] [Thread-9018] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:04:50.355 [DEBUG] [Thread-9018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:04:50.356 [DEBUG] [Thread-9018] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:04:50.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:04:50.357 [DEBUG] [Thread-9018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:04:50.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:04:50.415 [DEBUG] [Thread-9018] [transport.py] [_log()] userauth is OK
2025-11-26T01:04:50.415 [DEBUG] [Thread-9018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:04:50.415 [DEBUG] [Thread-9018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:04:50.415 [DEBUG] [Thread-9018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:04:50.415 [DEBUG] [Thread-9018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:04:50.433 [INFO] [Thread-9018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:04:50.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:04:50.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:04:51.256 [DEBUG] [Thread-9018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:04:51.256 [DEBUG] [Thread-9018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:04:51.304 [DEBUG] [Thread-9018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:04:51.304 [DEBUG] [Thread-9018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:04:51.313 [DEBUG] [Thread-9018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:04:51.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:04:51.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:04:51.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
2025-11-26T01:04:51.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:04:51.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:04:51.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:04:51.349 [DEBUG] [Thread-9018] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:04:55.584 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:04:59.723 [DEBUG] [Thread-9020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:05.981 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:14.771 [DEBUG] [Thread-9021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:15.133 [DEBUG] [Thread-9022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:16.362 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:05:21.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:05:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:05:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 4, 47), 20.53, 40.92, 0.0, 15.37, 13.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:05:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:04:47
2025-11-26T01:05:22.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:05:22.320 [DEBUG] [Thread-9023] [transport.py] [_log()] starting thread (client mode): 0x70df2dd0
2025-11-26T01:05:22.320 [DEBUG] [Thread-9023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:05:22.340 [DEBUG] [Thread-9023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:05:22.340 [INFO] [Thread-9023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:05:22.343 [DEBUG] [Thread-9023] [transport.py] [_log()] client lang: <none>
2025-11-26T01:05:22.344 [DEBUG] [Thread-9023] [transport.py] [_log()] server lang: <none>
2025-11-26T01:05:22.344 [DEBUG] [Thread-9023] [transport.py] [_log()] kex follows: False
2025-11-26T01:05:22.344 [DEBUG] [Thread-9023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:05:22.344 [DEBUG] [Thread-9023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:05:22.344 [DEBUG] [Thread-9023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:05:22.344 [DEBUG] [Thread-9023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:05:22.344 [DEBUG] [Thread-9023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:05:22.344 [DEBUG] [Thread-9023] [transport.py] [_log()] Compression: none
2025-11-26T01:05:22.344 [DEBUG] [Thread-9023] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:05:22.361 [DEBUG] [Thread-9023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:05:22.361 [DEBUG] [Thread-9023] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:05:22.362 [DEBUG] [Thread-9023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:05:22.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:05:22.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:05:22.364 [DEBUG] [Thread-9023] [transport.py] [_log()] userauth is OK
2025-11-26T01:05:22.364 [DEBUG] [Thread-9023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:05:22.364 [DEBUG] [Thread-9023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:05:22.364 [DEBUG] [Thread-9023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:05:22.365 [DEBUG] [Thread-9023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:05:22.389 [INFO] [Thread-9023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:05:22.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:05:22.977 [DEBUG] [Thread-9023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:05:22.977 [DEBUG] [Thread-9023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:05:22.977 [DEBUG] [Thread-9023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:05:23.018 [DEBUG] [Thread-9023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:05:23.018 [DEBUG] [Thread-9023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:05:23.021 [DEBUG] [Thread-9023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:05:23.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:05:23.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:05:23.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:05:23.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:05:23.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:05:23.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:05:23.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:05:23.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:05:23.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:05:23.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.961902 -999.00  +19.90  12.40     16   -6.00 1 1 1 1 1     0    0 26.54 29.32 ZNESW 10.6 12.4 137.6 14.2 19.5 -26.4 19.4 -25.9 19.1 -24.3 19.4 -25.3
2025-11-26T01:05:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:05:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:05:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.961902
2025-11-26T01:05:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:05:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:05:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:05:23.047 [DEBUG] [Thread-9023] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:05:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:05:23.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:05:23.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:04:47', tmtdew=20.53, humidity=40.92, cloud=0.0, wind=15.37, temperature=13.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:05:19', seeing=1.69, atlas_timestamp='2025-11-25T23:05:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:02:00')
2025-11-26T01:05:23.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:05:23.143 [DEBUG] [Thread-9026] [transport.py] [_log()] starting thread (client mode): 0x70df0be0
2025-11-26T01:05:23.143 [DEBUG] [Thread-9026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:05:23.157 [DEBUG] [Thread-9026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:05:23.158 [INFO] [Thread-9026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:05:23.165 [DEBUG] [Thread-9026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:05:23.165 [DEBUG] [Thread-9026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] client lang: <none>
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] server lang: <none>
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] kex follows: False
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] Compression: none
2025-11-26T01:05:23.166 [DEBUG] [Thread-9026] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:05:23.223 [DEBUG] [Thread-9026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:05:23.224 [DEBUG] [Thread-9026] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:05:23.224 [DEBUG] [Thread-9026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:05:23.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:05:23.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:05:23.279 [DEBUG] [Thread-9026] [transport.py] [_log()] userauth is OK
2025-11-26T01:05:23.279 [DEBUG] [Thread-9026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:05:23.279 [DEBUG] [Thread-9026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:05:23.279 [DEBUG] [Thread-9026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:05:23.279 [DEBUG] [Thread-9026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:05:23.297 [INFO] [Thread-9026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:05:23.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:05:23.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:05:24.116 [DEBUG] [Thread-9026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:05:24.116 [DEBUG] [Thread-9026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:05:24.165 [DEBUG] [Thread-9026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:05:24.165 [DEBUG] [Thread-9026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:05:24.174 [DEBUG] [Thread-9026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:05:24.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:05:24.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:05:24.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:05:24.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:05:24.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:05:24.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:05:24.209 [DEBUG] [Thread-9026] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:05:26.491 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:26.493 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:26.780 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:29.806 [DEBUG] [Thread-9028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:37.191 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:44.863 [DEBUG] [Thread-9029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:47.654 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:54.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:05:54.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:05:54.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:05:54.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 5, 51), 20.51, 40.92, 0.0, 9.93, 13.08, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:05:54.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:05:51
2025-11-26T01:05:55.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:05:55.202 [DEBUG] [Thread-9030] [transport.py] [_log()] starting thread (client mode): 0x70da4070
2025-11-26T01:05:55.202 [DEBUG] [Thread-9030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:05:55.221 [DEBUG] [Thread-9030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:05:55.221 [INFO] [Thread-9030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] client lang: <none>
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] server lang: <none>
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] kex follows: False
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] Compression: none
2025-11-26T01:05:55.225 [DEBUG] [Thread-9030] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:05:55.243 [DEBUG] [Thread-9030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:05:55.244 [DEBUG] [Thread-9030] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:05:55.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:05:55.245 [DEBUG] [Thread-9030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:05:55.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:05:55.247 [DEBUG] [Thread-9030] [transport.py] [_log()] userauth is OK
2025-11-26T01:05:55.247 [DEBUG] [Thread-9030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:05:55.247 [DEBUG] [Thread-9030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:05:55.248 [DEBUG] [Thread-9030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:05:55.248 [DEBUG] [Thread-9030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:05:55.272 [INFO] [Thread-9030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:05:55.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:05:55.921 [DEBUG] [Thread-9030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:05:55.922 [DEBUG] [Thread-9030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:05:55.922 [DEBUG] [Thread-9030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:05:55.962 [DEBUG] [Thread-9030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:05:55.963 [DEBUG] [Thread-9030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:05:55.966 [DEBUG] [Thread-9030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:05:55.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:05:55.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:05:55.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:05:55.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:05:55.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:05:55.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:05:55.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:05:55.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.962250 -999.00  +20.10  13.55     16   -6.00 1 1 1 1 1     0    0 26.54 28.25 ZNESW 10.8 13.6 131.4 16.7 19.6 -26.4 19.4 -25.8 19.1 -24.4 19.4 -25.3
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.962250
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:05:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:05:51', tmtdew=20.51, humidity=40.92, cloud=0.0, wind=9.93, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:05:51', seeing=1.69, atlas_timestamp='2025-11-25T23:05:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:02:00')
2025-11-26T01:05:55.991 [DEBUG] [Thread-9030] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:05:56.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:05:56.084 [DEBUG] [Thread-9033] [transport.py] [_log()] starting thread (client mode): 0x70da4700
2025-11-26T01:05:56.084 [DEBUG] [Thread-9033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:05:56.098 [DEBUG] [Thread-9033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:05:56.098 [INFO] [Thread-9033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] client lang: <none>
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] server lang: <none>
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] kex follows: False
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] Compression: none
2025-11-26T01:05:56.106 [DEBUG] [Thread-9033] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:05:56.163 [DEBUG] [Thread-9033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:05:56.163 [DEBUG] [Thread-9033] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:05:56.164 [DEBUG] [Thread-9033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:05:56.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:05:56.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:05:56.219 [DEBUG] [Thread-9033] [transport.py] [_log()] userauth is OK
2025-11-26T01:05:56.219 [DEBUG] [Thread-9033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:05:56.219 [DEBUG] [Thread-9033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:05:56.219 [DEBUG] [Thread-9033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:05:56.220 [DEBUG] [Thread-9033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:05:56.239 [INFO] [Thread-9033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:05:56.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:05:56.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:05:57.056 [DEBUG] [Thread-9033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:05:57.056 [DEBUG] [Thread-9033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:05:57.107 [DEBUG] [Thread-9033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:05:57.107 [DEBUG] [Thread-9033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:05:57.119 [DEBUG] [Thread-9033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:05:57.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:05:57.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:05:57.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:05:57.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:05:57.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:05:57.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:05:57.156 [DEBUG] [Thread-9033] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:05:58.034 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:05:59.898 [DEBUG] [Thread-9035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:08.479 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:14.950 [DEBUG] [Thread-9036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:15.212 [DEBUG] [Thread-9037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:18.892 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:26.694 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:26.694 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:27.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:06:27.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:06:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:06:27.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 6, 23), 30.76, 11.4, 0.0, 9.53, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:06:27.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:06:23
2025-11-26T01:06:27.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:06:28.132 [DEBUG] [Thread-9038] [transport.py] [_log()] starting thread (client mode): 0x70da72b0
2025-11-26T01:06:28.132 [DEBUG] [Thread-9038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:06:28.153 [DEBUG] [Thread-9038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:06:28.153 [INFO] [Thread-9038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:06:28.156 [DEBUG] [Thread-9038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:06:28.156 [DEBUG] [Thread-9038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] client lang: <none>
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] server lang: <none>
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] kex follows: False
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:06:28.157 [DEBUG] [Thread-9038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:06:28.158 [DEBUG] [Thread-9038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:06:28.158 [DEBUG] [Thread-9038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:06:28.158 [DEBUG] [Thread-9038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:06:28.158 [DEBUG] [Thread-9038] [transport.py] [_log()] Compression: none
2025-11-26T01:06:28.158 [DEBUG] [Thread-9038] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:06:28.176 [DEBUG] [Thread-9038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:06:28.176 [DEBUG] [Thread-9038] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:06:28.177 [DEBUG] [Thread-9038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:06:28.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:06:28.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:06:28.179 [DEBUG] [Thread-9038] [transport.py] [_log()] userauth is OK
2025-11-26T01:06:28.179 [DEBUG] [Thread-9038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:06:28.179 [DEBUG] [Thread-9038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:06:28.179 [DEBUG] [Thread-9038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:06:28.179 [DEBUG] [Thread-9038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:06:28.217 [INFO] [Thread-9038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:06:28.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:06:28.880 [DEBUG] [Thread-9038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:06:28.881 [DEBUG] [Thread-9038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:06:28.881 [DEBUG] [Thread-9038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:06:28.921 [DEBUG] [Thread-9038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:06:28.922 [DEBUG] [Thread-9038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:06:28.924 [DEBUG] [Thread-9038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:06:28.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:06:28.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:06:28.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:06:28.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:06:28.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:06:28.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:06:28.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:06:28.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:06:28.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:06:28.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.962597 -999.00  +20.00  12.64     16   -5.90 1 1 1 1 1     0    0 26.62 29.20 ZNESW 11.7 12.6 141.6 14.6 19.5 -26.4 19.4 -25.9 19.1 -24.4 19.4 -25.6
2025-11-26T01:06:28.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:06:28.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:06:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.962597
2025-11-26T01:06:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:06:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:06:28.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:06:28.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:06:28.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:06:28.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:06:23', tmtdew=30.76, humidity=11.4, cloud=0.0, wind=9.53, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:06:23', seeing=1.6, atlas_timestamp='2025-11-25T23:06:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.006750000000000256, 0.01025000000000098, -0.0065000000000008384, 0.028499999999999304, 0.07525000000000048, 0.014999999999998792, -0.04824999999999946, 0.0015000000000000568, -0.005499999999999616, 0.029249999999999332, -0.026500000000000412, 0.08900000000000041, 0.0857499999999991, 0.01249999999999929, -0.019000000000000128, 0.006249999999999645, 0.0, 0.011999999999998678, -0.05375000000000085, 0.07199999999999918, 0.07674999999999876, 0.0032500000000013074, 0.003249999999999531, -0.0129999999999999, -0.026500000000000412, -0.04374999999999929, 0.0495000000000001, 0.18299999999999983, 0.09850000000000136, 0.06700000000000017, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-11-25T23:02:00')
2025-11-26T01:06:28.946 [DEBUG] [Thread-9038] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:06:29.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:06:29.351 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:29.982 [DEBUG] [Thread-9041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:39.805 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:45.034 [DEBUG] [Thread-9042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:06:50.182 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:00.067 [DEBUG] [Thread-9043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:00.581 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:10.970 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:15.098 [DEBUG] [Thread-9044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:15.293 [DEBUG] [Thread-9045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:21.406 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:26.899 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:26.900 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:30.134 [DEBUG] [Thread-9046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:31.803 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:42.198 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:45.166 [DEBUG] [Thread-9047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:07:52.585 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:00.202 [DEBUG] [Thread-9048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:02.924 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:13.322 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:15.233 [DEBUG] [Thread-9049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:15.365 [DEBUG] [Thread-9050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:23.653 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:27.100 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:27.102 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:30.268 [DEBUG] [Thread-9051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:33.996 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:44.109 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T01:08:44.317 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:45.301 [DEBUG] [Thread-9052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:08:54.660 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:00.349 [DEBUG] [Thread-9053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:05.004 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:14.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:09:14.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:09:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:09:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 9, 3), 30.38, 11.66, 0.0, 15.35, 19.53, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:09:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:09:03
2025-11-26T01:09:14.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:09:15.078 [DEBUG] [Thread-9054] [transport.py] [_log()] starting thread (client mode): 0x70da4a90
2025-11-26T01:09:15.078 [DEBUG] [Thread-9054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:09:15.098 [DEBUG] [Thread-9054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:09:15.098 [INFO] [Thread-9054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] client lang: <none>
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] server lang: <none>
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] kex follows: False
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:09:15.101 [DEBUG] [Thread-9054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:09:15.102 [DEBUG] [Thread-9054] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:09:15.102 [DEBUG] [Thread-9054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:09:15.102 [DEBUG] [Thread-9054] [transport.py] [_log()] Compression: none
2025-11-26T01:09:15.102 [DEBUG] [Thread-9054] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:09:15.109 [DEBUG] [Thread-9054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:09:15.109 [DEBUG] [Thread-9054] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:09:15.109 [DEBUG] [Thread-9054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:09:15.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:09:15.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:09:15.109 [DEBUG] [Thread-9054] [transport.py] [_log()] userauth is OK
2025-11-26T01:09:15.109 [DEBUG] [Thread-9054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:09:15.110 [DEBUG] [Thread-9054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:09:15.110 [DEBUG] [Thread-9054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:09:15.110 [DEBUG] [Thread-9054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:09:15.118 [INFO] [Thread-9054] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:09:15.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:09:15.385 [DEBUG] [Thread-9056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:15.410 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:15.444 [DEBUG] [Thread-9057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:15.706 [DEBUG] [Thread-9054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:09:15.707 [DEBUG] [Thread-9054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:09:15.707 [DEBUG] [Thread-9054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:09:15.748 [DEBUG] [Thread-9054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:09:15.748 [DEBUG] [Thread-9054] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:09:15.752 [DEBUG] [Thread-9054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:09:15.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:09:15.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:09:15.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:09:15.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:09:15.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:09:15.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:09:15.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:09:15.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:09:15.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:09:15.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.964680 -999.00  +19.90   8.73     16   -5.90 1 1 1 1 1     0    0 26.37 22.94 ZNESW 10.5 8.7 135.8 13.3 19.5 -26.4 19.4 -25.9 19.1 -24.5 19.4 -25.6
2025-11-26T01:09:15.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:09:15.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:09:15.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.964680
2025-11-26T01:09:15.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:09:15.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:09:15.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:09:15.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:09:15.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:09:15.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:09:03', tmtdew=30.38, humidity=11.66, cloud=0.0, wind=15.35, temperature=19.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:09:03', seeing=1.45, atlas_timestamp='2025-11-25T23:09:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03175000000000061, -0.00274999999999892, 0.004250000000000753, 0.018499999999999517, 0.022500000000000853, 0.11825000000000152, 0.027999999999998693, -0.013749999999998153, 0.008499999999997954, 0.009000000000000341, 0.03575000000000017, -0.01699999999999946, 0.0990000000000002, 0.08825000000000038, 0.01249999999999929, 0.006499999999999062, 0.023749999999999716, -0.010500000000000398, 0.03500000000000014, -0.0027500000000006963, 0.10199999999999854, 0.06674999999999898, 0.05325000000000024, 0.024250000000000327, 0.021999999999998465, -0.01750000000000007, -0.010249999999999204, 0.051000000000000156, 0.13149999999999906, 0.10100000000000264, 0.08750000000000036, 0.008000000000000895, -0.011750000000001037], zp_timestamp='2025-11-25T23:06:00')
2025-11-26T01:09:15.777 [DEBUG] [Thread-9054] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:09:15.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:09:15.872 [DEBUG] [Thread-9059] [transport.py] [_log()] starting thread (client mode): 0x70de4df0
2025-11-26T01:09:15.872 [DEBUG] [Thread-9059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:09:15.887 [DEBUG] [Thread-9059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:09:15.887 [INFO] [Thread-9059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:09:15.894 [DEBUG] [Thread-9059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:09:15.895 [DEBUG] [Thread-9059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:09:15.895 [DEBUG] [Thread-9059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:09:15.895 [DEBUG] [Thread-9059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:09:15.895 [DEBUG] [Thread-9059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:09:15.895 [DEBUG] [Thread-9059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:09:15.895 [DEBUG] [Thread-9059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:09:15.895 [DEBUG] [Thread-9059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:09:15.896 [DEBUG] [Thread-9059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:09:15.896 [DEBUG] [Thread-9059] [transport.py] [_log()] client lang: <none>
2025-11-26T01:09:15.896 [DEBUG] [Thread-9059] [transport.py] [_log()] server lang: <none>
2025-11-26T01:09:15.896 [DEBUG] [Thread-9059] [transport.py] [_log()] kex follows: False
2025-11-26T01:09:15.896 [DEBUG] [Thread-9059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:09:15.896 [DEBUG] [Thread-9059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:09:15.896 [DEBUG] [Thread-9059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:09:15.896 [DEBUG] [Thread-9059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:09:15.897 [DEBUG] [Thread-9059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:09:15.897 [DEBUG] [Thread-9059] [transport.py] [_log()] Compression: none
2025-11-26T01:09:15.897 [DEBUG] [Thread-9059] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:09:15.953 [DEBUG] [Thread-9059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:09:15.953 [DEBUG] [Thread-9059] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:09:15.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:09:15.955 [DEBUG] [Thread-9059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:09:15.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:09:16.008 [DEBUG] [Thread-9059] [transport.py] [_log()] userauth is OK
2025-11-26T01:09:16.009 [DEBUG] [Thread-9059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:09:16.009 [DEBUG] [Thread-9059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:09:16.009 [DEBUG] [Thread-9059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:09:16.009 [DEBUG] [Thread-9059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:09:16.027 [INFO] [Thread-9059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:09:16.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:09:16.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:09:16.881 [DEBUG] [Thread-9059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:09:16.882 [DEBUG] [Thread-9059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:09:16.929 [DEBUG] [Thread-9059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:09:16.929 [DEBUG] [Thread-9059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:09:16.938 [DEBUG] [Thread-9059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:09:16.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:09:16.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:09:16.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:09:16.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:09:16.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:09:16.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:09:16.975 [DEBUG] [Thread-9059] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:09:25.793 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:27.301 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:27.302 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:30.418 [DEBUG] [Thread-9061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:36.154 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:45.471 [DEBUG] [Thread-9062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:46.504 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:09:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:09:46.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:09:46.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:09:47.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 9, 35), 30.35, 11.68, 0.0, 13.02, 19.45, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:09:47.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:09:35
2025-11-26T01:09:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:09:47.899 [DEBUG] [Thread-9063] [transport.py] [_log()] starting thread (client mode): 0x70da7bb0
2025-11-26T01:09:47.899 [DEBUG] [Thread-9063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:09:47.919 [DEBUG] [Thread-9063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:09:47.919 [INFO] [Thread-9063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:09:47.920 [DEBUG] [Thread-9063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] client lang: <none>
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] server lang: <none>
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] kex follows: False
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:09:47.921 [DEBUG] [Thread-9063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:09:47.922 [DEBUG] [Thread-9063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:09:47.922 [DEBUG] [Thread-9063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:09:47.922 [DEBUG] [Thread-9063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:09:47.922 [DEBUG] [Thread-9063] [transport.py] [_log()] Compression: none
2025-11-26T01:09:47.922 [DEBUG] [Thread-9063] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:09:47.931 [DEBUG] [Thread-9063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:09:47.931 [DEBUG] [Thread-9063] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:09:47.931 [DEBUG] [Thread-9063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:09:47.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:09:47.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:09:47.933 [DEBUG] [Thread-9063] [transport.py] [_log()] userauth is OK
2025-11-26T01:09:47.934 [DEBUG] [Thread-9063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:09:47.934 [DEBUG] [Thread-9063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:09:47.934 [DEBUG] [Thread-9063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:09:47.934 [DEBUG] [Thread-9063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:09:47.969 [INFO] [Thread-9063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:09:47.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:09:48.599 [DEBUG] [Thread-9063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:09:48.599 [DEBUG] [Thread-9063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:09:48.600 [DEBUG] [Thread-9063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:09:48.639 [DEBUG] [Thread-9063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:09:48.640 [DEBUG] [Thread-9063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:09:48.643 [DEBUG] [Thread-9063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:09:48.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:09:48.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:09:48.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:09:48.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:09:48.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:09:48.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:09:48.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:09:48.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:09:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:09:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.964680 -999.00  +19.90   8.73     16   -5.90 1 1 1 1 1     0    0 26.37 22.94 ZNESW 10.5 8.7 135.8 13.3 19.5 -26.4 19.4 -25.9 19.1 -24.5 19.4 -25.6
2025-11-26T01:09:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:09:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:09:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.964680
2025-11-26T01:09:48.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:09:48.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:09:48.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:09:48.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:09:48.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:09:48.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:09:35', tmtdew=30.35, humidity=11.68, cloud=0.0, wind=13.02, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:09:35', seeing=1.23, atlas_timestamp='2025-11-25T23:09:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03175000000000061, -0.00274999999999892, 0.004250000000000753, 0.018499999999999517, 0.022500000000000853, 0.11825000000000152, 0.027999999999998693, -0.013749999999998153, 0.008499999999997954, 0.009000000000000341, 0.03575000000000017, -0.01699999999999946, 0.0990000000000002, 0.08825000000000038, 0.01249999999999929, 0.006499999999999062, 0.023749999999999716, -0.010500000000000398, 0.03500000000000014, -0.0027500000000006963, 0.10199999999999854, 0.06674999999999898, 0.05325000000000024, 0.024250000000000327, 0.021999999999998465, -0.01750000000000007, -0.010249999999999204, 0.051000000000000156, 0.13149999999999906, 0.10100000000000264, 0.08750000000000036, 0.008000000000000895, -0.011750000000001037], zp_timestamp='2025-11-25T23:06:00')
2025-11-26T01:09:48.668 [DEBUG] [Thread-9063] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:09:48.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:09:48.762 [DEBUG] [Thread-9066] [transport.py] [_log()] starting thread (client mode): 0x70df2620
2025-11-26T01:09:48.762 [DEBUG] [Thread-9066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:09:48.778 [DEBUG] [Thread-9066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:09:48.778 [INFO] [Thread-9066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:09:48.785 [DEBUG] [Thread-9066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:09:48.785 [DEBUG] [Thread-9066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] client lang: <none>
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] server lang: <none>
2025-11-26T01:09:48.786 [DEBUG] [Thread-9066] [transport.py] [_log()] kex follows: False
2025-11-26T01:09:48.787 [DEBUG] [Thread-9066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:09:48.787 [DEBUG] [Thread-9066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:09:48.787 [DEBUG] [Thread-9066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:09:48.787 [DEBUG] [Thread-9066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:09:48.787 [DEBUG] [Thread-9066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:09:48.787 [DEBUG] [Thread-9066] [transport.py] [_log()] Compression: none
2025-11-26T01:09:48.787 [DEBUG] [Thread-9066] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:09:48.846 [DEBUG] [Thread-9066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:09:48.847 [DEBUG] [Thread-9066] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:09:48.847 [DEBUG] [Thread-9066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:09:48.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:09:48.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:09:48.905 [DEBUG] [Thread-9066] [transport.py] [_log()] userauth is OK
2025-11-26T01:09:48.905 [DEBUG] [Thread-9066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:09:48.905 [DEBUG] [Thread-9066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:09:48.905 [DEBUG] [Thread-9066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:09:48.905 [DEBUG] [Thread-9066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:09:48.924 [INFO] [Thread-9066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:09:48.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:09:48.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:09:49.853 [DEBUG] [Thread-9066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:09:49.854 [DEBUG] [Thread-9066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:09:49.902 [DEBUG] [Thread-9066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:09:49.902 [DEBUG] [Thread-9066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:09:49.911 [DEBUG] [Thread-9066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:09:49.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:09:49.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:09: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
2025-11-26T01:09:49.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:09:49.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:09:49.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:09:49.948 [DEBUG] [Thread-9066] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:09:56.819 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:00.501 [DEBUG] [Thread-9068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:07.160 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:15.510 [DEBUG] [Thread-9069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:15.548 [DEBUG] [Thread-9070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:17.520 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:19.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:10:19.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:10:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:10:20.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 10, 7), 30.23, 11.78, 0.0, 12.48, 19.38, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:10:20.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:10:07
2025-11-26T01:10:20.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:10:20.896 [DEBUG] [Thread-9071] [transport.py] [_log()] starting thread (client mode): 0x70d7dde0
2025-11-26T01:10:20.896 [DEBUG] [Thread-9071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:10:20.914 [DEBUG] [Thread-9071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:10:20.914 [INFO] [Thread-9071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] client lang: <none>
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] server lang: <none>
2025-11-26T01:10:20.918 [DEBUG] [Thread-9071] [transport.py] [_log()] kex follows: False
2025-11-26T01:10:20.919 [DEBUG] [Thread-9071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:10:20.919 [DEBUG] [Thread-9071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:10:20.919 [DEBUG] [Thread-9071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:10:20.919 [DEBUG] [Thread-9071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:10:20.919 [DEBUG] [Thread-9071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:10:20.919 [DEBUG] [Thread-9071] [transport.py] [_log()] Compression: none
2025-11-26T01:10:20.919 [DEBUG] [Thread-9071] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:10:20.936 [DEBUG] [Thread-9071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:10:20.937 [DEBUG] [Thread-9071] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:10:20.937 [DEBUG] [Thread-9071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:10:20.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:10:20.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:10:20.939 [DEBUG] [Thread-9071] [transport.py] [_log()] userauth is OK
2025-11-26T01:10:20.939 [DEBUG] [Thread-9071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:10:20.939 [DEBUG] [Thread-9071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:10:20.939 [DEBUG] [Thread-9071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:10:20.940 [DEBUG] [Thread-9071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:10:20.963 [INFO] [Thread-9071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:10:20.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:10:21.594 [DEBUG] [Thread-9071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:10:21.595 [DEBUG] [Thread-9071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:10:21.595 [DEBUG] [Thread-9071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:10:21.636 [DEBUG] [Thread-9071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:10:21.636 [DEBUG] [Thread-9071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:10:21.639 [DEBUG] [Thread-9071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:10:21.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:10:21.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:10:21.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:10:21.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:10:21.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:10:21.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:10:21.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:10:21.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:10:21.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:10:21.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.965027 -999.00  +19.90   7.56     16   -5.90 1 1 1 1 1     0    0 26.95 20.76 ZNESW 8.9 7.6 135.6 13.8 19.5 -26.6 19.4 -25.9 19.1 -24.5 19.4 -25.5
2025-11-26T01:10:21.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:10:21.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:10:21.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.965027
2025-11-26T01:10:21.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:10:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:10:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:10:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:10:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:10:21.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:10:07', tmtdew=30.23, humidity=11.78, cloud=0.0, wind=12.48, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:10:07', seeing=1.11, atlas_timestamp='2025-11-25T23:09:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03175000000000061, -0.00274999999999892, 0.004250000000000753, 0.018499999999999517, 0.022500000000000853, 0.11825000000000152, 0.027999999999998693, -0.013749999999998153, 0.008499999999997954, 0.009000000000000341, 0.03575000000000017, -0.01699999999999946, 0.0990000000000002, 0.08825000000000038, 0.01249999999999929, 0.006499999999999062, 0.023749999999999716, -0.010500000000000398, 0.03500000000000014, -0.0027500000000006963, 0.10199999999999854, 0.06674999999999898, 0.05325000000000024, 0.024250000000000327, 0.021999999999998465, -0.01750000000000007, -0.010249999999999204, 0.051000000000000156, 0.13149999999999906, 0.10100000000000264, 0.08750000000000036, 0.008000000000000895, -0.011750000000001037], zp_timestamp='2025-11-25T23:06:00')
2025-11-26T01:10:21.675 [DEBUG] [Thread-9071] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:10:21.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:10:21.772 [DEBUG] [Thread-9074] [transport.py] [_log()] starting thread (client mode): 0x70dbd0c0
2025-11-26T01:10:21.772 [DEBUG] [Thread-9074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:10:21.786 [DEBUG] [Thread-9074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:10:21.787 [INFO] [Thread-9074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:10:21.794 [DEBUG] [Thread-9074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] client lang: <none>
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] server lang: <none>
2025-11-26T01:10:21.795 [DEBUG] [Thread-9074] [transport.py] [_log()] kex follows: False
2025-11-26T01:10:21.796 [DEBUG] [Thread-9074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:10:21.796 [DEBUG] [Thread-9074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:10:21.796 [DEBUG] [Thread-9074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:10:21.796 [DEBUG] [Thread-9074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:10:21.796 [DEBUG] [Thread-9074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:10:21.796 [DEBUG] [Thread-9074] [transport.py] [_log()] Compression: none
2025-11-26T01:10:21.796 [DEBUG] [Thread-9074] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:10:21.853 [DEBUG] [Thread-9074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:10:21.853 [DEBUG] [Thread-9074] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:10:21.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:10:21.854 [DEBUG] [Thread-9074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:10:21.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:10:21.909 [DEBUG] [Thread-9074] [transport.py] [_log()] userauth is OK
2025-11-26T01:10:21.909 [DEBUG] [Thread-9074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:10:21.909 [DEBUG] [Thread-9074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:10:21.909 [DEBUG] [Thread-9074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:10:21.909 [DEBUG] [Thread-9074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:10:21.927 [INFO] [Thread-9074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:10:21.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:10:21.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:10:22.731 [DEBUG] [Thread-9074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:10:22.731 [DEBUG] [Thread-9074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:10:22.779 [DEBUG] [Thread-9074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:10:22.779 [DEBUG] [Thread-9074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:10:22.788 [DEBUG] [Thread-9074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:10:22.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:10:22.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:10:22.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:10:22.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:10:22.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:10:22.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:10:22.825 [DEBUG] [Thread-9074] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:10:27.504 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:27.505 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:27.947 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:30.585 [DEBUG] [Thread-9076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:38.332 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:45.632 [DEBUG] [Thread-9077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:48.688 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:10:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:10:52.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:10:52.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:10:53.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 10, 39), 30.13, 12.28, 0.0, 12.23, 19.31, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:10:53.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:10:39
2025-11-26T01:10:53.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:10:53.788 [DEBUG] [Thread-9078] [transport.py] [_log()] starting thread (client mode): 0x70d68d60
2025-11-26T01:10:53.788 [DEBUG] [Thread-9078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:10:53.809 [DEBUG] [Thread-9078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:10:53.809 [INFO] [Thread-9078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] client lang: <none>
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] server lang: <none>
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] kex follows: False
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:10:53.812 [DEBUG] [Thread-9078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:10:53.813 [DEBUG] [Thread-9078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:10:53.813 [DEBUG] [Thread-9078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:10:53.813 [DEBUG] [Thread-9078] [transport.py] [_log()] Compression: none
2025-11-26T01:10:53.813 [DEBUG] [Thread-9078] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:10:53.831 [DEBUG] [Thread-9078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:10:53.831 [DEBUG] [Thread-9078] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:10:53.832 [DEBUG] [Thread-9078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:10:53.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:10:53.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:10:53.834 [DEBUG] [Thread-9078] [transport.py] [_log()] userauth is OK
2025-11-26T01:10:53.834 [DEBUG] [Thread-9078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:10:53.834 [DEBUG] [Thread-9078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:10:53.834 [DEBUG] [Thread-9078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:10:53.834 [DEBUG] [Thread-9078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:10:53.851 [INFO] [Thread-9078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:10:53.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:10:54.486 [DEBUG] [Thread-9078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:10:54.486 [DEBUG] [Thread-9078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:10:54.487 [DEBUG] [Thread-9078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:10:54.528 [DEBUG] [Thread-9078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:10:54.528 [DEBUG] [Thread-9078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:10:54.531 [DEBUG] [Thread-9078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:10:54.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:10:54.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:10:54.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:10:54.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:10:54.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:10:54.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:10:54.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:10:54.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:10:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:10:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.965374 -999.00  +19.80  10.08     16   -5.90 1 1 1 1 1     0    0 26.28 23.81 ZNESW 10.1 10.1 132.2 13.6 19.5 -26.5 19.4 -25.9 19.1 -24.5 19.4 -25.7
2025-11-26T01:10:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:10:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:10:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.965374
2025-11-26T01:10:54.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:10:54.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:10:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:10:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:10:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:10:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:10:39', tmtdew=30.13, humidity=12.28, cloud=0.0, wind=12.23, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:10:39', seeing=1.08, atlas_timestamp='2025-11-25T23:10:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02674999999999983, -0.029749999999999943, 0.0182500000000001, 0.027999999999998693, 0.01750000000000007, 0.047250000000000014, 0.0039999999999995595, -0.027749999999999275, 0.0039999999999995595, -0.009000000000000341, 0.031749999999998835, -0.00849999999999973, 0.06649999999999956, 0.10524999999999984, -0.03500000000000014, -0.033500000000000085, 0.010249999999999204, 0.009500000000000952, 0.009999999999999787, -0.043750000000001066, 0.08899999999999864, 0.06674999999999898, 0.013250000000001094, -0.01574999999999882, -0.014000000000001123, -0.03849999999999909, -0.05025000000000013, 0.022500000000000853, 0.09999999999999964, 0.09100000000000108, 0.040500000000001535, 0.004000000000001336, 0.0007500000000000284], zp_timestamp='2025-11-25T23:08:00')
2025-11-26T01:10:54.560 [DEBUG] [Thread-9078] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:10:54.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:10:54.656 [DEBUG] [Thread-9081] [transport.py] [_log()] starting thread (client mode): 0x70d6b610
2025-11-26T01:10:54.656 [DEBUG] [Thread-9081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:10:54.670 [DEBUG] [Thread-9081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:10:54.670 [INFO] [Thread-9081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:10:54.678 [DEBUG] [Thread-9081] [transport.py] [_log()] client lang: <none>
2025-11-26T01:10:54.679 [DEBUG] [Thread-9081] [transport.py] [_log()] server lang: <none>
2025-11-26T01:10:54.679 [DEBUG] [Thread-9081] [transport.py] [_log()] kex follows: False
2025-11-26T01:10:54.679 [DEBUG] [Thread-9081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:10:54.679 [DEBUG] [Thread-9081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:10:54.679 [DEBUG] [Thread-9081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:10:54.679 [DEBUG] [Thread-9081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:10:54.679 [DEBUG] [Thread-9081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:10:54.679 [DEBUG] [Thread-9081] [transport.py] [_log()] Compression: none
2025-11-26T01:10:54.679 [DEBUG] [Thread-9081] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:10:54.737 [DEBUG] [Thread-9081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:10:54.738 [DEBUG] [Thread-9081] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:10:54.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:10:54.739 [DEBUG] [Thread-9081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:10:54.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:10:54.795 [DEBUG] [Thread-9081] [transport.py] [_log()] userauth is OK
2025-11-26T01:10:54.796 [DEBUG] [Thread-9081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:10:54.796 [DEBUG] [Thread-9081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:10:54.796 [DEBUG] [Thread-9081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:10:54.796 [DEBUG] [Thread-9081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:10:54.814 [INFO] [Thread-9081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:10:54.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:10:54.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:10:55.662 [DEBUG] [Thread-9081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:10:55.662 [DEBUG] [Thread-9081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:10:55.710 [DEBUG] [Thread-9081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:10:55.710 [DEBUG] [Thread-9081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:10:55.719 [DEBUG] [Thread-9081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:10:55.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:10:55.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:10:55.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:10:55.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:10:55.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:10:55.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:10:55.755 [DEBUG] [Thread-9081] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:10:59.091 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:00.665 [DEBUG] [Thread-9083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:09.418 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:15.570 [DEBUG] [Thread-9084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:15.716 [DEBUG] [Thread-9085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:19.825 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:25.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:11:25.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:11:25.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:11:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 11, 11), 30.13, 12.28, 0.0, 12.48, 19.31, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:11:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:11:11
2025-11-26T01:11:26.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:11:26.717 [DEBUG] [Thread-9086] [transport.py] [_log()] starting thread (client mode): 0x70de4af0
2025-11-26T01:11:26.717 [DEBUG] [Thread-9086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:11:26.739 [DEBUG] [Thread-9086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:11:26.739 [INFO] [Thread-9086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:11:26.742 [DEBUG] [Thread-9086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] client lang: <none>
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] server lang: <none>
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] kex follows: False
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] Compression: none
2025-11-26T01:11:26.743 [DEBUG] [Thread-9086] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:11:26.762 [DEBUG] [Thread-9086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:11:26.763 [DEBUG] [Thread-9086] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:11:26.763 [DEBUG] [Thread-9086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:11:26.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:11:26.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:11:26.765 [DEBUG] [Thread-9086] [transport.py] [_log()] userauth is OK
2025-11-26T01:11:26.765 [DEBUG] [Thread-9086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:11:26.765 [DEBUG] [Thread-9086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:11:26.765 [DEBUG] [Thread-9086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:11:26.765 [DEBUG] [Thread-9086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:11:26.792 [INFO] [Thread-9086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:11:26.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:11:27.429 [DEBUG] [Thread-9086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:11:27.430 [DEBUG] [Thread-9086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:11:27.430 [DEBUG] [Thread-9086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:11:27.470 [DEBUG] [Thread-9086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:11:27.470 [DEBUG] [Thread-9086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:11:27.473 [DEBUG] [Thread-9086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:11:27.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:11:27.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:11:27.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:11:27.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:11:27.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:11:27.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:11:27.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:11:27.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:11:27.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:11:27.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.965722 -999.00  +19.90  11.69     16   -5.90 1 1 1 1 1     0    0 26.64 23.30 ZNESW 10.1 11.7 141.0 14.4 19.5 -26.4 19.4 -25.8 19.1 -24.6 19.4 -25.5
2025-11-26T01:11:27.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:11:27.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:11:27.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.965722
2025-11-26T01:11:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:11:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:11:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:11:27.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:11:27.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:11:27.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:11:11', tmtdew=30.13, humidity=12.28, cloud=0.0, wind=12.48, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:11:12', seeing=1.08, atlas_timestamp='2025-11-25T23:10:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02674999999999983, -0.029749999999999943, 0.0182500000000001, 0.027999999999998693, 0.01750000000000007, 0.047250000000000014, 0.0039999999999995595, -0.027749999999999275, 0.0039999999999995595, -0.009000000000000341, 0.031749999999998835, -0.00849999999999973, 0.06649999999999956, 0.10524999999999984, -0.03500000000000014, -0.033500000000000085, 0.010249999999999204, 0.009500000000000952, 0.009999999999999787, -0.043750000000001066, 0.08899999999999864, 0.06674999999999898, 0.013250000000001094, -0.01574999999999882, -0.014000000000001123, -0.03849999999999909, -0.05025000000000013, 0.022500000000000853, 0.09999999999999964, 0.09100000000000108, 0.040500000000001535, 0.004000000000001336, 0.0007500000000000284], zp_timestamp='2025-11-25T23:08:00')
2025-11-26T01:11:27.502 [DEBUG] [Thread-9086] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:11:27.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:11:27.601 [DEBUG] [Thread-9089] [transport.py] [_log()] starting thread (client mode): 0x70dbd8a0
2025-11-26T01:11:27.601 [DEBUG] [Thread-9089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:11:27.615 [DEBUG] [Thread-9089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:11:27.616 [INFO] [Thread-9089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:11:27.623 [DEBUG] [Thread-9089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:11:27.623 [DEBUG] [Thread-9089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:11:27.623 [DEBUG] [Thread-9089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:11:27.623 [DEBUG] [Thread-9089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] client lang: <none>
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] server lang: <none>
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] kex follows: False
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] Compression: none
2025-11-26T01:11:27.624 [DEBUG] [Thread-9089] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:11:27.681 [DEBUG] [Thread-9089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:11:27.682 [DEBUG] [Thread-9089] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:11:27.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:11:27.683 [DEBUG] [Thread-9089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:11:27.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:11:27.723 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:27.724 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:27.737 [DEBUG] [Thread-9089] [transport.py] [_log()] userauth is OK
2025-11-26T01:11:27.738 [DEBUG] [Thread-9089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:11:27.738 [DEBUG] [Thread-9089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:11:27.738 [DEBUG] [Thread-9089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:11:27.738 [DEBUG] [Thread-9089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:11:27.757 [INFO] [Thread-9089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:11:27.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:11:27.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:11:28.615 [DEBUG] [Thread-9089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:11:28.615 [DEBUG] [Thread-9089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:11:28.663 [DEBUG] [Thread-9089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:11:28.663 [DEBUG] [Thread-9089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:11:28.675 [DEBUG] [Thread-9089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:11:28.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:11:28.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:11:28.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:11:28.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:11:28.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:11:28.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:11:28.715 [DEBUG] [Thread-9089] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:11:30.169 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:30.747 [DEBUG] [Thread-9091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:40.591 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:45.796 [DEBUG] [Thread-9092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:50.941 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:11:58.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:11:58.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:11:58.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:11:59.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 11, 43), 30.34, 11.65, 0.0, 12.42, 19.46, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:11:59.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:11:43
2025-11-26T01:11:59.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:11:59.717 [DEBUG] [Thread-9093] [transport.py] [_log()] starting thread (client mode): 0x70df3e80
2025-11-26T01:11:59.717 [DEBUG] [Thread-9093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:11:59.732 [DEBUG] [Thread-9093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:11:59.732 [INFO] [Thread-9093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:11:59.735 [DEBUG] [Thread-9093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:11:59.735 [DEBUG] [Thread-9093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:11:59.735 [DEBUG] [Thread-9093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:11:59.735 [DEBUG] [Thread-9093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:11:59.735 [DEBUG] [Thread-9093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:11:59.735 [DEBUG] [Thread-9093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:11:59.735 [DEBUG] [Thread-9093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:11:59.735 [DEBUG] [Thread-9093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:11:59.735 [DEBUG] [Thread-9093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] client lang: <none>
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] server lang: <none>
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] kex follows: False
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] Compression: none
2025-11-26T01:11:59.736 [DEBUG] [Thread-9093] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:11:59.746 [DEBUG] [Thread-9093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:11:59.746 [DEBUG] [Thread-9093] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:11:59.746 [DEBUG] [Thread-9093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:11:59.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:11:59.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:11:59.747 [DEBUG] [Thread-9093] [transport.py] [_log()] userauth is OK
2025-11-26T01:11:59.747 [DEBUG] [Thread-9093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:11:59.747 [DEBUG] [Thread-9093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:11:59.747 [DEBUG] [Thread-9093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:11:59.747 [DEBUG] [Thread-9093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:11:59.756 [INFO] [Thread-9093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:11:59.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:12:00.413 [DEBUG] [Thread-9093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:12:00.413 [DEBUG] [Thread-9093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:12:00.413 [DEBUG] [Thread-9093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:12:00.454 [DEBUG] [Thread-9093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:12:00.454 [DEBUG] [Thread-9093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:12:00.457 [DEBUG] [Thread-9093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:12:00.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:12:00.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:12:00.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:12:00.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:12:00.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:12:00.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:12:00.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.966069 -999.00  +19.90   8.52     16   -5.80 1 1 1 1 1     0    0 26.38 22.07 ZNESW 9.6 8.5 151.8 13.7 19.4 -26.5 19.4 -25.8 19.1 -24.4 19.4 -25.3
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.966069
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:12:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:11:43', tmtdew=30.34, humidity=11.65, cloud=0.0, wind=12.42, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:11:44', seeing=1.11, atlas_timestamp='2025-11-25T23:11:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02674999999999983, -0.029749999999999943, 0.0182500000000001, 0.027999999999998693, 0.01750000000000007, 0.047250000000000014, 0.0039999999999995595, -0.027749999999999275, 0.0039999999999995595, -0.009000000000000341, 0.031749999999998835, -0.00849999999999973, 0.06649999999999956, 0.10524999999999984, -0.03500000000000014, -0.033500000000000085, 0.010249999999999204, 0.009500000000000952, 0.009999999999999787, -0.043750000000001066, 0.08899999999999864, 0.06674999999999898, 0.013250000000001094, -0.01574999999999882, -0.014000000000001123, -0.03849999999999909, -0.05025000000000013, 0.022500000000000853, 0.09999999999999964, 0.09100000000000108, 0.040500000000001535, 0.004000000000001336, 0.0007500000000000284], zp_timestamp='2025-11-25T23:08:00')
2025-11-26T01:12:00.477 [DEBUG] [Thread-9093] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:12:00.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:12:00.567 [DEBUG] [Thread-9096] [transport.py] [_log()] starting thread (client mode): 0x70d3b9d0
2025-11-26T01:12:00.567 [DEBUG] [Thread-9096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:12:00.585 [DEBUG] [Thread-9096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:12:00.585 [INFO] [Thread-9096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:12:00.596 [DEBUG] [Thread-9096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] client lang: <none>
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] server lang: <none>
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] kex follows: False
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] Compression: none
2025-11-26T01:12:00.597 [DEBUG] [Thread-9096] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:12:00.654 [DEBUG] [Thread-9096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:12:00.654 [DEBUG] [Thread-9096] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:12:00.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:12:00.655 [DEBUG] [Thread-9096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:12:00.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:12:00.721 [DEBUG] [Thread-9096] [transport.py] [_log()] userauth is OK
2025-11-26T01:12:00.721 [DEBUG] [Thread-9096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:12:00.721 [DEBUG] [Thread-9096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:12:00.721 [DEBUG] [Thread-9096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:12:00.721 [DEBUG] [Thread-9096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:12:00.739 [INFO] [Thread-9096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:12:00.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:12:00.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:12:00.830 [DEBUG] [Thread-9098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:01.313 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:01.589 [DEBUG] [Thread-9096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:12:01.589 [DEBUG] [Thread-9096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:12:01.637 [DEBUG] [Thread-9096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:12:01.637 [DEBUG] [Thread-9096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:12:01.655 [DEBUG] [Thread-9096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:12:01.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:12:01.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:12:01.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
2025-11-26T01:12:01.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:12:01.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:12:01.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:12:01.703 [DEBUG] [Thread-9096] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:12:11.696 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:15.630 [DEBUG] [Thread-9099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:15.873 [DEBUG] [Thread-9100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:22.014 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:27.926 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:27.928 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:30.910 [DEBUG] [Thread-9101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:31.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:12:31.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:12:31.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:12:32.358 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 12, 15), 30.41, 11.61, 0.0, 11.56, 19.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:12:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:12:15
2025-11-26T01:12:32.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:12:32.665 [DEBUG] [Thread-9102] [transport.py] [_log()] starting thread (client mode): 0x70da6920
2025-11-26T01:12:32.665 [DEBUG] [Thread-9102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:12:32.686 [DEBUG] [Thread-9102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:12:32.686 [INFO] [Thread-9102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:12:32.688 [DEBUG] [Thread-9102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:12:32.688 [DEBUG] [Thread-9102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] client lang: <none>
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] server lang: <none>
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] kex follows: False
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] Compression: none
2025-11-26T01:12:32.689 [DEBUG] [Thread-9102] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:12:32.705 [DEBUG] [Thread-9102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:12:32.705 [DEBUG] [Thread-9102] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:12:32.706 [DEBUG] [Thread-9102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:12:32.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:12:32.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:12:32.707 [DEBUG] [Thread-9102] [transport.py] [_log()] userauth is OK
2025-11-26T01:12:32.707 [DEBUG] [Thread-9102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:12:32.707 [DEBUG] [Thread-9102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:12:32.707 [DEBUG] [Thread-9102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:12:32.707 [DEBUG] [Thread-9102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:12:32.724 [INFO] [Thread-9102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:12:32.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:12:33.357 [DEBUG] [Thread-9102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:12:33.358 [DEBUG] [Thread-9102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:12:33.358 [DEBUG] [Thread-9102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:12:33.398 [DEBUG] [Thread-9102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:12:33.398 [DEBUG] [Thread-9102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:12:33.401 [DEBUG] [Thread-9102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:12:33.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:12:33.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:12:33.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:12:33.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:12:33.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:12:33.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:12:33.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:12:33.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:12:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:12:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.966763 -999.00  +19.90   9.50     16   -5.90 1 1 1 1 1     0    0 26.13 22.50 ZNESW 8.6 9.5 126.2 10.5 19.4 -26.6 19.4 -26.0 19.1 -24.6 19.4 -25.7
2025-11-26T01:12:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:12:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:12:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.966763
2025-11-26T01:12:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:12:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:12:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:12:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:12:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:12:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:12:15', tmtdew=30.41, humidity=11.61, cloud=0.0, wind=11.56, temperature=19.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:12:16', seeing=1.57, atlas_timestamp='2025-11-25T23:12:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02674999999999983, -0.029749999999999943, 0.0182500000000001, 0.027999999999998693, 0.01750000000000007, 0.047250000000000014, 0.0039999999999995595, -0.027749999999999275, 0.0039999999999995595, -0.009000000000000341, 0.031749999999998835, -0.00849999999999973, 0.06649999999999956, 0.10524999999999984, -0.03500000000000014, -0.033500000000000085, 0.010249999999999204, 0.009500000000000952, 0.009999999999999787, -0.043750000000001066, 0.08899999999999864, 0.06674999999999898, 0.013250000000001094, -0.01574999999999882, -0.014000000000001123, -0.03849999999999909, -0.05025000000000013, 0.022500000000000853, 0.09999999999999964, 0.09100000000000108, 0.040500000000001535, 0.004000000000001336, 0.0007500000000000284], zp_timestamp='2025-11-25T23:08:00')
2025-11-26T01:12:33.421 [DEBUG] [Thread-9102] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:12:33.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:12:33.505 [DEBUG] [Thread-9105] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-26T01:12:33.505 [DEBUG] [Thread-9105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:12:33.520 [DEBUG] [Thread-9105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:12:33.521 [INFO] [Thread-9105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] client lang: <none>
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] server lang: <none>
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] kex follows: False
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] Compression: none
2025-11-26T01:12:33.528 [DEBUG] [Thread-9105] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:12:33.592 [DEBUG] [Thread-9105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:12:33.592 [DEBUG] [Thread-9105] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:12:33.593 [DEBUG] [Thread-9105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:12:33.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:12:33.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:12:33.650 [DEBUG] [Thread-9105] [transport.py] [_log()] userauth is OK
2025-11-26T01:12:33.650 [DEBUG] [Thread-9105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:12:33.650 [DEBUG] [Thread-9105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:12:33.650 [DEBUG] [Thread-9105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:12:33.650 [DEBUG] [Thread-9105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:12:33.668 [INFO] [Thread-9105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:12:33.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:12:33.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:12:34.518 [DEBUG] [Thread-9105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:12:34.518 [DEBUG] [Thread-9105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:12:34.566 [DEBUG] [Thread-9105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:12:34.566 [DEBUG] [Thread-9105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:12:34.574 [DEBUG] [Thread-9105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:12:34.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:12:34.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:12:34.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:12:34.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:12:34.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:12:34.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:12:34.606 [DEBUG] [Thread-9105] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:12:42.716 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:45.942 [DEBUG] [Thread-9107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:12:53.056 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:00.994 [DEBUG] [Thread-9108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:03.397 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:04.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:13:04.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:13: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
2025-11-26T01:13:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 12, 47), 30.61, 11.45, 0.0, 11.79, 19.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:13:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:12:47
2025-11-26T01:13:05.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:13:05.559 [DEBUG] [Thread-9109] [transport.py] [_log()] starting thread (client mode): 0x70d3a8c0
2025-11-26T01:13:05.559 [DEBUG] [Thread-9109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:13:05.580 [DEBUG] [Thread-9109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:13:05.580 [INFO] [Thread-9109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:13:05.583 [DEBUG] [Thread-9109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] client lang: <none>
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] server lang: <none>
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] kex follows: False
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] Compression: none
2025-11-26T01:13:05.584 [DEBUG] [Thread-9109] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:13:05.601 [DEBUG] [Thread-9109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:13:05.602 [DEBUG] [Thread-9109] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:13:05.602 [DEBUG] [Thread-9109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:13:05.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:13:05.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:13:05.604 [DEBUG] [Thread-9109] [transport.py] [_log()] userauth is OK
2025-11-26T01:13:05.605 [DEBUG] [Thread-9109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:13:05.605 [DEBUG] [Thread-9109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:13:05.605 [DEBUG] [Thread-9109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:13:05.605 [DEBUG] [Thread-9109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:13:05.625 [INFO] [Thread-9109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:13:05.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:13:06.385 [DEBUG] [Thread-9109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:13:06.385 [DEBUG] [Thread-9109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:13:06.385 [DEBUG] [Thread-9109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:13:06.426 [DEBUG] [Thread-9109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:13:06.426 [DEBUG] [Thread-9109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:13:06.429 [DEBUG] [Thread-9109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:13:06.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:13:06.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:13:06.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:13:06.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:13:06.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:13:06.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:13:06.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:13:06.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:13:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:13:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.967111 -999.00  +19.90   7.62     16   -5.90 1 1 1 1 1     0    0 26.54 21.43 ZNESW 8.2 7.6 127.4 9.2 19.5 -26.5 19.4 -25.9 19.1 -24.6 19.3 -25.6
2025-11-26T01:13:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:13:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:13:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.967111
2025-11-26T01:13:06.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:13:06.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:13:06.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:13:06.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:13:06.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:13:06.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:12:47', tmtdew=30.61, humidity=11.45, cloud=0.0, wind=11.79, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:12:48', seeing=1.57, atlas_timestamp='2025-11-25T23:12:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02674999999999983, -0.029749999999999943, 0.0182500000000001, 0.027999999999998693, 0.01750000000000007, 0.047250000000000014, 0.0039999999999995595, -0.027749999999999275, 0.0039999999999995595, -0.009000000000000341, 0.031749999999998835, -0.00849999999999973, 0.06649999999999956, 0.10524999999999984, -0.03500000000000014, -0.033500000000000085, 0.010249999999999204, 0.009500000000000952, 0.009999999999999787, -0.043750000000001066, 0.08899999999999864, 0.06674999999999898, 0.013250000000001094, -0.01574999999999882, -0.014000000000001123, -0.03849999999999909, -0.05025000000000013, 0.022500000000000853, 0.09999999999999964, 0.09100000000000108, 0.040500000000001535, 0.004000000000001336, 0.0007500000000000284], zp_timestamp='2025-11-25T23:08:00')
2025-11-26T01:13:06.455 [DEBUG] [Thread-9109] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:13:06.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:13:13.802 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:15.701 [DEBUG] [Thread-9112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:16.026 [DEBUG] [Thread-9113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:24.231 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:28.129 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:28.131 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:31.066 [DEBUG] [Thread-9114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:34.550 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:44.899 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:46.107 [DEBUG] [Thread-9115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:13:55.304 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:01.145 [DEBUG] [Thread-9116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:05.645 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:15.771 [DEBUG] [Thread-9117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:15.966 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:16.182 [DEBUG] [Thread-9118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:26.391 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:28.337 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:28.338 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:31.217 [DEBUG] [Thread-9119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:36.728 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:46.251 [DEBUG] [Thread-9120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:47.075 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:14:57.513 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:01.284 [DEBUG] [Thread-9121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:07.827 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:15.850 [DEBUG] [Thread-9122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:16.316 [DEBUG] [Thread-9123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:18.234 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:21.421 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T01:15:28.541 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:28.542 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:28.579 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:31.350 [DEBUG] [Thread-9124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:38.947 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:46.380 [DEBUG] [Thread-9125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:49.297 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:15:51.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:15:51.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:15:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:15:52.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 15, 28), 30.32, 12.06, 0.0, 9.9, 19.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:15:52.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:15:28
2025-11-26T01:15:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:15:52.378 [DEBUG] [Thread-9126] [transport.py] [_log()] starting thread (client mode): 0x70d39a50
2025-11-26T01:15:52.378 [DEBUG] [Thread-9126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:15:52.398 [DEBUG] [Thread-9126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:15:52.398 [INFO] [Thread-9126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] client lang: <none>
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] server lang: <none>
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] kex follows: False
2025-11-26T01:15:52.400 [DEBUG] [Thread-9126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:15:52.401 [DEBUG] [Thread-9126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:15:52.401 [DEBUG] [Thread-9126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:15:52.401 [DEBUG] [Thread-9126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:15:52.401 [DEBUG] [Thread-9126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:15:52.401 [DEBUG] [Thread-9126] [transport.py] [_log()] Compression: none
2025-11-26T01:15:52.401 [DEBUG] [Thread-9126] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:15:52.421 [DEBUG] [Thread-9126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:15:52.421 [DEBUG] [Thread-9126] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:15:52.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:15:52.423 [DEBUG] [Thread-9126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:15:52.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:15:52.425 [DEBUG] [Thread-9126] [transport.py] [_log()] userauth is OK
2025-11-26T01:15:52.425 [DEBUG] [Thread-9126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:15:52.425 [DEBUG] [Thread-9126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:15:52.425 [DEBUG] [Thread-9126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:15:52.425 [DEBUG] [Thread-9126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:15:52.460 [INFO] [Thread-9126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:15:52.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:15:53.092 [DEBUG] [Thread-9126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:15:53.092 [DEBUG] [Thread-9126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:15:53.093 [DEBUG] [Thread-9126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:15:53.133 [DEBUG] [Thread-9126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:15:53.134 [DEBUG] [Thread-9126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:15:53.137 [DEBUG] [Thread-9126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:15:53.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:15:53.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:15:53.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:15:53.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:15:53.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:15:53.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:15:53.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:15:53.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:15:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:15:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.969194 -999.00  +19.80  10.17     16   -5.90 1 1 1 1 1     0    0 26.35 13.52 ZNESW 9.1 10.2 129.6 11.4 19.4 -26.6 19.4 -26.0 19.1 -24.6 19.2 -25.6
2025-11-26T01:15:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:15:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:15:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.969194
2025-11-26T01:15:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:15:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:15:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:15:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:15:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:15:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:15:28', tmtdew=30.32, humidity=12.06, cloud=0.0, wind=9.9, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:15:28', seeing=1.28, atlas_timestamp='2025-11-25T23:15:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02674999999999983, -0.029749999999999943, 0.0182500000000001, 0.027999999999998693, 0.01750000000000007, 0.047250000000000014, 0.0039999999999995595, -0.027749999999999275, 0.0039999999999995595, -0.009000000000000341, 0.031749999999998835, -0.00849999999999973, 0.06649999999999956, 0.10524999999999984, -0.03500000000000014, -0.033500000000000085, 0.010249999999999204, 0.009500000000000952, 0.009999999999999787, -0.043750000000001066, 0.08899999999999864, 0.06674999999999898, 0.013250000000001094, -0.01574999999999882, -0.014000000000001123, -0.03849999999999909, -0.05025000000000013, 0.022500000000000853, 0.09999999999999964, 0.09100000000000108, 0.040500000000001535, 0.004000000000001336, 0.0007500000000000284], zp_timestamp='2025-11-25T23:11:00')
2025-11-26T01:15:53.164 [DEBUG] [Thread-9126] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:15:53.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:15:53.260 [DEBUG] [Thread-9129] [transport.py] [_log()] starting thread (client mode): 0x70dbd930
2025-11-26T01:15:53.260 [DEBUG] [Thread-9129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:15:53.280 [DEBUG] [Thread-9129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:15:53.280 [INFO] [Thread-9129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:15:53.288 [DEBUG] [Thread-9129] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:15:53.288 [DEBUG] [Thread-9129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:15:53.288 [DEBUG] [Thread-9129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:15:53.288 [DEBUG] [Thread-9129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:15:53.288 [DEBUG] [Thread-9129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:15:53.288 [DEBUG] [Thread-9129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:15:53.289 [DEBUG] [Thread-9129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:15:53.289 [DEBUG] [Thread-9129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:15:53.289 [DEBUG] [Thread-9129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:15:53.289 [DEBUG] [Thread-9129] [transport.py] [_log()] client lang: <none>
2025-11-26T01:15:53.289 [DEBUG] [Thread-9129] [transport.py] [_log()] server lang: <none>
2025-11-26T01:15:53.289 [DEBUG] [Thread-9129] [transport.py] [_log()] kex follows: False
2025-11-26T01:15:53.289 [DEBUG] [Thread-9129] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:15:53.289 [DEBUG] [Thread-9129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:15:53.289 [DEBUG] [Thread-9129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:15:53.290 [DEBUG] [Thread-9129] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:15:53.290 [DEBUG] [Thread-9129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:15:53.290 [DEBUG] [Thread-9129] [transport.py] [_log()] Compression: none
2025-11-26T01:15:53.290 [DEBUG] [Thread-9129] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:15:53.349 [DEBUG] [Thread-9129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:15:53.349 [DEBUG] [Thread-9129] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:15:53.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:15:53.351 [DEBUG] [Thread-9129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:15:53.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:15:53.411 [DEBUG] [Thread-9129] [transport.py] [_log()] userauth is OK
2025-11-26T01:15:53.412 [DEBUG] [Thread-9129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:15:53.412 [DEBUG] [Thread-9129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:15:53.412 [DEBUG] [Thread-9129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:15:53.412 [DEBUG] [Thread-9129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:15:53.430 [INFO] [Thread-9129] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:15:53.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:15:53.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:15:54.250 [DEBUG] [Thread-9129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:15:54.251 [DEBUG] [Thread-9129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:15:54.299 [DEBUG] [Thread-9129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:15:54.299 [DEBUG] [Thread-9129] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:15:54.308 [DEBUG] [Thread-9129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:15:54.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:15:54.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:15:54.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:15:54.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:15:54.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:15:54.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:15:54.345 [DEBUG] [Thread-9129] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:15:59.634 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:01.418 [DEBUG] [Thread-9131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:10.035 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:15.929 [DEBUG] [Thread-9132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:16.460 [DEBUG] [Thread-9133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:20.367 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:16:24.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:16:24.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:16:25.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 15, 28), 30.32, 12.06, 0.0, 9.9, 19.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:16:25.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:15:28
2025-11-26T01:16:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:16:25.297 [DEBUG] [Thread-9134] [transport.py] [_log()] starting thread (client mode): 0x70de4400
2025-11-26T01:16:25.297 [DEBUG] [Thread-9134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:16:25.318 [DEBUG] [Thread-9134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:16:25.318 [INFO] [Thread-9134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:16:25.321 [DEBUG] [Thread-9134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] client lang: <none>
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] server lang: <none>
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] kex follows: False
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:16:25.322 [DEBUG] [Thread-9134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:16:25.323 [DEBUG] [Thread-9134] [transport.py] [_log()] Compression: none
2025-11-26T01:16:25.323 [DEBUG] [Thread-9134] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:16:25.340 [DEBUG] [Thread-9134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:16:25.340 [DEBUG] [Thread-9134] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:16:25.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:16:25.341 [DEBUG] [Thread-9134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:16:25.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:16:25.344 [DEBUG] [Thread-9134] [transport.py] [_log()] userauth is OK
2025-11-26T01:16:25.344 [DEBUG] [Thread-9134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:16:25.344 [DEBUG] [Thread-9134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:16:25.344 [DEBUG] [Thread-9134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:16:25.344 [DEBUG] [Thread-9134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:16:25.367 [INFO] [Thread-9134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:16:25.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:16:26.017 [DEBUG] [Thread-9134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:16:26.017 [DEBUG] [Thread-9134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:16:26.017 [DEBUG] [Thread-9134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:16:26.058 [DEBUG] [Thread-9134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:16:26.058 [DEBUG] [Thread-9134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:16:26.061 [DEBUG] [Thread-9134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:16:26.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:16:26.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:16:26.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:16:26.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:16:26.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:16:26.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:16:26.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:16:26.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:16:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:16:26.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.969541 -999.00  +19.80   9.30     16   -5.90 1 1 1 1 1     0    0 26.18 13.12 ZNESW 10.3 9.3 129.4 12.7 19.4 -26.4 19.4 -25.9 19.0 -24.5 19.2 -25.5
2025-11-26T01:16:26.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:16:26.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:16:26.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.969541
2025-11-26T01:16:26.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:16:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:16:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:16:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:16:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:16:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:15:28', tmtdew=30.32, humidity=12.06, cloud=0.0, wind=9.9, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:16:00', seeing=1.11, atlas_timestamp='2025-11-25T23:16:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02674999999999983, -0.029749999999999943, 0.0182500000000001, 0.027999999999998693, 0.01750000000000007, 0.047250000000000014, 0.0039999999999995595, -0.027749999999999275, 0.0039999999999995595, -0.009000000000000341, 0.031749999999998835, -0.00849999999999973, 0.06649999999999956, 0.10524999999999984, -0.03500000000000014, -0.033500000000000085, 0.010249999999999204, 0.009500000000000952, 0.009999999999999787, -0.043750000000001066, 0.08899999999999864, 0.06674999999999898, 0.013250000000001094, -0.01574999999999882, -0.014000000000001123, -0.03849999999999909, -0.05025000000000013, 0.022500000000000853, 0.09999999999999964, 0.09100000000000108, 0.040500000000001535, 0.004000000000001336, 0.0007500000000000284], zp_timestamp='2025-11-25T23:11:00')
2025-11-26T01:16:26.087 [DEBUG] [Thread-9134] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:16:26.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:16:26.182 [DEBUG] [Thread-9137] [transport.py] [_log()] starting thread (client mode): 0x70d54340
2025-11-26T01:16:26.182 [DEBUG] [Thread-9137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:16:26.197 [DEBUG] [Thread-9137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:16:26.197 [INFO] [Thread-9137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:16:26.205 [DEBUG] [Thread-9137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:16:26.205 [DEBUG] [Thread-9137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:16:26.205 [DEBUG] [Thread-9137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:16:26.205 [DEBUG] [Thread-9137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:16:26.205 [DEBUG] [Thread-9137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:16:26.206 [DEBUG] [Thread-9137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:16:26.206 [DEBUG] [Thread-9137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:16:26.206 [DEBUG] [Thread-9137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:16:26.206 [DEBUG] [Thread-9137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:16:26.206 [DEBUG] [Thread-9137] [transport.py] [_log()] client lang: <none>
2025-11-26T01:16:26.206 [DEBUG] [Thread-9137] [transport.py] [_log()] server lang: <none>
2025-11-26T01:16:26.206 [DEBUG] [Thread-9137] [transport.py] [_log()] kex follows: False
2025-11-26T01:16:26.206 [DEBUG] [Thread-9137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:16:26.206 [DEBUG] [Thread-9137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:16:26.207 [DEBUG] [Thread-9137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:16:26.207 [DEBUG] [Thread-9137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:16:26.207 [DEBUG] [Thread-9137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:16:26.207 [DEBUG] [Thread-9137] [transport.py] [_log()] Compression: none
2025-11-26T01:16:26.207 [DEBUG] [Thread-9137] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:16:26.264 [DEBUG] [Thread-9137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:16:26.264 [DEBUG] [Thread-9137] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:16:26.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:16:26.266 [DEBUG] [Thread-9137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:16:26.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:16:26.320 [DEBUG] [Thread-9137] [transport.py] [_log()] userauth is OK
2025-11-26T01:16:26.320 [DEBUG] [Thread-9137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:16:26.321 [DEBUG] [Thread-9137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:16:26.321 [DEBUG] [Thread-9137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:16:26.321 [DEBUG] [Thread-9137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:16:26.340 [INFO] [Thread-9137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:16:26.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:16:26.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:16:27.165 [DEBUG] [Thread-9137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:16:27.165 [DEBUG] [Thread-9137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:16:27.214 [DEBUG] [Thread-9137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:16:27.214 [DEBUG] [Thread-9137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:16:27.222 [DEBUG] [Thread-9137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:16:27.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:16:27.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:16: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') -> 00000000
2025-11-26T01:16:27.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:16:27.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:16:27.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:16:27.258 [DEBUG] [Thread-9137] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:16:28.744 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:28.745 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:30.786 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:31.493 [DEBUG] [Thread-9139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:41.156 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:46.554 [DEBUG] [Thread-9140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:51.505 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:16:57.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:16:57.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:16:57.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:16:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 16, 32), 30.45, 11.55, 0.0, 11.66, 19.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:16:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:16:32
2025-11-26T01:16:58.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:16:58.276 [DEBUG] [Thread-9141] [transport.py] [_log()] starting thread (client mode): 0x70d55e40
2025-11-26T01:16:58.277 [DEBUG] [Thread-9141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:16:58.296 [DEBUG] [Thread-9141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:16:58.297 [INFO] [Thread-9141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] client lang: <none>
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] server lang: <none>
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] kex follows: False
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] Compression: none
2025-11-26T01:16:58.300 [DEBUG] [Thread-9141] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:16:58.312 [DEBUG] [Thread-9141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:16:58.312 [DEBUG] [Thread-9141] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:16:58.312 [DEBUG] [Thread-9141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:16:58.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:16:58.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:16:58.313 [DEBUG] [Thread-9141] [transport.py] [_log()] userauth is OK
2025-11-26T01:16:58.313 [DEBUG] [Thread-9141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:16:58.313 [DEBUG] [Thread-9141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:16:58.313 [DEBUG] [Thread-9141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:16:58.313 [DEBUG] [Thread-9141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:16:58.330 [INFO] [Thread-9141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:16:58.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:16:58.971 [DEBUG] [Thread-9141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:16:58.972 [DEBUG] [Thread-9141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:16:58.972 [DEBUG] [Thread-9141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:16:59.012 [DEBUG] [Thread-9141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:16:59.012 [DEBUG] [Thread-9141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:16:59.014 [DEBUG] [Thread-9141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:16:59.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:16:59.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:16:59.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:16:59.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:16:59.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:16:59.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:16:59.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.969888 -999.00  +19.90   8.07     16   -5.90 1 1 1 1 1     0    0 26.00 13.39 ZNESW 9.0 8.1 138.6 11.3 19.4 -26.5 19.3 -25.9 19.1 -24.5 19.2 -25.6
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.969888
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:16:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:16:32', tmtdew=30.45, humidity=11.55, cloud=0.0, wind=11.66, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:16:32', seeing=1.11, atlas_timestamp='2025-11-25T23:16:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:15:00')
2025-11-26T01:16:59.028 [DEBUG] [Thread-9141] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:16:59.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:16:59.114 [DEBUG] [Thread-9144] [transport.py] [_log()] starting thread (client mode): 0x70d747f0
2025-11-26T01:16:59.114 [DEBUG] [Thread-9144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:16:59.130 [DEBUG] [Thread-9144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:16:59.130 [INFO] [Thread-9144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] client lang: <none>
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] server lang: <none>
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] kex follows: False
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] Compression: none
2025-11-26T01:16:59.137 [DEBUG] [Thread-9144] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:16:59.194 [DEBUG] [Thread-9144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:16:59.194 [DEBUG] [Thread-9144] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:16:59.194 [DEBUG] [Thread-9144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:16:59.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:16:59.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:16:59.251 [DEBUG] [Thread-9144] [transport.py] [_log()] userauth is OK
2025-11-26T01:16:59.251 [DEBUG] [Thread-9144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:16:59.251 [DEBUG] [Thread-9144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:16:59.251 [DEBUG] [Thread-9144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:16:59.251 [DEBUG] [Thread-9144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:16:59.268 [INFO] [Thread-9144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:16:59.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:16:59.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:17:00.100 [DEBUG] [Thread-9144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:17:00.100 [DEBUG] [Thread-9144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:17:00.148 [DEBUG] [Thread-9144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:17:00.148 [DEBUG] [Thread-9144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:17:00.156 [DEBUG] [Thread-9144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:17:00.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:17:00.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:17:00.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:17:00.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:17:00.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:17:00.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:17:00.188 [DEBUG] [Thread-9144] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:17:01.587 [DEBUG] [Thread-9146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:01.848 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:12.209 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:16.010 [DEBUG] [Thread-9147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:16.637 [DEBUG] [Thread-9148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:22.579 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:28.951 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:28.953 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:17:30.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:17:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:17:30.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 17, 4), 30.4, 11.6, 0.0, 12.09, 19.46, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:17:30.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:17:04
2025-11-26T01:17:31.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:17:31.159 [DEBUG] [Thread-9149] [transport.py] [_log()] starting thread (client mode): 0x70da5a50
2025-11-26T01:17:31.159 [DEBUG] [Thread-9149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:17:31.174 [DEBUG] [Thread-9149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:17:31.174 [INFO] [Thread-9149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:17:31.176 [DEBUG] [Thread-9149] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:17:31.176 [DEBUG] [Thread-9149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:17:31.176 [DEBUG] [Thread-9149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:17:31.176 [DEBUG] [Thread-9149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:17:31.176 [DEBUG] [Thread-9149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:17:31.176 [DEBUG] [Thread-9149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] client lang: <none>
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] server lang: <none>
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] kex follows: False
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] Compression: none
2025-11-26T01:17:31.177 [DEBUG] [Thread-9149] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:17:31.193 [DEBUG] [Thread-9149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:17:31.193 [DEBUG] [Thread-9149] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:17:31.193 [DEBUG] [Thread-9149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:17:31.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:17:31.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:17:31.194 [DEBUG] [Thread-9149] [transport.py] [_log()] userauth is OK
2025-11-26T01:17:31.194 [DEBUG] [Thread-9149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:17:31.194 [DEBUG] [Thread-9149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:17:31.194 [DEBUG] [Thread-9149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:17:31.194 [DEBUG] [Thread-9149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:17:31.203 [INFO] [Thread-9149] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:17:31.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:17:31.674 [DEBUG] [Thread-9151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:31.860 [DEBUG] [Thread-9149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:17:31.860 [DEBUG] [Thread-9149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:17:31.861 [DEBUG] [Thread-9149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:17:31.900 [DEBUG] [Thread-9149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:17:31.901 [DEBUG] [Thread-9149] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:17:31.903 [DEBUG] [Thread-9149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:17:31.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:17:31.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:17:31.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:17:31.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:17:31.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:17:31.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:17:31.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:17:31.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:17:31.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:17:31.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.970235 -999.00  +19.80  11.44     16   -6.00 1 1 1 1 1     0    0 26.19 12.04 ZNESW 10.0 11.4 136.2 12.5 19.4 -26.6 19.4 -25.9 19.1 -24.6 19.3 -25.4
2025-11-26T01:17:31.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:17:31.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:17:31.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.970235
2025-11-26T01:17:31.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:17:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:17:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:17:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:17:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:17:31.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:17:04', tmtdew=30.4, humidity=11.6, cloud=0.0, wind=12.09, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:17:04', seeing=1.06, atlas_timestamp='2025-11-25T23:17:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:15:00')
2025-11-26T01:17:31.923 [DEBUG] [Thread-9149] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:17:31.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:17:32.005 [DEBUG] [Thread-9153] [transport.py] [_log()] starting thread (client mode): 0x70d424d0
2025-11-26T01:17:32.005 [DEBUG] [Thread-9153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:17:32.019 [DEBUG] [Thread-9153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:17:32.020 [INFO] [Thread-9153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] client lang: <none>
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] server lang: <none>
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] kex follows: False
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:17:32.027 [DEBUG] [Thread-9153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:17:32.028 [DEBUG] [Thread-9153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:17:32.028 [DEBUG] [Thread-9153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:17:32.028 [DEBUG] [Thread-9153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:17:32.028 [DEBUG] [Thread-9153] [transport.py] [_log()] Compression: none
2025-11-26T01:17:32.028 [DEBUG] [Thread-9153] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:17:32.083 [DEBUG] [Thread-9153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:17:32.084 [DEBUG] [Thread-9153] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:17:32.084 [DEBUG] [Thread-9153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:17:32.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:17:32.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:17:32.140 [DEBUG] [Thread-9153] [transport.py] [_log()] userauth is OK
2025-11-26T01:17:32.140 [DEBUG] [Thread-9153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:17:32.140 [DEBUG] [Thread-9153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:17:32.140 [DEBUG] [Thread-9153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:17:32.141 [DEBUG] [Thread-9153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:17:32.159 [INFO] [Thread-9153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:17:32.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:17:32.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:17:32.948 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:32.983 [DEBUG] [Thread-9153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:17:32.983 [DEBUG] [Thread-9153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:17:33.031 [DEBUG] [Thread-9153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:17:33.031 [DEBUG] [Thread-9153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:17:33.039 [DEBUG] [Thread-9153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:17:33.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:17:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:17:33.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:17:33.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:17:33.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:17:33.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:17:33.071 [DEBUG] [Thread-9153] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:17:43.304 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:46.710 [DEBUG] [Thread-9155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:17:53.655 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:01.765 [DEBUG] [Thread-9156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:18:03.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:18:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:18:03.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 17, 36), 30.5, 11.6, 0.0, 12.49, 19.58, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:18:03.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:17:36
2025-11-26T01:18:03.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:18:03.993 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:04.028 [DEBUG] [Thread-9157] [transport.py] [_log()] starting thread (client mode): 0x70d75270
2025-11-26T01:18:04.028 [DEBUG] [Thread-9157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:18:04.040 [DEBUG] [Thread-9157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:18:04.040 [INFO] [Thread-9157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] client lang: <none>
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] server lang: <none>
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] kex follows: False
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:18:04.042 [DEBUG] [Thread-9157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:18:04.043 [DEBUG] [Thread-9157] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:18:04.043 [DEBUG] [Thread-9157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:18:04.043 [DEBUG] [Thread-9157] [transport.py] [_log()] Compression: none
2025-11-26T01:18:04.043 [DEBUG] [Thread-9157] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:18:04.050 [DEBUG] [Thread-9157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:18:04.050 [DEBUG] [Thread-9157] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:18:04.050 [DEBUG] [Thread-9157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:18:04.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:18:04.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:18:04.051 [DEBUG] [Thread-9157] [transport.py] [_log()] userauth is OK
2025-11-26T01:18:04.051 [DEBUG] [Thread-9157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:18:04.051 [DEBUG] [Thread-9157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:18:04.051 [DEBUG] [Thread-9157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:18:04.051 [DEBUG] [Thread-9157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:18:04.064 [INFO] [Thread-9157] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:18:04.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:18:04.657 [DEBUG] [Thread-9157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:18:04.658 [DEBUG] [Thread-9157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:18:04.658 [DEBUG] [Thread-9157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:18:04.698 [DEBUG] [Thread-9157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:18:04.698 [DEBUG] [Thread-9157] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:18:04.702 [DEBUG] [Thread-9157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:18:04.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:18:04.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:18:04.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:18:04.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:18:04.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:18:04.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:18:04.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:18:04.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:18:04.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:18:04.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.970583 -999.00  +19.80   9.71     16   -6.00 1 1 1 1 1     0    0 26.32 9.73 ZNESW 9.3 9.7 144.6 12.1 19.4 -26.6 19.3 -26.1 19.0 -24.6 19.3 -25.6
2025-11-26T01:18:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:18:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:18:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.970583
2025-11-26T01:18:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:17:36', tmtdew=30.5, humidity=11.6, cloud=0.0, wind=12.49, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:17:36', seeing=1.32, atlas_timestamp='2025-11-25T23:17:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:15:00')
2025-11-26T01:18:04.729 [DEBUG] [Thread-9157] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:18:04.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:18:04.828 [DEBUG] [Thread-9160] [transport.py] [_log()] starting thread (client mode): 0x70d42fb0
2025-11-26T01:18:04.828 [DEBUG] [Thread-9160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:18:04.842 [DEBUG] [Thread-9160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:18:04.842 [INFO] [Thread-9160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] client lang: <none>
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] server lang: <none>
2025-11-26T01:18:04.850 [DEBUG] [Thread-9160] [transport.py] [_log()] kex follows: False
2025-11-26T01:18:04.851 [DEBUG] [Thread-9160] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:18:04.851 [DEBUG] [Thread-9160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:18:04.851 [DEBUG] [Thread-9160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:18:04.851 [DEBUG] [Thread-9160] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:18:04.851 [DEBUG] [Thread-9160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:18:04.851 [DEBUG] [Thread-9160] [transport.py] [_log()] Compression: none
2025-11-26T01:18:04.851 [DEBUG] [Thread-9160] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:18:04.908 [DEBUG] [Thread-9160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:18:04.909 [DEBUG] [Thread-9160] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:18:04.910 [DEBUG] [Thread-9160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:18:04.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:18:04.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:18:04.964 [DEBUG] [Thread-9160] [transport.py] [_log()] userauth is OK
2025-11-26T01:18:04.965 [DEBUG] [Thread-9160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:18:04.965 [DEBUG] [Thread-9160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:18:04.965 [DEBUG] [Thread-9160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:18:04.965 [DEBUG] [Thread-9160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:18:04.985 [INFO] [Thread-9160] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:18:04.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:18:04.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:18:05.825 [DEBUG] [Thread-9160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:18:05.825 [DEBUG] [Thread-9160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:18:05.873 [DEBUG] [Thread-9160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:18:05.873 [DEBUG] [Thread-9160] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:18:05.882 [DEBUG] [Thread-9160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:18:05.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:18:05.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:18:05.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:18:05.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:18:05.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:18:05.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:18:05.920 [DEBUG] [Thread-9160] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:18:14.402 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:16.090 [DEBUG] [Thread-9162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:16.798 [DEBUG] [Thread-9163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:24.787 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:29.153 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:29.154 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:31.861 [DEBUG] [Thread-9164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:35.216 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:35.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:18:35.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:18:35.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:18:36.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 18, 8), 30.48, 11.61, 0.0, 12.65, 19.55, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:18:36.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:18:08
2025-11-26T01:18:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:18:36.885 [DEBUG] [Thread-9165] [transport.py] [_log()] starting thread (client mode): 0x70de6c80
2025-11-26T01:18:36.885 [DEBUG] [Thread-9165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:18:36.900 [DEBUG] [Thread-9165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:18:36.900 [INFO] [Thread-9165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:18:36.902 [DEBUG] [Thread-9165] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] client lang: <none>
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] server lang: <none>
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] kex follows: False
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] Compression: none
2025-11-26T01:18:36.903 [DEBUG] [Thread-9165] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:18:36.910 [DEBUG] [Thread-9165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:18:36.911 [DEBUG] [Thread-9165] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:18:36.911 [DEBUG] [Thread-9165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:18:36.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:18:36.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:18:36.912 [DEBUG] [Thread-9165] [transport.py] [_log()] userauth is OK
2025-11-26T01:18:36.912 [DEBUG] [Thread-9165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:18:36.912 [DEBUG] [Thread-9165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:18:36.912 [DEBUG] [Thread-9165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:18:36.912 [DEBUG] [Thread-9165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:18:36.928 [INFO] [Thread-9165] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:18:36.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:18:37.563 [DEBUG] [Thread-9165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:18:37.563 [DEBUG] [Thread-9165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:18:37.564 [DEBUG] [Thread-9165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:18:37.603 [DEBUG] [Thread-9165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:18:37.604 [DEBUG] [Thread-9165] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:18:37.606 [DEBUG] [Thread-9165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:18:37.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:18:37.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:18:37.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:18:37.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:18:37.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:18:37.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:18:37.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:18:37.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:18:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:18:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.970930 -999.00  +19.80   9.01     16   -6.00 1 1 1 1 1     0    0 26.46 7.94 ZNESW 8.0 9.0 143.6 10.7 19.4 -26.5 19.3 -25.9 19.0 -24.6 19.3 -25.7
2025-11-26T01:18:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:18:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:18:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.970930
2025-11-26T01:18:37.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:18:37.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:18:37.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:18:37.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:18:37.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:18:37.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:18:08', tmtdew=30.48, humidity=11.61, cloud=0.0, wind=12.65, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:18:08', seeing=1.36, atlas_timestamp='2025-11-25T23:18:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:15:00')
2025-11-26T01:18:37.633 [DEBUG] [Thread-9165] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:18:37.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:18:37.728 [DEBUG] [Thread-9168] [transport.py] [_log()] starting thread (client mode): 0x7374e290
2025-11-26T01:18:37.728 [DEBUG] [Thread-9168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:18:37.743 [DEBUG] [Thread-9168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:18:37.743 [INFO] [Thread-9168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:18:37.750 [DEBUG] [Thread-9168] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] client lang: <none>
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] server lang: <none>
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] kex follows: False
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] Compression: none
2025-11-26T01:18:37.751 [DEBUG] [Thread-9168] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:18:37.809 [DEBUG] [Thread-9168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:18:37.809 [DEBUG] [Thread-9168] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:18:37.810 [DEBUG] [Thread-9168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:18:37.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:18:37.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:18:37.864 [DEBUG] [Thread-9168] [transport.py] [_log()] userauth is OK
2025-11-26T01:18:37.865 [DEBUG] [Thread-9168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:18:37.865 [DEBUG] [Thread-9168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:18:37.865 [DEBUG] [Thread-9168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:18:37.865 [DEBUG] [Thread-9168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:18:37.883 [INFO] [Thread-9168] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:18:37.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:18:37.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:18:38.704 [DEBUG] [Thread-9168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:18:38.704 [DEBUG] [Thread-9168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:18:38.753 [DEBUG] [Thread-9168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:18:38.753 [DEBUG] [Thread-9168] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:18:38.762 [DEBUG] [Thread-9168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:18:38.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:18:38.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:18:38.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:18:38.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:18:38.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:18:38.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:18:38.800 [DEBUG] [Thread-9168] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:18:45.602 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:46.897 [DEBUG] [Thread-9170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:18:55.985 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:01.950 [DEBUG] [Thread-9171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:06.339 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:08.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:19:08.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:19: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
2025-11-26T01:19:09.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 18, 40), 30.38, 11.56, 0.0, 12.37, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:19:09.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:18:40
2025-11-26T01:19:09.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:19:09.766 [DEBUG] [Thread-9172] [transport.py] [_log()] starting thread (client mode): 0x70d68f40
2025-11-26T01:19:09.766 [DEBUG] [Thread-9172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:19:09.786 [DEBUG] [Thread-9172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:19:09.787 [INFO] [Thread-9172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] client lang: <none>
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] server lang: <none>
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] kex follows: False
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] Compression: none
2025-11-26T01:19:09.790 [DEBUG] [Thread-9172] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:19:09.807 [DEBUG] [Thread-9172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:19:09.808 [DEBUG] [Thread-9172] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:19:09.808 [DEBUG] [Thread-9172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:19:09.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:19:09.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:19:09.810 [DEBUG] [Thread-9172] [transport.py] [_log()] userauth is OK
2025-11-26T01:19:09.810 [DEBUG] [Thread-9172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:19:09.810 [DEBUG] [Thread-9172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:19:09.810 [DEBUG] [Thread-9172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:19:09.811 [DEBUG] [Thread-9172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:19:09.831 [INFO] [Thread-9172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:19:09.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:19:10.475 [DEBUG] [Thread-9172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:19:10.475 [DEBUG] [Thread-9172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:19:10.475 [DEBUG] [Thread-9172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:19:10.515 [DEBUG] [Thread-9172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:19:10.516 [DEBUG] [Thread-9172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:19:10.518 [DEBUG] [Thread-9172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:19:10.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:19:10.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:19:10.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:19:10.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:19:10.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:19:10.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:19:10.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:19:10.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:19:10.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:19:10.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.970930 -999.00  +19.80   9.01     16   -6.00 1 1 1 1 1     0    0 26.46 7.94 ZNESW 8.0 9.0 143.6 10.7 19.4 -26.5 19.3 -25.9 19.0 -24.6 19.3 -25.7
2025-11-26T01:19:10.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:19:10.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:19:10.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.970930
2025-11-26T01:19:10.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:19:10.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:19:10.538 [DEBUG] [Thread-9172] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:19:10.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:19:10.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:19:10.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:19:10.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:18:40', tmtdew=30.38, humidity=11.56, cloud=0.0, wind=12.37, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:18:40', seeing=1.48, atlas_timestamp='2025-11-25T23:18:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:15:00')
2025-11-26T01:19:10.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:19:10.645 [DEBUG] [Thread-9175] [transport.py] [_log()] starting thread (client mode): 0x70dd0fa0
2025-11-26T01:19:10.645 [DEBUG] [Thread-9175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:19:10.660 [DEBUG] [Thread-9175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:19:10.660 [INFO] [Thread-9175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:19:10.667 [DEBUG] [Thread-9175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:19:10.668 [DEBUG] [Thread-9175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:19:10.668 [DEBUG] [Thread-9175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:19:10.668 [DEBUG] [Thread-9175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:19:10.668 [DEBUG] [Thread-9175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:19:10.668 [DEBUG] [Thread-9175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:19:10.668 [DEBUG] [Thread-9175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:19:10.668 [DEBUG] [Thread-9175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:19:10.668 [DEBUG] [Thread-9175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:19:10.668 [DEBUG] [Thread-9175] [transport.py] [_log()] client lang: <none>
2025-11-26T01:19:10.669 [DEBUG] [Thread-9175] [transport.py] [_log()] server lang: <none>
2025-11-26T01:19:10.669 [DEBUG] [Thread-9175] [transport.py] [_log()] kex follows: False
2025-11-26T01:19:10.669 [DEBUG] [Thread-9175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:19:10.669 [DEBUG] [Thread-9175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:19:10.669 [DEBUG] [Thread-9175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:19:10.669 [DEBUG] [Thread-9175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:19:10.669 [DEBUG] [Thread-9175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:19:10.669 [DEBUG] [Thread-9175] [transport.py] [_log()] Compression: none
2025-11-26T01:19:10.669 [DEBUG] [Thread-9175] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:19:10.724 [DEBUG] [Thread-9175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:19:10.724 [DEBUG] [Thread-9175] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:19:10.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:19:10.725 [DEBUG] [Thread-9175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:19:10.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:19:10.780 [DEBUG] [Thread-9175] [transport.py] [_log()] userauth is OK
2025-11-26T01:19:10.780 [DEBUG] [Thread-9175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:19:10.780 [DEBUG] [Thread-9175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:19:10.780 [DEBUG] [Thread-9175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:19:10.780 [DEBUG] [Thread-9175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:19:10.799 [INFO] [Thread-9175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:19:10.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:19:10.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:19:11.644 [DEBUG] [Thread-9175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:19:11.644 [DEBUG] [Thread-9175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:19:11.692 [DEBUG] [Thread-9175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:19:11.692 [DEBUG] [Thread-9175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:19:11.701 [DEBUG] [Thread-9175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:19:11.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:19:11.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:19:11.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:19:11.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:19:11.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:19:11.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:19:11.736 [DEBUG] [Thread-9175] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:19:16.147 [DEBUG] [Thread-9177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:16.706 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:16.989 [DEBUG] [Thread-9178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:27.088 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:29.356 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:29.356 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:32.043 [DEBUG] [Thread-9179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:37.543 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:41.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:19:41.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:19:41.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:19:42.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 19, 12), 30.32, 11.6, 0.0, 12.21, 19.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:19:42.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:19:12
2025-11-26T01:19:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:19:42.664 [DEBUG] [Thread-9180] [transport.py] [_log()] starting thread (client mode): 0x70dd1c60
2025-11-26T01:19:42.664 [DEBUG] [Thread-9180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:19:42.685 [DEBUG] [Thread-9180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:19:42.685 [INFO] [Thread-9180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] client lang: <none>
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] server lang: <none>
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] kex follows: False
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:19:42.688 [DEBUG] [Thread-9180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:19:42.689 [DEBUG] [Thread-9180] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:19:42.689 [DEBUG] [Thread-9180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:19:42.689 [DEBUG] [Thread-9180] [transport.py] [_log()] Compression: none
2025-11-26T01:19:42.689 [DEBUG] [Thread-9180] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:19:42.706 [DEBUG] [Thread-9180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:19:42.706 [DEBUG] [Thread-9180] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:19:42.707 [DEBUG] [Thread-9180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:19:42.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:19:42.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:19:42.709 [DEBUG] [Thread-9180] [transport.py] [_log()] userauth is OK
2025-11-26T01:19:42.709 [DEBUG] [Thread-9180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:19:42.709 [DEBUG] [Thread-9180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:19:42.709 [DEBUG] [Thread-9180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:19:42.709 [DEBUG] [Thread-9180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:19:42.734 [INFO] [Thread-9180] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:19:42.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:19:43.371 [DEBUG] [Thread-9180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:19:43.371 [DEBUG] [Thread-9180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:19:43.371 [DEBUG] [Thread-9180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:19:43.412 [DEBUG] [Thread-9180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:19:43.412 [DEBUG] [Thread-9180] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:19:43.416 [DEBUG] [Thread-9180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:19:43.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:19:43.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:19:43.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:19:43.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:19:43.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:19:43.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:19:43.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:19:43.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:19:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:19:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.971624 -999.00  +19.60  10.35     16   -6.10 1 1 1 1 1     0    0 25.84 4.87 ZNESW 9.2 10.3 142.2 11.5 19.3 -26.5 19.2 -25.8 18.9 -24.5 19.2 -25.6
2025-11-26T01:19:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:19:43.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:19:43.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.971624
2025-11-26T01:19:43.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:19:43.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:19:43.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:19:43.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:19:43.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:19:43.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:19:12', tmtdew=30.32, humidity=11.6, cloud=0.0, wind=12.21, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:19:12', seeing=1.48, atlas_timestamp='2025-11-25T23:19:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:18:00')
2025-11-26T01:19:43.444 [DEBUG] [Thread-9180] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:19:43.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:19:43.541 [DEBUG] [Thread-9183] [transport.py] [_log()] starting thread (client mode): 0x70dd25f0
2025-11-26T01:19:43.541 [DEBUG] [Thread-9183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:19:43.555 [DEBUG] [Thread-9183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:19:43.556 [INFO] [Thread-9183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:19:43.563 [DEBUG] [Thread-9183] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:19:43.563 [DEBUG] [Thread-9183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:19:43.563 [DEBUG] [Thread-9183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:19:43.563 [DEBUG] [Thread-9183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:19:43.563 [DEBUG] [Thread-9183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:19:43.563 [DEBUG] [Thread-9183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:19:43.563 [DEBUG] [Thread-9183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] client lang: <none>
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] server lang: <none>
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] kex follows: False
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] Compression: none
2025-11-26T01:19:43.564 [DEBUG] [Thread-9183] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:19:43.621 [DEBUG] [Thread-9183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:19:43.621 [DEBUG] [Thread-9183] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:19:43.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:19:43.623 [DEBUG] [Thread-9183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:19:43.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:19:43.677 [DEBUG] [Thread-9183] [transport.py] [_log()] userauth is OK
2025-11-26T01:19:43.677 [DEBUG] [Thread-9183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:19:43.677 [DEBUG] [Thread-9183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:19:43.677 [DEBUG] [Thread-9183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:19:43.677 [DEBUG] [Thread-9183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:19:43.695 [INFO] [Thread-9183] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:19:43.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:19:43.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:19:44.539 [DEBUG] [Thread-9183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:19:44.539 [DEBUG] [Thread-9183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:19:44.587 [DEBUG] [Thread-9183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:19:44.587 [DEBUG] [Thread-9183] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:19:44.595 [DEBUG] [Thread-9183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:19:44.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:19:44.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:19:44.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:19:44.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:19:44.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:19:44.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:19:44.627 [DEBUG] [Thread-9183] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:19:47.080 [DEBUG] [Thread-9185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:47.950 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:19:58.288 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:02.137 [DEBUG] [Thread-9186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:08.615 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:14.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:20:14.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:20:14.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:20:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 19, 44), 30.33, 11.65, 0.0, 12.6, 19.38, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:20:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:19:44
2025-11-26T01:20:15.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:20:15.573 [DEBUG] [Thread-9187] [transport.py] [_log()] starting thread (client mode): 0x70dd2680
2025-11-26T01:20:15.573 [DEBUG] [Thread-9187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:20:15.593 [DEBUG] [Thread-9187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:20:15.593 [INFO] [Thread-9187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] client lang: <none>
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] server lang: <none>
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] kex follows: False
2025-11-26T01:20:15.596 [DEBUG] [Thread-9187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:20:15.597 [DEBUG] [Thread-9187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:20:15.597 [DEBUG] [Thread-9187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:20:15.597 [DEBUG] [Thread-9187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:20:15.597 [DEBUG] [Thread-9187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:20:15.597 [DEBUG] [Thread-9187] [transport.py] [_log()] Compression: none
2025-11-26T01:20:15.597 [DEBUG] [Thread-9187] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:20:15.614 [DEBUG] [Thread-9187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:20:15.615 [DEBUG] [Thread-9187] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:20:15.616 [DEBUG] [Thread-9187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:20:15.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:20:15.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:20:15.618 [DEBUG] [Thread-9187] [transport.py] [_log()] userauth is OK
2025-11-26T01:20:15.618 [DEBUG] [Thread-9187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:20:15.618 [DEBUG] [Thread-9187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:20:15.618 [DEBUG] [Thread-9187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:20:15.618 [DEBUG] [Thread-9187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:20:15.654 [INFO] [Thread-9187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:20:15.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:20:16.203 [DEBUG] [Thread-9189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:16.297 [DEBUG] [Thread-9187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:20:16.297 [DEBUG] [Thread-9187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:20:16.297 [DEBUG] [Thread-9187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:20:16.337 [DEBUG] [Thread-9187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:20:16.338 [DEBUG] [Thread-9187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:20:16.341 [DEBUG] [Thread-9187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:20:16.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:20:16.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:20:16.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:20:16.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:20:16.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:20:16.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:20:16.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:20:16.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:20:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:20:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.971972 -999.00  +19.60   9.63     16   -6.10 1 1 1 1 1     0    0 25.66 3.04 ZNESW 10.1 9.6 146.6 11.6 19.3 -26.5 19.3 -26.0 19.0 -24.6 19.2 -25.7
2025-11-26T01:20:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:20:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:20:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.971972
2025-11-26T01:20:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:20:16.360 [DEBUG] [Thread-9187] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:20:16.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:20:16.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:20:16.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:20:16.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:20:16.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:19:44', tmtdew=30.33, humidity=11.65, cloud=0.0, wind=12.6, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:19:44', seeing=1.48, atlas_timestamp='2025-11-25T23:19:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:18:00')
2025-11-26T01:20:16.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:20:16.454 [DEBUG] [Thread-9191] [transport.py] [_log()] starting thread (client mode): 0x70d68d90
2025-11-26T01:20:16.454 [DEBUG] [Thread-9191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:20:16.468 [DEBUG] [Thread-9191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:20:16.468 [INFO] [Thread-9191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] client lang: <none>
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] server lang: <none>
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] kex follows: False
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] Compression: none
2025-11-26T01:20:16.476 [DEBUG] [Thread-9191] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:20:16.532 [DEBUG] [Thread-9191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:20:16.532 [DEBUG] [Thread-9191] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:20:16.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:20:16.532 [DEBUG] [Thread-9191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:20:16.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:20:16.589 [DEBUG] [Thread-9191] [transport.py] [_log()] userauth is OK
2025-11-26T01:20:16.589 [DEBUG] [Thread-9191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:20:16.589 [DEBUG] [Thread-9191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:20:16.589 [DEBUG] [Thread-9191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:20:16.589 [DEBUG] [Thread-9191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:20:16.604 [INFO] [Thread-9191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:20:16.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:20:16.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:20:17.163 [DEBUG] [Thread-9193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:17.447 [DEBUG] [Thread-9191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:20:17.447 [DEBUG] [Thread-9191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:20:17.495 [DEBUG] [Thread-9191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:20:17.495 [DEBUG] [Thread-9191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:20:17.503 [DEBUG] [Thread-9191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:20:17.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:20:17.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:20:17.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:20:17.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:20:17.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:20:17.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:20:17.535 [DEBUG] [Thread-9191] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:20:18.939 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:29.282 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:29.559 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:29.560 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:32.207 [DEBUG] [Thread-9194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:39.674 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:47.247 [DEBUG] [Thread-9195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:47.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:20:47.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:20:47.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:20:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 20, 16), 30.35, 11.61, 0.0, 12.3, 19.33, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:20:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:20:16
2025-11-26T01:20:48.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:20:48.491 [DEBUG] [Thread-9196] [transport.py] [_log()] starting thread (client mode): 0x7374d780
2025-11-26T01:20:48.492 [DEBUG] [Thread-9196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:20:48.511 [DEBUG] [Thread-9196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:20:48.512 [INFO] [Thread-9196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] client lang: <none>
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] server lang: <none>
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] kex follows: False
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] Compression: none
2025-11-26T01:20:48.515 [DEBUG] [Thread-9196] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:20:48.530 [DEBUG] [Thread-9196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:20:48.530 [DEBUG] [Thread-9196] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:20:48.531 [DEBUG] [Thread-9196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:20:48.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:20:48.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:20:48.532 [DEBUG] [Thread-9196] [transport.py] [_log()] userauth is OK
2025-11-26T01:20:48.532 [DEBUG] [Thread-9196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:20:48.532 [DEBUG] [Thread-9196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:20:48.532 [DEBUG] [Thread-9196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:20:48.532 [DEBUG] [Thread-9196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:20:48.548 [INFO] [Thread-9196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:20:48.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:20:49.183 [DEBUG] [Thread-9196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:20:49.184 [DEBUG] [Thread-9196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:20:49.184 [DEBUG] [Thread-9196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:20:49.224 [DEBUG] [Thread-9196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:20:49.224 [DEBUG] [Thread-9196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:20:49.226 [DEBUG] [Thread-9196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:20:49.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:20:49.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:20:49.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:20:49.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:20:49.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:20:49.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:20:49.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:20:49.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:20:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:20:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.972319 -999.00  +19.60  12.79     16   -6.10 1 1 1 1 1     0    0 26.28 1.65 ZNESW 11.6 12.8 145.2 14.0 19.4 -26.4 19.3 -25.8 19.0 -24.4 19.2 -25.4
2025-11-26T01:20:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:20:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:20:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.972319
2025-11-26T01:20:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:20:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:20:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:20:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:20:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:20:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:20:16', tmtdew=30.35, humidity=11.61, cloud=0.0, wind=12.3, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:20:16', seeing=1.48, atlas_timestamp='2025-11-25T23:20:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:18:00')
2025-11-26T01:20:49.247 [DEBUG] [Thread-9196] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:20:49.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:20:49.333 [DEBUG] [Thread-9199] [transport.py] [_log()] starting thread (client mode): 0x70d6ab00
2025-11-26T01:20:49.333 [DEBUG] [Thread-9199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:20:49.348 [DEBUG] [Thread-9199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:20:49.348 [INFO] [Thread-9199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] client lang: <none>
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] server lang: <none>
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] kex follows: False
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] Compression: none
2025-11-26T01:20:49.356 [DEBUG] [Thread-9199] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:20:49.413 [DEBUG] [Thread-9199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:20:49.413 [DEBUG] [Thread-9199] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:20:49.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:20:49.413 [DEBUG] [Thread-9199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:20:49.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:20:49.469 [DEBUG] [Thread-9199] [transport.py] [_log()] userauth is OK
2025-11-26T01:20:49.469 [DEBUG] [Thread-9199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:20:49.469 [DEBUG] [Thread-9199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:20:49.469 [DEBUG] [Thread-9199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:20:49.469 [DEBUG] [Thread-9199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:20:49.483 [INFO] [Thread-9199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:20:49.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:20:49.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:20:50.013 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:20:50.363 [DEBUG] [Thread-9199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:20:50.363 [DEBUG] [Thread-9199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:20:50.411 [DEBUG] [Thread-9199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:20:50.411 [DEBUG] [Thread-9199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:20:50.420 [DEBUG] [Thread-9199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:20:50.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:20:50.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')
2025-11-26T01:20:50.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:20:50.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:20:50.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:20:50.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:20:50.455 [DEBUG] [Thread-9199] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:21:00.419 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:02.283 [DEBUG] [Thread-9201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:10.748 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:16.260 [DEBUG] [Thread-9202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:17.329 [DEBUG] [Thread-9203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:20.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:21:20.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:21:20.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:21:21.151 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:21.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 20, 48), 30.4, 11.66, 0.0, 15.1, 19.36, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:21:21.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:20:48
2025-11-26T01:21:21.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:21:21.479 [DEBUG] [Thread-9204] [transport.py] [_log()] starting thread (client mode): 0x70dd0580
2025-11-26T01:21:21.479 [DEBUG] [Thread-9204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:21:21.501 [DEBUG] [Thread-9204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:21:21.501 [INFO] [Thread-9204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] client lang: <none>
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] server lang: <none>
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] kex follows: False
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] Compression: none
2025-11-26T01:21:21.504 [DEBUG] [Thread-9204] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:21:21.520 [DEBUG] [Thread-9204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:21:21.520 [DEBUG] [Thread-9204] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:21:21.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:21:21.520 [DEBUG] [Thread-9204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:21:21.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:21:21.521 [DEBUG] [Thread-9204] [transport.py] [_log()] userauth is OK
2025-11-26T01:21:21.521 [DEBUG] [Thread-9204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:21:21.521 [DEBUG] [Thread-9204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:21:21.521 [DEBUG] [Thread-9204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:21:21.521 [DEBUG] [Thread-9204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:21:21.533 [INFO] [Thread-9204] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:21:21.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:21:22.173 [DEBUG] [Thread-9204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:21:22.173 [DEBUG] [Thread-9204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:21:22.173 [DEBUG] [Thread-9204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:21:22.214 [DEBUG] [Thread-9204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:21:22.215 [DEBUG] [Thread-9204] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:21:22.217 [DEBUG] [Thread-9204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:21:22.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:21:22.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:21:22.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:21:22.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:21:22.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:21:22.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:21:22.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:21:22.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:21:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:21:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.972666 -999.00  +19.80   8.27     16   -6.00 1 1 1 1 1     0    0 26.42 0.91 ZNESW 10.5 8.3 158.8 14.6 19.4 -26.3 19.3 -25.7 19.0 -24.4 19.2 -25.3
2025-11-26T01:21:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:21:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:21:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.972666
2025-11-26T01:21:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:21:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:21:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:21:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:21:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:21:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:20:48', tmtdew=30.4, humidity=11.66, cloud=0.0, wind=15.1, temperature=19.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:21:20', seeing=1.33, atlas_timestamp='2025-11-25T23:20:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:18:00')
2025-11-26T01:21:22.237 [DEBUG] [Thread-9204] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:21:22.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:21:22.324 [DEBUG] [Thread-9207] [transport.py] [_log()] starting thread (client mode): 0x70df3010
2025-11-26T01:21:22.324 [DEBUG] [Thread-9207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:21:22.340 [DEBUG] [Thread-9207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:21:22.341 [INFO] [Thread-9207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] client lang: <none>
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] server lang: <none>
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] kex follows: False
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] Compression: none
2025-11-26T01:21:22.348 [DEBUG] [Thread-9207] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:21:22.403 [DEBUG] [Thread-9207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:21:22.403 [DEBUG] [Thread-9207] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:21:22.403 [DEBUG] [Thread-9207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:21:22.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:21:22.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:21:22.461 [DEBUG] [Thread-9207] [transport.py] [_log()] userauth is OK
2025-11-26T01:21:22.461 [DEBUG] [Thread-9207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:21:22.461 [DEBUG] [Thread-9207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:21:22.461 [DEBUG] [Thread-9207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:21:22.461 [DEBUG] [Thread-9207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:21:22.475 [INFO] [Thread-9207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:21:22.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:21:22.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:21:23.311 [DEBUG] [Thread-9207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:21:23.311 [DEBUG] [Thread-9207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:21:23.360 [DEBUG] [Thread-9207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:21:23.360 [DEBUG] [Thread-9207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:21:23.369 [DEBUG] [Thread-9207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:21:23.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:21:23.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:21:23.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:21:23.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:21:23.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:21:23.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:21:23.405 [DEBUG] [Thread-9207] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:21:29.758 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:29.760 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:31.477 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:32.363 [DEBUG] [Thread-9209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:41.820 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:47.425 [DEBUG] [Thread-9210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:52.143 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:21:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:21:53.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:21:53.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:21:54.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 21, 20), 30.35, 11.7, 0.0, 14.86, 19.31, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:21:54.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:21:20
2025-11-26T01:21:54.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:21:54.439 [DEBUG] [Thread-9211] [transport.py] [_log()] starting thread (client mode): 0x70d54520
2025-11-26T01:21:54.439 [DEBUG] [Thread-9211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:21:54.459 [DEBUG] [Thread-9211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:21:54.459 [INFO] [Thread-9211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:21:54.462 [DEBUG] [Thread-9211] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:21:54.462 [DEBUG] [Thread-9211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] client lang: <none>
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] server lang: <none>
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] kex follows: False
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] Compression: none
2025-11-26T01:21:54.463 [DEBUG] [Thread-9211] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:21:54.479 [DEBUG] [Thread-9211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:21:54.480 [DEBUG] [Thread-9211] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:21:54.480 [DEBUG] [Thread-9211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:21:54.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:21:54.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:21:54.524 [DEBUG] [Thread-9211] [transport.py] [_log()] userauth is OK
2025-11-26T01:21:54.524 [DEBUG] [Thread-9211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:21:54.524 [DEBUG] [Thread-9211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:21:54.524 [DEBUG] [Thread-9211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:21:54.524 [DEBUG] [Thread-9211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:21:54.543 [INFO] [Thread-9211] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:21:54.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:21:55.189 [DEBUG] [Thread-9211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:21:55.189 [DEBUG] [Thread-9211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:21:55.189 [DEBUG] [Thread-9211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:21:55.229 [DEBUG] [Thread-9211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:21:55.229 [DEBUG] [Thread-9211] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:21:55.232 [DEBUG] [Thread-9211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:21:55.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:21:55.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:21:55.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:21:55.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:21:55.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:21:55.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:21:55.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.973013 -999.00  +19.70  10.99     16   -6.00 1 1 1 1 1     0    0 25.52 0.73 ZNESW 11.1 11.0 138.0 13.7 19.3 -26.3 19.3 -25.9 19.0 -24.3 19.2 -25.4
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.973013
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:21:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:21:20', tmtdew=30.35, humidity=11.7, cloud=0.0, wind=14.86, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:21:53', seeing=1.41, atlas_timestamp='2025-11-25T23:21:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:18:00')
2025-11-26T01:21:55.244 [DEBUG] [Thread-9211] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:21:55.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:21:55.332 [DEBUG] [Thread-9214] [transport.py] [_log()] starting thread (client mode): 0x7374e740
2025-11-26T01:21:55.332 [DEBUG] [Thread-9214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:21:55.354 [DEBUG] [Thread-9214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:21:55.354 [INFO] [Thread-9214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] client lang: <none>
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] server lang: <none>
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] kex follows: False
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] Compression: none
2025-11-26T01:21:55.366 [DEBUG] [Thread-9214] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:21:55.422 [DEBUG] [Thread-9214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:21:55.422 [DEBUG] [Thread-9214] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:21:55.422 [DEBUG] [Thread-9214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:21:55.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:21:55.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:21:55.481 [DEBUG] [Thread-9214] [transport.py] [_log()] userauth is OK
2025-11-26T01:21:55.481 [DEBUG] [Thread-9214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:21:55.481 [DEBUG] [Thread-9214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:21:55.481 [DEBUG] [Thread-9214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:21:55.481 [DEBUG] [Thread-9214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:21:55.496 [INFO] [Thread-9214] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:21:55.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:21:55.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:21:56.367 [DEBUG] [Thread-9214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:21:56.367 [DEBUG] [Thread-9214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:21:56.416 [DEBUG] [Thread-9214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:21:56.416 [DEBUG] [Thread-9214] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:21:56.425 [DEBUG] [Thread-9214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:21:56.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:21:56.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:21:56.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:21:56.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:21:56.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:21:56.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:21:56.457 [DEBUG] [Thread-9214] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:22:02.461 [DEBUG] [Thread-9216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:02.485 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:12.827 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:16.333 [DEBUG] [Thread-9217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:17.516 [DEBUG] [Thread-9218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:23.148 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:26.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:22:26.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:22:26.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:22:27.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 21, 52), 30.39, 11.71, 0.0, 14.93, 19.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:22:27.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:21:52
2025-11-26T01:22:27.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:22:27.459 [DEBUG] [Thread-9219] [transport.py] [_log()] starting thread (client mode): 0x7374f8e0
2025-11-26T01:22:27.459 [DEBUG] [Thread-9219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:22:27.471 [DEBUG] [Thread-9219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:22:27.471 [INFO] [Thread-9219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] client lang: <none>
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] server lang: <none>
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] kex follows: False
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] Compression: none
2025-11-26T01:22:27.473 [DEBUG] [Thread-9219] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:22:27.485 [DEBUG] [Thread-9219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:22:27.485 [DEBUG] [Thread-9219] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:22:27.485 [DEBUG] [Thread-9219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:22:27.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:22:27.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:22:27.487 [DEBUG] [Thread-9219] [transport.py] [_log()] userauth is OK
2025-11-26T01:22:27.487 [DEBUG] [Thread-9219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:22:27.487 [DEBUG] [Thread-9219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:22:27.487 [DEBUG] [Thread-9219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:22:27.487 [DEBUG] [Thread-9219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:22:27.504 [INFO] [Thread-9219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:22:27.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:22:28.077 [DEBUG] [Thread-9219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:22:28.077 [DEBUG] [Thread-9219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:22:28.077 [DEBUG] [Thread-9219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:22:28.117 [DEBUG] [Thread-9219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:22:28.118 [DEBUG] [Thread-9219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:22:28.120 [DEBUG] [Thread-9219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:22:28.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:22:28.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:22:28.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:22:28.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:22:28.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:22:28.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:22:28.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:22:28.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:22:28.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:22:28.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.973360 -999.00  +19.70  11.66     16   -6.10 1 1 1 1 1     0    0 25.75 0.41 ZNESW 10.3 11.7 152.2 14.5 19.4 -26.3 19.3 -25.8 19.0 -24.5 19.2 -25.1
2025-11-26T01:22:28.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:22:28.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:22:28.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.973360
2025-11-26T01:22:28.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:22:28.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:22:28.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:22:28.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:22:28.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:22:28.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:21:52', tmtdew=30.39, humidity=11.71, cloud=0.0, wind=14.93, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:22:25', seeing=1.41, atlas_timestamp='2025-11-25T23:21:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06425000000000125, -0.03974999999999973, -0.0182500000000001, -0.01550000000000118, 0.01750000000000007, 0.018250000000001876, -0.04600000000000115, -0.0677500000000002, 0.011999999999998678, -0.03999999999999915, 0.021750000000000824, -0.023999999999999133, 0.07699999999999996, 0.07324999999999982, -0.051000000000000156, -0.041999999999999815, -0.03275000000000006, -0.011499999999999844, -0.014000000000001123, -0.05775000000000041, 0.0804999999999989, 0.057749999999998636, 0.02525000000000155, -0.03725000000000023, -0.03149999999999942, -0.028499999999999304, -0.05925000000000047, 0.0045000000000001705, 0.12849999999999895, 0.08000000000000185, 0.03700000000000081, -0.016000000000000014, -0.07125000000000092], zp_timestamp='2025-11-25T23:18:00')
2025-11-26T01:22:28.144 [DEBUG] [Thread-9219] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:22:28.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:22:28.241 [DEBUG] [Thread-9222] [transport.py] [_log()] starting thread (client mode): 0x70dd0be0
2025-11-26T01:22:28.241 [DEBUG] [Thread-9222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:22:28.255 [DEBUG] [Thread-9222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:22:28.255 [INFO] [Thread-9222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:22:28.263 [DEBUG] [Thread-9222] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:22:28.263 [DEBUG] [Thread-9222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:22:28.263 [DEBUG] [Thread-9222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] client lang: <none>
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] server lang: <none>
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] kex follows: False
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:22:28.264 [DEBUG] [Thread-9222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:22:28.265 [DEBUG] [Thread-9222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:22:28.265 [DEBUG] [Thread-9222] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:22:28.265 [DEBUG] [Thread-9222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:22:28.265 [DEBUG] [Thread-9222] [transport.py] [_log()] Compression: none
2025-11-26T01:22:28.265 [DEBUG] [Thread-9222] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:22:28.321 [DEBUG] [Thread-9222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:22:28.322 [DEBUG] [Thread-9222] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:22:28.323 [DEBUG] [Thread-9222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:22:28.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:22:28.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:22:28.378 [DEBUG] [Thread-9222] [transport.py] [_log()] userauth is OK
2025-11-26T01:22:28.378 [DEBUG] [Thread-9222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:22:28.378 [DEBUG] [Thread-9222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:22:28.378 [DEBUG] [Thread-9222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:22:28.378 [DEBUG] [Thread-9222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:22:28.401 [INFO] [Thread-9222] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:22:28.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:22:28.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:22:29.234 [DEBUG] [Thread-9222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:22:29.234 [DEBUG] [Thread-9222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:22:29.284 [DEBUG] [Thread-9222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:22:29.284 [DEBUG] [Thread-9222] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:22:29.293 [DEBUG] [Thread-9222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:22:29.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:22:29.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:22:29.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:22:29.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:22:29.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:22:29.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:22:29.330 [DEBUG] [Thread-9222] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:22:29.973 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:29.975 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:32.549 [DEBUG] [Thread-9224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:33.542 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:43.912 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:47.588 [DEBUG] [Thread-9225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:54.325 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:22:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:22:59.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:22:59.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:22:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 22, 57), 30.72, 11.56, 0.0, 14.01, 19.56, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:22:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:22:57
2025-11-26T01:23:00.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:23:00.258 [DEBUG] [Thread-9226] [transport.py] [_log()] starting thread (client mode): 0x70dd3280
2025-11-26T01:23:00.259 [DEBUG] [Thread-9226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:23:00.278 [DEBUG] [Thread-9226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:23:00.278 [INFO] [Thread-9226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:23:00.281 [DEBUG] [Thread-9226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:23:00.281 [DEBUG] [Thread-9226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:23:00.281 [DEBUG] [Thread-9226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:23:00.281 [DEBUG] [Thread-9226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] client lang: <none>
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] server lang: <none>
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] kex follows: False
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] Compression: none
2025-11-26T01:23:00.282 [DEBUG] [Thread-9226] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:23:00.299 [DEBUG] [Thread-9226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:23:00.300 [DEBUG] [Thread-9226] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:23:00.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:23:00.301 [DEBUG] [Thread-9226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:23:00.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:23:00.303 [DEBUG] [Thread-9226] [transport.py] [_log()] userauth is OK
2025-11-26T01:23:00.303 [DEBUG] [Thread-9226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:23:00.303 [DEBUG] [Thread-9226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:23:00.303 [DEBUG] [Thread-9226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:23:00.303 [DEBUG] [Thread-9226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:23:00.327 [INFO] [Thread-9226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:23:00.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:23:00.948 [DEBUG] [Thread-9226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:23:00.949 [DEBUG] [Thread-9226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:23:00.949 [DEBUG] [Thread-9226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:23:00.990 [DEBUG] [Thread-9226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:23:00.990 [DEBUG] [Thread-9226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:23:00.993 [DEBUG] [Thread-9226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:23:01.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:23:01.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:23:01.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:23:01.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:23:01.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:23:01.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:23:01.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:23:01.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:23:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:23:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.974055 -999.00  +19.90  13.00     16   -6.10 1 1 1 1 1     0    0 25.88 1.59 ZNESW 13.2 13.0 137.8 14.0 19.3 -26.3 19.3 -25.8 18.9 -24.4 19.2 -25.2
2025-11-26T01:23:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:23:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:23:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.974055
2025-11-26T01:23:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:23:01.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:23:01.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:23:01.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:23:01.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:23:01.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:22:57', tmtdew=30.72, humidity=11.56, cloud=0.0, wind=14.01, temperature=19.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:22:57', seeing=1.26, atlas_timestamp='2025-11-25T23:22:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, -0.05375000000000085, 0.0012500000000006395, 0.007499999999998508, 0.005499999999999616, 0.06725000000000136, 0.016000000000000014, -0.014749999999999375, -0.011499999999999844, -0.013999999999999346, 0.013249999999999318, -0.009999999999999787, 0.08249999999999957, 0.07374999999999865, 0.01249999999999929, -0.041999999999999815, 0.004249999999998977, -0.01750000000000007, 0.005999999999998451, -0.0547500000000003, 0.07149999999999856, 0.07074999999999854, 0.03325000000000067, -0.003750000000000142, -0.022500000000000853, -0.02099999999999902, -0.05424999999999969, 0.050499999999999545, 0.09800000000000075, 0.026000000000001577, 0.0470000000000006, 0.0045000000000001705, -0.030250000000000554], zp_timestamp='2025-11-25T23:21:00')
2025-11-26T01:23:01.021 [DEBUG] [Thread-9226] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:23:01.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:23:01.113 [DEBUG] [Thread-9229] [transport.py] [_log()] starting thread (client mode): 0x70d55120
2025-11-26T01:23:01.114 [DEBUG] [Thread-9229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:23:01.129 [DEBUG] [Thread-9229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:23:01.129 [INFO] [Thread-9229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:23:01.136 [DEBUG] [Thread-9229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:23:01.136 [DEBUG] [Thread-9229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] client lang: <none>
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] server lang: <none>
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] kex follows: False
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] Compression: none
2025-11-26T01:23:01.137 [DEBUG] [Thread-9229] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:23:01.194 [DEBUG] [Thread-9229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:23:01.195 [DEBUG] [Thread-9229] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:23:01.195 [DEBUG] [Thread-9229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:23:01.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:23:01.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:23:01.260 [DEBUG] [Thread-9229] [transport.py] [_log()] userauth is OK
2025-11-26T01:23:01.260 [DEBUG] [Thread-9229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:23:01.260 [DEBUG] [Thread-9229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:23:01.260 [DEBUG] [Thread-9229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:23:01.260 [DEBUG] [Thread-9229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:23:01.283 [INFO] [Thread-9229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:23:01.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:23:01.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:23:02.117 [DEBUG] [Thread-9229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:23:02.117 [DEBUG] [Thread-9229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:23:02.164 [DEBUG] [Thread-9229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:23:02.165 [DEBUG] [Thread-9229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:23:02.174 [DEBUG] [Thread-9229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:23:02.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:23:02.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:23:02.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:23:02.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:23:02.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:23:02.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:23:02.215 [DEBUG] [Thread-9229] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:23:02.625 [DEBUG] [Thread-9231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:04.725 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:15.066 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:16.413 [DEBUG] [Thread-9232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:17.684 [DEBUG] [Thread-9233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:25.389 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:30.177 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:30.177 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:32.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:23:32.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:23:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:23:32.715 [DEBUG] [Thread-9234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:32.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 23, 29), 30.84, 11.48, 0.0, 12.88, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:23:32.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:23:29
2025-11-26T01:23:33.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:23:33.193 [DEBUG] [Thread-9235] [transport.py] [_log()] starting thread (client mode): 0x7374c280
2025-11-26T01:23:33.193 [DEBUG] [Thread-9235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:23:33.213 [DEBUG] [Thread-9235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:23:33.213 [INFO] [Thread-9235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:23:33.216 [DEBUG] [Thread-9235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:23:33.216 [DEBUG] [Thread-9235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] client lang: <none>
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] server lang: <none>
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] kex follows: False
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] Compression: none
2025-11-26T01:23:33.217 [DEBUG] [Thread-9235] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:23:33.235 [DEBUG] [Thread-9235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:23:33.236 [DEBUG] [Thread-9235] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:23:33.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:23:33.237 [DEBUG] [Thread-9235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:23:33.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:23:33.239 [DEBUG] [Thread-9235] [transport.py] [_log()] userauth is OK
2025-11-26T01:23:33.239 [DEBUG] [Thread-9235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:23:33.240 [DEBUG] [Thread-9235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:23:33.240 [DEBUG] [Thread-9235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:23:33.240 [DEBUG] [Thread-9235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:23:33.275 [INFO] [Thread-9235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:23:33.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:23:34.074 [DEBUG] [Thread-9235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:23:34.074 [DEBUG] [Thread-9235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:23:34.075 [DEBUG] [Thread-9235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:23:34.116 [DEBUG] [Thread-9235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:23:34.116 [DEBUG] [Thread-9235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:23:34.122 [DEBUG] [Thread-9235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:23:34.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:23:34.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:23:34.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:23:34.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:23:34.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:23:34.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:23:34.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:23:34.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:23:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:23:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.974402 -999.00  +19.90  13.85     16   -6.20 1 1 1 1 1     0    0 25.78 2.69 ZNESW 11.8 13.8 145.2 18.2 19.4 -26.2 19.3 -25.7 19.0 -24.3 19.3 -25.1
2025-11-26T01:23:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:23:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:23:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.974402
2025-11-26T01:23:34.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:23:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:23:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:23:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:23:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:23:34.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:23:29', tmtdew=30.84, humidity=11.48, cloud=0.0, wind=12.88, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:23:29', seeing=1.48, atlas_timestamp='2025-11-25T23:23:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, -0.05375000000000085, 0.0012500000000006395, 0.007499999999998508, 0.005499999999999616, 0.06725000000000136, 0.016000000000000014, -0.014749999999999375, -0.011499999999999844, -0.013999999999999346, 0.013249999999999318, -0.009999999999999787, 0.08249999999999957, 0.07374999999999865, 0.01249999999999929, -0.041999999999999815, 0.004249999999998977, -0.01750000000000007, 0.005999999999998451, -0.0547500000000003, 0.07149999999999856, 0.07074999999999854, 0.03325000000000067, -0.003750000000000142, -0.022500000000000853, -0.02099999999999902, -0.05424999999999969, 0.050499999999999545, 0.09800000000000075, 0.026000000000001577, 0.0470000000000006, 0.0045000000000001705, -0.030250000000000554], zp_timestamp='2025-11-25T23:21:00')
2025-11-26T01:23:34.147 [DEBUG] [Thread-9235] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:23:34.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:23:34.246 [DEBUG] [Thread-9238] [transport.py] [_log()] starting thread (client mode): 0x7374e4a0
2025-11-26T01:23:34.246 [DEBUG] [Thread-9238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:23:34.261 [DEBUG] [Thread-9238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:23:34.261 [INFO] [Thread-9238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:23:34.269 [DEBUG] [Thread-9238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:23:34.269 [DEBUG] [Thread-9238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:23:34.269 [DEBUG] [Thread-9238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:23:34.269 [DEBUG] [Thread-9238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:23:34.270 [DEBUG] [Thread-9238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:23:34.270 [DEBUG] [Thread-9238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:23:34.270 [DEBUG] [Thread-9238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:23:34.270 [DEBUG] [Thread-9238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:23:34.270 [DEBUG] [Thread-9238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:23:34.270 [DEBUG] [Thread-9238] [transport.py] [_log()] client lang: <none>
2025-11-26T01:23:34.270 [DEBUG] [Thread-9238] [transport.py] [_log()] server lang: <none>
2025-11-26T01:23:34.270 [DEBUG] [Thread-9238] [transport.py] [_log()] kex follows: False
2025-11-26T01:23:34.271 [DEBUG] [Thread-9238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:23:34.271 [DEBUG] [Thread-9238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:23:34.271 [DEBUG] [Thread-9238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:23:34.271 [DEBUG] [Thread-9238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:23:34.271 [DEBUG] [Thread-9238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:23:34.271 [DEBUG] [Thread-9238] [transport.py] [_log()] Compression: none
2025-11-26T01:23:34.271 [DEBUG] [Thread-9238] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:23:34.327 [DEBUG] [Thread-9238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:23:34.327 [DEBUG] [Thread-9238] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:23:34.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:23:34.328 [DEBUG] [Thread-9238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:23:34.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:23:34.382 [DEBUG] [Thread-9238] [transport.py] [_log()] userauth is OK
2025-11-26T01:23:34.383 [DEBUG] [Thread-9238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:23:34.383 [DEBUG] [Thread-9238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:23:34.383 [DEBUG] [Thread-9238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:23:34.383 [DEBUG] [Thread-9238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:23:34.402 [INFO] [Thread-9238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:23:34.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:23:34.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:23:35.222 [DEBUG] [Thread-9238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:23:35.223 [DEBUG] [Thread-9238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:23:35.271 [DEBUG] [Thread-9238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:23:35.271 [DEBUG] [Thread-9238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:23:35.280 [DEBUG] [Thread-9238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:23:35.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:23:35.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:23:35.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:23:35.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:23:35.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:23:35.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:23:35.318 [DEBUG] [Thread-9238] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:23:35.761 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:46.104 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:47.745 [DEBUG] [Thread-9240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:23:56.426 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:02.783 [DEBUG] [Thread-9241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:05.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:24:05.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:24:05.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:24:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 24, 1), 30.93, 11.4, 0.0, 11.66, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:24:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:24:01
2025-11-26T01:24:06.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:24:06.272 [DEBUG] [Thread-9242] [transport.py] [_log()] starting thread (client mode): 0x70dd0e20
2025-11-26T01:24:06.272 [DEBUG] [Thread-9242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:24:06.283 [DEBUG] [Thread-9242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:24:06.283 [INFO] [Thread-9242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:24:06.285 [DEBUG] [Thread-9242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:24:06.285 [DEBUG] [Thread-9242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:24:06.285 [DEBUG] [Thread-9242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:24:06.285 [DEBUG] [Thread-9242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] client lang: <none>
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] server lang: <none>
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] kex follows: False
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] Compression: none
2025-11-26T01:24:06.286 [DEBUG] [Thread-9242] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:24:06.300 [DEBUG] [Thread-9242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:24:06.300 [DEBUG] [Thread-9242] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:24:06.300 [DEBUG] [Thread-9242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:24:06.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:24:06.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:24:06.302 [DEBUG] [Thread-9242] [transport.py] [_log()] userauth is OK
2025-11-26T01:24:06.302 [DEBUG] [Thread-9242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:24:06.302 [DEBUG] [Thread-9242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:24:06.302 [DEBUG] [Thread-9242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:24:06.302 [DEBUG] [Thread-9242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:24:06.320 [INFO] [Thread-9242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:24:06.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:24:06.769 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:06.977 [DEBUG] [Thread-9242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:24:06.978 [DEBUG] [Thread-9242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:24:06.978 [DEBUG] [Thread-9242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:24:07.019 [DEBUG] [Thread-9242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:24:07.019 [DEBUG] [Thread-9242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:24:07.022 [DEBUG] [Thread-9242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:24:07.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:24:07.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:24:07.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:24:07.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:24:07.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:24:07.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:24:07.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:24:07.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:24:07.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:24:07.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.974749 -999.00  +20.00   9.50     16   -6.10 1 1 1 1 1     0    0 25.70 3.67 ZNESW 9.2 9.5 136.2 12.6 19.4 -26.4 19.3 -25.8 19.0 -24.4 19.2 -25.3
2025-11-26T01:24:07.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:24:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:24:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.974749
2025-11-26T01:24:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:24:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:24:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:24:07.048 [DEBUG] [Thread-9242] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:24:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:24:07.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:24:07.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:24:01', tmtdew=30.93, humidity=11.4, cloud=0.0, wind=11.66, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:24:01', seeing=1.48, atlas_timestamp='2025-11-25T23:23:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, -0.05375000000000085, 0.0012500000000006395, 0.007499999999998508, 0.005499999999999616, 0.06725000000000136, 0.016000000000000014, -0.014749999999999375, -0.011499999999999844, -0.013999999999999346, 0.013249999999999318, -0.009999999999999787, 0.08249999999999957, 0.07374999999999865, 0.01249999999999929, -0.041999999999999815, 0.004249999999998977, -0.01750000000000007, 0.005999999999998451, -0.0547500000000003, 0.07149999999999856, 0.07074999999999854, 0.03325000000000067, -0.003750000000000142, -0.022500000000000853, -0.02099999999999902, -0.05424999999999969, 0.050499999999999545, 0.09800000000000075, 0.026000000000001577, 0.0470000000000006, 0.0045000000000001705, -0.030250000000000554], zp_timestamp='2025-11-25T23:21:00')
2025-11-26T01:24:07.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:24:07.143 [DEBUG] [Thread-9245] [transport.py] [_log()] starting thread (client mode): 0x70d7de70
2025-11-26T01:24:07.143 [DEBUG] [Thread-9245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:24:07.158 [DEBUG] [Thread-9245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:24:07.158 [INFO] [Thread-9245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:24:07.166 [DEBUG] [Thread-9245] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:24:07.166 [DEBUG] [Thread-9245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:24:07.166 [DEBUG] [Thread-9245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:24:07.166 [DEBUG] [Thread-9245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] client lang: <none>
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] server lang: <none>
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] kex follows: False
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:24:07.167 [DEBUG] [Thread-9245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:24:07.168 [DEBUG] [Thread-9245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:24:07.168 [DEBUG] [Thread-9245] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:24:07.168 [DEBUG] [Thread-9245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:24:07.168 [DEBUG] [Thread-9245] [transport.py] [_log()] Compression: none
2025-11-26T01:24:07.168 [DEBUG] [Thread-9245] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:24:07.226 [DEBUG] [Thread-9245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:24:07.227 [DEBUG] [Thread-9245] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:24:07.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:24:07.228 [DEBUG] [Thread-9245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:24:07.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:24:07.283 [DEBUG] [Thread-9245] [transport.py] [_log()] userauth is OK
2025-11-26T01:24:07.283 [DEBUG] [Thread-9245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:24:07.283 [DEBUG] [Thread-9245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:24:07.283 [DEBUG] [Thread-9245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:24:07.283 [DEBUG] [Thread-9245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:24:07.304 [INFO] [Thread-9245] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:24:07.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:24:07.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:24:08.168 [DEBUG] [Thread-9245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:24:08.169 [DEBUG] [Thread-9245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:24:08.217 [DEBUG] [Thread-9245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:24:08.217 [DEBUG] [Thread-9245] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:24:08.226 [DEBUG] [Thread-9245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:24:08.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:24:08.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:24:08.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:24:08.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:24:08.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:24:08.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:24:08.262 [DEBUG] [Thread-9245] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:24:16.491 [DEBUG] [Thread-9247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:17.095 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:17.816 [DEBUG] [Thread-9248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:27.526 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:30.379 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:30.381 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:32.876 [DEBUG] [Thread-9249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:37.941 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:38.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:24:38.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:24:38.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:24:38.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 24, 33), 30.89, 11.43, 0.0, 11.56, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:24:38.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:24:33
2025-11-26T01:24:39.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:24:39.216 [DEBUG] [Thread-9250] [transport.py] [_log()] starting thread (client mode): 0x70d3b160
2025-11-26T01:24:39.216 [DEBUG] [Thread-9250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:24:39.237 [DEBUG] [Thread-9250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:24:39.238 [INFO] [Thread-9250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:24:39.240 [DEBUG] [Thread-9250] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:24:39.240 [DEBUG] [Thread-9250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:24:39.240 [DEBUG] [Thread-9250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] client lang: <none>
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] server lang: <none>
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] kex follows: False
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] Compression: none
2025-11-26T01:24:39.241 [DEBUG] [Thread-9250] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:24:39.255 [DEBUG] [Thread-9250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:24:39.255 [DEBUG] [Thread-9250] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:24:39.256 [DEBUG] [Thread-9250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:24:39.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:24:39.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:24:39.258 [DEBUG] [Thread-9250] [transport.py] [_log()] userauth is OK
2025-11-26T01:24:39.258 [DEBUG] [Thread-9250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:24:39.259 [DEBUG] [Thread-9250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:24:39.259 [DEBUG] [Thread-9250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:24:39.259 [DEBUG] [Thread-9250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:24:39.276 [INFO] [Thread-9250] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:24:39.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:24:39.887 [DEBUG] [Thread-9250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:24:39.887 [DEBUG] [Thread-9250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:24:39.888 [DEBUG] [Thread-9250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:24:39.928 [DEBUG] [Thread-9250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:24:39.928 [DEBUG] [Thread-9250] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:24:39.931 [DEBUG] [Thread-9250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:24:39.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:24:39.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:24:39.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:24:39.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:24:39.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:24:39.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:24:39.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:24:39.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:24:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:24:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.975097 -999.00  +19.90   9.79     16   -6.10 1 1 1 1 1     0    0 25.73 3.41 ZNESW 11.2 9.8 132.8 11.6 19.4 -26.4 19.3 -25.8 19.1 -24.5 19.2 -25.4
2025-11-26T01:24:39.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:24:39.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:24:39.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.975097
2025-11-26T01:24:39.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:24:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:24:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:24:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:24:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:24:39.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:24:33', tmtdew=30.89, humidity=11.43, cloud=0.0, wind=11.56, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:24:33', seeing=1.46, atlas_timestamp='2025-11-25T23:24:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, -0.05375000000000085, 0.0012500000000006395, 0.007499999999998508, 0.005499999999999616, 0.06725000000000136, 0.016000000000000014, -0.014749999999999375, -0.011499999999999844, -0.013999999999999346, 0.013249999999999318, -0.009999999999999787, 0.08249999999999957, 0.07374999999999865, 0.01249999999999929, -0.041999999999999815, 0.004249999999998977, -0.01750000000000007, 0.005999999999998451, -0.0547500000000003, 0.07149999999999856, 0.07074999999999854, 0.03325000000000067, -0.003750000000000142, -0.022500000000000853, -0.02099999999999902, -0.05424999999999969, 0.050499999999999545, 0.09800000000000075, 0.026000000000001577, 0.0470000000000006, 0.0045000000000001705, -0.030250000000000554], zp_timestamp='2025-11-25T23:21:00')
2025-11-26T01:24:39.959 [DEBUG] [Thread-9250] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:24:40.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:24:40.054 [DEBUG] [Thread-9253] [transport.py] [_log()] starting thread (client mode): 0x7374e290
2025-11-26T01:24:40.054 [DEBUG] [Thread-9253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:24:40.068 [DEBUG] [Thread-9253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:24:40.068 [INFO] [Thread-9253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] client lang: <none>
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] server lang: <none>
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] kex follows: False
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:24:40.076 [DEBUG] [Thread-9253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:24:40.077 [DEBUG] [Thread-9253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:24:40.077 [DEBUG] [Thread-9253] [transport.py] [_log()] Compression: none
2025-11-26T01:24:40.077 [DEBUG] [Thread-9253] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:24:40.135 [DEBUG] [Thread-9253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:24:40.135 [DEBUG] [Thread-9253] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:24:40.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:24:40.136 [DEBUG] [Thread-9253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:24:40.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:24:40.191 [DEBUG] [Thread-9253] [transport.py] [_log()] userauth is OK
2025-11-26T01:24:40.191 [DEBUG] [Thread-9253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:24:40.192 [DEBUG] [Thread-9253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:24:40.192 [DEBUG] [Thread-9253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:24:40.192 [DEBUG] [Thread-9253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:24:40.210 [INFO] [Thread-9253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:24:40.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:24:40.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:24:41.041 [DEBUG] [Thread-9253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:24:41.041 [DEBUG] [Thread-9253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:24:41.093 [DEBUG] [Thread-9253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:24:41.094 [DEBUG] [Thread-9253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:24:41.103 [DEBUG] [Thread-9253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:24:41.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:24:41.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:24:41.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:24:41.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:24:41.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:24:41.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:24:41.140 [DEBUG] [Thread-9253] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:24:47.913 [DEBUG] [Thread-9255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:48.319 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:24:58.656 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:02.967 [DEBUG] [Thread-9256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:08.987 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:11.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:25:11.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:25:11.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:25:11.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 25, 5), 30.78, 11.51, 0.0, 11.36, 19.61, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:25:11.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:25:05
2025-11-26T01:25:11.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:25:12.112 [DEBUG] [Thread-9257] [transport.py] [_log()] starting thread (client mode): 0x70dd2a40
2025-11-26T01:25:12.112 [DEBUG] [Thread-9257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:25:12.131 [DEBUG] [Thread-9257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:25:12.131 [INFO] [Thread-9257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] client lang: <none>
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] server lang: <none>
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] kex follows: False
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] Compression: none
2025-11-26T01:25:12.134 [DEBUG] [Thread-9257] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:25:12.149 [DEBUG] [Thread-9257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:25:12.149 [DEBUG] [Thread-9257] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:25:12.149 [DEBUG] [Thread-9257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:25:12.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:25:12.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:25:12.192 [DEBUG] [Thread-9257] [transport.py] [_log()] userauth is OK
2025-11-26T01:25:12.193 [DEBUG] [Thread-9257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:25:12.193 [DEBUG] [Thread-9257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:25:12.193 [DEBUG] [Thread-9257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:25:12.193 [DEBUG] [Thread-9257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:25:12.225 [INFO] [Thread-9257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:25:12.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:25:13.144 [DEBUG] [Thread-9257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:25:13.144 [DEBUG] [Thread-9257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:25:13.144 [DEBUG] [Thread-9257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:25:13.185 [DEBUG] [Thread-9257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:25:13.185 [DEBUG] [Thread-9257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:25:13.189 [DEBUG] [Thread-9257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:25:13.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:25:13.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:25:13.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:25:13.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:25:13.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:25:13.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:25:13.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:25:13.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:25:13.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:25:13.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.975444 -999.00  +19.90  10.87     16   -6.20 1 1 1 1 1     0    0 25.86 4.24 ZNESW 9.1 10.9 133.8 13.3 19.4 -26.4 19.3 -25.8 19.0 -24.4 19.2 -25.4
2025-11-26T01:25:13.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:25:13.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:25:13.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.975444
2025-11-26T01:25:13.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:25:13.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:25:13.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:25:13.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:25:13.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:25:13.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:25:05', tmtdew=30.78, humidity=11.51, cloud=0.0, wind=11.36, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:25:05', seeing=1.26, atlas_timestamp='2025-11-25T23:24:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, -0.05375000000000085, 0.0012500000000006395, 0.007499999999998508, 0.005499999999999616, 0.06725000000000136, 0.016000000000000014, -0.014749999999999375, -0.011499999999999844, -0.013999999999999346, 0.013249999999999318, -0.009999999999999787, 0.08249999999999957, 0.07374999999999865, 0.01249999999999929, -0.041999999999999815, 0.004249999999998977, -0.01750000000000007, 0.005999999999998451, -0.0547500000000003, 0.07149999999999856, 0.07074999999999854, 0.03325000000000067, -0.003750000000000142, -0.022500000000000853, -0.02099999999999902, -0.05424999999999969, 0.050499999999999545, 0.09800000000000075, 0.026000000000001577, 0.0470000000000006, 0.0045000000000001705, -0.030250000000000554], zp_timestamp='2025-11-25T23:21:00')
2025-11-26T01:25:13.216 [DEBUG] [Thread-9257] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:25:13.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:25:13.316 [DEBUG] [Thread-9260] [transport.py] [_log()] starting thread (client mode): 0x70d3b7c0
2025-11-26T01:25:13.317 [DEBUG] [Thread-9260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:25:13.331 [DEBUG] [Thread-9260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:25:13.331 [INFO] [Thread-9260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:25:13.339 [DEBUG] [Thread-9260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] client lang: <none>
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] server lang: <none>
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] kex follows: False
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] Compression: none
2025-11-26T01:25:13.340 [DEBUG] [Thread-9260] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:25:13.402 [DEBUG] [Thread-9260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:25:13.402 [DEBUG] [Thread-9260] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:25:13.403 [DEBUG] [Thread-9260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:25:13.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:25:13.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:25:13.459 [DEBUG] [Thread-9260] [transport.py] [_log()] userauth is OK
2025-11-26T01:25:13.460 [DEBUG] [Thread-9260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:25:13.460 [DEBUG] [Thread-9260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:25:13.460 [DEBUG] [Thread-9260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:25:13.460 [DEBUG] [Thread-9260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:25:13.480 [INFO] [Thread-9260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:25:13.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:25:13.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:25:14.290 [DEBUG] [Thread-9260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:25:14.290 [DEBUG] [Thread-9260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:25:14.338 [DEBUG] [Thread-9260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:25:14.338 [DEBUG] [Thread-9260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:25:14.347 [DEBUG] [Thread-9260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:25:14.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:25:14.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:25:14.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:25:14.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:25:14.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:25:14.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:25:14.385 [DEBUG] [Thread-9260] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:25:16.567 [DEBUG] [Thread-9262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:18.000 [DEBUG] [Thread-9263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:19.327 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:29.681 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:30.584 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:30.585 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:33.049 [DEBUG] [Thread-9264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:40.028 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:44.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:25:44.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:25:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:25:45.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 25, 36), 30.59, 11.56, 0.0, 11.29, 19.58, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:25:45.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:25:36
2025-11-26T01:25:45.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:25:45.343 [DEBUG] [Thread-9265] [transport.py] [_log()] starting thread (client mode): 0x70df2620
2025-11-26T01:25:45.343 [DEBUG] [Thread-9265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:25:45.363 [DEBUG] [Thread-9265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:25:45.363 [INFO] [Thread-9265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:25:45.366 [DEBUG] [Thread-9265] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] client lang: <none>
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] server lang: <none>
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] kex follows: False
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:25:45.367 [DEBUG] [Thread-9265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:25:45.368 [DEBUG] [Thread-9265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:25:45.368 [DEBUG] [Thread-9265] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:25:45.368 [DEBUG] [Thread-9265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:25:45.368 [DEBUG] [Thread-9265] [transport.py] [_log()] Compression: none
2025-11-26T01:25:45.368 [DEBUG] [Thread-9265] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:25:45.386 [DEBUG] [Thread-9265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:25:45.387 [DEBUG] [Thread-9265] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:25:45.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:25:45.389 [DEBUG] [Thread-9265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:25:45.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:25:45.428 [DEBUG] [Thread-9265] [transport.py] [_log()] userauth is OK
2025-11-26T01:25:45.429 [DEBUG] [Thread-9265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:25:45.429 [DEBUG] [Thread-9265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:25:45.429 [DEBUG] [Thread-9265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:25:45.429 [DEBUG] [Thread-9265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:25:45.451 [INFO] [Thread-9265] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:25:45.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:25:46.021 [DEBUG] [Thread-9265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:25:46.021 [DEBUG] [Thread-9265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:25:46.022 [DEBUG] [Thread-9265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:25:46.063 [DEBUG] [Thread-9265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:25:46.063 [DEBUG] [Thread-9265] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:25:46.066 [DEBUG] [Thread-9265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:25:46.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:25:46.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:25:46.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:25:46.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:25:46.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:25:46.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:25:46.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:25:46.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:25:46.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:25:46.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.975791 -999.00  +19.90  10.66     16   -6.10 1 1 1 1 1     0    0 26.28 5.25 ZNESW 10.3 10.7 139.4 11.9 19.4 -26.4 19.3 -25.7 19.0 -24.5 19.2 -25.5
2025-11-26T01:25:46.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:25:46.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:25:46.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.975791
2025-11-26T01:25:46.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:25:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:25:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:25:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:25:46.093 [DEBUG] [Thread-9265] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:25:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:25:46.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:25:36', tmtdew=30.59, humidity=11.56, cloud=0.0, wind=11.29, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:25:37', seeing=1.26, atlas_timestamp='2025-11-25T23:25:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:24:00')
2025-11-26T01:25:46.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:25:46.189 [DEBUG] [Thread-9268] [transport.py] [_log()] starting thread (client mode): 0x70dd27d0
2025-11-26T01:25:46.189 [DEBUG] [Thread-9268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:25:46.203 [DEBUG] [Thread-9268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:25:46.203 [INFO] [Thread-9268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:25:46.212 [DEBUG] [Thread-9268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:25:46.213 [DEBUG] [Thread-9268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:25:46.213 [DEBUG] [Thread-9268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:25:46.213 [DEBUG] [Thread-9268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:25:46.213 [DEBUG] [Thread-9268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:25:46.213 [DEBUG] [Thread-9268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:25:46.213 [DEBUG] [Thread-9268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:25:46.214 [DEBUG] [Thread-9268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:25:46.214 [DEBUG] [Thread-9268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:25:46.214 [DEBUG] [Thread-9268] [transport.py] [_log()] client lang: <none>
2025-11-26T01:25:46.214 [DEBUG] [Thread-9268] [transport.py] [_log()] server lang: <none>
2025-11-26T01:25:46.214 [DEBUG] [Thread-9268] [transport.py] [_log()] kex follows: False
2025-11-26T01:25:46.214 [DEBUG] [Thread-9268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:25:46.214 [DEBUG] [Thread-9268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:25:46.214 [DEBUG] [Thread-9268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:25:46.215 [DEBUG] [Thread-9268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:25:46.215 [DEBUG] [Thread-9268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:25:46.215 [DEBUG] [Thread-9268] [transport.py] [_log()] Compression: none
2025-11-26T01:25:46.215 [DEBUG] [Thread-9268] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:25:46.272 [DEBUG] [Thread-9268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:25:46.273 [DEBUG] [Thread-9268] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:25:46.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:25:46.274 [DEBUG] [Thread-9268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:25:46.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:25:46.331 [DEBUG] [Thread-9268] [transport.py] [_log()] userauth is OK
2025-11-26T01:25:46.331 [DEBUG] [Thread-9268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:25:46.332 [DEBUG] [Thread-9268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:25:46.332 [DEBUG] [Thread-9268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:25:46.332 [DEBUG] [Thread-9268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:25:46.350 [INFO] [Thread-9268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:25:46.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:25:46.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:25:47.201 [DEBUG] [Thread-9268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:25:47.201 [DEBUG] [Thread-9268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:25:47.251 [DEBUG] [Thread-9268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:25:47.251 [DEBUG] [Thread-9268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:25:47.261 [DEBUG] [Thread-9268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:25:47.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:25:47.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:25:47.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:25:47.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:25:47.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:25:47.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:25:47.295 [DEBUG] [Thread-9268] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:25:48.080 [DEBUG] [Thread-9270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:25:50.491 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:00.817 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:03.143 [DEBUG] [Thread-9271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:11.158 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:16.638 [DEBUG] [Thread-9272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:17.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:26:17.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:26:17.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:26:18.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 26, 9), 30.55, 11.58, 0.0, 11.66, 19.5, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:26:18.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:26:09
2025-11-26T01:26:18.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:26:18.178 [DEBUG] [Thread-9273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:18.305 [DEBUG] [Thread-9274] [transport.py] [_log()] starting thread (client mode): 0x70df2620
2025-11-26T01:26:18.305 [DEBUG] [Thread-9274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:26:18.325 [DEBUG] [Thread-9274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:26:18.325 [INFO] [Thread-9274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] client lang: <none>
2025-11-26T01:26:18.328 [DEBUG] [Thread-9274] [transport.py] [_log()] server lang: <none>
2025-11-26T01:26:18.329 [DEBUG] [Thread-9274] [transport.py] [_log()] kex follows: False
2025-11-26T01:26:18.329 [DEBUG] [Thread-9274] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:26:18.329 [DEBUG] [Thread-9274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:26:18.329 [DEBUG] [Thread-9274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:26:18.329 [DEBUG] [Thread-9274] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:26:18.329 [DEBUG] [Thread-9274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:26:18.329 [DEBUG] [Thread-9274] [transport.py] [_log()] Compression: none
2025-11-26T01:26:18.329 [DEBUG] [Thread-9274] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:26:18.344 [DEBUG] [Thread-9274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:26:18.344 [DEBUG] [Thread-9274] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:26:18.344 [DEBUG] [Thread-9274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:26:18.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:26:18.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:26:18.345 [DEBUG] [Thread-9274] [transport.py] [_log()] userauth is OK
2025-11-26T01:26:18.345 [DEBUG] [Thread-9274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:26:18.345 [DEBUG] [Thread-9274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:26:18.345 [DEBUG] [Thread-9274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:26:18.345 [DEBUG] [Thread-9274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:26:18.354 [INFO] [Thread-9274] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:26:18.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:26:18.984 [DEBUG] [Thread-9274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:26:18.985 [DEBUG] [Thread-9274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:26:18.985 [DEBUG] [Thread-9274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:26:19.025 [DEBUG] [Thread-9274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:26:19.025 [DEBUG] [Thread-9274] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:26:19.028 [DEBUG] [Thread-9274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:26:19.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:26:19.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:26:19.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:26:19.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:26:19.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:26:19.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:26:19.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:26:19.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:26:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:26:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.976485 -999.00  +19.90   9.23     16   -6.10 1 1 1 1 1     0    0 25.83 6.06 ZNESW 9.2 9.2 136.0 11.6 19.4 -26.4 19.3 -25.9 18.9 -24.5 19.2 -25.4
2025-11-26T01:26:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:26:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:26:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.976485
2025-11-26T01:26:19.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:26:19.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:26:19.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:26:19.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:26:19.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:26:19.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:26:09', tmtdew=30.55, humidity=11.58, cloud=0.0, wind=11.66, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:26:09', seeing=1.28, atlas_timestamp='2025-11-25T23:26:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:24:00')
2025-11-26T01:26:19.048 [DEBUG] [Thread-9274] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:26:19.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:26:19.135 [DEBUG] [Thread-9277] [transport.py] [_log()] starting thread (client mode): 0x70d7f760
2025-11-26T01:26:19.135 [DEBUG] [Thread-9277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:26:19.149 [DEBUG] [Thread-9277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:26:19.149 [INFO] [Thread-9277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] client lang: <none>
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] server lang: <none>
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] kex follows: False
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] Compression: none
2025-11-26T01:26:19.157 [DEBUG] [Thread-9277] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:26:19.213 [DEBUG] [Thread-9277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:26:19.214 [DEBUG] [Thread-9277] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:26:19.214 [DEBUG] [Thread-9277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:26:19.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:26:19.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:26:19.271 [DEBUG] [Thread-9277] [transport.py] [_log()] userauth is OK
2025-11-26T01:26:19.271 [DEBUG] [Thread-9277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:26:19.271 [DEBUG] [Thread-9277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:26:19.271 [DEBUG] [Thread-9277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:26:19.271 [DEBUG] [Thread-9277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:26:19.284 [INFO] [Thread-9277] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:26:19.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:26:19.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:26:20.092 [DEBUG] [Thread-9277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:26:20.092 [DEBUG] [Thread-9277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:26:20.140 [DEBUG] [Thread-9277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:26:20.140 [DEBUG] [Thread-9277] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:26:20.148 [DEBUG] [Thread-9277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:26:20.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:26:20.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:26:20.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:26:20.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:26:20.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:26:20.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:26:20.180 [DEBUG] [Thread-9277] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:26:21.481 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:30.787 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:30.788 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:31.824 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:33.211 [DEBUG] [Thread-9279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:42.210 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:48.270 [DEBUG] [Thread-9280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:50.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:26:50.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:26:50.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:26:50.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 26, 41), 30.51, 11.61, 0.0, 9.58, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:26:50.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:26:41
2025-11-26T01:26:50.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:26:51.114 [DEBUG] [Thread-9281] [transport.py] [_log()] starting thread (client mode): 0x70da4310
2025-11-26T01:26:51.114 [DEBUG] [Thread-9281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:26:51.134 [DEBUG] [Thread-9281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:26:51.134 [INFO] [Thread-9281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] client lang: <none>
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] server lang: <none>
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] kex follows: False
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] Compression: none
2025-11-26T01:26:51.138 [DEBUG] [Thread-9281] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:26:51.154 [DEBUG] [Thread-9281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:26:51.154 [DEBUG] [Thread-9281] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:26:51.155 [DEBUG] [Thread-9281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:26:51.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:26:51.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:26:51.156 [DEBUG] [Thread-9281] [transport.py] [_log()] userauth is OK
2025-11-26T01:26:51.156 [DEBUG] [Thread-9281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:26:51.156 [DEBUG] [Thread-9281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:26:51.156 [DEBUG] [Thread-9281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:26:51.156 [DEBUG] [Thread-9281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:26:51.168 [INFO] [Thread-9281] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:26:51.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:26:51.794 [DEBUG] [Thread-9281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:26:51.794 [DEBUG] [Thread-9281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:26:51.795 [DEBUG] [Thread-9281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:26:51.835 [DEBUG] [Thread-9281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:26:51.835 [DEBUG] [Thread-9281] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:26:51.839 [DEBUG] [Thread-9281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:26:51.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:26:51.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:26:51.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:26:51.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:26:51.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:26:51.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:26:51.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:26:51.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:26:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:26:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.976833 -999.00  +19.80   7.42     16   -6.10 1 1 1 1 1     0    0 25.88 5.53 ZNESW 9.2 7.4 145.4 10.9 19.4 -26.4 19.3 -25.9 19.0 -24.5 19.2 -25.5
2025-11-26T01:26:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:26:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:26:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.976833
2025-11-26T01:26:51.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:26:51.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:26:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:26:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:26:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:26:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:26:41', tmtdew=30.51, humidity=11.61, cloud=0.0, wind=9.58, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:26:41', seeing=1.21, atlas_timestamp='2025-11-25T23:26:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:24:00')
2025-11-26T01:26:51.866 [DEBUG] [Thread-9281] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:26:51.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:26:51.963 [DEBUG] [Thread-9284] [transport.py] [_log()] starting thread (client mode): 0x70d41b70
2025-11-26T01:26:51.963 [DEBUG] [Thread-9284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:26:51.977 [DEBUG] [Thread-9284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:26:51.977 [INFO] [Thread-9284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:26:51.985 [DEBUG] [Thread-9284] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:26:51.985 [DEBUG] [Thread-9284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:26:51.985 [DEBUG] [Thread-9284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:26:51.985 [DEBUG] [Thread-9284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:26:51.985 [DEBUG] [Thread-9284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:26:51.985 [DEBUG] [Thread-9284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:26:51.985 [DEBUG] [Thread-9284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:26:51.985 [DEBUG] [Thread-9284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] client lang: <none>
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] server lang: <none>
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] kex follows: False
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] Compression: none
2025-11-26T01:26:51.986 [DEBUG] [Thread-9284] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:26:52.049 [DEBUG] [Thread-9284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:26:52.049 [DEBUG] [Thread-9284] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:26:52.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:26:52.051 [DEBUG] [Thread-9284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:26:52.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:26:52.109 [DEBUG] [Thread-9284] [transport.py] [_log()] userauth is OK
2025-11-26T01:26:52.110 [DEBUG] [Thread-9284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:26:52.110 [DEBUG] [Thread-9284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:26:52.110 [DEBUG] [Thread-9284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:26:52.110 [DEBUG] [Thread-9284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:26:52.131 [INFO] [Thread-9284] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:26:52.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:26:52.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:26:52.556 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:26:52.988 [DEBUG] [Thread-9284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:26:52.988 [DEBUG] [Thread-9284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:26:53.036 [DEBUG] [Thread-9284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:26:53.036 [DEBUG] [Thread-9284] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:26:53.045 [DEBUG] [Thread-9284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:26:53.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:26:53.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:26:53.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:26:53.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:26:53.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:26:53.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:26:53.081 [DEBUG] [Thread-9284] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:27:02.895 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:03.307 [DEBUG] [Thread-9286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:13.219 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:16.728 [DEBUG] [Thread-9287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:18.359 [DEBUG] [Thread-9288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:23.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:27:23.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:27:23.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:27:23.561 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:23.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 27, 13), 30.53, 11.6, 0.0, 9.63, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:27:23.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:27:13
2025-11-26T01:27:23.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:27:24.022 [DEBUG] [Thread-9289] [transport.py] [_log()] starting thread (client mode): 0x70d56890
2025-11-26T01:27:24.022 [DEBUG] [Thread-9289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:27:24.042 [DEBUG] [Thread-9289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:27:24.042 [INFO] [Thread-9289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:27:24.044 [DEBUG] [Thread-9289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] client lang: <none>
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] server lang: <none>
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] kex follows: False
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] Compression: none
2025-11-26T01:27:24.045 [DEBUG] [Thread-9289] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:27:24.062 [DEBUG] [Thread-9289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:27:24.062 [DEBUG] [Thread-9289] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:27:24.063 [DEBUG] [Thread-9289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:27:24.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:27:24.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:27:24.065 [DEBUG] [Thread-9289] [transport.py] [_log()] userauth is OK
2025-11-26T01:27:24.065 [DEBUG] [Thread-9289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:27:24.065 [DEBUG] [Thread-9289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:27:24.065 [DEBUG] [Thread-9289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:27:24.065 [DEBUG] [Thread-9289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:27:24.090 [INFO] [Thread-9289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:27:24.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:27:24.677 [DEBUG] [Thread-9289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:27:24.677 [DEBUG] [Thread-9289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:27:24.677 [DEBUG] [Thread-9289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:27:24.718 [DEBUG] [Thread-9289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:27:24.718 [DEBUG] [Thread-9289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:27:24.722 [DEBUG] [Thread-9289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:27:24.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:27:24.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:27:24.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:27:24.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:27:24.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:27:24.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:27:24.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:27:24.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:27:24.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:27:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.977180 -999.00  +19.80   8.99     16   -6.10 1 1 1 1 1     0    0 25.73 5.53 ZNESW 9.0 9.0 142.4 11.8 19.4 -26.3 19.3 -25.7 18.9 -24.4 19.2 -25.5
2025-11-26T01:27:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:27:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:27:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.977180
2025-11-26T01:27:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:27:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:27:24.751 [DEBUG] [Thread-9289] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:27:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:27:24.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:27:24.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:27:24.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:27:13', tmtdew=30.53, humidity=11.6, cloud=0.0, wind=9.63, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:27:13', seeing=1.2, atlas_timestamp='2025-11-25T23:27:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:24:00')
2025-11-26T01:27:24.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:27:24.848 [DEBUG] [Thread-9292] [transport.py] [_log()] starting thread (client mode): 0x70dd05b0
2025-11-26T01:27:24.848 [DEBUG] [Thread-9292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:27:24.863 [DEBUG] [Thread-9292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:27:24.863 [INFO] [Thread-9292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:27:24.870 [DEBUG] [Thread-9292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] client lang: <none>
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] server lang: <none>
2025-11-26T01:27:24.871 [DEBUG] [Thread-9292] [transport.py] [_log()] kex follows: False
2025-11-26T01:27:24.872 [DEBUG] [Thread-9292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:27:24.872 [DEBUG] [Thread-9292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:27:24.872 [DEBUG] [Thread-9292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:27:24.872 [DEBUG] [Thread-9292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:27:24.872 [DEBUG] [Thread-9292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:27:24.872 [DEBUG] [Thread-9292] [transport.py] [_log()] Compression: none
2025-11-26T01:27:24.872 [DEBUG] [Thread-9292] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:27:24.928 [DEBUG] [Thread-9292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:27:24.929 [DEBUG] [Thread-9292] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:27:24.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:27:24.930 [DEBUG] [Thread-9292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:27:24.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:27:24.988 [DEBUG] [Thread-9292] [transport.py] [_log()] userauth is OK
2025-11-26T01:27:24.988 [DEBUG] [Thread-9292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:27:24.988 [DEBUG] [Thread-9292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:27:24.989 [DEBUG] [Thread-9292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:27:24.989 [DEBUG] [Thread-9292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:27:25.011 [INFO] [Thread-9292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:27:25.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:27:25.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:27:25.904 [DEBUG] [Thread-9292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:27:25.904 [DEBUG] [Thread-9292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:27:25.953 [DEBUG] [Thread-9292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:27:25.953 [DEBUG] [Thread-9292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:27:25.962 [DEBUG] [Thread-9292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:27:25.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:27:25.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:27:25.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:27:25.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:27:25.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:27:25.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:27:25.999 [DEBUG] [Thread-9292] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:27:30.986 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:30.987 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:33.392 [DEBUG] [Thread-9294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:33.884 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:44.226 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:48.430 [DEBUG] [Thread-9295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:54.570 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:27:56.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:27:56.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:27:56.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:27:56.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 27, 45), 30.42, 11.6, 0.0, 11.81, 19.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:27:56.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:27:45
2025-11-26T01:27:56.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:27:56.958 [DEBUG] [Thread-9296] [transport.py] [_log()] starting thread (client mode): 0x70de49a0
2025-11-26T01:27:56.958 [DEBUG] [Thread-9296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:27:56.979 [DEBUG] [Thread-9296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:27:56.979 [INFO] [Thread-9296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] client lang: <none>
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] server lang: <none>
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] kex follows: False
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] Compression: none
2025-11-26T01:27:56.982 [DEBUG] [Thread-9296] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:27:56.999 [DEBUG] [Thread-9296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:27:57.000 [DEBUG] [Thread-9296] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:27:57.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:27:57.001 [DEBUG] [Thread-9296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:27:57.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:27:57.003 [DEBUG] [Thread-9296] [transport.py] [_log()] userauth is OK
2025-11-26T01:27:57.004 [DEBUG] [Thread-9296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:27:57.004 [DEBUG] [Thread-9296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:27:57.004 [DEBUG] [Thread-9296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:27:57.004 [DEBUG] [Thread-9296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:27:57.023 [INFO] [Thread-9296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:27:57.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:27:57.616 [DEBUG] [Thread-9296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:27:57.616 [DEBUG] [Thread-9296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:27:57.617 [DEBUG] [Thread-9296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:27:57.657 [DEBUG] [Thread-9296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:27:57.657 [DEBUG] [Thread-9296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:27:57.660 [DEBUG] [Thread-9296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:27:57.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:27:57.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:27:57.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:27:57.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:27:57.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:27:57.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:27:57.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:27:57.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:27:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:27:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.977527 -999.00  +19.70   8.74     16   -6.10 1 1 1 1 1     0    0 26.06 5.19 ZNESW 9.3 8.7 145.4 11.7 19.4 -26.5 19.2 -25.8 19.0 -24.4 19.2 -25.5
2025-11-26T01:27:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:27:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:27:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.977527
2025-11-26T01:27:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:27:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:27:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:27:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:27:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:27:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:27:45', tmtdew=30.42, humidity=11.6, cloud=0.0, wind=11.81, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:27:45', seeing=1.26, atlas_timestamp='2025-11-25T23:27:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:24:00')
2025-11-26T01:27:57.689 [DEBUG] [Thread-9296] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:27:57.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:27:57.783 [DEBUG] [Thread-9299] [transport.py] [_log()] starting thread (client mode): 0x70de6a10
2025-11-26T01:27:57.783 [DEBUG] [Thread-9299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:27:57.797 [DEBUG] [Thread-9299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:27:57.798 [INFO] [Thread-9299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:27:57.805 [DEBUG] [Thread-9299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:27:57.805 [DEBUG] [Thread-9299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:27:57.805 [DEBUG] [Thread-9299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:27:57.805 [DEBUG] [Thread-9299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:27:57.805 [DEBUG] [Thread-9299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:27:57.805 [DEBUG] [Thread-9299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] client lang: <none>
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] server lang: <none>
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] kex follows: False
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] Compression: none
2025-11-26T01:27:57.806 [DEBUG] [Thread-9299] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:27:57.864 [DEBUG] [Thread-9299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:27:57.865 [DEBUG] [Thread-9299] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:27:57.866 [DEBUG] [Thread-9299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:27:57.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:27:57.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:27:57.920 [DEBUG] [Thread-9299] [transport.py] [_log()] userauth is OK
2025-11-26T01:27:57.921 [DEBUG] [Thread-9299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:27:57.921 [DEBUG] [Thread-9299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:27:57.921 [DEBUG] [Thread-9299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:27:57.921 [DEBUG] [Thread-9299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:27:57.944 [INFO] [Thread-9299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:27:57.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:27:57.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:27:58.790 [DEBUG] [Thread-9299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:27:58.791 [DEBUG] [Thread-9299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:27:58.839 [DEBUG] [Thread-9299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:27:58.839 [DEBUG] [Thread-9299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:27:58.848 [DEBUG] [Thread-9299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:27:58.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:27:58.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:27:58.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:27:58.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:27:58.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:27:58.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:27:58.885 [DEBUG] [Thread-9299] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:28:03.470 [DEBUG] [Thread-9301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:04.983 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:15.390 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:16.801 [DEBUG] [Thread-9302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:18.515 [DEBUG] [Thread-9303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:25.768 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:26.062 [DEBUG] [Thread-4685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:28.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:28:28.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:28:28.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:28:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 28, 17), 30.36, 11.65, 0.0, 12.11, 19.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:28:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:28:17
2025-11-26T01:28:29.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:28:29.813 [DEBUG] [Thread-9304] [transport.py] [_log()] starting thread (client mode): 0x70da5630
2025-11-26T01:28:29.813 [DEBUG] [Thread-9304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:28:29.836 [DEBUG] [Thread-9304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:28:29.837 [INFO] [Thread-9304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:28:29.838 [DEBUG] [Thread-9304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:28:29.838 [DEBUG] [Thread-9304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:28:29.838 [DEBUG] [Thread-9304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:28:29.838 [DEBUG] [Thread-9304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] client lang: <none>
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] server lang: <none>
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] kex follows: False
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:28:29.839 [DEBUG] [Thread-9304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:28:29.840 [DEBUG] [Thread-9304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:28:29.840 [DEBUG] [Thread-9304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:28:29.840 [DEBUG] [Thread-9304] [transport.py] [_log()] Compression: none
2025-11-26T01:28:29.840 [DEBUG] [Thread-9304] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:28:29.850 [DEBUG] [Thread-9304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:28:29.851 [DEBUG] [Thread-9304] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:28:29.852 [DEBUG] [Thread-9304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:28:29.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:28:29.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:28:29.854 [DEBUG] [Thread-9304] [transport.py] [_log()] userauth is OK
2025-11-26T01:28:29.854 [DEBUG] [Thread-9304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:28:29.854 [DEBUG] [Thread-9304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:28:29.855 [DEBUG] [Thread-9304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:28:29.855 [DEBUG] [Thread-9304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:28:29.873 [INFO] [Thread-9304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:28:29.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:28:30.470 [DEBUG] [Thread-9304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:28:30.470 [DEBUG] [Thread-9304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:28:30.470 [DEBUG] [Thread-9304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:28:30.511 [DEBUG] [Thread-9304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:28:30.511 [DEBUG] [Thread-9304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:28:30.514 [DEBUG] [Thread-9304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:28:30.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:28:30.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:28:30.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:28:30.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:28:30.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:28:30.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:28:30.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:28:30.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:28:30.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:28:30.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.977874 -999.00  +19.70   8.42     16   -6.20 1 1 1 1 1     0    0 26.32 5.26 ZNESW 9.5 8.4 148.2 12.3 19.4 -26.2 19.3 -25.7 19.0 -24.4 19.2 -25.4
2025-11-26T01:28:30.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:28:30.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:28:30.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.977874
2025-11-26T01:28:30.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:28:30.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:28:30.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:28:30.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:28:30.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:28:30.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:28:17', tmtdew=30.36, humidity=11.65, cloud=0.0, wind=12.11, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:28:17', seeing=1.31, atlas_timestamp='2025-11-25T23:28:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:24:00')
2025-11-26T01:28:30.530 [DEBUG] [Thread-9304] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:28:30.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:28:30.617 [DEBUG] [Thread-9307] [transport.py] [_log()] starting thread (client mode): 0x70d3b3a0
2025-11-26T01:28:30.617 [DEBUG] [Thread-9307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:28:30.632 [DEBUG] [Thread-9307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:28:30.632 [INFO] [Thread-9307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:28:30.639 [DEBUG] [Thread-9307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:28:30.639 [DEBUG] [Thread-9307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:28:30.640 [DEBUG] [Thread-9307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:28:30.640 [DEBUG] [Thread-9307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:28:30.640 [DEBUG] [Thread-9307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:28:30.640 [DEBUG] [Thread-9307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:28:30.640 [DEBUG] [Thread-9307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:28:30.640 [DEBUG] [Thread-9307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:28:30.640 [DEBUG] [Thread-9307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:28:30.640 [DEBUG] [Thread-9307] [transport.py] [_log()] client lang: <none>
2025-11-26T01:28:30.640 [DEBUG] [Thread-9307] [transport.py] [_log()] server lang: <none>
2025-11-26T01:28:30.641 [DEBUG] [Thread-9307] [transport.py] [_log()] kex follows: False
2025-11-26T01:28:30.641 [DEBUG] [Thread-9307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:28:30.641 [DEBUG] [Thread-9307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:28:30.641 [DEBUG] [Thread-9307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:28:30.641 [DEBUG] [Thread-9307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:28:30.641 [DEBUG] [Thread-9307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:28:30.641 [DEBUG] [Thread-9307] [transport.py] [_log()] Compression: none
2025-11-26T01:28:30.641 [DEBUG] [Thread-9307] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:28:30.704 [DEBUG] [Thread-9307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:28:30.705 [DEBUG] [Thread-9307] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:28:30.705 [DEBUG] [Thread-9307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:28:30.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:28:30.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:28:30.760 [DEBUG] [Thread-9307] [transport.py] [_log()] userauth is OK
2025-11-26T01:28:30.761 [DEBUG] [Thread-9307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:28:30.761 [DEBUG] [Thread-9307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:28:30.761 [DEBUG] [Thread-9307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:28:30.761 [DEBUG] [Thread-9307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:28:30.781 [INFO] [Thread-9307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:28:30.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:28:30.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:28:31.189 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:31.192 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:31.671 [DEBUG] [Thread-9307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:28:31.672 [DEBUG] [Thread-9307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:28:31.719 [DEBUG] [Thread-9307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:28:31.719 [DEBUG] [Thread-9307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:28:31.728 [DEBUG] [Thread-9307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:28:31.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:28:31.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:28:31.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:28:31.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:28:31.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:28:31.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:28:31.762 [DEBUG] [Thread-9307] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:28:32.478 [DEBUG] [Thread-4685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:33.547 [DEBUG] [Thread-9309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:36.118 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:46.461 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:48.597 [DEBUG] [Thread-9310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:28:56.844 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:29:01.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:29:01.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:29:02.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 28, 49), 30.34, 11.66, 0.0, 11.15, 19.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:29:02.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:28:49
2025-11-26T01:29:02.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:29:02.722 [DEBUG] [Thread-9311] [transport.py] [_log()] starting thread (client mode): 0x70d56ad0
2025-11-26T01:29:02.723 [DEBUG] [Thread-9311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:29:02.743 [DEBUG] [Thread-9311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:29:02.743 [INFO] [Thread-9311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] client lang: <none>
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] server lang: <none>
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] kex follows: False
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] Compression: none
2025-11-26T01:29:02.746 [DEBUG] [Thread-9311] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:29:02.763 [DEBUG] [Thread-9311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:29:02.764 [DEBUG] [Thread-9311] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:29:02.764 [DEBUG] [Thread-9311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:29:02.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:29:02.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:29:02.766 [DEBUG] [Thread-9311] [transport.py] [_log()] userauth is OK
2025-11-26T01:29:02.766 [DEBUG] [Thread-9311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:29:02.766 [DEBUG] [Thread-9311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:29:02.766 [DEBUG] [Thread-9311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:29:02.766 [DEBUG] [Thread-9311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:29:02.787 [INFO] [Thread-9311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:29:02.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:29:03.451 [DEBUG] [Thread-9311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:29:03.451 [DEBUG] [Thread-9311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:29:03.451 [DEBUG] [Thread-9311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:29:03.492 [DEBUG] [Thread-9311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:29:03.492 [DEBUG] [Thread-9311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:29:03.495 [DEBUG] [Thread-9311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:29:03.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:29:03.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:29:03.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:29:03.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:29:03.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:29:03.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:29:03.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:29:03.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:29:03.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:29:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.977874 -999.00  +19.70   8.42     16   -6.20 1 1 1 1 1     0    0 26.32 5.26 ZNESW 9.5 8.4 148.2 12.3 19.4 -26.2 19.3 -25.7 19.0 -24.4 19.2 -25.4
2025-11-26T01:29:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:29:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:29:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.977874
2025-11-26T01:29:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:29:03.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:29:03.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:29:03.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:29:03.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:29:03.524 [DEBUG] [Thread-9311] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:29:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:28:49', tmtdew=30.34, humidity=11.66, cloud=0.0, wind=11.15, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:28:49', seeing=1.19, atlas_timestamp='2025-11-25T23:28:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:26:00')
2025-11-26T01:29:03.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:29:03.629 [DEBUG] [Thread-9314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:03.634 [DEBUG] [Thread-9315] [transport.py] [_log()] starting thread (client mode): 0x70dd2b90
2025-11-26T01:29:03.634 [DEBUG] [Thread-9315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:29:03.648 [DEBUG] [Thread-9315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:29:03.648 [INFO] [Thread-9315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:29:03.656 [DEBUG] [Thread-9315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:29:03.656 [DEBUG] [Thread-9315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:29:03.656 [DEBUG] [Thread-9315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:29:03.656 [DEBUG] [Thread-9315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:29:03.656 [DEBUG] [Thread-9315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:29:03.656 [DEBUG] [Thread-9315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:29:03.656 [DEBUG] [Thread-9315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:29:03.657 [DEBUG] [Thread-9315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:29:03.657 [DEBUG] [Thread-9315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:29:03.657 [DEBUG] [Thread-9315] [transport.py] [_log()] client lang: <none>
2025-11-26T01:29:03.657 [DEBUG] [Thread-9315] [transport.py] [_log()] server lang: <none>
2025-11-26T01:29:03.657 [DEBUG] [Thread-9315] [transport.py] [_log()] kex follows: False
2025-11-26T01:29:03.657 [DEBUG] [Thread-9315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:29:03.657 [DEBUG] [Thread-9315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:29:03.657 [DEBUG] [Thread-9315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:29:03.658 [DEBUG] [Thread-9315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:29:03.658 [DEBUG] [Thread-9315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:29:03.658 [DEBUG] [Thread-9315] [transport.py] [_log()] Compression: none
2025-11-26T01:29:03.658 [DEBUG] [Thread-9315] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:29:03.713 [DEBUG] [Thread-9315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:29:03.714 [DEBUG] [Thread-9315] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:29:03.715 [DEBUG] [Thread-9315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:29:03.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:29:03.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:29:03.773 [DEBUG] [Thread-9315] [transport.py] [_log()] userauth is OK
2025-11-26T01:29:03.773 [DEBUG] [Thread-9315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:29:03.773 [DEBUG] [Thread-9315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:29:03.774 [DEBUG] [Thread-9315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:29:03.774 [DEBUG] [Thread-9315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:29:03.795 [INFO] [Thread-9315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:29:03.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:29:03.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:29:04.689 [DEBUG] [Thread-9315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:29:04.690 [DEBUG] [Thread-9315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:29:04.741 [DEBUG] [Thread-9315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:29:04.742 [DEBUG] [Thread-9315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:29:04.751 [DEBUG] [Thread-9315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:29:04.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:29:04.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:29:04.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:29:04.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:29:04.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:29:04.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:29:04.788 [DEBUG] [Thread-9315] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:29:07.169 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:16.860 [DEBUG] [Thread-9317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:17.510 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:18.674 [DEBUG] [Thread-9318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:27.867 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:31.390 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:31.392 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:33.713 [DEBUG] [Thread-9319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:34.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:29:34.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:29:34.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:29:35.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 29, 21), 30.41, 11.6, 0.0, 11.75, 19.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:29:35.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:29:21
2025-11-26T01:29:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:29:35.722 [DEBUG] [Thread-9320] [transport.py] [_log()] starting thread (client mode): 0x70dbd690
2025-11-26T01:29:35.722 [DEBUG] [Thread-9320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:29:35.742 [DEBUG] [Thread-9320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:29:35.742 [INFO] [Thread-9320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:29:35.745 [DEBUG] [Thread-9320] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] client lang: <none>
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] server lang: <none>
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] kex follows: False
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] Compression: none
2025-11-26T01:29:35.746 [DEBUG] [Thread-9320] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:29:35.764 [DEBUG] [Thread-9320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:29:35.765 [DEBUG] [Thread-9320] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:29:35.765 [DEBUG] [Thread-9320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:29:35.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:29:35.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:29:35.767 [DEBUG] [Thread-9320] [transport.py] [_log()] userauth is OK
2025-11-26T01:29:35.768 [DEBUG] [Thread-9320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:29:35.768 [DEBUG] [Thread-9320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:29:35.768 [DEBUG] [Thread-9320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:29:35.768 [DEBUG] [Thread-9320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:29:35.793 [INFO] [Thread-9320] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:29:35.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:29:36.428 [DEBUG] [Thread-9320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:29:36.428 [DEBUG] [Thread-9320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:29:36.429 [DEBUG] [Thread-9320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:29:36.469 [DEBUG] [Thread-9320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:29:36.469 [DEBUG] [Thread-9320] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:29:36.472 [DEBUG] [Thread-9320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:29:36.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:29:36.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:29:36.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:29:36.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:29:36.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:29:36.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:29:36.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:29:36.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:29:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:29:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.978221 -999.00  +19.80   9.24     16   -6.20 1 1 1 1 1     0    0 25.94 5.10 ZNESW 9.6 9.2 151.8 12.2 19.4 -26.3 19.3 -25.8 19.1 -24.3 19.2 -25.1
2025-11-26T01:29:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:29:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:29:36.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.978221
2025-11-26T01:29:36.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:29:36.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:29:36.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:29:36.498 [DEBUG] [Thread-9320] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:29:36.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:29:36.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:29:36.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:29:21', tmtdew=30.41, humidity=11.6, cloud=0.0, wind=11.75, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:29:21', seeing=1.19, atlas_timestamp='2025-11-25T23:28:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:26:00')
2025-11-26T01:29:36.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:29:36.593 [DEBUG] [Thread-9323] [transport.py] [_log()] starting thread (client mode): 0x7374c850
2025-11-26T01:29:36.593 [DEBUG] [Thread-9323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:29:36.608 [DEBUG] [Thread-9323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:29:36.608 [INFO] [Thread-9323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:29:36.615 [DEBUG] [Thread-9323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] client lang: <none>
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] server lang: <none>
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] kex follows: False
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] Compression: none
2025-11-26T01:29:36.616 [DEBUG] [Thread-9323] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:29:36.673 [DEBUG] [Thread-9323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:29:36.674 [DEBUG] [Thread-9323] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:29:36.674 [DEBUG] [Thread-9323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:29:36.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:29:36.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:29:36.729 [DEBUG] [Thread-9323] [transport.py] [_log()] userauth is OK
2025-11-26T01:29:36.730 [DEBUG] [Thread-9323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:29:36.730 [DEBUG] [Thread-9323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:29:36.730 [DEBUG] [Thread-9323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:29:36.730 [DEBUG] [Thread-9323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:29:36.748 [INFO] [Thread-9323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:29:36.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:29:36.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:29:37.583 [DEBUG] [Thread-9323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:29:37.584 [DEBUG] [Thread-9323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:29:37.632 [DEBUG] [Thread-9323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:29:37.632 [DEBUG] [Thread-9323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:29:37.641 [DEBUG] [Thread-9323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:29:37.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:29:37.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:29:37.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:29:37.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:29:37.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:29:37.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:29:37.676 [DEBUG] [Thread-9323] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:29:38.216 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:48.568 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:48.752 [DEBUG] [Thread-9325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:29:58.890 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:03.800 [DEBUG] [Thread-9326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:07.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:30:07.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:30:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:30:08.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 29, 53), 30.44, 11.61, 0.0, 10.94, 19.28, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:30:08.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:29:53
2025-11-26T01:30:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:30:08.599 [DEBUG] [Thread-9327] [transport.py] [_log()] starting thread (client mode): 0x70dbf7f0
2025-11-26T01:30:08.599 [DEBUG] [Thread-9327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:30:08.615 [DEBUG] [Thread-9327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:30:08.615 [INFO] [Thread-9327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] client lang: <none>
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] server lang: <none>
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] kex follows: False
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:30:08.617 [DEBUG] [Thread-9327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:30:08.618 [DEBUG] [Thread-9327] [transport.py] [_log()] Compression: none
2025-11-26T01:30:08.618 [DEBUG] [Thread-9327] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:30:08.628 [DEBUG] [Thread-9327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:30:08.628 [DEBUG] [Thread-9327] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:30:08.629 [DEBUG] [Thread-9327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:30:08.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:30:08.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:30:08.630 [DEBUG] [Thread-9327] [transport.py] [_log()] userauth is OK
2025-11-26T01:30:08.631 [DEBUG] [Thread-9327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:30:08.631 [DEBUG] [Thread-9327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:30:08.631 [DEBUG] [Thread-9327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:30:08.631 [DEBUG] [Thread-9327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:30:08.648 [INFO] [Thread-9327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:30:08.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:30:09.230 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:09.995 [DEBUG] [Thread-9327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:30:09.996 [DEBUG] [Thread-9327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:30:09.996 [DEBUG] [Thread-9327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:30:10.037 [DEBUG] [Thread-9327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:30:10.037 [DEBUG] [Thread-9327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:30:10.040 [DEBUG] [Thread-9327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:30:10.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:30:10.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:30:10.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:30:10.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:30:10.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:30:10.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:30:10.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:30:10.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:30:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:30:10.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.978916 -999.00  +19.90   9.01     16   -6.20 1 1 1 1 1     0    0 26.39 6.46 ZNESW 10.8 9.0 149.2 14.6 19.4 -26.2 19.3 -25.7 19.0 -24.4 19.2 -25.1
2025-11-26T01:30:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:30:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:30:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.978916
2025-11-26T01:30:10.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:30:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:30:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:30:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:30:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:30:10.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:29:53', tmtdew=30.44, humidity=11.61, cloud=0.0, wind=10.94, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:29:53', seeing=1.29, atlas_timestamp='2025-11-25T23:29:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:26:00')
2025-11-26T01:30:10.107 [DEBUG] [Thread-9327] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:30:10.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:30:10.204 [DEBUG] [Thread-9330] [transport.py] [_log()] starting thread (client mode): 0x70dbfa30
2025-11-26T01:30:10.204 [DEBUG] [Thread-9330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:30:10.220 [DEBUG] [Thread-9330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:30:10.220 [INFO] [Thread-9330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:30:10.228 [DEBUG] [Thread-9330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:30:10.228 [DEBUG] [Thread-9330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:30:10.228 [DEBUG] [Thread-9330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:30:10.228 [DEBUG] [Thread-9330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:30:10.228 [DEBUG] [Thread-9330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:30:10.228 [DEBUG] [Thread-9330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] client lang: <none>
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] server lang: <none>
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] kex follows: False
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] Compression: none
2025-11-26T01:30:10.229 [DEBUG] [Thread-9330] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:30:10.285 [DEBUG] [Thread-9330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:30:10.285 [DEBUG] [Thread-9330] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:30:10.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:30:10.286 [DEBUG] [Thread-9330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:30:10.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:30:10.340 [DEBUG] [Thread-9330] [transport.py] [_log()] userauth is OK
2025-11-26T01:30:10.341 [DEBUG] [Thread-9330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:30:10.341 [DEBUG] [Thread-9330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:30:10.341 [DEBUG] [Thread-9330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:30:10.341 [DEBUG] [Thread-9330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:30:10.360 [INFO] [Thread-9330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:30:10.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:30:10.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:30:11.204 [DEBUG] [Thread-9330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:30:11.205 [DEBUG] [Thread-9330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:30:11.253 [DEBUG] [Thread-9330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:30:11.253 [DEBUG] [Thread-9330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:30:11.262 [DEBUG] [Thread-9330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:30:11.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:30:11.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:30:11.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:30:11.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:30:11.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:30:11.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:30:11.299 [DEBUG] [Thread-9330] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:30:16.916 [DEBUG] [Thread-9332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:18.834 [DEBUG] [Thread-9333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:19.587 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:29.931 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:31.593 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:31.594 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:33.889 [DEBUG] [Thread-9334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:40.274 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:30:41.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:30:41.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:30:41.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 30, 25), 30.37, 11.66, 0.0, 11.28, 19.2, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:30:41.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:30:25
2025-11-26T01:30:42.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:30:42.263 [DEBUG] [Thread-9335] [transport.py] [_log()] starting thread (client mode): 0x70de69e0
2025-11-26T01:30:42.263 [DEBUG] [Thread-9335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:30:42.283 [DEBUG] [Thread-9335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:30:42.283 [INFO] [Thread-9335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:30:42.286 [DEBUG] [Thread-9335] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] client lang: <none>
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] server lang: <none>
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] kex follows: False
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:30:42.287 [DEBUG] [Thread-9335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:30:42.288 [DEBUG] [Thread-9335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:30:42.288 [DEBUG] [Thread-9335] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:30:42.288 [DEBUG] [Thread-9335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:30:42.288 [DEBUG] [Thread-9335] [transport.py] [_log()] Compression: none
2025-11-26T01:30:42.288 [DEBUG] [Thread-9335] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:30:42.311 [DEBUG] [Thread-9335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:30:42.312 [DEBUG] [Thread-9335] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:30:42.313 [DEBUG] [Thread-9335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:30:42.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:30:42.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:30:42.315 [DEBUG] [Thread-9335] [transport.py] [_log()] userauth is OK
2025-11-26T01:30:42.315 [DEBUG] [Thread-9335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:30:42.315 [DEBUG] [Thread-9335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:30:42.315 [DEBUG] [Thread-9335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:30:42.315 [DEBUG] [Thread-9335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:30:42.340 [INFO] [Thread-9335] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:30:42.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:30:42.940 [DEBUG] [Thread-9335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:30:42.940 [DEBUG] [Thread-9335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:30:42.941 [DEBUG] [Thread-9335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:30:42.982 [DEBUG] [Thread-9335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:30:42.982 [DEBUG] [Thread-9335] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:30:42.986 [DEBUG] [Thread-9335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:30:42.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:30:42.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:30:43.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:30:43.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:30:43.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:30:43.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:30:43.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:30:43.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:30:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:30:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.979263 -999.00  +19.90   9.11     16   -6.20 1 1 1 1 1     0    0 25.96 6.28 ZNESW 10.2 9.1 145.8 10.8 19.4 -26.3 19.3 -25.7 19.0 -24.5 19.2 -25.3
2025-11-26T01:30:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:30:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:30:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.979263
2025-11-26T01:30:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:30:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:30:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:30:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:30:43.013 [DEBUG] [Thread-9335] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:30:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:30:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:30:25', tmtdew=30.37, humidity=11.66, cloud=0.0, wind=11.28, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:30:25', seeing=1.31, atlas_timestamp='2025-11-25T23:30:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:26:00')
2025-11-26T01:30:43.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:30:43.110 [DEBUG] [Thread-9338] [transport.py] [_log()] starting thread (client mode): 0x70df3f70
2025-11-26T01:30:43.111 [DEBUG] [Thread-9338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:30:43.126 [DEBUG] [Thread-9338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:30:43.126 [INFO] [Thread-9338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] client lang: <none>
2025-11-26T01:30:43.134 [DEBUG] [Thread-9338] [transport.py] [_log()] server lang: <none>
2025-11-26T01:30:43.135 [DEBUG] [Thread-9338] [transport.py] [_log()] kex follows: False
2025-11-26T01:30:43.135 [DEBUG] [Thread-9338] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:30:43.135 [DEBUG] [Thread-9338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:30:43.135 [DEBUG] [Thread-9338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:30:43.135 [DEBUG] [Thread-9338] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:30:43.135 [DEBUG] [Thread-9338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:30:43.135 [DEBUG] [Thread-9338] [transport.py] [_log()] Compression: none
2025-11-26T01:30:43.135 [DEBUG] [Thread-9338] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:30:43.193 [DEBUG] [Thread-9338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:30:43.194 [DEBUG] [Thread-9338] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:30:43.195 [DEBUG] [Thread-9338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:30:43.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:30:43.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:30:43.250 [DEBUG] [Thread-9338] [transport.py] [_log()] userauth is OK
2025-11-26T01:30:43.250 [DEBUG] [Thread-9338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:30:43.250 [DEBUG] [Thread-9338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:30:43.250 [DEBUG] [Thread-9338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:30:43.250 [DEBUG] [Thread-9338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:30:43.269 [INFO] [Thread-9338] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:30:43.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:30:43.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:30:44.101 [DEBUG] [Thread-9338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:30:44.101 [DEBUG] [Thread-9338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:30:44.149 [DEBUG] [Thread-9338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:30:44.149 [DEBUG] [Thread-9338] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:30:44.158 [DEBUG] [Thread-9338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:30:44.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:30:44.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:30:44.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:30:44.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:30:44.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:30:44.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:30:44.195 [DEBUG] [Thread-9338] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:30:48.922 [DEBUG] [Thread-9340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:30:50.593 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:01.060 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:03.976 [DEBUG] [Thread-9341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:11.397 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:14.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:31:14.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:31:14.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:31:14.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 30, 57), 30.39, 11.71, 0.0, 11.13, 19.31, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:31:14.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:30:57
2025-11-26T01:31:15.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:31:15.175 [DEBUG] [Thread-9342] [transport.py] [_log()] starting thread (client mode): 0x70df29e0
2025-11-26T01:31:15.175 [DEBUG] [Thread-9342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:31:15.195 [DEBUG] [Thread-9342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:31:15.195 [INFO] [Thread-9342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] client lang: <none>
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] server lang: <none>
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] kex follows: False
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:31:15.198 [DEBUG] [Thread-9342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:31:15.199 [DEBUG] [Thread-9342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:31:15.199 [DEBUG] [Thread-9342] [transport.py] [_log()] Compression: none
2025-11-26T01:31:15.199 [DEBUG] [Thread-9342] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:31:15.213 [DEBUG] [Thread-9342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:31:15.213 [DEBUG] [Thread-9342] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:31:15.213 [DEBUG] [Thread-9342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:31:15.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:31:15.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:31:15.256 [DEBUG] [Thread-9342] [transport.py] [_log()] userauth is OK
2025-11-26T01:31:15.256 [DEBUG] [Thread-9342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:31:15.256 [DEBUG] [Thread-9342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:31:15.256 [DEBUG] [Thread-9342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:31:15.256 [DEBUG] [Thread-9342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:31:15.271 [INFO] [Thread-9342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:31:15.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:31:15.935 [DEBUG] [Thread-9342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:31:15.935 [DEBUG] [Thread-9342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:31:15.935 [DEBUG] [Thread-9342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:31:15.975 [DEBUG] [Thread-9342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:31:15.975 [DEBUG] [Thread-9342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:31:15.978 [DEBUG] [Thread-9342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:31:15.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:31:15.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:31:15.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:31:15.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:31:15.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:31:15.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:31:15.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.979610 -999.00  +19.90   8.09     16   -6.20 1 1 1 1 1     0    0 25.68 6.87 ZNESW 8.4 8.1 152.6 11.4 19.3 -26.2 19.3 -25.8 19.0 -24.4 19.2 -25.4
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.979610
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:31:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:30:57', tmtdew=30.39, humidity=11.71, cloud=0.0, wind=11.13, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:30:58', seeing=1.08, atlas_timestamp='2025-11-25T23:30:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.036749999999999616, -0.005249999999998423, -0.03850000000000087, 0.0, 0.07025000000000148, -0.02000000000000135, -0.010249999999999204, -0.012500000000001066, -0.023999999999999133, 0.0012499999999988631, -0.012000000000000455, 0.049999999999998934, 0.07724999999999937, -0.040000000000000924, -0.059499999999999886, 0.005250000000000199, -0.02800000000000047, 0.0030000000000001137, -0.03725000000000023, 0.09899999999999842, 0.07874999999999943, 0.030250000000000554, -0.012749999999998707, -0.006000000000000227, -0.03850000000000087, -0.030250000000000554, 0.0015000000000000568, 0.09500000000000064, 0.049000000000001265, 0.01600000000000179, -0.0259999999999998, -0.02775000000000105], zp_timestamp='2025-11-25T23:26:00')
2025-11-26T01:31:15.993 [DEBUG] [Thread-9342] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:31:16.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:31:16.988 [DEBUG] [Thread-9345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:19.006 [DEBUG] [Thread-9346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:21.736 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:31.796 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:31.798 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:32.060 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:34.050 [DEBUG] [Thread-9347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:42.429 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:49.089 [DEBUG] [Thread-9348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:31:52.765 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:03.144 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:04.125 [DEBUG] [Thread-9349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:13.599 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:17.066 [DEBUG] [Thread-9350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:19.162 [DEBUG] [Thread-9351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:23.985 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:31.998 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:31.999 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:34.194 [DEBUG] [Thread-9352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:34.352 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:44.772 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:49.228 [DEBUG] [Thread-9353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:32:55.187 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:04.266 [DEBUG] [Thread-9354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:05.559 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:15.953 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:17.143 [DEBUG] [Thread-9355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:19.297 [DEBUG] [Thread-9356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:26.340 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:30.957 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T01:33:32.197 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:32.198 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:34.337 [DEBUG] [Thread-9357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:36.670 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:47.017 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:49.369 [DEBUG] [Thread-9358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:33:57.399 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:00.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:34:00.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:34:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:34:01.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 33, 37), 30.56, 11.65, 0.0, 10.99, 19.38, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:34:01.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:33:37
2025-11-26T01:34:01.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:34:01.961 [DEBUG] [Thread-9359] [transport.py] [_log()] starting thread (client mode): 0x70de4af0
2025-11-26T01:34:01.961 [DEBUG] [Thread-9359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:34:01.982 [DEBUG] [Thread-9359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:34:01.982 [INFO] [Thread-9359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] client lang: <none>
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] server lang: <none>
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] kex follows: False
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] Compression: none
2025-11-26T01:34:01.986 [DEBUG] [Thread-9359] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:34:02.003 [DEBUG] [Thread-9359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:34:02.004 [DEBUG] [Thread-9359] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:34:02.004 [DEBUG] [Thread-9359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:34:02.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:34:02.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:34:02.006 [DEBUG] [Thread-9359] [transport.py] [_log()] userauth is OK
2025-11-26T01:34:02.006 [DEBUG] [Thread-9359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:34:02.006 [DEBUG] [Thread-9359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:34:02.006 [DEBUG] [Thread-9359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:34:02.006 [DEBUG] [Thread-9359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:34:02.023 [INFO] [Thread-9359] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:34:02.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:34:02.687 [DEBUG] [Thread-9359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:34:02.687 [DEBUG] [Thread-9359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:34:02.687 [DEBUG] [Thread-9359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:34:02.727 [DEBUG] [Thread-9359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:34:02.727 [DEBUG] [Thread-9359] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:34:02.729 [DEBUG] [Thread-9359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:34:02.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:34:02.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:34:02.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:34:02.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:34:02.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:34:02.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:34:02.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.981694 -999.00  +20.00   8.30     16   -6.10 1 1 1 1 1     0    0 26.02 10.29 ZNESW 8.3 8.3 139.4 9.6 19.4 -26.3 19.3 -25.7 -999.0 -999.0 19.2 -25.2
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.981694
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:34:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:33:37', tmtdew=30.56, humidity=11.65, cloud=0.0, wind=10.99, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:33:38', seeing=1.31, atlas_timestamp='2025-11-25T23:33:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.01624999999999943, 0.043250000000000455, -0.002500000000001279, 0.01750000000000007, 0.05525000000000091, 0.0, -0.044749999999998735, 0.028499999999999304, -0.01699999999999946, 0.012750000000000483, -0.017999999999998906, 0.08699999999999974, 0.07124999999999915, -0.028999999999999915, -0.040500000000001535, -0.01425000000000054, -0.0015000000000000568, 0.006999999999999673, -0.04675000000000118, 0.08399999999999785, 0.08674999999999855, 0.03775000000000084, -0.012249999999999872, 0.0009999999999994458, -0.013500000000000512, -0.03924999999999912, 0.027499999999999858, 0.12700000000000067, 0.10000000000000142, 0.05400000000000027, -0.010999999999999233, -0.005250000000000199], zp_timestamp='2025-11-25T23:30:00')
2025-11-26T01:34:02.747 [DEBUG] [Thread-9359] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:34:02.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:34:02.831 [DEBUG] [Thread-9362] [transport.py] [_log()] starting thread (client mode): 0x70dbd240
2025-11-26T01:34:02.831 [DEBUG] [Thread-9362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:34:02.845 [DEBUG] [Thread-9362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:34:02.845 [INFO] [Thread-9362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:34:02.853 [DEBUG] [Thread-9362] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:34:02.853 [DEBUG] [Thread-9362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:34:02.853 [DEBUG] [Thread-9362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:34:02.853 [DEBUG] [Thread-9362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:34:02.853 [DEBUG] [Thread-9362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:34:02.853 [DEBUG] [Thread-9362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:34:02.853 [DEBUG] [Thread-9362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:34:02.853 [DEBUG] [Thread-9362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:34:02.854 [DEBUG] [Thread-9362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:34:02.854 [DEBUG] [Thread-9362] [transport.py] [_log()] client lang: <none>
2025-11-26T01:34:02.854 [DEBUG] [Thread-9362] [transport.py] [_log()] server lang: <none>
2025-11-26T01:34:02.854 [DEBUG] [Thread-9362] [transport.py] [_log()] kex follows: False
2025-11-26T01:34:02.854 [DEBUG] [Thread-9362] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:34:02.854 [DEBUG] [Thread-9362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:34:02.854 [DEBUG] [Thread-9362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:34:02.854 [DEBUG] [Thread-9362] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:34:02.854 [DEBUG] [Thread-9362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:34:02.855 [DEBUG] [Thread-9362] [transport.py] [_log()] Compression: none
2025-11-26T01:34:02.855 [DEBUG] [Thread-9362] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:34:02.910 [DEBUG] [Thread-9362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:34:02.911 [DEBUG] [Thread-9362] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:34:02.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:34:02.912 [DEBUG] [Thread-9362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:34:02.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:34:02.966 [DEBUG] [Thread-9362] [transport.py] [_log()] userauth is OK
2025-11-26T01:34:02.966 [DEBUG] [Thread-9362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:34:02.966 [DEBUG] [Thread-9362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:34:02.967 [DEBUG] [Thread-9362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:34:02.967 [DEBUG] [Thread-9362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:34:02.985 [INFO] [Thread-9362] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:34:02.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:34:02.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:34:03.802 [DEBUG] [Thread-9362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:34:03.802 [DEBUG] [Thread-9362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:34:03.850 [DEBUG] [Thread-9362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:34:03.850 [DEBUG] [Thread-9362] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:34:03.859 [DEBUG] [Thread-9362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:34:03.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:34:03.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:34:03.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:34:03.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:34:03.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:34:03.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:34:03.893 [DEBUG] [Thread-9362] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:34:04.408 [DEBUG] [Thread-9364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:07.746 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:17.220 [DEBUG] [Thread-9365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:18.092 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:19.468 [DEBUG] [Thread-9366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:28.423 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:32.399 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:32.400 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:33.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:34:33.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:34:33.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:34:34.498 [DEBUG] [Thread-9367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 34, 9), 30.66, 11.56, 0.0, 10.2, 19.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:34:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:34:09
2025-11-26T01:34:34.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:34:34.861 [DEBUG] [Thread-9368] [transport.py] [_log()] starting thread (client mode): 0x70dbfa30
2025-11-26T01:34:34.861 [DEBUG] [Thread-9368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:34:34.881 [DEBUG] [Thread-9368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:34:34.882 [INFO] [Thread-9368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] client lang: <none>
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] server lang: <none>
2025-11-26T01:34:34.885 [DEBUG] [Thread-9368] [transport.py] [_log()] kex follows: False
2025-11-26T01:34:34.886 [DEBUG] [Thread-9368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:34:34.886 [DEBUG] [Thread-9368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:34:34.886 [DEBUG] [Thread-9368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:34:34.886 [DEBUG] [Thread-9368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:34:34.886 [DEBUG] [Thread-9368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:34:34.886 [DEBUG] [Thread-9368] [transport.py] [_log()] Compression: none
2025-11-26T01:34:34.886 [DEBUG] [Thread-9368] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:34:34.904 [DEBUG] [Thread-9368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:34:34.905 [DEBUG] [Thread-9368] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:34:34.905 [DEBUG] [Thread-9368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:34:34.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:34:34.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:34:34.908 [DEBUG] [Thread-9368] [transport.py] [_log()] userauth is OK
2025-11-26T01:34:34.908 [DEBUG] [Thread-9368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:34:34.908 [DEBUG] [Thread-9368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:34:34.909 [DEBUG] [Thread-9368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:34:34.909 [DEBUG] [Thread-9368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:34:34.944 [INFO] [Thread-9368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:34:34.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:34:35.617 [DEBUG] [Thread-9368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:34:35.618 [DEBUG] [Thread-9368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:34:35.618 [DEBUG] [Thread-9368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:34:35.659 [DEBUG] [Thread-9368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:34:35.659 [DEBUG] [Thread-9368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:34:35.662 [DEBUG] [Thread-9368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:34:35.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:34:35.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:34:35.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:34:35.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:34:35.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:34:35.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:34:35.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:34:35.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:34:35.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:34:35.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.982041 -999.00  +20.00   7.39     16   -6.10 1 1 1 1 1     0    0 26.02 11.60 ZNESW 7.2 7.4 139.2 9.8 19.4 -26.3 19.3 -25.7 19.0 -24.3 19.2 -25.4
2025-11-26T01:34:35.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:34:35.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:34:35.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.982041
2025-11-26T01:34:35.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:34:35.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:34:35.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:34:35.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:34:35.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:34:35.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:34:09', tmtdew=30.66, humidity=11.56, cloud=0.0, wind=10.2, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:34:10', seeing=1.18, atlas_timestamp='2025-11-25T23:34:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.01624999999999943, 0.043250000000000455, -0.002500000000001279, 0.01750000000000007, 0.05525000000000091, 0.0, -0.044749999999998735, 0.028499999999999304, -0.01699999999999946, 0.012750000000000483, -0.017999999999998906, 0.08699999999999974, 0.07124999999999915, -0.028999999999999915, -0.040500000000001535, -0.01425000000000054, -0.0015000000000000568, 0.006999999999999673, -0.04675000000000118, 0.08399999999999785, 0.08674999999999855, 0.03775000000000084, -0.012249999999999872, 0.0009999999999994458, -0.013500000000000512, -0.03924999999999912, 0.027499999999999858, 0.12700000000000067, 0.10000000000000142, 0.05400000000000027, -0.010999999999999233, -0.005250000000000199], zp_timestamp='2025-11-25T23:33:00')
2025-11-26T01:34:35.690 [DEBUG] [Thread-9368] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:34:35.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:34:35.780 [DEBUG] [Thread-9371] [transport.py] [_log()] starting thread (client mode): 0x70de4bb0
2025-11-26T01:34:35.780 [DEBUG] [Thread-9371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:34:35.795 [DEBUG] [Thread-9371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:34:35.796 [INFO] [Thread-9371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] client lang: <none>
2025-11-26T01:34:35.803 [DEBUG] [Thread-9371] [transport.py] [_log()] server lang: <none>
2025-11-26T01:34:35.804 [DEBUG] [Thread-9371] [transport.py] [_log()] kex follows: False
2025-11-26T01:34:35.804 [DEBUG] [Thread-9371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:34:35.804 [DEBUG] [Thread-9371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:34:35.804 [DEBUG] [Thread-9371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:34:35.804 [DEBUG] [Thread-9371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:34:35.804 [DEBUG] [Thread-9371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:34:35.804 [DEBUG] [Thread-9371] [transport.py] [_log()] Compression: none
2025-11-26T01:34:35.804 [DEBUG] [Thread-9371] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:34:35.863 [DEBUG] [Thread-9371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:34:35.864 [DEBUG] [Thread-9371] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:34:35.865 [DEBUG] [Thread-9371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:34:35.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:34:35.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:34:35.919 [DEBUG] [Thread-9371] [transport.py] [_log()] userauth is OK
2025-11-26T01:34:35.919 [DEBUG] [Thread-9371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:34:35.919 [DEBUG] [Thread-9371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:34:35.920 [DEBUG] [Thread-9371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:34:35.920 [DEBUG] [Thread-9371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:34:35.938 [INFO] [Thread-9371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:34:35.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:34:35.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:34:36.777 [DEBUG] [Thread-9371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:34:36.777 [DEBUG] [Thread-9371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:34:36.826 [DEBUG] [Thread-9371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:34:36.826 [DEBUG] [Thread-9371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:34:36.836 [DEBUG] [Thread-9371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:34:36.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:34:36.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:34:36.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:34:36.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:34:36.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:34:36.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:34:36.872 [DEBUG] [Thread-9371] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:34:38.763 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:49.091 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:49.532 [DEBUG] [Thread-9373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:34:59.439 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:04.592 [DEBUG] [Thread-9374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:35:06.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:35:06.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:35:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 34, 41), 30.58, 11.6, 0.0, 10.34, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:35:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:34:41
2025-11-26T01:35:07.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:35:07.820 [DEBUG] [Thread-9375] [transport.py] [_log()] starting thread (client mode): 0x70da7eb0
2025-11-26T01:35:07.820 [DEBUG] [Thread-9375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:35:07.840 [DEBUG] [Thread-9375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:35:07.840 [INFO] [Thread-9375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:35:07.843 [DEBUG] [Thread-9375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] client lang: <none>
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] server lang: <none>
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] kex follows: False
2025-11-26T01:35:07.844 [DEBUG] [Thread-9375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:35:07.845 [DEBUG] [Thread-9375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:35:07.845 [DEBUG] [Thread-9375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:35:07.845 [DEBUG] [Thread-9375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:35:07.845 [DEBUG] [Thread-9375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:35:07.845 [DEBUG] [Thread-9375] [transport.py] [_log()] Compression: none
2025-11-26T01:35:07.845 [DEBUG] [Thread-9375] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:35:07.863 [DEBUG] [Thread-9375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:35:07.864 [DEBUG] [Thread-9375] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:35:07.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:35:07.866 [DEBUG] [Thread-9375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:35:07.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:35:07.868 [DEBUG] [Thread-9375] [transport.py] [_log()] userauth is OK
2025-11-26T01:35:07.868 [DEBUG] [Thread-9375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:35:07.868 [DEBUG] [Thread-9375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:35:07.868 [DEBUG] [Thread-9375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:35:07.868 [DEBUG] [Thread-9375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:35:07.894 [INFO] [Thread-9375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:35:07.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:35:08.609 [DEBUG] [Thread-9375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:35:08.609 [DEBUG] [Thread-9375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:35:08.609 [DEBUG] [Thread-9375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:35:08.650 [DEBUG] [Thread-9375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:35:08.650 [DEBUG] [Thread-9375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:35:08.652 [DEBUG] [Thread-9375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:35:08.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:35:08.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:35:08.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:35:08.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:35:08.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:35:08.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:35:08.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:35:08.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:35:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:35:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.982388 -999.00  +20.00   7.73     16   -6.20 1 1 1 1 1     0    0 26.39 12.31 ZNESW 7.8 7.7 139.8 10.2 19.4 -26.3 19.3 -25.8 19.0 -24.3 19.2 -25.2
2025-11-26T01:35:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:35:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:35:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.982388
2025-11-26T01:35:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:35:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:35:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:35:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:35:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:35:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:34:41', tmtdew=30.58, humidity=11.6, cloud=0.0, wind=10.34, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:34:42', seeing=1.02, atlas_timestamp='2025-11-25T23:34:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.01624999999999943, 0.043250000000000455, -0.002500000000001279, 0.01750000000000007, 0.05525000000000091, 0.0, -0.044749999999998735, 0.028499999999999304, -0.01699999999999946, 0.012750000000000483, -0.017999999999998906, 0.08699999999999974, 0.07124999999999915, -0.028999999999999915, -0.040500000000001535, -0.01425000000000054, -0.0015000000000000568, 0.006999999999999673, -0.04675000000000118, 0.08399999999999785, 0.08674999999999855, 0.03775000000000084, -0.012249999999999872, 0.0009999999999994458, -0.013500000000000512, -0.03924999999999912, 0.027499999999999858, 0.12700000000000067, 0.10000000000000142, 0.05400000000000027, -0.010999999999999233, -0.005250000000000199], zp_timestamp='2025-11-25T23:33:00')
2025-11-26T01:35:08.675 [DEBUG] [Thread-9375] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:35:08.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:35:08.774 [DEBUG] [Thread-9378] [transport.py] [_log()] starting thread (client mode): 0x70de48e0
2025-11-26T01:35:08.775 [DEBUG] [Thread-9378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:35:08.789 [DEBUG] [Thread-9378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:35:08.789 [INFO] [Thread-9378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] client lang: <none>
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] server lang: <none>
2025-11-26T01:35:08.797 [DEBUG] [Thread-9378] [transport.py] [_log()] kex follows: False
2025-11-26T01:35:08.798 [DEBUG] [Thread-9378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:35:08.798 [DEBUG] [Thread-9378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:35:08.798 [DEBUG] [Thread-9378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:35:08.798 [DEBUG] [Thread-9378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:35:08.798 [DEBUG] [Thread-9378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:35:08.798 [DEBUG] [Thread-9378] [transport.py] [_log()] Compression: none
2025-11-26T01:35:08.798 [DEBUG] [Thread-9378] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:35:08.855 [DEBUG] [Thread-9378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:35:08.856 [DEBUG] [Thread-9378] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:35:08.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:35:08.857 [DEBUG] [Thread-9378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:35:08.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:35:08.911 [DEBUG] [Thread-9378] [transport.py] [_log()] userauth is OK
2025-11-26T01:35:08.911 [DEBUG] [Thread-9378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:35:08.911 [DEBUG] [Thread-9378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:35:08.911 [DEBUG] [Thread-9378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:35:08.911 [DEBUG] [Thread-9378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:35:08.931 [INFO] [Thread-9378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:35:08.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:35:08.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:35:09.757 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:09.776 [DEBUG] [Thread-9378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:35:09.776 [DEBUG] [Thread-9378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:35:09.824 [DEBUG] [Thread-9378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:35:09.824 [DEBUG] [Thread-9378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:35:09.833 [DEBUG] [Thread-9378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:35:09.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:35:09.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:35:09.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:35:09.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:35:09.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:35:09.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:35:09.871 [DEBUG] [Thread-9378] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:35:17.296 [DEBUG] [Thread-9380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:19.630 [DEBUG] [Thread-9381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:20.099 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:30.436 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:32.599 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:32.601 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:34.684 [DEBUG] [Thread-9382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:39.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:35:39.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:35:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:35:40.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 35, 13), 30.61, 11.56, 0.0, 10.75, 19.41, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:35:40.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:35:13
2025-11-26T01:35:40.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:35:40.762 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:40.870 [DEBUG] [Thread-9383] [transport.py] [_log()] starting thread (client mode): 0x70d41840
2025-11-26T01:35:40.870 [DEBUG] [Thread-9383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:35:40.888 [DEBUG] [Thread-9383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:35:40.888 [INFO] [Thread-9383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] client lang: <none>
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] server lang: <none>
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] kex follows: False
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] Compression: none
2025-11-26T01:35:40.891 [DEBUG] [Thread-9383] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:35:40.907 [DEBUG] [Thread-9383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:35:40.907 [DEBUG] [Thread-9383] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:35:40.907 [DEBUG] [Thread-9383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:35:40.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:35:40.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:35:40.908 [DEBUG] [Thread-9383] [transport.py] [_log()] userauth is OK
2025-11-26T01:35:40.908 [DEBUG] [Thread-9383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:35:40.908 [DEBUG] [Thread-9383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:35:40.908 [DEBUG] [Thread-9383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:35:40.908 [DEBUG] [Thread-9383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:35:40.927 [INFO] [Thread-9383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:35:40.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:35:41.543 [DEBUG] [Thread-9383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:35:41.544 [DEBUG] [Thread-9383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:35:41.545 [DEBUG] [Thread-9383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:35:41.585 [DEBUG] [Thread-9383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:35:41.585 [DEBUG] [Thread-9383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:35:41.589 [DEBUG] [Thread-9383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:35:41.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:35:41.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:35:41.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:35:41.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:35:41.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:35:41.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:35:41.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:35:41.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:35:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:35:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.982735 -999.00  +20.00   9.11     16   -6.10 1 1 1 1 1     0    0 26.27 13.73 ZNESW 9.5 9.1 146.6 10.5 19.4 -26.2 19.3 -25.6 19.0 -24.3 19.2 -25.2
2025-11-26T01:35:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:35:41.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:35:41.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.982735
2025-11-26T01:35:41.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:35:41.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:35:41.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:35:41.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:35:41.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:35:41.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:35:13', tmtdew=30.61, humidity=11.56, cloud=0.0, wind=10.75, temperature=19.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:35:14', seeing=1.28, atlas_timestamp='2025-11-25T23:35:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.01624999999999943, 0.043250000000000455, -0.002500000000001279, 0.01750000000000007, 0.05525000000000091, 0.0, -0.044749999999998735, 0.028499999999999304, -0.01699999999999946, 0.012750000000000483, -0.017999999999998906, 0.08699999999999974, 0.07124999999999915, -0.028999999999999915, -0.040500000000001535, -0.01425000000000054, -0.0015000000000000568, 0.006999999999999673, -0.04675000000000118, 0.08399999999999785, 0.08674999999999855, 0.03775000000000084, -0.012249999999999872, 0.0009999999999994458, -0.013500000000000512, -0.03924999999999912, 0.027499999999999858, 0.12700000000000067, 0.10000000000000142, 0.05400000000000027, -0.010999999999999233, -0.005250000000000199], zp_timestamp='2025-11-25T23:33:00')
2025-11-26T01:35:41.618 [DEBUG] [Thread-9383] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:35:41.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:35:41.724 [DEBUG] [Thread-9386] [transport.py] [_log()] starting thread (client mode): 0x70de4400
2025-11-26T01:35:41.724 [DEBUG] [Thread-9386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:35:41.740 [DEBUG] [Thread-9386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:35:41.740 [INFO] [Thread-9386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:35:41.747 [DEBUG] [Thread-9386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:35:41.747 [DEBUG] [Thread-9386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:35:41.747 [DEBUG] [Thread-9386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] client lang: <none>
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] server lang: <none>
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] kex follows: False
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] Compression: none
2025-11-26T01:35:41.748 [DEBUG] [Thread-9386] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:35:41.807 [DEBUG] [Thread-9386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:35:41.808 [DEBUG] [Thread-9386] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:35:41.808 [DEBUG] [Thread-9386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:35:41.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:35:41.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:35:41.866 [DEBUG] [Thread-9386] [transport.py] [_log()] userauth is OK
2025-11-26T01:35:41.867 [DEBUG] [Thread-9386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:35:41.867 [DEBUG] [Thread-9386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:35:41.867 [DEBUG] [Thread-9386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:35:41.867 [DEBUG] [Thread-9386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:35:41.886 [INFO] [Thread-9386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:35:41.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:35:41.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:35:42.701 [DEBUG] [Thread-9386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:35:42.701 [DEBUG] [Thread-9386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:35:42.749 [DEBUG] [Thread-9386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:35:42.749 [DEBUG] [Thread-9386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:35:42.758 [DEBUG] [Thread-9386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:35:42.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:35:42.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:35:42.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:35:42.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:35:42.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:35:42.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:35:42.796 [DEBUG] [Thread-9386] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:35:49.719 [DEBUG] [Thread-9388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:35:51.106 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:01.493 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:04.771 [DEBUG] [Thread-9389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:11.832 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:36:12.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:36:12.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:36:13.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 35, 45), 30.54, 11.63, 0.0, 10.5, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:36:13.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:35:45
2025-11-26T01:36:13.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:36:13.802 [DEBUG] [Thread-9390] [transport.py] [_log()] starting thread (client mode): 0x70d41b70
2025-11-26T01:36:13.803 [DEBUG] [Thread-9390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:36:13.820 [DEBUG] [Thread-9390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:36:13.820 [INFO] [Thread-9390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] client lang: <none>
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] server lang: <none>
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] kex follows: False
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] Compression: none
2025-11-26T01:36:13.823 [DEBUG] [Thread-9390] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:36:13.838 [DEBUG] [Thread-9390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:36:13.838 [DEBUG] [Thread-9390] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:36:13.838 [DEBUG] [Thread-9390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:36:13.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:36:13.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:36:13.839 [DEBUG] [Thread-9390] [transport.py] [_log()] userauth is OK
2025-11-26T01:36:13.839 [DEBUG] [Thread-9390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:36:13.839 [DEBUG] [Thread-9390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:36:13.839 [DEBUG] [Thread-9390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:36:13.839 [DEBUG] [Thread-9390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:36:13.848 [INFO] [Thread-9390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:36:13.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:36:14.505 [DEBUG] [Thread-9390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:36:14.505 [DEBUG] [Thread-9390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:36:14.505 [DEBUG] [Thread-9390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:36:14.546 [DEBUG] [Thread-9390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:36:14.546 [DEBUG] [Thread-9390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:36:14.549 [DEBUG] [Thread-9390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:36:14.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:36:14.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:36:14.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:36:14.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:36:14.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:36:14.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:36:14.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:36:14.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:36:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:36:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.983083 -999.00  +20.00   9.38     16   -6.20 1 1 1 1 1     0    0 26.20 16.31 ZNESW 8.2 9.4 137.6 9.9 19.4 -26.4 19.3 -25.6 19.0 -24.4 19.2 -25.3
2025-11-26T01:36:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:36:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:36:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.983083
2025-11-26T01:36:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:36:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:36:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:36:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:36:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:36:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:35:45', tmtdew=30.54, humidity=11.63, cloud=0.0, wind=10.5, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:35:46', seeing=1.36, atlas_timestamp='2025-11-25T23:35:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.01624999999999943, 0.043250000000000455, -0.002500000000001279, 0.01750000000000007, 0.05525000000000091, 0.0, -0.044749999999998735, 0.028499999999999304, -0.01699999999999946, 0.012750000000000483, -0.017999999999998906, 0.08699999999999974, 0.07124999999999915, -0.028999999999999915, -0.040500000000001535, -0.01425000000000054, -0.0015000000000000568, 0.006999999999999673, -0.04675000000000118, 0.08399999999999785, 0.08674999999999855, 0.03775000000000084, -0.012249999999999872, 0.0009999999999994458, -0.013500000000000512, -0.03924999999999912, 0.027499999999999858, 0.12700000000000067, 0.10000000000000142, 0.05400000000000027, -0.010999999999999233, -0.005250000000000199], zp_timestamp='2025-11-25T23:33:00')
2025-11-26T01:36:14.567 [DEBUG] [Thread-9390] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:36:14.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:36:14.662 [DEBUG] [Thread-9393] [transport.py] [_log()] starting thread (client mode): 0x70dbdcf0
2025-11-26T01:36:14.663 [DEBUG] [Thread-9393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:36:14.677 [DEBUG] [Thread-9393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:36:14.677 [INFO] [Thread-9393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] client lang: <none>
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] server lang: <none>
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] kex follows: False
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:36:14.684 [DEBUG] [Thread-9393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:36:14.685 [DEBUG] [Thread-9393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:36:14.685 [DEBUG] [Thread-9393] [transport.py] [_log()] Compression: none
2025-11-26T01:36:14.685 [DEBUG] [Thread-9393] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:36:14.741 [DEBUG] [Thread-9393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:36:14.742 [DEBUG] [Thread-9393] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:36:14.742 [DEBUG] [Thread-9393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:36:14.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:36:14.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:36:14.799 [DEBUG] [Thread-9393] [transport.py] [_log()] userauth is OK
2025-11-26T01:36:14.799 [DEBUG] [Thread-9393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:36:14.799 [DEBUG] [Thread-9393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:36:14.799 [DEBUG] [Thread-9393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:36:14.799 [DEBUG] [Thread-9393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:36:14.816 [INFO] [Thread-9393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:36:14.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:36:14.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:36:15.671 [DEBUG] [Thread-9393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:36:15.671 [DEBUG] [Thread-9393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:36:15.719 [DEBUG] [Thread-9393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:36:15.719 [DEBUG] [Thread-9393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:36:15.727 [DEBUG] [Thread-9393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:36:15.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:36:15.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:36:15.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:36:15.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:36:15.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:36:15.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:36:15.759 [DEBUG] [Thread-9393] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:36:17.367 [DEBUG] [Thread-9395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:19.799 [DEBUG] [Thread-9396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:22.157 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:32.504 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:32.803 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:32.804 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:34.843 [DEBUG] [Thread-9397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:42.841 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:45.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:36:45.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:36:45.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:36:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 36, 17), 30.55, 11.61, 0.0, 10.39, 19.41, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:36:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:36:17
2025-11-26T01:36:46.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:36:46.692 [DEBUG] [Thread-9398] [transport.py] [_log()] starting thread (client mode): 0x70dbe8c0
2025-11-26T01:36:46.692 [DEBUG] [Thread-9398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:36:46.711 [DEBUG] [Thread-9398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:36:46.711 [INFO] [Thread-9398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] client lang: <none>
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] server lang: <none>
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] kex follows: False
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:36:46.713 [DEBUG] [Thread-9398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:36:46.714 [DEBUG] [Thread-9398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:36:46.714 [DEBUG] [Thread-9398] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:36:46.714 [DEBUG] [Thread-9398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:36:46.714 [DEBUG] [Thread-9398] [transport.py] [_log()] Compression: none
2025-11-26T01:36:46.714 [DEBUG] [Thread-9398] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:36:46.729 [DEBUG] [Thread-9398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:36:46.730 [DEBUG] [Thread-9398] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:36:46.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:36:46.732 [DEBUG] [Thread-9398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:36:46.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:36:46.734 [DEBUG] [Thread-9398] [transport.py] [_log()] userauth is OK
2025-11-26T01:36:46.734 [DEBUG] [Thread-9398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:36:46.734 [DEBUG] [Thread-9398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:36:46.734 [DEBUG] [Thread-9398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:36:46.735 [DEBUG] [Thread-9398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:36:46.755 [INFO] [Thread-9398] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:36:46.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:36:47.374 [DEBUG] [Thread-9398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:36:47.375 [DEBUG] [Thread-9398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:36:47.375 [DEBUG] [Thread-9398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:36:47.416 [DEBUG] [Thread-9398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:36:47.416 [DEBUG] [Thread-9398] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:36:47.420 [DEBUG] [Thread-9398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:36:47.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:36:47.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:36:47.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:36:47.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:36:47.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:36:47.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:36:47.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:36:47.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:36:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:36:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.983777 -999.00  +19.90   8.07     16   -6.10 1 1 1 1 1     0    0 26.38 18.63 ZNESW 8.6 8.1 135.0 10.4 19.3 -26.4 19.3 -25.8 18.9 -24.3 19.2 -25.4
2025-11-26T01:36:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:36:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:36:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.983777
2025-11-26T01:36:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:36:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:36:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:36:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:36:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:36:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:36:17', tmtdew=30.55, humidity=11.61, cloud=0.0, wind=10.39, temperature=19.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:36:17', seeing=1.36, atlas_timestamp='2025-11-25T23:36:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.01624999999999943, 0.043250000000000455, -0.002500000000001279, 0.01750000000000007, 0.05525000000000091, 0.0, -0.044749999999998735, 0.028499999999999304, -0.01699999999999946, 0.012750000000000483, -0.017999999999998906, 0.08699999999999974, 0.07124999999999915, -0.028999999999999915, -0.040500000000001535, -0.01425000000000054, -0.0015000000000000568, 0.006999999999999673, -0.04675000000000118, 0.08399999999999785, 0.08674999999999855, 0.03775000000000084, -0.012249999999999872, 0.0009999999999994458, -0.013500000000000512, -0.03924999999999912, 0.027499999999999858, 0.12700000000000067, 0.10000000000000142, 0.05400000000000027, -0.010999999999999233, -0.005250000000000199], zp_timestamp='2025-11-25T23:33:00')
2025-11-26T01:36:47.444 [DEBUG] [Thread-9398] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:36:47.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:36:47.540 [DEBUG] [Thread-9401] [transport.py] [_log()] starting thread (client mode): 0x70d39b10
2025-11-26T01:36:47.540 [DEBUG] [Thread-9401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:36:47.555 [DEBUG] [Thread-9401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:36:47.555 [INFO] [Thread-9401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:36:47.563 [DEBUG] [Thread-9401] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:36:47.563 [DEBUG] [Thread-9401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:36:47.563 [DEBUG] [Thread-9401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:36:47.563 [DEBUG] [Thread-9401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:36:47.563 [DEBUG] [Thread-9401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:36:47.563 [DEBUG] [Thread-9401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:36:47.563 [DEBUG] [Thread-9401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] client lang: <none>
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] server lang: <none>
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] kex follows: False
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] Compression: none
2025-11-26T01:36:47.564 [DEBUG] [Thread-9401] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:36:47.624 [DEBUG] [Thread-9401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:36:47.624 [DEBUG] [Thread-9401] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:36:47.625 [DEBUG] [Thread-9401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:36:47.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:36:47.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:36:47.680 [DEBUG] [Thread-9401] [transport.py] [_log()] userauth is OK
2025-11-26T01:36:47.680 [DEBUG] [Thread-9401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:36:47.680 [DEBUG] [Thread-9401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:36:47.681 [DEBUG] [Thread-9401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:36:47.681 [DEBUG] [Thread-9401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:36:47.699 [INFO] [Thread-9401] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:36:47.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:36:47.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:36:48.536 [DEBUG] [Thread-9401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:36:48.537 [DEBUG] [Thread-9401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:36:48.585 [DEBUG] [Thread-9401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:36:48.585 [DEBUG] [Thread-9401] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:36:48.594 [DEBUG] [Thread-9401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:36:48.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:36:48.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:36:48.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:36:48.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:36:48.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:36:48.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:36:48.629 [DEBUG] [Thread-9401] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:36:49.879 [DEBUG] [Thread-9403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:36:53.168 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:03.514 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:04.921 [DEBUG] [Thread-9404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:13.892 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:17.427 [DEBUG] [Thread-9405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:18.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:37:18.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:37:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:37:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 36, 49), 30.59, 11.63, 0.0, 9.19, 19.46, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:37:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:36:49
2025-11-26T01:37:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:37:19.567 [DEBUG] [Thread-9406] [transport.py] [_log()] starting thread (client mode): 0x70d7f9a0
2025-11-26T01:37:19.568 [DEBUG] [Thread-9406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:37:19.578 [DEBUG] [Thread-9406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:37:19.578 [INFO] [Thread-9406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] client lang: <none>
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] server lang: <none>
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] kex follows: False
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:37:19.581 [DEBUG] [Thread-9406] [transport.py] [_log()] Compression: none
2025-11-26T01:37:19.582 [DEBUG] [Thread-9406] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:37:19.589 [DEBUG] [Thread-9406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:37:19.590 [DEBUG] [Thread-9406] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:37:19.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:37:19.590 [DEBUG] [Thread-9406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:37:19.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:37:19.591 [DEBUG] [Thread-9406] [transport.py] [_log()] userauth is OK
2025-11-26T01:37:19.591 [DEBUG] [Thread-9406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:37:19.591 [DEBUG] [Thread-9406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:37:19.591 [DEBUG] [Thread-9406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:37:19.591 [DEBUG] [Thread-9406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:37:19.611 [INFO] [Thread-9406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:37:19.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:37:19.960 [DEBUG] [Thread-9408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:20.209 [DEBUG] [Thread-9406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:37:20.209 [DEBUG] [Thread-9406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:37:20.210 [DEBUG] [Thread-9406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:37:20.250 [DEBUG] [Thread-9406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:37:20.250 [DEBUG] [Thread-9406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:37:20.253 [DEBUG] [Thread-9406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:37:20.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:37:20.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:37:20.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:37:20.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:37:20.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:37:20.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:37:20.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:37:20.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:37:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:37:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.984124 -999.00  +19.90   8.69     16   -6.10 1 1 1 1 1     0    0 25.81 20.42 ZNESW 10.0 8.7 133.8 9.8 19.4 -26.4 19.3 -25.8 18.9 -24.4 19.2 -25.4
2025-11-26T01:37:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:37:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:37:20.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.984124
2025-11-26T01:37:20.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:37:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:37:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:37:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:37:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:37:20.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:36:49', tmtdew=30.59, humidity=11.63, cloud=0.0, wind=9.19, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:36:49', seeing=0.97, atlas_timestamp='2025-11-25T23:37:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.01624999999999943, 0.043250000000000455, -0.002500000000001279, 0.01750000000000007, 0.05525000000000091, 0.0, -0.044749999999998735, 0.028499999999999304, -0.01699999999999946, 0.012750000000000483, -0.017999999999998906, 0.08699999999999974, 0.07124999999999915, -0.028999999999999915, -0.040500000000001535, -0.01425000000000054, -0.0015000000000000568, 0.006999999999999673, -0.04675000000000118, 0.08399999999999785, 0.08674999999999855, 0.03775000000000084, -0.012249999999999872, 0.0009999999999994458, -0.013500000000000512, -0.03924999999999912, 0.027499999999999858, 0.12700000000000067, 0.10000000000000142, 0.05400000000000027, -0.010999999999999233, -0.005250000000000199], zp_timestamp='2025-11-25T23:33:00')
2025-11-26T01:37:20.271 [DEBUG] [Thread-9406] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:37:20.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:37:20.381 [DEBUG] [Thread-9410] [transport.py] [_log()] starting thread (client mode): 0x70d43760
2025-11-26T01:37:20.381 [DEBUG] [Thread-9410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:37:20.397 [DEBUG] [Thread-9410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:37:20.397 [INFO] [Thread-9410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] client lang: <none>
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] server lang: <none>
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] kex follows: False
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:37:20.405 [DEBUG] [Thread-9410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:37:20.406 [DEBUG] [Thread-9410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:37:20.406 [DEBUG] [Thread-9410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:37:20.406 [DEBUG] [Thread-9410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:37:20.406 [DEBUG] [Thread-9410] [transport.py] [_log()] Compression: none
2025-11-26T01:37:20.406 [DEBUG] [Thread-9410] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:37:20.464 [DEBUG] [Thread-9410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:37:20.465 [DEBUG] [Thread-9410] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:37:20.465 [DEBUG] [Thread-9410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:37:20.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:37:20.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:37:20.520 [DEBUG] [Thread-9410] [transport.py] [_log()] userauth is OK
2025-11-26T01:37:20.520 [DEBUG] [Thread-9410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:37:20.521 [DEBUG] [Thread-9410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:37:20.521 [DEBUG] [Thread-9410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:37:20.521 [DEBUG] [Thread-9410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:37:20.541 [INFO] [Thread-9410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:37:20.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:37:20.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:37:21.367 [DEBUG] [Thread-9410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:37:21.367 [DEBUG] [Thread-9410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:37:21.415 [DEBUG] [Thread-9410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:37:21.415 [DEBUG] [Thread-9410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:37:21.424 [DEBUG] [Thread-9410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:37:21.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:37:21.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:37: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') -> 00000000
2025-11-26T01:37:21.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:37:21.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:37:21.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:37:21.461 [DEBUG] [Thread-9410] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:37:24.229 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:33.019 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:33.020 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:34.568 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:34.995 [DEBUG] [Thread-9412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:44.931 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:50.049 [DEBUG] [Thread-9413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:37:51.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:37:51.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:37:51.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:37:52.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 37, 21), 30.72, 11.53, 0.0, 8.88, 19.56, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:37:52.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:37:21
2025-11-26T01:37:52.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:37:52.402 [DEBUG] [Thread-9414] [transport.py] [_log()] starting thread (client mode): 0x70d75330
2025-11-26T01:37:52.402 [DEBUG] [Thread-9414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:37:52.422 [DEBUG] [Thread-9414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:37:52.422 [INFO] [Thread-9414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] client lang: <none>
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] server lang: <none>
2025-11-26T01:37:52.425 [DEBUG] [Thread-9414] [transport.py] [_log()] kex follows: False
2025-11-26T01:37:52.426 [DEBUG] [Thread-9414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:37:52.426 [DEBUG] [Thread-9414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:37:52.426 [DEBUG] [Thread-9414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:37:52.426 [DEBUG] [Thread-9414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:37:52.426 [DEBUG] [Thread-9414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:37:52.426 [DEBUG] [Thread-9414] [transport.py] [_log()] Compression: none
2025-11-26T01:37:52.426 [DEBUG] [Thread-9414] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:37:52.438 [DEBUG] [Thread-9414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:37:52.438 [DEBUG] [Thread-9414] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:37:52.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:37:52.439 [DEBUG] [Thread-9414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:37:52.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:37:52.441 [DEBUG] [Thread-9414] [transport.py] [_log()] userauth is OK
2025-11-26T01:37:52.442 [DEBUG] [Thread-9414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:37:52.442 [DEBUG] [Thread-9414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:37:52.442 [DEBUG] [Thread-9414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:37:52.442 [DEBUG] [Thread-9414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:37:52.467 [INFO] [Thread-9414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:37:52.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:37:53.055 [DEBUG] [Thread-9414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:37:53.056 [DEBUG] [Thread-9414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:37:53.056 [DEBUG] [Thread-9414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:37:53.096 [DEBUG] [Thread-9414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:37:53.097 [DEBUG] [Thread-9414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:37:53.099 [DEBUG] [Thread-9414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:37:53.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:37:53.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:37:53.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:37:53.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:37:53.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:37:53.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:37:53.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:37:53.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:37:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:37:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.984471 -999.00  +19.90  11.06     16   -6.10 1 1 1 1 1     0    0 26.28 19.75 ZNESW 9.2 11.1 130.8 12.1 19.4 -26.4 19.3 -25.8 18.9 -24.3 19.2 -25.4
2025-11-26T01:37:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:37:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:37:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.984471
2025-11-26T01:37:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:37:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:37:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:37:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:37:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:37:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:37:21', tmtdew=30.72, humidity=11.53, cloud=0.0, wind=8.88, temperature=19.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:37:22', seeing=0.97, atlas_timestamp='2025-11-25T23:37:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.042749999999999844, 0.0032500000000013074, -0.018499999999999517, 0.0035000000000007248, 0.034250000000000114, -0.027000000000001023, -0.03974999999999973, 0.006499999999999062, -0.032999999999999474, 0.014249999999998764, -0.03850000000000087, 0.058999999999999275, 0.09124999999999872, -0.015499999999999403, -0.053000000000000824, -0.02775000000000105, -0.028499999999999304, -0.010000000000001563, -0.038750000000000284, 0.03799999999999848, 0.06724999999999781, 0.03675000000000139, -0.00024999999999941735, -0.016000000000000014, -0.02549999999999919, -0.029249999999999332, 0.017000000000001236, 0.08500000000000085, 0.05400000000000027, 0.07500000000000107, -0.019999999999999574, -0.029749999999999943], zp_timestamp='2025-11-25T23:36:00')
2025-11-26T01:37:53.126 [DEBUG] [Thread-9414] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:37:53.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:37:53.223 [DEBUG] [Thread-9417] [transport.py] [_log()] starting thread (client mode): 0x70d77be0
2025-11-26T01:37:53.223 [DEBUG] [Thread-9417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:37:53.237 [DEBUG] [Thread-9417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:37:53.237 [INFO] [Thread-9417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] client lang: <none>
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] server lang: <none>
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] kex follows: False
2025-11-26T01:37:53.245 [DEBUG] [Thread-9417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:37:53.246 [DEBUG] [Thread-9417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:37:53.246 [DEBUG] [Thread-9417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:37:53.246 [DEBUG] [Thread-9417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:37:53.246 [DEBUG] [Thread-9417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:37:53.246 [DEBUG] [Thread-9417] [transport.py] [_log()] Compression: none
2025-11-26T01:37:53.246 [DEBUG] [Thread-9417] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:37:53.302 [DEBUG] [Thread-9417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:37:53.303 [DEBUG] [Thread-9417] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:37:53.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:37:53.304 [DEBUG] [Thread-9417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:37:53.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:37:53.359 [DEBUG] [Thread-9417] [transport.py] [_log()] userauth is OK
2025-11-26T01:37:53.359 [DEBUG] [Thread-9417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:37:53.360 [DEBUG] [Thread-9417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:37:53.360 [DEBUG] [Thread-9417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:37:53.360 [DEBUG] [Thread-9417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:37:53.377 [INFO] [Thread-9417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:37:53.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:37:53.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:37:54.225 [DEBUG] [Thread-9417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:37:54.225 [DEBUG] [Thread-9417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:37:54.273 [DEBUG] [Thread-9417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:37:54.273 [DEBUG] [Thread-9417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:37:54.281 [DEBUG] [Thread-9417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:37:54.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:37:54.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:37:54.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:37:54.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:37:54.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:37:54.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:37:54.313 [DEBUG] [Thread-9417] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:37:55.294 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:05.080 [DEBUG] [Thread-9419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:05.618 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:16.031 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:17.507 [DEBUG] [Thread-9420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:20.126 [DEBUG] [Thread-9421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:38:24.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:38:24.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:38:24.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 37, 53), 30.71, 11.5, 0.0, 11.33, 19.56, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:38:24.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:37:53
2025-11-26T01:38:25.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:38:25.242 [DEBUG] [Thread-9422] [transport.py] [_log()] starting thread (client mode): 0x70de7be0
2025-11-26T01:38:25.242 [DEBUG] [Thread-9422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:38:25.263 [DEBUG] [Thread-9422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:38:25.264 [INFO] [Thread-9422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:38:25.264 [DEBUG] [Thread-9422] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] client lang: <none>
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] server lang: <none>
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] kex follows: False
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] Compression: none
2025-11-26T01:38:25.265 [DEBUG] [Thread-9422] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:38:25.280 [DEBUG] [Thread-9422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:38:25.281 [DEBUG] [Thread-9422] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:38:25.281 [DEBUG] [Thread-9422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:38:25.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:38:25.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:38:25.284 [DEBUG] [Thread-9422] [transport.py] [_log()] userauth is OK
2025-11-26T01:38:25.284 [DEBUG] [Thread-9422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:38:25.284 [DEBUG] [Thread-9422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:38:25.284 [DEBUG] [Thread-9422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:38:25.284 [DEBUG] [Thread-9422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:38:25.308 [INFO] [Thread-9422] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:38:25.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:38:25.899 [DEBUG] [Thread-9422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:38:25.899 [DEBUG] [Thread-9422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:38:25.899 [DEBUG] [Thread-9422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:38:25.940 [DEBUG] [Thread-9422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:38:25.940 [DEBUG] [Thread-9422] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:38:25.944 [DEBUG] [Thread-9422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:38:25.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:38:25.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:38:25.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:38:25.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:38:25.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:38:25.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:38:25.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:38:25.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:38:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:38:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.984819 -999.00  +19.90   9.82     16   -6.20 1 1 1 1 1     0    0 26.35 19.61 ZNESW 9.2 9.8 137.4 13.5 19.4 -26.3 19.3 -25.7 19.0 -24.3 19.2 -25.3
2025-11-26T01:38:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:38:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:38:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.984819
2025-11-26T01:38:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:38:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:38:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:38:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:38:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:38:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:37:53', tmtdew=30.71, humidity=11.5, cloud=0.0, wind=11.33, temperature=19.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:37:54', seeing=1.07, atlas_timestamp='2025-11-25T23:38:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.042749999999999844, 0.0032500000000013074, -0.018499999999999517, 0.0035000000000007248, 0.034250000000000114, -0.027000000000001023, -0.03974999999999973, 0.006499999999999062, -0.032999999999999474, 0.014249999999998764, -0.03850000000000087, 0.058999999999999275, 0.09124999999999872, -0.015499999999999403, -0.053000000000000824, -0.02775000000000105, -0.028499999999999304, -0.010000000000001563, -0.038750000000000284, 0.03799999999999848, 0.06724999999999781, 0.03675000000000139, -0.00024999999999941735, -0.016000000000000014, -0.02549999999999919, -0.029249999999999332, 0.017000000000001236, 0.08500000000000085, 0.05400000000000027, 0.07500000000000107, -0.019999999999999574, -0.029749999999999943], zp_timestamp='2025-11-25T23:36:00')
2025-11-26T01:38:25.970 [DEBUG] [Thread-9422] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:38:26.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:38:26.067 [DEBUG] [Thread-9425] [transport.py] [_log()] starting thread (client mode): 0x70dbc100
2025-11-26T01:38:26.067 [DEBUG] [Thread-9425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:38:26.081 [DEBUG] [Thread-9425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:38:26.081 [INFO] [Thread-9425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:38:26.088 [DEBUG] [Thread-9425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:38:26.088 [DEBUG] [Thread-9425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] client lang: <none>
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] server lang: <none>
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] kex follows: False
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] Compression: none
2025-11-26T01:38:26.089 [DEBUG] [Thread-9425] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:38:26.145 [DEBUG] [Thread-9425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:38:26.145 [DEBUG] [Thread-9425] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:38:26.145 [DEBUG] [Thread-9425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:38:26.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:38:26.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:38:26.202 [DEBUG] [Thread-9425] [transport.py] [_log()] userauth is OK
2025-11-26T01:38:26.203 [DEBUG] [Thread-9425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:38:26.203 [DEBUG] [Thread-9425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:38:26.203 [DEBUG] [Thread-9425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:38:26.203 [DEBUG] [Thread-9425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:38:26.216 [INFO] [Thread-9425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:38:26.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:38:26.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:38:26.421 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:27.038 [DEBUG] [Thread-9425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:38:27.038 [DEBUG] [Thread-9425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:38:27.087 [DEBUG] [Thread-9425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:38:27.087 [DEBUG] [Thread-9425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:38:27.095 [DEBUG] [Thread-9425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:38:27.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:38:27.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:38:27.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
2025-11-26T01:38:27.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:38:27.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:38:27.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:38:27.126 [DEBUG] [Thread-9425] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:38:33.222 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:33.224 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:35.157 [DEBUG] [Thread-9427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:36.761 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:47.082 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:50.205 [DEBUG] [Thread-9428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:57.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:38:57.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:38:57.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:38:57.426 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:38:57.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 38, 25), 30.68, 11.51, 0.0, 11.63, 19.51, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:38:57.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:38:25
2025-11-26T01:38:57.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:38:58.084 [DEBUG] [Thread-9429] [transport.py] [_log()] starting thread (client mode): 0x70dbc6a0
2025-11-26T01:38:58.084 [DEBUG] [Thread-9429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:38:58.104 [DEBUG] [Thread-9429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:38:58.105 [INFO] [Thread-9429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] client lang: <none>
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] server lang: <none>
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] kex follows: False
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] Compression: none
2025-11-26T01:38:58.108 [DEBUG] [Thread-9429] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:38:58.123 [DEBUG] [Thread-9429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:38:58.123 [DEBUG] [Thread-9429] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:38:58.124 [DEBUG] [Thread-9429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:38:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:38:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:38:58.124 [DEBUG] [Thread-9429] [transport.py] [_log()] userauth is OK
2025-11-26T01:38:58.124 [DEBUG] [Thread-9429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:38:58.124 [DEBUG] [Thread-9429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:38:58.124 [DEBUG] [Thread-9429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:38:58.124 [DEBUG] [Thread-9429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:38:58.133 [INFO] [Thread-9429] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:38:58.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:38:58.784 [DEBUG] [Thread-9429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:38:58.784 [DEBUG] [Thread-9429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:38:58.784 [DEBUG] [Thread-9429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:38:58.825 [DEBUG] [Thread-9429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:38:58.825 [DEBUG] [Thread-9429] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:38:58.828 [DEBUG] [Thread-9429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:38:58.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:38:58.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:38:58.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:38:58.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:38:58.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:38:58.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:38:58.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.984819 -999.00  +19.90   9.82     16   -6.20 1 1 1 1 1     0    0 26.35 19.61 ZNESW 9.2 9.8 137.4 13.5 19.4 -26.3 19.3 -25.7 19.0 -24.3 19.2 -25.3
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.984819
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:38:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:38:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:38:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:38:25', tmtdew=30.68, humidity=11.51, cloud=0.0, wind=11.63, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:38:26', seeing=1.04, atlas_timestamp='2025-11-25T23:38:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.042749999999999844, 0.0032500000000013074, -0.018499999999999517, 0.0035000000000007248, 0.034250000000000114, -0.027000000000001023, -0.03974999999999973, 0.006499999999999062, -0.032999999999999474, 0.014249999999998764, -0.03850000000000087, 0.058999999999999275, 0.09124999999999872, -0.015499999999999403, -0.053000000000000824, -0.02775000000000105, -0.028499999999999304, -0.010000000000001563, -0.038750000000000284, 0.03799999999999848, 0.06724999999999781, 0.03675000000000139, -0.00024999999999941735, -0.016000000000000014, -0.02549999999999919, -0.029249999999999332, 0.017000000000001236, 0.08500000000000085, 0.05400000000000027, 0.07500000000000107, -0.019999999999999574, -0.029749999999999943], zp_timestamp='2025-11-25T23:36:00')
2025-11-26T01:38:58.845 [DEBUG] [Thread-9429] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:38:58.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:38:58.932 [DEBUG] [Thread-9432] [transport.py] [_log()] starting thread (client mode): 0x70d38e20
2025-11-26T01:38:58.932 [DEBUG] [Thread-9432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:38:58.947 [DEBUG] [Thread-9432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:38:58.947 [INFO] [Thread-9432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:38:58.954 [DEBUG] [Thread-9432] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] client lang: <none>
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] server lang: <none>
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] kex follows: False
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] Compression: none
2025-11-26T01:38:58.955 [DEBUG] [Thread-9432] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:38:59.010 [DEBUG] [Thread-9432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:38:59.010 [DEBUG] [Thread-9432] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:38:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:38:59.010 [DEBUG] [Thread-9432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:38:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:38:59.067 [DEBUG] [Thread-9432] [transport.py] [_log()] userauth is OK
2025-11-26T01:38:59.067 [DEBUG] [Thread-9432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:38:59.067 [DEBUG] [Thread-9432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:38:59.067 [DEBUG] [Thread-9432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:38:59.067 [DEBUG] [Thread-9432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:38:59.080 [INFO] [Thread-9432] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:38:59.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:38:59.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:38:59.906 [DEBUG] [Thread-9432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:38:59.906 [DEBUG] [Thread-9432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:38:59.954 [DEBUG] [Thread-9432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:38:59.954 [DEBUG] [Thread-9432] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:38:59.962 [DEBUG] [Thread-9432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:38:59.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:38:59.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:38:59.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:38:59.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:38:59.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:38:59.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:38:59.996 [DEBUG] [Thread-9432] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:39:05.242 [DEBUG] [Thread-9434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:07.800 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:17.570 [DEBUG] [Thread-9435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:18.125 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:20.293 [DEBUG] [Thread-9436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:28.465 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:30.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:39:30.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:39:30.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:39:30.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 38, 57), 30.63, 11.51, 0.0, 11.01, 19.51, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:39:30.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:38:57
2025-11-26T01:39:30.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:39:31.020 [DEBUG] [Thread-9437] [transport.py] [_log()] starting thread (client mode): 0x70d7df90
2025-11-26T01:39:31.020 [DEBUG] [Thread-9437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:39:31.040 [DEBUG] [Thread-9437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:39:31.040 [INFO] [Thread-9437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:39:31.041 [DEBUG] [Thread-9437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:39:31.041 [DEBUG] [Thread-9437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:39:31.041 [DEBUG] [Thread-9437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:39:31.041 [DEBUG] [Thread-9437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:39:31.041 [DEBUG] [Thread-9437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:39:31.041 [DEBUG] [Thread-9437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:39:31.041 [DEBUG] [Thread-9437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] client lang: <none>
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] server lang: <none>
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] kex follows: False
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] Compression: none
2025-11-26T01:39:31.042 [DEBUG] [Thread-9437] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:39:31.057 [DEBUG] [Thread-9437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:39:31.058 [DEBUG] [Thread-9437] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:39:31.058 [DEBUG] [Thread-9437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:39:31.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:39:31.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:39:31.059 [DEBUG] [Thread-9437] [transport.py] [_log()] userauth is OK
2025-11-26T01:39:31.059 [DEBUG] [Thread-9437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:39:31.059 [DEBUG] [Thread-9437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:39:31.059 [DEBUG] [Thread-9437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:39:31.059 [DEBUG] [Thread-9437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:39:31.070 [INFO] [Thread-9437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:39:31.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:39:31.857 [DEBUG] [Thread-9437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:39:31.858 [DEBUG] [Thread-9437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:39:31.858 [DEBUG] [Thread-9437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:39:31.898 [DEBUG] [Thread-9437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:39:31.898 [DEBUG] [Thread-9437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:39:31.900 [DEBUG] [Thread-9437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:39:31.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:39:31.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:39:31.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:39:31.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:39:31.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:39:31.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:39:31.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.985166 -999.00  +19.90  10.04     16   -6.10 1 1 1 1 1     0    0 26.84 21.41 ZNESW 8.6 10.0 135.4 10.7 19.4 -26.3 19.3 -25.7 18.9 -24.2 19.2 -25.4
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.985166
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:39:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:38:57', tmtdew=30.63, humidity=11.51, cloud=0.0, wind=11.01, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:38:58', seeing=1.21, atlas_timestamp='2025-11-25T23:38:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.042749999999999844, 0.0032500000000013074, -0.018499999999999517, 0.0035000000000007248, 0.034250000000000114, -0.027000000000001023, -0.03974999999999973, 0.006499999999999062, -0.032999999999999474, 0.014249999999998764, -0.03850000000000087, 0.058999999999999275, 0.09124999999999872, -0.015499999999999403, -0.053000000000000824, -0.02775000000000105, -0.028499999999999304, -0.010000000000001563, -0.038750000000000284, 0.03799999999999848, 0.06724999999999781, 0.03675000000000139, -0.00024999999999941735, -0.016000000000000014, -0.02549999999999919, -0.029249999999999332, 0.017000000000001236, 0.08500000000000085, 0.05400000000000027, 0.07500000000000107, -0.019999999999999574, -0.029749999999999943], zp_timestamp='2025-11-25T23:36:00')
2025-11-26T01:39:31.919 [DEBUG] [Thread-9437] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:39:31.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:39:32.002 [DEBUG] [Thread-9440] [transport.py] [_log()] starting thread (client mode): 0x70d6a530
2025-11-26T01:39:32.002 [DEBUG] [Thread-9440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:39:32.016 [DEBUG] [Thread-9440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:39:32.017 [INFO] [Thread-9440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:39:32.024 [DEBUG] [Thread-9440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:39:32.024 [DEBUG] [Thread-9440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:39:32.024 [DEBUG] [Thread-9440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:39:32.024 [DEBUG] [Thread-9440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:39:32.024 [DEBUG] [Thread-9440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:39:32.024 [DEBUG] [Thread-9440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:39:32.024 [DEBUG] [Thread-9440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] client lang: <none>
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] server lang: <none>
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] kex follows: False
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] Compression: none
2025-11-26T01:39:32.025 [DEBUG] [Thread-9440] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:39:32.088 [DEBUG] [Thread-9440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:39:32.088 [DEBUG] [Thread-9440] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:39:32.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:39:32.089 [DEBUG] [Thread-9440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:39:32.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:39:32.144 [DEBUG] [Thread-9440] [transport.py] [_log()] userauth is OK
2025-11-26T01:39:32.144 [DEBUG] [Thread-9440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:39:32.145 [DEBUG] [Thread-9440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:39:32.145 [DEBUG] [Thread-9440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:39:32.145 [DEBUG] [Thread-9440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:39:32.165 [INFO] [Thread-9440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:39:32.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:39:32.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:39:32.971 [DEBUG] [Thread-9440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:39:32.971 [DEBUG] [Thread-9440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:39:33.019 [DEBUG] [Thread-9440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:39:33.019 [DEBUG] [Thread-9440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:39:33.028 [DEBUG] [Thread-9440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:39:33.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:39:33.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:39:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:39:33.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:39:33.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:39:33.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:39:33.067 [DEBUG] [Thread-9440] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:39:33.425 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:33.426 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:35.325 [DEBUG] [Thread-9442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:38.786 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:49.133 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:50.377 [DEBUG] [Thread-9443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:39:59.524 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:40:03.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:40: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
2025-11-26T01:40:03.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 39, 29), 30.58, 11.55, 0.0, 10.25, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:40:03.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:39:29
2025-11-26T01:40:03.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:40:04.067 [DEBUG] [Thread-9444] [transport.py] [_log()] starting thread (client mode): 0x70d6a7d0
2025-11-26T01:40:04.067 [DEBUG] [Thread-9444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:40:04.088 [DEBUG] [Thread-9444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:40:04.088 [INFO] [Thread-9444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] client lang: <none>
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] server lang: <none>
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] kex follows: False
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] Compression: none
2025-11-26T01:40:04.091 [DEBUG] [Thread-9444] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:40:04.107 [DEBUG] [Thread-9444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:40:04.107 [DEBUG] [Thread-9444] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:40:04.108 [DEBUG] [Thread-9444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:40:04.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:40:04.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:40:04.108 [DEBUG] [Thread-9444] [transport.py] [_log()] userauth is OK
2025-11-26T01:40:04.108 [DEBUG] [Thread-9444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:40:04.108 [DEBUG] [Thread-9444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:40:04.109 [DEBUG] [Thread-9444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:40:04.109 [DEBUG] [Thread-9444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:40:04.120 [INFO] [Thread-9444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:40:04.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:40:05.410 [DEBUG] [Thread-9446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:05.568 [DEBUG] [Thread-9444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:40:05.569 [DEBUG] [Thread-9444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:40:05.570 [DEBUG] [Thread-9444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:40:05.610 [DEBUG] [Thread-9444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:40:05.610 [DEBUG] [Thread-9444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:40:05.614 [DEBUG] [Thread-9444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:40:05.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:40:05.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:40:05.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:40:05.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:40:05.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:40:05.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:40:05.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:40:05.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:40:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:40:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.985513 -999.00  +20.00   9.60     16   -6.20 1 1 1 1 1     0    0 26.41 23.76 ZNESW 9.8 9.6 140.6 11.3 19.3 -26.4 19.3 -25.8 19.0 -24.4 19.2 -25.3
2025-11-26T01:40:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:40:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:40:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.985513
2025-11-26T01:40:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:40:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:40:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:40:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:40:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:40:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:39:29', tmtdew=30.58, humidity=11.55, cloud=0.0, wind=10.25, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:40:02', seeing=1.09, atlas_timestamp='2025-11-25T23:39:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.042749999999999844, 0.0032500000000013074, -0.018499999999999517, 0.0035000000000007248, 0.034250000000000114, -0.027000000000001023, -0.03974999999999973, 0.006499999999999062, -0.032999999999999474, 0.014249999999998764, -0.03850000000000087, 0.058999999999999275, 0.09124999999999872, -0.015499999999999403, -0.053000000000000824, -0.02775000000000105, -0.028499999999999304, -0.010000000000001563, -0.038750000000000284, 0.03799999999999848, 0.06724999999999781, 0.03675000000000139, -0.00024999999999941735, -0.016000000000000014, -0.02549999999999919, -0.029249999999999332, 0.017000000000001236, 0.08500000000000085, 0.05400000000000027, 0.07500000000000107, -0.019999999999999574, -0.029749999999999943], zp_timestamp='2025-11-25T23:36:00')
2025-11-26T01:40:05.644 [DEBUG] [Thread-9444] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:40:05.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:40:05.748 [DEBUG] [Thread-9448] [transport.py] [_log()] starting thread (client mode): 0x70d750f0
2025-11-26T01:40:05.748 [DEBUG] [Thread-9448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:40:05.763 [DEBUG] [Thread-9448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:40:05.763 [INFO] [Thread-9448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:40:05.770 [DEBUG] [Thread-9448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:40:05.770 [DEBUG] [Thread-9448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:40:05.770 [DEBUG] [Thread-9448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:40:05.770 [DEBUG] [Thread-9448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:40:05.770 [DEBUG] [Thread-9448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] client lang: <none>
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] server lang: <none>
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] kex follows: False
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] Compression: none
2025-11-26T01:40:05.771 [DEBUG] [Thread-9448] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:40:05.830 [DEBUG] [Thread-9448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:40:05.830 [DEBUG] [Thread-9448] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:40:05.831 [DEBUG] [Thread-9448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:40:05.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:40:05.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:40:05.893 [DEBUG] [Thread-9448] [transport.py] [_log()] userauth is OK
2025-11-26T01:40:05.893 [DEBUG] [Thread-9448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:40:05.893 [DEBUG] [Thread-9448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:40:05.893 [DEBUG] [Thread-9448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:40:05.894 [DEBUG] [Thread-9448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:40:05.912 [INFO] [Thread-9448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:40:05.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:40:05.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:40:06.759 [DEBUG] [Thread-9448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:40:06.759 [DEBUG] [Thread-9448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:40:06.807 [DEBUG] [Thread-9448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:40:06.807 [DEBUG] [Thread-9448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:40:06.816 [DEBUG] [Thread-9448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:40:06.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:40:06.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:40:06.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:40:06.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:40:06.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:40:06.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:40:06.853 [DEBUG] [Thread-9448] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:40:09.867 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:17.645 [DEBUG] [Thread-9450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:20.202 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:20.446 [DEBUG] [Thread-9451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:30.549 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:33.627 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:33.628 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:35.490 [DEBUG] [Thread-9452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:36.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:40:36.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:40:36.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:40:37.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 40, 34), 30.68, 11.48, 0.0, 10.01, 19.51, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:40:37.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:40:34
2025-11-26T01:40:37.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:40:37.848 [DEBUG] [Thread-9453] [transport.py] [_log()] starting thread (client mode): 0x70dd0100
2025-11-26T01:40:37.848 [DEBUG] [Thread-9453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:40:37.867 [DEBUG] [Thread-9453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:40:37.867 [INFO] [Thread-9453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] client lang: <none>
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] server lang: <none>
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] kex follows: False
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] Compression: none
2025-11-26T01:40:37.871 [DEBUG] [Thread-9453] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:40:37.887 [DEBUG] [Thread-9453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:40:37.887 [DEBUG] [Thread-9453] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:40:37.887 [DEBUG] [Thread-9453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:40:37.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:40:37.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:40:37.928 [DEBUG] [Thread-9453] [transport.py] [_log()] userauth is OK
2025-11-26T01:40:37.928 [DEBUG] [Thread-9453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:40:37.928 [DEBUG] [Thread-9453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:40:37.928 [DEBUG] [Thread-9453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:40:37.928 [DEBUG] [Thread-9453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:40:37.943 [INFO] [Thread-9453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:40:37.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:40:38.712 [DEBUG] [Thread-9453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:40:38.712 [DEBUG] [Thread-9453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:40:38.712 [DEBUG] [Thread-9453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:40:38.754 [DEBUG] [Thread-9453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:40:38.754 [DEBUG] [Thread-9453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:40:38.756 [DEBUG] [Thread-9453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:40:38.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:40:38.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:40:38.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:40:38.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:40:38.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:40:38.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:40:38.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.986207 -999.00  +20.00   8.01     16   -6.20 1 1 1 1 1     0    0 26.37 24.22 ZNESW 8.3 8.0 138.8 10.4 19.4 -26.3 19.3 -25.7 18.9 -24.4 19.2 -25.3
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.986207
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:40:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:40:34', tmtdew=30.68, humidity=11.48, cloud=0.0, wind=10.01, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:40:34', seeing=1.2, atlas_timestamp='2025-11-25T23:40:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:38:00')
2025-11-26T01:40:38.778 [DEBUG] [Thread-9453] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:40:38.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:40:38.863 [DEBUG] [Thread-9456] [transport.py] [_log()] starting thread (client mode): 0x70de7070
2025-11-26T01:40:38.864 [DEBUG] [Thread-9456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:40:38.877 [DEBUG] [Thread-9456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:40:38.877 [INFO] [Thread-9456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] client lang: <none>
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] server lang: <none>
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] kex follows: False
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] Compression: none
2025-11-26T01:40:38.885 [DEBUG] [Thread-9456] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:40:38.939 [DEBUG] [Thread-9456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:40:38.940 [DEBUG] [Thread-9456] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:40:38.940 [DEBUG] [Thread-9456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:40:38.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:40:38.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:40:38.997 [DEBUG] [Thread-9456] [transport.py] [_log()] userauth is OK
2025-11-26T01:40:38.997 [DEBUG] [Thread-9456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:40:38.998 [DEBUG] [Thread-9456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:40:38.998 [DEBUG] [Thread-9456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:40:38.998 [DEBUG] [Thread-9456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:40:39.012 [INFO] [Thread-9456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:40:39.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:40:39.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:40:39.796 [DEBUG] [Thread-9456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:40:39.797 [DEBUG] [Thread-9456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:40:39.845 [DEBUG] [Thread-9456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:40:39.845 [DEBUG] [Thread-9456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:40:39.854 [DEBUG] [Thread-9456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:40:39.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:40: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')
2025-11-26T01:40:39.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:40:39.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:40:39.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:40:39.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:40:39.892 [DEBUG] [Thread-9456] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:40:40.892 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:50.524 [DEBUG] [Thread-9458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:40:51.209 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:01.602 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:05.576 [DEBUG] [Thread-9459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:41:09.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:41:09.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:41:10.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 41, 6), 30.76, 11.42, 0.0, 9.9, 19.55, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:41:10.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:41:06
2025-11-26T01:41:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:41:10.864 [DEBUG] [Thread-9460] [transport.py] [_log()] starting thread (client mode): 0x70dd0040
2025-11-26T01:41:10.864 [DEBUG] [Thread-9460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:41:10.885 [DEBUG] [Thread-9460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:41:10.885 [INFO] [Thread-9460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:41:10.888 [DEBUG] [Thread-9460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] client lang: <none>
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] server lang: <none>
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] kex follows: False
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] Compression: none
2025-11-26T01:41:10.889 [DEBUG] [Thread-9460] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:41:10.907 [DEBUG] [Thread-9460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:41:10.907 [DEBUG] [Thread-9460] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:41:10.907 [DEBUG] [Thread-9460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:41:10.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:41:10.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:41:10.908 [DEBUG] [Thread-9460] [transport.py] [_log()] userauth is OK
2025-11-26T01:41:10.908 [DEBUG] [Thread-9460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:41:10.908 [DEBUG] [Thread-9460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:41:10.908 [DEBUG] [Thread-9460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:41:10.908 [DEBUG] [Thread-9460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:41:10.917 [INFO] [Thread-9460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:41:10.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:41:11.553 [DEBUG] [Thread-9460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:41:11.553 [DEBUG] [Thread-9460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:41:11.553 [DEBUG] [Thread-9460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:41:11.594 [DEBUG] [Thread-9460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:41:11.594 [DEBUG] [Thread-9460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:41:11.597 [DEBUG] [Thread-9460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:41:11.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:41:11.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:41:11.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:41:11.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:41:11.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:41:11.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:41:11.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:41:11.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.986555 -999.00  +20.10   8.00     16   -6.20 1 1 1 1 1     0    0 26.55 23.03 ZNESW 8.0 8.0 129.4 9.5 19.3 -26.3 19.2 -25.7 18.9 -24.5 19.2 -25.2
2025-11-26T01:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:41:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.986555
2025-11-26T01:41:11.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:41:11.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:41:11.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:41:11.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:41:11.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:41:11.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:41:06', tmtdew=30.76, humidity=11.42, cloud=0.0, wind=9.9, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:41:06', seeing=1.13, atlas_timestamp='2025-11-25T23:40:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:38:00')
2025-11-26T01:41:11.616 [DEBUG] [Thread-9460] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:41:11.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:41:11.702 [DEBUG] [Thread-9463] [transport.py] [_log()] starting thread (client mode): 0x70d7fa30
2025-11-26T01:41:11.702 [DEBUG] [Thread-9463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:41:11.716 [DEBUG] [Thread-9463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:41:11.716 [INFO] [Thread-9463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] client lang: <none>
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] server lang: <none>
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] kex follows: False
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] Compression: none
2025-11-26T01:41:11.724 [DEBUG] [Thread-9463] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:41:11.782 [DEBUG] [Thread-9463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:41:11.782 [DEBUG] [Thread-9463] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:41:11.782 [DEBUG] [Thread-9463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:41:11.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:41:11.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:41:11.838 [DEBUG] [Thread-9463] [transport.py] [_log()] userauth is OK
2025-11-26T01:41:11.838 [DEBUG] [Thread-9463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:41:11.838 [DEBUG] [Thread-9463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:41:11.838 [DEBUG] [Thread-9463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:41:11.838 [DEBUG] [Thread-9463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:41:11.856 [INFO] [Thread-9463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:41:11.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:41:11.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:41:11.942 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:12.668 [DEBUG] [Thread-9463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:41:12.668 [DEBUG] [Thread-9463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:41:12.715 [DEBUG] [Thread-9463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:41:12.715 [DEBUG] [Thread-9463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:41:12.723 [DEBUG] [Thread-9463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:41:12.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:41:12.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:41: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') -> 00000000
2025-11-26T01:41:12.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:41:12.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:41:12.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:41:12.755 [DEBUG] [Thread-9463] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:41:17.720 [DEBUG] [Thread-9465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:20.607 [DEBUG] [Thread-9466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:22.286 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:32.628 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:33.829 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:33.831 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:35.669 [DEBUG] [Thread-9467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:41:42.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:41:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:41:42.947 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 41, 38), 30.89, 11.4, 0.0, 8.19, 19.65, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:41:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:41:38
2025-11-26T01:41:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:41:43.723 [DEBUG] [Thread-9468] [transport.py] [_log()] starting thread (client mode): 0x70da6bc0
2025-11-26T01:41:43.723 [DEBUG] [Thread-9468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:41:43.744 [DEBUG] [Thread-9468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:41:43.744 [INFO] [Thread-9468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:41:43.747 [DEBUG] [Thread-9468] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] client lang: <none>
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] server lang: <none>
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] kex follows: False
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] Compression: none
2025-11-26T01:41:43.748 [DEBUG] [Thread-9468] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:41:43.765 [DEBUG] [Thread-9468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:41:43.766 [DEBUG] [Thread-9468] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:41:43.766 [DEBUG] [Thread-9468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:41:43.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:41:43.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:41:43.768 [DEBUG] [Thread-9468] [transport.py] [_log()] userauth is OK
2025-11-26T01:41:43.769 [DEBUG] [Thread-9468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:41:43.769 [DEBUG] [Thread-9468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:41:43.769 [DEBUG] [Thread-9468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:41:43.769 [DEBUG] [Thread-9468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:41:43.790 [INFO] [Thread-9468] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:41:43.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:41:44.574 [DEBUG] [Thread-9468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:41:44.574 [DEBUG] [Thread-9468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:41:44.575 [DEBUG] [Thread-9468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:41:44.615 [DEBUG] [Thread-9468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:41:44.616 [DEBUG] [Thread-9468] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:41:44.626 [DEBUG] [Thread-9468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:41:44.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:41:44.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:41:44.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:41:44.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:41:44.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:41:44.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:41:44.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:41:44.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:41:44.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:41:44.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.986902 -999.00  +20.00   6.02     16   -6.20 1 1 1 1 1     0    0 26.74 23.38 ZNESW 6.3 6.0 120.8 9.1 19.3 -26.3 19.2 -25.6 18.9 -24.3 19.2 -25.3
2025-11-26T01:41:44.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:41:44.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:41:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.986902
2025-11-26T01:41:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:41:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:41:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:41:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:41:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:41:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:41:38', tmtdew=30.89, humidity=11.4, cloud=0.0, wind=8.19, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:41:38', seeing=0.96, atlas_timestamp='2025-11-25T23:41:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:38:00')
2025-11-26T01:41:44.650 [DEBUG] [Thread-9468] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:41:44.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:41:44.756 [DEBUG] [Thread-9471] [transport.py] [_log()] starting thread (client mode): 0x70d3ba00
2025-11-26T01:41:44.756 [DEBUG] [Thread-9471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:41:44.770 [DEBUG] [Thread-9471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:41:44.771 [INFO] [Thread-9471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:41:44.778 [DEBUG] [Thread-9471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:41:44.778 [DEBUG] [Thread-9471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:41:44.778 [DEBUG] [Thread-9471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] client lang: <none>
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] server lang: <none>
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] kex follows: False
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] Compression: none
2025-11-26T01:41:44.779 [DEBUG] [Thread-9471] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:41:44.836 [DEBUG] [Thread-9471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:41:44.836 [DEBUG] [Thread-9471] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:41:44.837 [DEBUG] [Thread-9471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:41:44.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:41:44.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:41:44.892 [DEBUG] [Thread-9471] [transport.py] [_log()] userauth is OK
2025-11-26T01:41:44.892 [DEBUG] [Thread-9471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:41:44.892 [DEBUG] [Thread-9471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:41:44.892 [DEBUG] [Thread-9471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:41:44.892 [DEBUG] [Thread-9471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:41:44.911 [INFO] [Thread-9471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:41:44.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:41:44.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:41:45.712 [DEBUG] [Thread-9471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:41:45.712 [DEBUG] [Thread-9471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:41:45.760 [DEBUG] [Thread-9471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:41:45.760 [DEBUG] [Thread-9471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:41:45.769 [DEBUG] [Thread-9471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:41:45.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:41:45.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:41:45.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:41:45.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:41:45.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:41:45.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:41:45.804 [DEBUG] [Thread-9471] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:41:50.698 [DEBUG] [Thread-9473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:41:53.292 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:03.613 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:05.744 [DEBUG] [Thread-9474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:13.960 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:15.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:42:15.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:42:15.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:42:16.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 42, 10), 30.95, 11.33, 0.0, 8.28, 19.63, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:42:16.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:42:10
2025-11-26T01:42:16.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:42:16.755 [DEBUG] [Thread-9475] [transport.py] [_log()] starting thread (client mode): 0x70d74ac0
2025-11-26T01:42:16.755 [DEBUG] [Thread-9475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:42:16.776 [DEBUG] [Thread-9475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:42:16.777 [INFO] [Thread-9475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] client lang: <none>
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] server lang: <none>
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] kex follows: False
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:42:16.780 [DEBUG] [Thread-9475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:42:16.781 [DEBUG] [Thread-9475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:42:16.781 [DEBUG] [Thread-9475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:42:16.781 [DEBUG] [Thread-9475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:42:16.781 [DEBUG] [Thread-9475] [transport.py] [_log()] Compression: none
2025-11-26T01:42:16.781 [DEBUG] [Thread-9475] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:42:16.798 [DEBUG] [Thread-9475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:42:16.798 [DEBUG] [Thread-9475] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:42:16.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:42:16.799 [DEBUG] [Thread-9475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:42:16.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:42:16.801 [DEBUG] [Thread-9475] [transport.py] [_log()] userauth is OK
2025-11-26T01:42:16.801 [DEBUG] [Thread-9475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:42:16.801 [DEBUG] [Thread-9475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:42:16.801 [DEBUG] [Thread-9475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:42:16.802 [DEBUG] [Thread-9475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:42:16.826 [INFO] [Thread-9475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:42:16.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:42:17.472 [DEBUG] [Thread-9475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:42:17.473 [DEBUG] [Thread-9475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:42:17.473 [DEBUG] [Thread-9475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:42:17.514 [DEBUG] [Thread-9475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:42:17.514 [DEBUG] [Thread-9475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:42:17.517 [DEBUG] [Thread-9475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:42:17.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:42:17.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:42:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:42:17.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:42:17.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:42:17.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:42:17.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:42:17.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:42:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:42:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.987249 -999.00  +20.00   6.34     16   -6.30 1 1 1 1 1     0    0 26.84 23.74 ZNESW 7.1 6.3 131.2 7.7 19.4 -26.3 19.3 -25.7 18.9 -24.2 19.2 -25.2
2025-11-26T01:42:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:42:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:42:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.987249
2025-11-26T01:42:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:42:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:42:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:42:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:42:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:42:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:42:10', tmtdew=30.95, humidity=11.33, cloud=0.0, wind=8.28, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:42:10', seeing=1.17, atlas_timestamp='2025-11-25T23:41:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:38:00')
2025-11-26T01:42:17.543 [DEBUG] [Thread-9475] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:42:17.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:42:17.638 [DEBUG] [Thread-9478] [transport.py] [_log()] starting thread (client mode): 0x70d6b250
2025-11-26T01:42:17.638 [DEBUG] [Thread-9478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:42:17.653 [DEBUG] [Thread-9478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:42:17.653 [INFO] [Thread-9478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:42:17.661 [DEBUG] [Thread-9478] [transport.py] [_log()] client lang: <none>
2025-11-26T01:42:17.662 [DEBUG] [Thread-9478] [transport.py] [_log()] server lang: <none>
2025-11-26T01:42:17.662 [DEBUG] [Thread-9478] [transport.py] [_log()] kex follows: False
2025-11-26T01:42:17.662 [DEBUG] [Thread-9478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:42:17.662 [DEBUG] [Thread-9478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:42:17.662 [DEBUG] [Thread-9478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:42:17.662 [DEBUG] [Thread-9478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:42:17.662 [DEBUG] [Thread-9478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:42:17.662 [DEBUG] [Thread-9478] [transport.py] [_log()] Compression: none
2025-11-26T01:42:17.662 [DEBUG] [Thread-9478] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:42:17.722 [DEBUG] [Thread-9478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:42:17.722 [DEBUG] [Thread-9478] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:42:17.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:42:17.724 [DEBUG] [Thread-9478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:42:17.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:42:17.777 [DEBUG] [Thread-9478] [transport.py] [_log()] userauth is OK
2025-11-26T01:42:17.777 [DEBUG] [Thread-9478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:42:17.777 [DEBUG] [Thread-9478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:42:17.777 [DEBUG] [Thread-9478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:42:17.777 [DEBUG] [Thread-9478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:42:17.791 [INFO] [Thread-9478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:42:17.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:42:17.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:42:17.796 [DEBUG] [Thread-9480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:18.635 [DEBUG] [Thread-9478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:42:18.636 [DEBUG] [Thread-9478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:42:18.684 [DEBUG] [Thread-9478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:42:18.684 [DEBUG] [Thread-9478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:42:18.693 [DEBUG] [Thread-9478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:42:18.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:42:18.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:42:18.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:42:18.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:42:18.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:42:18.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:42:18.731 [DEBUG] [Thread-9478] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:42:20.779 [DEBUG] [Thread-9481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:24.340 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:34.036 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:34.038 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:34.688 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:35.825 [DEBUG] [Thread-9482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:45.027 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:48.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:42:48.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:42:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:42:49.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 42, 42), 30.98, 11.3, 0.0, 7.71, 19.61, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:42:49.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:42:42
2025-11-26T01:42:49.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:42:49.687 [DEBUG] [Thread-9483] [transport.py] [_log()] starting thread (client mode): 0x70d6abc0
2025-11-26T01:42:49.687 [DEBUG] [Thread-9483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:42:49.705 [DEBUG] [Thread-9483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:42:49.705 [INFO] [Thread-9483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:42:49.706 [DEBUG] [Thread-9483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] client lang: <none>
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] server lang: <none>
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] kex follows: False
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] Compression: none
2025-11-26T01:42:49.707 [DEBUG] [Thread-9483] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:42:49.715 [DEBUG] [Thread-9483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:42:49.715 [DEBUG] [Thread-9483] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:42:49.716 [DEBUG] [Thread-9483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:42:49.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:42:49.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:42:49.717 [DEBUG] [Thread-9483] [transport.py] [_log()] userauth is OK
2025-11-26T01:42:49.718 [DEBUG] [Thread-9483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:42:49.718 [DEBUG] [Thread-9483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:42:49.718 [DEBUG] [Thread-9483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:42:49.718 [DEBUG] [Thread-9483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:42:49.735 [INFO] [Thread-9483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:42:49.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:42:50.513 [DEBUG] [Thread-9483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:42:50.514 [DEBUG] [Thread-9483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:42:50.514 [DEBUG] [Thread-9483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:42:50.555 [DEBUG] [Thread-9483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:42:50.555 [DEBUG] [Thread-9483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:42:50.558 [DEBUG] [Thread-9483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:42:50.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:42:50.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:42:50.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:42:50.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:42:50.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:42:50.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:42:50.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:42:50.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:42:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:42:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.987596 -999.00  +20.10   5.05     16   -6.20 1 1 1 1 1     0    0 26.78 23.28 ZNESW 5.8 5.0 136.2 8.2 19.4 -26.3 19.3 -25.8 18.9 -24.2 19.2 -25.5
2025-11-26T01:42:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:42:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:42:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.987596
2025-11-26T01:42:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:42:50.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:42:50.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:42:50.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:42:50.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:42:50.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:42:42', tmtdew=30.98, humidity=11.3, cloud=0.0, wind=7.71, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:42:42', seeing=1.46, atlas_timestamp='2025-11-25T23:42:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:38:00')
2025-11-26T01:42:50.582 [DEBUG] [Thread-9483] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:42:50.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:42:50.677 [DEBUG] [Thread-9486] [transport.py] [_log()] starting thread (client mode): 0x70dbef20
2025-11-26T01:42:50.677 [DEBUG] [Thread-9486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:42:50.693 [DEBUG] [Thread-9486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:42:50.693 [INFO] [Thread-9486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:42:50.702 [DEBUG] [Thread-9486] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:42:50.702 [DEBUG] [Thread-9486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:42:50.702 [DEBUG] [Thread-9486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:42:50.702 [DEBUG] [Thread-9486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:42:50.703 [DEBUG] [Thread-9486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:42:50.703 [DEBUG] [Thread-9486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:42:50.703 [DEBUG] [Thread-9486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:42:50.703 [DEBUG] [Thread-9486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:42:50.703 [DEBUG] [Thread-9486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:42:50.703 [DEBUG] [Thread-9486] [transport.py] [_log()] client lang: <none>
2025-11-26T01:42:50.703 [DEBUG] [Thread-9486] [transport.py] [_log()] server lang: <none>
2025-11-26T01:42:50.703 [DEBUG] [Thread-9486] [transport.py] [_log()] kex follows: False
2025-11-26T01:42:50.703 [DEBUG] [Thread-9486] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:42:50.704 [DEBUG] [Thread-9486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:42:50.704 [DEBUG] [Thread-9486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:42:50.704 [DEBUG] [Thread-9486] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:42:50.704 [DEBUG] [Thread-9486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:42:50.704 [DEBUG] [Thread-9486] [transport.py] [_log()] Compression: none
2025-11-26T01:42:50.704 [DEBUG] [Thread-9486] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:42:50.760 [DEBUG] [Thread-9486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:42:50.760 [DEBUG] [Thread-9486] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:42:50.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:42:50.761 [DEBUG] [Thread-9486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:42:50.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:42:50.819 [DEBUG] [Thread-9486] [transport.py] [_log()] userauth is OK
2025-11-26T01:42:50.820 [DEBUG] [Thread-9486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:42:50.820 [DEBUG] [Thread-9486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:42:50.820 [DEBUG] [Thread-9486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:42:50.820 [DEBUG] [Thread-9486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:42:50.838 [INFO] [Thread-9486] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:42:50.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:42:50.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:42:50.860 [DEBUG] [Thread-9488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:42:51.678 [DEBUG] [Thread-9486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:42:51.679 [DEBUG] [Thread-9486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:42:51.727 [DEBUG] [Thread-9486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:42:51.727 [DEBUG] [Thread-9486] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:42:51.736 [DEBUG] [Thread-9486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:42:51.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:42: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')
2025-11-26T01:42:51.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:42:51.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:42:51.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:42:51.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:42:51.775 [DEBUG] [Thread-9486] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:42:55.352 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:05.694 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:05.916 [DEBUG] [Thread-9489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:16.017 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:17.870 [DEBUG] [Thread-9490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:20.951 [DEBUG] [Thread-9491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:21.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:43:21.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:43:21.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:43:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 43, 14), 30.93, 11.35, 0.0, 7.89, 19.63, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:43:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:43:14
2025-11-26T01:43:22.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:43:22.718 [DEBUG] [Thread-9492] [transport.py] [_log()] starting thread (client mode): 0x70d75ba0
2025-11-26T01:43:22.719 [DEBUG] [Thread-9492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:43:22.739 [DEBUG] [Thread-9492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:43:22.739 [INFO] [Thread-9492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] client lang: <none>
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] server lang: <none>
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] kex follows: False
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:43:22.742 [DEBUG] [Thread-9492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:43:22.743 [DEBUG] [Thread-9492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:43:22.743 [DEBUG] [Thread-9492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:43:22.743 [DEBUG] [Thread-9492] [transport.py] [_log()] Compression: none
2025-11-26T01:43:22.743 [DEBUG] [Thread-9492] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:43:22.760 [DEBUG] [Thread-9492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:43:22.760 [DEBUG] [Thread-9492] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:43:22.761 [DEBUG] [Thread-9492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:43:22.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:43:22.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:43:22.763 [DEBUG] [Thread-9492] [transport.py] [_log()] userauth is OK
2025-11-26T01:43:22.763 [DEBUG] [Thread-9492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:43:22.763 [DEBUG] [Thread-9492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:43:22.763 [DEBUG] [Thread-9492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:43:22.763 [DEBUG] [Thread-9492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:43:22.784 [INFO] [Thread-9492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:43:22.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:43:23.400 [DEBUG] [Thread-9492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:43:23.400 [DEBUG] [Thread-9492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:43:23.401 [DEBUG] [Thread-9492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:43:23.442 [DEBUG] [Thread-9492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:43:23.442 [DEBUG] [Thread-9492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:43:23.445 [DEBUG] [Thread-9492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:43:23.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:43:23.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:43:23.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:43:23.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:43:23.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:43:23.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:43:23.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:43:23.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:43:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:43:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.987944 -999.00  +20.10   5.84     16   -6.20 1 1 1 1 1     0    0 26.81 23.35 ZNESW 6.5 5.8 130.2 7.3 19.4 -26.3 19.3 -25.7 18.9 -24.2 19.2 -25.3
2025-11-26T01:43:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:43:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:43:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.987944
2025-11-26T01:43:23.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:43:23.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:43:23.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:43:23.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:43:23.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:43:23.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:43:14', tmtdew=30.93, humidity=11.35, cloud=0.0, wind=7.89, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:43:14', seeing=0.99, atlas_timestamp='2025-11-25T23:42:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:38:00')
2025-11-26T01:43:23.475 [DEBUG] [Thread-9492] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:43:23.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:43:23.570 [DEBUG] [Thread-9495] [transport.py] [_log()] starting thread (client mode): 0x70d77c40
2025-11-26T01:43:23.571 [DEBUG] [Thread-9495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:43:23.586 [DEBUG] [Thread-9495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:43:23.586 [INFO] [Thread-9495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:43:23.598 [DEBUG] [Thread-9495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:43:23.598 [DEBUG] [Thread-9495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:43:23.598 [DEBUG] [Thread-9495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:43:23.598 [DEBUG] [Thread-9495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:43:23.598 [DEBUG] [Thread-9495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:43:23.598 [DEBUG] [Thread-9495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] client lang: <none>
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] server lang: <none>
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] kex follows: False
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] Compression: none
2025-11-26T01:43:23.599 [DEBUG] [Thread-9495] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:43:23.657 [DEBUG] [Thread-9495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:43:23.658 [DEBUG] [Thread-9495] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:43:23.659 [DEBUG] [Thread-9495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:43:23.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:43:23.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:43:23.717 [DEBUG] [Thread-9495] [transport.py] [_log()] userauth is OK
2025-11-26T01:43:23.718 [DEBUG] [Thread-9495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:43:23.718 [DEBUG] [Thread-9495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:43:23.718 [DEBUG] [Thread-9495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:43:23.718 [DEBUG] [Thread-9495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:43:23.736 [INFO] [Thread-9495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:43:23.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:43:23.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:43:24.632 [DEBUG] [Thread-9495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:43:24.632 [DEBUG] [Thread-9495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:43:24.680 [DEBUG] [Thread-9495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:43:24.680 [DEBUG] [Thread-9495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:43:24.690 [DEBUG] [Thread-9495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:43:24.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:43:24.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:43:24.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:43:24.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:43:24.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:43:24.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:43:24.727 [DEBUG] [Thread-9495] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:43:26.392 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:34.238 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:34.239 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:35.991 [DEBUG] [Thread-9497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:36.736 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:47.092 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:51.048 [DEBUG] [Thread-9498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:43:54.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:43:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:43:55.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 43, 46), 30.84, 11.35, 0.0, 8.15, 19.6, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:43:55.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:43:46
2025-11-26T01:43:55.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:43:55.665 [DEBUG] [Thread-9499] [transport.py] [_log()] starting thread (client mode): 0x70d55930
2025-11-26T01:43:55.665 [DEBUG] [Thread-9499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:43:55.684 [DEBUG] [Thread-9499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:43:55.684 [INFO] [Thread-9499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] client lang: <none>
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] server lang: <none>
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] kex follows: False
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:43:55.686 [DEBUG] [Thread-9499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:43:55.687 [DEBUG] [Thread-9499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:43:55.687 [DEBUG] [Thread-9499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:43:55.687 [DEBUG] [Thread-9499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:43:55.687 [DEBUG] [Thread-9499] [transport.py] [_log()] Compression: none
2025-11-26T01:43:55.687 [DEBUG] [Thread-9499] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:43:55.704 [DEBUG] [Thread-9499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:43:55.705 [DEBUG] [Thread-9499] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:43:55.706 [DEBUG] [Thread-9499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:43:55.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:43:55.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:43:55.708 [DEBUG] [Thread-9499] [transport.py] [_log()] userauth is OK
2025-11-26T01:43:55.708 [DEBUG] [Thread-9499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:43:55.708 [DEBUG] [Thread-9499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:43:55.708 [DEBUG] [Thread-9499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:43:55.708 [DEBUG] [Thread-9499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:43:55.733 [INFO] [Thread-9499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:43:55.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:43:56.317 [DEBUG] [Thread-9499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:43:56.317 [DEBUG] [Thread-9499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:43:56.318 [DEBUG] [Thread-9499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:43:56.358 [DEBUG] [Thread-9499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:43:56.358 [DEBUG] [Thread-9499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:43:56.361 [DEBUG] [Thread-9499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:43:56.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:43:56.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:43:56.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:43:56.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:43:56.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:43:56.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:43:56.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:43:56.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:43:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:43:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.988291 -999.00  +20.10   7.26     16   -6.20 1 1 1 1 1     0    0 26.97 22.52 ZNESW 6.4 7.3 139.8 8.9 19.4 -26.3 19.3 -25.9 19.0 -24.4 19.2 -25.2
2025-11-26T01:43:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:43:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:43:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.988291
2025-11-26T01:43:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:43:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:43:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:43:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:43:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:43:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:43:46', tmtdew=30.84, humidity=11.35, cloud=0.0, wind=8.15, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:43:46', seeing=0.99, atlas_timestamp='2025-11-25T23:43:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:42:00')
2025-11-26T01:43:56.386 [DEBUG] [Thread-9499] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:43:56.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:43:56.478 [DEBUG] [Thread-9502] [transport.py] [_log()] starting thread (client mode): 0x70d57460
2025-11-26T01:43:56.478 [DEBUG] [Thread-9502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:43:56.492 [DEBUG] [Thread-9502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:43:56.493 [INFO] [Thread-9502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:43:56.500 [DEBUG] [Thread-9502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:43:56.500 [DEBUG] [Thread-9502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:43:56.500 [DEBUG] [Thread-9502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:43:56.500 [DEBUG] [Thread-9502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] client lang: <none>
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] server lang: <none>
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] kex follows: False
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:43:56.501 [DEBUG] [Thread-9502] [transport.py] [_log()] Compression: none
2025-11-26T01:43:56.502 [DEBUG] [Thread-9502] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:43:56.558 [DEBUG] [Thread-9502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:43:56.558 [DEBUG] [Thread-9502] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:43:56.559 [DEBUG] [Thread-9502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:43:56.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:43:56.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:43:56.616 [DEBUG] [Thread-9502] [transport.py] [_log()] userauth is OK
2025-11-26T01:43:56.616 [DEBUG] [Thread-9502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:43:56.616 [DEBUG] [Thread-9502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:43:56.616 [DEBUG] [Thread-9502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:43:56.616 [DEBUG] [Thread-9502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:43:56.631 [INFO] [Thread-9502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:43:56.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:43:56.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:43:57.442 [DEBUG] [Thread-9502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:43:57.442 [DEBUG] [Thread-9502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:43:57.475 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:43:57.490 [DEBUG] [Thread-9502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:43:57.490 [DEBUG] [Thread-9502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:43:57.499 [DEBUG] [Thread-9502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:43:57.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:43:57.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:43:57.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:43:57.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:43:57.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:43:57.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:43:57.537 [DEBUG] [Thread-9502] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:44:06.084 [DEBUG] [Thread-9504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:07.873 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:17.939 [DEBUG] [Thread-9505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:18.198 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:21.132 [DEBUG] [Thread-9506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:44:27.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:44:27.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:44:28.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 44, 18), 30.82, 11.37, 0.0, 8.33, 19.6, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:44:28.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:44:18
2025-11-26T01:44:28.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:44:28.464 [DEBUG] [Thread-9507] [transport.py] [_log()] starting thread (client mode): 0x70d54c10
2025-11-26T01:44:28.465 [DEBUG] [Thread-9507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:44:28.485 [DEBUG] [Thread-9507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:44:28.485 [INFO] [Thread-9507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] client lang: <none>
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] server lang: <none>
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] kex follows: False
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] Compression: none
2025-11-26T01:44:28.488 [DEBUG] [Thread-9507] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:44:28.504 [DEBUG] [Thread-9507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:44:28.505 [DEBUG] [Thread-9507] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:44:28.505 [DEBUG] [Thread-9507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:44:28.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:44:28.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:44:28.507 [DEBUG] [Thread-9507] [transport.py] [_log()] userauth is OK
2025-11-26T01:44:28.507 [DEBUG] [Thread-9507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:44:28.507 [DEBUG] [Thread-9507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:44:28.507 [DEBUG] [Thread-9507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:44:28.507 [DEBUG] [Thread-9507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:44:28.521 [INFO] [Thread-9507] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:44:28.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:44:28.618 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:29.144 [DEBUG] [Thread-9507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:44:29.144 [DEBUG] [Thread-9507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:44:29.145 [DEBUG] [Thread-9507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:44:29.185 [DEBUG] [Thread-9507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:44:29.185 [DEBUG] [Thread-9507] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:44:29.188 [DEBUG] [Thread-9507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:44:29.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:44:29.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:44:29.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:44:29.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:44:29.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:44:29.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:44:29.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:44:29.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:44:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:44:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.988985 -999.00  +20.10   6.59     16   -6.20 1 1 1 1 1     0    0 26.62 23.80 ZNESW 6.3 6.6 134.0 8.3 19.4 -26.2 19.2 -25.6 18.9 -24.3 19.2 -25.2
2025-11-26T01:44:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:44:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:44:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.988985
2025-11-26T01:44:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:44:29.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:44:29.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:44:29.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:44:29.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:44:29.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:44:18', tmtdew=30.82, humidity=11.37, cloud=0.0, wind=8.33, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:44:18', seeing=1.07, atlas_timestamp='2025-11-25T23:44:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:42:00')
2025-11-26T01:44:29.216 [DEBUG] [Thread-9507] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:44:29.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:44:29.322 [DEBUG] [Thread-9510] [transport.py] [_log()] starting thread (client mode): 0x70d568c0
2025-11-26T01:44:29.322 [DEBUG] [Thread-9510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:44:29.338 [DEBUG] [Thread-9510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:44:29.338 [INFO] [Thread-9510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:44:29.345 [DEBUG] [Thread-9510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:44:29.345 [DEBUG] [Thread-9510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:44:29.345 [DEBUG] [Thread-9510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] client lang: <none>
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] server lang: <none>
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] kex follows: False
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] Compression: none
2025-11-26T01:44:29.346 [DEBUG] [Thread-9510] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:44:29.409 [DEBUG] [Thread-9510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:44:29.409 [DEBUG] [Thread-9510] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:44:29.410 [DEBUG] [Thread-9510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:44:29.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:44:29.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:44:29.465 [DEBUG] [Thread-9510] [transport.py] [_log()] userauth is OK
2025-11-26T01:44:29.465 [DEBUG] [Thread-9510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:44:29.465 [DEBUG] [Thread-9510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:44:29.466 [DEBUG] [Thread-9510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:44:29.466 [DEBUG] [Thread-9510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:44:29.485 [INFO] [Thread-9510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:44:29.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:44:29.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:44:30.341 [DEBUG] [Thread-9510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:44:30.341 [DEBUG] [Thread-9510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:44:30.389 [DEBUG] [Thread-9510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:44:30.389 [DEBUG] [Thread-9510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:44:30.398 [DEBUG] [Thread-9510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:44:30.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:44:30.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:44:30.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:44:30.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:44:30.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:44:30.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:44:30.435 [DEBUG] [Thread-9510] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:44:34.441 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:34.442 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:36.165 [DEBUG] [Thread-9512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:39.039 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:49.396 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:51.212 [DEBUG] [Thread-9513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:44:59.760 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:00.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:45:00.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:45:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:45:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 44, 50), 30.98, 11.3, 0.0, 8.31, 19.6, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:45:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:44:50
2025-11-26T01:45:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:45:01.374 [DEBUG] [Thread-9514] [transport.py] [_log()] starting thread (client mode): 0x70d55480
2025-11-26T01:45:01.374 [DEBUG] [Thread-9514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:45:01.386 [DEBUG] [Thread-9514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:45:01.386 [INFO] [Thread-9514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:45:01.387 [DEBUG] [Thread-9514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] client lang: <none>
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] server lang: <none>
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] kex follows: False
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] Compression: none
2025-11-26T01:45:01.388 [DEBUG] [Thread-9514] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:45:01.395 [DEBUG] [Thread-9514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:45:01.396 [DEBUG] [Thread-9514] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:45:01.396 [DEBUG] [Thread-9514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:45:01.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:45:01.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:45:01.397 [DEBUG] [Thread-9514] [transport.py] [_log()] userauth is OK
2025-11-26T01:45:01.397 [DEBUG] [Thread-9514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:45:01.397 [DEBUG] [Thread-9514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:45:01.397 [DEBUG] [Thread-9514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:45:01.397 [DEBUG] [Thread-9514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:45:01.410 [INFO] [Thread-9514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:45:01.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:45:02.066 [DEBUG] [Thread-9514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:45:02.066 [DEBUG] [Thread-9514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:45:02.066 [DEBUG] [Thread-9514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:45:02.107 [DEBUG] [Thread-9514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:45:02.107 [DEBUG] [Thread-9514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:45:02.110 [DEBUG] [Thread-9514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:45:02.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:45:02.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:45:02.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:45:02.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:45:02.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:45:02.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:45:02.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.989332 -999.00  +20.10   6.57     16   -6.20 1 1 1 1 1     0    0 26.47 23.42 ZNESW 6.3 6.6 132.2 8.6 19.3 -26.3 19.3 -25.6 18.9 -24.3 19.2 -25.2
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.989332
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:45:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:44:50', tmtdew=30.98, humidity=11.3, cloud=0.0, wind=8.31, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:44:51', seeing=1.03, atlas_timestamp='2025-11-25T23:44:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:42:00')
2025-11-26T01:45:02.128 [DEBUG] [Thread-9514] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:45:02.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:45:02.212 [DEBUG] [Thread-9517] [transport.py] [_log()] starting thread (client mode): 0x70d68f40
2025-11-26T01:45:02.212 [DEBUG] [Thread-9517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:45:02.227 [DEBUG] [Thread-9517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:45:02.227 [INFO] [Thread-9517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] client lang: <none>
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] server lang: <none>
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] kex follows: False
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] Compression: none
2025-11-26T01:45:02.235 [DEBUG] [Thread-9517] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:45:02.294 [DEBUG] [Thread-9517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:45:02.294 [DEBUG] [Thread-9517] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:45:02.294 [DEBUG] [Thread-9517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:45:02.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:45:02.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:45:02.352 [DEBUG] [Thread-9517] [transport.py] [_log()] userauth is OK
2025-11-26T01:45:02.353 [DEBUG] [Thread-9517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:45:02.353 [DEBUG] [Thread-9517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:45:02.353 [DEBUG] [Thread-9517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:45:02.353 [DEBUG] [Thread-9517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:45:02.366 [INFO] [Thread-9517] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:45:02.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:45:02.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:45:03.191 [DEBUG] [Thread-9517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:45:03.191 [DEBUG] [Thread-9517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:45:03.239 [DEBUG] [Thread-9517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:45:03.239 [DEBUG] [Thread-9517] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:45:03.248 [DEBUG] [Thread-9517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:45:03.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:45:03.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:45:03.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:45:03.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:45:03.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:45:03.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:45:03.285 [DEBUG] [Thread-9517] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:45:06.241 [DEBUG] [Thread-9519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:10.215 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:18.027 [DEBUG] [Thread-9520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:20.579 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:21.294 [DEBUG] [Thread-9521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:30.989 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:33.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:45:33.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:45:33.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:45:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 45, 22), 30.94, 11.33, 0.0, 8.01, 19.56, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:45:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:45:22
2025-11-26T01:45:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:45:34.273 [DEBUG] [Thread-9522] [transport.py] [_log()] starting thread (client mode): 0x70d76f20
2025-11-26T01:45:34.273 [DEBUG] [Thread-9522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:45:34.293 [DEBUG] [Thread-9522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:45:34.293 [INFO] [Thread-9522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:45:34.296 [DEBUG] [Thread-9522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] client lang: <none>
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] server lang: <none>
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] kex follows: False
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] Compression: none
2025-11-26T01:45:34.297 [DEBUG] [Thread-9522] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:45:34.312 [DEBUG] [Thread-9522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:45:34.312 [DEBUG] [Thread-9522] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:45:34.312 [DEBUG] [Thread-9522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:45:34.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:45:34.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:45:34.313 [DEBUG] [Thread-9522] [transport.py] [_log()] userauth is OK
2025-11-26T01:45:34.313 [DEBUG] [Thread-9522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:45:34.313 [DEBUG] [Thread-9522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:45:34.313 [DEBUG] [Thread-9522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:45:34.313 [DEBUG] [Thread-9522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:45:34.322 [INFO] [Thread-9522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:45:34.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:45:34.657 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:34.658 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:34.965 [DEBUG] [Thread-9522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:45:34.965 [DEBUG] [Thread-9522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:45:34.965 [DEBUG] [Thread-9522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:45:35.006 [DEBUG] [Thread-9522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:45:35.006 [DEBUG] [Thread-9522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:45:35.009 [DEBUG] [Thread-9522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:45:35.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:45:35.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:45:35.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:45:35.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:45:35.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:45:35.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:45:35.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.989679 -999.00  +20.10   8.05     16   -6.20 1 1 1 1 1     0    0 26.97 24.28 ZNESW 6.2 8.1 134.2 8.9 19.3 -26.4 19.3 -25.6 18.9 -24.2 19.1 -25.2
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.989679
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:45:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:45:22', tmtdew=30.94, humidity=11.33, cloud=0.0, wind=8.01, temperature=19.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:45:23', seeing=1.68, atlas_timestamp='2025-11-25T23:45:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:42:00')
2025-11-26T01:45:35.026 [DEBUG] [Thread-9522] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:45:35.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:45:35.110 [DEBUG] [Thread-9525] [transport.py] [_log()] starting thread (client mode): 0x70d74970
2025-11-26T01:45:35.111 [DEBUG] [Thread-9525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:45:35.125 [DEBUG] [Thread-9525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:45:35.125 [INFO] [Thread-9525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] client lang: <none>
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] server lang: <none>
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] kex follows: False
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] Compression: none
2025-11-26T01:45:35.132 [DEBUG] [Thread-9525] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:45:35.187 [DEBUG] [Thread-9525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:45:35.187 [DEBUG] [Thread-9525] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:45:35.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:45:35.187 [DEBUG] [Thread-9525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:45:35.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:45:35.244 [DEBUG] [Thread-9525] [transport.py] [_log()] userauth is OK
2025-11-26T01:45:35.244 [DEBUG] [Thread-9525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:45:35.244 [DEBUG] [Thread-9525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:45:35.244 [DEBUG] [Thread-9525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:45:35.244 [DEBUG] [Thread-9525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:45:35.262 [INFO] [Thread-9525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:45:35.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:45:35.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:45:36.072 [DEBUG] [Thread-9525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:45:36.072 [DEBUG] [Thread-9525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:45:36.120 [DEBUG] [Thread-9525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:45:36.120 [DEBUG] [Thread-9525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:45:36.129 [DEBUG] [Thread-9525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:45:36.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:45:36.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:45:36.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:45:36.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:45:36.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:45:36.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:45:36.161 [DEBUG] [Thread-9525] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:45:36.326 [DEBUG] [Thread-9527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:41.359 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:51.368 [DEBUG] [Thread-9528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:45:51.704 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:02.034 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:06.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:46:06.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:46:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:46:06.405 [DEBUG] [Thread-9529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 45, 54), 30.93, 11.35, 0.0, 7.92, 19.63, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:46:06.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:45:54
2025-11-26T01:46:06.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:46:07.102 [DEBUG] [Thread-9530] [transport.py] [_log()] starting thread (client mode): 0x70dd1780
2025-11-26T01:46:07.102 [DEBUG] [Thread-9530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:46:07.122 [DEBUG] [Thread-9530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:46:07.123 [INFO] [Thread-9530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] client lang: <none>
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] server lang: <none>
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] kex follows: False
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] Compression: none
2025-11-26T01:46:07.126 [DEBUG] [Thread-9530] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:46:07.146 [DEBUG] [Thread-9530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:46:07.146 [DEBUG] [Thread-9530] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:46:07.147 [DEBUG] [Thread-9530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:46:07.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:46:07.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:46:07.149 [DEBUG] [Thread-9530] [transport.py] [_log()] userauth is OK
2025-11-26T01:46:07.149 [DEBUG] [Thread-9530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:46:07.149 [DEBUG] [Thread-9530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:46:07.149 [DEBUG] [Thread-9530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:46:07.149 [DEBUG] [Thread-9530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:46:07.174 [INFO] [Thread-9530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:46:07.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:46:07.803 [DEBUG] [Thread-9530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:46:07.804 [DEBUG] [Thread-9530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:46:07.804 [DEBUG] [Thread-9530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:46:07.845 [DEBUG] [Thread-9530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:46:07.845 [DEBUG] [Thread-9530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:46:07.849 [DEBUG] [Thread-9530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:46:07.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:46:07.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:46:07.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:46:07.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:46:07.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:46:07.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:46:07.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:46:07.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:46:07.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:46:07.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.990027 -999.00  +20.10   7.41     16   -6.20 1 1 1 1 1     0    0 27.13 24.08 ZNESW 8.5 7.4 135.4 8.5 19.4 -26.2 19.3 -25.7 18.9 -24.0 19.2 -25.2
2025-11-26T01:46:07.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:46:07.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:46:07.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.990027
2025-11-26T01:46:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:46:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:46:07.873 [DEBUG] [Thread-9530] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:46:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:46:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:46:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:46:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:45:54', tmtdew=30.93, humidity=11.35, cloud=0.0, wind=7.92, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:45:55', seeing=1.01, atlas_timestamp='2025-11-25T23:45:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04675000000000118, -0.0417500000000004, 0.025249999999999773, 0.013500000000000512, -0.019999999999999574, 0.05325000000000024, -0.04100000000000037, -0.031749999999998835, 0.007499999999998508, -0.036999999999999034, 0.003249999999999531, -0.026999999999999247, 0.04299999999999926, 0.051750000000000185, -0.034000000000000696, -0.07200000000000095, -0.028750000000000497, -0.02800000000000047, -0.02400000000000091, -0.04275000000000162, 0.05599999999999916, 0.06374999999999886, 0.015249999999999986, -0.023249999999999105, 0.0009999999999994458, -0.0365000000000002, -0.028249999999999886, 0.00849999999999973, 0.08200000000000074, 0.05450000000000088, 0.0470000000000006, -0.06149999999999878, -0.04225000000000101], zp_timestamp='2025-11-25T23:42:00')
2025-11-26T01:46:07.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:46:07.969 [DEBUG] [Thread-9533] [transport.py] [_log()] starting thread (client mode): 0x70d39ae0
2025-11-26T01:46:07.969 [DEBUG] [Thread-9533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:46:07.985 [DEBUG] [Thread-9533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:46:07.985 [INFO] [Thread-9533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:46:07.993 [DEBUG] [Thread-9533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] client lang: <none>
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] server lang: <none>
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] kex follows: False
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:46:07.994 [DEBUG] [Thread-9533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:46:07.995 [DEBUG] [Thread-9533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:46:07.995 [DEBUG] [Thread-9533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:46:07.995 [DEBUG] [Thread-9533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:46:07.995 [DEBUG] [Thread-9533] [transport.py] [_log()] Compression: none
2025-11-26T01:46:07.995 [DEBUG] [Thread-9533] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:46:08.049 [DEBUG] [Thread-9533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:46:08.049 [DEBUG] [Thread-9533] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:46:08.049 [DEBUG] [Thread-9533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:46:08.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:46:08.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:46:08.107 [DEBUG] [Thread-9533] [transport.py] [_log()] userauth is OK
2025-11-26T01:46:08.107 [DEBUG] [Thread-9533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:46:08.107 [DEBUG] [Thread-9533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:46:08.107 [DEBUG] [Thread-9533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:46:08.107 [DEBUG] [Thread-9533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:46:08.121 [INFO] [Thread-9533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:46:08.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:46:08.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:46:09.008 [DEBUG] [Thread-9533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:46:09.008 [DEBUG] [Thread-9533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:46:09.056 [DEBUG] [Thread-9533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:46:09.056 [DEBUG] [Thread-9533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:46:09.064 [DEBUG] [Thread-9533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:46:09.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:46:09.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:46:09.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:46:09.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:46:09.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:46:09.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:46:09.096 [DEBUG] [Thread-9533] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:46:12.371 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:18.093 [DEBUG] [Thread-9535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:21.436 [DEBUG] [Thread-9536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:22.715 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:33.035 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:34.860 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:34.861 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:36.489 [DEBUG] [Thread-9537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:39.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:46:39.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:46:39.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:46:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 46, 26), 30.95, 11.33, 0.0, 8.14, 19.63, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:46:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:46:26
2025-11-26T01:46:39.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:46:40.038 [DEBUG] [Thread-9538] [transport.py] [_log()] starting thread (client mode): 0x70d55a20
2025-11-26T01:46:40.038 [DEBUG] [Thread-9538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:46:40.058 [DEBUG] [Thread-9538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:46:40.058 [INFO] [Thread-9538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:46:40.061 [DEBUG] [Thread-9538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:46:40.061 [DEBUG] [Thread-9538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] client lang: <none>
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] server lang: <none>
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] kex follows: False
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] Compression: none
2025-11-26T01:46:40.062 [DEBUG] [Thread-9538] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:46:40.080 [DEBUG] [Thread-9538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:46:40.080 [DEBUG] [Thread-9538] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:46:40.081 [DEBUG] [Thread-9538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:46:40.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:46:40.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:46:40.083 [DEBUG] [Thread-9538] [transport.py] [_log()] userauth is OK
2025-11-26T01:46:40.083 [DEBUG] [Thread-9538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:46:40.083 [DEBUG] [Thread-9538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:46:40.083 [DEBUG] [Thread-9538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:46:40.084 [DEBUG] [Thread-9538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:46:40.104 [INFO] [Thread-9538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:46:40.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:46:40.715 [DEBUG] [Thread-9538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:46:40.716 [DEBUG] [Thread-9538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:46:40.717 [DEBUG] [Thread-9538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:46:40.757 [DEBUG] [Thread-9538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:46:40.757 [DEBUG] [Thread-9538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:46:40.761 [DEBUG] [Thread-9538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:46:40.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:46:40.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:46:40.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:46:40.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:46:40.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:46:40.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:46:40.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:46:40.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:46:40.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:46:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.990374 -999.00  +20.10   6.96     16   -6.20 1 1 1 1 1     0    0 26.91 23.06 ZNESW 7.6 7.0 130.0 8.4 19.3 -26.2 19.2 -25.6 18.9 -24.2 19.2 -25.2
2025-11-26T01:46:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:46:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:46:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.990374
2025-11-26T01:46:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:46:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:46:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:46:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:46:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:46:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:46:26', tmtdew=30.95, humidity=11.33, cloud=0.0, wind=8.14, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:46:27', seeing=0.81, atlas_timestamp='2025-11-25T23:46:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.043250000000000455, -0.015249999999999986, -0.009000000000000341, -0.0259999999999998, 0.006250000000001421, -0.051000000000000156, -0.04124999999999801, -0.0045000000000001705, -0.05299999999999905, -0.018250000000001876, -0.025000000000000355, 0.08499999999999908, 0.0962499999999995, -0.03300000000000125, -0.0730000000000004, -0.02275000000000027, -0.03850000000000087, -0.026000000000001577, -0.06875000000000142, 0.03249999999999886, 0.04574999999999818, 0.04125000000000156, -0.028750000000000497, -0.02000000000000135, 0.0005000000000006111, -0.0442499999999999, 0.04300000000000104, 0.10549999999999926, 0.05349999999999966, 0.051000000000000156, -0.03500000000000014, -0.020749999999999602], zp_timestamp='2025-11-25T23:45:00')
2025-11-26T01:46:40.788 [DEBUG] [Thread-9538] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:46:40.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:46:43.374 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:51.524 [DEBUG] [Thread-9541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:46:53.700 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:04.046 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:06.585 [DEBUG] [Thread-9542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:14.387 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:18.164 [DEBUG] [Thread-9543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:21.622 [DEBUG] [Thread-9544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:24.727 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:35.063 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:35.064 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:35.072 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:36.654 [DEBUG] [Thread-9545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:45.407 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:51.694 [DEBUG] [Thread-9546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:47:55.818 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:06.137 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:06.726 [DEBUG] [Thread-9547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:16.483 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:18.232 [DEBUG] [Thread-9548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:21.759 [DEBUG] [Thread-9549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:26.818 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:35.267 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:35.267 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:36.795 [DEBUG] [Thread-9550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:37.164 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:47.505 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:51.827 [DEBUG] [Thread-9551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:48:52.557 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T01:48:57.827 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:06.862 [DEBUG] [Thread-9552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:08.176 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:18.303 [DEBUG] [Thread-9553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:18.499 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:21.894 [DEBUG] [Thread-9554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:49:22.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:49:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:49:23.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 49, 7), 31.14, 11.27, 0.0, 7.5, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:49:23.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:49:07
2025-11-26T01:49:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:49:23.512 [DEBUG] [Thread-9555] [transport.py] [_log()] starting thread (client mode): 0x70d57f10
2025-11-26T01:49:23.512 [DEBUG] [Thread-9555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:49:23.533 [DEBUG] [Thread-9555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:49:23.533 [INFO] [Thread-9555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:49:23.536 [DEBUG] [Thread-9555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:49:23.536 [DEBUG] [Thread-9555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:49:23.536 [DEBUG] [Thread-9555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:49:23.536 [DEBUG] [Thread-9555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:49:23.536 [DEBUG] [Thread-9555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:49:23.536 [DEBUG] [Thread-9555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:49:23.536 [DEBUG] [Thread-9555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] client lang: <none>
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] server lang: <none>
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] kex follows: False
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] Compression: none
2025-11-26T01:49:23.537 [DEBUG] [Thread-9555] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:49:23.555 [DEBUG] [Thread-9555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:49:23.555 [DEBUG] [Thread-9555] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:49:23.556 [DEBUG] [Thread-9555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:49:23.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:49:23.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:49:23.558 [DEBUG] [Thread-9555] [transport.py] [_log()] userauth is OK
2025-11-26T01:49:23.559 [DEBUG] [Thread-9555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:49:23.559 [DEBUG] [Thread-9555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:49:23.559 [DEBUG] [Thread-9555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:49:23.559 [DEBUG] [Thread-9555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:49:23.584 [INFO] [Thread-9555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:49:23.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:49:24.240 [DEBUG] [Thread-9555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:49:24.240 [DEBUG] [Thread-9555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:49:24.241 [DEBUG] [Thread-9555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:49:24.282 [DEBUG] [Thread-9555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:49:24.282 [DEBUG] [Thread-9555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:49:24.285 [DEBUG] [Thread-9555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:49:24.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:49:24.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:49:24.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:49:24.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:49:24.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:49:24.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:49:24.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.992110 -999.00  +20.20   7.29     16   -6.10 1 1 1 1 1     0    0 26.59 27.61 ZNESW 7.3 7.3 126.8 9.0 19.4 -26.1 19.3 -25.5 18.9 -24.1 19.2 -25.0
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.992110
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:49:24.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:49:07', tmtdew=31.14, humidity=11.27, cloud=0.0, wind=7.5, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:49:07', seeing=0.67, atlas_timestamp='2025-11-25T23:48:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.043250000000000455, -0.015249999999999986, -0.009000000000000341, -0.0259999999999998, 0.006250000000001421, -0.051000000000000156, -0.04124999999999801, -0.0045000000000001705, -0.05299999999999905, -0.018250000000001876, -0.025000000000000355, 0.08499999999999908, 0.0962499999999995, -0.03300000000000125, -0.0730000000000004, -0.02275000000000027, -0.03850000000000087, -0.026000000000001577, -0.06875000000000142, 0.03249999999999886, 0.04574999999999818, 0.04125000000000156, -0.028750000000000497, -0.02000000000000135, 0.0005000000000006111, -0.0442499999999999, 0.04300000000000104, 0.10549999999999926, 0.05349999999999966, 0.051000000000000156, -0.03500000000000014, -0.020749999999999602], zp_timestamp='2025-11-25T23:45:00')
2025-11-26T01:49:24.311 [DEBUG] [Thread-9555] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:49:24.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:49:24.395 [DEBUG] [Thread-9558] [transport.py] [_log()] starting thread (client mode): 0x70dd2800
2025-11-26T01:49:24.395 [DEBUG] [Thread-9558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:49:24.410 [DEBUG] [Thread-9558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:49:24.410 [INFO] [Thread-9558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:49:24.418 [DEBUG] [Thread-9558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:49:24.418 [DEBUG] [Thread-9558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:49:24.418 [DEBUG] [Thread-9558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:49:24.418 [DEBUG] [Thread-9558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:49:24.418 [DEBUG] [Thread-9558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:49:24.418 [DEBUG] [Thread-9558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:49:24.418 [DEBUG] [Thread-9558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:49:24.418 [DEBUG] [Thread-9558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:49:24.418 [DEBUG] [Thread-9558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] client lang: <none>
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] server lang: <none>
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] kex follows: False
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] Compression: none
2025-11-26T01:49:24.419 [DEBUG] [Thread-9558] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:49:24.482 [DEBUG] [Thread-9558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:49:24.483 [DEBUG] [Thread-9558] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:49:24.484 [DEBUG] [Thread-9558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:49:24.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:49:24.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:49:24.539 [DEBUG] [Thread-9558] [transport.py] [_log()] userauth is OK
2025-11-26T01:49:24.539 [DEBUG] [Thread-9558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:49:24.539 [DEBUG] [Thread-9558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:49:24.539 [DEBUG] [Thread-9558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:49:24.539 [DEBUG] [Thread-9558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:49:24.559 [INFO] [Thread-9558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:49:24.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:49:24.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:49:25.390 [DEBUG] [Thread-9558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:49:25.391 [DEBUG] [Thread-9558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:49:25.439 [DEBUG] [Thread-9558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:49:25.439 [DEBUG] [Thread-9558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:49:25.448 [DEBUG] [Thread-9558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:49:25.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:49:25.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:49:25.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:49:25.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:49:25.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:49:25.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:49:25.485 [DEBUG] [Thread-9558] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:49:28.838 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:35.469 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:35.470 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:36.932 [DEBUG] [Thread-9560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:39.179 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:49.521 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:51.993 [DEBUG] [Thread-9561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:49:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:49:55.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:49:55.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:49:56.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 49, 38), 31.08, 11.28, 0.0, 7.71, 19.85, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:49:56.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:49:38
2025-11-26T01:49:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:49:56.490 [DEBUG] [Thread-9562] [transport.py] [_log()] starting thread (client mode): 0x70dd28f0
2025-11-26T01:49:56.490 [DEBUG] [Thread-9562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:49:56.510 [DEBUG] [Thread-9562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:49:56.510 [INFO] [Thread-9562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:49:56.512 [DEBUG] [Thread-9562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:49:56.512 [DEBUG] [Thread-9562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:49:56.512 [DEBUG] [Thread-9562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:49:56.512 [DEBUG] [Thread-9562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:49:56.512 [DEBUG] [Thread-9562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:49:56.512 [DEBUG] [Thread-9562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] client lang: <none>
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] server lang: <none>
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] kex follows: False
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] Compression: none
2025-11-26T01:49:56.513 [DEBUG] [Thread-9562] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:49:56.528 [DEBUG] [Thread-9562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:49:56.528 [DEBUG] [Thread-9562] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:49:56.528 [DEBUG] [Thread-9562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:49:56.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:49:56.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:49:56.529 [DEBUG] [Thread-9562] [transport.py] [_log()] userauth is OK
2025-11-26T01:49:56.529 [DEBUG] [Thread-9562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:49:56.529 [DEBUG] [Thread-9562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:49:56.529 [DEBUG] [Thread-9562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:49:56.529 [DEBUG] [Thread-9562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:49:56.548 [INFO] [Thread-9562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:49:56.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:49:57.208 [DEBUG] [Thread-9562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:49:57.209 [DEBUG] [Thread-9562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:49:57.209 [DEBUG] [Thread-9562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:49:57.249 [DEBUG] [Thread-9562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:49:57.249 [DEBUG] [Thread-9562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:49:57.251 [DEBUG] [Thread-9562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:49:57.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:49:57.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:49:57.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:49:57.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:49:57.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:49:57.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:49:57.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:49:57.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:49:57.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:49:57.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.992457 -999.00  +20.10   6.94     16   -6.20 1 1 1 1 1     0    0 27.14 28.59 ZNESW 7.3 6.9 125.4 8.5 19.4 -26.0 19.3 -25.4 18.9 -24.0 19.2 -25.2
2025-11-26T01:49:57.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:49:57.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:49:57.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.992457
2025-11-26T01:49:57.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:49:57.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:49:57.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:49:57.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:49:57.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:49:57.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:49:38', tmtdew=31.08, humidity=11.28, cloud=0.0, wind=7.71, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:49:39', seeing=0.78, atlas_timestamp='2025-11-25T23:49:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.043250000000000455, -0.015249999999999986, -0.009000000000000341, -0.0259999999999998, 0.006250000000001421, -0.051000000000000156, -0.04124999999999801, -0.0045000000000001705, -0.05299999999999905, -0.018250000000001876, -0.025000000000000355, 0.08499999999999908, 0.0962499999999995, -0.03300000000000125, -0.0730000000000004, -0.02275000000000027, -0.03850000000000087, -0.026000000000001577, -0.06875000000000142, 0.03249999999999886, 0.04574999999999818, 0.04125000000000156, -0.028750000000000497, -0.02000000000000135, 0.0005000000000006111, -0.0442499999999999, 0.04300000000000104, 0.10549999999999926, 0.05349999999999966, 0.051000000000000156, -0.03500000000000014, -0.020749999999999602], zp_timestamp='2025-11-25T23:48:00')
2025-11-26T01:49:57.269 [DEBUG] [Thread-9562] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:49:57.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:49:57.354 [DEBUG] [Thread-9565] [transport.py] [_log()] starting thread (client mode): 0x70d56920
2025-11-26T01:49:57.354 [DEBUG] [Thread-9565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:49:57.369 [DEBUG] [Thread-9565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:49:57.369 [INFO] [Thread-9565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:49:57.376 [DEBUG] [Thread-9565] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] client lang: <none>
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] server lang: <none>
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] kex follows: False
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] Compression: none
2025-11-26T01:49:57.377 [DEBUG] [Thread-9565] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:49:57.431 [DEBUG] [Thread-9565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:49:57.431 [DEBUG] [Thread-9565] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:49:57.432 [DEBUG] [Thread-9565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:49:57.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:49:57.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:49:57.489 [DEBUG] [Thread-9565] [transport.py] [_log()] userauth is OK
2025-11-26T01:49:57.489 [DEBUG] [Thread-9565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:49:57.489 [DEBUG] [Thread-9565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:49:57.489 [DEBUG] [Thread-9565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:49:57.489 [DEBUG] [Thread-9565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:49:57.503 [INFO] [Thread-9565] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:49:57.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:49:57.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:49:58.314 [DEBUG] [Thread-9565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:49:58.314 [DEBUG] [Thread-9565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:49:58.364 [DEBUG] [Thread-9565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:49:58.364 [DEBUG] [Thread-9565] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:49:58.377 [DEBUG] [Thread-9565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:49:58.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:49:58.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:49:58.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:49:58.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:49:58.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:49:58.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:49:58.422 [DEBUG] [Thread-9565] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:49:59.863 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:07.027 [DEBUG] [Thread-9567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:10.181 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:18.380 [DEBUG] [Thread-9568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:20.525 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:22.085 [DEBUG] [Thread-9569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:28.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:50:28.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:50:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:50:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 50, 10), 31.25, 11.15, 0.0, 7.75, 19.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:50:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:50:10
2025-11-26T01:50:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:50:29.367 [DEBUG] [Thread-9570] [transport.py] [_log()] starting thread (client mode): 0x70dd3580
2025-11-26T01:50:29.367 [DEBUG] [Thread-9570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:50:29.388 [DEBUG] [Thread-9570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:50:29.389 [INFO] [Thread-9570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:50:29.392 [DEBUG] [Thread-9570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:50:29.392 [DEBUG] [Thread-9570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:50:29.392 [DEBUG] [Thread-9570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:50:29.392 [DEBUG] [Thread-9570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:50:29.392 [DEBUG] [Thread-9570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:50:29.392 [DEBUG] [Thread-9570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:50:29.392 [DEBUG] [Thread-9570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] client lang: <none>
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] server lang: <none>
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] kex follows: False
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:50:29.393 [DEBUG] [Thread-9570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:50:29.394 [DEBUG] [Thread-9570] [transport.py] [_log()] Compression: none
2025-11-26T01:50:29.394 [DEBUG] [Thread-9570] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:50:29.414 [DEBUG] [Thread-9570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:50:29.415 [DEBUG] [Thread-9570] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:50:29.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:50:29.417 [DEBUG] [Thread-9570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:50:29.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:50:29.419 [DEBUG] [Thread-9570] [transport.py] [_log()] userauth is OK
2025-11-26T01:50:29.419 [DEBUG] [Thread-9570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:50:29.419 [DEBUG] [Thread-9570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:50:29.420 [DEBUG] [Thread-9570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:50:29.420 [DEBUG] [Thread-9570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:50:29.456 [INFO] [Thread-9570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:50:29.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:50:30.109 [DEBUG] [Thread-9570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:50:30.109 [DEBUG] [Thread-9570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:50:30.109 [DEBUG] [Thread-9570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:50:30.150 [DEBUG] [Thread-9570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:50:30.150 [DEBUG] [Thread-9570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:50:30.152 [DEBUG] [Thread-9570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:50:30.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:50:30.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:50:30.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:50:30.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:50:30.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:50:30.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:50:30.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.992805 -999.00  +20.20   5.69     16   -6.10 1 1 1 1 1     0    0 27.17 27.78 ZNESW 7.1 5.7 138.0 8.5 19.4 -26.0 19.3 -25.4 18.9 -24.0 19.2 -24.9
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.992805
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:50:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:50:10', tmtdew=31.25, humidity=11.15, cloud=0.0, wind=7.75, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:50:11', seeing=0.78, atlas_timestamp='2025-11-25T23:49:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.043250000000000455, -0.015249999999999986, -0.009000000000000341, -0.0259999999999998, 0.006250000000001421, -0.051000000000000156, -0.04124999999999801, -0.0045000000000001705, -0.05299999999999905, -0.018250000000001876, -0.025000000000000355, 0.08499999999999908, 0.0962499999999995, -0.03300000000000125, -0.0730000000000004, -0.02275000000000027, -0.03850000000000087, -0.026000000000001577, -0.06875000000000142, 0.03249999999999886, 0.04574999999999818, 0.04125000000000156, -0.028750000000000497, -0.02000000000000135, 0.0005000000000006111, -0.0442499999999999, 0.04300000000000104, 0.10549999999999926, 0.05349999999999966, 0.051000000000000156, -0.03500000000000014, -0.020749999999999602], zp_timestamp='2025-11-25T23:48:00')
2025-11-26T01:50:30.172 [DEBUG] [Thread-9570] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:50:30.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:50:30.257 [DEBUG] [Thread-9573] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-26T01:50:30.257 [DEBUG] [Thread-9573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:50:30.272 [DEBUG] [Thread-9573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:50:30.272 [INFO] [Thread-9573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] client lang: <none>
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] server lang: <none>
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] kex follows: False
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] Compression: none
2025-11-26T01:50:30.280 [DEBUG] [Thread-9573] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:50:30.342 [DEBUG] [Thread-9573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:50:30.342 [DEBUG] [Thread-9573] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:50:30.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:50:30.343 [DEBUG] [Thread-9573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:50:30.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:50:30.400 [DEBUG] [Thread-9573] [transport.py] [_log()] userauth is OK
2025-11-26T01:50:30.400 [DEBUG] [Thread-9573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:50:30.400 [DEBUG] [Thread-9573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:50:30.400 [DEBUG] [Thread-9573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:50:30.400 [DEBUG] [Thread-9573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:50:30.414 [INFO] [Thread-9573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:50:30.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:50:30.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:50:30.846 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:31.255 [DEBUG] [Thread-9573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:50:31.255 [DEBUG] [Thread-9573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:50:31.303 [DEBUG] [Thread-9573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:50:31.303 [DEBUG] [Thread-9573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:50:31.311 [DEBUG] [Thread-9573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:50:31.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:50:31.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:50:31.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:50:31.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:50:31.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:50:31.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:50:31.343 [DEBUG] [Thread-9573] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:50:35.672 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:35.673 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:37.117 [DEBUG] [Thread-9575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:41.195 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:51.532 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:50:52.167 [DEBUG] [Thread-9576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:01.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:51:01.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:51:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:51:01.857 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:02.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 50, 42), 31.28, 11.15, 0.0, 7.5, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:51:02.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:50:42
2025-11-26T01:51:02.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:51:02.310 [DEBUG] [Thread-9577] [transport.py] [_log()] starting thread (client mode): 0x70d39390
2025-11-26T01:51:02.310 [DEBUG] [Thread-9577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:51:02.329 [DEBUG] [Thread-9577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:51:02.329 [INFO] [Thread-9577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:51:02.332 [DEBUG] [Thread-9577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:51:02.332 [DEBUG] [Thread-9577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] client lang: <none>
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] server lang: <none>
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] kex follows: False
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] Compression: none
2025-11-26T01:51:02.333 [DEBUG] [Thread-9577] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:51:02.350 [DEBUG] [Thread-9577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:51:02.350 [DEBUG] [Thread-9577] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:51:02.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:51:02.351 [DEBUG] [Thread-9577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:51:02.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:51:02.353 [DEBUG] [Thread-9577] [transport.py] [_log()] userauth is OK
2025-11-26T01:51:02.354 [DEBUG] [Thread-9577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:51:02.354 [DEBUG] [Thread-9577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:51:02.354 [DEBUG] [Thread-9577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:51:02.354 [DEBUG] [Thread-9577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:51:02.389 [INFO] [Thread-9577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:51:02.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:51:03.014 [DEBUG] [Thread-9577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:51:03.014 [DEBUG] [Thread-9577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:51:03.015 [DEBUG] [Thread-9577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:51:03.055 [DEBUG] [Thread-9577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:51:03.056 [DEBUG] [Thread-9577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:51:03.058 [DEBUG] [Thread-9577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:51:03.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:51:03.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:51:03.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:51:03.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:51:03.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:51:03.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:51:03.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:51:03.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:51:03.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:51:03.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.993152 -999.00  +20.20   6.11     16   -6.20 1 1 1 1 1     0    0 26.52 26.65 ZNESW 6.2 6.1 125.6 7.3 19.4 -26.0 19.3 -25.4 18.9 -24.1 19.2 -25.0
2025-11-26T01:51:03.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:51:03.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:51:03.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.993152
2025-11-26T01:51:03.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:51:03.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:51:03.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:51:03.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:51:03.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:51:03.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:50:42', tmtdew=31.28, humidity=11.15, cloud=0.0, wind=7.5, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:50:43', seeing=0.72, atlas_timestamp='2025-11-25T23:50:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.043250000000000455, -0.015249999999999986, -0.009000000000000341, -0.0259999999999998, 0.006250000000001421, -0.051000000000000156, -0.04124999999999801, -0.0045000000000001705, -0.05299999999999905, -0.018250000000001876, -0.025000000000000355, 0.08499999999999908, 0.0962499999999995, -0.03300000000000125, -0.0730000000000004, -0.02275000000000027, -0.03850000000000087, -0.026000000000001577, -0.06875000000000142, 0.03249999999999886, 0.04574999999999818, 0.04125000000000156, -0.028750000000000497, -0.02000000000000135, 0.0005000000000006111, -0.0442499999999999, 0.04300000000000104, 0.10549999999999926, 0.05349999999999966, 0.051000000000000156, -0.03500000000000014, -0.020749999999999602], zp_timestamp='2025-11-25T23:48:00')
2025-11-26T01:51:03.084 [DEBUG] [Thread-9577] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:51:03.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:51:03.185 [DEBUG] [Thread-9580] [transport.py] [_log()] starting thread (client mode): 0x70d3ab90
2025-11-26T01:51:03.186 [DEBUG] [Thread-9580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:51:03.201 [DEBUG] [Thread-9580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:51:03.201 [INFO] [Thread-9580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] client lang: <none>
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] server lang: <none>
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] kex follows: False
2025-11-26T01:51:03.213 [DEBUG] [Thread-9580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:51:03.214 [DEBUG] [Thread-9580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:51:03.214 [DEBUG] [Thread-9580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:51:03.214 [DEBUG] [Thread-9580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:51:03.214 [DEBUG] [Thread-9580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:51:03.214 [DEBUG] [Thread-9580] [transport.py] [_log()] Compression: none
2025-11-26T01:51:03.214 [DEBUG] [Thread-9580] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:51:03.267 [DEBUG] [Thread-9580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:51:03.268 [DEBUG] [Thread-9580] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:51:03.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:51:03.268 [DEBUG] [Thread-9580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:51:03.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:51:03.327 [DEBUG] [Thread-9580] [transport.py] [_log()] userauth is OK
2025-11-26T01:51:03.327 [DEBUG] [Thread-9580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:51:03.327 [DEBUG] [Thread-9580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:51:03.328 [DEBUG] [Thread-9580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:51:03.328 [DEBUG] [Thread-9580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:51:03.347 [INFO] [Thread-9580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:51:03.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:51:03.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:51:04.195 [DEBUG] [Thread-9580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:51:04.195 [DEBUG] [Thread-9580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:51:04.242 [DEBUG] [Thread-9580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:51:04.242 [DEBUG] [Thread-9580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:51:04.252 [DEBUG] [Thread-9580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:51:04.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:51:04.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:51:04.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:51:04.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:51:04.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:51:04.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:51:04.289 [DEBUG] [Thread-9580] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:51:07.203 [DEBUG] [Thread-9582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:12.199 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:18.458 [DEBUG] [Thread-9583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:22.257 [DEBUG] [Thread-9584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:22.521 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:32.906 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:51:34.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:51:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:51:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 51, 14), 31.35, 11.08, 0.0, 7.57, 20.08, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:51:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:51:14
2025-11-26T01:51:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:51:35.240 [DEBUG] [Thread-9585] [transport.py] [_log()] starting thread (client mode): 0x70d57490
2025-11-26T01:51:35.240 [DEBUG] [Thread-9585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:51:35.260 [DEBUG] [Thread-9585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:51:35.260 [INFO] [Thread-9585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:51:35.263 [DEBUG] [Thread-9585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:51:35.263 [DEBUG] [Thread-9585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:51:35.263 [DEBUG] [Thread-9585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] client lang: <none>
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] server lang: <none>
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] kex follows: False
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:51:35.264 [DEBUG] [Thread-9585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:51:35.265 [DEBUG] [Thread-9585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:51:35.265 [DEBUG] [Thread-9585] [transport.py] [_log()] Compression: none
2025-11-26T01:51:35.265 [DEBUG] [Thread-9585] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:51:35.286 [DEBUG] [Thread-9585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:51:35.287 [DEBUG] [Thread-9585] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:51:35.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:51:35.288 [DEBUG] [Thread-9585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:51:35.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:51:35.290 [DEBUG] [Thread-9585] [transport.py] [_log()] userauth is OK
2025-11-26T01:51:35.290 [DEBUG] [Thread-9585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:51:35.290 [DEBUG] [Thread-9585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:51:35.291 [DEBUG] [Thread-9585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:51:35.291 [DEBUG] [Thread-9585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:51:35.308 [INFO] [Thread-9585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:51:35.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:51:35.861 [DEBUG] [Thread-9585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:51:35.861 [DEBUG] [Thread-9585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:51:35.861 [DEBUG] [Thread-9585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:51:35.875 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:35.876 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:35.902 [DEBUG] [Thread-9585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:51:35.902 [DEBUG] [Thread-9585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:51:35.905 [DEBUG] [Thread-9585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:51:35.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:51:35.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:51:35.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:51:35.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:51:35.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:51:35.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:51:35.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:51:35.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:51:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:51:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.993846 -999.00  +20.20   5.13     16   -6.10 1 1 1 1 1     0    0 26.82 22.44 ZNESW 5.9 5.1 120.4 7.0 19.4 -26.0 19.3 -25.4 18.9 -23.9 19.2 -25.3
2025-11-26T01:51:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:51:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:51:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.993846
2025-11-26T01:51:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:51:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:51:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:51:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:51:35.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:51:35.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:51:14', tmtdew=31.35, humidity=11.08, cloud=0.0, wind=7.57, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:51:15', seeing=0.73, atlas_timestamp='2025-11-25T23:51:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.043250000000000455, -0.015249999999999986, -0.009000000000000341, -0.0259999999999998, 0.006250000000001421, -0.051000000000000156, -0.04124999999999801, -0.0045000000000001705, -0.05299999999999905, -0.018250000000001876, -0.025000000000000355, 0.08499999999999908, 0.0962499999999995, -0.03300000000000125, -0.0730000000000004, -0.02275000000000027, -0.03850000000000087, -0.026000000000001577, -0.06875000000000142, 0.03249999999999886, 0.04574999999999818, 0.04125000000000156, -0.028750000000000497, -0.02000000000000135, 0.0005000000000006111, -0.0442499999999999, 0.04300000000000104, 0.10549999999999926, 0.05349999999999966, 0.051000000000000156, -0.03500000000000014, -0.020749999999999602], zp_timestamp='2025-11-25T23:48:00')
2025-11-26T01:51:35.930 [DEBUG] [Thread-9585] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:51:36.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:51:36.026 [DEBUG] [Thread-9588] [transport.py] [_log()] starting thread (client mode): 0x70d3a290
2025-11-26T01:51:36.026 [DEBUG] [Thread-9588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:51:36.041 [DEBUG] [Thread-9588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:51:36.041 [INFO] [Thread-9588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] client lang: <none>
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] server lang: <none>
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] kex follows: False
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:51:36.049 [DEBUG] [Thread-9588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:51:36.050 [DEBUG] [Thread-9588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:51:36.050 [DEBUG] [Thread-9588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:51:36.050 [DEBUG] [Thread-9588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:51:36.050 [DEBUG] [Thread-9588] [transport.py] [_log()] Compression: none
2025-11-26T01:51:36.050 [DEBUG] [Thread-9588] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:51:36.106 [DEBUG] [Thread-9588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:51:36.107 [DEBUG] [Thread-9588] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:51:36.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:51:36.108 [DEBUG] [Thread-9588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:51:36.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:51:36.162 [DEBUG] [Thread-9588] [transport.py] [_log()] userauth is OK
2025-11-26T01:51:36.163 [DEBUG] [Thread-9588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:51:36.163 [DEBUG] [Thread-9588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:51:36.163 [DEBUG] [Thread-9588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:51:36.163 [DEBUG] [Thread-9588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:51:36.181 [INFO] [Thread-9588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:51:36.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:51:36.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:51:37.027 [DEBUG] [Thread-9588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:51:37.028 [DEBUG] [Thread-9588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:51:37.076 [DEBUG] [Thread-9588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:51:37.076 [DEBUG] [Thread-9588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:51:37.085 [DEBUG] [Thread-9588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:51:37.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:51:37.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:51:37.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:51:37.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:51:37.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:51:37.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:51:37.122 [DEBUG] [Thread-9588] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:51:37.295 [DEBUG] [Thread-9590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:43.264 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:52.345 [DEBUG] [Thread-9591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:51:53.621 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:04.021 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:52:07.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:52:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:52:07.380 [DEBUG] [Thread-9592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:07.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 51, 46), 31.5, 11.02, 0.0, 7.57, 20.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:52:07.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:51:46
2025-11-26T01:52:07.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:52:08.048 [DEBUG] [Thread-9593] [transport.py] [_log()] starting thread (client mode): 0x70dd2fe0
2025-11-26T01:52:08.048 [DEBUG] [Thread-9593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:52:08.068 [DEBUG] [Thread-9593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:52:08.068 [INFO] [Thread-9593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] client lang: <none>
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] server lang: <none>
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] kex follows: False
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:52:08.069 [DEBUG] [Thread-9593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:52:08.070 [DEBUG] [Thread-9593] [transport.py] [_log()] Compression: none
2025-11-26T01:52:08.070 [DEBUG] [Thread-9593] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:52:08.087 [DEBUG] [Thread-9593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:52:08.087 [DEBUG] [Thread-9593] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:52:08.088 [DEBUG] [Thread-9593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:52:08.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:52:08.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:52:08.090 [DEBUG] [Thread-9593] [transport.py] [_log()] userauth is OK
2025-11-26T01:52:08.090 [DEBUG] [Thread-9593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:52:08.090 [DEBUG] [Thread-9593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:52:08.090 [DEBUG] [Thread-9593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:52:08.090 [DEBUG] [Thread-9593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:52:08.119 [INFO] [Thread-9593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:52:08.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:52:08.759 [DEBUG] [Thread-9593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:52:08.759 [DEBUG] [Thread-9593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:52:08.759 [DEBUG] [Thread-9593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:52:08.800 [DEBUG] [Thread-9593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:52:08.800 [DEBUG] [Thread-9593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:52:08.803 [DEBUG] [Thread-9593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:52:08.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:52:08.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:52:08.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:52:08.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:52:08.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:52:08.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:52:08.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:52:08.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:52:08.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:52:08.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.994193 -999.00  +20.20   5.79     16   -6.10 1 1 1 1 1     0    0 26.99 19.58 ZNESW 6.6 5.8 123.4 6.8 19.5 -26.2 19.3 -25.4 18.9 -24.0 19.2 -25.1
2025-11-26T01:52:08.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:52:08.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:52:08.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.994193
2025-11-26T01:52:08.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:52:08.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:52:08.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:52:08.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:52:08.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:52:08.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:51:46', tmtdew=31.5, humidity=11.02, cloud=0.0, wind=7.57, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:51:47', seeing=0.73, atlas_timestamp='2025-11-25T23:51:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.043250000000000455, -0.015249999999999986, -0.009000000000000341, -0.0259999999999998, 0.006250000000001421, -0.051000000000000156, -0.04124999999999801, -0.0045000000000001705, -0.05299999999999905, -0.018250000000001876, -0.025000000000000355, 0.08499999999999908, 0.0962499999999995, -0.03300000000000125, -0.0730000000000004, -0.02275000000000027, -0.03850000000000087, -0.026000000000001577, -0.06875000000000142, 0.03249999999999886, 0.04574999999999818, 0.04125000000000156, -0.028750000000000497, -0.02000000000000135, 0.0005000000000006111, -0.0442499999999999, 0.04300000000000104, 0.10549999999999926, 0.05349999999999966, 0.051000000000000156, -0.03500000000000014, -0.020749999999999602], zp_timestamp='2025-11-25T23:48:00')
2025-11-26T01:52:08.832 [DEBUG] [Thread-9593] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:52:08.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:52:08.928 [DEBUG] [Thread-9596] [transport.py] [_log()] starting thread (client mode): 0x70dbf6a0
2025-11-26T01:52:08.928 [DEBUG] [Thread-9596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:52:08.942 [DEBUG] [Thread-9596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:52:08.943 [INFO] [Thread-9596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:52:08.950 [DEBUG] [Thread-9596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:52:08.951 [DEBUG] [Thread-9596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:52:08.951 [DEBUG] [Thread-9596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:52:08.951 [DEBUG] [Thread-9596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:52:08.951 [DEBUG] [Thread-9596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:52:08.951 [DEBUG] [Thread-9596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:52:08.951 [DEBUG] [Thread-9596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:52:08.951 [DEBUG] [Thread-9596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:52:08.952 [DEBUG] [Thread-9596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:52:08.952 [DEBUG] [Thread-9596] [transport.py] [_log()] client lang: <none>
2025-11-26T01:52:08.952 [DEBUG] [Thread-9596] [transport.py] [_log()] server lang: <none>
2025-11-26T01:52:08.952 [DEBUG] [Thread-9596] [transport.py] [_log()] kex follows: False
2025-11-26T01:52:08.952 [DEBUG] [Thread-9596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:52:08.952 [DEBUG] [Thread-9596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:52:08.952 [DEBUG] [Thread-9596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:52:08.952 [DEBUG] [Thread-9596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:52:08.953 [DEBUG] [Thread-9596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:52:08.953 [DEBUG] [Thread-9596] [transport.py] [_log()] Compression: none
2025-11-26T01:52:08.953 [DEBUG] [Thread-9596] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:52:09.009 [DEBUG] [Thread-9596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:52:09.010 [DEBUG] [Thread-9596] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:52:09.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:52:09.011 [DEBUG] [Thread-9596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:52:09.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:52:09.069 [DEBUG] [Thread-9596] [transport.py] [_log()] userauth is OK
2025-11-26T01:52:09.070 [DEBUG] [Thread-9596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:52:09.070 [DEBUG] [Thread-9596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:52:09.070 [DEBUG] [Thread-9596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:52:09.070 [DEBUG] [Thread-9596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:52:09.089 [INFO] [Thread-9596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:52:09.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:52:09.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:52:10.028 [DEBUG] [Thread-9596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:52:10.028 [DEBUG] [Thread-9596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:52:10.076 [DEBUG] [Thread-9596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:52:10.076 [DEBUG] [Thread-9596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:52:10.085 [DEBUG] [Thread-9596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:52:10.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:52:10.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:52:10.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:52:10.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:52:10.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:52:10.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:52:10.120 [DEBUG] [Thread-9596] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:52:14.345 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:18.533 [DEBUG] [Thread-9598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:22.411 [DEBUG] [Thread-9599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:24.686 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:35.071 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:36.078 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:36.079 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:37.448 [DEBUG] [Thread-9600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:40.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:52:40.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:52:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:52:40.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 52, 19), 31.52, 11.0, 0.0, 7.55, 20.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:52:40.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:52:19
2025-11-26T01:52:40.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:52:41.063 [DEBUG] [Thread-9601] [transport.py] [_log()] starting thread (client mode): 0x70dbc8b0
2025-11-26T01:52:41.063 [DEBUG] [Thread-9601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:52:41.084 [DEBUG] [Thread-9601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:52:41.084 [INFO] [Thread-9601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:52:41.085 [DEBUG] [Thread-9601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] client lang: <none>
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] server lang: <none>
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] kex follows: False
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] Compression: none
2025-11-26T01:52:41.086 [DEBUG] [Thread-9601] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:52:41.100 [DEBUG] [Thread-9601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:52:41.101 [DEBUG] [Thread-9601] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:52:41.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:52:41.102 [DEBUG] [Thread-9601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:52:41.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:52:41.104 [DEBUG] [Thread-9601] [transport.py] [_log()] userauth is OK
2025-11-26T01:52:41.104 [DEBUG] [Thread-9601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:52:41.104 [DEBUG] [Thread-9601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:52:41.105 [DEBUG] [Thread-9601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:52:41.105 [DEBUG] [Thread-9601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:52:41.141 [INFO] [Thread-9601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:52:41.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:52:41.748 [DEBUG] [Thread-9601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:52:41.748 [DEBUG] [Thread-9601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:52:41.748 [DEBUG] [Thread-9601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:52:41.789 [DEBUG] [Thread-9601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:52:41.789 [DEBUG] [Thread-9601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:52:41.793 [DEBUG] [Thread-9601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:52:41.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:52:41.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:52:41.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:52:41.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:52:41.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:52:41.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:52:41.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:52:41.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:52:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:52:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.994540 -999.00  +20.30   6.00     16   -6.00 1 1 1 1 1     0    0 27.11 19.79 ZNESW 6.0 6.0 127.8 7.2 19.5 -26.1 19.4 -25.5 19.0 -24.1 19.2 -25.0
2025-11-26T01:52:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:52:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:52:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.994540
2025-11-26T01:52:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:52:41.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:52:41.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:52:41.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:52:41.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:52:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:52:19', tmtdew=31.52, humidity=11.0, cloud=0.0, wind=7.55, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:52:19', seeing=0.69, atlas_timestamp='2025-11-25T23:52:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.06574999999999953, -0.0467499999999994, -0.020500000000000185, -0.014499999999999957, 0.035250000000001336, -0.048500000000000654, -0.029749999999999943, -0.020500000000000185, -0.051000000000000156, 0.003249999999999531, -0.02800000000000047, 0.10599999999999987, 0.06624999999999837, -0.04499999999999993, -0.08300000000000018, -0.03324999999999889, -0.033500000000000085, -0.04400000000000048, -0.025750000000000384, 0.06299999999999883, 0.05674999999999919, -0.0067499999999984794, -0.030250000000000554, 0.0019999999999988916, 0.01249999999999929, -0.0547500000000003, -0.016500000000000625, 0.09200000000000053, 0.03900000000000148, -0.004999999999999005, -0.05599999999999916, -0.04875000000000185], zp_timestamp='2025-11-25T23:51:00')
2025-11-26T01:52:41.821 [DEBUG] [Thread-9601] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:52:41.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:52:41.928 [DEBUG] [Thread-9604] [transport.py] [_log()] starting thread (client mode): 0x70d39780
2025-11-26T01:52:41.929 [DEBUG] [Thread-9604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:52:41.943 [DEBUG] [Thread-9604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:52:41.943 [INFO] [Thread-9604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:52:41.950 [DEBUG] [Thread-9604] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] client lang: <none>
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] server lang: <none>
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] kex follows: False
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:52:41.951 [DEBUG] [Thread-9604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:52:41.952 [DEBUG] [Thread-9604] [transport.py] [_log()] Compression: none
2025-11-26T01:52:41.952 [DEBUG] [Thread-9604] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:52:42.007 [DEBUG] [Thread-9604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:52:42.008 [DEBUG] [Thread-9604] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:52:42.008 [DEBUG] [Thread-9604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:52:42.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:52:42.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:52:42.064 [DEBUG] [Thread-9604] [transport.py] [_log()] userauth is OK
2025-11-26T01:52:42.064 [DEBUG] [Thread-9604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:52:42.064 [DEBUG] [Thread-9604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:52:42.064 [DEBUG] [Thread-9604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:52:42.064 [DEBUG] [Thread-9604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:52:42.083 [INFO] [Thread-9604] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:52:42.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:52:42.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:52:42.900 [DEBUG] [Thread-9604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:52:42.900 [DEBUG] [Thread-9604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:52:42.949 [DEBUG] [Thread-9604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:52:42.949 [DEBUG] [Thread-9604] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:52:42.958 [DEBUG] [Thread-9604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:52:42.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:52:42.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:52:42.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:52:42.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:52:42.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:52:42.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:52:42.992 [DEBUG] [Thread-9604] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:52:45.420 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:52.481 [DEBUG] [Thread-9606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:52:55.763 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:06.166 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:07.528 [DEBUG] [Thread-9607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:13.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:53:13.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:53:13.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:53:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 52, 51), 31.56, 10.97, 0.0, 7.61, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:53:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:52:51
2025-11-26T01:53:13.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:53:13.963 [DEBUG] [Thread-9608] [transport.py] [_log()] starting thread (client mode): 0x70d43910
2025-11-26T01:53:13.963 [DEBUG] [Thread-9608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:53:13.974 [DEBUG] [Thread-9608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:53:13.974 [INFO] [Thread-9608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] client lang: <none>
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] server lang: <none>
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] kex follows: False
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:53:13.977 [DEBUG] [Thread-9608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:53:13.978 [DEBUG] [Thread-9608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:53:13.978 [DEBUG] [Thread-9608] [transport.py] [_log()] Compression: none
2025-11-26T01:53:13.978 [DEBUG] [Thread-9608] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:53:13.994 [DEBUG] [Thread-9608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:53:13.994 [DEBUG] [Thread-9608] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:53:13.994 [DEBUG] [Thread-9608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:53:13.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:53:13.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:53:13.996 [DEBUG] [Thread-9608] [transport.py] [_log()] userauth is OK
2025-11-26T01:53:13.996 [DEBUG] [Thread-9608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:53:13.996 [DEBUG] [Thread-9608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:53:13.996 [DEBUG] [Thread-9608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:53:13.996 [DEBUG] [Thread-9608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:53:14.020 [INFO] [Thread-9608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:53:14.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:53:14.662 [DEBUG] [Thread-9608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:53:14.663 [DEBUG] [Thread-9608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:53:14.663 [DEBUG] [Thread-9608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:53:14.703 [DEBUG] [Thread-9608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:53:14.704 [DEBUG] [Thread-9608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:53:14.706 [DEBUG] [Thread-9608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:53:14.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:53:14.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:53:14.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:53:14.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:53:14.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:53:14.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:53:14.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:53:14.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:53:14.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:53:14.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.994888 -999.00  +20.20   5.23     16   -6.10 1 1 1 1 1     0    0 26.48 18.70 ZNESW 5.4 5.2 126.7 6.5 19.4 -26.1 19.3 -25.5 19.0 -24.1 19.2 -25.1
2025-11-26T01:53:14.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:53:14.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:53:14.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.994888
2025-11-26T01:53:14.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:53:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:53:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:53:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:53:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:53:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:52:51', tmtdew=31.56, humidity=10.97, cloud=0.0, wind=7.61, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:52:51', seeing=0.66, atlas_timestamp='2025-11-25T23:52:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.06574999999999953, -0.0467499999999994, -0.020500000000000185, -0.014499999999999957, 0.035250000000001336, -0.048500000000000654, -0.029749999999999943, -0.020500000000000185, -0.051000000000000156, 0.003249999999999531, -0.02800000000000047, 0.10599999999999987, 0.06624999999999837, -0.04499999999999993, -0.08300000000000018, -0.03324999999999889, -0.033500000000000085, -0.04400000000000048, -0.025750000000000384, 0.06299999999999883, 0.05674999999999919, -0.0067499999999984794, -0.030250000000000554, 0.0019999999999988916, 0.01249999999999929, -0.0547500000000003, -0.016500000000000625, 0.09200000000000053, 0.03900000000000148, -0.004999999999999005, -0.05599999999999916, -0.04875000000000185], zp_timestamp='2025-11-25T23:51:00')
2025-11-26T01:53:14.730 [DEBUG] [Thread-9608] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:53:14.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:53:14.824 [DEBUG] [Thread-9611] [transport.py] [_log()] starting thread (client mode): 0x70d55b40
2025-11-26T01:53:14.824 [DEBUG] [Thread-9611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:53:14.839 [DEBUG] [Thread-9611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:53:14.839 [INFO] [Thread-9611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:53:14.846 [DEBUG] [Thread-9611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] client lang: <none>
2025-11-26T01:53:14.847 [DEBUG] [Thread-9611] [transport.py] [_log()] server lang: <none>
2025-11-26T01:53:14.848 [DEBUG] [Thread-9611] [transport.py] [_log()] kex follows: False
2025-11-26T01:53:14.848 [DEBUG] [Thread-9611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:53:14.848 [DEBUG] [Thread-9611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:53:14.848 [DEBUG] [Thread-9611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:53:14.848 [DEBUG] [Thread-9611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:53:14.848 [DEBUG] [Thread-9611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:53:14.848 [DEBUG] [Thread-9611] [transport.py] [_log()] Compression: none
2025-11-26T01:53:14.848 [DEBUG] [Thread-9611] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:53:14.907 [DEBUG] [Thread-9611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:53:14.907 [DEBUG] [Thread-9611] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:53:14.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:53:14.909 [DEBUG] [Thread-9611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:53:14.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:53:14.967 [DEBUG] [Thread-9611] [transport.py] [_log()] userauth is OK
2025-11-26T01:53:14.967 [DEBUG] [Thread-9611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:53:14.967 [DEBUG] [Thread-9611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:53:14.967 [DEBUG] [Thread-9611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:53:14.967 [DEBUG] [Thread-9611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:53:14.986 [INFO] [Thread-9611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:53:14.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:53:14.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:53:15.801 [DEBUG] [Thread-9611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:53:15.801 [DEBUG] [Thread-9611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:53:15.850 [DEBUG] [Thread-9611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:53:15.851 [DEBUG] [Thread-9611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:53:15.862 [DEBUG] [Thread-9611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:53:15.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:53:15.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:53:15.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:53:15.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:53:15.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:53:15.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:53:15.907 [DEBUG] [Thread-9611] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:53:16.508 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:18.611 [DEBUG] [Thread-9613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:22.566 [DEBUG] [Thread-9614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:26.851 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:36.280 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:36.282 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:37.190 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:37.615 [DEBUG] [Thread-9615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:45.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:53:45.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:53:45.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:53:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 53, 23), 31.54, 10.98, 0.0, 7.84, 20.28, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:53:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:53:23
2025-11-26T01:53:46.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:53:46.857 [DEBUG] [Thread-9616] [transport.py] [_log()] starting thread (client mode): 0x70d7f730
2025-11-26T01:53:46.857 [DEBUG] [Thread-9616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:53:46.879 [DEBUG] [Thread-9616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:53:46.879 [INFO] [Thread-9616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] client lang: <none>
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] server lang: <none>
2025-11-26T01:53:46.882 [DEBUG] [Thread-9616] [transport.py] [_log()] kex follows: False
2025-11-26T01:53:46.883 [DEBUG] [Thread-9616] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:53:46.883 [DEBUG] [Thread-9616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:53:46.883 [DEBUG] [Thread-9616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:53:46.883 [DEBUG] [Thread-9616] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:53:46.883 [DEBUG] [Thread-9616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:53:46.883 [DEBUG] [Thread-9616] [transport.py] [_log()] Compression: none
2025-11-26T01:53:46.883 [DEBUG] [Thread-9616] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:53:46.900 [DEBUG] [Thread-9616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:53:46.901 [DEBUG] [Thread-9616] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:53:46.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:53:46.902 [DEBUG] [Thread-9616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:53:46.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:53:46.904 [DEBUG] [Thread-9616] [transport.py] [_log()] userauth is OK
2025-11-26T01:53:46.904 [DEBUG] [Thread-9616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:53:46.905 [DEBUG] [Thread-9616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:53:46.905 [DEBUG] [Thread-9616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:53:46.905 [DEBUG] [Thread-9616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:53:46.929 [INFO] [Thread-9616] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:53:46.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:53:47.533 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:47.589 [DEBUG] [Thread-9616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:53:47.589 [DEBUG] [Thread-9616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:53:47.590 [DEBUG] [Thread-9616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:53:47.631 [DEBUG] [Thread-9616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:53:47.631 [DEBUG] [Thread-9616] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:53:47.634 [DEBUG] [Thread-9616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:53:47.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:53:47.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:53:47.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:53:47.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:53:47.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:53:47.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:53:47.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:53:47.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:53:47.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:53:47.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.995235 -999.00  +20.10   6.65     16   -6.10 1 1 1 1 1     0    0 26.99 20.74 ZNESW 6.8 6.7 122.2 7.6 19.4 -26.1 19.3 -25.4 19.0 -24.2 19.2 -25.1
2025-11-26T01:53:47.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:53:47.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:53:47.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.995235
2025-11-26T01:53:47.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:53:47.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:53:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:53:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:53:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:53:47.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:53:23', tmtdew=31.54, humidity=10.98, cloud=0.0, wind=7.84, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:53:23', seeing=0.69, atlas_timestamp='2025-11-25T23:53:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.06574999999999953, -0.0467499999999994, -0.020500000000000185, -0.014499999999999957, 0.035250000000001336, -0.048500000000000654, -0.029749999999999943, -0.020500000000000185, -0.051000000000000156, 0.003249999999999531, -0.02800000000000047, 0.10599999999999987, 0.06624999999999837, -0.04499999999999993, -0.08300000000000018, -0.03324999999999889, -0.033500000000000085, -0.04400000000000048, -0.025750000000000384, 0.06299999999999883, 0.05674999999999919, -0.0067499999999984794, -0.030250000000000554, 0.0019999999999988916, 0.01249999999999929, -0.0547500000000003, -0.016500000000000625, 0.09200000000000053, 0.03900000000000148, -0.004999999999999005, -0.05599999999999916, -0.04875000000000185], zp_timestamp='2025-11-25T23:51:00')
2025-11-26T01:53:47.662 [DEBUG] [Thread-9616] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:53:47.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:53:47.757 [DEBUG] [Thread-9619] [transport.py] [_log()] starting thread (client mode): 0x7374d390
2025-11-26T01:53:47.757 [DEBUG] [Thread-9619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:53:47.772 [DEBUG] [Thread-9619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:53:47.772 [INFO] [Thread-9619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] client lang: <none>
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] server lang: <none>
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] kex follows: False
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:53:47.780 [DEBUG] [Thread-9619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:53:47.781 [DEBUG] [Thread-9619] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:53:47.781 [DEBUG] [Thread-9619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:53:47.781 [DEBUG] [Thread-9619] [transport.py] [_log()] Compression: none
2025-11-26T01:53:47.781 [DEBUG] [Thread-9619] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:53:47.838 [DEBUG] [Thread-9619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:53:47.838 [DEBUG] [Thread-9619] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:53:47.839 [DEBUG] [Thread-9619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:53:47.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:53:47.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:53:47.894 [DEBUG] [Thread-9619] [transport.py] [_log()] userauth is OK
2025-11-26T01:53:47.895 [DEBUG] [Thread-9619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:53:47.895 [DEBUG] [Thread-9619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:53:47.895 [DEBUG] [Thread-9619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:53:47.895 [DEBUG] [Thread-9619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:53:47.913 [INFO] [Thread-9619] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:53:47.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:53:47.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:53:48.750 [DEBUG] [Thread-9619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:53:48.751 [DEBUG] [Thread-9619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:53:48.799 [DEBUG] [Thread-9619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:53:48.799 [DEBUG] [Thread-9619] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:53:48.809 [DEBUG] [Thread-9619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:53:48.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:53:48.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:53:48.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:53:48.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:53:48.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:53:48.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:53:48.847 [DEBUG] [Thread-9619] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:53:52.650 [DEBUG] [Thread-9621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:53:57.921 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:07.702 [DEBUG] [Thread-9622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:08.252 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:18.583 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:18.664 [DEBUG] [Thread-9623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:18.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:54:18.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:54:18.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:54:19.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 53, 55), 31.51, 11.02, 0.0, 7.84, 20.28, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:54:19.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:53:55
2025-11-26T01:54:19.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:54:19.826 [DEBUG] [Thread-9624] [transport.py] [_log()] starting thread (client mode): 0x70d55b40
2025-11-26T01:54:19.826 [DEBUG] [Thread-9624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:54:19.847 [DEBUG] [Thread-9624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:54:19.847 [INFO] [Thread-9624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] client lang: <none>
2025-11-26T01:54:19.848 [DEBUG] [Thread-9624] [transport.py] [_log()] server lang: <none>
2025-11-26T01:54:19.849 [DEBUG] [Thread-9624] [transport.py] [_log()] kex follows: False
2025-11-26T01:54:19.849 [DEBUG] [Thread-9624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:54:19.849 [DEBUG] [Thread-9624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:54:19.849 [DEBUG] [Thread-9624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:54:19.849 [DEBUG] [Thread-9624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:54:19.849 [DEBUG] [Thread-9624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:54:19.849 [DEBUG] [Thread-9624] [transport.py] [_log()] Compression: none
2025-11-26T01:54:19.849 [DEBUG] [Thread-9624] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:54:19.866 [DEBUG] [Thread-9624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:54:19.866 [DEBUG] [Thread-9624] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:54:19.866 [DEBUG] [Thread-9624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:54:19.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:54:19.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:54:19.868 [DEBUG] [Thread-9624] [transport.py] [_log()] userauth is OK
2025-11-26T01:54:19.868 [DEBUG] [Thread-9624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:54:19.868 [DEBUG] [Thread-9624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:54:19.869 [DEBUG] [Thread-9624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:54:19.869 [DEBUG] [Thread-9624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:54:19.888 [INFO] [Thread-9624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:54:19.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:54:20.534 [DEBUG] [Thread-9624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:54:20.534 [DEBUG] [Thread-9624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:54:20.535 [DEBUG] [Thread-9624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:54:20.576 [DEBUG] [Thread-9624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:54:20.576 [DEBUG] [Thread-9624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:54:20.579 [DEBUG] [Thread-9624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:54:20.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:54:20.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:54:20.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:54:20.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:54:20.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:54:20.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:54:20.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:54:20.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:54:20.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:54:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.995582 -999.00  +20.10   6.59     16   -6.20 1 1 1 1 1     0    0 27.12 22.15 ZNESW 7.1 6.6 125.4 7.8 19.4 -26.3 19.3 -25.5 19.0 -24.2 19.2 -25.3
2025-11-26T01:54:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:54:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:54:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.995582
2025-11-26T01:54:20.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:54:20.604 [DEBUG] [Thread-9624] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:54:20.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:54:20.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:54:20.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:54:20.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:54:20.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:53:55', tmtdew=31.51, humidity=11.02, cloud=0.0, wind=7.84, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:53:55', seeing=0.73, atlas_timestamp='2025-11-25T23:53:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.06574999999999953, -0.0467499999999994, -0.020500000000000185, -0.014499999999999957, 0.035250000000001336, -0.048500000000000654, -0.029749999999999943, -0.020500000000000185, -0.051000000000000156, 0.003249999999999531, -0.02800000000000047, 0.10599999999999987, 0.06624999999999837, -0.04499999999999993, -0.08300000000000018, -0.03324999999999889, -0.033500000000000085, -0.04400000000000048, -0.025750000000000384, 0.06299999999999883, 0.05674999999999919, -0.0067499999999984794, -0.030250000000000554, 0.0019999999999988916, 0.01249999999999929, -0.0547500000000003, -0.016500000000000625, 0.09200000000000053, 0.03900000000000148, -0.004999999999999005, -0.05599999999999916, -0.04875000000000185], zp_timestamp='2025-11-25T23:51:00')
2025-11-26T01:54:20.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:54:20.700 [DEBUG] [Thread-9627] [transport.py] [_log()] starting thread (client mode): 0x70d7ffd0
2025-11-26T01:54:20.701 [DEBUG] [Thread-9627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:54:20.719 [DEBUG] [Thread-9627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:54:20.719 [INFO] [Thread-9627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:54:20.727 [DEBUG] [Thread-9627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:54:20.727 [DEBUG] [Thread-9627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] client lang: <none>
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] server lang: <none>
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] kex follows: False
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:54:20.728 [DEBUG] [Thread-9627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:54:20.729 [DEBUG] [Thread-9627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:54:20.729 [DEBUG] [Thread-9627] [transport.py] [_log()] Compression: none
2025-11-26T01:54:20.729 [DEBUG] [Thread-9627] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:54:20.784 [DEBUG] [Thread-9627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:54:20.785 [DEBUG] [Thread-9627] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:54:20.785 [DEBUG] [Thread-9627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:54:20.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:54:20.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:54:20.841 [DEBUG] [Thread-9627] [transport.py] [_log()] userauth is OK
2025-11-26T01:54:20.842 [DEBUG] [Thread-9627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:54:20.842 [DEBUG] [Thread-9627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:54:20.842 [DEBUG] [Thread-9627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:54:20.842 [DEBUG] [Thread-9627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:54:20.860 [INFO] [Thread-9627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:54:20.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:54:20.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:54:21.654 [DEBUG] [Thread-9627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:54:21.654 [DEBUG] [Thread-9627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:54:21.702 [DEBUG] [Thread-9627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:54:21.702 [DEBUG] [Thread-9627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:54:21.714 [DEBUG] [Thread-9627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:54:21.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:54:21.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:54:21.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:54:21.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:54:21.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:54:21.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:54:21.753 [DEBUG] [Thread-9627] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:54:22.735 [DEBUG] [Thread-9629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:28.934 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:36.483 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:36.484 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:37.784 [DEBUG] [Thread-9630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:39.248 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:49.587 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:51.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:54:51.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:54:51.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:54:52.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 54, 27), 31.57, 10.97, 0.0, 7.66, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:54:52.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:54:27
2025-11-26T01:54:52.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:54:52.753 [DEBUG] [Thread-9631] [transport.py] [_log()] starting thread (client mode): 0x70de4850
2025-11-26T01:54:52.753 [DEBUG] [Thread-9631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:54:52.775 [DEBUG] [Thread-9631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:54:52.775 [INFO] [Thread-9631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:54:52.778 [DEBUG] [Thread-9631] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:54:52.778 [DEBUG] [Thread-9631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:54:52.778 [DEBUG] [Thread-9631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:54:52.778 [DEBUG] [Thread-9631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:54:52.778 [DEBUG] [Thread-9631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:54:52.778 [DEBUG] [Thread-9631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:54:52.778 [DEBUG] [Thread-9631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:54:52.778 [DEBUG] [Thread-9631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] client lang: <none>
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] server lang: <none>
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] kex follows: False
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] Compression: none
2025-11-26T01:54:52.779 [DEBUG] [Thread-9631] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:54:52.794 [DEBUG] [Thread-9631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:54:52.795 [DEBUG] [Thread-9631] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:54:52.795 [DEBUG] [Thread-9631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:54:52.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:54:52.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:54:52.796 [DEBUG] [Thread-9631] [transport.py] [_log()] userauth is OK
2025-11-26T01:54:52.796 [DEBUG] [Thread-9631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:54:52.796 [DEBUG] [Thread-9631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:54:52.796 [DEBUG] [Thread-9631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:54:52.796 [DEBUG] [Thread-9631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:54:52.823 [DEBUG] [Thread-9633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:54:52.827 [INFO] [Thread-9631] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:54:52.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:54:53.423 [DEBUG] [Thread-9631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:54:53.423 [DEBUG] [Thread-9631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:54:53.423 [DEBUG] [Thread-9631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:54:53.464 [DEBUG] [Thread-9631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:54:53.464 [DEBUG] [Thread-9631] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:54:53.467 [DEBUG] [Thread-9631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:54:53.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:54:53.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:54:53.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:54:53.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:54:53.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:54:53.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:54:53.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:54:53.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:54:53.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:54:53.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.996277 -999.00  +20.00   6.22     16   -6.20 1 1 1 1 1     0    0 26.39 20.43 ZNESW 6.5 6.2 120.6 7.5 19.4 -26.3 19.4 -25.6 18.9 -24.1 19.2 -25.1
2025-11-26T01:54:53.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:54:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:54:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.996277
2025-11-26T01:54:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:54:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:54:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:54:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:54:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:54:53.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:54:27', tmtdew=31.57, humidity=10.97, cloud=0.0, wind=7.66, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:54:27', seeing=0.73, atlas_timestamp='2025-11-25T23:54:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.06574999999999953, -0.0467499999999994, -0.020500000000000185, -0.014499999999999957, 0.035250000000001336, -0.048500000000000654, -0.029749999999999943, -0.020500000000000185, -0.051000000000000156, 0.003249999999999531, -0.02800000000000047, 0.10599999999999987, 0.06624999999999837, -0.04499999999999993, -0.08300000000000018, -0.03324999999999889, -0.033500000000000085, -0.04400000000000048, -0.025750000000000384, 0.06299999999999883, 0.05674999999999919, -0.0067499999999984794, -0.030250000000000554, 0.0019999999999988916, 0.01249999999999929, -0.0547500000000003, -0.016500000000000625, 0.09200000000000053, 0.03900000000000148, -0.004999999999999005, -0.05599999999999916, -0.04875000000000185], zp_timestamp='2025-11-25T23:51:00')
2025-11-26T01:54:53.485 [DEBUG] [Thread-9631] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:54:53.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:54:53.573 [DEBUG] [Thread-9635] [transport.py] [_log()] starting thread (client mode): 0x70da4070
2025-11-26T01:54:53.573 [DEBUG] [Thread-9635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:54:53.588 [DEBUG] [Thread-9635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:54:53.588 [INFO] [Thread-9635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:54:53.595 [DEBUG] [Thread-9635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] client lang: <none>
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] server lang: <none>
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] kex follows: False
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] Compression: none
2025-11-26T01:54:53.596 [DEBUG] [Thread-9635] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:54:53.651 [DEBUG] [Thread-9635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:54:53.651 [DEBUG] [Thread-9635] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:54:53.651 [DEBUG] [Thread-9635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:54:53.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:54:53.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:54:53.708 [DEBUG] [Thread-9635] [transport.py] [_log()] userauth is OK
2025-11-26T01:54:53.708 [DEBUG] [Thread-9635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:54:53.708 [DEBUG] [Thread-9635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:54:53.708 [DEBUG] [Thread-9635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:54:53.708 [DEBUG] [Thread-9635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:54:53.722 [INFO] [Thread-9635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:54:53.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:54:53.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:54:54.554 [DEBUG] [Thread-9635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:54:54.554 [DEBUG] [Thread-9635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:54:54.602 [DEBUG] [Thread-9635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:54:54.602 [DEBUG] [Thread-9635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:54:54.610 [DEBUG] [Thread-9635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:54:54.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:54:54.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:54:54.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:54:54.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:54:54.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:54:54.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:54:54.646 [DEBUG] [Thread-9635] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:54:59.914 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:07.855 [DEBUG] [Thread-9637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:10.302 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:18.719 [DEBUG] [Thread-9638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:20.691 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:22.904 [DEBUG] [Thread-9639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:55:24.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:55:24.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:55:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 54, 59), 31.54, 10.93, 0.0, 7.64, 20.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:55:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:54:59
2025-11-26T01:55:25.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:55:25.607 [DEBUG] [Thread-9640] [transport.py] [_log()] starting thread (client mode): 0x70de5960
2025-11-26T01:55:25.607 [DEBUG] [Thread-9640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:55:25.628 [DEBUG] [Thread-9640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:55:25.628 [INFO] [Thread-9640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] client lang: <none>
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] server lang: <none>
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] kex follows: False
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:55:25.631 [DEBUG] [Thread-9640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:55:25.632 [DEBUG] [Thread-9640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:55:25.632 [DEBUG] [Thread-9640] [transport.py] [_log()] Compression: none
2025-11-26T01:55:25.632 [DEBUG] [Thread-9640] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:55:25.647 [DEBUG] [Thread-9640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:55:25.647 [DEBUG] [Thread-9640] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:55:25.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:55:25.648 [DEBUG] [Thread-9640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:55:25.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:55:25.650 [DEBUG] [Thread-9640] [transport.py] [_log()] userauth is OK
2025-11-26T01:55:25.651 [DEBUG] [Thread-9640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:55:25.651 [DEBUG] [Thread-9640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:55:25.651 [DEBUG] [Thread-9640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:55:25.651 [DEBUG] [Thread-9640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:55:25.669 [INFO] [Thread-9640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:55:25.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:55:26.284 [DEBUG] [Thread-9640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:55:26.284 [DEBUG] [Thread-9640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:55:26.285 [DEBUG] [Thread-9640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:55:26.326 [DEBUG] [Thread-9640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:55:26.326 [DEBUG] [Thread-9640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:55:26.330 [DEBUG] [Thread-9640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:55:26.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:55:26.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:55:26.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:55:26.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:55:26.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:55:26.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:55:26.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:55:26.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:55:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:55:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.996624 -999.00  +19.90   6.73     16   -6.20 1 1 1 1 1     0    0 26.21 19.80 ZNESW 6.2 6.7 120.6 7.6 19.4 -26.2 19.4 -25.6 19.0 -24.1 19.2 -25.1
2025-11-26T01:55:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:55:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:55:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.996624
2025-11-26T01:55:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:55:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:55:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:55:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:55:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:55:26.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:54:59', tmtdew=31.54, humidity=10.93, cloud=0.0, wind=7.64, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:54:59', seeing=0.62, atlas_timestamp='2025-11-25T23:55:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.06574999999999953, -0.0467499999999994, -0.020500000000000185, -0.014499999999999957, 0.035250000000001336, -0.048500000000000654, -0.029749999999999943, -0.020500000000000185, -0.051000000000000156, 0.003249999999999531, -0.02800000000000047, 0.10599999999999987, 0.06624999999999837, -0.04499999999999993, -0.08300000000000018, -0.03324999999999889, -0.033500000000000085, -0.04400000000000048, -0.025750000000000384, 0.06299999999999883, 0.05674999999999919, -0.0067499999999984794, -0.030250000000000554, 0.0019999999999988916, 0.01249999999999929, -0.0547500000000003, -0.016500000000000625, 0.09200000000000053, 0.03900000000000148, -0.004999999999999005, -0.05599999999999916, -0.04875000000000185], zp_timestamp='2025-11-25T23:51:00')
2025-11-26T01:55:26.357 [DEBUG] [Thread-9640] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:55:26.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:55:26.454 [DEBUG] [Thread-9643] [transport.py] [_log()] starting thread (client mode): 0x70dbf6a0
2025-11-26T01:55:26.454 [DEBUG] [Thread-9643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:55:26.468 [DEBUG] [Thread-9643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:55:26.469 [INFO] [Thread-9643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:55:26.476 [DEBUG] [Thread-9643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:55:26.476 [DEBUG] [Thread-9643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:55:26.476 [DEBUG] [Thread-9643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] client lang: <none>
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] server lang: <none>
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] kex follows: False
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] Compression: none
2025-11-26T01:55:26.477 [DEBUG] [Thread-9643] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:55:26.537 [DEBUG] [Thread-9643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:55:26.537 [DEBUG] [Thread-9643] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:55:26.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:55:26.538 [DEBUG] [Thread-9643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:55:26.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:55:26.595 [DEBUG] [Thread-9643] [transport.py] [_log()] userauth is OK
2025-11-26T01:55:26.595 [DEBUG] [Thread-9643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:55:26.596 [DEBUG] [Thread-9643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:55:26.596 [DEBUG] [Thread-9643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:55:26.596 [DEBUG] [Thread-9643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:55:26.619 [INFO] [Thread-9643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:55:26.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:55:26.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:55:27.482 [DEBUG] [Thread-9643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:55:27.482 [DEBUG] [Thread-9643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:55:27.530 [DEBUG] [Thread-9643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:55:27.531 [DEBUG] [Thread-9643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:55:27.539 [DEBUG] [Thread-9643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:55:27.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:55:27.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:55:27.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:55:27.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:55:27.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:55:27.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:55:27.575 [DEBUG] [Thread-9643] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:55:31.037 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:36.684 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:36.685 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:37.939 [DEBUG] [Thread-9645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:41.417 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:51.860 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:52.998 [DEBUG] [Thread-9646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:55:57.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:55:57.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:55:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:55:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 55, 31), 31.51, 10.98, 0.0, 7.76, 20.33, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:55:58.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:55:31
2025-11-26T01:55:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:55:58.536 [DEBUG] [Thread-9647] [transport.py] [_log()] starting thread (client mode): 0x70dbe0e0
2025-11-26T01:55:58.536 [DEBUG] [Thread-9647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:55:58.558 [DEBUG] [Thread-9647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:55:58.559 [INFO] [Thread-9647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:55:58.560 [DEBUG] [Thread-9647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:55:58.560 [DEBUG] [Thread-9647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:55:58.560 [DEBUG] [Thread-9647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] client lang: <none>
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] server lang: <none>
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] kex follows: False
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] Compression: none
2025-11-26T01:55:58.561 [DEBUG] [Thread-9647] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:55:58.570 [DEBUG] [Thread-9647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:55:58.570 [DEBUG] [Thread-9647] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:55:58.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:55:58.571 [DEBUG] [Thread-9647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:55:58.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:55:58.574 [DEBUG] [Thread-9647] [transport.py] [_log()] userauth is OK
2025-11-26T01:55:58.574 [DEBUG] [Thread-9647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:55:58.574 [DEBUG] [Thread-9647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:55:58.574 [DEBUG] [Thread-9647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:55:58.574 [DEBUG] [Thread-9647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:55:58.611 [INFO] [Thread-9647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:55:58.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:55:59.232 [DEBUG] [Thread-9647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:55:59.233 [DEBUG] [Thread-9647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:55:59.233 [DEBUG] [Thread-9647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:55:59.274 [DEBUG] [Thread-9647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:55:59.274 [DEBUG] [Thread-9647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:55:59.278 [DEBUG] [Thread-9647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:55:59.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:55:59.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:55:59.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:55:59.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:55:59.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:55:59.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:55:59.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:55:59.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:55:59.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:55:59.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.996971 -999.00  +19.90   6.44     16   -6.20 1 1 1 1 1     0    0 26.79 19.37 ZNESW 6.2 6.4 122.8 7.7 19.4 -26.1 19.3 -25.4 18.9 -24.2 19.3 -25.2
2025-11-26T01:55:59.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:55:59.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:55:59.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.996971
2025-11-26T01:55:59.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:55:59.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:55:59.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:55:59.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:55:59.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:55:59.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:55:31', tmtdew=31.51, humidity=10.98, cloud=0.0, wind=7.76, temperature=20.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:55:31', seeing=0.95, atlas_timestamp='2025-11-25T23:55:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:54:00')
2025-11-26T01:55:59.297 [DEBUG] [Thread-9647] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:55:59.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:55:59.392 [DEBUG] [Thread-9650] [transport.py] [_log()] starting thread (client mode): 0x70dbf640
2025-11-26T01:55:59.392 [DEBUG] [Thread-9650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:55:59.413 [DEBUG] [Thread-9650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:55:59.413 [INFO] [Thread-9650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:55:59.420 [DEBUG] [Thread-9650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] client lang: <none>
2025-11-26T01:55:59.421 [DEBUG] [Thread-9650] [transport.py] [_log()] server lang: <none>
2025-11-26T01:55:59.422 [DEBUG] [Thread-9650] [transport.py] [_log()] kex follows: False
2025-11-26T01:55:59.422 [DEBUG] [Thread-9650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:55:59.422 [DEBUG] [Thread-9650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:55:59.422 [DEBUG] [Thread-9650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:55:59.422 [DEBUG] [Thread-9650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:55:59.422 [DEBUG] [Thread-9650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:55:59.422 [DEBUG] [Thread-9650] [transport.py] [_log()] Compression: none
2025-11-26T01:55:59.422 [DEBUG] [Thread-9650] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:55:59.479 [DEBUG] [Thread-9650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:55:59.479 [DEBUG] [Thread-9650] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:55:59.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:55:59.480 [DEBUG] [Thread-9650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:55:59.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:55:59.535 [DEBUG] [Thread-9650] [transport.py] [_log()] userauth is OK
2025-11-26T01:55:59.535 [DEBUG] [Thread-9650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:55:59.535 [DEBUG] [Thread-9650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:55:59.536 [DEBUG] [Thread-9650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:55:59.536 [DEBUG] [Thread-9650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:55:59.555 [INFO] [Thread-9650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:55:59.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:55:59.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:56:00.389 [DEBUG] [Thread-9650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:56:00.390 [DEBUG] [Thread-9650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:56:00.438 [DEBUG] [Thread-9650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:56:00.438 [DEBUG] [Thread-9650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:56:00.448 [DEBUG] [Thread-9650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:56:00.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:56:00.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:56:00.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:56:00.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:56:00.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:56:00.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:56:00.485 [DEBUG] [Thread-9650] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:56:02.203 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:08.029 [DEBUG] [Thread-9652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:12.532 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:18.776 [DEBUG] [Thread-9653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:22.985 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:23.084 [DEBUG] [Thread-9654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:30.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:56:30.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:56:30.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:56:31.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 56, 3), 31.5, 11.0, 0.0, 7.99, 20.38, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:56:31.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:56:03
2025-11-26T01:56:31.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:56:31.503 [DEBUG] [Thread-9655] [transport.py] [_log()] starting thread (client mode): 0x70de6a10
2025-11-26T01:56:31.503 [DEBUG] [Thread-9655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:56:31.523 [DEBUG] [Thread-9655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:56:31.523 [INFO] [Thread-9655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:56:31.526 [DEBUG] [Thread-9655] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:56:31.526 [DEBUG] [Thread-9655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:56:31.526 [DEBUG] [Thread-9655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:56:31.526 [DEBUG] [Thread-9655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] client lang: <none>
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] server lang: <none>
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] kex follows: False
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] Compression: none
2025-11-26T01:56:31.527 [DEBUG] [Thread-9655] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:56:31.541 [DEBUG] [Thread-9655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:56:31.541 [DEBUG] [Thread-9655] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:56:31.541 [DEBUG] [Thread-9655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:56:31.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:56:31.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:56:31.542 [DEBUG] [Thread-9655] [transport.py] [_log()] userauth is OK
2025-11-26T01:56:31.542 [DEBUG] [Thread-9655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:56:31.542 [DEBUG] [Thread-9655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:56:31.542 [DEBUG] [Thread-9655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:56:31.542 [DEBUG] [Thread-9655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:56:31.560 [INFO] [Thread-9655] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:56:31.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:56:32.214 [DEBUG] [Thread-9655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:56:32.214 [DEBUG] [Thread-9655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:56:32.214 [DEBUG] [Thread-9655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:56:32.255 [DEBUG] [Thread-9655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:56:32.255 [DEBUG] [Thread-9655] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:56:32.257 [DEBUG] [Thread-9655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:56:32.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:56:32.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:56:32.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:56:32.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:56:32.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:56:32.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:56:32.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.997318 -999.00  +19.80   6.34     16   -6.20 1 1 1 1 1     0    0 26.03 18.54 ZNESW 6.4 6.3 119.0 7.9 19.4 -26.2 19.3 -25.6 19.0 -24.1 19.2 -25.3
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.997318
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:56:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:56:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:56:03', tmtdew=31.5, humidity=11.0, cloud=0.0, wind=7.99, temperature=20.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:56:03', seeing=0.85, atlas_timestamp='2025-11-25T23:56:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:54:00')
2025-11-26T01:56:32.276 [DEBUG] [Thread-9655] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:56:32.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:56:32.362 [DEBUG] [Thread-9658] [transport.py] [_log()] starting thread (client mode): 0x70da50c0
2025-11-26T01:56:32.362 [DEBUG] [Thread-9658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:56:32.376 [DEBUG] [Thread-9658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:56:32.376 [INFO] [Thread-9658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] client lang: <none>
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] server lang: <none>
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] kex follows: False
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] Compression: none
2025-11-26T01:56:32.384 [DEBUG] [Thread-9658] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:56:32.440 [DEBUG] [Thread-9658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:56:32.440 [DEBUG] [Thread-9658] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:56:32.441 [DEBUG] [Thread-9658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:56:32.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:56:32.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:56:32.497 [DEBUG] [Thread-9658] [transport.py] [_log()] userauth is OK
2025-11-26T01:56:32.497 [DEBUG] [Thread-9658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:56:32.497 [DEBUG] [Thread-9658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:56:32.497 [DEBUG] [Thread-9658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:56:32.498 [DEBUG] [Thread-9658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:56:32.511 [INFO] [Thread-9658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:56:32.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:56:32.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:56:33.305 [DEBUG] [Thread-9658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:56:33.305 [DEBUG] [Thread-9658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:56:33.353 [DEBUG] [Thread-9658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:56:33.353 [DEBUG] [Thread-9658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:56:33.361 [DEBUG] [Thread-9658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:56:33.362 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:33.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:56:33.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:56:33.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:56:33.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:56:33.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:56:33.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:56:33.392 [DEBUG] [Thread-9658] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:56:36.894 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:36.895 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:38.117 [DEBUG] [Thread-9660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:43.700 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:53.175 [DEBUG] [Thread-9661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:56:54.022 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:03.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:57:03.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:57:03.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:57:04.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 56, 35), 31.6, 10.9, 0.0, 7.75, 20.41, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:57:04.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:56:35
2025-11-26T01:57:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:57:04.363 [DEBUG] [Thread-9662] [transport.py] [_log()] starting thread (client mode): 0x70d74190
2025-11-26T01:57:04.363 [DEBUG] [Thread-9662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:57:04.384 [DEBUG] [Thread-9662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:57:04.384 [INFO] [Thread-9662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:57:04.385 [DEBUG] [Thread-9662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:57:04.385 [DEBUG] [Thread-9662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:57:04.385 [DEBUG] [Thread-9662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:57:04.385 [DEBUG] [Thread-9662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:57:04.385 [DEBUG] [Thread-9662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:57:04.385 [DEBUG] [Thread-9662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:57:04.385 [DEBUG] [Thread-9662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] client lang: <none>
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] server lang: <none>
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] kex follows: False
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] Compression: none
2025-11-26T01:57:04.386 [DEBUG] [Thread-9662] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:57:04.400 [DEBUG] [Thread-9662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:57:04.401 [DEBUG] [Thread-9662] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:57:04.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:57:04.402 [DEBUG] [Thread-9662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:57:04.403 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:04.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:57:04.405 [DEBUG] [Thread-9662] [transport.py] [_log()] userauth is OK
2025-11-26T01:57:04.405 [DEBUG] [Thread-9662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:57:04.405 [DEBUG] [Thread-9662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:57:04.405 [DEBUG] [Thread-9662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:57:04.405 [DEBUG] [Thread-9662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:57:04.427 [INFO] [Thread-9662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:57:04.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:57:05.029 [DEBUG] [Thread-9662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:57:05.029 [DEBUG] [Thread-9662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:57:05.029 [DEBUG] [Thread-9662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:57:05.070 [DEBUG] [Thread-9662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:57:05.070 [DEBUG] [Thread-9662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:57:05.073 [DEBUG] [Thread-9662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:57:05.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:57:05.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:57:05.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:57:05.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:57:05.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:57:05.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:57:05.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:57:05.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:57:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:57:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.997666 -999.00  +19.70   5.94     16   -6.20 1 1 1 1 1     0    0 26.90 15.66 ZNESW 5.5 5.9 117.6 7.0 19.4 -26.2 19.3 -25.6 19.0 -24.3 19.2 -25.4
2025-11-26T01:57:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:57:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:57:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.997666
2025-11-26T01:57:05.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:57:05.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:57:05.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:57:05.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:57:05.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:57:05.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:56:35', tmtdew=31.6, humidity=10.9, cloud=0.0, wind=7.75, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:56:35', seeing=0.8, atlas_timestamp='2025-11-25T23:56:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:54:00')
2025-11-26T01:57:05.104 [DEBUG] [Thread-9662] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:57:05.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:57:05.199 [DEBUG] [Thread-9665] [transport.py] [_log()] starting thread (client mode): 0x7374c670
2025-11-26T01:57:05.199 [DEBUG] [Thread-9665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:57:05.214 [DEBUG] [Thread-9665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:57:05.214 [INFO] [Thread-9665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:57:05.223 [DEBUG] [Thread-9665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:57:05.223 [DEBUG] [Thread-9665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:57:05.223 [DEBUG] [Thread-9665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:57:05.223 [DEBUG] [Thread-9665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:57:05.223 [DEBUG] [Thread-9665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:57:05.223 [DEBUG] [Thread-9665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:57:05.223 [DEBUG] [Thread-9665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:57:05.224 [DEBUG] [Thread-9665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:57:05.224 [DEBUG] [Thread-9665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:57:05.224 [DEBUG] [Thread-9665] [transport.py] [_log()] client lang: <none>
2025-11-26T01:57:05.224 [DEBUG] [Thread-9665] [transport.py] [_log()] server lang: <none>
2025-11-26T01:57:05.224 [DEBUG] [Thread-9665] [transport.py] [_log()] kex follows: False
2025-11-26T01:57:05.224 [DEBUG] [Thread-9665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:57:05.224 [DEBUG] [Thread-9665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:57:05.224 [DEBUG] [Thread-9665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:57:05.225 [DEBUG] [Thread-9665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:57:05.225 [DEBUG] [Thread-9665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:57:05.225 [DEBUG] [Thread-9665] [transport.py] [_log()] Compression: none
2025-11-26T01:57:05.225 [DEBUG] [Thread-9665] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:57:05.283 [DEBUG] [Thread-9665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:57:05.283 [DEBUG] [Thread-9665] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:57:05.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:57:05.284 [DEBUG] [Thread-9665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:57:05.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:57:05.343 [DEBUG] [Thread-9665] [transport.py] [_log()] userauth is OK
2025-11-26T01:57:05.343 [DEBUG] [Thread-9665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:57:05.343 [DEBUG] [Thread-9665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:57:05.343 [DEBUG] [Thread-9665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:57:05.343 [DEBUG] [Thread-9665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:57:05.358 [INFO] [Thread-9665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:57:05.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:57:05.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:57:06.202 [DEBUG] [Thread-9665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:57:06.203 [DEBUG] [Thread-9665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:57:06.251 [DEBUG] [Thread-9665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:57:06.252 [DEBUG] [Thread-9665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:57:06.262 [DEBUG] [Thread-9665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:57:06.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:57:06.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:57:06.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:57:06.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:57:06.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:57:06.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:57:06.301 [DEBUG] [Thread-9665] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:57:08.211 [DEBUG] [Thread-9667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:14.789 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:18.833 [DEBUG] [Thread-9668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:23.250 [DEBUG] [Thread-9669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:25.140 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:35.520 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:36.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:57:36.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:57:36.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:57:36.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 57, 7), 31.54, 10.97, 0.0, 7.73, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:57:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:57:07
2025-11-26T01:57:37.094 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:37.095 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:37.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:57:37.245 [DEBUG] [Thread-9670] [transport.py] [_log()] starting thread (client mode): 0x70da4670
2025-11-26T01:57:37.245 [DEBUG] [Thread-9670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:57:37.265 [DEBUG] [Thread-9670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:57:37.265 [INFO] [Thread-9670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] client lang: <none>
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] server lang: <none>
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] kex follows: False
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] Compression: none
2025-11-26T01:57:37.267 [DEBUG] [Thread-9670] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:57:37.283 [DEBUG] [Thread-9670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:57:37.283 [DEBUG] [Thread-9670] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:57:37.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:57:37.284 [DEBUG] [Thread-9670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:57:37.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:57:37.286 [DEBUG] [Thread-9670] [transport.py] [_log()] userauth is OK
2025-11-26T01:57:37.286 [DEBUG] [Thread-9670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:57:37.286 [DEBUG] [Thread-9670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:57:37.286 [DEBUG] [Thread-9670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:57:37.286 [DEBUG] [Thread-9670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:57:37.306 [INFO] [Thread-9670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:57:37.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:57:37.893 [DEBUG] [Thread-9670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:57:37.893 [DEBUG] [Thread-9670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:57:37.894 [DEBUG] [Thread-9670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:57:37.935 [DEBUG] [Thread-9670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:57:37.935 [DEBUG] [Thread-9670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:57:37.938 [DEBUG] [Thread-9670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:57:37.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:57:37.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:57:37.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:57:37.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:57:37.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:57:37.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:57:37.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:57:37.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:57:37.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:57:37.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.998013 -999.00  +19.60   6.00     16   -6.30 1 1 1 1 1     0    0 27.07 13.73 ZNESW 6.2 6.0 120.4 7.1 19.4 -26.2 19.3 -25.7 18.9 -24.2 19.2 -25.3
2025-11-26T01:57:37.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:57:37.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:57:37.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.998013
2025-11-26T01:57:37.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:57:37.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:57:37.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:57:37.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:57:37.964 [DEBUG] [Thread-9670] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:57:37.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:57:37.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:57:07', tmtdew=31.54, humidity=10.97, cloud=0.0, wind=7.73, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:57:07', seeing=0.77, atlas_timestamp='2025-11-25T23:57:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:54:00')
2025-11-26T01:57:38.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:57:38.056 [DEBUG] [Thread-9673] [transport.py] [_log()] starting thread (client mode): 0x70d421a0
2025-11-26T01:57:38.056 [DEBUG] [Thread-9673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:57:38.070 [DEBUG] [Thread-9673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:57:38.070 [INFO] [Thread-9673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:57:38.078 [DEBUG] [Thread-9673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:57:38.078 [DEBUG] [Thread-9673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:57:38.078 [DEBUG] [Thread-9673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] client lang: <none>
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] server lang: <none>
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] kex follows: False
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:57:38.079 [DEBUG] [Thread-9673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:57:38.080 [DEBUG] [Thread-9673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:57:38.080 [DEBUG] [Thread-9673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:57:38.080 [DEBUG] [Thread-9673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:57:38.080 [DEBUG] [Thread-9673] [transport.py] [_log()] Compression: none
2025-11-26T01:57:38.080 [DEBUG] [Thread-9673] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:57:38.137 [DEBUG] [Thread-9673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:57:38.137 [DEBUG] [Thread-9673] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:57:38.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:57:38.138 [DEBUG] [Thread-9673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:57:38.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:57:38.193 [DEBUG] [Thread-9673] [transport.py] [_log()] userauth is OK
2025-11-26T01:57:38.193 [DEBUG] [Thread-9673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:57:38.193 [DEBUG] [Thread-9673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:57:38.193 [DEBUG] [Thread-9673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:57:38.193 [DEBUG] [Thread-9673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:57:38.211 [INFO] [Thread-9673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:57:38.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:57:38.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:57:38.280 [DEBUG] [Thread-9675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:39.040 [DEBUG] [Thread-9673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:57:39.040 [DEBUG] [Thread-9673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:57:39.088 [DEBUG] [Thread-9673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:57:39.088 [DEBUG] [Thread-9673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:57:39.097 [DEBUG] [Thread-9673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:57:39.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:57:39.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:57:39.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:57:39.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:57:39.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:57:39.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:57:39.133 [DEBUG] [Thread-9673] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:57:45.859 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:53.339 [DEBUG] [Thread-9676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:57:56.339 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:06.675 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:08.378 [DEBUG] [Thread-9677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:58:09.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:58:09.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:58:09.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 57, 39), 31.63, 10.97, 0.0, 7.5, 20.46, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:58:09.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:57:39
2025-11-26T01:58:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:58:10.099 [DEBUG] [Thread-9678] [transport.py] [_log()] starting thread (client mode): 0x70de4760
2025-11-26T01:58:10.099 [DEBUG] [Thread-9678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:58:10.123 [DEBUG] [Thread-9678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:58:10.123 [INFO] [Thread-9678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] client lang: <none>
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] server lang: <none>
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] kex follows: False
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:58:10.126 [DEBUG] [Thread-9678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:58:10.127 [DEBUG] [Thread-9678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:58:10.127 [DEBUG] [Thread-9678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:58:10.127 [DEBUG] [Thread-9678] [transport.py] [_log()] Compression: none
2025-11-26T01:58:10.127 [DEBUG] [Thread-9678] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:58:10.145 [DEBUG] [Thread-9678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:58:10.145 [DEBUG] [Thread-9678] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:58:10.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:58:10.146 [DEBUG] [Thread-9678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:58:10.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:58:10.147 [DEBUG] [Thread-9678] [transport.py] [_log()] userauth is OK
2025-11-26T01:58:10.148 [DEBUG] [Thread-9678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:58:10.148 [DEBUG] [Thread-9678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:58:10.148 [DEBUG] [Thread-9678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:58:10.148 [DEBUG] [Thread-9678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:58:10.162 [INFO] [Thread-9678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:58:10.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:58:10.916 [DEBUG] [Thread-9678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:58:10.916 [DEBUG] [Thread-9678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:58:10.917 [DEBUG] [Thread-9678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:58:10.958 [DEBUG] [Thread-9678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:58:10.958 [DEBUG] [Thread-9678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:58:10.961 [DEBUG] [Thread-9678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:58:10.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:58:10.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:58:10.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:58:10.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:58:10.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:58:10.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:58:10.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:58:10.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:58:10.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:58:10.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.998013 -999.00  +19.60   6.00     16   -6.30 1 1 1 1 1     0    0 27.07 13.73 ZNESW 6.2 6.0 120.4 7.1 19.4 -26.2 19.3 -25.7 18.9 -24.2 19.2 -25.3
2025-11-26T01:58:10.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:58:10.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:58:10.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.998013
2025-11-26T01:58:10.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:58:10.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:58:10.981 [DEBUG] [Thread-9678] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:58:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:58:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:58:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:58:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:57:39', tmtdew=31.63, humidity=10.97, cloud=0.0, wind=7.5, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:57:39', seeing=0.79, atlas_timestamp='2025-11-25T23:57:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:54:00')
2025-11-26T01:58:11.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:58:11.073 [DEBUG] [Thread-9681] [transport.py] [_log()] starting thread (client mode): 0x70de42b0
2025-11-26T01:58:11.073 [DEBUG] [Thread-9681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:58:11.087 [DEBUG] [Thread-9681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:58:11.087 [INFO] [Thread-9681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:58:11.095 [DEBUG] [Thread-9681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:58:11.095 [DEBUG] [Thread-9681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:58:11.095 [DEBUG] [Thread-9681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:58:11.095 [DEBUG] [Thread-9681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:58:11.095 [DEBUG] [Thread-9681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:58:11.095 [DEBUG] [Thread-9681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:58:11.095 [DEBUG] [Thread-9681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:58:11.095 [DEBUG] [Thread-9681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:58:11.095 [DEBUG] [Thread-9681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] client lang: <none>
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] server lang: <none>
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] kex follows: False
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] Compression: none
2025-11-26T01:58:11.096 [DEBUG] [Thread-9681] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:58:11.151 [DEBUG] [Thread-9681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:58:11.158 [DEBUG] [Thread-9681] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:58:11.159 [DEBUG] [Thread-9681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:58:11.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:58:11.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:58:11.208 [DEBUG] [Thread-9681] [transport.py] [_log()] userauth is OK
2025-11-26T01:58:11.208 [DEBUG] [Thread-9681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:58:11.208 [DEBUG] [Thread-9681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:58:11.209 [DEBUG] [Thread-9681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:58:11.209 [DEBUG] [Thread-9681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:58:11.232 [INFO] [Thread-9681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:58:11.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:58:11.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:58:12.049 [DEBUG] [Thread-9681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:58:12.049 [DEBUG] [Thread-9681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:58:12.096 [DEBUG] [Thread-9681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:58:12.096 [DEBUG] [Thread-9681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:58:12.104 [DEBUG] [Thread-9681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:58:12.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:58:12.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:58:12.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:58:12.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:58:12.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:58:12.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:58:12.136 [DEBUG] [Thread-9681] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:58:17.015 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:18.907 [DEBUG] [Thread-9683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:23.411 [DEBUG] [Thread-9684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:27.354 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:37.298 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:37.299 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:37.677 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:38.450 [DEBUG] [Thread-9685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:42.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:58:42.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:58:42.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:58:42.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 58, 11), 31.64, 10.97, 0.0, 7.18, 20.53, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:58:42.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:58:11
2025-11-26T01:58:42.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:58:43.064 [DEBUG] [Thread-9686] [transport.py] [_log()] starting thread (client mode): 0x70de4fa0
2025-11-26T01:58:43.065 [DEBUG] [Thread-9686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:58:43.085 [DEBUG] [Thread-9686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:58:43.085 [INFO] [Thread-9686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] client lang: <none>
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] server lang: <none>
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] kex follows: False
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] Compression: none
2025-11-26T01:58:43.088 [DEBUG] [Thread-9686] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:58:43.105 [DEBUG] [Thread-9686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:58:43.106 [DEBUG] [Thread-9686] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:58:43.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:58:43.107 [DEBUG] [Thread-9686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:58:43.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:58:43.108 [DEBUG] [Thread-9686] [transport.py] [_log()] userauth is OK
2025-11-26T01:58:43.109 [DEBUG] [Thread-9686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:58:43.109 [DEBUG] [Thread-9686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:58:43.109 [DEBUG] [Thread-9686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:58:43.109 [DEBUG] [Thread-9686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:58:43.124 [INFO] [Thread-9686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:58:43.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:58:43.772 [DEBUG] [Thread-9686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:58:43.772 [DEBUG] [Thread-9686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:58:43.772 [DEBUG] [Thread-9686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:58:43.813 [DEBUG] [Thread-9686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:58:43.813 [DEBUG] [Thread-9686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:58:43.815 [DEBUG] [Thread-9686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:58:43.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:58:43.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:58:43.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:58:43.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:58:43.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:58:43.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:58:43.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:58:43.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.998707 -999.00  +19.50   6.46     16   -6.20 1 1 1 1 1     0    0 26.09 5.54 ZNESW 6.8 6.5 121.2 7.3 19.4 -26.1 19.3 -25.7 18.9 -24.1 19.2 -25.3
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.998707
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:58:43.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:58:11', tmtdew=31.64, humidity=10.97, cloud=0.0, wind=7.18, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:58:11', seeing=0.79, atlas_timestamp='2025-11-25T23:58:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:57:00')
2025-11-26T01:58:43.835 [DEBUG] [Thread-9686] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:58:43.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:58:43.921 [DEBUG] [Thread-9689] [transport.py] [_log()] starting thread (client mode): 0x70dbfdc0
2025-11-26T01:58:43.921 [DEBUG] [Thread-9689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:58:43.935 [DEBUG] [Thread-9689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:58:43.935 [INFO] [Thread-9689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:58:43.942 [DEBUG] [Thread-9689] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] client lang: <none>
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] server lang: <none>
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] kex follows: False
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] Compression: none
2025-11-26T01:58:43.943 [DEBUG] [Thread-9689] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:58:43.997 [DEBUG] [Thread-9689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:58:43.997 [DEBUG] [Thread-9689] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:58:43.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:58:43.997 [DEBUG] [Thread-9689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:58:43.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:58:44.055 [DEBUG] [Thread-9689] [transport.py] [_log()] userauth is OK
2025-11-26T01:58:44.055 [DEBUG] [Thread-9689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:58:44.055 [DEBUG] [Thread-9689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:58:44.055 [DEBUG] [Thread-9689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:58:44.055 [DEBUG] [Thread-9689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:58:44.068 [INFO] [Thread-9689] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:58:44.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:58:44.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:58:44.897 [DEBUG] [Thread-9689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:58:44.898 [DEBUG] [Thread-9689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:58:44.945 [DEBUG] [Thread-9689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:58:44.945 [DEBUG] [Thread-9689] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:58:44.953 [DEBUG] [Thread-9689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:58:44.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:58:44.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:58:44.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:58:44.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:58:44.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:58:44.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:58:44.994 [DEBUG] [Thread-9689] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:58:48.018 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:53.481 [DEBUG] [Thread-9691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:58:58.344 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:59:08.531 [DEBUG] [Thread-9692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:59:08.688 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:59:15.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:59:15.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:59: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
2025-11-26T01:59:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 58, 43), 31.65, 10.93, 0.0, 7.27, 20.59, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:59:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:58:43
2025-11-26T01:59:15.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:59:15.994 [DEBUG] [Thread-9693] [transport.py] [_log()] starting thread (client mode): 0x70da6770
2025-11-26T01:59:15.994 [DEBUG] [Thread-9693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:59:16.015 [DEBUG] [Thread-9693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:59:16.015 [INFO] [Thread-9693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] client lang: <none>
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] server lang: <none>
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] kex follows: False
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:59:16.018 [DEBUG] [Thread-9693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:59:16.019 [DEBUG] [Thread-9693] [transport.py] [_log()] Compression: none
2025-11-26T01:59:16.019 [DEBUG] [Thread-9693] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:59:16.040 [DEBUG] [Thread-9693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:59:16.040 [DEBUG] [Thread-9693] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:59:16.041 [DEBUG] [Thread-9693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:59:16.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:59:16.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:59:16.042 [DEBUG] [Thread-9693] [transport.py] [_log()] userauth is OK
2025-11-26T01:59:16.042 [DEBUG] [Thread-9693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:59:16.042 [DEBUG] [Thread-9693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:59:16.042 [DEBUG] [Thread-9693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:59:16.042 [DEBUG] [Thread-9693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:59:16.061 [INFO] [Thread-9693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:59:16.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:59:16.654 [DEBUG] [Thread-9693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:59:16.654 [DEBUG] [Thread-9693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:59:16.654 [DEBUG] [Thread-9693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:59:16.694 [DEBUG] [Thread-9693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:59:16.694 [DEBUG] [Thread-9693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:59:16.696 [DEBUG] [Thread-9693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:59:16.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:59:16.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:59:16.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:59:16.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:59:16.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:59:16.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:59:16.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:59:16.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:59:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:59:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.999055 -999.00  +19.60   6.36     16   -6.10 1 1 1 1 1     0    0 26.26 1.48 ZNESW 5.8 6.4 122.2 7.9 19.4 -26.2 19.3 -25.7 18.9 -24.2 -999.0 -999.0
2025-11-26T01:59:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:59:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:59:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.999055
2025-11-26T01:59:16.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:59:16.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:59:16.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:59:16.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:59:16.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:59:16.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:58:43', tmtdew=31.65, humidity=10.93, cloud=0.0, wind=7.27, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:58:43', seeing=0.66, atlas_timestamp='2025-11-25T23:58:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:57:00')
2025-11-26T01:59:16.714 [DEBUG] [Thread-9693] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:59:16.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:59:16.800 [DEBUG] [Thread-9696] [transport.py] [_log()] starting thread (client mode): 0x70da7b50
2025-11-26T01:59:16.800 [DEBUG] [Thread-9696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:59:16.814 [DEBUG] [Thread-9696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:59:16.814 [INFO] [Thread-9696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:59:16.821 [DEBUG] [Thread-9696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] client lang: <none>
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] server lang: <none>
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] kex follows: False
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] Compression: none
2025-11-26T01:59:16.822 [DEBUG] [Thread-9696] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:59:16.877 [DEBUG] [Thread-9696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:59:16.877 [DEBUG] [Thread-9696] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:59:16.877 [DEBUG] [Thread-9696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:59:16.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:59:16.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:59:16.934 [DEBUG] [Thread-9696] [transport.py] [_log()] userauth is OK
2025-11-26T01:59:16.934 [DEBUG] [Thread-9696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:59:16.934 [DEBUG] [Thread-9696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:59:16.934 [DEBUG] [Thread-9696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:59:16.934 [DEBUG] [Thread-9696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:59:16.948 [INFO] [Thread-9696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:59:16.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:59:16.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:59:17.761 [DEBUG] [Thread-9696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:59:17.761 [DEBUG] [Thread-9696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:59:17.810 [DEBUG] [Thread-9696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:59:17.810 [DEBUG] [Thread-9696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:59:17.818 [DEBUG] [Thread-9696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:59:17.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:59:17.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:59:17.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:59:17.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:59:17.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:59:17.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:59:17.855 [DEBUG] [Thread-9696] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:59:18.981 [DEBUG] [Thread-9698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:59:19.008 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:59:23.567 [DEBUG] [Thread-9699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:59:37.500 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:59:37.501 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:59:38.616 [DEBUG] [Thread-9700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T01:59:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T01:59:47.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T01:59:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T01:59:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 59, 15), 31.64, 10.93, 0.0, 7.18, 20.51, 0, 0, 0, 2, 0, 0),)
2025-11-26T01:59:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:59:15
2025-11-26T01:59:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T01:59:48.885 [DEBUG] [Thread-9701] [transport.py] [_log()] starting thread (client mode): 0x70de4940
2025-11-26T01:59:48.885 [DEBUG] [Thread-9701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:59:48.903 [DEBUG] [Thread-9701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T01:59:48.904 [INFO] [Thread-9701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] client lang: <none>
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] server lang: <none>
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] kex follows: False
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] Compression: none
2025-11-26T01:59:48.907 [DEBUG] [Thread-9701] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:59:48.922 [DEBUG] [Thread-9701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:59:48.922 [DEBUG] [Thread-9701] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:59:48.922 [DEBUG] [Thread-9701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T01:59:48.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T01:59:48.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:59:48.923 [DEBUG] [Thread-9701] [transport.py] [_log()] userauth is OK
2025-11-26T01:59:48.923 [DEBUG] [Thread-9701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:59:48.923 [DEBUG] [Thread-9701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:59:48.923 [DEBUG] [Thread-9701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T01:59:48.923 [DEBUG] [Thread-9701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:59:48.953 [INFO] [Thread-9701] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:59:48.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:59:49.585 [DEBUG] [Thread-9701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:59:49.585 [DEBUG] [Thread-9701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:59:49.586 [DEBUG] [Thread-9701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T01:59:49.626 [DEBUG] [Thread-9701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:59:49.626 [DEBUG] [Thread-9701] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:59:49.630 [DEBUG] [Thread-9701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:59:49.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:59:49.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T01:59:49.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T01:59:49.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T01:59:49.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:59:49.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T01:59:49.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:59:49.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:59:49.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T01:59:49.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.999402 -999.00  +19.60   6.44     16   -6.20 1 1 1 1 1     0    0 26.25 -1.45 ZNESW 6.4 6.4 123.0 6.9 19.4 -26.2 19.3 -25.7 18.9 -24.2 19.2 -25.3
2025-11-26T01:59:49.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T01:59:49.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T01:59:49.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.999402
2025-11-26T01:59:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T01:59:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T01:59:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T01:59:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T01:59:49.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T01:59:49.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:59:15', tmtdew=31.64, humidity=10.93, cloud=0.0, wind=7.18, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T01:59:47', seeing=0.96, atlas_timestamp='2025-11-25T23:59:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:57:00')
2025-11-26T01:59:49.657 [DEBUG] [Thread-9701] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:59:49.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T01:59:49.752 [DEBUG] [Thread-9704] [transport.py] [_log()] starting thread (client mode): 0x70d424d0
2025-11-26T01:59:49.752 [DEBUG] [Thread-9704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T01:59:49.766 [DEBUG] [Thread-9704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T01:59:49.767 [INFO] [Thread-9704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T01:59:49.774 [DEBUG] [Thread-9704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] client lang: <none>
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] server lang: <none>
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] kex follows: False
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] Compression: none
2025-11-26T01:59:49.775 [DEBUG] [Thread-9704] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T01:59:49.834 [DEBUG] [Thread-9704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T01:59:49.834 [DEBUG] [Thread-9704] [transport.py] [_log()] Switch to new keys ...
2025-11-26T01:59:49.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T01:59:49.836 [DEBUG] [Thread-9704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T01:59:49.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T01:59:49.890 [DEBUG] [Thread-9704] [transport.py] [_log()] userauth is OK
2025-11-26T01:59:49.891 [DEBUG] [Thread-9704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T01:59:49.891 [DEBUG] [Thread-9704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T01:59:49.891 [DEBUG] [Thread-9704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T01:59:49.891 [DEBUG] [Thread-9704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T01:59:49.910 [INFO] [Thread-9704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T01:59:49.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T01:59:49.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T01:59:50.790 [DEBUG] [Thread-9704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T01:59:50.791 [DEBUG] [Thread-9704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T01:59:50.839 [DEBUG] [Thread-9704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T01:59:50.839 [DEBUG] [Thread-9704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T01:59:50.848 [DEBUG] [Thread-9704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T01:59:50.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T01:59:50.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T01:59:50.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T01:59:50.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T01:59:50.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T01:59:50.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T01:59:50.890 [DEBUG] [Thread-9704] [transport.py] [_log()] EOF in transport thread
2025-11-26T01:59:53.648 [DEBUG] [Thread-9706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:03.478 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:06.674 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:08.703 [DEBUG] [Thread-9707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:11.758 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:17.167 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:19.053 [DEBUG] [Thread-9708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:20.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:00:20.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:00:20.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:00:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 1, 59, 47), 31.66, 10.9, 0.0, 7.27, 20.44, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:00:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 01:59:47
2025-11-26T02:00:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:00:21.881 [DEBUG] [Thread-9709] [transport.py] [_log()] starting thread (client mode): 0x70d74ac0
2025-11-26T02:00:21.881 [DEBUG] [Thread-9709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:00:21.902 [DEBUG] [Thread-9709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:00:21.903 [INFO] [Thread-9709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] client lang: <none>
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] server lang: <none>
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] kex follows: False
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] Compression: none
2025-11-26T02:00:21.906 [DEBUG] [Thread-9709] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:00:21.923 [DEBUG] [Thread-9709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:00:21.924 [DEBUG] [Thread-9709] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:00:21.924 [DEBUG] [Thread-9709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:00:21.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:00:21.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:00:21.926 [DEBUG] [Thread-9709] [transport.py] [_log()] userauth is OK
2025-11-26T02:00:21.927 [DEBUG] [Thread-9709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:00:21.927 [DEBUG] [Thread-9709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:00:21.927 [DEBUG] [Thread-9709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:00:21.927 [DEBUG] [Thread-9709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:00:21.951 [INFO] [Thread-9709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:00:21.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:00:22.589 [DEBUG] [Thread-9709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:00:22.589 [DEBUG] [Thread-9709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:00:22.589 [DEBUG] [Thread-9709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:00:22.631 [DEBUG] [Thread-9709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:00:22.631 [DEBUG] [Thread-9709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:00:22.634 [DEBUG] [Thread-9709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:00:22.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:00:22.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:00:22.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:00:22.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:00:22.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:00:22.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:00:22.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:00:22.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:00:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:00:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61004.999749 -999.00  +19.60   6.38     16   -6.10 1 1 1 1 1     0    0 25.75 -4.58 ZNESW 6.0 6.4 124.0 7.3 19.4 -26.1 19.2 -25.6 18.9 -24.1 19.2 -25.2
2025-11-26T02:00:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:00:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:00:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61004.999749
2025-11-26T02:00:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:00:22.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:00:22.660 [DEBUG] [Thread-9709] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:00:22.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:00:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:00:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:00:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T01:59:47', tmtdew=31.66, humidity=10.9, cloud=0.0, wind=7.27, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:00:19', seeing=0.7, atlas_timestamp='2025-11-25T23:59:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:57:00')
2025-11-26T02:00:22.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:00:22.756 [DEBUG] [Thread-9712] [transport.py] [_log()] starting thread (client mode): 0x70d7f220
2025-11-26T02:00:22.756 [DEBUG] [Thread-9712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:00:22.771 [DEBUG] [Thread-9712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:00:22.771 [INFO] [Thread-9712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:00:22.779 [DEBUG] [Thread-9712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:00:22.779 [DEBUG] [Thread-9712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:00:22.779 [DEBUG] [Thread-9712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:00:22.780 [DEBUG] [Thread-9712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:00:22.780 [DEBUG] [Thread-9712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:00:22.780 [DEBUG] [Thread-9712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:00:22.780 [DEBUG] [Thread-9712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:00:22.780 [DEBUG] [Thread-9712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:00:22.780 [DEBUG] [Thread-9712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:00:22.780 [DEBUG] [Thread-9712] [transport.py] [_log()] client lang: <none>
2025-11-26T02:00:22.780 [DEBUG] [Thread-9712] [transport.py] [_log()] server lang: <none>
2025-11-26T02:00:22.780 [DEBUG] [Thread-9712] [transport.py] [_log()] kex follows: False
2025-11-26T02:00:22.781 [DEBUG] [Thread-9712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:00:22.781 [DEBUG] [Thread-9712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:00:22.781 [DEBUG] [Thread-9712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:00:22.781 [DEBUG] [Thread-9712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:00:22.781 [DEBUG] [Thread-9712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:00:22.781 [DEBUG] [Thread-9712] [transport.py] [_log()] Compression: none
2025-11-26T02:00:22.781 [DEBUG] [Thread-9712] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:00:22.838 [DEBUG] [Thread-9712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:00:22.839 [DEBUG] [Thread-9712] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:00:22.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:00:22.840 [DEBUG] [Thread-9712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:00:22.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:00:22.898 [DEBUG] [Thread-9712] [transport.py] [_log()] userauth is OK
2025-11-26T02:00:22.898 [DEBUG] [Thread-9712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:00:22.899 [DEBUG] [Thread-9712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:00:22.899 [DEBUG] [Thread-9712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:00:22.899 [DEBUG] [Thread-9712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:00:22.918 [INFO] [Thread-9712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:00:22.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:00:22.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:00:23.737 [DEBUG] [Thread-9714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:23.755 [DEBUG] [Thread-9712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:00:23.755 [DEBUG] [Thread-9712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:00:23.805 [DEBUG] [Thread-9712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:00:23.805 [DEBUG] [Thread-9712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:00:23.814 [DEBUG] [Thread-9712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:00:23.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:00: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')
2025-11-26T02:00: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
2025-11-26T02:00:23.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:00:23.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:00:23.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:00:23.852 [DEBUG] [Thread-9712] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:00:36.546 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:37.702 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:37.703 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:38.790 [DEBUG] [Thread-9715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:40.947 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:53.823 [DEBUG] [Thread-9716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:00:53.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:00:53.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:00:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:00:54.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 0, 51), 31.63, 10.93, 0.0, 7.01, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:00:54.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:00:51
2025-11-26T02:00:54.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:00:54.838 [DEBUG] [Thread-9717] [transport.py] [_log()] starting thread (client mode): 0x7374dff0
2025-11-26T02:00:54.838 [DEBUG] [Thread-9717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:00:54.858 [DEBUG] [Thread-9717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:00:54.858 [INFO] [Thread-9717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] client lang: <none>
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] server lang: <none>
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] kex follows: False
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] Compression: none
2025-11-26T02:00:54.861 [DEBUG] [Thread-9717] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:00:54.876 [DEBUG] [Thread-9717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:00:54.876 [DEBUG] [Thread-9717] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:00:54.876 [DEBUG] [Thread-9717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:00:54.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:00:54.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:00:54.877 [DEBUG] [Thread-9717] [transport.py] [_log()] userauth is OK
2025-11-26T02:00:54.877 [DEBUG] [Thread-9717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:00:54.877 [DEBUG] [Thread-9717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:00:54.877 [DEBUG] [Thread-9717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:00:54.877 [DEBUG] [Thread-9717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:00:54.886 [INFO] [Thread-9717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:00:54.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:00:55.493 [DEBUG] [Thread-9717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:00:55.493 [DEBUG] [Thread-9717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:00:55.493 [DEBUG] [Thread-9717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:00:55.534 [DEBUG] [Thread-9717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:00:55.534 [DEBUG] [Thread-9717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:00:55.536 [DEBUG] [Thread-9717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:00:55.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:00:55.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:00:55.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:00:55.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:00:55.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:00:55.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:00:55.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:00:55.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:00:55.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:00:55.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.000096 -999.00  +19.70   6.52     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.0 6.5 120.0 7.3 19.4 -26.1 19.3 -25.6 18.9 -24.3 19.1 -25.2
2025-11-26T02:00:55.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:00:55.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:00:55.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.000096
2025-11-26T02:00:55.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:00:55.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:00:55.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:00:55.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:00:55.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:00:55.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:00:51', tmtdew=31.63, humidity=10.93, cloud=0.0, wind=7.01, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:00:51', seeing=0.63, atlas_timestamp='2025-11-26T00:00:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:57:00')
2025-11-26T02:00:55.553 [DEBUG] [Thread-9717] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:00:55.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:00:55.639 [DEBUG] [Thread-9720] [transport.py] [_log()] starting thread (client mode): 0x70d40d60
2025-11-26T02:00:55.639 [DEBUG] [Thread-9720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:00:55.654 [DEBUG] [Thread-9720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:00:55.654 [INFO] [Thread-9720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] client lang: <none>
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] server lang: <none>
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] kex follows: False
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] Compression: none
2025-11-26T02:00:55.662 [DEBUG] [Thread-9720] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:00:55.721 [DEBUG] [Thread-9720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:00:55.721 [DEBUG] [Thread-9720] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:00:55.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:00:55.722 [DEBUG] [Thread-9720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:00:55.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:00:55.781 [DEBUG] [Thread-9720] [transport.py] [_log()] userauth is OK
2025-11-26T02:00:55.781 [DEBUG] [Thread-9720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:00:55.781 [DEBUG] [Thread-9720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:00:55.781 [DEBUG] [Thread-9720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:00:55.781 [DEBUG] [Thread-9720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:00:55.798 [INFO] [Thread-9720] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:00:55.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:00:55.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:00:56.651 [DEBUG] [Thread-9720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:00:56.651 [DEBUG] [Thread-9720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:00:56.699 [DEBUG] [Thread-9720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:00:56.699 [DEBUG] [Thread-9720] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:00:56.707 [DEBUG] [Thread-9720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:00:56.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:00:56.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:00:56.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:00:56.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:00:56.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:00:56.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:00:56.740 [DEBUG] [Thread-9720] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:01:00.338 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:04.748 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:08.857 [DEBUG] [Thread-9722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:10.884 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:15.282 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:19.145 [DEBUG] [Thread-9723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:23.911 [DEBUG] [Thread-9724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:26.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:01:26.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:01:26.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:01:27.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 1, 23), 31.61, 10.97, 0.0, 7.2, 20.54, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:01:27.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:01:23
2025-11-26T02:01:27.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:01:27.675 [DEBUG] [Thread-9725] [transport.py] [_log()] starting thread (client mode): 0x70d3bf10
2025-11-26T02:01:27.676 [DEBUG] [Thread-9725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:01:27.695 [DEBUG] [Thread-9725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:01:27.696 [INFO] [Thread-9725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:01:27.699 [DEBUG] [Thread-9725] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:01:27.699 [DEBUG] [Thread-9725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:01:27.699 [DEBUG] [Thread-9725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:01:27.699 [DEBUG] [Thread-9725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:01:27.699 [DEBUG] [Thread-9725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:01:27.699 [DEBUG] [Thread-9725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:01:27.699 [DEBUG] [Thread-9725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:01:27.699 [DEBUG] [Thread-9725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:01:27.699 [DEBUG] [Thread-9725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] client lang: <none>
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] server lang: <none>
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] kex follows: False
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] Compression: none
2025-11-26T02:01:27.700 [DEBUG] [Thread-9725] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:01:27.717 [DEBUG] [Thread-9725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:01:27.718 [DEBUG] [Thread-9725] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:01:27.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:01:27.719 [DEBUG] [Thread-9725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:01:27.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:01:27.761 [DEBUG] [Thread-9725] [transport.py] [_log()] userauth is OK
2025-11-26T02:01:27.762 [DEBUG] [Thread-9725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:01:27.762 [DEBUG] [Thread-9725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:01:27.762 [DEBUG] [Thread-9725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:01:27.762 [DEBUG] [Thread-9725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:01:27.794 [INFO] [Thread-9725] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:01:27.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:01:28.476 [DEBUG] [Thread-9725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:01:28.477 [DEBUG] [Thread-9725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:01:28.477 [DEBUG] [Thread-9725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:01:28.517 [DEBUG] [Thread-9725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:01:28.517 [DEBUG] [Thread-9725] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:01:28.520 [DEBUG] [Thread-9725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:01:28.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:01:28.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:01:28.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:01:28.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:01:28.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:01:28.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:01:28.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:01:28.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.000443 -999.00  +19.70   6.68     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.7 6.7 123.2 7.1 19.4 -26.1 19.2 -25.5 18.9 -24.1 19.2 -25.2
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.000443
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:01:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:01:23', tmtdew=31.61, humidity=10.97, cloud=0.0, wind=7.2, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:01:23', seeing=0.63, atlas_timestamp='2025-11-26T00:00:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.03575000000000017, 0.003249999999999531, -0.020500000000000185, -0.03950000000000031, 0.04925000000000068, -0.019000000000000128, -0.05674999999999919, -0.013999999999999346, -0.0470000000000006, 0.008749999999999147, -0.006999999999999673, 0.11899999999999977, 0.10125000000000028, -0.04650000000000176, -0.057000000000000384, -0.00975000000000037, -0.009000000000000341, -0.00300000000000189, -0.04974999999999952, 0.07699999999999818, 0.06874999999999787, 0.0182500000000001, -0.017750000000001265, -0.019000000000000128, 0.010500000000000398, -0.012750000000000483, 0.011499999999999844, 0.11850000000000094, 0.04600000000000115, 0.05200000000000138, -0.03249999999999886, 0.004749999999999588], zp_timestamp='2025-11-25T23:57:00')
2025-11-26T02:01:28.538 [DEBUG] [Thread-9725] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:01:28.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:01:28.626 [DEBUG] [Thread-9728] [transport.py] [_log()] starting thread (client mode): 0x70d6ac20
2025-11-26T02:01:28.626 [DEBUG] [Thread-9728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:01:28.641 [DEBUG] [Thread-9728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:01:28.641 [INFO] [Thread-9728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] client lang: <none>
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] server lang: <none>
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] kex follows: False
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] Compression: none
2025-11-26T02:01:28.649 [DEBUG] [Thread-9728] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:01:28.707 [DEBUG] [Thread-9728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:01:28.707 [DEBUG] [Thread-9728] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:01:28.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:01:28.707 [DEBUG] [Thread-9728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:01:28.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:01:28.763 [DEBUG] [Thread-9728] [transport.py] [_log()] userauth is OK
2025-11-26T02:01:28.764 [DEBUG] [Thread-9728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:01:28.764 [DEBUG] [Thread-9728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:01:28.764 [DEBUG] [Thread-9728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:01:28.764 [DEBUG] [Thread-9728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:01:28.781 [INFO] [Thread-9728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:01:28.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:01:28.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:01:29.651 [DEBUG] [Thread-9728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:01:29.651 [DEBUG] [Thread-9728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:01:29.699 [DEBUG] [Thread-9728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:01:29.699 [DEBUG] [Thread-9728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:01:29.708 [DEBUG] [Thread-9728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:01:29.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:01:29.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:01:29.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:01:29.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:01:29.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:01:29.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:01:29.739 [DEBUG] [Thread-9728] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:01:37.904 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:37.905 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:38.940 [DEBUG] [Thread-9730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:53.991 [DEBUG] [Thread-9731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:01:59.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:01:59.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:01:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:02:00.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 1, 55), 31.62, 10.95, 0.0, 7.22, 20.51, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:02:00.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:01:55
2025-11-26T02:02:00.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:02:00.672 [DEBUG] [Thread-9732] [transport.py] [_log()] starting thread (client mode): 0x70d6b040
2025-11-26T02:02:00.672 [DEBUG] [Thread-9732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:02:00.692 [DEBUG] [Thread-9732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:02:00.693 [INFO] [Thread-9732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] client lang: <none>
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] server lang: <none>
2025-11-26T02:02:00.696 [DEBUG] [Thread-9732] [transport.py] [_log()] kex follows: False
2025-11-26T02:02:00.697 [DEBUG] [Thread-9732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:02:00.697 [DEBUG] [Thread-9732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:02:00.697 [DEBUG] [Thread-9732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:02:00.697 [DEBUG] [Thread-9732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:02:00.697 [DEBUG] [Thread-9732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:02:00.697 [DEBUG] [Thread-9732] [transport.py] [_log()] Compression: none
2025-11-26T02:02:00.697 [DEBUG] [Thread-9732] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:02:00.716 [DEBUG] [Thread-9732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:02:00.717 [DEBUG] [Thread-9732] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:02:00.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:02:00.718 [DEBUG] [Thread-9732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:02:00.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:02:00.720 [DEBUG] [Thread-9732] [transport.py] [_log()] userauth is OK
2025-11-26T02:02:00.721 [DEBUG] [Thread-9732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:02:00.721 [DEBUG] [Thread-9732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:02:00.721 [DEBUG] [Thread-9732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:02:00.721 [DEBUG] [Thread-9732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:02:00.744 [INFO] [Thread-9732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:02:00.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:02:01.365 [DEBUG] [Thread-9732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:02:01.365 [DEBUG] [Thread-9732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:02:01.365 [DEBUG] [Thread-9732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:02:01.405 [DEBUG] [Thread-9732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:02:01.405 [DEBUG] [Thread-9732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:02:01.407 [DEBUG] [Thread-9732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:02:01.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:02:01.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:02:01.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:02:01.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:02:01.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:02:01.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:02:01.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:02:01.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.001138 -999.00  +19.90   7.26     16   -6.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 7.0 7.3 124.0 7.8 19.4 -26.2 19.3 -25.5 18.9 -24.2 19.2 -25.1
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.001138
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:02:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:01:55', tmtdew=31.62, humidity=10.95, cloud=0.0, wind=7.22, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:01:55', seeing=0.6, atlas_timestamp='2025-11-26T00:01:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:00:00')
2025-11-26T02:02:01.425 [DEBUG] [Thread-9732] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:02:01.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:02:01.512 [DEBUG] [Thread-9735] [transport.py] [_log()] starting thread (client mode): 0x70da6b60
2025-11-26T02:02:01.512 [DEBUG] [Thread-9735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:02:01.526 [DEBUG] [Thread-9735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:02:01.527 [INFO] [Thread-9735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:02:01.534 [DEBUG] [Thread-9735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] client lang: <none>
2025-11-26T02:02:01.535 [DEBUG] [Thread-9735] [transport.py] [_log()] server lang: <none>
2025-11-26T02:02:01.536 [DEBUG] [Thread-9735] [transport.py] [_log()] kex follows: False
2025-11-26T02:02:01.536 [DEBUG] [Thread-9735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:02:01.536 [DEBUG] [Thread-9735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:02:01.536 [DEBUG] [Thread-9735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:02:01.536 [DEBUG] [Thread-9735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:02:01.536 [DEBUG] [Thread-9735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:02:01.536 [DEBUG] [Thread-9735] [transport.py] [_log()] Compression: none
2025-11-26T02:02:01.536 [DEBUG] [Thread-9735] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:02:01.591 [DEBUG] [Thread-9735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:02:01.592 [DEBUG] [Thread-9735] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:02:01.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:02:01.593 [DEBUG] [Thread-9735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:02:01.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:02:01.648 [DEBUG] [Thread-9735] [transport.py] [_log()] userauth is OK
2025-11-26T02:02:01.648 [DEBUG] [Thread-9735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:02:01.648 [DEBUG] [Thread-9735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:02:01.648 [DEBUG] [Thread-9735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:02:01.649 [DEBUG] [Thread-9735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:02:01.667 [INFO] [Thread-9735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:02:01.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:02:01.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:02:02.545 [DEBUG] [Thread-9735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:02:02.545 [DEBUG] [Thread-9735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:02:02.593 [DEBUG] [Thread-9735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:02:02.593 [DEBUG] [Thread-9735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:02:02.603 [DEBUG] [Thread-9735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:02:02.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:02:02.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:02:02.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:02:02.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:02:02.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:02:02.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:02:02.640 [DEBUG] [Thread-9735] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:02:09.020 [DEBUG] [Thread-9737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:19.220 [DEBUG] [Thread-9738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:24.068 [DEBUG] [Thread-9739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:24.823 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:28.947 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:02:32.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:02:32.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
2025-11-26T02:02:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 2, 27), 31.65, 10.93, 0.0, 7.41, 20.58, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:02:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:02:27
2025-11-26T02:02:33.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:02:33.583 [DEBUG] [Thread-9740] [transport.py] [_log()] starting thread (client mode): 0x70de5f00
2025-11-26T02:02:33.583 [DEBUG] [Thread-9740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:02:33.603 [DEBUG] [Thread-9740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:02:33.604 [INFO] [Thread-9740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] client lang: <none>
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] server lang: <none>
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] kex follows: False
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] Compression: none
2025-11-26T02:02:33.607 [DEBUG] [Thread-9740] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:02:33.625 [DEBUG] [Thread-9740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:02:33.625 [DEBUG] [Thread-9740] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:02:33.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:02:33.626 [DEBUG] [Thread-9740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:02:33.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:02:33.629 [DEBUG] [Thread-9740] [transport.py] [_log()] userauth is OK
2025-11-26T02:02:33.629 [DEBUG] [Thread-9740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:02:33.629 [DEBUG] [Thread-9740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:02:33.629 [DEBUG] [Thread-9740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:02:33.629 [DEBUG] [Thread-9740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:02:33.654 [INFO] [Thread-9740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:02:33.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:02:34.278 [DEBUG] [Thread-9740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:02:34.278 [DEBUG] [Thread-9740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:02:34.278 [DEBUG] [Thread-9740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:02:34.319 [DEBUG] [Thread-9740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:02:34.319 [DEBUG] [Thread-9740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:02:34.322 [DEBUG] [Thread-9740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:02:34.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:02:34.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:02:34.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:02:34.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:02:34.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:02:34.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:02:34.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:02:34.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:02:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:02:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.001485 -999.00  +19.90   6.92     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.0 6.9 122.4 7.8 19.4 -26.2 19.2 -25.6 18.9 -24.3 19.2 -25.2
2025-11-26T02:02:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:02:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:02:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.001485
2025-11-26T02:02:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:02:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:02:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:02:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:02:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:02:34.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:02:27', tmtdew=31.65, humidity=10.93, cloud=0.0, wind=7.41, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:02:27', seeing=0.59, atlas_timestamp='2025-11-26T00:02:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:00:00')
2025-11-26T02:02:34.349 [DEBUG] [Thread-9740] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:02:34.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:02:34.444 [DEBUG] [Thread-9743] [transport.py] [_log()] starting thread (client mode): 0x70da7460
2025-11-26T02:02:34.444 [DEBUG] [Thread-9743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:02:34.460 [DEBUG] [Thread-9743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:02:34.460 [INFO] [Thread-9743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:02:34.467 [DEBUG] [Thread-9743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] client lang: <none>
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] server lang: <none>
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] kex follows: False
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] Compression: none
2025-11-26T02:02:34.468 [DEBUG] [Thread-9743] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:02:34.528 [DEBUG] [Thread-9743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:02:34.528 [DEBUG] [Thread-9743] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:02:34.529 [DEBUG] [Thread-9743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:02:34.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:02:34.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:02:34.587 [DEBUG] [Thread-9743] [transport.py] [_log()] userauth is OK
2025-11-26T02:02:34.588 [DEBUG] [Thread-9743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:02:34.588 [DEBUG] [Thread-9743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:02:34.588 [DEBUG] [Thread-9743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:02:34.588 [DEBUG] [Thread-9743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:02:34.613 [INFO] [Thread-9743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:02:34.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:02:34.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:02:35.430 [DEBUG] [Thread-9743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:02:35.430 [DEBUG] [Thread-9743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:02:35.480 [DEBUG] [Thread-9743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:02:35.480 [DEBUG] [Thread-9743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:02:35.489 [DEBUG] [Thread-9743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:02:35.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:02:35.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:02:35.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:02:35.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:02:35.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:02:35.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:02:35.526 [DEBUG] [Thread-9743] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:02:38.116 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:38.117 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:39.103 [DEBUG] [Thread-9745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:40.413 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:50.830 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:02:54.156 [DEBUG] [Thread-9746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:01.293 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:05.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:03:05.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:03:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:03:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 2, 59), 31.63, 10.95, 0.0, 7.41, 20.58, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:03:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:02:59
2025-11-26T02:03:06.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:03:06.455 [DEBUG] [Thread-9747] [transport.py] [_log()] starting thread (client mode): 0x70d7e7a0
2025-11-26T02:03:06.455 [DEBUG] [Thread-9747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:03:06.468 [DEBUG] [Thread-9747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:03:06.468 [INFO] [Thread-9747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:03:06.470 [DEBUG] [Thread-9747] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:03:06.470 [DEBUG] [Thread-9747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:03:06.470 [DEBUG] [Thread-9747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:03:06.470 [DEBUG] [Thread-9747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:03:06.470 [DEBUG] [Thread-9747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:03:06.470 [DEBUG] [Thread-9747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:03:06.470 [DEBUG] [Thread-9747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] client lang: <none>
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] server lang: <none>
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] kex follows: False
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] Compression: none
2025-11-26T02:03:06.471 [DEBUG] [Thread-9747] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:03:06.490 [DEBUG] [Thread-9747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:03:06.491 [DEBUG] [Thread-9747] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:03:06.491 [DEBUG] [Thread-9747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:03:06.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:03:06.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:03:06.499 [DEBUG] [Thread-9747] [transport.py] [_log()] userauth is OK
2025-11-26T02:03:06.500 [DEBUG] [Thread-9747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:03:06.500 [DEBUG] [Thread-9747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:03:06.500 [DEBUG] [Thread-9747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:03:06.500 [DEBUG] [Thread-9747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:03:06.519 [INFO] [Thread-9747] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:03:06.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:03:07.170 [DEBUG] [Thread-9747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:03:07.170 [DEBUG] [Thread-9747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:03:07.171 [DEBUG] [Thread-9747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:03:07.210 [DEBUG] [Thread-9747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:03:07.211 [DEBUG] [Thread-9747] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:03:07.214 [DEBUG] [Thread-9747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:03:07.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:03:07.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:03:07.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:03:07.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:03:07.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:03:07.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:03:07.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:03:07.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:03:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:03:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.001832 -999.00  +20.00   6.14     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.3 6.1 123.0 7.6 19.4 -26.0 19.2 -25.5 18.9 -24.1 19.2 -25.3
2025-11-26T02:03:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:03:07.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:03:07.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.001832
2025-11-26T02:03:07.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:03:07.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:03:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:03:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:03:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:03:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:02:59', tmtdew=31.63, humidity=10.95, cloud=0.0, wind=7.41, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:02:59', seeing=0.59, atlas_timestamp='2025-11-26T00:02:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:00:00')
2025-11-26T02:03:07.238 [DEBUG] [Thread-9747] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:03:07.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:03:07.334 [DEBUG] [Thread-9750] [transport.py] [_log()] starting thread (client mode): 0x70dbc070
2025-11-26T02:03:07.334 [DEBUG] [Thread-9750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:03:07.348 [DEBUG] [Thread-9750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:03:07.349 [INFO] [Thread-9750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:03:07.358 [DEBUG] [Thread-9750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] client lang: <none>
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] server lang: <none>
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] kex follows: False
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:03:07.359 [DEBUG] [Thread-9750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:03:07.360 [DEBUG] [Thread-9750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:03:07.360 [DEBUG] [Thread-9750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:03:07.360 [DEBUG] [Thread-9750] [transport.py] [_log()] Compression: none
2025-11-26T02:03:07.360 [DEBUG] [Thread-9750] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:03:07.415 [DEBUG] [Thread-9750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:03:07.416 [DEBUG] [Thread-9750] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:03:07.416 [DEBUG] [Thread-9750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:03:07.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:03:07.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:03:07.476 [DEBUG] [Thread-9750] [transport.py] [_log()] userauth is OK
2025-11-26T02:03:07.477 [DEBUG] [Thread-9750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:03:07.477 [DEBUG] [Thread-9750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:03:07.477 [DEBUG] [Thread-9750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:03:07.477 [DEBUG] [Thread-9750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:03:07.496 [INFO] [Thread-9750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:03:07.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:03:07.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:03:08.342 [DEBUG] [Thread-9750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:03:08.342 [DEBUG] [Thread-9750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:03:08.390 [DEBUG] [Thread-9750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:03:08.390 [DEBUG] [Thread-9750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:03:08.399 [DEBUG] [Thread-9750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:03:08.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:03:08.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:03:08.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:03:08.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:03:08.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:03:08.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:03:08.436 [DEBUG] [Thread-9750] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:03:09.193 [DEBUG] [Thread-9752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:11.743 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:19.277 [DEBUG] [Thread-9753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:22.174 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:24.249 [DEBUG] [Thread-9754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:32.600 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:38.321 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:38.322 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:38.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:03:38.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:03:38.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:03:39.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 3, 31), 31.65, 10.93, 0.0, 7.17, 20.59, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:03:39.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:03:31
2025-11-26T02:03:39.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:03:39.283 [DEBUG] [Thread-9755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:39.366 [DEBUG] [Thread-9756] [transport.py] [_log()] starting thread (client mode): 0x70da6a40
2025-11-26T02:03:39.366 [DEBUG] [Thread-9756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:03:39.388 [DEBUG] [Thread-9756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:03:39.388 [INFO] [Thread-9756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] client lang: <none>
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] server lang: <none>
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] kex follows: False
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] Compression: none
2025-11-26T02:03:39.392 [DEBUG] [Thread-9756] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:03:39.407 [DEBUG] [Thread-9756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:03:39.407 [DEBUG] [Thread-9756] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:03:39.407 [DEBUG] [Thread-9756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:03:39.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:03:39.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:03:39.408 [DEBUG] [Thread-9756] [transport.py] [_log()] userauth is OK
2025-11-26T02:03:39.408 [DEBUG] [Thread-9756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:03:39.408 [DEBUG] [Thread-9756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:03:39.408 [DEBUG] [Thread-9756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:03:39.408 [DEBUG] [Thread-9756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:03:39.435 [INFO] [Thread-9756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:03:39.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:03:40.058 [DEBUG] [Thread-9756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:03:40.058 [DEBUG] [Thread-9756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:03:40.059 [DEBUG] [Thread-9756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:03:40.099 [DEBUG] [Thread-9756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:03:40.099 [DEBUG] [Thread-9756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:03:40.103 [DEBUG] [Thread-9756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:03:40.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:03:40.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:03:40.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:03:40.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:03:40.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:03:40.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:03:40.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:03:40.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:03:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:03:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.002180 -999.00  +20.00   6.88     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.9 6.9 121.4 7.3 19.4 -25.6 19.3 -25.6 18.9 -24.1 19.2 -25.1
2025-11-26T02:03:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:03:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:03:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.002180
2025-11-26T02:03:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:03:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:03:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:03:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:03:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:03:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:03:31', tmtdew=31.65, humidity=10.93, cloud=0.0, wind=7.17, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:03:31', seeing=0.59, atlas_timestamp='2025-11-26T00:03:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:00:00')
2025-11-26T02:03:40.130 [DEBUG] [Thread-9756] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:03:40.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:03:40.225 [DEBUG] [Thread-9759] [transport.py] [_log()] starting thread (client mode): 0x70d68d90
2025-11-26T02:03:40.225 [DEBUG] [Thread-9759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:03:40.240 [DEBUG] [Thread-9759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:03:40.240 [INFO] [Thread-9759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:03:40.248 [DEBUG] [Thread-9759] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:03:40.248 [DEBUG] [Thread-9759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:03:40.248 [DEBUG] [Thread-9759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:03:40.249 [DEBUG] [Thread-9759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:03:40.249 [DEBUG] [Thread-9759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:03:40.249 [DEBUG] [Thread-9759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:03:40.249 [DEBUG] [Thread-9759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:03:40.249 [DEBUG] [Thread-9759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:03:40.249 [DEBUG] [Thread-9759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:03:40.249 [DEBUG] [Thread-9759] [transport.py] [_log()] client lang: <none>
2025-11-26T02:03:40.249 [DEBUG] [Thread-9759] [transport.py] [_log()] server lang: <none>
2025-11-26T02:03:40.250 [DEBUG] [Thread-9759] [transport.py] [_log()] kex follows: False
2025-11-26T02:03:40.250 [DEBUG] [Thread-9759] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:03:40.250 [DEBUG] [Thread-9759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:03:40.250 [DEBUG] [Thread-9759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:03:40.250 [DEBUG] [Thread-9759] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:03:40.250 [DEBUG] [Thread-9759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:03:40.250 [DEBUG] [Thread-9759] [transport.py] [_log()] Compression: none
2025-11-26T02:03:40.250 [DEBUG] [Thread-9759] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:03:40.306 [DEBUG] [Thread-9759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:03:40.307 [DEBUG] [Thread-9759] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:03:40.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:03:40.309 [DEBUG] [Thread-9759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:03:40.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:03:40.362 [DEBUG] [Thread-9759] [transport.py] [_log()] userauth is OK
2025-11-26T02:03:40.362 [DEBUG] [Thread-9759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:03:40.362 [DEBUG] [Thread-9759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:03:40.362 [DEBUG] [Thread-9759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:03:40.362 [DEBUG] [Thread-9759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:03:40.381 [INFO] [Thread-9759] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:03:40.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:03:40.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:03:41.197 [DEBUG] [Thread-9759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:03:41.197 [DEBUG] [Thread-9759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:03:41.246 [DEBUG] [Thread-9759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:03:41.247 [DEBUG] [Thread-9759] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:03:41.256 [DEBUG] [Thread-9759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:03:41.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:03:41.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:03:41.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:03:41.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:03:41.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:03:41.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:03:41.295 [DEBUG] [Thread-9759] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:03:43.000 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:53.398 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:03:54.309 [DEBUG] [Thread-9761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:03.793 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:09.359 [DEBUG] [Thread-9762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:04:11.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:04:11.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:04:11.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 4, 3), 31.64, 10.95, 0.0, 6.94, 20.59, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:04:11.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:04:03
2025-11-26T02:04:12.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:04:12.235 [DEBUG] [Thread-9763] [transport.py] [_log()] starting thread (client mode): 0x70dd2f80
2025-11-26T02:04:12.235 [DEBUG] [Thread-9763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:04:12.257 [DEBUG] [Thread-9763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:04:12.258 [INFO] [Thread-9763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] client lang: <none>
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] server lang: <none>
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] kex follows: False
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] Compression: none
2025-11-26T02:04:12.260 [DEBUG] [Thread-9763] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:04:12.277 [DEBUG] [Thread-9763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:04:12.277 [DEBUG] [Thread-9763] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:04:12.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:04:12.278 [DEBUG] [Thread-9763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:04:12.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:04:12.280 [DEBUG] [Thread-9763] [transport.py] [_log()] userauth is OK
2025-11-26T02:04:12.280 [DEBUG] [Thread-9763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:04:12.280 [DEBUG] [Thread-9763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:04:12.280 [DEBUG] [Thread-9763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:04:12.280 [DEBUG] [Thread-9763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:04:12.298 [INFO] [Thread-9763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:04:12.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:04:12.875 [DEBUG] [Thread-9763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:04:12.875 [DEBUG] [Thread-9763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:04:12.875 [DEBUG] [Thread-9763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:04:12.916 [DEBUG] [Thread-9763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:04:12.916 [DEBUG] [Thread-9763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:04:12.919 [DEBUG] [Thread-9763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:04:12.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:04:12.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:04:12.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:04:12.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:04:12.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:04:12.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:04:12.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:04:12.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:04:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:04:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.002527 -999.00  +20.00   7.24     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 7.2 7.2 125.6 7.8 19.4 -25.9 19.3 -25.6 18.9 -24.0 19.2 -25.0
2025-11-26T02:04:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:04:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:04:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.002527
2025-11-26T02:04:12.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:04:12.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:04:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:04:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:04:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:04:12.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:04:03', tmtdew=31.64, humidity=10.95, cloud=0.0, wind=6.94, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:04:03', seeing=0.56, atlas_timestamp='2025-11-26T00:03:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:00:00')
2025-11-26T02:04:12.947 [DEBUG] [Thread-9763] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:04:13.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:04:13.044 [DEBUG] [Thread-9766] [transport.py] [_log()] starting thread (client mode): 0x70d3b3d0
2025-11-26T02:04:13.044 [DEBUG] [Thread-9766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:04:13.060 [DEBUG] [Thread-9766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:04:13.060 [INFO] [Thread-9766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:04:13.067 [DEBUG] [Thread-9766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:04:13.067 [DEBUG] [Thread-9766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] client lang: <none>
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] server lang: <none>
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] kex follows: False
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] Compression: none
2025-11-26T02:04:13.068 [DEBUG] [Thread-9766] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:04:13.125 [DEBUG] [Thread-9766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:04:13.126 [DEBUG] [Thread-9766] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:04:13.126 [DEBUG] [Thread-9766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:04:13.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:04:13.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:04:13.181 [DEBUG] [Thread-9766] [transport.py] [_log()] userauth is OK
2025-11-26T02:04:13.182 [DEBUG] [Thread-9766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:04:13.182 [DEBUG] [Thread-9766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:04:13.182 [DEBUG] [Thread-9766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:04:13.182 [DEBUG] [Thread-9766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:04:13.204 [INFO] [Thread-9766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:04:13.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:04:13.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:04:14.037 [DEBUG] [Thread-9766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:04:14.037 [DEBUG] [Thread-9766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:04:14.085 [DEBUG] [Thread-9766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:04:14.085 [DEBUG] [Thread-9766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:04:14.094 [DEBUG] [Thread-9766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:04:14.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:04:14.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:04:14.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
2025-11-26T02:04:14.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:04:14.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:04:14.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:04:14.126 [DEBUG] [Thread-9766] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:04:14.189 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:19.340 [DEBUG] [Thread-9768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:24.393 [DEBUG] [Thread-9769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:24.604 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:35.021 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:38.524 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:38.525 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:39.434 [DEBUG] [Thread-9770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:44.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:04:44.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:04:44.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:04:44.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 4, 35), 31.7, 10.85, 0.0, 6.87, 20.59, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:04:44.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:04:35
2025-11-26T02:04:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:04:45.075 [DEBUG] [Thread-9771] [transport.py] [_log()] starting thread (client mode): 0x70d7ec80
2025-11-26T02:04:45.075 [DEBUG] [Thread-9771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:04:45.096 [DEBUG] [Thread-9771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:04:45.096 [INFO] [Thread-9771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:04:45.099 [DEBUG] [Thread-9771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:04:45.099 [DEBUG] [Thread-9771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] client lang: <none>
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] server lang: <none>
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] kex follows: False
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:04:45.100 [DEBUG] [Thread-9771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:04:45.101 [DEBUG] [Thread-9771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:04:45.101 [DEBUG] [Thread-9771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:04:45.101 [DEBUG] [Thread-9771] [transport.py] [_log()] Compression: none
2025-11-26T02:04:45.101 [DEBUG] [Thread-9771] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:04:45.119 [DEBUG] [Thread-9771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:04:45.120 [DEBUG] [Thread-9771] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:04:45.120 [DEBUG] [Thread-9771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:04:45.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:04:45.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:04:45.122 [DEBUG] [Thread-9771] [transport.py] [_log()] userauth is OK
2025-11-26T02:04:45.122 [DEBUG] [Thread-9771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:04:45.123 [DEBUG] [Thread-9771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:04:45.123 [DEBUG] [Thread-9771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:04:45.123 [DEBUG] [Thread-9771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:04:45.147 [INFO] [Thread-9771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:04:45.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:04:45.416 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:45.784 [DEBUG] [Thread-9771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:04:45.784 [DEBUG] [Thread-9771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:04:45.785 [DEBUG] [Thread-9771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:04:45.825 [DEBUG] [Thread-9771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:04:45.826 [DEBUG] [Thread-9771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:04:45.828 [DEBUG] [Thread-9771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:04:45.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:04:45.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:04:45.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:04:45.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:04:45.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:04:45.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:04:45.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:04:45.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:04:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:04:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.002874 -999.00  +20.00   6.62     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 7.2 6.6 124.2 7.7 19.4 -26.3 19.3 -25.5 18.9 -24.2 19.2 -25.3
2025-11-26T02:04:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:04:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:04:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.002874
2025-11-26T02:04:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:04:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:04:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:04:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:04:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:04:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:04:35', tmtdew=31.7, humidity=10.85, cloud=0.0, wind=6.87, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:04:35', seeing=0.56, atlas_timestamp='2025-11-26T00:04:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:03:00')
2025-11-26T02:04:45.852 [DEBUG] [Thread-9771] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:04:45.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:04:45.956 [DEBUG] [Thread-9774] [transport.py] [_log()] starting thread (client mode): 0x70d420e0
2025-11-26T02:04:45.957 [DEBUG] [Thread-9774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:04:45.971 [DEBUG] [Thread-9774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:04:45.971 [INFO] [Thread-9774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:04:45.979 [DEBUG] [Thread-9774] [transport.py] [_log()] client lang: <none>
2025-11-26T02:04:45.980 [DEBUG] [Thread-9774] [transport.py] [_log()] server lang: <none>
2025-11-26T02:04:45.980 [DEBUG] [Thread-9774] [transport.py] [_log()] kex follows: False
2025-11-26T02:04:45.980 [DEBUG] [Thread-9774] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:04:45.980 [DEBUG] [Thread-9774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:04:45.980 [DEBUG] [Thread-9774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:04:45.980 [DEBUG] [Thread-9774] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:04:45.980 [DEBUG] [Thread-9774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:04:45.980 [DEBUG] [Thread-9774] [transport.py] [_log()] Compression: none
2025-11-26T02:04:45.980 [DEBUG] [Thread-9774] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:04:46.040 [DEBUG] [Thread-9774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:04:46.041 [DEBUG] [Thread-9774] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:04:46.041 [DEBUG] [Thread-9774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:04:46.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:04:46.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:04:46.097 [DEBUG] [Thread-9774] [transport.py] [_log()] userauth is OK
2025-11-26T02:04:46.098 [DEBUG] [Thread-9774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:04:46.098 [DEBUG] [Thread-9774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:04:46.098 [DEBUG] [Thread-9774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:04:46.098 [DEBUG] [Thread-9774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:04:46.116 [INFO] [Thread-9774] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:04:46.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:04:46.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:04:46.943 [DEBUG] [Thread-9774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:04:46.944 [DEBUG] [Thread-9774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:04:46.991 [DEBUG] [Thread-9774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:04:46.991 [DEBUG] [Thread-9774] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:04:47.001 [DEBUG] [Thread-9774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:04:47.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:04:47.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:04:47.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:04:47.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:04:47.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:04:47.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:04:47.039 [DEBUG] [Thread-9774] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:04:54.475 [DEBUG] [Thread-9776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:04:55.814 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:06.229 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:09.519 [DEBUG] [Thread-9777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:16.628 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:17.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:05:17.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:05:17.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:05:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 5, 7), 31.63, 10.92, 0.0, 7.27, 20.63, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:05:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:05:07
2025-11-26T02:05:17.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:05:18.005 [DEBUG] [Thread-9778] [transport.py] [_log()] starting thread (client mode): 0x70d43790
2025-11-26T02:05:18.005 [DEBUG] [Thread-9778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:05:18.024 [DEBUG] [Thread-9778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:05:18.024 [INFO] [Thread-9778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:05:18.028 [DEBUG] [Thread-9778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:05:18.028 [DEBUG] [Thread-9778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:05:18.028 [DEBUG] [Thread-9778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:05:18.028 [DEBUG] [Thread-9778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:05:18.028 [DEBUG] [Thread-9778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:05:18.028 [DEBUG] [Thread-9778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:05:18.028 [DEBUG] [Thread-9778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:05:18.028 [DEBUG] [Thread-9778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] client lang: <none>
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] server lang: <none>
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] kex follows: False
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:05:18.029 [DEBUG] [Thread-9778] [transport.py] [_log()] Compression: none
2025-11-26T02:05:18.030 [DEBUG] [Thread-9778] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:05:18.043 [DEBUG] [Thread-9778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:05:18.044 [DEBUG] [Thread-9778] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:05:18.044 [DEBUG] [Thread-9778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:05:18.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:05:18.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:05:18.046 [DEBUG] [Thread-9778] [transport.py] [_log()] userauth is OK
2025-11-26T02:05:18.046 [DEBUG] [Thread-9778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:05:18.046 [DEBUG] [Thread-9778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:05:18.046 [DEBUG] [Thread-9778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:05:18.046 [DEBUG] [Thread-9778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:05:18.064 [INFO] [Thread-9778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:05:18.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:05:18.701 [DEBUG] [Thread-9778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:05:18.701 [DEBUG] [Thread-9778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:05:18.702 [DEBUG] [Thread-9778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:05:18.742 [DEBUG] [Thread-9778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:05:18.742 [DEBUG] [Thread-9778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:05:18.746 [DEBUG] [Thread-9778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:05:18.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:05:18.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:05:18.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:05:18.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:05:18.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:05:18.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:05:18.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:05:18.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:05:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:05:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.003568 -999.00  +20.00   6.83     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.6 6.8 124.0 7.2 19.4 -26.1 19.3 -25.5 18.9 -24.1 19.2 -25.2
2025-11-26T02:05:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:05:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:05:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.003568
2025-11-26T02:05:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:05:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:05:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:05:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:05:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:05:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:05:07', tmtdew=31.63, humidity=10.92, cloud=0.0, wind=7.27, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:05:07', seeing=0.63, atlas_timestamp='2025-11-26T00:05:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:03:00')
2025-11-26T02:05:18.771 [DEBUG] [Thread-9778] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:05:18.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:05:18.869 [DEBUG] [Thread-9781] [transport.py] [_log()] starting thread (client mode): 0x70dbdc60
2025-11-26T02:05:18.869 [DEBUG] [Thread-9781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:05:18.884 [DEBUG] [Thread-9781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:05:18.884 [INFO] [Thread-9781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:05:18.891 [DEBUG] [Thread-9781] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] client lang: <none>
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] server lang: <none>
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] kex follows: False
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:05:18.892 [DEBUG] [Thread-9781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:05:18.893 [DEBUG] [Thread-9781] [transport.py] [_log()] Compression: none
2025-11-26T02:05:18.893 [DEBUG] [Thread-9781] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:05:18.952 [DEBUG] [Thread-9781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:05:18.953 [DEBUG] [Thread-9781] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:05:18.954 [DEBUG] [Thread-9781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:05:18.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:05:18.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:05:19.009 [DEBUG] [Thread-9781] [transport.py] [_log()] userauth is OK
2025-11-26T02:05:19.009 [DEBUG] [Thread-9781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:05:19.009 [DEBUG] [Thread-9781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:05:19.009 [DEBUG] [Thread-9781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:05:19.010 [DEBUG] [Thread-9781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:05:19.028 [INFO] [Thread-9781] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:05:19.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:05:19.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:05:19.397 [DEBUG] [Thread-9783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:19.815 [DEBUG] [Thread-9781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:05:19.815 [DEBUG] [Thread-9781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:05:19.862 [DEBUG] [Thread-9781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:05:19.863 [DEBUG] [Thread-9781] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:05:19.871 [DEBUG] [Thread-9781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:05:19.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:05: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')
2025-11-26T02:05:19.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:05:19.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:05:19.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:05:19.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:05:19.906 [DEBUG] [Thread-9781] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:05:24.554 [DEBUG] [Thread-9784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:27.068 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:37.507 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:38.727 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:38.727 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:39.603 [DEBUG] [Thread-9785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:47.967 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:49.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:05:49.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:05:49.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:05:50.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 5, 39), 31.63, 10.92, 0.0, 7.2, 20.61, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:05:50.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:05:39
2025-11-26T02:05:50.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:05:50.843 [DEBUG] [Thread-9786] [transport.py] [_log()] starting thread (client mode): 0x7374e740
2025-11-26T02:05:50.843 [DEBUG] [Thread-9786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:05:50.863 [DEBUG] [Thread-9786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:05:50.863 [INFO] [Thread-9786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:05:50.867 [DEBUG] [Thread-9786] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:05:50.867 [DEBUG] [Thread-9786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:05:50.867 [DEBUG] [Thread-9786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:05:50.867 [DEBUG] [Thread-9786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:05:50.867 [DEBUG] [Thread-9786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:05:50.867 [DEBUG] [Thread-9786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:05:50.867 [DEBUG] [Thread-9786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:05:50.867 [DEBUG] [Thread-9786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] client lang: <none>
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] server lang: <none>
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] kex follows: False
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] Compression: none
2025-11-26T02:05:50.868 [DEBUG] [Thread-9786] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:05:50.879 [DEBUG] [Thread-9786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:05:50.880 [DEBUG] [Thread-9786] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:05:50.881 [DEBUG] [Thread-9786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:05:50.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:05:50.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:05:50.884 [DEBUG] [Thread-9786] [transport.py] [_log()] userauth is OK
2025-11-26T02:05:50.885 [DEBUG] [Thread-9786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:05:50.885 [DEBUG] [Thread-9786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:05:50.885 [DEBUG] [Thread-9786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:05:50.885 [DEBUG] [Thread-9786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:05:50.910 [INFO] [Thread-9786] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:05:50.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:05:51.477 [DEBUG] [Thread-9786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:05:51.478 [DEBUG] [Thread-9786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:05:51.478 [DEBUG] [Thread-9786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:05:51.518 [DEBUG] [Thread-9786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:05:51.519 [DEBUG] [Thread-9786] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:05:51.521 [DEBUG] [Thread-9786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:05:51.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:05:51.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:05:51.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:05:51.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:05:51.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:05:51.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:05:51.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:05:51.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:05:51.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:05:51.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.003916 -999.00  +20.10   6.13     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.2 6.1 125.0 7.0 19.4 -26.2 19.3 -25.4 18.9 -24.1 19.2 -25.2
2025-11-26T02:05:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:05:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:05:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.003916
2025-11-26T02:05:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:05:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:05:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:05:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:05:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:05:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:05:39', tmtdew=31.63, humidity=10.92, cloud=0.0, wind=7.2, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:05:41', seeing=0.63, atlas_timestamp='2025-11-26T00:05:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:03:00')
2025-11-26T02:05:51.547 [DEBUG] [Thread-9786] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:05:51.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:05:51.637 [DEBUG] [Thread-9789] [transport.py] [_log()] starting thread (client mode): 0x70dbdc60
2025-11-26T02:05:51.637 [DEBUG] [Thread-9789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:05:51.652 [DEBUG] [Thread-9789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:05:51.652 [INFO] [Thread-9789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:05:51.660 [DEBUG] [Thread-9789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:05:51.660 [DEBUG] [Thread-9789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:05:51.660 [DEBUG] [Thread-9789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:05:51.661 [DEBUG] [Thread-9789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:05:51.661 [DEBUG] [Thread-9789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:05:51.661 [DEBUG] [Thread-9789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:05:51.661 [DEBUG] [Thread-9789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:05:51.661 [DEBUG] [Thread-9789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:05:51.661 [DEBUG] [Thread-9789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:05:51.661 [DEBUG] [Thread-9789] [transport.py] [_log()] client lang: <none>
2025-11-26T02:05:51.661 [DEBUG] [Thread-9789] [transport.py] [_log()] server lang: <none>
2025-11-26T02:05:51.661 [DEBUG] [Thread-9789] [transport.py] [_log()] kex follows: False
2025-11-26T02:05:51.662 [DEBUG] [Thread-9789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:05:51.662 [DEBUG] [Thread-9789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:05:51.662 [DEBUG] [Thread-9789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:05:51.662 [DEBUG] [Thread-9789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:05:51.662 [DEBUG] [Thread-9789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:05:51.662 [DEBUG] [Thread-9789] [transport.py] [_log()] Compression: none
2025-11-26T02:05:51.662 [DEBUG] [Thread-9789] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:05:51.724 [DEBUG] [Thread-9789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:05:51.724 [DEBUG] [Thread-9789] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:05:51.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:05:51.726 [DEBUG] [Thread-9789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:05:51.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:05:51.784 [DEBUG] [Thread-9789] [transport.py] [_log()] userauth is OK
2025-11-26T02:05:51.784 [DEBUG] [Thread-9789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:05:51.785 [DEBUG] [Thread-9789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:05:51.785 [DEBUG] [Thread-9789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:05:51.785 [DEBUG] [Thread-9789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:05:51.804 [INFO] [Thread-9789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:05:51.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:05:51.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:05:52.630 [DEBUG] [Thread-9789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:05:52.631 [DEBUG] [Thread-9789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:05:52.679 [DEBUG] [Thread-9789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:05:52.679 [DEBUG] [Thread-9789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:05:52.688 [DEBUG] [Thread-9789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:05:52.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:05:52.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:05:52.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:05:52.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:05:52.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:05:52.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:05:52.727 [DEBUG] [Thread-9789] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:05:54.635 [DEBUG] [Thread-9791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:05:58.366 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:08.762 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:09.684 [DEBUG] [Thread-9792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:19.226 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:19.475 [DEBUG] [Thread-9793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:22.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:06:22.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:06:22.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:06:23.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 6, 12), 31.65, 10.9, 0.0, 7.02, 20.63, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:06:23.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:06:12
2025-11-26T02:06:23.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:06:23.663 [DEBUG] [Thread-9794] [transport.py] [_log()] starting thread (client mode): 0x70dbc310
2025-11-26T02:06:23.663 [DEBUG] [Thread-9794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:06:23.673 [DEBUG] [Thread-9794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:06:23.673 [INFO] [Thread-9794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] client lang: <none>
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] server lang: <none>
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] kex follows: False
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] Compression: none
2025-11-26T02:06:23.675 [DEBUG] [Thread-9794] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:06:23.685 [DEBUG] [Thread-9794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:06:23.685 [DEBUG] [Thread-9794] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:06:23.686 [DEBUG] [Thread-9794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:06:23.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:06:23.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:06:23.687 [DEBUG] [Thread-9794] [transport.py] [_log()] userauth is OK
2025-11-26T02:06:23.687 [DEBUG] [Thread-9794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:06:23.687 [DEBUG] [Thread-9794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:06:23.687 [DEBUG] [Thread-9794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:06:23.687 [DEBUG] [Thread-9794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:06:23.707 [INFO] [Thread-9794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:06:23.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:06:24.268 [DEBUG] [Thread-9794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:06:24.268 [DEBUG] [Thread-9794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:06:24.269 [DEBUG] [Thread-9794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:06:24.309 [DEBUG] [Thread-9794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:06:24.309 [DEBUG] [Thread-9794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:06:24.312 [DEBUG] [Thread-9794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:06:24.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:06:24.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:06:24.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:06:24.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:06:24.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:06:24.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:06:24.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:06:24.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:06:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:06:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.004263 -999.00  +20.10   5.63     16   -5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.7 5.6 116.8 6.7 19.4 -26.0 19.3 -25.6 18.9 -24.1 19.1 -25.1
2025-11-26T02:06:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:06:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:06:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.004263
2025-11-26T02:06:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:06:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:06:24.343 [DEBUG] [Thread-9794] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:06:24.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:06:24.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:06:24.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:06:24.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:06:12', tmtdew=31.65, humidity=10.9, cloud=0.0, wind=7.02, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:06:13', seeing=0.88, atlas_timestamp='2025-11-26T00:06:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:03:00')
2025-11-26T02:06:24.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:06:24.440 [DEBUG] [Thread-9797] [transport.py] [_log()] starting thread (client mode): 0x70d6b100
2025-11-26T02:06:24.441 [DEBUG] [Thread-9797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:06:24.455 [DEBUG] [Thread-9797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:06:24.455 [INFO] [Thread-9797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:06:24.463 [DEBUG] [Thread-9797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:06:24.463 [DEBUG] [Thread-9797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:06:24.463 [DEBUG] [Thread-9797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:06:24.463 [DEBUG] [Thread-9797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:06:24.463 [DEBUG] [Thread-9797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:06:24.463 [DEBUG] [Thread-9797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:06:24.463 [DEBUG] [Thread-9797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:06:24.464 [DEBUG] [Thread-9797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:06:24.464 [DEBUG] [Thread-9797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:06:24.464 [DEBUG] [Thread-9797] [transport.py] [_log()] client lang: <none>
2025-11-26T02:06:24.464 [DEBUG] [Thread-9797] [transport.py] [_log()] server lang: <none>
2025-11-26T02:06:24.464 [DEBUG] [Thread-9797] [transport.py] [_log()] kex follows: False
2025-11-26T02:06:24.464 [DEBUG] [Thread-9797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:06:24.464 [DEBUG] [Thread-9797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:06:24.464 [DEBUG] [Thread-9797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:06:24.465 [DEBUG] [Thread-9797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:06:24.465 [DEBUG] [Thread-9797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:06:24.465 [DEBUG] [Thread-9797] [transport.py] [_log()] Compression: none
2025-11-26T02:06:24.465 [DEBUG] [Thread-9797] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:06:24.520 [DEBUG] [Thread-9797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:06:24.520 [DEBUG] [Thread-9797] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:06:24.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:06:24.521 [DEBUG] [Thread-9797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:06:24.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:06:24.576 [DEBUG] [Thread-9797] [transport.py] [_log()] userauth is OK
2025-11-26T02:06:24.576 [DEBUG] [Thread-9797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:06:24.576 [DEBUG] [Thread-9797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:06:24.576 [DEBUG] [Thread-9797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:06:24.576 [DEBUG] [Thread-9797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:06:24.594 [INFO] [Thread-9797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:06:24.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:06:24.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:06:24.719 [DEBUG] [Thread-9799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:25.428 [DEBUG] [Thread-9797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:06:25.428 [DEBUG] [Thread-9797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:06:25.476 [DEBUG] [Thread-9797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:06:25.476 [DEBUG] [Thread-9797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:06:25.485 [DEBUG] [Thread-9797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:06:25.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:06:25.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:06:25.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:06:25.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:06:25.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:06:25.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:06:25.523 [DEBUG] [Thread-9797] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:06:29.632 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:38.931 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:38.933 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:39.775 [DEBUG] [Thread-9800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:40.043 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:50.444 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:54.808 [DEBUG] [Thread-9801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:06:55.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:06:55.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:06:55.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:06:56.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 6, 45), 31.57, 10.93, 0.0, 6.99, 20.66, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:06:56.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:06:45
2025-11-26T02:06:56.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:06:56.460 [DEBUG] [Thread-9802] [transport.py] [_log()] starting thread (client mode): 0x70dfbe50
2025-11-26T02:06:56.460 [DEBUG] [Thread-9802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:06:56.481 [DEBUG] [Thread-9802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:06:56.481 [INFO] [Thread-9802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:06:56.484 [DEBUG] [Thread-9802] [transport.py] [_log()] client lang: <none>
2025-11-26T02:06:56.485 [DEBUG] [Thread-9802] [transport.py] [_log()] server lang: <none>
2025-11-26T02:06:56.485 [DEBUG] [Thread-9802] [transport.py] [_log()] kex follows: False
2025-11-26T02:06:56.485 [DEBUG] [Thread-9802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:06:56.485 [DEBUG] [Thread-9802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:06:56.485 [DEBUG] [Thread-9802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:06:56.485 [DEBUG] [Thread-9802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:06:56.485 [DEBUG] [Thread-9802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:06:56.485 [DEBUG] [Thread-9802] [transport.py] [_log()] Compression: none
2025-11-26T02:06:56.485 [DEBUG] [Thread-9802] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:06:56.505 [DEBUG] [Thread-9802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:06:56.506 [DEBUG] [Thread-9802] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:06:56.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:06:56.507 [DEBUG] [Thread-9802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:06:56.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:06:56.509 [DEBUG] [Thread-9802] [transport.py] [_log()] userauth is OK
2025-11-26T02:06:56.509 [DEBUG] [Thread-9802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:06:56.509 [DEBUG] [Thread-9802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:06:56.509 [DEBUG] [Thread-9802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:06:56.509 [DEBUG] [Thread-9802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:06:56.523 [INFO] [Thread-9802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:06:56.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:06:57.250 [DEBUG] [Thread-9802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:06:57.250 [DEBUG] [Thread-9802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:06:57.250 [DEBUG] [Thread-9802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:06:57.291 [DEBUG] [Thread-9802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:06:57.291 [DEBUG] [Thread-9802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:06:57.294 [DEBUG] [Thread-9802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:06:57.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:06:57.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:06:57.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:06:57.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:06:57.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:06:57.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:06:57.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:06:57.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:06:57.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:06:57.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.004263 -999.00  +20.10   5.63     16   -5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.7 5.6 116.8 6.7 19.4 -26.0 19.3 -25.6 18.9 -24.1 19.1 -25.1
2025-11-26T02:06:57.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:06:57.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:06:57.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.004263
2025-11-26T02:06:57.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:06:57.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:06:57.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:06:57.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:06:57.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:06:57.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:06:45', tmtdew=31.57, humidity=10.93, cloud=0.0, wind=6.99, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:06:45', seeing=0.94, atlas_timestamp='2025-11-26T00:06:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:03:00')
2025-11-26T02:06:57.314 [DEBUG] [Thread-9802] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:06:57.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:06:57.410 [DEBUG] [Thread-9805] [transport.py] [_log()] starting thread (client mode): 0x70dfbeb0
2025-11-26T02:06:57.410 [DEBUG] [Thread-9805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:06:57.424 [DEBUG] [Thread-9805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:06:57.424 [INFO] [Thread-9805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:06:57.433 [DEBUG] [Thread-9805] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:06:57.434 [DEBUG] [Thread-9805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:06:57.434 [DEBUG] [Thread-9805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:06:57.434 [DEBUG] [Thread-9805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:06:57.434 [DEBUG] [Thread-9805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:06:57.434 [DEBUG] [Thread-9805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:06:57.434 [DEBUG] [Thread-9805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:06:57.434 [DEBUG] [Thread-9805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:06:57.434 [DEBUG] [Thread-9805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:06:57.434 [DEBUG] [Thread-9805] [transport.py] [_log()] client lang: <none>
2025-11-26T02:06:57.435 [DEBUG] [Thread-9805] [transport.py] [_log()] server lang: <none>
2025-11-26T02:06:57.435 [DEBUG] [Thread-9805] [transport.py] [_log()] kex follows: False
2025-11-26T02:06:57.435 [DEBUG] [Thread-9805] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:06:57.435 [DEBUG] [Thread-9805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:06:57.435 [DEBUG] [Thread-9805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:06:57.435 [DEBUG] [Thread-9805] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:06:57.435 [DEBUG] [Thread-9805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:06:57.435 [DEBUG] [Thread-9805] [transport.py] [_log()] Compression: none
2025-11-26T02:06:57.435 [DEBUG] [Thread-9805] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:06:57.491 [DEBUG] [Thread-9805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:06:57.492 [DEBUG] [Thread-9805] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:06:57.492 [DEBUG] [Thread-9805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:06:57.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:06:57.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:06:57.547 [DEBUG] [Thread-9805] [transport.py] [_log()] userauth is OK
2025-11-26T02:06:57.547 [DEBUG] [Thread-9805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:06:57.547 [DEBUG] [Thread-9805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:06:57.548 [DEBUG] [Thread-9805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:06:57.548 [DEBUG] [Thread-9805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:06:57.566 [INFO] [Thread-9805] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:06:57.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:06:57.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:06:58.341 [DEBUG] [Thread-9805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:06:58.341 [DEBUG] [Thread-9805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:06:58.389 [DEBUG] [Thread-9805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:06:58.389 [DEBUG] [Thread-9805] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:06:58.398 [DEBUG] [Thread-9805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:06:58.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:06:58.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:06:58.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:06:58.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:06:58.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:06:58.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:06:58.434 [DEBUG] [Thread-9805] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:07:00.840 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:09.841 [DEBUG] [Thread-9807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:11.234 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:19.551 [DEBUG] [Thread-9808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:21.643 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:24.891 [DEBUG] [Thread-9809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:28.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:07:28.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:07:28.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:07:29.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 7, 17), 31.62, 10.89, 0.0, 7.02, 20.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:07:29.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:07:17
2025-11-26T02:07:29.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:07:29.383 [DEBUG] [Thread-9810] [transport.py] [_log()] starting thread (client mode): 0x70dd1ae0
2025-11-26T02:07:29.383 [DEBUG] [Thread-9810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:07:29.403 [DEBUG] [Thread-9810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:07:29.403 [INFO] [Thread-9810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] client lang: <none>
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] server lang: <none>
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] kex follows: False
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:07:29.406 [DEBUG] [Thread-9810] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:07:29.407 [DEBUG] [Thread-9810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:07:29.407 [DEBUG] [Thread-9810] [transport.py] [_log()] Compression: none
2025-11-26T02:07:29.407 [DEBUG] [Thread-9810] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:07:29.421 [DEBUG] [Thread-9810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:07:29.422 [DEBUG] [Thread-9810] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:07:29.422 [DEBUG] [Thread-9810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:07:29.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:07:29.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:07:29.423 [DEBUG] [Thread-9810] [transport.py] [_log()] userauth is OK
2025-11-26T02:07:29.423 [DEBUG] [Thread-9810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:07:29.423 [DEBUG] [Thread-9810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:07:29.423 [DEBUG] [Thread-9810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:07:29.423 [DEBUG] [Thread-9810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:07:29.433 [INFO] [Thread-9810] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:07:29.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:07:30.074 [DEBUG] [Thread-9810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:07:30.074 [DEBUG] [Thread-9810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:07:30.074 [DEBUG] [Thread-9810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:07:30.115 [DEBUG] [Thread-9810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:07:30.115 [DEBUG] [Thread-9810] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:07:30.118 [DEBUG] [Thread-9810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:07:30.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:07:30.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:07:30.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:07:30.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:07:30.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:07:30.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:07:30.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.004610 -999.00  +20.10   6.31     16   -5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.4 6.3 122.6 6.9 19.4 -26.3 19.3 -25.6 18.9 -24.2 19.2 -25.2
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.004610
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:07:17', tmtdew=31.62, humidity=10.89, cloud=0.0, wind=7.02, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:07:17', seeing=0.94, atlas_timestamp='2025-11-26T00:06:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03575000000000017, 0.017250000000000654, -0.014499999999999957, 0.011499999999999844, 0.043250000000000455, -0.03449999999999953, -0.02874999999999872, -0.010500000000000398, -0.041999999999999815, 0.004249999999998977, -0.005000000000000782, 0.07399999999999984, 0.09124999999999872, -0.04400000000000048, -0.02400000000000091, -0.004749999999999588, 0.0030000000000001137, -0.018000000000000682, -0.028750000000000497, 0.07949999999999946, 0.053749999999999076, 0.017250000000000654, -0.02474999999999916, -0.02200000000000024, 0.011499999999999844, -0.021250000000000213, 0.012500000000001066, 0.1014999999999997, 0.1540000000000017, 0.040000000000000924, -0.036999999999999034, 0.00274999999999892], zp_timestamp='2025-11-26T00:03:00')
2025-11-26T02:07:30.138 [DEBUG] [Thread-9810] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:07:30.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:07:30.227 [DEBUG] [Thread-9813] [transport.py] [_log()] starting thread (client mode): 0x70dd3490
2025-11-26T02:07:30.227 [DEBUG] [Thread-9813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:07:30.247 [DEBUG] [Thread-9813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:07:30.247 [INFO] [Thread-9813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:07:30.259 [DEBUG] [Thread-9813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] client lang: <none>
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] server lang: <none>
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] kex follows: False
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] Compression: none
2025-11-26T02:07:30.260 [DEBUG] [Thread-9813] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:07:30.317 [DEBUG] [Thread-9813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:07:30.317 [DEBUG] [Thread-9813] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:07:30.317 [DEBUG] [Thread-9813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:07:30.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:07:30.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:07:30.389 [DEBUG] [Thread-9813] [transport.py] [_log()] userauth is OK
2025-11-26T02:07:30.389 [DEBUG] [Thread-9813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:07:30.389 [DEBUG] [Thread-9813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:07:30.389 [DEBUG] [Thread-9813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:07:30.389 [DEBUG] [Thread-9813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:07:30.403 [INFO] [Thread-9813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:07:30.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:07:30.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:07:31.217 [DEBUG] [Thread-9813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:07:31.217 [DEBUG] [Thread-9813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:07:31.264 [DEBUG] [Thread-9813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:07:31.264 [DEBUG] [Thread-9813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:07:31.272 [DEBUG] [Thread-9813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:07:31.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:07:31.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:07:31.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:07:31.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:07:31.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:07:31.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:07:31.304 [DEBUG] [Thread-9813] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:07:32.057 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:39.135 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:39.135 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:39.927 [DEBUG] [Thread-9815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:42.491 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:52.949 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:07:54.978 [DEBUG] [Thread-9816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:01.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:08:01.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:08:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:08:01.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 7, 49), 31.6, 10.9, 0.0, 6.74, 20.69, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:08:01.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:07:49
2025-11-26T02:08:02.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:08:02.263 [DEBUG] [Thread-9817] [transport.py] [_log()] starting thread (client mode): 0x7374ef80
2025-11-26T02:08:02.263 [DEBUG] [Thread-9817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:08:02.285 [DEBUG] [Thread-9817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:08:02.285 [INFO] [Thread-9817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:08:02.288 [DEBUG] [Thread-9817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:08:02.288 [DEBUG] [Thread-9817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:08:02.288 [DEBUG] [Thread-9817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:08:02.288 [DEBUG] [Thread-9817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:08:02.288 [DEBUG] [Thread-9817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] client lang: <none>
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] server lang: <none>
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] kex follows: False
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] Compression: none
2025-11-26T02:08:02.289 [DEBUG] [Thread-9817] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:08:02.308 [DEBUG] [Thread-9817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:08:02.308 [DEBUG] [Thread-9817] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:08:02.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:08:02.310 [DEBUG] [Thread-9817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:08:02.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:08:02.312 [DEBUG] [Thread-9817] [transport.py] [_log()] userauth is OK
2025-11-26T02:08:02.312 [DEBUG] [Thread-9817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:08:02.312 [DEBUG] [Thread-9817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:08:02.312 [DEBUG] [Thread-9817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:08:02.312 [DEBUG] [Thread-9817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:08:02.337 [INFO] [Thread-9817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:08:02.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:08:03.003 [DEBUG] [Thread-9817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:08:03.003 [DEBUG] [Thread-9817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:08:03.003 [DEBUG] [Thread-9817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:08:03.044 [DEBUG] [Thread-9817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:08:03.044 [DEBUG] [Thread-9817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:08:03.046 [DEBUG] [Thread-9817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:08:03.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:08:03.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:08:03.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:08:03.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:08:03.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:08:03.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:08:03.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:08:03.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:08:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:08:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.004957 -999.00  +20.10   5.80     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.0 5.8 120.6 6.3 19.4 -26.2 19.3 -25.6 18.9 -24.2 19.2 -25.2
2025-11-26T02:08:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:08:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:08:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.004957
2025-11-26T02:08:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:08:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:08:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:08:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:08:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:08:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:07:49', tmtdew=31.6, humidity=10.9, cloud=0.0, wind=6.74, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:07:49', seeing=0.95, atlas_timestamp='2025-11-26T00:07:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.014749999999999375, 0.0017499999999994742, -0.012500000000001066, 0.0024999999999995026, 0.060249999999999915, -0.011499999999999844, -0.02474999999999916, 0.007499999999998508, -0.04299999999999926, -0.011750000000001037, -0.007500000000000284, 0.0909999999999993, 0.06325000000000003, -0.05600000000000094, -0.031000000000000583, -0.00274999999999892, -0.013500000000000512, -0.02450000000000152, -0.02075000000000138, 0.053999999999998494, 0.08624999999999972, 0.009250000000001535, -0.043750000000001066, -0.026000000000001577, 0.026500000000000412, -0.03824999999999967, -0.019499999999998963, 0.1739999999999995, 0.040000000000000924, 0.05799999999999983, -0.026999999999999247, 0.006750000000000256], zp_timestamp='2025-11-26T00:06:00')
2025-11-26T02:08:03.068 [DEBUG] [Thread-9817] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:08:03.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:08:03.157 [DEBUG] [Thread-9820] [transport.py] [_log()] starting thread (client mode): 0x70d68d90
2025-11-26T02:08:03.157 [DEBUG] [Thread-9820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:08:03.171 [DEBUG] [Thread-9820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:08:03.172 [INFO] [Thread-9820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:08:03.179 [DEBUG] [Thread-9820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:08:03.179 [DEBUG] [Thread-9820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:08:03.179 [DEBUG] [Thread-9820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:08:03.179 [DEBUG] [Thread-9820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:08:03.179 [DEBUG] [Thread-9820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:08:03.179 [DEBUG] [Thread-9820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:08:03.179 [DEBUG] [Thread-9820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:08:03.179 [DEBUG] [Thread-9820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] client lang: <none>
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] server lang: <none>
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] kex follows: False
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] Compression: none
2025-11-26T02:08:03.180 [DEBUG] [Thread-9820] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:08:03.237 [DEBUG] [Thread-9820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:08:03.237 [DEBUG] [Thread-9820] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:08:03.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:08:03.238 [DEBUG] [Thread-9820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:08:03.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:08:03.293 [DEBUG] [Thread-9820] [transport.py] [_log()] userauth is OK
2025-11-26T02:08:03.294 [DEBUG] [Thread-9820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:08:03.294 [DEBUG] [Thread-9820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:08:03.294 [DEBUG] [Thread-9820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:08:03.294 [DEBUG] [Thread-9820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:08:03.313 [INFO] [Thread-9820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:08:03.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:08:03.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:08:03.375 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:04.174 [DEBUG] [Thread-9820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:08:04.174 [DEBUG] [Thread-9820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:08:04.222 [DEBUG] [Thread-9820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:08:04.222 [DEBUG] [Thread-9820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:08:04.230 [DEBUG] [Thread-9820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:08:04.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:08:04.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:08:04.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:08:04.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:08:04.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:08:04.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:08:04.261 [DEBUG] [Thread-9820] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:08:10.012 [DEBUG] [Thread-9822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:13.796 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:19.626 [DEBUG] [Thread-9823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:24.181 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:25.067 [DEBUG] [Thread-9824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:08:34.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:08:34.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:08:34.575 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 8, 21), 31.58, 10.92, 0.0, 6.94, 20.66, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:08:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:08:21
2025-11-26T02:08:35.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:08:35.198 [DEBUG] [Thread-9825] [transport.py] [_log()] starting thread (client mode): 0x7374eb90
2025-11-26T02:08:35.199 [DEBUG] [Thread-9825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:08:35.219 [DEBUG] [Thread-9825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:08:35.219 [INFO] [Thread-9825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:08:35.222 [DEBUG] [Thread-9825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:08:35.222 [DEBUG] [Thread-9825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:08:35.222 [DEBUG] [Thread-9825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:08:35.222 [DEBUG] [Thread-9825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:08:35.222 [DEBUG] [Thread-9825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] client lang: <none>
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] server lang: <none>
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] kex follows: False
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] Compression: none
2025-11-26T02:08:35.223 [DEBUG] [Thread-9825] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:08:35.240 [DEBUG] [Thread-9825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:08:35.241 [DEBUG] [Thread-9825] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:08:35.241 [DEBUG] [Thread-9825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:08:35.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:08:35.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:08:35.244 [DEBUG] [Thread-9825] [transport.py] [_log()] userauth is OK
2025-11-26T02:08:35.244 [DEBUG] [Thread-9825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:08:35.244 [DEBUG] [Thread-9825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:08:35.244 [DEBUG] [Thread-9825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:08:35.244 [DEBUG] [Thread-9825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:08:35.269 [INFO] [Thread-9825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:08:35.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:08:35.899 [DEBUG] [Thread-9825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:08:35.899 [DEBUG] [Thread-9825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:08:35.900 [DEBUG] [Thread-9825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:08:35.940 [DEBUG] [Thread-9825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:08:35.940 [DEBUG] [Thread-9825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:08:35.944 [DEBUG] [Thread-9825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:08:35.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:08:35.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:08:35.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:08:35.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:08:35.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:08:35.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:08:35.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:08:35.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:08:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:08:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.005304 -999.00  +20.10   6.08     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.9 6.1 119.8 6.4 19.4 -26.2 19.3 -25.6 18.9 -24.1 19.2 -25.1
2025-11-26T02:08:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:08:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:08:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.005304
2025-11-26T02:08:35.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:08:35.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:08:35.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:08:35.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:08:35.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:08:35.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:08:21', tmtdew=31.58, humidity=10.92, cloud=0.0, wind=6.94, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:08:21', seeing=0.85, atlas_timestamp='2025-11-26T00:07:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.014749999999999375, 0.0017499999999994742, -0.012500000000001066, 0.0024999999999995026, 0.060249999999999915, -0.011499999999999844, -0.02474999999999916, 0.007499999999998508, -0.04299999999999926, -0.011750000000001037, -0.007500000000000284, 0.0909999999999993, 0.06325000000000003, -0.05600000000000094, -0.031000000000000583, -0.00274999999999892, -0.013500000000000512, -0.02450000000000152, -0.02075000000000138, 0.053999999999998494, 0.08624999999999972, 0.009250000000001535, -0.043750000000001066, -0.026000000000001577, 0.026500000000000412, -0.03824999999999967, -0.019499999999998963, 0.1739999999999995, 0.040000000000000924, 0.05799999999999983, -0.026999999999999247, 0.006750000000000256], zp_timestamp='2025-11-26T00:06:00')
2025-11-26T02:08:35.971 [DEBUG] [Thread-9825] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:08:36.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:08:36.066 [DEBUG] [Thread-9828] [transport.py] [_log()] starting thread (client mode): 0x7374d300
2025-11-26T02:08:36.066 [DEBUG] [Thread-9828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:08:36.081 [DEBUG] [Thread-9828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:08:36.081 [INFO] [Thread-9828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] client lang: <none>
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] server lang: <none>
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] kex follows: False
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:08:36.089 [DEBUG] [Thread-9828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:08:36.090 [DEBUG] [Thread-9828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:08:36.090 [DEBUG] [Thread-9828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:08:36.090 [DEBUG] [Thread-9828] [transport.py] [_log()] Compression: none
2025-11-26T02:08:36.090 [DEBUG] [Thread-9828] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:08:36.149 [DEBUG] [Thread-9828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:08:36.150 [DEBUG] [Thread-9828] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:08:36.151 [DEBUG] [Thread-9828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:08:36.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:08:36.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:08:36.208 [DEBUG] [Thread-9828] [transport.py] [_log()] userauth is OK
2025-11-26T02:08:36.209 [DEBUG] [Thread-9828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:08:36.209 [DEBUG] [Thread-9828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:08:36.209 [DEBUG] [Thread-9828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:08:36.209 [DEBUG] [Thread-9828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:08:36.229 [INFO] [Thread-9828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:08:36.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:08:36.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:08:37.055 [DEBUG] [Thread-9828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:08:37.056 [DEBUG] [Thread-9828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:08:37.104 [DEBUG] [Thread-9828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:08:37.104 [DEBUG] [Thread-9828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:08:37.114 [DEBUG] [Thread-9828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:08:37.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:08:37.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:08:37.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:08:37.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:08:37.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:08:37.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:08:37.151 [DEBUG] [Thread-9828] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:08:39.340 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:39.341 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:40.105 [DEBUG] [Thread-9830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:44.976 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:55.151 [DEBUG] [Thread-9831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:08:55.356 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:05.731 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:07.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:09:07.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:09:07.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:09:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 8, 53), 31.63, 10.87, 0.0, 7.27, 20.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:09:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:08:53
2025-11-26T02:09:07.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:09:08.085 [DEBUG] [Thread-9832] [transport.py] [_log()] starting thread (client mode): 0x70d55ed0
2025-11-26T02:09:08.085 [DEBUG] [Thread-9832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:09:08.105 [DEBUG] [Thread-9832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:09:08.105 [INFO] [Thread-9832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:09:08.108 [DEBUG] [Thread-9832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:09:08.108 [DEBUG] [Thread-9832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:09:08.108 [DEBUG] [Thread-9832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:09:08.108 [DEBUG] [Thread-9832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:09:08.108 [DEBUG] [Thread-9832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:09:08.108 [DEBUG] [Thread-9832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] client lang: <none>
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] server lang: <none>
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] kex follows: False
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] Compression: none
2025-11-26T02:09:08.109 [DEBUG] [Thread-9832] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:09:08.129 [DEBUG] [Thread-9832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:09:08.130 [DEBUG] [Thread-9832] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:09:08.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:09:08.131 [DEBUG] [Thread-9832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:09:08.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:09:08.133 [DEBUG] [Thread-9832] [transport.py] [_log()] userauth is OK
2025-11-26T02:09:08.133 [DEBUG] [Thread-9832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:09:08.133 [DEBUG] [Thread-9832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:09:08.133 [DEBUG] [Thread-9832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:09:08.133 [DEBUG] [Thread-9832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:09:08.156 [INFO] [Thread-9832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:09:08.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:09:08.789 [DEBUG] [Thread-9832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:09:08.789 [DEBUG] [Thread-9832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:09:08.789 [DEBUG] [Thread-9832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:09:08.830 [DEBUG] [Thread-9832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:09:08.830 [DEBUG] [Thread-9832] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:09:08.833 [DEBUG] [Thread-9832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:09:08.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:09:08.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:09:08.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:09:08.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:09:08.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:09:08.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:09:08.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:09:08.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:09:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:09:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.005999 -999.00  +20.00   5.79     16   -5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.0 5.8 121.6 6.5 19.4 -26.2 19.3 -25.5 18.9 -24.3 19.2 -25.2
2025-11-26T02:09:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:09:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:09:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.005999
2025-11-26T02:09:08.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:09:08.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:09:08.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:09:08.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:09:08.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:09:08.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:08:53', tmtdew=31.63, humidity=10.87, cloud=0.0, wind=7.27, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:08:53', seeing=0.85, atlas_timestamp='2025-11-26T00:08:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.014749999999999375, 0.0017499999999994742, -0.012500000000001066, 0.0024999999999995026, 0.060249999999999915, -0.011499999999999844, -0.02474999999999916, 0.007499999999998508, -0.04299999999999926, -0.011750000000001037, -0.007500000000000284, 0.0909999999999993, 0.06325000000000003, -0.05600000000000094, -0.031000000000000583, -0.00274999999999892, -0.013500000000000512, -0.02450000000000152, -0.02075000000000138, 0.053999999999998494, 0.08624999999999972, 0.009250000000001535, -0.043750000000001066, -0.026000000000001577, 0.026500000000000412, -0.03824999999999967, -0.019499999999998963, 0.1739999999999995, 0.040000000000000924, 0.05799999999999983, -0.026999999999999247, 0.006750000000000256], zp_timestamp='2025-11-26T00:06:00')
2025-11-26T02:09:08.863 [DEBUG] [Thread-9832] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:09:08.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:09:08.960 [DEBUG] [Thread-9835] [transport.py] [_log()] starting thread (client mode): 0x70d6aec0
2025-11-26T02:09:08.960 [DEBUG] [Thread-9835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:09:08.976 [DEBUG] [Thread-9835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:09:08.976 [INFO] [Thread-9835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:09:08.983 [DEBUG] [Thread-9835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] client lang: <none>
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] server lang: <none>
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] kex follows: False
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:09:08.984 [DEBUG] [Thread-9835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:09:08.985 [DEBUG] [Thread-9835] [transport.py] [_log()] Compression: none
2025-11-26T02:09:08.985 [DEBUG] [Thread-9835] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:09:09.047 [DEBUG] [Thread-9835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:09:09.047 [DEBUG] [Thread-9835] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:09:09.048 [DEBUG] [Thread-9835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:09:09.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:09:09.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:09:09.108 [DEBUG] [Thread-9835] [transport.py] [_log()] userauth is OK
2025-11-26T02:09:09.108 [DEBUG] [Thread-9835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:09:09.108 [DEBUG] [Thread-9835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:09:09.108 [DEBUG] [Thread-9835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:09:09.108 [DEBUG] [Thread-9835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:09:09.128 [INFO] [Thread-9835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:09:09.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:09:09.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:09:09.928 [DEBUG] [Thread-9835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:09:09.928 [DEBUG] [Thread-9835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:09:09.977 [DEBUG] [Thread-9835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:09:09.977 [DEBUG] [Thread-9835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:09:09.986 [DEBUG] [Thread-9835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:09:09.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:09:09.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:09:10.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:09:10.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:09:10.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:09:10.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:09:10.023 [DEBUG] [Thread-9835] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:09:10.186 [DEBUG] [Thread-9837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:16.165 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:19.699 [DEBUG] [Thread-9838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:25.236 [DEBUG] [Thread-9839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:26.580 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:37.012 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:39.542 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:39.544 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:40.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:09:40.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:09:40.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:09:40.273 [DEBUG] [Thread-9840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:40.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 9, 25), 31.57, 10.93, 0.0, 7.18, 20.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:09:40.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:09:25
2025-11-26T02:09:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:09:40.976 [DEBUG] [Thread-9841] [transport.py] [_log()] starting thread (client mode): 0x70d55600
2025-11-26T02:09:40.977 [DEBUG] [Thread-9841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:09:40.996 [DEBUG] [Thread-9841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:09:40.996 [INFO] [Thread-9841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] client lang: <none>
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] server lang: <none>
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] kex follows: False
2025-11-26T02:09:40.999 [DEBUG] [Thread-9841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:09:41.000 [DEBUG] [Thread-9841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:09:41.000 [DEBUG] [Thread-9841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:09:41.000 [DEBUG] [Thread-9841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:09:41.000 [DEBUG] [Thread-9841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:09:41.000 [DEBUG] [Thread-9841] [transport.py] [_log()] Compression: none
2025-11-26T02:09:41.000 [DEBUG] [Thread-9841] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:09:41.017 [DEBUG] [Thread-9841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:09:41.018 [DEBUG] [Thread-9841] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:09:41.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:09:41.019 [DEBUG] [Thread-9841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:09:41.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:09:41.021 [DEBUG] [Thread-9841] [transport.py] [_log()] userauth is OK
2025-11-26T02:09:41.021 [DEBUG] [Thread-9841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:09:41.021 [DEBUG] [Thread-9841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:09:41.021 [DEBUG] [Thread-9841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:09:41.021 [DEBUG] [Thread-9841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:09:41.038 [INFO] [Thread-9841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:09:41.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:09:41.680 [DEBUG] [Thread-9841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:09:41.680 [DEBUG] [Thread-9841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:09:41.681 [DEBUG] [Thread-9841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:09:41.721 [DEBUG] [Thread-9841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:09:41.721 [DEBUG] [Thread-9841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:09:41.724 [DEBUG] [Thread-9841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:09:41.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:09:41.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:09:41.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:09:41.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:09:41.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:09:41.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:09:41.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:09:41.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:09:41.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:09:41.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.006347 -999.00  +20.10   5.88     16   -5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.2 5.9 116.6 6.3 19.5 -26.2 19.3 -25.5 18.9 -24.1 19.2 -25.3
2025-11-26T02:09:41.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:09:41.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:09:41.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.006347
2025-11-26T02:09:41.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:09:41.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:09:41.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:09:41.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:09:41.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:09:41.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:09:25', tmtdew=31.57, humidity=10.93, cloud=0.0, wind=7.18, temperature=20.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:09:25', seeing=0.56, atlas_timestamp='2025-11-26T00:09:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.014749999999999375, 0.0017499999999994742, -0.012500000000001066, 0.0024999999999995026, 0.060249999999999915, -0.011499999999999844, -0.02474999999999916, 0.007499999999998508, -0.04299999999999926, -0.011750000000001037, -0.007500000000000284, 0.0909999999999993, 0.06325000000000003, -0.05600000000000094, -0.031000000000000583, -0.00274999999999892, -0.013500000000000512, -0.02450000000000152, -0.02075000000000138, 0.053999999999998494, 0.08624999999999972, 0.009250000000001535, -0.043750000000001066, -0.026000000000001577, 0.026500000000000412, -0.03824999999999967, -0.019499999999998963, 0.1739999999999995, 0.040000000000000924, 0.05799999999999983, -0.026999999999999247, 0.006750000000000256], zp_timestamp='2025-11-26T00:06:00')
2025-11-26T02:09:41.752 [DEBUG] [Thread-9841] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:09:41.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:09:41.850 [DEBUG] [Thread-9844] [transport.py] [_log()] starting thread (client mode): 0x70d6b520
2025-11-26T02:09:41.850 [DEBUG] [Thread-9844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:09:41.866 [DEBUG] [Thread-9844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:09:41.867 [INFO] [Thread-9844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:09:41.874 [DEBUG] [Thread-9844] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:09:41.874 [DEBUG] [Thread-9844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:09:41.874 [DEBUG] [Thread-9844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:09:41.874 [DEBUG] [Thread-9844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] client lang: <none>
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] server lang: <none>
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] kex follows: False
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] Compression: none
2025-11-26T02:09:41.875 [DEBUG] [Thread-9844] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:09:41.932 [DEBUG] [Thread-9844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:09:41.933 [DEBUG] [Thread-9844] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:09:41.933 [DEBUG] [Thread-9844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:09:41.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:09:41.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:09:41.989 [DEBUG] [Thread-9844] [transport.py] [_log()] userauth is OK
2025-11-26T02:09:41.989 [DEBUG] [Thread-9844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:09:41.989 [DEBUG] [Thread-9844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:09:41.990 [DEBUG] [Thread-9844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:09:41.990 [DEBUG] [Thread-9844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:09:42.009 [INFO] [Thread-9844] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:09:42.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:09:42.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:09:42.806 [DEBUG] [Thread-9844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:09:42.806 [DEBUG] [Thread-9844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:09:42.854 [DEBUG] [Thread-9844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:09:42.854 [DEBUG] [Thread-9844] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:09:42.864 [DEBUG] [Thread-9844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:09:42.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:09:42.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:09:42.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:09:42.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:09:42.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:09:42.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:09:42.899 [DEBUG] [Thread-9844] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:09:47.457 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:55.307 [DEBUG] [Thread-9846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:09:57.848 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:08.243 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:10.351 [DEBUG] [Thread-9847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:12.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:10:12.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:10:12.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:10:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 9, 57), 31.57, 10.93, 0.0, 7.06, 20.69, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:10:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:09:57
2025-11-26T02:10:13.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:10:13.844 [DEBUG] [Thread-9848] [transport.py] [_log()] starting thread (client mode): 0x70d56e90
2025-11-26T02:10:13.845 [DEBUG] [Thread-9848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:10:13.864 [DEBUG] [Thread-9848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:10:13.865 [INFO] [Thread-9848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:10:13.867 [DEBUG] [Thread-9848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] client lang: <none>
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] server lang: <none>
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] kex follows: False
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] Compression: none
2025-11-26T02:10:13.868 [DEBUG] [Thread-9848] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:10:13.885 [DEBUG] [Thread-9848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:10:13.886 [DEBUG] [Thread-9848] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:10:13.886 [DEBUG] [Thread-9848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:10:13.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:10:13.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:10:13.888 [DEBUG] [Thread-9848] [transport.py] [_log()] userauth is OK
2025-11-26T02:10:13.889 [DEBUG] [Thread-9848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:10:13.889 [DEBUG] [Thread-9848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:10:13.889 [DEBUG] [Thread-9848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:10:13.889 [DEBUG] [Thread-9848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:10:13.906 [INFO] [Thread-9848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:10:13.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:10:15.135 [DEBUG] [Thread-9848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:10:15.135 [DEBUG] [Thread-9848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:10:15.135 [DEBUG] [Thread-9848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:10:15.176 [DEBUG] [Thread-9848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:10:15.176 [DEBUG] [Thread-9848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:10:15.179 [DEBUG] [Thread-9848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:10:15.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:10:15.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:10:15.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:10:15.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:10:15.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:10:15.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:10:15.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:10:15.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:10:15.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:10:15.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.006693 -999.00  +20.00   6.01     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.0 6.0 117.0 6.4 19.4 -26.2 19.3 -25.7 18.9 -24.3 19.2 -25.3
2025-11-26T02:10:15.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:10:15.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:10:15.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.006693
2025-11-26T02:10:15.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:10:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:10:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:10:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:10:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:10:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:09:57', tmtdew=31.57, humidity=10.93, cloud=0.0, wind=7.06, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:09:57', seeing=0.73, atlas_timestamp='2025-11-26T00:09:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.014749999999999375, 0.0017499999999994742, -0.012500000000001066, 0.0024999999999995026, 0.060249999999999915, -0.011499999999999844, -0.02474999999999916, 0.007499999999998508, -0.04299999999999926, -0.011750000000001037, -0.007500000000000284, 0.0909999999999993, 0.06325000000000003, -0.05600000000000094, -0.031000000000000583, -0.00274999999999892, -0.013500000000000512, -0.02450000000000152, -0.02075000000000138, 0.053999999999998494, 0.08624999999999972, 0.009250000000001535, -0.043750000000001066, -0.026000000000001577, 0.026500000000000412, -0.03824999999999967, -0.019499999999998963, 0.1739999999999995, 0.040000000000000924, 0.05799999999999983, -0.026999999999999247, 0.006750000000000256], zp_timestamp='2025-11-26T00:06:00')
2025-11-26T02:10:15.206 [DEBUG] [Thread-9848] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:10:15.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:10:15.301 [DEBUG] [Thread-9851] [transport.py] [_log()] starting thread (client mode): 0x70d55420
2025-11-26T02:10:15.301 [DEBUG] [Thread-9851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:10:15.316 [DEBUG] [Thread-9851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:10:15.316 [INFO] [Thread-9851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:10:15.323 [DEBUG] [Thread-9851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] client lang: <none>
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] server lang: <none>
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] kex follows: False
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] Compression: none
2025-11-26T02:10:15.324 [DEBUG] [Thread-9851] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:10:15.379 [DEBUG] [Thread-9851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:10:15.380 [DEBUG] [Thread-9851] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:10:15.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:10:15.380 [DEBUG] [Thread-9851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:10:15.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:10:15.436 [DEBUG] [Thread-9851] [transport.py] [_log()] userauth is OK
2025-11-26T02:10:15.436 [DEBUG] [Thread-9851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:10:15.436 [DEBUG] [Thread-9851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:10:15.436 [DEBUG] [Thread-9851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:10:15.436 [DEBUG] [Thread-9851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:10:15.458 [INFO] [Thread-9851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:10:15.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:10:15.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:10:16.290 [DEBUG] [Thread-9851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:10:16.291 [DEBUG] [Thread-9851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:10:16.342 [DEBUG] [Thread-9851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:10:16.343 [DEBUG] [Thread-9851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:10:16.353 [DEBUG] [Thread-9851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:10:16.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:10:16.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:10:16.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:10:16.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:10:16.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:10:16.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:10:16.392 [DEBUG] [Thread-9851] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:10:18.639 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:19.797 [DEBUG] [Thread-9853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:25.386 [DEBUG] [Thread-9854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:29.086 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:39.510 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:39.745 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:39.746 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:40.433 [DEBUG] [Thread-9855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:10:46.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:10:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:10:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 10, 29), 31.6, 10.9, 0.0, 6.79, 20.68, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:10:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:10:29
2025-11-26T02:10:47.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:10:47.304 [DEBUG] [Thread-9856] [transport.py] [_log()] starting thread (client mode): 0x70d57d30
2025-11-26T02:10:47.304 [DEBUG] [Thread-9856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:10:47.328 [DEBUG] [Thread-9856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:10:47.328 [INFO] [Thread-9856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:10:47.330 [DEBUG] [Thread-9856] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:10:47.330 [DEBUG] [Thread-9856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:10:47.330 [DEBUG] [Thread-9856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:10:47.330 [DEBUG] [Thread-9856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:10:47.330 [DEBUG] [Thread-9856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:10:47.330 [DEBUG] [Thread-9856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:10:47.331 [DEBUG] [Thread-9856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:10:47.331 [DEBUG] [Thread-9856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:10:47.331 [DEBUG] [Thread-9856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:10:47.331 [DEBUG] [Thread-9856] [transport.py] [_log()] client lang: <none>
2025-11-26T02:10:47.331 [DEBUG] [Thread-9856] [transport.py] [_log()] server lang: <none>
2025-11-26T02:10:47.331 [DEBUG] [Thread-9856] [transport.py] [_log()] kex follows: False
2025-11-26T02:10:47.331 [DEBUG] [Thread-9856] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:10:47.331 [DEBUG] [Thread-9856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:10:47.331 [DEBUG] [Thread-9856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:10:47.332 [DEBUG] [Thread-9856] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:10:47.332 [DEBUG] [Thread-9856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:10:47.332 [DEBUG] [Thread-9856] [transport.py] [_log()] Compression: none
2025-11-26T02:10:47.332 [DEBUG] [Thread-9856] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:10:47.342 [DEBUG] [Thread-9856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:10:47.343 [DEBUG] [Thread-9856] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:10:47.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:10:47.344 [DEBUG] [Thread-9856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:10:47.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:10:47.346 [DEBUG] [Thread-9856] [transport.py] [_log()] userauth is OK
2025-11-26T02:10:47.346 [DEBUG] [Thread-9856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:10:47.346 [DEBUG] [Thread-9856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:10:47.346 [DEBUG] [Thread-9856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:10:47.346 [DEBUG] [Thread-9856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:10:47.382 [INFO] [Thread-9856] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:10:47.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:10:48.013 [DEBUG] [Thread-9856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:10:48.013 [DEBUG] [Thread-9856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:10:48.014 [DEBUG] [Thread-9856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:10:48.054 [DEBUG] [Thread-9856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:10:48.054 [DEBUG] [Thread-9856] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:10:48.057 [DEBUG] [Thread-9856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:10:48.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:10:48.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:10:48.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:10:48.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:10:48.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:10:48.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:10:48.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:10:48.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:10:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:10:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.007040 -999.00  +20.00   5.62     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.0 5.6 121.4 6.7 19.4 -26.3 19.3 -25.6 18.9 -24.3 19.2 -25.3
2025-11-26T02:10:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:10:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:10:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.007040
2025-11-26T02:10:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:10:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:10:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:10:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:10:48.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:10:48.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:10:29', tmtdew=31.6, humidity=10.9, cloud=0.0, wind=6.79, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:10:29', seeing=0.63, atlas_timestamp='2025-11-26T00:10:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:09:00')
2025-11-26T02:10:48.078 [DEBUG] [Thread-9856] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:10:48.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:10:48.170 [DEBUG] [Thread-9859] [transport.py] [_log()] starting thread (client mode): 0x70dfac20
2025-11-26T02:10:48.170 [DEBUG] [Thread-9859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:10:48.185 [DEBUG] [Thread-9859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:10:48.185 [INFO] [Thread-9859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:10:48.193 [DEBUG] [Thread-9859] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:10:48.193 [DEBUG] [Thread-9859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:10:48.193 [DEBUG] [Thread-9859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:10:48.193 [DEBUG] [Thread-9859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:10:48.193 [DEBUG] [Thread-9859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:10:48.193 [DEBUG] [Thread-9859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:10:48.193 [DEBUG] [Thread-9859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:10:48.193 [DEBUG] [Thread-9859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:10:48.194 [DEBUG] [Thread-9859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:10:48.194 [DEBUG] [Thread-9859] [transport.py] [_log()] client lang: <none>
2025-11-26T02:10:48.194 [DEBUG] [Thread-9859] [transport.py] [_log()] server lang: <none>
2025-11-26T02:10:48.194 [DEBUG] [Thread-9859] [transport.py] [_log()] kex follows: False
2025-11-26T02:10:48.194 [DEBUG] [Thread-9859] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:10:48.194 [DEBUG] [Thread-9859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:10:48.194 [DEBUG] [Thread-9859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:10:48.194 [DEBUG] [Thread-9859] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:10:48.195 [DEBUG] [Thread-9859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:10:48.195 [DEBUG] [Thread-9859] [transport.py] [_log()] Compression: none
2025-11-26T02:10:48.195 [DEBUG] [Thread-9859] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:10:48.252 [DEBUG] [Thread-9859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:10:48.252 [DEBUG] [Thread-9859] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:10:48.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:10:48.253 [DEBUG] [Thread-9859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:10:48.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:10:48.307 [DEBUG] [Thread-9859] [transport.py] [_log()] userauth is OK
2025-11-26T02:10:48.308 [DEBUG] [Thread-9859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:10:48.308 [DEBUG] [Thread-9859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:10:48.308 [DEBUG] [Thread-9859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:10:48.308 [DEBUG] [Thread-9859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:10:48.327 [INFO] [Thread-9859] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:10:48.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:10:48.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:10:49.170 [DEBUG] [Thread-9859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:10:49.171 [DEBUG] [Thread-9859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:10:49.218 [DEBUG] [Thread-9859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:10:49.219 [DEBUG] [Thread-9859] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:10:49.228 [DEBUG] [Thread-9859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:10:49.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:10:49.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:10:49.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:10:49.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:10:49.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:10:49.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:10:49.264 [DEBUG] [Thread-9859] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:10:49.907 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:10:55.470 [DEBUG] [Thread-9861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:00.308 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:10.529 [DEBUG] [Thread-9862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:10.738 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:19.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:11:19.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:11:19.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:11:19.867 [DEBUG] [Thread-9863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:19.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 11, 1), 31.57, 10.92, 0.0, 7.36, 20.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:11:19.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:11:01
2025-11-26T02:11:20.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:11:20.201 [DEBUG] [Thread-9864] [transport.py] [_log()] starting thread (client mode): 0x70d555d0
2025-11-26T02:11:20.201 [DEBUG] [Thread-9864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:11:20.222 [DEBUG] [Thread-9864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:11:20.223 [INFO] [Thread-9864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:11:20.225 [DEBUG] [Thread-9864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] client lang: <none>
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] server lang: <none>
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] kex follows: False
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] Compression: none
2025-11-26T02:11:20.226 [DEBUG] [Thread-9864] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:11:20.246 [DEBUG] [Thread-9864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:11:20.246 [DEBUG] [Thread-9864] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:11:20.247 [DEBUG] [Thread-9864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:11:20.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:11:20.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:11:20.249 [DEBUG] [Thread-9864] [transport.py] [_log()] userauth is OK
2025-11-26T02:11:20.249 [DEBUG] [Thread-9864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:11:20.249 [DEBUG] [Thread-9864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:11:20.249 [DEBUG] [Thread-9864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:11:20.250 [DEBUG] [Thread-9864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:11:20.285 [INFO] [Thread-9864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:11:20.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:11:20.901 [DEBUG] [Thread-9864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:11:20.902 [DEBUG] [Thread-9864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:11:20.903 [DEBUG] [Thread-9864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:11:20.943 [DEBUG] [Thread-9864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:11:20.943 [DEBUG] [Thread-9864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:11:20.947 [DEBUG] [Thread-9864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:11:20.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:11:20.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:11:20.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:11:20.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:11:20.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:11:20.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:11:20.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:11:20.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:11:20.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:11:20.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.007388 -999.00  +20.10   6.16     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.1 6.2 120.0 6.5 19.4 -26.2 -999.0 -999.0 18.9 -24.2 19.2 -25.3
2025-11-26T02:11:20.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:11:20.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:11:20.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.007388
2025-11-26T02:11:20.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:11:20.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:11:20.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:11:20.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:11:20.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:11:20.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:11:01', tmtdew=31.57, humidity=10.92, cloud=0.0, wind=7.36, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:11:01', seeing=0.52, atlas_timestamp='2025-11-26T00:10:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:09:00')
2025-11-26T02:11:20.976 [DEBUG] [Thread-9864] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:11:21.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:11:21.072 [DEBUG] [Thread-9867] [transport.py] [_log()] starting thread (client mode): 0x70d74190
2025-11-26T02:11:21.072 [DEBUG] [Thread-9867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:11:21.087 [DEBUG] [Thread-9867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:11:21.087 [INFO] [Thread-9867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:11:21.095 [DEBUG] [Thread-9867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:11:21.095 [DEBUG] [Thread-9867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:11:21.095 [DEBUG] [Thread-9867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:11:21.095 [DEBUG] [Thread-9867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:11:21.095 [DEBUG] [Thread-9867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:11:21.095 [DEBUG] [Thread-9867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:11:21.095 [DEBUG] [Thread-9867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] client lang: <none>
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] server lang: <none>
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] kex follows: False
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] Compression: none
2025-11-26T02:11:21.096 [DEBUG] [Thread-9867] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:11:21.155 [DEBUG] [Thread-9867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:11:21.156 [DEBUG] [Thread-9867] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:11:21.156 [DEBUG] [Thread-9867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:11:21.157 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:21.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:11:21.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:11:21.211 [DEBUG] [Thread-9867] [transport.py] [_log()] userauth is OK
2025-11-26T02:11:21.211 [DEBUG] [Thread-9867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:11:21.211 [DEBUG] [Thread-9867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:11:21.211 [DEBUG] [Thread-9867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:11:21.211 [DEBUG] [Thread-9867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:11:21.228 [INFO] [Thread-9867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:11:21.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:11:21.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:11:22.074 [DEBUG] [Thread-9867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:11:22.074 [DEBUG] [Thread-9867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:11:22.122 [DEBUG] [Thread-9867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:11:22.122 [DEBUG] [Thread-9867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:11:22.131 [DEBUG] [Thread-9867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:11:22.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:11:22.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:11:22.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:11:22.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:11:22.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:11:22.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:11:22.168 [DEBUG] [Thread-9867] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:11:25.564 [DEBUG] [Thread-9869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:31.569 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:39.949 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:39.950 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:40.617 [DEBUG] [Thread-9870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:41.981 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:52.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:11:52.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:11:52.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:11:52.379 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:11:52.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 11, 33), 31.51, 10.98, 0.0, 7.25, 20.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:11:52.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:11:33
2025-11-26T02:11:53.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:11:53.156 [DEBUG] [Thread-9871] [transport.py] [_log()] starting thread (client mode): 0x70d56ce0
2025-11-26T02:11:53.156 [DEBUG] [Thread-9871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:11:53.176 [DEBUG] [Thread-9871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:11:53.176 [INFO] [Thread-9871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:11:53.179 [DEBUG] [Thread-9871] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:11:53.179 [DEBUG] [Thread-9871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:11:53.179 [DEBUG] [Thread-9871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:11:53.179 [DEBUG] [Thread-9871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:11:53.179 [DEBUG] [Thread-9871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] client lang: <none>
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] server lang: <none>
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] kex follows: False
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] Compression: none
2025-11-26T02:11:53.180 [DEBUG] [Thread-9871] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:11:53.195 [DEBUG] [Thread-9871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:11:53.195 [DEBUG] [Thread-9871] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:11:53.195 [DEBUG] [Thread-9871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:11:53.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:11:53.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:11:53.196 [DEBUG] [Thread-9871] [transport.py] [_log()] userauth is OK
2025-11-26T02:11:53.196 [DEBUG] [Thread-9871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:11:53.196 [DEBUG] [Thread-9871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:11:53.196 [DEBUG] [Thread-9871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:11:53.196 [DEBUG] [Thread-9871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:11:53.207 [INFO] [Thread-9871] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:11:53.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:11:53.839 [DEBUG] [Thread-9871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:11:53.839 [DEBUG] [Thread-9871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:11:53.840 [DEBUG] [Thread-9871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:11:53.880 [DEBUG] [Thread-9871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:11:53.880 [DEBUG] [Thread-9871] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:11:53.881 [DEBUG] [Thread-9871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:11:53.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:11:53.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:11:53.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:11:53.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:11:53.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:11:53.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:11:53.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.007735 -999.00  +20.10   6.26     16   -5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.0 6.3 118.6 6.8 19.4 -26.2 19.3 -25.7 18.9 -24.2 19.2 -25.2
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.007735
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:11:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:11:33', tmtdew=31.51, humidity=10.98, cloud=0.0, wind=7.25, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:11:33', seeing=0.52, atlas_timestamp='2025-11-26T00:11:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:09:00')
2025-11-26T02:11:53.898 [DEBUG] [Thread-9871] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:11:53.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:11:53.983 [DEBUG] [Thread-9874] [transport.py] [_log()] starting thread (client mode): 0x70d56110
2025-11-26T02:11:53.984 [DEBUG] [Thread-9874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:11:53.997 [DEBUG] [Thread-9874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:11:53.997 [INFO] [Thread-9874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] client lang: <none>
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] server lang: <none>
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] kex follows: False
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] Compression: none
2025-11-26T02:11:54.005 [DEBUG] [Thread-9874] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:11:54.061 [DEBUG] [Thread-9874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:11:54.061 [DEBUG] [Thread-9874] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:11:54.061 [DEBUG] [Thread-9874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:11:54.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:11:54.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:11:54.120 [DEBUG] [Thread-9874] [transport.py] [_log()] userauth is OK
2025-11-26T02:11:54.120 [DEBUG] [Thread-9874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:11:54.120 [DEBUG] [Thread-9874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:11:54.120 [DEBUG] [Thread-9874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:11:54.120 [DEBUG] [Thread-9874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:11:54.134 [INFO] [Thread-9874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:11:54.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:11:54.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:11:54.946 [DEBUG] [Thread-9874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:11:54.946 [DEBUG] [Thread-9874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:11:54.994 [DEBUG] [Thread-9874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:11:54.994 [DEBUG] [Thread-9874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:11:55.004 [DEBUG] [Thread-9874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:11:55.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:11:55.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:11:55.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:11:55.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:11:55.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:11:55.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:11:55.042 [DEBUG] [Thread-9874] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:11:55.652 [DEBUG] [Thread-9876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:02.815 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:10.704 [DEBUG] [Thread-9877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:13.212 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:19.944 [DEBUG] [Thread-9878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:23.613 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:12:25.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:12:25.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:12:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 12, 5), 31.54, 10.95, 0.0, 7.13, 20.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:12:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:12:05
2025-11-26T02:12:25.736 [DEBUG] [Thread-9879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:25.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:12:25.990 [DEBUG] [Thread-9880] [transport.py] [_log()] starting thread (client mode): 0x70d55e10
2025-11-26T02:12:25.990 [DEBUG] [Thread-9880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:12:26.009 [DEBUG] [Thread-9880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:12:26.009 [INFO] [Thread-9880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] client lang: <none>
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] server lang: <none>
2025-11-26T02:12:26.012 [DEBUG] [Thread-9880] [transport.py] [_log()] kex follows: False
2025-11-26T02:12:26.013 [DEBUG] [Thread-9880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:12:26.013 [DEBUG] [Thread-9880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:12:26.013 [DEBUG] [Thread-9880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:12:26.013 [DEBUG] [Thread-9880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:12:26.013 [DEBUG] [Thread-9880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:12:26.013 [DEBUG] [Thread-9880] [transport.py] [_log()] Compression: none
2025-11-26T02:12:26.013 [DEBUG] [Thread-9880] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:12:26.029 [DEBUG] [Thread-9880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:12:26.029 [DEBUG] [Thread-9880] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:12:26.029 [DEBUG] [Thread-9880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:12:26.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:12:26.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:12:26.030 [DEBUG] [Thread-9880] [transport.py] [_log()] userauth is OK
2025-11-26T02:12:26.030 [DEBUG] [Thread-9880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:12:26.030 [DEBUG] [Thread-9880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:12:26.030 [DEBUG] [Thread-9880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:12:26.030 [DEBUG] [Thread-9880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:12:26.040 [INFO] [Thread-9880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:12:26.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:12:26.662 [DEBUG] [Thread-9880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:12:26.662 [DEBUG] [Thread-9880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:12:26.662 [DEBUG] [Thread-9880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:12:26.703 [DEBUG] [Thread-9880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:12:26.703 [DEBUG] [Thread-9880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:12:26.706 [DEBUG] [Thread-9880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:12:26.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:12:26.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:12:26.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:12:26.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:12:26.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:12:26.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:12:26.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.008429 -999.00  +20.00   5.15     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 4.6 5.2 114.8 5.4 19.4 -26.0 19.3 -25.6 18.9 -24.4 19.2 -25.3
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.008429
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:12:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:12:05', tmtdew=31.54, humidity=10.95, cloud=0.0, wind=7.13, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:12:05', seeing=0.54, atlas_timestamp='2025-11-26T00:12:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:09:00')
2025-11-26T02:12:26.726 [DEBUG] [Thread-9880] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:12:26.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:12:26.814 [DEBUG] [Thread-9883] [transport.py] [_log()] starting thread (client mode): 0x70da5360
2025-11-26T02:12:26.814 [DEBUG] [Thread-9883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:12:26.831 [DEBUG] [Thread-9883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:12:26.831 [INFO] [Thread-9883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] client lang: <none>
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] server lang: <none>
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] kex follows: False
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] Compression: none
2025-11-26T02:12:26.839 [DEBUG] [Thread-9883] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:12:26.897 [DEBUG] [Thread-9883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:12:26.898 [DEBUG] [Thread-9883] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:12:26.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:12:26.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:12:26.898 [DEBUG] [Thread-9883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:12:26.960 [DEBUG] [Thread-9883] [transport.py] [_log()] userauth is OK
2025-11-26T02:12:26.960 [DEBUG] [Thread-9883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:12:26.960 [DEBUG] [Thread-9883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:12:26.960 [DEBUG] [Thread-9883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:12:26.960 [DEBUG] [Thread-9883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:12:26.977 [INFO] [Thread-9883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:12:26.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:12:26.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:12:27.768 [DEBUG] [Thread-9883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:12:27.768 [DEBUG] [Thread-9883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:12:27.816 [DEBUG] [Thread-9883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:12:27.816 [DEBUG] [Thread-9883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:12:27.824 [DEBUG] [Thread-9883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:12:27.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:12:27.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:12:27.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:12:27.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:12:27.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:12:27.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:12:27.858 [DEBUG] [Thread-9883] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:12:34.007 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:40.186 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:40.188 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:40.764 [DEBUG] [Thread-9885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:44.402 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:54.820 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:55.814 [DEBUG] [Thread-9886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:12:57.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:12:57.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:12:57.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:12:58.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 12, 37), 31.49, 10.95, 0.0, 7.5, 20.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:12:58.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:12:37
2025-11-26T02:12:58.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:12:58.812 [DEBUG] [Thread-9887] [transport.py] [_log()] starting thread (client mode): 0x70dfab60
2025-11-26T02:12:58.812 [DEBUG] [Thread-9887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:12:58.833 [DEBUG] [Thread-9887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:12:58.833 [INFO] [Thread-9887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:12:58.836 [DEBUG] [Thread-9887] [transport.py] [_log()] client lang: <none>
2025-11-26T02:12:58.837 [DEBUG] [Thread-9887] [transport.py] [_log()] server lang: <none>
2025-11-26T02:12:58.837 [DEBUG] [Thread-9887] [transport.py] [_log()] kex follows: False
2025-11-26T02:12:58.837 [DEBUG] [Thread-9887] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:12:58.837 [DEBUG] [Thread-9887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:12:58.837 [DEBUG] [Thread-9887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:12:58.837 [DEBUG] [Thread-9887] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:12:58.837 [DEBUG] [Thread-9887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:12:58.837 [DEBUG] [Thread-9887] [transport.py] [_log()] Compression: none
2025-11-26T02:12:58.837 [DEBUG] [Thread-9887] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:12:58.854 [DEBUG] [Thread-9887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:12:58.855 [DEBUG] [Thread-9887] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:12:58.855 [DEBUG] [Thread-9887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:12:58.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:12:58.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:12:58.857 [DEBUG] [Thread-9887] [transport.py] [_log()] userauth is OK
2025-11-26T02:12:58.857 [DEBUG] [Thread-9887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:12:58.857 [DEBUG] [Thread-9887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:12:58.858 [DEBUG] [Thread-9887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:12:58.858 [DEBUG] [Thread-9887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:12:58.873 [INFO] [Thread-9887] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:12:58.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:12:59.505 [DEBUG] [Thread-9887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:12:59.506 [DEBUG] [Thread-9887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:12:59.506 [DEBUG] [Thread-9887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:12:59.547 [DEBUG] [Thread-9887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:12:59.547 [DEBUG] [Thread-9887] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:12:59.550 [DEBUG] [Thread-9887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:12:59.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:12:59.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:12:59.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:12:59.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:12:59.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:12:59.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:12:59.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:12:59.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:12:59.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:12:59.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.008777 -999.00  +19.90   5.23     16   -6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 4.7 5.2 117.4 5.8 19.4 -26.2 19.2 -25.6 18.9 -24.2 19.1 -25.2
2025-11-26T02:12:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:12:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:12:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.008777
2025-11-26T02:12:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:12:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:12:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:12:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:12:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:12:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:12:37', tmtdew=31.49, humidity=10.95, cloud=0.0, wind=7.5, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:12:37', seeing=0.7, atlas_timestamp='2025-11-26T00:12:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:09:00')
2025-11-26T02:12:59.578 [DEBUG] [Thread-9887] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:12:59.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:12:59.674 [DEBUG] [Thread-9890] [transport.py] [_log()] starting thread (client mode): 0x70dd0760
2025-11-26T02:12:59.674 [DEBUG] [Thread-9890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:12:59.689 [DEBUG] [Thread-9890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:12:59.689 [INFO] [Thread-9890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:12:59.696 [DEBUG] [Thread-9890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:12:59.696 [DEBUG] [Thread-9890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] client lang: <none>
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] server lang: <none>
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] kex follows: False
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:12:59.697 [DEBUG] [Thread-9890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:12:59.698 [DEBUG] [Thread-9890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:12:59.698 [DEBUG] [Thread-9890] [transport.py] [_log()] Compression: none
2025-11-26T02:12:59.698 [DEBUG] [Thread-9890] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:12:59.754 [DEBUG] [Thread-9890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:12:59.755 [DEBUG] [Thread-9890] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:12:59.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:12:59.756 [DEBUG] [Thread-9890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:12:59.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:12:59.810 [DEBUG] [Thread-9890] [transport.py] [_log()] userauth is OK
2025-11-26T02:12:59.810 [DEBUG] [Thread-9890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:12:59.810 [DEBUG] [Thread-9890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:12:59.810 [DEBUG] [Thread-9890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:12:59.811 [DEBUG] [Thread-9890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:12:59.829 [INFO] [Thread-9890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:12:59.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:12:59.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:13:00.655 [DEBUG] [Thread-9890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:13:00.656 [DEBUG] [Thread-9890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:13:00.704 [DEBUG] [Thread-9890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:13:00.704 [DEBUG] [Thread-9890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:13:00.713 [DEBUG] [Thread-9890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:13:00.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:13:00.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:13:00.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:13:00.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:13:00.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:13:00.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:13:00.750 [DEBUG] [Thread-9890] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:13:05.236 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:10.843 [DEBUG] [Thread-9892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:15.651 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:19.999 [DEBUG] [Thread-9893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:25.893 [DEBUG] [Thread-9894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:26.102 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:13:30.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:13:30.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:13:31.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 13, 9), 31.48, 10.97, 0.0, 7.68, 20.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:13:31.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:13:09
2025-11-26T02:13:31.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:13:31.697 [DEBUG] [Thread-9895] [transport.py] [_log()] starting thread (client mode): 0x70d6a950
2025-11-26T02:13:31.697 [DEBUG] [Thread-9895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:13:31.718 [DEBUG] [Thread-9895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:13:31.718 [INFO] [Thread-9895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] client lang: <none>
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] server lang: <none>
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] kex follows: False
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:13:31.721 [DEBUG] [Thread-9895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:13:31.722 [DEBUG] [Thread-9895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:13:31.722 [DEBUG] [Thread-9895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:13:31.722 [DEBUG] [Thread-9895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:13:31.722 [DEBUG] [Thread-9895] [transport.py] [_log()] Compression: none
2025-11-26T02:13:31.722 [DEBUG] [Thread-9895] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:13:31.738 [DEBUG] [Thread-9895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:13:31.739 [DEBUG] [Thread-9895] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:13:31.739 [DEBUG] [Thread-9895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:13:31.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:13:31.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:13:31.741 [DEBUG] [Thread-9895] [transport.py] [_log()] userauth is OK
2025-11-26T02:13:31.741 [DEBUG] [Thread-9895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:13:31.742 [DEBUG] [Thread-9895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:13:31.742 [DEBUG] [Thread-9895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:13:31.742 [DEBUG] [Thread-9895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:13:31.760 [INFO] [Thread-9895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:13:31.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:13:32.391 [DEBUG] [Thread-9895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:13:32.392 [DEBUG] [Thread-9895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:13:32.392 [DEBUG] [Thread-9895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:13:32.433 [DEBUG] [Thread-9895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:13:32.433 [DEBUG] [Thread-9895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:13:32.436 [DEBUG] [Thread-9895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:13:32.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:13:32.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:13:32.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:13:32.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:13:32.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:13:32.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:13:32.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:13:32.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:13:32.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:13:32.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.009124 -999.00  +20.00   5.41     16   -5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.7 5.4 115.6 5.9 19.4 -26.3 19.3 -25.7 18.9 -24.3 19.2 -25.2
2025-11-26T02:13:32.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:13:32.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:13:32.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.009124
2025-11-26T02:13:32.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:13:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:13:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:13:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:13:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:13:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:13:09', tmtdew=31.48, humidity=10.97, cloud=0.0, wind=7.68, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:13:09', seeing=0.53, atlas_timestamp='2025-11-26T00:13:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:09:00')
2025-11-26T02:13:32.464 [DEBUG] [Thread-9895] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:13:32.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:13:32.569 [DEBUG] [Thread-9898] [transport.py] [_log()] starting thread (client mode): 0x70d380a0
2025-11-26T02:13:32.569 [DEBUG] [Thread-9898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:13:32.584 [DEBUG] [Thread-9898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:13:32.584 [INFO] [Thread-9898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:13:32.592 [DEBUG] [Thread-9898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:13:32.592 [DEBUG] [Thread-9898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:13:32.592 [DEBUG] [Thread-9898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:13:32.592 [DEBUG] [Thread-9898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:13:32.592 [DEBUG] [Thread-9898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:13:32.592 [DEBUG] [Thread-9898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:13:32.592 [DEBUG] [Thread-9898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:13:32.592 [DEBUG] [Thread-9898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] client lang: <none>
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] server lang: <none>
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] kex follows: False
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] Compression: none
2025-11-26T02:13:32.593 [DEBUG] [Thread-9898] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:13:32.653 [DEBUG] [Thread-9898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:13:32.653 [DEBUG] [Thread-9898] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:13:32.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:13:32.654 [DEBUG] [Thread-9898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:13:32.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:13:32.710 [DEBUG] [Thread-9898] [transport.py] [_log()] userauth is OK
2025-11-26T02:13:32.711 [DEBUG] [Thread-9898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:13:32.711 [DEBUG] [Thread-9898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:13:32.711 [DEBUG] [Thread-9898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:13:32.711 [DEBUG] [Thread-9898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:13:32.731 [INFO] [Thread-9898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:13:32.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:13:32.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:13:33.555 [DEBUG] [Thread-9898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:13:33.555 [DEBUG] [Thread-9898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:13:33.603 [DEBUG] [Thread-9898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:13:33.603 [DEBUG] [Thread-9898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:13:33.612 [DEBUG] [Thread-9898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:13:33.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:13:33.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:13:33.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:13:33.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:13:33.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:13:33.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:13:33.649 [DEBUG] [Thread-9898] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:13:36.519 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:40.388 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:40.389 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:40.928 [DEBUG] [Thread-9900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:46.934 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:55.974 [DEBUG] [Thread-9901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:13:57.350 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:03.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:14:03.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:14:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:14:04.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 13, 41), 31.43, 11.0, 0.0, 7.43, 20.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:14:04.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:13:41
2025-11-26T02:14:04.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:14:04.551 [DEBUG] [Thread-9902] [transport.py] [_log()] starting thread (client mode): 0x70da5330
2025-11-26T02:14:04.551 [DEBUG] [Thread-9902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:14:04.574 [DEBUG] [Thread-9902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:14:04.574 [INFO] [Thread-9902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] client lang: <none>
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] server lang: <none>
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] kex follows: False
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:14:04.578 [DEBUG] [Thread-9902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:14:04.579 [DEBUG] [Thread-9902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:14:04.579 [DEBUG] [Thread-9902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:14:04.579 [DEBUG] [Thread-9902] [transport.py] [_log()] Compression: none
2025-11-26T02:14:04.579 [DEBUG] [Thread-9902] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:14:04.596 [DEBUG] [Thread-9902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:14:04.596 [DEBUG] [Thread-9902] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:14:04.597 [DEBUG] [Thread-9902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:14:04.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:14:04.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:14:04.599 [DEBUG] [Thread-9902] [transport.py] [_log()] userauth is OK
2025-11-26T02:14:04.599 [DEBUG] [Thread-9902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:14:04.599 [DEBUG] [Thread-9902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:14:04.599 [DEBUG] [Thread-9902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:14:04.599 [DEBUG] [Thread-9902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:14:04.625 [INFO] [Thread-9902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:14:04.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:14:05.240 [DEBUG] [Thread-9902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:14:05.240 [DEBUG] [Thread-9902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:14:05.240 [DEBUG] [Thread-9902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:14:05.281 [DEBUG] [Thread-9902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:14:05.281 [DEBUG] [Thread-9902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:14:05.285 [DEBUG] [Thread-9902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:14:05.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:14:05.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:14:05.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:14:05.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:14:05.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:14:05.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:14:05.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:14:05.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:14:05.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:14:05.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.009471 -999.00  +20.00   5.21     16   -5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.1 5.2 117.0 6.1 19.4 -26.2 19.3 -25.6 18.9 -24.3 19.1 -25.1
2025-11-26T02:14:05.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:14:05.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:14:05.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.009471
2025-11-26T02:14:05.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:14:05.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:14:05.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:14:05.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:14:05.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:14:05.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:13:41', tmtdew=31.43, humidity=11.0, cloud=0.0, wind=7.43, temperature=20.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:13:41', seeing=0.65, atlas_timestamp='2025-11-26T00:13:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:12:00')
2025-11-26T02:14:05.312 [DEBUG] [Thread-9902] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:14:05.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:14:05.407 [DEBUG] [Thread-9905] [transport.py] [_log()] starting thread (client mode): 0x70de6b00
2025-11-26T02:14:05.407 [DEBUG] [Thread-9905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:14:05.422 [DEBUG] [Thread-9905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:14:05.422 [INFO] [Thread-9905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:14:05.430 [DEBUG] [Thread-9905] [transport.py] [_log()] client lang: <none>
2025-11-26T02:14:05.431 [DEBUG] [Thread-9905] [transport.py] [_log()] server lang: <none>
2025-11-26T02:14:05.431 [DEBUG] [Thread-9905] [transport.py] [_log()] kex follows: False
2025-11-26T02:14:05.431 [DEBUG] [Thread-9905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:14:05.431 [DEBUG] [Thread-9905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:14:05.431 [DEBUG] [Thread-9905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:14:05.431 [DEBUG] [Thread-9905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:14:05.431 [DEBUG] [Thread-9905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:14:05.431 [DEBUG] [Thread-9905] [transport.py] [_log()] Compression: none
2025-11-26T02:14:05.431 [DEBUG] [Thread-9905] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:14:05.488 [DEBUG] [Thread-9905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:14:05.488 [DEBUG] [Thread-9905] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:14:05.489 [DEBUG] [Thread-9905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:14:05.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:14:05.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:14:05.544 [DEBUG] [Thread-9905] [transport.py] [_log()] userauth is OK
2025-11-26T02:14:05.544 [DEBUG] [Thread-9905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:14:05.544 [DEBUG] [Thread-9905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:14:05.544 [DEBUG] [Thread-9905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:14:05.544 [DEBUG] [Thread-9905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:14:05.564 [INFO] [Thread-9905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:14:05.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:14:05.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:14:06.396 [DEBUG] [Thread-9905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:14:06.396 [DEBUG] [Thread-9905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:14:06.445 [DEBUG] [Thread-9905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:14:06.445 [DEBUG] [Thread-9905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:14:06.454 [DEBUG] [Thread-9905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:14:06.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:14:06.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:14: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') -> 00000000
2025-11-26T02:14:06.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:14:06.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:14:06.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:14:06.491 [DEBUG] [Thread-9905] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:14:07.745 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:11.012 [DEBUG] [Thread-9907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:18.144 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:20.051 [DEBUG] [Thread-9908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:26.058 [DEBUG] [Thread-9909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:28.559 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:36.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:14:36.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:14:36.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:14:37.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 14, 13), 31.45, 10.98, 0.0, 7.45, 20.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:14:37.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:14:13
2025-11-26T02:14:37.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:14:37.407 [DEBUG] [Thread-9910] [transport.py] [_log()] starting thread (client mode): 0x70d7fee0
2025-11-26T02:14:37.407 [DEBUG] [Thread-9910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:14:37.429 [DEBUG] [Thread-9910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:14:37.429 [INFO] [Thread-9910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] client lang: <none>
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] server lang: <none>
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] kex follows: False
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] Compression: none
2025-11-26T02:14:37.432 [DEBUG] [Thread-9910] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:14:37.442 [DEBUG] [Thread-9910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:14:37.443 [DEBUG] [Thread-9910] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:14:37.443 [DEBUG] [Thread-9910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:14:37.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:14:37.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:14:37.443 [DEBUG] [Thread-9910] [transport.py] [_log()] userauth is OK
2025-11-26T02:14:37.443 [DEBUG] [Thread-9910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:14:37.443 [DEBUG] [Thread-9910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:14:37.443 [DEBUG] [Thread-9910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:14:37.443 [DEBUG] [Thread-9910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:14:37.453 [INFO] [Thread-9910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:14:37.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:14:38.072 [DEBUG] [Thread-9910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:14:38.072 [DEBUG] [Thread-9910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:14:38.073 [DEBUG] [Thread-9910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:14:38.113 [DEBUG] [Thread-9910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:14:38.113 [DEBUG] [Thread-9910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:14:38.117 [DEBUG] [Thread-9910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:14:38.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:14:38.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:14:38.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:14:38.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:14:38.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:14:38.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:14:38.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:14:38.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:14:38.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:14:38.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.009818 -999.00  +19.90   4.73     16   -5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 4.8 4.7 115.0 5.1 19.4 -26.2 19.3 -25.6 18.9 -24.2 19.2 -25.2
2025-11-26T02:14:38.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:14:38.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:14:38.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.009818
2025-11-26T02:14:38.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:14:38.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:14:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:14:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:14:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:14:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:14:13', tmtdew=31.45, humidity=10.98, cloud=0.0, wind=7.45, temperature=20.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:14:13', seeing=0.73, atlas_timestamp='2025-11-26T00:14:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:12:00')
2025-11-26T02:14:38.145 [DEBUG] [Thread-9910] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:14:38.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:14:38.240 [DEBUG] [Thread-9913] [transport.py] [_log()] starting thread (client mode): 0x70d39060
2025-11-26T02:14:38.240 [DEBUG] [Thread-9913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:14:38.258 [DEBUG] [Thread-9913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:14:38.258 [INFO] [Thread-9913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:14:38.265 [DEBUG] [Thread-9913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:14:38.265 [DEBUG] [Thread-9913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] client lang: <none>
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] server lang: <none>
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] kex follows: False
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] Compression: none
2025-11-26T02:14:38.266 [DEBUG] [Thread-9913] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:14:38.327 [DEBUG] [Thread-9913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:14:38.328 [DEBUG] [Thread-9913] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:14:38.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:14:38.329 [DEBUG] [Thread-9913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:14:38.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:14:38.395 [DEBUG] [Thread-9913] [transport.py] [_log()] userauth is OK
2025-11-26T02:14:38.395 [DEBUG] [Thread-9913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:14:38.396 [DEBUG] [Thread-9913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:14:38.396 [DEBUG] [Thread-9913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:14:38.396 [DEBUG] [Thread-9913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:14:38.414 [INFO] [Thread-9913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:14:38.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:14:38.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:14:38.978 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:39.244 [DEBUG] [Thread-9913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:14:39.245 [DEBUG] [Thread-9913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:14:39.293 [DEBUG] [Thread-9913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:14:39.293 [DEBUG] [Thread-9913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:14:39.303 [DEBUG] [Thread-9913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:14:39.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:14:39.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:14:39.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:14:39.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:14:39.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:14:39.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:14:39.342 [DEBUG] [Thread-9913] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:14:40.592 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:40.593 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:41.091 [DEBUG] [Thread-9915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:49.387 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:56.150 [DEBUG] [Thread-9916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:14:59.787 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:09.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:15:09.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:15:09.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:15:10.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 14, 45), 31.42, 10.97, 0.0, 7.92, 20.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:15:10.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:14:45
2025-11-26T02:15:10.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:15:10.183 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:10.305 [DEBUG] [Thread-9917] [transport.py] [_log()] starting thread (client mode): 0x70d3b2b0
2025-11-26T02:15:10.305 [DEBUG] [Thread-9917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:15:10.325 [DEBUG] [Thread-9917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:15:10.325 [INFO] [Thread-9917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:15:10.326 [DEBUG] [Thread-9917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] client lang: <none>
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] server lang: <none>
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] kex follows: False
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:15:10.327 [DEBUG] [Thread-9917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:15:10.328 [DEBUG] [Thread-9917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:15:10.328 [DEBUG] [Thread-9917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:15:10.328 [DEBUG] [Thread-9917] [transport.py] [_log()] Compression: none
2025-11-26T02:15:10.328 [DEBUG] [Thread-9917] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:15:10.337 [DEBUG] [Thread-9917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:15:10.338 [DEBUG] [Thread-9917] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:15:10.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:15:10.340 [DEBUG] [Thread-9917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:15:10.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:15:10.342 [DEBUG] [Thread-9917] [transport.py] [_log()] userauth is OK
2025-11-26T02:15:10.342 [DEBUG] [Thread-9917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:15:10.342 [DEBUG] [Thread-9917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:15:10.343 [DEBUG] [Thread-9917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:15:10.343 [DEBUG] [Thread-9917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:15:10.371 [INFO] [Thread-9917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:15:10.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:15:11.179 [DEBUG] [Thread-9919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:11.676 [DEBUG] [Thread-9917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:15:11.676 [DEBUG] [Thread-9917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:15:11.677 [DEBUG] [Thread-9917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:15:11.720 [DEBUG] [Thread-9917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:15:11.720 [DEBUG] [Thread-9917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:15:11.724 [DEBUG] [Thread-9917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:15:11.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:15:11.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:15:11.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:15:11.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:15:11.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:15:11.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:15:11.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:15:11.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:15:11.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:15:11.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.009818 -999.00  +19.90   4.73     16   -5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 4.8 4.7 115.0 5.1 19.4 -26.2 19.3 -25.6 18.9 -24.2 19.2 -25.2
2025-11-26T02:15:11.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:15:11.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:15:11.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.009818
2025-11-26T02:15:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:15:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:15:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:15:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:15:11.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:15:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:14:45', tmtdew=31.42, humidity=10.97, cloud=0.0, wind=7.92, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:14:45', seeing=0.53, atlas_timestamp='2025-11-26T00:14:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:12:00')
2025-11-26T02:15:11.754 [DEBUG] [Thread-9917] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:15:11.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:15:11.851 [DEBUG] [Thread-9921] [transport.py] [_log()] starting thread (client mode): 0x70d39c00
2025-11-26T02:15:11.851 [DEBUG] [Thread-9921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:15:11.865 [DEBUG] [Thread-9921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:15:11.865 [INFO] [Thread-9921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] client lang: <none>
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] server lang: <none>
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] kex follows: False
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] Compression: none
2025-11-26T02:15:11.873 [DEBUG] [Thread-9921] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:15:11.931 [DEBUG] [Thread-9921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:15:11.931 [DEBUG] [Thread-9921] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:15:11.931 [DEBUG] [Thread-9921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:15:11.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:15:11.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:15:11.988 [DEBUG] [Thread-9921] [transport.py] [_log()] userauth is OK
2025-11-26T02:15:11.988 [DEBUG] [Thread-9921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:15:11.988 [DEBUG] [Thread-9921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:15:11.988 [DEBUG] [Thread-9921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:15:11.988 [DEBUG] [Thread-9921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:15:12.002 [INFO] [Thread-9921] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:15:12.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:15:12.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:15:12.821 [DEBUG] [Thread-9921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:15:12.821 [DEBUG] [Thread-9921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:15:12.870 [DEBUG] [Thread-9921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:15:12.870 [DEBUG] [Thread-9921] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:15:12.879 [DEBUG] [Thread-9921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:15:12.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:15: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')
2025-11-26T02:15:12.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:15:12.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:15:12.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:15:12.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:15:12.916 [DEBUG] [Thread-9921] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:15:20.109 [DEBUG] [Thread-9923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:20.612 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:26.218 [DEBUG] [Thread-9924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:31.012 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:40.795 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:40.796 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:41.266 [DEBUG] [Thread-9925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:41.417 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:15:42.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:15:42.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:15:43.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 15, 17), 31.39, 11.0, 0.0, 7.61, 20.68, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:15:43.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:15:17
2025-11-26T02:15:43.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:15:43.847 [DEBUG] [Thread-9926] [transport.py] [_log()] starting thread (client mode): 0x70dfb3d0
2025-11-26T02:15:43.848 [DEBUG] [Thread-9926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:15:43.868 [DEBUG] [Thread-9926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:15:43.868 [INFO] [Thread-9926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:15:43.871 [DEBUG] [Thread-9926] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:15:43.871 [DEBUG] [Thread-9926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:15:43.871 [DEBUG] [Thread-9926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:15:43.871 [DEBUG] [Thread-9926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:15:43.871 [DEBUG] [Thread-9926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] client lang: <none>
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] server lang: <none>
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] kex follows: False
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] Compression: none
2025-11-26T02:15:43.872 [DEBUG] [Thread-9926] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:15:43.891 [DEBUG] [Thread-9926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:15:43.892 [DEBUG] [Thread-9926] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:15:43.893 [DEBUG] [Thread-9926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:15:43.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:15:43.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:15:43.933 [DEBUG] [Thread-9926] [transport.py] [_log()] userauth is OK
2025-11-26T02:15:43.933 [DEBUG] [Thread-9926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:15:43.934 [DEBUG] [Thread-9926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:15:43.934 [DEBUG] [Thread-9926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:15:43.934 [DEBUG] [Thread-9926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:15:43.954 [INFO] [Thread-9926] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:15:43.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:15:44.573 [DEBUG] [Thread-9926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:15:44.573 [DEBUG] [Thread-9926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:15:44.574 [DEBUG] [Thread-9926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:15:44.614 [DEBUG] [Thread-9926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:15:44.615 [DEBUG] [Thread-9926] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:15:44.617 [DEBUG] [Thread-9926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:15:44.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:15:44.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:15:44.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:15:44.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:15:44.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:15:44.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:15:44.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:15:44.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:15:44.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:15:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.010165 -999.00  +19.90   5.29     16   -5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 4.9 5.3 116.8 5.9 19.4 -26.2 19.2 -25.6 18.8 -24.3 19.1 -25.2
2025-11-26T02:15:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:15:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:15:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.010165
2025-11-26T02:15:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:15:44.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:15:44.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:15:44.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:15:44.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:15:44.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:15:17', tmtdew=31.39, humidity=11.0, cloud=0.0, wind=7.61, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:15:17', seeing=0.53, atlas_timestamp='2025-11-26T00:14:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:12:00')
2025-11-26T02:15:44.643 [DEBUG] [Thread-9926] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:15:44.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:15:44.739 [DEBUG] [Thread-9929] [transport.py] [_log()] starting thread (client mode): 0x70d7ef20
2025-11-26T02:15:44.739 [DEBUG] [Thread-9929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:15:44.753 [DEBUG] [Thread-9929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:15:44.753 [INFO] [Thread-9929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:15:44.760 [DEBUG] [Thread-9929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:15:44.760 [DEBUG] [Thread-9929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:15:44.760 [DEBUG] [Thread-9929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:15:44.760 [DEBUG] [Thread-9929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:15:44.760 [DEBUG] [Thread-9929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:15:44.760 [DEBUG] [Thread-9929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:15:44.760 [DEBUG] [Thread-9929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] client lang: <none>
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] server lang: <none>
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] kex follows: False
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] Compression: none
2025-11-26T02:15:44.761 [DEBUG] [Thread-9929] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:15:44.817 [DEBUG] [Thread-9929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:15:44.817 [DEBUG] [Thread-9929] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:15:44.817 [DEBUG] [Thread-9929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:15:44.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:15:44.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:15:44.875 [DEBUG] [Thread-9929] [transport.py] [_log()] userauth is OK
2025-11-26T02:15:44.875 [DEBUG] [Thread-9929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:15:44.875 [DEBUG] [Thread-9929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:15:44.875 [DEBUG] [Thread-9929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:15:44.875 [DEBUG] [Thread-9929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:15:44.889 [INFO] [Thread-9929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:15:44.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:15:44.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:15:45.731 [DEBUG] [Thread-9929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:15:45.731 [DEBUG] [Thread-9929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:15:45.779 [DEBUG] [Thread-9929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:15:45.779 [DEBUG] [Thread-9929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:15:45.789 [DEBUG] [Thread-9929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:15:45.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:15:45.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:15:45.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:15:45.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:15:45.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:15:45.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:15:45.821 [DEBUG] [Thread-9929] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:15:51.854 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:15:56.300 [DEBUG] [Thread-9931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:02.276 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:11.350 [DEBUG] [Thread-9932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:12.706 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:16:15.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:16:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:16:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 15, 49), 31.31, 11.02, 0.0, 7.78, 20.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:16:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:15:49
2025-11-26T02:16:16.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:16:16.758 [DEBUG] [Thread-9933] [transport.py] [_log()] starting thread (client mode): 0x70d55210
2025-11-26T02:16:16.758 [DEBUG] [Thread-9933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:16:16.773 [DEBUG] [Thread-9933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:16:16.773 [INFO] [Thread-9933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] client lang: <none>
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] server lang: <none>
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] kex follows: False
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] Compression: none
2025-11-26T02:16:16.777 [DEBUG] [Thread-9933] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:16:16.794 [DEBUG] [Thread-9933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:16:16.795 [DEBUG] [Thread-9933] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:16:16.795 [DEBUG] [Thread-9933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:16:16.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:16:16.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:16:16.797 [DEBUG] [Thread-9933] [transport.py] [_log()] userauth is OK
2025-11-26T02:16:16.798 [DEBUG] [Thread-9933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:16:16.798 [DEBUG] [Thread-9933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:16:16.798 [DEBUG] [Thread-9933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:16:16.798 [DEBUG] [Thread-9933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:16:16.816 [INFO] [Thread-9933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:16:16.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:16:17.654 [DEBUG] [Thread-9933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:16:17.654 [DEBUG] [Thread-9933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:16:17.655 [DEBUG] [Thread-9933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:16:17.696 [DEBUG] [Thread-9933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:16:17.696 [DEBUG] [Thread-9933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:16:17.700 [DEBUG] [Thread-9933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:16:17.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:16:17.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:16:17.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:16:17.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:16:17.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:16:17.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:16:17.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:16:17.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:16:17.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:16:17.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.010860 -999.00  +20.10   5.17     16   -5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.6 5.2 115.4 6.1 19.4 -26.0 19.2 -25.6 18.9 -24.2 19.2 -25.0
2025-11-26T02:16:17.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:16:17.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:16:17.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.010860
2025-11-26T02:16:17.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:16:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:16:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:16:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:16:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:16:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:15:49', tmtdew=31.31, humidity=11.02, cloud=0.0, wind=7.78, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:15:49', seeing=0.58, atlas_timestamp='2025-11-26T00:15:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.007749999999999702, 0.02024999999999899, -0.021500000000001407, -0.00849999999999973, 0.052250000000000796, -0.009000000000000341, -0.025749999999998607, 0.012999999999998124, -0.02200000000000024, 0.015750000000000597, 0.013999999999999346, 0.05249999999999844, 0.07124999999999915, -0.04600000000000115, -0.042500000000000426, -0.014749999999999375, -0.026500000000000412, -0.017000000000001236, -0.038750000000000284, 0.08199999999999896, 0.10974999999999824, 0.01774999999999949, -0.013250000000001094, 0.0129999999999999, 0.03950000000000031, -0.024250000000000327, 0.033500000000000085, 0.10599999999999987, 0.04600000000000115, 0.051000000000000156, -0.023999999999999133, 0.008749999999999147], zp_timestamp='2025-11-26T00:12:00')
2025-11-26T02:16:17.727 [DEBUG] [Thread-9933] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:16:17.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:16:17.823 [DEBUG] [Thread-9936] [transport.py] [_log()] starting thread (client mode): 0x70df9fc0
2025-11-26T02:16:17.823 [DEBUG] [Thread-9936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:16:17.843 [DEBUG] [Thread-9936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:16:17.843 [INFO] [Thread-9936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:16:17.851 [DEBUG] [Thread-9936] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:16:17.851 [DEBUG] [Thread-9936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:16:17.851 [DEBUG] [Thread-9936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:16:17.851 [DEBUG] [Thread-9936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:16:17.851 [DEBUG] [Thread-9936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:16:17.851 [DEBUG] [Thread-9936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:16:17.851 [DEBUG] [Thread-9936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] client lang: <none>
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] server lang: <none>
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] kex follows: False
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] Compression: none
2025-11-26T02:16:17.852 [DEBUG] [Thread-9936] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:16:17.909 [DEBUG] [Thread-9936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:16:17.910 [DEBUG] [Thread-9936] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:16:17.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:16:17.911 [DEBUG] [Thread-9936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:16:17.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:16:17.966 [DEBUG] [Thread-9936] [transport.py] [_log()] userauth is OK
2025-11-26T02:16:17.966 [DEBUG] [Thread-9936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:16:17.966 [DEBUG] [Thread-9936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:16:17.966 [DEBUG] [Thread-9936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:16:17.966 [DEBUG] [Thread-9936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:16:17.985 [INFO] [Thread-9936] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:16:17.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:16:17.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:16:18.862 [DEBUG] [Thread-9936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:16:18.862 [DEBUG] [Thread-9936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:16:18.910 [DEBUG] [Thread-9936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:16:18.910 [DEBUG] [Thread-9936] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:16:18.919 [DEBUG] [Thread-9936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:16:18.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:16:18.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:16:18.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:16:18.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:16:18.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:16:18.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:16:18.956 [DEBUG] [Thread-9936] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:16:20.211 [DEBUG] [Thread-9938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:23.140 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:26.379 [DEBUG] [Thread-9939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:33.560 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:41.010 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:41.011 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:41.431 [DEBUG] [Thread-9940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:43.962 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:48.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:16:48.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:16:48.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:16:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 16, 21), 31.34, 11.0, 0.0, 7.29, 20.68, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:16:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:16:21
2025-11-26T02:16:49.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:16:49.959 [DEBUG] [Thread-9941] [transport.py] [_log()] starting thread (client mode): 0x70dd0a30
2025-11-26T02:16:49.960 [DEBUG] [Thread-9941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:16:49.981 [DEBUG] [Thread-9941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:16:49.981 [INFO] [Thread-9941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] client lang: <none>
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] server lang: <none>
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] kex follows: False
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] Compression: none
2025-11-26T02:16:49.984 [DEBUG] [Thread-9941] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:16:50.000 [DEBUG] [Thread-9941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:16:50.000 [DEBUG] [Thread-9941] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:16:50.000 [DEBUG] [Thread-9941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:16:50.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:16:50.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:16:50.001 [DEBUG] [Thread-9941] [transport.py] [_log()] userauth is OK
2025-11-26T02:16:50.001 [DEBUG] [Thread-9941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:16:50.001 [DEBUG] [Thread-9941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:16:50.001 [DEBUG] [Thread-9941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:16:50.001 [DEBUG] [Thread-9941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:16:50.016 [INFO] [Thread-9941] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:16:50.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:16:50.608 [DEBUG] [Thread-9941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:16:50.608 [DEBUG] [Thread-9941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:16:50.608 [DEBUG] [Thread-9941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:16:50.649 [DEBUG] [Thread-9941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:16:50.649 [DEBUG] [Thread-9941] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:16:50.652 [DEBUG] [Thread-9941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:16:50.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:16:50.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:16:50.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:16:50.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:16:50.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:16:50.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:16:50.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.011207 -999.00  +20.20   5.77     17   -5.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.2 5.8 114.0 6.8 19.4 -26.0 19.3 -25.6 18.9 -23.7 19.2 -25.0
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.011207
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:16:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:16:21', tmtdew=31.34, humidity=11.0, cloud=0.0, wind=7.29, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:16:21', seeing=0.54, atlas_timestamp='2025-11-26T00:16:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:15:00')
2025-11-26T02:16:50.671 [DEBUG] [Thread-9941] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:16:50.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:16:50.757 [DEBUG] [Thread-9944] [transport.py] [_log()] starting thread (client mode): 0x70d43790
2025-11-26T02:16:50.757 [DEBUG] [Thread-9944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:16:50.771 [DEBUG] [Thread-9944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:16:50.771 [INFO] [Thread-9944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:16:50.778 [DEBUG] [Thread-9944] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] client lang: <none>
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] server lang: <none>
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] kex follows: False
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] Compression: none
2025-11-26T02:16:50.779 [DEBUG] [Thread-9944] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:16:50.834 [DEBUG] [Thread-9944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:16:50.834 [DEBUG] [Thread-9944] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:16:50.834 [DEBUG] [Thread-9944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:16:50.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:16:50.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:16:50.891 [DEBUG] [Thread-9944] [transport.py] [_log()] userauth is OK
2025-11-26T02:16:50.891 [DEBUG] [Thread-9944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:16:50.891 [DEBUG] [Thread-9944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:16:50.891 [DEBUG] [Thread-9944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:16:50.891 [DEBUG] [Thread-9944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:16:50.905 [INFO] [Thread-9944] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:16:50.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:16:50.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:16:51.738 [DEBUG] [Thread-9944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:16:51.738 [DEBUG] [Thread-9944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:16:51.786 [DEBUG] [Thread-9944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:16:51.786 [DEBUG] [Thread-9944] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:16:51.794 [DEBUG] [Thread-9944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:16:51.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:16:51.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:16:51.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:16:51.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:16:51.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:16:51.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:16:51.826 [DEBUG] [Thread-9944] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:16:54.358 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:16:56.463 [DEBUG] [Thread-9946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:04.756 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:11.520 [DEBUG] [Thread-9947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:15.153 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:20.298 [DEBUG] [Thread-9948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:21.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:17:21.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:17:21.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:17:22.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 16, 53), 31.27, 11.02, 0.0, 7.39, 20.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:17:22.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:16:53
2025-11-26T02:17:22.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:17:22.772 [DEBUG] [Thread-9949] [transport.py] [_log()] starting thread (client mode): 0x70de4a00
2025-11-26T02:17:22.772 [DEBUG] [Thread-9949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:17:22.792 [DEBUG] [Thread-9949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:17:22.792 [INFO] [Thread-9949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:17:22.795 [DEBUG] [Thread-9949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:17:22.795 [DEBUG] [Thread-9949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:17:22.795 [DEBUG] [Thread-9949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:17:22.795 [DEBUG] [Thread-9949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] client lang: <none>
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] server lang: <none>
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] kex follows: False
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] Compression: none
2025-11-26T02:17:22.796 [DEBUG] [Thread-9949] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:17:22.813 [DEBUG] [Thread-9949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:17:22.813 [DEBUG] [Thread-9949] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:17:22.814 [DEBUG] [Thread-9949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:17:22.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:17:22.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:17:22.815 [DEBUG] [Thread-9949] [transport.py] [_log()] userauth is OK
2025-11-26T02:17:22.815 [DEBUG] [Thread-9949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:17:22.815 [DEBUG] [Thread-9949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:17:22.815 [DEBUG] [Thread-9949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:17:22.815 [DEBUG] [Thread-9949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:17:22.825 [INFO] [Thread-9949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:17:22.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:17:23.603 [DEBUG] [Thread-9949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:17:23.603 [DEBUG] [Thread-9949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:17:23.604 [DEBUG] [Thread-9949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:17:23.644 [DEBUG] [Thread-9949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:17:23.644 [DEBUG] [Thread-9949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:17:23.648 [DEBUG] [Thread-9949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:17:23.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:17:23.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:17:23.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:17:23.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:17:23.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:17:23.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:17:23.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:17:23.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:17:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:17:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.011554 -999.00  +20.40   5.85     16   -5.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.4 5.8 114.4 6.3 19.5 -26.0 19.3 -25.5 18.9 -24.1 19.2 -25.1
2025-11-26T02:17:23.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:17:23.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:17:23.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.011554
2025-11-26T02:17:23.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:17:23.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:17:23.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:17:23.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:17:23.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:17:23.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:16:53', tmtdew=31.27, humidity=11.02, cloud=0.0, wind=7.39, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:16:53', seeing=0.64, atlas_timestamp='2025-11-26T00:16:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:15:00')
2025-11-26T02:17:23.676 [DEBUG] [Thread-9949] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:17:23.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:17:23.772 [DEBUG] [Thread-9952] [transport.py] [_log()] starting thread (client mode): 0x70dfb190
2025-11-26T02:17:23.772 [DEBUG] [Thread-9952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:17:23.787 [DEBUG] [Thread-9952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:17:23.787 [INFO] [Thread-9952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:17:23.795 [DEBUG] [Thread-9952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:17:23.795 [DEBUG] [Thread-9952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:17:23.796 [DEBUG] [Thread-9952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:17:23.796 [DEBUG] [Thread-9952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:17:23.796 [DEBUG] [Thread-9952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:17:23.796 [DEBUG] [Thread-9952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:17:23.796 [DEBUG] [Thread-9952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:17:23.796 [DEBUG] [Thread-9952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:17:23.796 [DEBUG] [Thread-9952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:17:23.796 [DEBUG] [Thread-9952] [transport.py] [_log()] client lang: <none>
2025-11-26T02:17:23.796 [DEBUG] [Thread-9952] [transport.py] [_log()] server lang: <none>
2025-11-26T02:17:23.797 [DEBUG] [Thread-9952] [transport.py] [_log()] kex follows: False
2025-11-26T02:17:23.797 [DEBUG] [Thread-9952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:17:23.797 [DEBUG] [Thread-9952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:17:23.797 [DEBUG] [Thread-9952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:17:23.797 [DEBUG] [Thread-9952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:17:23.797 [DEBUG] [Thread-9952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:17:23.797 [DEBUG] [Thread-9952] [transport.py] [_log()] Compression: none
2025-11-26T02:17:23.797 [DEBUG] [Thread-9952] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:17:23.854 [DEBUG] [Thread-9952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:17:23.854 [DEBUG] [Thread-9952] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:17:23.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:17:23.855 [DEBUG] [Thread-9952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:17:23.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:17:23.909 [DEBUG] [Thread-9952] [transport.py] [_log()] userauth is OK
2025-11-26T02:17:23.910 [DEBUG] [Thread-9952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:17:23.910 [DEBUG] [Thread-9952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:17:23.910 [DEBUG] [Thread-9952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:17:23.910 [DEBUG] [Thread-9952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:17:23.928 [INFO] [Thread-9952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:17:23.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:17:23.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:17:24.770 [DEBUG] [Thread-9952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:17:24.770 [DEBUG] [Thread-9952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:17:24.818 [DEBUG] [Thread-9952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:17:24.818 [DEBUG] [Thread-9952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:17:24.827 [DEBUG] [Thread-9952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:17:24.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:17:24.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:17:24.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:17:24.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:17:24.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:17:24.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:17:24.858 [DEBUG] [Thread-9952] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:17:25.530 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:26.552 [DEBUG] [Thread-9954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:35.906 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:41.227 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:41.229 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:41.596 [DEBUG] [Thread-9955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:46.303 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:54.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:17:54.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:17:54.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:17:55.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 17, 25), 31.23, 11.05, 0.0, 7.69, 20.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:17:55.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:17:25
2025-11-26T02:17:55.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:17:55.788 [DEBUG] [Thread-9956] [transport.py] [_log()] starting thread (client mode): 0x70dfb730
2025-11-26T02:17:55.788 [DEBUG] [Thread-9956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:17:55.808 [DEBUG] [Thread-9956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:17:55.808 [INFO] [Thread-9956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:17:55.811 [DEBUG] [Thread-9956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] client lang: <none>
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] server lang: <none>
2025-11-26T02:17:55.812 [DEBUG] [Thread-9956] [transport.py] [_log()] kex follows: False
2025-11-26T02:17:55.813 [DEBUG] [Thread-9956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:17:55.813 [DEBUG] [Thread-9956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:17:55.813 [DEBUG] [Thread-9956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:17:55.813 [DEBUG] [Thread-9956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:17:55.813 [DEBUG] [Thread-9956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:17:55.813 [DEBUG] [Thread-9956] [transport.py] [_log()] Compression: none
2025-11-26T02:17:55.813 [DEBUG] [Thread-9956] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:17:55.833 [DEBUG] [Thread-9956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:17:55.834 [DEBUG] [Thread-9956] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:17:55.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:17:55.835 [DEBUG] [Thread-9956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:17:55.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:17:55.837 [DEBUG] [Thread-9956] [transport.py] [_log()] userauth is OK
2025-11-26T02:17:55.837 [DEBUG] [Thread-9956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:17:55.837 [DEBUG] [Thread-9956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:17:55.837 [DEBUG] [Thread-9956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:17:55.837 [DEBUG] [Thread-9956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:17:55.870 [INFO] [Thread-9956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:17:55.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:17:56.479 [DEBUG] [Thread-9956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:17:56.479 [DEBUG] [Thread-9956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:17:56.480 [DEBUG] [Thread-9956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:17:56.521 [DEBUG] [Thread-9956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:17:56.521 [DEBUG] [Thread-9956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:17:56.525 [DEBUG] [Thread-9956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:17:56.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:17:56.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:17:56.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:17:56.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:17:56.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:17:56.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:17:56.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:17:56.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:17:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:17:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.011902 -999.00  +20.40   5.51     16   -5.40 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.7 5.5 110.2 6.3 19.4 -25.8 19.3 -25.6 18.9 -24.1 19.2 -25.1
2025-11-26T02:17:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:17:56.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:17:56.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.011902
2025-11-26T02:17:56.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:17:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:17:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:17:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:17:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:17:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:17:25', tmtdew=31.23, humidity=11.05, cloud=0.0, wind=7.69, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:17:25', seeing=0.53, atlas_timestamp='2025-11-26T00:17:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:15:00')
2025-11-26T02:17:56.551 [DEBUG] [Thread-9956] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:17:56.630 [DEBUG] [Thread-9959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:56.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:17:56.647 [DEBUG] [Thread-9960] [transport.py] [_log()] starting thread (client mode): 0x70d7e8f0
2025-11-26T02:17:56.647 [DEBUG] [Thread-9960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:17:56.662 [DEBUG] [Thread-9960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:17:56.662 [INFO] [Thread-9960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:17:56.669 [DEBUG] [Thread-9960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] client lang: <none>
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] server lang: <none>
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] kex follows: False
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:17:56.670 [DEBUG] [Thread-9960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:17:56.671 [DEBUG] [Thread-9960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:17:56.671 [DEBUG] [Thread-9960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:17:56.671 [DEBUG] [Thread-9960] [transport.py] [_log()] Compression: none
2025-11-26T02:17:56.671 [DEBUG] [Thread-9960] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:17:56.725 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:17:56.727 [DEBUG] [Thread-9960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:17:56.728 [DEBUG] [Thread-9960] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:17:56.728 [DEBUG] [Thread-9960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:17:56.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:17:56.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:17:56.783 [DEBUG] [Thread-9960] [transport.py] [_log()] userauth is OK
2025-11-26T02:17:56.783 [DEBUG] [Thread-9960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:17:56.784 [DEBUG] [Thread-9960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:17:56.784 [DEBUG] [Thread-9960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:17:56.784 [DEBUG] [Thread-9960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:17:56.806 [INFO] [Thread-9960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:17:56.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:17:56.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:17:57.602 [DEBUG] [Thread-9960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:17:57.602 [DEBUG] [Thread-9960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:17:57.650 [DEBUG] [Thread-9960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:17:57.650 [DEBUG] [Thread-9960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:17:57.658 [DEBUG] [Thread-9960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:17:57.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:17: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')
2025-11-26T02:17:57.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:17:57.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:17:57.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:17:57.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:17:57.690 [DEBUG] [Thread-9960] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:18:07.116 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:11.669 [DEBUG] [Thread-9962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:17.579 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:20.375 [DEBUG] [Thread-9963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:26.706 [DEBUG] [Thread-9964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:27.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:18:27.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:18:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:18:27.985 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 17, 57), 31.39, 11.03, 0.0, 7.29, 20.81, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:18:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:17:57
2025-11-26T02:18:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:18:28.628 [DEBUG] [Thread-9965] [transport.py] [_log()] starting thread (client mode): 0x70dbc400
2025-11-26T02:18:28.628 [DEBUG] [Thread-9965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:18:28.643 [DEBUG] [Thread-9965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:18:28.643 [INFO] [Thread-9965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] client lang: <none>
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] server lang: <none>
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] kex follows: False
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] Compression: none
2025-11-26T02:18:28.646 [DEBUG] [Thread-9965] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:18:28.660 [DEBUG] [Thread-9965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:18:28.661 [DEBUG] [Thread-9965] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:18:28.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:18:28.661 [DEBUG] [Thread-9965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:18:28.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:18:28.663 [DEBUG] [Thread-9965] [transport.py] [_log()] userauth is OK
2025-11-26T02:18:28.664 [DEBUG] [Thread-9965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:18:28.664 [DEBUG] [Thread-9965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:18:28.664 [DEBUG] [Thread-9965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:18:28.664 [DEBUG] [Thread-9965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:18:28.688 [INFO] [Thread-9965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:18:28.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:18:29.475 [DEBUG] [Thread-9965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:18:29.476 [DEBUG] [Thread-9965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:18:29.476 [DEBUG] [Thread-9965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:18:29.517 [DEBUG] [Thread-9965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:18:29.517 [DEBUG] [Thread-9965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:18:29.520 [DEBUG] [Thread-9965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:18:29.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:18:29.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:18:29.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:18:29.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:18:29.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:18:29.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:18:29.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:18:29.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:18:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:18:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.012249 -999.00  +20.50   4.16     16   -5.40 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.6 4.2 104.6 7.2 19.5 -25.8 19.3 -25.3 18.9 -24.0 19.2 -25.0
2025-11-26T02:18:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:18:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:18:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.012249
2025-11-26T02:18:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:18:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:18:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:18:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:18:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:18:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:17:57', tmtdew=31.39, humidity=11.03, cloud=0.0, wind=7.29, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:17:57', seeing=0.59, atlas_timestamp='2025-11-26T00:17:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:15:00')
2025-11-26T02:18:29.542 [DEBUG] [Thread-9965] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:18:29.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:18:29.628 [DEBUG] [Thread-9968] [transport.py] [_log()] starting thread (client mode): 0x70dd2020
2025-11-26T02:18:29.629 [DEBUG] [Thread-9968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:18:29.643 [DEBUG] [Thread-9968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:18:29.643 [INFO] [Thread-9968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] client lang: <none>
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] server lang: <none>
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] kex follows: False
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] Compression: none
2025-11-26T02:18:29.651 [DEBUG] [Thread-9968] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:18:29.707 [DEBUG] [Thread-9968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:18:29.707 [DEBUG] [Thread-9968] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:18:29.707 [DEBUG] [Thread-9968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:18:29.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:18:29.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:18:29.764 [DEBUG] [Thread-9968] [transport.py] [_log()] userauth is OK
2025-11-26T02:18:29.764 [DEBUG] [Thread-9968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:18:29.764 [DEBUG] [Thread-9968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:18:29.764 [DEBUG] [Thread-9968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:18:29.764 [DEBUG] [Thread-9968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:18:29.778 [INFO] [Thread-9968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:18:29.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:18:29.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:18:30.631 [DEBUG] [Thread-9968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:18:30.631 [DEBUG] [Thread-9968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:18:30.679 [DEBUG] [Thread-9968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:18:30.679 [DEBUG] [Thread-9968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:18:30.687 [DEBUG] [Thread-9968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:18:30.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:18:30.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:18:30.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:18:30.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:18:30.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:18:30.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:18:30.719 [DEBUG] [Thread-9968] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:18:38.385 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:41.432 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:41.433 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:41.737 [DEBUG] [Thread-9970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:48.778 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:56.785 [DEBUG] [Thread-9971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:18:59.171 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:19:00.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:19:00.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:19:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 18, 29), 31.36, 11.05, 0.0, 7.48, 20.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:19:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:18:29
2025-11-26T02:19:01.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:19:01.649 [DEBUG] [Thread-9972] [transport.py] [_log()] starting thread (client mode): 0x70d6a5c0
2025-11-26T02:19:01.649 [DEBUG] [Thread-9972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:19:01.669 [DEBUG] [Thread-9972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:19:01.669 [INFO] [Thread-9972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:19:01.672 [DEBUG] [Thread-9972] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:19:01.672 [DEBUG] [Thread-9972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:19:01.672 [DEBUG] [Thread-9972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:19:01.672 [DEBUG] [Thread-9972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:19:01.672 [DEBUG] [Thread-9972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:19:01.672 [DEBUG] [Thread-9972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:19:01.672 [DEBUG] [Thread-9972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] client lang: <none>
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] server lang: <none>
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] kex follows: False
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] Compression: none
2025-11-26T02:19:01.673 [DEBUG] [Thread-9972] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:19:01.688 [DEBUG] [Thread-9972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:19:01.688 [DEBUG] [Thread-9972] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:19:01.688 [DEBUG] [Thread-9972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:19:01.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:19:01.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:19:01.689 [DEBUG] [Thread-9972] [transport.py] [_log()] userauth is OK
2025-11-26T02:19:01.689 [DEBUG] [Thread-9972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:19:01.689 [DEBUG] [Thread-9972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:19:01.689 [DEBUG] [Thread-9972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:19:01.689 [DEBUG] [Thread-9972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:19:01.704 [INFO] [Thread-9972] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:19:01.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:19:02.353 [DEBUG] [Thread-9972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:19:02.353 [DEBUG] [Thread-9972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:19:02.353 [DEBUG] [Thread-9972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:19:02.394 [DEBUG] [Thread-9972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:19:02.394 [DEBUG] [Thread-9972] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:19:02.396 [DEBUG] [Thread-9972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:19:02.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:19:02.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:19:02.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:19:02.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:19:02.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:19:02.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:19:02.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.012943 -999.00  +20.60   7.48     16   -5.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.3 7.5 123.2 9.9 19.6 -25.9 19.3 -25.3 18.9 -23.9 19.2 -24.7
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.012943
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:19:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:18:29', tmtdew=31.36, humidity=11.05, cloud=0.0, wind=7.48, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:18:29', seeing=0.59, atlas_timestamp='2025-11-26T00:18:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:15:00')
2025-11-26T02:19:02.415 [DEBUG] [Thread-9972] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:19:02.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:19:02.501 [DEBUG] [Thread-9975] [transport.py] [_log()] starting thread (client mode): 0x70d68cd0
2025-11-26T02:19:02.501 [DEBUG] [Thread-9975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:19:02.516 [DEBUG] [Thread-9975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:19:02.516 [INFO] [Thread-9975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] client lang: <none>
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] server lang: <none>
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] kex follows: False
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:19:02.523 [DEBUG] [Thread-9975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:19:02.524 [DEBUG] [Thread-9975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:19:02.524 [DEBUG] [Thread-9975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:19:02.524 [DEBUG] [Thread-9975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:19:02.524 [DEBUG] [Thread-9975] [transport.py] [_log()] Compression: none
2025-11-26T02:19:02.524 [DEBUG] [Thread-9975] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:19:02.585 [DEBUG] [Thread-9975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:19:02.585 [DEBUG] [Thread-9975] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:19:02.585 [DEBUG] [Thread-9975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:19:02.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:19:02.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:19:02.643 [DEBUG] [Thread-9975] [transport.py] [_log()] userauth is OK
2025-11-26T02:19:02.643 [DEBUG] [Thread-9975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:19:02.643 [DEBUG] [Thread-9975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:19:02.643 [DEBUG] [Thread-9975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:19:02.643 [DEBUG] [Thread-9975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:19:02.659 [INFO] [Thread-9975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:19:02.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:19:02.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:19:03.516 [DEBUG] [Thread-9975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:19:03.516 [DEBUG] [Thread-9975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:19:03.565 [DEBUG] [Thread-9975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:19:03.565 [DEBUG] [Thread-9975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:19:03.574 [DEBUG] [Thread-9975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:19:03.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:19:03.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:19:03.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:19:03.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:19:03.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:19:03.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:19:03.612 [DEBUG] [Thread-9975] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:19:09.572 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:11.820 [DEBUG] [Thread-9977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:19.970 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:20.427 [DEBUG] [Thread-9978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:26.857 [DEBUG] [Thread-9979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:30.382 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:33.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:19:33.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:19:33.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:19:34.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 19, 1), 31.29, 11.12, 0.0, 7.59, 20.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:19:34.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:19:01
2025-11-26T02:19:34.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:19:34.630 [DEBUG] [Thread-9980] [transport.py] [_log()] starting thread (client mode): 0x70d6b610
2025-11-26T02:19:34.630 [DEBUG] [Thread-9980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:19:34.650 [DEBUG] [Thread-9980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:19:34.650 [INFO] [Thread-9980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:19:34.653 [DEBUG] [Thread-9980] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:19:34.653 [DEBUG] [Thread-9980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:19:34.653 [DEBUG] [Thread-9980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:19:34.653 [DEBUG] [Thread-9980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:19:34.653 [DEBUG] [Thread-9980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:19:34.653 [DEBUG] [Thread-9980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:19:34.653 [DEBUG] [Thread-9980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] client lang: <none>
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] server lang: <none>
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] kex follows: False
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] Compression: none
2025-11-26T02:19:34.654 [DEBUG] [Thread-9980] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:19:34.671 [DEBUG] [Thread-9980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:19:34.671 [DEBUG] [Thread-9980] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:19:34.671 [DEBUG] [Thread-9980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:19:34.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:19:34.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:19:34.672 [DEBUG] [Thread-9980] [transport.py] [_log()] userauth is OK
2025-11-26T02:19:34.672 [DEBUG] [Thread-9980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:19:34.672 [DEBUG] [Thread-9980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:19:34.672 [DEBUG] [Thread-9980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:19:34.672 [DEBUG] [Thread-9980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:19:34.685 [INFO] [Thread-9980] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:19:34.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:19:35.342 [DEBUG] [Thread-9980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:19:35.342 [DEBUG] [Thread-9980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:19:35.342 [DEBUG] [Thread-9980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:19:35.383 [DEBUG] [Thread-9980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:19:35.383 [DEBUG] [Thread-9980] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:19:35.386 [DEBUG] [Thread-9980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:19:35.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:19:35.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:19:35.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:19:35.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:19:35.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:19:35.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:19:35.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.013291 -999.00  +20.70   5.78     16   -5.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.3 5.8 107.4 8.2 19.6 -25.8 19.4 -25.4 19.0 -23.8 19.3 -24.9
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.013291
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:19:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:19:01', tmtdew=31.29, humidity=11.12, cloud=0.0, wind=7.59, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:19:33', seeing=0.74, atlas_timestamp='2025-11-26T00:19:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:15:00')
2025-11-26T02:19:35.405 [DEBUG] [Thread-9980] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:19:35.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:19:35.491 [DEBUG] [Thread-9983] [transport.py] [_log()] starting thread (client mode): 0x70d7d540
2025-11-26T02:19:35.491 [DEBUG] [Thread-9983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:19:35.506 [DEBUG] [Thread-9983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:19:35.506 [INFO] [Thread-9983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] client lang: <none>
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] server lang: <none>
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] kex follows: False
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] Compression: none
2025-11-26T02:19:35.514 [DEBUG] [Thread-9983] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:19:35.571 [DEBUG] [Thread-9983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:19:35.572 [DEBUG] [Thread-9983] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:19:35.572 [DEBUG] [Thread-9983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:19:35.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:19:35.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:19:35.628 [DEBUG] [Thread-9983] [transport.py] [_log()] userauth is OK
2025-11-26T02:19:35.628 [DEBUG] [Thread-9983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:19:35.628 [DEBUG] [Thread-9983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:19:35.628 [DEBUG] [Thread-9983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:19:35.628 [DEBUG] [Thread-9983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:19:35.647 [INFO] [Thread-9983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:19:35.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:19:35.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:19:36.445 [DEBUG] [Thread-9983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:19:36.445 [DEBUG] [Thread-9983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:19:36.494 [DEBUG] [Thread-9983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:19:36.494 [DEBUG] [Thread-9983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:19:36.503 [DEBUG] [Thread-9983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:19:36.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:19:36.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:19:36.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:19:36.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:19:36.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:19:36.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:19:36.540 [DEBUG] [Thread-9983] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:19:40.802 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:41.635 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:41.636 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:41.895 [DEBUG] [Thread-9985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:51.214 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:19:56.932 [DEBUG] [Thread-9986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:01.612 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:20:06.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:20:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:20:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 19, 33), 31.32, 11.1, 0.0, 7.96, 20.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:20:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:19:33
2025-11-26T02:20:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:20:07.543 [DEBUG] [Thread-9987] [transport.py] [_log()] starting thread (client mode): 0x70d6a110
2025-11-26T02:20:07.544 [DEBUG] [Thread-9987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:20:07.556 [DEBUG] [Thread-9987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:20:07.556 [INFO] [Thread-9987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] client lang: <none>
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] server lang: <none>
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] kex follows: False
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:20:07.559 [DEBUG] [Thread-9987] [transport.py] [_log()] Compression: none
2025-11-26T02:20:07.560 [DEBUG] [Thread-9987] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:20:07.567 [DEBUG] [Thread-9987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:20:07.567 [DEBUG] [Thread-9987] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:20:07.567 [DEBUG] [Thread-9987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:20:07.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:20:07.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:20:07.609 [DEBUG] [Thread-9987] [transport.py] [_log()] userauth is OK
2025-11-26T02:20:07.609 [DEBUG] [Thread-9987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:20:07.609 [DEBUG] [Thread-9987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:20:07.609 [DEBUG] [Thread-9987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:20:07.609 [DEBUG] [Thread-9987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:20:07.645 [INFO] [Thread-9987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:20:07.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:20:10.381 [DEBUG] [Thread-9987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:20:10.381 [DEBUG] [Thread-9987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:20:10.381 [DEBUG] [Thread-9987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:20:10.422 [DEBUG] [Thread-9987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:20:10.423 [DEBUG] [Thread-9987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:20:10.425 [DEBUG] [Thread-9987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:20:10.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:20:10.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:20:10.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:20:10.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:20:10.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:20:10.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:20:10.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:20:10.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:20:10.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:20:10.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.013638 -999.00  +20.70   4.93     16   -5.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.7 4.9 116.0 8.1 19.6 -25.8 19.4 -25.6 19.0 -24.1 19.3 -25.1
2025-11-26T02:20:10.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:20:10.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:20:10.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.013638
2025-11-26T02:20:10.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:20:10.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:20:10.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:20:10.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:20:10.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:20:10.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:19:33', tmtdew=31.32, humidity=11.1, cloud=0.0, wind=7.96, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:20:05', seeing=0.68, atlas_timestamp='2025-11-26T00:19:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:18:00')
2025-11-26T02:20:10.472 [DEBUG] [Thread-9987] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:20:10.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:20:10.566 [DEBUG] [Thread-9990] [transport.py] [_log()] starting thread (client mode): 0x70dbec80
2025-11-26T02:20:10.566 [DEBUG] [Thread-9990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:20:10.580 [DEBUG] [Thread-9990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:20:10.580 [INFO] [Thread-9990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] client lang: <none>
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] server lang: <none>
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] kex follows: False
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:20:10.588 [DEBUG] [Thread-9990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:20:10.589 [DEBUG] [Thread-9990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:20:10.589 [DEBUG] [Thread-9990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:20:10.589 [DEBUG] [Thread-9990] [transport.py] [_log()] Compression: none
2025-11-26T02:20:10.589 [DEBUG] [Thread-9990] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:20:10.651 [DEBUG] [Thread-9990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:20:10.652 [DEBUG] [Thread-9990] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:20:10.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:20:10.653 [DEBUG] [Thread-9990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:20:10.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:20:10.710 [DEBUG] [Thread-9990] [transport.py] [_log()] userauth is OK
2025-11-26T02:20:10.710 [DEBUG] [Thread-9990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:20:10.710 [DEBUG] [Thread-9990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:20:10.710 [DEBUG] [Thread-9990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:20:10.711 [DEBUG] [Thread-9990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:20:10.729 [INFO] [Thread-9990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:20:10.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:20:10.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:20:11.531 [DEBUG] [Thread-9990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:20:11.532 [DEBUG] [Thread-9990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:20:11.580 [DEBUG] [Thread-9990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:20:11.580 [DEBUG] [Thread-9990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:20:11.590 [DEBUG] [Thread-9990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:20:11.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:20:11.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:20:11.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:20:11.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:20:11.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:20:11.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:20:11.629 [DEBUG] [Thread-9990] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:20:11.962 [DEBUG] [Thread-9992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:12.012 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:20.505 [DEBUG] [Thread-9993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:22.408 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:27.008 [DEBUG] [Thread-9994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:32.843 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:41.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:20:41.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:20: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
2025-11-26T02:20:41.838 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:41.839 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:42.040 [DEBUG] [Thread-9995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:42.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 20, 37), 31.32, 11.15, 0.0, 7.8, 20.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:20:42.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:20:37
2025-11-26T02:20:42.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:20:42.594 [DEBUG] [Thread-9996] [transport.py] [_log()] starting thread (client mode): 0x70d68070
2025-11-26T02:20:42.594 [DEBUG] [Thread-9996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:20:42.616 [DEBUG] [Thread-9996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:20:42.616 [INFO] [Thread-9996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:20:42.619 [DEBUG] [Thread-9996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:20:42.619 [DEBUG] [Thread-9996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:20:42.619 [DEBUG] [Thread-9996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:20:42.619 [DEBUG] [Thread-9996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:20:42.619 [DEBUG] [Thread-9996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:20:42.619 [DEBUG] [Thread-9996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] client lang: <none>
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] server lang: <none>
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] kex follows: False
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] Compression: none
2025-11-26T02:20:42.620 [DEBUG] [Thread-9996] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:20:42.638 [DEBUG] [Thread-9996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:20:42.638 [DEBUG] [Thread-9996] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:20:42.639 [DEBUG] [Thread-9996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:20:42.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:20:42.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:20:42.641 [DEBUG] [Thread-9996] [transport.py] [_log()] userauth is OK
2025-11-26T02:20:42.641 [DEBUG] [Thread-9996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:20:42.641 [DEBUG] [Thread-9996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:20:42.641 [DEBUG] [Thread-9996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:20:42.641 [DEBUG] [Thread-9996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:20:42.659 [INFO] [Thread-9996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:20:42.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:20:43.237 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:43.289 [DEBUG] [Thread-9996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:20:43.290 [DEBUG] [Thread-9996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:20:43.290 [DEBUG] [Thread-9996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:20:43.331 [DEBUG] [Thread-9996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:20:43.331 [DEBUG] [Thread-9996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:20:43.334 [DEBUG] [Thread-9996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:20:43.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:20:43.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:20:43.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:20:43.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:20:43.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:20:43.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:20:43.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:20:43.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:20:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:20:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.013985 -999.00  +20.70   7.39     16   -5.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 7.3 7.4 126.2 8.3 19.6 -25.7 19.4 -25.6 19.1 -23.9 19.4 -25.1
2025-11-26T02:20:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:20:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:20:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.013985
2025-11-26T02:20:43.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:20:43.360 [DEBUG] [Thread-9996] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:20:37', tmtdew=31.32, humidity=11.15, cloud=0.0, wind=7.8, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:20:37', seeing=0.63, atlas_timestamp='2025-11-26T00:20:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:18:00')
2025-11-26T02:20:43.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:20:43.456 [DEBUG] [Thread-9999] [transport.py] [_log()] starting thread (client mode): 0x70de7310
2025-11-26T02:20:43.456 [DEBUG] [Thread-9999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:20:43.470 [DEBUG] [Thread-9999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:20:43.470 [INFO] [Thread-9999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:20:43.478 [DEBUG] [Thread-9999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:20:43.478 [DEBUG] [Thread-9999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:20:43.478 [DEBUG] [Thread-9999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] client lang: <none>
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] server lang: <none>
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] kex follows: False
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:20:43.479 [DEBUG] [Thread-9999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:20:43.480 [DEBUG] [Thread-9999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:20:43.480 [DEBUG] [Thread-9999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:20:43.480 [DEBUG] [Thread-9999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:20:43.480 [DEBUG] [Thread-9999] [transport.py] [_log()] Compression: none
2025-11-26T02:20:43.480 [DEBUG] [Thread-9999] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:20:43.535 [DEBUG] [Thread-9999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:20:43.536 [DEBUG] [Thread-9999] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:20:43.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:20:43.537 [DEBUG] [Thread-9999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:20:43.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:20:43.591 [DEBUG] [Thread-9999] [transport.py] [_log()] userauth is OK
2025-11-26T02:20:43.591 [DEBUG] [Thread-9999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:20:43.592 [DEBUG] [Thread-9999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:20:43.592 [DEBUG] [Thread-9999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:20:43.592 [DEBUG] [Thread-9999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:20:43.611 [INFO] [Thread-9999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:20:43.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:20:43.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:20:44.400 [DEBUG] [Thread-9999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:20:44.401 [DEBUG] [Thread-9999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:20:44.448 [DEBUG] [Thread-9999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:20:44.448 [DEBUG] [Thread-9999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:20:44.457 [DEBUG] [Thread-9999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:20:44.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:20:44.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:20:44.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:20:44.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:20:44.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:20:44.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:20:44.492 [DEBUG] [Thread-9999] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:20:53.632 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:20:57.075 [DEBUG] [Thread-10001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:04.049 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:12.125 [DEBUG] [Thread-10002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:14.465 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:14.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:21:14.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:21:14.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:21:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 21, 9), 31.27, 11.2, 0.0, 8.28, 20.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:21:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:21:09
2025-11-26T02:21:15.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:21:15.439 [DEBUG] [Thread-10003] [transport.py] [_log()] starting thread (client mode): 0x70dbeec0
2025-11-26T02:21:15.439 [DEBUG] [Thread-10003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:21:15.459 [DEBUG] [Thread-10003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:21:15.460 [INFO] [Thread-10003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:21:15.462 [DEBUG] [Thread-10003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:21:15.462 [DEBUG] [Thread-10003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:21:15.462 [DEBUG] [Thread-10003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:21:15.462 [DEBUG] [Thread-10003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:21:15.462 [DEBUG] [Thread-10003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:21:15.462 [DEBUG] [Thread-10003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:21:15.462 [DEBUG] [Thread-10003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] client lang: <none>
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] server lang: <none>
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] kex follows: False
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] Compression: none
2025-11-26T02:21:15.463 [DEBUG] [Thread-10003] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:21:15.481 [DEBUG] [Thread-10003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:21:15.482 [DEBUG] [Thread-10003] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:21:15.482 [DEBUG] [Thread-10003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:21:15.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:21:15.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:21:15.484 [DEBUG] [Thread-10003] [transport.py] [_log()] userauth is OK
2025-11-26T02:21:15.485 [DEBUG] [Thread-10003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:21:15.485 [DEBUG] [Thread-10003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:21:15.485 [DEBUG] [Thread-10003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:21:15.485 [DEBUG] [Thread-10003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:21:15.521 [INFO] [Thread-10003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:21:15.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:21:16.148 [DEBUG] [Thread-10003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:21:16.148 [DEBUG] [Thread-10003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:21:16.148 [DEBUG] [Thread-10003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:21:16.189 [DEBUG] [Thread-10003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:21:16.189 [DEBUG] [Thread-10003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:21:16.192 [DEBUG] [Thread-10003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:21:16.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:21:16.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:21:16.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:21:16.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:21:16.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:21:16.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:21:16.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:21:16.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:21:16.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:21:16.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.014332 -999.00  +20.80   5.72     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.7 5.7 109.0 9.0 19.7 -25.8 19.4 -25.4 19.1 -23.8 19.4 -25.2
2025-11-26T02:21:16.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:21:16.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:21:16.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.014332
2025-11-26T02:21:16.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:21:16.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:21:16.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:21:16.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:21:16.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:21:16.219 [DEBUG] [Thread-10003] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:21:16.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:21:09', tmtdew=31.27, humidity=11.2, cloud=0.0, wind=8.28, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:21:10', seeing=0.63, atlas_timestamp='2025-11-26T00:20:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:18:00')
2025-11-26T02:21:16.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:21:16.311 [DEBUG] [Thread-10006] [transport.py] [_log()] starting thread (client mode): 0x70dbf5b0
2025-11-26T02:21:16.311 [DEBUG] [Thread-10006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:21:16.326 [DEBUG] [Thread-10006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:21:16.326 [INFO] [Thread-10006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] client lang: <none>
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] server lang: <none>
2025-11-26T02:21:16.334 [DEBUG] [Thread-10006] [transport.py] [_log()] kex follows: False
2025-11-26T02:21:16.335 [DEBUG] [Thread-10006] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:21:16.335 [DEBUG] [Thread-10006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:21:16.335 [DEBUG] [Thread-10006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:21:16.335 [DEBUG] [Thread-10006] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:21:16.335 [DEBUG] [Thread-10006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:21:16.335 [DEBUG] [Thread-10006] [transport.py] [_log()] Compression: none
2025-11-26T02:21:16.335 [DEBUG] [Thread-10006] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:21:16.392 [DEBUG] [Thread-10006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:21:16.392 [DEBUG] [Thread-10006] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:21:16.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:21:16.393 [DEBUG] [Thread-10006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:21:16.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:21:16.448 [DEBUG] [Thread-10006] [transport.py] [_log()] userauth is OK
2025-11-26T02:21:16.449 [DEBUG] [Thread-10006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:21:16.449 [DEBUG] [Thread-10006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:21:16.449 [DEBUG] [Thread-10006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:21:16.449 [DEBUG] [Thread-10006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:21:16.465 [INFO] [Thread-10006] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:21:16.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:21:16.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:21:17.320 [DEBUG] [Thread-10006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:21:17.320 [DEBUG] [Thread-10006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:21:17.369 [DEBUG] [Thread-10006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:21:17.369 [DEBUG] [Thread-10006] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:21:17.383 [DEBUG] [Thread-10006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:21:17.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:21:17.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')
2025-11-26T02:21:17.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:21:17.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:21:17.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:21:17.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:21:17.420 [DEBUG] [Thread-10006] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:21:20.584 [DEBUG] [Thread-10008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:24.922 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:27.160 [DEBUG] [Thread-10009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:35.317 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:42.040 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:42.041 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:42.214 [DEBUG] [Thread-10010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:45.753 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:21:47.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:21:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:21:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 21, 42), 31.19, 11.18, 0.0, 7.5, 20.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:21:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:21:42
2025-11-26T02:21:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:21:48.391 [DEBUG] [Thread-10011] [transport.py] [_log()] starting thread (client mode): 0x70d411b0
2025-11-26T02:21:48.391 [DEBUG] [Thread-10011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:21:48.411 [DEBUG] [Thread-10011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:21:48.411 [INFO] [Thread-10011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:21:48.414 [DEBUG] [Thread-10011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:21:48.414 [DEBUG] [Thread-10011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:21:48.414 [DEBUG] [Thread-10011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:21:48.414 [DEBUG] [Thread-10011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:21:48.414 [DEBUG] [Thread-10011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:21:48.414 [DEBUG] [Thread-10011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:21:48.414 [DEBUG] [Thread-10011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] client lang: <none>
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] server lang: <none>
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] kex follows: False
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] Compression: none
2025-11-26T02:21:48.415 [DEBUG] [Thread-10011] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:21:48.429 [DEBUG] [Thread-10011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:21:48.429 [DEBUG] [Thread-10011] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:21:48.430 [DEBUG] [Thread-10011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:21:48.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:21:48.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:21:48.430 [DEBUG] [Thread-10011] [transport.py] [_log()] userauth is OK
2025-11-26T02:21:48.430 [DEBUG] [Thread-10011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:21:48.430 [DEBUG] [Thread-10011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:21:48.430 [DEBUG] [Thread-10011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:21:48.430 [DEBUG] [Thread-10011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:21:48.445 [INFO] [Thread-10011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:21:48.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:21:49.076 [DEBUG] [Thread-10011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:21:49.076 [DEBUG] [Thread-10011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:21:49.076 [DEBUG] [Thread-10011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:21:49.117 [DEBUG] [Thread-10011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:21:49.117 [DEBUG] [Thread-10011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:21:49.119 [DEBUG] [Thread-10011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:21:49.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:21:49.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:21:49.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:21:49.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:21:49.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:21:49.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:21:49.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:21:49.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:21:49.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:21:49.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.014679 -999.00  +20.90   6.79     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.7 6.8 119.0 8.5 19.7 -26.2 19.5 -25.5 19.1 -24.1 19.4 -25.1
2025-11-26T02:21:49.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:21:49.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:21:49.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.014679
2025-11-26T02:21:49.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:21:49.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:21:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:21:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:21:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:21:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:21:42', tmtdew=31.19, humidity=11.18, cloud=0.0, wind=7.5, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:21:42', seeing=0.63, atlas_timestamp='2025-11-26T00:21:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:18:00')
2025-11-26T02:21:49.130 [DEBUG] [Thread-10011] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:21:49.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:21:49.217 [DEBUG] [Thread-10014] [transport.py] [_log()] starting thread (client mode): 0x70d7f4c0
2025-11-26T02:21:49.217 [DEBUG] [Thread-10014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:21:49.232 [DEBUG] [Thread-10014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:21:49.232 [INFO] [Thread-10014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] client lang: <none>
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] server lang: <none>
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] kex follows: False
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:21:49.239 [DEBUG] [Thread-10014] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:21:49.240 [DEBUG] [Thread-10014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:21:49.240 [DEBUG] [Thread-10014] [transport.py] [_log()] Compression: none
2025-11-26T02:21:49.240 [DEBUG] [Thread-10014] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:21:49.296 [DEBUG] [Thread-10014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:21:49.296 [DEBUG] [Thread-10014] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:21:49.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:21:49.297 [DEBUG] [Thread-10014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:21:49.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:21:49.353 [DEBUG] [Thread-10014] [transport.py] [_log()] userauth is OK
2025-11-26T02:21:49.353 [DEBUG] [Thread-10014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:21:49.353 [DEBUG] [Thread-10014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:21:49.353 [DEBUG] [Thread-10014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:21:49.353 [DEBUG] [Thread-10014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:21:49.367 [INFO] [Thread-10014] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:21:49.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:21:49.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:21:50.205 [DEBUG] [Thread-10014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:21:50.206 [DEBUG] [Thread-10014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:21:50.253 [DEBUG] [Thread-10014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:21:50.253 [DEBUG] [Thread-10014] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:21:50.261 [DEBUG] [Thread-10014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:21:50.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:21:50.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')
2025-11-26T02:21:50.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:21:50.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:21:50.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:21:50.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:21:50.293 [DEBUG] [Thread-10014] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:21:56.148 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:21:57.251 [DEBUG] [Thread-10016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:06.580 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:12.313 [DEBUG] [Thread-10017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:16.977 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:20.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:22:20.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:22:20.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:22:20.635 [DEBUG] [Thread-10018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 22, 14), 31.19, 11.18, 0.0, 7.76, 20.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:22:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:22:14
2025-11-26T02:22:21.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:22:21.235 [DEBUG] [Thread-10019] [transport.py] [_log()] starting thread (client mode): 0x70d7ee30
2025-11-26T02:22:21.235 [DEBUG] [Thread-10019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:22:21.257 [DEBUG] [Thread-10019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:22:21.257 [INFO] [Thread-10019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] client lang: <none>
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] server lang: <none>
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] kex follows: False
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:22:21.261 [DEBUG] [Thread-10019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:22:21.262 [DEBUG] [Thread-10019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:22:21.262 [DEBUG] [Thread-10019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:22:21.262 [DEBUG] [Thread-10019] [transport.py] [_log()] Compression: none
2025-11-26T02:22:21.262 [DEBUG] [Thread-10019] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:22:21.279 [DEBUG] [Thread-10019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:22:21.280 [DEBUG] [Thread-10019] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:22:21.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:22:21.281 [DEBUG] [Thread-10019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:22:21.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:22:21.283 [DEBUG] [Thread-10019] [transport.py] [_log()] userauth is OK
2025-11-26T02:22:21.283 [DEBUG] [Thread-10019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:22:21.283 [DEBUG] [Thread-10019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:22:21.283 [DEBUG] [Thread-10019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:22:21.284 [DEBUG] [Thread-10019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:22:21.306 [INFO] [Thread-10019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:22:21.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:22:21.933 [DEBUG] [Thread-10019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:22:21.933 [DEBUG] [Thread-10019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:22:21.933 [DEBUG] [Thread-10019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:22:21.974 [DEBUG] [Thread-10019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:22:21.974 [DEBUG] [Thread-10019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:22:21.978 [DEBUG] [Thread-10019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:22:21.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:22:21.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:22:21.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:22:21.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:22:22.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:22:22.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:22:22.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:22:22.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:22:22.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:22:22.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.015374 -999.00  +21.00   7.64     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.4 7.6 124.4 10.1 19.8 -26.1 19.5 -25.5 19.1 -24.3 19.4 -25.2
2025-11-26T02:22:22.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:22:22.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:22:22.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.015374
2025-11-26T02:22:22.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:22:22.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:22:22.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:22:22.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:22:22.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:22:22.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:22:14', tmtdew=31.19, humidity=11.18, cloud=0.0, wind=7.76, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:22:14', seeing=0.63, atlas_timestamp='2025-11-26T00:22:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04275000000000162, -0.044749999999998735, -0.003750000000000142, -0.027499999999999858, -0.0389999999999997, 0.006750000000000256, -0.028999999999999915, -0.042749999999999844, 0.0024999999999995026, -0.009000000000000341, -0.00975000000000037, -0.002000000000000668, 0.04899999999999949, 0.06474999999999831, -0.05400000000000027, -0.041999999999999815, -0.019750000000000156, -0.03250000000000064, -0.029500000000000526, -0.0037500000000019185, 0.06299999999999883, 0.053749999999999076, 0.026250000000000995, -0.040749999999999176, -0.009000000000000341, 0.03049999999999997, -0.03125, 0.0009999999999994458, 0.1509999999999998, 0.06500000000000128, 0.025000000000000355, -0.05699999999999861, 0.0012499999999988631], zp_timestamp='2025-11-26T00:18:00')
2025-11-26T02:22:22.005 [DEBUG] [Thread-10019] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:22:22.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:22:22.103 [DEBUG] [Thread-10022] [transport.py] [_log()] starting thread (client mode): 0x70d74880
2025-11-26T02:22:22.103 [DEBUG] [Thread-10022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:22:22.117 [DEBUG] [Thread-10022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:22:22.117 [INFO] [Thread-10022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] client lang: <none>
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] server lang: <none>
2025-11-26T02:22:22.125 [DEBUG] [Thread-10022] [transport.py] [_log()] kex follows: False
2025-11-26T02:22:22.126 [DEBUG] [Thread-10022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:22:22.126 [DEBUG] [Thread-10022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:22:22.126 [DEBUG] [Thread-10022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:22:22.126 [DEBUG] [Thread-10022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:22:22.126 [DEBUG] [Thread-10022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:22:22.126 [DEBUG] [Thread-10022] [transport.py] [_log()] Compression: none
2025-11-26T02:22:22.126 [DEBUG] [Thread-10022] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:22:22.186 [DEBUG] [Thread-10022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:22:22.187 [DEBUG] [Thread-10022] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:22:22.187 [DEBUG] [Thread-10022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:22:22.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:22:22.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:22:22.242 [DEBUG] [Thread-10022] [transport.py] [_log()] userauth is OK
2025-11-26T02:22:22.242 [DEBUG] [Thread-10022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:22:22.242 [DEBUG] [Thread-10022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:22:22.242 [DEBUG] [Thread-10022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:22:22.242 [DEBUG] [Thread-10022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:22:22.256 [INFO] [Thread-10022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:22:22.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:22:22.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:22:23.092 [DEBUG] [Thread-10022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:22:23.092 [DEBUG] [Thread-10022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:22:23.140 [DEBUG] [Thread-10022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:22:23.140 [DEBUG] [Thread-10022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:22:23.148 [DEBUG] [Thread-10022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:22:23.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:22:23.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:22: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') -> 00000000
2025-11-26T02:22:23.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:22:23.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:22:23.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:22:23.184 [DEBUG] [Thread-10022] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:22:27.341 [DEBUG] [Thread-10024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:27.376 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:37.808 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:42.244 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:42.246 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:42.387 [DEBUG] [Thread-10025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:48.225 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:53.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:22:53.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:22:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:22:53.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 22, 46), 31.13, 11.23, 0.0, 7.73, 20.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:22:53.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:22:46
2025-11-26T02:22:53.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:22:54.125 [DEBUG] [Thread-10026] [transport.py] [_log()] starting thread (client mode): 0x70d74730
2025-11-26T02:22:54.125 [DEBUG] [Thread-10026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:22:54.145 [DEBUG] [Thread-10026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:22:54.146 [INFO] [Thread-10026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:22:54.149 [DEBUG] [Thread-10026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:22:54.149 [DEBUG] [Thread-10026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:22:54.149 [DEBUG] [Thread-10026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:22:54.149 [DEBUG] [Thread-10026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:22:54.149 [DEBUG] [Thread-10026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:22:54.149 [DEBUG] [Thread-10026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:22:54.149 [DEBUG] [Thread-10026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:22:54.149 [DEBUG] [Thread-10026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:22:54.149 [DEBUG] [Thread-10026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] client lang: <none>
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] server lang: <none>
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] kex follows: False
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] Compression: none
2025-11-26T02:22:54.150 [DEBUG] [Thread-10026] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:22:54.168 [DEBUG] [Thread-10026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:22:54.169 [DEBUG] [Thread-10026] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:22:54.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:22:54.170 [DEBUG] [Thread-10026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:22:54.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:22:54.172 [DEBUG] [Thread-10026] [transport.py] [_log()] userauth is OK
2025-11-26T02:22:54.173 [DEBUG] [Thread-10026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:22:54.173 [DEBUG] [Thread-10026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:22:54.173 [DEBUG] [Thread-10026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:22:54.173 [DEBUG] [Thread-10026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:22:54.193 [INFO] [Thread-10026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:22:54.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:22:54.771 [DEBUG] [Thread-10026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:22:54.771 [DEBUG] [Thread-10026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:22:54.772 [DEBUG] [Thread-10026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:22:54.812 [DEBUG] [Thread-10026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:22:54.812 [DEBUG] [Thread-10026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:22:54.816 [DEBUG] [Thread-10026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:22:54.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:22:54.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:22:54.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:22:54.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:22:54.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:22:54.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:22:54.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:22:54.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:22:54.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:22:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.015721 -999.00  +21.00   7.19     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.2 7.2 116.6 9.8 19.8 -25.5 19.6 -25.6 19.1 -23.7 19.4 -25.0
2025-11-26T02:22:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:22:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:22:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.015721
2025-11-26T02:22:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:22:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:22:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:22:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:22:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:22:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:22:46', tmtdew=31.13, humidity=11.23, cloud=0.0, wind=7.73, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:22:46', seeing=0.64, atlas_timestamp='2025-11-26T00:22:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.040749999999999176, -0.008749999999999147, -0.015000000000000568, 0.00849999999999973, 0.03625000000000078, -0.0259999999999998, -0.05074999999999896, -0.033500000000000085, -0.04499999999999993, -0.017250000000000654, 0.006999999999999673, 0.054999999999999716, 0.0652500000000007, -0.06450000000000067, -0.06099999999999994, -0.012750000000000483, -0.014499999999999957, -0.022500000000000853, -0.02325000000000088, 0.023499999999998522, 0.0747499999999981, -0.006750000000000256, -0.02224999999999966, 0.01249999999999929, 0.010500000000000398, -0.051249999999999574, 0.026000000000001577, 0.0860000000000003, 0.05600000000000094, 0.018000000000000682, -0.02099999999999902, -0.04974999999999952], zp_timestamp='2025-11-26T00:21:00')
2025-11-26T02:22:54.844 [DEBUG] [Thread-10026] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:22:54.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:22:54.939 [DEBUG] [Thread-10029] [transport.py] [_log()] starting thread (client mode): 0x70d42e30
2025-11-26T02:22:54.939 [DEBUG] [Thread-10029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:22:54.954 [DEBUG] [Thread-10029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:22:54.954 [INFO] [Thread-10029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:22:54.962 [DEBUG] [Thread-10029] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:22:54.962 [DEBUG] [Thread-10029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:22:54.962 [DEBUG] [Thread-10029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:22:54.963 [DEBUG] [Thread-10029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:22:54.963 [DEBUG] [Thread-10029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:22:54.963 [DEBUG] [Thread-10029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:22:54.963 [DEBUG] [Thread-10029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:22:54.963 [DEBUG] [Thread-10029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:22:54.963 [DEBUG] [Thread-10029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:22:54.963 [DEBUG] [Thread-10029] [transport.py] [_log()] client lang: <none>
2025-11-26T02:22:54.963 [DEBUG] [Thread-10029] [transport.py] [_log()] server lang: <none>
2025-11-26T02:22:54.963 [DEBUG] [Thread-10029] [transport.py] [_log()] kex follows: False
2025-11-26T02:22:54.964 [DEBUG] [Thread-10029] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:22:54.964 [DEBUG] [Thread-10029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:22:54.964 [DEBUG] [Thread-10029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:22:54.964 [DEBUG] [Thread-10029] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:22:54.964 [DEBUG] [Thread-10029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:22:54.964 [DEBUG] [Thread-10029] [transport.py] [_log()] Compression: none
2025-11-26T02:22:54.964 [DEBUG] [Thread-10029] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:22:55.021 [DEBUG] [Thread-10029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:22:55.021 [DEBUG] [Thread-10029] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:22:55.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:22:55.023 [DEBUG] [Thread-10029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:22:55.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:22:55.081 [DEBUG] [Thread-10029] [transport.py] [_log()] userauth is OK
2025-11-26T02:22:55.081 [DEBUG] [Thread-10029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:22:55.082 [DEBUG] [Thread-10029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:22:55.082 [DEBUG] [Thread-10029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:22:55.082 [DEBUG] [Thread-10029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:22:55.106 [INFO] [Thread-10029] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:22:55.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:22:55.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:22:55.900 [DEBUG] [Thread-10029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:22:55.900 [DEBUG] [Thread-10029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:22:55.948 [DEBUG] [Thread-10029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:22:55.948 [DEBUG] [Thread-10029] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:22:55.957 [DEBUG] [Thread-10029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:22:55.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:22:55.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:22:55.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:22:55.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:22:55.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:22:55.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:22:55.992 [DEBUG] [Thread-10029] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:22:57.422 [DEBUG] [Thread-10031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:22:58.705 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:09.140 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:12.477 [DEBUG] [Thread-10032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:19.601 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:20.713 [DEBUG] [Thread-10033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:26.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:23:26.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:23:26.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:23:26.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 23, 18), 31.18, 11.18, 0.0, 7.76, 20.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:23:26.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:23:18
2025-11-26T02:23:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:23:26.937 [DEBUG] [Thread-10034] [transport.py] [_log()] starting thread (client mode): 0x7374eb90
2025-11-26T02:23:26.937 [DEBUG] [Thread-10034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:23:26.957 [DEBUG] [Thread-10034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:23:26.957 [INFO] [Thread-10034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] client lang: <none>
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] server lang: <none>
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] kex follows: False
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:23:26.960 [DEBUG] [Thread-10034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:23:26.961 [DEBUG] [Thread-10034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:23:26.961 [DEBUG] [Thread-10034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:23:26.961 [DEBUG] [Thread-10034] [transport.py] [_log()] Compression: none
2025-11-26T02:23:26.961 [DEBUG] [Thread-10034] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:23:26.984 [DEBUG] [Thread-10034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:23:26.984 [DEBUG] [Thread-10034] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:23:26.985 [DEBUG] [Thread-10034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:23:26.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:23:26.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:23:26.987 [DEBUG] [Thread-10034] [transport.py] [_log()] userauth is OK
2025-11-26T02:23:26.988 [DEBUG] [Thread-10034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:23:26.988 [DEBUG] [Thread-10034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:23:26.988 [DEBUG] [Thread-10034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:23:26.988 [DEBUG] [Thread-10034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:23:27.012 [INFO] [Thread-10034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:23:27.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:23:27.513 [DEBUG] [Thread-10036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:27.637 [DEBUG] [Thread-10034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:23:27.638 [DEBUG] [Thread-10034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:23:27.638 [DEBUG] [Thread-10034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:23:27.679 [DEBUG] [Thread-10034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:23:27.679 [DEBUG] [Thread-10034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:23:27.683 [DEBUG] [Thread-10034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:23:27.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:23:27.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:23:27.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:23:27.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:23:27.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:23:27.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:23:27.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:23:27.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:23:27.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:23:27.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.016068 -999.00  +21.10   7.92     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.0 7.9 110.9 10.2 19.8 -26.0 19.6 -25.5 19.2 -24.0 19.5 -25.2
2025-11-26T02:23:27.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:23:27.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:23:27.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.016068
2025-11-26T02:23:27.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:23:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:23:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:23:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:23:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:23:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:23:18', tmtdew=31.18, humidity=11.18, cloud=0.0, wind=7.76, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:23:18', seeing=0.68, atlas_timestamp='2025-11-26T00:23:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.040749999999999176, -0.008749999999999147, -0.015000000000000568, 0.00849999999999973, 0.03625000000000078, -0.0259999999999998, -0.05074999999999896, -0.033500000000000085, -0.04499999999999993, -0.017250000000000654, 0.006999999999999673, 0.054999999999999716, 0.0652500000000007, -0.06450000000000067, -0.06099999999999994, -0.012750000000000483, -0.014499999999999957, -0.022500000000000853, -0.02325000000000088, 0.023499999999998522, 0.0747499999999981, -0.006750000000000256, -0.02224999999999966, 0.01249999999999929, 0.010500000000000398, -0.051249999999999574, 0.026000000000001577, 0.0860000000000003, 0.05600000000000094, 0.018000000000000682, -0.02099999999999902, -0.04974999999999952], zp_timestamp='2025-11-26T00:21:00')
2025-11-26T02:23:27.709 [DEBUG] [Thread-10034] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:23:27.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:23:27.805 [DEBUG] [Thread-10038] [transport.py] [_log()] starting thread (client mode): 0x7374f040
2025-11-26T02:23:27.805 [DEBUG] [Thread-10038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:23:27.821 [DEBUG] [Thread-10038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:23:27.821 [INFO] [Thread-10038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:23:27.828 [DEBUG] [Thread-10038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] client lang: <none>
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] server lang: <none>
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] kex follows: False
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:23:27.829 [DEBUG] [Thread-10038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:23:27.830 [DEBUG] [Thread-10038] [transport.py] [_log()] Compression: none
2025-11-26T02:23:27.830 [DEBUG] [Thread-10038] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:23:27.889 [DEBUG] [Thread-10038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:23:27.890 [DEBUG] [Thread-10038] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:23:27.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:23:27.891 [DEBUG] [Thread-10038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:23:27.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:23:27.945 [DEBUG] [Thread-10038] [transport.py] [_log()] userauth is OK
2025-11-26T02:23:27.946 [DEBUG] [Thread-10038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:23:27.946 [DEBUG] [Thread-10038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:23:27.946 [DEBUG] [Thread-10038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:23:27.946 [DEBUG] [Thread-10038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:23:27.965 [INFO] [Thread-10038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:23:27.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:23:27.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:23:28.787 [DEBUG] [Thread-10038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:23:28.788 [DEBUG] [Thread-10038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:23:28.835 [DEBUG] [Thread-10038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:23:28.835 [DEBUG] [Thread-10038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:23:28.844 [DEBUG] [Thread-10038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:23:28.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:23:28.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:23:28.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:23:28.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:23:28.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:23:28.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:23:28.878 [DEBUG] [Thread-10038] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:23:30.022 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:40.436 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:42.447 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:42.448 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:42.548 [DEBUG] [Thread-10040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:50.832 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:57.609 [DEBUG] [Thread-10041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:23:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:23:58.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:23:58.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:23:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 23, 50), 31.17, 11.23, 0.0, 7.34, 20.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:23:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:23:50
2025-11-26T02:23:59.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:23:59.830 [DEBUG] [Thread-10042] [transport.py] [_log()] starting thread (client mode): 0x70dbf8e0
2025-11-26T02:23:59.830 [DEBUG] [Thread-10042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:23:59.852 [DEBUG] [Thread-10042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:23:59.852 [INFO] [Thread-10042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:23:59.855 [DEBUG] [Thread-10042] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:23:59.855 [DEBUG] [Thread-10042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:23:59.855 [DEBUG] [Thread-10042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:23:59.855 [DEBUG] [Thread-10042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] client lang: <none>
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] server lang: <none>
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] kex follows: False
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:23:59.856 [DEBUG] [Thread-10042] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:23:59.857 [DEBUG] [Thread-10042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:23:59.857 [DEBUG] [Thread-10042] [transport.py] [_log()] Compression: none
2025-11-26T02:23:59.857 [DEBUG] [Thread-10042] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:23:59.867 [DEBUG] [Thread-10042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:23:59.868 [DEBUG] [Thread-10042] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:23:59.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:23:59.869 [DEBUG] [Thread-10042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:23:59.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:23:59.872 [DEBUG] [Thread-10042] [transport.py] [_log()] userauth is OK
2025-11-26T02:23:59.872 [DEBUG] [Thread-10042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:23:59.872 [DEBUG] [Thread-10042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:23:59.872 [DEBUG] [Thread-10042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:23:59.873 [DEBUG] [Thread-10042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:23:59.898 [INFO] [Thread-10042] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:23:59.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:24:00.480 [DEBUG] [Thread-10042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:24:00.481 [DEBUG] [Thread-10042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:24:00.481 [DEBUG] [Thread-10042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:24:00.521 [DEBUG] [Thread-10042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:24:00.521 [DEBUG] [Thread-10042] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:24:00.525 [DEBUG] [Thread-10042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:24:00.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:24:00.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:24:00.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:24:00.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:24:00.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:24:00.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:24:00.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:24:00.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:24:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:24:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.016415 -999.00  +21.10   6.62     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.4 6.6 97.4 8.6 19.9 -26.3 19.6 -25.7 19.1 -24.2 19.5 -25.2
2025-11-26T02:24:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:24:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:24:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.016415
2025-11-26T02:24:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:24:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:24:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:24:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:24:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:24:00.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:23:50', tmtdew=31.17, humidity=11.23, cloud=0.0, wind=7.34, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:23:50', seeing=0.73, atlas_timestamp='2025-11-26T00:23:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.040749999999999176, -0.008749999999999147, -0.015000000000000568, 0.00849999999999973, 0.03625000000000078, -0.0259999999999998, -0.05074999999999896, -0.033500000000000085, -0.04499999999999993, -0.017250000000000654, 0.006999999999999673, 0.054999999999999716, 0.0652500000000007, -0.06450000000000067, -0.06099999999999994, -0.012750000000000483, -0.014499999999999957, -0.022500000000000853, -0.02325000000000088, 0.023499999999998522, 0.0747499999999981, -0.006750000000000256, -0.02224999999999966, 0.01249999999999929, 0.010500000000000398, -0.051249999999999574, 0.026000000000001577, 0.0860000000000003, 0.05600000000000094, 0.018000000000000682, -0.02099999999999902, -0.04974999999999952], zp_timestamp='2025-11-26T00:21:00')
2025-11-26T02:24:00.550 [DEBUG] [Thread-10042] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:24:00.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:24:00.646 [DEBUG] [Thread-10045] [transport.py] [_log()] starting thread (client mode): 0x70de7d00
2025-11-26T02:24:00.646 [DEBUG] [Thread-10045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:24:00.662 [DEBUG] [Thread-10045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:24:00.662 [INFO] [Thread-10045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:24:00.669 [DEBUG] [Thread-10045] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] client lang: <none>
2025-11-26T02:24:00.670 [DEBUG] [Thread-10045] [transport.py] [_log()] server lang: <none>
2025-11-26T02:24:00.671 [DEBUG] [Thread-10045] [transport.py] [_log()] kex follows: False
2025-11-26T02:24:00.671 [DEBUG] [Thread-10045] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:24:00.671 [DEBUG] [Thread-10045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:24:00.671 [DEBUG] [Thread-10045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:24:00.671 [DEBUG] [Thread-10045] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:24:00.671 [DEBUG] [Thread-10045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:24:00.671 [DEBUG] [Thread-10045] [transport.py] [_log()] Compression: none
2025-11-26T02:24:00.671 [DEBUG] [Thread-10045] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:24:00.730 [DEBUG] [Thread-10045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:24:00.731 [DEBUG] [Thread-10045] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:24:00.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:24:00.732 [DEBUG] [Thread-10045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:24:00.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:24:00.786 [DEBUG] [Thread-10045] [transport.py] [_log()] userauth is OK
2025-11-26T02:24:00.786 [DEBUG] [Thread-10045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:24:00.786 [DEBUG] [Thread-10045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:24:00.786 [DEBUG] [Thread-10045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:24:00.786 [DEBUG] [Thread-10045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:24:00.804 [INFO] [Thread-10045] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:24:00.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:24:00.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:24:01.266 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:01.641 [DEBUG] [Thread-10045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:24:01.642 [DEBUG] [Thread-10045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:24:01.690 [DEBUG] [Thread-10045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:24:01.690 [DEBUG] [Thread-10045] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:24:01.699 [DEBUG] [Thread-10045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:24:01.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:24:01.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:24:01.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:24:01.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:24:01.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:24:01.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:24:01.734 [DEBUG] [Thread-10045] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:24:11.662 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:12.649 [DEBUG] [Thread-10047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:20.792 [DEBUG] [Thread-10048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:22.059 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:27.690 [DEBUG] [Thread-10049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:24:31.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:24:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:24:32.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 24, 22), 31.18, 11.23, 0.0, 7.61, 20.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:24:32.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:24:22
2025-11-26T02:24:32.479 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:24:32.696 [DEBUG] [Thread-10050] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-26T02:24:32.696 [DEBUG] [Thread-10050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:24:32.714 [DEBUG] [Thread-10050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:24:32.715 [INFO] [Thread-10050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:24:32.716 [DEBUG] [Thread-10050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] client lang: <none>
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] server lang: <none>
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] kex follows: False
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:24:32.717 [DEBUG] [Thread-10050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:24:32.718 [DEBUG] [Thread-10050] [transport.py] [_log()] Compression: none
2025-11-26T02:24:32.718 [DEBUG] [Thread-10050] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:24:32.733 [DEBUG] [Thread-10050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:24:32.733 [DEBUG] [Thread-10050] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:24:32.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:24:32.734 [DEBUG] [Thread-10050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:24:32.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:24:32.737 [DEBUG] [Thread-10050] [transport.py] [_log()] userauth is OK
2025-11-26T02:24:32.737 [DEBUG] [Thread-10050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:24:32.737 [DEBUG] [Thread-10050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:24:32.737 [DEBUG] [Thread-10050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:24:32.737 [DEBUG] [Thread-10050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:24:32.761 [INFO] [Thread-10050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:24:32.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:24:33.399 [DEBUG] [Thread-10050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:24:33.400 [DEBUG] [Thread-10050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:24:33.400 [DEBUG] [Thread-10050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:24:33.441 [DEBUG] [Thread-10050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:24:33.441 [DEBUG] [Thread-10050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:24:33.444 [DEBUG] [Thread-10050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:24:33.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:24:33.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:24:33.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:24:33.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:24:33.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:24:33.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:24:33.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:24:33.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:24:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:24:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.016763 -999.00  +21.10   6.28     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 5.8 6.3 114.8 8.6 19.9 -26.3 19.6 -25.7 19.2 -24.0 19.6 -25.2
2025-11-26T02:24:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:24:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:24:33.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.016763
2025-11-26T02:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:24:33.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:24:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:24:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:24:22', tmtdew=31.18, humidity=11.23, cloud=0.0, wind=7.61, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:24:22', seeing=0.65, atlas_timestamp='2025-11-26T00:24:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.040749999999999176, -0.008749999999999147, -0.015000000000000568, 0.00849999999999973, 0.03625000000000078, -0.0259999999999998, -0.05074999999999896, -0.033500000000000085, -0.04499999999999993, -0.017250000000000654, 0.006999999999999673, 0.054999999999999716, 0.0652500000000007, -0.06450000000000067, -0.06099999999999994, -0.012750000000000483, -0.014499999999999957, -0.022500000000000853, -0.02325000000000088, 0.023499999999998522, 0.0747499999999981, -0.006750000000000256, -0.02224999999999966, 0.01249999999999929, 0.010500000000000398, -0.051249999999999574, 0.026000000000001577, 0.0860000000000003, 0.05600000000000094, 0.018000000000000682, -0.02099999999999902, -0.04974999999999952], zp_timestamp='2025-11-26T00:21:00')
2025-11-26T02:24:33.467 [DEBUG] [Thread-10050] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:24:33.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:24:42.649 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:42.651 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:42.731 [DEBUG] [Thread-10053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:42.948 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:53.381 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:24:57.782 [DEBUG] [Thread-10054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:03.775 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:12.819 [DEBUG] [Thread-10055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:14.175 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:20.866 [DEBUG] [Thread-10056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:24.571 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:27.855 [DEBUG] [Thread-10057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:35.003 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:42.851 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:42.852 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:42.887 [DEBUG] [Thread-10058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:45.450 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:55.856 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:25:57.927 [DEBUG] [Thread-10059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:06.291 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:12.958 [DEBUG] [Thread-10060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:16.706 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:20.943 [DEBUG] [Thread-10061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:27.124 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:27.998 [DEBUG] [Thread-10062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:37.538 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:43.033 [DEBUG] [Thread-10063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:43.053 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:43.054 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:45.837 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T02:26:47.949 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:58.067 [DEBUG] [Thread-10064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:26:58.369 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:08.786 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:13.104 [DEBUG] [Thread-10065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:27:15.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:27:15.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:27:16.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 27, 2), 31.02, 11.32, 0.0, 6.39, 20.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:27:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:27:02
2025-11-26T02:27:16.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:27:16.797 [DEBUG] [Thread-10066] [transport.py] [_log()] starting thread (client mode): 0x70d75120
2025-11-26T02:27:16.797 [DEBUG] [Thread-10066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:27:16.818 [DEBUG] [Thread-10066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:27:16.818 [INFO] [Thread-10066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:27:16.821 [DEBUG] [Thread-10066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:27:16.821 [DEBUG] [Thread-10066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:27:16.821 [DEBUG] [Thread-10066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] client lang: <none>
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] server lang: <none>
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] kex follows: False
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:27:16.822 [DEBUG] [Thread-10066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:27:16.823 [DEBUG] [Thread-10066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:27:16.823 [DEBUG] [Thread-10066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:27:16.823 [DEBUG] [Thread-10066] [transport.py] [_log()] Compression: none
2025-11-26T02:27:16.823 [DEBUG] [Thread-10066] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:27:16.841 [DEBUG] [Thread-10066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:27:16.842 [DEBUG] [Thread-10066] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:27:16.842 [DEBUG] [Thread-10066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:27:16.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:27:16.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:27:16.844 [DEBUG] [Thread-10066] [transport.py] [_log()] userauth is OK
2025-11-26T02:27:16.844 [DEBUG] [Thread-10066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:27:16.844 [DEBUG] [Thread-10066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:27:16.844 [DEBUG] [Thread-10066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:27:16.844 [DEBUG] [Thread-10066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:27:16.867 [INFO] [Thread-10066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:27:16.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:27:17.501 [DEBUG] [Thread-10066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:27:17.502 [DEBUG] [Thread-10066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:27:17.502 [DEBUG] [Thread-10066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:27:17.543 [DEBUG] [Thread-10066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:27:17.543 [DEBUG] [Thread-10066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:27:17.546 [DEBUG] [Thread-10066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:27:17.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:27:17.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:27:17.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:27:17.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:27:17.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:27:17.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:27:17.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:27:17.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:27:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:27:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.018499 -999.00  +21.10   7.19     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 7.8 7.2 122.4 8.3 20.0 -25.9 19.7 -25.8 19.3 -23.9 19.7 -25.3
2025-11-26T02:27:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:27:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:27:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.018499
2025-11-26T02:27:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:27:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:27:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:27:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:27:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:27:17.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:27:02', tmtdew=31.02, humidity=11.32, cloud=0.0, wind=6.39, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:27:02', seeing=0.81, atlas_timestamp='2025-11-26T00:26:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.0027500000000006963, -0.026500000000000412, -0.03549999999999898, 0.04025000000000034, -0.02400000000000091, -0.0467499999999994, -0.012000000000000455, -0.05150000000000077, 0.0012499999999988631, -0.02549999999999919, 0.06949999999999967, 0.04224999999999923, -0.06099999999999994, -0.0259999999999998, -0.019750000000000156, -0.037499999999999645, -0.031000000000000583, -0.03575000000000017, 0.043499999999998096, 0.08374999999999844, 0.021750000000000824, -0.02725000000000044, 0.010999999999999233, 0.024499999999999744, -0.017250000000000654, 0.02149999999999963, 0.11749999999999972, 0.10300000000000153, -0.007999999999999119, -0.0029999999999983373, -0.016250000000001208], zp_timestamp='2025-11-26T00:24:00')
2025-11-26T02:27:17.573 [DEBUG] [Thread-10066] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:27:17.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:27:17.668 [DEBUG] [Thread-10069] [transport.py] [_log()] starting thread (client mode): 0x70de7700
2025-11-26T02:27:17.668 [DEBUG] [Thread-10069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:27:17.682 [DEBUG] [Thread-10069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:27:17.682 [INFO] [Thread-10069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:27:17.690 [DEBUG] [Thread-10069] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] client lang: <none>
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] server lang: <none>
2025-11-26T02:27:17.691 [DEBUG] [Thread-10069] [transport.py] [_log()] kex follows: False
2025-11-26T02:27:17.692 [DEBUG] [Thread-10069] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:27:17.692 [DEBUG] [Thread-10069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:27:17.692 [DEBUG] [Thread-10069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:27:17.692 [DEBUG] [Thread-10069] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:27:17.692 [DEBUG] [Thread-10069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:27:17.692 [DEBUG] [Thread-10069] [transport.py] [_log()] Compression: none
2025-11-26T02:27:17.692 [DEBUG] [Thread-10069] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:27:17.746 [DEBUG] [Thread-10069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:27:17.747 [DEBUG] [Thread-10069] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:27:17.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:27:17.748 [DEBUG] [Thread-10069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:27:17.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:27:17.803 [DEBUG] [Thread-10069] [transport.py] [_log()] userauth is OK
2025-11-26T02:27:17.803 [DEBUG] [Thread-10069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:27:17.804 [DEBUG] [Thread-10069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:27:17.804 [DEBUG] [Thread-10069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:27:17.804 [DEBUG] [Thread-10069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:27:17.823 [INFO] [Thread-10069] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:27:17.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:27:17.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:27:18.656 [DEBUG] [Thread-10069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:27:18.656 [DEBUG] [Thread-10069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:27:18.703 [DEBUG] [Thread-10069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:27:18.703 [DEBUG] [Thread-10069] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:27:18.712 [DEBUG] [Thread-10069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:27:18.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:27:18.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:27:18.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:27:18.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:27:18.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:27:18.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:27:18.746 [DEBUG] [Thread-10069] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:27:19.180 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:21.020 [DEBUG] [Thread-10071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:28.135 [DEBUG] [Thread-10072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:29.606 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:40.012 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:43.192 [DEBUG] [Thread-10073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:43.263 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:43.264 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:27:48.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:27:49.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 27, 34), 30.93, 11.38, 0.0, 6.58, 20.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:27:49.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:27:34
2025-11-26T02:27:49.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:27:49.680 [DEBUG] [Thread-10074] [transport.py] [_log()] starting thread (client mode): 0x70da7460
2025-11-26T02:27:49.680 [DEBUG] [Thread-10074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:27:49.702 [DEBUG] [Thread-10074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:27:49.702 [INFO] [Thread-10074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:27:49.705 [DEBUG] [Thread-10074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] client lang: <none>
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] server lang: <none>
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] kex follows: False
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] Compression: none
2025-11-26T02:27:49.706 [DEBUG] [Thread-10074] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:27:49.726 [DEBUG] [Thread-10074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:27:49.726 [DEBUG] [Thread-10074] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:27:49.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:27:49.727 [DEBUG] [Thread-10074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:27:49.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:27:49.729 [DEBUG] [Thread-10074] [transport.py] [_log()] userauth is OK
2025-11-26T02:27:49.729 [DEBUG] [Thread-10074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:27:49.730 [DEBUG] [Thread-10074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:27:49.730 [DEBUG] [Thread-10074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:27:49.730 [DEBUG] [Thread-10074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:27:49.754 [INFO] [Thread-10074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:27:49.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:27:50.394 [DEBUG] [Thread-10074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:27:50.394 [DEBUG] [Thread-10074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:27:50.395 [DEBUG] [Thread-10074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:27:50.436 [DEBUG] [Thread-10074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:27:50.436 [DEBUG] [Thread-10074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:27:50.440 [DEBUG] [Thread-10074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:27:50.446 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:27:50.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:27:50.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:27:50.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:27:50.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:27:50.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:27:50.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:27:50.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:27:50.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:27:50.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:27:50.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.018846 -999.00  +21.20   6.43     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.5 6.4 122.0 8.3 20.0 -25.8 19.7 -25.8 19.3 -24.2 19.6 -25.4
2025-11-26T02:27:50.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:27:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:27:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.018846
2025-11-26T02:27:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:27:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:27:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:27:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:27:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:27:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:27:34', tmtdew=30.93, humidity=11.38, cloud=0.0, wind=6.58, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:27:34', seeing=0.83, atlas_timestamp='2025-11-26T00:27:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.0027500000000006963, -0.026500000000000412, -0.03549999999999898, 0.04025000000000034, -0.02400000000000091, -0.0467499999999994, -0.012000000000000455, -0.05150000000000077, 0.0012499999999988631, -0.02549999999999919, 0.06949999999999967, 0.04224999999999923, -0.06099999999999994, -0.0259999999999998, -0.019750000000000156, -0.037499999999999645, -0.031000000000000583, -0.03575000000000017, 0.043499999999998096, 0.08374999999999844, 0.021750000000000824, -0.02725000000000044, 0.010999999999999233, 0.024499999999999744, -0.017250000000000654, 0.02149999999999963, 0.11749999999999972, 0.10300000000000153, -0.007999999999999119, -0.0029999999999983373, -0.016250000000001208], zp_timestamp='2025-11-26T00:24:00')
2025-11-26T02:27:50.466 [DEBUG] [Thread-10074] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:27:50.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:27:50.561 [DEBUG] [Thread-10077] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-26T02:27:50.561 [DEBUG] [Thread-10077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:27:50.575 [DEBUG] [Thread-10077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:27:50.575 [INFO] [Thread-10077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:27:50.583 [DEBUG] [Thread-10077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:27:50.583 [DEBUG] [Thread-10077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:27:50.583 [DEBUG] [Thread-10077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:27:50.583 [DEBUG] [Thread-10077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:27:50.583 [DEBUG] [Thread-10077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:27:50.584 [DEBUG] [Thread-10077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:27:50.584 [DEBUG] [Thread-10077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:27:50.584 [DEBUG] [Thread-10077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:27:50.584 [DEBUG] [Thread-10077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:27:50.584 [DEBUG] [Thread-10077] [transport.py] [_log()] client lang: <none>
2025-11-26T02:27:50.584 [DEBUG] [Thread-10077] [transport.py] [_log()] server lang: <none>
2025-11-26T02:27:50.584 [DEBUG] [Thread-10077] [transport.py] [_log()] kex follows: False
2025-11-26T02:27:50.584 [DEBUG] [Thread-10077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:27:50.584 [DEBUG] [Thread-10077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:27:50.585 [DEBUG] [Thread-10077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:27:50.585 [DEBUG] [Thread-10077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:27:50.585 [DEBUG] [Thread-10077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:27:50.585 [DEBUG] [Thread-10077] [transport.py] [_log()] Compression: none
2025-11-26T02:27:50.585 [DEBUG] [Thread-10077] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:27:50.640 [DEBUG] [Thread-10077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:27:50.641 [DEBUG] [Thread-10077] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:27:50.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:27:50.642 [DEBUG] [Thread-10077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:27:50.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:27:50.700 [DEBUG] [Thread-10077] [transport.py] [_log()] userauth is OK
2025-11-26T02:27:50.701 [DEBUG] [Thread-10077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:27:50.701 [DEBUG] [Thread-10077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:27:50.701 [DEBUG] [Thread-10077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:27:50.701 [DEBUG] [Thread-10077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:27:50.719 [INFO] [Thread-10077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:27:50.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:27:50.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:27:51.557 [DEBUG] [Thread-10077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:27:51.557 [DEBUG] [Thread-10077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:27:51.605 [DEBUG] [Thread-10077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:27:51.605 [DEBUG] [Thread-10077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:27:51.614 [DEBUG] [Thread-10077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:27:51.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:27:51.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:27:51.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:27:51.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:27:51.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:27:51.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:27:51.651 [DEBUG] [Thread-10077] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:27:58.229 [DEBUG] [Thread-10079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:00.897 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:11.311 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:13.266 [DEBUG] [Thread-10080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:21.097 [DEBUG] [Thread-10081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:21.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:28:21.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:28:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:28:21.710 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 28, 6), 30.84, 11.45, 0.0, 6.12, 20.66, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:28:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:28:06
2025-11-26T02:28:22.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:28:22.610 [DEBUG] [Thread-10082] [transport.py] [_log()] starting thread (client mode): 0x70d6aec0
2025-11-26T02:28:22.610 [DEBUG] [Thread-10082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:28:22.630 [DEBUG] [Thread-10082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:28:22.630 [INFO] [Thread-10082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:28:22.633 [DEBUG] [Thread-10082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:28:22.633 [DEBUG] [Thread-10082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:28:22.633 [DEBUG] [Thread-10082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:28:22.633 [DEBUG] [Thread-10082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] client lang: <none>
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] server lang: <none>
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] kex follows: False
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] Compression: none
2025-11-26T02:28:22.634 [DEBUG] [Thread-10082] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:28:22.652 [DEBUG] [Thread-10082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:28:22.652 [DEBUG] [Thread-10082] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:28:22.653 [DEBUG] [Thread-10082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:28:22.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:28:22.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:28:22.655 [DEBUG] [Thread-10082] [transport.py] [_log()] userauth is OK
2025-11-26T02:28:22.655 [DEBUG] [Thread-10082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:28:22.655 [DEBUG] [Thread-10082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:28:22.655 [DEBUG] [Thread-10082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:28:22.655 [DEBUG] [Thread-10082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:28:22.680 [INFO] [Thread-10082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:28:22.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:28:23.320 [DEBUG] [Thread-10082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:28:23.320 [DEBUG] [Thread-10082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:28:23.320 [DEBUG] [Thread-10082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:28:23.361 [DEBUG] [Thread-10082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:28:23.361 [DEBUG] [Thread-10082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:28:23.364 [DEBUG] [Thread-10082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:28:23.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:28:23.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:28:23.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:28:23.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:28:23.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:28:23.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:28:23.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:28:23.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:28:23.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.019193 -999.00  +21.20   6.83     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.5 6.8 115.4 8.8 20.0 -26.5 19.8 -25.8 19.3 -24.4 19.6 -25.3
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.019193
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:28:06', tmtdew=30.84, humidity=11.45, cloud=0.0, wind=6.12, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:28:06', seeing=0.83, atlas_timestamp='2025-11-26T00:27:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.0027500000000006963, -0.026500000000000412, -0.03549999999999898, 0.04025000000000034, -0.02400000000000091, -0.0467499999999994, -0.012000000000000455, -0.05150000000000077, 0.0012499999999988631, -0.02549999999999919, 0.06949999999999967, 0.04224999999999923, -0.06099999999999994, -0.0259999999999998, -0.019750000000000156, -0.037499999999999645, -0.031000000000000583, -0.03575000000000017, 0.043499999999998096, 0.08374999999999844, 0.021750000000000824, -0.02725000000000044, 0.010999999999999233, 0.024499999999999744, -0.017250000000000654, 0.02149999999999963, 0.11749999999999972, 0.10300000000000153, -0.007999999999999119, -0.0029999999999983373, -0.016250000000001208], zp_timestamp='2025-11-26T00:24:00')
2025-11-26T02:28:23.387 [DEBUG] [Thread-10082] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:28:23.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:28:23.492 [DEBUG] [Thread-10085] [transport.py] [_log()] starting thread (client mode): 0x70dbe440
2025-11-26T02:28:23.492 [DEBUG] [Thread-10085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:28:23.511 [DEBUG] [Thread-10085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:28:23.511 [INFO] [Thread-10085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:28:23.523 [DEBUG] [Thread-10085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:28:23.523 [DEBUG] [Thread-10085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:28:23.523 [DEBUG] [Thread-10085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:28:23.523 [DEBUG] [Thread-10085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:28:23.523 [DEBUG] [Thread-10085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] client lang: <none>
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] server lang: <none>
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] kex follows: False
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:28:23.524 [DEBUG] [Thread-10085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:28:23.525 [DEBUG] [Thread-10085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:28:23.525 [DEBUG] [Thread-10085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:28:23.525 [DEBUG] [Thread-10085] [transport.py] [_log()] Compression: none
2025-11-26T02:28:23.525 [DEBUG] [Thread-10085] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:28:23.576 [DEBUG] [Thread-10085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:28:23.577 [DEBUG] [Thread-10085] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:28:23.577 [DEBUG] [Thread-10085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:28:23.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:28:23.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:28:23.632 [DEBUG] [Thread-10085] [transport.py] [_log()] userauth is OK
2025-11-26T02:28:23.633 [DEBUG] [Thread-10085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:28:23.633 [DEBUG] [Thread-10085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:28:23.633 [DEBUG] [Thread-10085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:28:23.633 [DEBUG] [Thread-10085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:28:23.656 [INFO] [Thread-10085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:28:23.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:28:23.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:28:24.468 [DEBUG] [Thread-10085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:28:24.469 [DEBUG] [Thread-10085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:28:24.517 [DEBUG] [Thread-10085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:28:24.517 [DEBUG] [Thread-10085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:28:24.526 [DEBUG] [Thread-10085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:28:24.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:28:24.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:28:24.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:28:24.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:28:24.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:28:24.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:28:24.560 [DEBUG] [Thread-10085] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:28:28.304 [DEBUG] [Thread-10087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:32.102 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:42.556 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:43.355 [DEBUG] [Thread-10088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:43.466 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:43.467 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:53.036 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:28:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:28:54.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:28:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:28:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 28, 38), 30.79, 11.5, 0.0, 6.49, 20.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:28:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:28:38
2025-11-26T02:28:55.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:28:55.490 [DEBUG] [Thread-10089] [transport.py] [_log()] starting thread (client mode): 0x70d40460
2025-11-26T02:28:55.491 [DEBUG] [Thread-10089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:28:55.510 [DEBUG] [Thread-10089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:28:55.510 [INFO] [Thread-10089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] client lang: <none>
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] server lang: <none>
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] kex follows: False
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] Compression: none
2025-11-26T02:28:55.514 [DEBUG] [Thread-10089] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:28:55.533 [DEBUG] [Thread-10089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:28:55.534 [DEBUG] [Thread-10089] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:28:55.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:28:55.534 [DEBUG] [Thread-10089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:28:55.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:28:55.536 [DEBUG] [Thread-10089] [transport.py] [_log()] userauth is OK
2025-11-26T02:28:55.536 [DEBUG] [Thread-10089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:28:55.537 [DEBUG] [Thread-10089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:28:55.537 [DEBUG] [Thread-10089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:28:55.537 [DEBUG] [Thread-10089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:28:55.572 [INFO] [Thread-10089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:28:55.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:28:56.228 [DEBUG] [Thread-10089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:28:56.228 [DEBUG] [Thread-10089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:28:56.228 [DEBUG] [Thread-10089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:28:56.269 [DEBUG] [Thread-10089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:28:56.269 [DEBUG] [Thread-10089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:28:56.272 [DEBUG] [Thread-10089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:28:56.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:28:56.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:28:56.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:28:56.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:28:56.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:28:56.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:28:56.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:28:56.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:28:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:28:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.019540 -999.00  +21.10   5.09     16   -5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.2 5.1 102.2 8.9 20.0 -25.6 19.7 -25.7 19.3 -24.5 19.6 -25.5
2025-11-26T02:28:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:28:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:28:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.019540
2025-11-26T02:28:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:28:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:28:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:28:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:28:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:28:56.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:28:38', tmtdew=30.79, humidity=11.5, cloud=0.0, wind=6.49, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:28:38', seeing=0.84, atlas_timestamp='2025-11-26T00:28:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.0027500000000006963, -0.026500000000000412, -0.03549999999999898, 0.04025000000000034, -0.02400000000000091, -0.0467499999999994, -0.012000000000000455, -0.05150000000000077, 0.0012499999999988631, -0.02549999999999919, 0.06949999999999967, 0.04224999999999923, -0.06099999999999994, -0.0259999999999998, -0.019750000000000156, -0.037499999999999645, -0.031000000000000583, -0.03575000000000017, 0.043499999999998096, 0.08374999999999844, 0.021750000000000824, -0.02725000000000044, 0.010999999999999233, 0.024499999999999744, -0.017250000000000654, 0.02149999999999963, 0.11749999999999972, 0.10300000000000153, -0.007999999999999119, -0.0029999999999983373, -0.016250000000001208], zp_timestamp='2025-11-26T00:27:00')
2025-11-26T02:28:56.300 [DEBUG] [Thread-10089] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:28:56.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:28:56.404 [DEBUG] [Thread-10092] [transport.py] [_log()] starting thread (client mode): 0x70d6b7f0
2025-11-26T02:28:56.404 [DEBUG] [Thread-10092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:28:56.419 [DEBUG] [Thread-10092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:28:56.419 [INFO] [Thread-10092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:28:56.427 [DEBUG] [Thread-10092] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:28:56.427 [DEBUG] [Thread-10092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:28:56.427 [DEBUG] [Thread-10092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:28:56.427 [DEBUG] [Thread-10092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:28:56.427 [DEBUG] [Thread-10092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] client lang: <none>
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] server lang: <none>
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] kex follows: False
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] Compression: none
2025-11-26T02:28:56.428 [DEBUG] [Thread-10092] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:28:56.485 [DEBUG] [Thread-10092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:28:56.486 [DEBUG] [Thread-10092] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:28:56.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:28:56.487 [DEBUG] [Thread-10092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:28:56.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:28:56.541 [DEBUG] [Thread-10092] [transport.py] [_log()] userauth is OK
2025-11-26T02:28:56.541 [DEBUG] [Thread-10092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:28:56.541 [DEBUG] [Thread-10092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:28:56.541 [DEBUG] [Thread-10092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:28:56.541 [DEBUG] [Thread-10092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:28:56.560 [INFO] [Thread-10092] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:28:56.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:28:56.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:28:57.395 [DEBUG] [Thread-10092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:28:57.395 [DEBUG] [Thread-10092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:28:57.444 [DEBUG] [Thread-10092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:28:57.444 [DEBUG] [Thread-10092] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:28:57.453 [DEBUG] [Thread-10092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:28:57.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:28:57.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:28:57.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:28:57.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:28:57.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:28:57.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:28:57.490 [DEBUG] [Thread-10092] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:28:58.395 [DEBUG] [Thread-10094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:03.522 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:13.457 [DEBUG] [Thread-10095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:13.954 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:21.170 [DEBUG] [Thread-10096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:24.388 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:27.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:29:27.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:29:27.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:29:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 29, 10), 30.84, 11.43, 0.0, 6.74, 20.58, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:29:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:29:10
2025-11-26T02:29:28.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:29:28.403 [DEBUG] [Thread-10097] [transport.py] [_log()] starting thread (client mode): 0x7374cb50
2025-11-26T02:29:28.403 [DEBUG] [Thread-10097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:29:28.422 [DEBUG] [Thread-10097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:29:28.422 [INFO] [Thread-10097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] client lang: <none>
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] server lang: <none>
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] kex follows: False
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:29:28.426 [DEBUG] [Thread-10097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:29:28.427 [DEBUG] [Thread-10097] [transport.py] [_log()] Compression: none
2025-11-26T02:29:28.427 [DEBUG] [Thread-10097] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:29:28.443 [DEBUG] [Thread-10097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:29:28.443 [DEBUG] [Thread-10097] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:29:28.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:29:28.444 [DEBUG] [Thread-10097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:29:28.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:29:28.447 [DEBUG] [Thread-10097] [transport.py] [_log()] userauth is OK
2025-11-26T02:29:28.447 [DEBUG] [Thread-10097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:29:28.447 [DEBUG] [Thread-10097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:29:28.447 [DEBUG] [Thread-10097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:29:28.447 [DEBUG] [Thread-10097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:29:28.467 [INFO] [Thread-10097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:29:28.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:29:28.485 [DEBUG] [Thread-10099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:29.115 [DEBUG] [Thread-10097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:29:29.116 [DEBUG] [Thread-10097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:29:29.116 [DEBUG] [Thread-10097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:29:29.157 [DEBUG] [Thread-10097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:29:29.157 [DEBUG] [Thread-10097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:29:29.160 [DEBUG] [Thread-10097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:29:29.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:29:29.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:29:29.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:29:29.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:29:29.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:29:29.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:29:29.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:29:29.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:29:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:29:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.020235 -999.00  +21.10   7.48     16   -5.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 7.8 7.5 114.0 11.3 20.0 -26.5 19.8 -25.8 19.4 -24.5 19.7 -25.4
2025-11-26T02:29:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:29:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:29:29.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.020235
2025-11-26T02:29:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:29:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:29:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:29:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:29:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:29:29.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:29:10', tmtdew=30.84, humidity=11.43, cloud=0.0, wind=6.74, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:29:12', seeing=0.78, atlas_timestamp='2025-11-26T00:29:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.0027500000000006963, -0.026500000000000412, -0.03549999999999898, 0.04025000000000034, -0.02400000000000091, -0.0467499999999994, -0.012000000000000455, -0.05150000000000077, 0.0012499999999988631, -0.02549999999999919, 0.06949999999999967, 0.04224999999999923, -0.06099999999999994, -0.0259999999999998, -0.019750000000000156, -0.037499999999999645, -0.031000000000000583, -0.03575000000000017, 0.043499999999998096, 0.08374999999999844, 0.021750000000000824, -0.02725000000000044, 0.010999999999999233, 0.024499999999999744, -0.017250000000000654, 0.02149999999999963, 0.11749999999999972, 0.10300000000000153, -0.007999999999999119, -0.0029999999999983373, -0.016250000000001208], zp_timestamp='2025-11-26T00:27:00')
2025-11-26T02:29:29.187 [DEBUG] [Thread-10097] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:29:29.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:29:29.283 [DEBUG] [Thread-10101] [transport.py] [_log()] starting thread (client mode): 0x70dbee60
2025-11-26T02:29:29.284 [DEBUG] [Thread-10101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:29:29.298 [DEBUG] [Thread-10101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:29:29.298 [INFO] [Thread-10101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:29:29.306 [DEBUG] [Thread-10101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:29:29.306 [DEBUG] [Thread-10101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:29:29.306 [DEBUG] [Thread-10101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:29:29.306 [DEBUG] [Thread-10101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:29:29.306 [DEBUG] [Thread-10101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:29:29.306 [DEBUG] [Thread-10101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:29:29.307 [DEBUG] [Thread-10101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:29:29.307 [DEBUG] [Thread-10101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:29:29.307 [DEBUG] [Thread-10101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:29:29.307 [DEBUG] [Thread-10101] [transport.py] [_log()] client lang: <none>
2025-11-26T02:29:29.307 [DEBUG] [Thread-10101] [transport.py] [_log()] server lang: <none>
2025-11-26T02:29:29.307 [DEBUG] [Thread-10101] [transport.py] [_log()] kex follows: False
2025-11-26T02:29:29.307 [DEBUG] [Thread-10101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:29:29.307 [DEBUG] [Thread-10101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:29:29.308 [DEBUG] [Thread-10101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:29:29.308 [DEBUG] [Thread-10101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:29:29.308 [DEBUG] [Thread-10101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:29:29.308 [DEBUG] [Thread-10101] [transport.py] [_log()] Compression: none
2025-11-26T02:29:29.308 [DEBUG] [Thread-10101] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:29:29.367 [DEBUG] [Thread-10101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:29:29.367 [DEBUG] [Thread-10101] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:29:29.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:29:29.368 [DEBUG] [Thread-10101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:29:29.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:29:29.422 [DEBUG] [Thread-10101] [transport.py] [_log()] userauth is OK
2025-11-26T02:29:29.423 [DEBUG] [Thread-10101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:29:29.423 [DEBUG] [Thread-10101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:29:29.423 [DEBUG] [Thread-10101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:29:29.423 [DEBUG] [Thread-10101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:29:29.442 [INFO] [Thread-10101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:29:29.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:29:29.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:29:30.303 [DEBUG] [Thread-10101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:29:30.303 [DEBUG] [Thread-10101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:29:30.351 [DEBUG] [Thread-10101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:29:30.351 [DEBUG] [Thread-10101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:29:30.360 [DEBUG] [Thread-10101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:29:30.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:29:30.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:29:30.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:29:30.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:29:30.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:29:30.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:29:30.397 [DEBUG] [Thread-10101] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:29:34.767 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:43.524 [DEBUG] [Thread-10103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:43.668 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:43.669 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:45.161 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:55.581 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:29:58.576 [DEBUG] [Thread-10104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:30:00.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:30:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:30:01.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 29, 44), 30.72, 11.55, 0.0, 8.65, 20.56, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:30:01.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:29:44
2025-11-26T02:30:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:30:01.428 [DEBUG] [Thread-10105] [transport.py] [_log()] starting thread (client mode): 0x70d6ac80
2025-11-26T02:30:01.429 [DEBUG] [Thread-10105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:30:01.440 [DEBUG] [Thread-10105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:30:01.440 [INFO] [Thread-10105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] client lang: <none>
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] server lang: <none>
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] kex follows: False
2025-11-26T02:30:01.442 [DEBUG] [Thread-10105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:30:01.443 [DEBUG] [Thread-10105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:30:01.443 [DEBUG] [Thread-10105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:30:01.443 [DEBUG] [Thread-10105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:30:01.443 [DEBUG] [Thread-10105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:30:01.443 [DEBUG] [Thread-10105] [transport.py] [_log()] Compression: none
2025-11-26T02:30:01.443 [DEBUG] [Thread-10105] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:30:01.454 [DEBUG] [Thread-10105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:30:01.454 [DEBUG] [Thread-10105] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:30:01.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:30:01.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:30:01.455 [DEBUG] [Thread-10105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:30:01.455 [DEBUG] [Thread-10105] [transport.py] [_log()] userauth is OK
2025-11-26T02:30:01.455 [DEBUG] [Thread-10105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:30:01.455 [DEBUG] [Thread-10105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:30:01.455 [DEBUG] [Thread-10105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:30:01.455 [DEBUG] [Thread-10105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:30:01.468 [INFO] [Thread-10105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:30:01.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:30:02.082 [DEBUG] [Thread-10105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:30:02.082 [DEBUG] [Thread-10105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:30:02.083 [DEBUG] [Thread-10105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:30:02.123 [DEBUG] [Thread-10105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:30:02.123 [DEBUG] [Thread-10105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:30:02.126 [DEBUG] [Thread-10105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:30:02.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:30:02.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:30:02.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:30:02.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:30:02.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:30:02.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:30:02.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:30:02.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:30:02.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:30:02.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.020582 -999.00  +21.10   7.19     16   -5.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 7.1 7.2 122.2 9.2 20.0 -26.4 19.8 -25.8 19.4 -24.5 19.7 -25.4
2025-11-26T02:30:02.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:30:02.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:30:02.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.020582
2025-11-26T02:30:02.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:30:02.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:30:02.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:30:02.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:30:02.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:30:02.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:29:44', tmtdew=30.72, humidity=11.55, cloud=0.0, wind=8.65, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:29:44', seeing=0.71, atlas_timestamp='2025-11-26T00:29:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.0027500000000006963, -0.026500000000000412, -0.03549999999999898, 0.04025000000000034, -0.02400000000000091, -0.0467499999999994, -0.012000000000000455, -0.05150000000000077, 0.0012499999999988631, -0.02549999999999919, 0.06949999999999967, 0.04224999999999923, -0.06099999999999994, -0.0259999999999998, -0.019750000000000156, -0.037499999999999645, -0.031000000000000583, -0.03575000000000017, 0.043499999999998096, 0.08374999999999844, 0.021750000000000824, -0.02725000000000044, 0.010999999999999233, 0.024499999999999744, -0.017250000000000654, 0.02149999999999963, 0.11749999999999972, 0.10300000000000153, -0.007999999999999119, -0.0029999999999983373, -0.016250000000001208], zp_timestamp='2025-11-26T00:27:00')
2025-11-26T02:30:02.151 [DEBUG] [Thread-10105] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:30:02.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:30:02.252 [DEBUG] [Thread-10108] [transport.py] [_log()] starting thread (client mode): 0x70dd3580
2025-11-26T02:30:02.252 [DEBUG] [Thread-10108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:30:02.267 [DEBUG] [Thread-10108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:30:02.267 [INFO] [Thread-10108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] client lang: <none>
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] server lang: <none>
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] kex follows: False
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] Compression: none
2025-11-26T02:30:02.274 [DEBUG] [Thread-10108] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:30:02.336 [DEBUG] [Thread-10108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:30:02.337 [DEBUG] [Thread-10108] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:30:02.337 [DEBUG] [Thread-10108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:30:02.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:30:02.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:30:02.395 [DEBUG] [Thread-10108] [transport.py] [_log()] userauth is OK
2025-11-26T02:30:02.395 [DEBUG] [Thread-10108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:30:02.395 [DEBUG] [Thread-10108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:30:02.395 [DEBUG] [Thread-10108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:30:02.395 [DEBUG] [Thread-10108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:30:02.414 [INFO] [Thread-10108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:30:02.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:30:02.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:30:03.263 [DEBUG] [Thread-10108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:30:03.263 [DEBUG] [Thread-10108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:30:03.311 [DEBUG] [Thread-10108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:30:03.311 [DEBUG] [Thread-10108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:30:03.320 [DEBUG] [Thread-10108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:30:03.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:30:03.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:30:03.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:30:03.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:30:03.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:30:03.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:30:03.356 [DEBUG] [Thread-10108] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:30:06.012 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:13.611 [DEBUG] [Thread-10110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:16.415 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:21.250 [DEBUG] [Thread-10111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:26.829 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:28.665 [DEBUG] [Thread-10112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:33.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:30:33.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:30:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:30:34.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 30, 16), 30.7, 11.56, 0.0, 8.21, 20.56, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:30:34.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:30:16
2025-11-26T02:30:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:30:34.286 [DEBUG] [Thread-10113] [transport.py] [_log()] starting thread (client mode): 0x70d57f10
2025-11-26T02:30:34.286 [DEBUG] [Thread-10113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:30:34.306 [DEBUG] [Thread-10113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:30:34.306 [INFO] [Thread-10113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:30:34.309 [DEBUG] [Thread-10113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:30:34.309 [DEBUG] [Thread-10113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:30:34.309 [DEBUG] [Thread-10113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:30:34.309 [DEBUG] [Thread-10113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:30:34.309 [DEBUG] [Thread-10113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:30:34.309 [DEBUG] [Thread-10113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:30:34.309 [DEBUG] [Thread-10113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] client lang: <none>
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] server lang: <none>
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] kex follows: False
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] Compression: none
2025-11-26T02:30:34.310 [DEBUG] [Thread-10113] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:30:34.328 [DEBUG] [Thread-10113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:30:34.329 [DEBUG] [Thread-10113] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:30:34.330 [DEBUG] [Thread-10113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:30:34.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:30:34.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:30:34.332 [DEBUG] [Thread-10113] [transport.py] [_log()] userauth is OK
2025-11-26T02:30:34.332 [DEBUG] [Thread-10113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:30:34.332 [DEBUG] [Thread-10113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:30:34.333 [DEBUG] [Thread-10113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:30:34.333 [DEBUG] [Thread-10113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:30:34.357 [INFO] [Thread-10113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:30:34.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:30:35.002 [DEBUG] [Thread-10113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:30:35.002 [DEBUG] [Thread-10113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:30:35.002 [DEBUG] [Thread-10113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:30:35.043 [DEBUG] [Thread-10113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:30:35.043 [DEBUG] [Thread-10113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:30:35.046 [DEBUG] [Thread-10113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:30:35.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:30:35.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:30:35.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:30:35.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:30:35.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:30:35.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:30:35.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:30:35.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:30:35.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:30:35.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.020929 -999.00  +21.10   5.08     16   -5.10 1 1 1 1 1     0    0 26.64 15.42 ZNESW 5.7 5.1 104.5 8.7 20.0 -26.1 19.8 -25.9 19.4 -24.6 19.7 -25.4
2025-11-26T02:30:35.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:30:35.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:30:35.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.020929
2025-11-26T02:30:35.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:30:35.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:30:35.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:30:35.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:30:35.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:30:35.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:30:16', tmtdew=30.7, humidity=11.56, cloud=0.0, wind=8.21, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:30:16', seeing=0.82, atlas_timestamp='2025-11-26T00:30:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.0027500000000006963, -0.026500000000000412, -0.03549999999999898, 0.04025000000000034, -0.02400000000000091, -0.0467499999999994, -0.012000000000000455, -0.05150000000000077, 0.0012499999999988631, -0.02549999999999919, 0.06949999999999967, 0.04224999999999923, -0.06099999999999994, -0.0259999999999998, -0.019750000000000156, -0.037499999999999645, -0.031000000000000583, -0.03575000000000017, 0.043499999999998096, 0.08374999999999844, 0.021750000000000824, -0.02725000000000044, 0.010999999999999233, 0.024499999999999744, -0.017250000000000654, 0.02149999999999963, 0.11749999999999972, 0.10300000000000153, -0.007999999999999119, -0.0029999999999983373, -0.016250000000001208], zp_timestamp='2025-11-26T00:27:00')
2025-11-26T02:30:35.073 [DEBUG] [Thread-10113] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:30:35.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:30:35.168 [DEBUG] [Thread-10116] [transport.py] [_log()] starting thread (client mode): 0x70dbe8c0
2025-11-26T02:30:35.168 [DEBUG] [Thread-10116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:30:35.182 [DEBUG] [Thread-10116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:30:35.183 [INFO] [Thread-10116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:30:35.190 [DEBUG] [Thread-10116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:30:35.190 [DEBUG] [Thread-10116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:30:35.190 [DEBUG] [Thread-10116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:30:35.190 [DEBUG] [Thread-10116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] client lang: <none>
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] server lang: <none>
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] kex follows: False
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] Compression: none
2025-11-26T02:30:35.191 [DEBUG] [Thread-10116] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:30:35.248 [DEBUG] [Thread-10116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:30:35.248 [DEBUG] [Thread-10116] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:30:35.249 [DEBUG] [Thread-10116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:30:35.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:30:35.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:30:35.303 [DEBUG] [Thread-10116] [transport.py] [_log()] userauth is OK
2025-11-26T02:30:35.304 [DEBUG] [Thread-10116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:30:35.304 [DEBUG] [Thread-10116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:30:35.304 [DEBUG] [Thread-10116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:30:35.304 [DEBUG] [Thread-10116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:30:35.329 [INFO] [Thread-10116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:30:35.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:30:35.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:30:36.146 [DEBUG] [Thread-10116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:30:36.146 [DEBUG] [Thread-10116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:30:36.195 [DEBUG] [Thread-10116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:30:36.195 [DEBUG] [Thread-10116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:30:36.204 [DEBUG] [Thread-10116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:30:36.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:30:36.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:30:36.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:30:36.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:30:36.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:30:36.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:30:36.242 [DEBUG] [Thread-10116] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:30:37.251 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:43.697 [DEBUG] [Thread-10118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:43.872 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:43.873 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:47.636 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:58.038 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:30:58.751 [DEBUG] [Thread-10119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:06.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:31:06.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:31:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:31:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 30, 48), 30.64, 11.56, 0.0, 8.36, 20.49, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:31:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:30:48
2025-11-26T02:31:07.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:31:07.224 [DEBUG] [Thread-10120] [transport.py] [_log()] starting thread (client mode): 0x70dd0dc0
2025-11-26T02:31:07.224 [DEBUG] [Thread-10120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:31:07.243 [DEBUG] [Thread-10120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:31:07.244 [INFO] [Thread-10120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:31:07.246 [DEBUG] [Thread-10120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:31:07.246 [DEBUG] [Thread-10120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:31:07.246 [DEBUG] [Thread-10120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:31:07.246 [DEBUG] [Thread-10120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:31:07.246 [DEBUG] [Thread-10120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:31:07.246 [DEBUG] [Thread-10120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:31:07.246 [DEBUG] [Thread-10120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:31:07.246 [DEBUG] [Thread-10120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] client lang: <none>
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] server lang: <none>
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] kex follows: False
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] Compression: none
2025-11-26T02:31:07.247 [DEBUG] [Thread-10120] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:31:07.264 [DEBUG] [Thread-10120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:31:07.264 [DEBUG] [Thread-10120] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:31:07.265 [DEBUG] [Thread-10120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:31:07.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:31:07.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:31:07.265 [DEBUG] [Thread-10120] [transport.py] [_log()] userauth is OK
2025-11-26T02:31:07.265 [DEBUG] [Thread-10120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:31:07.265 [DEBUG] [Thread-10120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:31:07.265 [DEBUG] [Thread-10120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:31:07.266 [DEBUG] [Thread-10120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:31:07.281 [INFO] [Thread-10120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:31:07.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:31:07.931 [DEBUG] [Thread-10120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:31:07.931 [DEBUG] [Thread-10120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:31:07.931 [DEBUG] [Thread-10120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:31:07.972 [DEBUG] [Thread-10120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:31:07.972 [DEBUG] [Thread-10120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:31:07.974 [DEBUG] [Thread-10120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:31:07.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:31:07.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:31:07.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:31:07.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:31:07.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:31:07.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:31:07.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:31:07.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:31:07.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:31:07.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.021276 -999.00  +21.10   7.16     16   -5.10 1 1 1 1 1     0    0 26.56 15.38 ZNESW 5.8 7.2 100.2 9.2 20.0 -26.6 19.8 -25.9 19.4 -24.5 19.7 -25.4
2025-11-26T02:31:07.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:31:07.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:31:07.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.021276
2025-11-26T02:31:07.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:31:07.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:31:07.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:31:07.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:31:07.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:31:07.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:30:48', tmtdew=30.64, humidity=11.56, cloud=0.0, wind=8.36, temperature=20.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:30:48', seeing=0.75, atlas_timestamp='2025-11-26T00:30:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.0027500000000006963, -0.026500000000000412, -0.03549999999999898, 0.04025000000000034, -0.02400000000000091, -0.0467499999999994, -0.012000000000000455, -0.05150000000000077, 0.0012499999999988631, -0.02549999999999919, 0.06949999999999967, 0.04224999999999923, -0.06099999999999994, -0.0259999999999998, -0.019750000000000156, -0.037499999999999645, -0.031000000000000583, -0.03575000000000017, 0.043499999999998096, 0.08374999999999844, 0.021750000000000824, -0.02725000000000044, 0.010999999999999233, 0.024499999999999744, -0.017250000000000654, 0.02149999999999963, 0.11749999999999972, 0.10300000000000153, -0.007999999999999119, -0.0029999999999983373, -0.016250000000001208], zp_timestamp='2025-11-26T00:27:00')
2025-11-26T02:31:07.994 [DEBUG] [Thread-10120] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:31:08.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:31:08.082 [DEBUG] [Thread-10123] [transport.py] [_log()] starting thread (client mode): 0x70d68f40
2025-11-26T02:31:08.082 [DEBUG] [Thread-10123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:31:08.095 [DEBUG] [Thread-10123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:31:08.096 [INFO] [Thread-10123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] client lang: <none>
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] server lang: <none>
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] kex follows: False
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] Compression: none
2025-11-26T02:31:08.103 [DEBUG] [Thread-10123] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:31:08.158 [DEBUG] [Thread-10123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:31:08.158 [DEBUG] [Thread-10123] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:31:08.158 [DEBUG] [Thread-10123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:31:08.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:31:08.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:31:08.217 [DEBUG] [Thread-10123] [transport.py] [_log()] userauth is OK
2025-11-26T02:31:08.217 [DEBUG] [Thread-10123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:31:08.217 [DEBUG] [Thread-10123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:31:08.217 [DEBUG] [Thread-10123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:31:08.217 [DEBUG] [Thread-10123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:31:08.233 [INFO] [Thread-10123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:31:08.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:31:08.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:31:08.434 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:08.993 [DEBUG] [Thread-10123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:31:08.993 [DEBUG] [Thread-10123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:31:09.041 [DEBUG] [Thread-10123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:31:09.041 [DEBUG] [Thread-10123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:31:09.049 [DEBUG] [Thread-10123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:31:09.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:31:09.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:31:09.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:31:09.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:31:09.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:31:09.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:31:09.087 [DEBUG] [Thread-10123] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:31:13.785 [DEBUG] [Thread-10125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:18.832 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:21.302 [DEBUG] [Thread-10126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:28.839 [DEBUG] [Thread-10127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:29.248 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:39.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:31:39.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:31:39.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:31:39.660 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:39.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 31, 20), 30.57, 11.63, 0.0, 8.29, 20.5, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:31:39.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:31:20
2025-11-26T02:31:39.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:31:40.028 [DEBUG] [Thread-10128] [transport.py] [_log()] starting thread (client mode): 0x70d555a0
2025-11-26T02:31:40.028 [DEBUG] [Thread-10128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:31:40.050 [DEBUG] [Thread-10128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:31:40.050 [INFO] [Thread-10128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:31:40.053 [DEBUG] [Thread-10128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:31:40.053 [DEBUG] [Thread-10128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:31:40.053 [DEBUG] [Thread-10128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] client lang: <none>
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] server lang: <none>
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] kex follows: False
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] Compression: none
2025-11-26T02:31:40.054 [DEBUG] [Thread-10128] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:31:40.063 [DEBUG] [Thread-10128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:31:40.064 [DEBUG] [Thread-10128] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:31:40.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:31:40.065 [DEBUG] [Thread-10128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:31:40.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:31:40.067 [DEBUG] [Thread-10128] [transport.py] [_log()] userauth is OK
2025-11-26T02:31:40.067 [DEBUG] [Thread-10128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:31:40.067 [DEBUG] [Thread-10128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:31:40.067 [DEBUG] [Thread-10128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:31:40.067 [DEBUG] [Thread-10128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:31:40.089 [INFO] [Thread-10128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:31:40.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:31:40.719 [DEBUG] [Thread-10128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:31:40.719 [DEBUG] [Thread-10128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:31:40.719 [DEBUG] [Thread-10128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:31:40.760 [DEBUG] [Thread-10128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:31:40.760 [DEBUG] [Thread-10128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:31:40.763 [DEBUG] [Thread-10128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:31:40.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:31:40.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:31:40.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:31:40.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:31:40.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:31:40.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:31:40.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:31:40.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:31:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:31:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.021624 -999.00  +21.10   6.02     16   -5.00 1 1 1 1 1     0    0 26.27 14.05 ZNESW 6.7 6.0 113.0 7.7 20.0 -26.3 19.8 -26.0 19.4 -24.3 19.7 -25.5
2025-11-26T02:31:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:31:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:31:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.021624
2025-11-26T02:31:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:31:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:31:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:31:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:31:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:31:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:31:20', tmtdew=30.57, humidity=11.63, cloud=0.0, wind=8.29, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:31:20', seeing=0.75, atlas_timestamp='2025-11-26T00:31:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.0027500000000006963, -0.026500000000000412, -0.03549999999999898, 0.04025000000000034, -0.02400000000000091, -0.0467499999999994, -0.012000000000000455, -0.05150000000000077, 0.0012499999999988631, -0.02549999999999919, 0.06949999999999967, 0.04224999999999923, -0.06099999999999994, -0.0259999999999998, -0.019750000000000156, -0.037499999999999645, -0.031000000000000583, -0.03575000000000017, 0.043499999999998096, 0.08374999999999844, 0.021750000000000824, -0.02725000000000044, 0.010999999999999233, 0.024499999999999744, -0.017250000000000654, 0.02149999999999963, 0.11749999999999972, 0.10300000000000153, -0.007999999999999119, -0.0029999999999983373, -0.016250000000001208], zp_timestamp='2025-11-26T00:27:00')
2025-11-26T02:31:40.787 [DEBUG] [Thread-10128] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:31:40.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:31:40.871 [DEBUG] [Thread-10131] [transport.py] [_log()] starting thread (client mode): 0x70d55090
2025-11-26T02:31:40.871 [DEBUG] [Thread-10131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:31:40.885 [DEBUG] [Thread-10131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:31:40.885 [INFO] [Thread-10131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:31:40.893 [DEBUG] [Thread-10131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:31:40.893 [DEBUG] [Thread-10131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:31:40.893 [DEBUG] [Thread-10131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:31:40.893 [DEBUG] [Thread-10131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] client lang: <none>
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] server lang: <none>
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] kex follows: False
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:31:40.894 [DEBUG] [Thread-10131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:31:40.895 [DEBUG] [Thread-10131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:31:40.895 [DEBUG] [Thread-10131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:31:40.895 [DEBUG] [Thread-10131] [transport.py] [_log()] Compression: none
2025-11-26T02:31:40.895 [DEBUG] [Thread-10131] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:31:40.951 [DEBUG] [Thread-10131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:31:40.951 [DEBUG] [Thread-10131] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:31:40.951 [DEBUG] [Thread-10131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:31:40.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:31:40.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:31:41.008 [DEBUG] [Thread-10131] [transport.py] [_log()] userauth is OK
2025-11-26T02:31:41.009 [DEBUG] [Thread-10131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:31:41.009 [DEBUG] [Thread-10131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:31:41.009 [DEBUG] [Thread-10131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:31:41.009 [DEBUG] [Thread-10131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:31:41.028 [INFO] [Thread-10131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:31:41.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:31:41.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:31:41.870 [DEBUG] [Thread-10131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:31:41.870 [DEBUG] [Thread-10131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:31:41.917 [DEBUG] [Thread-10131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:31:41.917 [DEBUG] [Thread-10131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:31:41.925 [DEBUG] [Thread-10131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:31:41.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:31:41.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:31:41.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:31:41.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:31:41.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:31:41.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:31:41.957 [DEBUG] [Thread-10131] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:31:43.872 [DEBUG] [Thread-10133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:44.075 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:44.076 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:50.077 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:31:58.918 [DEBUG] [Thread-10134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:00.475 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:10.872 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:11.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:32:11.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:32:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:32:12.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 31, 52), 30.53, 11.66, 0.0, 6.86, 20.5, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:32:12.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:31:52
2025-11-26T02:32:12.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:32:12.939 [DEBUG] [Thread-10135] [transport.py] [_log()] starting thread (client mode): 0x70dd34f0
2025-11-26T02:32:12.939 [DEBUG] [Thread-10135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:32:12.961 [DEBUG] [Thread-10135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:32:12.961 [INFO] [Thread-10135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] client lang: <none>
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] server lang: <none>
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] kex follows: False
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:32:12.964 [DEBUG] [Thread-10135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:32:12.965 [DEBUG] [Thread-10135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:32:12.965 [DEBUG] [Thread-10135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:32:12.965 [DEBUG] [Thread-10135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:32:12.965 [DEBUG] [Thread-10135] [transport.py] [_log()] Compression: none
2025-11-26T02:32:12.965 [DEBUG] [Thread-10135] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:32:12.973 [DEBUG] [Thread-10135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:32:12.974 [DEBUG] [Thread-10135] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:32:12.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:32:12.975 [DEBUG] [Thread-10135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:32:12.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:32:12.977 [DEBUG] [Thread-10135] [transport.py] [_log()] userauth is OK
2025-11-26T02:32:12.977 [DEBUG] [Thread-10135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:32:12.977 [DEBUG] [Thread-10135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:32:12.977 [DEBUG] [Thread-10135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:32:12.977 [DEBUG] [Thread-10135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:32:12.996 [INFO] [Thread-10135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:32:12.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:32:13.598 [DEBUG] [Thread-10135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:32:13.598 [DEBUG] [Thread-10135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:32:13.599 [DEBUG] [Thread-10135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:32:13.639 [DEBUG] [Thread-10135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:32:13.639 [DEBUG] [Thread-10135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:32:13.642 [DEBUG] [Thread-10135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:32:13.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:32:13.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:32:13.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:32:13.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:32:13.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:32:13.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:32:13.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:32:13.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:32:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:32:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.021971 -999.00  +21.10   5.93     16   -5.10 1 1 1 1 1     0    0 26.31 14.63 ZNESW 5.2 5.9 71.4 8.1 20.0 -26.4 19.8 -26.0 19.4 -24.4 19.7 -25.5
2025-11-26T02:32:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:32:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:32:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.021971
2025-11-26T02:32:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:32:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:32:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:32:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:32:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:32:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:31:52', tmtdew=30.53, humidity=11.66, cloud=0.0, wind=6.86, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:31:52', seeing=0.79, atlas_timestamp='2025-11-26T00:31:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:29:00')
2025-11-26T02:32:13.668 [DEBUG] [Thread-10135] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:32:13.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:32:13.766 [DEBUG] [Thread-10138] [transport.py] [_log()] starting thread (client mode): 0x7374d390
2025-11-26T02:32:13.766 [DEBUG] [Thread-10138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:32:13.784 [DEBUG] [Thread-10138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:32:13.785 [INFO] [Thread-10138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:32:13.795 [DEBUG] [Thread-10138] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:32:13.795 [DEBUG] [Thread-10138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] client lang: <none>
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] server lang: <none>
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] kex follows: False
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:32:13.796 [DEBUG] [Thread-10138] [transport.py] [_log()] Compression: none
2025-11-26T02:32:13.797 [DEBUG] [Thread-10138] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:32:13.862 [DEBUG] [Thread-10138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:32:13.862 [DEBUG] [Thread-10138] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:32:13.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:32:13.863 [DEBUG] [Thread-10138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:32:13.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:32:13.921 [DEBUG] [Thread-10138] [transport.py] [_log()] userauth is OK
2025-11-26T02:32:13.921 [DEBUG] [Thread-10138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:32:13.921 [DEBUG] [Thread-10138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:32:13.921 [DEBUG] [Thread-10138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:32:13.921 [DEBUG] [Thread-10138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:32:13.940 [INFO] [Thread-10138] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:32:13.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:32:13.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:32:13.955 [DEBUG] [Thread-10140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:14.722 [DEBUG] [Thread-10138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:32:14.723 [DEBUG] [Thread-10138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:32:14.771 [DEBUG] [Thread-10138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:32:14.771 [DEBUG] [Thread-10138] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:32:14.781 [DEBUG] [Thread-10138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:32:14.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:32:14.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:32:14.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:32:14.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:32:14.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:32:14.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:32:14.818 [DEBUG] [Thread-10138] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:32:21.316 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:21.354 [DEBUG] [Thread-10141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:29.007 [DEBUG] [Thread-10142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:31.738 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:42.138 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:44.050 [DEBUG] [Thread-10143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:44.277 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:44.279 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:44.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:32:44.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:32:44.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:32:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 32, 24), 30.55, 11.65, 0.0, 6.71, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:32:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:32:24
2025-11-26T02:32:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:32:45.751 [DEBUG] [Thread-10144] [transport.py] [_log()] starting thread (client mode): 0x70d55420
2025-11-26T02:32:45.751 [DEBUG] [Thread-10144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:32:45.770 [DEBUG] [Thread-10144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:32:45.770 [INFO] [Thread-10144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:32:45.771 [DEBUG] [Thread-10144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:32:45.771 [DEBUG] [Thread-10144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:32:45.771 [DEBUG] [Thread-10144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:32:45.771 [DEBUG] [Thread-10144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:32:45.771 [DEBUG] [Thread-10144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:32:45.771 [DEBUG] [Thread-10144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] client lang: <none>
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] server lang: <none>
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] kex follows: False
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] Compression: none
2025-11-26T02:32:45.772 [DEBUG] [Thread-10144] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:32:45.784 [DEBUG] [Thread-10144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:32:45.785 [DEBUG] [Thread-10144] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:32:45.785 [DEBUG] [Thread-10144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:32:45.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:32:45.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:32:45.787 [DEBUG] [Thread-10144] [transport.py] [_log()] userauth is OK
2025-11-26T02:32:45.787 [DEBUG] [Thread-10144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:32:45.787 [DEBUG] [Thread-10144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:32:45.787 [DEBUG] [Thread-10144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:32:45.787 [DEBUG] [Thread-10144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:32:45.805 [INFO] [Thread-10144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:32:45.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:32:46.443 [DEBUG] [Thread-10144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:32:46.444 [DEBUG] [Thread-10144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:32:46.444 [DEBUG] [Thread-10144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:32:46.485 [DEBUG] [Thread-10144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:32:46.485 [DEBUG] [Thread-10144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:32:46.488 [DEBUG] [Thread-10144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:32:46.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:32:46.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:32:46.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:32:46.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:32:46.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:32:46.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:32:46.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:32:46.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:32:46.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:32:46.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.022665 -999.00  +21.10   8.01     16   -5.00 1 1 1 1 1     0    0 26.81 15.46 ZNESW 6.3 8.0 118.6 9.2 20.0 -26.3 19.8 -26.0 19.4 -24.4 19.7 -25.5
2025-11-26T02:32:46.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:32:46.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:32:46.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.022665
2025-11-26T02:32:46.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:32:46.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:32:46.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:32:46.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:32:46.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:32:46.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:32:24', tmtdew=30.55, humidity=11.65, cloud=0.0, wind=6.71, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:32:24', seeing=0.82, atlas_timestamp='2025-11-26T00:32:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:29:00')
2025-11-26T02:32:46.515 [DEBUG] [Thread-10144] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:32:46.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:32:46.610 [DEBUG] [Thread-10147] [transport.py] [_log()] starting thread (client mode): 0x70d56c80
2025-11-26T02:32:46.610 [DEBUG] [Thread-10147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:32:46.626 [DEBUG] [Thread-10147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:32:46.626 [INFO] [Thread-10147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:32:46.634 [DEBUG] [Thread-10147] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:32:46.634 [DEBUG] [Thread-10147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:32:46.634 [DEBUG] [Thread-10147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:32:46.634 [DEBUG] [Thread-10147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:32:46.635 [DEBUG] [Thread-10147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:32:46.635 [DEBUG] [Thread-10147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:32:46.635 [DEBUG] [Thread-10147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:32:46.635 [DEBUG] [Thread-10147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:32:46.635 [DEBUG] [Thread-10147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:32:46.635 [DEBUG] [Thread-10147] [transport.py] [_log()] client lang: <none>
2025-11-26T02:32:46.635 [DEBUG] [Thread-10147] [transport.py] [_log()] server lang: <none>
2025-11-26T02:32:46.635 [DEBUG] [Thread-10147] [transport.py] [_log()] kex follows: False
2025-11-26T02:32:46.635 [DEBUG] [Thread-10147] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:32:46.636 [DEBUG] [Thread-10147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:32:46.636 [DEBUG] [Thread-10147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:32:46.636 [DEBUG] [Thread-10147] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:32:46.636 [DEBUG] [Thread-10147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:32:46.636 [DEBUG] [Thread-10147] [transport.py] [_log()] Compression: none
2025-11-26T02:32:46.636 [DEBUG] [Thread-10147] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:32:46.693 [DEBUG] [Thread-10147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:32:46.694 [DEBUG] [Thread-10147] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:32:46.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:32:46.695 [DEBUG] [Thread-10147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:32:46.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:32:46.749 [DEBUG] [Thread-10147] [transport.py] [_log()] userauth is OK
2025-11-26T02:32:46.750 [DEBUG] [Thread-10147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:32:46.750 [DEBUG] [Thread-10147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:32:46.750 [DEBUG] [Thread-10147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:32:46.750 [DEBUG] [Thread-10147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:32:46.769 [INFO] [Thread-10147] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:32:46.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:32:46.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:32:47.620 [DEBUG] [Thread-10147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:32:47.620 [DEBUG] [Thread-10147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:32:47.668 [DEBUG] [Thread-10147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:32:47.668 [DEBUG] [Thread-10147] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:32:47.677 [DEBUG] [Thread-10147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:32:47.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:32:47.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:32:47.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:32:47.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:32:47.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:32:47.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:32:47.714 [DEBUG] [Thread-10147] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:32:52.574 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:32:59.085 [DEBUG] [Thread-10149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:03.006 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:13.450 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:14.135 [DEBUG] [Thread-10150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:17.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:33:17.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:33:17.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:33:18.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 32, 56), 30.54, 11.71, 0.0, 8.63, 20.56, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:33:18.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:32:56
2025-11-26T02:33:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:33:18.647 [DEBUG] [Thread-10151] [transport.py] [_log()] starting thread (client mode): 0x70dd3d60
2025-11-26T02:33:18.648 [DEBUG] [Thread-10151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:33:18.669 [DEBUG] [Thread-10151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:33:18.669 [INFO] [Thread-10151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:33:18.672 [DEBUG] [Thread-10151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:33:18.672 [DEBUG] [Thread-10151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:33:18.672 [DEBUG] [Thread-10151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:33:18.672 [DEBUG] [Thread-10151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:33:18.672 [DEBUG] [Thread-10151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:33:18.672 [DEBUG] [Thread-10151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:33:18.672 [DEBUG] [Thread-10151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:33:18.672 [DEBUG] [Thread-10151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] client lang: <none>
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] server lang: <none>
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] kex follows: False
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] Compression: none
2025-11-26T02:33:18.673 [DEBUG] [Thread-10151] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:33:18.684 [DEBUG] [Thread-10151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:33:18.684 [DEBUG] [Thread-10151] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:33:18.685 [DEBUG] [Thread-10151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:33:18.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:33:18.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:33:18.687 [DEBUG] [Thread-10151] [transport.py] [_log()] userauth is OK
2025-11-26T02:33:18.687 [DEBUG] [Thread-10151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:33:18.688 [DEBUG] [Thread-10151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:33:18.688 [DEBUG] [Thread-10151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:33:18.688 [DEBUG] [Thread-10151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:33:18.712 [INFO] [Thread-10151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:33:18.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:33:19.312 [DEBUG] [Thread-10151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:33:19.312 [DEBUG] [Thread-10151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:33:19.313 [DEBUG] [Thread-10151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:33:19.354 [DEBUG] [Thread-10151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:33:19.354 [DEBUG] [Thread-10151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:33:19.358 [DEBUG] [Thread-10151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:33:19.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:33:19.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:33:19.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:33:19.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:33:19.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:33:19.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:33:19.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:33:19.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:33:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:33:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.023013 -999.00  +21.10   8.03     16   -5.10 1 1 1 1 1     0    0 26.37 15.35 ZNESW 6.3 8.0 129.2 10.2 20.0 -26.4 19.8 -26.0 19.4 -24.3 19.8 -25.5
2025-11-26T02:33:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:33:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:33:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.023013
2025-11-26T02:33:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:33:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:33:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:33:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:33:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:33:19.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:32:56', tmtdew=30.54, humidity=11.71, cloud=0.0, wind=8.63, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:32:56', seeing=0.73, atlas_timestamp='2025-11-26T00:33:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:29:00')
2025-11-26T02:33:19.384 [DEBUG] [Thread-10151] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:33:19.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:33:19.480 [DEBUG] [Thread-10154] [transport.py] [_log()] starting thread (client mode): 0x70dd35b0
2025-11-26T02:33:19.480 [DEBUG] [Thread-10154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:33:19.494 [DEBUG] [Thread-10154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:33:19.495 [INFO] [Thread-10154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:33:19.502 [DEBUG] [Thread-10154] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:33:19.502 [DEBUG] [Thread-10154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:33:19.502 [DEBUG] [Thread-10154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:33:19.502 [DEBUG] [Thread-10154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:33:19.502 [DEBUG] [Thread-10154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] client lang: <none>
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] server lang: <none>
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] kex follows: False
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] Compression: none
2025-11-26T02:33:19.503 [DEBUG] [Thread-10154] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:33:19.562 [DEBUG] [Thread-10154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:33:19.563 [DEBUG] [Thread-10154] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:33:19.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:33:19.564 [DEBUG] [Thread-10154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:33:19.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:33:19.619 [DEBUG] [Thread-10154] [transport.py] [_log()] userauth is OK
2025-11-26T02:33:19.619 [DEBUG] [Thread-10154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:33:19.619 [DEBUG] [Thread-10154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:33:19.619 [DEBUG] [Thread-10154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:33:19.620 [DEBUG] [Thread-10154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:33:19.638 [INFO] [Thread-10154] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:33:19.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:33:19.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:33:20.456 [DEBUG] [Thread-10154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:33:20.456 [DEBUG] [Thread-10154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:33:20.504 [DEBUG] [Thread-10154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:33:20.504 [DEBUG] [Thread-10154] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:33:20.513 [DEBUG] [Thread-10154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:33:20.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:33: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')
2025-11-26T02:33:20.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:33:20.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:33:20.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:33:20.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:33:20.549 [DEBUG] [Thread-10154] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:33:21.408 [DEBUG] [Thread-10156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:23.885 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:29.169 [DEBUG] [Thread-10157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:34.337 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:44.207 [DEBUG] [Thread-10158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:44.480 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:44.482 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:44.787 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:50.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:33:50.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:33:50.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:33:51.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 33, 28), 30.55, 11.7, 0.0, 8.81, 20.53, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:33:51.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:33:28
2025-11-26T02:33:51.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:33:51.499 [DEBUG] [Thread-10159] [transport.py] [_log()] starting thread (client mode): 0x70d55a50
2025-11-26T02:33:51.499 [DEBUG] [Thread-10159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:33:51.516 [DEBUG] [Thread-10159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:33:51.516 [INFO] [Thread-10159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] client lang: <none>
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] server lang: <none>
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] kex follows: False
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] Compression: none
2025-11-26T02:33:51.520 [DEBUG] [Thread-10159] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:33:51.536 [DEBUG] [Thread-10159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:33:51.536 [DEBUG] [Thread-10159] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:33:51.536 [DEBUG] [Thread-10159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:33:51.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:33:51.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:33:51.537 [DEBUG] [Thread-10159] [transport.py] [_log()] userauth is OK
2025-11-26T02:33:51.537 [DEBUG] [Thread-10159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:33:51.537 [DEBUG] [Thread-10159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:33:51.537 [DEBUG] [Thread-10159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:33:51.537 [DEBUG] [Thread-10159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:33:51.546 [INFO] [Thread-10159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:33:51.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:33:52.148 [DEBUG] [Thread-10159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:33:52.148 [DEBUG] [Thread-10159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:33:52.149 [DEBUG] [Thread-10159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:33:52.188 [DEBUG] [Thread-10159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:33:52.189 [DEBUG] [Thread-10159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:33:52.194 [DEBUG] [Thread-10159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:33:52.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:33:52.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:33:52.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:33:52.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:33:52.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:33:52.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:33:52.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:33:52.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:33:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:33:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.023360 -999.00  +21.10   8.25     16   -5.10 1 1 1 1 1     0    0 26.78 17.65 ZNESW 6.5 8.2 114.6 9.9 20.1 -25.8 19.9 -25.9 19.5 -24.6 19.8 -25.7
2025-11-26T02:33:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:33:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:33:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.023360
2025-11-26T02:33:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:33:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:33:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:33:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:33:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:33:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:33:28', tmtdew=30.55, humidity=11.7, cloud=0.0, wind=8.81, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:33:28', seeing=0.72, atlas_timestamp='2025-11-26T00:33:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:29:00')
2025-11-26T02:33:52.222 [DEBUG] [Thread-10159] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:33:52.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:33:52.317 [DEBUG] [Thread-10162] [transport.py] [_log()] starting thread (client mode): 0x70d57490
2025-11-26T02:33:52.317 [DEBUG] [Thread-10162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:33:52.331 [DEBUG] [Thread-10162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:33:52.331 [INFO] [Thread-10162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:33:52.339 [DEBUG] [Thread-10162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:33:52.339 [DEBUG] [Thread-10162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:33:52.339 [DEBUG] [Thread-10162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] client lang: <none>
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] server lang: <none>
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] kex follows: False
2025-11-26T02:33:52.340 [DEBUG] [Thread-10162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:33:52.341 [DEBUG] [Thread-10162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:33:52.341 [DEBUG] [Thread-10162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:33:52.341 [DEBUG] [Thread-10162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:33:52.341 [DEBUG] [Thread-10162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:33:52.341 [DEBUG] [Thread-10162] [transport.py] [_log()] Compression: none
2025-11-26T02:33:52.341 [DEBUG] [Thread-10162] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:33:52.399 [DEBUG] [Thread-10162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:33:52.399 [DEBUG] [Thread-10162] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:33:52.400 [DEBUG] [Thread-10162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:33:52.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:33:52.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:33:52.454 [DEBUG] [Thread-10162] [transport.py] [_log()] userauth is OK
2025-11-26T02:33:52.455 [DEBUG] [Thread-10162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:33:52.455 [DEBUG] [Thread-10162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:33:52.455 [DEBUG] [Thread-10162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:33:52.455 [DEBUG] [Thread-10162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:33:52.475 [INFO] [Thread-10162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:33:52.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:33:52.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:33:53.283 [DEBUG] [Thread-10162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:33:53.284 [DEBUG] [Thread-10162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:33:53.332 [DEBUG] [Thread-10162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:33:53.332 [DEBUG] [Thread-10162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:33:53.341 [DEBUG] [Thread-10162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:33:53.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:33:53.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:33:53.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:33:53.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:33:53.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:33:53.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:33:53.378 [DEBUG] [Thread-10162] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:33:55.216 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:33:59.246 [DEBUG] [Thread-10164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:05.629 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:14.295 [DEBUG] [Thread-10165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:16.038 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:21.483 [DEBUG] [Thread-10166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:23.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:34:23.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:34:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:34:24.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 33, 28), 30.55, 11.7, 0.0, 8.81, 20.53, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:34:24.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:33:28
2025-11-26T02:34:24.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:34:24.349 [DEBUG] [Thread-10167] [transport.py] [_log()] starting thread (client mode): 0x70d57a30
2025-11-26T02:34:24.349 [DEBUG] [Thread-10167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:34:24.371 [DEBUG] [Thread-10167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:34:24.371 [INFO] [Thread-10167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:34:24.374 [DEBUG] [Thread-10167] [transport.py] [_log()] client lang: <none>
2025-11-26T02:34:24.375 [DEBUG] [Thread-10167] [transport.py] [_log()] server lang: <none>
2025-11-26T02:34:24.375 [DEBUG] [Thread-10167] [transport.py] [_log()] kex follows: False
2025-11-26T02:34:24.375 [DEBUG] [Thread-10167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:34:24.375 [DEBUG] [Thread-10167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:34:24.375 [DEBUG] [Thread-10167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:34:24.375 [DEBUG] [Thread-10167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:34:24.375 [DEBUG] [Thread-10167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:34:24.375 [DEBUG] [Thread-10167] [transport.py] [_log()] Compression: none
2025-11-26T02:34:24.375 [DEBUG] [Thread-10167] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:34:24.393 [DEBUG] [Thread-10167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:34:24.393 [DEBUG] [Thread-10167] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:34:24.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:34:24.394 [DEBUG] [Thread-10167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:34:24.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:34:24.397 [DEBUG] [Thread-10167] [transport.py] [_log()] userauth is OK
2025-11-26T02:34:24.397 [DEBUG] [Thread-10167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:34:24.397 [DEBUG] [Thread-10167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:34:24.397 [DEBUG] [Thread-10167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:34:24.397 [DEBUG] [Thread-10167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:34:24.420 [INFO] [Thread-10167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:34:24.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:34:25.183 [DEBUG] [Thread-10167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:34:25.183 [DEBUG] [Thread-10167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:34:25.184 [DEBUG] [Thread-10167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:34:25.225 [DEBUG] [Thread-10167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:34:25.225 [DEBUG] [Thread-10167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:34:25.228 [DEBUG] [Thread-10167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:34:25.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:34:25.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:34:25.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:34:25.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:34:25.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:34:25.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:34:25.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:34:25.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:34:25.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:34:25.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.023360 -999.00  +21.10   8.25     16   -5.10 1 1 1 1 1     0    0 26.78 17.65 ZNESW 6.5 8.2 114.6 9.9 20.1 -25.8 19.9 -25.9 19.5 -24.6 19.8 -25.7
2025-11-26T02:34:25.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:34:25.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:34:25.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.023360
2025-11-26T02:34:25.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:34:25.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:34:25.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:34:25.257 [DEBUG] [Thread-10167] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:34:25.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:34:25.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:34:25.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:33:28', tmtdew=30.55, humidity=11.7, cloud=0.0, wind=8.81, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:34:00', seeing=0.77, atlas_timestamp='2025-11-26T00:33:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:29:00')
2025-11-26T02:34:25.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:34:25.353 [DEBUG] [Thread-10170] [transport.py] [_log()] starting thread (client mode): 0x70d55f60
2025-11-26T02:34:25.353 [DEBUG] [Thread-10170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:34:25.367 [DEBUG] [Thread-10170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:34:25.367 [INFO] [Thread-10170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:34:25.375 [DEBUG] [Thread-10170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:34:25.375 [DEBUG] [Thread-10170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:34:25.375 [DEBUG] [Thread-10170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:34:25.375 [DEBUG] [Thread-10170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:34:25.376 [DEBUG] [Thread-10170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:34:25.376 [DEBUG] [Thread-10170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:34:25.376 [DEBUG] [Thread-10170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:34:25.376 [DEBUG] [Thread-10170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:34:25.376 [DEBUG] [Thread-10170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:34:25.376 [DEBUG] [Thread-10170] [transport.py] [_log()] client lang: <none>
2025-11-26T02:34:25.376 [DEBUG] [Thread-10170] [transport.py] [_log()] server lang: <none>
2025-11-26T02:34:25.376 [DEBUG] [Thread-10170] [transport.py] [_log()] kex follows: False
2025-11-26T02:34:25.376 [DEBUG] [Thread-10170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:34:25.377 [DEBUG] [Thread-10170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:34:25.377 [DEBUG] [Thread-10170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:34:25.377 [DEBUG] [Thread-10170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:34:25.377 [DEBUG] [Thread-10170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:34:25.377 [DEBUG] [Thread-10170] [transport.py] [_log()] Compression: none
2025-11-26T02:34:25.377 [DEBUG] [Thread-10170] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:34:25.435 [DEBUG] [Thread-10170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:34:25.436 [DEBUG] [Thread-10170] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:34:25.436 [DEBUG] [Thread-10170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:34:25.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:34:25.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:34:25.491 [DEBUG] [Thread-10170] [transport.py] [_log()] userauth is OK
2025-11-26T02:34:25.491 [DEBUG] [Thread-10170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:34:25.491 [DEBUG] [Thread-10170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:34:25.492 [DEBUG] [Thread-10170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:34:25.492 [DEBUG] [Thread-10170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:34:25.511 [INFO] [Thread-10170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:34:25.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:34:25.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:34:26.355 [DEBUG] [Thread-10170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:34:26.355 [DEBUG] [Thread-10170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:34:26.403 [DEBUG] [Thread-10170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:34:26.403 [DEBUG] [Thread-10170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:34:26.412 [DEBUG] [Thread-10170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:34:26.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:34:26.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:34:26.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:34:26.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:34:26.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:34:26.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:34:26.448 [DEBUG] [Thread-10170] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:34:26.576 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:29.329 [DEBUG] [Thread-10172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:37.000 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:44.380 [DEBUG] [Thread-10173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:44.685 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:44.686 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:47.398 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:56.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:34:56.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:34:56.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:34:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 34, 32), 30.52, 11.71, 0.0, 8.89, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:34:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:34:32
2025-11-26T02:34:57.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:34:57.393 [DEBUG] [Thread-10174] [transport.py] [_log()] starting thread (client mode): 0x70dd04c0
2025-11-26T02:34:57.393 [DEBUG] [Thread-10174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:34:57.412 [DEBUG] [Thread-10174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:34:57.412 [INFO] [Thread-10174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] client lang: <none>
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] server lang: <none>
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] kex follows: False
2025-11-26T02:34:57.414 [DEBUG] [Thread-10174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:34:57.415 [DEBUG] [Thread-10174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:34:57.415 [DEBUG] [Thread-10174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:34:57.415 [DEBUG] [Thread-10174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:34:57.415 [DEBUG] [Thread-10174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:34:57.415 [DEBUG] [Thread-10174] [transport.py] [_log()] Compression: none
2025-11-26T02:34:57.415 [DEBUG] [Thread-10174] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:34:57.428 [DEBUG] [Thread-10174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:34:57.429 [DEBUG] [Thread-10174] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:34:57.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:34:57.430 [DEBUG] [Thread-10174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:34:57.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:34:57.433 [DEBUG] [Thread-10174] [transport.py] [_log()] userauth is OK
2025-11-26T02:34:57.433 [DEBUG] [Thread-10174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:34:57.433 [DEBUG] [Thread-10174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:34:57.433 [DEBUG] [Thread-10174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:34:57.434 [DEBUG] [Thread-10174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:34:57.451 [INFO] [Thread-10174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:34:57.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:34:58.069 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:34:58.075 [DEBUG] [Thread-10174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:34:58.075 [DEBUG] [Thread-10174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:34:58.075 [DEBUG] [Thread-10174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:34:58.116 [DEBUG] [Thread-10174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:34:58.116 [DEBUG] [Thread-10174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:34:58.119 [DEBUG] [Thread-10174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:34:58.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:34:58.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:34:58.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:34:58.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:34:58.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:34:58.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:34:58.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:34:58.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:34:58.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:34:58.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.023707 -999.00  +21.10   7.78     16   -5.10 1 1 1 1 1     0    0 26.36 19.84 ZNESW 6.2 7.8 121.2 10.7 20.1 -26.6 19.9 -25.9 19.5 -24.4 19.8 -25.7
2025-11-26T02:34:58.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:34:58.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:34:58.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.023707
2025-11-26T02:34:58.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:34:58.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:34:58.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:34:58.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:34:58.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:34:58.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:34:32', tmtdew=30.52, humidity=11.71, cloud=0.0, wind=8.89, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:34:32', seeing=0.77, atlas_timestamp='2025-11-26T00:34:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:33:00')
2025-11-26T02:34:58.141 [DEBUG] [Thread-10174] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:34:58.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:34:58.228 [DEBUG] [Thread-10177] [transport.py] [_log()] starting thread (client mode): 0x70d38d00
2025-11-26T02:34:58.228 [DEBUG] [Thread-10177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:34:58.243 [DEBUG] [Thread-10177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:34:58.243 [INFO] [Thread-10177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:34:58.251 [DEBUG] [Thread-10177] [transport.py] [_log()] client lang: <none>
2025-11-26T02:34:58.252 [DEBUG] [Thread-10177] [transport.py] [_log()] server lang: <none>
2025-11-26T02:34:58.252 [DEBUG] [Thread-10177] [transport.py] [_log()] kex follows: False
2025-11-26T02:34:58.252 [DEBUG] [Thread-10177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:34:58.252 [DEBUG] [Thread-10177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:34:58.252 [DEBUG] [Thread-10177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:34:58.252 [DEBUG] [Thread-10177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:34:58.252 [DEBUG] [Thread-10177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:34:58.252 [DEBUG] [Thread-10177] [transport.py] [_log()] Compression: none
2025-11-26T02:34:58.252 [DEBUG] [Thread-10177] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:34:58.307 [DEBUG] [Thread-10177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:34:58.308 [DEBUG] [Thread-10177] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:34:58.308 [DEBUG] [Thread-10177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:34:58.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:34:58.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:34:58.363 [DEBUG] [Thread-10177] [transport.py] [_log()] userauth is OK
2025-11-26T02:34:58.364 [DEBUG] [Thread-10177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:34:58.364 [DEBUG] [Thread-10177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:34:58.364 [DEBUG] [Thread-10177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:34:58.364 [DEBUG] [Thread-10177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:34:58.382 [INFO] [Thread-10177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:34:58.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:34:58.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:34:59.204 [DEBUG] [Thread-10177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:34:59.204 [DEBUG] [Thread-10177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:34:59.252 [DEBUG] [Thread-10177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:34:59.252 [DEBUG] [Thread-10177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:34:59.261 [DEBUG] [Thread-10177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:34:59.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:34:59.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:34:59.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:34:59.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:34:59.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:34:59.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:34:59.301 [DEBUG] [Thread-10177] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:34:59.421 [DEBUG] [Thread-10179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:08.507 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:14.472 [DEBUG] [Thread-10180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:18.903 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:21.556 [DEBUG] [Thread-10181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:35:29.323 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:29.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:35:29.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:35:29.506 [DEBUG] [Thread-10182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 35, 4), 30.44, 11.78, 0.0, 9.16, 20.45, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:35:30.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:35:04
2025-11-26T02:35:30.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:35:30.312 [DEBUG] [Thread-10183] [transport.py] [_log()] starting thread (client mode): 0x7374f8e0
2025-11-26T02:35:30.312 [DEBUG] [Thread-10183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:35:30.331 [DEBUG] [Thread-10183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:35:30.332 [INFO] [Thread-10183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] client lang: <none>
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] server lang: <none>
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] kex follows: False
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] Compression: none
2025-11-26T02:35:30.335 [DEBUG] [Thread-10183] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:35:30.350 [DEBUG] [Thread-10183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:35:30.350 [DEBUG] [Thread-10183] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:35:30.350 [DEBUG] [Thread-10183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:35:30.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:35:30.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:35:30.351 [DEBUG] [Thread-10183] [transport.py] [_log()] userauth is OK
2025-11-26T02:35:30.351 [DEBUG] [Thread-10183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:35:30.351 [DEBUG] [Thread-10183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:35:30.351 [DEBUG] [Thread-10183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:35:30.351 [DEBUG] [Thread-10183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:35:30.366 [INFO] [Thread-10183] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:35:30.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:35:31.010 [DEBUG] [Thread-10183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:35:31.011 [DEBUG] [Thread-10183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:35:31.011 [DEBUG] [Thread-10183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:35:31.051 [DEBUG] [Thread-10183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:35:31.051 [DEBUG] [Thread-10183] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:35:31.053 [DEBUG] [Thread-10183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:35:31.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:35:31.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:35:31.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:35:31.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:35:31.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:35:31.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:35:31.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.024054 -999.00  +21.10   8.14     16   -5.00 1 1 1 1 1     0    0 26.54 21.16 ZNESW 8.8 8.1 115.4 10.3 20.1 -26.3 19.9 -26.0 19.5 -24.5 19.8 -25.6
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.024054
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:35:31.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:35:04', tmtdew=30.44, humidity=11.78, cloud=0.0, wind=9.16, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:35:04', seeing=0.89, atlas_timestamp='2025-11-26T00:34:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:33:00')
2025-11-26T02:35:31.071 [DEBUG] [Thread-10183] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:35:31.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:35:31.157 [DEBUG] [Thread-10186] [transport.py] [_log()] starting thread (client mode): 0x70d54c70
2025-11-26T02:35:31.157 [DEBUG] [Thread-10186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:35:31.174 [DEBUG] [Thread-10186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:35:31.174 [INFO] [Thread-10186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] client lang: <none>
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] server lang: <none>
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] kex follows: False
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] Compression: none
2025-11-26T02:35:31.182 [DEBUG] [Thread-10186] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:35:31.238 [DEBUG] [Thread-10186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:35:31.238 [DEBUG] [Thread-10186] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:35:31.238 [DEBUG] [Thread-10186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:35:31.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:35:31.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:35:31.295 [DEBUG] [Thread-10186] [transport.py] [_log()] userauth is OK
2025-11-26T02:35:31.295 [DEBUG] [Thread-10186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:35:31.295 [DEBUG] [Thread-10186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:35:31.295 [DEBUG] [Thread-10186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:35:31.295 [DEBUG] [Thread-10186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:35:31.309 [INFO] [Thread-10186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:35:31.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:35:31.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:35:32.148 [DEBUG] [Thread-10186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:35:32.149 [DEBUG] [Thread-10186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:35:32.197 [DEBUG] [Thread-10186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:35:32.197 [DEBUG] [Thread-10186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:35:32.206 [DEBUG] [Thread-10186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:35:32.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:35:32.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:35:32.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:35:32.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:35:32.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:35:32.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:35:32.247 [DEBUG] [Thread-10186] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:35:39.733 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:44.534 [DEBUG] [Thread-10188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:44.887 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:44.889 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:50.133 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:35:59.596 [DEBUG] [Thread-10189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:00.526 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:36:02.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:36:02.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:36:02.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 35, 36), 30.23, 12.35, 0.0, 9.28, 20.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:36:02.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:35:36
2025-11-26T02:36:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:36:03.176 [DEBUG] [Thread-10190] [transport.py] [_log()] starting thread (client mode): 0x70de4b80
2025-11-26T02:36:03.176 [DEBUG] [Thread-10190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:36:03.196 [DEBUG] [Thread-10190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:36:03.196 [INFO] [Thread-10190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] client lang: <none>
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] server lang: <none>
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] kex follows: False
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:36:03.199 [DEBUG] [Thread-10190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:36:03.200 [DEBUG] [Thread-10190] [transport.py] [_log()] Compression: none
2025-11-26T02:36:03.200 [DEBUG] [Thread-10190] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:36:03.216 [DEBUG] [Thread-10190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:36:03.217 [DEBUG] [Thread-10190] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:36:03.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:36:03.218 [DEBUG] [Thread-10190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:36:03.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:36:03.220 [DEBUG] [Thread-10190] [transport.py] [_log()] userauth is OK
2025-11-26T02:36:03.220 [DEBUG] [Thread-10190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:36:03.221 [DEBUG] [Thread-10190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:36:03.221 [DEBUG] [Thread-10190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:36:03.221 [DEBUG] [Thread-10190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:36:03.257 [INFO] [Thread-10190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:36:03.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:36:03.856 [DEBUG] [Thread-10190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:36:03.856 [DEBUG] [Thread-10190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:36:03.856 [DEBUG] [Thread-10190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:36:03.897 [DEBUG] [Thread-10190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:36:03.897 [DEBUG] [Thread-10190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:36:03.899 [DEBUG] [Thread-10190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:36:03.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:36:03.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:36:03.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:36:03.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:36:03.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:36:03.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:36:03.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.024401 -999.00  +21.10   7.58     16   -5.00 1 1 1 1 1     0    0 25.62 22.68 ZNESW 9.3 7.6 103.2 10.6 20.1 -26.6 19.8 -25.9 -999.0 -999.0 19.8 -25.6
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.024401
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:36:03.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:35:36', tmtdew=30.23, humidity=12.35, cloud=0.0, wind=9.28, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:35:36', seeing=0.97, atlas_timestamp='2025-11-26T00:35:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:33:00')
2025-11-26T02:36:03.918 [DEBUG] [Thread-10190] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:36:03.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:36:04.001 [DEBUG] [Thread-10193] [transport.py] [_log()] starting thread (client mode): 0x70d6b280
2025-11-26T02:36:04.001 [DEBUG] [Thread-10193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:36:04.016 [DEBUG] [Thread-10193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:36:04.016 [INFO] [Thread-10193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] client lang: <none>
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] server lang: <none>
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] kex follows: False
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] Compression: none
2025-11-26T02:36:04.024 [DEBUG] [Thread-10193] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:36:04.083 [DEBUG] [Thread-10193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:36:04.083 [DEBUG] [Thread-10193] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:36:04.083 [DEBUG] [Thread-10193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:36:04.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:36:04.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:36:04.140 [DEBUG] [Thread-10193] [transport.py] [_log()] userauth is OK
2025-11-26T02:36:04.140 [DEBUG] [Thread-10193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:36:04.140 [DEBUG] [Thread-10193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:36:04.140 [DEBUG] [Thread-10193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:36:04.140 [DEBUG] [Thread-10193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:36:04.154 [INFO] [Thread-10193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:36:04.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:36:04.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:36:05.006 [DEBUG] [Thread-10193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:36:05.006 [DEBUG] [Thread-10193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:36:05.053 [DEBUG] [Thread-10193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:36:05.053 [DEBUG] [Thread-10193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:36:05.061 [DEBUG] [Thread-10193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:36:05.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:36:05.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:36:05.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:36:05.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:36:05.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:36:05.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:36:05.093 [DEBUG] [Thread-10193] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:36:10.924 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:14.628 [DEBUG] [Thread-10195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:21.372 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:21.614 [DEBUG] [Thread-10196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:29.680 [DEBUG] [Thread-10197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:31.757 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:35.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:36:35.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:36:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:36:35.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 36, 8), 30.2, 12.36, 0.0, 9.35, 20.28, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:36:35.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:36:08
2025-11-26T02:36:35.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:36:36.046 [DEBUG] [Thread-10198] [transport.py] [_log()] starting thread (client mode): 0x70dd08e0
2025-11-26T02:36:36.046 [DEBUG] [Thread-10198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:36:36.066 [DEBUG] [Thread-10198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:36:36.066 [INFO] [Thread-10198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:36:36.069 [DEBUG] [Thread-10198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:36:36.069 [DEBUG] [Thread-10198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:36:36.069 [DEBUG] [Thread-10198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:36:36.069 [DEBUG] [Thread-10198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] client lang: <none>
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] server lang: <none>
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] kex follows: False
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] Compression: none
2025-11-26T02:36:36.070 [DEBUG] [Thread-10198] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:36:36.088 [DEBUG] [Thread-10198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:36:36.088 [DEBUG] [Thread-10198] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:36:36.089 [DEBUG] [Thread-10198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:36:36.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:36:36.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:36:36.091 [DEBUG] [Thread-10198] [transport.py] [_log()] userauth is OK
2025-11-26T02:36:36.091 [DEBUG] [Thread-10198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:36:36.092 [DEBUG] [Thread-10198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:36:36.092 [DEBUG] [Thread-10198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:36:36.092 [DEBUG] [Thread-10198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:36:36.117 [INFO] [Thread-10198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:36:36.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:36:36.746 [DEBUG] [Thread-10198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:36:36.746 [DEBUG] [Thread-10198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:36:36.747 [DEBUG] [Thread-10198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:36:36.787 [DEBUG] [Thread-10198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:36:36.787 [DEBUG] [Thread-10198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:36:36.791 [DEBUG] [Thread-10198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:36:36.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:36:36.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:36:36.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:36:36.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:36:36.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:36:36.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:36:36.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:36:36.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:36:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:36:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.025096 -999.00  +21.10   6.01     16   -5.00 1 1 1 1 1     0    0 26.64 21.16 ZNESW 5.8 6.0 118.3 9.2 20.1 -26.2 19.9 -25.9 19.5 -24.5 19.8 -25.5
2025-11-26T02:36:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:36:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:36:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.025096
2025-11-26T02:36:36.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:36:36.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:36:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:36:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:36:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:36:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:36:08', tmtdew=30.2, humidity=12.36, cloud=0.0, wind=9.35, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:36:08', seeing=0.97, atlas_timestamp='2025-11-26T00:36:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:33:00')
2025-11-26T02:36:36.818 [DEBUG] [Thread-10198] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:36:36.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:36:36.913 [DEBUG] [Thread-10201] [transport.py] [_log()] starting thread (client mode): 0x70dd3700
2025-11-26T02:36:36.914 [DEBUG] [Thread-10201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:36:36.928 [DEBUG] [Thread-10201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:36:36.928 [INFO] [Thread-10201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:36:36.936 [DEBUG] [Thread-10201] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:36:36.936 [DEBUG] [Thread-10201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:36:36.936 [DEBUG] [Thread-10201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:36:36.937 [DEBUG] [Thread-10201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:36:36.937 [DEBUG] [Thread-10201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:36:36.937 [DEBUG] [Thread-10201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:36:36.937 [DEBUG] [Thread-10201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:36:36.937 [DEBUG] [Thread-10201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:36:36.937 [DEBUG] [Thread-10201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:36:36.937 [DEBUG] [Thread-10201] [transport.py] [_log()] client lang: <none>
2025-11-26T02:36:36.937 [DEBUG] [Thread-10201] [transport.py] [_log()] server lang: <none>
2025-11-26T02:36:36.938 [DEBUG] [Thread-10201] [transport.py] [_log()] kex follows: False
2025-11-26T02:36:36.938 [DEBUG] [Thread-10201] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:36:36.938 [DEBUG] [Thread-10201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:36:36.938 [DEBUG] [Thread-10201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:36:36.938 [DEBUG] [Thread-10201] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:36:36.938 [DEBUG] [Thread-10201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:36:36.938 [DEBUG] [Thread-10201] [transport.py] [_log()] Compression: none
2025-11-26T02:36:36.938 [DEBUG] [Thread-10201] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:36:36.997 [DEBUG] [Thread-10201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:36:36.997 [DEBUG] [Thread-10201] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:36:36.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:36:36.998 [DEBUG] [Thread-10201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:36:36.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:36:37.053 [DEBUG] [Thread-10201] [transport.py] [_log()] userauth is OK
2025-11-26T02:36:37.053 [DEBUG] [Thread-10201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:36:37.053 [DEBUG] [Thread-10201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:36:37.053 [DEBUG] [Thread-10201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:36:37.053 [DEBUG] [Thread-10201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:36:37.072 [INFO] [Thread-10201] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:36:37.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:36:37.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:36:37.916 [DEBUG] [Thread-10201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:36:37.916 [DEBUG] [Thread-10201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:36:37.964 [DEBUG] [Thread-10201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:36:37.964 [DEBUG] [Thread-10201] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:36:37.973 [DEBUG] [Thread-10201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:36:37.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:36:37.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:36:37.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:36:38.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:36:38.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:36:38.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:36:38.011 [DEBUG] [Thread-10201] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:36:42.152 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:44.709 [DEBUG] [Thread-10203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:45.094 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:45.095 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:52.570 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:36:59.756 [DEBUG] [Thread-10204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:02.983 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:37:08.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:37:08.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:37:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 36, 40), 30.2, 12.35, 0.0, 7.29, 20.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:37:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:36:40
2025-11-26T02:37:08.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:37:08.967 [DEBUG] [Thread-10205] [transport.py] [_log()] starting thread (client mode): 0x7374cd60
2025-11-26T02:37:08.967 [DEBUG] [Thread-10205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:37:08.987 [DEBUG] [Thread-10205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:37:08.987 [INFO] [Thread-10205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:37:08.990 [DEBUG] [Thread-10205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:37:08.990 [DEBUG] [Thread-10205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:37:08.990 [DEBUG] [Thread-10205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:37:08.990 [DEBUG] [Thread-10205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:37:08.990 [DEBUG] [Thread-10205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] client lang: <none>
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] server lang: <none>
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] kex follows: False
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:37:08.991 [DEBUG] [Thread-10205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:37:08.992 [DEBUG] [Thread-10205] [transport.py] [_log()] Compression: none
2025-11-26T02:37:08.992 [DEBUG] [Thread-10205] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:37:09.010 [DEBUG] [Thread-10205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:37:09.011 [DEBUG] [Thread-10205] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:37:09.011 [DEBUG] [Thread-10205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:37:09.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:37:09.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:37:09.013 [DEBUG] [Thread-10205] [transport.py] [_log()] userauth is OK
2025-11-26T02:37:09.014 [DEBUG] [Thread-10205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:37:09.014 [DEBUG] [Thread-10205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:37:09.014 [DEBUG] [Thread-10205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:37:09.014 [DEBUG] [Thread-10205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:37:09.037 [INFO] [Thread-10205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:37:09.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:37:09.697 [DEBUG] [Thread-10205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:37:09.698 [DEBUG] [Thread-10205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:37:09.698 [DEBUG] [Thread-10205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:37:09.739 [DEBUG] [Thread-10205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:37:09.739 [DEBUG] [Thread-10205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:37:09.742 [DEBUG] [Thread-10205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:37:09.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:37:09.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:37:09.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:37:09.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:37:09.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:37:09.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:37:09.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:37:09.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:37:09.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:37:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.025443 -999.00  +21.10   7.14     16   -5.00 1 1 1 1 1     0    0 26.77 20.88 ZNESW 6.3 7.1 95.4 9.6 20.1 -26.5 19.9 -25.8 19.5 -24.5 19.8 -25.7
2025-11-26T02:37:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:37:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:37:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.025443
2025-11-26T02:37:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:37:09.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:37:09.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:37:09.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:37:09.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:37:09.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:36:40', tmtdew=30.2, humidity=12.35, cloud=0.0, wind=7.29, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:36:40', seeing=0.89, atlas_timestamp='2025-11-26T00:36:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:33:00')
2025-11-26T02:37:09.768 [DEBUG] [Thread-10205] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:37:09.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:37:09.864 [DEBUG] [Thread-10208] [transport.py] [_log()] starting thread (client mode): 0x70d3a080
2025-11-26T02:37:09.865 [DEBUG] [Thread-10208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:37:09.879 [DEBUG] [Thread-10208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:37:09.879 [INFO] [Thread-10208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] client lang: <none>
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] server lang: <none>
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] kex follows: False
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] Compression: none
2025-11-26T02:37:09.887 [DEBUG] [Thread-10208] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:37:09.945 [DEBUG] [Thread-10208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:37:09.945 [DEBUG] [Thread-10208] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:37:09.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:37:09.946 [DEBUG] [Thread-10208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:37:09.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:37:10.001 [DEBUG] [Thread-10208] [transport.py] [_log()] userauth is OK
2025-11-26T02:37:10.001 [DEBUG] [Thread-10208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:37:10.001 [DEBUG] [Thread-10208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:37:10.002 [DEBUG] [Thread-10208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:37:10.002 [DEBUG] [Thread-10208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:37:10.020 [INFO] [Thread-10208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:37:10.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:37:10.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:37:10.836 [DEBUG] [Thread-10208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:37:10.836 [DEBUG] [Thread-10208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:37:10.884 [DEBUG] [Thread-10208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:37:10.884 [DEBUG] [Thread-10208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:37:10.893 [DEBUG] [Thread-10208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:37:10.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:37:10.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:37:10.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:37:10.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:37:10.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:37:10.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:37:10.931 [DEBUG] [Thread-10208] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:37:13.400 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:14.791 [DEBUG] [Thread-10210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:21.683 [DEBUG] [Thread-10211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:23.798 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:29.842 [DEBUG] [Thread-10212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:34.243 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:40.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:37:40.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:37:40.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:37:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 37, 12), 30.12, 12.41, 0.0, 7.23, 20.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:37:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:37:12
2025-11-26T02:37:41.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:37:41.878 [DEBUG] [Thread-10213] [transport.py] [_log()] starting thread (client mode): 0x70d6b6d0
2025-11-26T02:37:41.879 [DEBUG] [Thread-10213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:37:41.900 [DEBUG] [Thread-10213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:37:41.900 [INFO] [Thread-10213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:37:41.903 [DEBUG] [Thread-10213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] client lang: <none>
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] server lang: <none>
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] kex follows: False
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] Compression: none
2025-11-26T02:37:41.904 [DEBUG] [Thread-10213] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:37:41.922 [DEBUG] [Thread-10213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:37:41.923 [DEBUG] [Thread-10213] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:37:41.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:37:41.924 [DEBUG] [Thread-10213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:37:41.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:37:41.926 [DEBUG] [Thread-10213] [transport.py] [_log()] userauth is OK
2025-11-26T02:37:41.927 [DEBUG] [Thread-10213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:37:41.927 [DEBUG] [Thread-10213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:37:41.927 [DEBUG] [Thread-10213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:37:41.927 [DEBUG] [Thread-10213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:37:41.963 [INFO] [Thread-10213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:37:41.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:37:42.605 [DEBUG] [Thread-10213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:37:42.605 [DEBUG] [Thread-10213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:37:42.606 [DEBUG] [Thread-10213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:37:42.646 [DEBUG] [Thread-10213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:37:42.646 [DEBUG] [Thread-10213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:37:42.649 [DEBUG] [Thread-10213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:37:42.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:37:42.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:37:42.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:37:42.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:37:42.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:37:42.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:37:42.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:37:42.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:37:42.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:37:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.025790 -999.00  +21.10   8.02     16   -5.00 1 1 1 1 1     0    0 27.09 22.16 ZNESW 8.2 8.0 110.0 10.0 20.1 -26.5 19.9 -25.6 19.6 -24.6 19.9 -25.5
2025-11-26T02:37:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:37:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:37:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.025790
2025-11-26T02:37:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:37:42.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:37:42.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:37:42.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:37:42.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:37:42.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:37:12', tmtdew=30.12, humidity=12.41, cloud=0.0, wind=7.23, temperature=20.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:37:12', seeing=0.85, atlas_timestamp='2025-11-26T00:37:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.02624999999999922, 0.019750000000000156, -0.002500000000001279, -0.013500000000000512, 0.06325000000000003, -0.040000000000000924, -0.029749999999999943, 0.006499999999999062, -0.010999999999999233, -0.008250000000000313, -0.006000000000000227, 0.0909999999999993, 0.09525000000000006, -0.03200000000000003, -0.031000000000000583, 0.0012500000000006395, 0.007500000000000284, -0.019000000000000128, -0.00575000000000081, 0.06799999999999784, 0.08374999999999844, 0.028250000000001663, -0.0012500000000006395, 0.010499999999998622, 0.00849999999999973, -0.0022500000000000853, 0.07249999999999979, 0.13250000000000028, 0.10600000000000165, 0.034000000000000696, -0.006999999999999673, 0.018749999999998934], zp_timestamp='2025-11-26T00:33:00')
2025-11-26T02:37:42.678 [DEBUG] [Thread-10213] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:37:42.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:37:42.774 [DEBUG] [Thread-10216] [transport.py] [_log()] starting thread (client mode): 0x70dbd1b0
2025-11-26T02:37:42.774 [DEBUG] [Thread-10216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:37:42.789 [DEBUG] [Thread-10216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:37:42.789 [INFO] [Thread-10216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:37:42.797 [DEBUG] [Thread-10216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:37:42.797 [DEBUG] [Thread-10216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:37:42.797 [DEBUG] [Thread-10216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:37:42.797 [DEBUG] [Thread-10216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:37:42.797 [DEBUG] [Thread-10216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:37:42.797 [DEBUG] [Thread-10216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:37:42.797 [DEBUG] [Thread-10216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:37:42.797 [DEBUG] [Thread-10216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] client lang: <none>
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] server lang: <none>
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] kex follows: False
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] Compression: none
2025-11-26T02:37:42.798 [DEBUG] [Thread-10216] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:37:42.857 [DEBUG] [Thread-10216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:37:42.858 [DEBUG] [Thread-10216] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:37:42.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:37:42.859 [DEBUG] [Thread-10216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:37:42.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:37:42.915 [DEBUG] [Thread-10216] [transport.py] [_log()] userauth is OK
2025-11-26T02:37:42.915 [DEBUG] [Thread-10216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:37:42.915 [DEBUG] [Thread-10216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:37:42.916 [DEBUG] [Thread-10216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:37:42.916 [DEBUG] [Thread-10216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:37:42.935 [INFO] [Thread-10216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:37:42.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:37:42.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:37:43.771 [DEBUG] [Thread-10216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:37:43.771 [DEBUG] [Thread-10216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:37:43.819 [DEBUG] [Thread-10216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:37:43.819 [DEBUG] [Thread-10216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:37:43.828 [DEBUG] [Thread-10216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:37:43.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:37:43.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:37:43.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:37:43.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:37:43.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:37:43.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:37:43.865 [DEBUG] [Thread-10216] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:37:44.678 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:44.876 [DEBUG] [Thread-10218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:45.296 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:45.297 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:55.100 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:37:59.915 [DEBUG] [Thread-10219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:05.505 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:13.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:38:13.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:38:13.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:38:14.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 37, 44), 30.13, 12.36, 0.0, 7.08, 20.2, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:38:14.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:37:44
2025-11-26T02:38:14.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:38:14.823 [DEBUG] [Thread-10220] [transport.py] [_log()] starting thread (client mode): 0x7374fa60
2025-11-26T02:38:14.823 [DEBUG] [Thread-10220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:38:14.843 [DEBUG] [Thread-10220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:38:14.843 [INFO] [Thread-10220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:38:14.844 [DEBUG] [Thread-10220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] client lang: <none>
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] server lang: <none>
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] kex follows: False
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] Compression: none
2025-11-26T02:38:14.845 [DEBUG] [Thread-10220] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:38:14.864 [DEBUG] [Thread-10220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:38:14.864 [DEBUG] [Thread-10220] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:38:14.865 [DEBUG] [Thread-10220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:38:14.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:38:14.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:38:14.867 [DEBUG] [Thread-10220] [transport.py] [_log()] userauth is OK
2025-11-26T02:38:14.867 [DEBUG] [Thread-10220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:38:14.867 [DEBUG] [Thread-10220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:38:14.867 [DEBUG] [Thread-10220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:38:14.867 [DEBUG] [Thread-10220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:38:14.890 [INFO] [Thread-10220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:38:14.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:38:14.948 [DEBUG] [Thread-10222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:15.534 [DEBUG] [Thread-10220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:38:15.534 [DEBUG] [Thread-10220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:38:15.534 [DEBUG] [Thread-10220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:38:15.575 [DEBUG] [Thread-10220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:38:15.575 [DEBUG] [Thread-10220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:38:15.578 [DEBUG] [Thread-10220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:38:15.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:38:15.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:38:15.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:38:15.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:38:15.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:38:15.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:38:15.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:38:15.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:38:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:38:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.026138 -999.00  +21.10   5.85     16   -5.00 1 1 1 1 1     0    0 26.89 22.06 ZNESW 8.0 5.8 120.0 9.5 20.1 -26.6 19.9 -25.9 19.5 -24.4 19.9 -25.6
2025-11-26T02:38:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:38:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:38:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.026138
2025-11-26T02:38:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:38:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:38:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:38:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:38:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:38:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:37:44', tmtdew=30.13, humidity=12.36, cloud=0.0, wind=7.08, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:37:44', seeing=0.81, atlas_timestamp='2025-11-26T00:37:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.03725000000000023, 0.007250000000000867, -0.048500000000000654, -0.02149999999999963, -0.0037499999999983658, -0.013500000000000512, -0.01974999999999838, -0.0005000000000006111, -0.045999999999999375, -0.007749999999999702, -0.002000000000000668, 0.0730000000000004, 0.07824999999999882, -0.026500000000000412, -0.04600000000000115, 0.012249999999999872, 0.013500000000000512, -0.023000000000001464, -0.0037500000000019185, 0.07199999999999918, 0.062249999999998806, -0.00274999999999892, -0.03325000000000067, -0.009000000000000341, 0.022999999999999687, 0.008750000000000924, -0.006499999999999062, 0.09949999999999903, 0.06750000000000078, 0.005000000000000782, -0.018000000000000682, -0.06025000000000169], zp_timestamp='2025-11-26T00:36:00')
2025-11-26T02:38:15.603 [DEBUG] [Thread-10220] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:38:15.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:38:15.699 [DEBUG] [Thread-10224] [transport.py] [_log()] starting thread (client mode): 0x70d3b9d0
2025-11-26T02:38:15.699 [DEBUG] [Thread-10224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:38:15.713 [DEBUG] [Thread-10224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:38:15.713 [INFO] [Thread-10224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:38:15.721 [DEBUG] [Thread-10224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:38:15.721 [DEBUG] [Thread-10224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:38:15.721 [DEBUG] [Thread-10224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] client lang: <none>
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] server lang: <none>
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] kex follows: False
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] Compression: none
2025-11-26T02:38:15.722 [DEBUG] [Thread-10224] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:38:15.783 [DEBUG] [Thread-10224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:38:15.783 [DEBUG] [Thread-10224] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:38:15.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:38:15.785 [DEBUG] [Thread-10224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:38:15.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:38:15.843 [DEBUG] [Thread-10224] [transport.py] [_log()] userauth is OK
2025-11-26T02:38:15.844 [DEBUG] [Thread-10224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:38:15.844 [DEBUG] [Thread-10224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:38:15.844 [DEBUG] [Thread-10224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:38:15.844 [DEBUG] [Thread-10224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:38:15.862 [INFO] [Thread-10224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:38:15.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:38:15.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:38:15.919 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:16.668 [DEBUG] [Thread-10224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:38:16.668 [DEBUG] [Thread-10224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:38:16.715 [DEBUG] [Thread-10224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:38:16.716 [DEBUG] [Thread-10224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:38:16.724 [DEBUG] [Thread-10224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:38:16.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:38:16.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:38:16.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:38:16.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:38:16.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:38:16.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:38:16.757 [DEBUG] [Thread-10224] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:38:21.761 [DEBUG] [Thread-10226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:26.320 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:29.987 [DEBUG] [Thread-10227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:36.753 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:45.063 [DEBUG] [Thread-10228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:45.509 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:45.510 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:46.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:38:46.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:38:46.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:38:47.192 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:38:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 38, 16), 30.1, 12.4, 0.0, 7.36, 20.2, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:38:47.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:38:16
2025-11-26T02:38:47.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:38:47.716 [DEBUG] [Thread-10229] [transport.py] [_log()] starting thread (client mode): 0x70d6b040
2025-11-26T02:38:47.716 [DEBUG] [Thread-10229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:38:47.736 [DEBUG] [Thread-10229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:38:47.736 [INFO] [Thread-10229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:38:47.739 [DEBUG] [Thread-10229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:38:47.739 [DEBUG] [Thread-10229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:38:47.739 [DEBUG] [Thread-10229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:38:47.739 [DEBUG] [Thread-10229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] client lang: <none>
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] server lang: <none>
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] kex follows: False
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] Compression: none
2025-11-26T02:38:47.740 [DEBUG] [Thread-10229] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:38:47.757 [DEBUG] [Thread-10229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:38:47.758 [DEBUG] [Thread-10229] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:38:47.758 [DEBUG] [Thread-10229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:38:47.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:38:47.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:38:47.801 [DEBUG] [Thread-10229] [transport.py] [_log()] userauth is OK
2025-11-26T02:38:47.802 [DEBUG] [Thread-10229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:38:47.802 [DEBUG] [Thread-10229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:38:47.802 [DEBUG] [Thread-10229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:38:47.802 [DEBUG] [Thread-10229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:38:47.835 [INFO] [Thread-10229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:38:47.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:38:48.467 [DEBUG] [Thread-10229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:38:48.467 [DEBUG] [Thread-10229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:38:48.468 [DEBUG] [Thread-10229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:38:48.508 [DEBUG] [Thread-10229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:38:48.508 [DEBUG] [Thread-10229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:38:48.511 [DEBUG] [Thread-10229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:38:48.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:38:48.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:38:48.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:38:48.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:38:48.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:38:48.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:38:48.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:38:48.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:38:48.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:38:48.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.026485 -999.00  +21.10   8.76     16   -5.00 1 1 1 1 1     0    0 27.09 23.07 ZNESW 7.7 8.8 125.2 11.6 20.1 -26.4 19.9 -25.9 19.6 -24.7 19.8 -25.6
2025-11-26T02:38:48.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:38:48.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:38:48.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.026485
2025-11-26T02:38:48.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:38:48.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:38:48.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:38:48.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:38:48.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:38:48.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:38:16', tmtdew=30.1, humidity=12.4, cloud=0.0, wind=7.36, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:38:16', seeing=0.88, atlas_timestamp='2025-11-26T00:38:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.03725000000000023, 0.007250000000000867, -0.048500000000000654, -0.02149999999999963, -0.0037499999999983658, -0.013500000000000512, -0.01974999999999838, -0.0005000000000006111, -0.045999999999999375, -0.007749999999999702, -0.002000000000000668, 0.0730000000000004, 0.07824999999999882, -0.026500000000000412, -0.04600000000000115, 0.012249999999999872, 0.013500000000000512, -0.023000000000001464, -0.0037500000000019185, 0.07199999999999918, 0.062249999999998806, -0.00274999999999892, -0.03325000000000067, -0.009000000000000341, 0.022999999999999687, 0.008750000000000924, -0.006499999999999062, 0.09949999999999903, 0.06750000000000078, 0.005000000000000782, -0.018000000000000682, -0.06025000000000169], zp_timestamp='2025-11-26T00:36:00')
2025-11-26T02:38:48.536 [DEBUG] [Thread-10229] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:38:48.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:38:48.636 [DEBUG] [Thread-10232] [transport.py] [_log()] starting thread (client mode): 0x70d42a40
2025-11-26T02:38:48.636 [DEBUG] [Thread-10232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:38:48.651 [DEBUG] [Thread-10232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:38:48.651 [INFO] [Thread-10232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] client lang: <none>
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] server lang: <none>
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] kex follows: False
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:38:48.659 [DEBUG] [Thread-10232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:38:48.660 [DEBUG] [Thread-10232] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:38:48.660 [DEBUG] [Thread-10232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:38:48.660 [DEBUG] [Thread-10232] [transport.py] [_log()] Compression: none
2025-11-26T02:38:48.660 [DEBUG] [Thread-10232] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:38:48.716 [DEBUG] [Thread-10232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:38:48.717 [DEBUG] [Thread-10232] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:38:48.717 [DEBUG] [Thread-10232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:38:48.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:38:48.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:38:48.774 [DEBUG] [Thread-10232] [transport.py] [_log()] userauth is OK
2025-11-26T02:38:48.774 [DEBUG] [Thread-10232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:38:48.774 [DEBUG] [Thread-10232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:38:48.774 [DEBUG] [Thread-10232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:38:48.774 [DEBUG] [Thread-10232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:38:48.787 [INFO] [Thread-10232] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:38:48.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:38:48.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:38:49.643 [DEBUG] [Thread-10232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:38:49.644 [DEBUG] [Thread-10232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:38:49.691 [DEBUG] [Thread-10232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:38:49.691 [DEBUG] [Thread-10232] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:38:49.699 [DEBUG] [Thread-10232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:38:49.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:38:49.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:38:49.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:38:49.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:38:49.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:38:49.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:38:49.731 [DEBUG] [Thread-10232] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:38:57.607 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:00.104 [DEBUG] [Thread-10234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:08.025 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:15.154 [DEBUG] [Thread-10235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:18.407 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:19.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:39:19.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:39:19.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:39:20.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 38, 48), 30.03, 12.41, 0.0, 9.41, 20.15, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:39:20.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:38:48
2025-11-26T02:39:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:39:20.685 [DEBUG] [Thread-10236] [transport.py] [_log()] starting thread (client mode): 0x70d6a710
2025-11-26T02:39:20.685 [DEBUG] [Thread-10236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:39:20.705 [DEBUG] [Thread-10236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:39:20.705 [INFO] [Thread-10236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:39:20.706 [DEBUG] [Thread-10236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:39:20.706 [DEBUG] [Thread-10236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:39:20.706 [DEBUG] [Thread-10236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:39:20.706 [DEBUG] [Thread-10236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:39:20.706 [DEBUG] [Thread-10236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:39:20.706 [DEBUG] [Thread-10236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:39:20.706 [DEBUG] [Thread-10236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] client lang: <none>
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] server lang: <none>
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] kex follows: False
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] Compression: none
2025-11-26T02:39:20.707 [DEBUG] [Thread-10236] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:39:20.724 [DEBUG] [Thread-10236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:39:20.724 [DEBUG] [Thread-10236] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:39:20.724 [DEBUG] [Thread-10236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:39:20.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:39:20.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:39:20.725 [DEBUG] [Thread-10236] [transport.py] [_log()] userauth is OK
2025-11-26T02:39:20.725 [DEBUG] [Thread-10236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:39:20.725 [DEBUG] [Thread-10236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:39:20.725 [DEBUG] [Thread-10236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:39:20.725 [DEBUG] [Thread-10236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:39:20.734 [INFO] [Thread-10236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:39:20.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:39:21.344 [DEBUG] [Thread-10236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:39:21.344 [DEBUG] [Thread-10236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:39:21.344 [DEBUG] [Thread-10236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:39:21.385 [DEBUG] [Thread-10236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:39:21.386 [DEBUG] [Thread-10236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:39:21.388 [DEBUG] [Thread-10236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:39:21.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:39:21.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:39:21.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:39:21.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:39:21.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:39:21.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:39:21.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.026832 -999.00  +21.10   7.28     16   -5.10 1 1 1 1 1     0    0 27.24 22.63 ZNESW 8.2 7.3 102.0 11.0 20.2 -26.0 19.9 -25.9 19.6 -24.5 19.9 -25.6
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.026832
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:39:21.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:38:48', tmtdew=30.03, humidity=12.41, cloud=0.0, wind=9.41, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:38:48', seeing=0.88, atlas_timestamp='2025-11-26T00:38:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.03725000000000023, 0.007250000000000867, -0.048500000000000654, -0.02149999999999963, -0.0037499999999983658, -0.013500000000000512, -0.01974999999999838, -0.0005000000000006111, -0.045999999999999375, -0.007749999999999702, -0.002000000000000668, 0.0730000000000004, 0.07824999999999882, -0.026500000000000412, -0.04600000000000115, 0.012249999999999872, 0.013500000000000512, -0.023000000000001464, -0.0037500000000019185, 0.07199999999999918, 0.062249999999998806, -0.00274999999999892, -0.03325000000000067, -0.009000000000000341, 0.022999999999999687, 0.008750000000000924, -0.006499999999999062, 0.09949999999999903, 0.06750000000000078, 0.005000000000000782, -0.018000000000000682, -0.06025000000000169], zp_timestamp='2025-11-26T00:36:00')
2025-11-26T02:39:21.407 [DEBUG] [Thread-10236] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:39:21.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:39:21.494 [DEBUG] [Thread-10239] [transport.py] [_log()] starting thread (client mode): 0x70dd1ae0
2025-11-26T02:39:21.494 [DEBUG] [Thread-10239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:39:21.509 [DEBUG] [Thread-10239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:39:21.509 [INFO] [Thread-10239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] client lang: <none>
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] server lang: <none>
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] kex follows: False
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] Compression: none
2025-11-26T02:39:21.517 [DEBUG] [Thread-10239] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:39:21.573 [DEBUG] [Thread-10239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:39:21.573 [DEBUG] [Thread-10239] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:39:21.573 [DEBUG] [Thread-10239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:39:21.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:39:21.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:39:21.630 [DEBUG] [Thread-10239] [transport.py] [_log()] userauth is OK
2025-11-26T02:39:21.630 [DEBUG] [Thread-10239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:39:21.630 [DEBUG] [Thread-10239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:39:21.630 [DEBUG] [Thread-10239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:39:21.630 [DEBUG] [Thread-10239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:39:21.643 [INFO] [Thread-10239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:39:21.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:39:21.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:39:21.832 [DEBUG] [Thread-10241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:22.440 [DEBUG] [Thread-10239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:39:22.440 [DEBUG] [Thread-10239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:39:22.489 [DEBUG] [Thread-10239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:39:22.489 [DEBUG] [Thread-10239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:39:22.501 [DEBUG] [Thread-10239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:39:22.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:39:22.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:39:22.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:39:22.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:39:22.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:39:22.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:39:22.546 [DEBUG] [Thread-10239] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:39:28.805 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:30.186 [DEBUG] [Thread-10242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:39.199 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:45.247 [DEBUG] [Thread-10243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:45.710 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:45.711 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:49.595 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:39:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:39:52.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:39:52.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:39:53.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 39, 20), 30.02, 12.43, 0.0, 9.16, 20.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:39:53.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:39:20
2025-11-26T02:39:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:39:53.573 [DEBUG] [Thread-10244] [transport.py] [_log()] starting thread (client mode): 0x70d3bdc0
2025-11-26T02:39:53.573 [DEBUG] [Thread-10244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:39:53.593 [DEBUG] [Thread-10244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:39:53.594 [INFO] [Thread-10244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] client lang: <none>
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] server lang: <none>
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] kex follows: False
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] Compression: none
2025-11-26T02:39:53.597 [DEBUG] [Thread-10244] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:39:53.616 [DEBUG] [Thread-10244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:39:53.616 [DEBUG] [Thread-10244] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:39:53.616 [DEBUG] [Thread-10244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:39:53.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:39:53.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:39:53.617 [DEBUG] [Thread-10244] [transport.py] [_log()] userauth is OK
2025-11-26T02:39:53.617 [DEBUG] [Thread-10244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:39:53.617 [DEBUG] [Thread-10244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:39:53.617 [DEBUG] [Thread-10244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:39:53.617 [DEBUG] [Thread-10244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:39:53.626 [INFO] [Thread-10244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:39:53.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:39:54.258 [DEBUG] [Thread-10244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:39:54.258 [DEBUG] [Thread-10244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:39:54.258 [DEBUG] [Thread-10244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:39:54.298 [DEBUG] [Thread-10244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:39:54.298 [DEBUG] [Thread-10244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:39:54.301 [DEBUG] [Thread-10244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:39:54.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:39:54.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:39:54.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:39:54.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:39:54.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:39:54.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:39:54.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:39:54.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.027526 -999.00  +21.20   7.82     16   -5.10 1 1 1 1 1     0    0 26.94 22.48 ZNESW 5.6 7.8 131.6 10.4 20.2 -26.2 20.0 -25.9 19.6 -24.4 19.9 -25.6
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.027526
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:39:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:39:20', tmtdew=30.02, humidity=12.43, cloud=0.0, wind=9.16, temperature=20.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:39:52', seeing=0.91, atlas_timestamp='2025-11-26T00:39:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.03725000000000023, 0.007250000000000867, -0.048500000000000654, -0.02149999999999963, -0.0037499999999983658, -0.013500000000000512, -0.01974999999999838, -0.0005000000000006111, -0.045999999999999375, -0.007749999999999702, -0.002000000000000668, 0.0730000000000004, 0.07824999999999882, -0.026500000000000412, -0.04600000000000115, 0.012249999999999872, 0.013500000000000512, -0.023000000000001464, -0.0037500000000019185, 0.07199999999999918, 0.062249999999998806, -0.00274999999999892, -0.03325000000000067, -0.009000000000000341, 0.022999999999999687, 0.008750000000000924, -0.006499999999999062, 0.09949999999999903, 0.06750000000000078, 0.005000000000000782, -0.018000000000000682, -0.06025000000000169], zp_timestamp='2025-11-26T00:36:00')
2025-11-26T02:39:54.320 [DEBUG] [Thread-10244] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:39:54.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:39:54.405 [DEBUG] [Thread-10247] [transport.py] [_log()] starting thread (client mode): 0x70dbd8a0
2025-11-26T02:39:54.406 [DEBUG] [Thread-10247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:39:54.420 [DEBUG] [Thread-10247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:39:54.420 [INFO] [Thread-10247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] client lang: <none>
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] server lang: <none>
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] kex follows: False
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] Compression: none
2025-11-26T02:39:54.428 [DEBUG] [Thread-10247] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:39:54.487 [DEBUG] [Thread-10247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:39:54.487 [DEBUG] [Thread-10247] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:39:54.488 [DEBUG] [Thread-10247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:39:54.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:39:54.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:39:54.543 [DEBUG] [Thread-10247] [transport.py] [_log()] userauth is OK
2025-11-26T02:39:54.543 [DEBUG] [Thread-10247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:39:54.543 [DEBUG] [Thread-10247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:39:54.543 [DEBUG] [Thread-10247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:39:54.544 [DEBUG] [Thread-10247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:39:54.561 [INFO] [Thread-10247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:39:54.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:39:54.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:39:55.378 [DEBUG] [Thread-10247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:39:55.378 [DEBUG] [Thread-10247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:39:55.426 [DEBUG] [Thread-10247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:39:55.426 [DEBUG] [Thread-10247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:39:55.435 [DEBUG] [Thread-10247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:39:55.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:39:55.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:39:55.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:39:55.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:39:55.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:39:55.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:39:55.468 [DEBUG] [Thread-10247] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:39:59.994 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:00.280 [DEBUG] [Thread-10249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:10.393 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:15.329 [DEBUG] [Thread-10250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:20.807 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:21.903 [DEBUG] [Thread-10251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:40:25.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:40:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:40:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 39, 52), 30.07, 12.41, 0.0, 9.09, 20.15, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:40:26.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:39:52
2025-11-26T02:40:26.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:40:26.504 [DEBUG] [Thread-10252] [transport.py] [_log()] starting thread (client mode): 0x70da4910
2025-11-26T02:40:26.504 [DEBUG] [Thread-10252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:40:26.524 [DEBUG] [Thread-10252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:40:26.524 [INFO] [Thread-10252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] client lang: <none>
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] server lang: <none>
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] kex follows: False
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:40:26.527 [DEBUG] [Thread-10252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:40:26.528 [DEBUG] [Thread-10252] [transport.py] [_log()] Compression: none
2025-11-26T02:40:26.528 [DEBUG] [Thread-10252] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:40:26.544 [DEBUG] [Thread-10252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:40:26.545 [DEBUG] [Thread-10252] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:40:26.545 [DEBUG] [Thread-10252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:40:26.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:40:26.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:40:26.545 [DEBUG] [Thread-10252] [transport.py] [_log()] userauth is OK
2025-11-26T02:40:26.545 [DEBUG] [Thread-10252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:40:26.545 [DEBUG] [Thread-10252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:40:26.545 [DEBUG] [Thread-10252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:40:26.545 [DEBUG] [Thread-10252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:40:26.555 [INFO] [Thread-10252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:40:26.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:40:27.184 [DEBUG] [Thread-10252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:40:27.184 [DEBUG] [Thread-10252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:40:27.184 [DEBUG] [Thread-10252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:40:27.225 [DEBUG] [Thread-10252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:40:27.225 [DEBUG] [Thread-10252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:40:27.228 [DEBUG] [Thread-10252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:40:27.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:40:27.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:40:27.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:40:27.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:40:27.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:40:27.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:40:27.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:40:27.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:40:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:40:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.027873 -999.00  +21.20   7.57     16   -5.10 1 1 1 1 1     0    0 27.16 25.23 ZNESW 5.8 7.6 121.6 12.0 20.2 -25.7 20.0 -26.0 19.6 -24.5 19.9 -25.6
2025-11-26T02:40:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:40:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:40:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.027873
2025-11-26T02:40:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:40:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:40:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:40:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:40:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:40:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:39:52', tmtdew=30.07, humidity=12.41, cloud=0.0, wind=9.09, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:40:24', seeing=0.95, atlas_timestamp='2025-11-26T00:40:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.03725000000000023, 0.007250000000000867, -0.048500000000000654, -0.02149999999999963, -0.0037499999999983658, -0.013500000000000512, -0.01974999999999838, -0.0005000000000006111, -0.045999999999999375, -0.007749999999999702, -0.002000000000000668, 0.0730000000000004, 0.07824999999999882, -0.026500000000000412, -0.04600000000000115, 0.012249999999999872, 0.013500000000000512, -0.023000000000001464, -0.0037500000000019185, 0.07199999999999918, 0.062249999999998806, -0.00274999999999892, -0.03325000000000067, -0.009000000000000341, 0.022999999999999687, 0.008750000000000924, -0.006499999999999062, 0.09949999999999903, 0.06750000000000078, 0.005000000000000782, -0.018000000000000682, -0.06025000000000169], zp_timestamp='2025-11-26T00:36:00')
2025-11-26T02:40:27.247 [DEBUG] [Thread-10252] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:40:27.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:40:27.333 [DEBUG] [Thread-10255] [transport.py] [_log()] starting thread (client mode): 0x70d7fcd0
2025-11-26T02:40:27.333 [DEBUG] [Thread-10255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:40:27.347 [DEBUG] [Thread-10255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:40:27.347 [INFO] [Thread-10255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:40:27.354 [DEBUG] [Thread-10255] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] client lang: <none>
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] server lang: <none>
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] kex follows: False
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] Compression: none
2025-11-26T02:40:27.355 [DEBUG] [Thread-10255] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:40:27.409 [DEBUG] [Thread-10255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:40:27.410 [DEBUG] [Thread-10255] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:40:27.410 [DEBUG] [Thread-10255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:40:27.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:40:27.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:40:27.467 [DEBUG] [Thread-10255] [transport.py] [_log()] userauth is OK
2025-11-26T02:40:27.467 [DEBUG] [Thread-10255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:40:27.467 [DEBUG] [Thread-10255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:40:27.467 [DEBUG] [Thread-10255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:40:27.467 [DEBUG] [Thread-10255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:40:27.485 [INFO] [Thread-10255] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:40:27.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:40:27.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:40:28.360 [DEBUG] [Thread-10255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:40:28.360 [DEBUG] [Thread-10255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:40:28.408 [DEBUG] [Thread-10255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:40:28.408 [DEBUG] [Thread-10255] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:40:28.416 [DEBUG] [Thread-10255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:40:28.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:40:28.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:40: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') -> 00000000
2025-11-26T02:40:28.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:40:28.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:40:28.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:40:28.448 [DEBUG] [Thread-10255] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:40:30.360 [DEBUG] [Thread-10257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:31.219 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:41.633 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:45.405 [DEBUG] [Thread-10258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:45.911 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:45.912 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:52.034 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:40:58.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:40:58.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:40: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
2025-11-26T02:40:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 40, 56), 29.97, 12.5, 0.0, 9.76, 20.0, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:40:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:40:56
2025-11-26T02:40:59.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:40:59.375 [DEBUG] [Thread-10259] [transport.py] [_log()] starting thread (client mode): 0x70d42590
2025-11-26T02:40:59.375 [DEBUG] [Thread-10259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:40:59.396 [DEBUG] [Thread-10259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:40:59.396 [INFO] [Thread-10259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:40:59.399 [DEBUG] [Thread-10259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:40:59.399 [DEBUG] [Thread-10259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:40:59.399 [DEBUG] [Thread-10259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:40:59.399 [DEBUG] [Thread-10259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] client lang: <none>
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] server lang: <none>
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] kex follows: False
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] Compression: none
2025-11-26T02:40:59.400 [DEBUG] [Thread-10259] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:40:59.410 [DEBUG] [Thread-10259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:40:59.410 [DEBUG] [Thread-10259] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:40:59.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:40:59.411 [DEBUG] [Thread-10259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:40:59.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:40:59.413 [DEBUG] [Thread-10259] [transport.py] [_log()] userauth is OK
2025-11-26T02:40:59.413 [DEBUG] [Thread-10259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:40:59.413 [DEBUG] [Thread-10259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:40:59.413 [DEBUG] [Thread-10259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:40:59.413 [DEBUG] [Thread-10259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:40:59.439 [INFO] [Thread-10259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:40:59.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:41:00.066 [DEBUG] [Thread-10259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:41:00.066 [DEBUG] [Thread-10259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:41:00.067 [DEBUG] [Thread-10259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:41:00.107 [DEBUG] [Thread-10259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:41:00.108 [DEBUG] [Thread-10259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:41:00.110 [DEBUG] [Thread-10259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:41:00.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:41:00.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:41:00.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:41:00.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:41:00.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:41:00.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:41:00.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:41:00.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:41:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:41:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.028221 -999.00  +21.20   6.38     16   -5.10 1 1 1 1 1     0    0 26.88 25.19 ZNESW 8.7 6.4 108.6 9.2 20.2 -26.4 20.0 -25.9 19.6 -24.5 19.9 -25.6
2025-11-26T02:41:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:41:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:41:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.028221
2025-11-26T02:41:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:41:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:41:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:41:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:41:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:41:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:40:56', tmtdew=29.97, humidity=12.5, cloud=0.0, wind=9.76, temperature=20.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:40:56', seeing=1.11, atlas_timestamp='2025-11-26T00:40:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004750000000001364, -0.05174999999999841, 0.04574999999999996, -0.014000000000001123, 0.013500000000000512, 0.015249999999999986, -0.03200000000000003, 0.0182500000000001, -0.0065000000000008384, -0.036999999999999034, 0.01774999999999949, 0.0065000000000008384, 0.09200000000000053, 0.0702499999999997, -0.03700000000000081, -0.025000000000000355, 0.015249999999999986, -0.0039999999999995595, -0.04800000000000004, 0.021249999999998437, 0.0649999999999995, 0.087749999999998, 0.03625000000000078, 0.016750000000000043, 0.023999999999999133, 0.06550000000000011, 0.006750000000000256, 0.057500000000000995, 0.1460000000000008, 0.05000000000000071, 0.010000000000001563, 0.005000000000000782, 0.036749999999999616], zp_timestamp='2025-11-26T00:39:00')
2025-11-26T02:41:00.134 [DEBUG] [Thread-10259] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:41:00.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:41:00.229 [DEBUG] [Thread-10262] [transport.py] [_log()] starting thread (client mode): 0x70dbc490
2025-11-26T02:41:00.229 [DEBUG] [Thread-10262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:41:00.245 [DEBUG] [Thread-10262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:41:00.245 [INFO] [Thread-10262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:41:00.253 [DEBUG] [Thread-10262] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:41:00.253 [DEBUG] [Thread-10262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:41:00.253 [DEBUG] [Thread-10262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:41:00.253 [DEBUG] [Thread-10262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:41:00.253 [DEBUG] [Thread-10262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:41:00.253 [DEBUG] [Thread-10262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:41:00.253 [DEBUG] [Thread-10262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:41:00.253 [DEBUG] [Thread-10262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:41:00.253 [DEBUG] [Thread-10262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] client lang: <none>
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] server lang: <none>
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] kex follows: False
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] Compression: none
2025-11-26T02:41:00.254 [DEBUG] [Thread-10262] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:41:00.312 [DEBUG] [Thread-10262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:41:00.312 [DEBUG] [Thread-10262] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:41:00.313 [DEBUG] [Thread-10262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:41:00.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:41:00.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:41:00.368 [DEBUG] [Thread-10262] [transport.py] [_log()] userauth is OK
2025-11-26T02:41:00.368 [DEBUG] [Thread-10262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:41:00.368 [DEBUG] [Thread-10262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:41:00.368 [DEBUG] [Thread-10262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:41:00.369 [DEBUG] [Thread-10262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:41:00.389 [INFO] [Thread-10262] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:41:00.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:41:00.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:41:00.443 [DEBUG] [Thread-10264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:01.249 [DEBUG] [Thread-10262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:41:01.249 [DEBUG] [Thread-10262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:41:01.297 [DEBUG] [Thread-10262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:41:01.297 [DEBUG] [Thread-10262] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:41:01.306 [DEBUG] [Thread-10262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:41:01.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:41:01.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:41:01.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:41:01.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:41:01.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:41:01.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:41:01.343 [DEBUG] [Thread-10262] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:41:02.410 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:12.791 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:15.495 [DEBUG] [Thread-10265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:21.969 [DEBUG] [Thread-10266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:23.191 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:30.534 [DEBUG] [Thread-10267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:31.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:41:31.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:41:31.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:41:32.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 41, 28), 29.95, 12.5, 0.0, 9.9, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:41:32.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:41:28
2025-11-26T02:41:32.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:41:32.303 [DEBUG] [Thread-10268] [transport.py] [_log()] starting thread (client mode): 0x70dd2560
2025-11-26T02:41:32.303 [DEBUG] [Thread-10268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:41:32.322 [DEBUG] [Thread-10268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:41:32.322 [INFO] [Thread-10268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] client lang: <none>
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] server lang: <none>
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] kex follows: False
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] Compression: none
2025-11-26T02:41:32.324 [DEBUG] [Thread-10268] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:41:32.332 [DEBUG] [Thread-10268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:41:32.332 [DEBUG] [Thread-10268] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:41:32.332 [DEBUG] [Thread-10268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:41:32.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:41:32.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:41:32.333 [DEBUG] [Thread-10268] [transport.py] [_log()] userauth is OK
2025-11-26T02:41:32.334 [DEBUG] [Thread-10268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:41:32.334 [DEBUG] [Thread-10268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:41:32.334 [DEBUG] [Thread-10268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:41:32.334 [DEBUG] [Thread-10268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:41:32.345 [INFO] [Thread-10268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:41:32.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:41:32.955 [DEBUG] [Thread-10268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:41:32.956 [DEBUG] [Thread-10268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:41:32.956 [DEBUG] [Thread-10268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:41:32.997 [DEBUG] [Thread-10268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:41:32.997 [DEBUG] [Thread-10268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:41:33.001 [DEBUG] [Thread-10268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:41:33.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:41:33.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:41:33.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:41:33.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:41:33.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:41:33.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:41:33.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:41:33.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:41:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:41:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.028568 -999.00  +21.20   6.29     16   -5.10 1 1 1 1 1     0    0 26.65 23.55 ZNESW 5.8 6.3 91.4 10.3 20.2 -25.8 20.0 -25.9 19.6 -24.6 19.9 -25.7
2025-11-26T02:41:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:41:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:41:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.028568
2025-11-26T02:41:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:41:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:41:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:41:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:41:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:41:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:41:28', tmtdew=29.95, humidity=12.5, cloud=0.0, wind=9.9, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:41:28', seeing=0.93, atlas_timestamp='2025-11-26T00:41:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004750000000001364, -0.05174999999999841, 0.04574999999999996, -0.014000000000001123, 0.013500000000000512, 0.015249999999999986, -0.03200000000000003, 0.0182500000000001, -0.0065000000000008384, -0.036999999999999034, 0.01774999999999949, 0.0065000000000008384, 0.09200000000000053, 0.0702499999999997, -0.03700000000000081, -0.025000000000000355, 0.015249999999999986, -0.0039999999999995595, -0.04800000000000004, 0.021249999999998437, 0.0649999999999995, 0.087749999999998, 0.03625000000000078, 0.016750000000000043, 0.023999999999999133, 0.06550000000000011, 0.006750000000000256, 0.057500000000000995, 0.1460000000000008, 0.05000000000000071, 0.010000000000001563, 0.005000000000000782, 0.036749999999999616], zp_timestamp='2025-11-26T00:39:00')
2025-11-26T02:41:33.027 [DEBUG] [Thread-10268] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:41:33.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:41:33.122 [DEBUG] [Thread-10271] [transport.py] [_log()] starting thread (client mode): 0x70d6bfd0
2025-11-26T02:41:33.122 [DEBUG] [Thread-10271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:41:33.136 [DEBUG] [Thread-10271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:41:33.137 [INFO] [Thread-10271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:41:33.144 [DEBUG] [Thread-10271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:41:33.144 [DEBUG] [Thread-10271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:41:33.144 [DEBUG] [Thread-10271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:41:33.144 [DEBUG] [Thread-10271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:41:33.145 [DEBUG] [Thread-10271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:41:33.145 [DEBUG] [Thread-10271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:41:33.145 [DEBUG] [Thread-10271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:41:33.145 [DEBUG] [Thread-10271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:41:33.145 [DEBUG] [Thread-10271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:41:33.145 [DEBUG] [Thread-10271] [transport.py] [_log()] client lang: <none>
2025-11-26T02:41:33.145 [DEBUG] [Thread-10271] [transport.py] [_log()] server lang: <none>
2025-11-26T02:41:33.145 [DEBUG] [Thread-10271] [transport.py] [_log()] kex follows: False
2025-11-26T02:41:33.145 [DEBUG] [Thread-10271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:41:33.146 [DEBUG] [Thread-10271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:41:33.146 [DEBUG] [Thread-10271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:41:33.146 [DEBUG] [Thread-10271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:41:33.146 [DEBUG] [Thread-10271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:41:33.146 [DEBUG] [Thread-10271] [transport.py] [_log()] Compression: none
2025-11-26T02:41:33.146 [DEBUG] [Thread-10271] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:41:33.204 [DEBUG] [Thread-10271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:41:33.204 [DEBUG] [Thread-10271] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:41:33.205 [DEBUG] [Thread-10271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:41:33.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:41:33.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:41:33.260 [DEBUG] [Thread-10271] [transport.py] [_log()] userauth is OK
2025-11-26T02:41:33.260 [DEBUG] [Thread-10271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:41:33.260 [DEBUG] [Thread-10271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:41:33.260 [DEBUG] [Thread-10271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:41:33.261 [DEBUG] [Thread-10271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:41:33.279 [INFO] [Thread-10271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:41:33.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:41:33.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:41:33.642 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:34.116 [DEBUG] [Thread-10271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:41:34.117 [DEBUG] [Thread-10271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:41:34.165 [DEBUG] [Thread-10271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:41:34.165 [DEBUG] [Thread-10271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:41:34.175 [DEBUG] [Thread-10271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:41:34.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:41:34.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:41:34.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:41:34.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:41:34.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:41:34.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:41:34.212 [DEBUG] [Thread-10271] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:41:44.099 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:45.563 [DEBUG] [Thread-10273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:46.115 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:46.116 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:41:54.537 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:00.608 [DEBUG] [Thread-10274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:42:04.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:42:04.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:42:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 41, 28), 30.0, 12.5, 0.0, 9.9, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:42:04.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:41:28
2025-11-26T02:42:04.935 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:05.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:42:05.178 [DEBUG] [Thread-10275] [transport.py] [_log()] starting thread (client mode): 0x70da74c0
2025-11-26T02:42:05.178 [DEBUG] [Thread-10275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:42:05.198 [DEBUG] [Thread-10275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:42:05.198 [INFO] [Thread-10275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:42:05.199 [DEBUG] [Thread-10275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:42:05.199 [DEBUG] [Thread-10275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:42:05.199 [DEBUG] [Thread-10275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] client lang: <none>
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] server lang: <none>
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] kex follows: False
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:42:05.200 [DEBUG] [Thread-10275] [transport.py] [_log()] Compression: none
2025-11-26T02:42:05.201 [DEBUG] [Thread-10275] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:42:05.209 [DEBUG] [Thread-10275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:42:05.210 [DEBUG] [Thread-10275] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:42:05.210 [DEBUG] [Thread-10275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:42:05.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:42:05.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:42:05.212 [DEBUG] [Thread-10275] [transport.py] [_log()] userauth is OK
2025-11-26T02:42:05.212 [DEBUG] [Thread-10275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:42:05.212 [DEBUG] [Thread-10275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:42:05.213 [DEBUG] [Thread-10275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:42:05.213 [DEBUG] [Thread-10275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:42:05.231 [INFO] [Thread-10275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:42:05.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:42:05.775 [DEBUG] [Thread-10275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:42:05.775 [DEBUG] [Thread-10275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:42:05.776 [DEBUG] [Thread-10275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:42:05.816 [DEBUG] [Thread-10275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:42:05.816 [DEBUG] [Thread-10275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:42:05.822 [DEBUG] [Thread-10275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:42:05.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:42:05.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:42:05.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:42:05.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:42:05.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:42:05.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:42:05.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:42:05.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:42:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:42:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.028915 -999.00  +21.10   6.59     16   -5.10 1 1 1 1 1     0    0 26.41 22.65 ZNESW 8.0 6.6 105.6 9.7 20.2 -26.8 19.9 -26.0 19.6 -24.8 19.9 -25.6
2025-11-26T02:42:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:42:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:42:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.028915
2025-11-26T02:42:05.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:42:05.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:42:05.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:42:05.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:42:05.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:42:05.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:41:28', tmtdew=30.0, humidity=12.5, cloud=0.0, wind=9.9, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:42:00', seeing=0.93, atlas_timestamp='2025-11-26T00:41:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004750000000001364, -0.05174999999999841, 0.04574999999999996, -0.014000000000001123, 0.013500000000000512, 0.015249999999999986, -0.03200000000000003, 0.0182500000000001, -0.0065000000000008384, -0.036999999999999034, 0.01774999999999949, 0.0065000000000008384, 0.09200000000000053, 0.0702499999999997, -0.03700000000000081, -0.025000000000000355, 0.015249999999999986, -0.0039999999999995595, -0.04800000000000004, 0.021249999999998437, 0.0649999999999995, 0.087749999999998, 0.03625000000000078, 0.016750000000000043, 0.023999999999999133, 0.06550000000000011, 0.006750000000000256, 0.057500000000000995, 0.1460000000000008, 0.05000000000000071, 0.010000000000001563, 0.005000000000000782, 0.036749999999999616], zp_timestamp='2025-11-26T00:39:00')
2025-11-26T02:42:05.844 [DEBUG] [Thread-10275] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:42:05.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:42:05.942 [DEBUG] [Thread-10278] [transport.py] [_log()] starting thread (client mode): 0x70dbd180
2025-11-26T02:42:05.942 [DEBUG] [Thread-10278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:42:05.957 [DEBUG] [Thread-10278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:42:05.957 [INFO] [Thread-10278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:42:05.965 [DEBUG] [Thread-10278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:42:05.965 [DEBUG] [Thread-10278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:42:05.965 [DEBUG] [Thread-10278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:42:05.965 [DEBUG] [Thread-10278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:42:05.965 [DEBUG] [Thread-10278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:42:05.965 [DEBUG] [Thread-10278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:42:05.966 [DEBUG] [Thread-10278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:42:05.966 [DEBUG] [Thread-10278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:42:05.966 [DEBUG] [Thread-10278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:42:05.966 [DEBUG] [Thread-10278] [transport.py] [_log()] client lang: <none>
2025-11-26T02:42:05.966 [DEBUG] [Thread-10278] [transport.py] [_log()] server lang: <none>
2025-11-26T02:42:05.966 [DEBUG] [Thread-10278] [transport.py] [_log()] kex follows: False
2025-11-26T02:42:05.966 [DEBUG] [Thread-10278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:42:05.966 [DEBUG] [Thread-10278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:42:05.966 [DEBUG] [Thread-10278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:42:05.967 [DEBUG] [Thread-10278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:42:05.967 [DEBUG] [Thread-10278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:42:05.967 [DEBUG] [Thread-10278] [transport.py] [_log()] Compression: none
2025-11-26T02:42:05.967 [DEBUG] [Thread-10278] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:42:06.024 [DEBUG] [Thread-10278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:42:06.024 [DEBUG] [Thread-10278] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:42:06.025 [DEBUG] [Thread-10278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:42:06.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:42:06.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:42:06.084 [DEBUG] [Thread-10278] [transport.py] [_log()] userauth is OK
2025-11-26T02:42:06.084 [DEBUG] [Thread-10278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:42:06.084 [DEBUG] [Thread-10278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:42:06.084 [DEBUG] [Thread-10278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:42:06.084 [DEBUG] [Thread-10278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:42:06.097 [INFO] [Thread-10278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:42:06.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:42:06.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:42:06.934 [DEBUG] [Thread-10278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:42:06.934 [DEBUG] [Thread-10278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:42:06.983 [DEBUG] [Thread-10278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:42:06.983 [DEBUG] [Thread-10278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:42:06.992 [DEBUG] [Thread-10278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:42:07.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:42:07.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:42:07.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:42:07.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:42:07.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:42:07.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:42:07.028 [DEBUG] [Thread-10278] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:42:15.346 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:15.640 [DEBUG] [Thread-10280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:22.020 [DEBUG] [Thread-10281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:25.737 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:30.688 [DEBUG] [Thread-10282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:36.131 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:37.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:42:37.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:42:37.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:42:37.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 42, 32), 29.91, 12.59, 0.0, 9.78, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:42:37.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:42:32
2025-11-26T02:42:37.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:42:37.951 [DEBUG] [Thread-10283] [transport.py] [_log()] starting thread (client mode): 0x70dfaf20
2025-11-26T02:42:37.951 [DEBUG] [Thread-10283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:42:37.965 [DEBUG] [Thread-10283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:42:37.965 [INFO] [Thread-10283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] client lang: <none>
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] server lang: <none>
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] kex follows: False
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:42:37.969 [DEBUG] [Thread-10283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:42:37.970 [DEBUG] [Thread-10283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:42:37.970 [DEBUG] [Thread-10283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:42:37.970 [DEBUG] [Thread-10283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:42:37.970 [DEBUG] [Thread-10283] [transport.py] [_log()] Compression: none
2025-11-26T02:42:37.970 [DEBUG] [Thread-10283] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:42:37.988 [DEBUG] [Thread-10283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:42:37.989 [DEBUG] [Thread-10283] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:42:37.990 [DEBUG] [Thread-10283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:42:37.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:42:37.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:42:37.992 [DEBUG] [Thread-10283] [transport.py] [_log()] userauth is OK
2025-11-26T02:42:37.992 [DEBUG] [Thread-10283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:42:37.992 [DEBUG] [Thread-10283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:42:37.992 [DEBUG] [Thread-10283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:42:37.992 [DEBUG] [Thread-10283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:42:38.008 [INFO] [Thread-10283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:42:38.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:42:38.599 [DEBUG] [Thread-10283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:42:38.600 [DEBUG] [Thread-10283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:42:38.600 [DEBUG] [Thread-10283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:42:38.640 [DEBUG] [Thread-10283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:42:38.641 [DEBUG] [Thread-10283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:42:38.643 [DEBUG] [Thread-10283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:42:38.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:42:38.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:42:38.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:42:38.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:42:38.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:42:38.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:42:38.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:42:38.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:42:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:42:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.029262 -999.00  +21.10   7.65     16   -5.10 1 1 1 1 1     0    0 26.69 22.66 ZNESW 7.7 7.7 76.1 9.1 20.2 -26.4 20.1 -26.0 19.6 -24.4 19.9 -25.6
2025-11-26T02:42:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:42:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:42:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.029262
2025-11-26T02:42:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:42:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:42:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:42:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:42:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:42:38.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:42:32', tmtdew=29.91, humidity=12.59, cloud=0.0, wind=9.78, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:42:32', seeing=0.94, atlas_timestamp='2025-11-26T00:42:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004750000000001364, -0.05174999999999841, 0.04574999999999996, -0.014000000000001123, 0.013500000000000512, 0.015249999999999986, -0.03200000000000003, 0.0182500000000001, -0.0065000000000008384, -0.036999999999999034, 0.01774999999999949, 0.0065000000000008384, 0.09200000000000053, 0.0702499999999997, -0.03700000000000081, -0.025000000000000355, 0.015249999999999986, -0.0039999999999995595, -0.04800000000000004, 0.021249999999998437, 0.0649999999999995, 0.087749999999998, 0.03625000000000078, 0.016750000000000043, 0.023999999999999133, 0.06550000000000011, 0.006750000000000256, 0.057500000000000995, 0.1460000000000008, 0.05000000000000071, 0.010000000000001563, 0.005000000000000782, 0.036749999999999616], zp_timestamp='2025-11-26T00:39:00')
2025-11-26T02:42:38.672 [DEBUG] [Thread-10283] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:42:38.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:42:38.767 [DEBUG] [Thread-10286] [transport.py] [_log()] starting thread (client mode): 0x70d7dff0
2025-11-26T02:42:38.767 [DEBUG] [Thread-10286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:42:38.785 [DEBUG] [Thread-10286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:42:38.785 [INFO] [Thread-10286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] client lang: <none>
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] server lang: <none>
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] kex follows: False
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] Compression: none
2025-11-26T02:42:38.793 [DEBUG] [Thread-10286] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:42:38.853 [DEBUG] [Thread-10286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:42:38.853 [DEBUG] [Thread-10286] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:42:38.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:42:38.854 [DEBUG] [Thread-10286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:42:38.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:42:38.912 [DEBUG] [Thread-10286] [transport.py] [_log()] userauth is OK
2025-11-26T02:42:38.913 [DEBUG] [Thread-10286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:42:38.913 [DEBUG] [Thread-10286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:42:38.913 [DEBUG] [Thread-10286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:42:38.913 [DEBUG] [Thread-10286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:42:38.934 [INFO] [Thread-10286] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:42:38.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:42:38.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:42:39.801 [DEBUG] [Thread-10286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:42:39.801 [DEBUG] [Thread-10286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:42:39.849 [DEBUG] [Thread-10286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:42:39.849 [DEBUG] [Thread-10286] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:42:39.858 [DEBUG] [Thread-10286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:42:39.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:42:39.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:42:39.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:42:39.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:42:39.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:42:39.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:42:39.901 [DEBUG] [Thread-10286] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:42:45.726 [DEBUG] [Thread-10288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:46.319 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:46.320 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:46.531 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:42:56.963 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:00.777 [DEBUG] [Thread-10289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:07.363 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:09.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:43:09.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:43:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:43:10.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 43, 4), 29.95, 12.55, 0.0, 9.67, 19.9, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:43:10.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:43:04
2025-11-26T02:43:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:43:10.837 [DEBUG] [Thread-10290] [transport.py] [_log()] starting thread (client mode): 0x70dfb880
2025-11-26T02:43:10.837 [DEBUG] [Thread-10290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:43:10.859 [DEBUG] [Thread-10290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:43:10.859 [INFO] [Thread-10290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] client lang: <none>
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] server lang: <none>
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] kex follows: False
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] Compression: none
2025-11-26T02:43:10.862 [DEBUG] [Thread-10290] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:43:10.880 [DEBUG] [Thread-10290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:43:10.880 [DEBUG] [Thread-10290] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:43:10.881 [DEBUG] [Thread-10290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:43:10.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:43:10.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:43:10.883 [DEBUG] [Thread-10290] [transport.py] [_log()] userauth is OK
2025-11-26T02:43:10.883 [DEBUG] [Thread-10290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:43:10.883 [DEBUG] [Thread-10290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:43:10.884 [DEBUG] [Thread-10290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:43:10.884 [DEBUG] [Thread-10290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:43:10.901 [INFO] [Thread-10290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:43:10.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:43:11.499 [DEBUG] [Thread-10290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:43:11.499 [DEBUG] [Thread-10290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:43:11.499 [DEBUG] [Thread-10290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:43:11.540 [DEBUG] [Thread-10290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:43:11.541 [DEBUG] [Thread-10290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:43:11.544 [DEBUG] [Thread-10290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:43:11.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:43:11.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:43:11.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:43:11.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:43:11.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:43:11.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:43:11.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:43:11.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:43:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:43:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.029262 -999.00  +21.10   7.65     16   -5.10 1 1 1 1 1     0    0 26.69 22.66 ZNESW 7.7 7.7 76.1 9.1 20.2 -26.4 20.1 -26.0 19.6 -24.4 19.9 -25.6
2025-11-26T02:43:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:43:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:43:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.029262
2025-11-26T02:43:11.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:43:11.568 [DEBUG] [Thread-10290] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:43:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:43:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:43:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:43:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:43:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:43:04', tmtdew=29.95, humidity=12.55, cloud=0.0, wind=9.67, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:43:04', seeing=0.96, atlas_timestamp='2025-11-26T00:42:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004750000000001364, -0.05174999999999841, 0.04574999999999996, -0.014000000000001123, 0.013500000000000512, 0.015249999999999986, -0.03200000000000003, 0.0182500000000001, -0.0065000000000008384, -0.036999999999999034, 0.01774999999999949, 0.0065000000000008384, 0.09200000000000053, 0.0702499999999997, -0.03700000000000081, -0.025000000000000355, 0.015249999999999986, -0.0039999999999995595, -0.04800000000000004, 0.021249999999998437, 0.0649999999999995, 0.087749999999998, 0.03625000000000078, 0.016750000000000043, 0.023999999999999133, 0.06550000000000011, 0.006750000000000256, 0.057500000000000995, 0.1460000000000008, 0.05000000000000071, 0.010000000000001563, 0.005000000000000782, 0.036749999999999616], zp_timestamp='2025-11-26T00:39:00')
2025-11-26T02:43:11.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:43:11.665 [DEBUG] [Thread-10293] [transport.py] [_log()] starting thread (client mode): 0x70d77970
2025-11-26T02:43:11.665 [DEBUG] [Thread-10293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:43:11.679 [DEBUG] [Thread-10293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:43:11.680 [INFO] [Thread-10293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:43:11.687 [DEBUG] [Thread-10293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] client lang: <none>
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] server lang: <none>
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] kex follows: False
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] Compression: none
2025-11-26T02:43:11.688 [DEBUG] [Thread-10293] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:43:11.745 [DEBUG] [Thread-10293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:43:11.746 [DEBUG] [Thread-10293] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:43:11.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:43:11.747 [DEBUG] [Thread-10293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:43:11.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:43:11.801 [DEBUG] [Thread-10293] [transport.py] [_log()] userauth is OK
2025-11-26T02:43:11.801 [DEBUG] [Thread-10293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:43:11.801 [DEBUG] [Thread-10293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:43:11.801 [DEBUG] [Thread-10293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:43:11.801 [DEBUG] [Thread-10293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:43:11.820 [INFO] [Thread-10293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:43:11.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:43:11.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:43:12.686 [DEBUG] [Thread-10293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:43:12.686 [DEBUG] [Thread-10293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:43:12.734 [DEBUG] [Thread-10293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:43:12.734 [DEBUG] [Thread-10293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:43:12.743 [DEBUG] [Thread-10293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:43:12.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:43:12.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:43:12.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:43:12.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:43:12.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:43:12.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:43:12.775 [DEBUG] [Thread-10293] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:43:15.815 [DEBUG] [Thread-10295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:17.757 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:22.107 [DEBUG] [Thread-10296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:28.173 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:30.867 [DEBUG] [Thread-10297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:38.586 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:42.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:43:42.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:43:42.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:43:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 43, 36), 30.12, 12.08, 0.0, 9.99, 20.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:43:43.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:43:36
2025-11-26T02:43:43.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:43:43.708 [DEBUG] [Thread-10298] [transport.py] [_log()] starting thread (client mode): 0x6e315720
2025-11-26T02:43:43.708 [DEBUG] [Thread-10298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:43:43.728 [DEBUG] [Thread-10298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:43:43.728 [INFO] [Thread-10298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:43:43.732 [DEBUG] [Thread-10298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:43:43.732 [DEBUG] [Thread-10298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:43:43.732 [DEBUG] [Thread-10298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:43:43.732 [DEBUG] [Thread-10298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:43:43.732 [DEBUG] [Thread-10298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:43:43.732 [DEBUG] [Thread-10298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:43:43.732 [DEBUG] [Thread-10298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:43:43.732 [DEBUG] [Thread-10298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:43:43.732 [DEBUG] [Thread-10298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] client lang: <none>
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] server lang: <none>
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] kex follows: False
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] Compression: none
2025-11-26T02:43:43.733 [DEBUG] [Thread-10298] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:43:43.751 [DEBUG] [Thread-10298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:43:43.752 [DEBUG] [Thread-10298] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:43:43.752 [DEBUG] [Thread-10298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:43:43.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:43:43.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:43:43.754 [DEBUG] [Thread-10298] [transport.py] [_log()] userauth is OK
2025-11-26T02:43:43.754 [DEBUG] [Thread-10298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:43:43.755 [DEBUG] [Thread-10298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:43:43.755 [DEBUG] [Thread-10298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:43:43.755 [DEBUG] [Thread-10298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:43:43.779 [INFO] [Thread-10298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:43:43.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:43:44.419 [DEBUG] [Thread-10298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:43:44.419 [DEBUG] [Thread-10298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:43:44.419 [DEBUG] [Thread-10298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:43:44.461 [DEBUG] [Thread-10298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:43:44.461 [DEBUG] [Thread-10298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:43:44.464 [DEBUG] [Thread-10298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:43:44.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:43:44.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:43:44.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:43:44.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:43:44.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:43:44.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:43:44.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:43:44.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:43:44.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:43:44.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.029957 -999.00  +21.10   5.05     16   -5.10 1 1 1 1 1     0    0 27.15 21.60 ZNESW 8.6 5.0 110.8 9.5 20.2 -26.2 20.0 -26.1 19.6 -24.5 19.9 -25.7
2025-11-26T02:43:44.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:43:44.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:43:44.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.029957
2025-11-26T02:43:44.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:43:44.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:43:44.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:43:44.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:43:44.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:43:44.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:43:36', tmtdew=30.12, humidity=12.08, cloud=0.0, wind=9.99, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:43:36', seeing=1.15, atlas_timestamp='2025-11-26T00:43:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004750000000001364, -0.05174999999999841, 0.04574999999999996, -0.014000000000001123, 0.013500000000000512, 0.015249999999999986, -0.03200000000000003, 0.0182500000000001, -0.0065000000000008384, -0.036999999999999034, 0.01774999999999949, 0.0065000000000008384, 0.09200000000000053, 0.0702499999999997, -0.03700000000000081, -0.025000000000000355, 0.015249999999999986, -0.0039999999999995595, -0.04800000000000004, 0.021249999999998437, 0.0649999999999995, 0.087749999999998, 0.03625000000000078, 0.016750000000000043, 0.023999999999999133, 0.06550000000000011, 0.006750000000000256, 0.057500000000000995, 0.1460000000000008, 0.05000000000000071, 0.010000000000001563, 0.005000000000000782, 0.036749999999999616], zp_timestamp='2025-11-26T00:39:00')
2025-11-26T02:43:44.491 [DEBUG] [Thread-10298] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:43:44.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:43:44.589 [DEBUG] [Thread-10301] [transport.py] [_log()] starting thread (client mode): 0x6e315c30
2025-11-26T02:43:44.589 [DEBUG] [Thread-10301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:43:44.605 [DEBUG] [Thread-10301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:43:44.605 [INFO] [Thread-10301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:43:44.613 [DEBUG] [Thread-10301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:43:44.613 [DEBUG] [Thread-10301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:43:44.613 [DEBUG] [Thread-10301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:43:44.613 [DEBUG] [Thread-10301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] client lang: <none>
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] server lang: <none>
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] kex follows: False
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:43:44.614 [DEBUG] [Thread-10301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:43:44.615 [DEBUG] [Thread-10301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:43:44.615 [DEBUG] [Thread-10301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:43:44.615 [DEBUG] [Thread-10301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:43:44.615 [DEBUG] [Thread-10301] [transport.py] [_log()] Compression: none
2025-11-26T02:43:44.615 [DEBUG] [Thread-10301] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:43:44.670 [DEBUG] [Thread-10301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:43:44.670 [DEBUG] [Thread-10301] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:43:44.671 [DEBUG] [Thread-10301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:43:44.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:43:44.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:43:44.729 [DEBUG] [Thread-10301] [transport.py] [_log()] userauth is OK
2025-11-26T02:43:44.729 [DEBUG] [Thread-10301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:43:44.729 [DEBUG] [Thread-10301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:43:44.729 [DEBUG] [Thread-10301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:43:44.729 [DEBUG] [Thread-10301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:43:44.748 [INFO] [Thread-10301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:43:44.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:43:44.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:43:45.567 [DEBUG] [Thread-10301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:43:45.567 [DEBUG] [Thread-10301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:43:45.615 [DEBUG] [Thread-10301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:43:45.615 [DEBUG] [Thread-10301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:43:45.623 [DEBUG] [Thread-10301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:43:45.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:43: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')
2025-11-26T02:43:45.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:43:45.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:43:45.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:43:45.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:43:45.657 [DEBUG] [Thread-10301] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:43:45.894 [DEBUG] [Thread-10303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:46.523 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:46.524 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:49.004 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:43:59.444 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:00.951 [DEBUG] [Thread-10304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:09.837 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:15.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:44:15.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:44:15.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:44:15.983 [DEBUG] [Thread-10305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:16.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 44, 8), 30.13, 12.06, 0.0, 9.65, 20.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:44:16.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:44:08
2025-11-26T02:44:16.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:44:16.609 [DEBUG] [Thread-10306] [transport.py] [_log()] starting thread (client mode): 0x70d757b0
2025-11-26T02:44:16.609 [DEBUG] [Thread-10306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:44:16.629 [DEBUG] [Thread-10306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:44:16.629 [INFO] [Thread-10306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] client lang: <none>
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] server lang: <none>
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] kex follows: False
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] Compression: none
2025-11-26T02:44:16.633 [DEBUG] [Thread-10306] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:44:16.653 [DEBUG] [Thread-10306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:44:16.653 [DEBUG] [Thread-10306] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:44:16.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:44:16.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:44:16.655 [DEBUG] [Thread-10306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:44:16.655 [DEBUG] [Thread-10306] [transport.py] [_log()] userauth is OK
2025-11-26T02:44:16.655 [DEBUG] [Thread-10306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:44:16.655 [DEBUG] [Thread-10306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:44:16.656 [DEBUG] [Thread-10306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:44:16.656 [DEBUG] [Thread-10306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:44:16.680 [INFO] [Thread-10306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:44:16.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:44:17.351 [DEBUG] [Thread-10306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:44:17.351 [DEBUG] [Thread-10306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:44:17.351 [DEBUG] [Thread-10306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:44:17.393 [DEBUG] [Thread-10306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:44:17.393 [DEBUG] [Thread-10306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:44:17.396 [DEBUG] [Thread-10306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:44:17.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:44:17.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:44:17.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:44:17.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:44:17.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:44:17.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:44:17.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:44:17.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:44:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:44:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.030304 -999.00  +21.10   9.01     16   -5.10 1 1 1 1 1     0    0 27.12 21.09 ZNESW 8.6 9.0 111.0 10.9 20.2 -26.5 20.0 -26.2 19.7 -24.7 19.9 -25.6
2025-11-26T02:44:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:44:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:44:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.030304
2025-11-26T02:44:17.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:44:17.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:44:17.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:44:17.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:44:17.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:44:17.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:44:08', tmtdew=30.13, humidity=12.06, cloud=0.0, wind=9.65, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:44:08', seeing=1.26, atlas_timestamp='2025-11-26T00:43:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004750000000001364, -0.05174999999999841, 0.04574999999999996, -0.014000000000001123, 0.013500000000000512, 0.015249999999999986, -0.03200000000000003, 0.0182500000000001, -0.0065000000000008384, -0.036999999999999034, 0.01774999999999949, 0.0065000000000008384, 0.09200000000000053, 0.0702499999999997, -0.03700000000000081, -0.025000000000000355, 0.015249999999999986, -0.0039999999999995595, -0.04800000000000004, 0.021249999999998437, 0.0649999999999995, 0.087749999999998, 0.03625000000000078, 0.016750000000000043, 0.023999999999999133, 0.06550000000000011, 0.006750000000000256, 0.057500000000000995, 0.1460000000000008, 0.05000000000000071, 0.010000000000001563, 0.005000000000000782, 0.036749999999999616], zp_timestamp='2025-11-26T00:41:00')
2025-11-26T02:44:17.423 [DEBUG] [Thread-10306] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:44:17.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:44:17.517 [DEBUG] [Thread-10309] [transport.py] [_log()] starting thread (client mode): 0x70d6b7f0
2025-11-26T02:44:17.517 [DEBUG] [Thread-10309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:44:17.532 [DEBUG] [Thread-10309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:44:17.533 [INFO] [Thread-10309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:44:17.540 [DEBUG] [Thread-10309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:44:17.540 [DEBUG] [Thread-10309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:44:17.540 [DEBUG] [Thread-10309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] client lang: <none>
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] server lang: <none>
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] kex follows: False
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] Compression: none
2025-11-26T02:44:17.541 [DEBUG] [Thread-10309] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:44:17.597 [DEBUG] [Thread-10309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:44:17.597 [DEBUG] [Thread-10309] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:44:17.598 [DEBUG] [Thread-10309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:44:17.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:44:17.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:44:17.654 [DEBUG] [Thread-10309] [transport.py] [_log()] userauth is OK
2025-11-26T02:44:17.654 [DEBUG] [Thread-10309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:44:17.654 [DEBUG] [Thread-10309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:44:17.654 [DEBUG] [Thread-10309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:44:17.654 [DEBUG] [Thread-10309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:44:17.673 [INFO] [Thread-10309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:44:17.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:44:17.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:44:18.472 [DEBUG] [Thread-10309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:44:18.473 [DEBUG] [Thread-10309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:44:18.521 [DEBUG] [Thread-10309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:44:18.521 [DEBUG] [Thread-10309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:44:18.530 [DEBUG] [Thread-10309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:44:18.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:44:18.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:44:18.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:44:18.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:44:18.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:44:18.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:44:18.568 [DEBUG] [Thread-10309] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:44:20.286 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:22.196 [DEBUG] [Thread-10311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:30.717 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:31.017 [DEBUG] [Thread-10312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:41.111 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:46.067 [DEBUG] [Thread-10313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:46.725 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:46.726 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:44:48.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:44:48.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:44:48.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:44:49.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 44, 40), 30.09, 12.11, 0.0, 9.41, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:44:49.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:44:40
2025-11-26T02:44:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:44:49.535 [DEBUG] [Thread-10314] [transport.py] [_log()] starting thread (client mode): 0x70d7fa30
2025-11-26T02:44:49.536 [DEBUG] [Thread-10314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:44:49.555 [DEBUG] [Thread-10314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:44:49.555 [INFO] [Thread-10314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:44:49.558 [DEBUG] [Thread-10314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] client lang: <none>
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] server lang: <none>
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] kex follows: False
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] Compression: none
2025-11-26T02:44:49.559 [DEBUG] [Thread-10314] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:44:49.576 [DEBUG] [Thread-10314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:44:49.576 [DEBUG] [Thread-10314] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:44:49.576 [DEBUG] [Thread-10314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:44:49.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:44:49.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:44:49.577 [DEBUG] [Thread-10314] [transport.py] [_log()] userauth is OK
2025-11-26T02:44:49.577 [DEBUG] [Thread-10314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:44:49.577 [DEBUG] [Thread-10314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:44:49.577 [DEBUG] [Thread-10314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:44:49.577 [DEBUG] [Thread-10314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:44:49.585 [INFO] [Thread-10314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:44:49.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:44:50.226 [DEBUG] [Thread-10314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:44:50.226 [DEBUG] [Thread-10314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:44:50.226 [DEBUG] [Thread-10314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:44:50.267 [DEBUG] [Thread-10314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:44:50.267 [DEBUG] [Thread-10314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:44:50.269 [DEBUG] [Thread-10314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:44:50.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:44:50.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:44:50.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:44:50.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:44:50.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:44:50.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:44:50.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.030651 -999.00  +21.10   5.91     16   -5.10 1 1 1 1 1     0    0 26.26 20.02 ZNESW 6.6 5.9 104.3 11.4 20.2 -26.3 20.0 -26.0 19.6 -24.4 19.9 -25.5
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.030651
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:44:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:44:50.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:44:40', tmtdew=30.09, humidity=12.11, cloud=0.0, wind=9.41, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:44:40', seeing=1.33, atlas_timestamp='2025-11-26T00:44:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004750000000001364, -0.05174999999999841, 0.04574999999999996, -0.014000000000001123, 0.013500000000000512, 0.015249999999999986, -0.03200000000000003, 0.0182500000000001, -0.0065000000000008384, -0.036999999999999034, 0.01774999999999949, 0.0065000000000008384, 0.09200000000000053, 0.0702499999999997, -0.03700000000000081, -0.025000000000000355, 0.015249999999999986, -0.0039999999999995595, -0.04800000000000004, 0.021249999999998437, 0.0649999999999995, 0.087749999999998, 0.03625000000000078, 0.016750000000000043, 0.023999999999999133, 0.06550000000000011, 0.006750000000000256, 0.057500000000000995, 0.1460000000000008, 0.05000000000000071, 0.010000000000001563, 0.005000000000000782, 0.036749999999999616], zp_timestamp='2025-11-26T00:41:00')
2025-11-26T02:44:50.289 [DEBUG] [Thread-10314] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:44:50.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:44:51.610 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:01.099 [DEBUG] [Thread-10317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:02.075 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:12.503 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:16.162 [DEBUG] [Thread-10318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:22.271 [DEBUG] [Thread-10319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:22.876 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:31.194 [DEBUG] [Thread-10320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:33.275 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:43.684 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:46.235 [DEBUG] [Thread-10321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:46.928 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:46.929 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:45:54.085 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:01.268 [DEBUG] [Thread-10322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:04.485 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:14.881 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:16.301 [DEBUG] [Thread-10323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:22.350 [DEBUG] [Thread-10324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:25.276 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:31.338 [DEBUG] [Thread-10325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:35.708 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:46.109 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:46.369 [DEBUG] [Thread-10326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:47.131 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:47.132 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:46:56.525 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:01.407 [DEBUG] [Thread-10327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:02.349 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T02:47:06.939 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:16.440 [DEBUG] [Thread-10328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:17.354 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:22.426 [DEBUG] [Thread-10329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:27.761 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:31.472 [DEBUG] [Thread-10330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:47:32.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:47:32.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:47:33.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 47, 20), 29.94, 12.18, 0.0, 9.42, 19.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:47:33.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:47:20
2025-11-26T02:47:33.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:47:33.326 [DEBUG] [Thread-10331] [transport.py] [_log()] starting thread (client mode): 0x6e317460
2025-11-26T02:47:33.326 [DEBUG] [Thread-10331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:47:33.345 [DEBUG] [Thread-10331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:47:33.346 [INFO] [Thread-10331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] client lang: <none>
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] server lang: <none>
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] kex follows: False
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] Compression: none
2025-11-26T02:47:33.349 [DEBUG] [Thread-10331] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:47:33.368 [DEBUG] [Thread-10331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:47:33.368 [DEBUG] [Thread-10331] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:47:33.369 [DEBUG] [Thread-10331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:47:33.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:47:33.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:47:33.371 [DEBUG] [Thread-10331] [transport.py] [_log()] userauth is OK
2025-11-26T02:47:33.371 [DEBUG] [Thread-10331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:47:33.372 [DEBUG] [Thread-10331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:47:33.372 [DEBUG] [Thread-10331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:47:33.372 [DEBUG] [Thread-10331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:47:33.395 [INFO] [Thread-10331] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:47:33.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:47:34.183 [DEBUG] [Thread-10331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:47:34.183 [DEBUG] [Thread-10331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:47:34.184 [DEBUG] [Thread-10331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:47:34.225 [DEBUG] [Thread-10331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:47:34.225 [DEBUG] [Thread-10331] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:47:34.229 [DEBUG] [Thread-10331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:47:34.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:47:34.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:47:34.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:47:34.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:47:34.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:47:34.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:47:34.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:47:34.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:47:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:47:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.032735 -999.00  +21.10   8.11     16   -5.20 1 1 1 1 1     0    0 26.84 8.34 ZNESW 7.9 8.1 107.2 11.6 20.2 -26.4 20.0 -26.0 19.7 -24.8 19.9 -25.7
2025-11-26T02:47:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:47:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:47:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.032735
2025-11-26T02:47:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:47:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:47:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:47:34.254 [DEBUG] [Thread-10331] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:47:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:47:34.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:47:34.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:47:20', tmtdew=29.94, humidity=12.18, cloud=0.0, wind=9.42, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:47:20', seeing=1.18, atlas_timestamp='2025-11-26T00:47:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:46:00')
2025-11-26T02:47:34.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:47:34.350 [DEBUG] [Thread-10334] [transport.py] [_log()] starting thread (client mode): 0x6e315cf0
2025-11-26T02:47:34.350 [DEBUG] [Thread-10334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:47:34.365 [DEBUG] [Thread-10334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:47:34.365 [INFO] [Thread-10334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:47:34.373 [DEBUG] [Thread-10334] [transport.py] [_log()] client lang: <none>
2025-11-26T02:47:34.374 [DEBUG] [Thread-10334] [transport.py] [_log()] server lang: <none>
2025-11-26T02:47:34.374 [DEBUG] [Thread-10334] [transport.py] [_log()] kex follows: False
2025-11-26T02:47:34.374 [DEBUG] [Thread-10334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:47:34.374 [DEBUG] [Thread-10334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:47:34.374 [DEBUG] [Thread-10334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:47:34.374 [DEBUG] [Thread-10334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:47:34.374 [DEBUG] [Thread-10334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:47:34.374 [DEBUG] [Thread-10334] [transport.py] [_log()] Compression: none
2025-11-26T02:47:34.374 [DEBUG] [Thread-10334] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:47:34.431 [DEBUG] [Thread-10334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:47:34.432 [DEBUG] [Thread-10334] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:47:34.433 [DEBUG] [Thread-10334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:47:34.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:47:34.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:47:34.489 [DEBUG] [Thread-10334] [transport.py] [_log()] userauth is OK
2025-11-26T02:47:34.489 [DEBUG] [Thread-10334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:47:34.489 [DEBUG] [Thread-10334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:47:34.489 [DEBUG] [Thread-10334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:47:34.490 [DEBUG] [Thread-10334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:47:34.515 [INFO] [Thread-10334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:47:34.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:47:34.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:47:35.336 [DEBUG] [Thread-10334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:47:35.336 [DEBUG] [Thread-10334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:47:35.385 [DEBUG] [Thread-10334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:47:35.385 [DEBUG] [Thread-10334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:47:35.395 [DEBUG] [Thread-10334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:47:35.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:47:35.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:47:35.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:47:35.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:47:35.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:47:35.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:47:35.433 [DEBUG] [Thread-10334] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:47:38.213 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:46.508 [DEBUG] [Thread-10336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:47.333 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:47.334 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:48.631 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:47:59.080 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:01.563 [DEBUG] [Thread-10337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:05.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:48:05.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:48:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:48:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 47, 52), 29.94, 12.18, 0.0, 9.65, 19.85, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:48:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:47:52
2025-11-26T02:48:06.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:48:06.356 [DEBUG] [Thread-10338] [transport.py] [_log()] starting thread (client mode): 0x6e315570
2025-11-26T02:48:06.356 [DEBUG] [Thread-10338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:48:06.376 [DEBUG] [Thread-10338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:48:06.376 [INFO] [Thread-10338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:48:06.379 [DEBUG] [Thread-10338] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] client lang: <none>
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] server lang: <none>
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] kex follows: False
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:48:06.380 [DEBUG] [Thread-10338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:48:06.381 [DEBUG] [Thread-10338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:48:06.381 [DEBUG] [Thread-10338] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:48:06.381 [DEBUG] [Thread-10338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:48:06.381 [DEBUG] [Thread-10338] [transport.py] [_log()] Compression: none
2025-11-26T02:48:06.381 [DEBUG] [Thread-10338] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:48:06.391 [DEBUG] [Thread-10338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:48:06.392 [DEBUG] [Thread-10338] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:48:06.392 [DEBUG] [Thread-10338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:48:06.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:48:06.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:48:06.394 [DEBUG] [Thread-10338] [transport.py] [_log()] userauth is OK
2025-11-26T02:48:06.394 [DEBUG] [Thread-10338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:48:06.395 [DEBUG] [Thread-10338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:48:06.395 [DEBUG] [Thread-10338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:48:06.395 [DEBUG] [Thread-10338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:48:06.420 [INFO] [Thread-10338] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:48:06.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:48:07.056 [DEBUG] [Thread-10338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:48:07.057 [DEBUG] [Thread-10338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:48:07.057 [DEBUG] [Thread-10338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:48:07.098 [DEBUG] [Thread-10338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:48:07.098 [DEBUG] [Thread-10338] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:48:07.101 [DEBUG] [Thread-10338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:48:07.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:48:07.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:48:07.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:48:07.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:48:07.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:48:07.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:48:07.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:48:07.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:48:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:48:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.033082 -999.00  +21.10   6.74     16   -5.10 1 1 1 1 1     0    0 26.38 6.65 ZNESW 6.2 6.7 93.6 11.1 20.2 -26.6 20.0 -26.1 19.6 -24.7 20.0 -25.7
2025-11-26T02:48:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:48:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:48:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.033082
2025-11-26T02:48:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:48:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:48:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:48:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:48:07.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:48:07.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:47:52', tmtdew=29.94, humidity=12.18, cloud=0.0, wind=9.65, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:47:52', seeing=1.04, atlas_timestamp='2025-11-26T00:47:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:46:00')
2025-11-26T02:48:07.127 [DEBUG] [Thread-10338] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:48:07.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:48:07.221 [DEBUG] [Thread-10341] [transport.py] [_log()] starting thread (client mode): 0x70d7e5c0
2025-11-26T02:48:07.221 [DEBUG] [Thread-10341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:48:07.239 [DEBUG] [Thread-10341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:48:07.240 [INFO] [Thread-10341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:48:07.247 [DEBUG] [Thread-10341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:48:07.247 [DEBUG] [Thread-10341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:48:07.247 [DEBUG] [Thread-10341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:48:07.247 [DEBUG] [Thread-10341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:48:07.247 [DEBUG] [Thread-10341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] client lang: <none>
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] server lang: <none>
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] kex follows: False
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] Compression: none
2025-11-26T02:48:07.248 [DEBUG] [Thread-10341] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:48:07.305 [DEBUG] [Thread-10341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:48:07.305 [DEBUG] [Thread-10341] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:48:07.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:48:07.307 [DEBUG] [Thread-10341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:48:07.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:48:07.361 [DEBUG] [Thread-10341] [transport.py] [_log()] userauth is OK
2025-11-26T02:48:07.361 [DEBUG] [Thread-10341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:48:07.361 [DEBUG] [Thread-10341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:48:07.362 [DEBUG] [Thread-10341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:48:07.362 [DEBUG] [Thread-10341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:48:07.381 [INFO] [Thread-10341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:48:07.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:48:07.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:48:08.245 [DEBUG] [Thread-10341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:48:08.245 [DEBUG] [Thread-10341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:48:08.294 [DEBUG] [Thread-10341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:48:08.294 [DEBUG] [Thread-10341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:48:08.303 [DEBUG] [Thread-10341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:48:08.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:48:08.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:48: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
2025-11-26T02:48:08.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:48:08.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:48:08.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:48:08.340 [DEBUG] [Thread-10341] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:48:09.481 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:16.600 [DEBUG] [Thread-10343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:19.915 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:22.498 [DEBUG] [Thread-10344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:30.346 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:31.648 [DEBUG] [Thread-10345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:38.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:48:38.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:48:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:48:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 48, 24), 29.97, 12.13, 0.0, 9.83, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:48:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:48:24
2025-11-26T02:48:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:48:39.307 [DEBUG] [Thread-10346] [transport.py] [_log()] starting thread (client mode): 0x70da6c50
2025-11-26T02:48:39.307 [DEBUG] [Thread-10346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:48:39.329 [DEBUG] [Thread-10346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:48:39.329 [INFO] [Thread-10346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:48:39.332 [DEBUG] [Thread-10346] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:48:39.332 [DEBUG] [Thread-10346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] client lang: <none>
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] server lang: <none>
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] kex follows: False
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] Compression: none
2025-11-26T02:48:39.333 [DEBUG] [Thread-10346] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:48:39.351 [DEBUG] [Thread-10346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:48:39.351 [DEBUG] [Thread-10346] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:48:39.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:48:39.353 [DEBUG] [Thread-10346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:48:39.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:48:39.355 [DEBUG] [Thread-10346] [transport.py] [_log()] userauth is OK
2025-11-26T02:48:39.355 [DEBUG] [Thread-10346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:48:39.355 [DEBUG] [Thread-10346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:48:39.355 [DEBUG] [Thread-10346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:48:39.355 [DEBUG] [Thread-10346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:48:39.378 [INFO] [Thread-10346] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:48:39.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:48:40.034 [DEBUG] [Thread-10346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:48:40.035 [DEBUG] [Thread-10346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:48:40.035 [DEBUG] [Thread-10346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:48:40.075 [DEBUG] [Thread-10346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:48:40.076 [DEBUG] [Thread-10346] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:48:40.079 [DEBUG] [Thread-10346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:48:40.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:48:40.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:48:40.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:48:40.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:48:40.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:48:40.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:48:40.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:48:40.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:48:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:48:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.033429 -999.00  +21.10   5.62     16   -5.20 1 1 1 1 1     0    0 26.59 5.73 ZNESW 6.3 5.6 113.4 10.9 20.2 -27.0 20.1 -26.1 19.7 -24.8 19.9 -25.8
2025-11-26T02:48:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:48:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:48:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.033429
2025-11-26T02:48:40.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:48:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:48:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:48:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:48:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:48:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:48:24', tmtdew=29.97, humidity=12.13, cloud=0.0, wind=9.83, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:48:26', seeing=1.04, atlas_timestamp='2025-11-26T00:48:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:46:00')
2025-11-26T02:48:40.104 [DEBUG] [Thread-10346] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:48:40.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:48:40.199 [DEBUG] [Thread-10349] [transport.py] [_log()] starting thread (client mode): 0x70da4f40
2025-11-26T02:48:40.200 [DEBUG] [Thread-10349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:48:40.214 [DEBUG] [Thread-10349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:48:40.214 [INFO] [Thread-10349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] client lang: <none>
2025-11-26T02:48:40.222 [DEBUG] [Thread-10349] [transport.py] [_log()] server lang: <none>
2025-11-26T02:48:40.223 [DEBUG] [Thread-10349] [transport.py] [_log()] kex follows: False
2025-11-26T02:48:40.223 [DEBUG] [Thread-10349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:48:40.223 [DEBUG] [Thread-10349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:48:40.223 [DEBUG] [Thread-10349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:48:40.223 [DEBUG] [Thread-10349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:48:40.223 [DEBUG] [Thread-10349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:48:40.223 [DEBUG] [Thread-10349] [transport.py] [_log()] Compression: none
2025-11-26T02:48:40.223 [DEBUG] [Thread-10349] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:48:40.278 [DEBUG] [Thread-10349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:48:40.278 [DEBUG] [Thread-10349] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:48:40.279 [DEBUG] [Thread-10349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:48:40.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:48:40.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:48:40.334 [DEBUG] [Thread-10349] [transport.py] [_log()] userauth is OK
2025-11-26T02:48:40.334 [DEBUG] [Thread-10349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:48:40.334 [DEBUG] [Thread-10349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:48:40.334 [DEBUG] [Thread-10349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:48:40.334 [DEBUG] [Thread-10349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:48:40.348 [INFO] [Thread-10349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:48:40.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:48:40.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:48:40.757 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:41.161 [DEBUG] [Thread-10349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:48:41.162 [DEBUG] [Thread-10349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:48:41.210 [DEBUG] [Thread-10349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:48:41.210 [DEBUG] [Thread-10349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:48:41.221 [DEBUG] [Thread-10349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:48:41.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:48:41.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:48:41.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:48:41.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:48:41.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:48:41.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:48:41.256 [DEBUG] [Thread-10349] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:48:46.681 [DEBUG] [Thread-10351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:47.537 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:47.538 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:48:51.171 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:01.596 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:01.739 [DEBUG] [Thread-10352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:49:11.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:49:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:49:11.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 48, 57), 29.98, 12.24, 0.0, 10.02, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:49:11.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:48:57
2025-11-26T02:49:12.004 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:12.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:49:12.277 [DEBUG] [Thread-10353] [transport.py] [_log()] starting thread (client mode): 0x70d6bcd0
2025-11-26T02:49:12.277 [DEBUG] [Thread-10353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:49:12.296 [DEBUG] [Thread-10353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:49:12.296 [INFO] [Thread-10353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] client lang: <none>
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] server lang: <none>
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] kex follows: False
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] Compression: none
2025-11-26T02:49:12.299 [DEBUG] [Thread-10353] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:49:12.313 [DEBUG] [Thread-10353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:49:12.313 [DEBUG] [Thread-10353] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:49:12.313 [DEBUG] [Thread-10353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:49:12.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:49:12.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:49:12.314 [DEBUG] [Thread-10353] [transport.py] [_log()] userauth is OK
2025-11-26T02:49:12.314 [DEBUG] [Thread-10353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:49:12.314 [DEBUG] [Thread-10353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:49:12.314 [DEBUG] [Thread-10353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:49:12.314 [DEBUG] [Thread-10353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:49:12.329 [INFO] [Thread-10353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:49:12.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:49:12.988 [DEBUG] [Thread-10353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:49:12.988 [DEBUG] [Thread-10353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:49:12.988 [DEBUG] [Thread-10353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:49:13.029 [DEBUG] [Thread-10353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:49:13.029 [DEBUG] [Thread-10353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:49:13.031 [DEBUG] [Thread-10353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:49:13.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:49:13.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:49:13.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:49:13.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:49:13.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:49:13.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:49:13.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.033776 -999.00  +21.00   9.10     16   -5.20 1 1 1 1 1     0    0 26.18 4.64 ZNESW 7.3 9.1 125.8 11.3 20.1 -26.3 20.0 -26.0 19.6 -24.7 19.9 -25.7
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.033776
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:49:13.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:48:57', tmtdew=29.98, humidity=12.24, cloud=0.0, wind=10.02, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:48:58', seeing=1.22, atlas_timestamp='2025-11-26T00:48:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:46:00')
2025-11-26T02:49:13.050 [DEBUG] [Thread-10353] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:49:13.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:49:13.136 [DEBUG] [Thread-10356] [transport.py] [_log()] starting thread (client mode): 0x6e314760
2025-11-26T02:49:13.136 [DEBUG] [Thread-10356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:49:13.155 [DEBUG] [Thread-10356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:49:13.155 [INFO] [Thread-10356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:49:13.162 [DEBUG] [Thread-10356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] client lang: <none>
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] server lang: <none>
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] kex follows: False
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] Compression: none
2025-11-26T02:49:13.163 [DEBUG] [Thread-10356] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:49:13.223 [DEBUG] [Thread-10356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:49:13.223 [DEBUG] [Thread-10356] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:49:13.223 [DEBUG] [Thread-10356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:49:13.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:49:13.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:49:13.280 [DEBUG] [Thread-10356] [transport.py] [_log()] userauth is OK
2025-11-26T02:49:13.280 [DEBUG] [Thread-10356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:49:13.280 [DEBUG] [Thread-10356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:49:13.280 [DEBUG] [Thread-10356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:49:13.280 [DEBUG] [Thread-10356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:49:13.293 [INFO] [Thread-10356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:49:13.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:49:13.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:49:14.164 [DEBUG] [Thread-10356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:49:14.165 [DEBUG] [Thread-10356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:49:14.215 [DEBUG] [Thread-10356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:49:14.216 [DEBUG] [Thread-10356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:49:14.225 [DEBUG] [Thread-10356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:49:14.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:49:14.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:49:14.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:49:14.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:49:14.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:49:14.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:49:14.262 [DEBUG] [Thread-10356] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:49:16.777 [DEBUG] [Thread-10358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:22.397 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:22.555 [DEBUG] [Thread-10359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:31.836 [DEBUG] [Thread-10360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:32.840 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:43.229 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:44.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:49:44.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:49:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:49:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 49, 29), 29.99, 12.23, 0.0, 9.93, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:49:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:49:29
2025-11-26T02:49:45.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:49:45.226 [DEBUG] [Thread-10361] [transport.py] [_log()] starting thread (client mode): 0x70d42620
2025-11-26T02:49:45.226 [DEBUG] [Thread-10361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:49:45.246 [DEBUG] [Thread-10361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:49:45.246 [INFO] [Thread-10361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:49:45.249 [DEBUG] [Thread-10361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:49:45.249 [DEBUG] [Thread-10361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:49:45.249 [DEBUG] [Thread-10361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:49:45.249 [DEBUG] [Thread-10361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:49:45.249 [DEBUG] [Thread-10361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:49:45.249 [DEBUG] [Thread-10361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:49:45.249 [DEBUG] [Thread-10361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] client lang: <none>
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] server lang: <none>
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] kex follows: False
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] Compression: none
2025-11-26T02:49:45.250 [DEBUG] [Thread-10361] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:49:45.264 [DEBUG] [Thread-10361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:49:45.264 [DEBUG] [Thread-10361] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:49:45.264 [DEBUG] [Thread-10361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:49:45.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:49:45.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:49:45.265 [DEBUG] [Thread-10361] [transport.py] [_log()] userauth is OK
2025-11-26T02:49:45.265 [DEBUG] [Thread-10361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:49:45.265 [DEBUG] [Thread-10361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:49:45.265 [DEBUG] [Thread-10361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:49:45.265 [DEBUG] [Thread-10361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:49:45.280 [INFO] [Thread-10361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:49:45.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:49:45.911 [DEBUG] [Thread-10361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:49:45.911 [DEBUG] [Thread-10361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:49:45.911 [DEBUG] [Thread-10361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:49:45.952 [DEBUG] [Thread-10361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:49:45.952 [DEBUG] [Thread-10361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:49:45.954 [DEBUG] [Thread-10361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:49:45.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:49:45.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:49:45.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:49:45.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:49:45.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:49:45.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:49:45.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:49:45.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:49:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:49:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.034123 -999.00  +21.00   5.22     16   -5.10 1 1 1 1 1     0    0 26.28 2.63 ZNESW 5.0 5.2 102.7 9.2 20.2 -26.8 20.0 -26.0 19.6 -24.7 20.0 -25.8
2025-11-26T02:49:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:49:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:49:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.034123
2025-11-26T02:49:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:49:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:49:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:49:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:49:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:49:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:49:29', tmtdew=29.99, humidity=12.23, cloud=0.0, wind=9.93, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:49:30', seeing=1.14, atlas_timestamp='2025-11-26T00:49:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:46:00')
2025-11-26T02:49:45.972 [DEBUG] [Thread-10361] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:49:46.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:49:46.058 [DEBUG] [Thread-10364] [transport.py] [_log()] starting thread (client mode): 0x6e314850
2025-11-26T02:49:46.058 [DEBUG] [Thread-10364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:49:46.073 [DEBUG] [Thread-10364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:49:46.073 [INFO] [Thread-10364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:49:46.080 [DEBUG] [Thread-10364] [transport.py] [_log()] client lang: <none>
2025-11-26T02:49:46.081 [DEBUG] [Thread-10364] [transport.py] [_log()] server lang: <none>
2025-11-26T02:49:46.081 [DEBUG] [Thread-10364] [transport.py] [_log()] kex follows: False
2025-11-26T02:49:46.081 [DEBUG] [Thread-10364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:49:46.081 [DEBUG] [Thread-10364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:49:46.081 [DEBUG] [Thread-10364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:49:46.081 [DEBUG] [Thread-10364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:49:46.081 [DEBUG] [Thread-10364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:49:46.081 [DEBUG] [Thread-10364] [transport.py] [_log()] Compression: none
2025-11-26T02:49:46.081 [DEBUG] [Thread-10364] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:49:46.137 [DEBUG] [Thread-10364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:49:46.137 [DEBUG] [Thread-10364] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:49:46.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:49:46.137 [DEBUG] [Thread-10364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:49:46.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:49:46.194 [DEBUG] [Thread-10364] [transport.py] [_log()] userauth is OK
2025-11-26T02:49:46.194 [DEBUG] [Thread-10364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:49:46.194 [DEBUG] [Thread-10364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:49:46.194 [DEBUG] [Thread-10364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:49:46.194 [DEBUG] [Thread-10364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:49:46.212 [INFO] [Thread-10364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:49:46.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:49:46.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:49:46.867 [DEBUG] [Thread-10366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:47.066 [DEBUG] [Thread-10364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:49:47.066 [DEBUG] [Thread-10364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:49:47.116 [DEBUG] [Thread-10364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:49:47.116 [DEBUG] [Thread-10364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:49:47.125 [DEBUG] [Thread-10364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:49:47.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:49:47.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:49:47.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:49:47.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:49:47.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:49:47.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:49:47.157 [DEBUG] [Thread-10364] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:49:47.743 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:47.743 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:49:53.623 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:01.905 [DEBUG] [Thread-10367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:04.021 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:14.421 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:16.942 [DEBUG] [Thread-10368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:17.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:50:17.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:50:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:50:17.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 50, 1), 30.0, 12.23, 0.0, 10.15, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:50:17.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:50:01
2025-11-26T02:50:17.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:50:18.118 [DEBUG] [Thread-10369] [transport.py] [_log()] starting thread (client mode): 0x70d7dea0
2025-11-26T02:50:18.118 [DEBUG] [Thread-10369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:50:18.133 [DEBUG] [Thread-10369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:50:18.133 [INFO] [Thread-10369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:50:18.136 [DEBUG] [Thread-10369] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] client lang: <none>
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] server lang: <none>
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] kex follows: False
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] Compression: none
2025-11-26T02:50:18.137 [DEBUG] [Thread-10369] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:50:18.155 [DEBUG] [Thread-10369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:50:18.155 [DEBUG] [Thread-10369] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:50:18.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:50:18.157 [DEBUG] [Thread-10369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:50:18.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:50:18.159 [DEBUG] [Thread-10369] [transport.py] [_log()] userauth is OK
2025-11-26T02:50:18.159 [DEBUG] [Thread-10369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:50:18.159 [DEBUG] [Thread-10369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:50:18.160 [DEBUG] [Thread-10369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:50:18.160 [DEBUG] [Thread-10369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:50:18.185 [INFO] [Thread-10369] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:50:18.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:50:18.802 [DEBUG] [Thread-10369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:50:18.802 [DEBUG] [Thread-10369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:50:18.802 [DEBUG] [Thread-10369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:50:18.843 [DEBUG] [Thread-10369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:50:18.843 [DEBUG] [Thread-10369] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:50:18.847 [DEBUG] [Thread-10369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:50:18.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:50:18.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:50:18.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:50:18.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:50:18.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:50:18.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:50:18.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:50:18.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:50:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:50:18.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.034818 -999.00  +20.90   7.96     16   -5.20 1 1 1 1 1     0    0 26.54 0.34 ZNESW 10.1 8.0 105.6 9.9 20.2 -26.6 20.0 -25.9 19.6 -24.5 19.9 -25.6
2025-11-26T02:50:18.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:50:18.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:50:18.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.034818
2025-11-26T02:50:18.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:50:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:50:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:50:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:50:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:50:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:50:01', tmtdew=30.0, humidity=12.23, cloud=0.0, wind=10.15, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:50:02', seeing=1.14, atlas_timestamp='2025-11-26T00:50:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:49:00')
2025-11-26T02:50:18.873 [DEBUG] [Thread-10369] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:50:18.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:50:18.972 [DEBUG] [Thread-10372] [transport.py] [_log()] starting thread (client mode): 0x70d7de10
2025-11-26T02:50:18.972 [DEBUG] [Thread-10372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:50:18.990 [DEBUG] [Thread-10372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:50:18.990 [INFO] [Thread-10372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:50:19.001 [DEBUG] [Thread-10372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:50:19.001 [DEBUG] [Thread-10372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:50:19.001 [DEBUG] [Thread-10372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:50:19.001 [DEBUG] [Thread-10372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:50:19.001 [DEBUG] [Thread-10372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:50:19.001 [DEBUG] [Thread-10372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:50:19.001 [DEBUG] [Thread-10372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:50:19.001 [DEBUG] [Thread-10372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:50:19.001 [DEBUG] [Thread-10372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] client lang: <none>
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] server lang: <none>
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] kex follows: False
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] Compression: none
2025-11-26T02:50:19.002 [DEBUG] [Thread-10372] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:50:19.064 [DEBUG] [Thread-10372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:50:19.065 [DEBUG] [Thread-10372] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:50:19.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:50:19.066 [DEBUG] [Thread-10372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:50:19.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:50:19.125 [DEBUG] [Thread-10372] [transport.py] [_log()] userauth is OK
2025-11-26T02:50:19.126 [DEBUG] [Thread-10372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:50:19.126 [DEBUG] [Thread-10372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:50:19.126 [DEBUG] [Thread-10372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:50:19.126 [DEBUG] [Thread-10372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:50:19.148 [INFO] [Thread-10372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:50:19.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:50:19.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:50:19.961 [DEBUG] [Thread-10372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:50:19.961 [DEBUG] [Thread-10372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:50:20.012 [DEBUG] [Thread-10372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:50:20.013 [DEBUG] [Thread-10372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:50:20.026 [DEBUG] [Thread-10372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:50:20.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:50:20.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:50:20.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:50:20.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:50:20.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:50:20.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:50:20.078 [DEBUG] [Thread-10372] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:50:22.607 [DEBUG] [Thread-10374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:24.834 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:31.977 [DEBUG] [Thread-10375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:35.251 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:45.664 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:47.024 [DEBUG] [Thread-10376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:47.947 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:47.948 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:50:50.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:50:50.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:50:50.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:50:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 50, 33), 28.7, 13.32, 0.0, 12.92, 18.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:50:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:50:33
2025-11-26T02:50:50.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:50:51.021 [DEBUG] [Thread-10377] [transport.py] [_log()] starting thread (client mode): 0x70da64a0
2025-11-26T02:50:51.021 [DEBUG] [Thread-10377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:50:51.042 [DEBUG] [Thread-10377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:50:51.042 [INFO] [Thread-10377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:50:51.045 [DEBUG] [Thread-10377] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] client lang: <none>
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] server lang: <none>
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] kex follows: False
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] Compression: none
2025-11-26T02:50:51.046 [DEBUG] [Thread-10377] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:50:51.063 [DEBUG] [Thread-10377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:50:51.064 [DEBUG] [Thread-10377] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:50:51.064 [DEBUG] [Thread-10377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:50:51.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:50:51.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:50:51.066 [DEBUG] [Thread-10377] [transport.py] [_log()] userauth is OK
2025-11-26T02:50:51.067 [DEBUG] [Thread-10377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:50:51.067 [DEBUG] [Thread-10377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:50:51.067 [DEBUG] [Thread-10377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:50:51.067 [DEBUG] [Thread-10377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:50:51.091 [INFO] [Thread-10377] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:50:51.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:50:51.752 [DEBUG] [Thread-10377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:50:51.753 [DEBUG] [Thread-10377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:50:51.753 [DEBUG] [Thread-10377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:50:51.793 [DEBUG] [Thread-10377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:50:51.793 [DEBUG] [Thread-10377] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:50:51.796 [DEBUG] [Thread-10377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:50:51.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:50:51.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:50:51.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:50:51.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:50:51.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:50:51.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:50:51.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:50:51.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:50:51.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:50:51.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.035165 -999.00  +21.00   9.98     16   -5.10 1 1 1 1 1     0    0 26.42 -0.83 ZNESW 9.7 10.0 107.4 10.8 20.2 -26.3 20.0 -25.9 19.7 -24.4 19.9 -25.6
2025-11-26T02:50:51.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:50:51.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:50:51.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.035165
2025-11-26T02:50:51.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:50:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:50:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:50:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:50:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:50:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:50:33', tmtdew=28.7, humidity=13.32, cloud=0.0, wind=12.92, temperature=18.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:50:34', seeing=1.04, atlas_timestamp='2025-11-26T00:50:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:49:00')
2025-11-26T02:50:51.822 [DEBUG] [Thread-10377] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:50:51.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:50:51.915 [DEBUG] [Thread-10380] [transport.py] [_log()] starting thread (client mode): 0x70d40550
2025-11-26T02:50:51.915 [DEBUG] [Thread-10380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:50:51.930 [DEBUG] [Thread-10380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:50:51.930 [INFO] [Thread-10380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:50:51.937 [DEBUG] [Thread-10380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:50:51.938 [DEBUG] [Thread-10380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:50:51.938 [DEBUG] [Thread-10380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:50:51.938 [DEBUG] [Thread-10380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:50:51.938 [DEBUG] [Thread-10380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:50:51.938 [DEBUG] [Thread-10380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:50:51.938 [DEBUG] [Thread-10380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:50:51.938 [DEBUG] [Thread-10380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:50:51.938 [DEBUG] [Thread-10380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:50:51.938 [DEBUG] [Thread-10380] [transport.py] [_log()] client lang: <none>
2025-11-26T02:50:51.939 [DEBUG] [Thread-10380] [transport.py] [_log()] server lang: <none>
2025-11-26T02:50:51.939 [DEBUG] [Thread-10380] [transport.py] [_log()] kex follows: False
2025-11-26T02:50:51.939 [DEBUG] [Thread-10380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:50:51.939 [DEBUG] [Thread-10380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:50:51.939 [DEBUG] [Thread-10380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:50:51.939 [DEBUG] [Thread-10380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:50:51.939 [DEBUG] [Thread-10380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:50:51.939 [DEBUG] [Thread-10380] [transport.py] [_log()] Compression: none
2025-11-26T02:50:51.940 [DEBUG] [Thread-10380] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:50:52.000 [DEBUG] [Thread-10380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:50:52.000 [DEBUG] [Thread-10380] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:50:52.001 [DEBUG] [Thread-10380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:50:52.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:50:52.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:50:52.055 [DEBUG] [Thread-10380] [transport.py] [_log()] userauth is OK
2025-11-26T02:50:52.055 [DEBUG] [Thread-10380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:50:52.056 [DEBUG] [Thread-10380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:50:52.056 [DEBUG] [Thread-10380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:50:52.056 [DEBUG] [Thread-10380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:50:52.074 [INFO] [Thread-10380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:50:52.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:50:52.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:50:52.955 [DEBUG] [Thread-10380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:50:52.955 [DEBUG] [Thread-10380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:50:53.003 [DEBUG] [Thread-10380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:50:53.003 [DEBUG] [Thread-10380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:50:53.012 [DEBUG] [Thread-10380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:50:53.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:50:53.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:50:53.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:50:53.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:50:53.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:50:53.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:50:53.049 [DEBUG] [Thread-10380] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:50:56.092 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:02.053 [DEBUG] [Thread-10382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:06.501 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:16.909 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:17.093 [DEBUG] [Thread-10383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:22.664 [DEBUG] [Thread-10384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:51:23.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:51:23.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:51:23.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 51, 5), 30.03, 12.24, 0.0, 10.09, 20.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:51:23.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:51:05
2025-11-26T02:51:23.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:51:23.985 [DEBUG] [Thread-10385] [transport.py] [_log()] starting thread (client mode): 0x70de72e0
2025-11-26T02:51:23.985 [DEBUG] [Thread-10385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:51:24.005 [DEBUG] [Thread-10385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:51:24.005 [INFO] [Thread-10385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] client lang: <none>
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] server lang: <none>
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] kex follows: False
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] Compression: none
2025-11-26T02:51:24.006 [DEBUG] [Thread-10385] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:51:24.015 [DEBUG] [Thread-10385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:51:24.015 [DEBUG] [Thread-10385] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:51:24.015 [DEBUG] [Thread-10385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:51:24.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:51:24.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:51:24.017 [DEBUG] [Thread-10385] [transport.py] [_log()] userauth is OK
2025-11-26T02:51:24.017 [DEBUG] [Thread-10385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:51:24.017 [DEBUG] [Thread-10385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:51:24.017 [DEBUG] [Thread-10385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:51:24.017 [DEBUG] [Thread-10385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:51:24.041 [INFO] [Thread-10385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:51:24.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:51:24.622 [DEBUG] [Thread-10385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:51:24.623 [DEBUG] [Thread-10385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:51:24.624 [DEBUG] [Thread-10385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:51:24.664 [DEBUG] [Thread-10385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:51:24.664 [DEBUG] [Thread-10385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:51:24.668 [DEBUG] [Thread-10385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:51:24.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:51:24.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:51:24.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:51:24.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:51:24.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:51:24.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:51:24.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:51:24.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:51:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:51:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.035512 -999.00  +21.00   8.23     16   -5.10 1 1 1 1 1     0    0 25.76 -2.06 ZNESW 7.2 8.2 119.6 12.6 20.2 -26.7 20.1 -26.1 19.7 -24.7 19.9 -25.6
2025-11-26T02:51:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:51:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:51:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.035512
2025-11-26T02:51:24.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:51:24.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:51:24.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:51:24.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:51:24.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:51:24.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:51:05', tmtdew=30.03, humidity=12.24, cloud=0.0, wind=10.09, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:51:06', seeing=1.18, atlas_timestamp='2025-11-26T00:51:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:49:00')
2025-11-26T02:51:24.697 [DEBUG] [Thread-10385] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:51:24.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:51:24.794 [DEBUG] [Thread-10388] [transport.py] [_log()] starting thread (client mode): 0x70de57b0
2025-11-26T02:51:24.795 [DEBUG] [Thread-10388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:51:24.809 [DEBUG] [Thread-10388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:51:24.809 [INFO] [Thread-10388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:51:24.816 [DEBUG] [Thread-10388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] client lang: <none>
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] server lang: <none>
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] kex follows: False
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] Compression: none
2025-11-26T02:51:24.817 [DEBUG] [Thread-10388] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:51:24.883 [DEBUG] [Thread-10388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:51:24.883 [DEBUG] [Thread-10388] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:51:24.884 [DEBUG] [Thread-10388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:51:24.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:51:24.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:51:24.942 [DEBUG] [Thread-10388] [transport.py] [_log()] userauth is OK
2025-11-26T02:51:24.942 [DEBUG] [Thread-10388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:51:24.942 [DEBUG] [Thread-10388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:51:24.942 [DEBUG] [Thread-10388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:51:24.943 [DEBUG] [Thread-10388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:51:24.961 [INFO] [Thread-10388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:51:24.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:51:24.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:51:25.762 [DEBUG] [Thread-10388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:51:25.762 [DEBUG] [Thread-10388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:51:25.810 [DEBUG] [Thread-10388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:51:25.811 [DEBUG] [Thread-10388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:51:25.820 [DEBUG] [Thread-10388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:51:25.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:51:25.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:51:25.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:51:25.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:51:25.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:51:25.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:51:25.856 [DEBUG] [Thread-10388] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:51:27.357 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:32.130 [DEBUG] [Thread-10390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:37.790 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:47.187 [DEBUG] [Thread-10391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:48.152 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:48.153 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:48.223 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:51:55.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:51:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:51:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 51, 37), 30.01, 12.21, 0.0, 9.85, 19.97, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:51:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:51:37
2025-11-26T02:51:56.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:51:56.813 [DEBUG] [Thread-10392] [transport.py] [_log()] starting thread (client mode): 0x6e316800
2025-11-26T02:51:56.813 [DEBUG] [Thread-10392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:51:56.832 [DEBUG] [Thread-10392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:51:56.832 [INFO] [Thread-10392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:51:56.833 [DEBUG] [Thread-10392] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] client lang: <none>
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] server lang: <none>
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] kex follows: False
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:51:56.834 [DEBUG] [Thread-10392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:51:56.835 [DEBUG] [Thread-10392] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:51:56.835 [DEBUG] [Thread-10392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:51:56.835 [DEBUG] [Thread-10392] [transport.py] [_log()] Compression: none
2025-11-26T02:51:56.835 [DEBUG] [Thread-10392] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:51:56.851 [DEBUG] [Thread-10392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:51:56.851 [DEBUG] [Thread-10392] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:51:56.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:51:56.853 [DEBUG] [Thread-10392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:51:56.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:51:56.854 [DEBUG] [Thread-10392] [transport.py] [_log()] userauth is OK
2025-11-26T02:51:56.855 [DEBUG] [Thread-10392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:51:56.855 [DEBUG] [Thread-10392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:51:56.855 [DEBUG] [Thread-10392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:51:56.855 [DEBUG] [Thread-10392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:51:56.874 [INFO] [Thread-10392] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:51:56.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:51:57.442 [DEBUG] [Thread-10392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:51:57.442 [DEBUG] [Thread-10392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:51:57.443 [DEBUG] [Thread-10392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:51:57.483 [DEBUG] [Thread-10392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:51:57.483 [DEBUG] [Thread-10392] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:51:57.486 [DEBUG] [Thread-10392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:51:57.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:51:57.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:51:57.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:51:57.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:51:57.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:51:57.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:51:57.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:51:57.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:51:57.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:51:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.035860 -999.00  +21.00   8.30     16   -5.10 1 1 1 1 1     0    0 26.29 -3.15 ZNESW 8.6 8.3 107.2 12.8 20.2 -25.9 20.1 -26.0 19.7 -24.6 20.0 -25.7
2025-11-26T02:51:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:51:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:51:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.035860
2025-11-26T02:51:57.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:51:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:51:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:51:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:51:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:51:57.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:51:37', tmtdew=30.01, humidity=12.21, cloud=0.0, wind=9.85, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:51:38', seeing=1.23, atlas_timestamp='2025-11-26T00:51:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:49:00')
2025-11-26T02:51:57.508 [DEBUG] [Thread-10392] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:51:57.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:51:57.605 [DEBUG] [Thread-10395] [transport.py] [_log()] starting thread (client mode): 0x70da5ab0
2025-11-26T02:51:57.605 [DEBUG] [Thread-10395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:51:57.620 [DEBUG] [Thread-10395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:51:57.620 [INFO] [Thread-10395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] client lang: <none>
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] server lang: <none>
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] kex follows: False
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:51:57.628 [DEBUG] [Thread-10395] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:51:57.629 [DEBUG] [Thread-10395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:51:57.629 [DEBUG] [Thread-10395] [transport.py] [_log()] Compression: none
2025-11-26T02:51:57.629 [DEBUG] [Thread-10395] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:51:57.688 [DEBUG] [Thread-10395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:51:57.689 [DEBUG] [Thread-10395] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:51:57.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:51:57.690 [DEBUG] [Thread-10395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:51:57.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:51:57.748 [DEBUG] [Thread-10395] [transport.py] [_log()] userauth is OK
2025-11-26T02:51:57.748 [DEBUG] [Thread-10395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:51:57.748 [DEBUG] [Thread-10395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:51:57.748 [DEBUG] [Thread-10395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:51:57.748 [DEBUG] [Thread-10395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:51:57.773 [INFO] [Thread-10395] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:51:57.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:51:57.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:51:58.595 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:51:58.603 [DEBUG] [Thread-10395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:51:58.603 [DEBUG] [Thread-10395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:51:58.652 [DEBUG] [Thread-10395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:51:58.652 [DEBUG] [Thread-10395] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:51:58.661 [DEBUG] [Thread-10395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:51:58.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:51:58.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:51: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') -> 00000000
2025-11-26T02:51:58.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:51:58.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:51:58.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:51:58.698 [DEBUG] [Thread-10395] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:52:02.232 [DEBUG] [Thread-10397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:08.987 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:17.284 [DEBUG] [Thread-10398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:19.406 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:22.743 [DEBUG] [Thread-10399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:52:28.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:52:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:52:29.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 52, 9), 30.01, 12.21, 0.0, 9.76, 19.95, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:52:29.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:52:09
2025-11-26T02:52:29.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:52:29.642 [DEBUG] [Thread-10400] [transport.py] [_log()] starting thread (client mode): 0x70de4d60
2025-11-26T02:52:29.642 [DEBUG] [Thread-10400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:52:29.662 [DEBUG] [Thread-10400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:52:29.662 [INFO] [Thread-10400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] client lang: <none>
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] server lang: <none>
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] kex follows: False
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] Compression: none
2025-11-26T02:52:29.664 [DEBUG] [Thread-10400] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:52:29.680 [DEBUG] [Thread-10400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:52:29.680 [DEBUG] [Thread-10400] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:52:29.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:52:29.682 [DEBUG] [Thread-10400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:52:29.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:52:29.683 [DEBUG] [Thread-10400] [transport.py] [_log()] userauth is OK
2025-11-26T02:52:29.684 [DEBUG] [Thread-10400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:52:29.684 [DEBUG] [Thread-10400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:52:29.684 [DEBUG] [Thread-10400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:52:29.684 [DEBUG] [Thread-10400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:52:29.708 [INFO] [Thread-10400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:52:29.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:52:29.804 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:30.306 [DEBUG] [Thread-10400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:52:30.307 [DEBUG] [Thread-10400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:52:30.307 [DEBUG] [Thread-10400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:52:30.348 [DEBUG] [Thread-10400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:52:30.348 [DEBUG] [Thread-10400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:52:30.352 [DEBUG] [Thread-10400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:52:30.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:52:30.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:52:30.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:52:30.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:52:30.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:52:30.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:52:30.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:52:30.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:52:30.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:52:30.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.036207 -999.00  +21.00   7.56     16   -5.10 1 1 1 1 1     0    0 25.95 -3.85 ZNESW 7.7 7.6 68.6 11.8 20.2 -26.0 20.0 -26.0 19.7 -24.5 20.0 -25.7
2025-11-26T02:52:30.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:52:30.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:52:30.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.036207
2025-11-26T02:52:30.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:52:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:52:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:52:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:52:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:52:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:52:09', tmtdew=30.01, humidity=12.21, cloud=0.0, wind=9.76, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:52:10', seeing=1.18, atlas_timestamp='2025-11-26T00:52:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, -0.029749999999999943, 0.035250000000001336, -0.03700000000000081, -0.0015000000000000568, 0.02325000000000088, -0.03200000000000003, 0.0032500000000013074, 0.007499999999998508, -0.021999999999998465, -0.00575000000000081, -0.0065000000000008384, 0.08749999999999858, 0.09725000000000072, -0.04449999999999932, 0.018000000000000682, 0.005250000000000199, -0.0009999999999994458, -0.040000000000000924, 0.021249999999998437, 0.10149999999999793, 0.05924999999999869, 0.026750000000001606, 0.016750000000000043, 0.023999999999999133, 0.057500000000000995, 0.007749999999999702, 0.04749999999999943, 0.10150000000000148, 0.13250000000000028, 0.027000000000001023, 0.004000000000001336, -0.0022500000000000853], zp_timestamp='2025-11-26T00:49:00')
2025-11-26T02:52:30.378 [DEBUG] [Thread-10400] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:52:30.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:52:30.485 [DEBUG] [Thread-10403] [transport.py] [_log()] starting thread (client mode): 0x70dbdfc0
2025-11-26T02:52:30.485 [DEBUG] [Thread-10403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:52:30.500 [DEBUG] [Thread-10403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:52:30.500 [INFO] [Thread-10403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:52:30.507 [DEBUG] [Thread-10403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:52:30.508 [DEBUG] [Thread-10403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:52:30.508 [DEBUG] [Thread-10403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:52:30.508 [DEBUG] [Thread-10403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:52:30.508 [DEBUG] [Thread-10403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:52:30.508 [DEBUG] [Thread-10403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:52:30.508 [DEBUG] [Thread-10403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:52:30.509 [DEBUG] [Thread-10403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:52:30.509 [DEBUG] [Thread-10403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:52:30.509 [DEBUG] [Thread-10403] [transport.py] [_log()] client lang: <none>
2025-11-26T02:52:30.509 [DEBUG] [Thread-10403] [transport.py] [_log()] server lang: <none>
2025-11-26T02:52:30.509 [DEBUG] [Thread-10403] [transport.py] [_log()] kex follows: False
2025-11-26T02:52:30.509 [DEBUG] [Thread-10403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:52:30.509 [DEBUG] [Thread-10403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:52:30.509 [DEBUG] [Thread-10403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:52:30.509 [DEBUG] [Thread-10403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:52:30.510 [DEBUG] [Thread-10403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:52:30.510 [DEBUG] [Thread-10403] [transport.py] [_log()] Compression: none
2025-11-26T02:52:30.510 [DEBUG] [Thread-10403] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:52:30.566 [DEBUG] [Thread-10403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:52:30.567 [DEBUG] [Thread-10403] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:52:30.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:52:30.568 [DEBUG] [Thread-10403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:52:30.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:52:30.623 [DEBUG] [Thread-10403] [transport.py] [_log()] userauth is OK
2025-11-26T02:52:30.623 [DEBUG] [Thread-10403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:52:30.623 [DEBUG] [Thread-10403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:52:30.624 [DEBUG] [Thread-10403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:52:30.624 [DEBUG] [Thread-10403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:52:30.642 [INFO] [Thread-10403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:52:30.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:52:30.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:52:31.456 [DEBUG] [Thread-10403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:52:31.456 [DEBUG] [Thread-10403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:52:31.504 [DEBUG] [Thread-10403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:52:31.505 [DEBUG] [Thread-10403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:52:31.514 [DEBUG] [Thread-10403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:52:31.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:52:31.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:52:31.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
2025-11-26T02:52:31.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:52:31.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:52:31.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:52:31.553 [DEBUG] [Thread-10403] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:52:32.319 [DEBUG] [Thread-10405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:40.199 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:47.377 [DEBUG] [Thread-10406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:48.370 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:48.371 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:52:50.595 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:00.988 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:01.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:53:01.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:53:01.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:53:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 52, 41), 29.95, 12.23, 0.0, 10.39, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:53:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:52:41
2025-11-26T02:53:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:53:02.415 [DEBUG] [Thread-10407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:02.478 [DEBUG] [Thread-10408] [transport.py] [_log()] starting thread (client mode): 0x70d6b190
2025-11-26T02:53:02.478 [DEBUG] [Thread-10408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:53:02.499 [DEBUG] [Thread-10408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:53:02.499 [INFO] [Thread-10408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:53:02.502 [DEBUG] [Thread-10408] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:53:02.502 [DEBUG] [Thread-10408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:53:02.502 [DEBUG] [Thread-10408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:53:02.502 [DEBUG] [Thread-10408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:53:02.502 [DEBUG] [Thread-10408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:53:02.502 [DEBUG] [Thread-10408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:53:02.502 [DEBUG] [Thread-10408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:53:02.502 [DEBUG] [Thread-10408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:53:02.502 [DEBUG] [Thread-10408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] client lang: <none>
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] server lang: <none>
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] kex follows: False
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] Compression: none
2025-11-26T02:53:02.503 [DEBUG] [Thread-10408] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:53:02.520 [DEBUG] [Thread-10408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:53:02.521 [DEBUG] [Thread-10408] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:53:02.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:53:02.522 [DEBUG] [Thread-10408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:53:02.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:53:02.524 [DEBUG] [Thread-10408] [transport.py] [_log()] userauth is OK
2025-11-26T02:53:02.524 [DEBUG] [Thread-10408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:53:02.524 [DEBUG] [Thread-10408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:53:02.524 [DEBUG] [Thread-10408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:53:02.524 [DEBUG] [Thread-10408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:53:02.539 [INFO] [Thread-10408] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:53:02.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:53:03.164 [DEBUG] [Thread-10408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:53:03.164 [DEBUG] [Thread-10408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:53:03.165 [DEBUG] [Thread-10408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:53:03.205 [DEBUG] [Thread-10408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:53:03.205 [DEBUG] [Thread-10408] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:53:03.209 [DEBUG] [Thread-10408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:53:03.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:53:03.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:53:03.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:53:03.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:53:03.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:53:03.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:53:03.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.036207 -999.00  +21.00   7.56     16   -5.10 1 1 1 1 1     0    0 25.95 -3.85 ZNESW 7.7 7.6 68.6 11.8 20.2 -26.0 20.0 -26.0 19.7 -24.5 20.0 -25.7
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.036207
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:53:03.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:52:41', tmtdew=29.95, humidity=12.23, cloud=0.0, wind=10.39, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:52:42', seeing=1.18, atlas_timestamp='2025-11-26T00:52:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028750000000000497, -0.03974999999999973, 0.0022500000000000853, -0.08250000000000135, -0.016500000000000625, 0.030750000000001165, -0.03700000000000081, -0.03074999999999939, 0.0, -0.026999999999999247, -0.03175000000000061, -0.009000000000000341, 0.06899999999999906, 0.07124999999999915, -0.028999999999999915, -0.0030000000000001137, -0.003750000000000142, -0.0235000000000003, -0.04349999999999987, -0.00575000000000081, 0.1059999999999981, 0.059749999999999304, -0.010749999999999815, 0.014249999999998764, 0.0009999999999994458, 0.02200000000000024, -0.011250000000000426, 0.05150000000000077, 0.08699999999999974, 0.1490000000000009, 0.03049999999999997, -0.03599999999999959, -0.017250000000000654], zp_timestamp='2025-11-26T00:51:00')
2025-11-26T02:53:03.235 [DEBUG] [Thread-10408] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:53:03.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:53:03.324 [DEBUG] [Thread-10411] [transport.py] [_log()] starting thread (client mode): 0x70d54be0
2025-11-26T02:53:03.324 [DEBUG] [Thread-10411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:53:03.342 [DEBUG] [Thread-10411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:53:03.342 [INFO] [Thread-10411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:53:03.350 [DEBUG] [Thread-10411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:53:03.350 [DEBUG] [Thread-10411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:53:03.350 [DEBUG] [Thread-10411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:53:03.351 [DEBUG] [Thread-10411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:53:03.351 [DEBUG] [Thread-10411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:53:03.351 [DEBUG] [Thread-10411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:53:03.351 [DEBUG] [Thread-10411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:53:03.351 [DEBUG] [Thread-10411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:53:03.351 [DEBUG] [Thread-10411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:53:03.351 [DEBUG] [Thread-10411] [transport.py] [_log()] client lang: <none>
2025-11-26T02:53:03.351 [DEBUG] [Thread-10411] [transport.py] [_log()] server lang: <none>
2025-11-26T02:53:03.352 [DEBUG] [Thread-10411] [transport.py] [_log()] kex follows: False
2025-11-26T02:53:03.352 [DEBUG] [Thread-10411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:53:03.352 [DEBUG] [Thread-10411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:53:03.352 [DEBUG] [Thread-10411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:53:03.352 [DEBUG] [Thread-10411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:53:03.352 [DEBUG] [Thread-10411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:53:03.352 [DEBUG] [Thread-10411] [transport.py] [_log()] Compression: none
2025-11-26T02:53:03.353 [DEBUG] [Thread-10411] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:53:03.415 [DEBUG] [Thread-10411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:53:03.416 [DEBUG] [Thread-10411] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:53:03.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:53:03.417 [DEBUG] [Thread-10411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:53:03.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:53:03.474 [DEBUG] [Thread-10411] [transport.py] [_log()] userauth is OK
2025-11-26T02:53:03.474 [DEBUG] [Thread-10411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:53:03.475 [DEBUG] [Thread-10411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:53:03.475 [DEBUG] [Thread-10411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:53:03.475 [DEBUG] [Thread-10411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:53:03.497 [INFO] [Thread-10411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:53:03.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:53:03.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:53:04.358 [DEBUG] [Thread-10411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:53:04.359 [DEBUG] [Thread-10411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:53:04.407 [DEBUG] [Thread-10411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:53:04.407 [DEBUG] [Thread-10411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:53:04.416 [DEBUG] [Thread-10411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:53:04.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:53:04.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:53:04.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:53:04.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:53:04.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:53:04.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:53:04.453 [DEBUG] [Thread-10411] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:53:11.390 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:17.448 [DEBUG] [Thread-10413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:21.788 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:22.821 [DEBUG] [Thread-10414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:32.201 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:32.497 [DEBUG] [Thread-10415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:34.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:53:34.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:53:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:53:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 53, 13), 29.93, 12.24, 0.0, 10.02, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:53:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:53:13
2025-11-26T02:53:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:53:35.420 [DEBUG] [Thread-10416] [transport.py] [_log()] starting thread (client mode): 0x70d39a50
2025-11-26T02:53:35.420 [DEBUG] [Thread-10416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:53:35.442 [DEBUG] [Thread-10416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:53:35.442 [INFO] [Thread-10416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:53:35.445 [DEBUG] [Thread-10416] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] client lang: <none>
2025-11-26T02:53:35.446 [DEBUG] [Thread-10416] [transport.py] [_log()] server lang: <none>
2025-11-26T02:53:35.447 [DEBUG] [Thread-10416] [transport.py] [_log()] kex follows: False
2025-11-26T02:53:35.447 [DEBUG] [Thread-10416] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:53:35.447 [DEBUG] [Thread-10416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:53:35.447 [DEBUG] [Thread-10416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:53:35.447 [DEBUG] [Thread-10416] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:53:35.447 [DEBUG] [Thread-10416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:53:35.447 [DEBUG] [Thread-10416] [transport.py] [_log()] Compression: none
2025-11-26T02:53:35.447 [DEBUG] [Thread-10416] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:53:35.467 [DEBUG] [Thread-10416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:53:35.467 [DEBUG] [Thread-10416] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:53:35.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:53:35.468 [DEBUG] [Thread-10416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:53:35.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:53:35.471 [DEBUG] [Thread-10416] [transport.py] [_log()] userauth is OK
2025-11-26T02:53:35.471 [DEBUG] [Thread-10416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:53:35.471 [DEBUG] [Thread-10416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:53:35.472 [DEBUG] [Thread-10416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:53:35.472 [DEBUG] [Thread-10416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:53:35.497 [INFO] [Thread-10416] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:53:35.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:53:36.141 [DEBUG] [Thread-10416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:53:36.142 [DEBUG] [Thread-10416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:53:36.142 [DEBUG] [Thread-10416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:53:36.182 [DEBUG] [Thread-10416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:53:36.183 [DEBUG] [Thread-10416] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:53:36.185 [DEBUG] [Thread-10416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:53:36.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:53:36.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:53:36.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:53:36.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:53:36.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:53:36.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:53:36.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:53:36.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:53:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:53:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.036554 -999.00  +21.00   5.89     16   -5.10 1 1 1 1 1     0    0 26.00 -4.24 ZNESW 8.7 5.9 113.8 9.0 20.2 -26.4 20.1 -26.0 19.7 -24.5 20.0 -25.8
2025-11-26T02:53:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:53:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:53:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.036554
2025-11-26T02:53:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:53:36.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:53:36.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:53:36.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:53:36.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:53:36.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:53:13', tmtdew=29.93, humidity=12.24, cloud=0.0, wind=10.02, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:53:14', seeing=1.06, atlas_timestamp='2025-11-26T00:52:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028750000000000497, -0.03974999999999973, 0.0022500000000000853, -0.08250000000000135, -0.016500000000000625, 0.030750000000001165, -0.03700000000000081, -0.03074999999999939, 0.0, -0.026999999999999247, -0.03175000000000061, -0.009000000000000341, 0.06899999999999906, 0.07124999999999915, -0.028999999999999915, -0.0030000000000001137, -0.003750000000000142, -0.0235000000000003, -0.04349999999999987, -0.00575000000000081, 0.1059999999999981, 0.059749999999999304, -0.010749999999999815, 0.014249999999998764, 0.0009999999999994458, 0.02200000000000024, -0.011250000000000426, 0.05150000000000077, 0.08699999999999974, 0.1490000000000009, 0.03049999999999997, -0.03599999999999959, -0.017250000000000654], zp_timestamp='2025-11-26T00:51:00')
2025-11-26T02:53:36.212 [DEBUG] [Thread-10416] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:53:36.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:53:36.308 [DEBUG] [Thread-10419] [transport.py] [_log()] starting thread (client mode): 0x70de4d60
2025-11-26T02:53:36.308 [DEBUG] [Thread-10419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:53:36.324 [DEBUG] [Thread-10419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:53:36.325 [INFO] [Thread-10419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:53:36.332 [DEBUG] [Thread-10419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] client lang: <none>
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] server lang: <none>
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] kex follows: False
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:53:36.333 [DEBUG] [Thread-10419] [transport.py] [_log()] Compression: none
2025-11-26T02:53:36.334 [DEBUG] [Thread-10419] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:53:36.392 [DEBUG] [Thread-10419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:53:36.393 [DEBUG] [Thread-10419] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:53:36.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:53:36.394 [DEBUG] [Thread-10419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:53:36.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:53:36.448 [DEBUG] [Thread-10419] [transport.py] [_log()] userauth is OK
2025-11-26T02:53:36.448 [DEBUG] [Thread-10419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:53:36.449 [DEBUG] [Thread-10419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:53:36.449 [DEBUG] [Thread-10419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:53:36.449 [DEBUG] [Thread-10419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:53:36.467 [INFO] [Thread-10419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:53:36.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:53:36.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:53:37.337 [DEBUG] [Thread-10419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:53:37.337 [DEBUG] [Thread-10419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:53:37.386 [DEBUG] [Thread-10419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:53:37.386 [DEBUG] [Thread-10419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:53:37.395 [DEBUG] [Thread-10419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:53:37.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:53:37.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:53:37.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:53:37.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:53:37.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:53:37.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:53:37.432 [DEBUG] [Thread-10419] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:53:42.618 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:47.528 [DEBUG] [Thread-10421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:48.574 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:48.576 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:53:53.011 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:02.573 [DEBUG] [Thread-10422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:03.440 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:07.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:54:07.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:54:07.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:54:08.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 53, 45), 29.94, 12.23, 0.0, 9.85, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:54:08.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:53:45
2025-11-26T02:54:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:54:08.452 [DEBUG] [Thread-10423] [transport.py] [_log()] starting thread (client mode): 0x70d3a3e0
2025-11-26T02:54:08.452 [DEBUG] [Thread-10423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:54:08.472 [DEBUG] [Thread-10423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:54:08.472 [INFO] [Thread-10423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:54:08.475 [DEBUG] [Thread-10423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:54:08.475 [DEBUG] [Thread-10423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:54:08.475 [DEBUG] [Thread-10423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:54:08.475 [DEBUG] [Thread-10423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:54:08.475 [DEBUG] [Thread-10423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] client lang: <none>
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] server lang: <none>
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] kex follows: False
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] Compression: none
2025-11-26T02:54:08.476 [DEBUG] [Thread-10423] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:54:08.491 [DEBUG] [Thread-10423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:54:08.491 [DEBUG] [Thread-10423] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:54:08.491 [DEBUG] [Thread-10423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:54:08.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:54:08.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:54:08.492 [DEBUG] [Thread-10423] [transport.py] [_log()] userauth is OK
2025-11-26T02:54:08.492 [DEBUG] [Thread-10423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:54:08.492 [DEBUG] [Thread-10423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:54:08.492 [DEBUG] [Thread-10423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:54:08.492 [DEBUG] [Thread-10423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:54:08.503 [INFO] [Thread-10423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:54:08.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:54:09.165 [DEBUG] [Thread-10423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:54:09.165 [DEBUG] [Thread-10423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:54:09.165 [DEBUG] [Thread-10423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:54:09.206 [DEBUG] [Thread-10423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:54:09.206 [DEBUG] [Thread-10423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:54:09.208 [DEBUG] [Thread-10423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:54:09.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:54:09.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:54:09.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:54:09.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:54:09.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:54:09.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:54:09.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:54:09.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:54:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:54:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.037248 -999.00  +21.00   9.97     16   -5.10 1 1 1 1 1     0    0 26.36 -4.64 ZNESW 7.1 10.0 111.4 13.0 20.2 -26.7 20.1 -26.1 19.7 -24.7 20.0 -25.8
2025-11-26T02:54:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:54:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:54:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.037248
2025-11-26T02:54:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:54:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:54:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:54:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:54:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:54:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:53:45', tmtdew=29.94, humidity=12.23, cloud=0.0, wind=9.85, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:53:46', seeing=1.22, atlas_timestamp='2025-11-26T00:53:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028750000000000497, -0.03974999999999973, 0.0022500000000000853, -0.08250000000000135, -0.016500000000000625, 0.030750000000001165, -0.03700000000000081, -0.03074999999999939, 0.0, -0.026999999999999247, -0.03175000000000061, -0.009000000000000341, 0.06899999999999906, 0.07124999999999915, -0.028999999999999915, -0.0030000000000001137, -0.003750000000000142, -0.0235000000000003, -0.04349999999999987, -0.00575000000000081, 0.1059999999999981, 0.059749999999999304, -0.010749999999999815, 0.014249999999998764, 0.0009999999999994458, 0.02200000000000024, -0.011250000000000426, 0.05150000000000077, 0.08699999999999974, 0.1490000000000009, 0.03049999999999997, -0.03599999999999959, -0.017250000000000654], zp_timestamp='2025-11-26T00:51:00')
2025-11-26T02:54:09.228 [DEBUG] [Thread-10423] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:54:09.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:54:09.314 [DEBUG] [Thread-10426] [transport.py] [_log()] starting thread (client mode): 0x70dbeaa0
2025-11-26T02:54:09.315 [DEBUG] [Thread-10426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:54:09.329 [DEBUG] [Thread-10426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:54:09.329 [INFO] [Thread-10426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] client lang: <none>
2025-11-26T02:54:09.336 [DEBUG] [Thread-10426] [transport.py] [_log()] server lang: <none>
2025-11-26T02:54:09.337 [DEBUG] [Thread-10426] [transport.py] [_log()] kex follows: False
2025-11-26T02:54:09.337 [DEBUG] [Thread-10426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:54:09.337 [DEBUG] [Thread-10426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:54:09.337 [DEBUG] [Thread-10426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:54:09.337 [DEBUG] [Thread-10426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:54:09.337 [DEBUG] [Thread-10426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:54:09.337 [DEBUG] [Thread-10426] [transport.py] [_log()] Compression: none
2025-11-26T02:54:09.337 [DEBUG] [Thread-10426] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:54:09.393 [DEBUG] [Thread-10426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:54:09.393 [DEBUG] [Thread-10426] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:54:09.393 [DEBUG] [Thread-10426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:54:09.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:54:09.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:54:09.450 [DEBUG] [Thread-10426] [transport.py] [_log()] userauth is OK
2025-11-26T02:54:09.451 [DEBUG] [Thread-10426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:54:09.451 [DEBUG] [Thread-10426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:54:09.451 [DEBUG] [Thread-10426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:54:09.451 [DEBUG] [Thread-10426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:54:09.464 [INFO] [Thread-10426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:54:09.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:54:09.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:54:10.280 [DEBUG] [Thread-10426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:54:10.280 [DEBUG] [Thread-10426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:54:10.329 [DEBUG] [Thread-10426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:54:10.329 [DEBUG] [Thread-10426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:54:10.338 [DEBUG] [Thread-10426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:54:10.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:54:10.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:54:10.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:54:10.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:54:10.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:54:10.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:54:10.370 [DEBUG] [Thread-10426] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:54:13.862 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:17.608 [DEBUG] [Thread-10428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:22.901 [DEBUG] [Thread-10429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:24.278 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:32.669 [DEBUG] [Thread-10430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:34.707 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:40.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:54:40.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:54:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:54:41.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 54, 17), 29.93, 12.24, 0.0, 9.88, 19.95, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:54:41.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:54:17
2025-11-26T02:54:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:54:41.312 [DEBUG] [Thread-10431] [transport.py] [_log()] starting thread (client mode): 0x70d3b730
2025-11-26T02:54:41.312 [DEBUG] [Thread-10431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:54:41.331 [DEBUG] [Thread-10431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:54:41.332 [INFO] [Thread-10431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] client lang: <none>
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] server lang: <none>
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] kex follows: False
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:54:41.335 [DEBUG] [Thread-10431] [transport.py] [_log()] Compression: none
2025-11-26T02:54:41.336 [DEBUG] [Thread-10431] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:54:41.345 [DEBUG] [Thread-10431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:54:41.345 [DEBUG] [Thread-10431] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:54:41.346 [DEBUG] [Thread-10431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:54:41.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:54:41.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:54:41.389 [DEBUG] [Thread-10431] [transport.py] [_log()] userauth is OK
2025-11-26T02:54:41.389 [DEBUG] [Thread-10431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:54:41.390 [DEBUG] [Thread-10431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:54:41.390 [DEBUG] [Thread-10431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:54:41.390 [DEBUG] [Thread-10431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:54:41.411 [INFO] [Thread-10431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:54:41.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:54:42.025 [DEBUG] [Thread-10431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:54:42.025 [DEBUG] [Thread-10431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:54:42.026 [DEBUG] [Thread-10431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:54:42.066 [DEBUG] [Thread-10431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:54:42.066 [DEBUG] [Thread-10431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:54:42.069 [DEBUG] [Thread-10431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:54:42.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:54:42.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:54:42.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:54:42.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:54:42.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:54:42.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:54:42.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:54:42.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:54:42.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:54:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.037596 -999.00  +21.00   5.44     16   -5.10 1 1 1 1 1     0    0 25.83 -4.74 ZNESW 6.5 5.4 87.0 11.3 20.2 -26.5 20.1 -26.0 19.7 -24.6 20.0 -25.7
2025-11-26T02:54:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:54:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:54:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.037596
2025-11-26T02:54:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:54:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:54:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:54:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:54:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:54:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:54:17', tmtdew=29.93, humidity=12.24, cloud=0.0, wind=9.88, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:54:18', seeing=1.08, atlas_timestamp='2025-11-26T00:54:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028750000000000497, -0.03974999999999973, 0.0022500000000000853, -0.08250000000000135, -0.016500000000000625, 0.030750000000001165, -0.03700000000000081, -0.03074999999999939, 0.0, -0.026999999999999247, -0.03175000000000061, -0.009000000000000341, 0.06899999999999906, 0.07124999999999915, -0.028999999999999915, -0.0030000000000001137, -0.003750000000000142, -0.0235000000000003, -0.04349999999999987, -0.00575000000000081, 0.1059999999999981, 0.059749999999999304, -0.010749999999999815, 0.014249999999998764, 0.0009999999999994458, 0.02200000000000024, -0.011250000000000426, 0.05150000000000077, 0.08699999999999974, 0.1490000000000009, 0.03049999999999997, -0.03599999999999959, -0.017250000000000654], zp_timestamp='2025-11-26T00:51:00')
2025-11-26T02:54:42.097 [DEBUG] [Thread-10431] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:54:42.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:54:42.198 [DEBUG] [Thread-10434] [transport.py] [_log()] starting thread (client mode): 0x70d55a50
2025-11-26T02:54:42.198 [DEBUG] [Thread-10434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:54:42.213 [DEBUG] [Thread-10434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:54:42.213 [INFO] [Thread-10434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] client lang: <none>
2025-11-26T02:54:42.221 [DEBUG] [Thread-10434] [transport.py] [_log()] server lang: <none>
2025-11-26T02:54:42.222 [DEBUG] [Thread-10434] [transport.py] [_log()] kex follows: False
2025-11-26T02:54:42.222 [DEBUG] [Thread-10434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:54:42.222 [DEBUG] [Thread-10434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:54:42.222 [DEBUG] [Thread-10434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:54:42.222 [DEBUG] [Thread-10434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:54:42.222 [DEBUG] [Thread-10434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:54:42.222 [DEBUG] [Thread-10434] [transport.py] [_log()] Compression: none
2025-11-26T02:54:42.222 [DEBUG] [Thread-10434] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:54:42.281 [DEBUG] [Thread-10434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:54:42.282 [DEBUG] [Thread-10434] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:54:42.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:54:42.283 [DEBUG] [Thread-10434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:54:42.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:54:42.338 [DEBUG] [Thread-10434] [transport.py] [_log()] userauth is OK
2025-11-26T02:54:42.338 [DEBUG] [Thread-10434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:54:42.339 [DEBUG] [Thread-10434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:54:42.339 [DEBUG] [Thread-10434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:54:42.339 [DEBUG] [Thread-10434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:54:42.359 [INFO] [Thread-10434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:54:42.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:54:42.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:54:43.174 [DEBUG] [Thread-10434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:54:43.174 [DEBUG] [Thread-10434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:54:43.222 [DEBUG] [Thread-10434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:54:43.223 [DEBUG] [Thread-10434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:54:43.231 [DEBUG] [Thread-10434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:54:43.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:54:43.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:54:43.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:54:43.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:54:43.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:54:43.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:54:43.266 [DEBUG] [Thread-10434] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:54:45.121 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:47.700 [DEBUG] [Thread-10436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:48.780 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:48.781 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:54:55.560 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:02.740 [DEBUG] [Thread-10437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:06.005 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:13.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:55:13.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:55:13.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:55:13.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 54, 49), 29.9, 12.26, 0.0, 9.85, 19.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:55:13.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:54:49
2025-11-26T02:55:14.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:55:14.211 [DEBUG] [Thread-10438] [transport.py] [_log()] starting thread (client mode): 0x70d556f0
2025-11-26T02:55:14.211 [DEBUG] [Thread-10438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:55:14.233 [DEBUG] [Thread-10438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:55:14.233 [INFO] [Thread-10438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:55:14.234 [DEBUG] [Thread-10438] [transport.py] [_log()] client lang: <none>
2025-11-26T02:55:14.235 [DEBUG] [Thread-10438] [transport.py] [_log()] server lang: <none>
2025-11-26T02:55:14.235 [DEBUG] [Thread-10438] [transport.py] [_log()] kex follows: False
2025-11-26T02:55:14.235 [DEBUG] [Thread-10438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:55:14.235 [DEBUG] [Thread-10438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:55:14.235 [DEBUG] [Thread-10438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:55:14.235 [DEBUG] [Thread-10438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:55:14.235 [DEBUG] [Thread-10438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:55:14.235 [DEBUG] [Thread-10438] [transport.py] [_log()] Compression: none
2025-11-26T02:55:14.235 [DEBUG] [Thread-10438] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:55:14.252 [DEBUG] [Thread-10438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:55:14.253 [DEBUG] [Thread-10438] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:55:14.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:55:14.254 [DEBUG] [Thread-10438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:55:14.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:55:14.256 [DEBUG] [Thread-10438] [transport.py] [_log()] userauth is OK
2025-11-26T02:55:14.256 [DEBUG] [Thread-10438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:55:14.256 [DEBUG] [Thread-10438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:55:14.256 [DEBUG] [Thread-10438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:55:14.256 [DEBUG] [Thread-10438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:55:14.282 [INFO] [Thread-10438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:55:14.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:55:16.156 [DEBUG] [Thread-10438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:55:16.156 [DEBUG] [Thread-10438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:55:16.157 [DEBUG] [Thread-10438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:55:16.197 [DEBUG] [Thread-10438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:55:16.197 [DEBUG] [Thread-10438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:55:16.201 [DEBUG] [Thread-10438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:55:16.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:55:16.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:55:16.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:55:16.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:55:16.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:55:16.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:55:16.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:55:16.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:55:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:55:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.037943 -999.00  +21.00   6.68     16   -5.00 1 1 1 1 1     0    0 26.07 -5.04 ZNESW 4.8 6.7 70.6 11.7 20.2 -26.7 20.1 -26.0 19.8 -24.6 20.1 -25.8
2025-11-26T02:55:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:55:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:55:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.037943
2025-11-26T02:55:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:55:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:55:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:55:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:55:16.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:55:16.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:54:49', tmtdew=29.9, humidity=12.26, cloud=0.0, wind=9.85, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:54:50', seeing=1.28, atlas_timestamp='2025-11-26T00:54:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028750000000000497, -0.03974999999999973, 0.0022500000000000853, -0.08250000000000135, -0.016500000000000625, 0.030750000000001165, -0.03700000000000081, -0.03074999999999939, 0.0, -0.026999999999999247, -0.03175000000000061, -0.009000000000000341, 0.06899999999999906, 0.07124999999999915, -0.028999999999999915, -0.0030000000000001137, -0.003750000000000142, -0.0235000000000003, -0.04349999999999987, -0.00575000000000081, 0.1059999999999981, 0.059749999999999304, -0.010749999999999815, 0.014249999999998764, 0.0009999999999994458, 0.02200000000000024, -0.011250000000000426, 0.05150000000000077, 0.08699999999999974, 0.1490000000000009, 0.03049999999999997, -0.03599999999999959, -0.017250000000000654], zp_timestamp='2025-11-26T00:51:00')
2025-11-26T02:55:16.227 [DEBUG] [Thread-10438] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:55:16.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:55:16.322 [DEBUG] [Thread-10441] [transport.py] [_log()] starting thread (client mode): 0x6e316530
2025-11-26T02:55:16.323 [DEBUG] [Thread-10441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:55:16.337 [DEBUG] [Thread-10441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:55:16.337 [INFO] [Thread-10441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:55:16.344 [DEBUG] [Thread-10441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:55:16.344 [DEBUG] [Thread-10441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] client lang: <none>
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] server lang: <none>
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] kex follows: False
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] Compression: none
2025-11-26T02:55:16.345 [DEBUG] [Thread-10441] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:55:16.403 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:16.406 [DEBUG] [Thread-10441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:55:16.406 [DEBUG] [Thread-10441] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:55:16.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:55:16.408 [DEBUG] [Thread-10441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:55:16.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:55:16.464 [DEBUG] [Thread-10441] [transport.py] [_log()] userauth is OK
2025-11-26T02:55:16.464 [DEBUG] [Thread-10441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:55:16.464 [DEBUG] [Thread-10441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:55:16.464 [DEBUG] [Thread-10441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:55:16.464 [DEBUG] [Thread-10441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:55:16.485 [INFO] [Thread-10441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:55:16.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:55:16.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:55:17.368 [DEBUG] [Thread-10441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:55:17.368 [DEBUG] [Thread-10441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:55:17.416 [DEBUG] [Thread-10441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:55:17.416 [DEBUG] [Thread-10441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:55:17.425 [DEBUG] [Thread-10441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:55:17.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:55:17.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:55:17.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:55:17.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:55:17.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:55:17.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:55:17.461 [DEBUG] [Thread-10441] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:55:17.779 [DEBUG] [Thread-10443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:22.972 [DEBUG] [Thread-10444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:26.840 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:32.828 [DEBUG] [Thread-10445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:37.359 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:47.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:55:47.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:55:47.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:55:47.756 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:47.866 [DEBUG] [Thread-10446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 55, 21), 29.9, 12.28, 0.0, 9.74, 19.9, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:55:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:55:21
2025-11-26T02:55:48.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:55:48.408 [DEBUG] [Thread-10447] [transport.py] [_log()] starting thread (client mode): 0x70de7700
2025-11-26T02:55:48.408 [DEBUG] [Thread-10447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:55:48.429 [DEBUG] [Thread-10447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:55:48.429 [INFO] [Thread-10447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] client lang: <none>
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] server lang: <none>
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] kex follows: False
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] Compression: none
2025-11-26T02:55:48.433 [DEBUG] [Thread-10447] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:55:48.450 [DEBUG] [Thread-10447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:55:48.451 [DEBUG] [Thread-10447] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:55:48.451 [DEBUG] [Thread-10447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:55:48.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:55:48.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:55:48.453 [DEBUG] [Thread-10447] [transport.py] [_log()] userauth is OK
2025-11-26T02:55:48.454 [DEBUG] [Thread-10447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:55:48.454 [DEBUG] [Thread-10447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:55:48.454 [DEBUG] [Thread-10447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:55:48.454 [DEBUG] [Thread-10447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:55:48.478 [INFO] [Thread-10447] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:55:48.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:55:48.980 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:48.981 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:55:49.099 [DEBUG] [Thread-10447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:55:49.099 [DEBUG] [Thread-10447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:55:49.099 [DEBUG] [Thread-10447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:55:49.140 [DEBUG] [Thread-10447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:55:49.140 [DEBUG] [Thread-10447] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:55:49.144 [DEBUG] [Thread-10447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:55:49.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:55:49.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:55:49.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:55:49.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:55:49.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:55:49.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:55:49.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:55:49.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:55:49.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:55:49.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.038290 -999.00  +21.00   7.42     16   -5.20 1 1 1 1 1     0    0 26.60 -4.80 ZNESW 7.8 7.4 112.0 10.1 20.2 -26.7 20.1 -26.0 19.8 -24.7 20.0 -25.7
2025-11-26T02:55:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:55:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:55:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.038290
2025-11-26T02:55:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:55:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:55:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:55:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:55:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:55:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:55:21', tmtdew=29.9, humidity=12.28, cloud=0.0, wind=9.74, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:55:22', seeing=1.29, atlas_timestamp='2025-11-26T00:55:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028750000000000497, -0.03974999999999973, 0.0022500000000000853, -0.08250000000000135, -0.016500000000000625, 0.030750000000001165, -0.03700000000000081, -0.03074999999999939, 0.0, -0.026999999999999247, -0.03175000000000061, -0.009000000000000341, 0.06899999999999906, 0.07124999999999915, -0.028999999999999915, -0.0030000000000001137, -0.003750000000000142, -0.0235000000000003, -0.04349999999999987, -0.00575000000000081, 0.1059999999999981, 0.059749999999999304, -0.010749999999999815, 0.014249999999998764, 0.0009999999999994458, 0.02200000000000024, -0.011250000000000426, 0.05150000000000077, 0.08699999999999974, 0.1490000000000009, 0.03049999999999997, -0.03599999999999959, -0.017250000000000654], zp_timestamp='2025-11-26T00:51:00')
2025-11-26T02:55:49.169 [DEBUG] [Thread-10447] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:55:49.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:55:49.263 [DEBUG] [Thread-10450] [transport.py] [_log()] starting thread (client mode): 0x70d7f2b0
2025-11-26T02:55:49.263 [DEBUG] [Thread-10450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:55:49.281 [DEBUG] [Thread-10450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:55:49.282 [INFO] [Thread-10450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] client lang: <none>
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] server lang: <none>
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] kex follows: False
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:55:49.289 [DEBUG] [Thread-10450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:55:49.290 [DEBUG] [Thread-10450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:55:49.290 [DEBUG] [Thread-10450] [transport.py] [_log()] Compression: none
2025-11-26T02:55:49.290 [DEBUG] [Thread-10450] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:55:49.345 [DEBUG] [Thread-10450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:55:49.345 [DEBUG] [Thread-10450] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:55:49.346 [DEBUG] [Thread-10450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:55:49.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:55:49.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:55:49.403 [DEBUG] [Thread-10450] [transport.py] [_log()] userauth is OK
2025-11-26T02:55:49.403 [DEBUG] [Thread-10450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:55:49.403 [DEBUG] [Thread-10450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:55:49.403 [DEBUG] [Thread-10450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:55:49.403 [DEBUG] [Thread-10450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:55:49.420 [INFO] [Thread-10450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:55:49.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:55:49.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:55:50.212 [DEBUG] [Thread-10450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:55:50.213 [DEBUG] [Thread-10450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:55:50.261 [DEBUG] [Thread-10450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:55:50.262 [DEBUG] [Thread-10450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:55:50.273 [DEBUG] [Thread-10450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:55:50.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:55:50.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:55:50.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:55:50.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:55:50.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:55:50.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:55:50.311 [DEBUG] [Thread-10450] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:55:58.152 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:02.897 [DEBUG] [Thread-10452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:08.545 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:17.943 [DEBUG] [Thread-10453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:18.943 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:56:20.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:56:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:56:21.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 55, 54), 29.84, 12.28, 0.0, 10.11, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:56:21.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:55:54
2025-11-26T02:56:21.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:56:21.278 [DEBUG] [Thread-10454] [transport.py] [_log()] starting thread (client mode): 0x6e316890
2025-11-26T02:56:21.278 [DEBUG] [Thread-10454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:56:21.298 [DEBUG] [Thread-10454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:56:21.299 [INFO] [Thread-10454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:56:21.301 [DEBUG] [Thread-10454] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] client lang: <none>
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] server lang: <none>
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] kex follows: False
2025-11-26T02:56:21.302 [DEBUG] [Thread-10454] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:56:21.303 [DEBUG] [Thread-10454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:56:21.303 [DEBUG] [Thread-10454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:56:21.303 [DEBUG] [Thread-10454] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:56:21.303 [DEBUG] [Thread-10454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:56:21.303 [DEBUG] [Thread-10454] [transport.py] [_log()] Compression: none
2025-11-26T02:56:21.303 [DEBUG] [Thread-10454] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:56:21.323 [DEBUG] [Thread-10454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:56:21.323 [DEBUG] [Thread-10454] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:56:21.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:56:21.324 [DEBUG] [Thread-10454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:56:21.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:56:21.326 [DEBUG] [Thread-10454] [transport.py] [_log()] userauth is OK
2025-11-26T02:56:21.326 [DEBUG] [Thread-10454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:56:21.326 [DEBUG] [Thread-10454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:56:21.326 [DEBUG] [Thread-10454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:56:21.326 [DEBUG] [Thread-10454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:56:21.350 [INFO] [Thread-10454] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:56:21.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:56:21.990 [DEBUG] [Thread-10454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:56:21.991 [DEBUG] [Thread-10454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:56:21.991 [DEBUG] [Thread-10454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:56:22.031 [DEBUG] [Thread-10454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:56:22.031 [DEBUG] [Thread-10454] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:56:22.034 [DEBUG] [Thread-10454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:56:22.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:56:22.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:56:22.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:56:22.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:56:22.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:56:22.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:56:22.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.038637 -999.00  +21.00   8.53     16   -5.10 1 1 1 1 1     0    0 25.79 -4.90 ZNESW 9.6 8.5 120.8 10.5 20.2 -26.3 20.1 -26.1 19.7 -24.9 20.0 -25.8
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.038637
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:55:54', tmtdew=29.84, humidity=12.28, cloud=0.0, wind=10.11, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:55:54', seeing=1.29, atlas_timestamp='2025-11-26T00:55:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.05524999999999913, 0.02325000000000088, -0.0365000000000002, 0.010500000000000398, 0.05925000000000047, -0.008000000000000895, -0.02224999999999966, -0.038000000000000256, -0.031500000000001194, -0.008750000000000924, 0.0065000000000008384, 0.03999999999999915, 0.06625000000000014, -0.03200000000000003, 0.010999999999999233, 0.02224999999999966, 0.026500000000000412, -0.032000000000001805, 0.0017499999999976978, 0.1144999999999996, 0.059749999999999304, 0.004250000000000753, -0.010749999999999815, 0.019000000000000128, 0.06649999999999956, 0.015750000000000597, 0.09350000000000058, 0.10899999999999999, 0.12900000000000134, 0.028999999999999915, 0.022500000000000853, 0.05075000000000074], zp_timestamp='2025-11-26T00:54:00')
2025-11-26T02:56:22.053 [DEBUG] [Thread-10454] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:56:22.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:56:22.136 [DEBUG] [Thread-10457] [transport.py] [_log()] starting thread (client mode): 0x70d407f0
2025-11-26T02:56:22.136 [DEBUG] [Thread-10457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:56:22.151 [DEBUG] [Thread-10457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:56:22.151 [INFO] [Thread-10457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] client lang: <none>
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] server lang: <none>
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] kex follows: False
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] Compression: none
2025-11-26T02:56:22.159 [DEBUG] [Thread-10457] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:56:22.219 [DEBUG] [Thread-10457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:56:22.220 [DEBUG] [Thread-10457] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:56:22.221 [DEBUG] [Thread-10457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:56:22.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:56:22.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:56:22.279 [DEBUG] [Thread-10457] [transport.py] [_log()] userauth is OK
2025-11-26T02:56:22.280 [DEBUG] [Thread-10457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:56:22.280 [DEBUG] [Thread-10457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:56:22.280 [DEBUG] [Thread-10457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:56:22.280 [DEBUG] [Thread-10457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:56:22.300 [INFO] [Thread-10457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:56:22.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:56:22.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:56:23.049 [DEBUG] [Thread-10459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:23.086 [DEBUG] [Thread-10457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:56:23.086 [DEBUG] [Thread-10457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:56:23.134 [DEBUG] [Thread-10457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:56:23.134 [DEBUG] [Thread-10457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:56:23.143 [DEBUG] [Thread-10457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:56:23.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:56:23.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:56:23.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:56:23.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:56:23.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:56:23.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:56:23.180 [DEBUG] [Thread-10457] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:56:29.342 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:32.973 [DEBUG] [Thread-10460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:39.737 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:48.026 [DEBUG] [Thread-10461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:49.184 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:49.185 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:50.117 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:56:53.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:56:53.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:56:53.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:56:53.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 56, 25), 29.84, 12.26, 0.0, 10.3, 19.8, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:56:53.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:56:25
2025-11-26T02:56:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:56:54.128 [DEBUG] [Thread-10462] [transport.py] [_log()] starting thread (client mode): 0x70d6b610
2025-11-26T02:56:54.129 [DEBUG] [Thread-10462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:56:54.147 [DEBUG] [Thread-10462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:56:54.147 [INFO] [Thread-10462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] client lang: <none>
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] server lang: <none>
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] kex follows: False
2025-11-26T02:56:54.151 [DEBUG] [Thread-10462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:56:54.152 [DEBUG] [Thread-10462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:56:54.152 [DEBUG] [Thread-10462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:56:54.152 [DEBUG] [Thread-10462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:56:54.152 [DEBUG] [Thread-10462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:56:54.152 [DEBUG] [Thread-10462] [transport.py] [_log()] Compression: none
2025-11-26T02:56:54.152 [DEBUG] [Thread-10462] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:56:54.170 [DEBUG] [Thread-10462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:56:54.170 [DEBUG] [Thread-10462] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:56:54.171 [DEBUG] [Thread-10462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:56:54.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:56:54.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:56:54.173 [DEBUG] [Thread-10462] [transport.py] [_log()] userauth is OK
2025-11-26T02:56:54.173 [DEBUG] [Thread-10462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:56:54.174 [DEBUG] [Thread-10462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:56:54.174 [DEBUG] [Thread-10462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:56:54.174 [DEBUG] [Thread-10462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:56:54.192 [INFO] [Thread-10462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:56:54.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:56:54.811 [DEBUG] [Thread-10462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:56:54.812 [DEBUG] [Thread-10462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:56:54.812 [DEBUG] [Thread-10462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:56:54.852 [DEBUG] [Thread-10462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:56:54.852 [DEBUG] [Thread-10462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:56:54.855 [DEBUG] [Thread-10462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:56:54.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:56:54.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:56:54.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:56:54.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:56:54.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:56:54.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:56:54.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:56:54.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:56:54.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:56:54.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.038985 -999.00  +21.00   7.60     16   -5.10 1 1 1 1 1     0    0 26.24 -4.96 ZNESW 6.8 7.6 84.1 10.9 20.2 -26.6 20.1 -26.0 19.8 -24.9 20.0 -25.9
2025-11-26T02:56:54.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:56:54.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:56:54.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.038985
2025-11-26T02:56:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:56:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:56:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:56:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:56:54.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:56:54.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:56:25', tmtdew=29.84, humidity=12.26, cloud=0.0, wind=10.3, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:56:26', seeing=1.04, atlas_timestamp='2025-11-26T00:56:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.05524999999999913, 0.02325000000000088, -0.0365000000000002, 0.010500000000000398, 0.05925000000000047, -0.008000000000000895, -0.02224999999999966, -0.038000000000000256, -0.031500000000001194, -0.008750000000000924, 0.0065000000000008384, 0.03999999999999915, 0.06625000000000014, -0.03200000000000003, 0.010999999999999233, 0.02224999999999966, 0.026500000000000412, -0.032000000000001805, 0.0017499999999976978, 0.1144999999999996, 0.059749999999999304, 0.004250000000000753, -0.010749999999999815, 0.019000000000000128, 0.06649999999999956, 0.015750000000000597, 0.09350000000000058, 0.10899999999999999, 0.12900000000000134, 0.028999999999999915, 0.022500000000000853, 0.05075000000000074], zp_timestamp='2025-11-26T00:54:00')
2025-11-26T02:56:54.878 [DEBUG] [Thread-10462] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:56:54.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:56:54.974 [DEBUG] [Thread-10465] [transport.py] [_log()] starting thread (client mode): 0x70df9fc0
2025-11-26T02:56:54.974 [DEBUG] [Thread-10465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:56:54.988 [DEBUG] [Thread-10465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:56:54.988 [INFO] [Thread-10465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] client lang: <none>
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] server lang: <none>
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] kex follows: False
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:56:54.996 [DEBUG] [Thread-10465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:56:54.997 [DEBUG] [Thread-10465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:56:54.997 [DEBUG] [Thread-10465] [transport.py] [_log()] Compression: none
2025-11-26T02:56:54.997 [DEBUG] [Thread-10465] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:56:55.053 [DEBUG] [Thread-10465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:56:55.053 [DEBUG] [Thread-10465] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:56:55.054 [DEBUG] [Thread-10465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:56:55.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:56:55.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:56:55.109 [DEBUG] [Thread-10465] [transport.py] [_log()] userauth is OK
2025-11-26T02:56:55.109 [DEBUG] [Thread-10465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:56:55.110 [DEBUG] [Thread-10465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:56:55.110 [DEBUG] [Thread-10465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:56:55.110 [DEBUG] [Thread-10465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:56:55.128 [INFO] [Thread-10465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:56:55.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:56:55.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:56:55.928 [DEBUG] [Thread-10465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:56:55.928 [DEBUG] [Thread-10465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:56:55.975 [DEBUG] [Thread-10465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:56:55.976 [DEBUG] [Thread-10465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:56:55.985 [DEBUG] [Thread-10465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:56:55.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:56:55.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:56:56.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:56:56.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:56:56.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:56:56.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:56:56.020 [DEBUG] [Thread-10465] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:57:00.516 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:03.062 [DEBUG] [Thread-10467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:10.969 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:18.112 [DEBUG] [Thread-10468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:21.382 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:23.126 [DEBUG] [Thread-10469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:26.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:57:26.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:57:26.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:57:26.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 56, 58), 29.79, 12.31, 0.0, 9.99, 19.8, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:57:26.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:56:58
2025-11-26T02:57:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:57:26.989 [DEBUG] [Thread-10470] [transport.py] [_log()] starting thread (client mode): 0x70dd2bc0
2025-11-26T02:57:26.989 [DEBUG] [Thread-10470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:57:27.009 [DEBUG] [Thread-10470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:57:27.009 [INFO] [Thread-10470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:57:27.012 [DEBUG] [Thread-10470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:57:27.012 [DEBUG] [Thread-10470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:57:27.012 [DEBUG] [Thread-10470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] client lang: <none>
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] server lang: <none>
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] kex follows: False
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:57:27.013 [DEBUG] [Thread-10470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:57:27.014 [DEBUG] [Thread-10470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:57:27.014 [DEBUG] [Thread-10470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:57:27.014 [DEBUG] [Thread-10470] [transport.py] [_log()] Compression: none
2025-11-26T02:57:27.014 [DEBUG] [Thread-10470] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:57:27.033 [DEBUG] [Thread-10470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:57:27.034 [DEBUG] [Thread-10470] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:57:27.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:57:27.035 [DEBUG] [Thread-10470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:57:27.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:57:27.037 [DEBUG] [Thread-10470] [transport.py] [_log()] userauth is OK
2025-11-26T02:57:27.038 [DEBUG] [Thread-10470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:57:27.038 [DEBUG] [Thread-10470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:57:27.038 [DEBUG] [Thread-10470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:57:27.038 [DEBUG] [Thread-10470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:57:27.073 [INFO] [Thread-10470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:57:27.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:57:27.674 [DEBUG] [Thread-10470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:57:27.674 [DEBUG] [Thread-10470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:57:27.675 [DEBUG] [Thread-10470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:57:27.716 [DEBUG] [Thread-10470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:57:27.716 [DEBUG] [Thread-10470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:57:27.720 [DEBUG] [Thread-10470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:57:27.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:57:27.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:57:27.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:57:27.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:57:27.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:57:27.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:57:27.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:57:27.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:57:27.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:57:27.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.039679 -999.00  +20.90   7.19     16   -5.10 1 1 1 1 1     0    0 26.14 -4.88 ZNESW 8.5 7.2 118.6 12.1 20.2 -26.7 20.1 -26.1 19.7 -24.7 20.0 -25.7
2025-11-26T02:57:27.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:57:27.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:57:27.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.039679
2025-11-26T02:57:27.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:57:27.747 [DEBUG] [Thread-10470] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:57:27.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:57:27.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:57:27.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:57:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:57:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:56:58', tmtdew=29.79, humidity=12.31, cloud=0.0, wind=9.99, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:56:58', seeing=1.04, atlas_timestamp='2025-11-26T00:57:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.05524999999999913, 0.02325000000000088, -0.0365000000000002, 0.010500000000000398, 0.05925000000000047, -0.008000000000000895, -0.02224999999999966, -0.038000000000000256, -0.031500000000001194, -0.008750000000000924, 0.0065000000000008384, 0.03999999999999915, 0.06625000000000014, -0.03200000000000003, 0.010999999999999233, 0.02224999999999966, 0.026500000000000412, -0.032000000000001805, 0.0017499999999976978, 0.1144999999999996, 0.059749999999999304, 0.004250000000000753, -0.010749999999999815, 0.019000000000000128, 0.06649999999999956, 0.015750000000000597, 0.09350000000000058, 0.10899999999999999, 0.12900000000000134, 0.028999999999999915, 0.022500000000000853, 0.05075000000000074], zp_timestamp='2025-11-26T00:54:00')
2025-11-26T02:57:27.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:57:27.843 [DEBUG] [Thread-10473] [transport.py] [_log()] starting thread (client mode): 0x70dd2650
2025-11-26T02:57:27.843 [DEBUG] [Thread-10473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:57:27.858 [DEBUG] [Thread-10473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:57:27.858 [INFO] [Thread-10473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:57:27.865 [DEBUG] [Thread-10473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] client lang: <none>
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] server lang: <none>
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] kex follows: False
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] Compression: none
2025-11-26T02:57:27.866 [DEBUG] [Thread-10473] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:57:27.925 [DEBUG] [Thread-10473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:57:27.926 [DEBUG] [Thread-10473] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:57:27.927 [DEBUG] [Thread-10473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:57:27.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:57:27.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:57:27.981 [DEBUG] [Thread-10473] [transport.py] [_log()] userauth is OK
2025-11-26T02:57:27.982 [DEBUG] [Thread-10473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:57:27.982 [DEBUG] [Thread-10473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:57:27.982 [DEBUG] [Thread-10473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:57:27.982 [DEBUG] [Thread-10473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:57:28.000 [INFO] [Thread-10473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:57:28.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:57:28.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:57:28.825 [DEBUG] [Thread-10473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:57:28.825 [DEBUG] [Thread-10473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:57:28.873 [DEBUG] [Thread-10473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:57:28.873 [DEBUG] [Thread-10473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:57:28.883 [DEBUG] [Thread-10473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:57:28.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:57:28.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:57:28.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:57:28.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:57:28.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:57:28.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:57:28.919 [DEBUG] [Thread-10473] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:57:31.775 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:33.147 [DEBUG] [Thread-10475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:42.177 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:48.202 [DEBUG] [Thread-10476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:49.386 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:49.387 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:52.573 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:57:58.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:57:58.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:57:58.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:57:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 57, 30), 29.77, 12.34, 0.0, 9.95, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:57:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:57:30
2025-11-26T02:57:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:57:59.880 [DEBUG] [Thread-10477] [transport.py] [_log()] starting thread (client mode): 0x70d570a0
2025-11-26T02:57:59.880 [DEBUG] [Thread-10477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:57:59.900 [DEBUG] [Thread-10477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:57:59.901 [INFO] [Thread-10477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] client lang: <none>
2025-11-26T02:57:59.904 [DEBUG] [Thread-10477] [transport.py] [_log()] server lang: <none>
2025-11-26T02:57:59.905 [DEBUG] [Thread-10477] [transport.py] [_log()] kex follows: False
2025-11-26T02:57:59.905 [DEBUG] [Thread-10477] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:57:59.905 [DEBUG] [Thread-10477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:57:59.905 [DEBUG] [Thread-10477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:57:59.905 [DEBUG] [Thread-10477] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:57:59.905 [DEBUG] [Thread-10477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:57:59.905 [DEBUG] [Thread-10477] [transport.py] [_log()] Compression: none
2025-11-26T02:57:59.905 [DEBUG] [Thread-10477] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:57:59.923 [DEBUG] [Thread-10477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:57:59.924 [DEBUG] [Thread-10477] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:57:59.925 [DEBUG] [Thread-10477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:57:59.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:57:59.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:57:59.928 [DEBUG] [Thread-10477] [transport.py] [_log()] userauth is OK
2025-11-26T02:57:59.928 [DEBUG] [Thread-10477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:57:59.928 [DEBUG] [Thread-10477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:57:59.928 [DEBUG] [Thread-10477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:57:59.929 [DEBUG] [Thread-10477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:57:59.943 [INFO] [Thread-10477] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:57:59.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:58:00.609 [DEBUG] [Thread-10477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:58:00.609 [DEBUG] [Thread-10477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:58:00.610 [DEBUG] [Thread-10477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:58:00.650 [DEBUG] [Thread-10477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:58:00.650 [DEBUG] [Thread-10477] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:58:00.654 [DEBUG] [Thread-10477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:58:00.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:58:00.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:58:00.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:58:00.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:58:00.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:58:00.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:58:00.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:58:00.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:58:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:58:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.040026 -999.00  +20.90   8.55     16   -5.10 1 1 1 1 1     0    0 25.99 -4.53 ZNESW 5.9 8.6 69.3 11.3 20.2 -26.4 20.1 -26.1 19.7 -24.8 20.0 -25.7
2025-11-26T02:58:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:58:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:58:00.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.040026
2025-11-26T02:58:00.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:58:00.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:58:00.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:58:00.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:58:00.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:58:00.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:57:30', tmtdew=29.77, humidity=12.34, cloud=0.0, wind=9.95, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:57:30', seeing=1.09, atlas_timestamp='2025-11-26T00:57:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.05524999999999913, 0.02325000000000088, -0.0365000000000002, 0.010500000000000398, 0.05925000000000047, -0.008000000000000895, -0.02224999999999966, -0.038000000000000256, -0.031500000000001194, -0.008750000000000924, 0.0065000000000008384, 0.03999999999999915, 0.06625000000000014, -0.03200000000000003, 0.010999999999999233, 0.02224999999999966, 0.026500000000000412, -0.032000000000001805, 0.0017499999999976978, 0.1144999999999996, 0.059749999999999304, 0.004250000000000753, -0.010749999999999815, 0.019000000000000128, 0.06649999999999956, 0.015750000000000597, 0.09350000000000058, 0.10899999999999999, 0.12900000000000134, 0.028999999999999915, 0.022500000000000853, 0.05075000000000074], zp_timestamp='2025-11-26T00:54:00')
2025-11-26T02:58:00.681 [DEBUG] [Thread-10477] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:58:00.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:58:00.777 [DEBUG] [Thread-10480] [transport.py] [_log()] starting thread (client mode): 0x70d55a50
2025-11-26T02:58:00.777 [DEBUG] [Thread-10480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:58:00.795 [DEBUG] [Thread-10480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:58:00.795 [INFO] [Thread-10480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:58:00.805 [DEBUG] [Thread-10480] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] client lang: <none>
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] server lang: <none>
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] kex follows: False
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:58:00.806 [DEBUG] [Thread-10480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:58:00.807 [DEBUG] [Thread-10480] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:58:00.807 [DEBUG] [Thread-10480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:58:00.807 [DEBUG] [Thread-10480] [transport.py] [_log()] Compression: none
2025-11-26T02:58:00.807 [DEBUG] [Thread-10480] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:58:00.864 [DEBUG] [Thread-10480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:58:00.865 [DEBUG] [Thread-10480] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:58:00.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:58:00.866 [DEBUG] [Thread-10480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:58:00.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:58:00.924 [DEBUG] [Thread-10480] [transport.py] [_log()] userauth is OK
2025-11-26T02:58:00.925 [DEBUG] [Thread-10480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:58:00.925 [DEBUG] [Thread-10480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:58:00.925 [DEBUG] [Thread-10480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:58:00.925 [DEBUG] [Thread-10480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:58:00.944 [INFO] [Thread-10480] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:58:00.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:58:00.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:58:01.791 [DEBUG] [Thread-10480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:58:01.791 [DEBUG] [Thread-10480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:58:01.839 [DEBUG] [Thread-10480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:58:01.839 [DEBUG] [Thread-10480] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:58:01.847 [DEBUG] [Thread-10480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:58:01.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:58:01.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:58:01.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:58:01.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:58:01.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:58:01.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:58:01.881 [DEBUG] [Thread-10480] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:58:02.972 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:03.240 [DEBUG] [Thread-10482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:13.386 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:18.283 [DEBUG] [Thread-10483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:23.194 [DEBUG] [Thread-10484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:23.821 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:31.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:58:31.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:58:31.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:58:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 58, 2), 29.8, 12.29, 0.0, 10.22, 19.75, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:58:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:58:02
2025-11-26T02:58:32.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:58:32.889 [DEBUG] [Thread-10485] [transport.py] [_log()] starting thread (client mode): 0x70d56f20
2025-11-26T02:58:32.889 [DEBUG] [Thread-10485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:58:32.912 [DEBUG] [Thread-10485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:58:32.912 [INFO] [Thread-10485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] client lang: <none>
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] server lang: <none>
2025-11-26T02:58:32.915 [DEBUG] [Thread-10485] [transport.py] [_log()] kex follows: False
2025-11-26T02:58:32.916 [DEBUG] [Thread-10485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:58:32.916 [DEBUG] [Thread-10485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:58:32.916 [DEBUG] [Thread-10485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:58:32.916 [DEBUG] [Thread-10485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:58:32.916 [DEBUG] [Thread-10485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:58:32.916 [DEBUG] [Thread-10485] [transport.py] [_log()] Compression: none
2025-11-26T02:58:32.916 [DEBUG] [Thread-10485] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:58:32.930 [DEBUG] [Thread-10485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:58:32.931 [DEBUG] [Thread-10485] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:58:32.931 [DEBUG] [Thread-10485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:58:32.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:58:32.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:58:32.932 [DEBUG] [Thread-10485] [transport.py] [_log()] userauth is OK
2025-11-26T02:58:32.932 [DEBUG] [Thread-10485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:58:32.932 [DEBUG] [Thread-10485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:58:32.932 [DEBUG] [Thread-10485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:58:32.932 [DEBUG] [Thread-10485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:58:32.953 [INFO] [Thread-10485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:58:32.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:58:33.315 [DEBUG] [Thread-10487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:33.609 [DEBUG] [Thread-10485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:58:33.609 [DEBUG] [Thread-10485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:58:33.610 [DEBUG] [Thread-10485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:58:33.651 [DEBUG] [Thread-10485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:58:33.651 [DEBUG] [Thread-10485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:58:33.653 [DEBUG] [Thread-10485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:58:33.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:58:33.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:58:33.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:58:33.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:58:33.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:58:33.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:58:33.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:58:33.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:58:33.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:58:33.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.040373 -999.00  +20.90   6.21     16   -5.10 1 1 1 1 1     0    0 25.60 -4.77 ZNESW 6.0 6.2 96.4 10.1 20.2 -26.7 20.1 -26.1 19.8 -24.8 20.0 -26.0
2025-11-26T02:58:33.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:58:33.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:58:33.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.040373
2025-11-26T02:58:33.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:58:33.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:58:33.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:58:33.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:58:33.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:58:33.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:58:02', tmtdew=29.8, humidity=12.29, cloud=0.0, wind=10.22, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:58:02', seeing=1.14, atlas_timestamp='2025-11-26T00:58:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.05524999999999913, 0.02325000000000088, -0.0365000000000002, 0.010500000000000398, 0.05925000000000047, -0.008000000000000895, -0.02224999999999966, -0.038000000000000256, -0.031500000000001194, -0.008750000000000924, 0.0065000000000008384, 0.03999999999999915, 0.06625000000000014, -0.03200000000000003, 0.010999999999999233, 0.02224999999999966, 0.026500000000000412, -0.032000000000001805, 0.0017499999999976978, 0.1144999999999996, 0.059749999999999304, 0.004250000000000753, -0.010749999999999815, 0.019000000000000128, 0.06649999999999956, 0.015750000000000597, 0.09350000000000058, 0.10899999999999999, 0.12900000000000134, 0.028999999999999915, 0.022500000000000853, 0.05075000000000074], zp_timestamp='2025-11-26T00:54:00')
2025-11-26T02:58:33.673 [DEBUG] [Thread-10485] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:58:33.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:58:33.764 [DEBUG] [Thread-10489] [transport.py] [_log()] starting thread (client mode): 0x70d6b520
2025-11-26T02:58:33.764 [DEBUG] [Thread-10489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:58:33.783 [DEBUG] [Thread-10489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:58:33.783 [INFO] [Thread-10489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] client lang: <none>
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] server lang: <none>
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] kex follows: False
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] Compression: none
2025-11-26T02:58:33.791 [DEBUG] [Thread-10489] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:58:33.845 [DEBUG] [Thread-10489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:58:33.845 [DEBUG] [Thread-10489] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:58:33.846 [DEBUG] [Thread-10489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:58:33.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:58:33.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:58:33.903 [DEBUG] [Thread-10489] [transport.py] [_log()] userauth is OK
2025-11-26T02:58:33.903 [DEBUG] [Thread-10489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:58:33.903 [DEBUG] [Thread-10489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:58:33.903 [DEBUG] [Thread-10489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:58:33.903 [DEBUG] [Thread-10489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:58:33.917 [INFO] [Thread-10489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:58:33.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:58:33.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:58:34.218 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:34.723 [DEBUG] [Thread-10489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:58:34.723 [DEBUG] [Thread-10489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:58:34.773 [DEBUG] [Thread-10489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:58:34.773 [DEBUG] [Thread-10489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:58:34.781 [DEBUG] [Thread-10489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:58:34.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:58:34.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:58:34.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:58:34.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:58:34.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:58:34.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:58:34.813 [DEBUG] [Thread-10489] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:58:44.648 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:48.347 [DEBUG] [Thread-10491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:49.589 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:49.590 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:58:55.076 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:03.399 [DEBUG] [Thread-10492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:04.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:59:04.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:59:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T02:59:05.510 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:05.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 58, 34), 29.86, 12.29, 0.0, 10.15, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:59:05.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:58:34
2025-11-26T02:59:05.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:59:05.807 [DEBUG] [Thread-10493] [transport.py] [_log()] starting thread (client mode): 0x70d6abf0
2025-11-26T02:59:05.807 [DEBUG] [Thread-10493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:59:05.827 [DEBUG] [Thread-10493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:59:05.827 [INFO] [Thread-10493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:59:05.830 [DEBUG] [Thread-10493] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:59:05.830 [DEBUG] [Thread-10493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:59:05.830 [DEBUG] [Thread-10493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:59:05.830 [DEBUG] [Thread-10493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] client lang: <none>
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] server lang: <none>
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] kex follows: False
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] Compression: none
2025-11-26T02:59:05.831 [DEBUG] [Thread-10493] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:59:05.847 [DEBUG] [Thread-10493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:59:05.847 [DEBUG] [Thread-10493] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:59:05.847 [DEBUG] [Thread-10493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:59:05.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:59:05.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:59:05.848 [DEBUG] [Thread-10493] [transport.py] [_log()] userauth is OK
2025-11-26T02:59:05.848 [DEBUG] [Thread-10493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:59:05.848 [DEBUG] [Thread-10493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:59:05.848 [DEBUG] [Thread-10493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:59:05.848 [DEBUG] [Thread-10493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:59:05.858 [INFO] [Thread-10493] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:59:05.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:59:06.489 [DEBUG] [Thread-10493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:59:06.489 [DEBUG] [Thread-10493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:59:06.489 [DEBUG] [Thread-10493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:59:06.530 [DEBUG] [Thread-10493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:59:06.530 [DEBUG] [Thread-10493] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:59:06.532 [DEBUG] [Thread-10493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:59:06.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:59:06.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:59:06.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:59:06.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:59:06.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:59:06.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:59:06.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:59:06.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:59:06.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:59:06.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.040721 -999.00  +20.90   7.68     16   -5.10 1 1 1 1 1     0    0 25.66 -5.18 ZNESW 6.9 7.7 67.8 10.3 20.1 -26.6 20.1 -26.0 19.7 -24.7 20.0 -25.7
2025-11-26T02:59:06.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:59:06.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:59:06.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.040721
2025-11-26T02:59:06.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:59:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:59:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:59:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:59:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:59:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:58:34', tmtdew=29.86, humidity=12.29, cloud=0.0, wind=10.15, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:58:34', seeing=1.05, atlas_timestamp='2025-11-26T00:58:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.05524999999999913, 0.02325000000000088, -0.0365000000000002, 0.010500000000000398, 0.05925000000000047, -0.008000000000000895, -0.02224999999999966, -0.038000000000000256, -0.031500000000001194, -0.008750000000000924, 0.0065000000000008384, 0.03999999999999915, 0.06625000000000014, -0.03200000000000003, 0.010999999999999233, 0.02224999999999966, 0.026500000000000412, -0.032000000000001805, 0.0017499999999976978, 0.1144999999999996, 0.059749999999999304, 0.004250000000000753, -0.010749999999999815, 0.019000000000000128, 0.06649999999999956, 0.015750000000000597, 0.09350000000000058, 0.10899999999999999, 0.12900000000000134, 0.028999999999999915, 0.022500000000000853, 0.05075000000000074], zp_timestamp='2025-11-26T00:57:00')
2025-11-26T02:59:06.549 [DEBUG] [Thread-10493] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:59:06.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:59:06.634 [DEBUG] [Thread-10496] [transport.py] [_log()] starting thread (client mode): 0x70d567a0
2025-11-26T02:59:06.634 [DEBUG] [Thread-10496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:59:06.651 [DEBUG] [Thread-10496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:59:06.651 [INFO] [Thread-10496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:59:06.658 [DEBUG] [Thread-10496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:59:06.658 [DEBUG] [Thread-10496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:59:06.658 [DEBUG] [Thread-10496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:59:06.658 [DEBUG] [Thread-10496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:59:06.658 [DEBUG] [Thread-10496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:59:06.658 [DEBUG] [Thread-10496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:59:06.658 [DEBUG] [Thread-10496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] client lang: <none>
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] server lang: <none>
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] kex follows: False
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] Compression: none
2025-11-26T02:59:06.659 [DEBUG] [Thread-10496] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:59:06.713 [DEBUG] [Thread-10496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:59:06.714 [DEBUG] [Thread-10496] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:59:06.714 [DEBUG] [Thread-10496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:59:06.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:59:06.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:59:06.770 [DEBUG] [Thread-10496] [transport.py] [_log()] userauth is OK
2025-11-26T02:59:06.770 [DEBUG] [Thread-10496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:59:06.770 [DEBUG] [Thread-10496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:59:06.770 [DEBUG] [Thread-10496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:59:06.770 [DEBUG] [Thread-10496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:59:06.784 [INFO] [Thread-10496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:59:06.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:59:06.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:59:07.656 [DEBUG] [Thread-10496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:59:07.656 [DEBUG] [Thread-10496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:59:07.703 [DEBUG] [Thread-10496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:59:07.703 [DEBUG] [Thread-10496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:59:07.711 [DEBUG] [Thread-10496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:59:07.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:59:07.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:59:07.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:59:07.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:59:07.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:59:07.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:59:07.742 [DEBUG] [Thread-10496] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:59:15.932 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:18.426 [DEBUG] [Thread-10498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:23.255 [DEBUG] [Thread-10499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:26.312 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:33.488 [DEBUG] [Thread-10500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:36.707 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:37.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T02:59:37.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T02:59: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
2025-11-26T02:59:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 59, 6), 29.82, 12.33, 0.0, 10.06, 19.82, 0, 0, 0, 2, 0, 0),)
2025-11-26T02:59:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:59:06
2025-11-26T02:59:38.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T02:59:38.736 [DEBUG] [Thread-10501] [transport.py] [_log()] starting thread (client mode): 0x70d55cc0
2025-11-26T02:59:38.736 [DEBUG] [Thread-10501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:59:38.756 [DEBUG] [Thread-10501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T02:59:38.756 [INFO] [Thread-10501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] client lang: <none>
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] server lang: <none>
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] kex follows: False
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:59:38.758 [DEBUG] [Thread-10501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:59:38.759 [DEBUG] [Thread-10501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:59:38.759 [DEBUG] [Thread-10501] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:59:38.759 [DEBUG] [Thread-10501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:59:38.759 [DEBUG] [Thread-10501] [transport.py] [_log()] Compression: none
2025-11-26T02:59:38.759 [DEBUG] [Thread-10501] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:59:38.775 [DEBUG] [Thread-10501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:59:38.775 [DEBUG] [Thread-10501] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:59:38.775 [DEBUG] [Thread-10501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T02:59:38.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T02:59:38.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:59:38.776 [DEBUG] [Thread-10501] [transport.py] [_log()] userauth is OK
2025-11-26T02:59:38.776 [DEBUG] [Thread-10501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:59:38.776 [DEBUG] [Thread-10501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:59:38.776 [DEBUG] [Thread-10501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T02:59:38.776 [DEBUG] [Thread-10501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:59:38.791 [INFO] [Thread-10501] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:59:38.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:59:39.414 [DEBUG] [Thread-10501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:59:39.414 [DEBUG] [Thread-10501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:59:39.415 [DEBUG] [Thread-10501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T02:59:39.455 [DEBUG] [Thread-10501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:59:39.455 [DEBUG] [Thread-10501] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:59:39.457 [DEBUG] [Thread-10501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:59:39.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:59:39.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T02:59:39.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T02:59:39.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T02:59:39.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:59:39.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T02:59:39.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:59:39.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:59:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T02:59:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.041068 -999.00  +20.90   6.26     16   -5.10 1 1 1 1 1     0    0 25.53 -5.39 ZNESW 6.9 6.3 124.5 10.0 20.2 -26.3 20.1 -26.1 19.7 -24.8 20.0 -25.7
2025-11-26T02:59:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T02:59:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T02:59:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.041068
2025-11-26T02:59:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T02:59:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T02:59:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T02:59:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T02:59:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T02:59:39.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:59:06', tmtdew=29.82, humidity=12.33, cloud=0.0, wind=10.06, temperature=19.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T02:59:06', seeing=1.05, atlas_timestamp='2025-11-26T00:59:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.05524999999999913, 0.02325000000000088, -0.0365000000000002, 0.010500000000000398, 0.05925000000000047, -0.008000000000000895, -0.02224999999999966, -0.038000000000000256, -0.031500000000001194, -0.008750000000000924, 0.0065000000000008384, 0.03999999999999915, 0.06625000000000014, -0.03200000000000003, 0.010999999999999233, 0.02224999999999966, 0.026500000000000412, -0.032000000000001805, 0.0017499999999976978, 0.1144999999999996, 0.059749999999999304, 0.004250000000000753, -0.010749999999999815, 0.019000000000000128, 0.06649999999999956, 0.015750000000000597, 0.09350000000000058, 0.10899999999999999, 0.12900000000000134, 0.028999999999999915, 0.022500000000000853, 0.05075000000000074], zp_timestamp='2025-11-26T00:57:00')
2025-11-26T02:59:39.477 [DEBUG] [Thread-10501] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:59:39.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T02:59:39.564 [DEBUG] [Thread-10504] [transport.py] [_log()] starting thread (client mode): 0x70de4730
2025-11-26T02:59:39.564 [DEBUG] [Thread-10504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T02:59:39.578 [DEBUG] [Thread-10504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T02:59:39.578 [INFO] [Thread-10504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] client lang: <none>
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] server lang: <none>
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] kex follows: False
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] Compression: none
2025-11-26T02:59:39.586 [DEBUG] [Thread-10504] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T02:59:39.644 [DEBUG] [Thread-10504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T02:59:39.644 [DEBUG] [Thread-10504] [transport.py] [_log()] Switch to new keys ...
2025-11-26T02:59:39.645 [DEBUG] [Thread-10504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T02:59:39.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T02:59:39.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T02:59:39.702 [DEBUG] [Thread-10504] [transport.py] [_log()] userauth is OK
2025-11-26T02:59:39.702 [DEBUG] [Thread-10504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T02:59:39.702 [DEBUG] [Thread-10504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T02:59:39.702 [DEBUG] [Thread-10504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T02:59:39.702 [DEBUG] [Thread-10504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T02:59:39.715 [INFO] [Thread-10504] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T02:59:39.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T02:59:39.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T02:59:40.524 [DEBUG] [Thread-10504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T02:59:40.524 [DEBUG] [Thread-10504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T02:59:40.572 [DEBUG] [Thread-10504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T02:59:40.572 [DEBUG] [Thread-10504] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T02:59:40.581 [DEBUG] [Thread-10504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T02:59:40.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T02:59:40.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T02:59:40.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T02:59:40.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T02:59:40.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T02:59:40.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T02:59:40.617 [DEBUG] [Thread-10504] [transport.py] [_log()] EOF in transport thread
2025-11-26T02:59:47.106 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:48.516 [DEBUG] [Thread-10506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:49.801 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:49.802 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T02:59:57.553 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:03.558 [DEBUG] [Thread-10507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:07.956 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:00:10.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:00:10.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:00:11.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 2, 59, 38), 29.79, 12.38, 0.0, 10.11, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:00:11.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 02:59:38
2025-11-26T03:00:11.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:00:11.618 [DEBUG] [Thread-10508] [transport.py] [_log()] starting thread (client mode): 0x70d39270
2025-11-26T03:00:11.618 [DEBUG] [Thread-10508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:00:11.638 [DEBUG] [Thread-10508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:00:11.638 [INFO] [Thread-10508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] client lang: <none>
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] server lang: <none>
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] kex follows: False
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] Compression: none
2025-11-26T03:00:11.640 [DEBUG] [Thread-10508] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:00:11.656 [DEBUG] [Thread-10508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:00:11.657 [DEBUG] [Thread-10508] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:00:11.657 [DEBUG] [Thread-10508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:00:11.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:00:11.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:00:11.658 [DEBUG] [Thread-10508] [transport.py] [_log()] userauth is OK
2025-11-26T03:00:11.658 [DEBUG] [Thread-10508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:00:11.658 [DEBUG] [Thread-10508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:00:11.658 [DEBUG] [Thread-10508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:00:11.658 [DEBUG] [Thread-10508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:00:11.670 [INFO] [Thread-10508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:00:11.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:00:12.291 [DEBUG] [Thread-10508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:00:12.291 [DEBUG] [Thread-10508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:00:12.291 [DEBUG] [Thread-10508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:00:12.332 [DEBUG] [Thread-10508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:00:12.332 [DEBUG] [Thread-10508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:00:12.334 [DEBUG] [Thread-10508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:00:12.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:00:12.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:00:12.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:00:12.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:00:12.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:00:12.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:00:12.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.041415 -999.00  +20.80   7.09     16   -5.10 1 1 1 1 1     0    0 25.77 -6.01 ZNESW 8.0 7.1 91.3 10.0 20.2 -26.4 20.1 -26.1 19.7 -24.9 19.9 -25.7
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.041415
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:00:12.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T02:59:38', tmtdew=29.79, humidity=12.38, cloud=0.0, wind=10.11, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:00:10', seeing=1.11, atlas_timestamp='2025-11-26T00:59:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.05524999999999913, 0.02325000000000088, -0.0365000000000002, 0.010500000000000398, 0.05925000000000047, -0.008000000000000895, -0.02224999999999966, -0.038000000000000256, -0.031500000000001194, -0.008750000000000924, 0.0065000000000008384, 0.03999999999999915, 0.06625000000000014, -0.03200000000000003, 0.010999999999999233, 0.02224999999999966, 0.026500000000000412, -0.032000000000001805, 0.0017499999999976978, 0.1144999999999996, 0.059749999999999304, 0.004250000000000753, -0.010749999999999815, 0.019000000000000128, 0.06649999999999956, 0.015750000000000597, 0.09350000000000058, 0.10899999999999999, 0.12900000000000134, 0.028999999999999915, 0.022500000000000853, 0.05075000000000074], zp_timestamp='2025-11-26T00:57:00')
2025-11-26T03:00:12.351 [DEBUG] [Thread-10508] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:00:12.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:00:18.407 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:18.595 [DEBUG] [Thread-10511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:23.308 [DEBUG] [Thread-10512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:28.825 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:33.642 [DEBUG] [Thread-10513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:39.222 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:48.681 [DEBUG] [Thread-10514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:49.600 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:50.003 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:50.004 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:00:59.976 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:03.717 [DEBUG] [Thread-10515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:10.374 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:18.753 [DEBUG] [Thread-10516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:20.772 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:23.394 [DEBUG] [Thread-10517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:31.170 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:33.792 [DEBUG] [Thread-10518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:41.585 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:48.828 [DEBUG] [Thread-10519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:50.205 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:50.206 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:01:52.040 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:02.461 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:03.868 [DEBUG] [Thread-10520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:12.879 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:18.898 [DEBUG] [Thread-10521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:23.313 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:23.454 [DEBUG] [Thread-10522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:23.949 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T03:02:33.837 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:33.930 [DEBUG] [Thread-10523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:44.275 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:48.964 [DEBUG] [Thread-10524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:50.410 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:50.410 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:02:53.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:02:53.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:02:54.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 2, 50), 29.76, 12.36, 0.0, 9.62, 19.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:02:54.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:02:50
2025-11-26T03:02:54.664 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:02:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:02:54.939 [DEBUG] [Thread-10525] [transport.py] [_log()] starting thread (client mode): 0x70d39390
2025-11-26T03:02:54.939 [DEBUG] [Thread-10525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:02:54.960 [DEBUG] [Thread-10525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:02:54.960 [INFO] [Thread-10525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:02:54.963 [DEBUG] [Thread-10525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] client lang: <none>
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] server lang: <none>
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] kex follows: False
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] Compression: none
2025-11-26T03:02:54.964 [DEBUG] [Thread-10525] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:02:54.978 [DEBUG] [Thread-10525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:02:54.978 [DEBUG] [Thread-10525] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:02:54.979 [DEBUG] [Thread-10525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:02:54.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:02:54.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:02:54.979 [DEBUG] [Thread-10525] [transport.py] [_log()] userauth is OK
2025-11-26T03:02:54.979 [DEBUG] [Thread-10525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:02:54.979 [DEBUG] [Thread-10525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:02:54.979 [DEBUG] [Thread-10525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:02:54.979 [DEBUG] [Thread-10525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:02:55.006 [INFO] [Thread-10525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:02:55.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:02:55.684 [DEBUG] [Thread-10525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:02:55.685 [DEBUG] [Thread-10525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:02:55.685 [DEBUG] [Thread-10525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:02:55.725 [DEBUG] [Thread-10525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:02:55.725 [DEBUG] [Thread-10525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:02:55.728 [DEBUG] [Thread-10525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:02:55.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:02:55.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:02:55.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:02:55.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:02:55.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:02:55.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:02:55.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:02:55.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.043151 -999.00  +20.70   8.01     17   -5.10 1 1 1 1 1     0    0 25.53 -11.66 ZNESW 5.5 8.0 88.4 11.1 20.1 -26.7 20.0 -25.9 19.7 -24.8 19.9 -25.8
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.043151
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:02:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:02:50', tmtdew=29.76, humidity=12.36, cloud=0.0, wind=9.62, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:02:50', seeing=1.17, atlas_timestamp='2025-11-26T01:02:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.062249999999998806, 0.007250000000000867, -0.02850000000000108, 0.009000000000000341, 0.026250000000000995, -0.01550000000000118, -0.03275000000000006, -0.03049999999999997, -0.041999999999999815, -0.020749999999999602, -0.0030000000000001137, 0.023499999999998522, 0.1067499999999999, -0.045000000000001705, 0.006999999999999673, 0.01774999999999949, -0.0024999999999995026, -0.05000000000000071, -0.00975000000000037, 0.10149999999999793, 0.03874999999999851, 0.01025000000000098, -0.008250000000000313, -0.015000000000000568, 0.05550000000000033, 0.008750000000000924, 0.05650000000000155, 0.11800000000000033, 0.08500000000000085, -0.012999999999998124, -0.006999999999997897, 0.0022500000000000853], zp_timestamp='2025-11-26T01:01:00')
2025-11-26T03:02:55.746 [DEBUG] [Thread-10525] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:02:55.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:02:55.835 [DEBUG] [Thread-10528] [transport.py] [_log()] starting thread (client mode): 0x70d3b460
2025-11-26T03:02:55.835 [DEBUG] [Thread-10528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:02:55.849 [DEBUG] [Thread-10528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:02:55.849 [INFO] [Thread-10528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] client lang: <none>
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] server lang: <none>
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] kex follows: False
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:02:55.856 [DEBUG] [Thread-10528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:02:55.857 [DEBUG] [Thread-10528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:02:55.857 [DEBUG] [Thread-10528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:02:55.857 [DEBUG] [Thread-10528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:02:55.857 [DEBUG] [Thread-10528] [transport.py] [_log()] Compression: none
2025-11-26T03:02:55.857 [DEBUG] [Thread-10528] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:02:55.913 [DEBUG] [Thread-10528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:02:55.913 [DEBUG] [Thread-10528] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:02:55.913 [DEBUG] [Thread-10528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:02:55.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:02:55.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:02:55.975 [DEBUG] [Thread-10528] [transport.py] [_log()] userauth is OK
2025-11-26T03:02:55.975 [DEBUG] [Thread-10528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:02:55.975 [DEBUG] [Thread-10528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:02:55.975 [DEBUG] [Thread-10528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:02:55.975 [DEBUG] [Thread-10528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:02:55.998 [INFO] [Thread-10528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:02:55.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:02:55.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:02:56.803 [DEBUG] [Thread-10528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:02:56.803 [DEBUG] [Thread-10528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:02:56.851 [DEBUG] [Thread-10528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:02:56.851 [DEBUG] [Thread-10528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:02:56.860 [DEBUG] [Thread-10528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:02:56.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:02:56.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:02:56.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:02:56.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:02:56.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:02:56.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:02:56.896 [DEBUG] [Thread-10528] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:03:03.997 [DEBUG] [Thread-10530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:05.060 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:15.453 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:19.052 [DEBUG] [Thread-10531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:23.527 [DEBUG] [Thread-10532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:25.878 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:26.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:03:26.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:03:26.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:03:27.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 3, 22), 29.78, 12.34, 0.0, 9.58, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:03:27.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:03:22
2025-11-26T03:03:27.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:03:27.903 [DEBUG] [Thread-10533] [transport.py] [_log()] starting thread (client mode): 0x70d54640
2025-11-26T03:03:27.903 [DEBUG] [Thread-10533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:03:27.924 [DEBUG] [Thread-10533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:03:27.924 [INFO] [Thread-10533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:03:27.926 [DEBUG] [Thread-10533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] client lang: <none>
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] server lang: <none>
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] kex follows: False
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] Compression: none
2025-11-26T03:03:27.927 [DEBUG] [Thread-10533] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:03:27.942 [DEBUG] [Thread-10533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:03:27.942 [DEBUG] [Thread-10533] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:03:27.942 [DEBUG] [Thread-10533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:03:27.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:03:27.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:03:27.943 [DEBUG] [Thread-10533] [transport.py] [_log()] userauth is OK
2025-11-26T03:03:27.943 [DEBUG] [Thread-10533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:03:27.943 [DEBUG] [Thread-10533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:03:27.943 [DEBUG] [Thread-10533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:03:27.943 [DEBUG] [Thread-10533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:03:27.953 [INFO] [Thread-10533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:03:27.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:03:28.579 [DEBUG] [Thread-10533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:03:28.579 [DEBUG] [Thread-10533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:03:28.579 [DEBUG] [Thread-10533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:03:28.620 [DEBUG] [Thread-10533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:03:28.620 [DEBUG] [Thread-10533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:03:28.623 [DEBUG] [Thread-10533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:03:28.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:03:28.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:03:28.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:03:28.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:03:28.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:03:28.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:03:28.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.043499 -999.00  +20.70   7.93     17   -5.10 1 1 1 1 1     0    0 25.76 -13.33 ZNESW 6.8 7.9 127.6 9.2 20.1 -26.7 -999.0 -999.0 19.7 -24.7 19.9 -25.7
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.043499
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:03:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:03:22', tmtdew=29.78, humidity=12.34, cloud=0.0, wind=9.58, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:03:22', seeing=1.17, atlas_timestamp='2025-11-26T01:02:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.062249999999998806, 0.007250000000000867, -0.02850000000000108, 0.009000000000000341, 0.026250000000000995, -0.01550000000000118, -0.03275000000000006, -0.03049999999999997, -0.041999999999999815, -0.020749999999999602, -0.0030000000000001137, 0.023499999999998522, 0.1067499999999999, -0.045000000000001705, 0.006999999999999673, 0.01774999999999949, -0.0024999999999995026, -0.05000000000000071, -0.00975000000000037, 0.10149999999999793, 0.03874999999999851, 0.01025000000000098, -0.008250000000000313, -0.015000000000000568, 0.05550000000000033, 0.008750000000000924, 0.05650000000000155, 0.11800000000000033, 0.08500000000000085, -0.012999999999998124, -0.006999999999997897, 0.0022500000000000853], zp_timestamp='2025-11-26T01:01:00')
2025-11-26T03:03:28.643 [DEBUG] [Thread-10533] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:03:28.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:03:28.729 [DEBUG] [Thread-10536] [transport.py] [_log()] starting thread (client mode): 0x70dd25c0
2025-11-26T03:03:28.729 [DEBUG] [Thread-10536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:03:28.744 [DEBUG] [Thread-10536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:03:28.744 [INFO] [Thread-10536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] client lang: <none>
2025-11-26T03:03:28.751 [DEBUG] [Thread-10536] [transport.py] [_log()] server lang: <none>
2025-11-26T03:03:28.752 [DEBUG] [Thread-10536] [transport.py] [_log()] kex follows: False
2025-11-26T03:03:28.752 [DEBUG] [Thread-10536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:03:28.752 [DEBUG] [Thread-10536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:03:28.752 [DEBUG] [Thread-10536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:03:28.752 [DEBUG] [Thread-10536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:03:28.752 [DEBUG] [Thread-10536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:03:28.752 [DEBUG] [Thread-10536] [transport.py] [_log()] Compression: none
2025-11-26T03:03:28.752 [DEBUG] [Thread-10536] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:03:28.809 [DEBUG] [Thread-10536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:03:28.809 [DEBUG] [Thread-10536] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:03:28.810 [DEBUG] [Thread-10536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:03:28.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:03:28.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:03:28.866 [DEBUG] [Thread-10536] [transport.py] [_log()] userauth is OK
2025-11-26T03:03:28.866 [DEBUG] [Thread-10536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:03:28.866 [DEBUG] [Thread-10536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:03:28.866 [DEBUG] [Thread-10536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:03:28.866 [DEBUG] [Thread-10536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:03:28.884 [INFO] [Thread-10536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:03:28.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:03:28.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:03:29.709 [DEBUG] [Thread-10536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:03:29.709 [DEBUG] [Thread-10536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:03:29.759 [DEBUG] [Thread-10536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:03:29.759 [DEBUG] [Thread-10536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:03:29.771 [DEBUG] [Thread-10536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:03:29.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:03:29.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:03:29.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:03:29.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:03:29.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:03:29.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:03:29.804 [DEBUG] [Thread-10536] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:03:34.087 [DEBUG] [Thread-10538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:36.303 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:46.718 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:49.143 [DEBUG] [Thread-10539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:50.612 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:50.614 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:57.140 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:03:59.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:03:59.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:03:59.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:04:00.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 3, 54), 29.82, 12.34, 0.0, 9.71, 19.82, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:04:00.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:03:54
2025-11-26T03:04:00.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:04:00.761 [DEBUG] [Thread-10540] [transport.py] [_log()] starting thread (client mode): 0x70dd1120
2025-11-26T03:04:00.761 [DEBUG] [Thread-10540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:04:00.783 [DEBUG] [Thread-10540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:04:00.783 [INFO] [Thread-10540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:04:00.787 [DEBUG] [Thread-10540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:04:00.787 [DEBUG] [Thread-10540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:04:00.787 [DEBUG] [Thread-10540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] client lang: <none>
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] server lang: <none>
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] kex follows: False
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:04:00.788 [DEBUG] [Thread-10540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:04:00.789 [DEBUG] [Thread-10540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:04:00.789 [DEBUG] [Thread-10540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:04:00.789 [DEBUG] [Thread-10540] [transport.py] [_log()] Compression: none
2025-11-26T03:04:00.789 [DEBUG] [Thread-10540] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:04:00.807 [DEBUG] [Thread-10540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:04:00.808 [DEBUG] [Thread-10540] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:04:00.808 [DEBUG] [Thread-10540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:04:00.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:04:00.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:04:00.810 [DEBUG] [Thread-10540] [transport.py] [_log()] userauth is OK
2025-11-26T03:04:00.811 [DEBUG] [Thread-10540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:04:00.811 [DEBUG] [Thread-10540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:04:00.811 [DEBUG] [Thread-10540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:04:00.811 [DEBUG] [Thread-10540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:04:00.834 [INFO] [Thread-10540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:04:00.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:04:01.482 [DEBUG] [Thread-10540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:04:01.482 [DEBUG] [Thread-10540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:04:01.482 [DEBUG] [Thread-10540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:04:01.523 [DEBUG] [Thread-10540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:04:01.523 [DEBUG] [Thread-10540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:04:01.527 [DEBUG] [Thread-10540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:04:01.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:04:01.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:04:01.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:04:01.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:04:01.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:04:01.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:04:01.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:04:01.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:04:01.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:04:01.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.043846 -999.00  +20.70   8.26     16   -5.20 1 1 1 1 1     0    0 25.97 -15.06 ZNESW 8.2 8.3 72.4 9.7 20.1 -26.8 20.0 -26.0 19.7 -24.8 19.9 -25.6
2025-11-26T03:04:01.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:04:01.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:04:01.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.043846
2025-11-26T03:04:01.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:04:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:04:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:04:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:04:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:04:01.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:03:54', tmtdew=29.82, humidity=12.34, cloud=0.0, wind=9.71, temperature=19.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:03:54', seeing=1.17, atlas_timestamp='2025-11-26T01:03:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.062249999999998806, 0.007250000000000867, -0.02850000000000108, 0.009000000000000341, 0.026250000000000995, -0.01550000000000118, -0.03275000000000006, -0.03049999999999997, -0.041999999999999815, -0.020749999999999602, -0.0030000000000001137, 0.023499999999998522, 0.1067499999999999, -0.045000000000001705, 0.006999999999999673, 0.01774999999999949, -0.0024999999999995026, -0.05000000000000071, -0.00975000000000037, 0.10149999999999793, 0.03874999999999851, 0.01025000000000098, -0.008250000000000313, -0.015000000000000568, 0.05550000000000033, 0.008750000000000924, 0.05650000000000155, 0.11800000000000033, 0.08500000000000085, -0.012999999999998124, -0.006999999999997897, 0.0022500000000000853], zp_timestamp='2025-11-26T01:01:00')
2025-11-26T03:04:01.554 [DEBUG] [Thread-10540] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:04:01.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:04:01.650 [DEBUG] [Thread-10543] [transport.py] [_log()] starting thread (client mode): 0x70dd2bf0
2025-11-26T03:04:01.650 [DEBUG] [Thread-10543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:04:01.665 [DEBUG] [Thread-10543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:04:01.665 [INFO] [Thread-10543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:04:01.672 [DEBUG] [Thread-10543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] client lang: <none>
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] server lang: <none>
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] kex follows: False
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:04:01.673 [DEBUG] [Thread-10543] [transport.py] [_log()] Compression: none
2025-11-26T03:04:01.674 [DEBUG] [Thread-10543] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:04:01.729 [DEBUG] [Thread-10543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:04:01.730 [DEBUG] [Thread-10543] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:04:01.730 [DEBUG] [Thread-10543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:04:01.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:04:01.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:04:01.788 [DEBUG] [Thread-10543] [transport.py] [_log()] userauth is OK
2025-11-26T03:04:01.788 [DEBUG] [Thread-10543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:04:01.788 [DEBUG] [Thread-10543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:04:01.788 [DEBUG] [Thread-10543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:04:01.789 [DEBUG] [Thread-10543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:04:01.811 [INFO] [Thread-10543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:04:01.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:04:01.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:04:02.654 [DEBUG] [Thread-10543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:04:02.654 [DEBUG] [Thread-10543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:04:02.702 [DEBUG] [Thread-10543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:04:02.702 [DEBUG] [Thread-10543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:04:02.711 [DEBUG] [Thread-10543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:04:02.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:04:02.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:04:02.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:04:02.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:04:02.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:04:02.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:04:02.748 [DEBUG] [Thread-10543] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:04:04.184 [DEBUG] [Thread-10545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:07.533 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:17.932 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:19.234 [DEBUG] [Thread-10546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:23.605 [DEBUG] [Thread-10547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:28.325 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:32.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:04:32.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:04:32.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:04:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 4, 26), 29.82, 12.34, 0.0, 9.78, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:04:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:04:26
2025-11-26T03:04:33.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:04:33.691 [DEBUG] [Thread-10548] [transport.py] [_log()] starting thread (client mode): 0x70d57a60
2025-11-26T03:04:33.691 [DEBUG] [Thread-10548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:04:33.711 [DEBUG] [Thread-10548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:04:33.711 [INFO] [Thread-10548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:04:33.714 [DEBUG] [Thread-10548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] client lang: <none>
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] server lang: <none>
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] kex follows: False
2025-11-26T03:04:33.715 [DEBUG] [Thread-10548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:04:33.716 [DEBUG] [Thread-10548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:04:33.716 [DEBUG] [Thread-10548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:04:33.716 [DEBUG] [Thread-10548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:04:33.716 [DEBUG] [Thread-10548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:04:33.716 [DEBUG] [Thread-10548] [transport.py] [_log()] Compression: none
2025-11-26T03:04:33.716 [DEBUG] [Thread-10548] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:04:33.737 [DEBUG] [Thread-10548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:04:33.738 [DEBUG] [Thread-10548] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:04:33.738 [DEBUG] [Thread-10548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:04:33.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:04:33.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:04:33.740 [DEBUG] [Thread-10548] [transport.py] [_log()] userauth is OK
2025-11-26T03:04:33.741 [DEBUG] [Thread-10548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:04:33.741 [DEBUG] [Thread-10548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:04:33.741 [DEBUG] [Thread-10548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:04:33.741 [DEBUG] [Thread-10548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:04:33.764 [INFO] [Thread-10548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:04:33.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:04:34.271 [DEBUG] [Thread-10550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:34.406 [DEBUG] [Thread-10548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:04:34.406 [DEBUG] [Thread-10548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:04:34.406 [DEBUG] [Thread-10548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:04:34.446 [DEBUG] [Thread-10548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:04:34.446 [DEBUG] [Thread-10548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:04:34.448 [DEBUG] [Thread-10548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:04:34.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:04:34.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:04:34.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:04:34.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:04:34.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:04:34.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:04:34.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:04:34.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:04:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:04:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.044540 -999.00  +20.70   6.36     16   -5.20 1 1 1 1 1     0    0 26.03 -13.75 ZNESW 5.9 6.4 101.2 11.2 20.1 -26.7 20.0 -26.0 19.7 -24.7 19.9 -25.6
2025-11-26T03:04:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:04:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:04:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.044540
2025-11-26T03:04:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:04:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:04:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:04:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:04:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:04:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:04:26', tmtdew=29.82, humidity=12.34, cloud=0.0, wind=9.78, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:04:26', seeing=1.17, atlas_timestamp='2025-11-26T01:04:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.062249999999998806, 0.007250000000000867, -0.02850000000000108, 0.009000000000000341, 0.026250000000000995, -0.01550000000000118, -0.03275000000000006, -0.03049999999999997, -0.041999999999999815, -0.020749999999999602, -0.0030000000000001137, 0.023499999999998522, 0.1067499999999999, -0.045000000000001705, 0.006999999999999673, 0.01774999999999949, -0.0024999999999995026, -0.05000000000000071, -0.00975000000000037, 0.10149999999999793, 0.03874999999999851, 0.01025000000000098, -0.008250000000000313, -0.015000000000000568, 0.05550000000000033, 0.008750000000000924, 0.05650000000000155, 0.11800000000000033, 0.08500000000000085, -0.012999999999998124, -0.006999999999997897, 0.0022500000000000853], zp_timestamp='2025-11-26T01:01:00')
2025-11-26T03:04:34.470 [DEBUG] [Thread-10548] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:04:34.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:04:38.721 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:49.169 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:49.305 [DEBUG] [Thread-10552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:50.817 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:50.818 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:04:59.680 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:04.356 [DEBUG] [Thread-10553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:10.116 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:19.391 [DEBUG] [Thread-10554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:20.525 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:23.679 [DEBUG] [Thread-10555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:30.951 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:34.419 [DEBUG] [Thread-10556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:41.384 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:49.455 [DEBUG] [Thread-10557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:51.020 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:51.021 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:05:51.813 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:02.240 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:04.488 [DEBUG] [Thread-10558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:12.653 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:19.529 [DEBUG] [Thread-10559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:23.070 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:23.754 [DEBUG] [Thread-10560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:33.554 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:34.566 [DEBUG] [Thread-10561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:43.998 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:46.093 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T03:06:49.599 [DEBUG] [Thread-10562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:51.224 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:51.226 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:06:54.467 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:04.636 [DEBUG] [Thread-10563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:04.879 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:15.291 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:07:16.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:07:16.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:07:16.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 7, 6), 29.96, 12.23, 0.0, 8.98, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:07:16.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:07:06
2025-11-26T03:07:16.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:07:17.119 [DEBUG] [Thread-10564] [transport.py] [_log()] starting thread (client mode): 0x70de4730
2025-11-26T03:07:17.119 [DEBUG] [Thread-10564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:07:17.139 [DEBUG] [Thread-10564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:07:17.139 [INFO] [Thread-10564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] client lang: <none>
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] server lang: <none>
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] kex follows: False
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] Compression: none
2025-11-26T03:07:17.143 [DEBUG] [Thread-10564] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:07:17.161 [DEBUG] [Thread-10564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:07:17.161 [DEBUG] [Thread-10564] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:07:17.161 [DEBUG] [Thread-10564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:07:17.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:07:17.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:07:17.162 [DEBUG] [Thread-10564] [transport.py] [_log()] userauth is OK
2025-11-26T03:07:17.162 [DEBUG] [Thread-10564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:07:17.162 [DEBUG] [Thread-10564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:07:17.162 [DEBUG] [Thread-10564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:07:17.162 [DEBUG] [Thread-10564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:07:17.179 [INFO] [Thread-10564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:07:17.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:07:17.782 [DEBUG] [Thread-10564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:07:17.782 [DEBUG] [Thread-10564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:07:17.782 [DEBUG] [Thread-10564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:07:17.824 [DEBUG] [Thread-10564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:07:17.824 [DEBUG] [Thread-10564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:07:17.826 [DEBUG] [Thread-10564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:07:17.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:07:17.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:07:17.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:07:17.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:07:17.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:07:17.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:07:17.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:07:17.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:07:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:07:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.046276 -999.00  +20.70   8.86     16   -5.20 1 1 1 1 1     0    0 25.73 -16.96 ZNESW 9.2 8.9 117.8 10.1 20.1 -26.6 20.0 -25.9 19.6 -24.8 19.9 -25.6
2025-11-26T03:07:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:07:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:07:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.046276
2025-11-26T03:07:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:07:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:07:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:07:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:07:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:07:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:07:06', tmtdew=29.96, humidity=12.23, cloud=0.0, wind=8.98, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:07:06', seeing=0.94, atlas_timestamp='2025-11-26T01:06:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.062249999999998806, 0.007250000000000867, -0.02850000000000108, 0.009000000000000341, 0.026250000000000995, -0.01550000000000118, -0.03275000000000006, -0.03049999999999997, -0.041999999999999815, -0.020749999999999602, -0.0030000000000001137, 0.023499999999998522, 0.1067499999999999, -0.045000000000001705, 0.006999999999999673, 0.01774999999999949, -0.0024999999999995026, -0.05000000000000071, -0.00975000000000037, 0.10149999999999793, 0.03874999999999851, 0.01025000000000098, -0.008250000000000313, -0.015000000000000568, 0.05550000000000033, 0.008750000000000924, 0.05650000000000155, 0.11800000000000033, 0.08500000000000085, -0.012999999999998124, -0.006999999999997897, 0.0022500000000000853], zp_timestamp='2025-11-26T01:04:00')
2025-11-26T03:07:17.846 [DEBUG] [Thread-10564] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:07:17.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:07:17.939 [DEBUG] [Thread-10567] [transport.py] [_log()] starting thread (client mode): 0x70d56260
2025-11-26T03:07:17.939 [DEBUG] [Thread-10567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:07:17.954 [DEBUG] [Thread-10567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:07:17.954 [INFO] [Thread-10567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:07:17.961 [DEBUG] [Thread-10567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] client lang: <none>
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] server lang: <none>
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] kex follows: False
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:07:17.962 [DEBUG] [Thread-10567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:07:17.963 [DEBUG] [Thread-10567] [transport.py] [_log()] Compression: none
2025-11-26T03:07:17.963 [DEBUG] [Thread-10567] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:07:18.020 [DEBUG] [Thread-10567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:07:18.021 [DEBUG] [Thread-10567] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:07:18.021 [DEBUG] [Thread-10567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:07:18.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:07:18.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:07:18.076 [DEBUG] [Thread-10567] [transport.py] [_log()] userauth is OK
2025-11-26T03:07:18.077 [DEBUG] [Thread-10567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:07:18.077 [DEBUG] [Thread-10567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:07:18.077 [DEBUG] [Thread-10567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:07:18.077 [DEBUG] [Thread-10567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:07:18.096 [INFO] [Thread-10567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:07:18.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:07:18.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:07:18.907 [DEBUG] [Thread-10567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:07:18.907 [DEBUG] [Thread-10567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:07:18.956 [DEBUG] [Thread-10567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:07:18.956 [DEBUG] [Thread-10567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:07:18.966 [DEBUG] [Thread-10567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:07:18.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:07:18.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:07:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:07:18.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:07:18.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:07:18.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:07:19.003 [DEBUG] [Thread-10567] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:07:19.667 [DEBUG] [Thread-10569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:23.810 [DEBUG] [Thread-10570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:25.690 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:34.720 [DEBUG] [Thread-10571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:36.071 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:46.461 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:48.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:07:48.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:07:49.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:07:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 7, 38), 29.96, 12.16, 0.0, 9.21, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:07:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:07:38
2025-11-26T03:07:49.751 [DEBUG] [Thread-10572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:49.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:07:49.996 [DEBUG] [Thread-10573] [transport.py] [_log()] starting thread (client mode): 0x70de5870
2025-11-26T03:07:49.996 [DEBUG] [Thread-10573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:07:50.020 [DEBUG] [Thread-10573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:07:50.020 [INFO] [Thread-10573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] client lang: <none>
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] server lang: <none>
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] kex follows: False
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] Compression: none
2025-11-26T03:07:50.025 [DEBUG] [Thread-10573] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:07:50.039 [DEBUG] [Thread-10573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:07:50.040 [DEBUG] [Thread-10573] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:07:50.040 [DEBUG] [Thread-10573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:07:50.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:07:50.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:07:50.041 [DEBUG] [Thread-10573] [transport.py] [_log()] userauth is OK
2025-11-26T03:07:50.041 [DEBUG] [Thread-10573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:07:50.041 [DEBUG] [Thread-10573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:07:50.041 [DEBUG] [Thread-10573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:07:50.041 [DEBUG] [Thread-10573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:07:50.057 [INFO] [Thread-10573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:07:50.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:07:50.672 [DEBUG] [Thread-10573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:07:50.672 [DEBUG] [Thread-10573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:07:50.672 [DEBUG] [Thread-10573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:07:50.714 [DEBUG] [Thread-10573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:07:50.714 [DEBUG] [Thread-10573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:07:50.717 [DEBUG] [Thread-10573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:07:50.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:07:50.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:07:50.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:07:50.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:07:50.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:07:50.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:07:50.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:07:50.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.046971 -999.00  +20.70   9.96     16   -5.30 1 1 1 1 1     0    0 25.39 -17.91 ZNESW 10.0 10.0 109.8 12.6 20.1 -26.2 20.0 -25.9 19.6 -24.4 19.9 -25.5
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.046971
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:07:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:07:38', tmtdew=29.96, humidity=12.16, cloud=0.0, wind=9.21, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:07:38', seeing=1.07, atlas_timestamp='2025-11-26T01:07:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.062249999999998806, 0.007250000000000867, -0.02850000000000108, 0.009000000000000341, 0.026250000000000995, -0.01550000000000118, -0.03275000000000006, -0.03049999999999997, -0.041999999999999815, -0.020749999999999602, -0.0030000000000001137, 0.023499999999998522, 0.1067499999999999, -0.045000000000001705, 0.006999999999999673, 0.01774999999999949, -0.0024999999999995026, -0.05000000000000071, -0.00975000000000037, 0.10149999999999793, 0.03874999999999851, 0.01025000000000098, -0.008250000000000313, -0.015000000000000568, 0.05550000000000033, 0.008750000000000924, 0.05650000000000155, 0.11800000000000033, 0.08500000000000085, -0.012999999999998124, -0.006999999999997897, 0.0022500000000000853], zp_timestamp='2025-11-26T01:04:00')
2025-11-26T03:07:50.736 [DEBUG] [Thread-10573] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:07:50.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:07:50.821 [DEBUG] [Thread-10576] [transport.py] [_log()] starting thread (client mode): 0x70da4b80
2025-11-26T03:07:50.821 [DEBUG] [Thread-10576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:07:50.837 [DEBUG] [Thread-10576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:07:50.837 [INFO] [Thread-10576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] client lang: <none>
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] server lang: <none>
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] kex follows: False
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] Compression: none
2025-11-26T03:07:50.845 [DEBUG] [Thread-10576] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:07:50.902 [DEBUG] [Thread-10576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:07:50.903 [DEBUG] [Thread-10576] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:07:50.903 [DEBUG] [Thread-10576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:07:50.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:07:50.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:07:50.959 [DEBUG] [Thread-10576] [transport.py] [_log()] userauth is OK
2025-11-26T03:07:50.959 [DEBUG] [Thread-10576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:07:50.959 [DEBUG] [Thread-10576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:07:50.959 [DEBUG] [Thread-10576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:07:50.959 [DEBUG] [Thread-10576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:07:50.974 [INFO] [Thread-10576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:07:50.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:07:50.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:07:51.426 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:51.427 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:07:51.791 [DEBUG] [Thread-10576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:07:51.791 [DEBUG] [Thread-10576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:07:51.839 [DEBUG] [Thread-10576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:07:51.839 [DEBUG] [Thread-10576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:07:51.847 [DEBUG] [Thread-10576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:07:51.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:07:51.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:07:51.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:07:51.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:07:51.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:07:51.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:07:51.879 [DEBUG] [Thread-10576] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:07:56.863 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:04.784 [DEBUG] [Thread-10578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:07.260 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:17.658 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:19.839 [DEBUG] [Thread-10579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:21.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:08:21.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:08:21.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
2025-11-26T03:08:22.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 8, 10), 29.94, 12.19, 0.0, 9.33, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:08:22.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:08:10
2025-11-26T03:08:22.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:08:22.845 [DEBUG] [Thread-10580] [transport.py] [_log()] starting thread (client mode): 0x70d3bd90
2025-11-26T03:08:22.845 [DEBUG] [Thread-10580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:08:22.866 [DEBUG] [Thread-10580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:08:22.866 [INFO] [Thread-10580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:08:22.869 [DEBUG] [Thread-10580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] client lang: <none>
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] server lang: <none>
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] kex follows: False
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] Compression: none
2025-11-26T03:08:22.870 [DEBUG] [Thread-10580] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:08:22.888 [DEBUG] [Thread-10580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:08:22.889 [DEBUG] [Thread-10580] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:08:22.890 [DEBUG] [Thread-10580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:08:22.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:08:22.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:08:22.892 [DEBUG] [Thread-10580] [transport.py] [_log()] userauth is OK
2025-11-26T03:08:22.892 [DEBUG] [Thread-10580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:08:22.892 [DEBUG] [Thread-10580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:08:22.892 [DEBUG] [Thread-10580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:08:22.892 [DEBUG] [Thread-10580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:08:22.916 [INFO] [Thread-10580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:08:22.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:08:23.560 [DEBUG] [Thread-10580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:08:23.560 [DEBUG] [Thread-10580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:08:23.561 [DEBUG] [Thread-10580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:08:23.602 [DEBUG] [Thread-10580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:08:23.602 [DEBUG] [Thread-10580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:08:23.605 [DEBUG] [Thread-10580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:08:23.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:08:23.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:08:23.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:08:23.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:08:23.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:08:23.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:08:23.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:08:23.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:08:23.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:08:23.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.047318 -999.00  +20.80  11.95     16   -5.10 1 1 1 1 1     0    0 25.58 -19.11 ZNESW 8.8 11.9 121.2 14.4 20.1 -26.6 20.0 -25.9 19.6 -24.5 19.9 -25.7
2025-11-26T03:08:23.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:08:23.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:08:23.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.047318
2025-11-26T03:08:23.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:08:23.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:08:23.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:08:23.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:08:23.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:08:23.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:08:10', tmtdew=29.94, humidity=12.19, cloud=0.0, wind=9.33, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:08:10', seeing=1.07, atlas_timestamp='2025-11-26T01:08:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, -0.0547500000000003, -0.02674999999999983, -0.048500000000000654, 0.007500000000000284, -0.0037499999999983658, -0.03599999999999959, -0.029749999999999943, -0.01150000000000162, -0.048500000000000654, 0.00274999999999892, -0.023000000000001464, 0.04800000000000004, 0.05824999999999925, -0.05799999999999983, -0.0030000000000001137, 0.01875000000000071, 0.007499999999998508, -0.0600000000000005, -0.008750000000000924, 0.0519999999999996, 0.0747499999999981, -0.004749999999999588, -0.003249999999999531, -0.016000000000000014, 0.0625, -0.01425000000000054, 0.0015000000000000568, 0.09450000000000003, 0.05900000000000105, 0.05649999999999977, 0.008000000000000895, -0.0027500000000006963], zp_timestamp='2025-11-26T01:06:00')
2025-11-26T03:08:23.633 [DEBUG] [Thread-10580] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:08:23.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:08:23.731 [DEBUG] [Thread-10583] [transport.py] [_log()] starting thread (client mode): 0x70d3b370
2025-11-26T03:08:23.731 [DEBUG] [Thread-10583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:08:23.746 [DEBUG] [Thread-10583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:08:23.746 [INFO] [Thread-10583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] client lang: <none>
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] server lang: <none>
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] kex follows: False
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:08:23.754 [DEBUG] [Thread-10583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:08:23.755 [DEBUG] [Thread-10583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:08:23.755 [DEBUG] [Thread-10583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:08:23.755 [DEBUG] [Thread-10583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:08:23.755 [DEBUG] [Thread-10583] [transport.py] [_log()] Compression: none
2025-11-26T03:08:23.755 [DEBUG] [Thread-10583] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:08:23.811 [DEBUG] [Thread-10583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:08:23.812 [DEBUG] [Thread-10583] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:08:23.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:08:23.813 [DEBUG] [Thread-10583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:08:23.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:08:23.871 [DEBUG] [Thread-10583] [transport.py] [_log()] userauth is OK
2025-11-26T03:08:23.871 [DEBUG] [Thread-10583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:08:23.871 [DEBUG] [Thread-10583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:08:23.871 [DEBUG] [Thread-10583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:08:23.871 [DEBUG] [Thread-10583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:08:23.871 [DEBUG] [Thread-10585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:23.885 [INFO] [Thread-10583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:08:23.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:08:23.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:08:24.724 [DEBUG] [Thread-10583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:08:24.724 [DEBUG] [Thread-10583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:08:24.773 [DEBUG] [Thread-10583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:08:24.773 [DEBUG] [Thread-10583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:08:24.782 [DEBUG] [Thread-10583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:08:24.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:08:24.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:08:24.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:08:24.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:08:24.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:08:24.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:08:24.823 [DEBUG] [Thread-10583] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:08:28.051 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:34.872 [DEBUG] [Thread-10586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:38.469 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:48.888 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:49.935 [DEBUG] [Thread-10587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:51.629 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:51.630 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:08:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:08:54.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:08:54.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:08:55.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 8, 42), 29.88, 12.19, 0.0, 9.12, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:08:55.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:08:42
2025-11-26T03:08:55.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:08:55.788 [DEBUG] [Thread-10588] [transport.py] [_log()] starting thread (client mode): 0x70da6770
2025-11-26T03:08:55.788 [DEBUG] [Thread-10588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:08:55.809 [DEBUG] [Thread-10588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:08:55.810 [INFO] [Thread-10588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] client lang: <none>
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] server lang: <none>
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] kex follows: False
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] Compression: none
2025-11-26T03:08:55.813 [DEBUG] [Thread-10588] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:08:55.831 [DEBUG] [Thread-10588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:08:55.832 [DEBUG] [Thread-10588] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:08:55.833 [DEBUG] [Thread-10588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:08:55.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:08:55.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:08:55.835 [DEBUG] [Thread-10588] [transport.py] [_log()] userauth is OK
2025-11-26T03:08:55.835 [DEBUG] [Thread-10588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:08:55.835 [DEBUG] [Thread-10588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:08:55.835 [DEBUG] [Thread-10588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:08:55.835 [DEBUG] [Thread-10588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:08:55.859 [INFO] [Thread-10588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:08:55.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:08:56.497 [DEBUG] [Thread-10588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:08:56.497 [DEBUG] [Thread-10588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:08:56.498 [DEBUG] [Thread-10588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:08:56.538 [DEBUG] [Thread-10588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:08:56.538 [DEBUG] [Thread-10588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:08:56.542 [DEBUG] [Thread-10588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:08:56.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:08:56.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:08:56.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:08:56.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:08:56.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:08:56.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:08:56.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:08:56.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:08:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:08:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.047665 -999.00  +20.80   7.71     16   -5.20 1 1 1 1 1     0    0 25.72 -19.24 ZNESW 8.9 7.7 94.4 10.8 20.1 -26.5 20.0 -25.8 19.6 -24.6 19.9 -25.6
2025-11-26T03:08:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:08:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:08:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.047665
2025-11-26T03:08:56.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:08:56.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:08:56.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:08:56.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:08:56.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:08:56.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:08:42', tmtdew=29.88, humidity=12.19, cloud=0.0, wind=9.12, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:08:42', seeing=1.05, atlas_timestamp='2025-11-26T01:08:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, -0.0547500000000003, -0.02674999999999983, -0.048500000000000654, 0.007500000000000284, -0.0037499999999983658, -0.03599999999999959, -0.029749999999999943, -0.01150000000000162, -0.048500000000000654, 0.00274999999999892, -0.023000000000001464, 0.04800000000000004, 0.05824999999999925, -0.05799999999999983, -0.0030000000000001137, 0.01875000000000071, 0.007499999999998508, -0.0600000000000005, -0.008750000000000924, 0.0519999999999996, 0.0747499999999981, -0.004749999999999588, -0.003249999999999531, -0.016000000000000014, 0.0625, -0.01425000000000054, 0.0015000000000000568, 0.09450000000000003, 0.05900000000000105, 0.05649999999999977, 0.008000000000000895, -0.0027500000000006963], zp_timestamp='2025-11-26T01:06:00')
2025-11-26T03:08:56.569 [DEBUG] [Thread-10588] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:08:56.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:08:56.664 [DEBUG] [Thread-10591] [transport.py] [_log()] starting thread (client mode): 0x70dd0220
2025-11-26T03:08:56.664 [DEBUG] [Thread-10591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:08:56.678 [DEBUG] [Thread-10591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:08:56.678 [INFO] [Thread-10591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:08:56.686 [DEBUG] [Thread-10591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:08:56.686 [DEBUG] [Thread-10591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] client lang: <none>
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] server lang: <none>
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] kex follows: False
2025-11-26T03:08:56.687 [DEBUG] [Thread-10591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:08:56.688 [DEBUG] [Thread-10591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:08:56.688 [DEBUG] [Thread-10591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:08:56.688 [DEBUG] [Thread-10591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:08:56.688 [DEBUG] [Thread-10591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:08:56.688 [DEBUG] [Thread-10591] [transport.py] [_log()] Compression: none
2025-11-26T03:08:56.688 [DEBUG] [Thread-10591] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:08:56.742 [DEBUG] [Thread-10591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:08:56.742 [DEBUG] [Thread-10591] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:08:56.743 [DEBUG] [Thread-10591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:08:56.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:08:56.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:08:56.799 [DEBUG] [Thread-10591] [transport.py] [_log()] userauth is OK
2025-11-26T03:08:56.800 [DEBUG] [Thread-10591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:08:56.800 [DEBUG] [Thread-10591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:08:56.800 [DEBUG] [Thread-10591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:08:56.800 [DEBUG] [Thread-10591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:08:56.818 [INFO] [Thread-10591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:08:56.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:08:56.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:08:57.630 [DEBUG] [Thread-10591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:08:57.630 [DEBUG] [Thread-10591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:08:57.677 [DEBUG] [Thread-10591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:08:57.678 [DEBUG] [Thread-10591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:08:57.687 [DEBUG] [Thread-10591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:08:57.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:08:57.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:08:57.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:08:57.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:08:57.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:08:57.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:08:57.727 [DEBUG] [Thread-10591] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:08:59.283 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:04.969 [DEBUG] [Thread-10593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:09.660 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:20.006 [DEBUG] [Thread-10594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:20.074 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:23.940 [DEBUG] [Thread-10595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:09:27.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:09:27.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:09:28.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 9, 14), 29.89, 12.19, 0.0, 9.58, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:09:28.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:09:14
2025-11-26T03:09:28.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:09:28.695 [DEBUG] [Thread-10596] [transport.py] [_log()] starting thread (client mode): 0x70d544c0
2025-11-26T03:09:28.695 [DEBUG] [Thread-10596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:09:28.706 [DEBUG] [Thread-10596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:09:28.706 [INFO] [Thread-10596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] client lang: <none>
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] server lang: <none>
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] kex follows: False
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:09:28.707 [DEBUG] [Thread-10596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:09:28.708 [DEBUG] [Thread-10596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:09:28.708 [DEBUG] [Thread-10596] [transport.py] [_log()] Compression: none
2025-11-26T03:09:28.708 [DEBUG] [Thread-10596] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:09:28.715 [DEBUG] [Thread-10596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:09:28.715 [DEBUG] [Thread-10596] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:09:28.715 [DEBUG] [Thread-10596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:09:28.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:09:28.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:09:28.716 [DEBUG] [Thread-10596] [transport.py] [_log()] userauth is OK
2025-11-26T03:09:28.716 [DEBUG] [Thread-10596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:09:28.716 [DEBUG] [Thread-10596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:09:28.716 [DEBUG] [Thread-10596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:09:28.716 [DEBUG] [Thread-10596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:09:28.729 [INFO] [Thread-10596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:09:28.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:09:29.422 [DEBUG] [Thread-10596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:09:29.423 [DEBUG] [Thread-10596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:09:29.423 [DEBUG] [Thread-10596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:09:29.464 [DEBUG] [Thread-10596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:09:29.464 [DEBUG] [Thread-10596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:09:29.468 [DEBUG] [Thread-10596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:09:29.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:09:29.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:09:29.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:09:29.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:09:29.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:09:29.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:09:29.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:09:29.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:09:29.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:09:29.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.048012 -999.00  +20.90   5.71     16   -5.20 1 1 1 1 1     0    0 25.74 -18.10 ZNESW 5.4 5.7 84.2 10.8 20.1 -26.4 20.0 -25.9 19.6 -24.7 19.9 -25.6
2025-11-26T03:09:29.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:09:29.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:09:29.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.048012
2025-11-26T03:09:29.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:09:29.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:09:29.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:09:29.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:09:29.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:09:29.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:09:14', tmtdew=29.89, humidity=12.19, cloud=0.0, wind=9.58, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:09:14', seeing=1.01, atlas_timestamp='2025-11-26T01:09:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, -0.0547500000000003, -0.02674999999999983, -0.048500000000000654, 0.007500000000000284, -0.0037499999999983658, -0.03599999999999959, -0.029749999999999943, -0.01150000000000162, -0.048500000000000654, 0.00274999999999892, -0.023000000000001464, 0.04800000000000004, 0.05824999999999925, -0.05799999999999983, -0.0030000000000001137, 0.01875000000000071, 0.007499999999998508, -0.0600000000000005, -0.008750000000000924, 0.0519999999999996, 0.0747499999999981, -0.004749999999999588, -0.003249999999999531, -0.016000000000000014, 0.0625, -0.01425000000000054, 0.0015000000000000568, 0.09450000000000003, 0.05900000000000105, 0.05649999999999977, 0.008000000000000895, -0.0027500000000006963], zp_timestamp='2025-11-26T01:06:00')
2025-11-26T03:09:29.497 [DEBUG] [Thread-10596] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:09:29.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:09:29.593 [DEBUG] [Thread-10599] [transport.py] [_log()] starting thread (client mode): 0x70dbe5c0
2025-11-26T03:09:29.593 [DEBUG] [Thread-10599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:09:29.607 [DEBUG] [Thread-10599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:09:29.608 [INFO] [Thread-10599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:09:29.615 [DEBUG] [Thread-10599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:09:29.616 [DEBUG] [Thread-10599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:09:29.616 [DEBUG] [Thread-10599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:09:29.616 [DEBUG] [Thread-10599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:09:29.616 [DEBUG] [Thread-10599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:09:29.616 [DEBUG] [Thread-10599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:09:29.616 [DEBUG] [Thread-10599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:09:29.616 [DEBUG] [Thread-10599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:09:29.616 [DEBUG] [Thread-10599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:09:29.616 [DEBUG] [Thread-10599] [transport.py] [_log()] client lang: <none>
2025-11-26T03:09:29.617 [DEBUG] [Thread-10599] [transport.py] [_log()] server lang: <none>
2025-11-26T03:09:29.617 [DEBUG] [Thread-10599] [transport.py] [_log()] kex follows: False
2025-11-26T03:09:29.617 [DEBUG] [Thread-10599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:09:29.617 [DEBUG] [Thread-10599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:09:29.617 [DEBUG] [Thread-10599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:09:29.617 [DEBUG] [Thread-10599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:09:29.617 [DEBUG] [Thread-10599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:09:29.618 [DEBUG] [Thread-10599] [transport.py] [_log()] Compression: none
2025-11-26T03:09:29.618 [DEBUG] [Thread-10599] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:09:29.684 [DEBUG] [Thread-10599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:09:29.685 [DEBUG] [Thread-10599] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:09:29.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:09:29.686 [DEBUG] [Thread-10599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:09:29.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:09:29.753 [DEBUG] [Thread-10599] [transport.py] [_log()] userauth is OK
2025-11-26T03:09:29.753 [DEBUG] [Thread-10599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:09:29.753 [DEBUG] [Thread-10599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:09:29.753 [DEBUG] [Thread-10599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:09:29.753 [DEBUG] [Thread-10599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:09:29.776 [INFO] [Thread-10599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:09:29.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:09:29.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:09:30.471 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:30.637 [DEBUG] [Thread-10599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:09:30.637 [DEBUG] [Thread-10599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:09:30.685 [DEBUG] [Thread-10599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:09:30.686 [DEBUG] [Thread-10599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:09:30.695 [DEBUG] [Thread-10599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:09:30.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:09:30.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:09:30.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
2025-11-26T03:09:30.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:09:30.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:09:30.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:09:30.731 [DEBUG] [Thread-10599] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:09:35.045 [DEBUG] [Thread-10601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:40.897 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:50.094 [DEBUG] [Thread-10602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:51.313 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:51.830 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:09:51.831 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:00.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:10:00.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:10:00.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:10:01.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 9, 46), 29.92, 12.16, 0.0, 9.41, 19.92, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:10:01.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:09:46
2025-11-26T03:10:01.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:10:01.697 [DEBUG] [Thread-10603] [transport.py] [_log()] starting thread (client mode): 0x70d54a90
2025-11-26T03:10:01.697 [DEBUG] [Thread-10603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:10:01.717 [DEBUG] [Thread-10603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:10:01.717 [INFO] [Thread-10603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:10:01.720 [DEBUG] [Thread-10603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:10:01.720 [DEBUG] [Thread-10603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:10:01.720 [DEBUG] [Thread-10603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:10:01.720 [DEBUG] [Thread-10603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:10:01.720 [DEBUG] [Thread-10603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:10:01.720 [DEBUG] [Thread-10603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:10:01.720 [DEBUG] [Thread-10603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:10:01.720 [DEBUG] [Thread-10603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] client lang: <none>
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] server lang: <none>
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] kex follows: False
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] Compression: none
2025-11-26T03:10:01.721 [DEBUG] [Thread-10603] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:10:01.733 [DEBUG] [Thread-10603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:10:01.734 [DEBUG] [Thread-10603] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:10:01.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:10:01.734 [DEBUG] [Thread-10603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:10:01.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:10:01.736 [DEBUG] [Thread-10603] [transport.py] [_log()] userauth is OK
2025-11-26T03:10:01.737 [DEBUG] [Thread-10603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:10:01.737 [DEBUG] [Thread-10603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:10:01.737 [DEBUG] [Thread-10603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:10:01.737 [DEBUG] [Thread-10603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:10:01.747 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:01.761 [INFO] [Thread-10603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:10:01.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:10:02.351 [DEBUG] [Thread-10603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:10:02.351 [DEBUG] [Thread-10603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:10:02.352 [DEBUG] [Thread-10603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:10:02.393 [DEBUG] [Thread-10603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:10:02.393 [DEBUG] [Thread-10603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:10:02.395 [DEBUG] [Thread-10603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:10:02.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:10:02.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:10:02.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:10:02.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:10:02.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:10:02.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:10:02.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:10:02.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:10:02.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:10:02.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.048359 -999.00  +20.80   6.65     16   -5.20 1 1 1 1 1     0    0 25.36 -16.86 ZNESW 8.9 6.7 116.8 8.5 20.1 -26.5 20.0 -26.0 19.6 -24.7 19.9 -25.6
2025-11-26T03:10:02.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:10:02.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:10:02.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.048359
2025-11-26T03:10:02.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:10:02.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:10:02.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:10:02.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:10:02.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:10:02.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:09:46', tmtdew=29.92, humidity=12.16, cloud=0.0, wind=9.41, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:09:46', seeing=1.01, atlas_timestamp='2025-11-26T01:09:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, -0.0547500000000003, -0.02674999999999983, -0.048500000000000654, 0.007500000000000284, -0.0037499999999983658, -0.03599999999999959, -0.029749999999999943, -0.01150000000000162, -0.048500000000000654, 0.00274999999999892, -0.023000000000001464, 0.04800000000000004, 0.05824999999999925, -0.05799999999999983, -0.0030000000000001137, 0.01875000000000071, 0.007499999999998508, -0.0600000000000005, -0.008750000000000924, 0.0519999999999996, 0.0747499999999981, -0.004749999999999588, -0.003249999999999531, -0.016000000000000014, 0.0625, -0.01425000000000054, 0.0015000000000000568, 0.09450000000000003, 0.05900000000000105, 0.05649999999999977, 0.008000000000000895, -0.0027500000000006963], zp_timestamp='2025-11-26T01:06:00')
2025-11-26T03:10:02.437 [DEBUG] [Thread-10603] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:10:02.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:10:02.532 [DEBUG] [Thread-10606] [transport.py] [_log()] starting thread (client mode): 0x70d3b190
2025-11-26T03:10:02.532 [DEBUG] [Thread-10606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:10:02.546 [DEBUG] [Thread-10606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:10:02.546 [INFO] [Thread-10606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:10:02.555 [DEBUG] [Thread-10606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:10:02.555 [DEBUG] [Thread-10606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:10:02.555 [DEBUG] [Thread-10606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:10:02.555 [DEBUG] [Thread-10606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:10:02.555 [DEBUG] [Thread-10606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:10:02.555 [DEBUG] [Thread-10606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:10:02.555 [DEBUG] [Thread-10606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:10:02.555 [DEBUG] [Thread-10606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] client lang: <none>
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] server lang: <none>
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] kex follows: False
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] Compression: none
2025-11-26T03:10:02.556 [DEBUG] [Thread-10606] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:10:02.623 [DEBUG] [Thread-10606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:10:02.624 [DEBUG] [Thread-10606] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:10:02.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:10:02.625 [DEBUG] [Thread-10606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:10:02.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:10:02.684 [DEBUG] [Thread-10606] [transport.py] [_log()] userauth is OK
2025-11-26T03:10:02.684 [DEBUG] [Thread-10606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:10:02.684 [DEBUG] [Thread-10606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:10:02.684 [DEBUG] [Thread-10606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:10:02.684 [DEBUG] [Thread-10606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:10:02.703 [INFO] [Thread-10606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:10:02.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:10:02.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:10:03.574 [DEBUG] [Thread-10606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:10:03.574 [DEBUG] [Thread-10606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:10:03.622 [DEBUG] [Thread-10606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:10:03.622 [DEBUG] [Thread-10606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:10:03.631 [DEBUG] [Thread-10606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:10:03.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:10:03.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:10:03.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:10:03.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:10:03.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:10:03.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:10:03.667 [DEBUG] [Thread-10606] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:10:05.134 [DEBUG] [Thread-10608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:12.233 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:20.194 [DEBUG] [Thread-10609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:22.673 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:24.011 [DEBUG] [Thread-10610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:33.082 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:33.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:10:33.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:10:33.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:10:34.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 10, 18), 29.89, 12.19, 0.0, 9.18, 19.95, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:10:34.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:10:18
2025-11-26T03:10:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:10:34.598 [DEBUG] [Thread-10611] [transport.py] [_log()] starting thread (client mode): 0x70dbf7c0
2025-11-26T03:10:34.598 [DEBUG] [Thread-10611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:10:34.619 [DEBUG] [Thread-10611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:10:34.619 [INFO] [Thread-10611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] client lang: <none>
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] server lang: <none>
2025-11-26T03:10:34.623 [DEBUG] [Thread-10611] [transport.py] [_log()] kex follows: False
2025-11-26T03:10:34.624 [DEBUG] [Thread-10611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:10:34.624 [DEBUG] [Thread-10611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:10:34.624 [DEBUG] [Thread-10611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:10:34.624 [DEBUG] [Thread-10611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:10:34.624 [DEBUG] [Thread-10611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:10:34.624 [DEBUG] [Thread-10611] [transport.py] [_log()] Compression: none
2025-11-26T03:10:34.624 [DEBUG] [Thread-10611] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:10:34.642 [DEBUG] [Thread-10611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:10:34.643 [DEBUG] [Thread-10611] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:10:34.643 [DEBUG] [Thread-10611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:10:34.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:10:34.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:10:34.645 [DEBUG] [Thread-10611] [transport.py] [_log()] userauth is OK
2025-11-26T03:10:34.646 [DEBUG] [Thread-10611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:10:34.646 [DEBUG] [Thread-10611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:10:34.646 [DEBUG] [Thread-10611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:10:34.646 [DEBUG] [Thread-10611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:10:34.668 [INFO] [Thread-10611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:10:34.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:10:35.226 [DEBUG] [Thread-10613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:35.482 [DEBUG] [Thread-10611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:10:35.482 [DEBUG] [Thread-10611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:10:35.483 [DEBUG] [Thread-10611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:10:35.523 [DEBUG] [Thread-10611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:10:35.523 [DEBUG] [Thread-10611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:10:35.526 [DEBUG] [Thread-10611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:10:35.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:10:35.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:10:35.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:10:35.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:10:35.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:10:35.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:10:35.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:10:35.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:10:35.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:10:35.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.048359 -999.00  +20.80   6.65     16   -5.20 1 1 1 1 1     0    0 25.36 -16.86 ZNESW 8.9 6.7 116.8 8.5 20.1 -26.5 20.0 -26.0 19.6 -24.7 19.9 -25.6
2025-11-26T03:10:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:10:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:10:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.048359
2025-11-26T03:10:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:10:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:10:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:10:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:10:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:10:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:10:18', tmtdew=29.89, humidity=12.19, cloud=0.0, wind=9.18, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:10:18', seeing=1.04, atlas_timestamp='2025-11-26T01:09:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, -0.0547500000000003, -0.02674999999999983, -0.048500000000000654, 0.007500000000000284, -0.0037499999999983658, -0.03599999999999959, -0.029749999999999943, -0.01150000000000162, -0.048500000000000654, 0.00274999999999892, -0.023000000000001464, 0.04800000000000004, 0.05824999999999925, -0.05799999999999983, -0.0030000000000001137, 0.01875000000000071, 0.007499999999998508, -0.0600000000000005, -0.008750000000000924, 0.0519999999999996, 0.0747499999999981, -0.004749999999999588, -0.003249999999999531, -0.016000000000000014, 0.0625, -0.01425000000000054, 0.0015000000000000568, 0.09450000000000003, 0.05900000000000105, 0.05649999999999977, 0.008000000000000895, -0.0027500000000006963], zp_timestamp='2025-11-26T01:06:00')
2025-11-26T03:10:35.553 [DEBUG] [Thread-10611] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:10:35.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:10:35.649 [DEBUG] [Thread-10615] [transport.py] [_log()] starting thread (client mode): 0x70dd03d0
2025-11-26T03:10:35.649 [DEBUG] [Thread-10615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:10:35.665 [DEBUG] [Thread-10615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:10:35.665 [INFO] [Thread-10615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:10:35.673 [DEBUG] [Thread-10615] [transport.py] [_log()] client lang: <none>
2025-11-26T03:10:35.674 [DEBUG] [Thread-10615] [transport.py] [_log()] server lang: <none>
2025-11-26T03:10:35.674 [DEBUG] [Thread-10615] [transport.py] [_log()] kex follows: False
2025-11-26T03:10:35.674 [DEBUG] [Thread-10615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:10:35.674 [DEBUG] [Thread-10615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:10:35.674 [DEBUG] [Thread-10615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:10:35.674 [DEBUG] [Thread-10615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:10:35.674 [DEBUG] [Thread-10615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:10:35.674 [DEBUG] [Thread-10615] [transport.py] [_log()] Compression: none
2025-11-26T03:10:35.674 [DEBUG] [Thread-10615] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:10:35.733 [DEBUG] [Thread-10615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:10:35.734 [DEBUG] [Thread-10615] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:10:35.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:10:35.735 [DEBUG] [Thread-10615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:10:35.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:10:35.795 [DEBUG] [Thread-10615] [transport.py] [_log()] userauth is OK
2025-11-26T03:10:35.795 [DEBUG] [Thread-10615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:10:35.795 [DEBUG] [Thread-10615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:10:35.796 [DEBUG] [Thread-10615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:10:35.796 [DEBUG] [Thread-10615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:10:35.815 [INFO] [Thread-10615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:10:35.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:10:35.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:10:36.677 [DEBUG] [Thread-10615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:10:36.677 [DEBUG] [Thread-10615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:10:36.725 [DEBUG] [Thread-10615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:10:36.725 [DEBUG] [Thread-10615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:10:36.734 [DEBUG] [Thread-10615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:10:36.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:10:36.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:10:36.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:10:36.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:10:36.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:10:36.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:10:36.771 [DEBUG] [Thread-10615] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:10:43.498 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:50.265 [DEBUG] [Thread-10617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:52.033 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:52.033 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:10:53.910 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:04.308 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:05.308 [DEBUG] [Thread-10618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:06.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:11:06.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:11:06.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:11:07.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 10, 50), 29.92, 12.16, 0.0, 9.21, 19.92, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:11:07.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:10:50
2025-11-26T03:11:07.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:11:07.717 [DEBUG] [Thread-10619] [transport.py] [_log()] starting thread (client mode): 0x7374ceb0
2025-11-26T03:11:07.717 [DEBUG] [Thread-10619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:11:07.737 [DEBUG] [Thread-10619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:11:07.737 [INFO] [Thread-10619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:11:07.741 [DEBUG] [Thread-10619] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:11:07.741 [DEBUG] [Thread-10619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:11:07.741 [DEBUG] [Thread-10619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:11:07.741 [DEBUG] [Thread-10619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:11:07.741 [DEBUG] [Thread-10619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:11:07.741 [DEBUG] [Thread-10619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:11:07.741 [DEBUG] [Thread-10619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:11:07.741 [DEBUG] [Thread-10619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] client lang: <none>
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] server lang: <none>
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] kex follows: False
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] Compression: none
2025-11-26T03:11:07.742 [DEBUG] [Thread-10619] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:11:07.761 [DEBUG] [Thread-10619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:11:07.762 [DEBUG] [Thread-10619] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:11:07.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:11:07.763 [DEBUG] [Thread-10619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:11:07.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:11:07.765 [DEBUG] [Thread-10619] [transport.py] [_log()] userauth is OK
2025-11-26T03:11:07.765 [DEBUG] [Thread-10619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:11:07.765 [DEBUG] [Thread-10619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:11:07.765 [DEBUG] [Thread-10619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:11:07.765 [DEBUG] [Thread-10619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:11:07.790 [INFO] [Thread-10619] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:11:07.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:11:08.453 [DEBUG] [Thread-10619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:11:08.453 [DEBUG] [Thread-10619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:11:08.454 [DEBUG] [Thread-10619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:11:08.494 [DEBUG] [Thread-10619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:11:08.495 [DEBUG] [Thread-10619] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:11:08.497 [DEBUG] [Thread-10619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:11:08.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:11:08.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:11:08.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:11:08.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:11:08.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:11:08.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:11:08.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:11:08.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:11:08.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:11:08.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.048706 -999.00  +20.80   6.12     16   -5.20 1 1 1 1 1     0    0 25.40 -15.95 ZNESW 8.1 6.1 104.1 9.1 20.1 -26.7 20.0 -25.9 19.6 -24.5 19.9 -25.6
2025-11-26T03:11:08.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:11:08.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:11:08.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.048706
2025-11-26T03:11:08.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:11:08.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:11:08.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:11:08.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:11:08.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:11:08.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:10:50', tmtdew=29.92, humidity=12.16, cloud=0.0, wind=9.21, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:10:50', seeing=1.01, atlas_timestamp='2025-11-26T01:10:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:10:00')
2025-11-26T03:11:08.516 [DEBUG] [Thread-10619] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:11:08.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:11:08.601 [DEBUG] [Thread-10622] [transport.py] [_log()] starting thread (client mode): 0x70d55090
2025-11-26T03:11:08.601 [DEBUG] [Thread-10622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:11:08.615 [DEBUG] [Thread-10622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:11:08.615 [INFO] [Thread-10622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:11:08.626 [DEBUG] [Thread-10622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] client lang: <none>
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] server lang: <none>
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] kex follows: False
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:11:08.627 [DEBUG] [Thread-10622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:11:08.628 [DEBUG] [Thread-10622] [transport.py] [_log()] Compression: none
2025-11-26T03:11:08.628 [DEBUG] [Thread-10622] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:11:08.686 [DEBUG] [Thread-10622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:11:08.687 [DEBUG] [Thread-10622] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:11:08.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:11:08.688 [DEBUG] [Thread-10622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:11:08.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:11:08.744 [DEBUG] [Thread-10622] [transport.py] [_log()] userauth is OK
2025-11-26T03:11:08.745 [DEBUG] [Thread-10622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:11:08.745 [DEBUG] [Thread-10622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:11:08.745 [DEBUG] [Thread-10622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:11:08.745 [DEBUG] [Thread-10622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:11:08.764 [INFO] [Thread-10622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:11:08.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:11:08.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:11:09.559 [DEBUG] [Thread-10622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:11:09.560 [DEBUG] [Thread-10622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:11:09.608 [DEBUG] [Thread-10622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:11:09.609 [DEBUG] [Thread-10622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:11:09.618 [DEBUG] [Thread-10622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:11:09.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:11:09.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:11:09.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:11:09.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:11:09.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:11:09.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:11:09.655 [DEBUG] [Thread-10622] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:11:14.699 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:20.347 [DEBUG] [Thread-10624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:24.080 [DEBUG] [Thread-10625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:25.118 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:35.396 [DEBUG] [Thread-10626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:35.537 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:11:39.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:11:39.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:11:40.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 11, 22), 29.9, 12.18, 0.0, 8.93, 19.92, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:11:40.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:11:22
2025-11-26T03:11:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:11:40.601 [DEBUG] [Thread-10627] [transport.py] [_log()] starting thread (client mode): 0x70d3b880
2025-11-26T03:11:40.602 [DEBUG] [Thread-10627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:11:40.623 [DEBUG] [Thread-10627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:11:40.624 [INFO] [Thread-10627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:11:40.625 [DEBUG] [Thread-10627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:11:40.625 [DEBUG] [Thread-10627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:11:40.625 [DEBUG] [Thread-10627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:11:40.625 [DEBUG] [Thread-10627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:11:40.625 [DEBUG] [Thread-10627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:11:40.625 [DEBUG] [Thread-10627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:11:40.625 [DEBUG] [Thread-10627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:11:40.625 [DEBUG] [Thread-10627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:11:40.625 [DEBUG] [Thread-10627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] client lang: <none>
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] server lang: <none>
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] kex follows: False
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] Compression: none
2025-11-26T03:11:40.626 [DEBUG] [Thread-10627] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:11:40.637 [DEBUG] [Thread-10627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:11:40.638 [DEBUG] [Thread-10627] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:11:40.638 [DEBUG] [Thread-10627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:11:40.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:11:40.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:11:40.641 [DEBUG] [Thread-10627] [transport.py] [_log()] userauth is OK
2025-11-26T03:11:40.641 [DEBUG] [Thread-10627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:11:40.641 [DEBUG] [Thread-10627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:11:40.641 [DEBUG] [Thread-10627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:11:40.641 [DEBUG] [Thread-10627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:11:40.676 [INFO] [Thread-10627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:11:40.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:11:41.284 [DEBUG] [Thread-10627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:11:41.284 [DEBUG] [Thread-10627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:11:41.284 [DEBUG] [Thread-10627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:11:41.325 [DEBUG] [Thread-10627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:11:41.325 [DEBUG] [Thread-10627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:11:41.329 [DEBUG] [Thread-10627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:11:41.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:11:41.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:11:41.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:11:41.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:11:41.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:11:41.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:11:41.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:11:41.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:11:41.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:11:41.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.049401 -999.00  +20.80   7.50     16   -5.20 1 1 1 1 1     0    0 25.60 -15.45 ZNESW 8.2 7.5 92.8 9.5 20.1 -26.3 20.0 -25.9 19.7 -24.6 19.9 -25.5
2025-11-26T03:11:41.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:11:41.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:11:41.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.049401
2025-11-26T03:11:41.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:11:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:11:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:11:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:11:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:11:41.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:11:22', tmtdew=29.9, humidity=12.18, cloud=0.0, wind=8.93, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:11:22', seeing=1.08, atlas_timestamp='2025-11-26T01:11:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:10:00')
2025-11-26T03:11:41.358 [DEBUG] [Thread-10627] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:11:41.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:11:41.453 [DEBUG] [Thread-10630] [transport.py] [_log()] starting thread (client mode): 0x70d40be0
2025-11-26T03:11:41.453 [DEBUG] [Thread-10630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:11:41.468 [DEBUG] [Thread-10630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:11:41.468 [INFO] [Thread-10630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] client lang: <none>
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] server lang: <none>
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] kex follows: False
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:11:41.476 [DEBUG] [Thread-10630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:11:41.477 [DEBUG] [Thread-10630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:11:41.477 [DEBUG] [Thread-10630] [transport.py] [_log()] Compression: none
2025-11-26T03:11:41.477 [DEBUG] [Thread-10630] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:11:41.535 [DEBUG] [Thread-10630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:11:41.536 [DEBUG] [Thread-10630] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:11:41.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:11:41.537 [DEBUG] [Thread-10630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:11:41.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:11:41.594 [DEBUG] [Thread-10630] [transport.py] [_log()] userauth is OK
2025-11-26T03:11:41.595 [DEBUG] [Thread-10630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:11:41.595 [DEBUG] [Thread-10630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:11:41.595 [DEBUG] [Thread-10630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:11:41.595 [DEBUG] [Thread-10630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:11:41.620 [INFO] [Thread-10630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:11:41.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:11:41.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:11:42.436 [DEBUG] [Thread-10630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:11:42.436 [DEBUG] [Thread-10630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:11:42.485 [DEBUG] [Thread-10630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:11:42.485 [DEBUG] [Thread-10630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:11:42.494 [DEBUG] [Thread-10630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:11:42.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:11:42.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:11:42.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:11:42.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:11:42.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:11:42.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:11:42.531 [DEBUG] [Thread-10630] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:11:45.932 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:50.425 [DEBUG] [Thread-10632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:52.245 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:52.246 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:11:56.332 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:05.473 [DEBUG] [Thread-10633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:06.747 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:12.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:12:12.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:12: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
2025-11-26T03:12:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 11, 54), 29.93, 12.14, 0.0, 8.98, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:12:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:11:54
2025-11-26T03:12:13.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:12:13.554 [DEBUG] [Thread-10634] [transport.py] [_log()] starting thread (client mode): 0x70d57d90
2025-11-26T03:12:13.554 [DEBUG] [Thread-10634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:12:13.574 [DEBUG] [Thread-10634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:12:13.574 [INFO] [Thread-10634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:12:13.577 [DEBUG] [Thread-10634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:12:13.577 [DEBUG] [Thread-10634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:12:13.577 [DEBUG] [Thread-10634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:12:13.577 [DEBUG] [Thread-10634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:12:13.577 [DEBUG] [Thread-10634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:12:13.577 [DEBUG] [Thread-10634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:12:13.577 [DEBUG] [Thread-10634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:12:13.577 [DEBUG] [Thread-10634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] client lang: <none>
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] server lang: <none>
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] kex follows: False
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] Compression: none
2025-11-26T03:12:13.578 [DEBUG] [Thread-10634] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:12:13.596 [DEBUG] [Thread-10634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:12:13.596 [DEBUG] [Thread-10634] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:12:13.596 [DEBUG] [Thread-10634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:12:13.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:12:13.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:12:13.597 [DEBUG] [Thread-10634] [transport.py] [_log()] userauth is OK
2025-11-26T03:12:13.597 [DEBUG] [Thread-10634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:12:13.597 [DEBUG] [Thread-10634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:12:13.597 [DEBUG] [Thread-10634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:12:13.597 [DEBUG] [Thread-10634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:12:13.607 [INFO] [Thread-10634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:12:13.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:12:14.254 [DEBUG] [Thread-10634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:12:14.254 [DEBUG] [Thread-10634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:12:14.254 [DEBUG] [Thread-10634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:12:14.295 [DEBUG] [Thread-10634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:12:14.295 [DEBUG] [Thread-10634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:12:14.297 [DEBUG] [Thread-10634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:12:14.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:12:14.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:12:14.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:12:14.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:12:14.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:12:14.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:12:14.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.049748 -999.00  +20.80   5.29     16   -5.20 1 1 1 1 1     0    0 25.38 -15.13 ZNESW 5.4 5.3 106.4 9.9 20.2 -26.3 20.0 -25.9 19.7 -24.4 19.9 -25.4
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.049748
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:12:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:11:54', tmtdew=29.93, humidity=12.14, cloud=0.0, wind=8.98, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:11:54', seeing=0.98, atlas_timestamp='2025-11-26T01:11:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:10:00')
2025-11-26T03:12:14.318 [DEBUG] [Thread-10634] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:12:14.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:12:14.403 [DEBUG] [Thread-10637] [transport.py] [_log()] starting thread (client mode): 0x70de4400
2025-11-26T03:12:14.403 [DEBUG] [Thread-10637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:12:14.418 [DEBUG] [Thread-10637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:12:14.418 [INFO] [Thread-10637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] client lang: <none>
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] server lang: <none>
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] kex follows: False
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] Compression: none
2025-11-26T03:12:14.426 [DEBUG] [Thread-10637] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:12:14.484 [DEBUG] [Thread-10637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:12:14.484 [DEBUG] [Thread-10637] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:12:14.485 [DEBUG] [Thread-10637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:12:14.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:12:14.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:12:14.542 [DEBUG] [Thread-10637] [transport.py] [_log()] userauth is OK
2025-11-26T03:12:14.542 [DEBUG] [Thread-10637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:12:14.542 [DEBUG] [Thread-10637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:12:14.542 [DEBUG] [Thread-10637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:12:14.542 [DEBUG] [Thread-10637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:12:14.559 [INFO] [Thread-10637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:12:14.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:12:14.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:12:15.388 [DEBUG] [Thread-10637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:12:15.388 [DEBUG] [Thread-10637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:12:15.435 [DEBUG] [Thread-10637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:12:15.435 [DEBUG] [Thread-10637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:12:15.443 [DEBUG] [Thread-10637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:12:15.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:12:15.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:12:15.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:12:15.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:12:15.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:12:15.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:12:15.479 [DEBUG] [Thread-10637] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:12:17.157 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:20.511 [DEBUG] [Thread-10639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:24.169 [DEBUG] [Thread-10640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:27.574 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:35.563 [DEBUG] [Thread-10641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:37.973 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:12:45.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:12:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:12:46.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 12, 26), 29.91, 12.16, 0.0, 9.16, 19.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:12:46.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:12:26
2025-11-26T03:12:46.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:12:46.469 [DEBUG] [Thread-10642] [transport.py] [_log()] starting thread (client mode): 0x7374c520
2025-11-26T03:12:46.469 [DEBUG] [Thread-10642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:12:46.489 [DEBUG] [Thread-10642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:12:46.490 [INFO] [Thread-10642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:12:46.492 [DEBUG] [Thread-10642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:12:46.492 [DEBUG] [Thread-10642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:12:46.492 [DEBUG] [Thread-10642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] client lang: <none>
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] server lang: <none>
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] kex follows: False
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] Compression: none
2025-11-26T03:12:46.493 [DEBUG] [Thread-10642] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:12:46.511 [DEBUG] [Thread-10642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:12:46.512 [DEBUG] [Thread-10642] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:12:46.512 [DEBUG] [Thread-10642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:12:46.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:12:46.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:12:46.514 [DEBUG] [Thread-10642] [transport.py] [_log()] userauth is OK
2025-11-26T03:12:46.514 [DEBUG] [Thread-10642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:12:46.514 [DEBUG] [Thread-10642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:12:46.514 [DEBUG] [Thread-10642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:12:46.515 [DEBUG] [Thread-10642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:12:46.539 [INFO] [Thread-10642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:12:46.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:12:47.195 [DEBUG] [Thread-10642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:12:47.195 [DEBUG] [Thread-10642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:12:47.196 [DEBUG] [Thread-10642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:12:47.237 [DEBUG] [Thread-10642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:12:47.237 [DEBUG] [Thread-10642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:12:47.241 [DEBUG] [Thread-10642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:12:47.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:12:47.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:12:47.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:12:47.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:12:47.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:12:47.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:12:47.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:12:47.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:12:47.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:12:47.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.050096 -999.00  +20.80   6.94     16   -5.20 1 1 1 1 1     0    0 25.75 -14.85 ZNESW 7.9 6.9 88.4 10.0 20.1 -26.4 20.0 -26.0 19.6 -24.3 19.9 -25.6
2025-11-26T03:12:47.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:12:47.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:12:47.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.050096
2025-11-26T03:12:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:12:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:12:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:12:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:12:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:12:47.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:12:26', tmtdew=29.91, humidity=12.16, cloud=0.0, wind=9.16, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:12:26', seeing=0.98, atlas_timestamp='2025-11-26T01:12:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:10:00')
2025-11-26T03:12:47.269 [DEBUG] [Thread-10642] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:12:47.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:12:47.365 [DEBUG] [Thread-10645] [transport.py] [_log()] starting thread (client mode): 0x7374f8e0
2025-11-26T03:12:47.365 [DEBUG] [Thread-10645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:12:47.380 [DEBUG] [Thread-10645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:12:47.380 [INFO] [Thread-10645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] client lang: <none>
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] server lang: <none>
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] kex follows: False
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:12:47.388 [DEBUG] [Thread-10645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:12:47.389 [DEBUG] [Thread-10645] [transport.py] [_log()] Compression: none
2025-11-26T03:12:47.389 [DEBUG] [Thread-10645] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:12:47.445 [DEBUG] [Thread-10645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:12:47.446 [DEBUG] [Thread-10645] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:12:47.447 [DEBUG] [Thread-10645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:12:47.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:12:47.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:12:47.502 [DEBUG] [Thread-10645] [transport.py] [_log()] userauth is OK
2025-11-26T03:12:47.502 [DEBUG] [Thread-10645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:12:47.502 [DEBUG] [Thread-10645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:12:47.502 [DEBUG] [Thread-10645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:12:47.502 [DEBUG] [Thread-10645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:12:47.521 [INFO] [Thread-10645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:12:47.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:12:47.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:12:48.329 [DEBUG] [Thread-10645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:12:48.329 [DEBUG] [Thread-10645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:12:48.373 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:48.377 [DEBUG] [Thread-10645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:12:48.377 [DEBUG] [Thread-10645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:12:48.385 [DEBUG] [Thread-10645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:12:48.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:12:48.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')
2025-11-26T03:12:48.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:12:48.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:12:48.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:12:48.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:12:48.416 [DEBUG] [Thread-10645] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:12:50.597 [DEBUG] [Thread-10647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:52.446 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:52.446 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:12:58.766 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:05.635 [DEBUG] [Thread-10648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:09.286 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:18.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:13:18.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:13:18.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:13:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 12, 58), 29.85, 12.73, 0.0, 8.89, 19.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:13:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:12:58
2025-11-26T03:13:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:13:19.379 [DEBUG] [Thread-10649] [transport.py] [_log()] starting thread (client mode): 0x7374f220
2025-11-26T03:13:19.379 [DEBUG] [Thread-10649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:13:19.399 [DEBUG] [Thread-10649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:13:19.399 [INFO] [Thread-10649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] client lang: <none>
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] server lang: <none>
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] kex follows: False
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] Compression: none
2025-11-26T03:13:19.403 [DEBUG] [Thread-10649] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:13:19.421 [DEBUG] [Thread-10649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:13:19.421 [DEBUG] [Thread-10649] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:13:19.422 [DEBUG] [Thread-10649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:13:19.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:13:19.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:13:19.424 [DEBUG] [Thread-10649] [transport.py] [_log()] userauth is OK
2025-11-26T03:13:19.424 [DEBUG] [Thread-10649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:13:19.425 [DEBUG] [Thread-10649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:13:19.425 [DEBUG] [Thread-10649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:13:19.425 [DEBUG] [Thread-10649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:13:19.449 [INFO] [Thread-10649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:13:19.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:13:19.701 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:20.074 [DEBUG] [Thread-10649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:13:20.075 [DEBUG] [Thread-10649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:13:20.075 [DEBUG] [Thread-10649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:13:20.115 [DEBUG] [Thread-10649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:13:20.116 [DEBUG] [Thread-10649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:13:20.118 [DEBUG] [Thread-10649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:13:20.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:13:20.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:13:20.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:13:20.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:13:20.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:13:20.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:13:20.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:13:20.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:13:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:13:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.050443 -999.00  +20.70   7.31     16   -5.20 1 1 1 1 1     0    0 25.43 -15.84 ZNESW 6.1 7.3 113.4 8.8 20.1 -26.1 20.0 -25.8 19.6 -24.6 19.9 -25.7
2025-11-26T03:13:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:13:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:13:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.050443
2025-11-26T03:13:20.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:13:20.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:13:20.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:13:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:13:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:13:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:12:58', tmtdew=29.85, humidity=12.73, cloud=0.0, wind=8.89, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:12:58', seeing=1.04, atlas_timestamp='2025-11-26T01:12:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:10:00')
2025-11-26T03:13:20.144 [DEBUG] [Thread-10649] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:13:20.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:13:20.241 [DEBUG] [Thread-10652] [transport.py] [_log()] starting thread (client mode): 0x70d7dff0
2025-11-26T03:13:20.241 [DEBUG] [Thread-10652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:13:20.255 [DEBUG] [Thread-10652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:13:20.256 [INFO] [Thread-10652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:13:20.263 [DEBUG] [Thread-10652] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:13:20.263 [DEBUG] [Thread-10652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:13:20.263 [DEBUG] [Thread-10652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:13:20.263 [DEBUG] [Thread-10652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:13:20.263 [DEBUG] [Thread-10652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] client lang: <none>
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] server lang: <none>
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] kex follows: False
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] Compression: none
2025-11-26T03:13:20.264 [DEBUG] [Thread-10652] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:13:20.322 [DEBUG] [Thread-10652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:13:20.323 [DEBUG] [Thread-10652] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:13:20.323 [DEBUG] [Thread-10652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:13:20.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:13:20.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:13:20.377 [DEBUG] [Thread-10652] [transport.py] [_log()] userauth is OK
2025-11-26T03:13:20.378 [DEBUG] [Thread-10652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:13:20.378 [DEBUG] [Thread-10652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:13:20.378 [DEBUG] [Thread-10652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:13:20.378 [DEBUG] [Thread-10652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:13:20.397 [INFO] [Thread-10652] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:13:20.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:13:20.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:13:20.673 [DEBUG] [Thread-10654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:21.210 [DEBUG] [Thread-10652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:13:21.211 [DEBUG] [Thread-10652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:13:21.258 [DEBUG] [Thread-10652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:13:21.258 [DEBUG] [Thread-10652] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:13:21.270 [DEBUG] [Thread-10652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:13:21.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:13:21.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:13:21.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:13:21.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:13:21.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:13:21.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:13:21.308 [DEBUG] [Thread-10652] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:13:24.255 [DEBUG] [Thread-10655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:30.134 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:35.722 [DEBUG] [Thread-10656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:40.590 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:50.762 [DEBUG] [Thread-10657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:51.028 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:51.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:13:51.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:13:51.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:13:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 13, 30), 29.83, 12.74, 0.0, 9.46, 19.85, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:13:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:13:30
2025-11-26T03:13:52.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:13:52.247 [DEBUG] [Thread-10658] [transport.py] [_log()] starting thread (client mode): 0x70d7e650
2025-11-26T03:13:52.248 [DEBUG] [Thread-10658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:13:52.259 [DEBUG] [Thread-10658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:13:52.259 [INFO] [Thread-10658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] client lang: <none>
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] server lang: <none>
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] kex follows: False
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:13:52.262 [DEBUG] [Thread-10658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:13:52.263 [DEBUG] [Thread-10658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:13:52.263 [DEBUG] [Thread-10658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:13:52.263 [DEBUG] [Thread-10658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:13:52.263 [DEBUG] [Thread-10658] [transport.py] [_log()] Compression: none
2025-11-26T03:13:52.263 [DEBUG] [Thread-10658] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:13:52.281 [DEBUG] [Thread-10658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:13:52.281 [DEBUG] [Thread-10658] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:13:52.282 [DEBUG] [Thread-10658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:13:52.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:13:52.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:13:52.283 [DEBUG] [Thread-10658] [transport.py] [_log()] userauth is OK
2025-11-26T03:13:52.283 [DEBUG] [Thread-10658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:13:52.284 [DEBUG] [Thread-10658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:13:52.284 [DEBUG] [Thread-10658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:13:52.284 [DEBUG] [Thread-10658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:13:52.304 [INFO] [Thread-10658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:13:52.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:13:52.648 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:52.649 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:13:52.939 [DEBUG] [Thread-10658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:13:52.940 [DEBUG] [Thread-10658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:13:52.940 [DEBUG] [Thread-10658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:13:52.981 [DEBUG] [Thread-10658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:13:52.981 [DEBUG] [Thread-10658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:13:52.984 [DEBUG] [Thread-10658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:13:52.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:13:52.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:13:52.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:13:53.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:13:53.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:13:53.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:13:53.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:13:53.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:13:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:13:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.050790 -999.00  +20.70   4.88     16   -5.20 1 1 1 1 1     0    0 25.29 -15.94 ZNESW 6.2 4.9 77.5 8.4 20.1 -26.6 20.0 -26.0 19.6 -24.9 19.9 -25.7
2025-11-26T03:13:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:13:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:13:53.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.050790
2025-11-26T03:13:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:13:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:13:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:13:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:13:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:13:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:13:30', tmtdew=29.83, humidity=12.74, cloud=0.0, wind=9.46, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:13:30', seeing=0.95, atlas_timestamp='2025-11-26T01:13:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:10:00')
2025-11-26T03:13:53.011 [DEBUG] [Thread-10658] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:13:53.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:13:53.106 [DEBUG] [Thread-10661] [transport.py] [_log()] starting thread (client mode): 0x70dfad10
2025-11-26T03:13:53.107 [DEBUG] [Thread-10661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:13:53.121 [DEBUG] [Thread-10661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:13:53.121 [INFO] [Thread-10661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] client lang: <none>
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] server lang: <none>
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] kex follows: False
2025-11-26T03:13:53.129 [DEBUG] [Thread-10661] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:13:53.130 [DEBUG] [Thread-10661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:13:53.130 [DEBUG] [Thread-10661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:13:53.130 [DEBUG] [Thread-10661] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:13:53.130 [DEBUG] [Thread-10661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:13:53.130 [DEBUG] [Thread-10661] [transport.py] [_log()] Compression: none
2025-11-26T03:13:53.130 [DEBUG] [Thread-10661] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:13:53.189 [DEBUG] [Thread-10661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:13:53.190 [DEBUG] [Thread-10661] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:13:53.191 [DEBUG] [Thread-10661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:13:53.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:13:53.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:13:53.248 [DEBUG] [Thread-10661] [transport.py] [_log()] userauth is OK
2025-11-26T03:13:53.248 [DEBUG] [Thread-10661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:13:53.248 [DEBUG] [Thread-10661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:13:53.248 [DEBUG] [Thread-10661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:13:53.248 [DEBUG] [Thread-10661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:13:53.272 [INFO] [Thread-10661] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:13:53.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:13:53.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:13:54.054 [DEBUG] [Thread-10661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:13:54.054 [DEBUG] [Thread-10661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:13:54.106 [DEBUG] [Thread-10661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:13:54.107 [DEBUG] [Thread-10661] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:13:54.115 [DEBUG] [Thread-10661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:13:54.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:13:54.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:13:54.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:13:54.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:13:54.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:13:54.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:13:54.151 [DEBUG] [Thread-10661] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:14:01.428 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:05.792 [DEBUG] [Thread-10663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:11.846 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:20.832 [DEBUG] [Thread-10664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:22.258 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:14:24.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:14:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:14:24.329 [DEBUG] [Thread-10665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:24.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 14, 2), 29.82, 12.74, 0.0, 9.35, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:14:24.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:14:02
2025-11-26T03:14:24.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:14:25.093 [DEBUG] [Thread-10666] [transport.py] [_log()] starting thread (client mode): 0x70df8820
2025-11-26T03:14:25.093 [DEBUG] [Thread-10666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:14:25.116 [DEBUG] [Thread-10666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:14:25.116 [INFO] [Thread-10666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:14:25.119 [DEBUG] [Thread-10666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] client lang: <none>
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] server lang: <none>
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] kex follows: False
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] Compression: none
2025-11-26T03:14:25.120 [DEBUG] [Thread-10666] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:14:25.138 [DEBUG] [Thread-10666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:14:25.139 [DEBUG] [Thread-10666] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:14:25.140 [DEBUG] [Thread-10666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:14:25.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:14:25.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:14:25.142 [DEBUG] [Thread-10666] [transport.py] [_log()] userauth is OK
2025-11-26T03:14:25.142 [DEBUG] [Thread-10666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:14:25.142 [DEBUG] [Thread-10666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:14:25.142 [DEBUG] [Thread-10666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:14:25.142 [DEBUG] [Thread-10666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:14:25.168 [INFO] [Thread-10666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:14:25.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:14:25.825 [DEBUG] [Thread-10666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:14:25.825 [DEBUG] [Thread-10666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:14:25.826 [DEBUG] [Thread-10666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:14:25.867 [DEBUG] [Thread-10666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:14:25.867 [DEBUG] [Thread-10666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:14:25.871 [DEBUG] [Thread-10666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:14:25.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:14:25.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:14:25.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:14:25.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:14:25.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:14:25.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:14:25.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:14:25.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:14:25.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:14:25.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.051137 -999.00  +20.70   6.49     17   -5.10 1 1 1 1 1     0    0 25.57 -16.50 ZNESW 6.7 6.5 109.2 9.2 20.1 -26.0 20.0 -25.8 19.6 -24.7 19.9 -25.5
2025-11-26T03:14:25.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:14:25.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:14:25.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.051137
2025-11-26T03:14:25.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:14:25.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:14:25.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:14:25.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:14:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:14:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:14:02', tmtdew=29.82, humidity=12.74, cloud=0.0, wind=9.35, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:14:02', seeing=1.13, atlas_timestamp='2025-11-26T01:13:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:12:00')
2025-11-26T03:14:25.897 [DEBUG] [Thread-10666] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:14:25.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:14:25.997 [DEBUG] [Thread-10669] [transport.py] [_log()] starting thread (client mode): 0x70dfa620
2025-11-26T03:14:25.997 [DEBUG] [Thread-10669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:14:26.017 [DEBUG] [Thread-10669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:14:26.017 [INFO] [Thread-10669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:14:26.027 [DEBUG] [Thread-10669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:14:26.027 [DEBUG] [Thread-10669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] client lang: <none>
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] server lang: <none>
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] kex follows: False
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:14:26.028 [DEBUG] [Thread-10669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:14:26.029 [DEBUG] [Thread-10669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:14:26.029 [DEBUG] [Thread-10669] [transport.py] [_log()] Compression: none
2025-11-26T03:14:26.029 [DEBUG] [Thread-10669] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:14:26.092 [DEBUG] [Thread-10669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:14:26.093 [DEBUG] [Thread-10669] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:14:26.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:14:26.094 [DEBUG] [Thread-10669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:14:26.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:14:26.149 [DEBUG] [Thread-10669] [transport.py] [_log()] userauth is OK
2025-11-26T03:14:26.150 [DEBUG] [Thread-10669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:14:26.150 [DEBUG] [Thread-10669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:14:26.150 [DEBUG] [Thread-10669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:14:26.150 [DEBUG] [Thread-10669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:14:26.168 [INFO] [Thread-10669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:14:26.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:14:26.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:14:27.008 [DEBUG] [Thread-10669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:14:27.009 [DEBUG] [Thread-10669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:14:27.057 [DEBUG] [Thread-10669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:14:27.057 [DEBUG] [Thread-10669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:14:27.066 [DEBUG] [Thread-10669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:14:27.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:14:27.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:14:27.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:14:27.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:14:27.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:14:27.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:14:27.103 [DEBUG] [Thread-10669] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:14:32.704 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:35.870 [DEBUG] [Thread-10671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:43.170 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:50.915 [DEBUG] [Thread-10672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:52.860 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:52.861 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:53.600 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:14:57.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:14:57.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:14:57.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:14:57.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 14, 34), 29.75, 12.76, 0.0, 9.33, 19.82, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:14:57.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:14:34
2025-11-26T03:14:57.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:14:58.037 [DEBUG] [Thread-10673] [transport.py] [_log()] starting thread (client mode): 0x70df9120
2025-11-26T03:14:58.037 [DEBUG] [Thread-10673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:14:58.058 [DEBUG] [Thread-10673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:14:58.058 [INFO] [Thread-10673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] client lang: <none>
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] server lang: <none>
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] kex follows: False
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] Compression: none
2025-11-26T03:14:58.061 [DEBUG] [Thread-10673] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:14:58.079 [DEBUG] [Thread-10673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:14:58.080 [DEBUG] [Thread-10673] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:14:58.080 [DEBUG] [Thread-10673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:14:58.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:14:58.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:14:58.083 [DEBUG] [Thread-10673] [transport.py] [_log()] userauth is OK
2025-11-26T03:14:58.083 [DEBUG] [Thread-10673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:14:58.083 [DEBUG] [Thread-10673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:14:58.083 [DEBUG] [Thread-10673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:14:58.083 [DEBUG] [Thread-10673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:14:58.119 [INFO] [Thread-10673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:14:58.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:14:58.782 [DEBUG] [Thread-10673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:14:58.783 [DEBUG] [Thread-10673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:14:58.783 [DEBUG] [Thread-10673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:14:58.824 [DEBUG] [Thread-10673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:14:58.824 [DEBUG] [Thread-10673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:14:58.827 [DEBUG] [Thread-10673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:14:58.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:14:58.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:14:58.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:14:58.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:14:58.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:14:58.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:14:58.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:14:58.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:14:58.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:14:58.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.051832 -999.00  +20.70   6.51     17   -5.10 1 1 1 1 1     0    0 25.52 -15.52 ZNESW 5.0 6.5 112.9 8.6 20.1 -26.6 20.0 -26.0 19.6 -24.7 19.9 -25.7
2025-11-26T03:14:58.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:14:58.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:14:58.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.051832
2025-11-26T03:14:58.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:14:58.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:14:58.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:14:58.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:14:58.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:14:58.858 [DEBUG] [Thread-10673] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:14:58.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:14:34', tmtdew=29.75, humidity=12.76, cloud=0.0, wind=9.33, temperature=19.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:14:34', seeing=1.1, atlas_timestamp='2025-11-26T01:14:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:12:00')
2025-11-26T03:14:58.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:14:58.951 [DEBUG] [Thread-10676] [transport.py] [_log()] starting thread (client mode): 0x70df91b0
2025-11-26T03:14:58.951 [DEBUG] [Thread-10676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:14:58.965 [DEBUG] [Thread-10676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:14:58.965 [INFO] [Thread-10676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:14:58.973 [DEBUG] [Thread-10676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:14:58.974 [DEBUG] [Thread-10676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:14:58.974 [DEBUG] [Thread-10676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:14:58.974 [DEBUG] [Thread-10676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:14:58.974 [DEBUG] [Thread-10676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:14:58.974 [DEBUG] [Thread-10676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:14:58.974 [DEBUG] [Thread-10676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:14:58.974 [DEBUG] [Thread-10676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:14:58.974 [DEBUG] [Thread-10676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:14:58.974 [DEBUG] [Thread-10676] [transport.py] [_log()] client lang: <none>
2025-11-26T03:14:58.975 [DEBUG] [Thread-10676] [transport.py] [_log()] server lang: <none>
2025-11-26T03:14:58.975 [DEBUG] [Thread-10676] [transport.py] [_log()] kex follows: False
2025-11-26T03:14:58.975 [DEBUG] [Thread-10676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:14:58.975 [DEBUG] [Thread-10676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:14:58.975 [DEBUG] [Thread-10676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:14:58.975 [DEBUG] [Thread-10676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:14:58.975 [DEBUG] [Thread-10676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:14:58.976 [DEBUG] [Thread-10676] [transport.py] [_log()] Compression: none
2025-11-26T03:14:58.976 [DEBUG] [Thread-10676] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:14:59.033 [DEBUG] [Thread-10676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:14:59.034 [DEBUG] [Thread-10676] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:14:59.035 [DEBUG] [Thread-10676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:14:59.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:14:59.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:14:59.089 [DEBUG] [Thread-10676] [transport.py] [_log()] userauth is OK
2025-11-26T03:14:59.089 [DEBUG] [Thread-10676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:14:59.090 [DEBUG] [Thread-10676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:14:59.090 [DEBUG] [Thread-10676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:14:59.090 [DEBUG] [Thread-10676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:14:59.109 [INFO] [Thread-10676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:14:59.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:14:59.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:14:59.925 [DEBUG] [Thread-10676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:14:59.925 [DEBUG] [Thread-10676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:14:59.973 [DEBUG] [Thread-10676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:14:59.973 [DEBUG] [Thread-10676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:14:59.982 [DEBUG] [Thread-10676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:14:59.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:14:59.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:15:00.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:15:00.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:15:00.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:15:00.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:15:00.019 [DEBUG] [Thread-10676] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:15:03.996 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:05.951 [DEBUG] [Thread-10678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:14.391 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:20.999 [DEBUG] [Thread-10679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:24.406 [DEBUG] [Thread-10680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:24.769 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:30.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:15:30.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:15:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:15:30.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 15, 6), 29.74, 12.78, 0.0, 8.98, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:15:30.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:15:06
2025-11-26T03:15:30.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:15:30.946 [DEBUG] [Thread-10681] [transport.py] [_log()] starting thread (client mode): 0x70df9000
2025-11-26T03:15:30.946 [DEBUG] [Thread-10681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:15:30.969 [DEBUG] [Thread-10681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:15:30.969 [INFO] [Thread-10681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:15:30.972 [DEBUG] [Thread-10681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] client lang: <none>
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] server lang: <none>
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] kex follows: False
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] Compression: none
2025-11-26T03:15:30.973 [DEBUG] [Thread-10681] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:15:30.991 [DEBUG] [Thread-10681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:15:30.991 [DEBUG] [Thread-10681] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:15:30.992 [DEBUG] [Thread-10681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:15:30.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:15:30.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:15:30.994 [DEBUG] [Thread-10681] [transport.py] [_log()] userauth is OK
2025-11-26T03:15:30.994 [DEBUG] [Thread-10681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:15:30.994 [DEBUG] [Thread-10681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:15:30.994 [DEBUG] [Thread-10681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:15:30.994 [DEBUG] [Thread-10681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:15:31.020 [INFO] [Thread-10681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:15:31.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:15:31.617 [DEBUG] [Thread-10681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:15:31.617 [DEBUG] [Thread-10681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:15:31.618 [DEBUG] [Thread-10681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:15:31.658 [DEBUG] [Thread-10681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:15:31.659 [DEBUG] [Thread-10681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:15:31.662 [DEBUG] [Thread-10681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:15:31.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:15:31.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:15:31.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:15:31.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:15:31.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:15:31.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:15:31.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:15:31.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:15:31.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:15:31.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.052179 -999.00  +20.70   5.54     17   -5.10 1 1 1 1 1     0    0 25.46 -15.68 ZNESW 4.7 5.5 116.7 9.1 20.1 -26.4 20.0 -25.9 19.6 -24.7 19.9 -25.6
2025-11-26T03:15:31.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:15:31.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:15:31.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.052179
2025-11-26T03:15:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:15:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:15:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:15:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:15:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:15:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:15:06', tmtdew=29.74, humidity=12.78, cloud=0.0, wind=8.98, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:15:06', seeing=1.03, atlas_timestamp='2025-11-26T01:15:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:12:00')
2025-11-26T03:15:31.684 [DEBUG] [Thread-10681] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:15:31.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:15:31.779 [DEBUG] [Thread-10684] [transport.py] [_log()] starting thread (client mode): 0x70df8b20
2025-11-26T03:15:31.779 [DEBUG] [Thread-10684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:15:31.796 [DEBUG] [Thread-10684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:15:31.796 [INFO] [Thread-10684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:15:31.804 [DEBUG] [Thread-10684] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:15:31.804 [DEBUG] [Thread-10684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:15:31.804 [DEBUG] [Thread-10684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:15:31.804 [DEBUG] [Thread-10684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:15:31.805 [DEBUG] [Thread-10684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:15:31.805 [DEBUG] [Thread-10684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:15:31.805 [DEBUG] [Thread-10684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:15:31.805 [DEBUG] [Thread-10684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:15:31.805 [DEBUG] [Thread-10684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:15:31.805 [DEBUG] [Thread-10684] [transport.py] [_log()] client lang: <none>
2025-11-26T03:15:31.805 [DEBUG] [Thread-10684] [transport.py] [_log()] server lang: <none>
2025-11-26T03:15:31.805 [DEBUG] [Thread-10684] [transport.py] [_log()] kex follows: False
2025-11-26T03:15:31.806 [DEBUG] [Thread-10684] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:15:31.806 [DEBUG] [Thread-10684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:15:31.806 [DEBUG] [Thread-10684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:15:31.806 [DEBUG] [Thread-10684] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:15:31.806 [DEBUG] [Thread-10684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:15:31.806 [DEBUG] [Thread-10684] [transport.py] [_log()] Compression: none
2025-11-26T03:15:31.806 [DEBUG] [Thread-10684] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:15:31.866 [DEBUG] [Thread-10684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:15:31.866 [DEBUG] [Thread-10684] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:15:31.867 [DEBUG] [Thread-10684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:15:31.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:15:31.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:15:31.928 [DEBUG] [Thread-10684] [transport.py] [_log()] userauth is OK
2025-11-26T03:15:31.928 [DEBUG] [Thread-10684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:15:31.929 [DEBUG] [Thread-10684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:15:31.929 [DEBUG] [Thread-10684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:15:31.929 [DEBUG] [Thread-10684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:15:31.948 [INFO] [Thread-10684] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:15:31.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:15:31.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:15:32.803 [DEBUG] [Thread-10684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:15:32.803 [DEBUG] [Thread-10684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:15:32.851 [DEBUG] [Thread-10684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:15:32.851 [DEBUG] [Thread-10684] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:15:32.860 [DEBUG] [Thread-10684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:15:32.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:15:32.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:15:32.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:15:32.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:15:32.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:15:32.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:15:32.893 [DEBUG] [Thread-10684] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:15:35.195 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:36.032 [DEBUG] [Thread-10686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:45.620 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:51.083 [DEBUG] [Thread-10687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:53.062 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:53.063 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:15:56.038 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:02.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:16:02.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:16:02.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:16:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 15, 38), 29.73, 12.79, 0.0, 9.11, 19.85, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:16:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:15:38
2025-11-26T03:16:03.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:16:03.853 [DEBUG] [Thread-10688] [transport.py] [_log()] starting thread (client mode): 0x70df8eb0
2025-11-26T03:16:03.853 [DEBUG] [Thread-10688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:16:03.875 [DEBUG] [Thread-10688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:16:03.875 [INFO] [Thread-10688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] client lang: <none>
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] server lang: <none>
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] kex follows: False
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] Compression: none
2025-11-26T03:16:03.878 [DEBUG] [Thread-10688] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:16:03.895 [DEBUG] [Thread-10688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:16:03.896 [DEBUG] [Thread-10688] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:16:03.896 [DEBUG] [Thread-10688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:16:03.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:16:03.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:16:03.898 [DEBUG] [Thread-10688] [transport.py] [_log()] userauth is OK
2025-11-26T03:16:03.898 [DEBUG] [Thread-10688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:16:03.898 [DEBUG] [Thread-10688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:16:03.898 [DEBUG] [Thread-10688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:16:03.898 [DEBUG] [Thread-10688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:16:03.908 [INFO] [Thread-10688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:16:03.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:16:04.532 [DEBUG] [Thread-10688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:16:04.532 [DEBUG] [Thread-10688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:16:04.532 [DEBUG] [Thread-10688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:16:04.573 [DEBUG] [Thread-10688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:16:04.573 [DEBUG] [Thread-10688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:16:04.576 [DEBUG] [Thread-10688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:16:04.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:16:04.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:16:04.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:16:04.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:16:04.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:16:04.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:16:04.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:16:04.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:16:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:16:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.052526 -999.00  +20.70   5.95     17   -5.10 1 1 1 1 1     0    0 25.89 -16.05 ZNESW 6.0 6.0 87.6 10.0 20.1 -26.6 19.9 -26.0 19.6 -24.6 19.9 -25.6
2025-11-26T03:16:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:16:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:16:04.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.052526
2025-11-26T03:16:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:16:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:16:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:16:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:16:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:16:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:15:38', tmtdew=29.73, humidity=12.79, cloud=0.0, wind=9.11, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:15:38', seeing=1.03, atlas_timestamp='2025-11-26T01:15:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:12:00')
2025-11-26T03:16:04.601 [DEBUG] [Thread-10688] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:16:04.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:16:04.693 [DEBUG] [Thread-10691] [transport.py] [_log()] starting thread (client mode): 0x70df8bb0
2025-11-26T03:16:04.694 [DEBUG] [Thread-10691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:16:04.713 [DEBUG] [Thread-10691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:16:04.713 [INFO] [Thread-10691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:16:04.720 [DEBUG] [Thread-10691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] client lang: <none>
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] server lang: <none>
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] kex follows: False
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:16:04.721 [DEBUG] [Thread-10691] [transport.py] [_log()] Compression: none
2025-11-26T03:16:04.722 [DEBUG] [Thread-10691] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:16:04.786 [DEBUG] [Thread-10691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:16:04.786 [DEBUG] [Thread-10691] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:16:04.787 [DEBUG] [Thread-10691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:16:04.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:16:04.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:16:04.847 [DEBUG] [Thread-10691] [transport.py] [_log()] userauth is OK
2025-11-26T03:16:04.847 [DEBUG] [Thread-10691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:16:04.847 [DEBUG] [Thread-10691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:16:04.847 [DEBUG] [Thread-10691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:16:04.847 [DEBUG] [Thread-10691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:16:04.861 [INFO] [Thread-10691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:16:04.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:16:04.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:16:05.713 [DEBUG] [Thread-10691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:16:05.714 [DEBUG] [Thread-10691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:16:05.763 [DEBUG] [Thread-10691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:16:05.763 [DEBUG] [Thread-10691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:16:05.772 [DEBUG] [Thread-10691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:16:05.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:16:05.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:16:05.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:16:05.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:16:05.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:16:05.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:16:05.808 [DEBUG] [Thread-10691] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:16:06.114 [DEBUG] [Thread-10693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:06.435 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:16.828 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:21.160 [DEBUG] [Thread-10694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:24.464 [DEBUG] [Thread-10695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:27.229 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:35.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:16:35.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:16:35.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:16:36.192 [DEBUG] [Thread-10696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:36.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 16, 10), 29.75, 12.76, 0.0, 9.33, 19.82, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:16:36.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:16:10
2025-11-26T03:16:36.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:16:36.806 [DEBUG] [Thread-10697] [transport.py] [_log()] starting thread (client mode): 0x70dfb460
2025-11-26T03:16:36.806 [DEBUG] [Thread-10697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:16:36.827 [DEBUG] [Thread-10697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:16:36.827 [INFO] [Thread-10697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:16:36.830 [DEBUG] [Thread-10697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:16:36.830 [DEBUG] [Thread-10697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:16:36.830 [DEBUG] [Thread-10697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:16:36.830 [DEBUG] [Thread-10697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:16:36.830 [DEBUG] [Thread-10697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:16:36.830 [DEBUG] [Thread-10697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:16:36.830 [DEBUG] [Thread-10697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:16:36.830 [DEBUG] [Thread-10697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] client lang: <none>
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] server lang: <none>
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] kex follows: False
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] Compression: none
2025-11-26T03:16:36.831 [DEBUG] [Thread-10697] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:16:36.847 [DEBUG] [Thread-10697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:16:36.847 [DEBUG] [Thread-10697] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:16:36.847 [DEBUG] [Thread-10697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:16:36.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:16:36.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:16:36.848 [DEBUG] [Thread-10697] [transport.py] [_log()] userauth is OK
2025-11-26T03:16:36.848 [DEBUG] [Thread-10697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:16:36.848 [DEBUG] [Thread-10697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:16:36.848 [DEBUG] [Thread-10697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:16:36.848 [DEBUG] [Thread-10697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:16:36.859 [INFO] [Thread-10697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:16:36.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:16:37.476 [DEBUG] [Thread-10697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:16:37.476 [DEBUG] [Thread-10697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:16:37.477 [DEBUG] [Thread-10697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:16:37.517 [DEBUG] [Thread-10697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:16:37.517 [DEBUG] [Thread-10697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:16:37.518 [DEBUG] [Thread-10697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:16:37.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:16:37.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:16:37.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:16:37.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:16:37.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:16:37.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:16:37.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.052873 -999.00  +20.70   7.65     17   -5.10 1 1 1 1 1     0    0 25.27 -14.73 ZNESW 7.4 7.7 118.0 9.2 20.1 -26.2 19.9 -25.8 19.6 -24.7 19.9 -25.6
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.052873
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:16:37.527 [DEBUG] [Thread-10697] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:16:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:16:10', tmtdew=29.75, humidity=12.76, cloud=0.0, wind=9.33, temperature=19.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:16:10', seeing=1.1, atlas_timestamp='2025-11-26T01:16:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.05924999999999869, 0.0337499999999995, -0.045999999999999375, 0.036999999999999034, 0.0012500000000006395, 0.006000000000000227, -0.05074999999999896, -0.0010000000000012221, -0.032999999999999474, -0.02275000000000027, -0.0129999999999999, 0.06599999999999895, 0.06974999999999909, -0.05450000000000088, 0.013999999999999346, 0.04224999999999923, 0.010500000000000398, -0.04200000000000159, 0.005249999999998423, 0.07399999999999807, 0.06724999999999781, -0.0032499999999977547, 0.012749999999998707, 0.026999999999999247, 0.04600000000000115, 0.034250000000000114, 0.04100000000000037, 0.1379999999999999, 0.11100000000000065, 0.0600000000000005, 0.019000000000000128, -0.0032500000000013074], zp_timestamp='2025-11-26T01:12:00')
2025-11-26T03:16:37.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:16:37.614 [DEBUG] [Thread-10700] [transport.py] [_log()] starting thread (client mode): 0x70df94b0
2025-11-26T03:16:37.614 [DEBUG] [Thread-10700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:16:37.623 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:37.629 [DEBUG] [Thread-10700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:16:37.629 [INFO] [Thread-10700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:16:37.636 [DEBUG] [Thread-10700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] client lang: <none>
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] server lang: <none>
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] kex follows: False
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] Compression: none
2025-11-26T03:16:37.637 [DEBUG] [Thread-10700] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:16:37.694 [DEBUG] [Thread-10700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:16:37.694 [DEBUG] [Thread-10700] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:16:37.695 [DEBUG] [Thread-10700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:16:37.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:16:37.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:16:37.752 [DEBUG] [Thread-10700] [transport.py] [_log()] userauth is OK
2025-11-26T03:16:37.752 [DEBUG] [Thread-10700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:16:37.752 [DEBUG] [Thread-10700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:16:37.752 [DEBUG] [Thread-10700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:16:37.752 [DEBUG] [Thread-10700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:16:37.766 [INFO] [Thread-10700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:16:37.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:16:37.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:16:38.575 [DEBUG] [Thread-10700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:16:38.576 [DEBUG] [Thread-10700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:16:38.624 [DEBUG] [Thread-10700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:16:38.624 [DEBUG] [Thread-10700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:16:38.633 [DEBUG] [Thread-10700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:16:38.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:16:38.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:16:38.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:16:38.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:16:38.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:16:38.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:16:38.671 [DEBUG] [Thread-10700] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:16:48.095 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:51.225 [DEBUG] [Thread-10702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:53.264 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:53.265 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:16:58.522 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:06.281 [DEBUG] [Thread-10703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:08.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:17:08.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:17:08.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:17:08.974 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:09.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 16, 42), 29.71, 12.76, 0.0, 9.67, 19.8, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:17:09.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:16:42
2025-11-26T03:17:09.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:17:09.619 [DEBUG] [Thread-10704] [transport.py] [_log()] starting thread (client mode): 0x70de52d0
2025-11-26T03:17:09.619 [DEBUG] [Thread-10704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:17:09.641 [DEBUG] [Thread-10704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:17:09.641 [INFO] [Thread-10704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:17:09.644 [DEBUG] [Thread-10704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] client lang: <none>
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] server lang: <none>
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] kex follows: False
2025-11-26T03:17:09.645 [DEBUG] [Thread-10704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:17:09.646 [DEBUG] [Thread-10704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:17:09.646 [DEBUG] [Thread-10704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:17:09.646 [DEBUG] [Thread-10704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:17:09.646 [DEBUG] [Thread-10704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:17:09.646 [DEBUG] [Thread-10704] [transport.py] [_log()] Compression: none
2025-11-26T03:17:09.646 [DEBUG] [Thread-10704] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:17:09.666 [DEBUG] [Thread-10704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:17:09.667 [DEBUG] [Thread-10704] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:17:09.667 [DEBUG] [Thread-10704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:17:09.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:17:09.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:17:09.669 [DEBUG] [Thread-10704] [transport.py] [_log()] userauth is OK
2025-11-26T03:17:09.669 [DEBUG] [Thread-10704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:17:09.670 [DEBUG] [Thread-10704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:17:09.670 [DEBUG] [Thread-10704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:17:09.670 [DEBUG] [Thread-10704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:17:09.693 [INFO] [Thread-10704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:17:09.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:17:10.343 [DEBUG] [Thread-10704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:17:10.343 [DEBUG] [Thread-10704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:17:10.343 [DEBUG] [Thread-10704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:17:10.384 [DEBUG] [Thread-10704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:17:10.384 [DEBUG] [Thread-10704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:17:10.387 [DEBUG] [Thread-10704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:17:10.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:17:10.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:17:10.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:17:10.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:17:10.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:17:10.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:17:10.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.053221 -999.00  +20.70   6.86     17   -5.10 1 1 1 1 1     0    0 25.33 -15.31 ZNESW 7.2 6.9 121.0 9.0 20.1 -26.5 19.9 -25.9 19.6 -24.4 19.9 -25.6
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.053221
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:17:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:16:42', tmtdew=29.71, humidity=12.76, cloud=0.0, wind=9.67, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:16:42', seeing=1.01, atlas_timestamp='2025-11-26T01:16:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:15:00')
2025-11-26T03:17:10.405 [DEBUG] [Thread-10704] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:17:10.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:17:10.491 [DEBUG] [Thread-10707] [transport.py] [_log()] starting thread (client mode): 0x70de6ce0
2025-11-26T03:17:10.491 [DEBUG] [Thread-10707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:17:10.505 [DEBUG] [Thread-10707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:17:10.505 [INFO] [Thread-10707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] client lang: <none>
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] server lang: <none>
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] kex follows: False
2025-11-26T03:17:10.513 [DEBUG] [Thread-10707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:17:10.514 [DEBUG] [Thread-10707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:17:10.514 [DEBUG] [Thread-10707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:17:10.514 [DEBUG] [Thread-10707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:17:10.514 [DEBUG] [Thread-10707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:17:10.514 [DEBUG] [Thread-10707] [transport.py] [_log()] Compression: none
2025-11-26T03:17:10.514 [DEBUG] [Thread-10707] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:17:10.570 [DEBUG] [Thread-10707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:17:10.570 [DEBUG] [Thread-10707] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:17:10.570 [DEBUG] [Thread-10707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:17:10.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:17:10.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:17:10.628 [DEBUG] [Thread-10707] [transport.py] [_log()] userauth is OK
2025-11-26T03:17:10.628 [DEBUG] [Thread-10707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:17:10.628 [DEBUG] [Thread-10707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:17:10.628 [DEBUG] [Thread-10707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:17:10.628 [DEBUG] [Thread-10707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:17:10.641 [INFO] [Thread-10707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:17:10.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:17:10.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:17:11.472 [DEBUG] [Thread-10707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:17:11.472 [DEBUG] [Thread-10707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:17:11.520 [DEBUG] [Thread-10707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:17:11.520 [DEBUG] [Thread-10707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:17:11.529 [DEBUG] [Thread-10707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:17:11.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:17:11.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:17: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') -> 00000000
2025-11-26T03:17:11.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:17:11.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:17:11.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:17:11.560 [DEBUG] [Thread-10707] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:17:19.412 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:21.314 [DEBUG] [Thread-10709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:24.522 [DEBUG] [Thread-10710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:29.847 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:36.384 [DEBUG] [Thread-10711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:40.294 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:17:41.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:17:41.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:17:42.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 17, 14), 29.76, 12.69, 0.0, 9.56, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:17:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:17:14
2025-11-26T03:17:42.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:17:42.507 [DEBUG] [Thread-10712] [transport.py] [_log()] starting thread (client mode): 0x70de7940
2025-11-26T03:17:42.507 [DEBUG] [Thread-10712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:17:42.527 [DEBUG] [Thread-10712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:17:42.528 [INFO] [Thread-10712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:17:42.529 [DEBUG] [Thread-10712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] client lang: <none>
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] server lang: <none>
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] kex follows: False
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] Compression: none
2025-11-26T03:17:42.530 [DEBUG] [Thread-10712] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:17:42.540 [DEBUG] [Thread-10712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:17:42.541 [DEBUG] [Thread-10712] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:17:42.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:17:42.542 [DEBUG] [Thread-10712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:17:42.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:17:42.543 [DEBUG] [Thread-10712] [transport.py] [_log()] userauth is OK
2025-11-26T03:17:42.543 [DEBUG] [Thread-10712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:17:42.544 [DEBUG] [Thread-10712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:17:42.544 [DEBUG] [Thread-10712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:17:42.544 [DEBUG] [Thread-10712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:17:42.563 [INFO] [Thread-10712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:17:42.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:17:43.218 [DEBUG] [Thread-10712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:17:43.218 [DEBUG] [Thread-10712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:17:43.218 [DEBUG] [Thread-10712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:17:43.259 [DEBUG] [Thread-10712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:17:43.259 [DEBUG] [Thread-10712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:17:43.263 [DEBUG] [Thread-10712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:17:43.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:17:43.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:17:43.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:17:43.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:17:43.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:17:43.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:17:43.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:17:43.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:17:43.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:17:43.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.053568 -999.00  +20.70   5.83     17   -5.10 1 1 1 1 1     0    0 25.65 -13.99 ZNESW 6.6 5.8 85.4 9.1 20.1 -26.4 20.0 -26.1 19.6 -24.6 19.9 -25.6
2025-11-26T03:17:43.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:17:43.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:17:43.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.053568
2025-11-26T03:17:43.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:17:43.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:17:43.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:17:43.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:17:43.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:17:43.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:17:14', tmtdew=29.76, humidity=12.69, cloud=0.0, wind=9.56, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:17:14', seeing=0.98, atlas_timestamp='2025-11-26T01:17:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:15:00')
2025-11-26T03:17:43.290 [DEBUG] [Thread-10712] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:17:43.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:17:43.394 [DEBUG] [Thread-10715] [transport.py] [_log()] starting thread (client mode): 0x70dfa740
2025-11-26T03:17:43.395 [DEBUG] [Thread-10715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:17:43.409 [DEBUG] [Thread-10715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:17:43.409 [INFO] [Thread-10715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:17:43.417 [DEBUG] [Thread-10715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:17:43.417 [DEBUG] [Thread-10715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:17:43.417 [DEBUG] [Thread-10715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:17:43.417 [DEBUG] [Thread-10715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] client lang: <none>
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] server lang: <none>
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] kex follows: False
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] Compression: none
2025-11-26T03:17:43.418 [DEBUG] [Thread-10715] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:17:43.475 [DEBUG] [Thread-10715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:17:43.475 [DEBUG] [Thread-10715] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:17:43.475 [DEBUG] [Thread-10715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:17:43.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:17:43.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:17:43.532 [DEBUG] [Thread-10715] [transport.py] [_log()] userauth is OK
2025-11-26T03:17:43.532 [DEBUG] [Thread-10715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:17:43.533 [DEBUG] [Thread-10715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:17:43.533 [DEBUG] [Thread-10715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:17:43.533 [DEBUG] [Thread-10715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:17:43.552 [INFO] [Thread-10715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:17:43.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:17:43.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:17:44.352 [DEBUG] [Thread-10715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:17:44.352 [DEBUG] [Thread-10715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:17:44.401 [DEBUG] [Thread-10715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:17:44.401 [DEBUG] [Thread-10715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:17:44.410 [DEBUG] [Thread-10715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:17:44.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:17:44.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:17:44.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:17:44.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:17:44.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:17:44.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:17:44.447 [DEBUG] [Thread-10715] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:17:50.718 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:51.418 [DEBUG] [Thread-10717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:53.464 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:17:53.465 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:01.183 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:06.458 [DEBUG] [Thread-10718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:11.590 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:18:14.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:18:14.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:18:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 17, 46), 29.72, 12.74, 0.0, 9.35, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:18:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:17:46
2025-11-26T03:18:15.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:18:15.397 [DEBUG] [Thread-10719] [transport.py] [_log()] starting thread (client mode): 0x70de45b0
2025-11-26T03:18:15.397 [DEBUG] [Thread-10719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:18:15.416 [DEBUG] [Thread-10719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:18:15.416 [INFO] [Thread-10719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:18:15.417 [DEBUG] [Thread-10719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:18:15.417 [DEBUG] [Thread-10719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] client lang: <none>
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] server lang: <none>
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] kex follows: False
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:18:15.418 [DEBUG] [Thread-10719] [transport.py] [_log()] Compression: none
2025-11-26T03:18:15.419 [DEBUG] [Thread-10719] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:18:15.427 [DEBUG] [Thread-10719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:18:15.428 [DEBUG] [Thread-10719] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:18:15.428 [DEBUG] [Thread-10719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:18:15.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:18:15.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:18:15.430 [DEBUG] [Thread-10719] [transport.py] [_log()] userauth is OK
2025-11-26T03:18:15.431 [DEBUG] [Thread-10719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:18:15.431 [DEBUG] [Thread-10719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:18:15.431 [DEBUG] [Thread-10719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:18:15.431 [DEBUG] [Thread-10719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:18:15.445 [INFO] [Thread-10719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:18:15.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:18:16.005 [DEBUG] [Thread-10719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:18:16.005 [DEBUG] [Thread-10719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:18:16.005 [DEBUG] [Thread-10719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:18:16.045 [DEBUG] [Thread-10719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:18:16.045 [DEBUG] [Thread-10719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:18:16.048 [DEBUG] [Thread-10719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:18:16.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:18:16.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:18:16.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:18:16.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:18:16.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:18:16.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:18:16.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:18:16.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:18:16.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:18:16.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.054262 -999.00  +20.70   6.52     17   -5.10 1 1 1 1 1     0    0 25.41 -13.30 ZNESW 7.1 6.5 63.2 11.3 20.1 -26.6 19.9 -25.9 19.6 -24.4 19.9 -25.7
2025-11-26T03:18:16.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:18:16.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:18:16.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.054262
2025-11-26T03:18:16.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:18:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:18:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:18:16.073 [DEBUG] [Thread-10719] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:18:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:18:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:18:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:17:46', tmtdew=29.72, humidity=12.74, cloud=0.0, wind=9.35, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:17:46', seeing=1.07, atlas_timestamp='2025-11-26T01:18:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:15:00')
2025-11-26T03:18:16.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:18:16.172 [DEBUG] [Thread-10722] [transport.py] [_log()] starting thread (client mode): 0x70de6ce0
2025-11-26T03:18:16.172 [DEBUG] [Thread-10722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:18:16.186 [DEBUG] [Thread-10722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:18:16.187 [INFO] [Thread-10722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] client lang: <none>
2025-11-26T03:18:16.194 [DEBUG] [Thread-10722] [transport.py] [_log()] server lang: <none>
2025-11-26T03:18:16.195 [DEBUG] [Thread-10722] [transport.py] [_log()] kex follows: False
2025-11-26T03:18:16.195 [DEBUG] [Thread-10722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:18:16.195 [DEBUG] [Thread-10722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:18:16.195 [DEBUG] [Thread-10722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:18:16.195 [DEBUG] [Thread-10722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:18:16.195 [DEBUG] [Thread-10722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:18:16.195 [DEBUG] [Thread-10722] [transport.py] [_log()] Compression: none
2025-11-26T03:18:16.195 [DEBUG] [Thread-10722] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:18:16.251 [DEBUG] [Thread-10722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:18:16.251 [DEBUG] [Thread-10722] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:18:16.252 [DEBUG] [Thread-10722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:18:16.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:18:16.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:18:16.307 [DEBUG] [Thread-10722] [transport.py] [_log()] userauth is OK
2025-11-26T03:18:16.308 [DEBUG] [Thread-10722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:18:16.308 [DEBUG] [Thread-10722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:18:16.308 [DEBUG] [Thread-10722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:18:16.308 [DEBUG] [Thread-10722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:18:16.327 [INFO] [Thread-10722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:18:16.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:18:16.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:18:17.170 [DEBUG] [Thread-10722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:18:17.170 [DEBUG] [Thread-10722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:18:17.223 [DEBUG] [Thread-10722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:18:17.223 [DEBUG] [Thread-10722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:18:17.236 [DEBUG] [Thread-10722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:18:17.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:18:17.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:18:17.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:18:17.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:18:17.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:18:17.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:18:17.287 [DEBUG] [Thread-10722] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:18:21.489 [DEBUG] [Thread-10724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:21.986 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:24.574 [DEBUG] [Thread-10725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:32.387 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:36.538 [DEBUG] [Thread-10726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:42.781 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:18:47.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:18:47.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:18:47.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 18, 18), 29.72, 12.74, 0.0, 9.39, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:18:47.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:18:18
2025-11-26T03:18:48.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:18:48.242 [DEBUG] [Thread-10727] [transport.py] [_log()] starting thread (client mode): 0x70de7c70
2025-11-26T03:18:48.242 [DEBUG] [Thread-10727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:18:48.261 [DEBUG] [Thread-10727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:18:48.261 [INFO] [Thread-10727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] client lang: <none>
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] server lang: <none>
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] kex follows: False
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] Compression: none
2025-11-26T03:18:48.263 [DEBUG] [Thread-10727] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:18:48.275 [DEBUG] [Thread-10727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:18:48.275 [DEBUG] [Thread-10727] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:18:48.275 [DEBUG] [Thread-10727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:18:48.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:18:48.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:18:48.276 [DEBUG] [Thread-10727] [transport.py] [_log()] userauth is OK
2025-11-26T03:18:48.276 [DEBUG] [Thread-10727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:18:48.276 [DEBUG] [Thread-10727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:18:48.276 [DEBUG] [Thread-10727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:18:48.276 [DEBUG] [Thread-10727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:18:48.292 [INFO] [Thread-10727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:18:48.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:18:48.882 [DEBUG] [Thread-10727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:18:48.883 [DEBUG] [Thread-10727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:18:48.883 [DEBUG] [Thread-10727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:18:48.924 [DEBUG] [Thread-10727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:18:48.924 [DEBUG] [Thread-10727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:18:48.929 [DEBUG] [Thread-10727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:18:48.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:18:48.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:18:48.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:18:48.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:18:48.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:18:48.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:18:48.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:18:48.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:18:48.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:18:48.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.054262 -999.00  +20.70   6.52     17   -5.10 1 1 1 1 1     0    0 25.41 -13.30 ZNESW 7.1 6.5 63.2 11.3 20.1 -26.6 19.9 -25.9 19.6 -24.4 19.9 -25.7
2025-11-26T03:18:48.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:18:48.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:18:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.054262
2025-11-26T03:18:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:18:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:18:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:18:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:18:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:18:48.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:18:18', tmtdew=29.72, humidity=12.74, cloud=0.0, wind=9.39, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:18:18', seeing=0.99, atlas_timestamp='2025-11-26T01:18:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:15:00')
2025-11-26T03:18:48.954 [DEBUG] [Thread-10727] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:18:49.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:18:49.051 [DEBUG] [Thread-10730] [transport.py] [_log()] starting thread (client mode): 0x70de6dd0
2025-11-26T03:18:49.051 [DEBUG] [Thread-10730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:18:49.065 [DEBUG] [Thread-10730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:18:49.065 [INFO] [Thread-10730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:18:49.073 [DEBUG] [Thread-10730] [transport.py] [_log()] client lang: <none>
2025-11-26T03:18:49.074 [DEBUG] [Thread-10730] [transport.py] [_log()] server lang: <none>
2025-11-26T03:18:49.074 [DEBUG] [Thread-10730] [transport.py] [_log()] kex follows: False
2025-11-26T03:18:49.074 [DEBUG] [Thread-10730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:18:49.074 [DEBUG] [Thread-10730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:18:49.074 [DEBUG] [Thread-10730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:18:49.074 [DEBUG] [Thread-10730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:18:49.074 [DEBUG] [Thread-10730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:18:49.074 [DEBUG] [Thread-10730] [transport.py] [_log()] Compression: none
2025-11-26T03:18:49.074 [DEBUG] [Thread-10730] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:18:49.136 [DEBUG] [Thread-10730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:18:49.137 [DEBUG] [Thread-10730] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:18:49.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:18:49.138 [DEBUG] [Thread-10730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:18:49.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:18:49.192 [DEBUG] [Thread-10730] [transport.py] [_log()] userauth is OK
2025-11-26T03:18:49.192 [DEBUG] [Thread-10730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:18:49.193 [DEBUG] [Thread-10730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:18:49.193 [DEBUG] [Thread-10730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:18:49.193 [DEBUG] [Thread-10730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:18:49.213 [INFO] [Thread-10730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:18:49.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:18:49.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:18:50.102 [DEBUG] [Thread-10730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:18:50.102 [DEBUG] [Thread-10730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:18:50.150 [DEBUG] [Thread-10730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:18:50.150 [DEBUG] [Thread-10730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:18:50.160 [DEBUG] [Thread-10730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:18:50.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:18:50.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:18:50.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:18:50.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:18:50.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:18:50.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:18:50.196 [DEBUG] [Thread-10730] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:18:51.572 [DEBUG] [Thread-10732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:53.174 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:53.667 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:18:53.669 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:03.597 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:06.608 [DEBUG] [Thread-10733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:14.008 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:20.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:19:20.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:19:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:19:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 18, 50), 29.75, 12.69, 0.0, 7.61, 19.7, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:19:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:18:50
2025-11-26T03:19:21.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:19:21.159 [DEBUG] [Thread-10734] [transport.py] [_log()] starting thread (client mode): 0x70de66e0
2025-11-26T03:19:21.159 [DEBUG] [Thread-10734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:19:21.180 [DEBUG] [Thread-10734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:19:21.180 [INFO] [Thread-10734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:19:21.183 [DEBUG] [Thread-10734] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] client lang: <none>
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] server lang: <none>
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] kex follows: False
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] Compression: none
2025-11-26T03:19:21.184 [DEBUG] [Thread-10734] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:19:21.200 [DEBUG] [Thread-10734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:19:21.201 [DEBUG] [Thread-10734] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:19:21.201 [DEBUG] [Thread-10734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:19:21.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:19:21.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:19:21.202 [DEBUG] [Thread-10734] [transport.py] [_log()] userauth is OK
2025-11-26T03:19:21.203 [DEBUG] [Thread-10734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:19:21.203 [DEBUG] [Thread-10734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:19:21.203 [DEBUG] [Thread-10734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:19:21.203 [DEBUG] [Thread-10734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:19:21.217 [INFO] [Thread-10734] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:19:21.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:19:21.645 [DEBUG] [Thread-10736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:21.872 [DEBUG] [Thread-10734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:19:21.872 [DEBUG] [Thread-10734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:19:21.872 [DEBUG] [Thread-10734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:19:21.913 [DEBUG] [Thread-10734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:19:21.913 [DEBUG] [Thread-10734] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:19:21.916 [DEBUG] [Thread-10734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:19:21.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:19:21.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:19:21.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:19:21.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:19:21.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:19:21.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:19:21.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:19:21.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:19:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:19:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.054609 -999.00  +20.70   8.76     17   -5.10 1 1 1 1 1     0    0 25.71 -14.25 ZNESW 10.0 8.8 121.0 10.0 20.1 -26.4 19.9 -25.9 19.6 -24.7 19.9 -25.6
2025-11-26T03:19:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:19:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:19:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.054609
2025-11-26T03:19:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:19:21.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:19:21.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:19:21.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:19:21.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:19:21.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:18:50', tmtdew=29.75, humidity=12.69, cloud=0.0, wind=7.61, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:18:50', seeing=1.01, atlas_timestamp='2025-11-26T01:18:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:15:00')
2025-11-26T03:19:21.945 [DEBUG] [Thread-10734] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:19:22.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:19:22.043 [DEBUG] [Thread-10738] [transport.py] [_log()] starting thread (client mode): 0x70de4b20
2025-11-26T03:19:22.043 [DEBUG] [Thread-10738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:19:22.057 [DEBUG] [Thread-10738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:19:22.058 [INFO] [Thread-10738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:19:22.065 [DEBUG] [Thread-10738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:19:22.065 [DEBUG] [Thread-10738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:19:22.065 [DEBUG] [Thread-10738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] client lang: <none>
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] server lang: <none>
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] kex follows: False
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:19:22.066 [DEBUG] [Thread-10738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:19:22.067 [DEBUG] [Thread-10738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:19:22.067 [DEBUG] [Thread-10738] [transport.py] [_log()] Compression: none
2025-11-26T03:19:22.067 [DEBUG] [Thread-10738] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:19:22.124 [DEBUG] [Thread-10738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:19:22.125 [DEBUG] [Thread-10738] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:19:22.125 [DEBUG] [Thread-10738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:19:22.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:19:22.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:19:22.180 [DEBUG] [Thread-10738] [transport.py] [_log()] userauth is OK
2025-11-26T03:19:22.180 [DEBUG] [Thread-10738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:19:22.181 [DEBUG] [Thread-10738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:19:22.181 [DEBUG] [Thread-10738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:19:22.181 [DEBUG] [Thread-10738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:19:22.201 [INFO] [Thread-10738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:19:22.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:19:22.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:19:22.990 [DEBUG] [Thread-10738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:19:22.990 [DEBUG] [Thread-10738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:19:23.038 [DEBUG] [Thread-10738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:19:23.038 [DEBUG] [Thread-10738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:19:23.047 [DEBUG] [Thread-10738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:19:23.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:19:23.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:19:23.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:19:23.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:19:23.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:19:23.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:19:23.083 [DEBUG] [Thread-10738] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:19:24.421 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:24.626 [DEBUG] [Thread-10740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:34.837 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:36.686 [DEBUG] [Thread-10741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:45.252 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:51.743 [DEBUG] [Thread-10742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:19:53.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:19:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:19:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 19, 22), 29.7, 12.76, 0.0, 7.61, 19.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:19:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:19:22
2025-11-26T03:19:53.869 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:53.869 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:19:54.055 [DEBUG] [Thread-10743] [transport.py] [_log()] starting thread (client mode): 0x70de4d60
2025-11-26T03:19:54.055 [DEBUG] [Thread-10743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:19:54.076 [DEBUG] [Thread-10743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:19:54.076 [INFO] [Thread-10743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:19:54.079 [DEBUG] [Thread-10743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:19:54.079 [DEBUG] [Thread-10743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:19:54.079 [DEBUG] [Thread-10743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:19:54.079 [DEBUG] [Thread-10743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:19:54.079 [DEBUG] [Thread-10743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:19:54.079 [DEBUG] [Thread-10743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] client lang: <none>
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] server lang: <none>
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] kex follows: False
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] Compression: none
2025-11-26T03:19:54.080 [DEBUG] [Thread-10743] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:19:54.099 [DEBUG] [Thread-10743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:19:54.100 [DEBUG] [Thread-10743] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:19:54.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:19:54.101 [DEBUG] [Thread-10743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:19:54.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:19:54.103 [DEBUG] [Thread-10743] [transport.py] [_log()] userauth is OK
2025-11-26T03:19:54.103 [DEBUG] [Thread-10743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:19:54.104 [DEBUG] [Thread-10743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:19:54.104 [DEBUG] [Thread-10743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:19:54.104 [DEBUG] [Thread-10743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:19:54.138 [INFO] [Thread-10743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:19:54.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:19:54.799 [DEBUG] [Thread-10743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:19:54.799 [DEBUG] [Thread-10743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:19:54.799 [DEBUG] [Thread-10743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:19:54.839 [DEBUG] [Thread-10743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:19:54.839 [DEBUG] [Thread-10743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:19:54.841 [DEBUG] [Thread-10743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:19:54.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:19:54.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:19:54.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:19:54.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:19:54.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:19:54.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:19:54.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:19:54.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.054957 -999.00  +20.70   7.15     17   -5.10 1 1 1 1 1     0    0 25.43 -14.91 ZNESW 5.8 7.2 111.2 10.4 20.1 -26.5 19.9 -25.8 19.6 -24.4 19.9 -25.9
2025-11-26T03:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.054957
2025-11-26T03:19:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:19:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:19:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:19:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:19:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:19:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:19:22', tmtdew=29.7, humidity=12.76, cloud=0.0, wind=7.61, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:19:22', seeing=1.01, atlas_timestamp='2025-11-26T01:19:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:15:00')
2025-11-26T03:19:54.858 [DEBUG] [Thread-10743] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:19:54.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:19:54.944 [DEBUG] [Thread-10746] [transport.py] [_log()] starting thread (client mode): 0x70de7f10
2025-11-26T03:19:54.944 [DEBUG] [Thread-10746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:19:54.958 [DEBUG] [Thread-10746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:19:54.958 [INFO] [Thread-10746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] client lang: <none>
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] server lang: <none>
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] kex follows: False
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] Compression: none
2025-11-26T03:19:54.966 [DEBUG] [Thread-10746] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:19:55.022 [DEBUG] [Thread-10746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:19:55.022 [DEBUG] [Thread-10746] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:19:55.022 [DEBUG] [Thread-10746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:19:55.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:19:55.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:19:55.079 [DEBUG] [Thread-10746] [transport.py] [_log()] userauth is OK
2025-11-26T03:19:55.079 [DEBUG] [Thread-10746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:19:55.079 [DEBUG] [Thread-10746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:19:55.079 [DEBUG] [Thread-10746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:19:55.079 [DEBUG] [Thread-10746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:19:55.093 [INFO] [Thread-10746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:19:55.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:19:55.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:19:55.691 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:19:55.911 [DEBUG] [Thread-10746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:19:55.911 [DEBUG] [Thread-10746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:19:55.959 [DEBUG] [Thread-10746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:19:55.959 [DEBUG] [Thread-10746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:19:55.967 [DEBUG] [Thread-10746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:19:55.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:19:55.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:19:55.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:19:55.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:19:55.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:19:55.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:19:55.999 [DEBUG] [Thread-10746] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:20:06.088 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:06.778 [DEBUG] [Thread-10748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:16.482 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:21.823 [DEBUG] [Thread-10749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:24.705 [DEBUG] [Thread-10750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:26.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:20:26.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:20:26.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:20:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 19, 54), 29.69, 12.76, 0.0, 9.67, 19.67, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:20:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:19:54
2025-11-26T03:20:26.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:20:26.886 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:26.964 [DEBUG] [Thread-10751] [transport.py] [_log()] starting thread (client mode): 0x70de6c20
2025-11-26T03:20:26.964 [DEBUG] [Thread-10751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:20:26.985 [DEBUG] [Thread-10751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:20:26.985 [INFO] [Thread-10751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] client lang: <none>
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] server lang: <none>
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] kex follows: False
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] Compression: none
2025-11-26T03:20:26.988 [DEBUG] [Thread-10751] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:20:27.004 [DEBUG] [Thread-10751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:20:27.004 [DEBUG] [Thread-10751] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:20:27.005 [DEBUG] [Thread-10751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:20:27.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:20:27.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:20:27.005 [DEBUG] [Thread-10751] [transport.py] [_log()] userauth is OK
2025-11-26T03:20:27.005 [DEBUG] [Thread-10751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:20:27.006 [DEBUG] [Thread-10751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:20:27.006 [DEBUG] [Thread-10751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:20:27.006 [DEBUG] [Thread-10751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:20:27.020 [INFO] [Thread-10751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:20:27.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:20:27.682 [DEBUG] [Thread-10751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:20:27.682 [DEBUG] [Thread-10751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:20:27.682 [DEBUG] [Thread-10751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:20:27.723 [DEBUG] [Thread-10751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:20:27.723 [DEBUG] [Thread-10751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:20:27.725 [DEBUG] [Thread-10751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:20:27.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:20:27.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:20:27.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:20:27.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:20:27.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:20:27.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:20:27.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.055304 -999.00  +20.70   6.93     17   -5.10 1 1 1 1 1     0    0 25.47 -14.71 ZNESW 7.1 6.9 127.4 9.9 20.1 -26.3 20.0 -25.9 19.6 -24.5 19.9 -25.7
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.055304
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:20:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:19:54', tmtdew=29.69, humidity=12.76, cloud=0.0, wind=9.67, temperature=19.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:19:54', seeing=0.92, atlas_timestamp='2025-11-26T01:19:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:18:00')
2025-11-26T03:20:27.745 [DEBUG] [Thread-10751] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:20:27.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:20:27.831 [DEBUG] [Thread-10754] [transport.py] [_log()] starting thread (client mode): 0x70de62c0
2025-11-26T03:20:27.831 [DEBUG] [Thread-10754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:20:27.845 [DEBUG] [Thread-10754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:20:27.845 [INFO] [Thread-10754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] client lang: <none>
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] server lang: <none>
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] kex follows: False
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] Compression: none
2025-11-26T03:20:27.853 [DEBUG] [Thread-10754] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:20:27.913 [DEBUG] [Thread-10754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:20:27.913 [DEBUG] [Thread-10754] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:20:27.913 [DEBUG] [Thread-10754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:20:27.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:20:27.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:20:27.973 [DEBUG] [Thread-10754] [transport.py] [_log()] userauth is OK
2025-11-26T03:20:27.973 [DEBUG] [Thread-10754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:20:27.973 [DEBUG] [Thread-10754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:20:27.973 [DEBUG] [Thread-10754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:20:27.973 [DEBUG] [Thread-10754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:20:27.986 [INFO] [Thread-10754] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:20:27.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:20:27.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:20:28.853 [DEBUG] [Thread-10754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:20:28.853 [DEBUG] [Thread-10754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:20:28.902 [DEBUG] [Thread-10754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:20:28.902 [DEBUG] [Thread-10754] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:20:28.911 [DEBUG] [Thread-10754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:20:28.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:20:28.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:20:28.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:20:28.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:20:28.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:20:28.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:20:28.948 [DEBUG] [Thread-10754] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:20:36.856 [DEBUG] [Thread-10756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:37.374 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:47.798 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:51.919 [DEBUG] [Thread-10757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:54.074 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:54.075 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:58.212 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:20:58.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:20:58.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:20:58.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:20:59.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 20, 26), 29.65, 12.79, 0.0, 9.78, 19.62, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:20:59.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:20:26
2025-11-26T03:20:59.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:20:59.970 [DEBUG] [Thread-10758] [transport.py] [_log()] starting thread (client mode): 0x70df93c0
2025-11-26T03:20:59.970 [DEBUG] [Thread-10758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:20:59.992 [DEBUG] [Thread-10758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:20:59.992 [INFO] [Thread-10758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] client lang: <none>
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] server lang: <none>
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] kex follows: False
2025-11-26T03:20:59.995 [DEBUG] [Thread-10758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:20:59.996 [DEBUG] [Thread-10758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:20:59.996 [DEBUG] [Thread-10758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:20:59.996 [DEBUG] [Thread-10758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:20:59.996 [DEBUG] [Thread-10758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:20:59.996 [DEBUG] [Thread-10758] [transport.py] [_log()] Compression: none
2025-11-26T03:20:59.996 [DEBUG] [Thread-10758] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:21:00.010 [DEBUG] [Thread-10758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:21:00.010 [DEBUG] [Thread-10758] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:21:00.010 [DEBUG] [Thread-10758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:21:00.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:21:00.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:21:00.011 [DEBUG] [Thread-10758] [transport.py] [_log()] userauth is OK
2025-11-26T03:21:00.011 [DEBUG] [Thread-10758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:21:00.011 [DEBUG] [Thread-10758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:21:00.011 [DEBUG] [Thread-10758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:21:00.011 [DEBUG] [Thread-10758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:21:00.020 [INFO] [Thread-10758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:21:00.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:21:00.650 [DEBUG] [Thread-10758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:21:00.650 [DEBUG] [Thread-10758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:21:00.650 [DEBUG] [Thread-10758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:21:00.691 [DEBUG] [Thread-10758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:21:00.691 [DEBUG] [Thread-10758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:21:00.694 [DEBUG] [Thread-10758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:21:00.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:21:00.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:21:00.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:21:00.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:21:00.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:21:00.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:21:00.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.055651 -999.00  +20.70   6.24     17   -5.10 1 1 1 1 1     0    0 25.51 -14.67 ZNESW 5.6 6.2 113.4 9.2 20.1 -26.5 19.9 -25.9 19.6 -24.4 19.9 -25.6
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.055651
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:21:00.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:20:26', tmtdew=29.65, humidity=12.79, cloud=0.0, wind=9.78, temperature=19.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:20:58', seeing=1.07, atlas_timestamp='2025-11-26T01:20:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:18:00')
2025-11-26T03:21:00.714 [DEBUG] [Thread-10758] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:21:00.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:21:00.806 [DEBUG] [Thread-10761] [transport.py] [_log()] starting thread (client mode): 0x70de4f10
2025-11-26T03:21:00.806 [DEBUG] [Thread-10761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:21:00.822 [DEBUG] [Thread-10761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:21:00.822 [INFO] [Thread-10761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] client lang: <none>
2025-11-26T03:21:00.830 [DEBUG] [Thread-10761] [transport.py] [_log()] server lang: <none>
2025-11-26T03:21:00.831 [DEBUG] [Thread-10761] [transport.py] [_log()] kex follows: False
2025-11-26T03:21:00.831 [DEBUG] [Thread-10761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:21:00.831 [DEBUG] [Thread-10761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:21:00.831 [DEBUG] [Thread-10761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:21:00.831 [DEBUG] [Thread-10761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:21:00.831 [DEBUG] [Thread-10761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:21:00.831 [DEBUG] [Thread-10761] [transport.py] [_log()] Compression: none
2025-11-26T03:21:00.831 [DEBUG] [Thread-10761] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:21:00.887 [DEBUG] [Thread-10761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:21:00.887 [DEBUG] [Thread-10761] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:21:00.888 [DEBUG] [Thread-10761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:21:00.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:21:00.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:21:00.943 [DEBUG] [Thread-10761] [transport.py] [_log()] userauth is OK
2025-11-26T03:21:00.943 [DEBUG] [Thread-10761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:21:00.943 [DEBUG] [Thread-10761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:21:00.943 [DEBUG] [Thread-10761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:21:00.943 [DEBUG] [Thread-10761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:21:00.957 [INFO] [Thread-10761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:21:00.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:21:00.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:21:01.806 [DEBUG] [Thread-10761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:21:01.806 [DEBUG] [Thread-10761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:21:01.857 [DEBUG] [Thread-10761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:21:01.857 [DEBUG] [Thread-10761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:21:01.868 [DEBUG] [Thread-10761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:21:01.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:21:01.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:21:01.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:21:01.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:21:01.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:21:01.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:21:01.904 [DEBUG] [Thread-10761] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:21:06.956 [DEBUG] [Thread-10763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:08.647 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:19.101 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:22.010 [DEBUG] [Thread-10764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:24.784 [DEBUG] [Thread-10765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:29.525 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:31.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:21:31.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:21:31.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:21:32.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 20, 58), 29.57, 12.83, 0.0, 9.65, 19.63, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:21:32.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:20:58
2025-11-26T03:21:32.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:21:32.945 [DEBUG] [Thread-10766] [transport.py] [_log()] starting thread (client mode): 0x70d7ebc0
2025-11-26T03:21:32.945 [DEBUG] [Thread-10766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:21:32.956 [DEBUG] [Thread-10766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:21:32.956 [INFO] [Thread-10766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:21:32.958 [DEBUG] [Thread-10766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:21:32.958 [DEBUG] [Thread-10766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:21:32.958 [DEBUG] [Thread-10766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:21:32.958 [DEBUG] [Thread-10766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:21:32.958 [DEBUG] [Thread-10766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:21:32.958 [DEBUG] [Thread-10766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:21:32.958 [DEBUG] [Thread-10766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:21:32.958 [DEBUG] [Thread-10766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:21:32.958 [DEBUG] [Thread-10766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] client lang: <none>
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] server lang: <none>
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] kex follows: False
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] Compression: none
2025-11-26T03:21:32.959 [DEBUG] [Thread-10766] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:21:32.973 [DEBUG] [Thread-10766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:21:32.974 [DEBUG] [Thread-10766] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:21:32.974 [DEBUG] [Thread-10766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:21:32.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:21:32.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:21:32.974 [DEBUG] [Thread-10766] [transport.py] [_log()] userauth is OK
2025-11-26T03:21:32.974 [DEBUG] [Thread-10766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:21:32.974 [DEBUG] [Thread-10766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:21:32.974 [DEBUG] [Thread-10766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:21:32.974 [DEBUG] [Thread-10766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:21:32.990 [INFO] [Thread-10766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:21:32.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:21:33.632 [DEBUG] [Thread-10766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:21:33.632 [DEBUG] [Thread-10766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:21:33.632 [DEBUG] [Thread-10766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:21:33.672 [DEBUG] [Thread-10766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:21:33.673 [DEBUG] [Thread-10766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:21:33.675 [DEBUG] [Thread-10766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:21:33.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:21:33.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:21:33.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:21:33.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:21:33.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:21:33.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:21:33.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.055998 -999.00  +20.70   7.03     17   -5.10 1 1 1 1 1     0    0 25.74 -14.16 ZNESW 6.7 7.0 116.9 9.8 20.0 -26.5 19.9 -26.0 19.6 -24.6 19.9 -25.6
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.055998
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:21:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:20:58', tmtdew=29.57, humidity=12.83, cloud=0.0, wind=9.65, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:21:30', seeing=1.07, atlas_timestamp='2025-11-26T01:20:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:18:00')
2025-11-26T03:21:33.695 [DEBUG] [Thread-10766] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:21:33.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:21:33.782 [DEBUG] [Thread-10769] [transport.py] [_log()] starting thread (client mode): 0x70d7cc40
2025-11-26T03:21:33.782 [DEBUG] [Thread-10769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:21:33.799 [DEBUG] [Thread-10769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:21:33.799 [INFO] [Thread-10769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] client lang: <none>
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] server lang: <none>
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] kex follows: False
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] Compression: none
2025-11-26T03:21:33.807 [DEBUG] [Thread-10769] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:21:33.864 [DEBUG] [Thread-10769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:21:33.864 [DEBUG] [Thread-10769] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:21:33.864 [DEBUG] [Thread-10769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:21:33.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:21:33.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:21:33.921 [DEBUG] [Thread-10769] [transport.py] [_log()] userauth is OK
2025-11-26T03:21:33.921 [DEBUG] [Thread-10769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:21:33.921 [DEBUG] [Thread-10769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:21:33.921 [DEBUG] [Thread-10769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:21:33.921 [DEBUG] [Thread-10769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:21:33.934 [INFO] [Thread-10769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:21:33.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:21:33.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:21:34.736 [DEBUG] [Thread-10769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:21:34.736 [DEBUG] [Thread-10769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:21:34.783 [DEBUG] [Thread-10769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:21:34.783 [DEBUG] [Thread-10769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:21:34.791 [DEBUG] [Thread-10769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:21:34.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:21:34.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:21:34.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:21:34.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:21:34.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:21:34.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:21:34.823 [DEBUG] [Thread-10769] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:21:37.043 [DEBUG] [Thread-10771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:39.939 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:50.337 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:52.096 [DEBUG] [Thread-10772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:54.277 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:21:54.278 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:00.773 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:04.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:22:04.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:22:04.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:22:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 22, 2), 29.6, 12.79, 0.0, 9.85, 19.58, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:22:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:22:02
2025-11-26T03:22:05.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:22:05.780 [DEBUG] [Thread-10773] [transport.py] [_log()] starting thread (client mode): 0x70de4d60
2025-11-26T03:22:05.780 [DEBUG] [Thread-10773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:22:05.800 [DEBUG] [Thread-10773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:22:05.801 [INFO] [Thread-10773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:22:05.803 [DEBUG] [Thread-10773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] client lang: <none>
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] server lang: <none>
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] kex follows: False
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] Compression: none
2025-11-26T03:22:05.804 [DEBUG] [Thread-10773] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:22:05.826 [DEBUG] [Thread-10773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:22:05.827 [DEBUG] [Thread-10773] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:22:05.827 [DEBUG] [Thread-10773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:22:05.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:22:05.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:22:05.829 [DEBUG] [Thread-10773] [transport.py] [_log()] userauth is OK
2025-11-26T03:22:05.829 [DEBUG] [Thread-10773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:22:05.830 [DEBUG] [Thread-10773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:22:05.830 [DEBUG] [Thread-10773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:22:05.830 [DEBUG] [Thread-10773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:22:05.853 [INFO] [Thread-10773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:22:05.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:22:06.488 [DEBUG] [Thread-10773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:22:06.489 [DEBUG] [Thread-10773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:22:06.489 [DEBUG] [Thread-10773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:22:06.530 [DEBUG] [Thread-10773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:22:06.530 [DEBUG] [Thread-10773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:22:06.533 [DEBUG] [Thread-10773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:22:06.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:22:06.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:22:06.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:22:06.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:22:06.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:22:06.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:22:06.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:22:06.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:22:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:22:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.056693 -999.00  +20.70   7.20     17   -5.10 1 1 1 1 1     0    0 25.79 -14.61 ZNESW 6.8 7.2 122.6 10.7 20.1 -26.6 19.9 -25.9 19.6 -24.7 -999.0 -999.0
2025-11-26T03:22:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:22:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:22:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.056693
2025-11-26T03:22:06.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:22:06.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:22:06.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:22:06.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:22:06.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:22:06.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:22:02', tmtdew=29.6, humidity=12.79, cloud=0.0, wind=9.85, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:22:02', seeing=1.1, atlas_timestamp='2025-11-26T01:21:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:18:00')
2025-11-26T03:22:06.561 [DEBUG] [Thread-10773] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:22:06.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:22:06.656 [DEBUG] [Thread-10776] [transport.py] [_log()] starting thread (client mode): 0x70de62c0
2025-11-26T03:22:06.656 [DEBUG] [Thread-10776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:22:06.671 [DEBUG] [Thread-10776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:22:06.671 [INFO] [Thread-10776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:22:06.678 [DEBUG] [Thread-10776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] client lang: <none>
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] server lang: <none>
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] kex follows: False
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] Compression: none
2025-11-26T03:22:06.679 [DEBUG] [Thread-10776] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:22:06.739 [DEBUG] [Thread-10776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:22:06.740 [DEBUG] [Thread-10776] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:22:06.741 [DEBUG] [Thread-10776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:22:06.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:22:06.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:22:06.795 [DEBUG] [Thread-10776] [transport.py] [_log()] userauth is OK
2025-11-26T03:22:06.795 [DEBUG] [Thread-10776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:22:06.796 [DEBUG] [Thread-10776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:22:06.796 [DEBUG] [Thread-10776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:22:06.796 [DEBUG] [Thread-10776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:22:06.814 [INFO] [Thread-10776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:22:06.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:22:06.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:22:07.128 [DEBUG] [Thread-10778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:07.619 [DEBUG] [Thread-10776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:22:07.620 [DEBUG] [Thread-10776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:22:07.667 [DEBUG] [Thread-10776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:22:07.668 [DEBUG] [Thread-10776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:22:07.676 [DEBUG] [Thread-10776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:22:07.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:22:07.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:22:07.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:22:07.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:22:07.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:22:07.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:22:07.711 [DEBUG] [Thread-10776] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:22:11.165 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:21.567 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:22.177 [DEBUG] [Thread-10779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:24.853 [DEBUG] [Thread-10780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:31.961 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:37.210 [DEBUG] [Thread-10781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:37.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:22:37.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:22:37.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:22:38.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 22, 34), 29.55, 12.86, 0.0, 10.15, 19.7, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:22:38.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:22:34
2025-11-26T03:22:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:22:38.662 [DEBUG] [Thread-10782] [transport.py] [_log()] starting thread (client mode): 0x70d7d9f0
2025-11-26T03:22:38.662 [DEBUG] [Thread-10782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:22:38.682 [DEBUG] [Thread-10782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:22:38.682 [INFO] [Thread-10782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] client lang: <none>
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] server lang: <none>
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] kex follows: False
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] Compression: none
2025-11-26T03:22:38.685 [DEBUG] [Thread-10782] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:22:38.702 [DEBUG] [Thread-10782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:22:38.702 [DEBUG] [Thread-10782] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:22:38.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:22:38.703 [DEBUG] [Thread-10782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:22:38.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:22:38.705 [DEBUG] [Thread-10782] [transport.py] [_log()] userauth is OK
2025-11-26T03:22:38.706 [DEBUG] [Thread-10782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:22:38.706 [DEBUG] [Thread-10782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:22:38.706 [DEBUG] [Thread-10782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:22:38.706 [DEBUG] [Thread-10782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:22:38.732 [INFO] [Thread-10782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:22:38.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:22:39.347 [DEBUG] [Thread-10782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:22:39.347 [DEBUG] [Thread-10782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:22:39.348 [DEBUG] [Thread-10782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:22:39.389 [DEBUG] [Thread-10782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:22:39.389 [DEBUG] [Thread-10782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:22:39.392 [DEBUG] [Thread-10782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:22:39.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:22:39.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:22:39.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:22:39.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:22:39.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:22:39.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:22:39.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:22:39.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:22:39.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:22:39.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.057040 -999.00  +20.70   5.85     16   -5.20 1 1 1 1 1     0    0 25.52 -15.03 ZNESW 8.7 5.8 99.6 9.3 20.0 -26.6 19.9 -26.0 19.6 -24.7 19.9 -25.8
2025-11-26T03:22:39.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:22:39.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:22:39.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.057040
2025-11-26T03:22:39.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:22:39.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:22:39.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:22:39.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:22:39.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:22:39.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:22:34', tmtdew=29.55, humidity=12.86, cloud=0.0, wind=10.15, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:22:34', seeing=0.96, atlas_timestamp='2025-11-26T01:22:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03824999999999967, -0.06274999999999942, 0.00024999999999941735, -0.03750000000000142, 0.037499999999999645, -0.0337499999999995, -0.008000000000000895, -0.03524999999999956, -0.01750000000000007, -0.026999999999999247, -0.024250000000000327, -0.0045000000000001705, 0.0730000000000004, 0.07324999999999982, -0.038000000000000256, 0.006000000000000227, 0.004749999999999588, 0.005499999999999616, -0.04349999999999987, -0.013250000000001094, 0.07299999999999862, 0.06374999999999886, 0.003750000000000142, 0.020749999999999602, -0.0235000000000003, 0.04349999999999987, 0.016750000000000043, 0.050499999999999545, 0.15600000000000058, 0.07550000000000168, 0.03450000000000131, -0.050499999999999545, 0.012749999999998707], zp_timestamp='2025-11-26T01:18:00')
2025-11-26T03:22:39.417 [DEBUG] [Thread-10782] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:22:39.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:22:39.510 [DEBUG] [Thread-10785] [transport.py] [_log()] starting thread (client mode): 0x70d7dab0
2025-11-26T03:22:39.510 [DEBUG] [Thread-10785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:22:39.524 [DEBUG] [Thread-10785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:22:39.524 [INFO] [Thread-10785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:22:39.532 [DEBUG] [Thread-10785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:22:39.532 [DEBUG] [Thread-10785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:22:39.532 [DEBUG] [Thread-10785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:22:39.532 [DEBUG] [Thread-10785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:22:39.532 [DEBUG] [Thread-10785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:22:39.532 [DEBUG] [Thread-10785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:22:39.532 [DEBUG] [Thread-10785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:22:39.532 [DEBUG] [Thread-10785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] client lang: <none>
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] server lang: <none>
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] kex follows: False
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] Compression: none
2025-11-26T03:22:39.533 [DEBUG] [Thread-10785] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:22:39.593 [DEBUG] [Thread-10785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:22:39.593 [DEBUG] [Thread-10785] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:22:39.594 [DEBUG] [Thread-10785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:22:39.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:22:39.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:22:39.649 [DEBUG] [Thread-10785] [transport.py] [_log()] userauth is OK
2025-11-26T03:22:39.650 [DEBUG] [Thread-10785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:22:39.650 [DEBUG] [Thread-10785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:22:39.650 [DEBUG] [Thread-10785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:22:39.650 [DEBUG] [Thread-10785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:22:39.669 [INFO] [Thread-10785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:22:39.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:22:39.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:22:40.525 [DEBUG] [Thread-10785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:22:40.525 [DEBUG] [Thread-10785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:22:40.572 [DEBUG] [Thread-10785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:22:40.572 [DEBUG] [Thread-10785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:22:40.582 [DEBUG] [Thread-10785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:22:40.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:22:40.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:22:40.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:22:40.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:22:40.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:22:40.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:22:40.618 [DEBUG] [Thread-10785] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:22:42.389 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:52.243 [DEBUG] [Thread-10787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:52.813 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:54.480 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:22:54.481 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:03.208 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:07.293 [DEBUG] [Thread-10788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:23:10.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:23:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:23:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 23, 6), 29.57, 12.83, 0.0, 9.81, 19.65, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:23:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:23:06
2025-11-26T03:23:11.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:23:11.561 [DEBUG] [Thread-10789] [transport.py] [_log()] starting thread (client mode): 0x70d7fdc0
2025-11-26T03:23:11.561 [DEBUG] [Thread-10789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:23:11.581 [DEBUG] [Thread-10789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:23:11.581 [INFO] [Thread-10789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:23:11.585 [DEBUG] [Thread-10789] [transport.py] [_log()] client lang: <none>
2025-11-26T03:23:11.586 [DEBUG] [Thread-10789] [transport.py] [_log()] server lang: <none>
2025-11-26T03:23:11.586 [DEBUG] [Thread-10789] [transport.py] [_log()] kex follows: False
2025-11-26T03:23:11.586 [DEBUG] [Thread-10789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:23:11.586 [DEBUG] [Thread-10789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:23:11.586 [DEBUG] [Thread-10789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:23:11.586 [DEBUG] [Thread-10789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:23:11.586 [DEBUG] [Thread-10789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:23:11.586 [DEBUG] [Thread-10789] [transport.py] [_log()] Compression: none
2025-11-26T03:23:11.586 [DEBUG] [Thread-10789] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:23:11.605 [DEBUG] [Thread-10789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:23:11.605 [DEBUG] [Thread-10789] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:23:11.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:23:11.607 [DEBUG] [Thread-10789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:23:11.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:23:11.609 [DEBUG] [Thread-10789] [transport.py] [_log()] userauth is OK
2025-11-26T03:23:11.609 [DEBUG] [Thread-10789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:23:11.610 [DEBUG] [Thread-10789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:23:11.610 [DEBUG] [Thread-10789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:23:11.610 [DEBUG] [Thread-10789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:23:11.628 [INFO] [Thread-10789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:23:11.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:23:12.223 [DEBUG] [Thread-10789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:23:12.223 [DEBUG] [Thread-10789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:23:12.223 [DEBUG] [Thread-10789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:23:12.263 [DEBUG] [Thread-10789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:23:12.263 [DEBUG] [Thread-10789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:23:12.265 [DEBUG] [Thread-10789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:23:12.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:23:12.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:23:12.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:23:12.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:23:12.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:23:12.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:23:12.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:23:12.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.057387 -999.00  +20.70   6.44     16   -5.20 1 1 1 1 1     0    0 25.34 -14.21 ZNESW 5.7 6.4 101.4 8.6 20.0 -26.6 19.9 -25.9 19.6 -24.5 19.9 -25.6
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.057387
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:23:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:23:06', tmtdew=29.57, humidity=12.83, cloud=0.0, wind=9.81, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:23:06', seeing=0.96, atlas_timestamp='2025-11-26T01:22:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.034250000000000114, -0.06974999999999909, 0.008250000000000313, -0.010999999999999233, 0.033500000000000085, 0.01675000000000182, 0.018499999999999517, -0.004749999999999588, -0.01600000000000179, -0.03599999999999959, -0.034750000000000725, 0.01699999999999946, 0.0625, 0.07324999999999982, -0.05799999999999983, 0.010999999999999233, -0.004750000000001364, 0.01750000000000007, -0.041000000000002146, 0.023249999999999105, 0.08099999999999952, 0.05874999999999808, 0.01425000000000054, 0.02525000000000155, 0.01699999999999946, 0.04100000000000037, 0.021750000000000824, 0.0965000000000007, 0.09100000000000108, 0.06950000000000145, 0.03500000000000014, -0.03049999999999997, 0.020749999999999602], zp_timestamp='2025-11-26T01:21:00')
2025-11-26T03:23:12.284 [DEBUG] [Thread-10789] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:23:12.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:23:12.371 [DEBUG] [Thread-10792] [transport.py] [_log()] starting thread (client mode): 0x70d7d690
2025-11-26T03:23:12.371 [DEBUG] [Thread-10792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:23:12.385 [DEBUG] [Thread-10792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:23:12.386 [INFO] [Thread-10792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:23:12.393 [DEBUG] [Thread-10792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:23:12.393 [DEBUG] [Thread-10792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:23:12.393 [DEBUG] [Thread-10792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] client lang: <none>
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] server lang: <none>
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] kex follows: False
2025-11-26T03:23:12.394 [DEBUG] [Thread-10792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:23:12.395 [DEBUG] [Thread-10792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:23:12.395 [DEBUG] [Thread-10792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:23:12.395 [DEBUG] [Thread-10792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:23:12.395 [DEBUG] [Thread-10792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:23:12.395 [DEBUG] [Thread-10792] [transport.py] [_log()] Compression: none
2025-11-26T03:23:12.395 [DEBUG] [Thread-10792] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:23:12.454 [DEBUG] [Thread-10792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:23:12.455 [DEBUG] [Thread-10792] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:23:12.455 [DEBUG] [Thread-10792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:23:12.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:23:12.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:23:12.516 [DEBUG] [Thread-10792] [transport.py] [_log()] userauth is OK
2025-11-26T03:23:12.516 [DEBUG] [Thread-10792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:23:12.516 [DEBUG] [Thread-10792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:23:12.516 [DEBUG] [Thread-10792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:23:12.516 [DEBUG] [Thread-10792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:23:12.535 [INFO] [Thread-10792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:23:12.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:23:12.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:23:13.360 [DEBUG] [Thread-10792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:23:13.360 [DEBUG] [Thread-10792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:23:13.407 [DEBUG] [Thread-10792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:23:13.407 [DEBUG] [Thread-10792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:23:13.415 [DEBUG] [Thread-10792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:23:13.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:23:13.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:23: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') -> 00000000
2025-11-26T03:23:13.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:23:13.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:23:13.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:23:13.450 [DEBUG] [Thread-10792] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:23:13.719 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:22.326 [DEBUG] [Thread-10794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:24.113 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:24.925 [DEBUG] [Thread-10795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:34.511 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:37.379 [DEBUG] [Thread-10796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:43.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:23:43.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:23:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:23:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 23, 38), 29.54, 12.86, 0.0, 9.72, 19.68, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:23:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:23:38
2025-11-26T03:23:44.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:23:44.404 [DEBUG] [Thread-10797] [transport.py] [_log()] starting thread (client mode): 0x70dfa830
2025-11-26T03:23:44.404 [DEBUG] [Thread-10797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:23:44.424 [DEBUG] [Thread-10797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:23:44.424 [INFO] [Thread-10797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] client lang: <none>
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] server lang: <none>
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] kex follows: False
2025-11-26T03:23:44.427 [DEBUG] [Thread-10797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:23:44.428 [DEBUG] [Thread-10797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:23:44.428 [DEBUG] [Thread-10797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:23:44.428 [DEBUG] [Thread-10797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:23:44.428 [DEBUG] [Thread-10797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:23:44.428 [DEBUG] [Thread-10797] [transport.py] [_log()] Compression: none
2025-11-26T03:23:44.428 [DEBUG] [Thread-10797] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:23:44.443 [DEBUG] [Thread-10797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:23:44.443 [DEBUG] [Thread-10797] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:23:44.443 [DEBUG] [Thread-10797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:23:44.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:23:44.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:23:44.485 [DEBUG] [Thread-10797] [transport.py] [_log()] userauth is OK
2025-11-26T03:23:44.486 [DEBUG] [Thread-10797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:23:44.486 [DEBUG] [Thread-10797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:23:44.486 [DEBUG] [Thread-10797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:23:44.486 [DEBUG] [Thread-10797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:23:44.520 [INFO] [Thread-10797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:23:44.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:23:44.904 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:45.355 [DEBUG] [Thread-10797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:23:45.355 [DEBUG] [Thread-10797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:23:45.356 [DEBUG] [Thread-10797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:23:45.395 [DEBUG] [Thread-10797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:23:45.395 [DEBUG] [Thread-10797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:23:45.398 [DEBUG] [Thread-10797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:23:45.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:23:45.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:23:45.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:23:45.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:23:45.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:23:45.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:23:45.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:23:45.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:23:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:23:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.057734 -999.00  +20.70   4.64     16   -5.20 1 1 1 1 1     0    0 25.37 -12.98 ZNESW 5.4 4.6 77.8 9.3 20.0 -26.1 19.9 -25.9 19.6 -24.4 19.9 -25.6
2025-11-26T03:23:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:23:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:23:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.057734
2025-11-26T03:23:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:23:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:23:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:23:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:23:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:23:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:23:38', tmtdew=29.54, humidity=12.86, cloud=0.0, wind=9.72, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:23:38', seeing=1.3, atlas_timestamp='2025-11-26T01:23:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.034250000000000114, -0.06974999999999909, 0.008250000000000313, -0.010999999999999233, 0.033500000000000085, 0.01675000000000182, 0.018499999999999517, -0.004749999999999588, -0.01600000000000179, -0.03599999999999959, -0.034750000000000725, 0.01699999999999946, 0.0625, 0.07324999999999982, -0.05799999999999983, 0.010999999999999233, -0.004750000000001364, 0.01750000000000007, -0.041000000000002146, 0.023249999999999105, 0.08099999999999952, 0.05874999999999808, 0.01425000000000054, 0.02525000000000155, 0.01699999999999946, 0.04100000000000037, 0.021750000000000824, 0.0965000000000007, 0.09100000000000108, 0.06950000000000145, 0.03500000000000014, -0.03049999999999997, 0.020749999999999602], zp_timestamp='2025-11-26T01:21:00')
2025-11-26T03:23:45.418 [DEBUG] [Thread-10797] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:23:45.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:23:45.506 [DEBUG] [Thread-10800] [transport.py] [_log()] starting thread (client mode): 0x70de4fa0
2025-11-26T03:23:45.506 [DEBUG] [Thread-10800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:23:45.521 [DEBUG] [Thread-10800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:23:45.521 [INFO] [Thread-10800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:23:45.529 [DEBUG] [Thread-10800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:23:45.529 [DEBUG] [Thread-10800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:23:45.529 [DEBUG] [Thread-10800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:23:45.529 [DEBUG] [Thread-10800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:23:45.529 [DEBUG] [Thread-10800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:23:45.529 [DEBUG] [Thread-10800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:23:45.529 [DEBUG] [Thread-10800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:23:45.529 [DEBUG] [Thread-10800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] client lang: <none>
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] server lang: <none>
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] kex follows: False
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] Compression: none
2025-11-26T03:23:45.530 [DEBUG] [Thread-10800] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:23:45.593 [DEBUG] [Thread-10800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:23:45.593 [DEBUG] [Thread-10800] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:23:45.593 [DEBUG] [Thread-10800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:23:45.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:23:45.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:23:45.654 [DEBUG] [Thread-10800] [transport.py] [_log()] userauth is OK
2025-11-26T03:23:45.654 [DEBUG] [Thread-10800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:23:45.654 [DEBUG] [Thread-10800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:23:45.654 [DEBUG] [Thread-10800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:23:45.654 [DEBUG] [Thread-10800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:23:45.672 [INFO] [Thread-10800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:23:45.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:23:45.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:23:46.473 [DEBUG] [Thread-10800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:23:46.473 [DEBUG] [Thread-10800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:23:46.521 [DEBUG] [Thread-10800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:23:46.522 [DEBUG] [Thread-10800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:23:46.530 [DEBUG] [Thread-10800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:23:46.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:23: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')
2025-11-26T03:23: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
2025-11-26T03:23:46.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:23:46.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:23:46.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:23:46.566 [DEBUG] [Thread-10800] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:23:52.413 [DEBUG] [Thread-10802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:54.681 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:54.682 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:23:55.308 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:05.720 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:07.471 [DEBUG] [Thread-10803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:16.136 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:24:16.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:24:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:24:17.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 24, 10), 29.56, 12.83, 0.0, 9.46, 19.6, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:24:17.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:24:10
2025-11-26T03:24:17.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:24:17.511 [DEBUG] [Thread-10804] [transport.py] [_log()] starting thread (client mode): 0x70d74160
2025-11-26T03:24:17.511 [DEBUG] [Thread-10804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:24:17.530 [DEBUG] [Thread-10804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:24:17.530 [INFO] [Thread-10804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] client lang: <none>
2025-11-26T03:24:17.533 [DEBUG] [Thread-10804] [transport.py] [_log()] server lang: <none>
2025-11-26T03:24:17.534 [DEBUG] [Thread-10804] [transport.py] [_log()] kex follows: False
2025-11-26T03:24:17.534 [DEBUG] [Thread-10804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:24:17.534 [DEBUG] [Thread-10804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:24:17.534 [DEBUG] [Thread-10804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:24:17.534 [DEBUG] [Thread-10804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:24:17.534 [DEBUG] [Thread-10804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:24:17.534 [DEBUG] [Thread-10804] [transport.py] [_log()] Compression: none
2025-11-26T03:24:17.534 [DEBUG] [Thread-10804] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:24:17.551 [DEBUG] [Thread-10804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:24:17.552 [DEBUG] [Thread-10804] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:24:17.552 [DEBUG] [Thread-10804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:24:17.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:24:17.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:24:17.554 [DEBUG] [Thread-10804] [transport.py] [_log()] userauth is OK
2025-11-26T03:24:17.554 [DEBUG] [Thread-10804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:24:17.554 [DEBUG] [Thread-10804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:24:17.554 [DEBUG] [Thread-10804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:24:17.554 [DEBUG] [Thread-10804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:24:17.572 [INFO] [Thread-10804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:24:17.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:24:18.226 [DEBUG] [Thread-10804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:24:18.226 [DEBUG] [Thread-10804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:24:18.226 [DEBUG] [Thread-10804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:24:18.267 [DEBUG] [Thread-10804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:24:18.267 [DEBUG] [Thread-10804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:24:18.271 [DEBUG] [Thread-10804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:24:18.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:24:18.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:24:18.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:24:18.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:24:18.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:24:18.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:24:18.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:24:18.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:24:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:24:18.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.058082 -999.00  +20.70   9.67     17   -5.00 1 1 1 1 1     0    0 25.26 -13.82 ZNESW 7.6 9.7 120.8 11.3 20.0 -26.5 19.9 -25.8 19.6 -24.9 19.9 -25.6
2025-11-26T03:24:18.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:24:18.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:24:18.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.058082
2025-11-26T03:24:18.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:24:18.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:24:18.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:24:18.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:24:18.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:24:18.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:24:10', tmtdew=29.56, humidity=12.83, cloud=0.0, wind=9.46, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:24:10', seeing=1.13, atlas_timestamp='2025-11-26T01:23:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.034250000000000114, -0.06974999999999909, 0.008250000000000313, -0.010999999999999233, 0.033500000000000085, 0.01675000000000182, 0.018499999999999517, -0.004749999999999588, -0.01600000000000179, -0.03599999999999959, -0.034750000000000725, 0.01699999999999946, 0.0625, 0.07324999999999982, -0.05799999999999983, 0.010999999999999233, -0.004750000000001364, 0.01750000000000007, -0.041000000000002146, 0.023249999999999105, 0.08099999999999952, 0.05874999999999808, 0.01425000000000054, 0.02525000000000155, 0.01699999999999946, 0.04100000000000037, 0.021750000000000824, 0.0965000000000007, 0.09100000000000108, 0.06950000000000145, 0.03500000000000014, -0.03049999999999997, 0.020749999999999602], zp_timestamp='2025-11-26T01:21:00')
2025-11-26T03:24:18.298 [DEBUG] [Thread-10804] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:24:18.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:24:18.393 [DEBUG] [Thread-10807] [transport.py] [_log()] starting thread (client mode): 0x70d75e10
2025-11-26T03:24:18.393 [DEBUG] [Thread-10807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:24:18.411 [DEBUG] [Thread-10807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:24:18.412 [INFO] [Thread-10807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:24:18.420 [DEBUG] [Thread-10807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:24:18.420 [DEBUG] [Thread-10807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] client lang: <none>
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] server lang: <none>
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] kex follows: False
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:24:18.421 [DEBUG] [Thread-10807] [transport.py] [_log()] Compression: none
2025-11-26T03:24:18.422 [DEBUG] [Thread-10807] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:24:18.478 [DEBUG] [Thread-10807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:24:18.479 [DEBUG] [Thread-10807] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:24:18.480 [DEBUG] [Thread-10807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:24:18.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:24:18.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:24:18.535 [DEBUG] [Thread-10807] [transport.py] [_log()] userauth is OK
2025-11-26T03:24:18.535 [DEBUG] [Thread-10807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:24:18.535 [DEBUG] [Thread-10807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:24:18.536 [DEBUG] [Thread-10807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:24:18.536 [DEBUG] [Thread-10807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:24:18.555 [INFO] [Thread-10807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:24:18.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:24:18.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:24:19.370 [DEBUG] [Thread-10807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:24:19.371 [DEBUG] [Thread-10807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:24:19.419 [DEBUG] [Thread-10807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:24:19.419 [DEBUG] [Thread-10807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:24:19.429 [DEBUG] [Thread-10807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:24:19.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:24:19.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:24:19.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:24:19.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:24:19.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:24:19.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:24:19.466 [DEBUG] [Thread-10807] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:24:22.510 [DEBUG] [Thread-10809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:24.983 [DEBUG] [Thread-10810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:26.557 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:36.974 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:37.558 [DEBUG] [Thread-10811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:47.412 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:49.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:24:49.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:24:49.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:24:50.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 24, 42), 29.51, 12.89, 0.0, 9.44, 19.7, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:24:50.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:24:42
2025-11-26T03:24:50.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:24:50.417 [DEBUG] [Thread-10812] [transport.py] [_log()] starting thread (client mode): 0x70d75a80
2025-11-26T03:24:50.417 [DEBUG] [Thread-10812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:24:50.437 [DEBUG] [Thread-10812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:24:50.437 [INFO] [Thread-10812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:24:50.440 [DEBUG] [Thread-10812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:24:50.446 [DEBUG] [Thread-10812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:24:50.446 [DEBUG] [Thread-10812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:24:50.446 [DEBUG] [Thread-10812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:24:50.446 [DEBUG] [Thread-10812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:24:50.446 [DEBUG] [Thread-10812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:24:50.446 [DEBUG] [Thread-10812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:24:50.446 [DEBUG] [Thread-10812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:24:50.446 [DEBUG] [Thread-10812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] client lang: <none>
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] server lang: <none>
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] kex follows: False
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] Compression: none
2025-11-26T03:24:50.447 [DEBUG] [Thread-10812] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:24:50.465 [DEBUG] [Thread-10812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:24:50.466 [DEBUG] [Thread-10812] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:24:50.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:24:50.467 [DEBUG] [Thread-10812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:24:50.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:24:50.469 [DEBUG] [Thread-10812] [transport.py] [_log()] userauth is OK
2025-11-26T03:24:50.469 [DEBUG] [Thread-10812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:24:50.469 [DEBUG] [Thread-10812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:24:50.469 [DEBUG] [Thread-10812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:24:50.469 [DEBUG] [Thread-10812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:24:50.486 [INFO] [Thread-10812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:24:50.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:24:51.141 [DEBUG] [Thread-10812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:24:51.142 [DEBUG] [Thread-10812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:24:51.142 [DEBUG] [Thread-10812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:24:51.183 [DEBUG] [Thread-10812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:24:51.183 [DEBUG] [Thread-10812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:24:51.186 [DEBUG] [Thread-10812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:24:51.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:24:51.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:24:51.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:24:51.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:24:51.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:24:51.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:24:51.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:24:51.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:24:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:24:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.058429 -999.00  +20.70   6.52     17   -5.10 1 1 1 1 1     0    0 25.21 -11.53 ZNESW 6.8 6.5 78.5 10.9 20.0 -25.7 20.0 -25.9 19.6 -24.7 19.9 -25.7
2025-11-26T03:24:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:24:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:24:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.058429
2025-11-26T03:24:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:24:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:24:51.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:24:51.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:24:51.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:24:51.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:24:42', tmtdew=29.51, humidity=12.89, cloud=0.0, wind=9.44, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:24:42', seeing=1.06, atlas_timestamp='2025-11-26T01:24:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.034250000000000114, -0.06974999999999909, 0.008250000000000313, -0.010999999999999233, 0.033500000000000085, 0.01675000000000182, 0.018499999999999517, -0.004749999999999588, -0.01600000000000179, -0.03599999999999959, -0.034750000000000725, 0.01699999999999946, 0.0625, 0.07324999999999982, -0.05799999999999983, 0.010999999999999233, -0.004750000000001364, 0.01750000000000007, -0.041000000000002146, 0.023249999999999105, 0.08099999999999952, 0.05874999999999808, 0.01425000000000054, 0.02525000000000155, 0.01699999999999946, 0.04100000000000037, 0.021750000000000824, 0.0965000000000007, 0.09100000000000108, 0.06950000000000145, 0.03500000000000014, -0.03049999999999997, 0.020749999999999602], zp_timestamp='2025-11-26T01:21:00')
2025-11-26T03:24:51.215 [DEBUG] [Thread-10812] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:24:51.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:24:51.311 [DEBUG] [Thread-10815] [transport.py] [_log()] starting thread (client mode): 0x70d75a20
2025-11-26T03:24:51.311 [DEBUG] [Thread-10815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:24:51.325 [DEBUG] [Thread-10815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:24:51.326 [INFO] [Thread-10815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:24:51.333 [DEBUG] [Thread-10815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:24:51.333 [DEBUG] [Thread-10815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:24:51.333 [DEBUG] [Thread-10815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:24:51.333 [DEBUG] [Thread-10815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:24:51.333 [DEBUG] [Thread-10815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:24:51.333 [DEBUG] [Thread-10815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:24:51.333 [DEBUG] [Thread-10815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:24:51.333 [DEBUG] [Thread-10815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:24:51.333 [DEBUG] [Thread-10815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] client lang: <none>
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] server lang: <none>
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] kex follows: False
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] Compression: none
2025-11-26T03:24:51.334 [DEBUG] [Thread-10815] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:24:51.391 [DEBUG] [Thread-10815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:24:51.392 [DEBUG] [Thread-10815] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:24:51.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:24:51.393 [DEBUG] [Thread-10815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:24:51.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:24:51.447 [DEBUG] [Thread-10815] [transport.py] [_log()] userauth is OK
2025-11-26T03:24:51.448 [DEBUG] [Thread-10815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:24:51.448 [DEBUG] [Thread-10815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:24:51.448 [DEBUG] [Thread-10815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:24:51.448 [DEBUG] [Thread-10815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:24:51.467 [INFO] [Thread-10815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:24:51.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:24:51.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:24:52.287 [DEBUG] [Thread-10815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:24:52.287 [DEBUG] [Thread-10815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:24:52.335 [DEBUG] [Thread-10815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:24:52.335 [DEBUG] [Thread-10815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:24:52.345 [DEBUG] [Thread-10815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:24:52.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:24:52.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:24:52.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:24:52.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:24:52.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:24:52.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:24:52.382 [DEBUG] [Thread-10815] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:24:52.589 [DEBUG] [Thread-10817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:54.894 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:54.896 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:24:57.848 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:07.642 [DEBUG] [Thread-10818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:08.273 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:18.732 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:25:22.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:25:22.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:25:22.673 [DEBUG] [Thread-10819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:23.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 25, 14), 29.52, 12.88, 0.0, 9.41, 19.67, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:25:23.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:25:14
2025-11-26T03:25:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:25:23.286 [DEBUG] [Thread-10820] [transport.py] [_log()] starting thread (client mode): 0x70d76140
2025-11-26T03:25:23.286 [DEBUG] [Thread-10820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:25:23.306 [DEBUG] [Thread-10820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:25:23.306 [INFO] [Thread-10820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:25:23.309 [DEBUG] [Thread-10820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] client lang: <none>
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] server lang: <none>
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] kex follows: False
2025-11-26T03:25:23.310 [DEBUG] [Thread-10820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:25:23.311 [DEBUG] [Thread-10820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:25:23.311 [DEBUG] [Thread-10820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:25:23.311 [DEBUG] [Thread-10820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:25:23.311 [DEBUG] [Thread-10820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:25:23.311 [DEBUG] [Thread-10820] [transport.py] [_log()] Compression: none
2025-11-26T03:25:23.311 [DEBUG] [Thread-10820] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:25:23.330 [DEBUG] [Thread-10820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:25:23.330 [DEBUG] [Thread-10820] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:25:23.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:25:23.332 [DEBUG] [Thread-10820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:25:23.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:25:23.334 [DEBUG] [Thread-10820] [transport.py] [_log()] userauth is OK
2025-11-26T03:25:23.334 [DEBUG] [Thread-10820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:25:23.334 [DEBUG] [Thread-10820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:25:23.334 [DEBUG] [Thread-10820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:25:23.334 [DEBUG] [Thread-10820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:25:23.368 [INFO] [Thread-10820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:25:23.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:25:23.991 [DEBUG] [Thread-10820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:25:23.992 [DEBUG] [Thread-10820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:25:23.993 [DEBUG] [Thread-10820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:25:24.032 [DEBUG] [Thread-10820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:25:24.032 [DEBUG] [Thread-10820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:25:24.035 [DEBUG] [Thread-10820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:25:24.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:25:24.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:25:24.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:25:24.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:25:24.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:25:24.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:25:24.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:25:24.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:25:24.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:25:24.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.059123 -999.00  +20.60   7.14     17   -5.10 1 1 1 1 1     0    0 25.83 -9.69 ZNESW 7.5 7.1 109.4 12.2 20.0 -26.5 19.9 -25.8 19.6 -24.6 19.9 -25.8
2025-11-26T03:25:24.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:25:24.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:25:24.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.059123
2025-11-26T03:25:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:25:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:25:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:25:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:25:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:25:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:25:14', tmtdew=29.52, humidity=12.88, cloud=0.0, wind=9.41, temperature=19.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:25:14', seeing=0.99, atlas_timestamp='2025-11-26T01:25:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.034250000000000114, -0.06974999999999909, 0.008250000000000313, -0.010999999999999233, 0.033500000000000085, 0.01675000000000182, 0.018499999999999517, -0.004749999999999588, -0.01600000000000179, -0.03599999999999959, -0.034750000000000725, 0.01699999999999946, 0.0625, 0.07324999999999982, -0.05799999999999983, 0.010999999999999233, -0.004750000000001364, 0.01750000000000007, -0.041000000000002146, 0.023249999999999105, 0.08099999999999952, 0.05874999999999808, 0.01425000000000054, 0.02525000000000155, 0.01699999999999946, 0.04100000000000037, 0.021750000000000824, 0.0965000000000007, 0.09100000000000108, 0.06950000000000145, 0.03500000000000014, -0.03049999999999997, 0.020749999999999602], zp_timestamp='2025-11-26T01:21:00')
2025-11-26T03:25:24.062 [DEBUG] [Thread-10820] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:25:24.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:25:24.158 [DEBUG] [Thread-10823] [transport.py] [_log()] starting thread (client mode): 0x70d759c0
2025-11-26T03:25:24.158 [DEBUG] [Thread-10823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:25:24.173 [DEBUG] [Thread-10823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:25:24.174 [INFO] [Thread-10823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:25:24.181 [DEBUG] [Thread-10823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:25:24.181 [DEBUG] [Thread-10823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:25:24.182 [DEBUG] [Thread-10823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:25:24.182 [DEBUG] [Thread-10823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:25:24.182 [DEBUG] [Thread-10823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:25:24.182 [DEBUG] [Thread-10823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:25:24.182 [DEBUG] [Thread-10823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:25:24.182 [DEBUG] [Thread-10823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:25:24.182 [DEBUG] [Thread-10823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:25:24.182 [DEBUG] [Thread-10823] [transport.py] [_log()] client lang: <none>
2025-11-26T03:25:24.182 [DEBUG] [Thread-10823] [transport.py] [_log()] server lang: <none>
2025-11-26T03:25:24.183 [DEBUG] [Thread-10823] [transport.py] [_log()] kex follows: False
2025-11-26T03:25:24.183 [DEBUG] [Thread-10823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:25:24.183 [DEBUG] [Thread-10823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:25:24.183 [DEBUG] [Thread-10823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:25:24.183 [DEBUG] [Thread-10823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:25:24.183 [DEBUG] [Thread-10823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:25:24.183 [DEBUG] [Thread-10823] [transport.py] [_log()] Compression: none
2025-11-26T03:25:24.183 [DEBUG] [Thread-10823] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:25:24.245 [DEBUG] [Thread-10823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:25:24.245 [DEBUG] [Thread-10823] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:25:24.246 [DEBUG] [Thread-10823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:25:24.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:25:24.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:25:24.301 [DEBUG] [Thread-10823] [transport.py] [_log()] userauth is OK
2025-11-26T03:25:24.301 [DEBUG] [Thread-10823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:25:24.301 [DEBUG] [Thread-10823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:25:24.301 [DEBUG] [Thread-10823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:25:24.301 [DEBUG] [Thread-10823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:25:24.319 [INFO] [Thread-10823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:25:24.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:25:24.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:25:25.054 [DEBUG] [Thread-10825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:25.176 [DEBUG] [Thread-10823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:25:25.176 [DEBUG] [Thread-10823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:25:25.225 [DEBUG] [Thread-10823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:25:25.225 [DEBUG] [Thread-10823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:25:25.235 [DEBUG] [Thread-10823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:25:25.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:25:25.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:25:25.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:25:25.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:25:25.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:25:25.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:25:25.275 [DEBUG] [Thread-10823] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:25:29.162 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:37.709 [DEBUG] [Thread-10826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:39.541 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:49.984 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:52.757 [DEBUG] [Thread-10827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:55.100 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:55.101 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:25:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:25:55.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:25:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:25:55.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 25, 46), 29.49, 12.93, 0.0, 9.79, 19.7, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:25:55.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:25:46
2025-11-26T03:25:56.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:25:56.211 [DEBUG] [Thread-10828] [transport.py] [_log()] starting thread (client mode): 0x70d76b30
2025-11-26T03:25:56.211 [DEBUG] [Thread-10828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:25:56.231 [DEBUG] [Thread-10828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:25:56.231 [INFO] [Thread-10828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] client lang: <none>
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] server lang: <none>
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] kex follows: False
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:25:56.234 [DEBUG] [Thread-10828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:25:56.235 [DEBUG] [Thread-10828] [transport.py] [_log()] Compression: none
2025-11-26T03:25:56.235 [DEBUG] [Thread-10828] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:25:56.249 [DEBUG] [Thread-10828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:25:56.249 [DEBUG] [Thread-10828] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:25:56.250 [DEBUG] [Thread-10828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:25:56.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:25:56.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:25:56.250 [DEBUG] [Thread-10828] [transport.py] [_log()] userauth is OK
2025-11-26T03:25:56.250 [DEBUG] [Thread-10828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:25:56.250 [DEBUG] [Thread-10828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:25:56.250 [DEBUG] [Thread-10828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:25:56.250 [DEBUG] [Thread-10828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:25:56.265 [INFO] [Thread-10828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:25:56.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:25:56.900 [DEBUG] [Thread-10828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:25:56.900 [DEBUG] [Thread-10828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:25:56.900 [DEBUG] [Thread-10828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:25:56.941 [DEBUG] [Thread-10828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:25:56.941 [DEBUG] [Thread-10828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:25:56.944 [DEBUG] [Thread-10828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:25:56.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:25:56.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:25:56.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:25:56.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:25:56.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:25:56.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:25:56.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.059470 -999.00  +20.60   7.90     17   -5.10 1 1 1 1 1     0    0 26.01 -8.74 ZNESW 8.0 7.9 104.4 11.6 20.0 -26.3 19.9 -25.8 19.6 -24.6 19.9 -25.5
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.059470
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:25:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:25:46', tmtdew=29.49, humidity=12.93, cloud=0.0, wind=9.79, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:25:47', seeing=0.99, atlas_timestamp='2025-11-26T01:25:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.034250000000000114, -0.06974999999999909, 0.008250000000000313, -0.010999999999999233, 0.033500000000000085, 0.01675000000000182, 0.018499999999999517, -0.004749999999999588, -0.01600000000000179, -0.03599999999999959, -0.034750000000000725, 0.01699999999999946, 0.0625, 0.07324999999999982, -0.05799999999999983, 0.010999999999999233, -0.004750000000001364, 0.01750000000000007, -0.041000000000002146, 0.023249999999999105, 0.08099999999999952, 0.05874999999999808, 0.01425000000000054, 0.02525000000000155, 0.01699999999999946, 0.04100000000000037, 0.021750000000000824, 0.0965000000000007, 0.09100000000000108, 0.06950000000000145, 0.03500000000000014, -0.03049999999999997, 0.020749999999999602], zp_timestamp='2025-11-26T01:21:00')
2025-11-26T03:25:56.964 [DEBUG] [Thread-10828] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:25:57.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:25:57.047 [DEBUG] [Thread-10831] [transport.py] [_log()] starting thread (client mode): 0x70d77fa0
2025-11-26T03:25:57.048 [DEBUG] [Thread-10831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:25:57.062 [DEBUG] [Thread-10831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:25:57.062 [INFO] [Thread-10831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:25:57.069 [DEBUG] [Thread-10831] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:25:57.069 [DEBUG] [Thread-10831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] client lang: <none>
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] server lang: <none>
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] kex follows: False
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] Compression: none
2025-11-26T03:25:57.070 [DEBUG] [Thread-10831] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:25:57.124 [DEBUG] [Thread-10831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:25:57.124 [DEBUG] [Thread-10831] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:25:57.124 [DEBUG] [Thread-10831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:25:57.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:25:57.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:25:57.182 [DEBUG] [Thread-10831] [transport.py] [_log()] userauth is OK
2025-11-26T03:25:57.182 [DEBUG] [Thread-10831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:25:57.182 [DEBUG] [Thread-10831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:25:57.182 [DEBUG] [Thread-10831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:25:57.182 [DEBUG] [Thread-10831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:25:57.197 [INFO] [Thread-10831] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:25:57.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:25:57.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:25:58.057 [DEBUG] [Thread-10831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:25:58.057 [DEBUG] [Thread-10831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:25:58.105 [DEBUG] [Thread-10831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:25:58.105 [DEBUG] [Thread-10831] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:25:58.114 [DEBUG] [Thread-10831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:25:58.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:25:58.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:25: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
2025-11-26T03:25:58.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:25:58.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:25:58.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:25:58.151 [DEBUG] [Thread-10831] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:26:00.388 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:07.792 [DEBUG] [Thread-10833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:10.808 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:21.221 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:22.853 [DEBUG] [Thread-10834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:25.124 [DEBUG] [Thread-10835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:28.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:26:28.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:26:28.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:26:28.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 26, 18), 29.48, 12.91, 0.0, 9.67, 19.58, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:26:28.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:26:18
2025-11-26T03:26:28.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:26:29.123 [DEBUG] [Thread-10836] [transport.py] [_log()] starting thread (client mode): 0x70d77a90
2025-11-26T03:26:29.124 [DEBUG] [Thread-10836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:26:29.138 [DEBUG] [Thread-10836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:26:29.138 [INFO] [Thread-10836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:26:29.141 [DEBUG] [Thread-10836] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:26:29.141 [DEBUG] [Thread-10836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:26:29.141 [DEBUG] [Thread-10836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] client lang: <none>
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] server lang: <none>
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] kex follows: False
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] Compression: none
2025-11-26T03:26:29.142 [DEBUG] [Thread-10836] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:26:29.158 [DEBUG] [Thread-10836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:26:29.158 [DEBUG] [Thread-10836] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:26:29.159 [DEBUG] [Thread-10836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:26:29.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:26:29.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:26:29.160 [DEBUG] [Thread-10836] [transport.py] [_log()] userauth is OK
2025-11-26T03:26:29.160 [DEBUG] [Thread-10836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:26:29.160 [DEBUG] [Thread-10836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:26:29.160 [DEBUG] [Thread-10836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:26:29.160 [DEBUG] [Thread-10836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:26:29.169 [INFO] [Thread-10836] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:26:29.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:26:29.804 [DEBUG] [Thread-10836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:26:29.804 [DEBUG] [Thread-10836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:26:29.804 [DEBUG] [Thread-10836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:26:29.845 [DEBUG] [Thread-10836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:26:29.845 [DEBUG] [Thread-10836] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:26:29.847 [DEBUG] [Thread-10836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:26:29.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:26:29.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:26:29.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:26:29.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:26:29.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:26:29.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:26:29.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.059818 -999.00  +20.60   8.24     17   -5.10 1 1 1 1 1     0    0 25.54 -8.85 ZNESW 5.6 8.2 84.0 12.3 20.0 -26.6 19.9 -25.9 19.6 -24.7 19.8 -25.6
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.059818
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:26:29.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:26:18', tmtdew=29.48, humidity=12.91, cloud=0.0, wind=9.67, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:26:19', seeing=1.12, atlas_timestamp='2025-11-26T01:26:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:24:00')
2025-11-26T03:26:29.867 [DEBUG] [Thread-10836] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:26:29.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:26:29.953 [DEBUG] [Thread-10839] [transport.py] [_log()] starting thread (client mode): 0x70d760e0
2025-11-26T03:26:29.953 [DEBUG] [Thread-10839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:26:29.966 [DEBUG] [Thread-10839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:26:29.967 [INFO] [Thread-10839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] client lang: <none>
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] server lang: <none>
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] kex follows: False
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] Compression: none
2025-11-26T03:26:29.974 [DEBUG] [Thread-10839] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:26:30.030 [DEBUG] [Thread-10839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:26:30.030 [DEBUG] [Thread-10839] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:26:30.030 [DEBUG] [Thread-10839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:26:30.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:26:30.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:26:30.087 [DEBUG] [Thread-10839] [transport.py] [_log()] userauth is OK
2025-11-26T03:26:30.087 [DEBUG] [Thread-10839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:26:30.087 [DEBUG] [Thread-10839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:26:30.087 [DEBUG] [Thread-10839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:26:30.087 [DEBUG] [Thread-10839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:26:30.102 [INFO] [Thread-10839] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:26:30.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:26:30.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:26:30.894 [DEBUG] [Thread-10839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:26:30.894 [DEBUG] [Thread-10839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:26:30.942 [DEBUG] [Thread-10839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:26:30.942 [DEBUG] [Thread-10839] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:26:30.950 [DEBUG] [Thread-10839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:26:30.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:26: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')
2025-11-26T03:26:30.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:26:30.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:26:30.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:26:30.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:26:30.981 [DEBUG] [Thread-10839] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:26:31.618 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:37.884 [DEBUG] [Thread-10841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:42.062 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:52.508 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:52.942 [DEBUG] [Thread-10842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:55.304 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:26:55.305 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:27:01.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:27: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
2025-11-26T03:27:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 26, 50), 29.41, 12.94, 0.0, 9.55, 19.65, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:27:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:26:50
2025-11-26T03:27:01.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:27:01.913 [DEBUG] [Thread-10843] [transport.py] [_log()] starting thread (client mode): 0x70d77d30
2025-11-26T03:27:01.913 [DEBUG] [Thread-10843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:27:01.934 [DEBUG] [Thread-10843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:27:01.934 [INFO] [Thread-10843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:27:01.935 [DEBUG] [Thread-10843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] client lang: <none>
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] server lang: <none>
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] kex follows: False
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] Compression: none
2025-11-26T03:27:01.936 [DEBUG] [Thread-10843] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:27:01.951 [DEBUG] [Thread-10843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:27:01.951 [DEBUG] [Thread-10843] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:27:01.952 [DEBUG] [Thread-10843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:27:01.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:27:01.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:27:01.954 [DEBUG] [Thread-10843] [transport.py] [_log()] userauth is OK
2025-11-26T03:27:01.954 [DEBUG] [Thread-10843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:27:01.954 [DEBUG] [Thread-10843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:27:01.954 [DEBUG] [Thread-10843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:27:01.954 [DEBUG] [Thread-10843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:27:01.972 [INFO] [Thread-10843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:27:01.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:27:02.635 [DEBUG] [Thread-10843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:27:02.635 [DEBUG] [Thread-10843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:27:02.635 [DEBUG] [Thread-10843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:27:02.676 [DEBUG] [Thread-10843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:27:02.676 [DEBUG] [Thread-10843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:27:02.679 [DEBUG] [Thread-10843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:27:02.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:27:02.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:27:02.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:27:02.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:27:02.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:27:02.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:27:02.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:27:02.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:27:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:27:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.060165 -999.00  +20.60   6.34     17   -5.10 1 1 1 1 1     0    0 25.71 -8.57 ZNESW 6.8 6.3 116.8 7.9 19.9 -26.4 19.9 -25.9 19.5 -24.6 19.9 -25.7
2025-11-26T03:27:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:27:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:27:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.060165
2025-11-26T03:27:02.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:27:02.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:27:02.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:27:02.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:27:02.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:27:02.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:26:50', tmtdew=29.41, humidity=12.94, cloud=0.0, wind=9.55, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:26:51', seeing=1.06, atlas_timestamp='2025-11-26T01:26:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:24:00')
2025-11-26T03:27:02.707 [DEBUG] [Thread-10843] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:27:02.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:27:02.804 [DEBUG] [Thread-10846] [transport.py] [_log()] starting thread (client mode): 0x70d75840
2025-11-26T03:27:02.805 [DEBUG] [Thread-10846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:27:02.819 [DEBUG] [Thread-10846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:27:02.819 [INFO] [Thread-10846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] client lang: <none>
2025-11-26T03:27:02.827 [DEBUG] [Thread-10846] [transport.py] [_log()] server lang: <none>
2025-11-26T03:27:02.828 [DEBUG] [Thread-10846] [transport.py] [_log()] kex follows: False
2025-11-26T03:27:02.828 [DEBUG] [Thread-10846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:27:02.828 [DEBUG] [Thread-10846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:27:02.828 [DEBUG] [Thread-10846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:27:02.828 [DEBUG] [Thread-10846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:27:02.828 [DEBUG] [Thread-10846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:27:02.828 [DEBUG] [Thread-10846] [transport.py] [_log()] Compression: none
2025-11-26T03:27:02.828 [DEBUG] [Thread-10846] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:27:02.884 [DEBUG] [Thread-10846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:27:02.885 [DEBUG] [Thread-10846] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:27:02.886 [DEBUG] [Thread-10846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:27:02.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:27:02.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:27:02.923 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:02.940 [DEBUG] [Thread-10846] [transport.py] [_log()] userauth is OK
2025-11-26T03:27:02.941 [DEBUG] [Thread-10846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:27:02.941 [DEBUG] [Thread-10846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:27:02.941 [DEBUG] [Thread-10846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:27:02.941 [DEBUG] [Thread-10846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:27:02.960 [INFO] [Thread-10846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:27:02.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:27:02.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:27:03.788 [DEBUG] [Thread-10846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:27:03.788 [DEBUG] [Thread-10846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:27:03.836 [DEBUG] [Thread-10846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:27:03.836 [DEBUG] [Thread-10846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:27:03.845 [DEBUG] [Thread-10846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:27:03.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:27:03.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:27:03.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:27:03.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:27:03.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:27:03.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:27:03.883 [DEBUG] [Thread-10846] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:27:07.976 [DEBUG] [Thread-10848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:13.319 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:23.025 [DEBUG] [Thread-10849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:23.717 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:25.204 [DEBUG] [Thread-10850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:33.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:27:33.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:27:33.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:27:34.134 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:34.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 27, 22), 29.41, 12.94, 0.0, 9.23, 19.65, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:27:34.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:27:22
2025-11-26T03:27:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:27:34.802 [DEBUG] [Thread-10851] [transport.py] [_log()] starting thread (client mode): 0x70d77e20
2025-11-26T03:27:34.802 [DEBUG] [Thread-10851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:27:34.821 [DEBUG] [Thread-10851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:27:34.821 [INFO] [Thread-10851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:27:34.823 [DEBUG] [Thread-10851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:27:34.823 [DEBUG] [Thread-10851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:27:34.823 [DEBUG] [Thread-10851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:27:34.823 [DEBUG] [Thread-10851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:27:34.823 [DEBUG] [Thread-10851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:27:34.823 [DEBUG] [Thread-10851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:27:34.823 [DEBUG] [Thread-10851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:27:34.823 [DEBUG] [Thread-10851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:27:34.823 [DEBUG] [Thread-10851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] client lang: <none>
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] server lang: <none>
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] kex follows: False
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] Compression: none
2025-11-26T03:27:34.824 [DEBUG] [Thread-10851] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:27:34.839 [DEBUG] [Thread-10851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:27:34.839 [DEBUG] [Thread-10851] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:27:34.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:27:34.841 [DEBUG] [Thread-10851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:27:34.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:27:34.843 [DEBUG] [Thread-10851] [transport.py] [_log()] userauth is OK
2025-11-26T03:27:34.844 [DEBUG] [Thread-10851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:27:34.844 [DEBUG] [Thread-10851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:27:34.844 [DEBUG] [Thread-10851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:27:34.844 [DEBUG] [Thread-10851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:27:34.866 [INFO] [Thread-10851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:27:34.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:27:35.457 [DEBUG] [Thread-10851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:27:35.457 [DEBUG] [Thread-10851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:27:35.458 [DEBUG] [Thread-10851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:27:35.498 [DEBUG] [Thread-10851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:27:35.498 [DEBUG] [Thread-10851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:27:35.502 [DEBUG] [Thread-10851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:27:35.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:27:35.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:27:35.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:27:35.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:27:35.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:27:35.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:27:35.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:27:35.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:27:35.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:27:35.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.060512 -999.00  +20.60   7.19     17   -5.00 1 1 1 1 1     0    0 25.64 -8.89 ZNESW 8.2 7.2 105.0 8.8 20.0 -26.5 19.9 -25.9 19.6 -24.5 19.8 -25.6
2025-11-26T03:27:35.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:27:35.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:27:35.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.060512
2025-11-26T03:27:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:27:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:27:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:27:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:27:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:27:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:27:22', tmtdew=29.41, humidity=12.94, cloud=0.0, wind=9.23, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:27:23', seeing=1.03, atlas_timestamp='2025-11-26T01:27:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:24:00')
2025-11-26T03:27:35.529 [DEBUG] [Thread-10851] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:27:35.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:27:35.626 [DEBUG] [Thread-10854] [transport.py] [_log()] starting thread (client mode): 0x70d77b50
2025-11-26T03:27:35.626 [DEBUG] [Thread-10854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:27:35.640 [DEBUG] [Thread-10854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:27:35.641 [INFO] [Thread-10854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:27:35.648 [DEBUG] [Thread-10854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:27:35.648 [DEBUG] [Thread-10854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:27:35.648 [DEBUG] [Thread-10854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] client lang: <none>
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] server lang: <none>
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] kex follows: False
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] Compression: none
2025-11-26T03:27:35.649 [DEBUG] [Thread-10854] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:27:35.705 [DEBUG] [Thread-10854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:27:35.706 [DEBUG] [Thread-10854] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:27:35.707 [DEBUG] [Thread-10854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:27:35.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:27:35.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:27:35.771 [DEBUG] [Thread-10854] [transport.py] [_log()] userauth is OK
2025-11-26T03:27:35.771 [DEBUG] [Thread-10854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:27:35.772 [DEBUG] [Thread-10854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:27:35.772 [DEBUG] [Thread-10854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:27:35.772 [DEBUG] [Thread-10854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:27:35.793 [INFO] [Thread-10854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:27:35.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:27:35.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:27:36.612 [DEBUG] [Thread-10854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:27:36.612 [DEBUG] [Thread-10854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:27:36.660 [DEBUG] [Thread-10854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:27:36.660 [DEBUG] [Thread-10854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:27:36.671 [DEBUG] [Thread-10854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:27:36.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:27:36.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:27:36.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:27:36.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:27:36.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:27:36.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:27:36.708 [DEBUG] [Thread-10854] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:27:38.061 [DEBUG] [Thread-10856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:44.546 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:53.111 [DEBUG] [Thread-10857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:54.966 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:55.507 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:27:55.508 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:05.376 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:28:06.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:28: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
2025-11-26T03:28:07.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 27, 55), 29.46, 12.94, 0.0, 9.33, 19.65, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:28:07.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:27:55
2025-11-26T03:28:07.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:28:07.627 [DEBUG] [Thread-10858] [transport.py] [_log()] starting thread (client mode): 0x70d76cb0
2025-11-26T03:28:07.627 [DEBUG] [Thread-10858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:28:07.648 [DEBUG] [Thread-10858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:28:07.648 [INFO] [Thread-10858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] client lang: <none>
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] server lang: <none>
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] kex follows: False
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] Compression: none
2025-11-26T03:28:07.650 [DEBUG] [Thread-10858] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:28:07.669 [DEBUG] [Thread-10858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:28:07.669 [DEBUG] [Thread-10858] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:28:07.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:28:07.671 [DEBUG] [Thread-10858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:28:07.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:28:07.672 [DEBUG] [Thread-10858] [transport.py] [_log()] userauth is OK
2025-11-26T03:28:07.672 [DEBUG] [Thread-10858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:28:07.672 [DEBUG] [Thread-10858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:28:07.673 [DEBUG] [Thread-10858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:28:07.673 [DEBUG] [Thread-10858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:28:07.691 [INFO] [Thread-10858] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:28:07.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:28:08.147 [DEBUG] [Thread-10860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:08.341 [DEBUG] [Thread-10858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:28:08.342 [DEBUG] [Thread-10858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:28:08.342 [DEBUG] [Thread-10858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:28:08.383 [DEBUG] [Thread-10858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:28:08.383 [DEBUG] [Thread-10858] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:28:08.387 [DEBUG] [Thread-10858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:28:08.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:28:08.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:28:08.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:28:08.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:28:08.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:28:08.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:28:08.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:28:08.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:28:08.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:28:08.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.060512 -999.00  +20.60   7.19     17   -5.00 1 1 1 1 1     0    0 25.64 -8.89 ZNESW 8.2 7.2 105.0 8.8 20.0 -26.5 19.9 -25.9 19.6 -24.5 19.8 -25.6
2025-11-26T03:28:08.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:28:08.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:28:08.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.060512
2025-11-26T03:28:08.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:28:08.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:28:08.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:28:08.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:28:08.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:28:08.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:27:55', tmtdew=29.46, humidity=12.94, cloud=0.0, wind=9.33, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:27:55', seeing=1.29, atlas_timestamp='2025-11-26T01:27:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:24:00')
2025-11-26T03:28:08.414 [DEBUG] [Thread-10858] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:28:08.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:28:08.510 [DEBUG] [Thread-10862] [transport.py] [_log()] starting thread (client mode): 0x70d7f1c0
2025-11-26T03:28:08.510 [DEBUG] [Thread-10862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:28:08.525 [DEBUG] [Thread-10862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:28:08.525 [INFO] [Thread-10862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:28:08.534 [DEBUG] [Thread-10862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:28:08.534 [DEBUG] [Thread-10862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:28:08.534 [DEBUG] [Thread-10862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:28:08.534 [DEBUG] [Thread-10862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:28:08.534 [DEBUG] [Thread-10862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:28:08.534 [DEBUG] [Thread-10862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:28:08.535 [DEBUG] [Thread-10862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:28:08.535 [DEBUG] [Thread-10862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:28:08.535 [DEBUG] [Thread-10862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:28:08.535 [DEBUG] [Thread-10862] [transport.py] [_log()] client lang: <none>
2025-11-26T03:28:08.535 [DEBUG] [Thread-10862] [transport.py] [_log()] server lang: <none>
2025-11-26T03:28:08.535 [DEBUG] [Thread-10862] [transport.py] [_log()] kex follows: False
2025-11-26T03:28:08.535 [DEBUG] [Thread-10862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:28:08.536 [DEBUG] [Thread-10862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:28:08.536 [DEBUG] [Thread-10862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:28:08.536 [DEBUG] [Thread-10862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:28:08.536 [DEBUG] [Thread-10862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:28:08.536 [DEBUG] [Thread-10862] [transport.py] [_log()] Compression: none
2025-11-26T03:28:08.536 [DEBUG] [Thread-10862] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:28:08.594 [DEBUG] [Thread-10862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:28:08.594 [DEBUG] [Thread-10862] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:28:08.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:28:08.596 [DEBUG] [Thread-10862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:28:08.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:28:08.651 [DEBUG] [Thread-10862] [transport.py] [_log()] userauth is OK
2025-11-26T03:28:08.651 [DEBUG] [Thread-10862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:28:08.651 [DEBUG] [Thread-10862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:28:08.651 [DEBUG] [Thread-10862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:28:08.652 [DEBUG] [Thread-10862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:28:08.671 [INFO] [Thread-10862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:28:08.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:28:08.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:28:09.512 [DEBUG] [Thread-10862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:28:09.512 [DEBUG] [Thread-10862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:28:09.560 [DEBUG] [Thread-10862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:28:09.560 [DEBUG] [Thread-10862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:28:09.570 [DEBUG] [Thread-10862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:28:09.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:28:09.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:28:09.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:28:09.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:28:09.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:28:09.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:28:09.606 [DEBUG] [Thread-10862] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:28:15.857 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:23.185 [DEBUG] [Thread-10864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:25.257 [DEBUG] [Thread-10865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:26.260 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:36.728 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:38.227 [DEBUG] [Thread-10866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:39.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:28:39.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:28:39.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:28:40.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 28, 26), 29.48, 12.91, 0.0, 9.16, 19.58, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:28:40.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:28:26
2025-11-26T03:28:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:28:40.537 [DEBUG] [Thread-10867] [transport.py] [_log()] starting thread (client mode): 0x70d7c400
2025-11-26T03:28:40.537 [DEBUG] [Thread-10867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:28:40.558 [DEBUG] [Thread-10867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:28:40.558 [INFO] [Thread-10867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:28:40.561 [DEBUG] [Thread-10867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:28:40.561 [DEBUG] [Thread-10867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:28:40.561 [DEBUG] [Thread-10867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:28:40.561 [DEBUG] [Thread-10867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:28:40.561 [DEBUG] [Thread-10867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:28:40.561 [DEBUG] [Thread-10867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:28:40.561 [DEBUG] [Thread-10867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:28:40.561 [DEBUG] [Thread-10867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:28:40.561 [DEBUG] [Thread-10867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] client lang: <none>
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] server lang: <none>
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] kex follows: False
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] Compression: none
2025-11-26T03:28:40.562 [DEBUG] [Thread-10867] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:28:40.581 [DEBUG] [Thread-10867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:28:40.582 [DEBUG] [Thread-10867] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:28:40.583 [DEBUG] [Thread-10867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:28:40.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:28:40.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:28:40.585 [DEBUG] [Thread-10867] [transport.py] [_log()] userauth is OK
2025-11-26T03:28:40.585 [DEBUG] [Thread-10867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:28:40.585 [DEBUG] [Thread-10867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:28:40.585 [DEBUG] [Thread-10867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:28:40.585 [DEBUG] [Thread-10867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:28:40.609 [INFO] [Thread-10867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:28:40.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:28:41.215 [DEBUG] [Thread-10867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:28:41.215 [DEBUG] [Thread-10867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:28:41.215 [DEBUG] [Thread-10867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:28:41.256 [DEBUG] [Thread-10867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:28:41.256 [DEBUG] [Thread-10867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:28:41.259 [DEBUG] [Thread-10867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:28:41.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:28:41.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:28:41.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:28:41.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:28:41.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:28:41.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:28:41.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:28:41.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:28:41.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:28:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.061207 -999.00  +20.50   6.55     17   -5.00 1 1 1 1 1     0    0 25.79 -9.21 ZNESW 6.4 6.5 93.7 9.9 20.0 -26.3 19.9 -25.9 19.5 -24.3 19.8 -25.6
2025-11-26T03:28:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:28:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:28:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.061207
2025-11-26T03:28:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:28:41.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:28:41.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:28:41.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:28:41.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:28:41.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:28:26', tmtdew=29.48, humidity=12.91, cloud=0.0, wind=9.16, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:28:27', seeing=1.16, atlas_timestamp='2025-11-26T01:28:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:24:00')
2025-11-26T03:28:41.286 [DEBUG] [Thread-10867] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:28:41.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:28:41.381 [DEBUG] [Thread-10870] [transport.py] [_log()] starting thread (client mode): 0x70d7c8b0
2025-11-26T03:28:41.381 [DEBUG] [Thread-10870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:28:41.395 [DEBUG] [Thread-10870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:28:41.395 [INFO] [Thread-10870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] client lang: <none>
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] server lang: <none>
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] kex follows: False
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:28:41.403 [DEBUG] [Thread-10870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:28:41.404 [DEBUG] [Thread-10870] [transport.py] [_log()] Compression: none
2025-11-26T03:28:41.404 [DEBUG] [Thread-10870] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:28:41.462 [DEBUG] [Thread-10870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:28:41.463 [DEBUG] [Thread-10870] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:28:41.464 [DEBUG] [Thread-10870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:28:41.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:28:41.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:28:41.519 [DEBUG] [Thread-10870] [transport.py] [_log()] userauth is OK
2025-11-26T03:28:41.520 [DEBUG] [Thread-10870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:28:41.520 [DEBUG] [Thread-10870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:28:41.520 [DEBUG] [Thread-10870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:28:41.520 [DEBUG] [Thread-10870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:28:41.539 [INFO] [Thread-10870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:28:41.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:28:41.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:28:42.378 [DEBUG] [Thread-10870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:28:42.378 [DEBUG] [Thread-10870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:28:42.427 [DEBUG] [Thread-10870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:28:42.427 [DEBUG] [Thread-10870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:28:42.436 [DEBUG] [Thread-10870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:28:42.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:28: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')
2025-11-26T03:28:42.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:28:42.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:28:42.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:28:42.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:28:42.473 [DEBUG] [Thread-10870] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:28:47.095 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:53.260 [DEBUG] [Thread-10872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:55.708 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:55.711 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:28:57.504 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:07.913 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:08.310 [DEBUG] [Thread-10873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:29:12.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:29:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:29:13.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 28, 59), 29.4, 12.94, 0.0, 9.42, 19.6, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:29:13.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:28:59
2025-11-26T03:29:13.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:29:13.393 [DEBUG] [Thread-10874] [transport.py] [_log()] starting thread (client mode): 0x70d7c3a0
2025-11-26T03:29:13.394 [DEBUG] [Thread-10874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:29:13.420 [DEBUG] [Thread-10874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:29:13.420 [INFO] [Thread-10874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] client lang: <none>
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] server lang: <none>
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] kex follows: False
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] Compression: none
2025-11-26T03:29:13.424 [DEBUG] [Thread-10874] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:29:13.444 [DEBUG] [Thread-10874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:29:13.445 [DEBUG] [Thread-10874] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:29:13.445 [DEBUG] [Thread-10874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:29:13.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:29:13.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:29:13.447 [DEBUG] [Thread-10874] [transport.py] [_log()] userauth is OK
2025-11-26T03:29:13.447 [DEBUG] [Thread-10874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:29:13.447 [DEBUG] [Thread-10874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:29:13.448 [DEBUG] [Thread-10874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:29:13.448 [DEBUG] [Thread-10874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:29:13.483 [INFO] [Thread-10874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:29:13.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:29:14.143 [DEBUG] [Thread-10874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:29:14.143 [DEBUG] [Thread-10874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:29:14.144 [DEBUG] [Thread-10874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:29:14.185 [DEBUG] [Thread-10874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:29:14.185 [DEBUG] [Thread-10874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:29:14.188 [DEBUG] [Thread-10874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:29:14.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:29:14.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:29:14.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:29:14.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:29:14.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:29:14.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:29:14.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:29:14.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:29:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:29:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.061554 -999.00  +20.50   5.21     17   -5.10 1 1 1 1 1     0    0 25.51 -9.86 ZNESW 5.7 5.2 104.7 9.2 20.0 -26.3 19.9 -25.7 19.5 -24.8 19.8 -25.6
2025-11-26T03:29:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:29:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:29:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.061554
2025-11-26T03:29:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:29:14.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:29:14.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:29:14.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:29:14.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:29:14.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:28:59', tmtdew=29.4, humidity=12.94, cloud=0.0, wind=9.42, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:28:59', seeing=1.2, atlas_timestamp='2025-11-26T01:28:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:28:00')
2025-11-26T03:29:14.213 [DEBUG] [Thread-10874] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:29:14.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:29:14.308 [DEBUG] [Thread-10877] [transport.py] [_log()] starting thread (client mode): 0x70d74cd0
2025-11-26T03:29:14.309 [DEBUG] [Thread-10877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:29:14.323 [DEBUG] [Thread-10877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:29:14.324 [INFO] [Thread-10877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:29:14.331 [DEBUG] [Thread-10877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:29:14.331 [DEBUG] [Thread-10877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] client lang: <none>
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] server lang: <none>
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] kex follows: False
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] Compression: none
2025-11-26T03:29:14.332 [DEBUG] [Thread-10877] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:29:14.388 [DEBUG] [Thread-10877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:29:14.389 [DEBUG] [Thread-10877] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:29:14.389 [DEBUG] [Thread-10877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:29:14.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:29:14.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:29:14.444 [DEBUG] [Thread-10877] [transport.py] [_log()] userauth is OK
2025-11-26T03:29:14.445 [DEBUG] [Thread-10877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:29:14.445 [DEBUG] [Thread-10877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:29:14.445 [DEBUG] [Thread-10877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:29:14.445 [DEBUG] [Thread-10877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:29:14.464 [INFO] [Thread-10877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:29:14.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:29:14.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:29:15.300 [DEBUG] [Thread-10877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:29:15.301 [DEBUG] [Thread-10877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:29:15.348 [DEBUG] [Thread-10877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:29:15.348 [DEBUG] [Thread-10877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:29:15.357 [DEBUG] [Thread-10877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:29:15.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:29:15.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:29:15.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:29:15.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:29:15.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:29:15.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:29:15.389 [DEBUG] [Thread-10877] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:29:18.335 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:23.347 [DEBUG] [Thread-10879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:25.333 [DEBUG] [Thread-10880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:28.741 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:38.392 [DEBUG] [Thread-10881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:39.156 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:29:45.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:29:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:29:46.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 29, 31), 29.34, 13.01, 0.0, 9.18, 19.6, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:29:46.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:29:31
2025-11-26T03:29:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:29:46.320 [DEBUG] [Thread-10882] [transport.py] [_log()] starting thread (client mode): 0x70d7d6f0
2025-11-26T03:29:46.320 [DEBUG] [Thread-10882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:29:46.340 [DEBUG] [Thread-10882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:29:46.341 [INFO] [Thread-10882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] client lang: <none>
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] server lang: <none>
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] kex follows: False
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] Compression: none
2025-11-26T03:29:46.344 [DEBUG] [Thread-10882] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:29:46.365 [DEBUG] [Thread-10882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:29:46.366 [DEBUG] [Thread-10882] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:29:46.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:29:46.367 [DEBUG] [Thread-10882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:29:46.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:29:46.409 [DEBUG] [Thread-10882] [transport.py] [_log()] userauth is OK
2025-11-26T03:29:46.410 [DEBUG] [Thread-10882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:29:46.410 [DEBUG] [Thread-10882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:29:46.410 [DEBUG] [Thread-10882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:29:46.410 [DEBUG] [Thread-10882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:29:46.435 [INFO] [Thread-10882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:29:46.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:29:47.038 [DEBUG] [Thread-10882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:29:47.038 [DEBUG] [Thread-10882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:29:47.038 [DEBUG] [Thread-10882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:29:47.079 [DEBUG] [Thread-10882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:29:47.079 [DEBUG] [Thread-10882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:29:47.082 [DEBUG] [Thread-10882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:29:47.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:29:47.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:29:47.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:29:47.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:29:47.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:29:47.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:29:47.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:29:47.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:29:47.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:29:47.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.061901 -999.00  +20.50   4.78     17   -5.10 1 1 1 1 1     0    0 25.53 -10.03 ZNESW 5.1 4.8 104.7 8.4 19.9 -26.5 19.8 -25.9 19.5 -24.7 19.8 -25.6
2025-11-26T03:29:47.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:29:47.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:29:47.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.061901
2025-11-26T03:29:47.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:29:47.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:29:47.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:29:47.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:29:47.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:29:47.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:29:31', tmtdew=29.34, humidity=13.01, cloud=0.0, wind=9.18, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:29:31', seeing=1.2, atlas_timestamp='2025-11-26T01:29:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:28:00')
2025-11-26T03:29:47.106 [DEBUG] [Thread-10882] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:29:47.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:29:47.201 [DEBUG] [Thread-10885] [transport.py] [_log()] starting thread (client mode): 0x70d7c460
2025-11-26T03:29:47.201 [DEBUG] [Thread-10885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:29:47.219 [DEBUG] [Thread-10885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:29:47.219 [INFO] [Thread-10885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] client lang: <none>
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] server lang: <none>
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] kex follows: False
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:29:47.227 [DEBUG] [Thread-10885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:29:47.228 [DEBUG] [Thread-10885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:29:47.228 [DEBUG] [Thread-10885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:29:47.228 [DEBUG] [Thread-10885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:29:47.228 [DEBUG] [Thread-10885] [transport.py] [_log()] Compression: none
2025-11-26T03:29:47.228 [DEBUG] [Thread-10885] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:29:47.286 [DEBUG] [Thread-10885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:29:47.286 [DEBUG] [Thread-10885] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:29:47.287 [DEBUG] [Thread-10885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:29:47.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:29:47.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:29:47.342 [DEBUG] [Thread-10885] [transport.py] [_log()] userauth is OK
2025-11-26T03:29:47.342 [DEBUG] [Thread-10885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:29:47.343 [DEBUG] [Thread-10885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:29:47.343 [DEBUG] [Thread-10885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:29:47.343 [DEBUG] [Thread-10885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:29:47.361 [INFO] [Thread-10885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:29:47.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:29:47.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:29:48.207 [DEBUG] [Thread-10885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:29:48.207 [DEBUG] [Thread-10885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:29:48.256 [DEBUG] [Thread-10885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:29:48.257 [DEBUG] [Thread-10885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:29:48.266 [DEBUG] [Thread-10885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:29:48.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:29:48.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:29:48.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:29:48.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:29:48.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:29:48.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:29:48.303 [DEBUG] [Thread-10885] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:29:49.576 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:53.424 [DEBUG] [Thread-10887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:55.913 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:29:55.914 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:00.012 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:08.484 [DEBUG] [Thread-10888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:10.405 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:30:18.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:30:18.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:30:18.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 30, 3), 29.37, 12.96, 0.0, 9.53, 19.53, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:30:18.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:30:03
2025-11-26T03:30:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:30:19.225 [DEBUG] [Thread-10889] [transport.py] [_log()] starting thread (client mode): 0x70d7cc40
2025-11-26T03:30:19.225 [DEBUG] [Thread-10889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:30:19.246 [DEBUG] [Thread-10889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:30:19.247 [INFO] [Thread-10889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:30:19.250 [DEBUG] [Thread-10889] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:30:19.250 [DEBUG] [Thread-10889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:30:19.250 [DEBUG] [Thread-10889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:30:19.250 [DEBUG] [Thread-10889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:30:19.250 [DEBUG] [Thread-10889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:30:19.250 [DEBUG] [Thread-10889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:30:19.250 [DEBUG] [Thread-10889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] client lang: <none>
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] server lang: <none>
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] kex follows: False
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:30:19.251 [DEBUG] [Thread-10889] [transport.py] [_log()] Compression: none
2025-11-26T03:30:19.252 [DEBUG] [Thread-10889] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:30:19.271 [DEBUG] [Thread-10889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:30:19.271 [DEBUG] [Thread-10889] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:30:19.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:30:19.272 [DEBUG] [Thread-10889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:30:19.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:30:19.275 [DEBUG] [Thread-10889] [transport.py] [_log()] userauth is OK
2025-11-26T03:30:19.275 [DEBUG] [Thread-10889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:30:19.275 [DEBUG] [Thread-10889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:30:19.275 [DEBUG] [Thread-10889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:30:19.275 [DEBUG] [Thread-10889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:30:19.299 [INFO] [Thread-10889] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:30:19.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:30:19.949 [DEBUG] [Thread-10889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:30:19.949 [DEBUG] [Thread-10889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:30:19.949 [DEBUG] [Thread-10889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:30:19.990 [DEBUG] [Thread-10889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:30:19.990 [DEBUG] [Thread-10889] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:30:19.994 [DEBUG] [Thread-10889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:30:20.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:30:20.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:30:20.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:30:20.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:30:20.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:30:20.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:30:20.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:30:20.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:30:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:30:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.062248 -999.00  +20.50   9.12     17   -5.10 1 1 1 1 1     0    0 25.74 -11.46 ZNESW 8.1 9.1 78.0 10.5 19.9 -26.7 19.8 -25.9 19.5 -24.6 19.8 -25.6
2025-11-26T03:30:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:30:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:30:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.062248
2025-11-26T03:30:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:30:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:30:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:30:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:30:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:30:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:30:03', tmtdew=29.37, humidity=12.96, cloud=0.0, wind=9.53, temperature=19.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:30:03', seeing=1.18, atlas_timestamp='2025-11-26T01:29:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:28:00')
2025-11-26T03:30:20.022 [DEBUG] [Thread-10889] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:30:20.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:30:20.117 [DEBUG] [Thread-10892] [transport.py] [_log()] starting thread (client mode): 0x70d7eaa0
2025-11-26T03:30:20.117 [DEBUG] [Thread-10892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:30:20.132 [DEBUG] [Thread-10892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:30:20.133 [INFO] [Thread-10892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:30:20.140 [DEBUG] [Thread-10892] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:30:20.140 [DEBUG] [Thread-10892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:30:20.141 [DEBUG] [Thread-10892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:30:20.141 [DEBUG] [Thread-10892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:30:20.141 [DEBUG] [Thread-10892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:30:20.141 [DEBUG] [Thread-10892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:30:20.141 [DEBUG] [Thread-10892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:30:20.141 [DEBUG] [Thread-10892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:30:20.141 [DEBUG] [Thread-10892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:30:20.141 [DEBUG] [Thread-10892] [transport.py] [_log()] client lang: <none>
2025-11-26T03:30:20.142 [DEBUG] [Thread-10892] [transport.py] [_log()] server lang: <none>
2025-11-26T03:30:20.142 [DEBUG] [Thread-10892] [transport.py] [_log()] kex follows: False
2025-11-26T03:30:20.142 [DEBUG] [Thread-10892] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:30:20.142 [DEBUG] [Thread-10892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:30:20.142 [DEBUG] [Thread-10892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:30:20.142 [DEBUG] [Thread-10892] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:30:20.142 [DEBUG] [Thread-10892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:30:20.143 [DEBUG] [Thread-10892] [transport.py] [_log()] Compression: none
2025-11-26T03:30:20.143 [DEBUG] [Thread-10892] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:30:20.197 [DEBUG] [Thread-10892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:30:20.197 [DEBUG] [Thread-10892] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:30:20.197 [DEBUG] [Thread-10892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:30:20.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:30:20.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:30:20.254 [DEBUG] [Thread-10892] [transport.py] [_log()] userauth is OK
2025-11-26T03:30:20.254 [DEBUG] [Thread-10892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:30:20.255 [DEBUG] [Thread-10892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:30:20.255 [DEBUG] [Thread-10892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:30:20.255 [DEBUG] [Thread-10892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:30:20.274 [INFO] [Thread-10892] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:30:20.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:30:20.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:30:20.800 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:21.083 [DEBUG] [Thread-10892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:30:21.084 [DEBUG] [Thread-10892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:30:21.132 [DEBUG] [Thread-10892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:30:21.132 [DEBUG] [Thread-10892] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:30:21.141 [DEBUG] [Thread-10892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:30:21.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:30:21.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:30:21.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:30:21.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:30:21.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:30:21.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:30:21.176 [DEBUG] [Thread-10892] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:30:23.518 [DEBUG] [Thread-10894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:25.388 [DEBUG] [Thread-10895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:31.201 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:38.569 [DEBUG] [Thread-10896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:41.595 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:30:51.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:30:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:30:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 30, 35), 29.28, 13.01, 0.0, 9.53, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:30:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:30:35
2025-11-26T03:30:51.989 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:52.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:30:52.169 [DEBUG] [Thread-10897] [transport.py] [_log()] starting thread (client mode): 0x70d7f670
2025-11-26T03:30:52.169 [DEBUG] [Thread-10897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:30:52.189 [DEBUG] [Thread-10897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:30:52.189 [INFO] [Thread-10897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] client lang: <none>
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] server lang: <none>
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] kex follows: False
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] Compression: none
2025-11-26T03:30:52.193 [DEBUG] [Thread-10897] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:30:52.208 [DEBUG] [Thread-10897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:30:52.208 [DEBUG] [Thread-10897] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:30:52.209 [DEBUG] [Thread-10897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:30:52.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:30:52.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:30:52.209 [DEBUG] [Thread-10897] [transport.py] [_log()] userauth is OK
2025-11-26T03:30:52.209 [DEBUG] [Thread-10897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:30:52.209 [DEBUG] [Thread-10897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:30:52.209 [DEBUG] [Thread-10897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:30:52.209 [DEBUG] [Thread-10897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:30:52.218 [INFO] [Thread-10897] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:30:52.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:30:53.036 [DEBUG] [Thread-10897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:30:53.036 [DEBUG] [Thread-10897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:30:53.036 [DEBUG] [Thread-10897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:30:53.077 [DEBUG] [Thread-10897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:30:53.077 [DEBUG] [Thread-10897] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:30:53.079 [DEBUG] [Thread-10897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:30:53.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:30:53.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:30:53.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:30:53.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:30:53.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:30:53.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:30:53.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:30:53.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:30:53.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:30:53.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.062595 -999.00  +20.40   6.98     17   -5.10 1 1 1 1 1     0    0 25.47 -12.19 ZNESW 7.5 7.0 107.5 9.5 19.9 -26.4 19.8 -25.7 19.4 -24.5 19.8 -25.6
2025-11-26T03:30:53.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:30:53.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:30:53.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.062595
2025-11-26T03:30:53.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:30:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:30:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:30:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:30:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:30:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:30:35', tmtdew=29.28, humidity=13.01, cloud=0.0, wind=9.53, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:30:35', seeing=1.1, atlas_timestamp='2025-11-26T01:30:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:28:00')
2025-11-26T03:30:53.099 [DEBUG] [Thread-10897] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:30:53.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:30:53.184 [DEBUG] [Thread-10900] [transport.py] [_log()] starting thread (client mode): 0x70d77010
2025-11-26T03:30:53.184 [DEBUG] [Thread-10900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:30:53.199 [DEBUG] [Thread-10900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:30:53.200 [INFO] [Thread-10900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] client lang: <none>
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] server lang: <none>
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] kex follows: False
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] Compression: none
2025-11-26T03:30:53.207 [DEBUG] [Thread-10900] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:30:53.266 [DEBUG] [Thread-10900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:30:53.266 [DEBUG] [Thread-10900] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:30:53.266 [DEBUG] [Thread-10900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:30:53.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:30:53.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:30:53.322 [DEBUG] [Thread-10900] [transport.py] [_log()] userauth is OK
2025-11-26T03:30:53.323 [DEBUG] [Thread-10900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:30:53.323 [DEBUG] [Thread-10900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:30:53.323 [DEBUG] [Thread-10900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:30:53.323 [DEBUG] [Thread-10900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:30:53.336 [INFO] [Thread-10900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:30:53.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:30:53.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:30:53.602 [DEBUG] [Thread-10902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:54.179 [DEBUG] [Thread-10900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:30:54.179 [DEBUG] [Thread-10900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:30:54.227 [DEBUG] [Thread-10900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:30:54.227 [DEBUG] [Thread-10900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:30:54.235 [DEBUG] [Thread-10900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:30:54.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:30:54.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:30:54.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:30:54.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:30:54.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:30:54.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:30:54.267 [DEBUG] [Thread-10900] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:30:56.119 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:30:56.120 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:02.448 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:08.639 [DEBUG] [Thread-10903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:12.857 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:23.277 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:23.674 [DEBUG] [Thread-10904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:24.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:31:24.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:31:24.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:31:24.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 31, 7), 29.26, 13.03, 0.0, 9.53, 19.4, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:31:24.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:31:07
2025-11-26T03:31:25.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:31:25.217 [DEBUG] [Thread-10905] [transport.py] [_log()] starting thread (client mode): 0x70d761a0
2025-11-26T03:31:25.217 [DEBUG] [Thread-10905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:31:25.238 [DEBUG] [Thread-10905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:31:25.238 [INFO] [Thread-10905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] client lang: <none>
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] server lang: <none>
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] kex follows: False
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:31:25.241 [DEBUG] [Thread-10905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:31:25.242 [DEBUG] [Thread-10905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:31:25.242 [DEBUG] [Thread-10905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:31:25.242 [DEBUG] [Thread-10905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:31:25.242 [DEBUG] [Thread-10905] [transport.py] [_log()] Compression: none
2025-11-26T03:31:25.242 [DEBUG] [Thread-10905] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:31:25.256 [DEBUG] [Thread-10905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:31:25.256 [DEBUG] [Thread-10905] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:31:25.256 [DEBUG] [Thread-10905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:31:25.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:31:25.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:31:25.257 [DEBUG] [Thread-10905] [transport.py] [_log()] userauth is OK
2025-11-26T03:31:25.257 [DEBUG] [Thread-10905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:31:25.257 [DEBUG] [Thread-10905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:31:25.257 [DEBUG] [Thread-10905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:31:25.257 [DEBUG] [Thread-10905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:31:25.272 [INFO] [Thread-10905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:31:25.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:31:25.442 [DEBUG] [Thread-10907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:25.935 [DEBUG] [Thread-10905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:31:25.935 [DEBUG] [Thread-10905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:31:25.936 [DEBUG] [Thread-10905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:31:25.976 [DEBUG] [Thread-10905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:31:25.976 [DEBUG] [Thread-10905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:31:25.979 [DEBUG] [Thread-10905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:31:25.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:31:25.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:31:25.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:31:25.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:31:26.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:31:26.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:31:26.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:31:26.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:31:26.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:31:26.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.062943 -999.00  +20.40   6.67     17   -5.10 1 1 1 1 1     0    0 25.26 -12.54 ZNESW 8.8 6.7 74.3 11.3 19.9 -26.3 19.8 -25.8 19.4 -24.7 19.7 -25.5
2025-11-26T03:31:26.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:31:26.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:31:26.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.062943
2025-11-26T03:31:26.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:31:26.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:31:26.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:31:26.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:31:26.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:31:26.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:31:07', tmtdew=29.26, humidity=13.03, cloud=0.0, wind=9.53, temperature=19.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:31:07', seeing=1.36, atlas_timestamp='2025-11-26T01:30:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:28:00')
2025-11-26T03:31:26.008 [DEBUG] [Thread-10905] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:31:26.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:31:26.105 [DEBUG] [Thread-10909] [transport.py] [_log()] starting thread (client mode): 0x70d75ed0
2025-11-26T03:31:26.106 [DEBUG] [Thread-10909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:31:26.120 [DEBUG] [Thread-10909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:31:26.120 [INFO] [Thread-10909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] client lang: <none>
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] server lang: <none>
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] kex follows: False
2025-11-26T03:31:26.128 [DEBUG] [Thread-10909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:31:26.129 [DEBUG] [Thread-10909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:31:26.129 [DEBUG] [Thread-10909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:31:26.129 [DEBUG] [Thread-10909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:31:26.129 [DEBUG] [Thread-10909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:31:26.129 [DEBUG] [Thread-10909] [transport.py] [_log()] Compression: none
2025-11-26T03:31:26.129 [DEBUG] [Thread-10909] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:31:26.188 [DEBUG] [Thread-10909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:31:26.188 [DEBUG] [Thread-10909] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:31:26.189 [DEBUG] [Thread-10909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:31:26.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:31:26.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:31:26.244 [DEBUG] [Thread-10909] [transport.py] [_log()] userauth is OK
2025-11-26T03:31:26.244 [DEBUG] [Thread-10909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:31:26.244 [DEBUG] [Thread-10909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:31:26.244 [DEBUG] [Thread-10909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:31:26.244 [DEBUG] [Thread-10909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:31:26.263 [INFO] [Thread-10909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:31:26.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:31:26.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:31:27.083 [DEBUG] [Thread-10909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:31:27.084 [DEBUG] [Thread-10909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:31:27.131 [DEBUG] [Thread-10909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:31:27.131 [DEBUG] [Thread-10909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:31:27.139 [DEBUG] [Thread-10909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:31:27.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:31:27.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:31: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') -> 00000000
2025-11-26T03:31:27.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:31:27.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:31:27.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:31:27.171 [DEBUG] [Thread-10909] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:31:33.672 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:38.706 [DEBUG] [Thread-10911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:44.065 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:53.760 [DEBUG] [Thread-10912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:54.483 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:56.319 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:56.321 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:31:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:31:57.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:31:57.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:31:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 31, 39), 29.21, 13.03, 0.0, 9.51, 19.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:31:57.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:31:39
2025-11-26T03:31:57.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:31:58.114 [DEBUG] [Thread-10913] [transport.py] [_log()] starting thread (client mode): 0x70de5a20
2025-11-26T03:31:58.115 [DEBUG] [Thread-10913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:31:58.137 [DEBUG] [Thread-10913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:31:58.137 [INFO] [Thread-10913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] client lang: <none>
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] server lang: <none>
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] kex follows: False
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] Compression: none
2025-11-26T03:31:58.139 [DEBUG] [Thread-10913] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:31:58.151 [DEBUG] [Thread-10913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:31:58.152 [DEBUG] [Thread-10913] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:31:58.152 [DEBUG] [Thread-10913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:31:58.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:31:58.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:31:58.155 [DEBUG] [Thread-10913] [transport.py] [_log()] userauth is OK
2025-11-26T03:31:58.155 [DEBUG] [Thread-10913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:31:58.155 [DEBUG] [Thread-10913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:31:58.155 [DEBUG] [Thread-10913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:31:58.155 [DEBUG] [Thread-10913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:31:58.175 [INFO] [Thread-10913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:31:58.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:31:58.967 [DEBUG] [Thread-10913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:31:58.967 [DEBUG] [Thread-10913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:31:58.968 [DEBUG] [Thread-10913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:31:59.009 [DEBUG] [Thread-10913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:31:59.009 [DEBUG] [Thread-10913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:31:59.012 [DEBUG] [Thread-10913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:31:59.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:31:59.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:31:59.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:31:59.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:31:59.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:31:59.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:31:59.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:31:59.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:31:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:31:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.063638 -999.00  +20.40   7.56     17   -5.10 1 1 1 1 1     0    0 25.49 -17.17 ZNESW 8.4 7.6 75.7 12.5 19.9 -26.1 19.8 -25.7 19.4 -24.6 19.7 -25.5
2025-11-26T03:31:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:31:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:31:59.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.063638
2025-11-26T03:31:59.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:31:59.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:31:59.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:31:59.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:31:59.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:31:59.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:31:39', tmtdew=29.21, humidity=13.03, cloud=0.0, wind=9.51, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:31:39', seeing=1.25, atlas_timestamp='2025-11-26T01:31:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.05825000000000102, -0.008749999999999147, -0.042500000000000426, -0.019999999999999574, -0.019249999999999545, 0.01249999999999929, -0.039749999999997954, -0.03999999999999915, -0.08000000000000007, -0.023749999999999716, 0.019000000000000128, 0.06299999999999883, 0.03874999999999851, -0.05900000000000105, -0.02000000000000135, -0.009250000000001535, 0.005000000000000782, -0.06799999999999962, 0.002249999999998309, 0.07649999999999935, 0.02374999999999794, 0.007250000000000867, -0.013249999999999318, 0.0024999999999995026, 0.0065000000000008384, -0.016750000000000043, 0.025500000000000966, 0.1349999999999998, 0.03500000000000014, 0.032000000000001805, -0.007999999999999119, 0.016750000000000043], zp_timestamp='2025-11-26T01:28:00')
2025-11-26T03:31:59.040 [DEBUG] [Thread-10913] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:31:59.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:31:59.135 [DEBUG] [Thread-10916] [transport.py] [_log()] starting thread (client mode): 0x70d7c250
2025-11-26T03:31:59.135 [DEBUG] [Thread-10916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:31:59.150 [DEBUG] [Thread-10916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:31:59.150 [INFO] [Thread-10916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] client lang: <none>
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] server lang: <none>
2025-11-26T03:31:59.158 [DEBUG] [Thread-10916] [transport.py] [_log()] kex follows: False
2025-11-26T03:31:59.159 [DEBUG] [Thread-10916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:31:59.159 [DEBUG] [Thread-10916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:31:59.159 [DEBUG] [Thread-10916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:31:59.159 [DEBUG] [Thread-10916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:31:59.159 [DEBUG] [Thread-10916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:31:59.159 [DEBUG] [Thread-10916] [transport.py] [_log()] Compression: none
2025-11-26T03:31:59.159 [DEBUG] [Thread-10916] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:31:59.216 [DEBUG] [Thread-10916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:31:59.217 [DEBUG] [Thread-10916] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:31:59.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:31:59.218 [DEBUG] [Thread-10916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:31:59.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:31:59.272 [DEBUG] [Thread-10916] [transport.py] [_log()] userauth is OK
2025-11-26T03:31:59.273 [DEBUG] [Thread-10916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:31:59.273 [DEBUG] [Thread-10916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:31:59.273 [DEBUG] [Thread-10916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:31:59.273 [DEBUG] [Thread-10916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:31:59.292 [INFO] [Thread-10916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:31:59.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:31:59.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:32:00.108 [DEBUG] [Thread-10916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:32:00.108 [DEBUG] [Thread-10916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:32:00.155 [DEBUG] [Thread-10916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:32:00.155 [DEBUG] [Thread-10916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:32:00.164 [DEBUG] [Thread-10916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:32:00.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:32:00.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:32:00.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:32:00.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:32:00.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:32:00.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:32:00.197 [DEBUG] [Thread-10916] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:32:04.933 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:08.795 [DEBUG] [Thread-10918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:15.350 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:23.846 [DEBUG] [Thread-10919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:25.498 [DEBUG] [Thread-10920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:25.756 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:30.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:32:30.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:32:30.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:32:30.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 32, 11), 29.11, 13.13, 0.0, 9.51, 19.33, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:32:30.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:32:11
2025-11-26T03:32:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:32:31.169 [DEBUG] [Thread-10921] [transport.py] [_log()] starting thread (client mode): 0x70de4430
2025-11-26T03:32:31.169 [DEBUG] [Thread-10921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:32:31.191 [DEBUG] [Thread-10921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:32:31.191 [INFO] [Thread-10921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:32:31.194 [DEBUG] [Thread-10921] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] client lang: <none>
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] server lang: <none>
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] kex follows: False
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] Compression: none
2025-11-26T03:32:31.195 [DEBUG] [Thread-10921] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:32:31.212 [DEBUG] [Thread-10921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:32:31.212 [DEBUG] [Thread-10921] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:32:31.213 [DEBUG] [Thread-10921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:32:31.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:32:31.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:32:31.215 [DEBUG] [Thread-10921] [transport.py] [_log()] userauth is OK
2025-11-26T03:32:31.215 [DEBUG] [Thread-10921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:32:31.215 [DEBUG] [Thread-10921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:32:31.215 [DEBUG] [Thread-10921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:32:31.215 [DEBUG] [Thread-10921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:32:31.242 [INFO] [Thread-10921] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:32:31.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:32:31.884 [DEBUG] [Thread-10921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:32:31.884 [DEBUG] [Thread-10921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:32:31.885 [DEBUG] [Thread-10921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:32:31.925 [DEBUG] [Thread-10921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:32:31.925 [DEBUG] [Thread-10921] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:32:31.929 [DEBUG] [Thread-10921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:32:31.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:32:31.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:32:31.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:32:31.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:32:31.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:32:31.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:32:31.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:32:31.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:32:31.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:32:31.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.063985 -999.00  +20.40   8.42     17   -5.10 1 1 1 1 1     0    0 24.74 -18.78 ZNESW 7.1 8.4 96.1 11.1 19.9 -26.3 19.8 -25.7 19.4 -24.4 19.7 -25.5
2025-11-26T03:32:31.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:32:31.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:32:31.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.063985
2025-11-26T03:32:31.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:32:31.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:32:31.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:32:31.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:32:31.956 [DEBUG] [Thread-10921] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:32:31.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:32:31.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:32:11', tmtdew=29.11, humidity=13.13, cloud=0.0, wind=9.51, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:32:11', seeing=1.43, atlas_timestamp='2025-11-26T01:32:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:30:00')
2025-11-26T03:32:32.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:32:32.055 [DEBUG] [Thread-10924] [transport.py] [_log()] starting thread (client mode): 0x70de5e70
2025-11-26T03:32:32.055 [DEBUG] [Thread-10924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:32:32.069 [DEBUG] [Thread-10924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:32:32.069 [INFO] [Thread-10924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:32:32.077 [DEBUG] [Thread-10924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:32:32.077 [DEBUG] [Thread-10924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:32:32.077 [DEBUG] [Thread-10924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:32:32.077 [DEBUG] [Thread-10924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:32:32.077 [DEBUG] [Thread-10924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:32:32.077 [DEBUG] [Thread-10924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] client lang: <none>
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] server lang: <none>
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] kex follows: False
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] Compression: none
2025-11-26T03:32:32.078 [DEBUG] [Thread-10924] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:32:32.137 [DEBUG] [Thread-10924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:32:32.138 [DEBUG] [Thread-10924] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:32:32.139 [DEBUG] [Thread-10924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:32:32.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:32:32.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:32:32.193 [DEBUG] [Thread-10924] [transport.py] [_log()] userauth is OK
2025-11-26T03:32:32.193 [DEBUG] [Thread-10924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:32:32.193 [DEBUG] [Thread-10924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:32:32.193 [DEBUG] [Thread-10924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:32:32.194 [DEBUG] [Thread-10924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:32:32.212 [INFO] [Thread-10924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:32:32.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:32:32.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:32:33.027 [DEBUG] [Thread-10924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:32:33.028 [DEBUG] [Thread-10924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:32:33.076 [DEBUG] [Thread-10924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:32:33.076 [DEBUG] [Thread-10924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:32:33.085 [DEBUG] [Thread-10924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:32:33.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:32:33.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:32:33.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:32:33.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:32:33.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:32:33.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:32:33.122 [DEBUG] [Thread-10924] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:32:36.167 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:38.884 [DEBUG] [Thread-10926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:46.581 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:53.935 [DEBUG] [Thread-10927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:56.522 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:56.523 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:32:56.975 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:33:03.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:33:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:33:03.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 32, 43), 29.14, 13.09, 0.0, 9.35, 19.32, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:33:03.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:32:43
2025-11-26T03:33:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:33:04.093 [DEBUG] [Thread-10928] [transport.py] [_log()] starting thread (client mode): 0x70de5e40
2025-11-26T03:33:04.093 [DEBUG] [Thread-10928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:33:04.113 [DEBUG] [Thread-10928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:33:04.113 [INFO] [Thread-10928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:33:04.116 [DEBUG] [Thread-10928] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:33:04.116 [DEBUG] [Thread-10928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:33:04.116 [DEBUG] [Thread-10928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:33:04.116 [DEBUG] [Thread-10928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] client lang: <none>
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] server lang: <none>
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] kex follows: False
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:33:04.117 [DEBUG] [Thread-10928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:33:04.118 [DEBUG] [Thread-10928] [transport.py] [_log()] Compression: none
2025-11-26T03:33:04.118 [DEBUG] [Thread-10928] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:33:04.136 [DEBUG] [Thread-10928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:33:04.137 [DEBUG] [Thread-10928] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:33:04.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:33:04.138 [DEBUG] [Thread-10928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:33:04.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:33:04.140 [DEBUG] [Thread-10928] [transport.py] [_log()] userauth is OK
2025-11-26T03:33:04.140 [DEBUG] [Thread-10928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:33:04.140 [DEBUG] [Thread-10928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:33:04.140 [DEBUG] [Thread-10928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:33:04.140 [DEBUG] [Thread-10928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:33:04.158 [INFO] [Thread-10928] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:33:04.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:33:04.965 [DEBUG] [Thread-10928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:33:04.966 [DEBUG] [Thread-10928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:33:04.966 [DEBUG] [Thread-10928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:33:05.007 [DEBUG] [Thread-10928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:33:05.007 [DEBUG] [Thread-10928] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:33:05.010 [DEBUG] [Thread-10928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:33:05.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:33:05.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:33:05.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:33:05.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:33:05.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:33:05.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:33:05.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:33:05.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:33:05.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:33:05.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.064332 -999.00  +20.30   8.14     17   -5.10 1 1 1 1 1     0    0 25.62 -23.36 ZNESW 9.6 8.1 69.3 11.8 19.9 -26.3 19.8 -25.7 19.4 -24.3 19.7 -25.4
2025-11-26T03:33:05.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:33:05.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:33:05.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.064332
2025-11-26T03:33:05.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:33:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:33:05.037 [DEBUG] [Thread-10928] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:33:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:33:05.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:33:05.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:33:05.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:32:43', tmtdew=29.14, humidity=13.09, cloud=0.0, wind=9.35, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:32:43', seeing=1.43, atlas_timestamp='2025-11-26T01:32:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:30:00')
2025-11-26T03:33:05.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:33:05.149 [DEBUG] [Thread-10931] [transport.py] [_log()] starting thread (client mode): 0x70de6a40
2025-11-26T03:33:05.149 [DEBUG] [Thread-10931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:33:05.164 [DEBUG] [Thread-10931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:33:05.164 [INFO] [Thread-10931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] client lang: <none>
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] server lang: <none>
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] kex follows: False
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:33:05.172 [DEBUG] [Thread-10931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:33:05.173 [DEBUG] [Thread-10931] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:33:05.173 [DEBUG] [Thread-10931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:33:05.173 [DEBUG] [Thread-10931] [transport.py] [_log()] Compression: none
2025-11-26T03:33:05.173 [DEBUG] [Thread-10931] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:33:05.229 [DEBUG] [Thread-10931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:33:05.229 [DEBUG] [Thread-10931] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:33:05.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:33:05.230 [DEBUG] [Thread-10931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:33:05.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:33:05.285 [DEBUG] [Thread-10931] [transport.py] [_log()] userauth is OK
2025-11-26T03:33:05.285 [DEBUG] [Thread-10931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:33:05.286 [DEBUG] [Thread-10931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:33:05.286 [DEBUG] [Thread-10931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:33:05.286 [DEBUG] [Thread-10931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:33:05.305 [INFO] [Thread-10931] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:33:05.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:33:05.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:33:06.187 [DEBUG] [Thread-10931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:33:06.187 [DEBUG] [Thread-10931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:33:06.235 [DEBUG] [Thread-10931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:33:06.235 [DEBUG] [Thread-10931] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:33:06.244 [DEBUG] [Thread-10931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:33:06.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:33:06.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:33:06.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:33:06.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:33:06.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:33:06.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:33:06.278 [DEBUG] [Thread-10931] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:33:07.373 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:08.972 [DEBUG] [Thread-10933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:17.773 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:24.023 [DEBUG] [Thread-10934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:25.566 [DEBUG] [Thread-10935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:28.169 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:36.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:33:36.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:33:36.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:33:36.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 33, 15), 29.14, 13.08, 0.0, 9.3, 19.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:33:36.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:33:15
2025-11-26T03:33:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:33:37.215 [DEBUG] [Thread-10936] [transport.py] [_log()] starting thread (client mode): 0x70de5930
2025-11-26T03:33:37.215 [DEBUG] [Thread-10936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:33:37.237 [DEBUG] [Thread-10936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:33:37.237 [INFO] [Thread-10936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:33:37.240 [DEBUG] [Thread-10936] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] client lang: <none>
2025-11-26T03:33:37.241 [DEBUG] [Thread-10936] [transport.py] [_log()] server lang: <none>
2025-11-26T03:33:37.242 [DEBUG] [Thread-10936] [transport.py] [_log()] kex follows: False
2025-11-26T03:33:37.242 [DEBUG] [Thread-10936] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:33:37.242 [DEBUG] [Thread-10936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:33:37.242 [DEBUG] [Thread-10936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:33:37.242 [DEBUG] [Thread-10936] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:33:37.242 [DEBUG] [Thread-10936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:33:37.242 [DEBUG] [Thread-10936] [transport.py] [_log()] Compression: none
2025-11-26T03:33:37.242 [DEBUG] [Thread-10936] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:33:37.261 [DEBUG] [Thread-10936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:33:37.262 [DEBUG] [Thread-10936] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:33:37.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:33:37.263 [DEBUG] [Thread-10936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:33:37.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:33:37.265 [DEBUG] [Thread-10936] [transport.py] [_log()] userauth is OK
2025-11-26T03:33:37.265 [DEBUG] [Thread-10936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:33:37.266 [DEBUG] [Thread-10936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:33:37.266 [DEBUG] [Thread-10936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:33:37.266 [DEBUG] [Thread-10936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:33:37.287 [INFO] [Thread-10936] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:33:37.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:33:37.941 [DEBUG] [Thread-10936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:33:37.941 [DEBUG] [Thread-10936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:33:37.942 [DEBUG] [Thread-10936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:33:37.981 [DEBUG] [Thread-10936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:33:37.982 [DEBUG] [Thread-10936] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:33:37.985 [DEBUG] [Thread-10936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:33:37.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:33:37.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:33:37.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:33:38.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:33:38.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:33:38.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:33:38.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:33:38.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:33:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:33:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.064679 -999.00  +20.30  10.89     17   -5.10 1 1 1 1 1     0    0 25.32 -24.49 ZNESW 9.5 10.9 70.2 11.7 19.8 -26.3 19.8 -25.8 19.4 -24.3 19.7 -25.5
2025-11-26T03:33:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:33:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:33:38.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.064679
2025-11-26T03:33:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:33:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:33:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:33:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:33:38.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:33:38.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:33:15', tmtdew=29.14, humidity=13.08, cloud=0.0, wind=9.3, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:33:15', seeing=1.48, atlas_timestamp='2025-11-26T01:33:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:30:00')
2025-11-26T03:33:38.010 [DEBUG] [Thread-10936] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:33:38.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:33:38.106 [DEBUG] [Thread-10939] [transport.py] [_log()] starting thread (client mode): 0x70de5cf0
2025-11-26T03:33:38.107 [DEBUG] [Thread-10939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:33:38.125 [DEBUG] [Thread-10939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:33:38.125 [INFO] [Thread-10939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:33:38.133 [DEBUG] [Thread-10939] [transport.py] [_log()] client lang: <none>
2025-11-26T03:33:38.134 [DEBUG] [Thread-10939] [transport.py] [_log()] server lang: <none>
2025-11-26T03:33:38.134 [DEBUG] [Thread-10939] [transport.py] [_log()] kex follows: False
2025-11-26T03:33:38.134 [DEBUG] [Thread-10939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:33:38.134 [DEBUG] [Thread-10939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:33:38.134 [DEBUG] [Thread-10939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:33:38.134 [DEBUG] [Thread-10939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:33:38.134 [DEBUG] [Thread-10939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:33:38.134 [DEBUG] [Thread-10939] [transport.py] [_log()] Compression: none
2025-11-26T03:33:38.134 [DEBUG] [Thread-10939] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:33:38.190 [DEBUG] [Thread-10939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:33:38.191 [DEBUG] [Thread-10939] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:33:38.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:33:38.192 [DEBUG] [Thread-10939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:33:38.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:33:38.247 [DEBUG] [Thread-10939] [transport.py] [_log()] userauth is OK
2025-11-26T03:33:38.247 [DEBUG] [Thread-10939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:33:38.247 [DEBUG] [Thread-10939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:33:38.248 [DEBUG] [Thread-10939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:33:38.248 [DEBUG] [Thread-10939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:33:38.266 [INFO] [Thread-10939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:33:38.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:33:38.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:33:38.565 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:39.061 [DEBUG] [Thread-10941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:39.084 [DEBUG] [Thread-10939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:33:39.084 [DEBUG] [Thread-10939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:33:39.133 [DEBUG] [Thread-10939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:33:39.133 [DEBUG] [Thread-10939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:33:39.142 [DEBUG] [Thread-10939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:33:39.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:33:39.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:33:39.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:33:39.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:33:39.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:33:39.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:33:39.179 [DEBUG] [Thread-10939] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:33:48.998 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:54.124 [DEBUG] [Thread-10942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:56.728 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:56.728 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:33:59.395 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:09.163 [DEBUG] [Thread-10943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:34:09.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:34:09.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:34:09.807 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:09.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 33, 47), 29.12, 13.11, 0.0, 9.26, 19.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:34:09.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:33:47
2025-11-26T03:34:09.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:34:10.111 [DEBUG] [Thread-10944] [transport.py] [_log()] starting thread (client mode): 0x70d7ce80
2025-11-26T03:34:10.111 [DEBUG] [Thread-10944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:34:10.133 [DEBUG] [Thread-10944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:34:10.133 [INFO] [Thread-10944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:34:10.135 [DEBUG] [Thread-10944] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:34:10.135 [DEBUG] [Thread-10944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:34:10.135 [DEBUG] [Thread-10944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:34:10.135 [DEBUG] [Thread-10944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:34:10.135 [DEBUG] [Thread-10944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:34:10.135 [DEBUG] [Thread-10944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] client lang: <none>
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] server lang: <none>
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] kex follows: False
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:34:10.136 [DEBUG] [Thread-10944] [transport.py] [_log()] Compression: none
2025-11-26T03:34:10.137 [DEBUG] [Thread-10944] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:34:10.154 [DEBUG] [Thread-10944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:34:10.155 [DEBUG] [Thread-10944] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:34:10.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:34:10.156 [DEBUG] [Thread-10944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:34:10.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:34:10.158 [DEBUG] [Thread-10944] [transport.py] [_log()] userauth is OK
2025-11-26T03:34:10.159 [DEBUG] [Thread-10944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:34:10.159 [DEBUG] [Thread-10944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:34:10.159 [DEBUG] [Thread-10944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:34:10.159 [DEBUG] [Thread-10944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:34:10.194 [INFO] [Thread-10944] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:34:10.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:34:10.861 [DEBUG] [Thread-10944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:34:10.861 [DEBUG] [Thread-10944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:34:10.861 [DEBUG] [Thread-10944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:34:10.902 [DEBUG] [Thread-10944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:34:10.902 [DEBUG] [Thread-10944] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:34:10.905 [DEBUG] [Thread-10944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:34:10.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:34:10.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:34:10.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:34:10.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:34:10.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:34:10.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:34:10.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:34:10.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:34:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:34:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.065026 -999.00  +20.30   9.08     17   -5.20 1 1 1 1 1     0    0 25.10 -24.28 ZNESW 9.1 9.1 69.6 11.8 19.8 -26.3 19.7 -25.7 19.4 -24.4 19.7 -25.5
2025-11-26T03:34:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:34:10.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:34:10.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.065026
2025-11-26T03:34:10.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:34:10.931 [DEBUG] [Thread-10944] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:34:10.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:34:10.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:34:10.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:34:10.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:34:10.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:33:47', tmtdew=29.12, humidity=13.11, cloud=0.0, wind=9.26, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:33:47', seeing=1.46, atlas_timestamp='2025-11-26T01:33:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:30:00')
2025-11-26T03:34:11.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:34:11.028 [DEBUG] [Thread-10947] [transport.py] [_log()] starting thread (client mode): 0x70d7c6a0
2025-11-26T03:34:11.028 [DEBUG] [Thread-10947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:34:11.043 [DEBUG] [Thread-10947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:34:11.044 [INFO] [Thread-10947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:34:11.051 [DEBUG] [Thread-10947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:34:11.051 [DEBUG] [Thread-10947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] client lang: <none>
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] server lang: <none>
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] kex follows: False
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] Compression: none
2025-11-26T03:34:11.052 [DEBUG] [Thread-10947] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:34:11.116 [DEBUG] [Thread-10947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:34:11.117 [DEBUG] [Thread-10947] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:34:11.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:34:11.118 [DEBUG] [Thread-10947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:34:11.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:34:11.175 [DEBUG] [Thread-10947] [transport.py] [_log()] userauth is OK
2025-11-26T03:34:11.175 [DEBUG] [Thread-10947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:34:11.176 [DEBUG] [Thread-10947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:34:11.176 [DEBUG] [Thread-10947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:34:11.176 [DEBUG] [Thread-10947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:34:11.195 [INFO] [Thread-10947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:34:11.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:34:11.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:34:12.020 [DEBUG] [Thread-10947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:34:12.020 [DEBUG] [Thread-10947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:34:12.068 [DEBUG] [Thread-10947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:34:12.068 [DEBUG] [Thread-10947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:34:12.076 [DEBUG] [Thread-10947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:34:12.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:34:12.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:34:12.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
2025-11-26T03:34:12.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:34:12.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:34:12.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:34:12.110 [DEBUG] [Thread-10947] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:34:20.226 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:24.199 [DEBUG] [Thread-10949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:25.625 [DEBUG] [Thread-10950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:30.638 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:39.259 [DEBUG] [Thread-10951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:41.039 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:42.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:34:42.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:34:42.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:34:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 34, 19), 29.14, 13.08, 0.0, 9.23, 19.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:34:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:34:19
2025-11-26T03:34:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:34:43.052 [DEBUG] [Thread-10952] [transport.py] [_log()] starting thread (client mode): 0x70de6680
2025-11-26T03:34:43.052 [DEBUG] [Thread-10952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:34:43.072 [DEBUG] [Thread-10952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:34:43.072 [INFO] [Thread-10952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:34:43.076 [DEBUG] [Thread-10952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:34:43.076 [DEBUG] [Thread-10952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:34:43.076 [DEBUG] [Thread-10952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:34:43.076 [DEBUG] [Thread-10952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] client lang: <none>
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] server lang: <none>
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] kex follows: False
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:34:43.077 [DEBUG] [Thread-10952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:34:43.078 [DEBUG] [Thread-10952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:34:43.078 [DEBUG] [Thread-10952] [transport.py] [_log()] Compression: none
2025-11-26T03:34:43.078 [DEBUG] [Thread-10952] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:34:43.098 [DEBUG] [Thread-10952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:34:43.099 [DEBUG] [Thread-10952] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:34:43.099 [DEBUG] [Thread-10952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:34:43.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:34:43.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:34:43.142 [DEBUG] [Thread-10952] [transport.py] [_log()] userauth is OK
2025-11-26T03:34:43.142 [DEBUG] [Thread-10952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:34:43.142 [DEBUG] [Thread-10952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:34:43.142 [DEBUG] [Thread-10952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:34:43.142 [DEBUG] [Thread-10952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:34:43.163 [INFO] [Thread-10952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:34:43.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:34:43.785 [DEBUG] [Thread-10952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:34:43.785 [DEBUG] [Thread-10952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:34:43.786 [DEBUG] [Thread-10952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:34:43.826 [DEBUG] [Thread-10952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:34:43.826 [DEBUG] [Thread-10952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:34:43.830 [DEBUG] [Thread-10952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:34:43.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:34:43.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:34:43.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:34:43.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:34:43.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:34:43.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:34:43.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:34:43.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:34:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:34:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.065373 -999.00  +20.20   8.29     17   -5.10 1 1 1 1 1     0    0 25.15 -23.43 ZNESW 10.7 8.3 110.9 11.3 19.8 -26.0 19.7 -25.7 19.4 -24.5 19.7 -25.5
2025-11-26T03:34:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:34:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:34:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.065373
2025-11-26T03:34:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:34:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:34:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:34:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:34:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:34:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:34:19', tmtdew=29.14, humidity=13.08, cloud=0.0, wind=9.23, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:34:19', seeing=1.41, atlas_timestamp='2025-11-26T01:34:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:30:00')
2025-11-26T03:34:43.856 [DEBUG] [Thread-10952] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:34:43.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:34:43.954 [DEBUG] [Thread-10955] [transport.py] [_log()] starting thread (client mode): 0x70de6410
2025-11-26T03:34:43.954 [DEBUG] [Thread-10955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:34:43.971 [DEBUG] [Thread-10955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:34:43.972 [INFO] [Thread-10955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:34:43.979 [DEBUG] [Thread-10955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:34:43.979 [DEBUG] [Thread-10955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:34:43.979 [DEBUG] [Thread-10955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:34:43.979 [DEBUG] [Thread-10955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:34:43.979 [DEBUG] [Thread-10955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] client lang: <none>
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] server lang: <none>
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] kex follows: False
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] Compression: none
2025-11-26T03:34:43.980 [DEBUG] [Thread-10955] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:34:44.042 [DEBUG] [Thread-10955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:34:44.043 [DEBUG] [Thread-10955] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:34:44.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:34:44.044 [DEBUG] [Thread-10955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:34:44.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:34:44.099 [DEBUG] [Thread-10955] [transport.py] [_log()] userauth is OK
2025-11-26T03:34:44.100 [DEBUG] [Thread-10955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:34:44.100 [DEBUG] [Thread-10955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:34:44.100 [DEBUG] [Thread-10955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:34:44.100 [DEBUG] [Thread-10955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:34:44.118 [INFO] [Thread-10955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:34:44.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:34:44.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:34:44.940 [DEBUG] [Thread-10955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:34:44.940 [DEBUG] [Thread-10955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:34:44.990 [DEBUG] [Thread-10955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:34:44.991 [DEBUG] [Thread-10955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:34:44.999 [DEBUG] [Thread-10955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:34:45.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:34:45.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:34:45.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:34:45.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:34:45.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:34:45.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:34:45.034 [DEBUG] [Thread-10955] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:34:51.440 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:54.292 [DEBUG] [Thread-10957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:56.932 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:34:56.933 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:01.836 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:09.343 [DEBUG] [Thread-10958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:12.233 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:15.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:35:15.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:35:15.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:35:15.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 34, 51), 29.04, 13.14, 0.0, 10.92, 19.28, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:35:15.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:34:51
2025-11-26T03:35:15.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:35:15.997 [DEBUG] [Thread-10959] [transport.py] [_log()] starting thread (client mode): 0x70df81c0
2025-11-26T03:35:15.997 [DEBUG] [Thread-10959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:35:16.018 [DEBUG] [Thread-10959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:35:16.018 [INFO] [Thread-10959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:35:16.021 [DEBUG] [Thread-10959] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:35:16.021 [DEBUG] [Thread-10959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:35:16.021 [DEBUG] [Thread-10959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:35:16.021 [DEBUG] [Thread-10959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:35:16.021 [DEBUG] [Thread-10959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:35:16.021 [DEBUG] [Thread-10959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:35:16.021 [DEBUG] [Thread-10959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:35:16.021 [DEBUG] [Thread-10959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] client lang: <none>
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] server lang: <none>
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] kex follows: False
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] Compression: none
2025-11-26T03:35:16.022 [DEBUG] [Thread-10959] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:35:16.039 [DEBUG] [Thread-10959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:35:16.039 [DEBUG] [Thread-10959] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:35:16.040 [DEBUG] [Thread-10959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:35:16.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:35:16.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:35:16.042 [DEBUG] [Thread-10959] [transport.py] [_log()] userauth is OK
2025-11-26T03:35:16.042 [DEBUG] [Thread-10959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:35:16.042 [DEBUG] [Thread-10959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:35:16.042 [DEBUG] [Thread-10959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:35:16.042 [DEBUG] [Thread-10959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:35:16.079 [INFO] [Thread-10959] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:35:16.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:35:16.684 [DEBUG] [Thread-10959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:35:16.684 [DEBUG] [Thread-10959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:35:16.685 [DEBUG] [Thread-10959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:35:16.726 [DEBUG] [Thread-10959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:35:16.726 [DEBUG] [Thread-10959] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:35:16.730 [DEBUG] [Thread-10959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:35:16.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:35:16.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:35:16.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:35:16.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:35:16.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:35:16.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:35:16.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:35:16.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:35:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:35:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.066067 -999.00  +20.20   6.57     17   -5.10 1 1 1 1 1     0    0 25.34 -27.39 ZNESW 6.1 6.6 108.8 12.8 19.8 -26.2 19.7 -25.7 19.4 -24.4 19.7 -25.4
2025-11-26T03:35:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:35:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:35:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.066067
2025-11-26T03:35:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:35:16.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:35:16.756 [DEBUG] [Thread-10959] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:35:16.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:35:16.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:35:16.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:35:16.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:34:51', tmtdew=29.04, humidity=13.14, cloud=0.0, wind=10.92, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:34:51', seeing=1.29, atlas_timestamp='2025-11-26T01:35:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:33:00')
2025-11-26T03:35:16.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:35:16.856 [DEBUG] [Thread-10962] [transport.py] [_log()] starting thread (client mode): 0x70dfb670
2025-11-26T03:35:16.856 [DEBUG] [Thread-10962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:35:16.870 [DEBUG] [Thread-10962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:35:16.870 [INFO] [Thread-10962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:35:16.878 [DEBUG] [Thread-10962] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:35:16.878 [DEBUG] [Thread-10962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] client lang: <none>
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] server lang: <none>
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] kex follows: False
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:35:16.879 [DEBUG] [Thread-10962] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:35:16.880 [DEBUG] [Thread-10962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:35:16.880 [DEBUG] [Thread-10962] [transport.py] [_log()] Compression: none
2025-11-26T03:35:16.880 [DEBUG] [Thread-10962] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:35:16.935 [DEBUG] [Thread-10962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:35:16.935 [DEBUG] [Thread-10962] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:35:16.935 [DEBUG] [Thread-10962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:35:16.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:35:16.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:35:16.992 [DEBUG] [Thread-10962] [transport.py] [_log()] userauth is OK
2025-11-26T03:35:16.992 [DEBUG] [Thread-10962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:35:16.992 [DEBUG] [Thread-10962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:35:16.992 [DEBUG] [Thread-10962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:35:16.992 [DEBUG] [Thread-10962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:35:17.013 [INFO] [Thread-10962] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:35:17.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:35:17.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:35:17.828 [DEBUG] [Thread-10962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:35:17.829 [DEBUG] [Thread-10962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:35:17.876 [DEBUG] [Thread-10962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:35:17.877 [DEBUG] [Thread-10962] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:35:17.886 [DEBUG] [Thread-10962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:35:17.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:35:17.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:35:17.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:35:17.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:35:17.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:35:17.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:35:17.922 [DEBUG] [Thread-10962] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:35:22.626 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:24.374 [DEBUG] [Thread-10964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:25.695 [DEBUG] [Thread-10965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:33.038 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:39.424 [DEBUG] [Thread-10966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:43.459 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:35:47.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:35:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:35:48.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 35, 23), 29.06, 13.13, 0.0, 11.56, 19.32, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:35:48.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:35:23
2025-11-26T03:35:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:35:48.916 [DEBUG] [Thread-10967] [transport.py] [_log()] starting thread (client mode): 0x70df8ca0
2025-11-26T03:35:48.916 [DEBUG] [Thread-10967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:35:48.937 [DEBUG] [Thread-10967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:35:48.937 [INFO] [Thread-10967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] client lang: <none>
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] server lang: <none>
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] kex follows: False
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] Compression: none
2025-11-26T03:35:48.940 [DEBUG] [Thread-10967] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:35:48.956 [DEBUG] [Thread-10967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:35:48.956 [DEBUG] [Thread-10967] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:35:48.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:35:48.956 [DEBUG] [Thread-10967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:35:48.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:35:48.957 [DEBUG] [Thread-10967] [transport.py] [_log()] userauth is OK
2025-11-26T03:35:48.957 [DEBUG] [Thread-10967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:35:48.957 [DEBUG] [Thread-10967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:35:48.957 [DEBUG] [Thread-10967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:35:48.957 [DEBUG] [Thread-10967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:35:48.966 [INFO] [Thread-10967] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:35:48.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:35:49.603 [DEBUG] [Thread-10967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:35:49.603 [DEBUG] [Thread-10967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:35:49.603 [DEBUG] [Thread-10967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:35:49.644 [DEBUG] [Thread-10967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:35:49.644 [DEBUG] [Thread-10967] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:35:49.647 [DEBUG] [Thread-10967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:35:49.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:35:49.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:35:49.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:35:49.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:35:49.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:35:49.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:35:49.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.066415 -999.00  +20.20  10.14     17   -5.10 1 1 1 1 1     0    0 25.51 -28.71 ZNESW 7.9 10.1 74.0 12.6 19.8 -26.3 19.7 -25.7 19.4 -24.5 19.6 -25.4
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.066415
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:35:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:35:23', tmtdew=29.06, humidity=13.13, cloud=0.0, wind=11.56, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:35:23', seeing=1.14, atlas_timestamp='2025-11-26T01:35:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:33:00')
2025-11-26T03:35:49.664 [DEBUG] [Thread-10967] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:35:49.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:35:49.747 [DEBUG] [Thread-10970] [transport.py] [_log()] starting thread (client mode): 0x70dfa890
2025-11-26T03:35:49.747 [DEBUG] [Thread-10970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:35:49.762 [DEBUG] [Thread-10970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:35:49.762 [INFO] [Thread-10970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] client lang: <none>
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] server lang: <none>
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] kex follows: False
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] Compression: none
2025-11-26T03:35:49.770 [DEBUG] [Thread-10970] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:35:49.827 [DEBUG] [Thread-10970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:35:49.827 [DEBUG] [Thread-10970] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:35:49.827 [DEBUG] [Thread-10970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:35:49.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:35:49.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:35:49.884 [DEBUG] [Thread-10970] [transport.py] [_log()] userauth is OK
2025-11-26T03:35:49.884 [DEBUG] [Thread-10970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:35:49.884 [DEBUG] [Thread-10970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:35:49.884 [DEBUG] [Thread-10970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:35:49.884 [DEBUG] [Thread-10970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:35:49.898 [INFO] [Thread-10970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:35:49.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:35:49.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:35:50.721 [DEBUG] [Thread-10970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:35:50.721 [DEBUG] [Thread-10970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:35:50.769 [DEBUG] [Thread-10970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:35:50.769 [DEBUG] [Thread-10970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:35:50.777 [DEBUG] [Thread-10970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:35:50.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:35:50.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:35:50.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:35:50.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:35:50.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:35:50.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:35:50.809 [DEBUG] [Thread-10970] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:35:53.853 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:54.456 [DEBUG] [Thread-10972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:57.135 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:35:57.136 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:04.285 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:09.508 [DEBUG] [Thread-10973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:14.695 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:20.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:36:20.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:36:20.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:36:21.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 35, 55), 29.07, 13.11, 0.0, 9.39, 19.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:36:21.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:35:55
2025-11-26T03:36:21.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:36:21.779 [DEBUG] [Thread-10974] [transport.py] [_log()] starting thread (client mode): 0x70df80d0
2025-11-26T03:36:21.779 [DEBUG] [Thread-10974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:36:21.793 [DEBUG] [Thread-10974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:36:21.793 [INFO] [Thread-10974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] client lang: <none>
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] server lang: <none>
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] kex follows: False
2025-11-26T03:36:21.794 [DEBUG] [Thread-10974] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:36:21.795 [DEBUG] [Thread-10974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:36:21.795 [DEBUG] [Thread-10974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:36:21.795 [DEBUG] [Thread-10974] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:36:21.795 [DEBUG] [Thread-10974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:36:21.795 [DEBUG] [Thread-10974] [transport.py] [_log()] Compression: none
2025-11-26T03:36:21.795 [DEBUG] [Thread-10974] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:36:21.804 [DEBUG] [Thread-10974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:36:21.804 [DEBUG] [Thread-10974] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:36:21.805 [DEBUG] [Thread-10974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:36:21.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:36:21.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:36:21.806 [DEBUG] [Thread-10974] [transport.py] [_log()] userauth is OK
2025-11-26T03:36:21.806 [DEBUG] [Thread-10974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:36:21.806 [DEBUG] [Thread-10974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:36:21.806 [DEBUG] [Thread-10974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:36:21.806 [DEBUG] [Thread-10974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:36:21.824 [INFO] [Thread-10974] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:36:21.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:36:22.383 [DEBUG] [Thread-10974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:36:22.383 [DEBUG] [Thread-10974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:36:22.384 [DEBUG] [Thread-10974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:36:22.423 [DEBUG] [Thread-10974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:36:22.424 [DEBUG] [Thread-10974] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:36:22.427 [DEBUG] [Thread-10974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:36:22.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:36:22.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:36:22.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:36:22.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:36:22.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:36:22.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:36:22.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:36:22.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:36:22.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:36:22.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.066762 -999.00  +20.20  11.06     17   -5.10 1 1 1 1 1     0    0 24.57 -29.28 ZNESW 8.4 11.1 70.8 11.6 19.8 -26.4 19.7 -25.6 19.4 -24.0 19.6 -25.4
2025-11-26T03:36:22.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:36:22.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:36:22.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.066762
2025-11-26T03:36:22.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:36:22.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:36:22.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:36:22.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:36:22.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:36:22.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:35:55', tmtdew=29.07, humidity=13.11, cloud=0.0, wind=9.39, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:35:55', seeing=1.14, atlas_timestamp='2025-11-26T01:36:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:33:00')
2025-11-26T03:36:22.455 [DEBUG] [Thread-10974] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:36:22.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:36:22.553 [DEBUG] [Thread-10977] [transport.py] [_log()] starting thread (client mode): 0x70dfada0
2025-11-26T03:36:22.553 [DEBUG] [Thread-10977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:36:22.568 [DEBUG] [Thread-10977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:36:22.569 [INFO] [Thread-10977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:36:22.576 [DEBUG] [Thread-10977] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:36:22.576 [DEBUG] [Thread-10977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:36:22.577 [DEBUG] [Thread-10977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:36:22.577 [DEBUG] [Thread-10977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:36:22.577 [DEBUG] [Thread-10977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:36:22.577 [DEBUG] [Thread-10977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:36:22.577 [DEBUG] [Thread-10977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:36:22.577 [DEBUG] [Thread-10977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:36:22.577 [DEBUG] [Thread-10977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:36:22.577 [DEBUG] [Thread-10977] [transport.py] [_log()] client lang: <none>
2025-11-26T03:36:22.577 [DEBUG] [Thread-10977] [transport.py] [_log()] server lang: <none>
2025-11-26T03:36:22.578 [DEBUG] [Thread-10977] [transport.py] [_log()] kex follows: False
2025-11-26T03:36:22.578 [DEBUG] [Thread-10977] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:36:22.578 [DEBUG] [Thread-10977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:36:22.578 [DEBUG] [Thread-10977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:36:22.578 [DEBUG] [Thread-10977] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:36:22.578 [DEBUG] [Thread-10977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:36:22.578 [DEBUG] [Thread-10977] [transport.py] [_log()] Compression: none
2025-11-26T03:36:22.578 [DEBUG] [Thread-10977] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:36:22.633 [DEBUG] [Thread-10977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:36:22.633 [DEBUG] [Thread-10977] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:36:22.634 [DEBUG] [Thread-10977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:36:22.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:36:22.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:36:22.690 [DEBUG] [Thread-10977] [transport.py] [_log()] userauth is OK
2025-11-26T03:36:22.690 [DEBUG] [Thread-10977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:36:22.690 [DEBUG] [Thread-10977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:36:22.690 [DEBUG] [Thread-10977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:36:22.690 [DEBUG] [Thread-10977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:36:22.709 [INFO] [Thread-10977] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:36:22.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:36:22.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:36:23.559 [DEBUG] [Thread-10977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:36:23.560 [DEBUG] [Thread-10977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:36:23.607 [DEBUG] [Thread-10977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:36:23.607 [DEBUG] [Thread-10977] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:36:23.615 [DEBUG] [Thread-10977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:36:23.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:36:23.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:36:23.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:36:23.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:36:23.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:36:23.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:36:23.649 [DEBUG] [Thread-10977] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:36:24.547 [DEBUG] [Thread-10979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:25.132 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:25.750 [DEBUG] [Thread-10980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:35.554 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:39.597 [DEBUG] [Thread-10981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:45.969 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:53.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:36:53.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:36:53.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:36:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 36, 27), 29.02, 13.17, 0.0, 9.11, 19.33, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:36:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:36:27
2025-11-26T03:36:54.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:36:54.599 [DEBUG] [Thread-10982] [transport.py] [_log()] starting thread (client mode): 0x70d7f8e0
2025-11-26T03:36:54.599 [DEBUG] [Thread-10982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:36:54.621 [DEBUG] [Thread-10982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:36:54.621 [INFO] [Thread-10982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:36:54.622 [DEBUG] [Thread-10982] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:36:54.622 [DEBUG] [Thread-10982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] client lang: <none>
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] server lang: <none>
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] kex follows: False
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] Compression: none
2025-11-26T03:36:54.623 [DEBUG] [Thread-10982] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:36:54.630 [DEBUG] [Thread-10984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:54.632 [DEBUG] [Thread-10982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:36:54.633 [DEBUG] [Thread-10982] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:36:54.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:36:54.633 [DEBUG] [Thread-10982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:36:54.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:36:54.635 [DEBUG] [Thread-10982] [transport.py] [_log()] userauth is OK
2025-11-26T03:36:54.635 [DEBUG] [Thread-10982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:36:54.635 [DEBUG] [Thread-10982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:36:54.635 [DEBUG] [Thread-10982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:36:54.635 [DEBUG] [Thread-10982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:36:54.654 [INFO] [Thread-10982] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:36:54.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:36:55.231 [DEBUG] [Thread-10982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:36:55.231 [DEBUG] [Thread-10982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:36:55.231 [DEBUG] [Thread-10982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:36:55.272 [DEBUG] [Thread-10982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:36:55.272 [DEBUG] [Thread-10982] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:36:55.275 [DEBUG] [Thread-10982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:36:55.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:36:55.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:36:55.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:36:55.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:36:55.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:36:55.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:36:55.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:36:55.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:36:55.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:36:55.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.067109 -999.00  +20.30   7.60     17   -5.10 1 1 1 1 1     0    0 24.43 -31.58 ZNESW 10.0 7.6 84.6 11.6 19.8 -26.1 19.7 -25.6 19.4 -24.2 19.7 -25.4
2025-11-26T03:36:55.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:36:55.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:36:55.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.067109
2025-11-26T03:36:55.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:36:55.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:36:55.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:36:55.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:36:55.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:36:55.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:36:27', tmtdew=29.02, humidity=13.17, cloud=0.0, wind=9.11, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:36:27', seeing=1.2, atlas_timestamp='2025-11-26T01:36:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:33:00')
2025-11-26T03:36:55.303 [DEBUG] [Thread-10982] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:36:55.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:36:55.399 [DEBUG] [Thread-10986] [transport.py] [_log()] starting thread (client mode): 0x70d7d1b0
2025-11-26T03:36:55.399 [DEBUG] [Thread-10986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:36:55.413 [DEBUG] [Thread-10986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:36:55.413 [INFO] [Thread-10986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:36:55.421 [DEBUG] [Thread-10986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:36:55.421 [DEBUG] [Thread-10986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:36:55.421 [DEBUG] [Thread-10986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:36:55.421 [DEBUG] [Thread-10986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:36:55.421 [DEBUG] [Thread-10986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] client lang: <none>
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] server lang: <none>
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] kex follows: False
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:36:55.422 [DEBUG] [Thread-10986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:36:55.423 [DEBUG] [Thread-10986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:36:55.423 [DEBUG] [Thread-10986] [transport.py] [_log()] Compression: none
2025-11-26T03:36:55.423 [DEBUG] [Thread-10986] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:36:55.482 [DEBUG] [Thread-10986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:36:55.482 [DEBUG] [Thread-10986] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:36:55.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:36:55.483 [DEBUG] [Thread-10986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:36:55.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:36:55.537 [DEBUG] [Thread-10986] [transport.py] [_log()] userauth is OK
2025-11-26T03:36:55.538 [DEBUG] [Thread-10986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:36:55.538 [DEBUG] [Thread-10986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:36:55.538 [DEBUG] [Thread-10986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:36:55.538 [DEBUG] [Thread-10986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:36:55.557 [INFO] [Thread-10986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:36:55.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:36:55.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:36:56.369 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:56.377 [DEBUG] [Thread-10986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:36:56.377 [DEBUG] [Thread-10986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:36:56.426 [DEBUG] [Thread-10986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:36:56.426 [DEBUG] [Thread-10986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:36:56.435 [DEBUG] [Thread-10986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:36:56.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:36:56.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:36:56.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:36:56.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:36:56.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:36:56.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:36:56.471 [DEBUG] [Thread-10986] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:36:57.337 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:36:57.338 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:06.760 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:09.662 [DEBUG] [Thread-10988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:17.179 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:24.723 [DEBUG] [Thread-10989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:25.806 [DEBUG] [Thread-10990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:26.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:37:26.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:37:26.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:37:27.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 36, 59), 29.04, 13.14, 0.0, 8.91, 19.33, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:37:27.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:36:59
2025-11-26T03:37:27.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:37:27.430 [DEBUG] [Thread-10991] [transport.py] [_log()] starting thread (client mode): 0x70d7e800
2025-11-26T03:37:27.430 [DEBUG] [Thread-10991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:37:27.451 [DEBUG] [Thread-10991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:37:27.452 [INFO] [Thread-10991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:37:27.454 [DEBUG] [Thread-10991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] client lang: <none>
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] server lang: <none>
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] kex follows: False
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] Compression: none
2025-11-26T03:37:27.455 [DEBUG] [Thread-10991] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:37:27.463 [DEBUG] [Thread-10991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:37:27.464 [DEBUG] [Thread-10991] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:37:27.464 [DEBUG] [Thread-10991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:37:27.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:37:27.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:37:27.466 [DEBUG] [Thread-10991] [transport.py] [_log()] userauth is OK
2025-11-26T03:37:27.467 [DEBUG] [Thread-10991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:37:27.467 [DEBUG] [Thread-10991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:37:27.467 [DEBUG] [Thread-10991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:37:27.467 [DEBUG] [Thread-10991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:37:27.485 [INFO] [Thread-10991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:37:27.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:37:27.592 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:28.116 [DEBUG] [Thread-10991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:37:28.116 [DEBUG] [Thread-10991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:37:28.117 [DEBUG] [Thread-10991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:37:28.157 [DEBUG] [Thread-10991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:37:28.157 [DEBUG] [Thread-10991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:37:28.162 [DEBUG] [Thread-10991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:37:28.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:37:28.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:37:28.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:37:28.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:37:28.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:37:28.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:37:28.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:37:28.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:37:28.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:37:28.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.067109 -999.00  +20.30   7.60     17   -5.10 1 1 1 1 1     0    0 24.43 -31.58 ZNESW 10.0 7.6 84.6 11.6 19.8 -26.1 19.7 -25.6 19.4 -24.2 19.7 -25.4
2025-11-26T03:37:28.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:37:28.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:37:28.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.067109
2025-11-26T03:37:28.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:37:28.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:37:28.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:37:28.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:37:28.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:37:28.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:36:59', tmtdew=29.04, humidity=13.14, cloud=0.0, wind=8.91, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:36:59', seeing=1.2, atlas_timestamp='2025-11-26T01:36:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:33:00')
2025-11-26T03:37:28.181 [DEBUG] [Thread-10991] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:37:28.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:37:28.278 [DEBUG] [Thread-10994] [transport.py] [_log()] starting thread (client mode): 0x70dfa650
2025-11-26T03:37:28.278 [DEBUG] [Thread-10994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:37:28.293 [DEBUG] [Thread-10994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:37:28.293 [INFO] [Thread-10994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:37:28.302 [DEBUG] [Thread-10994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:37:28.302 [DEBUG] [Thread-10994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:37:28.302 [DEBUG] [Thread-10994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:37:28.302 [DEBUG] [Thread-10994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] client lang: <none>
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] server lang: <none>
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] kex follows: False
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] Compression: none
2025-11-26T03:37:28.303 [DEBUG] [Thread-10994] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:37:28.362 [DEBUG] [Thread-10994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:37:28.363 [DEBUG] [Thread-10994] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:37:28.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:37:28.364 [DEBUG] [Thread-10994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:37:28.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:37:28.418 [DEBUG] [Thread-10994] [transport.py] [_log()] userauth is OK
2025-11-26T03:37:28.419 [DEBUG] [Thread-10994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:37:28.419 [DEBUG] [Thread-10994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:37:28.419 [DEBUG] [Thread-10994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:37:28.419 [DEBUG] [Thread-10994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:37:28.444 [INFO] [Thread-10994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:37:28.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:37:28.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:37:29.264 [DEBUG] [Thread-10994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:37:29.264 [DEBUG] [Thread-10994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:37:29.312 [DEBUG] [Thread-10994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:37:29.312 [DEBUG] [Thread-10994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:37:29.321 [DEBUG] [Thread-10994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:37:29.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:37:29.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:37:29.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:37:29.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:37:29.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:37:29.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:37:29.358 [DEBUG] [Thread-10994] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:37:38.005 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:39.760 [DEBUG] [Thread-10996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:48.427 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:54.801 [DEBUG] [Thread-10997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:57.540 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:57.542 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:58.839 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:37:59.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:37:59.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:37:59.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:38:00.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 37, 31), 29.04, 13.14, 0.0, 9.28, 19.37, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:38:00.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:37:31
2025-11-26T03:38:00.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:38:00.319 [DEBUG] [Thread-10998] [transport.py] [_log()] starting thread (client mode): 0x70dfa7a0
2025-11-26T03:38:00.319 [DEBUG] [Thread-10998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:38:00.339 [DEBUG] [Thread-10998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:38:00.339 [INFO] [Thread-10998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:38:00.342 [DEBUG] [Thread-10998] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] client lang: <none>
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] server lang: <none>
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] kex follows: False
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] Compression: none
2025-11-26T03:38:00.343 [DEBUG] [Thread-10998] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:38:00.364 [DEBUG] [Thread-10998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:38:00.365 [DEBUG] [Thread-10998] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:38:00.365 [DEBUG] [Thread-10998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:38:00.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:38:00.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:38:00.367 [DEBUG] [Thread-10998] [transport.py] [_log()] userauth is OK
2025-11-26T03:38:00.367 [DEBUG] [Thread-10998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:38:00.367 [DEBUG] [Thread-10998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:38:00.367 [DEBUG] [Thread-10998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:38:00.368 [DEBUG] [Thread-10998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:38:00.392 [INFO] [Thread-10998] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:38:00.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:38:01.051 [DEBUG] [Thread-10998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:38:01.051 [DEBUG] [Thread-10998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:38:01.052 [DEBUG] [Thread-10998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:38:01.093 [DEBUG] [Thread-10998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:38:01.093 [DEBUG] [Thread-10998] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:38:01.096 [DEBUG] [Thread-10998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:38:01.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:38:01.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:38:01.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:38:01.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:38:01.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:38:01.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:38:01.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:38:01.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:38:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:38:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.067457 -999.00  +20.30   7.73     17   -5.00 1 1 1 1 1     0    0 24.64 -37.85 ZNESW 6.3 7.7 93.1 11.4 19.8 -26.3 19.7 -25.6 19.4 -24.2 19.6 -25.3
2025-11-26T03:38:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:38:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:38:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.067457
2025-11-26T03:38:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:38:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:38:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:38:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:38:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:38:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:37:31', tmtdew=29.04, humidity=13.14, cloud=0.0, wind=9.28, temperature=19.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:37:31', seeing=1.24, atlas_timestamp='2025-11-26T01:37:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051750000000000185, -0.036749999999999616, -0.011749999999999261, -0.033500000000000085, 0.010500000000000398, 0.012250000000001648, -0.030000000000001137, -0.006750000000000256, 0.0519999999999996, -0.019999999999999574, -0.03275000000000006, -0.0009999999999994458, 0.038000000000000256, 0.028750000000000497, -0.048500000000000654, 0.0019999999999988916, 0.021749999999999048, 0.006499999999999062, -0.05200000000000138, 0.009249999999999758, 0.06999999999999851, 0.045249999999999346, -0.0067499999999984794, 0.012750000000000483, 0.009999999999999787, 0.0024999999999995026, 0.0072499999999990905, 0.012000000000000455, 0.14100000000000001, 0.036000000000001364, 0.05900000000000105, 0.03049999999999997, -0.0027500000000006963], zp_timestamp='2025-11-26T01:33:00')
2025-11-26T03:38:01.124 [DEBUG] [Thread-10998] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:38:01.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:38:01.221 [DEBUG] [Thread-11001] [transport.py] [_log()] starting thread (client mode): 0x70d7da80
2025-11-26T03:38:01.221 [DEBUG] [Thread-11001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:38:01.236 [DEBUG] [Thread-11001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:38:01.236 [INFO] [Thread-11001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:38:01.244 [DEBUG] [Thread-11001] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:38:01.244 [DEBUG] [Thread-11001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:38:01.244 [DEBUG] [Thread-11001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:38:01.244 [DEBUG] [Thread-11001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:38:01.245 [DEBUG] [Thread-11001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:38:01.245 [DEBUG] [Thread-11001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:38:01.245 [DEBUG] [Thread-11001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:38:01.245 [DEBUG] [Thread-11001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:38:01.245 [DEBUG] [Thread-11001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:38:01.245 [DEBUG] [Thread-11001] [transport.py] [_log()] client lang: <none>
2025-11-26T03:38:01.245 [DEBUG] [Thread-11001] [transport.py] [_log()] server lang: <none>
2025-11-26T03:38:01.245 [DEBUG] [Thread-11001] [transport.py] [_log()] kex follows: False
2025-11-26T03:38:01.245 [DEBUG] [Thread-11001] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:38:01.246 [DEBUG] [Thread-11001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:38:01.246 [DEBUG] [Thread-11001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:38:01.246 [DEBUG] [Thread-11001] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:38:01.246 [DEBUG] [Thread-11001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:38:01.246 [DEBUG] [Thread-11001] [transport.py] [_log()] Compression: none
2025-11-26T03:38:01.246 [DEBUG] [Thread-11001] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:38:01.303 [DEBUG] [Thread-11001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:38:01.304 [DEBUG] [Thread-11001] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:38:01.305 [DEBUG] [Thread-11001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:38:01.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:38:01.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:38:01.362 [DEBUG] [Thread-11001] [transport.py] [_log()] userauth is OK
2025-11-26T03:38:01.363 [DEBUG] [Thread-11001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:38:01.363 [DEBUG] [Thread-11001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:38:01.363 [DEBUG] [Thread-11001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:38:01.363 [DEBUG] [Thread-11001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:38:01.382 [INFO] [Thread-11001] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:38:01.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:38:01.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:38:02.228 [DEBUG] [Thread-11001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:38:02.228 [DEBUG] [Thread-11001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:38:02.276 [DEBUG] [Thread-11001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:38:02.276 [DEBUG] [Thread-11001] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:38:02.285 [DEBUG] [Thread-11001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:38:02.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:38:02.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:38:02.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:38:02.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:38:02.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:38:02.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:38:02.316 [DEBUG] [Thread-11001] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:38:09.275 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:09.837 [DEBUG] [Thread-11003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:19.670 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:24.892 [DEBUG] [Thread-11004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:25.862 [DEBUG] [Thread-11005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:30.070 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:38:32.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:38:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:38:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 38, 3), 29.02, 13.17, 0.0, 9.12, 19.37, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:38:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:38:03
2025-11-26T03:38:33.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:38:33.272 [DEBUG] [Thread-11006] [transport.py] [_log()] starting thread (client mode): 0x70d7eda0
2025-11-26T03:38:33.272 [DEBUG] [Thread-11006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:38:33.291 [DEBUG] [Thread-11006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:38:33.292 [INFO] [Thread-11006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:38:33.295 [DEBUG] [Thread-11006] [transport.py] [_log()] client lang: <none>
2025-11-26T03:38:33.296 [DEBUG] [Thread-11006] [transport.py] [_log()] server lang: <none>
2025-11-26T03:38:33.296 [DEBUG] [Thread-11006] [transport.py] [_log()] kex follows: False
2025-11-26T03:38:33.296 [DEBUG] [Thread-11006] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:38:33.296 [DEBUG] [Thread-11006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:38:33.296 [DEBUG] [Thread-11006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:38:33.296 [DEBUG] [Thread-11006] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:38:33.296 [DEBUG] [Thread-11006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:38:33.296 [DEBUG] [Thread-11006] [transport.py] [_log()] Compression: none
2025-11-26T03:38:33.296 [DEBUG] [Thread-11006] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:38:33.314 [DEBUG] [Thread-11006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:38:33.315 [DEBUG] [Thread-11006] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:38:33.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:38:33.316 [DEBUG] [Thread-11006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:38:33.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:38:33.318 [DEBUG] [Thread-11006] [transport.py] [_log()] userauth is OK
2025-11-26T03:38:33.319 [DEBUG] [Thread-11006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:38:33.319 [DEBUG] [Thread-11006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:38:33.319 [DEBUG] [Thread-11006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:38:33.319 [DEBUG] [Thread-11006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:38:33.346 [INFO] [Thread-11006] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:38:33.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:38:33.957 [DEBUG] [Thread-11006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:38:33.957 [DEBUG] [Thread-11006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:38:33.957 [DEBUG] [Thread-11006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:38:33.998 [DEBUG] [Thread-11006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:38:33.998 [DEBUG] [Thread-11006] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:38:34.002 [DEBUG] [Thread-11006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:38:34.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:38:34.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:38:34.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:38:34.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:38:34.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:38:34.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:38:34.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:38:34.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:38:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:38:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.067804 -999.00  +20.30  10.81     17   -5.00 1 1 1 1 1     0    0 24.27 -38.56 ZNESW 11.5 10.8 64.8 11.6 19.8 -26.4 19.7 -25.7 19.4 -24.4 19.6 -25.1
2025-11-26T03:38:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:38:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:38:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.067804
2025-11-26T03:38:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:38:34.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:38:34.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:38:34.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:38:34.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:38:34.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:38:03', tmtdew=29.02, humidity=13.17, cloud=0.0, wind=9.12, temperature=19.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:38:03', seeing=1.31, atlas_timestamp='2025-11-26T01:37:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.052250000000000796, -0.0677500000000002, -0.010249999999999204, -0.05400000000000027, 0.009499999999999176, -0.0007500000000000284, -0.0259999999999998, -0.040749999999999176, 0.012999999999998124, -0.05649999999999977, -0.04875000000000007, 0.01750000000000007, 0.026999999999999247, 0.036249999999999005, -0.05050000000000132, -0.012500000000001066, 0.029249999999999332, 0.028499999999999304, -0.053000000000000824, -0.026750000000001606, 0.09049999999999869, 0.01974999999999838, -0.025749999999998607, 0.0007500000000000284, 0.0029999999999983373, 0.029500000000000526, -0.012249999999999872, 0.0030000000000001137, 0.12199999999999989, 0.028000000000002245, 0.04800000000000182, -0.030999999999998806, -0.024250000000000327], zp_timestamp='2025-11-26T01:36:00')
2025-11-26T03:38:34.030 [DEBUG] [Thread-11006] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:38:34.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:38:34.127 [DEBUG] [Thread-11009] [transport.py] [_log()] starting thread (client mode): 0x70d7f2e0
2025-11-26T03:38:34.127 [DEBUG] [Thread-11009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:38:34.148 [DEBUG] [Thread-11009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:38:34.148 [INFO] [Thread-11009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:38:34.158 [DEBUG] [Thread-11009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:38:34.158 [DEBUG] [Thread-11009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:38:34.158 [DEBUG] [Thread-11009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:38:34.159 [DEBUG] [Thread-11009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:38:34.159 [DEBUG] [Thread-11009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:38:34.159 [DEBUG] [Thread-11009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:38:34.159 [DEBUG] [Thread-11009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:38:34.159 [DEBUG] [Thread-11009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:38:34.159 [DEBUG] [Thread-11009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:38:34.159 [DEBUG] [Thread-11009] [transport.py] [_log()] client lang: <none>
2025-11-26T03:38:34.159 [DEBUG] [Thread-11009] [transport.py] [_log()] server lang: <none>
2025-11-26T03:38:34.160 [DEBUG] [Thread-11009] [transport.py] [_log()] kex follows: False
2025-11-26T03:38:34.160 [DEBUG] [Thread-11009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:38:34.160 [DEBUG] [Thread-11009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:38:34.160 [DEBUG] [Thread-11009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:38:34.160 [DEBUG] [Thread-11009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:38:34.160 [DEBUG] [Thread-11009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:38:34.160 [DEBUG] [Thread-11009] [transport.py] [_log()] Compression: none
2025-11-26T03:38:34.161 [DEBUG] [Thread-11009] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:38:34.222 [DEBUG] [Thread-11009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:38:34.223 [DEBUG] [Thread-11009] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:38:34.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:38:34.224 [DEBUG] [Thread-11009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:38:34.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:38:34.282 [DEBUG] [Thread-11009] [transport.py] [_log()] userauth is OK
2025-11-26T03:38:34.283 [DEBUG] [Thread-11009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:38:34.283 [DEBUG] [Thread-11009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:38:34.283 [DEBUG] [Thread-11009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:38:34.283 [DEBUG] [Thread-11009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:38:34.305 [INFO] [Thread-11009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:38:34.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:38:34.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:38:35.151 [DEBUG] [Thread-11009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:38:35.152 [DEBUG] [Thread-11009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:38:35.200 [DEBUG] [Thread-11009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:38:35.200 [DEBUG] [Thread-11009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:38:35.209 [DEBUG] [Thread-11009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:38:35.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:38:35.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:38:35.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:38:35.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:38:35.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:38:35.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:38:35.247 [DEBUG] [Thread-11009] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:38:39.930 [DEBUG] [Thread-11011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:40.463 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:50.860 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:54.991 [DEBUG] [Thread-11012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:57.741 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:38:57.742 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:01.247 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:05.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:39:05.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:39:05.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:39:05.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 38, 35), 28.98, 13.16, 0.0, 9.3, 19.37, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:39:05.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:38:35
2025-11-26T03:39:06.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:39:06.195 [DEBUG] [Thread-11013] [transport.py] [_log()] starting thread (client mode): 0x70d7e1a0
2025-11-26T03:39:06.195 [DEBUG] [Thread-11013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:39:06.209 [DEBUG] [Thread-11013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:39:06.209 [INFO] [Thread-11013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] client lang: <none>
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] server lang: <none>
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] kex follows: False
2025-11-26T03:39:06.212 [DEBUG] [Thread-11013] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:39:06.213 [DEBUG] [Thread-11013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:39:06.213 [DEBUG] [Thread-11013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:39:06.213 [DEBUG] [Thread-11013] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:39:06.213 [DEBUG] [Thread-11013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:39:06.213 [DEBUG] [Thread-11013] [transport.py] [_log()] Compression: none
2025-11-26T03:39:06.213 [DEBUG] [Thread-11013] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:39:06.230 [DEBUG] [Thread-11013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:39:06.230 [DEBUG] [Thread-11013] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:39:06.231 [DEBUG] [Thread-11013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:39:06.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:39:06.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:39:06.233 [DEBUG] [Thread-11013] [transport.py] [_log()] userauth is OK
2025-11-26T03:39:06.233 [DEBUG] [Thread-11013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:39:06.233 [DEBUG] [Thread-11013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:39:06.233 [DEBUG] [Thread-11013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:39:06.233 [DEBUG] [Thread-11013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:39:06.257 [INFO] [Thread-11013] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:39:06.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:39:06.855 [DEBUG] [Thread-11013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:39:06.855 [DEBUG] [Thread-11013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:39:06.856 [DEBUG] [Thread-11013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:39:06.896 [DEBUG] [Thread-11013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:39:06.896 [DEBUG] [Thread-11013] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:39:06.899 [DEBUG] [Thread-11013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:39:06.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:39:06.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:39:06.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:39:06.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:39:06.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:39:06.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:39:06.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:39:06.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:39:06.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:39:06.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.068151 -999.00  +20.40   7.74     17   -5.00 1 1 1 1 1     0    0 24.56 -37.58 ZNESW 5.9 7.7 74.5 13.6 19.8 -26.2 19.7 -25.5 19.4 -24.3 19.6 -25.2
2025-11-26T03:39:06.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:39:06.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:39:06.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.068151
2025-11-26T03:39:06.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:39:06.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:39:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:39:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:39:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:39:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:38:35', tmtdew=28.98, humidity=13.16, cloud=0.0, wind=9.3, temperature=19.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:38:35', seeing=1.14, atlas_timestamp='2025-11-26T01:38:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.052250000000000796, -0.0677500000000002, -0.010249999999999204, -0.05400000000000027, 0.009499999999999176, -0.0007500000000000284, -0.0259999999999998, -0.040749999999999176, 0.012999999999998124, -0.05649999999999977, -0.04875000000000007, 0.01750000000000007, 0.026999999999999247, 0.036249999999999005, -0.05050000000000132, -0.012500000000001066, 0.029249999999999332, 0.028499999999999304, -0.053000000000000824, -0.026750000000001606, 0.09049999999999869, 0.01974999999999838, -0.025749999999998607, 0.0007500000000000284, 0.0029999999999983373, 0.029500000000000526, -0.012249999999999872, 0.0030000000000001137, 0.12199999999999989, 0.028000000000002245, 0.04800000000000182, -0.030999999999998806, -0.024250000000000327], zp_timestamp='2025-11-26T01:36:00')
2025-11-26T03:39:06.926 [DEBUG] [Thread-11013] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:39:07.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:39:07.021 [DEBUG] [Thread-11016] [transport.py] [_log()] starting thread (client mode): 0x70d7ee00
2025-11-26T03:39:07.021 [DEBUG] [Thread-11016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:39:07.037 [DEBUG] [Thread-11016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:39:07.037 [INFO] [Thread-11016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:39:07.044 [DEBUG] [Thread-11016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] client lang: <none>
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] server lang: <none>
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] kex follows: False
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] Compression: none
2025-11-26T03:39:07.045 [DEBUG] [Thread-11016] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:39:07.107 [DEBUG] [Thread-11016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:39:07.107 [DEBUG] [Thread-11016] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:39:07.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:39:07.108 [DEBUG] [Thread-11016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:39:07.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:39:07.163 [DEBUG] [Thread-11016] [transport.py] [_log()] userauth is OK
2025-11-26T03:39:07.164 [DEBUG] [Thread-11016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:39:07.164 [DEBUG] [Thread-11016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:39:07.164 [DEBUG] [Thread-11016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:39:07.164 [DEBUG] [Thread-11016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:39:07.188 [INFO] [Thread-11016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:39:07.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:39:07.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:39:08.030 [DEBUG] [Thread-11016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:39:08.030 [DEBUG] [Thread-11016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:39:08.078 [DEBUG] [Thread-11016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:39:08.078 [DEBUG] [Thread-11016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:39:08.086 [DEBUG] [Thread-11016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:39:08.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:39:08.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:39:08.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:39:08.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:39:08.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:39:08.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:39:08.121 [DEBUG] [Thread-11016] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:39:10.024 [DEBUG] [Thread-11018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:11.668 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:22.106 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:25.082 [DEBUG] [Thread-11019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:25.929 [DEBUG] [Thread-11020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:32.544 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:38.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:39:38.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:39:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:39:38.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 39, 7), 28.98, 13.14, 0.0, 9.62, 19.32, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:39:38.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:39:07
2025-11-26T03:39:38.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:39:39.056 [DEBUG] [Thread-11021] [transport.py] [_log()] starting thread (client mode): 0x70d77010
2025-11-26T03:39:39.056 [DEBUG] [Thread-11021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:39:39.076 [DEBUG] [Thread-11021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:39:39.076 [INFO] [Thread-11021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:39:39.077 [DEBUG] [Thread-11021] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:39:39.077 [DEBUG] [Thread-11021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:39:39.077 [DEBUG] [Thread-11021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:39:39.077 [DEBUG] [Thread-11021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:39:39.077 [DEBUG] [Thread-11021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:39:39.077 [DEBUG] [Thread-11021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:39:39.077 [DEBUG] [Thread-11021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:39:39.077 [DEBUG] [Thread-11021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:39:39.077 [DEBUG] [Thread-11021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] client lang: <none>
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] server lang: <none>
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] kex follows: False
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] Compression: none
2025-11-26T03:39:39.078 [DEBUG] [Thread-11021] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:39:39.088 [DEBUG] [Thread-11021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:39:39.089 [DEBUG] [Thread-11021] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:39:39.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:39:39.090 [DEBUG] [Thread-11021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:39:39.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:39:39.093 [DEBUG] [Thread-11021] [transport.py] [_log()] userauth is OK
2025-11-26T03:39:39.093 [DEBUG] [Thread-11021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:39:39.093 [DEBUG] [Thread-11021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:39:39.093 [DEBUG] [Thread-11021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:39:39.093 [DEBUG] [Thread-11021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:39:39.119 [INFO] [Thread-11021] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:39:39.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:39:39.779 [DEBUG] [Thread-11021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:39:39.779 [DEBUG] [Thread-11021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:39:39.779 [DEBUG] [Thread-11021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:39:39.820 [DEBUG] [Thread-11021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:39:39.820 [DEBUG] [Thread-11021] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:39:39.823 [DEBUG] [Thread-11021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:39:39.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:39:39.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:39:39.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:39:39.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:39:39.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:39:39.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:39:39.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:39:39.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:39:39.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:39:39.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.068845 -999.00  +20.30   4.71     17   -5.10 1 1 1 1 1     0    0 24.52 -39.12 ZNESW 7.4 4.7 87.2 10.9 19.8 -26.2 19.7 -25.6 19.4 -24.1 19.6 -25.4
2025-11-26T03:39:39.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:39:39.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:39:39.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.068845
2025-11-26T03:39:39.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:39:39.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:39:39.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:39:39.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:39:39.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:39:39.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:39:07', tmtdew=28.98, humidity=13.14, cloud=0.0, wind=9.62, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:39:07', seeing=1.14, atlas_timestamp='2025-11-26T01:39:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.052250000000000796, -0.0677500000000002, -0.010249999999999204, -0.05400000000000027, 0.009499999999999176, -0.0007500000000000284, -0.0259999999999998, -0.040749999999999176, 0.012999999999998124, -0.05649999999999977, -0.04875000000000007, 0.01750000000000007, 0.026999999999999247, 0.036249999999999005, -0.05050000000000132, -0.012500000000001066, 0.029249999999999332, 0.028499999999999304, -0.053000000000000824, -0.026750000000001606, 0.09049999999999869, 0.01974999999999838, -0.025749999999998607, 0.0007500000000000284, 0.0029999999999983373, 0.029500000000000526, -0.012249999999999872, 0.0030000000000001137, 0.12199999999999989, 0.028000000000002245, 0.04800000000000182, -0.030999999999998806, -0.024250000000000327], zp_timestamp='2025-11-26T01:36:00')
2025-11-26T03:39:39.842 [DEBUG] [Thread-11021] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:39:39.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:39:39.926 [DEBUG] [Thread-11024] [transport.py] [_log()] starting thread (client mode): 0x70d77610
2025-11-26T03:39:39.926 [DEBUG] [Thread-11024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:39:39.940 [DEBUG] [Thread-11024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:39:39.940 [INFO] [Thread-11024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:39:39.947 [DEBUG] [Thread-11024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] client lang: <none>
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] server lang: <none>
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] kex follows: False
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] Compression: none
2025-11-26T03:39:39.948 [DEBUG] [Thread-11024] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:39:40.006 [DEBUG] [Thread-11024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:39:40.006 [DEBUG] [Thread-11024] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:39:40.006 [DEBUG] [Thread-11024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:39:40.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:39:40.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:39:40.063 [DEBUG] [Thread-11024] [transport.py] [_log()] userauth is OK
2025-11-26T03:39:40.063 [DEBUG] [Thread-11024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:39:40.063 [DEBUG] [Thread-11024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:39:40.063 [DEBUG] [Thread-11024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:39:40.063 [DEBUG] [Thread-11024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:39:40.077 [INFO] [Thread-11024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:39:40.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:39:40.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:39:40.114 [DEBUG] [Thread-11026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:40.873 [DEBUG] [Thread-11024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:39:40.873 [DEBUG] [Thread-11024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:39:40.921 [DEBUG] [Thread-11024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:39:40.921 [DEBUG] [Thread-11024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:39:40.929 [DEBUG] [Thread-11024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:39:40.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:39:40.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:39:40.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:39:40.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:39:40.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:39:40.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:39:40.962 [DEBUG] [Thread-11024] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:39:42.959 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:53.405 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:55.155 [DEBUG] [Thread-11027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:57.944 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:39:57.945 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:03.823 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:10.190 [DEBUG] [Thread-11028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:10.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:40:10.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:40:10.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:40:11.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 39, 39), 28.99, 13.16, 0.0, 9.0, 19.4, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:40:11.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:39:39
2025-11-26T03:40:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:40:11.974 [DEBUG] [Thread-11029] [transport.py] [_log()] starting thread (client mode): 0x70d758d0
2025-11-26T03:40:11.974 [DEBUG] [Thread-11029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:40:11.987 [DEBUG] [Thread-11029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:40:11.987 [INFO] [Thread-11029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:40:11.988 [DEBUG] [Thread-11029] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:40:11.988 [DEBUG] [Thread-11029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:40:11.988 [DEBUG] [Thread-11029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] client lang: <none>
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] server lang: <none>
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] kex follows: False
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] Compression: none
2025-11-26T03:40:11.989 [DEBUG] [Thread-11029] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:40:11.997 [DEBUG] [Thread-11029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:40:11.998 [DEBUG] [Thread-11029] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:40:11.998 [DEBUG] [Thread-11029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:40:11.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:40:11.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:40:11.998 [DEBUG] [Thread-11029] [transport.py] [_log()] userauth is OK
2025-11-26T03:40:11.998 [DEBUG] [Thread-11029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:40:11.999 [DEBUG] [Thread-11029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:40:11.999 [DEBUG] [Thread-11029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:40:11.999 [DEBUG] [Thread-11029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:40:12.007 [INFO] [Thread-11029] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:40:12.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:40:13.019 [DEBUG] [Thread-11029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:40:13.019 [DEBUG] [Thread-11029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:40:13.019 [DEBUG] [Thread-11029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:40:13.060 [DEBUG] [Thread-11029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:40:13.060 [DEBUG] [Thread-11029] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:40:13.062 [DEBUG] [Thread-11029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:40:13.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:40:13.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:40:13.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:40:13.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:40:13.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:40:13.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:40:13.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:40:13.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:40:13.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.069193 -999.00  +20.30  10.78     17   -5.00 1 1 1 1 1     0    0 24.43 -37.40 ZNESW 8.4 10.8 71.2 12.6 19.8 -26.3 19.7 -25.6 19.4 -24.1 19.6 -25.2
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.069193
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:40:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:39:39', tmtdew=28.99, humidity=13.16, cloud=0.0, wind=9.0, temperature=19.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:39:39', seeing=1.34, atlas_timestamp='2025-11-26T01:39:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[-0.052250000000000796, -0.0677500000000002, -0.010249999999999204, -0.05400000000000027, 0.009499999999999176, -0.0007500000000000284, -0.0259999999999998, -0.040749999999999176, 0.012999999999998124, -0.05649999999999977, -0.04875000000000007, 0.01750000000000007, 0.026999999999999247, 0.036249999999999005, -0.05050000000000132, -0.012500000000001066, 0.029249999999999332, 0.028499999999999304, -0.053000000000000824, -0.026750000000001606, 0.09049999999999869, 0.01974999999999838, -0.025749999999998607, 0.0007500000000000284, 0.0029999999999983373, 0.029500000000000526, -0.012249999999999872, 0.0030000000000001137, 0.12199999999999989, 0.028000000000002245, 0.04800000000000182, -0.030999999999998806, -0.024250000000000327], zp_timestamp='2025-11-26T01:36:00')
2025-11-26T03:40:13.084 [DEBUG] [Thread-11029] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:40:13.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:40:13.171 [DEBUG] [Thread-11032] [transport.py] [_log()] starting thread (client mode): 0x70d7dde0
2025-11-26T03:40:13.171 [DEBUG] [Thread-11032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:40:13.185 [DEBUG] [Thread-11032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:40:13.185 [INFO] [Thread-11032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] client lang: <none>
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] server lang: <none>
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] kex follows: False
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] Compression: none
2025-11-26T03:40:13.193 [DEBUG] [Thread-11032] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:40:13.251 [DEBUG] [Thread-11032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:40:13.251 [DEBUG] [Thread-11032] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:40:13.251 [DEBUG] [Thread-11032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:40:13.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:40:13.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:40:13.308 [DEBUG] [Thread-11032] [transport.py] [_log()] userauth is OK
2025-11-26T03:40:13.308 [DEBUG] [Thread-11032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:40:13.308 [DEBUG] [Thread-11032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:40:13.308 [DEBUG] [Thread-11032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:40:13.308 [DEBUG] [Thread-11032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:40:13.321 [INFO] [Thread-11032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:40:13.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:40:13.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:40:14.128 [DEBUG] [Thread-11032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:40:14.128 [DEBUG] [Thread-11032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:40:14.176 [DEBUG] [Thread-11032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:40:14.176 [DEBUG] [Thread-11032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:40:14.184 [DEBUG] [Thread-11032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:40:14.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:40:14.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:40:14.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:40:14.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:40:14.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:40:14.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:40:14.221 [DEBUG] [Thread-11032] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:40:14.245 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:24.640 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:25.221 [DEBUG] [Thread-11034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:26.017 [DEBUG] [Thread-11035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:35.037 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:40.287 [DEBUG] [Thread-11036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:40:44.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:40:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:40:44.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 40, 11), 29.01, 13.13, 0.0, 9.23, 19.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:40:44.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:40:11
2025-11-26T03:40:45.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:40:45.248 [DEBUG] [Thread-11037] [transport.py] [_log()] starting thread (client mode): 0x70d77460
2025-11-26T03:40:45.248 [DEBUG] [Thread-11037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:40:45.268 [DEBUG] [Thread-11037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:40:45.268 [INFO] [Thread-11037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:40:45.271 [DEBUG] [Thread-11037] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:40:45.271 [DEBUG] [Thread-11037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:40:45.271 [DEBUG] [Thread-11037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] client lang: <none>
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] server lang: <none>
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] kex follows: False
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] Compression: none
2025-11-26T03:40:45.272 [DEBUG] [Thread-11037] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:40:45.287 [DEBUG] [Thread-11037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:40:45.287 [DEBUG] [Thread-11037] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:40:45.287 [DEBUG] [Thread-11037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:40:45.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:40:45.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:40:45.288 [DEBUG] [Thread-11037] [transport.py] [_log()] userauth is OK
2025-11-26T03:40:45.288 [DEBUG] [Thread-11037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:40:45.288 [DEBUG] [Thread-11037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:40:45.288 [DEBUG] [Thread-11037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:40:45.288 [DEBUG] [Thread-11037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:40:45.300 [INFO] [Thread-11037] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:40:45.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:40:45.447 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:45.935 [DEBUG] [Thread-11037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:40:45.935 [DEBUG] [Thread-11037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:40:45.935 [DEBUG] [Thread-11037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:40:45.976 [DEBUG] [Thread-11037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:40:45.976 [DEBUG] [Thread-11037] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:40:45.978 [DEBUG] [Thread-11037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:40:45.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:40:45.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:40:45.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:40:45.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:40:45.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:40:45.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:40:45.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:40:45.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.069539 -999.00  +20.30   8.84     17   -5.00 1 1 1 1 1     0    0 24.39 -40.56 ZNESW 10.2 8.8 79.8 11.8 19.8 -26.2 19.6 -25.4 19.4 -24.3 19.6 -25.4
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.069539
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:40:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:40:11', tmtdew=29.01, humidity=13.13, cloud=0.0, wind=9.23, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:40:43', seeing=1.41, atlas_timestamp='2025-11-26T01:40:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.052250000000000796, -0.0677500000000002, -0.010249999999999204, -0.05400000000000027, 0.009499999999999176, -0.0007500000000000284, -0.0259999999999998, -0.040749999999999176, 0.012999999999998124, -0.05649999999999977, -0.04875000000000007, 0.01750000000000007, 0.026999999999999247, 0.036249999999999005, -0.05050000000000132, -0.012500000000001066, 0.029249999999999332, 0.028499999999999304, -0.053000000000000824, -0.026750000000001606, 0.09049999999999869, 0.01974999999999838, -0.025749999999998607, 0.0007500000000000284, 0.0029999999999983373, 0.029500000000000526, -0.012249999999999872, 0.0030000000000001137, 0.12199999999999989, 0.028000000000002245, 0.04800000000000182, -0.030999999999998806, -0.024250000000000327], zp_timestamp='2025-11-26T01:36:00')
2025-11-26T03:40:45.995 [DEBUG] [Thread-11037] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:40:46.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:40:46.081 [DEBUG] [Thread-11040] [transport.py] [_log()] starting thread (client mode): 0x70d741f0
2025-11-26T03:40:46.081 [DEBUG] [Thread-11040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:40:46.103 [DEBUG] [Thread-11040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:40:46.103 [INFO] [Thread-11040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] client lang: <none>
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] server lang: <none>
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] kex follows: False
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] Compression: none
2025-11-26T03:40:46.111 [DEBUG] [Thread-11040] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:40:46.171 [DEBUG] [Thread-11040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:40:46.171 [DEBUG] [Thread-11040] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:40:46.172 [DEBUG] [Thread-11040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:40:46.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:40:46.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:40:46.229 [DEBUG] [Thread-11040] [transport.py] [_log()] userauth is OK
2025-11-26T03:40:46.229 [DEBUG] [Thread-11040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:40:46.229 [DEBUG] [Thread-11040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:40:46.229 [DEBUG] [Thread-11040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:40:46.229 [DEBUG] [Thread-11040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:40:46.243 [INFO] [Thread-11040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:40:46.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:40:46.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:40:47.081 [DEBUG] [Thread-11040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:40:47.081 [DEBUG] [Thread-11040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:40:47.130 [DEBUG] [Thread-11040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:40:47.130 [DEBUG] [Thread-11040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:40:47.138 [DEBUG] [Thread-11040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:40:47.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:40:47.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:40:47.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:40:47.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:40:47.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:40:47.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:40:47.173 [DEBUG] [Thread-11040] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:40:55.320 [DEBUG] [Thread-11042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:55.903 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:58.147 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:40:58.148 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:06.332 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:10.377 [DEBUG] [Thread-11043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:16.718 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:17.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:41:17.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:41:17.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:41:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 40, 43), 29.06, 13.13, 0.0, 11.03, 19.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:41:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:40:43
2025-11-26T03:41:18.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:41:18.159 [DEBUG] [Thread-11044] [transport.py] [_log()] starting thread (client mode): 0x70d76e30
2025-11-26T03:41:18.159 [DEBUG] [Thread-11044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:41:18.179 [DEBUG] [Thread-11044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:41:18.180 [INFO] [Thread-11044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] client lang: <none>
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] server lang: <none>
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] kex follows: False
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] Compression: none
2025-11-26T03:41:18.183 [DEBUG] [Thread-11044] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:41:18.201 [DEBUG] [Thread-11044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:41:18.202 [DEBUG] [Thread-11044] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:41:18.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:41:18.203 [DEBUG] [Thread-11044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:41:18.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:41:18.204 [DEBUG] [Thread-11044] [transport.py] [_log()] userauth is OK
2025-11-26T03:41:18.204 [DEBUG] [Thread-11044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:41:18.205 [DEBUG] [Thread-11044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:41:18.205 [DEBUG] [Thread-11044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:41:18.205 [DEBUG] [Thread-11044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:41:18.220 [INFO] [Thread-11044] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:41:18.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:41:18.941 [DEBUG] [Thread-11044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:41:18.941 [DEBUG] [Thread-11044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:41:18.942 [DEBUG] [Thread-11044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:41:18.982 [DEBUG] [Thread-11044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:41:18.982 [DEBUG] [Thread-11044] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:41:18.986 [DEBUG] [Thread-11044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:41:18.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:41:18.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:41:19.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:41:19.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:41:19.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:41:19.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:41:19.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:41:19.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:41:19.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:41:19.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.069887 -999.00  +20.30   9.71     17   -5.10 1 1 1 1 1     0    0 24.54 -41.32 ZNESW 9.6 9.7 65.2 11.8 19.8 -26.3 19.7 -25.6 19.4 -24.4 19.6 -25.3
2025-11-26T03:41:19.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:41:19.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:41:19.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.069887
2025-11-26T03:41:19.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:41:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:41:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:41:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:41:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:41:19.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:40:43', tmtdew=29.06, humidity=13.13, cloud=0.0, wind=11.03, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:41:15', seeing=1.32, atlas_timestamp='2025-11-26T01:40:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:39:00')
2025-11-26T03:41:19.017 [DEBUG] [Thread-11044] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:41:19.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:41:19.110 [DEBUG] [Thread-11047] [transport.py] [_log()] starting thread (client mode): 0x70d75120
2025-11-26T03:41:19.111 [DEBUG] [Thread-11047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:41:19.129 [DEBUG] [Thread-11047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:41:19.129 [INFO] [Thread-11047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:41:19.136 [DEBUG] [Thread-11047] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:41:19.136 [DEBUG] [Thread-11047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] client lang: <none>
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] server lang: <none>
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] kex follows: False
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:41:19.137 [DEBUG] [Thread-11047] [transport.py] [_log()] Compression: none
2025-11-26T03:41:19.138 [DEBUG] [Thread-11047] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:41:19.197 [DEBUG] [Thread-11047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:41:19.197 [DEBUG] [Thread-11047] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:41:19.197 [DEBUG] [Thread-11047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:41:19.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:41:19.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:41:19.253 [DEBUG] [Thread-11047] [transport.py] [_log()] userauth is OK
2025-11-26T03:41:19.253 [DEBUG] [Thread-11047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:41:19.253 [DEBUG] [Thread-11047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:41:19.254 [DEBUG] [Thread-11047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:41:19.254 [DEBUG] [Thread-11047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:41:19.279 [INFO] [Thread-11047] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:41:19.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:41:19.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:41:20.086 [DEBUG] [Thread-11047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:41:20.087 [DEBUG] [Thread-11047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:41:20.135 [DEBUG] [Thread-11047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:41:20.135 [DEBUG] [Thread-11047] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:41:20.144 [DEBUG] [Thread-11047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:41:20.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:41:20.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:41:20.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:41:20.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:41:20.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:41:20.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:41:20.181 [DEBUG] [Thread-11047] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:41:25.411 [DEBUG] [Thread-11049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:26.091 [DEBUG] [Thread-11050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:27.116 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:37.511 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:40.452 [DEBUG] [Thread-11051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:47.947 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:50.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:41:50.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:41:50.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:41:50.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 41, 47), 29.03, 13.14, 0.0, 9.12, 19.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:41:50.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:41:47
2025-11-26T03:41:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:41:51.138 [DEBUG] [Thread-11052] [transport.py] [_log()] starting thread (client mode): 0x70d75750
2025-11-26T03:41:51.138 [DEBUG] [Thread-11052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:41:51.158 [DEBUG] [Thread-11052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:41:51.158 [INFO] [Thread-11052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:41:51.161 [DEBUG] [Thread-11052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:41:51.161 [DEBUG] [Thread-11052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] client lang: <none>
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] server lang: <none>
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] kex follows: False
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:41:51.162 [DEBUG] [Thread-11052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:41:51.163 [DEBUG] [Thread-11052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:41:51.163 [DEBUG] [Thread-11052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:41:51.163 [DEBUG] [Thread-11052] [transport.py] [_log()] Compression: none
2025-11-26T03:41:51.163 [DEBUG] [Thread-11052] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:41:51.182 [DEBUG] [Thread-11052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:41:51.183 [DEBUG] [Thread-11052] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:41:51.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:41:51.184 [DEBUG] [Thread-11052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:41:51.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:41:51.186 [DEBUG] [Thread-11052] [transport.py] [_log()] userauth is OK
2025-11-26T03:41:51.186 [DEBUG] [Thread-11052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:41:51.186 [DEBUG] [Thread-11052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:41:51.187 [DEBUG] [Thread-11052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:41:51.187 [DEBUG] [Thread-11052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:41:51.220 [INFO] [Thread-11052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:41:51.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:41:51.867 [DEBUG] [Thread-11052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:41:51.868 [DEBUG] [Thread-11052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:41:51.868 [DEBUG] [Thread-11052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:41:51.909 [DEBUG] [Thread-11052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:41:51.909 [DEBUG] [Thread-11052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:41:51.912 [DEBUG] [Thread-11052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:41:51.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:41:51.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:41:51.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:41:51.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:41:51.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:41:51.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:41:51.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:41:51.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:41:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:41:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.070234 -999.00  +20.30   7.87     17   -5.10 1 1 1 1 1     0    0 24.73 -39.69 ZNESW 6.9 7.9 69.9 13.1 19.7 -26.0 19.6 -25.5 19.3 -24.3 19.6 -25.3
2025-11-26T03:41:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:41:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:41:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.070234
2025-11-26T03:41:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:41:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:41:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:41:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:41:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:41:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:41:47', tmtdew=29.03, humidity=13.14, cloud=0.0, wind=9.12, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:41:47', seeing=1.45, atlas_timestamp='2025-11-26T01:41:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:39:00')
2025-11-26T03:41:51.940 [DEBUG] [Thread-11052] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:41:52.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:41:52.035 [DEBUG] [Thread-11055] [transport.py] [_log()] starting thread (client mode): 0x70d77730
2025-11-26T03:41:52.035 [DEBUG] [Thread-11055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:41:52.049 [DEBUG] [Thread-11055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:41:52.050 [INFO] [Thread-11055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:41:52.057 [DEBUG] [Thread-11055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:41:52.057 [DEBUG] [Thread-11055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] client lang: <none>
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] server lang: <none>
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] kex follows: False
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] Compression: none
2025-11-26T03:41:52.058 [DEBUG] [Thread-11055] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:41:52.117 [DEBUG] [Thread-11055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:41:52.118 [DEBUG] [Thread-11055] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:41:52.119 [DEBUG] [Thread-11055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:41:52.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:41:52.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:41:52.173 [DEBUG] [Thread-11055] [transport.py] [_log()] userauth is OK
2025-11-26T03:41:52.174 [DEBUG] [Thread-11055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:41:52.174 [DEBUG] [Thread-11055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:41:52.174 [DEBUG] [Thread-11055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:41:52.174 [DEBUG] [Thread-11055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:41:52.193 [INFO] [Thread-11055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:41:52.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:41:52.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:41:53.058 [DEBUG] [Thread-11055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:41:53.058 [DEBUG] [Thread-11055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:41:53.107 [DEBUG] [Thread-11055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:41:53.107 [DEBUG] [Thread-11055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:41:53.116 [DEBUG] [Thread-11055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:41:53.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:41:53.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:41: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
2025-11-26T03:41:53.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:41:53.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:41:53.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:41:53.153 [DEBUG] [Thread-11055] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:41:55.484 [DEBUG] [Thread-11057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:58.341 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:58.350 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:41:58.351 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:08.739 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:10.532 [DEBUG] [Thread-11058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:19.193 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:23.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:42:23.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:42:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:42:23.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 42, 19), 29.02, 13.16, 0.0, 8.91, 19.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:42:23.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:42:19
2025-11-26T03:42:23.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:42:24.103 [DEBUG] [Thread-11059] [transport.py] [_log()] starting thread (client mode): 0x70df80d0
2025-11-26T03:42:24.103 [DEBUG] [Thread-11059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:42:24.124 [DEBUG] [Thread-11059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:42:24.124 [INFO] [Thread-11059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:42:24.127 [DEBUG] [Thread-11059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:42:24.127 [DEBUG] [Thread-11059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:42:24.127 [DEBUG] [Thread-11059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:42:24.127 [DEBUG] [Thread-11059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:42:24.127 [DEBUG] [Thread-11059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:42:24.127 [DEBUG] [Thread-11059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:42:24.127 [DEBUG] [Thread-11059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:42:24.127 [DEBUG] [Thread-11059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] client lang: <none>
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] server lang: <none>
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] kex follows: False
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] Compression: none
2025-11-26T03:42:24.128 [DEBUG] [Thread-11059] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:42:24.145 [DEBUG] [Thread-11059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:42:24.146 [DEBUG] [Thread-11059] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:42:24.146 [DEBUG] [Thread-11059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:42:24.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:42:24.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:42:24.148 [DEBUG] [Thread-11059] [transport.py] [_log()] userauth is OK
2025-11-26T03:42:24.148 [DEBUG] [Thread-11059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:42:24.148 [DEBUG] [Thread-11059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:42:24.148 [DEBUG] [Thread-11059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:42:24.149 [DEBUG] [Thread-11059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:42:24.180 [INFO] [Thread-11059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:42:24.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:42:24.997 [DEBUG] [Thread-11059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:42:24.997 [DEBUG] [Thread-11059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:42:24.998 [DEBUG] [Thread-11059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:42:25.038 [DEBUG] [Thread-11059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:42:25.038 [DEBUG] [Thread-11059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:42:25.041 [DEBUG] [Thread-11059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:42:25.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:42:25.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:42:25.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:42:25.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:42:25.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:42:25.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:42:25.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:42:25.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:42:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:42:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.070582 -999.00  +20.20  10.31     17   -5.10 1 1 1 1 1     0    0 24.52 -34.87 ZNESW 9.8 10.3 68.0 10.6 19.8 -26.0 19.6 -25.5 19.4 -24.3 19.6 -25.3
2025-11-26T03:42:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:42:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:42:25.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.070582
2025-11-26T03:42:25.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:42:25.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:42:25.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:42:25.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:42:25.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:42:25.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:42:19', tmtdew=29.02, humidity=13.16, cloud=0.0, wind=8.91, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:42:19', seeing=1.11, atlas_timestamp='2025-11-26T01:41:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:39:00')
2025-11-26T03:42:25.070 [DEBUG] [Thread-11059] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:42:25.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:42:25.163 [DEBUG] [Thread-11062] [transport.py] [_log()] starting thread (client mode): 0x70df8460
2025-11-26T03:42:25.163 [DEBUG] [Thread-11062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:42:25.177 [DEBUG] [Thread-11062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:42:25.177 [INFO] [Thread-11062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] client lang: <none>
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] server lang: <none>
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] kex follows: False
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:42:25.185 [DEBUG] [Thread-11062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:42:25.186 [DEBUG] [Thread-11062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:42:25.186 [DEBUG] [Thread-11062] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:42:25.186 [DEBUG] [Thread-11062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:42:25.186 [DEBUG] [Thread-11062] [transport.py] [_log()] Compression: none
2025-11-26T03:42:25.186 [DEBUG] [Thread-11062] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:42:25.246 [DEBUG] [Thread-11062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:42:25.246 [DEBUG] [Thread-11062] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:42:25.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:42:25.248 [DEBUG] [Thread-11062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:42:25.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:42:25.302 [DEBUG] [Thread-11062] [transport.py] [_log()] userauth is OK
2025-11-26T03:42:25.302 [DEBUG] [Thread-11062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:42:25.302 [DEBUG] [Thread-11062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:42:25.302 [DEBUG] [Thread-11062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:42:25.302 [DEBUG] [Thread-11062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:42:25.321 [INFO] [Thread-11062] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:42:25.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:42:25.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:42:25.568 [DEBUG] [Thread-11064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:26.142 [DEBUG] [Thread-11065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:26.154 [DEBUG] [Thread-11062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:42:26.154 [DEBUG] [Thread-11062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:42:26.204 [DEBUG] [Thread-11062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:42:26.204 [DEBUG] [Thread-11062] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:42:26.214 [DEBUG] [Thread-11062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:42:26.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:42:26.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:42:26.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:42:26.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:42:26.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:42:26.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:42:26.251 [DEBUG] [Thread-11062] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:42:29.623 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:40.053 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:40.628 [DEBUG] [Thread-11066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:50.504 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:55.661 [DEBUG] [Thread-11067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:56.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:42:56.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:42:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:42:56.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 42, 51), 28.88, 13.19, 0.0, 10.99, 19.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:42:56.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:42:51
2025-11-26T03:42:57.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:42:57.204 [DEBUG] [Thread-11068] [transport.py] [_log()] starting thread (client mode): 0x70de5ed0
2025-11-26T03:42:57.204 [DEBUG] [Thread-11068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:42:57.225 [DEBUG] [Thread-11068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:42:57.225 [INFO] [Thread-11068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:42:57.228 [DEBUG] [Thread-11068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:42:57.228 [DEBUG] [Thread-11068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:42:57.228 [DEBUG] [Thread-11068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] client lang: <none>
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] server lang: <none>
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] kex follows: False
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] Compression: none
2025-11-26T03:42:57.229 [DEBUG] [Thread-11068] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:42:57.246 [DEBUG] [Thread-11068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:42:57.247 [DEBUG] [Thread-11068] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:42:57.247 [DEBUG] [Thread-11068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:42:57.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:42:57.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:42:57.249 [DEBUG] [Thread-11068] [transport.py] [_log()] userauth is OK
2025-11-26T03:42:57.249 [DEBUG] [Thread-11068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:42:57.249 [DEBUG] [Thread-11068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:42:57.250 [DEBUG] [Thread-11068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:42:57.250 [DEBUG] [Thread-11068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:42:57.273 [INFO] [Thread-11068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:42:57.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:42:57.903 [DEBUG] [Thread-11068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:42:57.904 [DEBUG] [Thread-11068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:42:57.904 [DEBUG] [Thread-11068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:42:57.945 [DEBUG] [Thread-11068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:42:57.945 [DEBUG] [Thread-11068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:42:57.948 [DEBUG] [Thread-11068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:42:57.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:42:57.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:42:57.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:42:57.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:42:57.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:42:57.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:42:57.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:42:57.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:42:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:42:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.071276 -999.00  +20.20   6.75     17   -5.00 1 1 1 1 1     0    0 24.57 -41.69 ZNESW 8.0 6.8 88.5 13.5 19.8 -26.0 19.6 -25.6 19.4 -24.2 19.6 -25.4
2025-11-26T03:42:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:42:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:42:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.071276
2025-11-26T03:42:57.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:42:57.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:42:57.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:42:57.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:42:57.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:42:57.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:42:51', tmtdew=28.88, humidity=13.19, cloud=0.0, wind=10.99, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:42:51', seeing=1.11, atlas_timestamp='2025-11-26T01:42:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:39:00')
2025-11-26T03:42:57.975 [DEBUG] [Thread-11068] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:42:58.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:42:58.071 [DEBUG] [Thread-11071] [transport.py] [_log()] starting thread (client mode): 0x70d743d0
2025-11-26T03:42:58.071 [DEBUG] [Thread-11071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:42:58.085 [DEBUG] [Thread-11071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:42:58.086 [INFO] [Thread-11071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:42:58.093 [DEBUG] [Thread-11071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:42:58.093 [DEBUG] [Thread-11071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:42:58.093 [DEBUG] [Thread-11071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:42:58.093 [DEBUG] [Thread-11071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:42:58.093 [DEBUG] [Thread-11071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] client lang: <none>
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] server lang: <none>
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] kex follows: False
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] Compression: none
2025-11-26T03:42:58.094 [DEBUG] [Thread-11071] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:42:58.154 [DEBUG] [Thread-11071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:42:58.154 [DEBUG] [Thread-11071] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:42:58.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:42:58.155 [DEBUG] [Thread-11071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:42:58.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:42:58.210 [DEBUG] [Thread-11071] [transport.py] [_log()] userauth is OK
2025-11-26T03:42:58.211 [DEBUG] [Thread-11071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:42:58.211 [DEBUG] [Thread-11071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:42:58.211 [DEBUG] [Thread-11071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:42:58.211 [DEBUG] [Thread-11071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:42:58.230 [INFO] [Thread-11071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:42:58.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:42:58.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:42:58.552 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:58.553 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:42:59.056 [DEBUG] [Thread-11071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:42:59.056 [DEBUG] [Thread-11071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:42:59.104 [DEBUG] [Thread-11071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:42:59.104 [DEBUG] [Thread-11071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:42:59.114 [DEBUG] [Thread-11071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:42:59.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:42:59.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:42:59.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:42:59.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:42:59.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:42:59.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:42:59.151 [DEBUG] [Thread-11071] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:43:00.944 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:10.698 [DEBUG] [Thread-11073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:11.331 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:21.752 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:25.754 [DEBUG] [Thread-11074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:26.197 [DEBUG] [Thread-11075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:43:29.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:43:29.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:43:29.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 43, 23), 28.88, 13.21, 0.0, 11.12, 19.27, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:43:29.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:43:23
2025-11-26T03:43:29.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:43:30.112 [DEBUG] [Thread-11076] [transport.py] [_log()] starting thread (client mode): 0x70de7ca0
2025-11-26T03:43:30.112 [DEBUG] [Thread-11076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:43:30.133 [DEBUG] [Thread-11076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:43:30.133 [INFO] [Thread-11076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:43:30.136 [DEBUG] [Thread-11076] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:43:30.136 [DEBUG] [Thread-11076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:43:30.136 [DEBUG] [Thread-11076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:43:30.136 [DEBUG] [Thread-11076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:43:30.136 [DEBUG] [Thread-11076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:43:30.136 [DEBUG] [Thread-11076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:43:30.136 [DEBUG] [Thread-11076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] client lang: <none>
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] server lang: <none>
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] kex follows: False
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] Compression: none
2025-11-26T03:43:30.137 [DEBUG] [Thread-11076] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:43:30.154 [DEBUG] [Thread-11076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:43:30.155 [DEBUG] [Thread-11076] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:43:30.155 [DEBUG] [Thread-11076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:43:30.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:43:30.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:43:30.157 [DEBUG] [Thread-11076] [transport.py] [_log()] userauth is OK
2025-11-26T03:43:30.158 [DEBUG] [Thread-11076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:43:30.158 [DEBUG] [Thread-11076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:43:30.158 [DEBUG] [Thread-11076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:43:30.158 [DEBUG] [Thread-11076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:43:30.182 [INFO] [Thread-11076] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:43:30.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:43:30.838 [DEBUG] [Thread-11076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:43:30.839 [DEBUG] [Thread-11076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:43:30.839 [DEBUG] [Thread-11076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:43:30.880 [DEBUG] [Thread-11076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:43:30.880 [DEBUG] [Thread-11076] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:43:30.883 [DEBUG] [Thread-11076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:43:30.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:43:30.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:43:30.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:43:30.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:43:30.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:43:30.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:43:30.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:43:30.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:43:30.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:43:30.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.071623 -999.00  +20.20  11.07     17   -5.00 1 1 1 1 1     0    0 24.28 -42.44 ZNESW 10.2 11.1 78.8 11.7 19.7 -26.2 19.6 -25.6 19.4 -24.2 19.6 -25.3
2025-11-26T03:43:30.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:43:30.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:43:30.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.071623
2025-11-26T03:43:30.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:43:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:43:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:43:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:43:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:43:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:43:23', tmtdew=28.88, humidity=13.21, cloud=0.0, wind=11.12, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:43:23', seeing=1.43, atlas_timestamp='2025-11-26T01:43:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:39:00')
2025-11-26T03:43:30.913 [DEBUG] [Thread-11076] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:43:30.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:43:31.008 [DEBUG] [Thread-11079] [transport.py] [_log()] starting thread (client mode): 0x70de6440
2025-11-26T03:43:31.008 [DEBUG] [Thread-11079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:43:31.023 [DEBUG] [Thread-11079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:43:31.023 [INFO] [Thread-11079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:43:31.031 [DEBUG] [Thread-11079] [transport.py] [_log()] client lang: <none>
2025-11-26T03:43:31.032 [DEBUG] [Thread-11079] [transport.py] [_log()] server lang: <none>
2025-11-26T03:43:31.032 [DEBUG] [Thread-11079] [transport.py] [_log()] kex follows: False
2025-11-26T03:43:31.032 [DEBUG] [Thread-11079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:43:31.032 [DEBUG] [Thread-11079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:43:31.032 [DEBUG] [Thread-11079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:43:31.032 [DEBUG] [Thread-11079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:43:31.032 [DEBUG] [Thread-11079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:43:31.032 [DEBUG] [Thread-11079] [transport.py] [_log()] Compression: none
2025-11-26T03:43:31.032 [DEBUG] [Thread-11079] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:43:31.090 [DEBUG] [Thread-11079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:43:31.091 [DEBUG] [Thread-11079] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:43:31.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:43:31.092 [DEBUG] [Thread-11079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:43:31.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:43:31.147 [DEBUG] [Thread-11079] [transport.py] [_log()] userauth is OK
2025-11-26T03:43:31.147 [DEBUG] [Thread-11079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:43:31.147 [DEBUG] [Thread-11079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:43:31.147 [DEBUG] [Thread-11079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:43:31.147 [DEBUG] [Thread-11079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:43:31.166 [INFO] [Thread-11079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:43:31.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:43:31.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:43:32.005 [DEBUG] [Thread-11079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:43:32.005 [DEBUG] [Thread-11079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:43:32.053 [DEBUG] [Thread-11079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:43:32.053 [DEBUG] [Thread-11079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:43:32.062 [DEBUG] [Thread-11079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:43:32.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:43:32.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:43:32.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:43:32.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:43:32.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:43:32.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:43:32.099 [DEBUG] [Thread-11079] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:43:32.172 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:40.786 [DEBUG] [Thread-11081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:42.642 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:53.027 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:55.833 [DEBUG] [Thread-11082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:58.753 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:43:58.754 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:44:02.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:44:02.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:44:02.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 43, 55), 28.89, 13.19, 0.0, 9.49, 19.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:44:02.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:43:55
2025-11-26T03:44:02.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:44:03.046 [DEBUG] [Thread-11083] [transport.py] [_log()] starting thread (client mode): 0x70d7ee60
2025-11-26T03:44:03.046 [DEBUG] [Thread-11083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:44:03.067 [DEBUG] [Thread-11083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:44:03.067 [INFO] [Thread-11083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:44:03.070 [DEBUG] [Thread-11083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:44:03.070 [DEBUG] [Thread-11083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:44:03.070 [DEBUG] [Thread-11083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:44:03.070 [DEBUG] [Thread-11083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:44:03.070 [DEBUG] [Thread-11083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:44:03.070 [DEBUG] [Thread-11083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:44:03.070 [DEBUG] [Thread-11083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:44:03.070 [DEBUG] [Thread-11083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] client lang: <none>
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] server lang: <none>
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] kex follows: False
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] Compression: none
2025-11-26T03:44:03.071 [DEBUG] [Thread-11083] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:44:03.090 [DEBUG] [Thread-11083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:44:03.090 [DEBUG] [Thread-11083] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:44:03.091 [DEBUG] [Thread-11083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:44:03.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:44:03.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:44:03.093 [DEBUG] [Thread-11083] [transport.py] [_log()] userauth is OK
2025-11-26T03:44:03.093 [DEBUG] [Thread-11083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:44:03.094 [DEBUG] [Thread-11083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:44:03.094 [DEBUG] [Thread-11083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:44:03.094 [DEBUG] [Thread-11083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:44:03.117 [INFO] [Thread-11083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:44:03.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:44:03.427 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:03.763 [DEBUG] [Thread-11083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:44:03.763 [DEBUG] [Thread-11083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:44:03.764 [DEBUG] [Thread-11083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:44:03.805 [DEBUG] [Thread-11083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:44:03.805 [DEBUG] [Thread-11083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:44:03.808 [DEBUG] [Thread-11083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:44:03.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:44:03.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:44:03.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:44:03.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:44:03.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:44:03.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:44:03.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:44:03.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:44:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:44:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.071970 -999.00  +20.20  10.81     17   -5.00 1 1 1 1 1     0    0 24.69 -40.03 ZNESW 10.8 10.8 76.2 11.7 19.7 -26.3 19.6 -25.7 19.4 -24.2 19.6 -25.3
2025-11-26T03:44:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:44:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:44:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.071970
2025-11-26T03:44:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:44:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:44:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:44:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:44:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:44:03.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:43:55', tmtdew=28.89, humidity=13.19, cloud=0.0, wind=9.49, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:43:55', seeing=1.34, atlas_timestamp='2025-11-26T01:43:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:39:00')
2025-11-26T03:44:03.835 [DEBUG] [Thread-11083] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:44:03.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:44:03.931 [DEBUG] [Thread-11086] [transport.py] [_log()] starting thread (client mode): 0x70d75570
2025-11-26T03:44:03.931 [DEBUG] [Thread-11086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:44:03.945 [DEBUG] [Thread-11086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:44:03.945 [INFO] [Thread-11086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] client lang: <none>
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] server lang: <none>
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] kex follows: False
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:44:03.953 [DEBUG] [Thread-11086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:44:03.954 [DEBUG] [Thread-11086] [transport.py] [_log()] Compression: none
2025-11-26T03:44:03.954 [DEBUG] [Thread-11086] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:44:04.011 [DEBUG] [Thread-11086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:44:04.011 [DEBUG] [Thread-11086] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:44:04.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:44:04.012 [DEBUG] [Thread-11086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:44:04.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:44:04.066 [DEBUG] [Thread-11086] [transport.py] [_log()] userauth is OK
2025-11-26T03:44:04.066 [DEBUG] [Thread-11086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:44:04.066 [DEBUG] [Thread-11086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:44:04.066 [DEBUG] [Thread-11086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:44:04.066 [DEBUG] [Thread-11086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:44:04.084 [INFO] [Thread-11086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:44:04.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:44:04.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:44:04.875 [DEBUG] [Thread-11086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:44:04.876 [DEBUG] [Thread-11086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:44:04.923 [DEBUG] [Thread-11086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:44:04.924 [DEBUG] [Thread-11086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:44:04.933 [DEBUG] [Thread-11086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:44:04.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:44:04.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:44:04.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:44:04.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:44:04.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:44:04.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:44:04.970 [DEBUG] [Thread-11086] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:44:10.864 [DEBUG] [Thread-11088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:13.818 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:24.218 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:25.919 [DEBUG] [Thread-11089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:26.265 [DEBUG] [Thread-11090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:34.627 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:34.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:44:34.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:44:34.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:44:35.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 44, 27), 28.84, 13.26, 0.0, 9.6, 19.28, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:44:35.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:44:27
2025-11-26T03:44:35.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:44:35.905 [DEBUG] [Thread-11091] [transport.py] [_log()] starting thread (client mode): 0x70de6950
2025-11-26T03:44:35.906 [DEBUG] [Thread-11091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:44:35.926 [DEBUG] [Thread-11091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:44:35.926 [INFO] [Thread-11091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:44:35.929 [DEBUG] [Thread-11091] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:44:35.929 [DEBUG] [Thread-11091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:44:35.929 [DEBUG] [Thread-11091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:44:35.929 [DEBUG] [Thread-11091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:44:35.929 [DEBUG] [Thread-11091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:44:35.929 [DEBUG] [Thread-11091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] client lang: <none>
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] server lang: <none>
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] kex follows: False
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] Compression: none
2025-11-26T03:44:35.930 [DEBUG] [Thread-11091] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:44:35.949 [DEBUG] [Thread-11091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:44:35.950 [DEBUG] [Thread-11091] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:44:35.950 [DEBUG] [Thread-11091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:44:35.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:44:35.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:44:35.953 [DEBUG] [Thread-11091] [transport.py] [_log()] userauth is OK
2025-11-26T03:44:35.953 [DEBUG] [Thread-11091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:44:35.953 [DEBUG] [Thread-11091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:44:35.953 [DEBUG] [Thread-11091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:44:35.953 [DEBUG] [Thread-11091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:44:35.978 [INFO] [Thread-11091] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:44:35.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:44:36.616 [DEBUG] [Thread-11091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:44:36.616 [DEBUG] [Thread-11091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:44:36.617 [DEBUG] [Thread-11091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:44:36.658 [DEBUG] [Thread-11091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:44:36.658 [DEBUG] [Thread-11091] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:44:36.661 [DEBUG] [Thread-11091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:44:36.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:44:36.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:44:36.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:44:36.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:44:36.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:44:36.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:44:36.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:44:36.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:44:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:44:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.072317 -999.00  +20.20  11.95     17   -5.00 1 1 1 1 1     0    0 24.26 -34.79 ZNESW 11.4 11.9 69.4 12.3 19.7 -26.1 19.6 -25.5 19.3 -24.1 19.6 -25.3
2025-11-26T03:44:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:44:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:44:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.072317
2025-11-26T03:44:36.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:44:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:44:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:44:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:44:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:44:36.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:44:27', tmtdew=28.84, humidity=13.26, cloud=0.0, wind=9.6, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:44:27', seeing=1.25, atlas_timestamp='2025-11-26T01:44:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:43:00')
2025-11-26T03:44:36.688 [DEBUG] [Thread-11091] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:44:36.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:44:36.785 [DEBUG] [Thread-11094] [transport.py] [_log()] starting thread (client mode): 0x70de6380
2025-11-26T03:44:36.786 [DEBUG] [Thread-11094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:44:36.803 [DEBUG] [Thread-11094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:44:36.803 [INFO] [Thread-11094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:44:36.810 [DEBUG] [Thread-11094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] client lang: <none>
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] server lang: <none>
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] kex follows: False
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] Compression: none
2025-11-26T03:44:36.811 [DEBUG] [Thread-11094] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:44:36.870 [DEBUG] [Thread-11094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:44:36.871 [DEBUG] [Thread-11094] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:44:36.871 [DEBUG] [Thread-11094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:44:36.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:44:36.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:44:36.926 [DEBUG] [Thread-11094] [transport.py] [_log()] userauth is OK
2025-11-26T03:44:36.926 [DEBUG] [Thread-11094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:44:36.926 [DEBUG] [Thread-11094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:44:36.927 [DEBUG] [Thread-11094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:44:36.927 [DEBUG] [Thread-11094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:44:36.945 [INFO] [Thread-11094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:44:36.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:44:36.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:44:37.788 [DEBUG] [Thread-11094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:44:37.788 [DEBUG] [Thread-11094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:44:37.835 [DEBUG] [Thread-11094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:44:37.836 [DEBUG] [Thread-11094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:44:37.845 [DEBUG] [Thread-11094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:44:37.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:44:37.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:44:37.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:44:37.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:44:37.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:44:37.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:44:37.882 [DEBUG] [Thread-11094] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:44:40.951 [DEBUG] [Thread-11096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:45.029 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:55.423 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:56.006 [DEBUG] [Thread-11097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:58.954 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:44:58.955 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:05.870 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:07.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:45:07.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:45:07.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:45:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 44, 59), 28.88, 13.19, 0.0, 9.74, 19.2, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:45:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:44:59
2025-11-26T03:45:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:45:08.882 [DEBUG] [Thread-11098] [transport.py] [_log()] starting thread (client mode): 0x70de47c0
2025-11-26T03:45:08.882 [DEBUG] [Thread-11098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:45:08.904 [DEBUG] [Thread-11098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:45:08.904 [INFO] [Thread-11098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:45:08.907 [DEBUG] [Thread-11098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] client lang: <none>
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] server lang: <none>
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] kex follows: False
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] Compression: none
2025-11-26T03:45:08.913 [DEBUG] [Thread-11098] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:45:08.930 [DEBUG] [Thread-11098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:45:08.930 [DEBUG] [Thread-11098] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:45:08.930 [DEBUG] [Thread-11098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:45:08.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:45:08.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:45:08.931 [DEBUG] [Thread-11098] [transport.py] [_log()] userauth is OK
2025-11-26T03:45:08.931 [DEBUG] [Thread-11098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:45:08.931 [DEBUG] [Thread-11098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:45:08.931 [DEBUG] [Thread-11098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:45:08.931 [DEBUG] [Thread-11098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:45:08.948 [INFO] [Thread-11098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:45:08.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:45:09.740 [DEBUG] [Thread-11098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:45:09.741 [DEBUG] [Thread-11098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:45:09.741 [DEBUG] [Thread-11098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:45:09.781 [DEBUG] [Thread-11098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:45:09.781 [DEBUG] [Thread-11098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:45:09.783 [DEBUG] [Thread-11098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:45:09.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:45:09.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:45:09.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:45:09.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:45:09.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:45:09.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:45:09.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.072665 -999.00  +20.20   7.16     17   -5.00 1 1 1 1 1     0    0 24.93 -34.93 ZNESW 7.1 7.2 83.8 12.4 19.8 -26.3 19.6 -25.5 19.3 -24.4 19.5 -25.3
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.072665
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:45:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:44:59', tmtdew=28.88, humidity=13.19, cloud=0.0, wind=9.74, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:45:00', seeing=1.28, atlas_timestamp='2025-11-26T01:44:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:43:00')
2025-11-26T03:45:09.805 [DEBUG] [Thread-11098] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:45:09.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:45:09.893 [DEBUG] [Thread-11101] [transport.py] [_log()] starting thread (client mode): 0x70de40d0
2025-11-26T03:45:09.894 [DEBUG] [Thread-11101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:45:09.908 [DEBUG] [Thread-11101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:45:09.908 [INFO] [Thread-11101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] client lang: <none>
2025-11-26T03:45:09.915 [DEBUG] [Thread-11101] [transport.py] [_log()] server lang: <none>
2025-11-26T03:45:09.916 [DEBUG] [Thread-11101] [transport.py] [_log()] kex follows: False
2025-11-26T03:45:09.916 [DEBUG] [Thread-11101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:45:09.916 [DEBUG] [Thread-11101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:45:09.916 [DEBUG] [Thread-11101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:45:09.916 [DEBUG] [Thread-11101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:45:09.916 [DEBUG] [Thread-11101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:45:09.916 [DEBUG] [Thread-11101] [transport.py] [_log()] Compression: none
2025-11-26T03:45:09.916 [DEBUG] [Thread-11101] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:45:09.977 [DEBUG] [Thread-11101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:45:09.977 [DEBUG] [Thread-11101] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:45:09.978 [DEBUG] [Thread-11101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:45:09.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:45:09.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:45:10.035 [DEBUG] [Thread-11101] [transport.py] [_log()] userauth is OK
2025-11-26T03:45:10.035 [DEBUG] [Thread-11101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:45:10.035 [DEBUG] [Thread-11101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:45:10.035 [DEBUG] [Thread-11101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:45:10.035 [DEBUG] [Thread-11101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:45:10.049 [INFO] [Thread-11101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:45:10.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:45:10.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:45:10.847 [DEBUG] [Thread-11101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:45:10.847 [DEBUG] [Thread-11101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:45:10.896 [DEBUG] [Thread-11101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:45:10.896 [DEBUG] [Thread-11101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:45:10.905 [DEBUG] [Thread-11101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:45:10.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:45:10.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:45:10.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:45:10.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:45:10.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:45:10.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:45:10.951 [DEBUG] [Thread-11101] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:45:11.039 [DEBUG] [Thread-11103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:16.295 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:26.082 [DEBUG] [Thread-11104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:26.329 [DEBUG] [Thread-11105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:26.690 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:37.095 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:40.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:45:40.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:45:40.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:45:41.118 [DEBUG] [Thread-11106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:41.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 45, 31), 28.88, 13.21, 0.0, 10.02, 19.27, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:45:41.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:45:31
2025-11-26T03:45:41.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:45:41.911 [DEBUG] [Thread-11107] [transport.py] [_log()] starting thread (client mode): 0x70d7cd30
2025-11-26T03:45:41.912 [DEBUG] [Thread-11107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:45:41.929 [DEBUG] [Thread-11107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:45:41.929 [INFO] [Thread-11107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:45:41.930 [DEBUG] [Thread-11107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:45:41.930 [DEBUG] [Thread-11107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:45:41.930 [DEBUG] [Thread-11107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:45:41.930 [DEBUG] [Thread-11107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] client lang: <none>
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] server lang: <none>
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] kex follows: False
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] Compression: none
2025-11-26T03:45:41.931 [DEBUG] [Thread-11107] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:45:41.948 [DEBUG] [Thread-11107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:45:41.948 [DEBUG] [Thread-11107] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:45:41.949 [DEBUG] [Thread-11107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:45:41.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:45:41.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:45:41.951 [DEBUG] [Thread-11107] [transport.py] [_log()] userauth is OK
2025-11-26T03:45:41.951 [DEBUG] [Thread-11107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:45:41.951 [DEBUG] [Thread-11107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:45:41.952 [DEBUG] [Thread-11107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:45:41.952 [DEBUG] [Thread-11107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:45:41.988 [INFO] [Thread-11107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:45:41.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:45:42.616 [DEBUG] [Thread-11107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:45:42.616 [DEBUG] [Thread-11107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:45:42.616 [DEBUG] [Thread-11107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:45:42.657 [DEBUG] [Thread-11107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:45:42.657 [DEBUG] [Thread-11107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:45:42.661 [DEBUG] [Thread-11107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:45:42.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:45:42.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:45:42.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:45:42.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:45:42.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:45:42.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:45:42.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:45:42.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:45:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:45:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.073012 -999.00  +20.10   8.01     17   -5.10 1 1 1 1 1     0    0 24.29 -34.97 ZNESW 10.1 8.0 89.7 11.8 19.7 -26.3 19.6 -25.6 19.3 -24.2 19.6 -25.4
2025-11-26T03:45:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:45:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:45:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.073012
2025-11-26T03:45:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:45:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:45:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:45:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:45:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:45:42.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:45:31', tmtdew=28.88, humidity=13.21, cloud=0.0, wind=10.02, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:45:32', seeing=1.36, atlas_timestamp='2025-11-26T01:45:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:43:00')
2025-11-26T03:45:42.688 [DEBUG] [Thread-11107] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:45:42.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:45:42.784 [DEBUG] [Thread-11110] [transport.py] [_log()] starting thread (client mode): 0x70d7e9b0
2025-11-26T03:45:42.784 [DEBUG] [Thread-11110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:45:42.798 [DEBUG] [Thread-11110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:45:42.798 [INFO] [Thread-11110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:45:42.806 [DEBUG] [Thread-11110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:45:42.806 [DEBUG] [Thread-11110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:45:42.806 [DEBUG] [Thread-11110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:45:42.806 [DEBUG] [Thread-11110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:45:42.807 [DEBUG] [Thread-11110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:45:42.807 [DEBUG] [Thread-11110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:45:42.807 [DEBUG] [Thread-11110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:45:42.807 [DEBUG] [Thread-11110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:45:42.807 [DEBUG] [Thread-11110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:45:42.807 [DEBUG] [Thread-11110] [transport.py] [_log()] client lang: <none>
2025-11-26T03:45:42.807 [DEBUG] [Thread-11110] [transport.py] [_log()] server lang: <none>
2025-11-26T03:45:42.807 [DEBUG] [Thread-11110] [transport.py] [_log()] kex follows: False
2025-11-26T03:45:42.807 [DEBUG] [Thread-11110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:45:42.808 [DEBUG] [Thread-11110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:45:42.808 [DEBUG] [Thread-11110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:45:42.808 [DEBUG] [Thread-11110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:45:42.808 [DEBUG] [Thread-11110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:45:42.808 [DEBUG] [Thread-11110] [transport.py] [_log()] Compression: none
2025-11-26T03:45:42.808 [DEBUG] [Thread-11110] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:45:42.865 [DEBUG] [Thread-11110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:45:42.865 [DEBUG] [Thread-11110] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:45:42.865 [DEBUG] [Thread-11110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:45:42.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:45:42.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:45:42.923 [DEBUG] [Thread-11110] [transport.py] [_log()] userauth is OK
2025-11-26T03:45:42.924 [DEBUG] [Thread-11110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:45:42.924 [DEBUG] [Thread-11110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:45:42.924 [DEBUG] [Thread-11110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:45:42.924 [DEBUG] [Thread-11110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:45:42.942 [INFO] [Thread-11110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:45:42.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:45:42.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:45:43.753 [DEBUG] [Thread-11110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:45:43.753 [DEBUG] [Thread-11110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:45:43.801 [DEBUG] [Thread-11110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:45:43.801 [DEBUG] [Thread-11110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:45:43.809 [DEBUG] [Thread-11110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:45:43.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:45:43.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:45:43.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:45:43.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:45:43.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:45:43.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:45:43.841 [DEBUG] [Thread-11110] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:45:47.500 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:56.149 [DEBUG] [Thread-11112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:57.927 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:59.155 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:45:59.157 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:08.363 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:11.202 [DEBUG] [Thread-11113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:13.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:46:13.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:46:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:46:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 46, 3), 28.82, 13.27, 0.0, 9.44, 19.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:46:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:46:03
2025-11-26T03:46:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:46:14.803 [DEBUG] [Thread-11114] [transport.py] [_log()] starting thread (client mode): 0x70de7460
2025-11-26T03:46:14.803 [DEBUG] [Thread-11114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:46:14.820 [DEBUG] [Thread-11114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:46:14.821 [INFO] [Thread-11114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] client lang: <none>
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] server lang: <none>
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] kex follows: False
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] Compression: none
2025-11-26T03:46:14.824 [DEBUG] [Thread-11114] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:46:14.841 [DEBUG] [Thread-11114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:46:14.841 [DEBUG] [Thread-11114] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:46:14.842 [DEBUG] [Thread-11114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:46:14.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:46:14.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:46:14.844 [DEBUG] [Thread-11114] [transport.py] [_log()] userauth is OK
2025-11-26T03:46:14.844 [DEBUG] [Thread-11114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:46:14.844 [DEBUG] [Thread-11114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:46:14.844 [DEBUG] [Thread-11114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:46:14.844 [DEBUG] [Thread-11114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:46:14.865 [INFO] [Thread-11114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:46:14.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:46:15.481 [DEBUG] [Thread-11114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:46:15.481 [DEBUG] [Thread-11114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:46:15.481 [DEBUG] [Thread-11114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:46:15.522 [DEBUG] [Thread-11114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:46:15.522 [DEBUG] [Thread-11114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:46:15.525 [DEBUG] [Thread-11114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:46:15.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:46:15.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:46:15.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:46:15.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:46:15.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:46:15.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:46:15.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:46:15.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:46:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:46:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.073706 -999.00  +20.10   9.61     17   -5.00 1 1 1 1 1     0    0 24.40 -32.25 ZNESW 10.8 9.6 76.0 10.8 19.7 -26.0 19.6 -25.5 19.3 -24.2 19.6 -25.3
2025-11-26T03:46:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:46:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:46:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.073706
2025-11-26T03:46:15.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:46:15.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:46:15.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:46:15.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:46:15.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:46:15.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:46:03', tmtdew=28.82, humidity=13.27, cloud=0.0, wind=9.44, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:46:04', seeing=1.36, atlas_timestamp='2025-11-26T01:46:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:43:00')
2025-11-26T03:46:15.545 [DEBUG] [Thread-11114] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:46:15.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:46:15.646 [DEBUG] [Thread-11117] [transport.py] [_log()] starting thread (client mode): 0x70de5750
2025-11-26T03:46:15.646 [DEBUG] [Thread-11117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:46:15.665 [DEBUG] [Thread-11117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:46:15.665 [INFO] [Thread-11117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:46:15.673 [DEBUG] [Thread-11117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:46:15.673 [DEBUG] [Thread-11117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:46:15.673 [DEBUG] [Thread-11117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:46:15.673 [DEBUG] [Thread-11117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:46:15.673 [DEBUG] [Thread-11117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:46:15.674 [DEBUG] [Thread-11117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:46:15.674 [DEBUG] [Thread-11117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:46:15.674 [DEBUG] [Thread-11117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:46:15.674 [DEBUG] [Thread-11117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:46:15.674 [DEBUG] [Thread-11117] [transport.py] [_log()] client lang: <none>
2025-11-26T03:46:15.674 [DEBUG] [Thread-11117] [transport.py] [_log()] server lang: <none>
2025-11-26T03:46:15.674 [DEBUG] [Thread-11117] [transport.py] [_log()] kex follows: False
2025-11-26T03:46:15.674 [DEBUG] [Thread-11117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:46:15.674 [DEBUG] [Thread-11117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:46:15.675 [DEBUG] [Thread-11117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:46:15.675 [DEBUG] [Thread-11117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:46:15.675 [DEBUG] [Thread-11117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:46:15.675 [DEBUG] [Thread-11117] [transport.py] [_log()] Compression: none
2025-11-26T03:46:15.675 [DEBUG] [Thread-11117] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:46:15.732 [DEBUG] [Thread-11117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:46:15.732 [DEBUG] [Thread-11117] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:46:15.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:46:15.734 [DEBUG] [Thread-11117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:46:15.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:46:15.787 [DEBUG] [Thread-11117] [transport.py] [_log()] userauth is OK
2025-11-26T03:46:15.788 [DEBUG] [Thread-11117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:46:15.788 [DEBUG] [Thread-11117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:46:15.788 [DEBUG] [Thread-11117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:46:15.788 [DEBUG] [Thread-11117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:46:15.807 [INFO] [Thread-11117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:46:15.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:46:15.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:46:16.625 [DEBUG] [Thread-11117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:46:16.625 [DEBUG] [Thread-11117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:46:16.672 [DEBUG] [Thread-11117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:46:16.673 [DEBUG] [Thread-11117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:46:16.681 [DEBUG] [Thread-11117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:46:16.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:46:16.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:46:16.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
2025-11-26T03:46:16.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:46:16.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:46:16.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:46:16.717 [DEBUG] [Thread-11117] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:46:18.798 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:26.234 [DEBUG] [Thread-11119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:26.389 [DEBUG] [Thread-11120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:29.230 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:39.649 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:41.275 [DEBUG] [Thread-11121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:46.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:46:46.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:46:46.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:46:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 46, 35), 28.82, 13.27, 0.0, 10.04, 19.28, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:46:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:46:35
2025-11-26T03:46:47.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:46:47.691 [DEBUG] [Thread-11122] [transport.py] [_log()] starting thread (client mode): 0x70de6320
2025-11-26T03:46:47.691 [DEBUG] [Thread-11122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:46:47.702 [DEBUG] [Thread-11122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:46:47.702 [INFO] [Thread-11122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] client lang: <none>
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] server lang: <none>
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] kex follows: False
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] Compression: none
2025-11-26T03:46:47.704 [DEBUG] [Thread-11122] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:46:47.716 [DEBUG] [Thread-11122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:46:47.716 [DEBUG] [Thread-11122] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:46:47.716 [DEBUG] [Thread-11122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:46:47.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:46:47.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:46:47.718 [DEBUG] [Thread-11122] [transport.py] [_log()] userauth is OK
2025-11-26T03:46:47.718 [DEBUG] [Thread-11122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:46:47.718 [DEBUG] [Thread-11122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:46:47.718 [DEBUG] [Thread-11122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:46:47.718 [DEBUG] [Thread-11122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:46:47.733 [INFO] [Thread-11122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:46:47.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:46:48.293 [DEBUG] [Thread-11122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:46:48.293 [DEBUG] [Thread-11122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:46:48.294 [DEBUG] [Thread-11122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:46:48.335 [DEBUG] [Thread-11122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:46:48.335 [DEBUG] [Thread-11122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:46:48.337 [DEBUG] [Thread-11122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:46:48.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:46:48.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:46:48.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:46:48.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:46:48.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:46:48.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:46:48.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:46:48.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:46:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.074054 -999.00  +20.20  11.76     17   -5.00 1 1 1 1 1     0    0 24.58 -31.10 ZNESW 11.1 11.8 71.8 12.2 19.7 -26.1 19.6 -25.6 19.3 -24.3 19.6 -25.5
2025-11-26T03:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.074054
2025-11-26T03:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:46:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:46:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:46:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:46:48.364 [DEBUG] [Thread-11122] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:46:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:46:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:46:35', tmtdew=28.82, humidity=13.27, cloud=0.0, wind=10.04, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:46:36', seeing=1.12, atlas_timestamp='2025-11-26T01:46:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04925000000000068, -0.03974999999999973, -0.018749999999998934, -0.028000000000002245, 0.013500000000000512, 0.04125000000000156, -0.012500000000001066, -0.031749999999998835, -0.009500000000000952, -0.016500000000000625, -0.06475000000000009, 0.018000000000000682, 0.0625, 0.01624999999999943, -0.03900000000000148, 0.006999999999999673, -0.008749999999999147, 0.019000000000000128, -0.034000000000000696, -0.012750000000000483, 0.06099999999999817, 0.04774999999999885, -0.0007500000000000284, -0.015249999999999986, 0.011999999999998678, 0.04749999999999943, -0.012750000000000483, 0.012000000000000455, 0.11400000000000077, 0.031000000000000583, 0.06100000000000172, 0.017000000000001236, 0.02024999999999899], zp_timestamp='2025-11-26T01:43:00')
2025-11-26T03:46:48.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:46:48.460 [DEBUG] [Thread-11125] [transport.py] [_log()] starting thread (client mode): 0x70de7700
2025-11-26T03:46:48.460 [DEBUG] [Thread-11125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:46:48.475 [DEBUG] [Thread-11125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:46:48.476 [INFO] [Thread-11125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:46:48.483 [DEBUG] [Thread-11125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:46:48.483 [DEBUG] [Thread-11125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:46:48.483 [DEBUG] [Thread-11125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:46:48.483 [DEBUG] [Thread-11125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:46:48.483 [DEBUG] [Thread-11125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:46:48.483 [DEBUG] [Thread-11125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:46:48.483 [DEBUG] [Thread-11125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:46:48.483 [DEBUG] [Thread-11125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:46:48.483 [DEBUG] [Thread-11125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] client lang: <none>
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] server lang: <none>
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] kex follows: False
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] Compression: none
2025-11-26T03:46:48.484 [DEBUG] [Thread-11125] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:46:48.543 [DEBUG] [Thread-11125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:46:48.544 [DEBUG] [Thread-11125] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:46:48.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:46:48.545 [DEBUG] [Thread-11125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:46:48.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:46:48.600 [DEBUG] [Thread-11125] [transport.py] [_log()] userauth is OK
2025-11-26T03:46:48.600 [DEBUG] [Thread-11125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:46:48.600 [DEBUG] [Thread-11125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:46:48.600 [DEBUG] [Thread-11125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:46:48.601 [DEBUG] [Thread-11125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:46:48.619 [INFO] [Thread-11125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:46:48.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:46:48.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:46:49.457 [DEBUG] [Thread-11125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:46:49.457 [DEBUG] [Thread-11125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:46:49.505 [DEBUG] [Thread-11125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:46:49.505 [DEBUG] [Thread-11125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:46:49.514 [DEBUG] [Thread-11125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:46:49.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:46:49.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:46: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
2025-11-26T03:46:49.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:46:49.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:46:49.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:46:49.551 [DEBUG] [Thread-11125] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:46:50.113 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:56.310 [DEBUG] [Thread-11127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:59.357 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:46:59.358 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:00.505 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:10.904 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:11.357 [DEBUG] [Thread-11128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:19.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:47:19.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:47:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:47:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 47, 7), 28.85, 13.22, 0.0, 9.67, 19.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:47:20.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:47:07
2025-11-26T03:47:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:47:20.529 [DEBUG] [Thread-11129] [transport.py] [_log()] starting thread (client mode): 0x70d74d00
2025-11-26T03:47:20.529 [DEBUG] [Thread-11129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:47:20.550 [DEBUG] [Thread-11129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:47:20.550 [INFO] [Thread-11129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] client lang: <none>
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] server lang: <none>
2025-11-26T03:47:20.554 [DEBUG] [Thread-11129] [transport.py] [_log()] kex follows: False
2025-11-26T03:47:20.555 [DEBUG] [Thread-11129] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:47:20.555 [DEBUG] [Thread-11129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:47:20.555 [DEBUG] [Thread-11129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:47:20.555 [DEBUG] [Thread-11129] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:47:20.555 [DEBUG] [Thread-11129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:47:20.555 [DEBUG] [Thread-11129] [transport.py] [_log()] Compression: none
2025-11-26T03:47:20.555 [DEBUG] [Thread-11129] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:47:20.570 [DEBUG] [Thread-11129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:47:20.570 [DEBUG] [Thread-11129] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:47:20.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:47:20.571 [DEBUG] [Thread-11129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:47:20.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:47:20.573 [DEBUG] [Thread-11129] [transport.py] [_log()] userauth is OK
2025-11-26T03:47:20.573 [DEBUG] [Thread-11129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:47:20.573 [DEBUG] [Thread-11129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:47:20.574 [DEBUG] [Thread-11129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:47:20.574 [DEBUG] [Thread-11129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:47:20.597 [INFO] [Thread-11129] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:47:20.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:47:21.223 [DEBUG] [Thread-11129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:47:21.223 [DEBUG] [Thread-11129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:47:21.224 [DEBUG] [Thread-11129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:47:21.265 [DEBUG] [Thread-11129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:47:21.265 [DEBUG] [Thread-11129] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:47:21.269 [DEBUG] [Thread-11129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:47:21.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:47:21.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:47:21.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:47:21.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:47:21.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:47:21.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:47:21.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:47:21.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:47:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:47:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.074054 -999.00  +20.20  11.76     17   -5.00 1 1 1 1 1     0    0 24.58 -31.10 ZNESW 11.1 11.8 71.8 12.2 19.7 -26.1 19.6 -25.6 19.3 -24.3 19.6 -25.5
2025-11-26T03:47:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:47:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:47:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.074054
2025-11-26T03:47:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:47:21.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:47:21.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:47:21.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:47:21.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:47:21.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:47:07', tmtdew=28.85, humidity=13.22, cloud=0.0, wind=9.67, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:47:08', seeing=1.24, atlas_timestamp='2025-11-26T01:46:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:46:00')
2025-11-26T03:47:21.296 [DEBUG] [Thread-11129] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:47:21.348 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:21.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:47:21.392 [DEBUG] [Thread-11132] [transport.py] [_log()] starting thread (client mode): 0x70d75780
2025-11-26T03:47:21.392 [DEBUG] [Thread-11132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:47:21.407 [DEBUG] [Thread-11132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:47:21.407 [INFO] [Thread-11132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:47:21.416 [DEBUG] [Thread-11132] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:47:21.416 [DEBUG] [Thread-11132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] client lang: <none>
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] server lang: <none>
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] kex follows: False
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] Compression: none
2025-11-26T03:47:21.417 [DEBUG] [Thread-11132] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:47:21.476 [DEBUG] [Thread-11132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:47:21.477 [DEBUG] [Thread-11132] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:47:21.477 [DEBUG] [Thread-11132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:47:21.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:47:21.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:47:21.532 [DEBUG] [Thread-11132] [transport.py] [_log()] userauth is OK
2025-11-26T03:47:21.533 [DEBUG] [Thread-11132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:47:21.533 [DEBUG] [Thread-11132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:47:21.533 [DEBUG] [Thread-11132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:47:21.533 [DEBUG] [Thread-11132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:47:21.551 [INFO] [Thread-11132] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:47:21.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:47:21.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:47:22.324 [DEBUG] [Thread-11132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:47:22.324 [DEBUG] [Thread-11132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:47:22.371 [DEBUG] [Thread-11132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:47:22.371 [DEBUG] [Thread-11132] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:47:22.379 [DEBUG] [Thread-11132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:47:22.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:47:22.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:47:22.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:47:22.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:47:22.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:47:22.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:47:22.411 [DEBUG] [Thread-11132] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:47:26.394 [DEBUG] [Thread-11134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:26.469 [DEBUG] [Thread-11135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:31.775 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:41.450 [DEBUG] [Thread-11136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:42.187 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:52.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:47:52.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:47:52.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:47:52.605 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 47, 39), 28.77, 13.29, 0.0, 9.83, 19.28, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:47:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:47:39
2025-11-26T03:47:53.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:47:53.384 [DEBUG] [Thread-11137] [transport.py] [_log()] starting thread (client mode): 0x70df9ab0
2025-11-26T03:47:53.384 [DEBUG] [Thread-11137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:47:53.406 [DEBUG] [Thread-11137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:47:53.406 [INFO] [Thread-11137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] client lang: <none>
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] server lang: <none>
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] kex follows: False
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:47:53.409 [DEBUG] [Thread-11137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:47:53.410 [DEBUG] [Thread-11137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:47:53.410 [DEBUG] [Thread-11137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:47:53.410 [DEBUG] [Thread-11137] [transport.py] [_log()] Compression: none
2025-11-26T03:47:53.410 [DEBUG] [Thread-11137] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:47:53.427 [DEBUG] [Thread-11137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:47:53.428 [DEBUG] [Thread-11137] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:47:53.428 [DEBUG] [Thread-11137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:47:53.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:47:53.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:47:53.430 [DEBUG] [Thread-11137] [transport.py] [_log()] userauth is OK
2025-11-26T03:47:53.431 [DEBUG] [Thread-11137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:47:53.431 [DEBUG] [Thread-11137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:47:53.431 [DEBUG] [Thread-11137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:47:53.431 [DEBUG] [Thread-11137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:47:53.448 [INFO] [Thread-11137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:47:53.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:47:54.067 [DEBUG] [Thread-11137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:47:54.067 [DEBUG] [Thread-11137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:47:54.068 [DEBUG] [Thread-11137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:47:54.108 [DEBUG] [Thread-11137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:47:54.108 [DEBUG] [Thread-11137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:47:54.111 [DEBUG] [Thread-11137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:47:54.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:47:54.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:47:54.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:47:54.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:47:54.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:47:54.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:47:54.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:47:54.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:47:54.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:47:54.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.074401 -999.00  +20.10   9.39     17   -5.00 1 1 1 1 1     0    0 24.28 -30.91 ZNESW 10.5 9.4 88.7 12.7 19.6 -26.0 19.6 -25.5 19.3 -24.3 19.5 -25.4
2025-11-26T03:47:54.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:47:54.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:47:54.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.074401
2025-11-26T03:47:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:47:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:47:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:47:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:47:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:47:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:47:39', tmtdew=28.77, humidity=13.29, cloud=0.0, wind=9.83, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:47:40', seeing=1.25, atlas_timestamp='2025-11-26T01:47:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:46:00')
2025-11-26T03:47:54.138 [DEBUG] [Thread-11137] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:47:54.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:47:54.233 [DEBUG] [Thread-11140] [transport.py] [_log()] starting thread (client mode): 0x70df8d90
2025-11-26T03:47:54.233 [DEBUG] [Thread-11140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:47:54.247 [DEBUG] [Thread-11140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:47:54.247 [INFO] [Thread-11140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] client lang: <none>
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] server lang: <none>
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] kex follows: False
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:47:54.255 [DEBUG] [Thread-11140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:47:54.256 [DEBUG] [Thread-11140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:47:54.256 [DEBUG] [Thread-11140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:47:54.256 [DEBUG] [Thread-11140] [transport.py] [_log()] Compression: none
2025-11-26T03:47:54.256 [DEBUG] [Thread-11140] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:47:54.313 [DEBUG] [Thread-11140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:47:54.314 [DEBUG] [Thread-11140] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:47:54.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:47:54.315 [DEBUG] [Thread-11140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:47:54.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:47:54.372 [DEBUG] [Thread-11140] [transport.py] [_log()] userauth is OK
2025-11-26T03:47:54.372 [DEBUG] [Thread-11140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:47:54.373 [DEBUG] [Thread-11140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:47:54.373 [DEBUG] [Thread-11140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:47:54.373 [DEBUG] [Thread-11140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:47:54.392 [INFO] [Thread-11140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:47:54.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:47:54.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:47:55.244 [DEBUG] [Thread-11140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:47:55.245 [DEBUG] [Thread-11140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:47:55.293 [DEBUG] [Thread-11140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:47:55.293 [DEBUG] [Thread-11140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:47:55.302 [DEBUG] [Thread-11140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:47:55.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:47:55.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:47:55.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:47:55.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:47:55.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:47:55.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:47:55.338 [DEBUG] [Thread-11140] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:47:56.481 [DEBUG] [Thread-11142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:59.556 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:47:59.557 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:03.015 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:11.522 [DEBUG] [Thread-11143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:13.412 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:23.811 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:25.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:48:25.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:48:25.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:48:26.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 48, 11), 28.8, 13.24, 0.0, 9.19, 19.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:48:26.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:48:11
2025-11-26T03:48:26.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:48:26.294 [DEBUG] [Thread-11144] [transport.py] [_log()] starting thread (client mode): 0x70dfa380
2025-11-26T03:48:26.294 [DEBUG] [Thread-11144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:48:26.316 [DEBUG] [Thread-11144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:48:26.316 [INFO] [Thread-11144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:48:26.318 [DEBUG] [Thread-11144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:48:26.318 [DEBUG] [Thread-11144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:48:26.318 [DEBUG] [Thread-11144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:48:26.318 [DEBUG] [Thread-11144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:48:26.318 [DEBUG] [Thread-11144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:48:26.318 [DEBUG] [Thread-11144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:48:26.318 [DEBUG] [Thread-11144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:48:26.318 [DEBUG] [Thread-11144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] client lang: <none>
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] server lang: <none>
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] kex follows: False
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] Compression: none
2025-11-26T03:48:26.319 [DEBUG] [Thread-11144] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:48:26.335 [DEBUG] [Thread-11144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:48:26.336 [DEBUG] [Thread-11144] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:48:26.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:48:26.337 [DEBUG] [Thread-11144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:48:26.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:48:26.340 [DEBUG] [Thread-11144] [transport.py] [_log()] userauth is OK
2025-11-26T03:48:26.340 [DEBUG] [Thread-11144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:48:26.340 [DEBUG] [Thread-11144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:48:26.340 [DEBUG] [Thread-11144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:48:26.340 [DEBUG] [Thread-11144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:48:26.366 [INFO] [Thread-11144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:48:26.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:48:26.542 [DEBUG] [Thread-11146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:26.553 [DEBUG] [Thread-11147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:26.978 [DEBUG] [Thread-11144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:48:26.978 [DEBUG] [Thread-11144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:48:26.979 [DEBUG] [Thread-11144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:48:27.020 [DEBUG] [Thread-11144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:48:27.020 [DEBUG] [Thread-11144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:48:27.023 [DEBUG] [Thread-11144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:48:27.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:48:27.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:48:27.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:48:27.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:48:27.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:48:27.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:48:27.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:48:27.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:48:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:48:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.074748 -999.00  +20.10   6.32     17   -4.90 1 1 1 1 1     0    0 24.70 -33.76 ZNESW 6.8 6.3 98.9 11.2 19.6 -26.2 19.6 -25.5 19.2 -24.3 19.5 -25.4
2025-11-26T03:48:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:48:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:48:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.074748
2025-11-26T03:48:27.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:48:27.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:48:27.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:48:27.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:48:27.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:48:27.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:48:11', tmtdew=28.8, humidity=13.24, cloud=0.0, wind=9.19, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:48:12', seeing=1.36, atlas_timestamp='2025-11-26T01:47:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:46:00')
2025-11-26T03:48:27.051 [DEBUG] [Thread-11144] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:48:27.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:48:27.150 [DEBUG] [Thread-11149] [transport.py] [_log()] starting thread (client mode): 0x70de5660
2025-11-26T03:48:27.150 [DEBUG] [Thread-11149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:48:27.165 [DEBUG] [Thread-11149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:48:27.166 [INFO] [Thread-11149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:48:27.173 [DEBUG] [Thread-11149] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:48:27.174 [DEBUG] [Thread-11149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:48:27.174 [DEBUG] [Thread-11149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:48:27.174 [DEBUG] [Thread-11149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:48:27.174 [DEBUG] [Thread-11149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:48:27.174 [DEBUG] [Thread-11149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:48:27.174 [DEBUG] [Thread-11149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:48:27.174 [DEBUG] [Thread-11149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:48:27.174 [DEBUG] [Thread-11149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:48:27.175 [DEBUG] [Thread-11149] [transport.py] [_log()] client lang: <none>
2025-11-26T03:48:27.175 [DEBUG] [Thread-11149] [transport.py] [_log()] server lang: <none>
2025-11-26T03:48:27.175 [DEBUG] [Thread-11149] [transport.py] [_log()] kex follows: False
2025-11-26T03:48:27.175 [DEBUG] [Thread-11149] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:48:27.175 [DEBUG] [Thread-11149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:48:27.176 [DEBUG] [Thread-11149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:48:27.176 [DEBUG] [Thread-11149] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:48:27.176 [DEBUG] [Thread-11149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:48:27.176 [DEBUG] [Thread-11149] [transport.py] [_log()] Compression: none
2025-11-26T03:48:27.176 [DEBUG] [Thread-11149] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:48:27.232 [DEBUG] [Thread-11149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:48:27.233 [DEBUG] [Thread-11149] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:48:27.234 [DEBUG] [Thread-11149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:48:27.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:48:27.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:48:27.289 [DEBUG] [Thread-11149] [transport.py] [_log()] userauth is OK
2025-11-26T03:48:27.289 [DEBUG] [Thread-11149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:48:27.289 [DEBUG] [Thread-11149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:48:27.289 [DEBUG] [Thread-11149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:48:27.289 [DEBUG] [Thread-11149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:48:27.308 [INFO] [Thread-11149] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:48:27.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:48:27.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:48:28.161 [DEBUG] [Thread-11149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:48:28.161 [DEBUG] [Thread-11149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:48:28.209 [DEBUG] [Thread-11149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:48:28.209 [DEBUG] [Thread-11149] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:48:28.218 [DEBUG] [Thread-11149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:48:28.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:48:28.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:48: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
2025-11-26T03:48:28.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:48:28.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:48:28.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:48:28.254 [DEBUG] [Thread-11149] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:48:34.206 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:41.587 [DEBUG] [Thread-11151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:44.620 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:55.030 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:56.636 [DEBUG] [Thread-11152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:58.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:48:58.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:48:58.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
2025-11-26T03:48:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 48, 43), 28.73, 13.26, 0.0, 9.9, 19.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:48:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:48:43
2025-11-26T03:48:59.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:48:59.205 [DEBUG] [Thread-11153] [transport.py] [_log()] starting thread (client mode): 0x70df80d0
2025-11-26T03:48:59.205 [DEBUG] [Thread-11153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:48:59.228 [DEBUG] [Thread-11153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:48:59.228 [INFO] [Thread-11153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:48:59.231 [DEBUG] [Thread-11153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] client lang: <none>
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] server lang: <none>
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] kex follows: False
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] Compression: none
2025-11-26T03:48:59.232 [DEBUG] [Thread-11153] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:48:59.241 [DEBUG] [Thread-11153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:48:59.242 [DEBUG] [Thread-11153] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:48:59.242 [DEBUG] [Thread-11153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:48:59.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:48:59.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:48:59.244 [DEBUG] [Thread-11153] [transport.py] [_log()] userauth is OK
2025-11-26T03:48:59.244 [DEBUG] [Thread-11153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:48:59.245 [DEBUG] [Thread-11153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:48:59.245 [DEBUG] [Thread-11153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:48:59.245 [DEBUG] [Thread-11153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:48:59.282 [INFO] [Thread-11153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:48:59.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:48:59.762 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:59.763 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:48:59.937 [DEBUG] [Thread-11153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:48:59.938 [DEBUG] [Thread-11153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:48:59.938 [DEBUG] [Thread-11153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:48:59.979 [DEBUG] [Thread-11153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:48:59.979 [DEBUG] [Thread-11153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:48:59.982 [DEBUG] [Thread-11153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:48:59.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:48:59.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:48:59.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:49:00.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:49:00.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:49:00.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:49:00.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:49:00.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:49:00.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:49:00.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.075095 -999.00  +20.10   7.50     17   -4.90 1 1 1 1 1     0    0 24.06 -36.69 ZNESW 11.5 7.5 87.0 11.9 19.6 -26.2 19.6 -25.5 19.3 -24.2 19.5 -25.2
2025-11-26T03:49:00.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:49:00.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:49:00.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.075095
2025-11-26T03:49:00.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:49:00.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:49:00.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:49:00.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:49:00.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:49:00.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:48:43', tmtdew=28.73, humidity=13.26, cloud=0.0, wind=9.9, temperature=19.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:48:44', seeing=1.28, atlas_timestamp='2025-11-26T01:48:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:46:00')
2025-11-26T03:49:00.013 [DEBUG] [Thread-11153] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:49:00.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:49:00.115 [DEBUG] [Thread-11156] [transport.py] [_log()] starting thread (client mode): 0x70df9b40
2025-11-26T03:49:00.116 [DEBUG] [Thread-11156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:49:00.130 [DEBUG] [Thread-11156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:49:00.130 [INFO] [Thread-11156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:49:00.137 [DEBUG] [Thread-11156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] client lang: <none>
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] server lang: <none>
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] kex follows: False
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:49:00.138 [DEBUG] [Thread-11156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:49:00.139 [DEBUG] [Thread-11156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:49:00.139 [DEBUG] [Thread-11156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:49:00.139 [DEBUG] [Thread-11156] [transport.py] [_log()] Compression: none
2025-11-26T03:49:00.139 [DEBUG] [Thread-11156] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:49:00.197 [DEBUG] [Thread-11156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:49:00.198 [DEBUG] [Thread-11156] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:49:00.198 [DEBUG] [Thread-11156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:49:00.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:49:00.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:49:00.253 [DEBUG] [Thread-11156] [transport.py] [_log()] userauth is OK
2025-11-26T03:49:00.253 [DEBUG] [Thread-11156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:49:00.253 [DEBUG] [Thread-11156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:49:00.253 [DEBUG] [Thread-11156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:49:00.253 [DEBUG] [Thread-11156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:49:00.273 [INFO] [Thread-11156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:49:00.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:49:00.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:49:01.071 [DEBUG] [Thread-11156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:49:01.072 [DEBUG] [Thread-11156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:49:01.120 [DEBUG] [Thread-11156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:49:01.120 [DEBUG] [Thread-11156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:49:01.129 [DEBUG] [Thread-11156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:49:01.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:49:01.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:49:01.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:49:01.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:49:01.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:49:01.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:49:01.166 [DEBUG] [Thread-11156] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:49:05.467 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:11.678 [DEBUG] [Thread-11158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:15.917 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:26.358 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:26.601 [DEBUG] [Thread-11159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:26.739 [DEBUG] [Thread-11160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:31.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:49:31.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:49:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:49:31.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 49, 15), 28.72, 13.27, 0.0, 9.42, 19.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:49:31.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:49:15
2025-11-26T03:49:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:49:32.160 [DEBUG] [Thread-11161] [transport.py] [_log()] starting thread (client mode): 0x70de6a70
2025-11-26T03:49:32.160 [DEBUG] [Thread-11161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:49:32.177 [DEBUG] [Thread-11161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:49:32.177 [INFO] [Thread-11161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] client lang: <none>
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] server lang: <none>
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] kex follows: False
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] Compression: none
2025-11-26T03:49:32.179 [DEBUG] [Thread-11161] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:49:32.192 [DEBUG] [Thread-11161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:49:32.192 [DEBUG] [Thread-11161] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:49:32.192 [DEBUG] [Thread-11161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:49:32.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:49:32.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:49:32.193 [DEBUG] [Thread-11161] [transport.py] [_log()] userauth is OK
2025-11-26T03:49:32.193 [DEBUG] [Thread-11161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:49:32.193 [DEBUG] [Thread-11161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:49:32.193 [DEBUG] [Thread-11161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:49:32.193 [DEBUG] [Thread-11161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:49:32.206 [INFO] [Thread-11161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:49:32.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:49:32.847 [DEBUG] [Thread-11161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:49:32.847 [DEBUG] [Thread-11161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:49:32.847 [DEBUG] [Thread-11161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:49:32.888 [DEBUG] [Thread-11161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:49:32.888 [DEBUG] [Thread-11161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:49:32.891 [DEBUG] [Thread-11161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:49:32.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:49:32.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:49:32.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:49:32.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:49:32.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:49:32.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:49:32.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.075442 -999.00  +20.10   9.29     17   -5.00 1 1 1 1 1     0    0 24.20 -37.69 ZNESW 7.8 9.3 70.2 11.8 19.6 -25.9 19.5 -25.5 19.3 -24.4 19.5 -25.4
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.075442
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:49:32.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:49:32.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:49:15', tmtdew=28.72, humidity=13.27, cloud=0.0, wind=9.42, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:49:16', seeing=1.28, atlas_timestamp='2025-11-26T01:48:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:46:00')
2025-11-26T03:49:32.912 [DEBUG] [Thread-11161] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:49:33.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:49:33.012 [DEBUG] [Thread-11164] [transport.py] [_log()] starting thread (client mode): 0x70d74580
2025-11-26T03:49:33.013 [DEBUG] [Thread-11164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:49:33.029 [DEBUG] [Thread-11164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:49:33.029 [INFO] [Thread-11164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] client lang: <none>
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] server lang: <none>
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] kex follows: False
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] Compression: none
2025-11-26T03:49:33.037 [DEBUG] [Thread-11164] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:49:33.095 [DEBUG] [Thread-11164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:49:33.095 [DEBUG] [Thread-11164] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:49:33.095 [DEBUG] [Thread-11164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:49:33.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:49:33.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:49:33.153 [DEBUG] [Thread-11164] [transport.py] [_log()] userauth is OK
2025-11-26T03:49:33.153 [DEBUG] [Thread-11164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:49:33.153 [DEBUG] [Thread-11164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:49:33.153 [DEBUG] [Thread-11164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:49:33.153 [DEBUG] [Thread-11164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:49:33.167 [INFO] [Thread-11164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:49:33.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:49:33.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:49:34.012 [DEBUG] [Thread-11164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:49:34.012 [DEBUG] [Thread-11164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:49:34.060 [DEBUG] [Thread-11164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:49:34.060 [DEBUG] [Thread-11164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:49:34.069 [DEBUG] [Thread-11164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:49:34.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:49:34.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:49:34.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:49:34.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:49:34.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:49:34.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:49:34.105 [DEBUG] [Thread-11164] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:49:36.762 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:41.776 [DEBUG] [Thread-11166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:47.154 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:56.828 [DEBUG] [Thread-11167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:57.596 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:59.966 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:49:59.967 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:04.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:50:04.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:50:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:50:04.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 49, 47), 28.67, 13.27, 0.0, 9.9, 19.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:50:04.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:49:47
2025-11-26T03:50:04.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:50:05.088 [DEBUG] [Thread-11168] [transport.py] [_log()] starting thread (client mode): 0x70dfada0
2025-11-26T03:50:05.088 [DEBUG] [Thread-11168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:50:05.108 [DEBUG] [Thread-11168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:50:05.109 [INFO] [Thread-11168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] client lang: <none>
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] server lang: <none>
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] kex follows: False
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] Compression: none
2025-11-26T03:50:05.112 [DEBUG] [Thread-11168] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:50:05.128 [DEBUG] [Thread-11168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:50:05.128 [DEBUG] [Thread-11168] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:50:05.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:50:05.128 [DEBUG] [Thread-11168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:50:05.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:50:05.129 [DEBUG] [Thread-11168] [transport.py] [_log()] userauth is OK
2025-11-26T03:50:05.129 [DEBUG] [Thread-11168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:50:05.129 [DEBUG] [Thread-11168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:50:05.129 [DEBUG] [Thread-11168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:50:05.129 [DEBUG] [Thread-11168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:50:05.143 [INFO] [Thread-11168] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:50:05.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:50:08.007 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:08.551 [DEBUG] [Thread-11168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:50:08.551 [DEBUG] [Thread-11168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:50:08.551 [DEBUG] [Thread-11168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:50:08.592 [DEBUG] [Thread-11168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:50:08.592 [DEBUG] [Thread-11168] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:50:08.595 [DEBUG] [Thread-11168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:50:08.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:50:08.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:50:08.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:50:08.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:50:08.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:50:08.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:50:08.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:50:08.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:50:08.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:50:08.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.076137 -999.00  +20.00   7.11     18   -5.00 1 1 1 1 1     0    0 24.51 -43.49 ZNESW 8.5 7.1 64.9 11.6 19.6 -26.4 19.6 -25.6 19.2 -24.1 19.5 -25.4
2025-11-26T03:50:08.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:50:08.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:50:08.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.076137
2025-11-26T03:50:08.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:50:08.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:50:08.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:50:08.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:50:08.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:50:08.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:49:47', tmtdew=28.67, humidity=13.27, cloud=0.0, wind=9.9, temperature=19.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:49:48', seeing=1.14, atlas_timestamp='2025-11-26T01:49:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:46:00')
2025-11-26T03:50:08.615 [DEBUG] [Thread-11168] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:50:08.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:50:08.701 [DEBUG] [Thread-11171] [transport.py] [_log()] starting thread (client mode): 0x70df97e0
2025-11-26T03:50:08.701 [DEBUG] [Thread-11171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:50:08.715 [DEBUG] [Thread-11171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:50:08.715 [INFO] [Thread-11171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] client lang: <none>
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] server lang: <none>
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] kex follows: False
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] Compression: none
2025-11-26T03:50:08.723 [DEBUG] [Thread-11171] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:50:08.779 [DEBUG] [Thread-11171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:50:08.780 [DEBUG] [Thread-11171] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:50:08.780 [DEBUG] [Thread-11171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:50:08.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:50:08.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:50:08.837 [DEBUG] [Thread-11171] [transport.py] [_log()] userauth is OK
2025-11-26T03:50:08.837 [DEBUG] [Thread-11171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:50:08.837 [DEBUG] [Thread-11171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:50:08.837 [DEBUG] [Thread-11171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:50:08.837 [DEBUG] [Thread-11171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:50:08.850 [INFO] [Thread-11171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:50:08.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:50:08.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:50:09.641 [DEBUG] [Thread-11171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:50:09.641 [DEBUG] [Thread-11171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:50:09.690 [DEBUG] [Thread-11171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:50:09.690 [DEBUG] [Thread-11171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:50:09.701 [DEBUG] [Thread-11171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:50:09.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:50: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')
2025-11-26T03:50:09.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:50:09.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:50:09.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:50:09.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:50:09.746 [DEBUG] [Thread-11171] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:50:11.860 [DEBUG] [Thread-11173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:18.467 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:26.677 [DEBUG] [Thread-11174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:26.922 [DEBUG] [Thread-11175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:28.893 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:39.289 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:39.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:50:39.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:50:39.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:50:40.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 50, 19), 28.65, 13.29, 0.0, 9.23, 19.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:50:40.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:50:19
2025-11-26T03:50:40.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:50:40.703 [DEBUG] [Thread-11176] [transport.py] [_log()] starting thread (client mode): 0x70dfa7a0
2025-11-26T03:50:40.703 [DEBUG] [Thread-11176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:50:40.723 [DEBUG] [Thread-11176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:50:40.723 [INFO] [Thread-11176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] client lang: <none>
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] server lang: <none>
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] kex follows: False
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:50:40.726 [DEBUG] [Thread-11176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:50:40.727 [DEBUG] [Thread-11176] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:50:40.727 [DEBUG] [Thread-11176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:50:40.727 [DEBUG] [Thread-11176] [transport.py] [_log()] Compression: none
2025-11-26T03:50:40.727 [DEBUG] [Thread-11176] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:50:40.742 [DEBUG] [Thread-11176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:50:40.742 [DEBUG] [Thread-11176] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:50:40.743 [DEBUG] [Thread-11176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:50:40.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:50:40.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:50:40.744 [DEBUG] [Thread-11176] [transport.py] [_log()] userauth is OK
2025-11-26T03:50:40.744 [DEBUG] [Thread-11176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:50:40.744 [DEBUG] [Thread-11176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:50:40.744 [DEBUG] [Thread-11176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:50:40.744 [DEBUG] [Thread-11176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:50:40.759 [INFO] [Thread-11176] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:50:40.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:50:41.392 [DEBUG] [Thread-11176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:50:41.392 [DEBUG] [Thread-11176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:50:41.393 [DEBUG] [Thread-11176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:50:41.433 [DEBUG] [Thread-11176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:50:41.433 [DEBUG] [Thread-11176] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:50:41.437 [DEBUG] [Thread-11176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:50:41.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:50:41.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:50:41.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:50:41.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:50:41.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:50:41.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:50:41.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:50:41.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:50:41.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:50:41.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.076484 -999.00  +19.90  11.32     18   -4.90 1 1 1 1 1     0    0 24.61 -42.27 ZNESW 10.7 11.3 68.4 12.4 19.6 -26.2 19.5 -25.6 19.2 -24.2 19.5 -25.2
2025-11-26T03:50:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:50:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:50:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.076484
2025-11-26T03:50:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:50:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:50:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:50:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:50:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:50:41.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:50:19', tmtdew=28.65, humidity=13.29, cloud=0.0, wind=9.23, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:50:22', seeing=1.36, atlas_timestamp='2025-11-26T01:50:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:48:00')
2025-11-26T03:50:41.465 [DEBUG] [Thread-11176] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:50:41.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:50:41.570 [DEBUG] [Thread-11179] [transport.py] [_log()] starting thread (client mode): 0x70df8a60
2025-11-26T03:50:41.570 [DEBUG] [Thread-11179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:50:41.585 [DEBUG] [Thread-11179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:50:41.586 [INFO] [Thread-11179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:50:41.593 [DEBUG] [Thread-11179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:50:41.594 [DEBUG] [Thread-11179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:50:41.594 [DEBUG] [Thread-11179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:50:41.594 [DEBUG] [Thread-11179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:50:41.594 [DEBUG] [Thread-11179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:50:41.594 [DEBUG] [Thread-11179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:50:41.594 [DEBUG] [Thread-11179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:50:41.594 [DEBUG] [Thread-11179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:50:41.594 [DEBUG] [Thread-11179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:50:41.594 [DEBUG] [Thread-11179] [transport.py] [_log()] client lang: <none>
2025-11-26T03:50:41.595 [DEBUG] [Thread-11179] [transport.py] [_log()] server lang: <none>
2025-11-26T03:50:41.595 [DEBUG] [Thread-11179] [transport.py] [_log()] kex follows: False
2025-11-26T03:50:41.595 [DEBUG] [Thread-11179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:50:41.595 [DEBUG] [Thread-11179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:50:41.595 [DEBUG] [Thread-11179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:50:41.595 [DEBUG] [Thread-11179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:50:41.595 [DEBUG] [Thread-11179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:50:41.596 [DEBUG] [Thread-11179] [transport.py] [_log()] Compression: none
2025-11-26T03:50:41.596 [DEBUG] [Thread-11179] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:50:41.657 [DEBUG] [Thread-11179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:50:41.658 [DEBUG] [Thread-11179] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:50:41.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:50:41.659 [DEBUG] [Thread-11179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:50:41.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:50:41.713 [DEBUG] [Thread-11179] [transport.py] [_log()] userauth is OK
2025-11-26T03:50:41.714 [DEBUG] [Thread-11179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:50:41.714 [DEBUG] [Thread-11179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:50:41.714 [DEBUG] [Thread-11179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:50:41.714 [DEBUG] [Thread-11179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:50:41.733 [INFO] [Thread-11179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:50:41.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:50:41.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:50:41.957 [DEBUG] [Thread-11181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:42.615 [DEBUG] [Thread-11179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:50:42.615 [DEBUG] [Thread-11179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:50:42.663 [DEBUG] [Thread-11179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:50:42.663 [DEBUG] [Thread-11179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:50:42.671 [DEBUG] [Thread-11179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:50:42.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:50: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')
2025-11-26T03:50: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
2025-11-26T03:50:42.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:50:42.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:50:42.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:50:42.703 [DEBUG] [Thread-11179] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:50:49.708 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:50:56.996 [DEBUG] [Thread-11182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:00.123 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:00.172 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:00.173 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:10.536 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:12.034 [DEBUG] [Thread-11183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:12.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:51:12.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:51:12.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:51:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 50, 53), 28.61, 13.34, 0.0, 10.92, 19.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:51:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:50:53
2025-11-26T03:51:13.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:51:13.685 [DEBUG] [Thread-11184] [transport.py] [_log()] starting thread (client mode): 0x70d7ffd0
2025-11-26T03:51:13.685 [DEBUG] [Thread-11184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:51:13.706 [DEBUG] [Thread-11184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:51:13.706 [INFO] [Thread-11184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:51:13.709 [DEBUG] [Thread-11184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:51:13.709 [DEBUG] [Thread-11184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] client lang: <none>
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] server lang: <none>
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] kex follows: False
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] Compression: none
2025-11-26T03:51:13.710 [DEBUG] [Thread-11184] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:51:13.729 [DEBUG] [Thread-11184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:51:13.729 [DEBUG] [Thread-11184] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:51:13.730 [DEBUG] [Thread-11184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:51:13.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:51:13.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:51:13.732 [DEBUG] [Thread-11184] [transport.py] [_log()] userauth is OK
2025-11-26T03:51:13.732 [DEBUG] [Thread-11184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:51:13.732 [DEBUG] [Thread-11184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:51:13.732 [DEBUG] [Thread-11184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:51:13.732 [DEBUG] [Thread-11184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:51:13.757 [INFO] [Thread-11184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:51:13.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:51:14.406 [DEBUG] [Thread-11184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:51:14.406 [DEBUG] [Thread-11184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:51:14.406 [DEBUG] [Thread-11184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:51:14.447 [DEBUG] [Thread-11184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:51:14.447 [DEBUG] [Thread-11184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:51:14.450 [DEBUG] [Thread-11184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:51:14.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:51:14.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:51:14.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:51:14.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:51:14.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:51:14.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:51:14.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:51:14.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:51:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:51:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.076831 -999.00  +19.90   8.99     18   -4.90 1 1 1 1 1     0    0 23.92 -42.27 ZNESW 9.9 9.0 82.2 11.7 19.6 -26.3 19.5 -25.6 19.2 -24.2 19.5 -25.2
2025-11-26T03:51:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:51:14.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:51:14.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.076831
2025-11-26T03:51:14.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:51:14.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:51:14.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:51:14.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:51:14.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:51:14.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:50:53', tmtdew=28.61, humidity=13.34, cloud=0.0, wind=10.92, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:50:54', seeing=1.36, atlas_timestamp='2025-11-26T01:50:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:48:00')
2025-11-26T03:51:14.475 [DEBUG] [Thread-11184] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:51:14.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:51:14.571 [DEBUG] [Thread-11187] [transport.py] [_log()] starting thread (client mode): 0x70d7ded0
2025-11-26T03:51:14.571 [DEBUG] [Thread-11187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:51:14.586 [DEBUG] [Thread-11187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:51:14.587 [INFO] [Thread-11187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:51:14.594 [DEBUG] [Thread-11187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:51:14.594 [DEBUG] [Thread-11187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:51:14.594 [DEBUG] [Thread-11187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:51:14.594 [DEBUG] [Thread-11187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] client lang: <none>
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] server lang: <none>
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] kex follows: False
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] Compression: none
2025-11-26T03:51:14.595 [DEBUG] [Thread-11187] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:51:14.654 [DEBUG] [Thread-11187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:51:14.654 [DEBUG] [Thread-11187] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:51:14.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:51:14.656 [DEBUG] [Thread-11187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:51:14.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:51:14.714 [DEBUG] [Thread-11187] [transport.py] [_log()] userauth is OK
2025-11-26T03:51:14.714 [DEBUG] [Thread-11187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:51:14.714 [DEBUG] [Thread-11187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:51:14.714 [DEBUG] [Thread-11187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:51:14.714 [DEBUG] [Thread-11187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:51:14.733 [INFO] [Thread-11187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:51:14.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:51:14.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:51:15.563 [DEBUG] [Thread-11187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:51:15.563 [DEBUG] [Thread-11187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:51:15.611 [DEBUG] [Thread-11187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:51:15.611 [DEBUG] [Thread-11187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:51:15.620 [DEBUG] [Thread-11187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:51:15.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:51:15.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:51:15.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:51:15.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:51:15.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:51:15.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:51:15.657 [DEBUG] [Thread-11187] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:51:20.933 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:26.748 [DEBUG] [Thread-11189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:27.059 [DEBUG] [Thread-11190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:31.348 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:41.756 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:42.110 [DEBUG] [Thread-11191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:51:45.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:51:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:51:46.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 51, 25), 28.61, 13.34, 0.0, 11.28, 19.2, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:51:46.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:51:25
2025-11-26T03:51:46.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:51:46.612 [DEBUG] [Thread-11192] [transport.py] [_log()] starting thread (client mode): 0x70d7e3b0
2025-11-26T03:51:46.612 [DEBUG] [Thread-11192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:51:46.633 [DEBUG] [Thread-11192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:51:46.633 [INFO] [Thread-11192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] client lang: <none>
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] server lang: <none>
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] kex follows: False
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:51:46.636 [DEBUG] [Thread-11192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:51:46.637 [DEBUG] [Thread-11192] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:51:46.637 [DEBUG] [Thread-11192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:51:46.637 [DEBUG] [Thread-11192] [transport.py] [_log()] Compression: none
2025-11-26T03:51:46.637 [DEBUG] [Thread-11192] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:51:46.654 [DEBUG] [Thread-11192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:51:46.655 [DEBUG] [Thread-11192] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:51:46.655 [DEBUG] [Thread-11192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:51:46.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:51:46.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:51:46.657 [DEBUG] [Thread-11192] [transport.py] [_log()] userauth is OK
2025-11-26T03:51:46.658 [DEBUG] [Thread-11192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:51:46.658 [DEBUG] [Thread-11192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:51:46.658 [DEBUG] [Thread-11192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:51:46.658 [DEBUG] [Thread-11192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:51:46.676 [INFO] [Thread-11192] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:51:46.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:51:47.248 [DEBUG] [Thread-11192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:51:47.249 [DEBUG] [Thread-11192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:51:47.249 [DEBUG] [Thread-11192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:51:47.290 [DEBUG] [Thread-11192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:51:47.290 [DEBUG] [Thread-11192] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:51:47.294 [DEBUG] [Thread-11192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:51:47.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:51:47.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:51:47.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:51:47.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:51:47.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:51:47.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:51:47.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:51:47.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:51:47.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:51:47.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.077179 -999.00  +19.90   9.50     18   -4.90 1 1 1 1 1     0    0 23.58 -43.74 ZNESW 9.8 9.5 86.3 11.3 19.6 -26.1 19.5 -25.5 19.2 -24.3 19.4 -25.3
2025-11-26T03:51:47.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:51:47.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:51:47.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.077179
2025-11-26T03:51:47.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:51:47.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:51:47.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:51:47.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:51:47.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:51:47.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:51:25', tmtdew=28.61, humidity=13.34, cloud=0.0, wind=11.28, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:51:26', seeing=1.32, atlas_timestamp='2025-11-26T01:51:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:48:00')
2025-11-26T03:51:47.320 [DEBUG] [Thread-11192] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:51:47.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:51:47.416 [DEBUG] [Thread-11195] [transport.py] [_log()] starting thread (client mode): 0x70d76290
2025-11-26T03:51:47.416 [DEBUG] [Thread-11195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:51:47.430 [DEBUG] [Thread-11195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:51:47.431 [INFO] [Thread-11195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:51:47.438 [DEBUG] [Thread-11195] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] client lang: <none>
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] server lang: <none>
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] kex follows: False
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] Compression: none
2025-11-26T03:51:47.439 [DEBUG] [Thread-11195] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:51:47.497 [DEBUG] [Thread-11195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:51:47.498 [DEBUG] [Thread-11195] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:51:47.499 [DEBUG] [Thread-11195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:51:47.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:51:47.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:51:47.554 [DEBUG] [Thread-11195] [transport.py] [_log()] userauth is OK
2025-11-26T03:51:47.555 [DEBUG] [Thread-11195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:51:47.555 [DEBUG] [Thread-11195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:51:47.555 [DEBUG] [Thread-11195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:51:47.555 [DEBUG] [Thread-11195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:51:47.574 [INFO] [Thread-11195] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:51:47.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:51:47.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:51:48.423 [DEBUG] [Thread-11195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:51:48.424 [DEBUG] [Thread-11195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:51:48.472 [DEBUG] [Thread-11195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:51:48.472 [DEBUG] [Thread-11195] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:51:48.481 [DEBUG] [Thread-11195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:51:48.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:51:48.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:51: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
2025-11-26T03:51:48.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:51:48.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:51:48.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:51:48.518 [DEBUG] [Thread-11195] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:51:52.210 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:51:57.148 [DEBUG] [Thread-11197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:00.372 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:00.373 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:02.617 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:12.187 [DEBUG] [Thread-11198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:13.029 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:18.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:52:18.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:52: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
2025-11-26T03:52:19.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 51, 57), 28.7, 13.29, 0.0, 8.95, 19.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:52:19.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:51:57
2025-11-26T03:52:19.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:52:19.466 [DEBUG] [Thread-11199] [transport.py] [_log()] starting thread (client mode): 0x70df8070
2025-11-26T03:52:19.466 [DEBUG] [Thread-11199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:52:19.486 [DEBUG] [Thread-11199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:52:19.486 [INFO] [Thread-11199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:52:19.489 [DEBUG] [Thread-11199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:52:19.489 [DEBUG] [Thread-11199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] client lang: <none>
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] server lang: <none>
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] kex follows: False
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:52:19.490 [DEBUG] [Thread-11199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:52:19.491 [DEBUG] [Thread-11199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:52:19.491 [DEBUG] [Thread-11199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:52:19.491 [DEBUG] [Thread-11199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:52:19.491 [DEBUG] [Thread-11199] [transport.py] [_log()] Compression: none
2025-11-26T03:52:19.491 [DEBUG] [Thread-11199] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:52:19.511 [DEBUG] [Thread-11199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:52:19.511 [DEBUG] [Thread-11199] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:52:19.512 [DEBUG] [Thread-11199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:52:19.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:52:19.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:52:19.514 [DEBUG] [Thread-11199] [transport.py] [_log()] userauth is OK
2025-11-26T03:52:19.515 [DEBUG] [Thread-11199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:52:19.515 [DEBUG] [Thread-11199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:52:19.515 [DEBUG] [Thread-11199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:52:19.515 [DEBUG] [Thread-11199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:52:19.540 [INFO] [Thread-11199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:52:19.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:52:20.187 [DEBUG] [Thread-11199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:52:20.187 [DEBUG] [Thread-11199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:52:20.188 [DEBUG] [Thread-11199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:52:20.228 [DEBUG] [Thread-11199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:52:20.228 [DEBUG] [Thread-11199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:52:20.231 [DEBUG] [Thread-11199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:52:20.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:52:20.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:52:20.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:52:20.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:52:20.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:52:20.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:52:20.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:52:20.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:52:20.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:52:20.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.077526 -999.00  +19.90   2.02     18   -4.90 1 1 1 1 1     0    0 23.84 -44.56 ZNESW 3.5 2.0 200.4 12.5 19.6 -26.0 19.5 -25.6 19.2 -24.1 19.4 -25.2
2025-11-26T03:52:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:52:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:52:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.077526
2025-11-26T03:52:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:52:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:52:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:52:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:52:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:52:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:51:57', tmtdew=28.7, humidity=13.29, cloud=0.0, wind=8.95, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:51:58', seeing=1.16, atlas_timestamp='2025-11-26T01:51:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:48:00')
2025-11-26T03:52:20.257 [DEBUG] [Thread-11199] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:52:20.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:52:20.354 [DEBUG] [Thread-11202] [transport.py] [_log()] starting thread (client mode): 0x70d7c190
2025-11-26T03:52:20.354 [DEBUG] [Thread-11202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:52:20.369 [DEBUG] [Thread-11202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:52:20.369 [INFO] [Thread-11202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:52:20.377 [DEBUG] [Thread-11202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:52:20.377 [DEBUG] [Thread-11202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:52:20.378 [DEBUG] [Thread-11202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:52:20.378 [DEBUG] [Thread-11202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:52:20.378 [DEBUG] [Thread-11202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:52:20.378 [DEBUG] [Thread-11202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:52:20.378 [DEBUG] [Thread-11202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:52:20.378 [DEBUG] [Thread-11202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:52:20.378 [DEBUG] [Thread-11202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:52:20.378 [DEBUG] [Thread-11202] [transport.py] [_log()] client lang: <none>
2025-11-26T03:52:20.378 [DEBUG] [Thread-11202] [transport.py] [_log()] server lang: <none>
2025-11-26T03:52:20.379 [DEBUG] [Thread-11202] [transport.py] [_log()] kex follows: False
2025-11-26T03:52:20.379 [DEBUG] [Thread-11202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:52:20.379 [DEBUG] [Thread-11202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:52:20.379 [DEBUG] [Thread-11202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:52:20.379 [DEBUG] [Thread-11202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:52:20.379 [DEBUG] [Thread-11202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:52:20.379 [DEBUG] [Thread-11202] [transport.py] [_log()] Compression: none
2025-11-26T03:52:20.380 [DEBUG] [Thread-11202] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:52:20.434 [DEBUG] [Thread-11202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:52:20.434 [DEBUG] [Thread-11202] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:52:20.435 [DEBUG] [Thread-11202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:52:20.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:52:20.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:52:20.490 [DEBUG] [Thread-11202] [transport.py] [_log()] userauth is OK
2025-11-26T03:52:20.490 [DEBUG] [Thread-11202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:52:20.491 [DEBUG] [Thread-11202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:52:20.491 [DEBUG] [Thread-11202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:52:20.491 [DEBUG] [Thread-11202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:52:20.509 [INFO] [Thread-11202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:52:20.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:52:20.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:52:21.333 [DEBUG] [Thread-11202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:52:21.334 [DEBUG] [Thread-11202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:52:21.382 [DEBUG] [Thread-11202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:52:21.382 [DEBUG] [Thread-11202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:52:21.392 [DEBUG] [Thread-11202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:52:21.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:52:21.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:52:21.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:52:21.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:52:21.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:52:21.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:52:21.429 [DEBUG] [Thread-11202] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:52:23.425 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:26.825 [DEBUG] [Thread-11204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:27.222 [DEBUG] [Thread-11205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:33.821 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:42.281 [DEBUG] [Thread-11206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:44.237 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:51.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:52:51.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:52:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:52:52.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 52, 30), 28.73, 13.24, 0.0, 9.83, 19.15, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:52:52.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:52:30
2025-11-26T03:52:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:52:52.382 [DEBUG] [Thread-11207] [transport.py] [_log()] starting thread (client mode): 0x70d7e380
2025-11-26T03:52:52.382 [DEBUG] [Thread-11207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:52:52.404 [DEBUG] [Thread-11207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:52:52.404 [INFO] [Thread-11207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:52:52.407 [DEBUG] [Thread-11207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] client lang: <none>
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] server lang: <none>
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] kex follows: False
2025-11-26T03:52:52.408 [DEBUG] [Thread-11207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:52:52.409 [DEBUG] [Thread-11207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:52:52.409 [DEBUG] [Thread-11207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:52:52.409 [DEBUG] [Thread-11207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:52:52.409 [DEBUG] [Thread-11207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:52:52.409 [DEBUG] [Thread-11207] [transport.py] [_log()] Compression: none
2025-11-26T03:52:52.409 [DEBUG] [Thread-11207] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:52:52.428 [DEBUG] [Thread-11207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:52:52.429 [DEBUG] [Thread-11207] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:52:52.429 [DEBUG] [Thread-11207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:52:52.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:52:52.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:52:52.431 [DEBUG] [Thread-11207] [transport.py] [_log()] userauth is OK
2025-11-26T03:52:52.432 [DEBUG] [Thread-11207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:52:52.432 [DEBUG] [Thread-11207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:52:52.432 [DEBUG] [Thread-11207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:52:52.432 [DEBUG] [Thread-11207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:52:52.455 [INFO] [Thread-11207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:52:52.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:52:53.099 [DEBUG] [Thread-11207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:52:53.099 [DEBUG] [Thread-11207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:52:53.100 [DEBUG] [Thread-11207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:52:53.139 [DEBUG] [Thread-11207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:52:53.140 [DEBUG] [Thread-11207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:52:53.143 [DEBUG] [Thread-11207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:52:53.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:52:53.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:52:53.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:52:53.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:52:53.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:52:53.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:52:53.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:52:53.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:52:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:52:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.077873 -999.00  +19.90   7.52     18   -4.90 1 1 1 1 1     0    0 24.26 -41.68 ZNESW 7.5 7.5 75.6 12.7 19.6 -25.9 19.5 -25.5 19.2 -24.2 19.4 -25.3
2025-11-26T03:52:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:52:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:52:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.077873
2025-11-26T03:52:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:52:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:52:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:52:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:52:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:52:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:52:30', tmtdew=28.73, humidity=13.24, cloud=0.0, wind=9.83, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:52:30', seeing=1.22, atlas_timestamp='2025-11-26T01:52:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.0337499999999995, -0.008750000000000924, -0.027499999999999858, 0.013999999999999346, 0.006250000000001421, -0.012500000000001066, -0.05474999999999852, -0.0259999999999998, -0.04899999999999949, -0.08174999999999955, 0.01699999999999946, 0.026500000000000412, 0.021250000000000213, -0.023500000000002075, 0.0, 0.011749999999999261, 0.011499999999999844, -0.053500000000001435, 0.025249999999999773, 0.04949999999999832, 0.044749999999998735, -0.01974999999999838, 0.0007500000000000284, 0.010999999999999233, 0.03449999999999953, 0.008250000000000313, 0.013500000000000512, 0.18299999999999983, -0.0009999999999976694, 0.08500000000000085, 0.034000000000000696, -0.0012500000000006395], zp_timestamp='2025-11-26T01:48:00')
2025-11-26T03:52:53.168 [DEBUG] [Thread-11207] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:52:53.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:52:53.263 [DEBUG] [Thread-11210] [transport.py] [_log()] starting thread (client mode): 0x70d76c20
2025-11-26T03:52:53.263 [DEBUG] [Thread-11210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:52:53.278 [DEBUG] [Thread-11210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:52:53.278 [INFO] [Thread-11210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] client lang: <none>
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] server lang: <none>
2025-11-26T03:52:53.286 [DEBUG] [Thread-11210] [transport.py] [_log()] kex follows: False
2025-11-26T03:52:53.287 [DEBUG] [Thread-11210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:52:53.287 [DEBUG] [Thread-11210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:52:53.287 [DEBUG] [Thread-11210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:52:53.287 [DEBUG] [Thread-11210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:52:53.287 [DEBUG] [Thread-11210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:52:53.287 [DEBUG] [Thread-11210] [transport.py] [_log()] Compression: none
2025-11-26T03:52:53.287 [DEBUG] [Thread-11210] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:52:53.345 [DEBUG] [Thread-11210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:52:53.346 [DEBUG] [Thread-11210] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:52:53.346 [DEBUG] [Thread-11210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:52:53.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:52:53.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:52:53.402 [DEBUG] [Thread-11210] [transport.py] [_log()] userauth is OK
2025-11-26T03:52:53.402 [DEBUG] [Thread-11210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:52:53.402 [DEBUG] [Thread-11210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:52:53.402 [DEBUG] [Thread-11210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:52:53.402 [DEBUG] [Thread-11210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:52:53.415 [INFO] [Thread-11210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:52:53.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:52:53.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:52:54.291 [DEBUG] [Thread-11210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:52:54.291 [DEBUG] [Thread-11210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:52:54.339 [DEBUG] [Thread-11210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:52:54.339 [DEBUG] [Thread-11210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:52:54.348 [DEBUG] [Thread-11210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:52:54.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:52:54.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:52:54.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:52:54.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:52:54.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:52:54.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:52:54.385 [DEBUG] [Thread-11210] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:52:54.654 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:52:57.319 [DEBUG] [Thread-11212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:00.573 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:00.575 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:05.048 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:12.367 [DEBUG] [Thread-11213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:15.427 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:24.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:53:24.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:53:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:53:25.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 53, 2), 28.7, 13.29, 0.0, 9.9, 19.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:53:25.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:53:02
2025-11-26T03:53:25.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:53:25.324 [DEBUG] [Thread-11214] [transport.py] [_log()] starting thread (client mode): 0x70d75900
2025-11-26T03:53:25.324 [DEBUG] [Thread-11214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:53:25.344 [DEBUG] [Thread-11214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:53:25.344 [INFO] [Thread-11214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:53:25.347 [DEBUG] [Thread-11214] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] client lang: <none>
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] server lang: <none>
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] kex follows: False
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] Compression: none
2025-11-26T03:53:25.348 [DEBUG] [Thread-11214] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:53:25.366 [DEBUG] [Thread-11214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:53:25.366 [DEBUG] [Thread-11214] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:53:25.367 [DEBUG] [Thread-11214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:53:25.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:53:25.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:53:25.369 [DEBUG] [Thread-11214] [transport.py] [_log()] userauth is OK
2025-11-26T03:53:25.369 [DEBUG] [Thread-11214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:53:25.369 [DEBUG] [Thread-11214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:53:25.369 [DEBUG] [Thread-11214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:53:25.369 [DEBUG] [Thread-11214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:53:25.387 [INFO] [Thread-11214] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:53:25.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:53:25.805 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:25.963 [DEBUG] [Thread-11214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:53:25.963 [DEBUG] [Thread-11214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:53:25.964 [DEBUG] [Thread-11214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:53:26.005 [DEBUG] [Thread-11214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:53:26.005 [DEBUG] [Thread-11214] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:53:26.008 [DEBUG] [Thread-11214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:53:26.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:53:26.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:53:26.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:53:26.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:53:26.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:53:26.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:53:26.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:53:26.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:53:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:53:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.078567 -999.00  +19.90  10.95     18   -4.90 1 1 1 1 1     0    0 24.04 -45.49 ZNESW 5.5 10.9 67.8 13.5 19.5 -26.2 19.5 -25.5 19.2 -24.2 19.4 -25.2
2025-11-26T03:53:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:53:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:53:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.078567
2025-11-26T03:53:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:53:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:53:26.036 [DEBUG] [Thread-11214] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:53:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:53:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:53:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:53:26.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:53:02', tmtdew=28.7, humidity=13.29, cloud=0.0, wind=9.9, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:53:02', seeing=1.12, atlas_timestamp='2025-11-26T01:53:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.021749999999999048, 0.0017499999999994742, -0.029500000000000526, 0.04449999999999932, 0.020250000000000767, -0.009999999999999787, -0.003249999999999531, -0.005000000000000782, -0.017999999999998906, -0.06475000000000009, 0.007499999999998508, 0.04550000000000054, 0.036249999999999005, -0.025000000000000355, -0.02400000000000091, 0.03125, 0.027499999999999858, -0.034000000000000696, -0.016250000000001208, 0.10499999999999865, 0.07374999999999865, -0.0037499999999983658, -0.02474999999999916, 0.021999999999998465, 0.024499999999999744, 0.016750000000000043, 0.06649999999999956, 0.15799999999999947, 0.08000000000000185, 0.07000000000000028, 0.06700000000000017, 0.021749999999999048], zp_timestamp='2025-11-26T01:51:00')
2025-11-26T03:53:26.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:53:26.133 [DEBUG] [Thread-11217] [transport.py] [_log()] starting thread (client mode): 0x70d752a0
2025-11-26T03:53:26.133 [DEBUG] [Thread-11217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:53:26.149 [DEBUG] [Thread-11217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:53:26.149 [INFO] [Thread-11217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:53:26.157 [DEBUG] [Thread-11217] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:53:26.157 [DEBUG] [Thread-11217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:53:26.157 [DEBUG] [Thread-11217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:53:26.157 [DEBUG] [Thread-11217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:53:26.157 [DEBUG] [Thread-11217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:53:26.157 [DEBUG] [Thread-11217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:53:26.157 [DEBUG] [Thread-11217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:53:26.157 [DEBUG] [Thread-11217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] client lang: <none>
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] server lang: <none>
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] kex follows: False
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] Compression: none
2025-11-26T03:53:26.158 [DEBUG] [Thread-11217] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:53:26.214 [DEBUG] [Thread-11217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:53:26.215 [DEBUG] [Thread-11217] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:53:26.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:53:26.216 [DEBUG] [Thread-11217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:53:26.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:53:26.270 [DEBUG] [Thread-11217] [transport.py] [_log()] userauth is OK
2025-11-26T03:53:26.271 [DEBUG] [Thread-11217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:53:26.271 [DEBUG] [Thread-11217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:53:26.271 [DEBUG] [Thread-11217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:53:26.271 [DEBUG] [Thread-11217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:53:26.291 [INFO] [Thread-11217] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:53:26.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:53:26.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:53:26.883 [DEBUG] [Thread-11219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:27.095 [DEBUG] [Thread-11217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:53:27.095 [DEBUG] [Thread-11217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:53:27.143 [DEBUG] [Thread-11217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:53:27.143 [DEBUG] [Thread-11217] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:53:27.152 [DEBUG] [Thread-11217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:53:27.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:53:27.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:53:27.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:53:27.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:53:27.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:53:27.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:53:27.189 [DEBUG] [Thread-11217] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:53:27.396 [DEBUG] [Thread-11220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:36.194 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:42.457 [DEBUG] [Thread-11221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:46.622 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:57.019 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:57.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:53:57.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:53: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
2025-11-26T03:53:57.493 [DEBUG] [Thread-11222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:53:57.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 53, 33), 27.44, 14.55, 0.0, 12.28, 18.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:53:57.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:53:33
2025-11-26T03:53:58.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:53:58.161 [DEBUG] [Thread-11223] [transport.py] [_log()] starting thread (client mode): 0x70d7cb20
2025-11-26T03:53:58.161 [DEBUG] [Thread-11223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:53:58.179 [DEBUG] [Thread-11223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:53:58.179 [INFO] [Thread-11223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:53:58.183 [DEBUG] [Thread-11223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:53:58.183 [DEBUG] [Thread-11223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:53:58.183 [DEBUG] [Thread-11223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:53:58.183 [DEBUG] [Thread-11223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:53:58.183 [DEBUG] [Thread-11223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:53:58.183 [DEBUG] [Thread-11223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:53:58.183 [DEBUG] [Thread-11223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:53:58.183 [DEBUG] [Thread-11223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:53:58.183 [DEBUG] [Thread-11223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] client lang: <none>
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] server lang: <none>
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] kex follows: False
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] Compression: none
2025-11-26T03:53:58.184 [DEBUG] [Thread-11223] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:53:58.199 [DEBUG] [Thread-11223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:53:58.199 [DEBUG] [Thread-11223] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:53:58.200 [DEBUG] [Thread-11223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:53:58.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:53:58.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:53:58.202 [DEBUG] [Thread-11223] [transport.py] [_log()] userauth is OK
2025-11-26T03:53:58.202 [DEBUG] [Thread-11223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:53:58.202 [DEBUG] [Thread-11223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:53:58.202 [DEBUG] [Thread-11223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:53:58.202 [DEBUG] [Thread-11223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:53:58.220 [INFO] [Thread-11223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:53:58.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:53:58.848 [DEBUG] [Thread-11223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:53:58.848 [DEBUG] [Thread-11223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:53:58.848 [DEBUG] [Thread-11223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:53:58.890 [DEBUG] [Thread-11223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:53:58.890 [DEBUG] [Thread-11223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:53:58.894 [DEBUG] [Thread-11223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:53:58.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:53:58.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:53:58.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:53:58.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:53:58.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:53:58.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:53:58.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:53:58.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:53:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:53:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.078915 -999.00  +19.90   8.55     18   -4.90 1 1 1 1 1     0    0 23.33 -44.68 ZNESW 11.0 8.6 82.0 10.2 19.6 -25.7 19.4 -25.4 19.2 -24.2 19.4 -25.4
2025-11-26T03:53:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:53:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:53:58.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.078915
2025-11-26T03:53:58.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:53:58.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:53:58.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:53:58.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:53:58.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:53:58.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:53:33', tmtdew=27.44, humidity=14.55, cloud=0.0, wind=12.28, temperature=18.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:53:34', seeing=1.39, atlas_timestamp='2025-11-26T01:53:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.021749999999999048, 0.0017499999999994742, -0.029500000000000526, 0.04449999999999932, 0.020250000000000767, -0.009999999999999787, -0.003249999999999531, -0.005000000000000782, -0.017999999999998906, -0.06475000000000009, 0.007499999999998508, 0.04550000000000054, 0.036249999999999005, -0.025000000000000355, -0.02400000000000091, 0.03125, 0.027499999999999858, -0.034000000000000696, -0.016250000000001208, 0.10499999999999865, 0.07374999999999865, -0.0037499999999983658, -0.02474999999999916, 0.021999999999998465, 0.024499999999999744, 0.016750000000000043, 0.06649999999999956, 0.15799999999999947, 0.08000000000000185, 0.07000000000000028, 0.06700000000000017, 0.021749999999999048], zp_timestamp='2025-11-26T01:51:00')
2025-11-26T03:53:58.920 [DEBUG] [Thread-11223] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:53:59.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:53:59.015 [DEBUG] [Thread-11226] [transport.py] [_log()] starting thread (client mode): 0x70d7d390
2025-11-26T03:53:59.015 [DEBUG] [Thread-11226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:53:59.029 [DEBUG] [Thread-11226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:53:59.029 [INFO] [Thread-11226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:53:59.037 [DEBUG] [Thread-11226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:53:59.037 [DEBUG] [Thread-11226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:53:59.037 [DEBUG] [Thread-11226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] client lang: <none>
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] server lang: <none>
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] kex follows: False
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:53:59.038 [DEBUG] [Thread-11226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:53:59.039 [DEBUG] [Thread-11226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:53:59.039 [DEBUG] [Thread-11226] [transport.py] [_log()] Compression: none
2025-11-26T03:53:59.039 [DEBUG] [Thread-11226] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:53:59.095 [DEBUG] [Thread-11226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:53:59.095 [DEBUG] [Thread-11226] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:53:59.096 [DEBUG] [Thread-11226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:53:59.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:53:59.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:53:59.150 [DEBUG] [Thread-11226] [transport.py] [_log()] userauth is OK
2025-11-26T03:53:59.151 [DEBUG] [Thread-11226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:53:59.151 [DEBUG] [Thread-11226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:53:59.151 [DEBUG] [Thread-11226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:53:59.151 [DEBUG] [Thread-11226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:53:59.170 [INFO] [Thread-11226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:53:59.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:53:59.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:53:59.977 [DEBUG] [Thread-11226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:53:59.978 [DEBUG] [Thread-11226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:54:00.025 [DEBUG] [Thread-11226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:54:00.026 [DEBUG] [Thread-11226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:54:00.034 [DEBUG] [Thread-11226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:54:00.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:54:00.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:54:00.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:54:00.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:54:00.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:54:00.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:54:00.069 [DEBUG] [Thread-11226] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:54:00.776 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:00.777 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:07.418 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:12.528 [DEBUG] [Thread-11228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:17.855 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:26.958 [DEBUG] [Thread-11229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:27.572 [DEBUG] [Thread-11230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:28.340 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:54:30.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:54:30.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:54:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 54, 5), 28.59, 13.31, 0.0, 9.72, 19.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:54:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:54:05
2025-11-26T03:54:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:54:31.059 [DEBUG] [Thread-11231] [transport.py] [_log()] starting thread (client mode): 0x70d2a920
2025-11-26T03:54:31.059 [DEBUG] [Thread-11231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:54:31.083 [DEBUG] [Thread-11231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:54:31.083 [INFO] [Thread-11231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] client lang: <none>
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] server lang: <none>
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] kex follows: False
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] Compression: none
2025-11-26T03:54:31.087 [DEBUG] [Thread-11231] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:54:31.105 [DEBUG] [Thread-11231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:54:31.105 [DEBUG] [Thread-11231] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:54:31.105 [DEBUG] [Thread-11231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:54:31.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:54:31.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:54:31.148 [DEBUG] [Thread-11231] [transport.py] [_log()] userauth is OK
2025-11-26T03:54:31.148 [DEBUG] [Thread-11231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:54:31.148 [DEBUG] [Thread-11231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:54:31.149 [DEBUG] [Thread-11231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:54:31.149 [DEBUG] [Thread-11231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:54:31.168 [INFO] [Thread-11231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:54:31.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:54:31.796 [DEBUG] [Thread-11231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:54:31.796 [DEBUG] [Thread-11231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:54:31.797 [DEBUG] [Thread-11231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:54:31.837 [DEBUG] [Thread-11231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:54:31.837 [DEBUG] [Thread-11231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:54:31.840 [DEBUG] [Thread-11231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:54:31.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:54:31.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:54:31.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:54:31.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:54:31.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:54:31.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:54:31.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:54:31.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:54:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:54:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.079262 -999.00  +19.90   7.29     18   -4.90 1 1 1 1 1     0    0 24.28 -42.92 ZNESW 6.0 7.3 106.6 9.9 19.6 -25.5 19.5 -25.6 19.2 -24.1 19.4 -25.1
2025-11-26T03:54:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:54:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:54:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.079262
2025-11-26T03:54:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:54:31.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:54:31.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:54:31.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:54:31.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:54:31.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:54:05', tmtdew=28.59, humidity=13.31, cloud=0.0, wind=9.72, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:54:06', seeing=1.39, atlas_timestamp='2025-11-26T01:54:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.021749999999999048, 0.0017499999999994742, -0.029500000000000526, 0.04449999999999932, 0.020250000000000767, -0.009999999999999787, -0.003249999999999531, -0.005000000000000782, -0.017999999999998906, -0.06475000000000009, 0.007499999999998508, 0.04550000000000054, 0.036249999999999005, -0.025000000000000355, -0.02400000000000091, 0.03125, 0.027499999999999858, -0.034000000000000696, -0.016250000000001208, 0.10499999999999865, 0.07374999999999865, -0.0037499999999983658, -0.02474999999999916, 0.021999999999998465, 0.024499999999999744, 0.016750000000000043, 0.06649999999999956, 0.15799999999999947, 0.08000000000000185, 0.07000000000000028, 0.06700000000000017, 0.021749999999999048], zp_timestamp='2025-11-26T01:51:00')
2025-11-26T03:54:31.868 [DEBUG] [Thread-11231] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:54:31.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:54:31.962 [DEBUG] [Thread-11234] [transport.py] [_log()] starting thread (client mode): 0x70dfa530
2025-11-26T03:54:31.962 [DEBUG] [Thread-11234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:54:31.977 [DEBUG] [Thread-11234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:54:31.977 [INFO] [Thread-11234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:54:31.985 [DEBUG] [Thread-11234] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:54:31.985 [DEBUG] [Thread-11234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:54:31.985 [DEBUG] [Thread-11234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:54:31.985 [DEBUG] [Thread-11234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:54:31.985 [DEBUG] [Thread-11234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:54:31.986 [DEBUG] [Thread-11234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:54:31.986 [DEBUG] [Thread-11234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:54:31.986 [DEBUG] [Thread-11234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:54:31.986 [DEBUG] [Thread-11234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:54:31.986 [DEBUG] [Thread-11234] [transport.py] [_log()] client lang: <none>
2025-11-26T03:54:31.986 [DEBUG] [Thread-11234] [transport.py] [_log()] server lang: <none>
2025-11-26T03:54:31.986 [DEBUG] [Thread-11234] [transport.py] [_log()] kex follows: False
2025-11-26T03:54:31.986 [DEBUG] [Thread-11234] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:54:31.986 [DEBUG] [Thread-11234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:54:31.987 [DEBUG] [Thread-11234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:54:31.987 [DEBUG] [Thread-11234] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:54:31.987 [DEBUG] [Thread-11234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:54:31.987 [DEBUG] [Thread-11234] [transport.py] [_log()] Compression: none
2025-11-26T03:54:31.987 [DEBUG] [Thread-11234] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:54:32.045 [DEBUG] [Thread-11234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:54:32.045 [DEBUG] [Thread-11234] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:54:32.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:54:32.047 [DEBUG] [Thread-11234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:54:32.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:54:32.101 [DEBUG] [Thread-11234] [transport.py] [_log()] userauth is OK
2025-11-26T03:54:32.102 [DEBUG] [Thread-11234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:54:32.102 [DEBUG] [Thread-11234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:54:32.102 [DEBUG] [Thread-11234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:54:32.102 [DEBUG] [Thread-11234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:54:32.121 [INFO] [Thread-11234] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:54:32.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:54:32.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:54:33.008 [DEBUG] [Thread-11234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:54:33.008 [DEBUG] [Thread-11234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:54:33.057 [DEBUG] [Thread-11234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:54:33.057 [DEBUG] [Thread-11234] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:54:33.066 [DEBUG] [Thread-11234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:54:33.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:54:33.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:54:33.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:54:33.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:54:33.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:54:33.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:54:33.103 [DEBUG] [Thread-11234] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:54:38.764 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:42.603 [DEBUG] [Thread-11236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:49.188 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:57.663 [DEBUG] [Thread-11237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:54:59.599 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:00.981 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:00.984 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:03.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:55:03.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:55:03.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:55:03.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 54, 37), 28.66, 13.27, 0.0, 9.53, 19.15, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:55:03.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:54:37
2025-11-26T03:55:03.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:55:04.112 [DEBUG] [Thread-11238] [transport.py] [_log()] starting thread (client mode): 0x70d752a0
2025-11-26T03:55:04.112 [DEBUG] [Thread-11238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:55:04.132 [DEBUG] [Thread-11238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:55:04.132 [INFO] [Thread-11238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] client lang: <none>
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] server lang: <none>
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] kex follows: False
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:55:04.135 [DEBUG] [Thread-11238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:55:04.136 [DEBUG] [Thread-11238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:55:04.136 [DEBUG] [Thread-11238] [transport.py] [_log()] Compression: none
2025-11-26T03:55:04.136 [DEBUG] [Thread-11238] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:55:04.150 [DEBUG] [Thread-11238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:55:04.151 [DEBUG] [Thread-11238] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:55:04.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:55:04.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:55:04.151 [DEBUG] [Thread-11238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:55:04.152 [DEBUG] [Thread-11238] [transport.py] [_log()] userauth is OK
2025-11-26T03:55:04.152 [DEBUG] [Thread-11238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:55:04.152 [DEBUG] [Thread-11238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:55:04.152 [DEBUG] [Thread-11238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:55:04.152 [DEBUG] [Thread-11238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:55:04.160 [INFO] [Thread-11238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:55:04.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:55:05.067 [DEBUG] [Thread-11238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:55:05.067 [DEBUG] [Thread-11238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:55:05.067 [DEBUG] [Thread-11238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:55:05.108 [DEBUG] [Thread-11238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:55:05.108 [DEBUG] [Thread-11238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:55:05.111 [DEBUG] [Thread-11238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:55:05.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:55:05.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:55:05.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:55:05.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:55:05.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:55:05.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:55:05.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.079609 -999.00  +19.90   5.53     18   -4.90 1 1 1 1 1     0    0 24.28 -42.19 ZNESW 6.0 5.5 92.9 10.3 19.6 -26.0 19.4 -25.5 19.1 -24.1 19.4 -25.3
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.079609
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:55:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:54:37', tmtdew=28.66, humidity=13.27, cloud=0.0, wind=9.53, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:54:38', seeing=1.42, atlas_timestamp='2025-11-26T01:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.021749999999999048, 0.0017499999999994742, -0.029500000000000526, 0.04449999999999932, 0.020250000000000767, -0.009999999999999787, -0.003249999999999531, -0.005000000000000782, -0.017999999999998906, -0.06475000000000009, 0.007499999999998508, 0.04550000000000054, 0.036249999999999005, -0.025000000000000355, -0.02400000000000091, 0.03125, 0.027499999999999858, -0.034000000000000696, -0.016250000000001208, 0.10499999999999865, 0.07374999999999865, -0.0037499999999983658, -0.02474999999999916, 0.021999999999998465, 0.024499999999999744, 0.016750000000000043, 0.06649999999999956, 0.15799999999999947, 0.08000000000000185, 0.07000000000000028, 0.06700000000000017, 0.021749999999999048], zp_timestamp='2025-11-26T01:51:00')
2025-11-26T03:55:05.129 [DEBUG] [Thread-11238] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:55:05.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:55:05.215 [DEBUG] [Thread-11241] [transport.py] [_log()] starting thread (client mode): 0x70d77490
2025-11-26T03:55:05.215 [DEBUG] [Thread-11241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:55:05.229 [DEBUG] [Thread-11241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:55:05.229 [INFO] [Thread-11241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:55:05.236 [DEBUG] [Thread-11241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:55:05.236 [DEBUG] [Thread-11241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:55:05.236 [DEBUG] [Thread-11241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:55:05.236 [DEBUG] [Thread-11241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] client lang: <none>
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] server lang: <none>
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] kex follows: False
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] Compression: none
2025-11-26T03:55:05.237 [DEBUG] [Thread-11241] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:55:05.297 [DEBUG] [Thread-11241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:55:05.297 [DEBUG] [Thread-11241] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:55:05.297 [DEBUG] [Thread-11241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:55:05.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:55:05.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:55:05.358 [DEBUG] [Thread-11241] [transport.py] [_log()] userauth is OK
2025-11-26T03:55:05.358 [DEBUG] [Thread-11241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:55:05.358 [DEBUG] [Thread-11241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:55:05.358 [DEBUG] [Thread-11241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:55:05.358 [DEBUG] [Thread-11241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:55:05.374 [INFO] [Thread-11241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:55:05.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:55:05.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:55:06.205 [DEBUG] [Thread-11241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:55:06.205 [DEBUG] [Thread-11241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:55:06.252 [DEBUG] [Thread-11241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:55:06.252 [DEBUG] [Thread-11241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:55:06.260 [DEBUG] [Thread-11241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:55:06.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:55:06.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:55:06.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:55:06.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:55:06.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:55:06.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:55:06.291 [DEBUG] [Thread-11241] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:55:10.001 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:12.693 [DEBUG] [Thread-11243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:20.395 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:27.038 [DEBUG] [Thread-11244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:27.752 [DEBUG] [Thread-11245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:30.791 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:55:36.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:55:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:55:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 55, 9), 28.66, 13.27, 0.0, 9.62, 19.15, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:55:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:55:09
2025-11-26T03:55:37.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:55:37.246 [DEBUG] [Thread-11246] [transport.py] [_log()] starting thread (client mode): 0x70d28820
2025-11-26T03:55:37.247 [DEBUG] [Thread-11246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:55:37.266 [DEBUG] [Thread-11246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:55:37.267 [INFO] [Thread-11246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:55:37.269 [DEBUG] [Thread-11246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] client lang: <none>
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] server lang: <none>
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] kex follows: False
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] Compression: none
2025-11-26T03:55:37.270 [DEBUG] [Thread-11246] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:55:37.287 [DEBUG] [Thread-11246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:55:37.287 [DEBUG] [Thread-11246] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:55:37.288 [DEBUG] [Thread-11246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:55:37.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:55:37.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:55:37.290 [DEBUG] [Thread-11246] [transport.py] [_log()] userauth is OK
2025-11-26T03:55:37.291 [DEBUG] [Thread-11246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:55:37.291 [DEBUG] [Thread-11246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:55:37.291 [DEBUG] [Thread-11246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:55:37.291 [DEBUG] [Thread-11246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:55:37.316 [INFO] [Thread-11246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:55:37.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:55:37.954 [DEBUG] [Thread-11246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:55:37.954 [DEBUG] [Thread-11246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:55:37.954 [DEBUG] [Thread-11246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:55:37.995 [DEBUG] [Thread-11246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:55:37.995 [DEBUG] [Thread-11246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:55:37.999 [DEBUG] [Thread-11246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:55:38.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:55:38.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:55:38.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:55:38.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:55:38.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:55:38.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:55:38.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:55:38.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:55:38.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:55:38.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.079956 -999.00  +19.90   8.05     18   -4.90 1 1 1 1 1     0    0 24.00 -37.54 ZNESW 8.4 8.1 95.2 11.0 19.5 -26.2 19.4 -25.5 19.1 -24.2 19.4 -25.4
2025-11-26T03:55:38.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:55:38.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:55:38.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.079956
2025-11-26T03:55:38.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:55:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:55:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:55:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:55:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:55:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:55:09', tmtdew=28.66, humidity=13.27, cloud=0.0, wind=9.62, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:55:10', seeing=1.14, atlas_timestamp='2025-11-26T01:55:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.021749999999999048, 0.0017499999999994742, -0.029500000000000526, 0.04449999999999932, 0.020250000000000767, -0.009999999999999787, -0.003249999999999531, -0.005000000000000782, -0.017999999999998906, -0.06475000000000009, 0.007499999999998508, 0.04550000000000054, 0.036249999999999005, -0.025000000000000355, -0.02400000000000091, 0.03125, 0.027499999999999858, -0.034000000000000696, -0.016250000000001208, 0.10499999999999865, 0.07374999999999865, -0.0037499999999983658, -0.02474999999999916, 0.021999999999998465, 0.024499999999999744, 0.016750000000000043, 0.06649999999999956, 0.15799999999999947, 0.08000000000000185, 0.07000000000000028, 0.06700000000000017, 0.021749999999999048], zp_timestamp='2025-11-26T01:51:00')
2025-11-26T03:55:38.024 [DEBUG] [Thread-11246] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:55:38.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:55:38.125 [DEBUG] [Thread-11249] [transport.py] [_log()] starting thread (client mode): 0x70de7dc0
2025-11-26T03:55:38.125 [DEBUG] [Thread-11249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:55:38.144 [DEBUG] [Thread-11249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:55:38.144 [INFO] [Thread-11249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:55:38.152 [DEBUG] [Thread-11249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:55:38.152 [DEBUG] [Thread-11249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:55:38.152 [DEBUG] [Thread-11249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:55:38.152 [DEBUG] [Thread-11249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] client lang: <none>
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] server lang: <none>
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] kex follows: False
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] Compression: none
2025-11-26T03:55:38.153 [DEBUG] [Thread-11249] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:55:38.212 [DEBUG] [Thread-11249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:55:38.213 [DEBUG] [Thread-11249] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:55:38.213 [DEBUG] [Thread-11249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:55:38.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:55:38.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:55:38.269 [DEBUG] [Thread-11249] [transport.py] [_log()] userauth is OK
2025-11-26T03:55:38.269 [DEBUG] [Thread-11249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:55:38.269 [DEBUG] [Thread-11249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:55:38.269 [DEBUG] [Thread-11249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:55:38.269 [DEBUG] [Thread-11249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:55:38.289 [INFO] [Thread-11249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:55:38.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:55:38.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:55:39.082 [DEBUG] [Thread-11249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:55:39.082 [DEBUG] [Thread-11249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:55:39.130 [DEBUG] [Thread-11249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:55:39.130 [DEBUG] [Thread-11249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:55:39.139 [DEBUG] [Thread-11249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:55:39.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:55:39.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:55: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') -> 00000000
2025-11-26T03:55:39.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:55:39.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:55:39.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:55:39.176 [DEBUG] [Thread-11249] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:55:41.192 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:42.787 [DEBUG] [Thread-11251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:51.606 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:55:57.832 [DEBUG] [Thread-11252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:01.202 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:01.203 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:02.002 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:09.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:56:09.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:56:09.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:56:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 55, 41), 28.66, 13.27, 0.0, 7.99, 19.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:56:09.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:55:41
2025-11-26T03:56:09.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:56:10.142 [DEBUG] [Thread-11253] [transport.py] [_log()] starting thread (client mode): 0x70d768c0
2025-11-26T03:56:10.142 [DEBUG] [Thread-11253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:56:10.153 [DEBUG] [Thread-11253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:56:10.154 [INFO] [Thread-11253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:56:10.154 [DEBUG] [Thread-11253] [transport.py] [_log()] client lang: <none>
2025-11-26T03:56:10.155 [DEBUG] [Thread-11253] [transport.py] [_log()] server lang: <none>
2025-11-26T03:56:10.155 [DEBUG] [Thread-11253] [transport.py] [_log()] kex follows: False
2025-11-26T03:56:10.155 [DEBUG] [Thread-11253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:56:10.155 [DEBUG] [Thread-11253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:56:10.155 [DEBUG] [Thread-11253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:56:10.155 [DEBUG] [Thread-11253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:56:10.155 [DEBUG] [Thread-11253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:56:10.155 [DEBUG] [Thread-11253] [transport.py] [_log()] Compression: none
2025-11-26T03:56:10.155 [DEBUG] [Thread-11253] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:56:10.162 [DEBUG] [Thread-11253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:56:10.162 [DEBUG] [Thread-11253] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:56:10.162 [DEBUG] [Thread-11253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:56:10.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:56:10.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:56:10.164 [DEBUG] [Thread-11253] [transport.py] [_log()] userauth is OK
2025-11-26T03:56:10.164 [DEBUG] [Thread-11253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:56:10.164 [DEBUG] [Thread-11253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:56:10.164 [DEBUG] [Thread-11253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:56:10.164 [DEBUG] [Thread-11253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:56:10.177 [INFO] [Thread-11253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:56:10.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:56:10.763 [DEBUG] [Thread-11253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:56:10.764 [DEBUG] [Thread-11253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:56:10.764 [DEBUG] [Thread-11253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:56:10.805 [DEBUG] [Thread-11253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:56:10.805 [DEBUG] [Thread-11253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:56:10.807 [DEBUG] [Thread-11253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:56:10.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:56:10.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:56:10.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:56:10.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:56:10.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:56:10.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:56:10.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:56:10.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:56:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:56:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.080304 -999.00  +19.90  10.41     18   -5.00 1 1 1 1 1     0    0 24.22 -37.55 ZNESW 10.1 10.4 69.6 11.3 19.5 -26.1 19.5 -25.5 19.1 -24.2 19.4 -25.3
2025-11-26T03:56:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:56:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:56:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.080304
2025-11-26T03:56:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:56:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:56:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:56:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:56:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:56:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:55:41', tmtdew=28.66, humidity=13.27, cloud=0.0, wind=7.99, temperature=19.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:55:42', seeing=1.25, atlas_timestamp='2025-11-26T01:55:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.021749999999999048, 0.0017499999999994742, -0.029500000000000526, 0.04449999999999932, 0.020250000000000767, -0.009999999999999787, -0.003249999999999531, -0.005000000000000782, -0.017999999999998906, -0.06475000000000009, 0.007499999999998508, 0.04550000000000054, 0.036249999999999005, -0.025000000000000355, -0.02400000000000091, 0.03125, 0.027499999999999858, -0.034000000000000696, -0.016250000000001208, 0.10499999999999865, 0.07374999999999865, -0.0037499999999983658, -0.02474999999999916, 0.021999999999998465, 0.024499999999999744, 0.016750000000000043, 0.06649999999999956, 0.15799999999999947, 0.08000000000000185, 0.07000000000000028, 0.06700000000000017, 0.021749999999999048], zp_timestamp='2025-11-26T01:51:00')
2025-11-26T03:56:10.829 [DEBUG] [Thread-11253] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:56:10.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:56:10.927 [DEBUG] [Thread-11256] [transport.py] [_log()] starting thread (client mode): 0x70d77700
2025-11-26T03:56:10.927 [DEBUG] [Thread-11256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:56:10.941 [DEBUG] [Thread-11256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:56:10.941 [INFO] [Thread-11256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:56:10.949 [DEBUG] [Thread-11256] [transport.py] [_log()] client lang: <none>
2025-11-26T03:56:10.950 [DEBUG] [Thread-11256] [transport.py] [_log()] server lang: <none>
2025-11-26T03:56:10.950 [DEBUG] [Thread-11256] [transport.py] [_log()] kex follows: False
2025-11-26T03:56:10.950 [DEBUG] [Thread-11256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:56:10.950 [DEBUG] [Thread-11256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:56:10.950 [DEBUG] [Thread-11256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:56:10.950 [DEBUG] [Thread-11256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:56:10.950 [DEBUG] [Thread-11256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:56:10.950 [DEBUG] [Thread-11256] [transport.py] [_log()] Compression: none
2025-11-26T03:56:10.950 [DEBUG] [Thread-11256] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:56:11.006 [DEBUG] [Thread-11256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:56:11.007 [DEBUG] [Thread-11256] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:56:11.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:56:11.008 [DEBUG] [Thread-11256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:56:11.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:56:11.062 [DEBUG] [Thread-11256] [transport.py] [_log()] userauth is OK
2025-11-26T03:56:11.063 [DEBUG] [Thread-11256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:56:11.063 [DEBUG] [Thread-11256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:56:11.063 [DEBUG] [Thread-11256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:56:11.063 [DEBUG] [Thread-11256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:56:11.081 [INFO] [Thread-11256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:56:11.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:56:11.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:56:11.855 [DEBUG] [Thread-11256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:56:11.856 [DEBUG] [Thread-11256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:56:11.904 [DEBUG] [Thread-11256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:56:11.904 [DEBUG] [Thread-11256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:56:11.913 [DEBUG] [Thread-11256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:56:11.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:56:11.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:56:11.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:56:11.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:56:11.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:56:11.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:56:11.947 [DEBUG] [Thread-11256] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:56:12.397 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:12.870 [DEBUG] [Thread-11258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:22.793 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:27.118 [DEBUG] [Thread-11259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:27.924 [DEBUG] [Thread-11260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:33.211 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:41.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:56:41.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:56:41.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:56:42.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 56, 13), 28.66, 13.27, 0.0, 7.99, 19.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:56:42.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:56:13
2025-11-26T03:56:42.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:56:42.917 [DEBUG] [Thread-11261] [transport.py] [_log()] starting thread (client mode): 0x70dfa500
2025-11-26T03:56:42.917 [DEBUG] [Thread-11261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:56:42.937 [DEBUG] [Thread-11261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:56:42.937 [INFO] [Thread-11261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:56:42.939 [DEBUG] [Thread-11261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:56:42.939 [DEBUG] [Thread-11261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:56:42.939 [DEBUG] [Thread-11261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:56:42.939 [DEBUG] [Thread-11261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:56:42.939 [DEBUG] [Thread-11261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] client lang: <none>
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] server lang: <none>
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] kex follows: False
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:56:42.940 [DEBUG] [Thread-11261] [transport.py] [_log()] Compression: none
2025-11-26T03:56:42.941 [DEBUG] [Thread-11261] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:56:42.950 [DEBUG] [Thread-11261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:56:42.951 [DEBUG] [Thread-11261] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:56:42.951 [DEBUG] [Thread-11261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:56:42.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:56:42.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:56:42.953 [DEBUG] [Thread-11261] [transport.py] [_log()] userauth is OK
2025-11-26T03:56:42.953 [DEBUG] [Thread-11261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:56:42.953 [DEBUG] [Thread-11261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:56:42.953 [DEBUG] [Thread-11261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:56:42.953 [DEBUG] [Thread-11261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:56:42.961 [DEBUG] [Thread-11263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:42.972 [INFO] [Thread-11261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:56:42.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:56:43.561 [DEBUG] [Thread-11261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:56:43.561 [DEBUG] [Thread-11261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:56:43.562 [DEBUG] [Thread-11261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:56:43.602 [DEBUG] [Thread-11261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:56:43.602 [DEBUG] [Thread-11261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:56:43.604 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:43.605 [DEBUG] [Thread-11261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:56:43.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:56:43.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:56:43.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:56:43.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:56:43.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:56:43.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:56:43.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:56:43.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:56:43.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:56:43.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.080998 -999.00  +19.90   8.17     18   -4.90 1 1 1 1 1     0    0 24.17 -36.08 ZNESW 8.0 8.2 83.7 12.7 19.5 -25.9 19.4 -25.6 19.1 -24.1 19.4 -25.3
2025-11-26T03:56:43.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:56:43.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:56:43.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.080998
2025-11-26T03:56:43.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:56:43.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:56:43.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:56:43.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:56:43.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:56:43.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:56:13', tmtdew=28.66, humidity=13.27, cloud=0.0, wind=7.99, temperature=19.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:56:14', seeing=1.1, atlas_timestamp='2025-11-26T01:56:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.04475000000000051, 0.0022500000000000853, -0.025000000000000355, 0.04449999999999932, 0.04125000000000156, 0.0009999999999994458, -0.00024999999999941735, 0.006499999999999062, -0.007999999999999119, -0.06425000000000125, 0.028999999999999915, 0.05900000000000105, 0.004249999999998977, -0.021000000000000796, -0.0065000000000008384, 0.03125, 0.03250000000000064, -0.028999999999999915, 0.02024999999999899, 0.08999999999999808, 0.06574999999999953, -0.0022500000000000853, -0.005250000000000199, 0.008999999999998565, 0.031000000000000583, -0.0022500000000000853, 0.05349999999999966, 0.18100000000000094, 0.10000000000000142, 0.05850000000000222, 0.014500000000001734, 0.005749999999999034], zp_timestamp='2025-11-26T01:54:00')
2025-11-26T03:56:43.628 [DEBUG] [Thread-11261] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:56:43.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:56:43.725 [DEBUG] [Thread-11265] [transport.py] [_log()] starting thread (client mode): 0x70df8130
2025-11-26T03:56:43.725 [DEBUG] [Thread-11265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:56:43.739 [DEBUG] [Thread-11265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:56:43.739 [INFO] [Thread-11265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:56:43.746 [DEBUG] [Thread-11265] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:56:43.746 [DEBUG] [Thread-11265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] client lang: <none>
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] server lang: <none>
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] kex follows: False
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] Compression: none
2025-11-26T03:56:43.747 [DEBUG] [Thread-11265] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:56:43.804 [DEBUG] [Thread-11265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:56:43.805 [DEBUG] [Thread-11265] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:56:43.805 [DEBUG] [Thread-11265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:56:43.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:56:43.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:56:43.860 [DEBUG] [Thread-11265] [transport.py] [_log()] userauth is OK
2025-11-26T03:56:43.860 [DEBUG] [Thread-11265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:56:43.861 [DEBUG] [Thread-11265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:56:43.861 [DEBUG] [Thread-11265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:56:43.861 [DEBUG] [Thread-11265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:56:43.879 [INFO] [Thread-11265] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:56:43.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:56:43.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:56:44.694 [DEBUG] [Thread-11265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:56:44.694 [DEBUG] [Thread-11265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:56:44.742 [DEBUG] [Thread-11265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:56:44.742 [DEBUG] [Thread-11265] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:56:44.751 [DEBUG] [Thread-11265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:56:44.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:56:44.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:56:44.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:56:44.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:56:44.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:56:44.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:56:44.786 [DEBUG] [Thread-11265] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:56:54.014 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:56:57.997 [DEBUG] [Thread-11267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:01.406 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:01.407 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:04.448 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:13.050 [DEBUG] [Thread-11268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:57:14.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:57:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:57:14.883 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:15.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 56, 45), 28.67, 13.26, 0.0, 9.78, 19.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:57:15.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:56:45
2025-11-26T03:57:15.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:57:15.746 [DEBUG] [Thread-11269] [transport.py] [_log()] starting thread (client mode): 0x70d29480
2025-11-26T03:57:15.747 [DEBUG] [Thread-11269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:57:15.761 [DEBUG] [Thread-11269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:57:15.761 [INFO] [Thread-11269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] client lang: <none>
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] server lang: <none>
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] kex follows: False
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] Compression: none
2025-11-26T03:57:15.764 [DEBUG] [Thread-11269] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:57:15.772 [DEBUG] [Thread-11269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:57:15.772 [DEBUG] [Thread-11269] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:57:15.773 [DEBUG] [Thread-11269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:57:15.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:57:15.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:57:15.774 [DEBUG] [Thread-11269] [transport.py] [_log()] userauth is OK
2025-11-26T03:57:15.774 [DEBUG] [Thread-11269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:57:15.774 [DEBUG] [Thread-11269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:57:15.774 [DEBUG] [Thread-11269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:57:15.774 [DEBUG] [Thread-11269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:57:15.786 [INFO] [Thread-11269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:57:15.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:57:16.320 [DEBUG] [Thread-11269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:57:16.320 [DEBUG] [Thread-11269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:57:16.321 [DEBUG] [Thread-11269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:57:16.362 [DEBUG] [Thread-11269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:57:16.362 [DEBUG] [Thread-11269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:57:16.366 [DEBUG] [Thread-11269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:57:16.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:57:16.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:57:16.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:57:16.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:57:16.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:57:16.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:57:16.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:57:16.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:57:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:57:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.081345 -999.00  +19.90   6.72     18   -5.00 1 1 1 1 1     0    0 24.22 -35.40 ZNESW 9.8 6.7 82.5 12.2 19.6 -25.9 19.4 -25.4 19.1 -24.1 19.4 -25.3
2025-11-26T03:57:16.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:57:16.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:57:16.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.081345
2025-11-26T03:57:16.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:57:16.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:57:16.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:57:16.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:57:16.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:57:16.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:56:45', tmtdew=28.67, humidity=13.26, cloud=0.0, wind=9.78, temperature=19.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:56:46', seeing=1.17, atlas_timestamp='2025-11-26T01:57:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.04475000000000051, 0.0022500000000000853, -0.025000000000000355, 0.04449999999999932, 0.04125000000000156, 0.0009999999999994458, -0.00024999999999941735, 0.006499999999999062, -0.007999999999999119, -0.06425000000000125, 0.028999999999999915, 0.05900000000000105, 0.004249999999998977, -0.021000000000000796, -0.0065000000000008384, 0.03125, 0.03250000000000064, -0.028999999999999915, 0.02024999999999899, 0.08999999999999808, 0.06574999999999953, -0.0022500000000000853, -0.005250000000000199, 0.008999999999998565, 0.031000000000000583, -0.0022500000000000853, 0.05349999999999966, 0.18100000000000094, 0.10000000000000142, 0.05850000000000222, 0.014500000000001734, 0.005749999999999034], zp_timestamp='2025-11-26T01:54:00')
2025-11-26T03:57:16.393 [DEBUG] [Thread-11269] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:57:16.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:57:16.491 [DEBUG] [Thread-11272] [transport.py] [_log()] starting thread (client mode): 0x70d2a410
2025-11-26T03:57:16.491 [DEBUG] [Thread-11272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:57:16.509 [DEBUG] [Thread-11272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:57:16.509 [INFO] [Thread-11272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] client lang: <none>
2025-11-26T03:57:16.517 [DEBUG] [Thread-11272] [transport.py] [_log()] server lang: <none>
2025-11-26T03:57:16.518 [DEBUG] [Thread-11272] [transport.py] [_log()] kex follows: False
2025-11-26T03:57:16.518 [DEBUG] [Thread-11272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:57:16.518 [DEBUG] [Thread-11272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:57:16.518 [DEBUG] [Thread-11272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:57:16.518 [DEBUG] [Thread-11272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:57:16.518 [DEBUG] [Thread-11272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:57:16.518 [DEBUG] [Thread-11272] [transport.py] [_log()] Compression: none
2025-11-26T03:57:16.518 [DEBUG] [Thread-11272] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:57:16.574 [DEBUG] [Thread-11272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:57:16.575 [DEBUG] [Thread-11272] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:57:16.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:57:16.576 [DEBUG] [Thread-11272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:57:16.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:57:16.630 [DEBUG] [Thread-11272] [transport.py] [_log()] userauth is OK
2025-11-26T03:57:16.630 [DEBUG] [Thread-11272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:57:16.630 [DEBUG] [Thread-11272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:57:16.630 [DEBUG] [Thread-11272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:57:16.630 [DEBUG] [Thread-11272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:57:16.648 [INFO] [Thread-11272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:57:16.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:57:16.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:57:17.469 [DEBUG] [Thread-11272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:57:17.469 [DEBUG] [Thread-11272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:57:17.517 [DEBUG] [Thread-11272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:57:17.517 [DEBUG] [Thread-11272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:57:17.526 [DEBUG] [Thread-11272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:57:17.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:57:17.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:57: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
2025-11-26T03:57:17.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:57:17.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:57:17.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:57:17.565 [DEBUG] [Thread-11272] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:57:25.380 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:27.202 [DEBUG] [Thread-11274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:28.091 [DEBUG] [Thread-11275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:35.843 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:43.152 [DEBUG] [Thread-11276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:46.246 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:47.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:57:47.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:57:47.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:57:48.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 57, 17), 28.65, 13.29, 0.0, 9.6, 19.15, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:57:48.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:57:17
2025-11-26T03:57:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:57:48.500 [DEBUG] [Thread-11277] [transport.py] [_log()] starting thread (client mode): 0x70d29780
2025-11-26T03:57:48.500 [DEBUG] [Thread-11277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:57:48.521 [DEBUG] [Thread-11277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:57:48.521 [INFO] [Thread-11277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:57:48.524 [DEBUG] [Thread-11277] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] client lang: <none>
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] server lang: <none>
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] kex follows: False
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] Compression: none
2025-11-26T03:57:48.525 [DEBUG] [Thread-11277] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:57:48.543 [DEBUG] [Thread-11277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:57:48.543 [DEBUG] [Thread-11277] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:57:48.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:57:48.544 [DEBUG] [Thread-11277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:57:48.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:57:48.547 [DEBUG] [Thread-11277] [transport.py] [_log()] userauth is OK
2025-11-26T03:57:48.547 [DEBUG] [Thread-11277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:57:48.547 [DEBUG] [Thread-11277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:57:48.547 [DEBUG] [Thread-11277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:57:48.547 [DEBUG] [Thread-11277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:57:48.571 [INFO] [Thread-11277] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:57:48.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:57:49.215 [DEBUG] [Thread-11277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:57:49.215 [DEBUG] [Thread-11277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:57:49.215 [DEBUG] [Thread-11277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:57:49.256 [DEBUG] [Thread-11277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:57:49.256 [DEBUG] [Thread-11277] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:57:49.260 [DEBUG] [Thread-11277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:57:49.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:57:49.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:57:49.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:57:49.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:57:49.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:57:49.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:57:49.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:57:49.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:57:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:57:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.081345 -999.00  +19.90   6.72     18   -5.00 1 1 1 1 1     0    0 24.22 -35.40 ZNESW 9.8 6.7 82.5 12.2 19.6 -25.9 19.4 -25.4 19.1 -24.1 19.4 -25.3
2025-11-26T03:57:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:57:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:57:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.081345
2025-11-26T03:57:49.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:57:49.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:57:49.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:57:49.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:57:49.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:57:49.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:57:17', tmtdew=28.65, humidity=13.29, cloud=0.0, wind=9.6, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:57:18', seeing=1.17, atlas_timestamp='2025-11-26T01:57:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.04475000000000051, 0.0022500000000000853, -0.025000000000000355, 0.04449999999999932, 0.04125000000000156, 0.0009999999999994458, -0.00024999999999941735, 0.006499999999999062, -0.007999999999999119, -0.06425000000000125, 0.028999999999999915, 0.05900000000000105, 0.004249999999998977, -0.021000000000000796, -0.0065000000000008384, 0.03125, 0.03250000000000064, -0.028999999999999915, 0.02024999999999899, 0.08999999999999808, 0.06574999999999953, -0.0022500000000000853, -0.005250000000000199, 0.008999999999998565, 0.031000000000000583, -0.0022500000000000853, 0.05349999999999966, 0.18100000000000094, 0.10000000000000142, 0.05850000000000222, 0.014500000000001734, 0.005749999999999034], zp_timestamp='2025-11-26T01:54:00')
2025-11-26T03:57:49.288 [DEBUG] [Thread-11277] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:57:49.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:57:49.377 [DEBUG] [Thread-11280] [transport.py] [_log()] starting thread (client mode): 0x70d2b310
2025-11-26T03:57:49.377 [DEBUG] [Thread-11280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:57:49.391 [DEBUG] [Thread-11280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T03:57:49.391 [INFO] [Thread-11280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T03:57:49.399 [DEBUG] [Thread-11280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:57:49.399 [DEBUG] [Thread-11280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] client lang: <none>
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] server lang: <none>
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] kex follows: False
2025-11-26T03:57:49.400 [DEBUG] [Thread-11280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:57:49.401 [DEBUG] [Thread-11280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:57:49.401 [DEBUG] [Thread-11280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:57:49.401 [DEBUG] [Thread-11280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:57:49.401 [DEBUG] [Thread-11280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:57:49.401 [DEBUG] [Thread-11280] [transport.py] [_log()] Compression: none
2025-11-26T03:57:49.401 [DEBUG] [Thread-11280] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:57:49.456 [DEBUG] [Thread-11280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:57:49.457 [DEBUG] [Thread-11280] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:57:49.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T03:57:49.458 [DEBUG] [Thread-11280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T03:57:49.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:57:49.512 [DEBUG] [Thread-11280] [transport.py] [_log()] userauth is OK
2025-11-26T03:57:49.513 [DEBUG] [Thread-11280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:57:49.513 [DEBUG] [Thread-11280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:57:49.513 [DEBUG] [Thread-11280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T03:57:49.513 [DEBUG] [Thread-11280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:57:49.531 [INFO] [Thread-11280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:57:49.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T03:57:49.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:57:50.326 [DEBUG] [Thread-11280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:57:50.326 [DEBUG] [Thread-11280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:57:50.377 [DEBUG] [Thread-11280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:57:50.377 [DEBUG] [Thread-11280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:57:50.385 [DEBUG] [Thread-11280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:57:50.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:57:50.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T03:57:50.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T03:57:50.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:57:50.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:57:50.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:57:50.418 [DEBUG] [Thread-11280] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:57:56.675 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:57:58.192 [DEBUG] [Thread-11282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:01.610 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:01.611 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:07.081 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:13.240 [DEBUG] [Thread-11283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:17.480 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T03:58:20.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T03:58:20.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T03:58:21.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 3, 57, 49), 28.63, 13.24, 0.0, 9.65, 19.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T03:58:21.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 03:57:49
2025-11-26T03:58:21.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T03:58:21.392 [DEBUG] [Thread-11284] [transport.py] [_log()] starting thread (client mode): 0x70d2b190
2025-11-26T03:58:21.392 [DEBUG] [Thread-11284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T03:58:21.412 [DEBUG] [Thread-11284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T03:58:21.413 [INFO] [Thread-11284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] client lang: <none>
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] server lang: <none>
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] kex follows: False
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] Compression: none
2025-11-26T03:58:21.416 [DEBUG] [Thread-11284] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T03:58:21.434 [DEBUG] [Thread-11284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T03:58:21.435 [DEBUG] [Thread-11284] [transport.py] [_log()] Switch to new keys ...
2025-11-26T03:58:21.435 [DEBUG] [Thread-11284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T03:58:21.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T03:58:21.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T03:58:21.438 [DEBUG] [Thread-11284] [transport.py] [_log()] userauth is OK
2025-11-26T03:58:21.438 [DEBUG] [Thread-11284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T03:58:21.438 [DEBUG] [Thread-11284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T03:58:21.438 [DEBUG] [Thread-11284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T03:58:21.438 [DEBUG] [Thread-11284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T03:58:21.465 [INFO] [Thread-11284] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T03:58:21.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T03:58:22.088 [DEBUG] [Thread-11284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T03:58:22.088 [DEBUG] [Thread-11284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T03:58:22.088 [DEBUG] [Thread-11284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T03:58:22.129 [DEBUG] [Thread-11284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T03:58:22.129 [DEBUG] [Thread-11284] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T03:58:22.133 [DEBUG] [Thread-11284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T03:58:22.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T03:58:22.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T03:58:22.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T03:58:22.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T03:58:22.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T03:58:22.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T03:58:22.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T03:58:22.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T03:58:22.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T03:58:22.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.081692 -999.00  +19.90   8.08     18   -4.90 1 1 1 1 1     0    0 23.82 -34.78 ZNESW 8.7 8.1 87.0 11.6 19.5 -26.1 19.5 -25.5 19.2 -24.2 19.4 -25.3
2025-11-26T03:58:22.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T03:58:22.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T03:58:22.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.081692
2025-11-26T03:58:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T03:58:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T03:58:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T03:58:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T03:58:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T03:58:22.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T03:57:49', tmtdew=28.63, humidity=13.24, cloud=0.0, wind=9.65, temperature=19.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T03:57:50', seeing=1.19, atlas_timestamp='2025-11-26T01:57:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.04475000000000051, 0.0022500000000000853, -0.025000000000000355, 0.04449999999999932, 0.04125000000000156, 0.0009999999999994458, -0.00024999999999941735, 0.006499999999999062, -0.007999999999999119, -0.06425000000000125, 0.028999999999999915, 0.05900000000000105, 0.004249999999998977, -0.021000000000000796, -0.0065000000000008384, 0.03125, 0.03250000000000064, -0.028999999999999915, 0.02024999999999899, 0.08999999999999808, 0.06574999999999953, -0.0022500000000000853, -0.005250000000000199, 0.008999999999998565, 0.031000000000000583, -0.0022500000000000853, 0.05349999999999966, 0.18100000000000094, 0.10000000000000142, 0.05850000000000222, 0.014500000000001734, 0.005749999999999034], zp_timestamp='2025-11-26T01:54:00')
2025-11-26T03:58:22.161 [DEBUG] [Thread-11284] [transport.py] [_log()] EOF in transport thread
2025-11-26T03:58:22.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T03:58:27.282 [DEBUG] [Thread-11287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:27.860 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:28.271 [DEBUG] [Thread-11288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:38.233 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:43.333 [DEBUG] [Thread-11289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:48.633 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:58.365 [DEBUG] [Thread-11290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:58:59.057 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:01.813 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:01.814 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:09.494 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:13.401 [DEBUG] [Thread-11291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:19.946 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:27.350 [DEBUG] [Thread-11292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:28.430 [DEBUG] [Thread-11293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:30.386 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:40.790 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:43.463 [DEBUG] [Thread-11294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:51.202 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T03:59:58.504 [DEBUG] [Thread-11295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:01.617 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:02.017 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:02.018 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:12.015 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:13.532 [DEBUG] [Thread-11296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:22.456 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:27.407 [DEBUG] [Thread-11297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:28.570 [DEBUG] [Thread-11298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:32.845 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:33.741 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T04:00:43.244 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:43.603 [DEBUG] [Thread-11299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:53.639 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:00:58.638 [DEBUG] [Thread-11300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:02.218 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:02.219 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:03.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:01:03.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:01:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:01:04.030 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 0, 29), 28.62, 13.31, 0.0, 9.67, 19.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:01:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:00:29
2025-11-26T04:01:04.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:01:04.740 [DEBUG] [Thread-11301] [transport.py] [_log()] starting thread (client mode): 0x70dfae00
2025-11-26T04:01:04.740 [DEBUG] [Thread-11301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:01:04.752 [DEBUG] [Thread-11301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:01:04.752 [INFO] [Thread-11301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] client lang: <none>
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] server lang: <none>
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] kex follows: False
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] Compression: none
2025-11-26T04:01:04.753 [DEBUG] [Thread-11301] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:01:04.765 [DEBUG] [Thread-11301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:01:04.766 [DEBUG] [Thread-11301] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:01:04.766 [DEBUG] [Thread-11301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:01:04.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:01:04.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:01:04.767 [DEBUG] [Thread-11301] [transport.py] [_log()] userauth is OK
2025-11-26T04:01:04.767 [DEBUG] [Thread-11301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:01:04.768 [DEBUG] [Thread-11301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:01:04.768 [DEBUG] [Thread-11301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:01:04.768 [DEBUG] [Thread-11301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:01:04.783 [INFO] [Thread-11301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:01:04.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:01:05.413 [DEBUG] [Thread-11301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:01:05.413 [DEBUG] [Thread-11301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:01:05.414 [DEBUG] [Thread-11301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:01:05.454 [DEBUG] [Thread-11301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:01:05.454 [DEBUG] [Thread-11301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:01:05.457 [DEBUG] [Thread-11301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:01:05.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:01:05.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:01:05.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:01:05.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:01:05.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:01:05.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:01:05.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:01:05.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:01:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:01:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.083776 -999.00  +19.80   8.60     18   -5.10 1 1 1 1 1     0    0 24.26 -30.82 ZNESW 10.6 8.6 96.6 12.6 19.4 -25.9 19.4 -25.5 19.1 -24.3 19.4 -25.2
2025-11-26T04:01:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:01:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:01:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.083776
2025-11-26T04:01:05.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:01:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:01:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:01:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:01:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:01:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:00:29', tmtdew=28.62, humidity=13.31, cloud=0.0, wind=9.67, temperature=19.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:01:02', seeing=1.49, atlas_timestamp='2025-11-26T02:00:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.04475000000000051, 0.0022500000000000853, -0.025000000000000355, 0.04449999999999932, 0.04125000000000156, 0.0009999999999994458, -0.00024999999999941735, 0.006499999999999062, -0.007999999999999119, -0.06425000000000125, 0.028999999999999915, 0.05900000000000105, 0.004249999999998977, -0.021000000000000796, -0.0065000000000008384, 0.03125, 0.03250000000000064, -0.028999999999999915, 0.02024999999999899, 0.08999999999999808, 0.06574999999999953, -0.0022500000000000853, -0.005250000000000199, 0.008999999999998565, 0.031000000000000583, -0.0022500000000000853, 0.05349999999999966, 0.18100000000000094, 0.10000000000000142, 0.05850000000000222, 0.014500000000001734, 0.005749999999999034], zp_timestamp='2025-11-26T01:57:00')
2025-11-26T04:01:05.486 [DEBUG] [Thread-11301] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:01:05.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:01:05.585 [DEBUG] [Thread-11304] [transport.py] [_log()] starting thread (client mode): 0x70dfbdc0
2025-11-26T04:01:05.586 [DEBUG] [Thread-11304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:01:05.601 [DEBUG] [Thread-11304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:01:05.601 [INFO] [Thread-11304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:01:05.608 [DEBUG] [Thread-11304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:01:05.609 [DEBUG] [Thread-11304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:01:05.609 [DEBUG] [Thread-11304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:01:05.609 [DEBUG] [Thread-11304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:01:05.609 [DEBUG] [Thread-11304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:01:05.609 [DEBUG] [Thread-11304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:01:05.609 [DEBUG] [Thread-11304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:01:05.609 [DEBUG] [Thread-11304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:01:05.610 [DEBUG] [Thread-11304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:01:05.610 [DEBUG] [Thread-11304] [transport.py] [_log()] client lang: <none>
2025-11-26T04:01:05.610 [DEBUG] [Thread-11304] [transport.py] [_log()] server lang: <none>
2025-11-26T04:01:05.610 [DEBUG] [Thread-11304] [transport.py] [_log()] kex follows: False
2025-11-26T04:01:05.610 [DEBUG] [Thread-11304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:01:05.610 [DEBUG] [Thread-11304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:01:05.610 [DEBUG] [Thread-11304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:01:05.610 [DEBUG] [Thread-11304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:01:05.610 [DEBUG] [Thread-11304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:01:05.611 [DEBUG] [Thread-11304] [transport.py] [_log()] Compression: none
2025-11-26T04:01:05.611 [DEBUG] [Thread-11304] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:01:05.668 [DEBUG] [Thread-11304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:01:05.668 [DEBUG] [Thread-11304] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:01:05.669 [DEBUG] [Thread-11304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:01:05.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:01:05.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:01:05.723 [DEBUG] [Thread-11304] [transport.py] [_log()] userauth is OK
2025-11-26T04:01:05.724 [DEBUG] [Thread-11304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:01:05.724 [DEBUG] [Thread-11304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:01:05.724 [DEBUG] [Thread-11304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:01:05.724 [DEBUG] [Thread-11304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:01:05.743 [INFO] [Thread-11304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:01:05.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:01:05.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:01:06.636 [DEBUG] [Thread-11304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:01:06.637 [DEBUG] [Thread-11304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:01:06.685 [DEBUG] [Thread-11304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:01:06.685 [DEBUG] [Thread-11304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:01:06.698 [DEBUG] [Thread-11304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:01:06.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:01:06.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:01:06.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:01:06.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:01:06.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:01:06.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:01:06.738 [DEBUG] [Thread-11304] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:01:13.677 [DEBUG] [Thread-11306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:14.449 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:24.846 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:27.473 [DEBUG] [Thread-11307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:28.727 [DEBUG] [Thread-11308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:35.249 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:36.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:01:36.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:01:36.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:01:37.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 1, 33), 27.28, 14.68, 0.0, 11.96, 17.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:01:37.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:01:33
2025-11-26T04:01:37.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:01:37.706 [DEBUG] [Thread-11309] [transport.py] [_log()] starting thread (client mode): 0x70df9030
2025-11-26T04:01:37.706 [DEBUG] [Thread-11309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:01:37.728 [DEBUG] [Thread-11309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:01:37.728 [INFO] [Thread-11309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] client lang: <none>
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] server lang: <none>
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] kex follows: False
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] Compression: none
2025-11-26T04:01:37.731 [DEBUG] [Thread-11309] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:01:37.748 [DEBUG] [Thread-11309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:01:37.749 [DEBUG] [Thread-11309] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:01:37.749 [DEBUG] [Thread-11309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:01:37.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:01:37.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:01:37.751 [DEBUG] [Thread-11309] [transport.py] [_log()] userauth is OK
2025-11-26T04:01:37.752 [DEBUG] [Thread-11309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:01:37.752 [DEBUG] [Thread-11309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:01:37.752 [DEBUG] [Thread-11309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:01:37.752 [DEBUG] [Thread-11309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:01:37.788 [INFO] [Thread-11309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:01:37.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:01:38.390 [DEBUG] [Thread-11309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:01:38.390 [DEBUG] [Thread-11309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:01:38.390 [DEBUG] [Thread-11309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:01:38.430 [DEBUG] [Thread-11309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:01:38.431 [DEBUG] [Thread-11309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:01:38.434 [DEBUG] [Thread-11309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:01:38.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:01:38.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:01:38.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:01:38.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:01:38.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:01:38.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:01:38.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:01:38.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:01:38.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:01:38.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.084123 -999.00  +19.80  10.44     18   -5.10 1 1 1 1 1     0    0 24.54 -29.23 ZNESW 9.2 10.4 73.0 11.4 19.4 -26.1 19.4 -25.4 19.1 -24.3 19.4 -25.3
2025-11-26T04:01:38.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:01:38.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:01:38.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.084123
2025-11-26T04:01:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:01:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:01:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:01:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:01:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:01:38.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:01:33', tmtdew=27.28, humidity=14.68, cloud=0.0, wind=11.96, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:01:34', seeing=1.13, atlas_timestamp='2025-11-26T02:01:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.04475000000000051, 0.0022500000000000853, -0.025000000000000355, 0.04449999999999932, 0.04125000000000156, 0.0009999999999994458, -0.00024999999999941735, 0.006499999999999062, -0.007999999999999119, -0.06425000000000125, 0.028999999999999915, 0.05900000000000105, 0.004249999999998977, -0.021000000000000796, -0.0065000000000008384, 0.03125, 0.03250000000000064, -0.028999999999999915, 0.02024999999999899, 0.08999999999999808, 0.06574999999999953, -0.0022500000000000853, -0.005250000000000199, 0.008999999999998565, 0.031000000000000583, -0.0022500000000000853, 0.05349999999999966, 0.18100000000000094, 0.10000000000000142, 0.05850000000000222, 0.014500000000001734, 0.005749999999999034], zp_timestamp='2025-11-26T01:57:00')
2025-11-26T04:01:38.459 [DEBUG] [Thread-11309] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:01:38.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:01:38.555 [DEBUG] [Thread-11312] [transport.py] [_log()] starting thread (client mode): 0x70d295a0
2025-11-26T04:01:38.555 [DEBUG] [Thread-11312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:01:38.570 [DEBUG] [Thread-11312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:01:38.570 [INFO] [Thread-11312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] client lang: <none>
2025-11-26T04:01:38.578 [DEBUG] [Thread-11312] [transport.py] [_log()] server lang: <none>
2025-11-26T04:01:38.579 [DEBUG] [Thread-11312] [transport.py] [_log()] kex follows: False
2025-11-26T04:01:38.579 [DEBUG] [Thread-11312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:01:38.579 [DEBUG] [Thread-11312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:01:38.579 [DEBUG] [Thread-11312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:01:38.579 [DEBUG] [Thread-11312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:01:38.579 [DEBUG] [Thread-11312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:01:38.579 [DEBUG] [Thread-11312] [transport.py] [_log()] Compression: none
2025-11-26T04:01:38.579 [DEBUG] [Thread-11312] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:01:38.638 [DEBUG] [Thread-11312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:01:38.638 [DEBUG] [Thread-11312] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:01:38.639 [DEBUG] [Thread-11312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:01:38.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:01:38.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:01:38.694 [DEBUG] [Thread-11312] [transport.py] [_log()] userauth is OK
2025-11-26T04:01:38.694 [DEBUG] [Thread-11312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:01:38.694 [DEBUG] [Thread-11312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:01:38.695 [DEBUG] [Thread-11312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:01:38.695 [DEBUG] [Thread-11312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:01:38.713 [INFO] [Thread-11312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:01:38.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:01:38.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:01:39.527 [DEBUG] [Thread-11312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:01:39.527 [DEBUG] [Thread-11312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:01:39.576 [DEBUG] [Thread-11312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:01:39.576 [DEBUG] [Thread-11312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:01:39.585 [DEBUG] [Thread-11312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:01:39.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:01:39.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:01:39.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:01:39.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:01:39.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:01:39.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:01:39.623 [DEBUG] [Thread-11312] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:01:43.763 [DEBUG] [Thread-11314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:45.668 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:56.105 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:01:58.818 [DEBUG] [Thread-11315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:02.421 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:02.423 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:06.538 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:02:09.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:02:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:02:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 2, 5), 28.62, 13.31, 0.0, 9.18, 19.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:02:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:02:05
2025-11-26T04:02:10.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:02:10.592 [DEBUG] [Thread-11316] [transport.py] [_log()] starting thread (client mode): 0x70d2bd00
2025-11-26T04:02:10.593 [DEBUG] [Thread-11316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:02:10.608 [DEBUG] [Thread-11316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:02:10.608 [INFO] [Thread-11316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] client lang: <none>
2025-11-26T04:02:10.610 [DEBUG] [Thread-11316] [transport.py] [_log()] server lang: <none>
2025-11-26T04:02:10.611 [DEBUG] [Thread-11316] [transport.py] [_log()] kex follows: False
2025-11-26T04:02:10.611 [DEBUG] [Thread-11316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:02:10.611 [DEBUG] [Thread-11316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:02:10.611 [DEBUG] [Thread-11316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:02:10.611 [DEBUG] [Thread-11316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:02:10.611 [DEBUG] [Thread-11316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:02:10.611 [DEBUG] [Thread-11316] [transport.py] [_log()] Compression: none
2025-11-26T04:02:10.611 [DEBUG] [Thread-11316] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:02:10.627 [DEBUG] [Thread-11316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:02:10.628 [DEBUG] [Thread-11316] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:02:10.628 [DEBUG] [Thread-11316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:02:10.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:02:10.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:02:10.629 [DEBUG] [Thread-11316] [transport.py] [_log()] userauth is OK
2025-11-26T04:02:10.629 [DEBUG] [Thread-11316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:02:10.629 [DEBUG] [Thread-11316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:02:10.629 [DEBUG] [Thread-11316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:02:10.629 [DEBUG] [Thread-11316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:02:10.638 [INFO] [Thread-11316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:02:10.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:02:11.368 [DEBUG] [Thread-11316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:02:11.368 [DEBUG] [Thread-11316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:02:11.369 [DEBUG] [Thread-11316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:02:11.410 [DEBUG] [Thread-11316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:02:11.410 [DEBUG] [Thread-11316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:02:11.413 [DEBUG] [Thread-11316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:02:11.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:02:11.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:02:11.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:02:11.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:02:11.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:02:11.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:02:11.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:02:11.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:02:11.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:02:11.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.084470 -999.00  +19.70   5.74     18   -5.10 1 1 1 1 1     0    0 24.44 -30.84 ZNESW 6.0 5.7 122.1 13.5 19.4 -26.2 19.4 -25.7 19.1 -24.2 19.3 -25.3
2025-11-26T04:02:11.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:02:11.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:02:11.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.084470
2025-11-26T04:02:11.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:02:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:02:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:02:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:02:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:02:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:02:05', tmtdew=28.62, humidity=13.31, cloud=0.0, wind=9.18, temperature=19.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:02:06', seeing=1.54, atlas_timestamp='2025-11-26T02:01:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.04475000000000051, 0.0022500000000000853, -0.025000000000000355, 0.04449999999999932, 0.04125000000000156, 0.0009999999999994458, -0.00024999999999941735, 0.006499999999999062, -0.007999999999999119, -0.06425000000000125, 0.028999999999999915, 0.05900000000000105, 0.004249999999998977, -0.021000000000000796, -0.0065000000000008384, 0.03125, 0.03250000000000064, -0.028999999999999915, 0.02024999999999899, 0.08999999999999808, 0.06574999999999953, -0.0022500000000000853, -0.005250000000000199, 0.008999999999998565, 0.031000000000000583, -0.0022500000000000853, 0.05349999999999966, 0.18100000000000094, 0.10000000000000142, 0.05850000000000222, 0.014500000000001734, 0.005749999999999034], zp_timestamp='2025-11-26T01:57:00')
2025-11-26T04:02:11.434 [DEBUG] [Thread-11316] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:02:11.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:02:11.530 [DEBUG] [Thread-11319] [transport.py] [_log()] starting thread (client mode): 0x70df8940
2025-11-26T04:02:11.530 [DEBUG] [Thread-11319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:02:11.544 [DEBUG] [Thread-11319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:02:11.544 [INFO] [Thread-11319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] client lang: <none>
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] server lang: <none>
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] kex follows: False
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] Compression: none
2025-11-26T04:02:11.552 [DEBUG] [Thread-11319] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:02:11.609 [DEBUG] [Thread-11319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:02:11.610 [DEBUG] [Thread-11319] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:02:11.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:02:11.611 [DEBUG] [Thread-11319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:02:11.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:02:11.665 [DEBUG] [Thread-11319] [transport.py] [_log()] userauth is OK
2025-11-26T04:02:11.665 [DEBUG] [Thread-11319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:02:11.666 [DEBUG] [Thread-11319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:02:11.666 [DEBUG] [Thread-11319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:02:11.666 [DEBUG] [Thread-11319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:02:11.684 [INFO] [Thread-11319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:02:11.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:02:11.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:02:12.501 [DEBUG] [Thread-11319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:02:12.501 [DEBUG] [Thread-11319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:02:12.548 [DEBUG] [Thread-11319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:02:12.549 [DEBUG] [Thread-11319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:02:12.557 [DEBUG] [Thread-11319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:02:12.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:02:12.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:02:12.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:02:12.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:02:12.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:02:12.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:02:12.592 [DEBUG] [Thread-11319] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:02:13.853 [DEBUG] [Thread-11321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:16.999 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:27.395 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:27.529 [DEBUG] [Thread-11322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:28.906 [DEBUG] [Thread-11323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:37.815 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:42.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:02:42.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:02:42.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:02:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 2, 37), 28.61, 13.32, 0.0, 9.55, 19.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:02:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:02:37
2025-11-26T04:02:43.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:02:43.534 [DEBUG] [Thread-11324] [transport.py] [_log()] starting thread (client mode): 0x70d7c670
2025-11-26T04:02:43.535 [DEBUG] [Thread-11324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:02:43.551 [DEBUG] [Thread-11324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:02:43.551 [INFO] [Thread-11324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] client lang: <none>
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] server lang: <none>
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] kex follows: False
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] Compression: none
2025-11-26T04:02:43.555 [DEBUG] [Thread-11324] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:02:43.572 [DEBUG] [Thread-11324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:02:43.572 [DEBUG] [Thread-11324] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:02:43.573 [DEBUG] [Thread-11324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:02:43.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:02:43.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:02:43.575 [DEBUG] [Thread-11324] [transport.py] [_log()] userauth is OK
2025-11-26T04:02:43.575 [DEBUG] [Thread-11324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:02:43.575 [DEBUG] [Thread-11324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:02:43.576 [DEBUG] [Thread-11324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:02:43.576 [DEBUG] [Thread-11324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:02:43.613 [INFO] [Thread-11324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:02:43.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:02:43.938 [DEBUG] [Thread-11326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:44.271 [DEBUG] [Thread-11324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:02:44.271 [DEBUG] [Thread-11324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:02:44.272 [DEBUG] [Thread-11324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:02:44.313 [DEBUG] [Thread-11324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:02:44.313 [DEBUG] [Thread-11324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:02:44.317 [DEBUG] [Thread-11324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:02:44.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:02:44.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:02:44.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:02:44.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:02:44.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:02:44.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:02:44.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:02:44.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:02:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:02:44.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.084817 -999.00  +19.70  12.08     18   -5.00 1 1 1 1 1     0    0 23.79 -29.37 ZNESW 11.3 12.1 73.8 12.6 19.4 -26.1 19.3 -25.4 19.0 -24.1 19.3 -25.1
2025-11-26T04:02:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:02:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:02:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.084817
2025-11-26T04:02:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:02:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:02:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:02:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:02:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:02:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:02:37', tmtdew=28.61, humidity=13.32, cloud=0.0, wind=9.55, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:02:38', seeing=1.15, atlas_timestamp='2025-11-26T02:02:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:02:44.344 [DEBUG] [Thread-11324] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:02:44.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:02:44.441 [DEBUG] [Thread-11328] [transport.py] [_log()] starting thread (client mode): 0x70de5fc0
2025-11-26T04:02:44.441 [DEBUG] [Thread-11328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:02:44.460 [DEBUG] [Thread-11328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:02:44.461 [INFO] [Thread-11328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:02:44.468 [DEBUG] [Thread-11328] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] client lang: <none>
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] server lang: <none>
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] kex follows: False
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:02:44.469 [DEBUG] [Thread-11328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:02:44.470 [DEBUG] [Thread-11328] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:02:44.470 [DEBUG] [Thread-11328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:02:44.470 [DEBUG] [Thread-11328] [transport.py] [_log()] Compression: none
2025-11-26T04:02:44.470 [DEBUG] [Thread-11328] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:02:44.527 [DEBUG] [Thread-11328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:02:44.528 [DEBUG] [Thread-11328] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:02:44.528 [DEBUG] [Thread-11328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:02:44.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:02:44.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:02:44.583 [DEBUG] [Thread-11328] [transport.py] [_log()] userauth is OK
2025-11-26T04:02:44.584 [DEBUG] [Thread-11328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:02:44.584 [DEBUG] [Thread-11328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:02:44.584 [DEBUG] [Thread-11328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:02:44.584 [DEBUG] [Thread-11328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:02:44.603 [INFO] [Thread-11328] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:02:44.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:02:44.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:02:45.445 [DEBUG] [Thread-11328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:02:45.445 [DEBUG] [Thread-11328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:02:45.493 [DEBUG] [Thread-11328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:02:45.493 [DEBUG] [Thread-11328] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:02:45.502 [DEBUG] [Thread-11328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:02:45.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:02:45.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:02:45.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:02:45.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:02:45.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:02:45.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:02:45.542 [DEBUG] [Thread-11328] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:02:48.228 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:58.644 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:02:58.974 [DEBUG] [Thread-11330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:02.622 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:02.623 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:09.060 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:14.023 [DEBUG] [Thread-11331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:15.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:03:15.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:03:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:03:16.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 3, 9), 28.64, 13.29, 0.0, 10.5, 19.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:03:16.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:03:09
2025-11-26T04:03:16.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:03:16.482 [DEBUG] [Thread-11332] [transport.py] [_log()] starting thread (client mode): 0x70d2b100
2025-11-26T04:03:16.483 [DEBUG] [Thread-11332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:03:16.502 [DEBUG] [Thread-11332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:03:16.502 [INFO] [Thread-11332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:03:16.505 [DEBUG] [Thread-11332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:03:16.505 [DEBUG] [Thread-11332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:03:16.505 [DEBUG] [Thread-11332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:03:16.505 [DEBUG] [Thread-11332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:03:16.505 [DEBUG] [Thread-11332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:03:16.505 [DEBUG] [Thread-11332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:03:16.505 [DEBUG] [Thread-11332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:03:16.505 [DEBUG] [Thread-11332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] client lang: <none>
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] server lang: <none>
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] kex follows: False
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] Compression: none
2025-11-26T04:03:16.506 [DEBUG] [Thread-11332] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:03:16.523 [DEBUG] [Thread-11332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:03:16.523 [DEBUG] [Thread-11332] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:03:16.523 [DEBUG] [Thread-11332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:03:16.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:03:16.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:03:16.524 [DEBUG] [Thread-11332] [transport.py] [_log()] userauth is OK
2025-11-26T04:03:16.524 [DEBUG] [Thread-11332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:03:16.524 [DEBUG] [Thread-11332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:03:16.524 [DEBUG] [Thread-11332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:03:16.524 [DEBUG] [Thread-11332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:03:16.534 [INFO] [Thread-11332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:03:16.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:03:17.168 [DEBUG] [Thread-11332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:03:17.168 [DEBUG] [Thread-11332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:03:17.169 [DEBUG] [Thread-11332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:03:17.209 [DEBUG] [Thread-11332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:03:17.209 [DEBUG] [Thread-11332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:03:17.212 [DEBUG] [Thread-11332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:03:17.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:03:17.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:03:17.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:03:17.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:03:17.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:03:17.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:03:17.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:03:17.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:03:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:03:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.085165 -999.00  +19.80   7.75     18   -5.00 1 1 1 1 1     0    0 23.73 -29.74 ZNESW 9.1 7.8 79.8 13.2 19.4 -26.0 19.4 -25.4 19.1 -24.1 19.3 -25.4
2025-11-26T04:03:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:03:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:03:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.085165
2025-11-26T04:03:17.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:03:17.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:03:17.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:03:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:03:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:03:17.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:03:09', tmtdew=28.64, humidity=13.29, cloud=0.0, wind=10.5, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:03:10', seeing=1.32, atlas_timestamp='2025-11-26T02:02:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:03:17.232 [DEBUG] [Thread-11332] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:03:17.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:03:17.328 [DEBUG] [Thread-11335] [transport.py] [_log()] starting thread (client mode): 0x70d7c730
2025-11-26T04:03:17.328 [DEBUG] [Thread-11335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:03:17.343 [DEBUG] [Thread-11335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:03:17.343 [INFO] [Thread-11335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:03:17.350 [DEBUG] [Thread-11335] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] client lang: <none>
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] server lang: <none>
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] kex follows: False
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] Compression: none
2025-11-26T04:03:17.351 [DEBUG] [Thread-11335] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:03:17.415 [DEBUG] [Thread-11335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:03:17.415 [DEBUG] [Thread-11335] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:03:17.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:03:17.417 [DEBUG] [Thread-11335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:03:17.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:03:17.475 [DEBUG] [Thread-11335] [transport.py] [_log()] userauth is OK
2025-11-26T04:03:17.475 [DEBUG] [Thread-11335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:03:17.475 [DEBUG] [Thread-11335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:03:17.475 [DEBUG] [Thread-11335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:03:17.475 [DEBUG] [Thread-11335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:03:17.493 [INFO] [Thread-11335] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:03:17.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:03:17.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:03:18.305 [DEBUG] [Thread-11335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:03:18.305 [DEBUG] [Thread-11335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:03:18.353 [DEBUG] [Thread-11335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:03:18.353 [DEBUG] [Thread-11335] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:03:18.362 [DEBUG] [Thread-11335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:03:18.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:03:18.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:03:18.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:03:18.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:03:18.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:03:18.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:03:18.405 [DEBUG] [Thread-11335] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:03:19.458 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:27.605 [DEBUG] [Thread-11337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:29.058 [DEBUG] [Thread-11338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:29.858 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:40.249 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:44.109 [DEBUG] [Thread-11339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:48.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:03:48.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:03:48.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:03:49.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 3, 41), 28.63, 13.29, 0.0, 12.9, 19.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:03:49.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:03:41
2025-11-26T04:03:49.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:03:49.392 [DEBUG] [Thread-11340] [transport.py] [_log()] starting thread (client mode): 0x70df8f70
2025-11-26T04:03:49.392 [DEBUG] [Thread-11340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:03:49.414 [DEBUG] [Thread-11340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:03:49.414 [INFO] [Thread-11340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] client lang: <none>
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] server lang: <none>
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] kex follows: False
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] Compression: none
2025-11-26T04:03:49.416 [DEBUG] [Thread-11340] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:03:49.423 [DEBUG] [Thread-11340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:03:49.424 [DEBUG] [Thread-11340] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:03:49.424 [DEBUG] [Thread-11340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:03:49.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:03:49.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:03:49.424 [DEBUG] [Thread-11340] [transport.py] [_log()] userauth is OK
2025-11-26T04:03:49.424 [DEBUG] [Thread-11340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:03:49.425 [DEBUG] [Thread-11340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:03:49.425 [DEBUG] [Thread-11340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:03:49.425 [DEBUG] [Thread-11340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:03:49.434 [INFO] [Thread-11340] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:03:49.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:03:50.077 [DEBUG] [Thread-11340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:03:50.077 [DEBUG] [Thread-11340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:03:50.077 [DEBUG] [Thread-11340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:03:50.118 [DEBUG] [Thread-11340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:03:50.118 [DEBUG] [Thread-11340] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:03:50.121 [DEBUG] [Thread-11340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:03:50.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:03:50.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:03:50.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:03:50.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:03:50.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:03:50.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:03:50.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:03:50.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:03:50.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:03:50.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.085859 -999.00  +19.80  11.46     18   -5.00 1 1 1 1 1     0    0 24.08 -27.90 ZNESW 5.1 11.5 50.7 14.3 19.4 -26.1 19.3 -25.4 19.0 -24.0 19.3 -25.2
2025-11-26T04:03:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:03:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:03:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.085859
2025-11-26T04:03:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:03:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:03:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:03:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:03:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:03:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:03:41', tmtdew=28.63, humidity=13.29, cloud=0.0, wind=12.9, temperature=19.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:03:42', seeing=1.32, atlas_timestamp='2025-11-26T02:03:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:03:50.140 [DEBUG] [Thread-11340] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:03:50.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:03:50.224 [DEBUG] [Thread-11343] [transport.py] [_log()] starting thread (client mode): 0x70d7fc40
2025-11-26T04:03:50.224 [DEBUG] [Thread-11343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:03:50.242 [DEBUG] [Thread-11343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:03:50.243 [INFO] [Thread-11343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] client lang: <none>
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] server lang: <none>
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] kex follows: False
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] Compression: none
2025-11-26T04:03:50.250 [DEBUG] [Thread-11343] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:03:50.307 [DEBUG] [Thread-11343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:03:50.308 [DEBUG] [Thread-11343] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:03:50.308 [DEBUG] [Thread-11343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:03:50.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:03:50.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:03:50.365 [DEBUG] [Thread-11343] [transport.py] [_log()] userauth is OK
2025-11-26T04:03:50.365 [DEBUG] [Thread-11343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:03:50.365 [DEBUG] [Thread-11343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:03:50.365 [DEBUG] [Thread-11343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:03:50.365 [DEBUG] [Thread-11343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:03:50.380 [INFO] [Thread-11343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:03:50.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:03:50.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:03:50.719 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:03:51.231 [DEBUG] [Thread-11343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:03:51.231 [DEBUG] [Thread-11343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:03:51.279 [DEBUG] [Thread-11343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:03:51.279 [DEBUG] [Thread-11343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:03:51.288 [DEBUG] [Thread-11343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:03:51.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:03:51.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:03:51.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:03:51.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:03:51.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:03:51.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:03:51.320 [DEBUG] [Thread-11343] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:03:59.145 [DEBUG] [Thread-11345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:04:01.118 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:04:02.825 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:04:02.827 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:04:14.198 [DEBUG] [Thread-11346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:04:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:04:21.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:04:21.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:04:22.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 4, 14), 28.58, 13.36, 0.0, 13.41, 19.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:04:22.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:04:14
2025-11-26T04:04:22.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:04:22.284 [DEBUG] [Thread-11347] [transport.py] [_log()] starting thread (client mode): 0x70de49d0
2025-11-26T04:04:22.284 [DEBUG] [Thread-11347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:04:22.303 [DEBUG] [Thread-11347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:04:22.303 [INFO] [Thread-11347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:04:22.306 [DEBUG] [Thread-11347] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] client lang: <none>
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] server lang: <none>
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] kex follows: False
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:04:22.307 [DEBUG] [Thread-11347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:04:22.308 [DEBUG] [Thread-11347] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:04:22.308 [DEBUG] [Thread-11347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:04:22.308 [DEBUG] [Thread-11347] [transport.py] [_log()] Compression: none
2025-11-26T04:04:22.308 [DEBUG] [Thread-11347] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:04:22.326 [DEBUG] [Thread-11347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:04:22.326 [DEBUG] [Thread-11347] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:04:22.327 [DEBUG] [Thread-11347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:04:22.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:04:22.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:04:22.328 [DEBUG] [Thread-11347] [transport.py] [_log()] userauth is OK
2025-11-26T04:04:22.329 [DEBUG] [Thread-11347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:04:22.329 [DEBUG] [Thread-11347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:04:22.329 [DEBUG] [Thread-11347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:04:22.329 [DEBUG] [Thread-11347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:04:22.353 [INFO] [Thread-11347] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:04:22.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:04:22.978 [DEBUG] [Thread-11347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:04:22.978 [DEBUG] [Thread-11347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:04:22.979 [DEBUG] [Thread-11347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:04:23.019 [DEBUG] [Thread-11347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:04:23.019 [DEBUG] [Thread-11347] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:04:23.022 [DEBUG] [Thread-11347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:04:23.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:04:23.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:04:23.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:04:23.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:04:23.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:04:23.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:04:23.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:04:23.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:04:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:04:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.086206 -999.00  +19.80   7.85     18   -5.00 1 1 1 1 1     0    0 23.89 -32.04 ZNESW 6.5 7.8 130.2 12.1 19.4 -26.1 19.3 -25.3 19.1 -24.2 19.3 -25.1
2025-11-26T04:04:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:04:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:04:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.086206
2025-11-26T04:04:23.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:04:23.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:04:23.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:04:23.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:04:23.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:04:23.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:04:14', tmtdew=28.58, humidity=13.36, cloud=0.0, wind=13.41, temperature=19.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:04:14', seeing=1.31, atlas_timestamp='2025-11-26T02:04:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:04:23.035 [DEBUG] [Thread-11347] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:04:23.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:04:23.119 [DEBUG] [Thread-11350] [transport.py] [_log()] starting thread (client mode): 0x70de5690
2025-11-26T04:04:23.119 [DEBUG] [Thread-11350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:04:23.133 [DEBUG] [Thread-11350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:04:23.133 [INFO] [Thread-11350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] client lang: <none>
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] server lang: <none>
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] kex follows: False
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] Compression: none
2025-11-26T04:04:23.141 [DEBUG] [Thread-11350] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:04:23.199 [DEBUG] [Thread-11350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:04:23.199 [DEBUG] [Thread-11350] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:04:23.199 [DEBUG] [Thread-11350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:04:23.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:04:23.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:04:23.257 [DEBUG] [Thread-11350] [transport.py] [_log()] userauth is OK
2025-11-26T04:04:23.257 [DEBUG] [Thread-11350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:04:23.257 [DEBUG] [Thread-11350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:04:23.257 [DEBUG] [Thread-11350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:04:23.257 [DEBUG] [Thread-11350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:04:23.271 [INFO] [Thread-11350] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:04:23.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:04:23.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:04:24.078 [DEBUG] [Thread-11350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:04:24.078 [DEBUG] [Thread-11350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:04:24.127 [DEBUG] [Thread-11350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:04:24.127 [DEBUG] [Thread-11350] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:04:24.135 [DEBUG] [Thread-11350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:04:24.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:04:24.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:04:24.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:04:24.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:04:24.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:04:24.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:04:24.167 [DEBUG] [Thread-11350] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:04:27.677 [DEBUG] [Thread-11352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:04:29.231 [DEBUG] [Thread-11353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:04:44.287 [DEBUG] [Thread-11354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:04:54.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:04:54.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:04:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:04:54.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 4, 45), 28.64, 13.34, 0.0, 12.19, 19.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:04:54.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:04:45
2025-11-26T04:04:54.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:04:55.140 [DEBUG] [Thread-11355] [transport.py] [_log()] starting thread (client mode): 0x70d7dff0
2025-11-26T04:04:55.140 [DEBUG] [Thread-11355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:04:55.161 [DEBUG] [Thread-11355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:04:55.161 [INFO] [Thread-11355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:04:55.164 [DEBUG] [Thread-11355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:04:55.164 [DEBUG] [Thread-11355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] client lang: <none>
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] server lang: <none>
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] kex follows: False
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] Compression: none
2025-11-26T04:04:55.165 [DEBUG] [Thread-11355] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:04:55.182 [DEBUG] [Thread-11355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:04:55.182 [DEBUG] [Thread-11355] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:04:55.183 [DEBUG] [Thread-11355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:04:55.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:04:55.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:04:55.185 [DEBUG] [Thread-11355] [transport.py] [_log()] userauth is OK
2025-11-26T04:04:55.185 [DEBUG] [Thread-11355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:04:55.185 [DEBUG] [Thread-11355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:04:55.186 [DEBUG] [Thread-11355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:04:55.186 [DEBUG] [Thread-11355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:04:55.209 [INFO] [Thread-11355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:04:55.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:04:55.876 [DEBUG] [Thread-11355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:04:55.876 [DEBUG] [Thread-11355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:04:55.876 [DEBUG] [Thread-11355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:04:55.916 [DEBUG] [Thread-11355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:04:55.917 [DEBUG] [Thread-11355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:04:55.919 [DEBUG] [Thread-11355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:04:55.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:04:55.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:04:55.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:04:55.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:04:55.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:04:55.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:04:55.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:04:55.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:04:55.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:04:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.086553 -999.00  +19.80  11.46     18   -5.00 1 1 1 1 1     0    0 24.07 -36.00 ZNESW 12.3 11.5 66.6 14.3 19.4 -26.2 19.3 -25.4 19.0 -24.2 19.3 -25.2
2025-11-26T04:04:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:04:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:04:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.086553
2025-11-26T04:04:55.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:04:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:04:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:04:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:04:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:04:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:04:45', tmtdew=28.64, humidity=13.34, cloud=0.0, wind=12.19, temperature=19.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:04:46', seeing=1.41, atlas_timestamp='2025-11-26T02:04:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:04:55.944 [DEBUG] [Thread-11355] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:04:56.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:04:56.040 [DEBUG] [Thread-11358] [transport.py] [_log()] starting thread (client mode): 0x70df9660
2025-11-26T04:04:56.040 [DEBUG] [Thread-11358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:04:56.055 [DEBUG] [Thread-11358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:04:56.055 [INFO] [Thread-11358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:04:56.062 [DEBUG] [Thread-11358] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:04:56.062 [DEBUG] [Thread-11358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] client lang: <none>
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] server lang: <none>
2025-11-26T04:04:56.063 [DEBUG] [Thread-11358] [transport.py] [_log()] kex follows: False
2025-11-26T04:04:56.064 [DEBUG] [Thread-11358] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:04:56.064 [DEBUG] [Thread-11358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:04:56.064 [DEBUG] [Thread-11358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:04:56.064 [DEBUG] [Thread-11358] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:04:56.064 [DEBUG] [Thread-11358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:04:56.064 [DEBUG] [Thread-11358] [transport.py] [_log()] Compression: none
2025-11-26T04:04:56.064 [DEBUG] [Thread-11358] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:04:56.123 [DEBUG] [Thread-11358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:04:56.123 [DEBUG] [Thread-11358] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:04:56.124 [DEBUG] [Thread-11358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:04:56.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:04:56.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:04:56.179 [DEBUG] [Thread-11358] [transport.py] [_log()] userauth is OK
2025-11-26T04:04:56.180 [DEBUG] [Thread-11358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:04:56.180 [DEBUG] [Thread-11358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:04:56.180 [DEBUG] [Thread-11358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:04:56.180 [DEBUG] [Thread-11358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:04:56.199 [INFO] [Thread-11358] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:04:56.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:04:56.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:04:57.025 [DEBUG] [Thread-11358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:04:57.025 [DEBUG] [Thread-11358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:04:57.072 [DEBUG] [Thread-11358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:04:57.073 [DEBUG] [Thread-11358] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:04:57.081 [DEBUG] [Thread-11358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:04:57.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:04:57.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:04:57.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:04:57.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:04:57.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:04:57.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:04:57.115 [DEBUG] [Thread-11358] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:04:59.316 [DEBUG] [Thread-11360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:03.028 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:03.029 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:14.355 [DEBUG] [Thread-11361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:27.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:05:27.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:05:27.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:05:27.741 [DEBUG] [Thread-11362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:27.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 5, 17), 28.64, 13.34, 0.0, 12.28, 19.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:05:27.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:05:17
2025-11-26T04:05:27.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:05:28.079 [DEBUG] [Thread-11363] [transport.py] [_log()] starting thread (client mode): 0x70df90c0
2025-11-26T04:05:28.079 [DEBUG] [Thread-11363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:05:28.095 [DEBUG] [Thread-11363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:05:28.096 [INFO] [Thread-11363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] client lang: <none>
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] server lang: <none>
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] kex follows: False
2025-11-26T04:05:28.097 [DEBUG] [Thread-11363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:05:28.098 [DEBUG] [Thread-11363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:05:28.098 [DEBUG] [Thread-11363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:05:28.098 [DEBUG] [Thread-11363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:05:28.098 [DEBUG] [Thread-11363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:05:28.098 [DEBUG] [Thread-11363] [transport.py] [_log()] Compression: none
2025-11-26T04:05:28.098 [DEBUG] [Thread-11363] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:05:28.110 [DEBUG] [Thread-11363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:05:28.111 [DEBUG] [Thread-11363] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:05:28.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:05:28.113 [DEBUG] [Thread-11363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:05:28.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:05:28.115 [DEBUG] [Thread-11363] [transport.py] [_log()] userauth is OK
2025-11-26T04:05:28.115 [DEBUG] [Thread-11363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:05:28.115 [DEBUG] [Thread-11363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:05:28.116 [DEBUG] [Thread-11363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:05:28.116 [DEBUG] [Thread-11363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:05:28.135 [INFO] [Thread-11363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:05:28.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:05:28.736 [DEBUG] [Thread-11363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:05:28.737 [DEBUG] [Thread-11363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:05:28.737 [DEBUG] [Thread-11363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:05:28.778 [DEBUG] [Thread-11363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:05:28.778 [DEBUG] [Thread-11363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:05:28.781 [DEBUG] [Thread-11363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:05:28.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:05:28.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:05:28.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:05:28.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:05:28.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:05:28.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:05:28.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:05:28.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:05:28.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:05:28.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.086900 -999.00  +19.80   4.67     18   -5.00 1 1 1 1 1     0    0 23.86 -36.20 ZNESW 4.6 4.7 64.5 13.3 19.4 -25.7 19.3 -25.5 19.1 -24.3 19.3 -25.3
2025-11-26T04:05:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:05:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:05:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.086900
2025-11-26T04:05:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:05:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:05:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:05:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:05:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:05:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:05:17', tmtdew=28.64, humidity=13.34, cloud=0.0, wind=12.28, temperature=19.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:05:18', seeing=1.37, atlas_timestamp='2025-11-26T02:05:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:05:28.805 [DEBUG] [Thread-11363] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:05:28.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:05:28.901 [DEBUG] [Thread-11366] [transport.py] [_log()] starting thread (client mode): 0x70d7c310
2025-11-26T04:05:28.901 [DEBUG] [Thread-11366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:05:28.917 [DEBUG] [Thread-11366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:05:28.917 [INFO] [Thread-11366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:05:28.925 [DEBUG] [Thread-11366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:05:28.926 [DEBUG] [Thread-11366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:05:28.926 [DEBUG] [Thread-11366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:05:28.926 [DEBUG] [Thread-11366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:05:28.926 [DEBUG] [Thread-11366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:05:28.926 [DEBUG] [Thread-11366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:05:28.926 [DEBUG] [Thread-11366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:05:28.926 [DEBUG] [Thread-11366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:05:28.926 [DEBUG] [Thread-11366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] client lang: <none>
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] server lang: <none>
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] kex follows: False
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] Compression: none
2025-11-26T04:05:28.927 [DEBUG] [Thread-11366] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:05:28.983 [DEBUG] [Thread-11366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:05:28.983 [DEBUG] [Thread-11366] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:05:28.984 [DEBUG] [Thread-11366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:05:28.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:05:28.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:05:29.039 [DEBUG] [Thread-11366] [transport.py] [_log()] userauth is OK
2025-11-26T04:05:29.040 [DEBUG] [Thread-11366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:05:29.040 [DEBUG] [Thread-11366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:05:29.040 [DEBUG] [Thread-11366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:05:29.040 [DEBUG] [Thread-11366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:05:29.060 [INFO] [Thread-11366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:05:29.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:05:29.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:05:29.390 [DEBUG] [Thread-11368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:29.894 [DEBUG] [Thread-11366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:05:29.894 [DEBUG] [Thread-11366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:05:29.942 [DEBUG] [Thread-11366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:05:29.942 [DEBUG] [Thread-11366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:05:29.951 [DEBUG] [Thread-11366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:05:29.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:05:29.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:05: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
2025-11-26T04:05:29.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:05:29.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:05:29.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:05:29.989 [DEBUG] [Thread-11366] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:05:40.399 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:43.557 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:44.432 [DEBUG] [Thread-11369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:48.684 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:54.077 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:05:59.473 [DEBUG] [Thread-11370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:00.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:06:00.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:06:00.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:06:00.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 5, 49), 28.51, 13.37, 0.0, 12.03, 19.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:06:00.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:05:49
2025-11-26T04:06:00.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:06:01.024 [DEBUG] [Thread-11371] [transport.py] [_log()] starting thread (client mode): 0x70d77400
2025-11-26T04:06:01.024 [DEBUG] [Thread-11371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:06:01.044 [DEBUG] [Thread-11371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:06:01.045 [INFO] [Thread-11371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] client lang: <none>
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] server lang: <none>
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] kex follows: False
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] Compression: none
2025-11-26T04:06:01.048 [DEBUG] [Thread-11371] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:06:01.063 [DEBUG] [Thread-11371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:06:01.064 [DEBUG] [Thread-11371] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:06:01.064 [DEBUG] [Thread-11371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:06:01.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:06:01.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:06:01.066 [DEBUG] [Thread-11371] [transport.py] [_log()] userauth is OK
2025-11-26T04:06:01.066 [DEBUG] [Thread-11371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:06:01.066 [DEBUG] [Thread-11371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:06:01.066 [DEBUG] [Thread-11371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:06:01.066 [DEBUG] [Thread-11371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:06:01.084 [INFO] [Thread-11371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:06:01.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:06:01.698 [DEBUG] [Thread-11371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:06:01.699 [DEBUG] [Thread-11371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:06:01.699 [DEBUG] [Thread-11371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:06:01.740 [DEBUG] [Thread-11371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:06:01.740 [DEBUG] [Thread-11371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:06:01.745 [DEBUG] [Thread-11371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:06:01.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:06:01.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:06:01.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:06:01.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:06:01.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:06:01.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:06:01.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:06:01.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:06:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:06:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.087248 -999.00  +19.80   4.94     18   -5.00 1 1 1 1 1     0    0 23.95 -38.40 ZNESW 5.5 4.9 85.0 13.5 -999.0 -999.0 19.3 -25.5 19.0 -24.3 19.3 -25.2
2025-11-26T04:06:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:06:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:06:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.087248
2025-11-26T04:06:01.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:06:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:06:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:06:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:06:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:06:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:05:49', tmtdew=28.51, humidity=13.37, cloud=0.0, wind=12.03, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:05:50', seeing=1.43, atlas_timestamp='2025-11-26T02:05:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:06:01.772 [DEBUG] [Thread-11371] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:06:01.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:06:01.868 [DEBUG] [Thread-11374] [transport.py] [_log()] starting thread (client mode): 0x70d75030
2025-11-26T04:06:01.868 [DEBUG] [Thread-11374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:06:01.884 [DEBUG] [Thread-11374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:06:01.884 [INFO] [Thread-11374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:06:01.892 [DEBUG] [Thread-11374] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:06:01.892 [DEBUG] [Thread-11374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:06:01.892 [DEBUG] [Thread-11374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:06:01.893 [DEBUG] [Thread-11374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:06:01.893 [DEBUG] [Thread-11374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:06:01.893 [DEBUG] [Thread-11374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:06:01.893 [DEBUG] [Thread-11374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:06:01.893 [DEBUG] [Thread-11374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:06:01.893 [DEBUG] [Thread-11374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:06:01.893 [DEBUG] [Thread-11374] [transport.py] [_log()] client lang: <none>
2025-11-26T04:06:01.893 [DEBUG] [Thread-11374] [transport.py] [_log()] server lang: <none>
2025-11-26T04:06:01.893 [DEBUG] [Thread-11374] [transport.py] [_log()] kex follows: False
2025-11-26T04:06:01.894 [DEBUG] [Thread-11374] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:06:01.894 [DEBUG] [Thread-11374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:06:01.894 [DEBUG] [Thread-11374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:06:01.894 [DEBUG] [Thread-11374] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:06:01.894 [DEBUG] [Thread-11374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:06:01.894 [DEBUG] [Thread-11374] [transport.py] [_log()] Compression: none
2025-11-26T04:06:01.894 [DEBUG] [Thread-11374] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:06:01.950 [DEBUG] [Thread-11374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:06:01.951 [DEBUG] [Thread-11374] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:06:01.952 [DEBUG] [Thread-11374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:06:01.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:06:01.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:06:02.006 [DEBUG] [Thread-11374] [transport.py] [_log()] userauth is OK
2025-11-26T04:06:02.007 [DEBUG] [Thread-11374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:06:02.007 [DEBUG] [Thread-11374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:06:02.007 [DEBUG] [Thread-11374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:06:02.007 [DEBUG] [Thread-11374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:06:02.030 [INFO] [Thread-11374] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:06:02.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:06:02.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:06:02.876 [DEBUG] [Thread-11374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:06:02.876 [DEBUG] [Thread-11374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:06:02.924 [DEBUG] [Thread-11374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:06:02.924 [DEBUG] [Thread-11374] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:06:02.934 [DEBUG] [Thread-11374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:06:02.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:06:02.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:06:02.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:06:02.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:06:02.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:06:02.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:06:02.971 [DEBUG] [Thread-11374] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:06:03.234 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:03.236 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:13.549 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:14.510 [DEBUG] [Thread-11376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:17.949 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:27.825 [DEBUG] [Thread-11377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:29.555 [DEBUG] [Thread-11378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:32.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:06:32.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:06:32.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:06:33.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 6, 21), 28.54, 13.36, 0.0, 11.06, 19.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:06:33.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:06:21
2025-11-26T04:06:33.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:06:33.933 [DEBUG] [Thread-11379] [transport.py] [_log()] starting thread (client mode): 0x70de5c60
2025-11-26T04:06:33.933 [DEBUG] [Thread-11379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:06:33.955 [DEBUG] [Thread-11379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:06:33.956 [INFO] [Thread-11379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:06:33.959 [DEBUG] [Thread-11379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:06:33.959 [DEBUG] [Thread-11379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:06:33.959 [DEBUG] [Thread-11379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:06:33.959 [DEBUG] [Thread-11379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:06:33.959 [DEBUG] [Thread-11379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:06:33.959 [DEBUG] [Thread-11379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] client lang: <none>
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] server lang: <none>
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] kex follows: False
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] Compression: none
2025-11-26T04:06:33.960 [DEBUG] [Thread-11379] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:06:33.978 [DEBUG] [Thread-11379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:06:33.978 [DEBUG] [Thread-11379] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:06:33.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:06:33.979 [DEBUG] [Thread-11379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:06:33.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:06:33.982 [DEBUG] [Thread-11379] [transport.py] [_log()] userauth is OK
2025-11-26T04:06:33.982 [DEBUG] [Thread-11379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:06:33.982 [DEBUG] [Thread-11379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:06:33.982 [DEBUG] [Thread-11379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:06:33.983 [DEBUG] [Thread-11379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:06:34.005 [INFO] [Thread-11379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:06:34.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:06:34.625 [DEBUG] [Thread-11379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:06:34.625 [DEBUG] [Thread-11379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:06:34.625 [DEBUG] [Thread-11379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:06:34.666 [DEBUG] [Thread-11379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:06:34.666 [DEBUG] [Thread-11379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:06:34.669 [DEBUG] [Thread-11379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:06:34.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:06:34.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:06:34.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:06:34.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:06:34.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:06:34.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:06:34.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:06:34.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:06:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:06:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.087248 -999.00  +19.80   4.94     18   -5.00 1 1 1 1 1     0    0 23.95 -38.40 ZNESW 5.5 4.9 85.0 13.5 -999.0 -999.0 19.3 -25.5 19.0 -24.3 19.3 -25.2
2025-11-26T04:06:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:06:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:06:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.087248
2025-11-26T04:06:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:06:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:06:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:06:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:06:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:06:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:06:21', tmtdew=28.54, humidity=13.36, cloud=0.0, wind=11.06, temperature=19.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:06:22', seeing=1.26, atlas_timestamp='2025-11-26T02:05:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:06:34.694 [DEBUG] [Thread-11379] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:06:34.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:06:34.788 [DEBUG] [Thread-11382] [transport.py] [_log()] starting thread (client mode): 0x70d2b730
2025-11-26T04:06:34.788 [DEBUG] [Thread-11382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:06:34.803 [DEBUG] [Thread-11382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:06:34.803 [INFO] [Thread-11382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:06:34.810 [DEBUG] [Thread-11382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:06:34.810 [DEBUG] [Thread-11382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:06:34.810 [DEBUG] [Thread-11382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:06:34.810 [DEBUG] [Thread-11382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:06:34.810 [DEBUG] [Thread-11382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:06:34.810 [DEBUG] [Thread-11382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] client lang: <none>
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] server lang: <none>
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] kex follows: False
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] Compression: none
2025-11-26T04:06:34.811 [DEBUG] [Thread-11382] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:06:34.869 [DEBUG] [Thread-11382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:06:34.870 [DEBUG] [Thread-11382] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:06:34.870 [DEBUG] [Thread-11382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:06:34.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:06:34.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:06:34.926 [DEBUG] [Thread-11382] [transport.py] [_log()] userauth is OK
2025-11-26T04:06:34.926 [DEBUG] [Thread-11382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:06:34.926 [DEBUG] [Thread-11382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:06:34.927 [DEBUG] [Thread-11382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:06:34.927 [DEBUG] [Thread-11382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:06:34.945 [INFO] [Thread-11382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:06:34.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:06:34.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:06:35.791 [DEBUG] [Thread-11382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:06:35.792 [DEBUG] [Thread-11382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:06:35.840 [DEBUG] [Thread-11382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:06:35.840 [DEBUG] [Thread-11382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:06:35.853 [DEBUG] [Thread-11382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:06:35.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:06:35.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:06:35.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:06:35.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:06:35.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:06:35.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:06:35.891 [DEBUG] [Thread-11382] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:06:37.351 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:41.767 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:44.594 [DEBUG] [Thread-11384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:47.888 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:52.275 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:06:59.645 [DEBUG] [Thread-11385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:07:03.438 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:07:03.438 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:07:05.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:07:05.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:07:05.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:07:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 6, 54), 28.61, 13.32, 0.0, 9.81, 19.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:07:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:06:54
2025-11-26T04:07:06.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:07:06.860 [DEBUG] [Thread-11386] [transport.py] [_log()] starting thread (client mode): 0x70d7d0c0
2025-11-26T04:07:06.860 [DEBUG] [Thread-11386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:07:06.879 [DEBUG] [Thread-11386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:07:06.879 [INFO] [Thread-11386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:07:06.882 [DEBUG] [Thread-11386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] client lang: <none>
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] server lang: <none>
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] kex follows: False
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] Compression: none
2025-11-26T04:07:06.883 [DEBUG] [Thread-11386] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:07:06.901 [DEBUG] [Thread-11386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:07:06.902 [DEBUG] [Thread-11386] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:07:06.902 [DEBUG] [Thread-11386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:07:06.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:07:06.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:07:06.904 [DEBUG] [Thread-11386] [transport.py] [_log()] userauth is OK
2025-11-26T04:07:06.904 [DEBUG] [Thread-11386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:07:06.904 [DEBUG] [Thread-11386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:07:06.904 [DEBUG] [Thread-11386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:07:06.904 [DEBUG] [Thread-11386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:07:06.927 [INFO] [Thread-11386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:07:06.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:07:07.654 [DEBUG] [Thread-11386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:07:07.654 [DEBUG] [Thread-11386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:07:07.654 [DEBUG] [Thread-11386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:07:07.696 [DEBUG] [Thread-11386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:07:07.696 [DEBUG] [Thread-11386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:07:07.698 [DEBUG] [Thread-11386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:07:07.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:07:07.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:07:07.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:07:07.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:07:07.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:07:07.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:07:07.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:07:07.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:07:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:07:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.087595 -999.00  +19.80   8.81     18   -5.00 1 1 1 1 1     0    0 24.13 -37.01 ZNESW 6.9 8.8 67.2 13.5 19.4 -26.1 19.3 -25.5 19.1 -24.3 19.3 -25.3
2025-11-26T04:07:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:07:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:07:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.087595
2025-11-26T04:07:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:07:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:07:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:07:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:07:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:07:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:06:54', tmtdew=28.61, humidity=13.32, cloud=0.0, wind=9.81, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:06:54', seeing=1.26, atlas_timestamp='2025-11-26T02:06:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:07:07.723 [DEBUG] [Thread-11386] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:07:07.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:07:07.815 [DEBUG] [Thread-11389] [transport.py] [_log()] starting thread (client mode): 0x70dfa650
2025-11-26T04:07:07.816 [DEBUG] [Thread-11389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:07:07.833 [DEBUG] [Thread-11389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:07:07.833 [INFO] [Thread-11389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:07:07.840 [DEBUG] [Thread-11389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:07:07.840 [DEBUG] [Thread-11389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:07:07.840 [DEBUG] [Thread-11389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:07:07.840 [DEBUG] [Thread-11389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:07:07.840 [DEBUG] [Thread-11389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:07:07.840 [DEBUG] [Thread-11389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] client lang: <none>
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] server lang: <none>
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] kex follows: False
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] Compression: none
2025-11-26T04:07:07.841 [DEBUG] [Thread-11389] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:07:07.903 [DEBUG] [Thread-11389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:07:07.903 [DEBUG] [Thread-11389] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:07:07.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:07:07.904 [DEBUG] [Thread-11389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:07:07.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:07:07.960 [DEBUG] [Thread-11389] [transport.py] [_log()] userauth is OK
2025-11-26T04:07:07.960 [DEBUG] [Thread-11389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:07:07.960 [DEBUG] [Thread-11389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:07:07.960 [DEBUG] [Thread-11389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:07:07.961 [DEBUG] [Thread-11389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:07:07.983 [INFO] [Thread-11389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:07:07.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:07:07.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:07:08.803 [DEBUG] [Thread-11389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:07:08.803 [DEBUG] [Thread-11389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:07:08.850 [DEBUG] [Thread-11389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:07:08.850 [DEBUG] [Thread-11389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:07:08.859 [DEBUG] [Thread-11389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:07:08.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:07:08.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:07:08.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:07:08.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:07:08.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:07:08.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:07:08.893 [DEBUG] [Thread-11389] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:07:14.681 [DEBUG] [Thread-11391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:07:27.895 [DEBUG] [Thread-11392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:07:29.735 [DEBUG] [Thread-11393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:07:38.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:07:38.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:07:38.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:07:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 7, 26), 28.59, 13.36, 0.0, 9.37, 19.1, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:07:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:07:26
2025-11-26T04:07:39.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:07:39.830 [DEBUG] [Thread-11394] [transport.py] [_log()] starting thread (client mode): 0x70d77550
2025-11-26T04:07:39.830 [DEBUG] [Thread-11394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:07:39.849 [DEBUG] [Thread-11394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:07:39.849 [INFO] [Thread-11394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:07:39.853 [DEBUG] [Thread-11394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:07:39.853 [DEBUG] [Thread-11394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:07:39.853 [DEBUG] [Thread-11394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:07:39.853 [DEBUG] [Thread-11394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:07:39.853 [DEBUG] [Thread-11394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:07:39.853 [DEBUG] [Thread-11394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:07:39.853 [DEBUG] [Thread-11394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:07:39.853 [DEBUG] [Thread-11394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:07:39.853 [DEBUG] [Thread-11394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] client lang: <none>
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] server lang: <none>
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] kex follows: False
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] Compression: none
2025-11-26T04:07:39.854 [DEBUG] [Thread-11394] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:07:39.874 [DEBUG] [Thread-11394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:07:39.875 [DEBUG] [Thread-11394] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:07:39.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:07:39.876 [DEBUG] [Thread-11394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:07:39.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:07:39.878 [DEBUG] [Thread-11394] [transport.py] [_log()] userauth is OK
2025-11-26T04:07:39.879 [DEBUG] [Thread-11394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:07:39.879 [DEBUG] [Thread-11394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:07:39.879 [DEBUG] [Thread-11394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:07:39.879 [DEBUG] [Thread-11394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:07:39.905 [INFO] [Thread-11394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:07:39.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:07:40.543 [DEBUG] [Thread-11394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:07:40.544 [DEBUG] [Thread-11394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:07:40.544 [DEBUG] [Thread-11394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:07:40.584 [DEBUG] [Thread-11394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:07:40.585 [DEBUG] [Thread-11394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:07:40.588 [DEBUG] [Thread-11394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:07:40.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:07:40.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:07:40.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:07:40.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:07:40.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:07:40.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:07:40.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:07:40.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:07:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:07:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.088290 -999.00  +19.70   8.68     18   -5.00 1 1 1 1 1     0    0 24.02 -36.31 ZNESW 11.3 8.7 78.4 12.2 19.3 -26.1 19.3 -25.5 19.0 -24.3 19.3 -25.4
2025-11-26T04:07:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:07:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:07:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.088290
2025-11-26T04:07:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:07:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:07:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:07:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:07:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:07:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:07:26', tmtdew=28.59, humidity=13.36, cloud=0.0, wind=9.37, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:07:26', seeing=1.25, atlas_timestamp='2025-11-26T02:07:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:07:40.614 [DEBUG] [Thread-11394] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:07:40.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:07:40.708 [DEBUG] [Thread-11397] [transport.py] [_log()] starting thread (client mode): 0x70d740d0
2025-11-26T04:07:40.708 [DEBUG] [Thread-11397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:07:40.723 [DEBUG] [Thread-11397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:07:40.723 [INFO] [Thread-11397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] client lang: <none>
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] server lang: <none>
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] kex follows: False
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:07:40.731 [DEBUG] [Thread-11397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:07:40.732 [DEBUG] [Thread-11397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:07:40.732 [DEBUG] [Thread-11397] [transport.py] [_log()] Compression: none
2025-11-26T04:07:40.732 [DEBUG] [Thread-11397] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:07:40.788 [DEBUG] [Thread-11397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:07:40.788 [DEBUG] [Thread-11397] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:07:40.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:07:40.790 [DEBUG] [Thread-11397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:07:40.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:07:40.844 [DEBUG] [Thread-11397] [transport.py] [_log()] userauth is OK
2025-11-26T04:07:40.845 [DEBUG] [Thread-11397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:07:40.845 [DEBUG] [Thread-11397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:07:40.845 [DEBUG] [Thread-11397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:07:40.845 [DEBUG] [Thread-11397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:07:40.864 [INFO] [Thread-11397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:07:40.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:07:40.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:07:41.661 [DEBUG] [Thread-11397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:07:41.662 [DEBUG] [Thread-11397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:07:41.710 [DEBUG] [Thread-11397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:07:41.710 [DEBUG] [Thread-11397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:07:41.719 [DEBUG] [Thread-11397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:07:41.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:07:41.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:07:41.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:07:41.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:07:41.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:07:41.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:07:41.756 [DEBUG] [Thread-11397] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:07:44.767 [DEBUG] [Thread-11399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:07:55.913 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:07:58.990 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:07:59.820 [DEBUG] [Thread-11400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:08:03.639 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:08:03.641 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:08:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:08:11.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:08:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:08:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 7, 58), 28.51, 13.32, 0.0, 11.17, 19.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:08:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:07:58
2025-11-26T04:08:12.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:08:12.788 [DEBUG] [Thread-11401] [transport.py] [_log()] starting thread (client mode): 0x70d74460
2025-11-26T04:08:12.788 [DEBUG] [Thread-11401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:08:12.809 [DEBUG] [Thread-11401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:08:12.809 [INFO] [Thread-11401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] client lang: <none>
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] server lang: <none>
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] kex follows: False
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] Compression: none
2025-11-26T04:08:12.811 [DEBUG] [Thread-11401] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:08:12.818 [DEBUG] [Thread-11401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:08:12.819 [DEBUG] [Thread-11401] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:08:12.819 [DEBUG] [Thread-11401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:08:12.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:08:12.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:08:12.820 [DEBUG] [Thread-11401] [transport.py] [_log()] userauth is OK
2025-11-26T04:08:12.820 [DEBUG] [Thread-11401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:08:12.820 [DEBUG] [Thread-11401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:08:12.820 [DEBUG] [Thread-11401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:08:12.820 [DEBUG] [Thread-11401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:08:12.828 [INFO] [Thread-11401] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:08:12.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:08:13.611 [DEBUG] [Thread-11401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:08:13.611 [DEBUG] [Thread-11401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:08:13.612 [DEBUG] [Thread-11401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:08:13.653 [DEBUG] [Thread-11401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:08:13.653 [DEBUG] [Thread-11401] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:08:13.657 [DEBUG] [Thread-11401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:08:13.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:08:13.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:08:13.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:08:13.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:08:13.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:08:13.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:08:13.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:08:13.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:08:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:08:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.088637 -999.00  +19.70   9.85     18   -5.10 1 1 1 1 1     0    0 24.43 -35.55 ZNESW 9.0 9.8 66.3 12.4 19.4 -26.2 19.3 -25.5 19.0 -24.1 19.2 -25.3
2025-11-26T04:08:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:08:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:08:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.088637
2025-11-26T04:08:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:08:13.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:08:13.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:08:13.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:08:13.683 [DEBUG] [Thread-11401] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:08:13.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:08:13.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:07:58', tmtdew=28.51, humidity=13.32, cloud=0.0, wind=11.17, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:07:58', seeing=1.52, atlas_timestamp='2025-11-26T02:07:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.08125000000000071, -0.06374999999999886, -0.0417500000000004, -0.019000000000001904, -0.02149999999999963, -0.010749999999999815, -0.019999999999999574, -0.05924999999999869, -0.044500000000001094, -0.03399999999999892, -0.047750000000000625, -0.018000000000000682, 0.04100000000000037, -0.0017500000000012506, -0.03200000000000003, -0.01600000000000179, 0.01425000000000054, 0.006000000000000227, -0.05000000000000071, -0.0007500000000018048, 0.011999999999998678, 0.016749999999998266, -0.012749999999998707, -0.03625000000000078, -0.006000000000000227, 0.0259999999999998, 0.00575000000000081, 0.03149999999999942, 0.15200000000000102, 0.04200000000000159, 0.033500000000000085, 0.027000000000001023, -0.030250000000000554], zp_timestamp='2025-11-26T02:01:00')
2025-11-26T04:08:13.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:08:13.777 [DEBUG] [Thread-11404] [transport.py] [_log()] starting thread (client mode): 0x70d76740
2025-11-26T04:08:13.777 [DEBUG] [Thread-11404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:08:13.792 [DEBUG] [Thread-11404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:08:13.792 [INFO] [Thread-11404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:08:13.800 [DEBUG] [Thread-11404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:08:13.800 [DEBUG] [Thread-11404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:08:13.801 [DEBUG] [Thread-11404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:08:13.801 [DEBUG] [Thread-11404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:08:13.801 [DEBUG] [Thread-11404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:08:13.801 [DEBUG] [Thread-11404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:08:13.801 [DEBUG] [Thread-11404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:08:13.801 [DEBUG] [Thread-11404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:08:13.801 [DEBUG] [Thread-11404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:08:13.801 [DEBUG] [Thread-11404] [transport.py] [_log()] client lang: <none>
2025-11-26T04:08:13.801 [DEBUG] [Thread-11404] [transport.py] [_log()] server lang: <none>
2025-11-26T04:08:13.802 [DEBUG] [Thread-11404] [transport.py] [_log()] kex follows: False
2025-11-26T04:08:13.802 [DEBUG] [Thread-11404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:08:13.802 [DEBUG] [Thread-11404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:08:13.802 [DEBUG] [Thread-11404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:08:13.802 [DEBUG] [Thread-11404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:08:13.802 [DEBUG] [Thread-11404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:08:13.802 [DEBUG] [Thread-11404] [transport.py] [_log()] Compression: none
2025-11-26T04:08:13.802 [DEBUG] [Thread-11404] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:08:13.859 [DEBUG] [Thread-11404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:08:13.860 [DEBUG] [Thread-11404] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:08:13.861 [DEBUG] [Thread-11404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:08:13.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:08:13.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:08:13.916 [DEBUG] [Thread-11404] [transport.py] [_log()] userauth is OK
2025-11-26T04:08:13.916 [DEBUG] [Thread-11404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:08:13.916 [DEBUG] [Thread-11404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:08:13.916 [DEBUG] [Thread-11404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:08:13.916 [DEBUG] [Thread-11404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:08:13.935 [INFO] [Thread-11404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:08:13.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:08:13.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:08:14.754 [DEBUG] [Thread-11404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:08:14.755 [DEBUG] [Thread-11404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:08:14.804 [DEBUG] [Thread-11404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:08:14.804 [DEBUG] [Thread-11404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:08:14.817 [DEBUG] [Thread-11404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:08:14.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:08:14.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:08: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') -> 00000000
2025-11-26T04:08:14.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:08:14.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:08:14.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:08:14.850 [DEBUG] [Thread-11406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:08:14.854 [DEBUG] [Thread-11404] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:08:27.955 [DEBUG] [Thread-11407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:08:29.906 [DEBUG] [Thread-11408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:08:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:08:44.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:08:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:08:44.941 [DEBUG] [Thread-11409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:08:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 8, 30), 28.49, 13.36, 0.0, 11.24, 19.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:08:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:08:30
2025-11-26T04:08:45.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:08:45.856 [DEBUG] [Thread-11410] [transport.py] [_log()] starting thread (client mode): 0x70d7c730
2025-11-26T04:08:45.856 [DEBUG] [Thread-11410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:08:45.875 [DEBUG] [Thread-11410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:08:45.876 [INFO] [Thread-11410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:08:45.877 [DEBUG] [Thread-11410] [transport.py] [_log()] client lang: <none>
2025-11-26T04:08:45.878 [DEBUG] [Thread-11410] [transport.py] [_log()] server lang: <none>
2025-11-26T04:08:45.878 [DEBUG] [Thread-11410] [transport.py] [_log()] kex follows: False
2025-11-26T04:08:45.878 [DEBUG] [Thread-11410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:08:45.878 [DEBUG] [Thread-11410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:08:45.878 [DEBUG] [Thread-11410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:08:45.878 [DEBUG] [Thread-11410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:08:45.878 [DEBUG] [Thread-11410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:08:45.878 [DEBUG] [Thread-11410] [transport.py] [_log()] Compression: none
2025-11-26T04:08:45.878 [DEBUG] [Thread-11410] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:08:45.885 [DEBUG] [Thread-11410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:08:45.885 [DEBUG] [Thread-11410] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:08:45.886 [DEBUG] [Thread-11410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:08:45.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:08:45.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:08:45.886 [DEBUG] [Thread-11410] [transport.py] [_log()] userauth is OK
2025-11-26T04:08:45.886 [DEBUG] [Thread-11410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:08:45.887 [DEBUG] [Thread-11410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:08:45.887 [DEBUG] [Thread-11410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:08:45.887 [DEBUG] [Thread-11410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:08:45.897 [INFO] [Thread-11410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:08:45.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:08:46.526 [DEBUG] [Thread-11410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:08:46.526 [DEBUG] [Thread-11410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:08:46.526 [DEBUG] [Thread-11410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:08:46.567 [DEBUG] [Thread-11410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:08:46.567 [DEBUG] [Thread-11410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:08:46.569 [DEBUG] [Thread-11410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:08:46.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:08:46.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:08:46.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:08:46.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:08:46.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:08:46.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:08:46.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.088984 -999.00  +19.70  12.06     18   -4.90 1 1 1 1 1     0    0 23.61 -32.68 ZNESW 11.2 12.1 77.4 13.8 19.4 -26.1 19.2 -25.4 19.0 -24.3 19.2 -25.2
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.088984
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:08:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:08:30', tmtdew=28.49, humidity=13.36, cloud=0.0, wind=11.24, temperature=19.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:08:30', seeing=0.93, atlas_timestamp='2025-11-26T02:08:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.039750000000001506, 0.047250000000000014, 0.043499999999998096, 0.07349999999999923, 0.05975000000000108, 0.08900000000000041, 0.02725000000000044, 0.0625, 0.02800000000000047, 0.006249999999999645, 0.03200000000000003, 0.1609999999999996, 0.08825000000000038, 0.05699999999999861, 0.04899999999999949, 0.0912500000000005, 0.11000000000000121, 0.03500000000000014, 0.07374999999999865, 0.08699999999999797, 0.09174999999999933, 0.043250000000000455, 0.027749999999999275, 0.07299999999999862, 0.1070000000000011, 0.05075000000000074, 0.1014999999999997, 0.23800000000000043, 0.17900000000000027, 0.12200000000000166, 0.07800000000000118, 0.08374999999999844], zp_timestamp='2025-11-26T02:06:00')
2025-11-26T04:08:46.590 [DEBUG] [Thread-11410] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:08:46.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:08:46.675 [DEBUG] [Thread-11413] [transport.py] [_log()] starting thread (client mode): 0x70d77af0
2025-11-26T04:08:46.675 [DEBUG] [Thread-11413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:08:46.690 [DEBUG] [Thread-11413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:08:46.690 [INFO] [Thread-11413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:08:46.697 [DEBUG] [Thread-11413] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] client lang: <none>
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] server lang: <none>
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] kex follows: False
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] Compression: none
2025-11-26T04:08:46.698 [DEBUG] [Thread-11413] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:08:46.753 [DEBUG] [Thread-11413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:08:46.754 [DEBUG] [Thread-11413] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:08:46.754 [DEBUG] [Thread-11413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:08:46.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:08:46.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:08:46.810 [DEBUG] [Thread-11413] [transport.py] [_log()] userauth is OK
2025-11-26T04:08:46.810 [DEBUG] [Thread-11413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:08:46.810 [DEBUG] [Thread-11413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:08:46.810 [DEBUG] [Thread-11413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:08:46.810 [DEBUG] [Thread-11413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:08:46.825 [INFO] [Thread-11413] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:08:46.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:08:46.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:08:47.663 [DEBUG] [Thread-11413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:08:47.663 [DEBUG] [Thread-11413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:08:47.711 [DEBUG] [Thread-11413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:08:47.711 [DEBUG] [Thread-11413] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:08:47.720 [DEBUG] [Thread-11413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:08:47.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:08: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')
2025-11-26T04:08:47.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:08:47.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:08:47.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:08:47.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:08:47.755 [DEBUG] [Thread-11413] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:08:59.977 [DEBUG] [Thread-11415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:09:03.842 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:09:03.843 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:09:15.035 [DEBUG] [Thread-11416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:09:17.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:09:17.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:09:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:09:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 9, 2), 28.49, 13.36, 0.0, 10.82, 19.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:09:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:09:02
2025-11-26T04:09:18.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:09:18.730 [DEBUG] [Thread-11417] [transport.py] [_log()] starting thread (client mode): 0x70d2a2f0
2025-11-26T04:09:18.730 [DEBUG] [Thread-11417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:09:18.751 [DEBUG] [Thread-11417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:09:18.752 [INFO] [Thread-11417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:09:18.755 [DEBUG] [Thread-11417] [transport.py] [_log()] client lang: <none>
2025-11-26T04:09:18.756 [DEBUG] [Thread-11417] [transport.py] [_log()] server lang: <none>
2025-11-26T04:09:18.756 [DEBUG] [Thread-11417] [transport.py] [_log()] kex follows: False
2025-11-26T04:09:18.756 [DEBUG] [Thread-11417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:09:18.756 [DEBUG] [Thread-11417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:09:18.756 [DEBUG] [Thread-11417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:09:18.756 [DEBUG] [Thread-11417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:09:18.756 [DEBUG] [Thread-11417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:09:18.756 [DEBUG] [Thread-11417] [transport.py] [_log()] Compression: none
2025-11-26T04:09:18.756 [DEBUG] [Thread-11417] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:09:18.770 [DEBUG] [Thread-11417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:09:18.770 [DEBUG] [Thread-11417] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:09:18.771 [DEBUG] [Thread-11417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:09:18.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:09:18.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:09:18.773 [DEBUG] [Thread-11417] [transport.py] [_log()] userauth is OK
2025-11-26T04:09:18.773 [DEBUG] [Thread-11417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:09:18.773 [DEBUG] [Thread-11417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:09:18.773 [DEBUG] [Thread-11417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:09:18.773 [DEBUG] [Thread-11417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:09:18.791 [INFO] [Thread-11417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:09:18.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:09:19.569 [DEBUG] [Thread-11417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:09:19.569 [DEBUG] [Thread-11417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:09:19.570 [DEBUG] [Thread-11417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:09:19.609 [DEBUG] [Thread-11417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:09:19.609 [DEBUG] [Thread-11417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:09:19.611 [DEBUG] [Thread-11417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:09:19.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:09:19.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:09:19.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:09:19.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:09:19.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:09:19.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:09:19.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:09:19.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:09:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:09:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.089331 -999.00  +19.70  10.37     18   -5.00 1 1 1 1 1     0    0 24.25 -30.23 ZNESW 12.2 10.4 62.6 11.5 19.4 -25.9 19.3 -25.4 19.0 -24.1 19.2 -25.3
2025-11-26T04:09:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:09:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:09:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.089331
2025-11-26T04:09:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:09:19.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:09:19.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:09:19.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:09:19.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:09:19.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:09:02', tmtdew=28.49, humidity=13.36, cloud=0.0, wind=10.82, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:09:02', seeing=1.24, atlas_timestamp='2025-11-26T02:08:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.039750000000001506, 0.047250000000000014, 0.043499999999998096, 0.07349999999999923, 0.05975000000000108, 0.08900000000000041, 0.02725000000000044, 0.0625, 0.02800000000000047, 0.006249999999999645, 0.03200000000000003, 0.1609999999999996, 0.08825000000000038, 0.05699999999999861, 0.04899999999999949, 0.0912500000000005, 0.11000000000000121, 0.03500000000000014, 0.07374999999999865, 0.08699999999999797, 0.09174999999999933, 0.043250000000000455, 0.027749999999999275, 0.07299999999999862, 0.1070000000000011, 0.05075000000000074, 0.1014999999999997, 0.23800000000000043, 0.17900000000000027, 0.12200000000000166, 0.07800000000000118, 0.08374999999999844], zp_timestamp='2025-11-26T02:06:00')
2025-11-26T04:09:19.632 [DEBUG] [Thread-11417] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:09:19.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:09:19.732 [DEBUG] [Thread-11420] [transport.py] [_log()] starting thread (client mode): 0x70d2ae60
2025-11-26T04:09:19.732 [DEBUG] [Thread-11420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:09:19.751 [DEBUG] [Thread-11420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:09:19.752 [INFO] [Thread-11420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:09:19.759 [DEBUG] [Thread-11420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] client lang: <none>
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] server lang: <none>
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] kex follows: False
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:09:19.760 [DEBUG] [Thread-11420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:09:19.761 [DEBUG] [Thread-11420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:09:19.761 [DEBUG] [Thread-11420] [transport.py] [_log()] Compression: none
2025-11-26T04:09:19.761 [DEBUG] [Thread-11420] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:09:19.818 [DEBUG] [Thread-11420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:09:19.819 [DEBUG] [Thread-11420] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:09:19.819 [DEBUG] [Thread-11420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:09:19.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:09:19.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:09:19.875 [DEBUG] [Thread-11420] [transport.py] [_log()] userauth is OK
2025-11-26T04:09:19.875 [DEBUG] [Thread-11420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:09:19.875 [DEBUG] [Thread-11420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:09:19.875 [DEBUG] [Thread-11420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:09:19.876 [DEBUG] [Thread-11420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:09:19.894 [INFO] [Thread-11420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:09:19.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:09:19.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:09:20.752 [DEBUG] [Thread-11420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:09:20.752 [DEBUG] [Thread-11420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:09:20.800 [DEBUG] [Thread-11420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:09:20.800 [DEBUG] [Thread-11420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:09:20.809 [DEBUG] [Thread-11420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:09:20.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:09:20.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:09:20.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:09:20.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:09:20.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:09:20.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:09:20.845 [DEBUG] [Thread-11420] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:09:28.014 [DEBUG] [Thread-11422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:09:30.070 [DEBUG] [Thread-11423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:09:45.122 [DEBUG] [Thread-11424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:09:50.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:09:50.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:09:50.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:09:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 9, 34), 27.27, 14.71, 0.0, 12.25, 18.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:09:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:09:34
2025-11-26T04:09:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:09:51.799 [DEBUG] [Thread-11425] [transport.py] [_log()] starting thread (client mode): 0x70d00af0
2025-11-26T04:09:51.800 [DEBUG] [Thread-11425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:09:51.820 [DEBUG] [Thread-11425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:09:51.820 [INFO] [Thread-11425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:09:51.823 [DEBUG] [Thread-11425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] client lang: <none>
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] server lang: <none>
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] kex follows: False
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] Compression: none
2025-11-26T04:09:51.824 [DEBUG] [Thread-11425] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:09:51.842 [DEBUG] [Thread-11425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:09:51.842 [DEBUG] [Thread-11425] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:09:51.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:09:51.843 [DEBUG] [Thread-11425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:09:51.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:09:51.846 [DEBUG] [Thread-11425] [transport.py] [_log()] userauth is OK
2025-11-26T04:09:51.846 [DEBUG] [Thread-11425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:09:51.846 [DEBUG] [Thread-11425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:09:51.846 [DEBUG] [Thread-11425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:09:51.846 [DEBUG] [Thread-11425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:09:51.883 [INFO] [Thread-11425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:09:51.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:09:52.523 [DEBUG] [Thread-11425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:09:52.523 [DEBUG] [Thread-11425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:09:52.524 [DEBUG] [Thread-11425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:09:52.564 [DEBUG] [Thread-11425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:09:52.564 [DEBUG] [Thread-11425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:09:52.568 [DEBUG] [Thread-11425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:09:52.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:09:52.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:09:52.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:09:52.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:09:52.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:09:52.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:09:52.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:09:52.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:09:52.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:09:52.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.089678 -999.00  +19.60   9.34     18   -5.10 1 1 1 1 1     0    0 23.82 -28.82 ZNESW 9.9 9.3 66.8 11.7 19.3 -26.1 19.2 -25.5 19.0 -24.0 19.2 -25.5
2025-11-26T04:09:52.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:09:52.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:09:52.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.089678
2025-11-26T04:09:52.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:09:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:09:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:09:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:09:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:09:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:09:34', tmtdew=27.27, humidity=14.71, cloud=0.0, wind=12.25, temperature=18.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:09:34', seeing=1.22, atlas_timestamp='2025-11-26T02:09:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.039750000000001506, 0.047250000000000014, 0.043499999999998096, 0.07349999999999923, 0.05975000000000108, 0.08900000000000041, 0.02725000000000044, 0.0625, 0.02800000000000047, 0.006249999999999645, 0.03200000000000003, 0.1609999999999996, 0.08825000000000038, 0.05699999999999861, 0.04899999999999949, 0.0912500000000005, 0.11000000000000121, 0.03500000000000014, 0.07374999999999865, 0.08699999999999797, 0.09174999999999933, 0.043250000000000455, 0.027749999999999275, 0.07299999999999862, 0.1070000000000011, 0.05075000000000074, 0.1014999999999997, 0.23800000000000043, 0.17900000000000027, 0.12200000000000166, 0.07800000000000118, 0.08374999999999844], zp_timestamp='2025-11-26T02:06:00')
2025-11-26T04:09:52.598 [DEBUG] [Thread-11425] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:09:52.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:09:52.694 [DEBUG] [Thread-11428] [transport.py] [_log()] starting thread (client mode): 0x70df8b80
2025-11-26T04:09:52.694 [DEBUG] [Thread-11428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:09:52.709 [DEBUG] [Thread-11428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:09:52.709 [INFO] [Thread-11428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] client lang: <none>
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] server lang: <none>
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] kex follows: False
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:09:52.717 [DEBUG] [Thread-11428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:09:52.718 [DEBUG] [Thread-11428] [transport.py] [_log()] Compression: none
2025-11-26T04:09:52.718 [DEBUG] [Thread-11428] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:09:52.774 [DEBUG] [Thread-11428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:09:52.775 [DEBUG] [Thread-11428] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:09:52.775 [DEBUG] [Thread-11428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:09:52.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:09:52.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:09:52.830 [DEBUG] [Thread-11428] [transport.py] [_log()] userauth is OK
2025-11-26T04:09:52.830 [DEBUG] [Thread-11428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:09:52.830 [DEBUG] [Thread-11428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:09:52.831 [DEBUG] [Thread-11428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:09:52.831 [DEBUG] [Thread-11428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:09:52.850 [INFO] [Thread-11428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:09:52.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:09:52.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:09:53.720 [DEBUG] [Thread-11428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:09:53.720 [DEBUG] [Thread-11428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:09:53.768 [DEBUG] [Thread-11428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:09:53.768 [DEBUG] [Thread-11428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:09:53.777 [DEBUG] [Thread-11428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:09:53.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:09:53.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:09:53.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:09:53.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:09:53.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:09:53.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:09:53.815 [DEBUG] [Thread-11428] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:10:00.156 [DEBUG] [Thread-11430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:10:04.045 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:10:04.046 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:10:15.195 [DEBUG] [Thread-11431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:10:23.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:10:23.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:10:23.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:10:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 10, 6), 28.48, 13.37, 0.0, 11.26, 19.0, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:10:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:10:06
2025-11-26T04:10:24.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:10:24.758 [DEBUG] [Thread-11432] [transport.py] [_log()] starting thread (client mode): 0x70d01d80
2025-11-26T04:10:24.758 [DEBUG] [Thread-11432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:10:24.779 [DEBUG] [Thread-11432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:10:24.779 [INFO] [Thread-11432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:10:24.782 [DEBUG] [Thread-11432] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:10:24.782 [DEBUG] [Thread-11432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] client lang: <none>
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] server lang: <none>
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] kex follows: False
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:10:24.783 [DEBUG] [Thread-11432] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:10:24.784 [DEBUG] [Thread-11432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:10:24.784 [DEBUG] [Thread-11432] [transport.py] [_log()] Compression: none
2025-11-26T04:10:24.784 [DEBUG] [Thread-11432] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:10:24.802 [DEBUG] [Thread-11432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:10:24.802 [DEBUG] [Thread-11432] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:10:24.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:10:24.803 [DEBUG] [Thread-11432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:10:24.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:10:24.805 [DEBUG] [Thread-11432] [transport.py] [_log()] userauth is OK
2025-11-26T04:10:24.805 [DEBUG] [Thread-11432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:10:24.805 [DEBUG] [Thread-11432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:10:24.805 [DEBUG] [Thread-11432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:10:24.805 [DEBUG] [Thread-11432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:10:24.827 [INFO] [Thread-11432] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:10:24.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:10:25.461 [DEBUG] [Thread-11432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:10:25.462 [DEBUG] [Thread-11432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:10:25.462 [DEBUG] [Thread-11432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:10:25.503 [DEBUG] [Thread-11432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:10:25.503 [DEBUG] [Thread-11432] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:10:25.506 [DEBUG] [Thread-11432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:10:25.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:10:25.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:10:25.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:10:25.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:10:25.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:10:25.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:10:25.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:10:25.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:10:25.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:10:25.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.090026 -999.00  +19.50  10.97     18   -5.00 1 1 1 1 1     0    0 24.52 -28.36 ZNESW 11.4 11.0 68.0 12.1 19.3 -26.3 19.2 -25.6 18.9 -24.3 19.2 -25.4
2025-11-26T04:10:25.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:10:25.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:10:25.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.090026
2025-11-26T04:10:25.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:10:25.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:10:25.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:10:25.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:10:25.533 [DEBUG] [Thread-11432] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:10:25.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:10:25.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:10:06', tmtdew=28.48, humidity=13.37, cloud=0.0, wind=11.26, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:10:06', seeing=1.13, atlas_timestamp='2025-11-26T02:09:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.039750000000001506, 0.047250000000000014, 0.043499999999998096, 0.07349999999999923, 0.05975000000000108, 0.08900000000000041, 0.02725000000000044, 0.0625, 0.02800000000000047, 0.006249999999999645, 0.03200000000000003, 0.1609999999999996, 0.08825000000000038, 0.05699999999999861, 0.04899999999999949, 0.0912500000000005, 0.11000000000000121, 0.03500000000000014, 0.07374999999999865, 0.08699999999999797, 0.09174999999999933, 0.043250000000000455, 0.027749999999999275, 0.07299999999999862, 0.1070000000000011, 0.05075000000000074, 0.1014999999999997, 0.23800000000000043, 0.17900000000000027, 0.12200000000000166, 0.07800000000000118, 0.08374999999999844], zp_timestamp='2025-11-26T02:06:00')
2025-11-26T04:10:25.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:10:25.629 [DEBUG] [Thread-11435] [transport.py] [_log()] starting thread (client mode): 0x70d01c60
2025-11-26T04:10:25.629 [DEBUG] [Thread-11435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:10:25.643 [DEBUG] [Thread-11435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:10:25.644 [INFO] [Thread-11435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:10:25.651 [DEBUG] [Thread-11435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:10:25.651 [DEBUG] [Thread-11435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:10:25.651 [DEBUG] [Thread-11435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:10:25.651 [DEBUG] [Thread-11435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:10:25.652 [DEBUG] [Thread-11435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:10:25.652 [DEBUG] [Thread-11435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:10:25.652 [DEBUG] [Thread-11435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:10:25.652 [DEBUG] [Thread-11435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:10:25.652 [DEBUG] [Thread-11435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:10:25.652 [DEBUG] [Thread-11435] [transport.py] [_log()] client lang: <none>
2025-11-26T04:10:25.652 [DEBUG] [Thread-11435] [transport.py] [_log()] server lang: <none>
2025-11-26T04:10:25.652 [DEBUG] [Thread-11435] [transport.py] [_log()] kex follows: False
2025-11-26T04:10:25.652 [DEBUG] [Thread-11435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:10:25.653 [DEBUG] [Thread-11435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:10:25.653 [DEBUG] [Thread-11435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:10:25.653 [DEBUG] [Thread-11435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:10:25.653 [DEBUG] [Thread-11435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:10:25.653 [DEBUG] [Thread-11435] [transport.py] [_log()] Compression: none
2025-11-26T04:10:25.653 [DEBUG] [Thread-11435] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:10:25.707 [DEBUG] [Thread-11435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:10:25.708 [DEBUG] [Thread-11435] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:10:25.708 [DEBUG] [Thread-11435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:10:25.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:10:25.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:10:25.769 [DEBUG] [Thread-11435] [transport.py] [_log()] userauth is OK
2025-11-26T04:10:25.770 [DEBUG] [Thread-11435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:10:25.770 [DEBUG] [Thread-11435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:10:25.770 [DEBUG] [Thread-11435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:10:25.770 [DEBUG] [Thread-11435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:10:25.795 [INFO] [Thread-11435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:10:25.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:10:25.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:10:26.607 [DEBUG] [Thread-11435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:10:26.608 [DEBUG] [Thread-11435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:10:26.657 [DEBUG] [Thread-11435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:10:26.657 [DEBUG] [Thread-11435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:10:26.666 [DEBUG] [Thread-11435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:10:26.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:10:26.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:10:26.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:10:26.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:10:26.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:10:26.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:10:26.703 [DEBUG] [Thread-11435] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:10:28.092 [DEBUG] [Thread-11437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:10:30.231 [DEBUG] [Thread-11438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:10:45.293 [DEBUG] [Thread-11439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:10:56.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:10:56.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:10:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:10:57.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 10, 38), 28.37, 13.89, 0.0, 9.42, 18.97, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:10:57.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:10:38
2025-11-26T04:10:57.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:10:57.638 [DEBUG] [Thread-11440] [transport.py] [_log()] starting thread (client mode): 0x70d03e20
2025-11-26T04:10:57.638 [DEBUG] [Thread-11440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:10:57.660 [DEBUG] [Thread-11440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:10:57.661 [INFO] [Thread-11440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] client lang: <none>
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] server lang: <none>
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] kex follows: False
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:10:57.664 [DEBUG] [Thread-11440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:10:57.665 [DEBUG] [Thread-11440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:10:57.665 [DEBUG] [Thread-11440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:10:57.665 [DEBUG] [Thread-11440] [transport.py] [_log()] Compression: none
2025-11-26T04:10:57.665 [DEBUG] [Thread-11440] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:10:57.681 [DEBUG] [Thread-11440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:10:57.682 [DEBUG] [Thread-11440] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:10:57.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:10:57.683 [DEBUG] [Thread-11440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:10:57.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:10:57.686 [DEBUG] [Thread-11440] [transport.py] [_log()] userauth is OK
2025-11-26T04:10:57.686 [DEBUG] [Thread-11440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:10:57.686 [DEBUG] [Thread-11440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:10:57.686 [DEBUG] [Thread-11440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:10:57.686 [DEBUG] [Thread-11440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:10:57.711 [INFO] [Thread-11440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:10:57.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:10:58.353 [DEBUG] [Thread-11440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:10:58.353 [DEBUG] [Thread-11440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:10:58.354 [DEBUG] [Thread-11440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:10:58.394 [DEBUG] [Thread-11440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:10:58.395 [DEBUG] [Thread-11440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:10:58.397 [DEBUG] [Thread-11440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:10:58.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:10:58.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:10:58.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:10:58.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:10:58.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:10:58.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:10:58.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.090720 -999.00  +19.40  11.12     18   -5.00 1 1 1 1 1     0    0 24.14 -29.15 ZNESW 11.0 11.1 69.6 12.3 19.2 -26.1 19.1 -25.5 18.9 -24.2 19.2 -25.3
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.090720
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:10:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:10:38', tmtdew=28.37, humidity=13.89, cloud=0.0, wind=9.42, temperature=18.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:10:38', seeing=1.13, atlas_timestamp='2025-11-26T02:10:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.039750000000001506, 0.047250000000000014, 0.043499999999998096, 0.07349999999999923, 0.05975000000000108, 0.08900000000000041, 0.02725000000000044, 0.0625, 0.02800000000000047, 0.006249999999999645, 0.03200000000000003, 0.1609999999999996, 0.08825000000000038, 0.05699999999999861, 0.04899999999999949, 0.0912500000000005, 0.11000000000000121, 0.03500000000000014, 0.07374999999999865, 0.08699999999999797, 0.09174999999999933, 0.043250000000000455, 0.027749999999999275, 0.07299999999999862, 0.1070000000000011, 0.05075000000000074, 0.1014999999999997, 0.23800000000000043, 0.17900000000000027, 0.12200000000000166, 0.07800000000000118, 0.08374999999999844], zp_timestamp='2025-11-26T02:06:00')
2025-11-26T04:10:58.418 [DEBUG] [Thread-11440] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:10:58.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:10:58.500 [DEBUG] [Thread-11443] [transport.py] [_log()] starting thread (client mode): 0x70d00a90
2025-11-26T04:10:58.500 [DEBUG] [Thread-11443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:10:58.516 [DEBUG] [Thread-11443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:10:58.516 [INFO] [Thread-11443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:10:58.524 [DEBUG] [Thread-11443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:10:58.524 [DEBUG] [Thread-11443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:10:58.524 [DEBUG] [Thread-11443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:10:58.524 [DEBUG] [Thread-11443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:10:58.525 [DEBUG] [Thread-11443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:10:58.525 [DEBUG] [Thread-11443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:10:58.525 [DEBUG] [Thread-11443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:10:58.525 [DEBUG] [Thread-11443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:10:58.525 [DEBUG] [Thread-11443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:10:58.525 [DEBUG] [Thread-11443] [transport.py] [_log()] client lang: <none>
2025-11-26T04:10:58.525 [DEBUG] [Thread-11443] [transport.py] [_log()] server lang: <none>
2025-11-26T04:10:58.525 [DEBUG] [Thread-11443] [transport.py] [_log()] kex follows: False
2025-11-26T04:10:58.525 [DEBUG] [Thread-11443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:10:58.526 [DEBUG] [Thread-11443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:10:58.526 [DEBUG] [Thread-11443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:10:58.526 [DEBUG] [Thread-11443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:10:58.526 [DEBUG] [Thread-11443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:10:58.526 [DEBUG] [Thread-11443] [transport.py] [_log()] Compression: none
2025-11-26T04:10:58.526 [DEBUG] [Thread-11443] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:10:58.584 [DEBUG] [Thread-11443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:10:58.585 [DEBUG] [Thread-11443] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:10:58.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:10:58.586 [DEBUG] [Thread-11443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:10:58.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:10:58.641 [DEBUG] [Thread-11443] [transport.py] [_log()] userauth is OK
2025-11-26T04:10:58.641 [DEBUG] [Thread-11443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:10:58.641 [DEBUG] [Thread-11443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:10:58.641 [DEBUG] [Thread-11443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:10:58.641 [DEBUG] [Thread-11443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:10:58.660 [INFO] [Thread-11443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:10:58.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:10:58.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:10:59.471 [DEBUG] [Thread-11443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:10:59.471 [DEBUG] [Thread-11443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:10:59.519 [DEBUG] [Thread-11443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:10:59.519 [DEBUG] [Thread-11443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:10:59.528 [DEBUG] [Thread-11443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:10:59.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:10:59.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:10:59.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:10:59.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:10:59.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:10:59.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:10:59.564 [DEBUG] [Thread-11443] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:11:00.333 [DEBUG] [Thread-11445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:11:04.250 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:11:04.251 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:11:15.392 [DEBUG] [Thread-11446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:11:28.173 [DEBUG] [Thread-11447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:11:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:11:29.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:11:29.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:11:30.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 11, 10), 28.35, 13.91, 0.0, 9.21, 18.97, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:11:30.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:11:10
2025-11-26T04:11:30.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:11:30.419 [DEBUG] [Thread-11448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:11:30.530 [DEBUG] [Thread-11449] [transport.py] [_log()] starting thread (client mode): 0x70d039a0
2025-11-26T04:11:30.530 [DEBUG] [Thread-11449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:11:30.552 [DEBUG] [Thread-11449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:11:30.552 [INFO] [Thread-11449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:11:30.555 [DEBUG] [Thread-11449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:11:30.555 [DEBUG] [Thread-11449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:11:30.555 [DEBUG] [Thread-11449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:11:30.555 [DEBUG] [Thread-11449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:11:30.555 [DEBUG] [Thread-11449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:11:30.555 [DEBUG] [Thread-11449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:11:30.555 [DEBUG] [Thread-11449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:11:30.555 [DEBUG] [Thread-11449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] client lang: <none>
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] server lang: <none>
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] kex follows: False
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] Compression: none
2025-11-26T04:11:30.556 [DEBUG] [Thread-11449] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:11:30.575 [DEBUG] [Thread-11449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:11:30.576 [DEBUG] [Thread-11449] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:11:30.576 [DEBUG] [Thread-11449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:11:30.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:11:30.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:11:30.578 [DEBUG] [Thread-11449] [transport.py] [_log()] userauth is OK
2025-11-26T04:11:30.578 [DEBUG] [Thread-11449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:11:30.578 [DEBUG] [Thread-11449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:11:30.578 [DEBUG] [Thread-11449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:11:30.578 [DEBUG] [Thread-11449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:11:30.604 [INFO] [Thread-11449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:11:30.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:11:31.226 [DEBUG] [Thread-11449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:11:31.226 [DEBUG] [Thread-11449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:11:31.227 [DEBUG] [Thread-11449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:11:31.267 [DEBUG] [Thread-11449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:11:31.267 [DEBUG] [Thread-11449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:11:31.270 [DEBUG] [Thread-11449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:11:31.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:11:31.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:11:31.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:11:31.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:11:31.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:11:31.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:11:31.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:11:31.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:11:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:11:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.091067 -999.00  +19.40  10.25     18   -5.00 1 1 1 1 1     0    0 23.58 -29.26 ZNESW 10.6 10.2 66.4 12.7 19.3 -26.1 19.1 -25.4 18.9 -24.0 19.1 -25.3
2025-11-26T04:11:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:11:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:11:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.091067
2025-11-26T04:11:31.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:11:31.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:11:31.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:11:31.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:11:31.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:11:31.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:11:10', tmtdew=28.35, humidity=13.91, cloud=0.0, wind=9.21, temperature=18.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:11:10', seeing=1.05, atlas_timestamp='2025-11-26T02:11:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:09:00')
2025-11-26T04:11:31.298 [DEBUG] [Thread-11449] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:11:31.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:11:31.394 [DEBUG] [Thread-11452] [transport.py] [_log()] starting thread (client mode): 0x70dfba00
2025-11-26T04:11:31.394 [DEBUG] [Thread-11452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:11:31.408 [DEBUG] [Thread-11452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:11:31.408 [INFO] [Thread-11452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] client lang: <none>
2025-11-26T04:11:31.416 [DEBUG] [Thread-11452] [transport.py] [_log()] server lang: <none>
2025-11-26T04:11:31.417 [DEBUG] [Thread-11452] [transport.py] [_log()] kex follows: False
2025-11-26T04:11:31.417 [DEBUG] [Thread-11452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:11:31.417 [DEBUG] [Thread-11452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:11:31.417 [DEBUG] [Thread-11452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:11:31.417 [DEBUG] [Thread-11452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:11:31.417 [DEBUG] [Thread-11452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:11:31.417 [DEBUG] [Thread-11452] [transport.py] [_log()] Compression: none
2025-11-26T04:11:31.417 [DEBUG] [Thread-11452] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:11:31.476 [DEBUG] [Thread-11452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:11:31.477 [DEBUG] [Thread-11452] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:11:31.477 [DEBUG] [Thread-11452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:11:31.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:11:31.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:11:31.532 [DEBUG] [Thread-11452] [transport.py] [_log()] userauth is OK
2025-11-26T04:11:31.533 [DEBUG] [Thread-11452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:11:31.533 [DEBUG] [Thread-11452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:11:31.533 [DEBUG] [Thread-11452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:11:31.533 [DEBUG] [Thread-11452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:11:31.551 [INFO] [Thread-11452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:11:31.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:11:31.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:11:32.405 [DEBUG] [Thread-11452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:11:32.405 [DEBUG] [Thread-11452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:11:32.453 [DEBUG] [Thread-11452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:11:32.453 [DEBUG] [Thread-11452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:11:32.463 [DEBUG] [Thread-11452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:11:32.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:11:32.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:11:32.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:11:32.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:11:32.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:11:32.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:11:32.502 [DEBUG] [Thread-11452] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:11:45.449 [DEBUG] [Thread-11454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:12:00.492 [DEBUG] [Thread-11455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:12:02.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:12:02.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:12:02.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
2025-11-26T04:12:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 11, 42), 28.29, 13.86, 0.0, 8.93, 18.9, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:12:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:11:42
2025-11-26T04:12:03.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:12:03.450 [DEBUG] [Thread-11456] [transport.py] [_log()] starting thread (client mode): 0x70d02050
2025-11-26T04:12:03.450 [DEBUG] [Thread-11456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:12:03.469 [DEBUG] [Thread-11456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:12:03.470 [INFO] [Thread-11456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] client lang: <none>
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] server lang: <none>
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] kex follows: False
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] Compression: none
2025-11-26T04:12:03.473 [DEBUG] [Thread-11456] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:12:03.489 [DEBUG] [Thread-11456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:12:03.489 [DEBUG] [Thread-11456] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:12:03.490 [DEBUG] [Thread-11456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:12:03.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:12:03.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:12:03.492 [DEBUG] [Thread-11456] [transport.py] [_log()] userauth is OK
2025-11-26T04:12:03.492 [DEBUG] [Thread-11456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:12:03.492 [DEBUG] [Thread-11456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:12:03.492 [DEBUG] [Thread-11456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:12:03.492 [DEBUG] [Thread-11456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:12:03.516 [INFO] [Thread-11456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:12:03.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:12:04.108 [DEBUG] [Thread-11456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:12:04.109 [DEBUG] [Thread-11456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:12:04.109 [DEBUG] [Thread-11456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:12:04.150 [DEBUG] [Thread-11456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:12:04.150 [DEBUG] [Thread-11456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:12:04.153 [DEBUG] [Thread-11456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:12:04.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:12:04.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:12:04.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:12:04.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:12:04.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:12:04.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:12:04.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:12:04.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:12:04.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:12:04.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.091415 -999.00  +19.30  11.68     18   -5.00 1 1 1 1 1     0    0 24.30 -26.75 ZNESW 11.0 11.7 67.2 12.4 19.2 -26.1 19.1 -25.4 18.9 -24.2 19.1 -25.2
2025-11-26T04:12:04.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:12:04.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:12:04.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.091415
2025-11-26T04:12:04.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:12:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:12:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:12:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:12:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:12:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:11:42', tmtdew=28.29, humidity=13.86, cloud=0.0, wind=8.93, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:11:42', seeing=1.18, atlas_timestamp='2025-11-26T02:11:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:09:00')
2025-11-26T04:12:04.179 [DEBUG] [Thread-11456] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:12:04.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:12:04.276 [DEBUG] [Thread-11459] [transport.py] [_log()] starting thread (client mode): 0x70d016c0
2025-11-26T04:12:04.276 [DEBUG] [Thread-11459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:12:04.290 [DEBUG] [Thread-11459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:12:04.291 [INFO] [Thread-11459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:12:04.298 [DEBUG] [Thread-11459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:12:04.298 [DEBUG] [Thread-11459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] client lang: <none>
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] server lang: <none>
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] kex follows: False
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] Compression: none
2025-11-26T04:12:04.299 [DEBUG] [Thread-11459] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:12:04.355 [DEBUG] [Thread-11459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:12:04.356 [DEBUG] [Thread-11459] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:12:04.357 [DEBUG] [Thread-11459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:12:04.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:12:04.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:12:04.416 [DEBUG] [Thread-11459] [transport.py] [_log()] userauth is OK
2025-11-26T04:12:04.416 [DEBUG] [Thread-11459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:12:04.416 [DEBUG] [Thread-11459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:12:04.417 [DEBUG] [Thread-11459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:12:04.417 [DEBUG] [Thread-11459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:12:04.436 [INFO] [Thread-11459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:12:04.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:12:04.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:12:04.454 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:12:04.456 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:12:05.254 [DEBUG] [Thread-11459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:12:05.254 [DEBUG] [Thread-11459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:12:05.303 [DEBUG] [Thread-11459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:12:05.303 [DEBUG] [Thread-11459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:12:05.312 [DEBUG] [Thread-11459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:12:05.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:12:05.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:12:05.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
2025-11-26T04:12:05.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:12:05.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:12:05.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:12:05.349 [DEBUG] [Thread-11459] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:12:15.525 [DEBUG] [Thread-11461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:12:28.256 [DEBUG] [Thread-11462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:12:30.565 [DEBUG] [Thread-11463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:12:35.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:12:35.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:12:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:12:36.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 12, 14), 28.3, 13.86, 0.0, 9.14, 18.95, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:12:36.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:12:14
2025-11-26T04:12:36.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:12:36.311 [DEBUG] [Thread-11464] [transport.py] [_log()] starting thread (client mode): 0x70d02e90
2025-11-26T04:12:36.311 [DEBUG] [Thread-11464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:12:36.332 [DEBUG] [Thread-11464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:12:36.332 [INFO] [Thread-11464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:12:36.335 [DEBUG] [Thread-11464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:12:36.335 [DEBUG] [Thread-11464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:12:36.335 [DEBUG] [Thread-11464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:12:36.335 [DEBUG] [Thread-11464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:12:36.335 [DEBUG] [Thread-11464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] client lang: <none>
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] server lang: <none>
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] kex follows: False
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:12:36.336 [DEBUG] [Thread-11464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:12:36.337 [DEBUG] [Thread-11464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:12:36.337 [DEBUG] [Thread-11464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:12:36.337 [DEBUG] [Thread-11464] [transport.py] [_log()] Compression: none
2025-11-26T04:12:36.337 [DEBUG] [Thread-11464] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:12:36.352 [DEBUG] [Thread-11464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:12:36.352 [DEBUG] [Thread-11464] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:12:36.352 [DEBUG] [Thread-11464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:12:36.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:12:36.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:12:36.353 [DEBUG] [Thread-11464] [transport.py] [_log()] userauth is OK
2025-11-26T04:12:36.353 [DEBUG] [Thread-11464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:12:36.353 [DEBUG] [Thread-11464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:12:36.353 [DEBUG] [Thread-11464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:12:36.354 [DEBUG] [Thread-11464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:12:36.363 [INFO] [Thread-11464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:12:36.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:12:37.000 [DEBUG] [Thread-11464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:12:37.000 [DEBUG] [Thread-11464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:12:37.001 [DEBUG] [Thread-11464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:12:37.042 [DEBUG] [Thread-11464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:12:37.042 [DEBUG] [Thread-11464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:12:37.045 [DEBUG] [Thread-11464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:12:37.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:12:37.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:12:37.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:12:37.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:12:37.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:12:37.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:12:37.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:12:37.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:12:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:12:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.091762 -999.00  +19.30  11.35     18   -5.00 1 1 1 1 1     0    0 24.13 -27.59 ZNESW 11.1 11.3 61.6 12.5 19.2 -26.1 19.1 -25.3 18.9 -24.2 19.1 -25.3
2025-11-26T04:12:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:12:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:12:37.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.091762
2025-11-26T04:12:37.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:12:37.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:12:37.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:12:37.071 [DEBUG] [Thread-11464] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:12:37.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:12:37.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:12:37.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:12:14', tmtdew=28.3, humidity=13.86, cloud=0.0, wind=9.14, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:12:14', seeing=1.03, atlas_timestamp='2025-11-26T02:12:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:09:00')
2025-11-26T04:12:37.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:12:37.166 [DEBUG] [Thread-11467] [transport.py] [_log()] starting thread (client mode): 0x70d77910
2025-11-26T04:12:37.166 [DEBUG] [Thread-11467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:12:37.180 [DEBUG] [Thread-11467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:12:37.180 [INFO] [Thread-11467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] client lang: <none>
2025-11-26T04:12:37.188 [DEBUG] [Thread-11467] [transport.py] [_log()] server lang: <none>
2025-11-26T04:12:37.189 [DEBUG] [Thread-11467] [transport.py] [_log()] kex follows: False
2025-11-26T04:12:37.189 [DEBUG] [Thread-11467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:12:37.189 [DEBUG] [Thread-11467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:12:37.189 [DEBUG] [Thread-11467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:12:37.189 [DEBUG] [Thread-11467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:12:37.189 [DEBUG] [Thread-11467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:12:37.189 [DEBUG] [Thread-11467] [transport.py] [_log()] Compression: none
2025-11-26T04:12:37.189 [DEBUG] [Thread-11467] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:12:37.247 [DEBUG] [Thread-11467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:12:37.247 [DEBUG] [Thread-11467] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:12:37.248 [DEBUG] [Thread-11467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:12:37.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:12:37.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:12:37.303 [DEBUG] [Thread-11467] [transport.py] [_log()] userauth is OK
2025-11-26T04:12:37.304 [DEBUG] [Thread-11467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:12:37.304 [DEBUG] [Thread-11467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:12:37.304 [DEBUG] [Thread-11467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:12:37.304 [DEBUG] [Thread-11467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:12:37.323 [INFO] [Thread-11467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:12:37.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:12:37.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:12:38.104 [DEBUG] [Thread-11467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:12:38.104 [DEBUG] [Thread-11467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:12:38.152 [DEBUG] [Thread-11467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:12:38.152 [DEBUG] [Thread-11467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:12:38.161 [DEBUG] [Thread-11467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:12:38.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:12:38.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:12:38.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:12:38.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:12:38.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:12:38.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:12:38.196 [DEBUG] [Thread-11467] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:12:45.597 [DEBUG] [Thread-11469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:13:00.638 [DEBUG] [Thread-11470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:13:04.659 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:13:04.661 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:13:08.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:13:08.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:13:08.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:13:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 12, 46), 28.3, 13.79, 0.0, 9.33, 18.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:13:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:12:46
2025-11-26T04:13:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:13:09.143 [DEBUG] [Thread-11471] [transport.py] [_log()] starting thread (client mode): 0x70d74b80
2025-11-26T04:13:09.143 [DEBUG] [Thread-11471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:13:09.167 [DEBUG] [Thread-11471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:13:09.168 [INFO] [Thread-11471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:13:09.171 [DEBUG] [Thread-11471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:13:09.171 [DEBUG] [Thread-11471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:13:09.171 [DEBUG] [Thread-11471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] client lang: <none>
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] server lang: <none>
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] kex follows: False
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] Compression: none
2025-11-26T04:13:09.172 [DEBUG] [Thread-11471] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:13:09.190 [DEBUG] [Thread-11471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:13:09.190 [DEBUG] [Thread-11471] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:13:09.190 [DEBUG] [Thread-11471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:13:09.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:13:09.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:13:09.191 [DEBUG] [Thread-11471] [transport.py] [_log()] userauth is OK
2025-11-26T04:13:09.191 [DEBUG] [Thread-11471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:13:09.192 [DEBUG] [Thread-11471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:13:09.192 [DEBUG] [Thread-11471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:13:09.192 [DEBUG] [Thread-11471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:13:09.201 [INFO] [Thread-11471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:13:09.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:13:09.845 [DEBUG] [Thread-11471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:13:09.845 [DEBUG] [Thread-11471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:13:09.846 [DEBUG] [Thread-11471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:13:09.886 [DEBUG] [Thread-11471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:13:09.886 [DEBUG] [Thread-11471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:13:09.890 [DEBUG] [Thread-11471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:13:09.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:13:09.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:13:09.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:13:09.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:13:09.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:13:09.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:13:09.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:13:09.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:13:09.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:13:09.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.092109 -999.00  +19.30   9.91     18   -5.00 1 1 1 1 1     0    0 23.62 -28.51 ZNESW 10.2 9.9 72.8 12.2 19.2 -26.0 19.1 -25.3 18.9 -24.0 19.1 -25.3
2025-11-26T04:13:09.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:13:09.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:13:09.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.092109
2025-11-26T04:13:09.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:13:09.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:13:09.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:13:09.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:13:09.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:13:09.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:12:46', tmtdew=28.3, humidity=13.79, cloud=0.0, wind=9.33, temperature=18.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:12:46', seeing=0.92, atlas_timestamp='2025-11-26T02:12:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:09:00')
2025-11-26T04:13:09.918 [DEBUG] [Thread-11471] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:13:10.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:13:10.022 [DEBUG] [Thread-11474] [transport.py] [_log()] starting thread (client mode): 0x70d02110
2025-11-26T04:13:10.022 [DEBUG] [Thread-11474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:13:10.037 [DEBUG] [Thread-11474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:13:10.037 [INFO] [Thread-11474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:13:10.045 [DEBUG] [Thread-11474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:13:10.045 [DEBUG] [Thread-11474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:13:10.045 [DEBUG] [Thread-11474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:13:10.045 [DEBUG] [Thread-11474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:13:10.045 [DEBUG] [Thread-11474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:13:10.046 [DEBUG] [Thread-11474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:13:10.046 [DEBUG] [Thread-11474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:13:10.046 [DEBUG] [Thread-11474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:13:10.046 [DEBUG] [Thread-11474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:13:10.046 [DEBUG] [Thread-11474] [transport.py] [_log()] client lang: <none>
2025-11-26T04:13:10.046 [DEBUG] [Thread-11474] [transport.py] [_log()] server lang: <none>
2025-11-26T04:13:10.046 [DEBUG] [Thread-11474] [transport.py] [_log()] kex follows: False
2025-11-26T04:13:10.046 [DEBUG] [Thread-11474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:13:10.046 [DEBUG] [Thread-11474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:13:10.047 [DEBUG] [Thread-11474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:13:10.047 [DEBUG] [Thread-11474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:13:10.047 [DEBUG] [Thread-11474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:13:10.047 [DEBUG] [Thread-11474] [transport.py] [_log()] Compression: none
2025-11-26T04:13:10.047 [DEBUG] [Thread-11474] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:13:10.103 [DEBUG] [Thread-11474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:13:10.104 [DEBUG] [Thread-11474] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:13:10.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:13:10.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:13:10.107 [DEBUG] [Thread-11474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:13:10.159 [DEBUG] [Thread-11474] [transport.py] [_log()] userauth is OK
2025-11-26T04:13:10.159 [DEBUG] [Thread-11474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:13:10.160 [DEBUG] [Thread-11474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:13:10.160 [DEBUG] [Thread-11474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:13:10.160 [DEBUG] [Thread-11474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:13:10.180 [INFO] [Thread-11474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:13:10.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:13:10.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:13:10.980 [DEBUG] [Thread-11474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:13:10.981 [DEBUG] [Thread-11474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:13:11.029 [DEBUG] [Thread-11474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:13:11.029 [DEBUG] [Thread-11474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:13:11.038 [DEBUG] [Thread-11474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:13:11.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:13:11.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:13:11.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:13:11.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:13:11.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:13:11.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:13:11.077 [DEBUG] [Thread-11474] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:13:15.675 [DEBUG] [Thread-11476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:13:28.328 [DEBUG] [Thread-11477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:13:30.725 [DEBUG] [Thread-11478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:13:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:13:41.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:13:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:13:41.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 13, 18), 28.34, 13.74, 0.0, 9.35, 18.84, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:13:41.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:13:18
2025-11-26T04:13:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:13:42.070 [DEBUG] [Thread-11479] [transport.py] [_log()] starting thread (client mode): 0x70de6710
2025-11-26T04:13:42.070 [DEBUG] [Thread-11479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:13:42.090 [DEBUG] [Thread-11479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:13:42.090 [INFO] [Thread-11479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] client lang: <none>
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] server lang: <none>
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] kex follows: False
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] Compression: none
2025-11-26T04:13:42.094 [DEBUG] [Thread-11479] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:13:42.110 [DEBUG] [Thread-11479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:13:42.110 [DEBUG] [Thread-11479] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:13:42.110 [DEBUG] [Thread-11479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:13:42.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:13:42.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:13:42.111 [DEBUG] [Thread-11479] [transport.py] [_log()] userauth is OK
2025-11-26T04:13:42.111 [DEBUG] [Thread-11479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:13:42.111 [DEBUG] [Thread-11479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:13:42.111 [DEBUG] [Thread-11479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:13:42.111 [DEBUG] [Thread-11479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:13:42.120 [INFO] [Thread-11479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:13:42.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:13:42.800 [DEBUG] [Thread-11479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:13:42.800 [DEBUG] [Thread-11479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:13:42.801 [DEBUG] [Thread-11479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:13:42.841 [DEBUG] [Thread-11479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:13:42.841 [DEBUG] [Thread-11479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:13:42.845 [DEBUG] [Thread-11479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:13:42.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:13:42.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:13:42.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:13:42.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:13:42.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:13:42.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:13:42.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:13:42.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:13:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:13:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.092456 -999.00  +19.30  10.49     18   -5.10 1 1 1 1 1     0    0 23.81 -28.51 ZNESW 11.1 10.5 63.8 11.3 19.1 -26.1 19.1 -25.5 18.8 -24.2 19.1 -25.2
2025-11-26T04:13:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:13:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:13:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.092456
2025-11-26T04:13:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:13:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:13:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:13:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:13:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:13:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:13:18', tmtdew=28.34, humidity=13.74, cloud=0.0, wind=9.35, temperature=18.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:13:18', seeing=0.92, atlas_timestamp='2025-11-26T02:13:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:09:00')
2025-11-26T04:13:42.872 [DEBUG] [Thread-11479] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:13:42.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:13:42.967 [DEBUG] [Thread-11482] [transport.py] [_log()] starting thread (client mode): 0x70de4a30
2025-11-26T04:13:42.967 [DEBUG] [Thread-11482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:13:42.982 [DEBUG] [Thread-11482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:13:42.982 [INFO] [Thread-11482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:13:42.989 [DEBUG] [Thread-11482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:13:42.989 [DEBUG] [Thread-11482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:13:42.989 [DEBUG] [Thread-11482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] client lang: <none>
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] server lang: <none>
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] kex follows: False
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] Compression: none
2025-11-26T04:13:42.990 [DEBUG] [Thread-11482] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:13:43.046 [DEBUG] [Thread-11482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:13:43.047 [DEBUG] [Thread-11482] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:13:43.048 [DEBUG] [Thread-11482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:13:43.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:13:43.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:13:43.103 [DEBUG] [Thread-11482] [transport.py] [_log()] userauth is OK
2025-11-26T04:13:43.103 [DEBUG] [Thread-11482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:13:43.103 [DEBUG] [Thread-11482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:13:43.103 [DEBUG] [Thread-11482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:13:43.103 [DEBUG] [Thread-11482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:13:43.121 [INFO] [Thread-11482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:13:43.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:13:43.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:13:43.928 [DEBUG] [Thread-11482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:13:43.928 [DEBUG] [Thread-11482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:13:43.977 [DEBUG] [Thread-11482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:13:43.977 [DEBUG] [Thread-11482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:13:43.986 [DEBUG] [Thread-11482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:13:43.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:13:43.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:13:44.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:13:44.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:13:44.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:13:44.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:13:44.023 [DEBUG] [Thread-11482] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:13:45.758 [DEBUG] [Thread-11484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:14:00.806 [DEBUG] [Thread-11485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:14:04.876 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:14:04.878 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:14:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:14:14.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:14:14.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:14:14.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 13, 50), 28.25, 13.81, 0.0, 10.68, 18.85, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:14:14.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:13:50
2025-11-26T04:14:14.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:14:15.027 [DEBUG] [Thread-11486] [transport.py] [_log()] starting thread (client mode): 0x70d03d00
2025-11-26T04:14:15.027 [DEBUG] [Thread-11486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:14:15.048 [DEBUG] [Thread-11486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:14:15.048 [INFO] [Thread-11486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] client lang: <none>
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] server lang: <none>
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] kex follows: False
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] Compression: none
2025-11-26T04:14:15.052 [DEBUG] [Thread-11486] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:14:15.067 [DEBUG] [Thread-11486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:14:15.067 [DEBUG] [Thread-11486] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:14:15.068 [DEBUG] [Thread-11486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:14:15.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:14:15.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:14:15.068 [DEBUG] [Thread-11486] [transport.py] [_log()] userauth is OK
2025-11-26T04:14:15.068 [DEBUG] [Thread-11486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:14:15.068 [DEBUG] [Thread-11486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:14:15.068 [DEBUG] [Thread-11486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:14:15.068 [DEBUG] [Thread-11486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:14:15.077 [INFO] [Thread-11486] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:14:15.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:14:15.717 [DEBUG] [Thread-11486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:14:15.717 [DEBUG] [Thread-11486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:14:15.717 [DEBUG] [Thread-11486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:14:15.758 [DEBUG] [Thread-11486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:14:15.758 [DEBUG] [Thread-11486] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:14:15.760 [DEBUG] [Thread-11486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:14:15.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:14:15.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:14:15.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:14:15.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:14:15.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:14:15.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:14:15.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.093151 -999.00  +19.30  11.40     18   -5.10 1 1 1 1 1     0    0 23.64 -29.52 ZNESW 10.7 11.4 62.4 12.0 19.1 -26.0 19.1 -25.4 18.8 -24.2 19.0 -25.1
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.093151
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:14:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:13:50', tmtdew=28.25, humidity=13.81, cloud=0.0, wind=10.68, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:13:50', seeing=1.02, atlas_timestamp='2025-11-26T02:14:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:12:00')
2025-11-26T04:14:15.779 [DEBUG] [Thread-11486] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:14:15.840 [DEBUG] [Thread-11489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:14:15.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:14:15.863 [DEBUG] [Thread-11490] [transport.py] [_log()] starting thread (client mode): 0x70d76620
2025-11-26T04:14:15.863 [DEBUG] [Thread-11490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:14:15.880 [DEBUG] [Thread-11490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:14:15.880 [INFO] [Thread-11490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] client lang: <none>
2025-11-26T04:14:15.887 [DEBUG] [Thread-11490] [transport.py] [_log()] server lang: <none>
2025-11-26T04:14:15.888 [DEBUG] [Thread-11490] [transport.py] [_log()] kex follows: False
2025-11-26T04:14:15.888 [DEBUG] [Thread-11490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:14:15.888 [DEBUG] [Thread-11490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:14:15.888 [DEBUG] [Thread-11490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:14:15.888 [DEBUG] [Thread-11490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:14:15.888 [DEBUG] [Thread-11490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:14:15.888 [DEBUG] [Thread-11490] [transport.py] [_log()] Compression: none
2025-11-26T04:14:15.888 [DEBUG] [Thread-11490] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:14:15.944 [DEBUG] [Thread-11490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:14:15.944 [DEBUG] [Thread-11490] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:14:15.944 [DEBUG] [Thread-11490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:14:15.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:14:15.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:14:16.002 [DEBUG] [Thread-11490] [transport.py] [_log()] userauth is OK
2025-11-26T04:14:16.002 [DEBUG] [Thread-11490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:14:16.002 [DEBUG] [Thread-11490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:14:16.002 [DEBUG] [Thread-11490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:14:16.002 [DEBUG] [Thread-11490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:14:16.018 [INFO] [Thread-11490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:14:16.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:14:16.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:14:16.828 [DEBUG] [Thread-11490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:14:16.828 [DEBUG] [Thread-11490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:14:16.877 [DEBUG] [Thread-11490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:14:16.877 [DEBUG] [Thread-11490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:14:16.885 [DEBUG] [Thread-11490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:14:16.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:14:16.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:14:16.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:14:16.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:14:16.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:14:16.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:14:16.917 [DEBUG] [Thread-11490] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:14:28.408 [DEBUG] [Thread-11492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:14:30.879 [DEBUG] [Thread-11493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:14:45.912 [DEBUG] [Thread-11494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:14:46.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:14:46.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:14:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:14:47.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 14, 22), 28.29, 13.76, 0.0, 10.71, 18.84, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:14:47.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:14:22
2025-11-26T04:14:47.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:14:47.878 [DEBUG] [Thread-11495] [transport.py] [_log()] starting thread (client mode): 0x70de4610
2025-11-26T04:14:47.878 [DEBUG] [Thread-11495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:14:47.903 [DEBUG] [Thread-11495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:14:47.903 [INFO] [Thread-11495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:14:47.905 [DEBUG] [Thread-11495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:14:47.905 [DEBUG] [Thread-11495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:14:47.905 [DEBUG] [Thread-11495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:14:47.905 [DEBUG] [Thread-11495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:14:47.905 [DEBUG] [Thread-11495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:14:47.905 [DEBUG] [Thread-11495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:14:47.905 [DEBUG] [Thread-11495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] client lang: <none>
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] server lang: <none>
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] kex follows: False
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:14:47.906 [DEBUG] [Thread-11495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:14:47.907 [DEBUG] [Thread-11495] [transport.py] [_log()] Compression: none
2025-11-26T04:14:47.907 [DEBUG] [Thread-11495] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:14:47.918 [DEBUG] [Thread-11495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:14:47.919 [DEBUG] [Thread-11495] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:14:47.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:14:47.920 [DEBUG] [Thread-11495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:14:47.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:14:47.922 [DEBUG] [Thread-11495] [transport.py] [_log()] userauth is OK
2025-11-26T04:14:47.922 [DEBUG] [Thread-11495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:14:47.922 [DEBUG] [Thread-11495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:14:47.923 [DEBUG] [Thread-11495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:14:47.923 [DEBUG] [Thread-11495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:14:47.947 [INFO] [Thread-11495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:14:47.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:14:48.548 [DEBUG] [Thread-11495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:14:48.548 [DEBUG] [Thread-11495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:14:48.548 [DEBUG] [Thread-11495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:14:48.589 [DEBUG] [Thread-11495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:14:48.589 [DEBUG] [Thread-11495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:14:48.592 [DEBUG] [Thread-11495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:14:48.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:14:48.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:14:48.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:14:48.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:14:48.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:14:48.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:14:48.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:14:48.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:14:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:14:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.093498 -999.00  +19.30  10.11     18   -5.10 1 1 1 1 1     0    0 23.65 -30.22 ZNESW 10.4 10.1 58.6 12.0 19.1 -26.0 19.1 -25.4 18.8 -24.0 19.0 -25.2
2025-11-26T04:14:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:14:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:14:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.093498
2025-11-26T04:14:48.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:14:48.619 [DEBUG] [Thread-11495] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:14:48.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:14:48.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:14:48.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:14:48.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:14:48.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:14:22', tmtdew=28.29, humidity=13.76, cloud=0.0, wind=10.71, temperature=18.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:14:22', seeing=0.97, atlas_timestamp='2025-11-26T02:14:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:12:00')
2025-11-26T04:14:48.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:14:48.726 [DEBUG] [Thread-11498] [transport.py] [_log()] starting thread (client mode): 0x70d75810
2025-11-26T04:14:48.726 [DEBUG] [Thread-11498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:14:48.742 [DEBUG] [Thread-11498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:14:48.742 [INFO] [Thread-11498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:14:48.749 [DEBUG] [Thread-11498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:14:48.750 [DEBUG] [Thread-11498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:14:48.750 [DEBUG] [Thread-11498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:14:48.750 [DEBUG] [Thread-11498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:14:48.750 [DEBUG] [Thread-11498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:14:48.750 [DEBUG] [Thread-11498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:14:48.750 [DEBUG] [Thread-11498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:14:48.750 [DEBUG] [Thread-11498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:14:48.751 [DEBUG] [Thread-11498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:14:48.751 [DEBUG] [Thread-11498] [transport.py] [_log()] client lang: <none>
2025-11-26T04:14:48.751 [DEBUG] [Thread-11498] [transport.py] [_log()] server lang: <none>
2025-11-26T04:14:48.751 [DEBUG] [Thread-11498] [transport.py] [_log()] kex follows: False
2025-11-26T04:14:48.751 [DEBUG] [Thread-11498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:14:48.751 [DEBUG] [Thread-11498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:14:48.751 [DEBUG] [Thread-11498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:14:48.751 [DEBUG] [Thread-11498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:14:48.752 [DEBUG] [Thread-11498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:14:48.752 [DEBUG] [Thread-11498] [transport.py] [_log()] Compression: none
2025-11-26T04:14:48.752 [DEBUG] [Thread-11498] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:14:48.810 [DEBUG] [Thread-11498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:14:48.811 [DEBUG] [Thread-11498] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:14:48.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:14:48.812 [DEBUG] [Thread-11498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:14:48.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:14:48.875 [DEBUG] [Thread-11498] [transport.py] [_log()] userauth is OK
2025-11-26T04:14:48.875 [DEBUG] [Thread-11498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:14:48.875 [DEBUG] [Thread-11498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:14:48.875 [DEBUG] [Thread-11498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:14:48.875 [DEBUG] [Thread-11498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:14:48.897 [INFO] [Thread-11498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:14:48.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:14:48.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:14:49.694 [DEBUG] [Thread-11498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:14:49.694 [DEBUG] [Thread-11498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:14:49.743 [DEBUG] [Thread-11498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:14:49.743 [DEBUG] [Thread-11498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:14:49.752 [DEBUG] [Thread-11498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:14:49.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:14:49.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:14:49.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:14:49.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:14:49.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:14:49.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:14:49.789 [DEBUG] [Thread-11498] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:15:00.954 [DEBUG] [Thread-11500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:15:05.082 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:15:05.085 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:15:16.004 [DEBUG] [Thread-11501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:15:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:15:19.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:15:19.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:15:20.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 14, 54), 28.26, 13.79, 0.0, 9.09, 18.85, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:15:20.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:14:54
2025-11-26T04:15:20.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:15:20.737 [DEBUG] [Thread-11502] [transport.py] [_log()] starting thread (client mode): 0x70d01e10
2025-11-26T04:15:20.737 [DEBUG] [Thread-11502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:15:20.759 [DEBUG] [Thread-11502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:15:20.759 [INFO] [Thread-11502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:15:20.762 [DEBUG] [Thread-11502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] client lang: <none>
2025-11-26T04:15:20.763 [DEBUG] [Thread-11502] [transport.py] [_log()] server lang: <none>
2025-11-26T04:15:20.764 [DEBUG] [Thread-11502] [transport.py] [_log()] kex follows: False
2025-11-26T04:15:20.764 [DEBUG] [Thread-11502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:15:20.764 [DEBUG] [Thread-11502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:15:20.764 [DEBUG] [Thread-11502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:15:20.764 [DEBUG] [Thread-11502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:15:20.764 [DEBUG] [Thread-11502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:15:20.764 [DEBUG] [Thread-11502] [transport.py] [_log()] Compression: none
2025-11-26T04:15:20.764 [DEBUG] [Thread-11502] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:15:20.784 [DEBUG] [Thread-11502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:15:20.785 [DEBUG] [Thread-11502] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:15:20.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:15:20.786 [DEBUG] [Thread-11502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:15:20.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:15:20.788 [DEBUG] [Thread-11502] [transport.py] [_log()] userauth is OK
2025-11-26T04:15:20.788 [DEBUG] [Thread-11502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:15:20.788 [DEBUG] [Thread-11502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:15:20.789 [DEBUG] [Thread-11502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:15:20.789 [DEBUG] [Thread-11502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:15:20.813 [INFO] [Thread-11502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:15:20.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:15:21.438 [DEBUG] [Thread-11502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:15:21.438 [DEBUG] [Thread-11502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:15:21.438 [DEBUG] [Thread-11502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:15:21.479 [DEBUG] [Thread-11502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:15:21.479 [DEBUG] [Thread-11502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:15:21.482 [DEBUG] [Thread-11502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:15:21.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:15:21.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:15:21.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:15:21.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:15:21.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:15:21.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:15:21.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:15:21.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:15:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:15:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.093845 -999.00  +19.20  11.99     18   -5.10 1 1 1 1 1     0    0 24.35 -32.38 ZNESW 11.6 12.0 62.4 12.6 19.1 -26.0 19.1 -25.3 18.8 -24.1 19.0 -25.2
2025-11-26T04:15:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:15:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:15:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.093845
2025-11-26T04:15:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:15:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:15:21.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:15:21.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:15:21.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:15:21.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:14:54', tmtdew=28.26, humidity=13.79, cloud=0.0, wind=9.09, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:14:54', seeing=0.97, atlas_timestamp='2025-11-26T02:15:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:12:00')
2025-11-26T04:15:21.510 [DEBUG] [Thread-11502] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:15:21.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:15:21.595 [DEBUG] [Thread-11505] [transport.py] [_log()] starting thread (client mode): 0x70d772e0
2025-11-26T04:15:21.595 [DEBUG] [Thread-11505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:15:21.610 [DEBUG] [Thread-11505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:15:21.610 [INFO] [Thread-11505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:15:21.618 [DEBUG] [Thread-11505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:15:21.618 [DEBUG] [Thread-11505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:15:21.618 [DEBUG] [Thread-11505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:15:21.618 [DEBUG] [Thread-11505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:15:21.618 [DEBUG] [Thread-11505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:15:21.618 [DEBUG] [Thread-11505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:15:21.618 [DEBUG] [Thread-11505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:15:21.618 [DEBUG] [Thread-11505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] client lang: <none>
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] server lang: <none>
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] kex follows: False
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] Compression: none
2025-11-26T04:15:21.619 [DEBUG] [Thread-11505] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:15:21.677 [DEBUG] [Thread-11505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:15:21.678 [DEBUG] [Thread-11505] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:15:21.678 [DEBUG] [Thread-11505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:15:21.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:15:21.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:15:21.733 [DEBUG] [Thread-11505] [transport.py] [_log()] userauth is OK
2025-11-26T04:15:21.734 [DEBUG] [Thread-11505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:15:21.734 [DEBUG] [Thread-11505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:15:21.734 [DEBUG] [Thread-11505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:15:21.734 [DEBUG] [Thread-11505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:15:21.753 [INFO] [Thread-11505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:15:21.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:15:21.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:15:22.557 [DEBUG] [Thread-11505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:15:22.557 [DEBUG] [Thread-11505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:15:22.605 [DEBUG] [Thread-11505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:15:22.605 [DEBUG] [Thread-11505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:15:22.614 [DEBUG] [Thread-11505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:15:22.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:15: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')
2025-11-26T04:15:22.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:15:22.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:15:22.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:15:22.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:15:22.649 [DEBUG] [Thread-11505] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:15:28.491 [DEBUG] [Thread-11507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:15:31.036 [DEBUG] [Thread-11508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:15:46.085 [DEBUG] [Thread-11509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:15:52.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:15:52.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:15:52.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
2025-11-26T04:15:53.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 15, 26), 28.32, 13.71, 0.0, 9.51, 18.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:15:53.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:15:26
2025-11-26T04:15:53.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:15:53.584 [DEBUG] [Thread-11510] [transport.py] [_log()] starting thread (client mode): 0x70d01420
2025-11-26T04:15:53.584 [DEBUG] [Thread-11510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:15:53.604 [DEBUG] [Thread-11510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:15:53.604 [INFO] [Thread-11510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] client lang: <none>
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] server lang: <none>
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] kex follows: False
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:15:53.607 [DEBUG] [Thread-11510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:15:53.608 [DEBUG] [Thread-11510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:15:53.608 [DEBUG] [Thread-11510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:15:53.608 [DEBUG] [Thread-11510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:15:53.608 [DEBUG] [Thread-11510] [transport.py] [_log()] Compression: none
2025-11-26T04:15:53.608 [DEBUG] [Thread-11510] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:15:53.626 [DEBUG] [Thread-11510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:15:53.626 [DEBUG] [Thread-11510] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:15:53.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:15:53.627 [DEBUG] [Thread-11510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:15:53.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:15:53.629 [DEBUG] [Thread-11510] [transport.py] [_log()] userauth is OK
2025-11-26T04:15:53.629 [DEBUG] [Thread-11510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:15:53.629 [DEBUG] [Thread-11510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:15:53.629 [DEBUG] [Thread-11510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:15:53.629 [DEBUG] [Thread-11510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:15:53.653 [INFO] [Thread-11510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:15:53.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:15:54.295 [DEBUG] [Thread-11510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:15:54.295 [DEBUG] [Thread-11510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:15:54.296 [DEBUG] [Thread-11510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:15:54.337 [DEBUG] [Thread-11510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:15:54.337 [DEBUG] [Thread-11510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:15:54.340 [DEBUG] [Thread-11510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:15:54.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:15:54.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:15:54.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:15:54.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:15:54.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:15:54.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:15:54.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:15:54.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:15:54.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:15:54.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.093845 -999.00  +19.20  11.99     18   -5.10 1 1 1 1 1     0    0 24.35 -32.38 ZNESW 11.6 12.0 62.4 12.6 19.1 -26.0 19.1 -25.3 18.8 -24.1 19.0 -25.2
2025-11-26T04:15:54.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:15:54.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:15:54.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.093845
2025-11-26T04:15:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:15:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:15:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:15:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:15:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:15:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:15:26', tmtdew=28.32, humidity=13.71, cloud=0.0, wind=9.51, temperature=18.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:15:26', seeing=0.96, atlas_timestamp='2025-11-26T02:15:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:12:00')
2025-11-26T04:15:54.367 [DEBUG] [Thread-11510] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:15:54.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:15:54.464 [DEBUG] [Thread-11513] [transport.py] [_log()] starting thread (client mode): 0x70d01f30
2025-11-26T04:15:54.464 [DEBUG] [Thread-11513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:15:54.479 [DEBUG] [Thread-11513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:15:54.479 [INFO] [Thread-11513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:15:54.486 [DEBUG] [Thread-11513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] client lang: <none>
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] server lang: <none>
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] kex follows: False
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] Compression: none
2025-11-26T04:15:54.487 [DEBUG] [Thread-11513] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:15:54.545 [DEBUG] [Thread-11513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:15:54.545 [DEBUG] [Thread-11513] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:15:54.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:15:54.547 [DEBUG] [Thread-11513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:15:54.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:15:54.601 [DEBUG] [Thread-11513] [transport.py] [_log()] userauth is OK
2025-11-26T04:15:54.601 [DEBUG] [Thread-11513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:15:54.601 [DEBUG] [Thread-11513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:15:54.601 [DEBUG] [Thread-11513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:15:54.601 [DEBUG] [Thread-11513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:15:54.621 [INFO] [Thread-11513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:15:54.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:15:54.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:15:55.436 [DEBUG] [Thread-11513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:15:55.436 [DEBUG] [Thread-11513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:15:55.485 [DEBUG] [Thread-11513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:15:55.485 [DEBUG] [Thread-11513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:15:55.495 [DEBUG] [Thread-11513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:15:55.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:15:55.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:15:55.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:15:55.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:15:55.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:15:55.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:15:55.531 [DEBUG] [Thread-11513] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:16:01.122 [DEBUG] [Thread-11515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:16:05.287 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:16:05.288 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:16:16.174 [DEBUG] [Thread-11516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:16:25.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:16:25.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:16:25.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:16:26.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 15, 58), 28.31, 13.77, 0.0, 11.13, 18.8, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:16:26.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:15:58
2025-11-26T04:16:26.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:16:26.479 [DEBUG] [Thread-11517] [transport.py] [_log()] starting thread (client mode): 0x70df8f70
2025-11-26T04:16:26.479 [DEBUG] [Thread-11517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:16:26.499 [DEBUG] [Thread-11517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:16:26.500 [INFO] [Thread-11517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] client lang: <none>
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] server lang: <none>
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] kex follows: False
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] Compression: none
2025-11-26T04:16:26.501 [DEBUG] [Thread-11517] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:16:26.519 [DEBUG] [Thread-11517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:16:26.520 [DEBUG] [Thread-11517] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:16:26.521 [DEBUG] [Thread-11517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:16:26.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:16:26.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:16:26.522 [DEBUG] [Thread-11517] [transport.py] [_log()] userauth is OK
2025-11-26T04:16:26.523 [DEBUG] [Thread-11517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:16:26.523 [DEBUG] [Thread-11517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:16:26.523 [DEBUG] [Thread-11517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:16:26.523 [DEBUG] [Thread-11517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:16:26.543 [INFO] [Thread-11517] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:16:26.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:16:27.363 [DEBUG] [Thread-11517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:16:27.363 [DEBUG] [Thread-11517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:16:27.363 [DEBUG] [Thread-11517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:16:27.405 [DEBUG] [Thread-11517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:16:27.405 [DEBUG] [Thread-11517] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:16:27.408 [DEBUG] [Thread-11517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:16:27.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:16:27.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:16:27.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:16:27.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:16:27.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:16:27.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:16:27.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:16:27.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:16:27.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:16:27.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.094192 -999.00  +19.30  12.72     18   -5.00 1 1 1 1 1     0    0 23.62 -32.91 ZNESW 11.0 12.7 62.2 13.8 19.1 -25.9 19.1 -25.4 18.8 -24.0 19.0 -25.0
2025-11-26T04:16:27.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:16:27.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:16:27.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.094192
2025-11-26T04:16:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:16:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:16:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:16:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:16:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:16:27.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:15:58', tmtdew=28.31, humidity=13.77, cloud=0.0, wind=11.13, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:15:58', seeing=0.92, atlas_timestamp='2025-11-26T02:15:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:12:00')
2025-11-26T04:16:27.435 [DEBUG] [Thread-11517] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:16:27.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:16:27.533 [DEBUG] [Thread-11520] [transport.py] [_log()] starting thread (client mode): 0x70df96c0
2025-11-26T04:16:27.533 [DEBUG] [Thread-11520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:16:27.548 [DEBUG] [Thread-11520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:16:27.549 [INFO] [Thread-11520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:16:27.556 [DEBUG] [Thread-11520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:16:27.556 [DEBUG] [Thread-11520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:16:27.556 [DEBUG] [Thread-11520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:16:27.556 [DEBUG] [Thread-11520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:16:27.556 [DEBUG] [Thread-11520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:16:27.556 [DEBUG] [Thread-11520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] client lang: <none>
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] server lang: <none>
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] kex follows: False
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] Compression: none
2025-11-26T04:16:27.557 [DEBUG] [Thread-11520] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:16:27.617 [DEBUG] [Thread-11520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:16:27.617 [DEBUG] [Thread-11520] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:16:27.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:16:27.618 [DEBUG] [Thread-11520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:16:27.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:16:27.673 [DEBUG] [Thread-11520] [transport.py] [_log()] userauth is OK
2025-11-26T04:16:27.674 [DEBUG] [Thread-11520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:16:27.674 [DEBUG] [Thread-11520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:16:27.674 [DEBUG] [Thread-11520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:16:27.674 [DEBUG] [Thread-11520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:16:27.693 [INFO] [Thread-11520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:16:27.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:16:27.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:16:28.553 [DEBUG] [Thread-11522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:16:28.614 [DEBUG] [Thread-11520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:16:28.614 [DEBUG] [Thread-11520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:16:28.662 [DEBUG] [Thread-11520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:16:28.662 [DEBUG] [Thread-11520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:16:28.671 [DEBUG] [Thread-11520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:16:28.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:16:28.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:16:28.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:16:28.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:16:28.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:16:28.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:16:28.708 [DEBUG] [Thread-11520] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:16:31.211 [DEBUG] [Thread-11523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:16:46.248 [DEBUG] [Thread-11524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:16:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:16:58.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:16:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:16:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 16, 30), 28.27, 13.82, 0.0, 10.94, 18.8, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:16:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:16:30
2025-11-26T04:16:59.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:16:59.646 [DEBUG] [Thread-11525] [transport.py] [_log()] starting thread (client mode): 0x70d00e20
2025-11-26T04:16:59.647 [DEBUG] [Thread-11525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:16:59.666 [DEBUG] [Thread-11525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:16:59.666 [INFO] [Thread-11525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] client lang: <none>
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] server lang: <none>
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] kex follows: False
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:16:59.669 [DEBUG] [Thread-11525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:16:59.670 [DEBUG] [Thread-11525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:16:59.670 [DEBUG] [Thread-11525] [transport.py] [_log()] Compression: none
2025-11-26T04:16:59.670 [DEBUG] [Thread-11525] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:16:59.686 [DEBUG] [Thread-11525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:16:59.686 [DEBUG] [Thread-11525] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:16:59.687 [DEBUG] [Thread-11525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:16:59.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:16:59.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:16:59.689 [DEBUG] [Thread-11525] [transport.py] [_log()] userauth is OK
2025-11-26T04:16:59.689 [DEBUG] [Thread-11525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:16:59.689 [DEBUG] [Thread-11525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:16:59.689 [DEBUG] [Thread-11525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:16:59.690 [DEBUG] [Thread-11525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:16:59.712 [INFO] [Thread-11525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:16:59.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:17:00.359 [DEBUG] [Thread-11525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:17:00.359 [DEBUG] [Thread-11525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:17:00.360 [DEBUG] [Thread-11525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:17:00.401 [DEBUG] [Thread-11525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:17:00.401 [DEBUG] [Thread-11525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:17:00.404 [DEBUG] [Thread-11525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:17:00.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:17:00.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:17:00.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:17:00.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:17:00.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:17:00.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:17:00.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:17:00.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:17:00.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.094539 -999.00  +19.30  11.54     18   -5.00 1 1 1 1 1     0    0 23.30 -31.27 ZNESW 11.9 11.5 69.4 12.8 19.1 -25.9 19.1 -25.3 18.8 -23.9 19.0 -25.0
2025-11-26T04:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.094539
2025-11-26T04:17:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:17:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:17:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:17:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:17:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:17:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:16:30', tmtdew=28.27, humidity=13.82, cloud=0.0, wind=10.94, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:16:30', seeing=1.05, atlas_timestamp='2025-11-26T02:16:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.021749999999999048, -0.01574999999999882, -0.027499999999999858, -0.015000000000000568, 0.022250000000001435, 0.0009999999999994458, -0.013749999999999929, 0.02499999999999858, -0.036999999999999034, -0.045249999999999346, -0.002000000000000668, 0.05249999999999844, 0.04124999999999979, -0.012000000000000455, -0.0035000000000007248, 0.031749999999998835, 0.028499999999999304, -0.016000000000000014, -0.03175000000000061, 0.010999999999999233, 0.040749999999999176, 0.0012500000000006395, -0.03625000000000078, -0.02800000000000047, 0.0035000000000007248, -0.023249999999999105, 0.0235000000000003, 0.20500000000000007, 0.1095000000000006, 0.045000000000001705, 0.019000000000000128, 0.01974999999999838], zp_timestamp='2025-11-26T02:12:00')
2025-11-26T04:17:00.431 [DEBUG] [Thread-11525] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:17:00.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:17:00.526 [DEBUG] [Thread-11528] [transport.py] [_log()] starting thread (client mode): 0x70d00ac0
2025-11-26T04:17:00.526 [DEBUG] [Thread-11528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:17:00.541 [DEBUG] [Thread-11528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:17:00.541 [INFO] [Thread-11528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:17:00.548 [DEBUG] [Thread-11528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:17:00.548 [DEBUG] [Thread-11528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] client lang: <none>
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] server lang: <none>
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] kex follows: False
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:17:00.549 [DEBUG] [Thread-11528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:17:00.550 [DEBUG] [Thread-11528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:17:00.550 [DEBUG] [Thread-11528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:17:00.550 [DEBUG] [Thread-11528] [transport.py] [_log()] Compression: none
2025-11-26T04:17:00.550 [DEBUG] [Thread-11528] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:17:00.609 [DEBUG] [Thread-11528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:17:00.609 [DEBUG] [Thread-11528] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:17:00.610 [DEBUG] [Thread-11528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:17:00.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:17:00.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:17:00.665 [DEBUG] [Thread-11528] [transport.py] [_log()] userauth is OK
2025-11-26T04:17:00.665 [DEBUG] [Thread-11528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:17:00.665 [DEBUG] [Thread-11528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:17:00.665 [DEBUG] [Thread-11528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:17:00.665 [DEBUG] [Thread-11528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:17:00.684 [INFO] [Thread-11528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:17:00.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:17:00.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:17:01.283 [DEBUG] [Thread-11530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:17:01.525 [DEBUG] [Thread-11528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:17:01.526 [DEBUG] [Thread-11528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:17:01.574 [DEBUG] [Thread-11528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:17:01.574 [DEBUG] [Thread-11528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:17:01.583 [DEBUG] [Thread-11528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:17:01.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:17:01.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:17:01.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:17:01.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:17:01.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:17:01.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:17:01.620 [DEBUG] [Thread-11528] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:17:05.496 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:17:05.497 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:17:16.336 [DEBUG] [Thread-11531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:17:28.616 [DEBUG] [Thread-11532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:17:31.370 [DEBUG] [Thread-11533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:17:31.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:17:31.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:17:31.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:17:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 17, 2), 28.25, 13.84, 0.0, 11.65, 18.77, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:17:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:17:02
2025-11-26T04:17:32.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:17:32.589 [DEBUG] [Thread-11534] [transport.py] [_log()] starting thread (client mode): 0x70d29b70
2025-11-26T04:17:32.589 [DEBUG] [Thread-11534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:17:32.610 [DEBUG] [Thread-11534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:17:32.610 [INFO] [Thread-11534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] client lang: <none>
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] server lang: <none>
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] kex follows: False
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:17:32.613 [DEBUG] [Thread-11534] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:17:32.614 [DEBUG] [Thread-11534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:17:32.614 [DEBUG] [Thread-11534] [transport.py] [_log()] Compression: none
2025-11-26T04:17:32.614 [DEBUG] [Thread-11534] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:17:32.633 [DEBUG] [Thread-11534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:17:32.634 [DEBUG] [Thread-11534] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:17:32.634 [DEBUG] [Thread-11534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:17:32.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:17:32.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:17:32.636 [DEBUG] [Thread-11534] [transport.py] [_log()] userauth is OK
2025-11-26T04:17:32.637 [DEBUG] [Thread-11534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:17:32.637 [DEBUG] [Thread-11534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:17:32.637 [DEBUG] [Thread-11534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:17:32.637 [DEBUG] [Thread-11534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:17:32.661 [INFO] [Thread-11534] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:17:32.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:17:33.463 [DEBUG] [Thread-11534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:17:33.464 [DEBUG] [Thread-11534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:17:33.464 [DEBUG] [Thread-11534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:17:33.505 [DEBUG] [Thread-11534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:17:33.505 [DEBUG] [Thread-11534] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:17:33.508 [DEBUG] [Thread-11534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:17:33.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:17:33.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:17:33.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:17:33.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:17:33.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:17:33.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:17:33.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:17:33.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:17:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:17:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.094887 -999.00  +19.40   8.08     18   -5.00 1 1 1 1 1     0    0 23.97 -32.35 ZNESW 8.2 8.1 56.4 12.7 19.1 -25.6 19.1 -25.3 18.8 -23.9 19.0 -25.0
2025-11-26T04:17:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:17:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:17:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.094887
2025-11-26T04:17:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:17:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:17:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:17:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:17:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:17:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:17:02', tmtdew=28.25, humidity=13.84, cloud=0.0, wind=11.65, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:17:02', seeing=1.47, atlas_timestamp='2025-11-26T02:16:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.04974999999999952, 0.0032500000000013074, 0.006499999999999062, 0.029500000000000526, 0.07225000000000037, -0.0129999999999999, -0.02674999999999983, -0.014499999999999957, 0.02800000000000047, -0.08624999999999972, 0.002000000000000668, 0.0649999999999995, 0.07824999999999882, 0.015499999999999403, -0.014000000000001123, 0.03524999999999956, 0.057000000000000384, -0.009999999999999787, 0.05524999999999913, 0.0484999999999971, 0.05874999999999808, 0.009250000000001535, 0.027749999999999275, 0.016999999999997684, 0.03550000000000075, 0.0027500000000006963, 0.10350000000000037, 0.20050000000000168, 0.12250000000000227, 0.05200000000000138, 0.08900000000000041, 0.005749999999999034], zp_timestamp='2025-11-26T02:16:00')
2025-11-26T04:17:33.534 [DEBUG] [Thread-11534] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:17:33.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:17:33.629 [DEBUG] [Thread-11537] [transport.py] [_log()] starting thread (client mode): 0x70d28f70
2025-11-26T04:17:33.629 [DEBUG] [Thread-11537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:17:33.643 [DEBUG] [Thread-11537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:17:33.644 [INFO] [Thread-11537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:17:33.651 [DEBUG] [Thread-11537] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:17:33.651 [DEBUG] [Thread-11537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:17:33.651 [DEBUG] [Thread-11537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:17:33.651 [DEBUG] [Thread-11537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] client lang: <none>
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] server lang: <none>
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] kex follows: False
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] Compression: none
2025-11-26T04:17:33.652 [DEBUG] [Thread-11537] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:17:33.708 [DEBUG] [Thread-11537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:17:33.708 [DEBUG] [Thread-11537] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:17:33.709 [DEBUG] [Thread-11537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:17:33.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:17:33.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:17:33.764 [DEBUG] [Thread-11537] [transport.py] [_log()] userauth is OK
2025-11-26T04:17:33.765 [DEBUG] [Thread-11537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:17:33.765 [DEBUG] [Thread-11537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:17:33.765 [DEBUG] [Thread-11537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:17:33.765 [DEBUG] [Thread-11537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:17:33.784 [INFO] [Thread-11537] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:17:33.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:17:33.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:17:34.590 [DEBUG] [Thread-11537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:17:34.590 [DEBUG] [Thread-11537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:17:34.638 [DEBUG] [Thread-11537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:17:34.638 [DEBUG] [Thread-11537] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:17:34.647 [DEBUG] [Thread-11537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:17:34.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:17:34.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:17:34.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:17:34.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:17:34.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:17:34.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:17:34.679 [DEBUG] [Thread-11537] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:17:46.400 [DEBUG] [Thread-11539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:01.458 [DEBUG] [Thread-11540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:04.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:18:04.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:18:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:18:05.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 17, 34), 28.3, 13.84, 0.0, 11.08, 18.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:18:05.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:17:34
2025-11-26T04:18:05.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:18:05.624 [DEBUG] [Thread-11541] [transport.py] [_log()] starting thread (client mode): 0x70d2b970
2025-11-26T04:18:05.624 [DEBUG] [Thread-11541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:18:05.644 [DEBUG] [Thread-11541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:18:05.645 [INFO] [Thread-11541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:18:05.647 [DEBUG] [Thread-11541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:18:05.647 [DEBUG] [Thread-11541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] client lang: <none>
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] server lang: <none>
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] kex follows: False
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] Compression: none
2025-11-26T04:18:05.648 [DEBUG] [Thread-11541] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:18:05.665 [DEBUG] [Thread-11541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:18:05.666 [DEBUG] [Thread-11541] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:18:05.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:18:05.667 [DEBUG] [Thread-11541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:18:05.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:18:05.669 [DEBUG] [Thread-11541] [transport.py] [_log()] userauth is OK
2025-11-26T04:18:05.669 [DEBUG] [Thread-11541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:18:05.669 [DEBUG] [Thread-11541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:18:05.669 [DEBUG] [Thread-11541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:18:05.669 [DEBUG] [Thread-11541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:18:05.695 [INFO] [Thread-11541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:18:05.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:18:05.699 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:05.702 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:06.353 [DEBUG] [Thread-11541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:18:06.353 [DEBUG] [Thread-11541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:18:06.354 [DEBUG] [Thread-11541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:18:06.394 [DEBUG] [Thread-11541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:18:06.394 [DEBUG] [Thread-11541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:18:06.398 [DEBUG] [Thread-11541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:18:06.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:18:06.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:18:06.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:18:06.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:18:06.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:18:06.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:18:06.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:18:06.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:18:06.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:18:06.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.095581 -999.00  +19.40  10.70     18   -5.10 1 1 1 1 1     0    0 23.87 -27.17 ZNESW 11.2 10.7 66.8 12.7 19.1 -26.0 19.1 -25.1 18.8 -23.9 19.0 -25.1
2025-11-26T04:18:06.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:18:06.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:18:06.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.095581
2025-11-26T04:18:06.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:18:06.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:18:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:18:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:18:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:18:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:17:34', tmtdew=28.3, humidity=13.84, cloud=0.0, wind=11.08, temperature=18.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:17:34', seeing=1.47, atlas_timestamp='2025-11-26T02:17:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.04974999999999952, 0.0032500000000013074, 0.006499999999999062, 0.029500000000000526, 0.07225000000000037, -0.0129999999999999, -0.02674999999999983, -0.014499999999999957, 0.02800000000000047, -0.08624999999999972, 0.002000000000000668, 0.0649999999999995, 0.07824999999999882, 0.015499999999999403, -0.014000000000001123, 0.03524999999999956, 0.057000000000000384, -0.009999999999999787, 0.05524999999999913, 0.0484999999999971, 0.05874999999999808, 0.009250000000001535, 0.027749999999999275, 0.016999999999997684, 0.03550000000000075, 0.0027500000000006963, 0.10350000000000037, 0.20050000000000168, 0.12250000000000227, 0.05200000000000138, 0.08900000000000041, 0.005749999999999034], zp_timestamp='2025-11-26T02:16:00')
2025-11-26T04:18:06.425 [DEBUG] [Thread-11541] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:18:06.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:18:06.521 [DEBUG] [Thread-11544] [transport.py] [_log()] starting thread (client mode): 0x70d77c10
2025-11-26T04:18:06.521 [DEBUG] [Thread-11544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:18:06.535 [DEBUG] [Thread-11544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:18:06.535 [INFO] [Thread-11544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] client lang: <none>
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] server lang: <none>
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] kex follows: False
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] Compression: none
2025-11-26T04:18:06.543 [DEBUG] [Thread-11544] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:18:06.597 [DEBUG] [Thread-11544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:18:06.597 [DEBUG] [Thread-11544] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:18:06.598 [DEBUG] [Thread-11544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:18:06.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:18:06.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:18:06.655 [DEBUG] [Thread-11544] [transport.py] [_log()] userauth is OK
2025-11-26T04:18:06.655 [DEBUG] [Thread-11544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:18:06.655 [DEBUG] [Thread-11544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:18:06.655 [DEBUG] [Thread-11544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:18:06.655 [DEBUG] [Thread-11544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:18:06.669 [INFO] [Thread-11544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:18:06.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:18:06.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:18:07.441 [DEBUG] [Thread-11544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:18:07.441 [DEBUG] [Thread-11544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:18:07.489 [DEBUG] [Thread-11544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:18:07.489 [DEBUG] [Thread-11544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:18:07.498 [DEBUG] [Thread-11544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:18:07.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:18:07.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:18:07.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:18:07.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:18:07.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:18:07.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:18:07.529 [DEBUG] [Thread-11544] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:18:16.491 [DEBUG] [Thread-11546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:23.128 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:28.694 [DEBUG] [Thread-11547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:31.543 [DEBUG] [Thread-11548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:34.877 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:37.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:18:37.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:18:37.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:18:38.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 18, 6), 28.3, 13.84, 0.0, 10.85, 18.85, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:18:38.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:18:06
2025-11-26T04:18:38.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:18:38.517 [DEBUG] [Thread-11549] [transport.py] [_log()] starting thread (client mode): 0x70d287c0
2025-11-26T04:18:38.517 [DEBUG] [Thread-11549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:18:38.537 [DEBUG] [Thread-11549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:18:38.538 [INFO] [Thread-11549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] client lang: <none>
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] server lang: <none>
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] kex follows: False
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] Compression: none
2025-11-26T04:18:38.541 [DEBUG] [Thread-11549] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:18:38.559 [DEBUG] [Thread-11549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:18:38.560 [DEBUG] [Thread-11549] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:18:38.560 [DEBUG] [Thread-11549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:18:38.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:18:38.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:18:38.561 [DEBUG] [Thread-11549] [transport.py] [_log()] userauth is OK
2025-11-26T04:18:38.561 [DEBUG] [Thread-11549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:18:38.561 [DEBUG] [Thread-11549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:18:38.561 [DEBUG] [Thread-11549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:18:38.561 [DEBUG] [Thread-11549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:18:38.572 [INFO] [Thread-11549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:18:38.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:18:38.989 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:18:39.202 [DEBUG] [Thread-11549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:18:39.202 [DEBUG] [Thread-11549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:18:39.202 [DEBUG] [Thread-11549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:18:39.243 [DEBUG] [Thread-11549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:18:39.243 [DEBUG] [Thread-11549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:18:39.245 [DEBUG] [Thread-11549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:18:39.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:18:39.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:18:39.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:18:39.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:18:39.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:18:39.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:18:39.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.095928 -999.00  +19.30  11.71     18   -5.10 1 1 1 1 1     0    0 23.35 -27.66 ZNESW 11.3 11.7 64.0 12.1 19.1 -26.0 19.0 -25.3 18.7 -24.0 19.0 -24.9
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.095928
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:18:39.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:18:06', tmtdew=28.3, humidity=13.84, cloud=0.0, wind=10.85, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:18:06', seeing=1.06, atlas_timestamp='2025-11-26T02:18:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.04974999999999952, 0.0032500000000013074, 0.006499999999999062, 0.029500000000000526, 0.07225000000000037, -0.0129999999999999, -0.02674999999999983, -0.014499999999999957, 0.02800000000000047, -0.08624999999999972, 0.002000000000000668, 0.0649999999999995, 0.07824999999999882, 0.015499999999999403, -0.014000000000001123, 0.03524999999999956, 0.057000000000000384, -0.009999999999999787, 0.05524999999999913, 0.0484999999999971, 0.05874999999999808, 0.009250000000001535, 0.027749999999999275, 0.016999999999997684, 0.03550000000000075, 0.0027500000000006963, 0.10350000000000037, 0.20050000000000168, 0.12250000000000227, 0.05200000000000138, 0.08900000000000041, 0.005749999999999034], zp_timestamp='2025-11-26T02:16:00')
2025-11-26T04:18:39.264 [DEBUG] [Thread-11549] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:18:39.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:18:39.350 [DEBUG] [Thread-11552] [transport.py] [_log()] starting thread (client mode): 0x70d00610
2025-11-26T04:18:39.350 [DEBUG] [Thread-11552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:18:39.365 [DEBUG] [Thread-11552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:18:39.365 [INFO] [Thread-11552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] client lang: <none>
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] server lang: <none>
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] kex follows: False
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] Compression: none
2025-11-26T04:18:39.373 [DEBUG] [Thread-11552] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:18:39.430 [DEBUG] [Thread-11552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:18:39.430 [DEBUG] [Thread-11552] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:18:39.430 [DEBUG] [Thread-11552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:18:39.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:18:39.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:18:39.487 [DEBUG] [Thread-11552] [transport.py] [_log()] userauth is OK
2025-11-26T04:18:39.487 [DEBUG] [Thread-11552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:18:39.487 [DEBUG] [Thread-11552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:18:39.487 [DEBUG] [Thread-11552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:18:39.487 [DEBUG] [Thread-11552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:18:39.502 [INFO] [Thread-11552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:18:39.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:18:39.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:18:40.271 [DEBUG] [Thread-11552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:18:40.272 [DEBUG] [Thread-11552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:18:40.319 [DEBUG] [Thread-11552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:18:40.319 [DEBUG] [Thread-11552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:18:40.327 [DEBUG] [Thread-11552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:18:40.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:18:40.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:18:40.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:18:40.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:18:40.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:18:40.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:18:40.359 [DEBUG] [Thread-11552] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:18:46.576 [DEBUG] [Thread-11554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:19:01.632 [DEBUG] [Thread-11555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:19:05.906 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:19:05.907 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:19:10.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:19:10.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:19:10.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:19:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 18, 38), 28.28, 13.86, 0.0, 10.85, 18.8, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:19:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:18:38
2025-11-26T04:19:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:19:11.360 [DEBUG] [Thread-11556] [transport.py] [_log()] starting thread (client mode): 0x70d28460
2025-11-26T04:19:11.360 [DEBUG] [Thread-11556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:19:11.381 [DEBUG] [Thread-11556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:19:11.381 [INFO] [Thread-11556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] client lang: <none>
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] server lang: <none>
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] kex follows: False
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] Compression: none
2025-11-26T04:19:11.384 [DEBUG] [Thread-11556] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:19:11.401 [DEBUG] [Thread-11556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:19:11.401 [DEBUG] [Thread-11556] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:19:11.401 [DEBUG] [Thread-11556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:19:11.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:19:11.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:19:11.401 [DEBUG] [Thread-11556] [transport.py] [_log()] userauth is OK
2025-11-26T04:19:11.401 [DEBUG] [Thread-11556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:19:11.401 [DEBUG] [Thread-11556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:19:11.401 [DEBUG] [Thread-11556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:19:11.402 [DEBUG] [Thread-11556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:19:11.411 [INFO] [Thread-11556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:19:11.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:19:12.016 [DEBUG] [Thread-11556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:19:12.016 [DEBUG] [Thread-11556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:19:12.016 [DEBUG] [Thread-11556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:19:12.057 [DEBUG] [Thread-11556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:19:12.057 [DEBUG] [Thread-11556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:19:12.060 [DEBUG] [Thread-11556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:19:12.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:19:12.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:19:12.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:19:12.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:19:12.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:19:12.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:19:12.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:19:12.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:19:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:19:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.096276 -999.00  +19.30  11.29     18   -5.10 1 1 1 1 1     0    0 24.03 -27.63 ZNESW 11.2 11.3 68.6 12.4 19.1 -25.8 19.0 -25.2 18.7 -24.0 -999.0 -999.0
2025-11-26T04:19:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:19:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:19:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.096276
2025-11-26T04:19:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:19:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:19:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:19:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:19:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:19:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:18:38', tmtdew=28.28, humidity=13.86, cloud=0.0, wind=10.85, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:18:38', seeing=1.06, atlas_timestamp='2025-11-26T02:18:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.04974999999999952, 0.0032500000000013074, 0.006499999999999062, 0.029500000000000526, 0.07225000000000037, -0.0129999999999999, -0.02674999999999983, -0.014499999999999957, 0.02800000000000047, -0.08624999999999972, 0.002000000000000668, 0.0649999999999995, 0.07824999999999882, 0.015499999999999403, -0.014000000000001123, 0.03524999999999956, 0.057000000000000384, -0.009999999999999787, 0.05524999999999913, 0.0484999999999971, 0.05874999999999808, 0.009250000000001535, 0.027749999999999275, 0.016999999999997684, 0.03550000000000075, 0.0027500000000006963, 0.10350000000000037, 0.20050000000000168, 0.12250000000000227, 0.05200000000000138, 0.08900000000000041, 0.005749999999999034], zp_timestamp='2025-11-26T02:16:00')
2025-11-26T04:19:12.077 [DEBUG] [Thread-11556] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:19:12.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:19:12.163 [DEBUG] [Thread-11559] [transport.py] [_log()] starting thread (client mode): 0x70d03f70
2025-11-26T04:19:12.163 [DEBUG] [Thread-11559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:19:12.177 [DEBUG] [Thread-11559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:19:12.177 [INFO] [Thread-11559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:19:12.184 [DEBUG] [Thread-11559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:19:12.184 [DEBUG] [Thread-11559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] client lang: <none>
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] server lang: <none>
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] kex follows: False
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] Compression: none
2025-11-26T04:19:12.185 [DEBUG] [Thread-11559] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:19:12.241 [DEBUG] [Thread-11559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:19:12.241 [DEBUG] [Thread-11559] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:19:12.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:19:12.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:19:12.242 [DEBUG] [Thread-11559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:19:12.299 [DEBUG] [Thread-11559] [transport.py] [_log()] userauth is OK
2025-11-26T04:19:12.299 [DEBUG] [Thread-11559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:19:12.299 [DEBUG] [Thread-11559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:19:12.299 [DEBUG] [Thread-11559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:19:12.299 [DEBUG] [Thread-11559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:19:12.316 [INFO] [Thread-11559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:19:12.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:19:12.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:19:13.140 [DEBUG] [Thread-11559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:19:13.140 [DEBUG] [Thread-11559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:19:13.188 [DEBUG] [Thread-11559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:19:13.188 [DEBUG] [Thread-11559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:19:13.197 [DEBUG] [Thread-11559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:19:13.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:19:13.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:19:13.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:19:13.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:19:13.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:19:13.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:19:13.231 [DEBUG] [Thread-11559] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:19:16.666 [DEBUG] [Thread-11561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:19:28.763 [DEBUG] [Thread-11562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:19:31.709 [DEBUG] [Thread-11563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:19:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:19:43.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:19:43.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:19:43.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 19, 10), 28.28, 13.86, 0.0, 10.91, 18.8, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:19:43.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:19:10
2025-11-26T04:19:44.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:19:44.241 [DEBUG] [Thread-11564] [transport.py] [_log()] starting thread (client mode): 0x70de6830
2025-11-26T04:19:44.241 [DEBUG] [Thread-11564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:19:44.261 [DEBUG] [Thread-11564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:19:44.261 [INFO] [Thread-11564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] client lang: <none>
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] server lang: <none>
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] kex follows: False
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:19:44.264 [DEBUG] [Thread-11564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:19:44.265 [DEBUG] [Thread-11564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:19:44.265 [DEBUG] [Thread-11564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:19:44.265 [DEBUG] [Thread-11564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:19:44.265 [DEBUG] [Thread-11564] [transport.py] [_log()] Compression: none
2025-11-26T04:19:44.265 [DEBUG] [Thread-11564] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:19:44.280 [DEBUG] [Thread-11564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:19:44.280 [DEBUG] [Thread-11564] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:19:44.280 [DEBUG] [Thread-11564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:19:44.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:19:44.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:19:44.281 [DEBUG] [Thread-11564] [transport.py] [_log()] userauth is OK
2025-11-26T04:19:44.281 [DEBUG] [Thread-11564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:19:44.281 [DEBUG] [Thread-11564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:19:44.281 [DEBUG] [Thread-11564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:19:44.281 [DEBUG] [Thread-11564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:19:44.300 [INFO] [Thread-11564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:19:44.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:19:44.899 [DEBUG] [Thread-11564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:19:44.900 [DEBUG] [Thread-11564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:19:44.900 [DEBUG] [Thread-11564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:19:44.940 [DEBUG] [Thread-11564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:19:44.940 [DEBUG] [Thread-11564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:19:44.943 [DEBUG] [Thread-11564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:19:44.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:19:44.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:19:44.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:19:44.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:19:44.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:19:44.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:19:44.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:19:44.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:19:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:19:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.096623 -999.00  +19.40  11.11     18   -5.00 1 1 1 1 1     0    0 23.59 -27.66 ZNESW 11.0 11.1 64.8 12.7 19.1 -25.8 19.0 -25.3 18.7 -23.9 19.0 -24.9
2025-11-26T04:19:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:19:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:19:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.096623
2025-11-26T04:19:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:19:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:19:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:19:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:19:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:19:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:19:10', tmtdew=28.28, humidity=13.86, cloud=0.0, wind=10.91, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:19:42', seeing=1.06, atlas_timestamp='2025-11-26T02:19:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.04974999999999952, 0.0032500000000013074, 0.006499999999999062, 0.029500000000000526, 0.07225000000000037, -0.0129999999999999, -0.02674999999999983, -0.014499999999999957, 0.02800000000000047, -0.08624999999999972, 0.002000000000000668, 0.0649999999999995, 0.07824999999999882, 0.015499999999999403, -0.014000000000001123, 0.03524999999999956, 0.057000000000000384, -0.009999999999999787, 0.05524999999999913, 0.0484999999999971, 0.05874999999999808, 0.009250000000001535, 0.027749999999999275, 0.016999999999997684, 0.03550000000000075, 0.0027500000000006963, 0.10350000000000037, 0.20050000000000168, 0.12250000000000227, 0.05200000000000138, 0.08900000000000041, 0.005749999999999034], zp_timestamp='2025-11-26T02:16:00')
2025-11-26T04:19:44.968 [DEBUG] [Thread-11564] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:19:45.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:19:45.063 [DEBUG] [Thread-11567] [transport.py] [_log()] starting thread (client mode): 0x70d295a0
2025-11-26T04:19:45.063 [DEBUG] [Thread-11567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:19:45.078 [DEBUG] [Thread-11567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:19:45.078 [INFO] [Thread-11567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:19:45.085 [DEBUG] [Thread-11567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] client lang: <none>
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] server lang: <none>
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] kex follows: False
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] Compression: none
2025-11-26T04:19:45.086 [DEBUG] [Thread-11567] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:19:45.142 [DEBUG] [Thread-11567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:19:45.143 [DEBUG] [Thread-11567] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:19:45.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:19:45.144 [DEBUG] [Thread-11567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:19:45.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:19:45.199 [DEBUG] [Thread-11567] [transport.py] [_log()] userauth is OK
2025-11-26T04:19:45.199 [DEBUG] [Thread-11567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:19:45.200 [DEBUG] [Thread-11567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:19:45.200 [DEBUG] [Thread-11567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:19:45.200 [DEBUG] [Thread-11567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:19:45.219 [INFO] [Thread-11567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:19:45.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:19:45.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:19:46.048 [DEBUG] [Thread-11567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:19:46.048 [DEBUG] [Thread-11567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:19:46.098 [DEBUG] [Thread-11567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:19:46.098 [DEBUG] [Thread-11567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:19:46.107 [DEBUG] [Thread-11567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:19:46.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:19:46.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:19:46.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:19:46.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:19:46.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:19:46.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:19:46.145 [DEBUG] [Thread-11567] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:19:46.746 [DEBUG] [Thread-11569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:01.547 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:01.804 [DEBUG] [Thread-11570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:06.107 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:06.109 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:11.868 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:16.000 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:20:16.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:20:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:20:16.837 [DEBUG] [Thread-11571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:16.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 19, 42), 28.33, 13.79, 0.0, 9.09, 18.75, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:20:16.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:19:42
2025-11-26T04:20:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:20:17.117 [DEBUG] [Thread-11572] [transport.py] [_log()] starting thread (client mode): 0x70d2b430
2025-11-26T04:20:17.117 [DEBUG] [Thread-11572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:20:17.137 [DEBUG] [Thread-11572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:20:17.137 [INFO] [Thread-11572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] client lang: <none>
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] server lang: <none>
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] kex follows: False
2025-11-26T04:20:17.140 [DEBUG] [Thread-11572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:20:17.141 [DEBUG] [Thread-11572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:20:17.141 [DEBUG] [Thread-11572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:20:17.141 [DEBUG] [Thread-11572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:20:17.141 [DEBUG] [Thread-11572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:20:17.141 [DEBUG] [Thread-11572] [transport.py] [_log()] Compression: none
2025-11-26T04:20:17.141 [DEBUG] [Thread-11572] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:20:17.157 [DEBUG] [Thread-11572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:20:17.157 [DEBUG] [Thread-11572] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:20:17.158 [DEBUG] [Thread-11572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:20:17.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:20:17.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:20:17.160 [DEBUG] [Thread-11572] [transport.py] [_log()] userauth is OK
2025-11-26T04:20:17.160 [DEBUG] [Thread-11572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:20:17.160 [DEBUG] [Thread-11572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:20:17.160 [DEBUG] [Thread-11572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:20:17.160 [DEBUG] [Thread-11572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:20:17.186 [INFO] [Thread-11572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:20:17.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:20:17.818 [DEBUG] [Thread-11572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:20:17.818 [DEBUG] [Thread-11572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:20:17.819 [DEBUG] [Thread-11572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:20:17.860 [DEBUG] [Thread-11572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:20:17.860 [DEBUG] [Thread-11572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:20:17.863 [DEBUG] [Thread-11572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:20:17.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:20:17.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:20:17.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:20:17.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:20:17.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:20:17.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:20:17.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:20:17.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:20:17.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:20:17.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.096970 -999.00  +19.40  12.64     18   -5.00 1 1 1 1 1     0    0 23.91 -26.86 ZNESW 11.2 12.6 67.6 13.1 19.1 -25.9 19.0 -25.1 18.7 -23.9 19.0 -24.9
2025-11-26T04:20:17.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:20:17.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:20:17.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.096970
2025-11-26T04:20:17.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:20:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:20:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:20:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:20:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:20:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:19:42', tmtdew=28.33, humidity=13.79, cloud=0.0, wind=9.09, temperature=18.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:20:14', seeing=1.14, atlas_timestamp='2025-11-26T02:19:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:19:00')
2025-11-26T04:20:17.889 [DEBUG] [Thread-11572] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:20:17.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:20:17.986 [DEBUG] [Thread-11575] [transport.py] [_log()] starting thread (client mode): 0x70d01bd0
2025-11-26T04:20:17.986 [DEBUG] [Thread-11575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:20:18.000 [DEBUG] [Thread-11575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:20:18.001 [INFO] [Thread-11575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:20:18.008 [DEBUG] [Thread-11575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:20:18.008 [DEBUG] [Thread-11575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:20:18.008 [DEBUG] [Thread-11575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:20:18.008 [DEBUG] [Thread-11575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:20:18.008 [DEBUG] [Thread-11575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:20:18.008 [DEBUG] [Thread-11575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:20:18.008 [DEBUG] [Thread-11575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] client lang: <none>
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] server lang: <none>
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] kex follows: False
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] Compression: none
2025-11-26T04:20:18.009 [DEBUG] [Thread-11575] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:20:18.067 [DEBUG] [Thread-11575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:20:18.068 [DEBUG] [Thread-11575] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:20:18.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:20:18.069 [DEBUG] [Thread-11575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:20:18.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:20:18.123 [DEBUG] [Thread-11575] [transport.py] [_log()] userauth is OK
2025-11-26T04:20:18.123 [DEBUG] [Thread-11575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:20:18.123 [DEBUG] [Thread-11575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:20:18.123 [DEBUG] [Thread-11575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:20:18.123 [DEBUG] [Thread-11575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:20:18.141 [INFO] [Thread-11575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:20:18.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:20:18.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:20:18.958 [DEBUG] [Thread-11575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:20:18.959 [DEBUG] [Thread-11575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:20:19.007 [DEBUG] [Thread-11575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:20:19.007 [DEBUG] [Thread-11575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:20:19.016 [DEBUG] [Thread-11575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:20:19.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:20:19.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:20:19.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:20:19.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:20:19.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:20:19.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:20:19.053 [DEBUG] [Thread-11575] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:20:28.836 [DEBUG] [Thread-11577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:31.867 [DEBUG] [Thread-11578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:46.908 [DEBUG] [Thread-11579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:20:49.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:20:49.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:20:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:20:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 20, 46), 28.28, 13.84, 0.0, 9.51, 18.74, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:20:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:20:46
2025-11-26T04:20:49.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:20:49.992 [DEBUG] [Thread-11580] [transport.py] [_log()] starting thread (client mode): 0x70d1cb50
2025-11-26T04:20:49.993 [DEBUG] [Thread-11580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:20:50.012 [DEBUG] [Thread-11580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:20:50.013 [INFO] [Thread-11580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:20:50.015 [DEBUG] [Thread-11580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] client lang: <none>
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] server lang: <none>
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] kex follows: False
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] Compression: none
2025-11-26T04:20:50.016 [DEBUG] [Thread-11580] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:20:50.024 [DEBUG] [Thread-11580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:20:50.025 [DEBUG] [Thread-11580] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:20:50.025 [DEBUG] [Thread-11580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:20:50.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:20:50.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:20:50.028 [DEBUG] [Thread-11580] [transport.py] [_log()] userauth is OK
2025-11-26T04:20:50.029 [DEBUG] [Thread-11580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:20:50.029 [DEBUG] [Thread-11580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:20:50.029 [DEBUG] [Thread-11580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:20:50.029 [DEBUG] [Thread-11580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:20:50.054 [INFO] [Thread-11580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:20:50.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:20:50.696 [DEBUG] [Thread-11580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:20:50.696 [DEBUG] [Thread-11580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:20:50.696 [DEBUG] [Thread-11580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:20:50.737 [DEBUG] [Thread-11580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:20:50.737 [DEBUG] [Thread-11580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:20:50.741 [DEBUG] [Thread-11580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:20:50.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:20:50.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:20:50.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:20:50.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:20:50.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:20:50.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:20:50.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:20:50.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:20:50.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:20:50.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.097317 -999.00  +19.50  10.13     18   -5.00 1 1 1 1 1     0    0 23.79 -28.13 ZNESW 11.6 10.1 76.0 13.0 19.1 -25.9 19.0 -25.1 18.7 -24.0 19.0 -24.9
2025-11-26T04:20:50.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:20:50.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:20:50.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.097317
2025-11-26T04:20:50.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:20:50.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:20:50.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:20:50.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:20:50.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:20:50.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:20:46', tmtdew=28.28, humidity=13.84, cloud=0.0, wind=9.51, temperature=18.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:20:46', seeing=1.16, atlas_timestamp='2025-11-26T02:20:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:19:00')
2025-11-26T04:20:50.768 [DEBUG] [Thread-11580] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:20:50.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:20:50.865 [DEBUG] [Thread-11583] [transport.py] [_log()] starting thread (client mode): 0x70d1cd30
2025-11-26T04:20:50.865 [DEBUG] [Thread-11583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:20:50.880 [DEBUG] [Thread-11583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:20:50.880 [INFO] [Thread-11583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:20:50.887 [DEBUG] [Thread-11583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:20:50.887 [DEBUG] [Thread-11583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:20:50.887 [DEBUG] [Thread-11583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] client lang: <none>
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] server lang: <none>
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] kex follows: False
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:20:50.888 [DEBUG] [Thread-11583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:20:50.889 [DEBUG] [Thread-11583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:20:50.889 [DEBUG] [Thread-11583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:20:50.889 [DEBUG] [Thread-11583] [transport.py] [_log()] Compression: none
2025-11-26T04:20:50.889 [DEBUG] [Thread-11583] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:20:50.952 [DEBUG] [Thread-11583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:20:50.953 [DEBUG] [Thread-11583] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:20:50.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:20:50.954 [DEBUG] [Thread-11583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:20:50.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:20:51.015 [DEBUG] [Thread-11583] [transport.py] [_log()] userauth is OK
2025-11-26T04:20:51.015 [DEBUG] [Thread-11583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:20:51.015 [DEBUG] [Thread-11583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:20:51.015 [DEBUG] [Thread-11583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:20:51.015 [DEBUG] [Thread-11583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:20:51.035 [INFO] [Thread-11583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:20:51.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:20:51.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:20:51.867 [DEBUG] [Thread-11583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:20:51.867 [DEBUG] [Thread-11583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:20:51.915 [DEBUG] [Thread-11583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:20:51.915 [DEBUG] [Thread-11583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:20:51.924 [DEBUG] [Thread-11583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:20:51.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:20:51.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:20: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') -> 00000000
2025-11-26T04:20:51.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:20:51.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:20:51.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:20:51.961 [DEBUG] [Thread-11583] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:21:01.944 [DEBUG] [Thread-11585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:06.311 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:06.311 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:16.991 [DEBUG] [Thread-11586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:21:21.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:21:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:21:22.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 21, 18), 28.28, 13.86, 0.0, 9.58, 18.77, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:21:22.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:21:18
2025-11-26T04:21:22.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:21:22.913 [DEBUG] [Thread-11587] [transport.py] [_log()] starting thread (client mode): 0x70d1fc10
2025-11-26T04:21:22.913 [DEBUG] [Thread-11587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:21:22.934 [DEBUG] [Thread-11587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:21:22.934 [INFO] [Thread-11587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:21:22.935 [DEBUG] [Thread-11587] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:21:22.935 [DEBUG] [Thread-11587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] client lang: <none>
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] server lang: <none>
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] kex follows: False
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:21:22.936 [DEBUG] [Thread-11587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:21:22.937 [DEBUG] [Thread-11587] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:21:22.937 [DEBUG] [Thread-11587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:21:22.937 [DEBUG] [Thread-11587] [transport.py] [_log()] Compression: none
2025-11-26T04:21:22.937 [DEBUG] [Thread-11587] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:21:22.946 [DEBUG] [Thread-11587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:21:22.947 [DEBUG] [Thread-11587] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:21:22.947 [DEBUG] [Thread-11587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:21:22.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:21:22.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:21:22.949 [DEBUG] [Thread-11587] [transport.py] [_log()] userauth is OK
2025-11-26T04:21:22.950 [DEBUG] [Thread-11587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:21:22.950 [DEBUG] [Thread-11587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:21:22.950 [DEBUG] [Thread-11587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:21:22.950 [DEBUG] [Thread-11587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:21:22.986 [INFO] [Thread-11587] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:21:22.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:21:23.615 [DEBUG] [Thread-11587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:21:23.616 [DEBUG] [Thread-11587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:21:23.616 [DEBUG] [Thread-11587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:21:23.657 [DEBUG] [Thread-11587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:21:23.657 [DEBUG] [Thread-11587] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:21:23.660 [DEBUG] [Thread-11587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:21:23.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:21:23.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:21:23.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:21:23.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:21:23.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:21:23.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:21:23.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:21:23.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:21:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:21:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.098012 -999.00  +19.40  11.40     18   -5.10 1 1 1 1 1     0    0 23.66 -29.02 ZNESW 10.8 11.4 64.8 12.5 19.1 -25.9 19.0 -25.2 18.7 -23.9 18.9 -24.9
2025-11-26T04:21:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:21:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:21:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.098012
2025-11-26T04:21:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:21:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:21:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:21:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:21:23.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:21:23.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:21:18', tmtdew=28.28, humidity=13.86, cloud=0.0, wind=9.58, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:21:18', seeing=1.16, atlas_timestamp='2025-11-26T02:21:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:19:00')
2025-11-26T04:21:23.687 [DEBUG] [Thread-11587] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:21:23.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:21:23.783 [DEBUG] [Thread-11590] [transport.py] [_log()] starting thread (client mode): 0x70d1fe80
2025-11-26T04:21:23.784 [DEBUG] [Thread-11590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:21:23.798 [DEBUG] [Thread-11590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:21:23.798 [INFO] [Thread-11590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:21:23.806 [DEBUG] [Thread-11590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:21:23.806 [DEBUG] [Thread-11590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:21:23.806 [DEBUG] [Thread-11590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:21:23.806 [DEBUG] [Thread-11590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] client lang: <none>
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] server lang: <none>
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] kex follows: False
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] Compression: none
2025-11-26T04:21:23.807 [DEBUG] [Thread-11590] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:21:23.868 [DEBUG] [Thread-11590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:21:23.868 [DEBUG] [Thread-11590] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:21:23.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:21:23.869 [DEBUG] [Thread-11590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:21:23.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:21:23.927 [DEBUG] [Thread-11590] [transport.py] [_log()] userauth is OK
2025-11-26T04:21:23.927 [DEBUG] [Thread-11590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:21:23.927 [DEBUG] [Thread-11590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:21:23.927 [DEBUG] [Thread-11590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:21:23.927 [DEBUG] [Thread-11590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:21:23.952 [INFO] [Thread-11590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:21:23.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:21:23.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:21:24.772 [DEBUG] [Thread-11590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:21:24.772 [DEBUG] [Thread-11590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:21:24.820 [DEBUG] [Thread-11590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:21:24.820 [DEBUG] [Thread-11590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:21:24.829 [DEBUG] [Thread-11590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:21:24.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:21:24.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:21:24.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:21:24.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:21:24.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:21:24.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:21:24.866 [DEBUG] [Thread-11590] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:21:28.913 [DEBUG] [Thread-11592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:32.025 [DEBUG] [Thread-11593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:38.565 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:47.084 [DEBUG] [Thread-11594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:48.878 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:53.025 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:21:54.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:21:54.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:21:54.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:21:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 21, 50), 28.3, 13.82, 0.0, 10.85, 18.75, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:21:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:21:50
2025-11-26T04:21:55.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:21:55.827 [DEBUG] [Thread-11595] [transport.py] [_log()] starting thread (client mode): 0x70d7e980
2025-11-26T04:21:55.827 [DEBUG] [Thread-11595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:21:55.847 [DEBUG] [Thread-11595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:21:55.847 [INFO] [Thread-11595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] client lang: <none>
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] server lang: <none>
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] kex follows: False
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] Compression: none
2025-11-26T04:21:55.849 [DEBUG] [Thread-11595] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:21:55.858 [DEBUG] [Thread-11595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:21:55.858 [DEBUG] [Thread-11595] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:21:55.859 [DEBUG] [Thread-11595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:21:55.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:21:55.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:21:55.860 [DEBUG] [Thread-11595] [transport.py] [_log()] userauth is OK
2025-11-26T04:21:55.861 [DEBUG] [Thread-11595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:21:55.861 [DEBUG] [Thread-11595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:21:55.861 [DEBUG] [Thread-11595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:21:55.861 [DEBUG] [Thread-11595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:21:55.879 [INFO] [Thread-11595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:21:55.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:21:56.492 [DEBUG] [Thread-11595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:21:56.492 [DEBUG] [Thread-11595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:21:56.492 [DEBUG] [Thread-11595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:21:56.532 [DEBUG] [Thread-11595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:21:56.532 [DEBUG] [Thread-11595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:21:56.535 [DEBUG] [Thread-11595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:21:56.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:21:56.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:21:56.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:21:56.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:21:56.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:21:56.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:21:56.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:21:56.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:21:56.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:21:56.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.098359 -999.00  +19.30   8.46     18   -5.20 1 1 1 1 1     0    0 23.42 -28.30 ZNESW 9.3 8.5 59.4 12.5 19.1 -26.0 19.0 -25.3 18.7 -24.1 18.9 -25.0
2025-11-26T04:21:56.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:21:56.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:21:56.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.098359
2025-11-26T04:21:56.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:21:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:21:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:21:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:21:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:21:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:21:50', tmtdew=28.3, humidity=13.82, cloud=0.0, wind=10.85, temperature=18.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:21:50', seeing=1.03, atlas_timestamp='2025-11-26T02:21:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:19:00')
2025-11-26T04:21:56.560 [DEBUG] [Thread-11595] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:21:56.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:21:56.656 [DEBUG] [Thread-11598] [transport.py] [_log()] starting thread (client mode): 0x70d7f6a0
2025-11-26T04:21:56.656 [DEBUG] [Thread-11598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:21:56.671 [DEBUG] [Thread-11598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:21:56.672 [INFO] [Thread-11598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:21:56.679 [DEBUG] [Thread-11598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:21:56.679 [DEBUG] [Thread-11598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:21:56.679 [DEBUG] [Thread-11598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:21:56.679 [DEBUG] [Thread-11598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:21:56.679 [DEBUG] [Thread-11598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] client lang: <none>
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] server lang: <none>
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] kex follows: False
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] Compression: none
2025-11-26T04:21:56.680 [DEBUG] [Thread-11598] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:21:56.737 [DEBUG] [Thread-11598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:21:56.737 [DEBUG] [Thread-11598] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:21:56.737 [DEBUG] [Thread-11598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:21:56.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:21:56.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:21:56.794 [DEBUG] [Thread-11598] [transport.py] [_log()] userauth is OK
2025-11-26T04:21:56.794 [DEBUG] [Thread-11598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:21:56.794 [DEBUG] [Thread-11598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:21:56.795 [DEBUG] [Thread-11598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:21:56.795 [DEBUG] [Thread-11598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:21:56.813 [INFO] [Thread-11598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:21:56.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:21:56.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:21:57.616 [DEBUG] [Thread-11598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:21:57.616 [DEBUG] [Thread-11598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:21:57.664 [DEBUG] [Thread-11598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:21:57.664 [DEBUG] [Thread-11598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:21:57.673 [DEBUG] [Thread-11598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:21:57.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:21:57.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:21:57.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:21:57.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:21:57.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:21:57.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:21:57.707 [DEBUG] [Thread-11598] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:22:02.120 [DEBUG] [Thread-11600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:22:06.511 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:22:06.512 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:22:17.176 [DEBUG] [Thread-11601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:22:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:22:27.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:22:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:22:28.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 22, 22), 28.25, 13.89, 0.0, 10.32, 18.77, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:22:28.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:22:22
2025-11-26T04:22:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:22:28.645 [DEBUG] [Thread-11602] [transport.py] [_log()] starting thread (client mode): 0x70d1f6d0
2025-11-26T04:22:28.645 [DEBUG] [Thread-11602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:22:28.666 [DEBUG] [Thread-11602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:22:28.666 [INFO] [Thread-11602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:22:28.669 [DEBUG] [Thread-11602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] client lang: <none>
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] server lang: <none>
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] kex follows: False
2025-11-26T04:22:28.670 [DEBUG] [Thread-11602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:22:28.671 [DEBUG] [Thread-11602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:22:28.671 [DEBUG] [Thread-11602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:22:28.671 [DEBUG] [Thread-11602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:22:28.671 [DEBUG] [Thread-11602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:22:28.671 [DEBUG] [Thread-11602] [transport.py] [_log()] Compression: none
2025-11-26T04:22:28.671 [DEBUG] [Thread-11602] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:22:28.689 [DEBUG] [Thread-11602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:22:28.690 [DEBUG] [Thread-11602] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:22:28.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:22:28.691 [DEBUG] [Thread-11602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:22:28.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:22:28.693 [DEBUG] [Thread-11602] [transport.py] [_log()] userauth is OK
2025-11-26T04:22:28.694 [DEBUG] [Thread-11602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:22:28.694 [DEBUG] [Thread-11602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:22:28.694 [DEBUG] [Thread-11602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:22:28.694 [DEBUG] [Thread-11602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:22:28.718 [INFO] [Thread-11602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:22:28.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:22:28.983 [DEBUG] [Thread-11604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:22:29.355 [DEBUG] [Thread-11602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:22:29.355 [DEBUG] [Thread-11602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:22:29.356 [DEBUG] [Thread-11602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:22:29.396 [DEBUG] [Thread-11602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:22:29.396 [DEBUG] [Thread-11602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:22:29.399 [DEBUG] [Thread-11602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:22:29.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:22:29.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:22:29.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:22:29.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:22:29.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:22:29.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:22:29.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:22:29.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:22:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:22:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.098706 -999.00  +19.20  11.06     18   -5.10 1 1 1 1 1     0    0 23.42 -25.66 ZNESW 10.3 11.1 58.6 12.0 19.0 -26.0 19.0 -25.3 18.7 -24.0 18.9 -25.0
2025-11-26T04:22:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:22:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:22:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.098706
2025-11-26T04:22:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:22:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:22:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:22:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:22:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:22:29.425 [DEBUG] [Thread-11602] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:22:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:22:22', tmtdew=28.25, humidity=13.89, cloud=0.0, wind=10.32, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:22:22', seeing=0.88, atlas_timestamp='2025-11-26T02:22:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:19:00')
2025-11-26T04:22:29.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:22:29.521 [DEBUG] [Thread-11606] [transport.py] [_log()] starting thread (client mode): 0x70d1fa60
2025-11-26T04:22:29.521 [DEBUG] [Thread-11606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:22:29.538 [DEBUG] [Thread-11606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:22:29.539 [INFO] [Thread-11606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:22:29.546 [DEBUG] [Thread-11606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:22:29.546 [DEBUG] [Thread-11606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:22:29.546 [DEBUG] [Thread-11606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:22:29.546 [DEBUG] [Thread-11606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:22:29.546 [DEBUG] [Thread-11606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:22:29.546 [DEBUG] [Thread-11606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] client lang: <none>
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] server lang: <none>
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] kex follows: False
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:22:29.547 [DEBUG] [Thread-11606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:22:29.548 [DEBUG] [Thread-11606] [transport.py] [_log()] Compression: none
2025-11-26T04:22:29.548 [DEBUG] [Thread-11606] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:22:29.607 [DEBUG] [Thread-11606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:22:29.607 [DEBUG] [Thread-11606] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:22:29.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:22:29.608 [DEBUG] [Thread-11606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:22:29.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:22:29.665 [DEBUG] [Thread-11606] [transport.py] [_log()] userauth is OK
2025-11-26T04:22:29.666 [DEBUG] [Thread-11606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:22:29.666 [DEBUG] [Thread-11606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:22:29.666 [DEBUG] [Thread-11606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:22:29.666 [DEBUG] [Thread-11606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:22:29.685 [INFO] [Thread-11606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:22:29.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:22:29.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:22:30.593 [DEBUG] [Thread-11606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:22:30.593 [DEBUG] [Thread-11606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:22:30.641 [DEBUG] [Thread-11606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:22:30.641 [DEBUG] [Thread-11606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:22:30.650 [DEBUG] [Thread-11606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:22:30.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:22:30.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:22:30.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:22:30.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:22:30.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:22:30.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:22:30.687 [DEBUG] [Thread-11606] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:22:32.214 [DEBUG] [Thread-11608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:22:47.266 [DEBUG] [Thread-11609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:00.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:23:00.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:23:00.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:23:01.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 22, 54), 28.24, 13.84, 0.0, 9.25, 18.65, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:23:01.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:22:54
2025-11-26T04:23:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:23:01.646 [DEBUG] [Thread-11610] [transport.py] [_log()] starting thread (client mode): 0x70d7d3c0
2025-11-26T04:23:01.646 [DEBUG] [Thread-11610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:23:01.665 [DEBUG] [Thread-11610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:23:01.665 [INFO] [Thread-11610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] client lang: <none>
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] server lang: <none>
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] kex follows: False
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] Compression: none
2025-11-26T04:23:01.667 [DEBUG] [Thread-11610] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:23:01.676 [DEBUG] [Thread-11610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:23:01.676 [DEBUG] [Thread-11610] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:23:01.677 [DEBUG] [Thread-11610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:23:01.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:23:01.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:23:01.677 [DEBUG] [Thread-11610] [transport.py] [_log()] userauth is OK
2025-11-26T04:23:01.677 [DEBUG] [Thread-11610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:23:01.677 [DEBUG] [Thread-11610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:23:01.677 [DEBUG] [Thread-11610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:23:01.677 [DEBUG] [Thread-11610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:23:01.692 [INFO] [Thread-11610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:23:01.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:23:02.300 [DEBUG] [Thread-11612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:02.391 [DEBUG] [Thread-11610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:23:02.391 [DEBUG] [Thread-11610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:23:02.392 [DEBUG] [Thread-11610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:23:02.431 [DEBUG] [Thread-11610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:23:02.432 [DEBUG] [Thread-11610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:23:02.435 [DEBUG] [Thread-11610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:23:02.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:23:02.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:23:02.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:23:02.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:23:02.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:23:02.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:23:02.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:23:02.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:23:02.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:23:02.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.099053 -999.00  +19.20   9.47     18   -5.10 1 1 1 1 1     0    0 23.98 -26.07 ZNESW 8.1 9.5 66.0 11.7 19.0 -25.8 18.9 -25.1 18.7 -23.9 18.9 -25.0
2025-11-26T04:23:02.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:23:02.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:23:02.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.099053
2025-11-26T04:23:02.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:23:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:23:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:23:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:23:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:23:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:22:54', tmtdew=28.24, humidity=13.84, cloud=0.0, wind=9.25, temperature=18.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:22:54', seeing=1.04, atlas_timestamp='2025-11-26T02:22:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:19:00')
2025-11-26T04:23:02.461 [DEBUG] [Thread-11610] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:23:02.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:23:02.556 [DEBUG] [Thread-11614] [transport.py] [_log()] starting thread (client mode): 0x70d7f4f0
2025-11-26T04:23:02.556 [DEBUG] [Thread-11614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:23:02.576 [DEBUG] [Thread-11614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:23:02.576 [INFO] [Thread-11614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:23:02.583 [DEBUG] [Thread-11614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:23:02.583 [DEBUG] [Thread-11614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:23:02.583 [DEBUG] [Thread-11614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:23:02.583 [DEBUG] [Thread-11614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] client lang: <none>
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] server lang: <none>
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] kex follows: False
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] Compression: none
2025-11-26T04:23:02.584 [DEBUG] [Thread-11614] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:23:02.641 [DEBUG] [Thread-11614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:23:02.641 [DEBUG] [Thread-11614] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:23:02.642 [DEBUG] [Thread-11614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:23:02.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:23:02.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:23:02.697 [DEBUG] [Thread-11614] [transport.py] [_log()] userauth is OK
2025-11-26T04:23:02.698 [DEBUG] [Thread-11614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:23:02.698 [DEBUG] [Thread-11614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:23:02.698 [DEBUG] [Thread-11614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:23:02.698 [DEBUG] [Thread-11614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:23:02.717 [INFO] [Thread-11614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:23:02.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:23:02.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:23:03.546 [DEBUG] [Thread-11614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:23:03.547 [DEBUG] [Thread-11614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:23:03.595 [DEBUG] [Thread-11614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:23:03.595 [DEBUG] [Thread-11614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:23:03.604 [DEBUG] [Thread-11614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:23:03.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:23: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')
2025-11-26T04:23: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') -> 00000000
2025-11-26T04:23:03.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:23:03.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:23:03.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:23:03.641 [DEBUG] [Thread-11614] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:23:06.716 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:06.717 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:15.608 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:17.337 [DEBUG] [Thread-11616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:29.067 [DEBUG] [Thread-11617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:29.144 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:32.216 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:32.397 [DEBUG] [Thread-11618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:33.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:23:33.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:23: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
2025-11-26T04:23:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 23, 26), 28.17, 13.92, 0.0, 9.09, 18.69, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:23:34.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:23:26
2025-11-26T04:23:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:23:34.598 [DEBUG] [Thread-11619] [transport.py] [_log()] starting thread (client mode): 0x70d28c70
2025-11-26T04:23:34.598 [DEBUG] [Thread-11619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:23:34.618 [DEBUG] [Thread-11619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:23:34.618 [INFO] [Thread-11619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:23:34.619 [DEBUG] [Thread-11619] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:23:34.619 [DEBUG] [Thread-11619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:23:34.619 [DEBUG] [Thread-11619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] client lang: <none>
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] server lang: <none>
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] kex follows: False
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] Compression: none
2025-11-26T04:23:34.620 [DEBUG] [Thread-11619] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:23:34.628 [DEBUG] [Thread-11619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:23:34.628 [DEBUG] [Thread-11619] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:23:34.628 [DEBUG] [Thread-11619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:23:34.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:23:34.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:23:34.629 [DEBUG] [Thread-11619] [transport.py] [_log()] userauth is OK
2025-11-26T04:23:34.629 [DEBUG] [Thread-11619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:23:34.629 [DEBUG] [Thread-11619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:23:34.629 [DEBUG] [Thread-11619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:23:34.629 [DEBUG] [Thread-11619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:23:34.639 [INFO] [Thread-11619] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:23:34.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:23:35.237 [DEBUG] [Thread-11619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:23:35.237 [DEBUG] [Thread-11619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:23:35.237 [DEBUG] [Thread-11619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:23:35.278 [DEBUG] [Thread-11619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:23:35.278 [DEBUG] [Thread-11619] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:23:35.280 [DEBUG] [Thread-11619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:23:35.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:23:35.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:23:35.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:23:35.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:23:35.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:23:35.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:23:35.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:23:35.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.099401 -999.00  +19.10   9.47     18   -5.20 1 1 1 1 1     0    0 23.86 -26.76 ZNESW 8.8 9.5 60.0 11.5 18.9 -25.8 18.9 -25.2 18.6 -24.0 18.9 -25.2
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.099401
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:23:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:23:26', tmtdew=28.17, humidity=13.92, cloud=0.0, wind=9.09, temperature=18.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:23:26', seeing=1.02, atlas_timestamp='2025-11-26T02:23:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:22:00')
2025-11-26T04:23:35.296 [DEBUG] [Thread-11619] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:23:35.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:23:35.384 [DEBUG] [Thread-11622] [transport.py] [_log()] starting thread (client mode): 0x70d28460
2025-11-26T04:23:35.384 [DEBUG] [Thread-11622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:23:35.398 [DEBUG] [Thread-11622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:23:35.398 [INFO] [Thread-11622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:23:35.406 [DEBUG] [Thread-11622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] client lang: <none>
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] server lang: <none>
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] kex follows: False
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] Compression: none
2025-11-26T04:23:35.407 [DEBUG] [Thread-11622] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:23:35.467 [DEBUG] [Thread-11622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:23:35.468 [DEBUG] [Thread-11622] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:23:35.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:23:35.468 [DEBUG] [Thread-11622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:23:35.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:23:35.532 [DEBUG] [Thread-11622] [transport.py] [_log()] userauth is OK
2025-11-26T04:23:35.532 [DEBUG] [Thread-11622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:23:35.532 [DEBUG] [Thread-11622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:23:35.532 [DEBUG] [Thread-11622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:23:35.532 [DEBUG] [Thread-11622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:23:35.550 [INFO] [Thread-11622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:23:35.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:23:35.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:23:36.364 [DEBUG] [Thread-11622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:23:36.364 [DEBUG] [Thread-11622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:23:36.412 [DEBUG] [Thread-11622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:23:36.412 [DEBUG] [Thread-11622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:23:36.420 [DEBUG] [Thread-11622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:23:36.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:23:36.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:23:36.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:23:36.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:23:36.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:23:36.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:23:36.453 [DEBUG] [Thread-11622] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:23:38.621 [DEBUG] [Thread-5990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:23:47.431 [DEBUG] [Thread-11624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:24:02.493 [DEBUG] [Thread-11625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:24:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:24:06.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:24:06.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:24:06.919 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:24:06.920 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:24:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 23, 58), 28.13, 13.84, 0.0, 10.62, 18.55, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:24:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:23:58
2025-11-26T04:24:07.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:24:07.423 [DEBUG] [Thread-11626] [transport.py] [_log()] starting thread (client mode): 0x70d7ea40
2025-11-26T04:24:07.423 [DEBUG] [Thread-11626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:24:07.433 [DEBUG] [Thread-11626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:24:07.433 [INFO] [Thread-11626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] client lang: <none>
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] server lang: <none>
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] kex follows: False
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:24:07.435 [DEBUG] [Thread-11626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:24:07.436 [DEBUG] [Thread-11626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:24:07.436 [DEBUG] [Thread-11626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:24:07.436 [DEBUG] [Thread-11626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:24:07.436 [DEBUG] [Thread-11626] [transport.py] [_log()] Compression: none
2025-11-26T04:24:07.436 [DEBUG] [Thread-11626] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:24:07.445 [DEBUG] [Thread-11626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:24:07.445 [DEBUG] [Thread-11626] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:24:07.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:24:07.446 [DEBUG] [Thread-11626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:24:07.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:24:07.446 [DEBUG] [Thread-11626] [transport.py] [_log()] userauth is OK
2025-11-26T04:24:07.447 [DEBUG] [Thread-11626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:24:07.447 [DEBUG] [Thread-11626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:24:07.447 [DEBUG] [Thread-11626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:24:07.447 [DEBUG] [Thread-11626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:24:07.459 [INFO] [Thread-11626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:24:07.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:24:08.063 [DEBUG] [Thread-11626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:24:08.064 [DEBUG] [Thread-11626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:24:08.064 [DEBUG] [Thread-11626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:24:08.104 [DEBUG] [Thread-11626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:24:08.104 [DEBUG] [Thread-11626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:24:08.106 [DEBUG] [Thread-11626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:24:08.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:24:08.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:24:08.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:24:08.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:24:08.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:24:08.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:24:08.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:24:08.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:24:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:24:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.099748 -999.00  +19.00   8.94     18   -5.20 1 1 1 1 1     1    0 23.51 -27.90 ZNESW 9.5 8.9 60.4 12.2 19.0 -25.8 18.9 -25.2 18.6 -24.0 18.9 -25.0
2025-11-26T04:24:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:24:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:24:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.099748
2025-11-26T04:24:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:24:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:24:08.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:24:08.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:24:08.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:24:08.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:23:58', tmtdew=28.13, humidity=13.84, cloud=0.0, wind=10.62, temperature=18.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:23:58', seeing=0.94, atlas_timestamp='2025-11-26T02:23:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:22:00')
2025-11-26T04:24:08.122 [DEBUG] [Thread-11626] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:24:08.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:24:08.222 [DEBUG] [Thread-11629] [transport.py] [_log()] starting thread (client mode): 0x70d7ebf0
2025-11-26T04:24:08.222 [DEBUG] [Thread-11629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:24:08.240 [DEBUG] [Thread-11629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:24:08.240 [INFO] [Thread-11629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:24:08.250 [DEBUG] [Thread-11629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:24:08.250 [DEBUG] [Thread-11629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] client lang: <none>
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] server lang: <none>
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] kex follows: False
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] Compression: none
2025-11-26T04:24:08.251 [DEBUG] [Thread-11629] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:24:08.310 [DEBUG] [Thread-11629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:24:08.311 [DEBUG] [Thread-11629] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:24:08.311 [DEBUG] [Thread-11629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:24:08.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:24:08.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:24:08.372 [DEBUG] [Thread-11629] [transport.py] [_log()] userauth is OK
2025-11-26T04:24:08.372 [DEBUG] [Thread-11629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:24:08.372 [DEBUG] [Thread-11629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:24:08.372 [DEBUG] [Thread-11629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:24:08.372 [DEBUG] [Thread-11629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:24:08.391 [INFO] [Thread-11629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:24:08.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:24:08.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:24:09.221 [DEBUG] [Thread-11629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:24:09.221 [DEBUG] [Thread-11629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:24:09.268 [DEBUG] [Thread-11629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:24:09.269 [DEBUG] [Thread-11629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:24:09.277 [DEBUG] [Thread-11629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:24:09.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:24:09.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:24:09.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:24:09.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:24:09.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:24:09.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:24:09.310 [DEBUG] [Thread-11629] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:24:17.527 [DEBUG] [Thread-11631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:24:29.143 [DEBUG] [Thread-11632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:24:32.578 [DEBUG] [Thread-11633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:24:39.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:24:39.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:24:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:24:39.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 24, 30), 28.08, 13.91, 0.0, 10.94, 18.59, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:24:39.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:24:30
2025-11-26T04:24:40.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:24:40.244 [DEBUG] [Thread-11634] [transport.py] [_log()] starting thread (client mode): 0x70d7cca0
2025-11-26T04:24:40.244 [DEBUG] [Thread-11634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:24:40.259 [DEBUG] [Thread-11634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:24:40.259 [INFO] [Thread-11634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:24:40.262 [DEBUG] [Thread-11634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] client lang: <none>
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] server lang: <none>
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] kex follows: False
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] Compression: none
2025-11-26T04:24:40.263 [DEBUG] [Thread-11634] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:24:40.272 [DEBUG] [Thread-11634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:24:40.272 [DEBUG] [Thread-11634] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:24:40.273 [DEBUG] [Thread-11634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:24:40.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:24:40.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:24:40.275 [DEBUG] [Thread-11634] [transport.py] [_log()] userauth is OK
2025-11-26T04:24:40.275 [DEBUG] [Thread-11634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:24:40.275 [DEBUG] [Thread-11634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:24:40.275 [DEBUG] [Thread-11634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:24:40.275 [DEBUG] [Thread-11634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:24:40.288 [INFO] [Thread-11634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:24:40.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:24:40.929 [DEBUG] [Thread-11634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:24:40.929 [DEBUG] [Thread-11634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:24:40.930 [DEBUG] [Thread-11634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:24:40.970 [DEBUG] [Thread-11634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:24:40.971 [DEBUG] [Thread-11634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:24:40.974 [DEBUG] [Thread-11634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:24:40.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:24:40.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:24:40.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:24:40.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:24:40.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:24:40.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:24:41.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:24:41.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:24:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:24:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.099748 -999.00  +19.00   8.94     18   -5.20 1 1 1 1 1     1    0 23.51 -27.90 ZNESW 9.5 8.9 60.4 12.2 19.0 -25.8 18.9 -25.2 18.6 -24.0 18.9 -25.0
2025-11-26T04:24:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:24:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:24:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.099748
2025-11-26T04:24:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:24:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:24:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:24:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:24:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:24:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:24:30', tmtdew=28.08, humidity=13.91, cloud=0.0, wind=10.94, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:24:30', seeing=0.94, atlas_timestamp='2025-11-26T02:23:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:22:00')
2025-11-26T04:24:41.003 [DEBUG] [Thread-11634] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:24:41.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:24:41.099 [DEBUG] [Thread-11637] [transport.py] [_log()] starting thread (client mode): 0x70d7c520
2025-11-26T04:24:41.099 [DEBUG] [Thread-11637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:24:41.114 [DEBUG] [Thread-11637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:24:41.114 [INFO] [Thread-11637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:24:41.122 [DEBUG] [Thread-11637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:24:41.122 [DEBUG] [Thread-11637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:24:41.123 [DEBUG] [Thread-11637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:24:41.123 [DEBUG] [Thread-11637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:24:41.123 [DEBUG] [Thread-11637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:24:41.123 [DEBUG] [Thread-11637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:24:41.123 [DEBUG] [Thread-11637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:24:41.123 [DEBUG] [Thread-11637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:24:41.123 [DEBUG] [Thread-11637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:24:41.123 [DEBUG] [Thread-11637] [transport.py] [_log()] client lang: <none>
2025-11-26T04:24:41.123 [DEBUG] [Thread-11637] [transport.py] [_log()] server lang: <none>
2025-11-26T04:24:41.124 [DEBUG] [Thread-11637] [transport.py] [_log()] kex follows: False
2025-11-26T04:24:41.124 [DEBUG] [Thread-11637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:24:41.124 [DEBUG] [Thread-11637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:24:41.124 [DEBUG] [Thread-11637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:24:41.124 [DEBUG] [Thread-11637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:24:41.124 [DEBUG] [Thread-11637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:24:41.124 [DEBUG] [Thread-11637] [transport.py] [_log()] Compression: none
2025-11-26T04:24:41.124 [DEBUG] [Thread-11637] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:24:41.181 [DEBUG] [Thread-11637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:24:41.181 [DEBUG] [Thread-11637] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:24:41.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:24:41.182 [DEBUG] [Thread-11637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:24:41.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:24:41.237 [DEBUG] [Thread-11637] [transport.py] [_log()] userauth is OK
2025-11-26T04:24:41.238 [DEBUG] [Thread-11637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:24:41.238 [DEBUG] [Thread-11637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:24:41.238 [DEBUG] [Thread-11637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:24:41.238 [DEBUG] [Thread-11637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:24:41.258 [INFO] [Thread-11637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:24:41.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:24:41.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:24:42.072 [DEBUG] [Thread-11637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:24:42.072 [DEBUG] [Thread-11637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:24:42.120 [DEBUG] [Thread-11637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:24:42.120 [DEBUG] [Thread-11637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:24:42.129 [DEBUG] [Thread-11637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:24:42.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:24:42.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:24:42.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:24:42.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:24:42.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:24:42.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:24:42.167 [DEBUG] [Thread-11637] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:24:47.608 [DEBUG] [Thread-11639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:25:02.652 [DEBUG] [Thread-11640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:25:07.121 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:25:07.122 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:25:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:25:12.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:25:12.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:25:12.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 25, 2), 28.09, 13.89, 0.0, 10.91, 18.57, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:25:12.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:25:02
2025-11-26T04:25:12.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:25:13.135 [DEBUG] [Thread-11641] [transport.py] [_log()] starting thread (client mode): 0x70d1c2e0
2025-11-26T04:25:13.136 [DEBUG] [Thread-11641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:25:13.155 [DEBUG] [Thread-11641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:25:13.155 [INFO] [Thread-11641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:25:13.158 [DEBUG] [Thread-11641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] client lang: <none>
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] server lang: <none>
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] kex follows: False
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] Compression: none
2025-11-26T04:25:13.159 [DEBUG] [Thread-11641] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:25:13.173 [DEBUG] [Thread-11641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:25:13.174 [DEBUG] [Thread-11641] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:25:13.174 [DEBUG] [Thread-11641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:25:13.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:25:13.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:25:13.217 [DEBUG] [Thread-11641] [transport.py] [_log()] userauth is OK
2025-11-26T04:25:13.217 [DEBUG] [Thread-11641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:25:13.217 [DEBUG] [Thread-11641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:25:13.217 [DEBUG] [Thread-11641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:25:13.218 [DEBUG] [Thread-11641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:25:13.232 [INFO] [Thread-11641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:25:13.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:25:13.927 [DEBUG] [Thread-11641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:25:13.927 [DEBUG] [Thread-11641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:25:13.927 [DEBUG] [Thread-11641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:25:13.968 [DEBUG] [Thread-11641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:25:13.968 [DEBUG] [Thread-11641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:25:13.972 [DEBUG] [Thread-11641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:25:13.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:25:13.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:25:13.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:25:13.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:25:13.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:25:13.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:25:13.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:25:13.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.100442 -999.00  +18.80   7.90     19   -5.20 1 1 1 1 1     1    0 23.92 -31.30 ZNESW 9.6 7.9 59.0 10.0 18.9 -25.9 18.9 -25.2 18.5 -24.0 18.8 -25.1
2025-11-26T04:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:25:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.100442
2025-11-26T04:25:13.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:25:13.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:25:14.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:25:14.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:25:14.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:25:14.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:25:02', tmtdew=28.09, humidity=13.89, cloud=0.0, wind=10.91, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:25:03', seeing=1.0, atlas_timestamp='2025-11-26T02:24:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:22:00')
2025-11-26T04:25:14.000 [DEBUG] [Thread-11641] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:25:14.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:25:14.094 [DEBUG] [Thread-11644] [transport.py] [_log()] starting thread (client mode): 0x70d2b820
2025-11-26T04:25:14.095 [DEBUG] [Thread-11644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:25:14.109 [DEBUG] [Thread-11644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:25:14.109 [INFO] [Thread-11644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:25:14.117 [DEBUG] [Thread-11644] [transport.py] [_log()] client lang: <none>
2025-11-26T04:25:14.118 [DEBUG] [Thread-11644] [transport.py] [_log()] server lang: <none>
2025-11-26T04:25:14.118 [DEBUG] [Thread-11644] [transport.py] [_log()] kex follows: False
2025-11-26T04:25:14.118 [DEBUG] [Thread-11644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:25:14.118 [DEBUG] [Thread-11644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:25:14.118 [DEBUG] [Thread-11644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:25:14.118 [DEBUG] [Thread-11644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:25:14.118 [DEBUG] [Thread-11644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:25:14.118 [DEBUG] [Thread-11644] [transport.py] [_log()] Compression: none
2025-11-26T04:25:14.118 [DEBUG] [Thread-11644] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:25:14.177 [DEBUG] [Thread-11644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:25:14.178 [DEBUG] [Thread-11644] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:25:14.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:25:14.179 [DEBUG] [Thread-11644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:25:14.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:25:14.233 [DEBUG] [Thread-11644] [transport.py] [_log()] userauth is OK
2025-11-26T04:25:14.233 [DEBUG] [Thread-11644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:25:14.233 [DEBUG] [Thread-11644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:25:14.233 [DEBUG] [Thread-11644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:25:14.233 [DEBUG] [Thread-11644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:25:14.252 [INFO] [Thread-11644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:25:14.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:25:14.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:25:15.077 [DEBUG] [Thread-11644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:25:15.078 [DEBUG] [Thread-11644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:25:15.130 [DEBUG] [Thread-11644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:25:15.130 [DEBUG] [Thread-11644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:25:15.142 [DEBUG] [Thread-11644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:25:15.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:25:15.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:25:15.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:25:15.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:25:15.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:25:15.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:25:15.184 [DEBUG] [Thread-11644] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:25:17.687 [DEBUG] [Thread-11646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:25:29.218 [DEBUG] [Thread-11647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:25:32.743 [DEBUG] [Thread-11648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:25:45.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:25:45.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:25:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:25:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 25, 35), 27.93, 13.96, 0.0, 8.88, 18.47, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:25:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:25:35
2025-11-26T04:25:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:25:46.123 [DEBUG] [Thread-11649] [transport.py] [_log()] starting thread (client mode): 0x70d29ff0
2025-11-26T04:25:46.123 [DEBUG] [Thread-11649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:25:46.145 [DEBUG] [Thread-11649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:25:46.145 [INFO] [Thread-11649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:25:46.146 [DEBUG] [Thread-11649] [transport.py] [_log()] client lang: <none>
2025-11-26T04:25:46.147 [DEBUG] [Thread-11649] [transport.py] [_log()] server lang: <none>
2025-11-26T04:25:46.147 [DEBUG] [Thread-11649] [transport.py] [_log()] kex follows: False
2025-11-26T04:25:46.147 [DEBUG] [Thread-11649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:25:46.147 [DEBUG] [Thread-11649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:25:46.147 [DEBUG] [Thread-11649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:25:46.147 [DEBUG] [Thread-11649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:25:46.147 [DEBUG] [Thread-11649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:25:46.147 [DEBUG] [Thread-11649] [transport.py] [_log()] Compression: none
2025-11-26T04:25:46.147 [DEBUG] [Thread-11649] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:25:46.160 [DEBUG] [Thread-11649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:25:46.160 [DEBUG] [Thread-11649] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:25:46.161 [DEBUG] [Thread-11649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:25:46.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:25:46.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:25:46.162 [DEBUG] [Thread-11649] [transport.py] [_log()] userauth is OK
2025-11-26T04:25:46.163 [DEBUG] [Thread-11649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:25:46.163 [DEBUG] [Thread-11649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:25:46.163 [DEBUG] [Thread-11649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:25:46.163 [DEBUG] [Thread-11649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:25:46.188 [INFO] [Thread-11649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:25:46.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:25:46.972 [DEBUG] [Thread-11649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:25:46.973 [DEBUG] [Thread-11649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:25:46.973 [DEBUG] [Thread-11649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:25:47.014 [DEBUG] [Thread-11649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:25:47.014 [DEBUG] [Thread-11649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:25:47.018 [DEBUG] [Thread-11649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:25:47.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:25:47.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:25:47.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:25:47.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:25:47.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:25:47.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:25:47.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:25:47.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:25:47.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:25:47.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.100789 -999.00  +18.80   7.16     19   -5.20 1 1 1 1 1     1    0 23.40 -35.33 ZNESW 8.1 7.2 62.0 11.3 18.9 -25.9 18.8 -25.3 18.6 -23.9 18.8 -24.8
2025-11-26T04:25:47.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:25:47.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:25:47.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.100789
2025-11-26T04:25:47.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:25:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:25:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:25:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:25:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:25:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:25:35', tmtdew=27.93, humidity=13.96, cloud=0.0, wind=8.88, temperature=18.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:25:35', seeing=1.06, atlas_timestamp='2025-11-26T02:25:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0442499999999999, -0.02024999999999899, 0.004250000000000753, 0.010500000000000398, 0.01950000000000074, 0.05725000000000158, -0.019999999999999574, 0.007250000000000867, -0.05250000000000021, 0.025000000000000355, -0.04574999999999996, 0.016500000000000625, 0.09600000000000009, 0.07474999999999987, 0.032999999999999474, -0.0070000000000014495, 0.03275000000000006, 0.04449999999999932, 0.0009999999999994458, 0.023249999999999105, 0.05099999999999838, 0.06474999999999831, -0.011749999999999261, 0.011749999999999261, 0.030999999999998806, 0.03950000000000031, -0.051249999999999574, 0.0884999999999998, 0.21000000000000085, 0.16500000000000092, 0.0600000000000005, 0.04200000000000159, 0.010749999999999815], zp_timestamp='2025-11-26T02:22:00')
2025-11-26T04:25:47.043 [DEBUG] [Thread-11649] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:25:47.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:25:47.141 [DEBUG] [Thread-11652] [transport.py] [_log()] starting thread (client mode): 0x70de4bb0
2025-11-26T04:25:47.141 [DEBUG] [Thread-11652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:25:47.156 [DEBUG] [Thread-11652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:25:47.157 [INFO] [Thread-11652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:25:47.164 [DEBUG] [Thread-11652] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:25:47.164 [DEBUG] [Thread-11652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:25:47.164 [DEBUG] [Thread-11652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:25:47.164 [DEBUG] [Thread-11652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:25:47.164 [DEBUG] [Thread-11652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:25:47.164 [DEBUG] [Thread-11652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] client lang: <none>
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] server lang: <none>
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] kex follows: False
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] Compression: none
2025-11-26T04:25:47.165 [DEBUG] [Thread-11652] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:25:47.224 [DEBUG] [Thread-11652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:25:47.225 [DEBUG] [Thread-11652] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:25:47.225 [DEBUG] [Thread-11652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:25:47.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:25:47.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:25:47.284 [DEBUG] [Thread-11652] [transport.py] [_log()] userauth is OK
2025-11-26T04:25:47.284 [DEBUG] [Thread-11652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:25:47.284 [DEBUG] [Thread-11652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:25:47.284 [DEBUG] [Thread-11652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:25:47.284 [DEBUG] [Thread-11652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:25:47.298 [INFO] [Thread-11652] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:25:47.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:25:47.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:25:47.781 [DEBUG] [Thread-11654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:25:48.140 [DEBUG] [Thread-11652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:25:48.141 [DEBUG] [Thread-11652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:25:48.189 [DEBUG] [Thread-11652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:25:48.189 [DEBUG] [Thread-11652] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:25:48.198 [DEBUG] [Thread-11652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:25:48.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:25:48.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:25:48.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:25:48.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:25:48.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:25:48.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:25:48.235 [DEBUG] [Thread-11652] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:26:02.844 [DEBUG] [Thread-11655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:26:07.320 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:26:07.321 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:26:17.872 [DEBUG] [Thread-11656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:26:18.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:26:18.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:26:18.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:26:18.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 26, 7), 27.9, 13.97, 0.0, 9.42, 18.4, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:26:18.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:26:07
2025-11-26T04:26:19.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:26:19.183 [DEBUG] [Thread-11657] [transport.py] [_log()] starting thread (client mode): 0x70d7d2d0
2025-11-26T04:26:19.183 [DEBUG] [Thread-11657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:26:19.203 [DEBUG] [Thread-11657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:26:19.203 [INFO] [Thread-11657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] client lang: <none>
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] server lang: <none>
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] kex follows: False
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] Compression: none
2025-11-26T04:26:19.207 [DEBUG] [Thread-11657] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:26:19.224 [DEBUG] [Thread-11657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:26:19.224 [DEBUG] [Thread-11657] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:26:19.225 [DEBUG] [Thread-11657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:26:19.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:26:19.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:26:19.269 [DEBUG] [Thread-11657] [transport.py] [_log()] userauth is OK
2025-11-26T04:26:19.269 [DEBUG] [Thread-11657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:26:19.269 [DEBUG] [Thread-11657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:26:19.269 [DEBUG] [Thread-11657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:26:19.270 [DEBUG] [Thread-11657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:26:19.290 [INFO] [Thread-11657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:26:19.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:26:19.934 [DEBUG] [Thread-11657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:26:19.934 [DEBUG] [Thread-11657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:26:19.934 [DEBUG] [Thread-11657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:26:19.975 [DEBUG] [Thread-11657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:26:19.975 [DEBUG] [Thread-11657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:26:19.977 [DEBUG] [Thread-11657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:26:19.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:26:19.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:26:19.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:26:19.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:26:19.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:26:19.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:26:19.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.101137 -999.00  +18.70   8.78     19   -5.20 1 1 1 1 1     1    0 23.42 -38.95 ZNESW 7.7 8.8 59.0 11.0 18.9 -26.0 18.8 -25.3 18.5 -24.0 18.8 -25.0
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.101137
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:26:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:26:07', tmtdew=27.9, humidity=13.97, cloud=0.0, wind=9.42, temperature=18.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:26:07', seeing=1.06, atlas_timestamp='2025-11-26T02:25:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:25:00')
2025-11-26T04:26:20.001 [DEBUG] [Thread-11657] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:26:20.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:26:20.087 [DEBUG] [Thread-11660] [transport.py] [_log()] starting thread (client mode): 0x70d2ad10
2025-11-26T04:26:20.087 [DEBUG] [Thread-11660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:26:20.101 [DEBUG] [Thread-11660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:26:20.101 [INFO] [Thread-11660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:26:20.108 [DEBUG] [Thread-11660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:26:20.108 [DEBUG] [Thread-11660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] client lang: <none>
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] server lang: <none>
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] kex follows: False
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:26:20.109 [DEBUG] [Thread-11660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:26:20.110 [DEBUG] [Thread-11660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:26:20.110 [DEBUG] [Thread-11660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:26:20.110 [DEBUG] [Thread-11660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:26:20.110 [DEBUG] [Thread-11660] [transport.py] [_log()] Compression: none
2025-11-26T04:26:20.110 [DEBUG] [Thread-11660] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:26:20.169 [DEBUG] [Thread-11660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:26:20.169 [DEBUG] [Thread-11660] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:26:20.170 [DEBUG] [Thread-11660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:26:20.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:26:20.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:26:20.225 [DEBUG] [Thread-11660] [transport.py] [_log()] userauth is OK
2025-11-26T04:26:20.225 [DEBUG] [Thread-11660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:26:20.225 [DEBUG] [Thread-11660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:26:20.225 [DEBUG] [Thread-11660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:26:20.225 [DEBUG] [Thread-11660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:26:20.244 [INFO] [Thread-11660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:26:20.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:26:20.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:26:21.055 [DEBUG] [Thread-11660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:26:21.056 [DEBUG] [Thread-11660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:26:21.104 [DEBUG] [Thread-11660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:26:21.104 [DEBUG] [Thread-11660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:26:21.113 [DEBUG] [Thread-11660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:26:21.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:26:21.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:26:21.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:26:21.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:26:21.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:26:21.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:26:21.150 [DEBUG] [Thread-11660] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:26:29.293 [DEBUG] [Thread-11662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:26:32.909 [DEBUG] [Thread-11663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:26:47.969 [DEBUG] [Thread-11664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:26:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:26:51.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:26:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:26:51.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 26, 39), 27.84, 13.99, 0.0, 10.96, 18.37, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:26:51.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:26:39
2025-11-26T04:26:51.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:26:52.073 [DEBUG] [Thread-11665] [transport.py] [_log()] starting thread (client mode): 0x70d1c460
2025-11-26T04:26:52.073 [DEBUG] [Thread-11665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:26:52.095 [DEBUG] [Thread-11665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:26:52.096 [INFO] [Thread-11665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:26:52.098 [DEBUG] [Thread-11665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:26:52.098 [DEBUG] [Thread-11665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] client lang: <none>
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] server lang: <none>
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] kex follows: False
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] Compression: none
2025-11-26T04:26:52.099 [DEBUG] [Thread-11665] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:26:52.116 [DEBUG] [Thread-11665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:26:52.116 [DEBUG] [Thread-11665] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:26:52.117 [DEBUG] [Thread-11665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:26:52.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:26:52.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:26:52.119 [DEBUG] [Thread-11665] [transport.py] [_log()] userauth is OK
2025-11-26T04:26:52.119 [DEBUG] [Thread-11665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:26:52.119 [DEBUG] [Thread-11665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:26:52.119 [DEBUG] [Thread-11665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:26:52.119 [DEBUG] [Thread-11665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:26:52.144 [INFO] [Thread-11665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:26:52.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:26:52.887 [DEBUG] [Thread-11665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:26:52.887 [DEBUG] [Thread-11665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:26:52.888 [DEBUG] [Thread-11665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:26:52.928 [DEBUG] [Thread-11665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:26:52.928 [DEBUG] [Thread-11665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:26:52.933 [DEBUG] [Thread-11665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:26:52.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:26:52.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:26:52.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:26:52.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:26:52.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:26:52.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:26:52.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:26:52.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:26:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:26:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.101484 -999.00  +18.70   8.99     19   -5.20 1 1 1 1 1     1    0 23.05 -42.23 ZNESW 10.3 9.0 59.0 10.7 18.8 -25.7 18.8 -25.2 18.5 -24.0 18.8 -25.0
2025-11-26T04:26:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:26:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:26:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.101484
2025-11-26T04:26:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:26:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:26:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:26:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:26:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:26:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:26:39', tmtdew=27.84, humidity=13.99, cloud=0.0, wind=10.96, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:26:39', seeing=1.11, atlas_timestamp='2025-11-26T02:26:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:25:00')
2025-11-26T04:26:52.960 [DEBUG] [Thread-11665] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:26:53.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:26:53.056 [DEBUG] [Thread-11668] [transport.py] [_log()] starting thread (client mode): 0x70de7eb0
2025-11-26T04:26:53.056 [DEBUG] [Thread-11668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:26:53.070 [DEBUG] [Thread-11668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:26:53.071 [INFO] [Thread-11668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:26:53.078 [DEBUG] [Thread-11668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:26:53.078 [DEBUG] [Thread-11668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:26:53.078 [DEBUG] [Thread-11668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:26:53.078 [DEBUG] [Thread-11668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] client lang: <none>
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] server lang: <none>
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] kex follows: False
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] Compression: none
2025-11-26T04:26:53.079 [DEBUG] [Thread-11668] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:26:53.141 [DEBUG] [Thread-11668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:26:53.141 [DEBUG] [Thread-11668] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:26:53.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:26:53.142 [DEBUG] [Thread-11668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:26:53.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:26:53.197 [DEBUG] [Thread-11668] [transport.py] [_log()] userauth is OK
2025-11-26T04:26:53.197 [DEBUG] [Thread-11668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:26:53.197 [DEBUG] [Thread-11668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:26:53.197 [DEBUG] [Thread-11668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:26:53.197 [DEBUG] [Thread-11668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:26:53.215 [INFO] [Thread-11668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:26:53.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:26:53.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:26:54.038 [DEBUG] [Thread-11668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:26:54.038 [DEBUG] [Thread-11668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:26:54.087 [DEBUG] [Thread-11668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:26:54.087 [DEBUG] [Thread-11668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:26:54.096 [DEBUG] [Thread-11668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:26:54.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:26:54.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:26:54.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:26:54.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:26:54.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:26:54.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:26:54.131 [DEBUG] [Thread-11668] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:27:03.005 [DEBUG] [Thread-11670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:27:07.522 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:27:07.523 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:27:18.048 [DEBUG] [Thread-11671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:27:24.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:27:24.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:27:24.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:27:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 27, 11), 27.81, 14.02, 0.0, 10.96, 18.34, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:27:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:27:11
2025-11-26T04:27:24.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:27:25.071 [DEBUG] [Thread-11672] [transport.py] [_log()] starting thread (client mode): 0x70d7f970
2025-11-26T04:27:25.071 [DEBUG] [Thread-11672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:27:25.091 [DEBUG] [Thread-11672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:27:25.091 [INFO] [Thread-11672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:27:25.094 [DEBUG] [Thread-11672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] client lang: <none>
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] server lang: <none>
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] kex follows: False
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] Compression: none
2025-11-26T04:27:25.095 [DEBUG] [Thread-11672] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:27:25.115 [DEBUG] [Thread-11672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:27:25.115 [DEBUG] [Thread-11672] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:27:25.116 [DEBUG] [Thread-11672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:27:25.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:27:25.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:27:25.157 [DEBUG] [Thread-11672] [transport.py] [_log()] userauth is OK
2025-11-26T04:27:25.157 [DEBUG] [Thread-11672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:27:25.158 [DEBUG] [Thread-11672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:27:25.158 [DEBUG] [Thread-11672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:27:25.158 [DEBUG] [Thread-11672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:27:25.199 [INFO] [Thread-11672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:27:25.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:27:25.834 [DEBUG] [Thread-11672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:27:25.834 [DEBUG] [Thread-11672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:27:25.835 [DEBUG] [Thread-11672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:27:25.876 [DEBUG] [Thread-11672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:27:25.876 [DEBUG] [Thread-11672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:27:25.880 [DEBUG] [Thread-11672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:27:25.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:27:25.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:27:25.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:27:25.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:27:25.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:27:25.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:27:25.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:27:25.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:27:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:27:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.101831 -999.00  +18.70   7.90     19   -5.20 1 1 1 1 1     1    0 23.17 -44.62 ZNESW 7.6 7.9 61.2 10.9 18.8 -25.8 18.8 -25.1 18.5 -23.8 18.8 -24.9
2025-11-26T04:27:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:27:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:27:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.101831
2025-11-26T04:27:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:27:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:27:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:27:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:27:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:27:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:27:11', tmtdew=27.81, humidity=14.02, cloud=0.0, wind=10.96, temperature=18.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:27:11', seeing=1.05, atlas_timestamp='2025-11-26T02:26:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:25:00')
2025-11-26T04:27:25.906 [DEBUG] [Thread-11672] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:27:25.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:27:26.001 [DEBUG] [Thread-11675] [transport.py] [_log()] starting thread (client mode): 0x70de72e0
2025-11-26T04:27:26.002 [DEBUG] [Thread-11675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:27:26.016 [DEBUG] [Thread-11675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:27:26.016 [INFO] [Thread-11675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] client lang: <none>
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] server lang: <none>
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] kex follows: False
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:27:26.024 [DEBUG] [Thread-11675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:27:26.025 [DEBUG] [Thread-11675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:27:26.025 [DEBUG] [Thread-11675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:27:26.025 [DEBUG] [Thread-11675] [transport.py] [_log()] Compression: none
2025-11-26T04:27:26.025 [DEBUG] [Thread-11675] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:27:26.083 [DEBUG] [Thread-11675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:27:26.084 [DEBUG] [Thread-11675] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:27:26.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:27:26.085 [DEBUG] [Thread-11675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:27:26.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:27:26.140 [DEBUG] [Thread-11675] [transport.py] [_log()] userauth is OK
2025-11-26T04:27:26.141 [DEBUG] [Thread-11675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:27:26.141 [DEBUG] [Thread-11675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:27:26.141 [DEBUG] [Thread-11675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:27:26.141 [DEBUG] [Thread-11675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:27:26.159 [INFO] [Thread-11675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:27:26.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:27:26.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:27:26.983 [DEBUG] [Thread-11675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:27:26.984 [DEBUG] [Thread-11675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:27:27.032 [DEBUG] [Thread-11675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:27:27.032 [DEBUG] [Thread-11675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:27:27.042 [DEBUG] [Thread-11675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:27:27.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:27:27.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:27:27.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:27:27.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:27:27.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:27:27.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:27:27.078 [DEBUG] [Thread-11675] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:27:29.369 [DEBUG] [Thread-11677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:27:33.081 [DEBUG] [Thread-11678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:27:48.133 [DEBUG] [Thread-11679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:27:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:27:57.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:27:57.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:27:57.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 27, 43), 27.74, 14.04, 0.0, 10.8, 18.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:27:57.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:27:43
2025-11-26T04:27:57.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:27:58.075 [DEBUG] [Thread-11680] [transport.py] [_log()] starting thread (client mode): 0x70d1f430
2025-11-26T04:27:58.075 [DEBUG] [Thread-11680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:27:58.090 [DEBUG] [Thread-11680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:27:58.091 [INFO] [Thread-11680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] client lang: <none>
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] server lang: <none>
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] kex follows: False
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] Compression: none
2025-11-26T04:27:58.094 [DEBUG] [Thread-11680] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:27:58.110 [DEBUG] [Thread-11680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:27:58.110 [DEBUG] [Thread-11680] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:27:58.110 [DEBUG] [Thread-11680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:27:58.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:27:58.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:27:58.111 [DEBUG] [Thread-11680] [transport.py] [_log()] userauth is OK
2025-11-26T04:27:58.111 [DEBUG] [Thread-11680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:27:58.111 [DEBUG] [Thread-11680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:27:58.111 [DEBUG] [Thread-11680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:27:58.111 [DEBUG] [Thread-11680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:27:58.122 [INFO] [Thread-11680] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:27:58.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:27:58.930 [DEBUG] [Thread-11680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:27:58.930 [DEBUG] [Thread-11680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:27:58.930 [DEBUG] [Thread-11680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:27:58.971 [DEBUG] [Thread-11680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:27:58.971 [DEBUG] [Thread-11680] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:27:58.973 [DEBUG] [Thread-11680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:27:58.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:27:58.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:27:58.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:27:58.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:27:58.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:27:58.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:27:58.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.102178 -999.00  +18.70   9.53     19   -5.20 1 1 1 1 1     1    0 23.39 -44.54 ZNESW 10.1 9.5 62.0 10.9 18.8 -25.6 18.7 -25.2 18.4 -23.9 18.7 -25.0
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.102178
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:27:58.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:27:43', tmtdew=27.74, humidity=14.04, cloud=0.0, wind=10.8, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:27:43', seeing=1.04, atlas_timestamp='2025-11-26T02:27:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:25:00')
2025-11-26T04:27:58.989 [DEBUG] [Thread-11680] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:27:59.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:27:59.076 [DEBUG] [Thread-11683] [transport.py] [_log()] starting thread (client mode): 0x70d7f700
2025-11-26T04:27:59.077 [DEBUG] [Thread-11683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:27:59.091 [DEBUG] [Thread-11683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:27:59.091 [INFO] [Thread-11683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] client lang: <none>
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] server lang: <none>
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] kex follows: False
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] Compression: none
2025-11-26T04:27:59.099 [DEBUG] [Thread-11683] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:27:59.154 [DEBUG] [Thread-11683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:27:59.154 [DEBUG] [Thread-11683] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:27:59.154 [DEBUG] [Thread-11683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:27:59.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:27:59.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:27:59.211 [DEBUG] [Thread-11683] [transport.py] [_log()] userauth is OK
2025-11-26T04:27:59.212 [DEBUG] [Thread-11683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:27:59.212 [DEBUG] [Thread-11683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:27:59.212 [DEBUG] [Thread-11683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:27:59.212 [DEBUG] [Thread-11683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:27:59.225 [INFO] [Thread-11683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:27:59.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:27:59.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:28:00.059 [DEBUG] [Thread-11683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:28:00.060 [DEBUG] [Thread-11683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:28:00.107 [DEBUG] [Thread-11683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:28:00.107 [DEBUG] [Thread-11683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:28:00.115 [DEBUG] [Thread-11683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:28:00.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:28:00.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:28:00.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:28:00.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:28:00.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:28:00.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:28:00.148 [DEBUG] [Thread-11683] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:28:03.172 [DEBUG] [Thread-11685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:28:07.732 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:28:07.734 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:28:18.223 [DEBUG] [Thread-11686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:28:29.443 [DEBUG] [Thread-11687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:28:30.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:28:30.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:28:30.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:28:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 28, 15), 27.74, 14.04, 0.0, 11.12, 18.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:28:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:28:15
2025-11-26T04:28:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:28:31.081 [DEBUG] [Thread-11688] [transport.py] [_log()] starting thread (client mode): 0x70de7c70
2025-11-26T04:28:31.082 [DEBUG] [Thread-11688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:28:31.102 [DEBUG] [Thread-11688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:28:31.102 [INFO] [Thread-11688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:28:31.105 [DEBUG] [Thread-11688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:28:31.105 [DEBUG] [Thread-11688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:28:31.105 [DEBUG] [Thread-11688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:28:31.105 [DEBUG] [Thread-11688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:28:31.105 [DEBUG] [Thread-11688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:28:31.105 [DEBUG] [Thread-11688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] client lang: <none>
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] server lang: <none>
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] kex follows: False
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] Compression: none
2025-11-26T04:28:31.106 [DEBUG] [Thread-11688] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:28:31.121 [DEBUG] [Thread-11688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:28:31.121 [DEBUG] [Thread-11688] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:28:31.121 [DEBUG] [Thread-11688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:28:31.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:28:31.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:28:31.122 [DEBUG] [Thread-11688] [transport.py] [_log()] userauth is OK
2025-11-26T04:28:31.122 [DEBUG] [Thread-11688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:28:31.122 [DEBUG] [Thread-11688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:28:31.122 [DEBUG] [Thread-11688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:28:31.122 [DEBUG] [Thread-11688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:28:31.132 [INFO] [Thread-11688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:28:31.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:28:31.787 [DEBUG] [Thread-11688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:28:31.787 [DEBUG] [Thread-11688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:28:31.787 [DEBUG] [Thread-11688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:28:31.828 [DEBUG] [Thread-11688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:28:31.828 [DEBUG] [Thread-11688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:28:31.831 [DEBUG] [Thread-11688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:28:31.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:28:31.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:28:31.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:28:31.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:28:31.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:28:31.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:28:31.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:28:31.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:28:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:28:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.102873 -999.00  +18.60   7.88     19   -5.30 1 1 1 1 1     2    0 22.98 -43.98 ZNESW 7.9 7.9 69.2 9.7 18.7 -25.7 18.7 -25.2 18.4 -24.1 18.6 -24.9
2025-11-26T04:28:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:28:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:28:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.102873
2025-11-26T04:28:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:28:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:28:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:28:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:28:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:28:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:28:15', tmtdew=27.74, humidity=14.04, cloud=0.0, wind=11.12, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:28:15', seeing=1.08, atlas_timestamp='2025-11-26T02:28:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:25:00')
2025-11-26T04:28:31.854 [DEBUG] [Thread-11688] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:28:31.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:28:31.941 [DEBUG] [Thread-11691] [transport.py] [_log()] starting thread (client mode): 0x70de7010
2025-11-26T04:28:31.941 [DEBUG] [Thread-11691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:28:31.956 [DEBUG] [Thread-11691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:28:31.956 [INFO] [Thread-11691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] client lang: <none>
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] server lang: <none>
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] kex follows: False
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] Compression: none
2025-11-26T04:28:31.964 [DEBUG] [Thread-11691] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:28:32.019 [DEBUG] [Thread-11691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:28:32.019 [DEBUG] [Thread-11691] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:28:32.019 [DEBUG] [Thread-11691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:28:32.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:28:32.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:28:32.076 [DEBUG] [Thread-11691] [transport.py] [_log()] userauth is OK
2025-11-26T04:28:32.076 [DEBUG] [Thread-11691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:28:32.076 [DEBUG] [Thread-11691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:28:32.076 [DEBUG] [Thread-11691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:28:32.076 [DEBUG] [Thread-11691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:28:32.090 [INFO] [Thread-11691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:28:32.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:28:32.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:28:32.923 [DEBUG] [Thread-11691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:28:32.923 [DEBUG] [Thread-11691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:28:32.971 [DEBUG] [Thread-11691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:28:32.971 [DEBUG] [Thread-11691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:28:32.979 [DEBUG] [Thread-11691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:28:32.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:28:32.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:28:32.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:28:33.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:28:33.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:28:33.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:28:33.011 [DEBUG] [Thread-11691] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:28:33.255 [DEBUG] [Thread-11693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:28:48.291 [DEBUG] [Thread-11694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:29:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:29:03.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:29:03.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:29:03.324 [DEBUG] [Thread-11695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:29:03.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 28, 47), 27.68, 14.56, 0.0, 10.94, 18.24, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:29:03.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:28:47
2025-11-26T04:29:03.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:29:03.926 [DEBUG] [Thread-11696] [transport.py] [_log()] starting thread (client mode): 0x70de6830
2025-11-26T04:29:03.926 [DEBUG] [Thread-11696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:29:03.948 [DEBUG] [Thread-11696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:29:03.948 [INFO] [Thread-11696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:29:03.951 [DEBUG] [Thread-11696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:29:03.951 [DEBUG] [Thread-11696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] client lang: <none>
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] server lang: <none>
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] kex follows: False
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:29:03.952 [DEBUG] [Thread-11696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:29:03.953 [DEBUG] [Thread-11696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:29:03.953 [DEBUG] [Thread-11696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:29:03.953 [DEBUG] [Thread-11696] [transport.py] [_log()] Compression: none
2025-11-26T04:29:03.953 [DEBUG] [Thread-11696] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:29:03.973 [DEBUG] [Thread-11696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:29:03.974 [DEBUG] [Thread-11696] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:29:03.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:29:03.975 [DEBUG] [Thread-11696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:29:03.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:29:03.977 [DEBUG] [Thread-11696] [transport.py] [_log()] userauth is OK
2025-11-26T04:29:03.977 [DEBUG] [Thread-11696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:29:03.977 [DEBUG] [Thread-11696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:29:03.978 [DEBUG] [Thread-11696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:29:03.978 [DEBUG] [Thread-11696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:29:04.003 [INFO] [Thread-11696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:29:04.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:29:04.808 [DEBUG] [Thread-11696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:29:04.809 [DEBUG] [Thread-11696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:29:04.809 [DEBUG] [Thread-11696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:29:04.850 [DEBUG] [Thread-11696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:29:04.850 [DEBUG] [Thread-11696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:29:04.854 [DEBUG] [Thread-11696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:29:04.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:29:04.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:29:04.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:29:04.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:29:04.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:29:04.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:29:04.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:29:04.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:29:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:29:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.103220 -999.00  +18.60   8.76     19   -5.20 1 1 1 1 1     2    0 23.20 -45.32 ZNESW 9.2 8.8 62.6 11.2 18.7 -25.6 18.7 -25.0 18.4 -23.8 18.6 -24.7
2025-11-26T04:29:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:29:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:29:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.103220
2025-11-26T04:29:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:29:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:29:04.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:29:04.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:29:04.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:29:04.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:28:47', tmtdew=27.68, humidity=14.56, cloud=0.0, wind=10.94, temperature=18.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:28:47', seeing=1.08, atlas_timestamp='2025-11-26T02:28:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:25:00')
2025-11-26T04:29:04.881 [DEBUG] [Thread-11696] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:29:04.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:29:04.976 [DEBUG] [Thread-11699] [transport.py] [_log()] starting thread (client mode): 0x70d7db70
2025-11-26T04:29:04.976 [DEBUG] [Thread-11699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:29:04.990 [DEBUG] [Thread-11699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:29:04.990 [INFO] [Thread-11699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:29:04.997 [DEBUG] [Thread-11699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] client lang: <none>
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] server lang: <none>
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] kex follows: False
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:29:04.998 [DEBUG] [Thread-11699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:29:04.999 [DEBUG] [Thread-11699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:29:04.999 [DEBUG] [Thread-11699] [transport.py] [_log()] Compression: none
2025-11-26T04:29:04.999 [DEBUG] [Thread-11699] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:29:05.055 [DEBUG] [Thread-11699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:29:05.056 [DEBUG] [Thread-11699] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:29:05.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:29:05.057 [DEBUG] [Thread-11699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:29:05.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:29:05.115 [DEBUG] [Thread-11699] [transport.py] [_log()] userauth is OK
2025-11-26T04:29:05.115 [DEBUG] [Thread-11699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:29:05.115 [DEBUG] [Thread-11699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:29:05.115 [DEBUG] [Thread-11699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:29:05.115 [DEBUG] [Thread-11699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:29:05.137 [INFO] [Thread-11699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:29:05.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:29:05.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:29:05.966 [DEBUG] [Thread-11699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:29:05.966 [DEBUG] [Thread-11699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:29:06.013 [DEBUG] [Thread-11699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:29:06.014 [DEBUG] [Thread-11699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:29:06.023 [DEBUG] [Thread-11699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:29:06.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:29:06.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:29:06.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:29:06.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:29:06.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:29:06.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:29:06.059 [DEBUG] [Thread-11699] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:29:07.935 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:29:07.945 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:29:18.353 [DEBUG] [Thread-11701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:29:29.516 [DEBUG] [Thread-11702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:29:33.405 [DEBUG] [Thread-11703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:29:36.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:29:36.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:29:36.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:29:36.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 29, 19), 27.66, 14.57, 0.0, 11.05, 18.2, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:29:36.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:29:19
2025-11-26T04:29:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:29:36.975 [DEBUG] [Thread-11704] [transport.py] [_log()] starting thread (client mode): 0x70d03100
2025-11-26T04:29:36.976 [DEBUG] [Thread-11704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:29:36.995 [DEBUG] [Thread-11704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:29:36.995 [INFO] [Thread-11704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:29:36.997 [DEBUG] [Thread-11704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] client lang: <none>
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] server lang: <none>
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] kex follows: False
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] Compression: none
2025-11-26T04:29:36.998 [DEBUG] [Thread-11704] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:29:37.010 [DEBUG] [Thread-11704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:29:37.010 [DEBUG] [Thread-11704] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:29:37.011 [DEBUG] [Thread-11704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:29:37.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:29:37.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:29:37.013 [DEBUG] [Thread-11704] [transport.py] [_log()] userauth is OK
2025-11-26T04:29:37.013 [DEBUG] [Thread-11704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:29:37.013 [DEBUG] [Thread-11704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:29:37.013 [DEBUG] [Thread-11704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:29:37.013 [DEBUG] [Thread-11704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:29:37.032 [INFO] [Thread-11704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:29:37.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:29:37.667 [DEBUG] [Thread-11704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:29:37.667 [DEBUG] [Thread-11704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:29:37.667 [DEBUG] [Thread-11704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:29:37.708 [DEBUG] [Thread-11704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:29:37.708 [DEBUG] [Thread-11704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:29:37.711 [DEBUG] [Thread-11704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:29:37.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:29:37.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:29:37.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:29:37.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:29:37.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:29:37.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:29:37.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:29:37.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:29:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:29:37.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.103567 -999.00  +18.60  10.05     19   -5.20 1 1 1 1 1     2    0 22.72 -47.62 ZNESW 8.3 10.1 62.6 11.4 18.7 -25.6 18.6 -25.0 18.4 -23.7 18.6 -24.7
2025-11-26T04:29:37.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:29:37.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:29:37.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.103567
2025-11-26T04:29:37.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:29:37.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:29:37.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:29:37.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:29:37.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:29:37.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:29:19', tmtdew=27.66, humidity=14.57, cloud=0.0, wind=11.05, temperature=18.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:29:19', seeing=1.07, atlas_timestamp='2025-11-26T02:29:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:27:00')
2025-11-26T04:29:37.739 [DEBUG] [Thread-11704] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:29:37.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:29:37.833 [DEBUG] [Thread-11707] [transport.py] [_log()] starting thread (client mode): 0x70d76b00
2025-11-26T04:29:37.833 [DEBUG] [Thread-11707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:29:37.848 [DEBUG] [Thread-11707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:29:37.848 [INFO] [Thread-11707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] client lang: <none>
2025-11-26T04:29:37.857 [DEBUG] [Thread-11707] [transport.py] [_log()] server lang: <none>
2025-11-26T04:29:37.858 [DEBUG] [Thread-11707] [transport.py] [_log()] kex follows: False
2025-11-26T04:29:37.858 [DEBUG] [Thread-11707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:29:37.858 [DEBUG] [Thread-11707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:29:37.858 [DEBUG] [Thread-11707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:29:37.858 [DEBUG] [Thread-11707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:29:37.858 [DEBUG] [Thread-11707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:29:37.858 [DEBUG] [Thread-11707] [transport.py] [_log()] Compression: none
2025-11-26T04:29:37.858 [DEBUG] [Thread-11707] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:29:37.913 [DEBUG] [Thread-11707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:29:37.914 [DEBUG] [Thread-11707] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:29:37.914 [DEBUG] [Thread-11707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:29:37.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:29:37.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:29:37.969 [DEBUG] [Thread-11707] [transport.py] [_log()] userauth is OK
2025-11-26T04:29:37.970 [DEBUG] [Thread-11707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:29:37.970 [DEBUG] [Thread-11707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:29:37.970 [DEBUG] [Thread-11707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:29:37.970 [DEBUG] [Thread-11707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:29:37.995 [INFO] [Thread-11707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:29:37.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:29:37.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:29:38.832 [DEBUG] [Thread-11707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:29:38.832 [DEBUG] [Thread-11707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:29:38.880 [DEBUG] [Thread-11707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:29:38.880 [DEBUG] [Thread-11707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:29:38.889 [DEBUG] [Thread-11707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:29:38.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:29:38.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:29:38.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:29:38.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:29:38.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:29:38.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:29:38.929 [DEBUG] [Thread-11707] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:29:48.442 [DEBUG] [Thread-11709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:30:03.486 [DEBUG] [Thread-11710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:30:08.143 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:30:08.145 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:30:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:30:08.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:30: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
2025-11-26T04:30:09.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 29, 51), 27.7, 14.59, 0.0, 11.13, 18.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:30:09.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:29:51
2025-11-26T04:30:09.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:30:09.876 [DEBUG] [Thread-11711] [transport.py] [_log()] starting thread (client mode): 0x70df9a20
2025-11-26T04:30:09.876 [DEBUG] [Thread-11711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:30:09.897 [DEBUG] [Thread-11711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:30:09.897 [INFO] [Thread-11711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] client lang: <none>
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] server lang: <none>
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] kex follows: False
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] Compression: none
2025-11-26T04:30:09.901 [DEBUG] [Thread-11711] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:30:09.911 [DEBUG] [Thread-11711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:30:09.911 [DEBUG] [Thread-11711] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:30:09.912 [DEBUG] [Thread-11711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:30:09.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:30:09.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:30:09.915 [DEBUG] [Thread-11711] [transport.py] [_log()] userauth is OK
2025-11-26T04:30:09.915 [DEBUG] [Thread-11711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:30:09.915 [DEBUG] [Thread-11711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:30:09.915 [DEBUG] [Thread-11711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:30:09.915 [DEBUG] [Thread-11711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:30:09.936 [INFO] [Thread-11711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:30:09.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:30:13.301 [DEBUG] [Thread-11711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:30:13.301 [DEBUG] [Thread-11711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:30:13.302 [DEBUG] [Thread-11711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:30:13.342 [DEBUG] [Thread-11711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:30:13.342 [DEBUG] [Thread-11711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:30:13.346 [DEBUG] [Thread-11711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:30:13.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:30:13.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:30:13.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:30:13.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:30:13.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:30:13.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:30:13.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:30:13.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:30:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:30:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.103914 -999.00  +18.60   7.75     19   -5.30 1 1 1 1 1     2    0 22.83 -50.64 ZNESW 8.6 7.8 58.4 9.5 18.7 -25.7 18.6 -25.1 18.4 -23.9 18.6 -24.9
2025-11-26T04:30:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:30:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:30:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.103914
2025-11-26T04:30:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:30:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:30:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:30:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:30:13.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:30:13.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:29:51', tmtdew=27.7, humidity=14.59, cloud=0.0, wind=11.13, temperature=18.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:29:51', seeing=0.94, atlas_timestamp='2025-11-26T02:29:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:27:00')
2025-11-26T04:30:13.471 [DEBUG] [Thread-11711] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:30:13.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:30:13.567 [DEBUG] [Thread-11714] [transport.py] [_log()] starting thread (client mode): 0x70d00970
2025-11-26T04:30:13.567 [DEBUG] [Thread-11714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:30:13.581 [DEBUG] [Thread-11714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:30:13.581 [INFO] [Thread-11714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:30:13.589 [DEBUG] [Thread-11714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:30:13.589 [DEBUG] [Thread-11714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:30:13.589 [DEBUG] [Thread-11714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:30:13.590 [DEBUG] [Thread-11714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:30:13.590 [DEBUG] [Thread-11714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:30:13.590 [DEBUG] [Thread-11714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:30:13.590 [DEBUG] [Thread-11714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:30:13.590 [DEBUG] [Thread-11714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:30:13.590 [DEBUG] [Thread-11714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:30:13.590 [DEBUG] [Thread-11714] [transport.py] [_log()] client lang: <none>
2025-11-26T04:30:13.590 [DEBUG] [Thread-11714] [transport.py] [_log()] server lang: <none>
2025-11-26T04:30:13.590 [DEBUG] [Thread-11714] [transport.py] [_log()] kex follows: False
2025-11-26T04:30:13.591 [DEBUG] [Thread-11714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:30:13.591 [DEBUG] [Thread-11714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:30:13.591 [DEBUG] [Thread-11714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:30:13.591 [DEBUG] [Thread-11714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:30:13.591 [DEBUG] [Thread-11714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:30:13.591 [DEBUG] [Thread-11714] [transport.py] [_log()] Compression: none
2025-11-26T04:30:13.591 [DEBUG] [Thread-11714] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:30:13.648 [DEBUG] [Thread-11714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:30:13.648 [DEBUG] [Thread-11714] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:30:13.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:30:13.650 [DEBUG] [Thread-11714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:30:13.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:30:13.704 [DEBUG] [Thread-11714] [transport.py] [_log()] userauth is OK
2025-11-26T04:30:13.704 [DEBUG] [Thread-11714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:30:13.704 [DEBUG] [Thread-11714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:30:13.704 [DEBUG] [Thread-11714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:30:13.705 [DEBUG] [Thread-11714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:30:13.723 [INFO] [Thread-11714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:30:13.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:30:13.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:30:14.555 [DEBUG] [Thread-11714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:30:14.555 [DEBUG] [Thread-11714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:30:14.603 [DEBUG] [Thread-11714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:30:14.603 [DEBUG] [Thread-11714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:30:14.612 [DEBUG] [Thread-11714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:30:14.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:30:14.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:30:14.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:30:14.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:30:14.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:30:14.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:30:14.649 [DEBUG] [Thread-11714] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:30:18.523 [DEBUG] [Thread-11716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:30:29.606 [DEBUG] [Thread-11717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:30:33.571 [DEBUG] [Thread-11718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:30:44.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:30:44.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:30:44.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:30:45.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 30, 23), 27.69, 14.59, 0.0, 11.51, 18.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:30:45.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:30:23
2025-11-26T04:30:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:30:45.577 [DEBUG] [Thread-11719] [transport.py] [_log()] starting thread (client mode): 0x70d01120
2025-11-26T04:30:45.577 [DEBUG] [Thread-11719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:30:45.598 [DEBUG] [Thread-11719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:30:45.598 [INFO] [Thread-11719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] client lang: <none>
2025-11-26T04:30:45.601 [DEBUG] [Thread-11719] [transport.py] [_log()] server lang: <none>
2025-11-26T04:30:45.602 [DEBUG] [Thread-11719] [transport.py] [_log()] kex follows: False
2025-11-26T04:30:45.602 [DEBUG] [Thread-11719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:30:45.602 [DEBUG] [Thread-11719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:30:45.602 [DEBUG] [Thread-11719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:30:45.602 [DEBUG] [Thread-11719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:30:45.602 [DEBUG] [Thread-11719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:30:45.602 [DEBUG] [Thread-11719] [transport.py] [_log()] Compression: none
2025-11-26T04:30:45.602 [DEBUG] [Thread-11719] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:30:45.618 [DEBUG] [Thread-11719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:30:45.618 [DEBUG] [Thread-11719] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:30:45.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:30:45.618 [DEBUG] [Thread-11719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:30:45.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:30:45.619 [DEBUG] [Thread-11719] [transport.py] [_log()] userauth is OK
2025-11-26T04:30:45.619 [DEBUG] [Thread-11719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:30:45.619 [DEBUG] [Thread-11719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:30:45.619 [DEBUG] [Thread-11719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:30:45.619 [DEBUG] [Thread-11719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:30:45.629 [INFO] [Thread-11719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:30:45.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:30:46.261 [DEBUG] [Thread-11719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:30:46.261 [DEBUG] [Thread-11719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:30:46.261 [DEBUG] [Thread-11719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:30:46.302 [DEBUG] [Thread-11719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:30:46.302 [DEBUG] [Thread-11719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:30:46.305 [DEBUG] [Thread-11719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:30:46.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:30:46.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:30:46.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:30:46.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:30:46.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:30:46.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:30:46.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:30:46.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:30:46.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:30:46.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.104261 -999.00  +18.50   8.24     19   -5.30 1 1 1 1 1     3    0 22.68 -57.05 ZNESW 7.5 8.2 56.9 9.9 18.6 -25.6 18.6 -25.1 18.4 -23.8 18.6 -24.8
2025-11-26T04:30:46.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:30:46.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:30:46.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.104261
2025-11-26T04:30:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:30:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:30:46.333 [DEBUG] [Thread-11719] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:30:46.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:30:46.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:30:46.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:30:46.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:30:23', tmtdew=27.69, humidity=14.59, cloud=0.0, wind=11.51, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:30:23', seeing=1.04, atlas_timestamp='2025-11-26T02:30:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:27:00')
2025-11-26T04:30:46.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:30:46.427 [DEBUG] [Thread-11722] [transport.py] [_log()] starting thread (client mode): 0x70de4e20
2025-11-26T04:30:46.427 [DEBUG] [Thread-11722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:30:46.441 [DEBUG] [Thread-11722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:30:46.442 [INFO] [Thread-11722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:30:46.449 [DEBUG] [Thread-11722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] client lang: <none>
2025-11-26T04:30:46.450 [DEBUG] [Thread-11722] [transport.py] [_log()] server lang: <none>
2025-11-26T04:30:46.451 [DEBUG] [Thread-11722] [transport.py] [_log()] kex follows: False
2025-11-26T04:30:46.451 [DEBUG] [Thread-11722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:30:46.451 [DEBUG] [Thread-11722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:30:46.451 [DEBUG] [Thread-11722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:30:46.451 [DEBUG] [Thread-11722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:30:46.451 [DEBUG] [Thread-11722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:30:46.451 [DEBUG] [Thread-11722] [transport.py] [_log()] Compression: none
2025-11-26T04:30:46.452 [DEBUG] [Thread-11722] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:30:46.510 [DEBUG] [Thread-11722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:30:46.510 [DEBUG] [Thread-11722] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:30:46.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:30:46.512 [DEBUG] [Thread-11722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:30:46.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:30:46.566 [DEBUG] [Thread-11722] [transport.py] [_log()] userauth is OK
2025-11-26T04:30:46.566 [DEBUG] [Thread-11722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:30:46.566 [DEBUG] [Thread-11722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:30:46.566 [DEBUG] [Thread-11722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:30:46.566 [DEBUG] [Thread-11722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:30:46.593 [INFO] [Thread-11722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:30:46.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:30:46.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:30:47.439 [DEBUG] [Thread-11722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:30:47.439 [DEBUG] [Thread-11722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:30:47.486 [DEBUG] [Thread-11722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:30:47.487 [DEBUG] [Thread-11722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:30:47.496 [DEBUG] [Thread-11722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:30:47.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:30:47.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:30:47.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:30:47.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:30:47.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:30:47.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:30:47.533 [DEBUG] [Thread-11722] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:30:48.609 [DEBUG] [Thread-11724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:31:03.669 [DEBUG] [Thread-11725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:31:08.347 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:31:08.348 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:31:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:31:17.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:31:17.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:31:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 30, 55), 27.65, 14.59, 0.0, 10.99, 18.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:31:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:30:55
2025-11-26T04:31:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:31:18.491 [DEBUG] [Thread-11726] [transport.py] [_log()] starting thread (client mode): 0x70d03f70
2025-11-26T04:31:18.491 [DEBUG] [Thread-11726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:31:18.511 [DEBUG] [Thread-11726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:31:18.511 [INFO] [Thread-11726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:31:18.512 [DEBUG] [Thread-11726] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:31:18.512 [DEBUG] [Thread-11726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] client lang: <none>
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] server lang: <none>
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] kex follows: False
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:31:18.513 [DEBUG] [Thread-11726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:31:18.514 [DEBUG] [Thread-11726] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:31:18.514 [DEBUG] [Thread-11726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:31:18.514 [DEBUG] [Thread-11726] [transport.py] [_log()] Compression: none
2025-11-26T04:31:18.514 [DEBUG] [Thread-11726] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:31:18.529 [DEBUG] [Thread-11726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:31:18.530 [DEBUG] [Thread-11726] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:31:18.530 [DEBUG] [Thread-11726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:31:18.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:31:18.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:31:18.532 [DEBUG] [Thread-11726] [transport.py] [_log()] userauth is OK
2025-11-26T04:31:18.532 [DEBUG] [Thread-11726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:31:18.532 [DEBUG] [Thread-11726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:31:18.533 [DEBUG] [Thread-11726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:31:18.533 [DEBUG] [Thread-11726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:31:18.556 [INFO] [Thread-11726] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:31:18.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:31:18.703 [DEBUG] [Thread-11728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:31:19.179 [DEBUG] [Thread-11726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:31:19.179 [DEBUG] [Thread-11726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:31:19.179 [DEBUG] [Thread-11726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:31:19.220 [DEBUG] [Thread-11726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:31:19.220 [DEBUG] [Thread-11726] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:31:19.223 [DEBUG] [Thread-11726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:31:19.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:31:19.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:31:19.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:31:19.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:31:19.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:31:19.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:31:19.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:31:19.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:31:19.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:31:19.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.104609 -999.00  +18.40   8.04     19   -5.20 1 1 1 1 1     3    0 23.14 -55.64 ZNESW 7.8 8.0 62.4 10.7 18.6 -25.6 18.5 -25.1 18.3 -24.0 18.6 -24.9
2025-11-26T04:31:19.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:31:19.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:31:19.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.104609
2025-11-26T04:31:19.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:31:19.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:31:19.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:31:19.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:31:19.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:31:19.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:30:55', tmtdew=27.65, humidity=14.59, cloud=0.0, wind=10.99, temperature=18.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:30:56', seeing=1.1, atlas_timestamp='2025-11-26T02:30:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:27:00')
2025-11-26T04:31:19.249 [DEBUG] [Thread-11726] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:31:19.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:31:19.344 [DEBUG] [Thread-11730] [transport.py] [_log()] starting thread (client mode): 0x70d75240
2025-11-26T04:31:19.344 [DEBUG] [Thread-11730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:31:19.362 [DEBUG] [Thread-11730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:31:19.363 [INFO] [Thread-11730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:31:19.370 [DEBUG] [Thread-11730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:31:19.370 [DEBUG] [Thread-11730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] client lang: <none>
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] server lang: <none>
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] kex follows: False
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:31:19.371 [DEBUG] [Thread-11730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:31:19.372 [DEBUG] [Thread-11730] [transport.py] [_log()] Compression: none
2025-11-26T04:31:19.372 [DEBUG] [Thread-11730] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:31:19.427 [DEBUG] [Thread-11730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:31:19.428 [DEBUG] [Thread-11730] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:31:19.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:31:19.429 [DEBUG] [Thread-11730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:31:19.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:31:19.484 [DEBUG] [Thread-11730] [transport.py] [_log()] userauth is OK
2025-11-26T04:31:19.484 [DEBUG] [Thread-11730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:31:19.484 [DEBUG] [Thread-11730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:31:19.484 [DEBUG] [Thread-11730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:31:19.484 [DEBUG] [Thread-11730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:31:19.503 [INFO] [Thread-11730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:31:19.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:31:19.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:31:20.311 [DEBUG] [Thread-11730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:31:20.311 [DEBUG] [Thread-11730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:31:20.359 [DEBUG] [Thread-11730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:31:20.359 [DEBUG] [Thread-11730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:31:20.367 [DEBUG] [Thread-11730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:31:20.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:31: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')
2025-11-26T04:31:20.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:31:20.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:31:20.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:31:20.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:31:20.400 [DEBUG] [Thread-11730] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:31:29.678 [DEBUG] [Thread-11732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:31:33.739 [DEBUG] [Thread-11733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:31:48.788 [DEBUG] [Thread-11734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:31:50.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:31:50.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:31:50.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:31:51.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 31, 27), 27.64, 14.59, 0.0, 11.73, 18.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:31:51.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:31:27
2025-11-26T04:31:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:31:51.323 [DEBUG] [Thread-11735] [transport.py] [_log()] starting thread (client mode): 0x737c43a0
2025-11-26T04:31:51.323 [DEBUG] [Thread-11735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:31:51.343 [DEBUG] [Thread-11735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:31:51.343 [INFO] [Thread-11735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:31:51.345 [DEBUG] [Thread-11735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:31:51.345 [DEBUG] [Thread-11735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:31:51.345 [DEBUG] [Thread-11735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] client lang: <none>
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] server lang: <none>
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] kex follows: False
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] Compression: none
2025-11-26T04:31:51.346 [DEBUG] [Thread-11735] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:31:51.363 [DEBUG] [Thread-11735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:31:51.364 [DEBUG] [Thread-11735] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:31:51.364 [DEBUG] [Thread-11735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:31:51.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:31:51.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:31:51.366 [DEBUG] [Thread-11735] [transport.py] [_log()] userauth is OK
2025-11-26T04:31:51.367 [DEBUG] [Thread-11735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:31:51.367 [DEBUG] [Thread-11735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:31:51.367 [DEBUG] [Thread-11735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:31:51.367 [DEBUG] [Thread-11735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:31:51.391 [INFO] [Thread-11735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:31:51.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:31:52.008 [DEBUG] [Thread-11735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:31:52.008 [DEBUG] [Thread-11735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:31:52.009 [DEBUG] [Thread-11735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:31:52.049 [DEBUG] [Thread-11735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:31:52.049 [DEBUG] [Thread-11735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:31:52.053 [DEBUG] [Thread-11735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:31:52.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:31:52.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:31:52.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:31:52.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:31:52.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:31:52.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:31:52.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:31:52.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:31:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:31:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.105303 -999.00  +18.50  10.58     19   -5.20 1 1 1 1 1     4    0 22.59 -53.76 ZNESW 9.9 10.6 62.2 12.3 18.6 -25.6 18.5 -24.8 18.3 -23.7 18.5 -24.6
2025-11-26T04:31:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:31:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:31:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.105303
2025-11-26T04:31:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:31:52.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:31:52.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:31:52.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:31:52.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:31:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:31:27', tmtdew=27.64, humidity=14.59, cloud=0.0, wind=11.73, temperature=18.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:31:28', seeing=0.95, atlas_timestamp='2025-11-26T02:31:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.02474999999999916, -0.0037499999999983658, 0.023499999999998522, 0.011499999999999844, 0.08325000000000138, 0.005499999999999616, 0.01025000000000098, -0.008500000000001506, 0.03200000000000003, -0.07324999999999982, 0.02549999999999919, 0.08999999999999986, 0.1092499999999994, 0.051000000000000156, 0.010999999999999233, 0.10725000000000051, 0.08199999999999896, -0.02000000000000135, 0.053749999999999076, 0.08649999999999736, 0.08074999999999832, 0.05025000000000013, 0.05025000000000013, 0.053999999999998494, 0.016500000000000625, 0.00575000000000081, 0.13150000000000084, 0.23899999999999988, 0.22800000000000153, 0.1725000000000012, 0.12100000000000044, 0.08824999999999861], zp_timestamp='2025-11-26T02:27:00')
2025-11-26T04:31:52.079 [DEBUG] [Thread-11735] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:31:52.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:31:52.173 [DEBUG] [Thread-11738] [transport.py] [_log()] starting thread (client mode): 0x70de45e0
2025-11-26T04:31:52.173 [DEBUG] [Thread-11738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:31:52.188 [DEBUG] [Thread-11738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:31:52.188 [INFO] [Thread-11738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] client lang: <none>
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] server lang: <none>
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] kex follows: False
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:31:52.196 [DEBUG] [Thread-11738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:31:52.197 [DEBUG] [Thread-11738] [transport.py] [_log()] Compression: none
2025-11-26T04:31:52.197 [DEBUG] [Thread-11738] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:31:52.253 [DEBUG] [Thread-11738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:31:52.254 [DEBUG] [Thread-11738] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:31:52.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:31:52.255 [DEBUG] [Thread-11738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:31:52.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:31:52.309 [DEBUG] [Thread-11738] [transport.py] [_log()] userauth is OK
2025-11-26T04:31:52.309 [DEBUG] [Thread-11738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:31:52.309 [DEBUG] [Thread-11738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:31:52.309 [DEBUG] [Thread-11738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:31:52.309 [DEBUG] [Thread-11738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:31:52.332 [INFO] [Thread-11738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:31:52.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:31:52.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:31:53.135 [DEBUG] [Thread-11738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:31:53.135 [DEBUG] [Thread-11738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:31:53.183 [DEBUG] [Thread-11738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:31:53.184 [DEBUG] [Thread-11738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:31:53.193 [DEBUG] [Thread-11738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:31:53.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:31:53.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:31:53.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:31:53.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:31:53.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:31:53.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:31:53.230 [DEBUG] [Thread-11738] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:32:03.824 [DEBUG] [Thread-11740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:32:08.550 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:32:08.551 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:32:18.872 [DEBUG] [Thread-11741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:32:23.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:32:23.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:32:23.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:32:23.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 31, 27), 27.64, 14.59, 0.0, 11.73, 18.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:32:23.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:31:27
2025-11-26T04:32:24.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:32:24.165 [DEBUG] [Thread-11742] [transport.py] [_log()] starting thread (client mode): 0x70d01660
2025-11-26T04:32:24.165 [DEBUG] [Thread-11742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:32:24.186 [DEBUG] [Thread-11742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:32:24.186 [INFO] [Thread-11742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:32:24.190 [DEBUG] [Thread-11742] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:32:24.190 [DEBUG] [Thread-11742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:32:24.190 [DEBUG] [Thread-11742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:32:24.190 [DEBUG] [Thread-11742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:32:24.190 [DEBUG] [Thread-11742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:32:24.190 [DEBUG] [Thread-11742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:32:24.190 [DEBUG] [Thread-11742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] client lang: <none>
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] server lang: <none>
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] kex follows: False
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:32:24.191 [DEBUG] [Thread-11742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:32:24.192 [DEBUG] [Thread-11742] [transport.py] [_log()] Compression: none
2025-11-26T04:32:24.192 [DEBUG] [Thread-11742] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:32:24.210 [DEBUG] [Thread-11742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:32:24.211 [DEBUG] [Thread-11742] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:32:24.211 [DEBUG] [Thread-11742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:32:24.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:32:24.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:32:24.213 [DEBUG] [Thread-11742] [transport.py] [_log()] userauth is OK
2025-11-26T04:32:24.213 [DEBUG] [Thread-11742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:32:24.213 [DEBUG] [Thread-11742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:32:24.214 [DEBUG] [Thread-11742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:32:24.214 [DEBUG] [Thread-11742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:32:24.250 [INFO] [Thread-11742] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:32:24.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:32:24.899 [DEBUG] [Thread-11742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:32:24.899 [DEBUG] [Thread-11742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:32:24.900 [DEBUG] [Thread-11742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:32:24.941 [DEBUG] [Thread-11742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:32:24.941 [DEBUG] [Thread-11742] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:32:24.944 [DEBUG] [Thread-11742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:32:24.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:32:24.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:32:24.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:32:24.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:32:24.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:32:24.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:32:24.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:32:24.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:32:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:32:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.105650 -999.00  +18.50   9.09     19   -5.20 1 1 1 1 1     4    0 22.42 -62.36 ZNESW 9.6 9.1 61.4 13.1 18.6 -25.6 18.6 -24.8 18.3 -23.7 18.5 -24.6
2025-11-26T04:32:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:32:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:32:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.105650
2025-11-26T04:32:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:32:24.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:32:24.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:32:24.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:32:24.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:32:24.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:31:27', tmtdew=27.64, humidity=14.59, cloud=0.0, wind=11.73, temperature=18.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:32:00', seeing=0.95, atlas_timestamp='2025-11-26T02:32:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06325000000000003, 0.008750000000000924, -0.061749999999998195, -0.03850000000000087, -0.00849999999999973, 0.06725000000000136, 0.0019999999999988916, -0.02874999999999872, -0.03750000000000142, -0.013500000000000512, -0.13475000000000037, -0.0035000000000007248, 0.08699999999999974, 0.09024999999999928, 0.032999999999999474, -0.04400000000000048, 0.02725000000000044, 0.028499999999999304, -0.030500000000001748, 0.036249999999999005, 0.12849999999999895, 0.07974999999999888, -0.005749999999999034, 0.060750000000000526, -0.02999999999999936, -0.01750000000000007, -0.030250000000000554, 0.05050000000000132, 0.20700000000000074, 0.19200000000000017, 0.10600000000000165, -0.005499999999999616, 0.025749999999998607], zp_timestamp='2025-11-26T02:31:00')
2025-11-26T04:32:24.970 [DEBUG] [Thread-11742] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:32:25.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:32:25.067 [DEBUG] [Thread-11745] [transport.py] [_log()] starting thread (client mode): 0x70d00be0
2025-11-26T04:32:25.067 [DEBUG] [Thread-11745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:32:25.082 [DEBUG] [Thread-11745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:32:25.083 [INFO] [Thread-11745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:32:25.094 [DEBUG] [Thread-11745] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:32:25.094 [DEBUG] [Thread-11745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:32:25.094 [DEBUG] [Thread-11745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:32:25.094 [DEBUG] [Thread-11745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] client lang: <none>
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] server lang: <none>
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] kex follows: False
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] Compression: none
2025-11-26T04:32:25.095 [DEBUG] [Thread-11745] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:32:25.156 [DEBUG] [Thread-11745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:32:25.157 [DEBUG] [Thread-11745] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:32:25.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:32:25.158 [DEBUG] [Thread-11745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:32:25.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:32:25.215 [DEBUG] [Thread-11745] [transport.py] [_log()] userauth is OK
2025-11-26T04:32:25.215 [DEBUG] [Thread-11745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:32:25.215 [DEBUG] [Thread-11745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:32:25.215 [DEBUG] [Thread-11745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:32:25.216 [DEBUG] [Thread-11745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:32:25.234 [INFO] [Thread-11745] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:32:25.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:32:25.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:32:26.047 [DEBUG] [Thread-11745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:32:26.047 [DEBUG] [Thread-11745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:32:26.095 [DEBUG] [Thread-11745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:32:26.095 [DEBUG] [Thread-11745] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:32:26.104 [DEBUG] [Thread-11745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:32:26.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:32:26.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:32:26.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:32:26.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:32:26.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:32:26.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:32:26.141 [DEBUG] [Thread-11745] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:32:29.767 [DEBUG] [Thread-11747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:32:33.903 [DEBUG] [Thread-11748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:32:48.941 [DEBUG] [Thread-11749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:32:56.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:32:56.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:32:56.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:32:56.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 32, 32), 27.65, 14.64, 0.0, 11.65, 18.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:32:56.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:32:32
2025-11-26T04:32:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:32:57.098 [DEBUG] [Thread-11750] [transport.py] [_log()] starting thread (client mode): 0x70d77340
2025-11-26T04:32:57.098 [DEBUG] [Thread-11750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:32:57.118 [DEBUG] [Thread-11750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:32:57.119 [INFO] [Thread-11750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] client lang: <none>
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] server lang: <none>
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] kex follows: False
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] Compression: none
2025-11-26T04:32:57.122 [DEBUG] [Thread-11750] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:32:57.137 [DEBUG] [Thread-11750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:32:57.137 [DEBUG] [Thread-11750] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:32:57.137 [DEBUG] [Thread-11750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:32:57.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:32:57.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:32:57.138 [DEBUG] [Thread-11750] [transport.py] [_log()] userauth is OK
2025-11-26T04:32:57.138 [DEBUG] [Thread-11750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:32:57.138 [DEBUG] [Thread-11750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:32:57.138 [DEBUG] [Thread-11750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:32:57.138 [DEBUG] [Thread-11750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:32:57.154 [INFO] [Thread-11750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:32:57.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:32:57.750 [DEBUG] [Thread-11750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:32:57.750 [DEBUG] [Thread-11750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:32:57.750 [DEBUG] [Thread-11750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:32:57.791 [DEBUG] [Thread-11750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:32:57.791 [DEBUG] [Thread-11750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:32:57.794 [DEBUG] [Thread-11750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:32:57.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:32:57.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:32:57.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:32:57.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:32:57.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:32:57.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:32:57.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:32:57.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.105998 -999.00  +18.50  10.14     19   -5.20 1 1 1 1 1     4    0 22.62 -66.19 ZNESW 8.5 10.1 67.4 11.3 18.6 -25.5 18.5 -25.1 18.2 -23.9 18.5 -24.8
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.105998
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:32:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:32:32', tmtdew=27.65, humidity=14.64, cloud=0.0, wind=11.65, temperature=18.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:32:32', seeing=0.98, atlas_timestamp='2025-11-26T02:32:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06325000000000003, 0.008750000000000924, -0.061749999999998195, -0.03850000000000087, -0.00849999999999973, 0.06725000000000136, 0.0019999999999988916, -0.02874999999999872, -0.03750000000000142, -0.013500000000000512, -0.13475000000000037, -0.0035000000000007248, 0.08699999999999974, 0.09024999999999928, 0.032999999999999474, -0.04400000000000048, 0.02725000000000044, 0.028499999999999304, -0.030500000000001748, 0.036249999999999005, 0.12849999999999895, 0.07974999999999888, -0.005749999999999034, 0.060750000000000526, -0.02999999999999936, -0.01750000000000007, -0.030250000000000554, 0.05050000000000132, 0.20700000000000074, 0.19200000000000017, 0.10600000000000165, -0.005499999999999616, 0.025749999999998607], zp_timestamp='2025-11-26T02:31:00')
2025-11-26T04:32:57.811 [DEBUG] [Thread-11750] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:32:57.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:32:57.896 [DEBUG] [Thread-11753] [transport.py] [_log()] starting thread (client mode): 0x70d75150
2025-11-26T04:32:57.897 [DEBUG] [Thread-11753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:32:57.911 [DEBUG] [Thread-11753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:32:57.911 [INFO] [Thread-11753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] client lang: <none>
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] server lang: <none>
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] kex follows: False
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] Compression: none
2025-11-26T04:32:57.919 [DEBUG] [Thread-11753] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:32:57.975 [DEBUG] [Thread-11753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:32:57.975 [DEBUG] [Thread-11753] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:32:57.975 [DEBUG] [Thread-11753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:32:57.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:32:57.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:32:58.032 [DEBUG] [Thread-11753] [transport.py] [_log()] userauth is OK
2025-11-26T04:32:58.032 [DEBUG] [Thread-11753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:32:58.032 [DEBUG] [Thread-11753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:32:58.032 [DEBUG] [Thread-11753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:32:58.032 [DEBUG] [Thread-11753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:32:58.048 [INFO] [Thread-11753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:32:58.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:32:58.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:32:58.896 [DEBUG] [Thread-11753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:32:58.896 [DEBUG] [Thread-11753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:32:58.944 [DEBUG] [Thread-11753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:32:58.944 [DEBUG] [Thread-11753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:32:58.953 [DEBUG] [Thread-11753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:32:58.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:32:58.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:32:58.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:32:58.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:32:58.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:32:58.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:32:58.990 [DEBUG] [Thread-11753] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:33:03.978 [DEBUG] [Thread-11755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:33:08.753 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:33:08.754 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:33:19.034 [DEBUG] [Thread-11756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:33:29.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:33:29.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:33:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:33:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 33, 4), 27.65, 14.64, 0.0, 11.49, 18.24, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:33:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:33:04
2025-11-26T04:33:29.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:33:29.843 [DEBUG] [Thread-11757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:33:29.951 [DEBUG] [Thread-11758] [transport.py] [_log()] starting thread (client mode): 0x70d01990
2025-11-26T04:33:29.951 [DEBUG] [Thread-11758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:33:29.966 [DEBUG] [Thread-11758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:33:29.966 [INFO] [Thread-11758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] client lang: <none>
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] server lang: <none>
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] kex follows: False
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] Compression: none
2025-11-26T04:33:29.970 [DEBUG] [Thread-11758] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:33:29.986 [DEBUG] [Thread-11758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:33:29.986 [DEBUG] [Thread-11758] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:33:29.986 [DEBUG] [Thread-11758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:33:29.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:33:29.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:33:29.987 [DEBUG] [Thread-11758] [transport.py] [_log()] userauth is OK
2025-11-26T04:33:29.987 [DEBUG] [Thread-11758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:33:29.987 [DEBUG] [Thread-11758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:33:29.987 [DEBUG] [Thread-11758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:33:29.987 [DEBUG] [Thread-11758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:33:29.996 [INFO] [Thread-11758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:33:29.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:33:30.671 [DEBUG] [Thread-11758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:33:30.671 [DEBUG] [Thread-11758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:33:30.671 [DEBUG] [Thread-11758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:33:30.712 [DEBUG] [Thread-11758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:33:30.712 [DEBUG] [Thread-11758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:33:30.714 [DEBUG] [Thread-11758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:33:30.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:33:30.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:33:30.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:33:30.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:33:30.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:33:30.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:33:30.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.106345 -999.00  +18.40   8.47     19   -5.20 1 1 1 1 1     5    0 22.63 -65.50 ZNESW 9.8 8.5 66.4 11.1 18.5 -25.4 18.5 -25.1 18.2 -23.8 18.5 -24.9
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.106345
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:33:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:33:04', tmtdew=27.65, humidity=14.64, cloud=0.0, wind=11.49, temperature=18.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:33:04', seeing=1.24, atlas_timestamp='2025-11-26T02:33:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06325000000000003, 0.008750000000000924, -0.061749999999998195, -0.03850000000000087, -0.00849999999999973, 0.06725000000000136, 0.0019999999999988916, -0.02874999999999872, -0.03750000000000142, -0.013500000000000512, -0.13475000000000037, -0.0035000000000007248, 0.08699999999999974, 0.09024999999999928, 0.032999999999999474, -0.04400000000000048, 0.02725000000000044, 0.028499999999999304, -0.030500000000001748, 0.036249999999999005, 0.12849999999999895, 0.07974999999999888, -0.005749999999999034, 0.060750000000000526, -0.02999999999999936, -0.01750000000000007, -0.030250000000000554, 0.05050000000000132, 0.20700000000000074, 0.19200000000000017, 0.10600000000000165, -0.005499999999999616, 0.025749999999998607], zp_timestamp='2025-11-26T02:31:00')
2025-11-26T04:33:30.733 [DEBUG] [Thread-11758] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:33:30.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:33:30.818 [DEBUG] [Thread-11761] [transport.py] [_log()] starting thread (client mode): 0x70d74400
2025-11-26T04:33:30.818 [DEBUG] [Thread-11761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:33:30.833 [DEBUG] [Thread-11761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:33:30.833 [INFO] [Thread-11761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:33:30.840 [DEBUG] [Thread-11761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:33:30.840 [DEBUG] [Thread-11761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:33:30.840 [DEBUG] [Thread-11761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:33:30.840 [DEBUG] [Thread-11761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:33:30.840 [DEBUG] [Thread-11761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:33:30.840 [DEBUG] [Thread-11761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:33:30.840 [DEBUG] [Thread-11761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] client lang: <none>
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] server lang: <none>
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] kex follows: False
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] Compression: none
2025-11-26T04:33:30.841 [DEBUG] [Thread-11761] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:33:30.896 [DEBUG] [Thread-11761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:33:30.897 [DEBUG] [Thread-11761] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:33:30.897 [DEBUG] [Thread-11761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:33:30.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:33:30.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:33:30.954 [DEBUG] [Thread-11761] [transport.py] [_log()] userauth is OK
2025-11-26T04:33:30.954 [DEBUG] [Thread-11761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:33:30.954 [DEBUG] [Thread-11761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:33:30.954 [DEBUG] [Thread-11761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:33:30.954 [DEBUG] [Thread-11761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:33:30.971 [INFO] [Thread-11761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:33:30.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:33:30.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:33:31.834 [DEBUG] [Thread-11761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:33:31.834 [DEBUG] [Thread-11761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:33:31.882 [DEBUG] [Thread-11761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:33:31.882 [DEBUG] [Thread-11761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:33:31.892 [DEBUG] [Thread-11761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:33:31.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:33:31.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:33:31.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:33:31.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:33:31.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:33:31.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:33:31.924 [DEBUG] [Thread-11761] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:33:34.068 [DEBUG] [Thread-11763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:33:49.109 [DEBUG] [Thread-11764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:34:01.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:34:01.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:34:01.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:34:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 33, 36), 27.66, 14.12, 0.0, 11.86, 18.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:34:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:33:36
2025-11-26T04:34:02.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:34:02.824 [DEBUG] [Thread-11765] [transport.py] [_log()] starting thread (client mode): 0x70d76020
2025-11-26T04:34:02.824 [DEBUG] [Thread-11765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:34:02.834 [DEBUG] [Thread-11765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:34:02.834 [INFO] [Thread-11765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] client lang: <none>
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] server lang: <none>
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] kex follows: False
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] Compression: none
2025-11-26T04:34:02.836 [DEBUG] [Thread-11765] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:34:02.846 [DEBUG] [Thread-11765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:34:02.846 [DEBUG] [Thread-11765] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:34:02.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:34:02.847 [DEBUG] [Thread-11765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:34:02.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:34:02.848 [DEBUG] [Thread-11765] [transport.py] [_log()] userauth is OK
2025-11-26T04:34:02.848 [DEBUG] [Thread-11765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:34:02.848 [DEBUG] [Thread-11765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:34:02.848 [DEBUG] [Thread-11765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:34:02.848 [DEBUG] [Thread-11765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:34:02.867 [INFO] [Thread-11765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:34:02.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:34:03.446 [DEBUG] [Thread-11765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:34:03.447 [DEBUG] [Thread-11765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:34:03.447 [DEBUG] [Thread-11765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:34:03.488 [DEBUG] [Thread-11765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:34:03.488 [DEBUG] [Thread-11765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:34:03.491 [DEBUG] [Thread-11765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:34:03.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:34:03.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:34:03.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:34:03.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:34:03.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:34:03.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:34:03.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:34:03.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:34:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:34:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.106692 -999.00  +18.40   9.76     19   -5.20 1 1 1 1 1     5    0 22.26 -64.87 ZN.SW 8.8 9.8 60.2 11.2 18.6 -25.6 18.5 -25.0 18.2 -23.7 18.4 -24.7
2025-11-26T04:34:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:34:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:34:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.106692
2025-11-26T04:34:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:34:03.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:34:03.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:34:03.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:34:03.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:34:03.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:33:36', tmtdew=27.66, humidity=14.12, cloud=0.0, wind=11.86, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:33:36', seeing=1.04, atlas_timestamp='2025-11-26T02:33:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06325000000000003, 0.008750000000000924, -0.061749999999998195, -0.03850000000000087, -0.00849999999999973, 0.06725000000000136, 0.0019999999999988916, -0.02874999999999872, -0.03750000000000142, -0.013500000000000512, -0.13475000000000037, -0.0035000000000007248, 0.08699999999999974, 0.09024999999999928, 0.032999999999999474, -0.04400000000000048, 0.02725000000000044, 0.028499999999999304, -0.030500000000001748, 0.036249999999999005, 0.12849999999999895, 0.07974999999999888, -0.005749999999999034, 0.060750000000000526, -0.02999999999999936, -0.01750000000000007, -0.030250000000000554, 0.05050000000000132, 0.20700000000000074, 0.19200000000000017, 0.10600000000000165, -0.005499999999999616, 0.025749999999998607], zp_timestamp='2025-11-26T02:31:00')
2025-11-26T04:34:03.519 [DEBUG] [Thread-11765] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:34:03.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:34:03.616 [DEBUG] [Thread-11768] [transport.py] [_log()] starting thread (client mode): 0x70d748e0
2025-11-26T04:34:03.616 [DEBUG] [Thread-11768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:34:03.631 [DEBUG] [Thread-11768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:34:03.631 [INFO] [Thread-11768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:34:03.638 [DEBUG] [Thread-11768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:34:03.638 [DEBUG] [Thread-11768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] client lang: <none>
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] server lang: <none>
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] kex follows: False
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] Compression: none
2025-11-26T04:34:03.639 [DEBUG] [Thread-11768] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:34:03.696 [DEBUG] [Thread-11768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:34:03.696 [DEBUG] [Thread-11768] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:34:03.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:34:03.697 [DEBUG] [Thread-11768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:34:03.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:34:03.755 [DEBUG] [Thread-11768] [transport.py] [_log()] userauth is OK
2025-11-26T04:34:03.756 [DEBUG] [Thread-11768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:34:03.756 [DEBUG] [Thread-11768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:34:03.756 [DEBUG] [Thread-11768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:34:03.756 [DEBUG] [Thread-11768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:34:03.776 [INFO] [Thread-11768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:34:03.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:34:03.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:34:04.149 [DEBUG] [Thread-11770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:34:04.648 [DEBUG] [Thread-11768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:34:04.649 [DEBUG] [Thread-11768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:34:04.697 [DEBUG] [Thread-11768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:34:04.697 [DEBUG] [Thread-11768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:34:04.706 [DEBUG] [Thread-11768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:34:04.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:34:04.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:34:04.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:34:04.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:34:04.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:34:04.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:34:04.743 [DEBUG] [Thread-11768] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:34:08.955 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:34:08.956 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:34:19.201 [DEBUG] [Thread-11771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:34:29.922 [DEBUG] [Thread-11772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:34:34.239 [DEBUG] [Thread-11773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:34:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:34:34.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:34:34.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:34:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 34, 8), 27.65, 14.12, 0.0, 11.88, 18.24, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:34:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:34:08
2025-11-26T04:34:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:34:35.649 [DEBUG] [Thread-11774] [transport.py] [_log()] starting thread (client mode): 0x70de5c30
2025-11-26T04:34:35.649 [DEBUG] [Thread-11774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:34:35.669 [DEBUG] [Thread-11774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:34:35.669 [INFO] [Thread-11774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:34:35.672 [DEBUG] [Thread-11774] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:34:35.672 [DEBUG] [Thread-11774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:34:35.672 [DEBUG] [Thread-11774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:34:35.672 [DEBUG] [Thread-11774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:34:35.672 [DEBUG] [Thread-11774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:34:35.672 [DEBUG] [Thread-11774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:34:35.672 [DEBUG] [Thread-11774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] client lang: <none>
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] server lang: <none>
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] kex follows: False
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] Compression: none
2025-11-26T04:34:35.673 [DEBUG] [Thread-11774] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:34:35.684 [DEBUG] [Thread-11774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:34:35.685 [DEBUG] [Thread-11774] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:34:35.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:34:35.687 [DEBUG] [Thread-11774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:34:35.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:34:35.689 [DEBUG] [Thread-11774] [transport.py] [_log()] userauth is OK
2025-11-26T04:34:35.689 [DEBUG] [Thread-11774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:34:35.690 [DEBUG] [Thread-11774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:34:35.690 [DEBUG] [Thread-11774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:34:35.690 [DEBUG] [Thread-11774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:34:35.715 [INFO] [Thread-11774] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:34:35.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:34:36.285 [DEBUG] [Thread-11774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:34:36.285 [DEBUG] [Thread-11774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:34:36.286 [DEBUG] [Thread-11774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:34:36.326 [DEBUG] [Thread-11774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:34:36.326 [DEBUG] [Thread-11774] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:34:36.329 [DEBUG] [Thread-11774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:34:36.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:34:36.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:34:36.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:34:36.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:34:36.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:34:36.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:34:36.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:34:36.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:34:36.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:34:36.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.107039 -999.00  +18.40  11.40     19   -5.20 1 1 1 1 1     6    0 22.55 -60.90 ZN.SW 11.6 11.4 60.0 11.9 18.5 -25.5 18.5 -24.9 18.2 -23.7 18.4 -24.7
2025-11-26T04:34:36.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:34:36.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:34:36.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.107039
2025-11-26T04:34:36.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:34:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:34:08', tmtdew=27.65, humidity=14.12, cloud=0.0, wind=11.88, temperature=18.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:34:09', seeing=1.04, atlas_timestamp='2025-11-26T02:34:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06325000000000003, 0.008750000000000924, -0.061749999999998195, -0.03850000000000087, -0.00849999999999973, 0.06725000000000136, 0.0019999999999988916, -0.02874999999999872, -0.03750000000000142, -0.013500000000000512, -0.13475000000000037, -0.0035000000000007248, 0.08699999999999974, 0.09024999999999928, 0.032999999999999474, -0.04400000000000048, 0.02725000000000044, 0.028499999999999304, -0.030500000000001748, 0.036249999999999005, 0.12849999999999895, 0.07974999999999888, -0.005749999999999034, 0.060750000000000526, -0.02999999999999936, -0.01750000000000007, -0.030250000000000554, 0.05050000000000132, 0.20700000000000074, 0.19200000000000017, 0.10600000000000165, -0.005499999999999616, 0.025749999999998607], zp_timestamp='2025-11-26T02:31:00')
2025-11-26T04:34:36.357 [DEBUG] [Thread-11774] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:34:36.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:34:36.451 [DEBUG] [Thread-11777] [transport.py] [_log()] starting thread (client mode): 0x70de4bb0
2025-11-26T04:34:36.452 [DEBUG] [Thread-11777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:34:36.466 [DEBUG] [Thread-11777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:34:36.467 [INFO] [Thread-11777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:34:36.474 [DEBUG] [Thread-11777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] client lang: <none>
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] server lang: <none>
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] kex follows: False
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] Compression: none
2025-11-26T04:34:36.475 [DEBUG] [Thread-11777] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:34:36.533 [DEBUG] [Thread-11777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:34:36.533 [DEBUG] [Thread-11777] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:34:36.534 [DEBUG] [Thread-11777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:34:36.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:34:36.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:34:36.589 [DEBUG] [Thread-11777] [transport.py] [_log()] userauth is OK
2025-11-26T04:34:36.590 [DEBUG] [Thread-11777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:34:36.590 [DEBUG] [Thread-11777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:34:36.590 [DEBUG] [Thread-11777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:34:36.590 [DEBUG] [Thread-11777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:34:36.615 [INFO] [Thread-11777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:34:36.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:34:36.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:34:37.439 [DEBUG] [Thread-11777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:34:37.440 [DEBUG] [Thread-11777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:34:37.488 [DEBUG] [Thread-11777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:34:37.488 [DEBUG] [Thread-11777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:34:37.497 [DEBUG] [Thread-11777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:34:37.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:34:37.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:34:37.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:34:37.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:34:37.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:34:37.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:34:37.534 [DEBUG] [Thread-11777] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:34:49.273 [DEBUG] [Thread-11779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:35:04.317 [DEBUG] [Thread-11780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:35:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:35:07.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:35:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:35:08.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 34, 41), 27.62, 14.61, 0.0, 11.91, 18.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:35:08.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:34:41
2025-11-26T04:35:08.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:35:08.456 [DEBUG] [Thread-11781] [transport.py] [_log()] starting thread (client mode): 0x70d762c0
2025-11-26T04:35:08.457 [DEBUG] [Thread-11781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:35:08.476 [DEBUG] [Thread-11781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:35:08.476 [INFO] [Thread-11781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] client lang: <none>
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] server lang: <none>
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] kex follows: False
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] Compression: none
2025-11-26T04:35:08.480 [DEBUG] [Thread-11781] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:35:08.496 [DEBUG] [Thread-11781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:35:08.496 [DEBUG] [Thread-11781] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:35:08.497 [DEBUG] [Thread-11781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:35:08.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:35:08.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:35:08.498 [DEBUG] [Thread-11781] [transport.py] [_log()] userauth is OK
2025-11-26T04:35:08.498 [DEBUG] [Thread-11781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:35:08.498 [DEBUG] [Thread-11781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:35:08.499 [DEBUG] [Thread-11781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:35:08.499 [DEBUG] [Thread-11781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:35:08.519 [INFO] [Thread-11781] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:35:08.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:35:09.157 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:35:09.158 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:35:09.287 [DEBUG] [Thread-11781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:35:09.287 [DEBUG] [Thread-11781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:35:09.287 [DEBUG] [Thread-11781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:35:09.328 [DEBUG] [Thread-11781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:35:09.328 [DEBUG] [Thread-11781] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:35:09.331 [DEBUG] [Thread-11781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:35:09.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:35:09.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:35:09.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:35:09.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:35:09.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:35:09.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:35:09.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:35:09.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:35:09.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:35:09.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.107039 -999.00  +18.40  11.40     19   -5.20 1 1 1 1 1     6    0 22.55 -60.90 ZN.SW 11.6 11.4 60.0 11.9 18.5 -25.5 18.5 -24.9 18.2 -23.7 18.4 -24.7
2025-11-26T04:35:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:35:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:35:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.107039
2025-11-26T04:35:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:35:09.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:35:09.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:35:09.361 [DEBUG] [Thread-11781] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:35:09.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:35:09.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:35:09.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:34:41', tmtdew=27.62, humidity=14.61, cloud=0.0, wind=11.91, temperature=18.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:34:41', seeing=1.04, atlas_timestamp='2025-11-26T02:34:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06325000000000003, 0.008750000000000924, -0.061749999999998195, -0.03850000000000087, -0.00849999999999973, 0.06725000000000136, 0.0019999999999988916, -0.02874999999999872, -0.03750000000000142, -0.013500000000000512, -0.13475000000000037, -0.0035000000000007248, 0.08699999999999974, 0.09024999999999928, 0.032999999999999474, -0.04400000000000048, 0.02725000000000044, 0.028499999999999304, -0.030500000000001748, 0.036249999999999005, 0.12849999999999895, 0.07974999999999888, -0.005749999999999034, 0.060750000000000526, -0.02999999999999936, -0.01750000000000007, -0.030250000000000554, 0.05050000000000132, 0.20700000000000074, 0.19200000000000017, 0.10600000000000165, -0.005499999999999616, 0.025749999999998607], zp_timestamp='2025-11-26T02:31:00')
2025-11-26T04:35:09.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:35:09.451 [DEBUG] [Thread-11784] [transport.py] [_log()] starting thread (client mode): 0x70d77af0
2025-11-26T04:35:09.451 [DEBUG] [Thread-11784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:35:09.466 [DEBUG] [Thread-11784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:35:09.466 [INFO] [Thread-11784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:35:09.474 [DEBUG] [Thread-11784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:35:09.474 [DEBUG] [Thread-11784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:35:09.474 [DEBUG] [Thread-11784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:35:09.475 [DEBUG] [Thread-11784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:35:09.475 [DEBUG] [Thread-11784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:35:09.475 [DEBUG] [Thread-11784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:35:09.475 [DEBUG] [Thread-11784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:35:09.475 [DEBUG] [Thread-11784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:35:09.475 [DEBUG] [Thread-11784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:35:09.475 [DEBUG] [Thread-11784] [transport.py] [_log()] client lang: <none>
2025-11-26T04:35:09.475 [DEBUG] [Thread-11784] [transport.py] [_log()] server lang: <none>
2025-11-26T04:35:09.475 [DEBUG] [Thread-11784] [transport.py] [_log()] kex follows: False
2025-11-26T04:35:09.476 [DEBUG] [Thread-11784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:35:09.476 [DEBUG] [Thread-11784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:35:09.476 [DEBUG] [Thread-11784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:35:09.476 [DEBUG] [Thread-11784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:35:09.476 [DEBUG] [Thread-11784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:35:09.476 [DEBUG] [Thread-11784] [transport.py] [_log()] Compression: none
2025-11-26T04:35:09.476 [DEBUG] [Thread-11784] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:35:09.534 [DEBUG] [Thread-11784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:35:09.535 [DEBUG] [Thread-11784] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:35:09.535 [DEBUG] [Thread-11784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:35:09.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:35:09.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:35:09.590 [DEBUG] [Thread-11784] [transport.py] [_log()] userauth is OK
2025-11-26T04:35:09.591 [DEBUG] [Thread-11784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:35:09.591 [DEBUG] [Thread-11784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:35:09.591 [DEBUG] [Thread-11784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:35:09.591 [DEBUG] [Thread-11784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:35:09.610 [INFO] [Thread-11784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:35:09.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:35:09.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:35:10.428 [DEBUG] [Thread-11784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:35:10.428 [DEBUG] [Thread-11784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:35:10.477 [DEBUG] [Thread-11784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:35:10.478 [DEBUG] [Thread-11784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:35:10.487 [DEBUG] [Thread-11784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:35:10.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:35:10.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:35:10.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:35:10.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:35:10.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:35:10.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:35:10.523 [DEBUG] [Thread-11784] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:35:19.351 [DEBUG] [Thread-11786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:35:29.999 [DEBUG] [Thread-11787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:35:34.402 [DEBUG] [Thread-11788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:35:40.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:35:40.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:35:40.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:35:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 35, 13), 27.6, 14.64, 0.0, 11.88, 18.27, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:35:41.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:35:13
2025-11-26T04:35:41.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:35:41.465 [DEBUG] [Thread-11789] [transport.py] [_log()] starting thread (client mode): 0x70d77f10
2025-11-26T04:35:41.465 [DEBUG] [Thread-11789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:35:41.486 [DEBUG] [Thread-11789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:35:41.486 [INFO] [Thread-11789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:35:41.489 [DEBUG] [Thread-11789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] client lang: <none>
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] server lang: <none>
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] kex follows: False
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] Compression: none
2025-11-26T04:35:41.490 [DEBUG] [Thread-11789] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:35:41.508 [DEBUG] [Thread-11789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:35:41.509 [DEBUG] [Thread-11789] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:35:41.509 [DEBUG] [Thread-11789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:35:41.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:35:41.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:35:41.511 [DEBUG] [Thread-11789] [transport.py] [_log()] userauth is OK
2025-11-26T04:35:41.512 [DEBUG] [Thread-11789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:35:41.512 [DEBUG] [Thread-11789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:35:41.512 [DEBUG] [Thread-11789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:35:41.512 [DEBUG] [Thread-11789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:35:41.537 [INFO] [Thread-11789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:35:41.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:35:42.157 [DEBUG] [Thread-11789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:35:42.157 [DEBUG] [Thread-11789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:35:42.158 [DEBUG] [Thread-11789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:35:42.198 [DEBUG] [Thread-11789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:35:42.198 [DEBUG] [Thread-11789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:35:42.201 [DEBUG] [Thread-11789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:35:42.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:35:42.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:35:42.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:35:42.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:35:42.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:35:42.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:35:42.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:35:42.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:35:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:35:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.107733 -999.00  +18.60  10.63     19   -5.10 1 1 1 1 1     7    0 22.63 -55.23 ZN.SW 11.3 10.6 63.6 13.0 18.5 -25.5 18.5 -24.9 18.2 -23.7 18.4 -24.7
2025-11-26T04:35:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:35:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:35:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.107733
2025-11-26T04:35:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:35:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:35:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:35:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:35:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:35:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:35:13', tmtdew=27.6, humidity=14.64, cloud=0.0, wind=11.88, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:35:13', seeing=1.04, atlas_timestamp='2025-11-26T02:35:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:33:00')
2025-11-26T04:35:42.227 [DEBUG] [Thread-11789] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:35:42.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:35:42.336 [DEBUG] [Thread-11792] [transport.py] [_log()] starting thread (client mode): 0x70d74460
2025-11-26T04:35:42.336 [DEBUG] [Thread-11792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:35:42.351 [DEBUG] [Thread-11792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:35:42.351 [INFO] [Thread-11792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:35:42.362 [DEBUG] [Thread-11792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:35:42.362 [DEBUG] [Thread-11792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:35:42.362 [DEBUG] [Thread-11792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:35:42.362 [DEBUG] [Thread-11792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:35:42.362 [DEBUG] [Thread-11792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:35:42.362 [DEBUG] [Thread-11792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] client lang: <none>
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] server lang: <none>
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] kex follows: False
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] Compression: none
2025-11-26T04:35:42.363 [DEBUG] [Thread-11792] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:35:42.419 [DEBUG] [Thread-11792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:35:42.420 [DEBUG] [Thread-11792] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:35:42.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:35:42.421 [DEBUG] [Thread-11792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:35:42.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:35:42.479 [DEBUG] [Thread-11792] [transport.py] [_log()] userauth is OK
2025-11-26T04:35:42.479 [DEBUG] [Thread-11792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:35:42.479 [DEBUG] [Thread-11792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:35:42.479 [DEBUG] [Thread-11792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:35:42.479 [DEBUG] [Thread-11792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:35:42.498 [INFO] [Thread-11792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:35:42.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:35:42.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:35:43.363 [DEBUG] [Thread-11792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:35:43.363 [DEBUG] [Thread-11792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:35:43.411 [DEBUG] [Thread-11792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:35:43.411 [DEBUG] [Thread-11792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:35:43.421 [DEBUG] [Thread-11792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:35:43.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:35:43.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:35:43.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:35:43.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:35:43.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:35:43.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:35:43.458 [DEBUG] [Thread-11792] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:35:49.438 [DEBUG] [Thread-11794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:36:04.496 [DEBUG] [Thread-11795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:36:09.360 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:36:09.361 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:36:13.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:36:13.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:36:13.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:36:14.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 35, 45), 27.66, 14.62, 0.0, 10.2, 18.27, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:36:14.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:35:45
2025-11-26T04:36:14.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:36:14.392 [DEBUG] [Thread-11796] [transport.py] [_log()] starting thread (client mode): 0x70de5fc0
2025-11-26T04:36:14.393 [DEBUG] [Thread-11796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:36:14.413 [DEBUG] [Thread-11796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:36:14.413 [INFO] [Thread-11796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:36:14.416 [DEBUG] [Thread-11796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:36:14.416 [DEBUG] [Thread-11796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:36:14.416 [DEBUG] [Thread-11796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:36:14.416 [DEBUG] [Thread-11796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:36:14.416 [DEBUG] [Thread-11796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:36:14.416 [DEBUG] [Thread-11796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:36:14.416 [DEBUG] [Thread-11796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:36:14.416 [DEBUG] [Thread-11796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:36:14.416 [DEBUG] [Thread-11796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] client lang: <none>
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] server lang: <none>
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] kex follows: False
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] Compression: none
2025-11-26T04:36:14.417 [DEBUG] [Thread-11796] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:36:14.434 [DEBUG] [Thread-11796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:36:14.434 [DEBUG] [Thread-11796] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:36:14.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:36:14.435 [DEBUG] [Thread-11796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:36:14.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:36:14.438 [DEBUG] [Thread-11796] [transport.py] [_log()] userauth is OK
2025-11-26T04:36:14.438 [DEBUG] [Thread-11796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:36:14.438 [DEBUG] [Thread-11796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:36:14.438 [DEBUG] [Thread-11796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:36:14.438 [DEBUG] [Thread-11796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:36:14.453 [INFO] [Thread-11796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:36:14.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:36:15.236 [DEBUG] [Thread-11796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:36:15.237 [DEBUG] [Thread-11796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:36:15.238 [DEBUG] [Thread-11796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:36:15.278 [DEBUG] [Thread-11796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:36:15.278 [DEBUG] [Thread-11796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:36:15.281 [DEBUG] [Thread-11796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:36:15.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:36:15.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:36:15.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:36:15.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:36:15.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:36:15.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:36:15.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:36:15.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:36:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:36:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.108081 -999.00  +18.50  10.98     19   -5.20 1 1 1 1 1     8    0 22.24 -50.64 ZN.SW 10.5 11.0 59.8 11.8 18.6 -25.5 18.5 -24.9 18.2 -23.7 18.4 -24.7
2025-11-26T04:36:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:36:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:36:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.108081
2025-11-26T04:36:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:36:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:36:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:36:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:36:15.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:36:15.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:35:45', tmtdew=27.66, humidity=14.62, cloud=0.0, wind=10.2, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:35:45', seeing=1.04, atlas_timestamp='2025-11-26T02:35:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:33:00')
2025-11-26T04:36:15.308 [DEBUG] [Thread-11796] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:36:15.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:36:15.405 [DEBUG] [Thread-11799] [transport.py] [_log()] starting thread (client mode): 0x70d02950
2025-11-26T04:36:15.405 [DEBUG] [Thread-11799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:36:15.419 [DEBUG] [Thread-11799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:36:15.419 [INFO] [Thread-11799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:36:15.427 [DEBUG] [Thread-11799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:36:15.427 [DEBUG] [Thread-11799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:36:15.427 [DEBUG] [Thread-11799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:36:15.427 [DEBUG] [Thread-11799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:36:15.427 [DEBUG] [Thread-11799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:36:15.427 [DEBUG] [Thread-11799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:36:15.427 [DEBUG] [Thread-11799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:36:15.427 [DEBUG] [Thread-11799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] client lang: <none>
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] server lang: <none>
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] kex follows: False
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] Compression: none
2025-11-26T04:36:15.428 [DEBUG] [Thread-11799] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:36:15.485 [DEBUG] [Thread-11799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:36:15.486 [DEBUG] [Thread-11799] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:36:15.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:36:15.487 [DEBUG] [Thread-11799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:36:15.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:36:15.541 [DEBUG] [Thread-11799] [transport.py] [_log()] userauth is OK
2025-11-26T04:36:15.541 [DEBUG] [Thread-11799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:36:15.542 [DEBUG] [Thread-11799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:36:15.542 [DEBUG] [Thread-11799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:36:15.542 [DEBUG] [Thread-11799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:36:15.560 [INFO] [Thread-11799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:36:15.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:36:15.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:36:16.366 [DEBUG] [Thread-11799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:36:16.367 [DEBUG] [Thread-11799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:36:16.417 [DEBUG] [Thread-11799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:36:16.417 [DEBUG] [Thread-11799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:36:16.429 [DEBUG] [Thread-11799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:36:16.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:36:16.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:36:16.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:36:16.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:36:16.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:36:16.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:36:16.474 [DEBUG] [Thread-11799] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:36:19.532 [DEBUG] [Thread-11801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:36:30.061 [DEBUG] [Thread-11802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:36:34.573 [DEBUG] [Thread-11803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:36:46.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:36:46.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:36:46.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:36:47.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 36, 17), 27.65, 14.64, 0.0, 10.45, 18.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:36:47.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:36:17
2025-11-26T04:36:47.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:36:47.424 [DEBUG] [Thread-11804] [transport.py] [_log()] starting thread (client mode): 0x70d01d20
2025-11-26T04:36:47.425 [DEBUG] [Thread-11804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:36:47.445 [DEBUG] [Thread-11804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:36:47.445 [INFO] [Thread-11804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] client lang: <none>
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] server lang: <none>
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] kex follows: False
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:36:47.449 [DEBUG] [Thread-11804] [transport.py] [_log()] Compression: none
2025-11-26T04:36:47.450 [DEBUG] [Thread-11804] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:36:47.469 [DEBUG] [Thread-11804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:36:47.470 [DEBUG] [Thread-11804] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:36:47.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:36:47.471 [DEBUG] [Thread-11804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:36:47.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:36:47.473 [DEBUG] [Thread-11804] [transport.py] [_log()] userauth is OK
2025-11-26T04:36:47.473 [DEBUG] [Thread-11804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:36:47.473 [DEBUG] [Thread-11804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:36:47.473 [DEBUG] [Thread-11804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:36:47.473 [DEBUG] [Thread-11804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:36:47.505 [INFO] [Thread-11804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:36:47.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:36:48.162 [DEBUG] [Thread-11804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:36:48.162 [DEBUG] [Thread-11804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:36:48.162 [DEBUG] [Thread-11804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:36:48.202 [DEBUG] [Thread-11804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:36:48.203 [DEBUG] [Thread-11804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:36:48.205 [DEBUG] [Thread-11804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:36:48.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:36:48.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:36:48.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:36:48.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:36:48.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:36:48.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:36:48.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:36:48.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:36:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:36:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.108428 -999.00  +18.50  10.71     19   -5.20 1 1 1 1 1     9    0 22.82 -50.16 ZN.SW 11.0 10.7 64.8 12.7 18.5 -25.5 18.4 -24.9 18.2 -23.7 18.4 -24.7
2025-11-26T04:36:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:36:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:36:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.108428
2025-11-26T04:36:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:36:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:36:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:36:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:36:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:36:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:36:17', tmtdew=27.65, humidity=14.64, cloud=0.0, wind=10.45, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:36:17', seeing=1.04, atlas_timestamp='2025-11-26T02:36:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:33:00')
2025-11-26T04:36:48.228 [DEBUG] [Thread-11804] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:36:48.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:36:48.323 [DEBUG] [Thread-11807] [transport.py] [_log()] starting thread (client mode): 0x70d2bc40
2025-11-26T04:36:48.324 [DEBUG] [Thread-11807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:36:48.338 [DEBUG] [Thread-11807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:36:48.338 [INFO] [Thread-11807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:36:48.345 [DEBUG] [Thread-11807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:36:48.345 [DEBUG] [Thread-11807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:36:48.345 [DEBUG] [Thread-11807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:36:48.345 [DEBUG] [Thread-11807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] client lang: <none>
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] server lang: <none>
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] kex follows: False
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] Compression: none
2025-11-26T04:36:48.346 [DEBUG] [Thread-11807] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:36:48.401 [DEBUG] [Thread-11807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:36:48.401 [DEBUG] [Thread-11807] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:36:48.401 [DEBUG] [Thread-11807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:36:48.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:36:48.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:36:48.457 [DEBUG] [Thread-11807] [transport.py] [_log()] userauth is OK
2025-11-26T04:36:48.457 [DEBUG] [Thread-11807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:36:48.457 [DEBUG] [Thread-11807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:36:48.457 [DEBUG] [Thread-11807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:36:48.457 [DEBUG] [Thread-11807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:36:48.476 [INFO] [Thread-11807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:36:48.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:36:48.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:36:49.323 [DEBUG] [Thread-11807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:36:49.324 [DEBUG] [Thread-11807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:36:49.372 [DEBUG] [Thread-11807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:36:49.372 [DEBUG] [Thread-11807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:36:49.380 [DEBUG] [Thread-11807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:36:49.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:36:49.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:36:49.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:36:49.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:36:49.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:36:49.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:36:49.414 [DEBUG] [Thread-11807] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:36:49.604 [DEBUG] [Thread-11809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:37:04.655 [DEBUG] [Thread-11810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:37:09.560 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:37:09.561 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:37:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:37:19.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:37:19.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:37:19.692 [DEBUG] [Thread-11811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:37:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 36, 49), 27.6, 14.64, 0.0, 12.05, 18.24, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:37:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:36:49
2025-11-26T04:37:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:37:20.356 [DEBUG] [Thread-11812] [transport.py] [_log()] starting thread (client mode): 0x70d026e0
2025-11-26T04:37:20.356 [DEBUG] [Thread-11812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:37:20.377 [DEBUG] [Thread-11812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:37:20.377 [INFO] [Thread-11812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:37:20.380 [DEBUG] [Thread-11812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:37:20.380 [DEBUG] [Thread-11812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:37:20.380 [DEBUG] [Thread-11812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:37:20.380 [DEBUG] [Thread-11812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:37:20.380 [DEBUG] [Thread-11812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:37:20.380 [DEBUG] [Thread-11812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] client lang: <none>
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] server lang: <none>
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] kex follows: False
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] Compression: none
2025-11-26T04:37:20.381 [DEBUG] [Thread-11812] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:37:20.398 [DEBUG] [Thread-11812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:37:20.398 [DEBUG] [Thread-11812] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:37:20.399 [DEBUG] [Thread-11812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:37:20.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:37:20.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:37:20.400 [DEBUG] [Thread-11812] [transport.py] [_log()] userauth is OK
2025-11-26T04:37:20.401 [DEBUG] [Thread-11812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:37:20.401 [DEBUG] [Thread-11812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:37:20.401 [DEBUG] [Thread-11812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:37:20.401 [DEBUG] [Thread-11812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:37:20.424 [INFO] [Thread-11812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:37:20.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:37:21.248 [DEBUG] [Thread-11812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:37:21.248 [DEBUG] [Thread-11812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:37:21.248 [DEBUG] [Thread-11812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:37:21.290 [DEBUG] [Thread-11812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:37:21.290 [DEBUG] [Thread-11812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:37:21.294 [DEBUG] [Thread-11812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:37:21.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:37:21.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:37:21.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:37:21.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:37:21.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:37:21.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:37:21.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:37:21.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:37:21.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:37:21.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.108775 -999.00  +18.50  11.24     19   -5.10 1 1 1 1 1    10    0 22.42 -52.18 ZN.SW 12.1 11.2 63.2 12.7 18.5 -25.5 18.4 -24.9 18.2 -23.7 18.4 -24.8
2025-11-26T04:37:21.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:37:21.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:37:21.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.108775
2025-11-26T04:37:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:37:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:37:21.319 [DEBUG] [Thread-11812] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:37:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:37:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:37:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:37:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:36:49', tmtdew=27.6, humidity=14.64, cloud=0.0, wind=12.05, temperature=18.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:36:49', seeing=1.04, atlas_timestamp='2025-11-26T02:36:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:33:00')
2025-11-26T04:37:21.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:37:21.416 [DEBUG] [Thread-11815] [transport.py] [_log()] starting thread (client mode): 0x70d1feb0
2025-11-26T04:37:21.417 [DEBUG] [Thread-11815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:37:21.436 [DEBUG] [Thread-11815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:37:21.436 [INFO] [Thread-11815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:37:21.444 [DEBUG] [Thread-11815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:37:21.444 [DEBUG] [Thread-11815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:37:21.444 [DEBUG] [Thread-11815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:37:21.445 [DEBUG] [Thread-11815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:37:21.445 [DEBUG] [Thread-11815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:37:21.445 [DEBUG] [Thread-11815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:37:21.445 [DEBUG] [Thread-11815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:37:21.445 [DEBUG] [Thread-11815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:37:21.445 [DEBUG] [Thread-11815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:37:21.445 [DEBUG] [Thread-11815] [transport.py] [_log()] client lang: <none>
2025-11-26T04:37:21.446 [DEBUG] [Thread-11815] [transport.py] [_log()] server lang: <none>
2025-11-26T04:37:21.446 [DEBUG] [Thread-11815] [transport.py] [_log()] kex follows: False
2025-11-26T04:37:21.446 [DEBUG] [Thread-11815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:37:21.446 [DEBUG] [Thread-11815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:37:21.446 [DEBUG] [Thread-11815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:37:21.446 [DEBUG] [Thread-11815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:37:21.446 [DEBUG] [Thread-11815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:37:21.446 [DEBUG] [Thread-11815] [transport.py] [_log()] Compression: none
2025-11-26T04:37:21.446 [DEBUG] [Thread-11815] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:37:21.503 [DEBUG] [Thread-11815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:37:21.503 [DEBUG] [Thread-11815] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:37:21.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:37:21.504 [DEBUG] [Thread-11815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:37:21.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:37:21.559 [DEBUG] [Thread-11815] [transport.py] [_log()] userauth is OK
2025-11-26T04:37:21.560 [DEBUG] [Thread-11815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:37:21.560 [DEBUG] [Thread-11815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:37:21.560 [DEBUG] [Thread-11815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:37:21.560 [DEBUG] [Thread-11815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:37:21.579 [INFO] [Thread-11815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:37:21.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:37:21.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:37:22.434 [DEBUG] [Thread-11815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:37:22.434 [DEBUG] [Thread-11815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:37:22.484 [DEBUG] [Thread-11815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:37:22.484 [DEBUG] [Thread-11815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:37:22.494 [DEBUG] [Thread-11815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:37:22.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:37:22.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:37:22.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:37:22.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:37:22.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:37:22.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:37:22.534 [DEBUG] [Thread-11815] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:37:30.144 [DEBUG] [Thread-11817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:37:34.725 [DEBUG] [Thread-11818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:37:49.776 [DEBUG] [Thread-11819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:37:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:37:52.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:37:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:37:53.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 37, 21), 27.58, 14.67, 0.0, 11.7, 18.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:37:53.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:37:21
2025-11-26T04:37:53.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:37:53.494 [DEBUG] [Thread-11820] [transport.py] [_log()] starting thread (client mode): 0x70d2a950
2025-11-26T04:37:53.494 [DEBUG] [Thread-11820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:37:53.514 [DEBUG] [Thread-11820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:37:53.514 [INFO] [Thread-11820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:37:53.516 [DEBUG] [Thread-11820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] client lang: <none>
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] server lang: <none>
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] kex follows: False
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:37:53.523 [DEBUG] [Thread-11820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:37:53.524 [DEBUG] [Thread-11820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:37:53.524 [DEBUG] [Thread-11820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:37:53.524 [DEBUG] [Thread-11820] [transport.py] [_log()] Compression: none
2025-11-26T04:37:53.524 [DEBUG] [Thread-11820] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:37:53.541 [DEBUG] [Thread-11820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:37:53.541 [DEBUG] [Thread-11820] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:37:53.541 [DEBUG] [Thread-11820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:37:53.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:37:53.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:37:53.542 [DEBUG] [Thread-11820] [transport.py] [_log()] userauth is OK
2025-11-26T04:37:53.542 [DEBUG] [Thread-11820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:37:53.542 [DEBUG] [Thread-11820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:37:53.542 [DEBUG] [Thread-11820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:37:53.542 [DEBUG] [Thread-11820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:37:53.551 [INFO] [Thread-11820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:37:53.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:37:54.196 [DEBUG] [Thread-11820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:37:54.196 [DEBUG] [Thread-11820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:37:54.196 [DEBUG] [Thread-11820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:37:54.238 [DEBUG] [Thread-11820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:37:54.238 [DEBUG] [Thread-11820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:37:54.240 [DEBUG] [Thread-11820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:37:54.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:37:54.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:37:54.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:37:54.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:37:54.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:37:54.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:37:54.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.109123 -999.00  +18.50  10.76     19   -5.10 1 1 1 1 1    10    0 22.83 -48.20 ZN.SW 10.8 10.8 59.6 12.2 18.5 -25.5 18.4 -24.8 18.2 -23.6 18.4 -24.7
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.109123
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:37:54.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:37:21', tmtdew=27.58, humidity=14.67, cloud=0.0, wind=11.7, temperature=18.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:37:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:33:00')
2025-11-26T04:37:54.261 [DEBUG] [Thread-11820] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:37:54.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:37:54.347 [DEBUG] [Thread-11823] [transport.py] [_log()] starting thread (client mode): 0x70d29e70
2025-11-26T04:37:54.347 [DEBUG] [Thread-11823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:37:54.363 [DEBUG] [Thread-11823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:37:54.364 [INFO] [Thread-11823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] client lang: <none>
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] server lang: <none>
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] kex follows: False
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] Compression: none
2025-11-26T04:37:54.373 [DEBUG] [Thread-11823] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:37:54.431 [DEBUG] [Thread-11823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:37:54.431 [DEBUG] [Thread-11823] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:37:54.431 [DEBUG] [Thread-11823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:37:54.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:37:54.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:37:54.488 [DEBUG] [Thread-11823] [transport.py] [_log()] userauth is OK
2025-11-26T04:37:54.488 [DEBUG] [Thread-11823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:37:54.488 [DEBUG] [Thread-11823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:37:54.488 [DEBUG] [Thread-11823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:37:54.488 [DEBUG] [Thread-11823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:37:54.505 [INFO] [Thread-11823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:37:54.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:37:54.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:37:55.319 [DEBUG] [Thread-11823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:37:55.319 [DEBUG] [Thread-11823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:37:55.367 [DEBUG] [Thread-11823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:37:55.367 [DEBUG] [Thread-11823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:37:55.376 [DEBUG] [Thread-11823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:37:55.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:37:55.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:37:55.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:37:55.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:37:55.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:37:55.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:37:55.408 [DEBUG] [Thread-11823] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:38:04.805 [DEBUG] [Thread-11825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:38:09.771 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:38:09.772 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:38:19.869 [DEBUG] [Thread-11826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:38:25.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:38:25.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:38:25.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:38:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 37, 53), 27.58, 14.59, 0.0, 9.92, 18.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:38:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:37:53
2025-11-26T04:38:26.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:38:26.373 [DEBUG] [Thread-11827] [transport.py] [_log()] starting thread (client mode): 0x70d00310
2025-11-26T04:38:26.373 [DEBUG] [Thread-11827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:38:26.395 [DEBUG] [Thread-11827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:38:26.395 [INFO] [Thread-11827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:38:26.398 [DEBUG] [Thread-11827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] client lang: <none>
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] server lang: <none>
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] kex follows: False
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] Compression: none
2025-11-26T04:38:26.399 [DEBUG] [Thread-11827] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:38:26.414 [DEBUG] [Thread-11827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:38:26.414 [DEBUG] [Thread-11827] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:38:26.414 [DEBUG] [Thread-11827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:38:26.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:38:26.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:38:26.415 [DEBUG] [Thread-11827] [transport.py] [_log()] userauth is OK
2025-11-26T04:38:26.415 [DEBUG] [Thread-11827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:38:26.415 [DEBUG] [Thread-11827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:38:26.415 [DEBUG] [Thread-11827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:38:26.415 [DEBUG] [Thread-11827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:38:26.442 [INFO] [Thread-11827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:38:26.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:38:27.226 [DEBUG] [Thread-11827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:38:27.226 [DEBUG] [Thread-11827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:38:27.226 [DEBUG] [Thread-11827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:38:27.266 [DEBUG] [Thread-11827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:38:27.266 [DEBUG] [Thread-11827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:38:27.269 [DEBUG] [Thread-11827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:38:27.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:38:27.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:38:27.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:38:27.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:38:27.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:38:27.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:38:27.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.109470 -999.00  +18.40   8.83     19   -5.20 1 1 1 1 1    11    0 22.48 -44.46 ZN..W 10.9 8.8 60.6 11.7 18.5 -25.6 18.4 -24.8 18.2 -23.7 18.4 -24.8
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.109470
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:38:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:38:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:37:53', tmtdew=27.58, humidity=14.59, cloud=0.0, wind=9.92, temperature=18.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:37:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:38:27.286 [DEBUG] [Thread-11827] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:38:27.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:38:27.372 [DEBUG] [Thread-11830] [transport.py] [_log()] starting thread (client mode): 0x70d2bdc0
2025-11-26T04:38:27.372 [DEBUG] [Thread-11830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:38:27.387 [DEBUG] [Thread-11830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:38:27.387 [INFO] [Thread-11830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] client lang: <none>
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] server lang: <none>
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] kex follows: False
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] Compression: none
2025-11-26T04:38:27.395 [DEBUG] [Thread-11830] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:38:27.452 [DEBUG] [Thread-11830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:38:27.452 [DEBUG] [Thread-11830] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:38:27.452 [DEBUG] [Thread-11830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:38:27.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:38:27.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:38:27.509 [DEBUG] [Thread-11830] [transport.py] [_log()] userauth is OK
2025-11-26T04:38:27.509 [DEBUG] [Thread-11830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:38:27.509 [DEBUG] [Thread-11830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:38:27.509 [DEBUG] [Thread-11830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:38:27.509 [DEBUG] [Thread-11830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:38:27.523 [INFO] [Thread-11830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:38:27.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:38:27.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:38:28.356 [DEBUG] [Thread-11830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:38:28.356 [DEBUG] [Thread-11830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:38:28.404 [DEBUG] [Thread-11830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:38:28.404 [DEBUG] [Thread-11830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:38:28.413 [DEBUG] [Thread-11830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:38:28.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:38:28.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:38:28.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:38:28.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:38:28.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:38:28.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:38:28.444 [DEBUG] [Thread-11830] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:38:30.212 [DEBUG] [Thread-11832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:38:34.903 [DEBUG] [Thread-11833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:38:49.955 [DEBUG] [Thread-11834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:38:58.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:38:58.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:38:58.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:38:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 38, 25), 27.55, 14.66, 0.0, 10.15, 18.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:38:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:38:25
2025-11-26T04:38:59.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:38:59.448 [DEBUG] [Thread-11835] [transport.py] [_log()] starting thread (client mode): 0x70d1cbb0
2025-11-26T04:38:59.448 [DEBUG] [Thread-11835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:38:59.469 [DEBUG] [Thread-11835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:38:59.469 [INFO] [Thread-11835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] client lang: <none>
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] server lang: <none>
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] kex follows: False
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] Compression: none
2025-11-26T04:38:59.473 [DEBUG] [Thread-11835] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:38:59.490 [DEBUG] [Thread-11835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:38:59.490 [DEBUG] [Thread-11835] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:38:59.490 [DEBUG] [Thread-11835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:38:59.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:38:59.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:38:59.491 [DEBUG] [Thread-11835] [transport.py] [_log()] userauth is OK
2025-11-26T04:38:59.491 [DEBUG] [Thread-11835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:38:59.491 [DEBUG] [Thread-11835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:38:59.491 [DEBUG] [Thread-11835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:38:59.491 [DEBUG] [Thread-11835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:38:59.501 [INFO] [Thread-11835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:38:59.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:39:00.133 [DEBUG] [Thread-11835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:39:00.133 [DEBUG] [Thread-11835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:39:00.133 [DEBUG] [Thread-11835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:39:00.174 [DEBUG] [Thread-11835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:39:00.174 [DEBUG] [Thread-11835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:39:00.177 [DEBUG] [Thread-11835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:39:00.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:39:00.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:39:00.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:39:00.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:39:00.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:39:00.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:39:00.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:39:00.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:39:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:39:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.109817 -999.00  +18.40  11.69     19   -5.20 1 1 1 1 1    13    0 23.11 -46.32 ZN..W 10.8 11.7 61.2 12.6 18.5 -25.4 18.4 -24.8 18.2 -23.6 18.4 -24.5
2025-11-26T04:39:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:39:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:39:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.109817
2025-11-26T04:39:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:39:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:39:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:39:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:39:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:39:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:38:25', tmtdew=27.55, humidity=14.66, cloud=0.0, wind=10.15, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:38:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:39:00.203 [DEBUG] [Thread-11835] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:39:00.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:39:00.301 [DEBUG] [Thread-11838] [transport.py] [_log()] starting thread (client mode): 0x70d1e680
2025-11-26T04:39:00.301 [DEBUG] [Thread-11838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:39:00.315 [DEBUG] [Thread-11838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:39:00.315 [INFO] [Thread-11838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:39:00.323 [DEBUG] [Thread-11838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:39:00.323 [DEBUG] [Thread-11838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:39:00.323 [DEBUG] [Thread-11838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:39:00.323 [DEBUG] [Thread-11838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:39:00.323 [DEBUG] [Thread-11838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:39:00.323 [DEBUG] [Thread-11838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:39:00.323 [DEBUG] [Thread-11838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] client lang: <none>
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] server lang: <none>
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] kex follows: False
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:39:00.324 [DEBUG] [Thread-11838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:39:00.325 [DEBUG] [Thread-11838] [transport.py] [_log()] Compression: none
2025-11-26T04:39:00.325 [DEBUG] [Thread-11838] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:39:00.381 [DEBUG] [Thread-11838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:39:00.381 [DEBUG] [Thread-11838] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:39:00.381 [DEBUG] [Thread-11838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:39:00.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:39:00.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:39:00.438 [DEBUG] [Thread-11838] [transport.py] [_log()] userauth is OK
2025-11-26T04:39:00.438 [DEBUG] [Thread-11838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:39:00.438 [DEBUG] [Thread-11838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:39:00.438 [DEBUG] [Thread-11838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:39:00.438 [DEBUG] [Thread-11838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:39:00.456 [INFO] [Thread-11838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:39:00.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:39:00.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:39:01.240 [DEBUG] [Thread-4685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:39:01.306 [DEBUG] [Thread-11838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:39:01.307 [DEBUG] [Thread-11838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:39:01.355 [DEBUG] [Thread-11838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:39:01.355 [DEBUG] [Thread-11838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:39:01.364 [DEBUG] [Thread-11838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:39:01.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:39:01.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:39:01.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:39:01.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:39:01.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:39:01.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:39:01.401 [DEBUG] [Thread-11838] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:39:04.987 [DEBUG] [Thread-11840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:39:09.975 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:39:09.977 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:39:20.028 [DEBUG] [Thread-11841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:39:30.284 [DEBUG] [Thread-11842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:39:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:39:31.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:39:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:39:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 38, 57), 27.54, 14.66, 0.0, 11.89, 18.2, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:39:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:38:57
2025-11-26T04:39:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:39:32.380 [DEBUG] [Thread-11843] [transport.py] [_log()] starting thread (client mode): 0x70d1f280
2025-11-26T04:39:32.380 [DEBUG] [Thread-11843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:39:32.400 [DEBUG] [Thread-11843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:39:32.400 [INFO] [Thread-11843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] client lang: <none>
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] server lang: <none>
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] kex follows: False
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:39:32.401 [DEBUG] [Thread-11843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:39:32.402 [DEBUG] [Thread-11843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:39:32.402 [DEBUG] [Thread-11843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:39:32.402 [DEBUG] [Thread-11843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:39:32.402 [DEBUG] [Thread-11843] [transport.py] [_log()] Compression: none
2025-11-26T04:39:32.402 [DEBUG] [Thread-11843] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:39:32.418 [DEBUG] [Thread-11843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:39:32.418 [DEBUG] [Thread-11843] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:39:32.419 [DEBUG] [Thread-11843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:39:32.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:39:32.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:39:32.420 [DEBUG] [Thread-11843] [transport.py] [_log()] userauth is OK
2025-11-26T04:39:32.421 [DEBUG] [Thread-11843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:39:32.421 [DEBUG] [Thread-11843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:39:32.421 [DEBUG] [Thread-11843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:39:32.421 [DEBUG] [Thread-11843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:39:32.445 [INFO] [Thread-11843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:39:32.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:39:33.144 [DEBUG] [Thread-11843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:39:33.144 [DEBUG] [Thread-11843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:39:33.145 [DEBUG] [Thread-11843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:39:33.185 [DEBUG] [Thread-11843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:39:33.185 [DEBUG] [Thread-11843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:39:33.188 [DEBUG] [Thread-11843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:39:33.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:39:33.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:39:33.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:39:33.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:39:33.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:39:33.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:39:33.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:39:33.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:39:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:39:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.110511 -999.00  +18.40   8.76     19   -5.20 1 1 1 1 1    15    0 22.52 -43.32 ----- 9.8 8.8 64.2 11.3 18.4 -25.5 18.4 -24.8 18.1 -23.5 18.4 -24.7
2025-11-26T04:39:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:39:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:39:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.110511
2025-11-26T04:39:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:39:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:39:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:39:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:39:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:39:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:38:57', tmtdew=27.54, humidity=14.66, cloud=0.0, wind=11.89, temperature=18.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:39:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:39:33.217 [DEBUG] [Thread-11843] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:39:33.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:39:35.066 [DEBUG] [Thread-11846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:39:50.115 [DEBUG] [Thread-11847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:40:05.152 [DEBUG] [Thread-11848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:40:10.185 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:40:10.186 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:40:20.190 [DEBUG] [Thread-11849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:40:30.357 [DEBUG] [Thread-11850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:40:35.221 [DEBUG] [Thread-11851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:40:50.254 [DEBUG] [Thread-11852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:41:05.286 [DEBUG] [Thread-11853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:41:10.386 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:41:10.387 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:41:20.323 [DEBUG] [Thread-11854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:41:30.429 [DEBUG] [Thread-11855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:41:35.353 [DEBUG] [Thread-11856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:41:47.725 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T04:41:50.384 [DEBUG] [Thread-11857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:42:05.426 [DEBUG] [Thread-11858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:42:10.588 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:42:10.589 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:42:17.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:42:17.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:42:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:42:18.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 42, 9), 27.35, 14.76, 0.0, 11.66, 18.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:42:18.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:42:09
2025-11-26T04:42:18.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:42:18.686 [DEBUG] [Thread-11859] [transport.py] [_log()] starting thread (client mode): 0x70d1e290
2025-11-26T04:42:18.686 [DEBUG] [Thread-11859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:42:18.708 [DEBUG] [Thread-11859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:42:18.708 [INFO] [Thread-11859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] client lang: <none>
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] server lang: <none>
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] kex follows: False
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:42:18.711 [DEBUG] [Thread-11859] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:42:18.712 [DEBUG] [Thread-11859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:42:18.712 [DEBUG] [Thread-11859] [transport.py] [_log()] Compression: none
2025-11-26T04:42:18.712 [DEBUG] [Thread-11859] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:42:18.729 [DEBUG] [Thread-11859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:42:18.729 [DEBUG] [Thread-11859] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:42:18.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:42:18.730 [DEBUG] [Thread-11859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:42:18.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:42:18.732 [DEBUG] [Thread-11859] [transport.py] [_log()] userauth is OK
2025-11-26T04:42:18.732 [DEBUG] [Thread-11859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:42:18.732 [DEBUG] [Thread-11859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:42:18.732 [DEBUG] [Thread-11859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:42:18.732 [DEBUG] [Thread-11859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:42:18.755 [INFO] [Thread-11859] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:42:18.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:42:19.374 [DEBUG] [Thread-11859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:42:19.375 [DEBUG] [Thread-11859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:42:19.375 [DEBUG] [Thread-11859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:42:19.416 [DEBUG] [Thread-11859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:42:19.416 [DEBUG] [Thread-11859] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:42:19.419 [DEBUG] [Thread-11859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:42:19.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:42:19.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:42:19.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:42:19.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:42:19.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:42:19.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:42:19.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:42:19.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:42:19.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:42:19.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.112248 -999.00  +18.20   7.60     19   -5.30 1 1 1 1 1    24    0 22.19 -49.26 ----- 8.3 7.6 59.8 9.4 18.4 -25.5 18.3 -24.7 18.0 -23.5 18.3 -24.5
2025-11-26T04:42:19.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:42:19.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:42:19.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.112248
2025-11-26T04:42:19.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:42:19.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:42:19.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:42:19.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:42:19.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:42:19.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:42:09', tmtdew=27.35, humidity=14.76, cloud=0.0, wind=11.66, temperature=18.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:41:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:42:19.443 [DEBUG] [Thread-11859] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:42:19.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:42:19.539 [DEBUG] [Thread-11862] [transport.py] [_log()] starting thread (client mode): 0x70d2a050
2025-11-26T04:42:19.539 [DEBUG] [Thread-11862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:42:19.554 [DEBUG] [Thread-11862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:42:19.554 [INFO] [Thread-11862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:42:19.561 [DEBUG] [Thread-11862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:42:19.561 [DEBUG] [Thread-11862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:42:19.561 [DEBUG] [Thread-11862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] client lang: <none>
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] server lang: <none>
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] kex follows: False
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] Compression: none
2025-11-26T04:42:19.562 [DEBUG] [Thread-11862] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:42:19.619 [DEBUG] [Thread-11862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:42:19.620 [DEBUG] [Thread-11862] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:42:19.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:42:19.621 [DEBUG] [Thread-11862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:42:19.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:42:19.675 [DEBUG] [Thread-11862] [transport.py] [_log()] userauth is OK
2025-11-26T04:42:19.676 [DEBUG] [Thread-11862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:42:19.676 [DEBUG] [Thread-11862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:42:19.676 [DEBUG] [Thread-11862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:42:19.676 [DEBUG] [Thread-11862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:42:19.694 [INFO] [Thread-11862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:42:19.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:42:19.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:42:20.464 [DEBUG] [Thread-11864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:42:20.510 [DEBUG] [Thread-11862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:42:20.511 [DEBUG] [Thread-11862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:42:20.558 [DEBUG] [Thread-11862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:42:20.558 [DEBUG] [Thread-11862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:42:20.567 [DEBUG] [Thread-11862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:42:20.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:42:20.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:42:20.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:42:20.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:42:20.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:42:20.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:42:20.601 [DEBUG] [Thread-11862] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:42:30.502 [DEBUG] [Thread-11865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:42:35.517 [DEBUG] [Thread-11866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:42:50.549 [DEBUG] [Thread-11867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:42:50.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:42:50.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:42:50.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:42:51.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 42, 41), 27.44, 14.66, 0.0, 11.52, 18.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:42:51.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:42:41
2025-11-26T04:42:51.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:42:51.583 [DEBUG] [Thread-11868] [transport.py] [_log()] starting thread (client mode): 0x70d281c0
2025-11-26T04:42:51.583 [DEBUG] [Thread-11868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:42:51.602 [DEBUG] [Thread-11868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:42:51.602 [INFO] [Thread-11868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] client lang: <none>
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] server lang: <none>
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] kex follows: False
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:42:51.605 [DEBUG] [Thread-11868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:42:51.606 [DEBUG] [Thread-11868] [transport.py] [_log()] Compression: none
2025-11-26T04:42:51.606 [DEBUG] [Thread-11868] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:42:51.620 [DEBUG] [Thread-11868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:42:51.620 [DEBUG] [Thread-11868] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:42:51.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:42:51.620 [DEBUG] [Thread-11868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:42:51.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:42:51.621 [DEBUG] [Thread-11868] [transport.py] [_log()] userauth is OK
2025-11-26T04:42:51.621 [DEBUG] [Thread-11868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:42:51.621 [DEBUG] [Thread-11868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:42:51.621 [DEBUG] [Thread-11868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:42:51.621 [DEBUG] [Thread-11868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:42:51.636 [INFO] [Thread-11868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:42:51.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:42:52.401 [DEBUG] [Thread-11868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:42:52.401 [DEBUG] [Thread-11868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:42:52.401 [DEBUG] [Thread-11868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:42:52.442 [DEBUG] [Thread-11868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:42:52.442 [DEBUG] [Thread-11868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:42:52.444 [DEBUG] [Thread-11868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:42:52.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:42:52.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:42:52.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:42:52.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:42:52.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:42:52.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:42:52.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:42:52.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.112595 -999.00  +18.20   8.76     19   -5.30 1 1 1 1 1    26    0 22.38 -50.01 ----- 8.0 8.8 53.6 10.3 18.3 -25.3 18.3 -24.8 18.0 -23.5 18.2 -24.6
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.112595
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:42:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:42:41', tmtdew=27.44, humidity=14.66, cloud=0.0, wind=11.52, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:42:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:42:52.465 [DEBUG] [Thread-11868] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:42:52.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:42:52.549 [DEBUG] [Thread-11871] [transport.py] [_log()] starting thread (client mode): 0x737c6680
2025-11-26T04:42:52.549 [DEBUG] [Thread-11871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:42:52.564 [DEBUG] [Thread-11871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:42:52.564 [INFO] [Thread-11871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:42:52.575 [DEBUG] [Thread-11871] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:42:52.575 [DEBUG] [Thread-11871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:42:52.575 [DEBUG] [Thread-11871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:42:52.575 [DEBUG] [Thread-11871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:42:52.575 [DEBUG] [Thread-11871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:42:52.575 [DEBUG] [Thread-11871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:42:52.575 [DEBUG] [Thread-11871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:42:52.575 [DEBUG] [Thread-11871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:42:52.575 [DEBUG] [Thread-11871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] client lang: <none>
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] server lang: <none>
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] kex follows: False
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] Compression: none
2025-11-26T04:42:52.576 [DEBUG] [Thread-11871] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:42:52.634 [DEBUG] [Thread-11871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:42:52.635 [DEBUG] [Thread-11871] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:42:52.635 [DEBUG] [Thread-11871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:42:52.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:42:52.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:42:52.695 [DEBUG] [Thread-11871] [transport.py] [_log()] userauth is OK
2025-11-26T04:42:52.695 [DEBUG] [Thread-11871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:42:52.695 [DEBUG] [Thread-11871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:42:52.695 [DEBUG] [Thread-11871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:42:52.695 [DEBUG] [Thread-11871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:42:52.714 [INFO] [Thread-11871] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:42:52.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:42:52.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:42:53.618 [DEBUG] [Thread-11871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:42:53.618 [DEBUG] [Thread-11871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:42:53.666 [DEBUG] [Thread-11871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:42:53.666 [DEBUG] [Thread-11871] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:42:53.676 [DEBUG] [Thread-11871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:42:53.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:42:53.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:42:53.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:42:53.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:42:53.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:42:53.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:42:53.714 [DEBUG] [Thread-11871] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:43:05.579 [DEBUG] [Thread-11873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:43:10.787 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:43:10.789 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:43:20.627 [DEBUG] [Thread-11874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:43:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:43:23.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:43:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:43:24.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 43, 13), 27.42, 14.67, 0.0, 11.66, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:43:24.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:43:13
2025-11-26T04:43:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:43:24.681 [DEBUG] [Thread-11875] [transport.py] [_log()] starting thread (client mode): 0x737c5660
2025-11-26T04:43:24.681 [DEBUG] [Thread-11875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:43:24.702 [DEBUG] [Thread-11875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:43:24.702 [INFO] [Thread-11875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:43:24.706 [DEBUG] [Thread-11875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] client lang: <none>
2025-11-26T04:43:24.707 [DEBUG] [Thread-11875] [transport.py] [_log()] server lang: <none>
2025-11-26T04:43:24.708 [DEBUG] [Thread-11875] [transport.py] [_log()] kex follows: False
2025-11-26T04:43:24.708 [DEBUG] [Thread-11875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:43:24.708 [DEBUG] [Thread-11875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:43:24.708 [DEBUG] [Thread-11875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:43:24.708 [DEBUG] [Thread-11875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:43:24.708 [DEBUG] [Thread-11875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:43:24.708 [DEBUG] [Thread-11875] [transport.py] [_log()] Compression: none
2025-11-26T04:43:24.708 [DEBUG] [Thread-11875] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:43:24.727 [DEBUG] [Thread-11875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:43:24.728 [DEBUG] [Thread-11875] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:43:24.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:43:24.729 [DEBUG] [Thread-11875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:43:24.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:43:24.731 [DEBUG] [Thread-11875] [transport.py] [_log()] userauth is OK
2025-11-26T04:43:24.731 [DEBUG] [Thread-11875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:43:24.732 [DEBUG] [Thread-11875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:43:24.732 [DEBUG] [Thread-11875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:43:24.732 [DEBUG] [Thread-11875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:43:24.756 [INFO] [Thread-11875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:43:24.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:43:25.403 [DEBUG] [Thread-11875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:43:25.403 [DEBUG] [Thread-11875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:43:25.403 [DEBUG] [Thread-11875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:43:25.444 [DEBUG] [Thread-11875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:43:25.444 [DEBUG] [Thread-11875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:43:25.446 [DEBUG] [Thread-11875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:43:25.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:43:25.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:43:25.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:43:25.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:43:25.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:43:25.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:43:25.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.113289 -999.00  +18.10   8.29     19   -5.20 1 1 1 1 1    31    0 21.96 -52.46 ----- 9.6 8.3 57.8 10.7 18.3 -25.3 18.2 -24.7 18.0 -23.6 18.2 -24.5
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.113289
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:43:25.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:43:13', tmtdew=27.42, humidity=14.67, cloud=0.0, wind=11.66, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:43:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:43:25.466 [DEBUG] [Thread-11875] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:43:25.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:43:25.551 [DEBUG] [Thread-11878] [transport.py] [_log()] starting thread (client mode): 0x70d2bdc0
2025-11-26T04:43:25.551 [DEBUG] [Thread-11878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:43:25.566 [DEBUG] [Thread-11878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:43:25.566 [INFO] [Thread-11878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:43:25.573 [DEBUG] [Thread-11878] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:43:25.573 [DEBUG] [Thread-11878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:43:25.573 [DEBUG] [Thread-11878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:43:25.573 [DEBUG] [Thread-11878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:43:25.573 [DEBUG] [Thread-11878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:43:25.573 [DEBUG] [Thread-11878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:43:25.573 [DEBUG] [Thread-11878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:43:25.573 [DEBUG] [Thread-11878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:43:25.573 [DEBUG] [Thread-11878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] client lang: <none>
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] server lang: <none>
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] kex follows: False
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] Compression: none
2025-11-26T04:43:25.574 [DEBUG] [Thread-11878] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:43:25.631 [DEBUG] [Thread-11878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:43:25.631 [DEBUG] [Thread-11878] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:43:25.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:43:25.632 [DEBUG] [Thread-11878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:43:25.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:43:25.688 [DEBUG] [Thread-11878] [transport.py] [_log()] userauth is OK
2025-11-26T04:43:25.688 [DEBUG] [Thread-11878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:43:25.688 [DEBUG] [Thread-11878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:43:25.688 [DEBUG] [Thread-11878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:43:25.688 [DEBUG] [Thread-11878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:43:25.705 [INFO] [Thread-11878] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:43:25.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:43:25.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:43:26.516 [DEBUG] [Thread-11878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:43:26.516 [DEBUG] [Thread-11878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:43:26.563 [DEBUG] [Thread-11878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:43:26.563 [DEBUG] [Thread-11878] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:43:26.571 [DEBUG] [Thread-11878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:43:26.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:43:26.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:43:26.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:43:26.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:43:26.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:43:26.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:43:26.602 [DEBUG] [Thread-11878] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:43:30.570 [DEBUG] [Thread-11880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:43:35.664 [DEBUG] [Thread-11881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:43:50.712 [DEBUG] [Thread-11882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:43:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:43:56.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:43:56.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:43:57.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 43, 45), 27.36, 14.69, 0.0, 11.21, 18.1, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:43:57.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:43:45
2025-11-26T04:43:57.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:43:57.568 [DEBUG] [Thread-11883] [transport.py] [_log()] starting thread (client mode): 0x737c6bf0
2025-11-26T04:43:57.568 [DEBUG] [Thread-11883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:43:57.588 [DEBUG] [Thread-11883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:43:57.588 [INFO] [Thread-11883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:43:57.591 [DEBUG] [Thread-11883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:43:57.591 [DEBUG] [Thread-11883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:43:57.591 [DEBUG] [Thread-11883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:43:57.591 [DEBUG] [Thread-11883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] client lang: <none>
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] server lang: <none>
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] kex follows: False
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:43:57.592 [DEBUG] [Thread-11883] [transport.py] [_log()] Compression: none
2025-11-26T04:43:57.593 [DEBUG] [Thread-11883] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:43:57.612 [DEBUG] [Thread-11883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:43:57.613 [DEBUG] [Thread-11883] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:43:57.614 [DEBUG] [Thread-11883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:43:57.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:43:57.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:43:57.616 [DEBUG] [Thread-11883] [transport.py] [_log()] userauth is OK
2025-11-26T04:43:57.616 [DEBUG] [Thread-11883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:43:57.616 [DEBUG] [Thread-11883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:43:57.616 [DEBUG] [Thread-11883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:43:57.616 [DEBUG] [Thread-11883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:43:57.651 [INFO] [Thread-11883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:43:57.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:43:58.456 [DEBUG] [Thread-11883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:43:58.457 [DEBUG] [Thread-11883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:43:58.457 [DEBUG] [Thread-11883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:43:58.498 [DEBUG] [Thread-11883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:43:58.498 [DEBUG] [Thread-11883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:43:58.501 [DEBUG] [Thread-11883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:43:58.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:43:58.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:43:58.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:43:58.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:43:58.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:43:58.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:43:58.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:43:58.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:43:58.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:43:58.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.113636 -999.00  +18.10   8.20     19   -5.20 1 1 1 1 1    34    0 22.27 -50.87 ----- 7.7 8.2 60.0 10.9 18.2 -25.3 18.2 -24.7 18.0 -23.5 18.2 -24.5
2025-11-26T04:43:58.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:43:58.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:43:58.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.113636
2025-11-26T04:43:58.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:43:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:43:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:43:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:43:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:43:58.529 [DEBUG] [Thread-11883] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:43:58.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:43:45', tmtdew=27.36, humidity=14.69, cloud=0.0, wind=11.21, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:43:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:43:58.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:43:58.627 [DEBUG] [Thread-11886] [transport.py] [_log()] starting thread (client mode): 0x737c4580
2025-11-26T04:43:58.628 [DEBUG] [Thread-11886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:43:58.642 [DEBUG] [Thread-11886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:43:58.642 [INFO] [Thread-11886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] client lang: <none>
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] server lang: <none>
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] kex follows: False
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:43:58.650 [DEBUG] [Thread-11886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:43:58.651 [DEBUG] [Thread-11886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:43:58.651 [DEBUG] [Thread-11886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:43:58.651 [DEBUG] [Thread-11886] [transport.py] [_log()] Compression: none
2025-11-26T04:43:58.651 [DEBUG] [Thread-11886] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:43:58.709 [DEBUG] [Thread-11886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:43:58.710 [DEBUG] [Thread-11886] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:43:58.710 [DEBUG] [Thread-11886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:43:58.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:43:58.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:43:58.765 [DEBUG] [Thread-11886] [transport.py] [_log()] userauth is OK
2025-11-26T04:43:58.765 [DEBUG] [Thread-11886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:43:58.765 [DEBUG] [Thread-11886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:43:58.765 [DEBUG] [Thread-11886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:43:58.765 [DEBUG] [Thread-11886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:43:58.785 [INFO] [Thread-11886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:43:58.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:43:58.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:43:59.632 [DEBUG] [Thread-11886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:43:59.632 [DEBUG] [Thread-11886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:43:59.680 [DEBUG] [Thread-11886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:43:59.680 [DEBUG] [Thread-11886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:43:59.689 [DEBUG] [Thread-11886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:43:59.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:43:59.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:43:59.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:43:59.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:43:59.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:43:59.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:43:59.728 [DEBUG] [Thread-11886] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:44:05.743 [DEBUG] [Thread-11888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:44:10.993 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:44:10.995 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:44:20.793 [DEBUG] [Thread-11889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:44:29.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:44:29.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:44: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
2025-11-26T04:44:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 44, 17), 27.37, 14.67, 0.0, 11.43, 18.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:44:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:44:17
2025-11-26T04:44:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:44:30.638 [DEBUG] [Thread-11890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:44:30.695 [DEBUG] [Thread-11891] [transport.py] [_log()] starting thread (client mode): 0x70d1f280
2025-11-26T04:44:30.695 [DEBUG] [Thread-11891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:44:30.714 [DEBUG] [Thread-11891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:44:30.714 [INFO] [Thread-11891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:44:30.717 [DEBUG] [Thread-11891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] client lang: <none>
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] server lang: <none>
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] kex follows: False
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] Compression: none
2025-11-26T04:44:30.718 [DEBUG] [Thread-11891] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:44:30.734 [DEBUG] [Thread-11891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:44:30.735 [DEBUG] [Thread-11891] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:44:30.736 [DEBUG] [Thread-11891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:44:30.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:44:30.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:44:30.777 [DEBUG] [Thread-11891] [transport.py] [_log()] userauth is OK
2025-11-26T04:44:30.777 [DEBUG] [Thread-11891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:44:30.777 [DEBUG] [Thread-11891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:44:30.778 [DEBUG] [Thread-11891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:44:30.778 [DEBUG] [Thread-11891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:44:30.803 [INFO] [Thread-11891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:44:30.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:44:31.425 [DEBUG] [Thread-11891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:44:31.425 [DEBUG] [Thread-11891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:44:31.425 [DEBUG] [Thread-11891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:44:31.465 [DEBUG] [Thread-11891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:44:31.466 [DEBUG] [Thread-11891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:44:31.469 [DEBUG] [Thread-11891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:44:31.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:44:31.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:44:31.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:44:31.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:44:31.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:44:31.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:44:31.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:44:31.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:44:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:44:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.113984 -999.00  +18.10  10.73     20   -5.10 1 1 1 1 1    37    0 22.12 -53.11 ----- 10.4 10.7 53.0 11.3 18.3 -25.2 18.2 -24.7 17.9 -23.3 18.2 -24.5
2025-11-26T04:44:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:44:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:44:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.113984
2025-11-26T04:44:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:44:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:44:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:44:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:44:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:44:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:44:17', tmtdew=27.37, humidity=14.67, cloud=0.0, wind=11.43, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:44:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:44:31.497 [DEBUG] [Thread-11891] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:44:31.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:44:31.591 [DEBUG] [Thread-11894] [transport.py] [_log()] starting thread (client mode): 0x737c49d0
2025-11-26T04:44:31.591 [DEBUG] [Thread-11894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:44:31.605 [DEBUG] [Thread-11894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:44:31.606 [INFO] [Thread-11894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:44:31.613 [DEBUG] [Thread-11894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:44:31.613 [DEBUG] [Thread-11894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:44:31.613 [DEBUG] [Thread-11894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:44:31.613 [DEBUG] [Thread-11894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] client lang: <none>
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] server lang: <none>
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] kex follows: False
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:44:31.614 [DEBUG] [Thread-11894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:44:31.615 [DEBUG] [Thread-11894] [transport.py] [_log()] Compression: none
2025-11-26T04:44:31.615 [DEBUG] [Thread-11894] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:44:31.674 [DEBUG] [Thread-11894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:44:31.674 [DEBUG] [Thread-11894] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:44:31.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:44:31.675 [DEBUG] [Thread-11894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:44:31.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:44:31.734 [DEBUG] [Thread-11894] [transport.py] [_log()] userauth is OK
2025-11-26T04:44:31.734 [DEBUG] [Thread-11894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:44:31.734 [DEBUG] [Thread-11894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:44:31.735 [DEBUG] [Thread-11894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:44:31.735 [DEBUG] [Thread-11894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:44:31.753 [INFO] [Thread-11894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:44:31.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:44:31.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:44:32.567 [DEBUG] [Thread-11894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:44:32.567 [DEBUG] [Thread-11894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:44:32.616 [DEBUG] [Thread-11894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:44:32.616 [DEBUG] [Thread-11894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:44:32.625 [DEBUG] [Thread-11894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:44:32.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:44:32.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:44:32.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:44:32.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:44:32.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:44:32.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:44:32.665 [DEBUG] [Thread-11894] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:44:35.832 [DEBUG] [Thread-11896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:44:50.877 [DEBUG] [Thread-11897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:45:02.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:45:02.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:45:02.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:45:03.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 44, 49), 27.28, 14.67, 0.0, 11.49, 18.1, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:45:03.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:44:49
2025-11-26T04:45:03.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:45:03.613 [DEBUG] [Thread-11898] [transport.py] [_log()] starting thread (client mode): 0x737c4280
2025-11-26T04:45:03.613 [DEBUG] [Thread-11898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:45:03.633 [DEBUG] [Thread-11898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:45:03.633 [INFO] [Thread-11898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] client lang: <none>
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] server lang: <none>
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] kex follows: False
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] Compression: none
2025-11-26T04:45:03.637 [DEBUG] [Thread-11898] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:45:03.645 [DEBUG] [Thread-11898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:45:03.646 [DEBUG] [Thread-11898] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:45:03.646 [DEBUG] [Thread-11898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:45:03.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:45:03.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:45:03.648 [DEBUG] [Thread-11898] [transport.py] [_log()] userauth is OK
2025-11-26T04:45:03.648 [DEBUG] [Thread-11898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:45:03.648 [DEBUG] [Thread-11898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:45:03.648 [DEBUG] [Thread-11898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:45:03.648 [DEBUG] [Thread-11898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:45:03.666 [INFO] [Thread-11898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:45:03.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:45:04.440 [DEBUG] [Thread-11898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:45:04.440 [DEBUG] [Thread-11898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:45:04.441 [DEBUG] [Thread-11898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:45:04.481 [DEBUG] [Thread-11898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:45:04.481 [DEBUG] [Thread-11898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:45:04.484 [DEBUG] [Thread-11898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:45:04.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:45:04.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:45:04.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:45:04.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:45:04.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:45:04.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:45:04.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:45:04.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:45:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:45:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.114331 -999.00  +18.20   9.72     20   -5.10 1 1 1 1 1    40    0 22.33 -51.23 ----- 9.4 9.7 57.0 11.7 18.2 -25.3 18.2 -24.7 18.0 -23.4 18.2 -24.5
2025-11-26T04:45:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:45:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:45:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.114331
2025-11-26T04:45:04.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:45:04.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:45:04.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:45:04.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:45:04.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:45:04.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:44:49', tmtdew=27.28, humidity=14.67, cloud=0.0, wind=11.49, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:44:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:45:04.526 [DEBUG] [Thread-11898] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:45:04.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:45:04.622 [DEBUG] [Thread-11901] [transport.py] [_log()] starting thread (client mode): 0x737c75e0
2025-11-26T04:45:04.622 [DEBUG] [Thread-11901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:45:04.637 [DEBUG] [Thread-11901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:45:04.637 [INFO] [Thread-11901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] client lang: <none>
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] server lang: <none>
2025-11-26T04:45:04.645 [DEBUG] [Thread-11901] [transport.py] [_log()] kex follows: False
2025-11-26T04:45:04.646 [DEBUG] [Thread-11901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:45:04.646 [DEBUG] [Thread-11901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:45:04.646 [DEBUG] [Thread-11901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:45:04.647 [DEBUG] [Thread-11901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:45:04.647 [DEBUG] [Thread-11901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:45:04.647 [DEBUG] [Thread-11901] [transport.py] [_log()] Compression: none
2025-11-26T04:45:04.647 [DEBUG] [Thread-11901] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:45:04.702 [DEBUG] [Thread-11901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:45:04.703 [DEBUG] [Thread-11901] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:45:04.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:45:04.704 [DEBUG] [Thread-11901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:45:04.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:45:04.759 [DEBUG] [Thread-11901] [transport.py] [_log()] userauth is OK
2025-11-26T04:45:04.759 [DEBUG] [Thread-11901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:45:04.759 [DEBUG] [Thread-11901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:45:04.759 [DEBUG] [Thread-11901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:45:04.759 [DEBUG] [Thread-11901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:45:04.778 [INFO] [Thread-11901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:45:04.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:45:04.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:45:05.663 [DEBUG] [Thread-11901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:45:05.663 [DEBUG] [Thread-11901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:45:05.711 [DEBUG] [Thread-11901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:45:05.711 [DEBUG] [Thread-11901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:45:05.721 [DEBUG] [Thread-11901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:45:05.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:45:05.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:45:05.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:45:05.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:45:05.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:45:05.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:45:05.759 [DEBUG] [Thread-11901] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:45:05.909 [DEBUG] [Thread-11903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:45:11.203 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:45:11.205 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:45:20.955 [DEBUG] [Thread-11904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:45:30.710 [DEBUG] [Thread-11905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:45:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:45:35.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:45:35.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:45:35.987 [DEBUG] [Thread-11906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:45:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 45, 21), 27.27, 14.67, 0.0, 11.33, 18.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:45:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:45:21
2025-11-26T04:45:36.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:45:36.706 [DEBUG] [Thread-11907] [transport.py] [_log()] starting thread (client mode): 0x737c6740
2025-11-26T04:45:36.706 [DEBUG] [Thread-11907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:45:36.727 [DEBUG] [Thread-11907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:45:36.727 [INFO] [Thread-11907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] client lang: <none>
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] server lang: <none>
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] kex follows: False
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:45:36.728 [DEBUG] [Thread-11907] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:45:36.729 [DEBUG] [Thread-11907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:45:36.729 [DEBUG] [Thread-11907] [transport.py] [_log()] Compression: none
2025-11-26T04:45:36.729 [DEBUG] [Thread-11907] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:45:36.747 [DEBUG] [Thread-11907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:45:36.747 [DEBUG] [Thread-11907] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:45:36.748 [DEBUG] [Thread-11907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:45:36.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:45:36.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:45:36.750 [DEBUG] [Thread-11907] [transport.py] [_log()] userauth is OK
2025-11-26T04:45:36.750 [DEBUG] [Thread-11907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:45:36.750 [DEBUG] [Thread-11907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:45:36.750 [DEBUG] [Thread-11907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:45:36.750 [DEBUG] [Thread-11907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:45:36.768 [INFO] [Thread-11907] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:45:36.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:45:37.408 [DEBUG] [Thread-11907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:45:37.408 [DEBUG] [Thread-11907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:45:37.409 [DEBUG] [Thread-11907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:45:37.449 [DEBUG] [Thread-11907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:45:37.449 [DEBUG] [Thread-11907] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:45:37.453 [DEBUG] [Thread-11907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:45:37.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:45:37.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:45:37.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:45:37.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:45:37.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:45:37.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:45:37.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:45:37.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:45:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:45:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.114678 -999.00  +18.20  10.36     20   -5.10 1 1 1 1 1    44    0 22.22 -53.60 ----- 9.5 10.4 51.2 11.8 18.2 -25.2 18.2 -24.6 18.0 -23.4 18.1 -24.4
2025-11-26T04:45:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:45:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:45:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.114678
2025-11-26T04:45:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:45:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:45:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:45:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:45:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:45:37.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:45:21', tmtdew=27.27, humidity=14.67, cloud=0.0, wind=11.33, temperature=18.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:45:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:45:37.480 [DEBUG] [Thread-11907] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:45:37.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:45:37.575 [DEBUG] [Thread-11910] [transport.py] [_log()] starting thread (client mode): 0x737c4af0
2025-11-26T04:45:37.575 [DEBUG] [Thread-11910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:45:37.589 [DEBUG] [Thread-11910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:45:37.589 [INFO] [Thread-11910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] client lang: <none>
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] server lang: <none>
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] kex follows: False
2025-11-26T04:45:37.597 [DEBUG] [Thread-11910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:45:37.598 [DEBUG] [Thread-11910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:45:37.598 [DEBUG] [Thread-11910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:45:37.598 [DEBUG] [Thread-11910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:45:37.598 [DEBUG] [Thread-11910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:45:37.598 [DEBUG] [Thread-11910] [transport.py] [_log()] Compression: none
2025-11-26T04:45:37.598 [DEBUG] [Thread-11910] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:45:37.659 [DEBUG] [Thread-11910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:45:37.660 [DEBUG] [Thread-11910] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:45:37.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:45:37.661 [DEBUG] [Thread-11910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:45:37.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:45:37.716 [DEBUG] [Thread-11910] [transport.py] [_log()] userauth is OK
2025-11-26T04:45:37.716 [DEBUG] [Thread-11910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:45:37.716 [DEBUG] [Thread-11910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:45:37.717 [DEBUG] [Thread-11910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:45:37.717 [DEBUG] [Thread-11910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:45:37.736 [INFO] [Thread-11910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:45:37.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:45:37.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:45:38.536 [DEBUG] [Thread-11910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:45:38.536 [DEBUG] [Thread-11910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:45:38.584 [DEBUG] [Thread-11910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:45:38.584 [DEBUG] [Thread-11910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:45:38.593 [DEBUG] [Thread-11910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:45:38.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:45:38.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:45:38.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:45:38.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:45:38.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:45:38.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:45:38.630 [DEBUG] [Thread-11910] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:45:51.021 [DEBUG] [Thread-11912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:46:06.069 [DEBUG] [Thread-11913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:46:08.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:46:08.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:46: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
2025-11-26T04:46:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 45, 53), 27.18, 14.72, 0.0, 9.58, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:46:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:45:53
2025-11-26T04:46:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:46:09.553 [DEBUG] [Thread-11914] [transport.py] [_log()] starting thread (client mode): 0x737c7100
2025-11-26T04:46:09.553 [DEBUG] [Thread-11914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:46:09.569 [DEBUG] [Thread-11914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:46:09.569 [INFO] [Thread-11914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] client lang: <none>
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] server lang: <none>
2025-11-26T04:46:09.573 [DEBUG] [Thread-11914] [transport.py] [_log()] kex follows: False
2025-11-26T04:46:09.574 [DEBUG] [Thread-11914] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:46:09.574 [DEBUG] [Thread-11914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:46:09.574 [DEBUG] [Thread-11914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:46:09.574 [DEBUG] [Thread-11914] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:46:09.574 [DEBUG] [Thread-11914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:46:09.574 [DEBUG] [Thread-11914] [transport.py] [_log()] Compression: none
2025-11-26T04:46:09.574 [DEBUG] [Thread-11914] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:46:09.593 [DEBUG] [Thread-11914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:46:09.593 [DEBUG] [Thread-11914] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:46:09.594 [DEBUG] [Thread-11914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:46:09.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:46:09.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:46:09.596 [DEBUG] [Thread-11914] [transport.py] [_log()] userauth is OK
2025-11-26T04:46:09.596 [DEBUG] [Thread-11914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:46:09.596 [DEBUG] [Thread-11914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:46:09.596 [DEBUG] [Thread-11914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:46:09.596 [DEBUG] [Thread-11914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:46:09.622 [INFO] [Thread-11914] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:46:09.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:46:10.281 [DEBUG] [Thread-11914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:46:10.282 [DEBUG] [Thread-11914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:46:10.282 [DEBUG] [Thread-11914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:46:10.323 [DEBUG] [Thread-11914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:46:10.323 [DEBUG] [Thread-11914] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:46:10.326 [DEBUG] [Thread-11914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:46:10.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:46:10.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:46:10.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:46:10.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:46:10.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:46:10.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:46:10.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:46:10.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:46:10.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:46:10.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.115025 -999.00  +18.20   9.09     19   -5.10 1 1 1 1 1    48    0 21.97 -58.02 ----- 9.7 9.1 57.6 11.4 18.2 -25.2 18.2 -24.5 18.0 -23.3 18.2 -24.3
2025-11-26T04:46:10.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:46:10.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:46:10.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.115025
2025-11-26T04:46:10.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:46:10.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:46:10.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:46:10.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:46:10.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:46:10.351 [DEBUG] [Thread-11914] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:46:10.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:45:53', tmtdew=27.18, humidity=14.72, cloud=0.0, wind=9.58, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:45:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:46:10.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:46:10.448 [DEBUG] [Thread-11917] [transport.py] [_log()] starting thread (client mode): 0x70d1eef0
2025-11-26T04:46:10.448 [DEBUG] [Thread-11917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:46:10.463 [DEBUG] [Thread-11917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:46:10.463 [INFO] [Thread-11917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:46:10.470 [DEBUG] [Thread-11917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] client lang: <none>
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] server lang: <none>
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] kex follows: False
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:46:10.471 [DEBUG] [Thread-11917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:46:10.472 [DEBUG] [Thread-11917] [transport.py] [_log()] Compression: none
2025-11-26T04:46:10.472 [DEBUG] [Thread-11917] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:46:10.532 [DEBUG] [Thread-11917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:46:10.533 [DEBUG] [Thread-11917] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:46:10.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:46:10.534 [DEBUG] [Thread-11917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:46:10.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:46:10.591 [DEBUG] [Thread-11917] [transport.py] [_log()] userauth is OK
2025-11-26T04:46:10.592 [DEBUG] [Thread-11917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:46:10.592 [DEBUG] [Thread-11917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:46:10.592 [DEBUG] [Thread-11917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:46:10.592 [DEBUG] [Thread-11917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:46:10.610 [INFO] [Thread-11917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:46:10.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:46:10.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:46:11.408 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:46:11.410 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:46:11.473 [DEBUG] [Thread-11917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:46:11.474 [DEBUG] [Thread-11917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:46:11.521 [DEBUG] [Thread-11917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:46:11.521 [DEBUG] [Thread-11917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:46:11.530 [DEBUG] [Thread-11917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:46:11.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:46:11.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:46:11.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:46:11.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:46:11.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:46:11.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:46:11.564 [DEBUG] [Thread-11917] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:46:21.107 [DEBUG] [Thread-11919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:46:30.786 [DEBUG] [Thread-11920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:46:36.154 [DEBUG] [Thread-11921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:46:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:46:41.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:46:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:46:42.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 46, 25), 27.15, 14.74, 0.0, 9.63, 17.99, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:46:42.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:46:25
2025-11-26T04:46:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:46:42.535 [DEBUG] [Thread-11922] [transport.py] [_log()] starting thread (client mode): 0x70d7fdf0
2025-11-26T04:46:42.535 [DEBUG] [Thread-11922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:46:42.555 [DEBUG] [Thread-11922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:46:42.556 [INFO] [Thread-11922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] client lang: <none>
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] server lang: <none>
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] kex follows: False
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:46:42.559 [DEBUG] [Thread-11922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:46:42.560 [DEBUG] [Thread-11922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:46:42.560 [DEBUG] [Thread-11922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:46:42.560 [DEBUG] [Thread-11922] [transport.py] [_log()] Compression: none
2025-11-26T04:46:42.560 [DEBUG] [Thread-11922] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:46:42.577 [DEBUG] [Thread-11922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:46:42.578 [DEBUG] [Thread-11922] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:46:42.578 [DEBUG] [Thread-11922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:46:42.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:46:42.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:46:42.580 [DEBUG] [Thread-11922] [transport.py] [_log()] userauth is OK
2025-11-26T04:46:42.581 [DEBUG] [Thread-11922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:46:42.581 [DEBUG] [Thread-11922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:46:42.581 [DEBUG] [Thread-11922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:46:42.581 [DEBUG] [Thread-11922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:46:42.599 [INFO] [Thread-11922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:46:42.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:46:43.196 [DEBUG] [Thread-11922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:46:43.197 [DEBUG] [Thread-11922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:46:43.197 [DEBUG] [Thread-11922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:46:43.238 [DEBUG] [Thread-11922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:46:43.238 [DEBUG] [Thread-11922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:46:43.241 [DEBUG] [Thread-11922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:46:43.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:46:43.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:46:43.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:46:43.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:46:43.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:46:43.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:46:43.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:46:43.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:46:43.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:46:43.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.115373 -999.00  +18.20  10.06     19   -5.10 1 1 1 1 1    52    0 21.96 -58.49 ----- 8.2 10.1 58.0 11.5 18.2 -25.3 18.2 -24.7 17.9 -23.5 18.1 -24.5
2025-11-26T04:46:43.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:46:43.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:46:43.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.115373
2025-11-26T04:46:43.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:46:43.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:46:43.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:46:43.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:46:43.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:46:43.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:46:25', tmtdew=27.15, humidity=14.74, cloud=0.0, wind=9.63, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:46:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:46:43.270 [DEBUG] [Thread-11922] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:46:43.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:46:43.365 [DEBUG] [Thread-11925] [transport.py] [_log()] starting thread (client mode): 0x70d7e9e0
2025-11-26T04:46:43.365 [DEBUG] [Thread-11925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:46:43.384 [DEBUG] [Thread-11925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:46:43.384 [INFO] [Thread-11925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:46:43.391 [DEBUG] [Thread-11925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] client lang: <none>
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] server lang: <none>
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] kex follows: False
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:46:43.392 [DEBUG] [Thread-11925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:46:43.393 [DEBUG] [Thread-11925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:46:43.393 [DEBUG] [Thread-11925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:46:43.393 [DEBUG] [Thread-11925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:46:43.393 [DEBUG] [Thread-11925] [transport.py] [_log()] Compression: none
2025-11-26T04:46:43.393 [DEBUG] [Thread-11925] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:46:43.452 [DEBUG] [Thread-11925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:46:43.452 [DEBUG] [Thread-11925] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:46:43.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:46:43.453 [DEBUG] [Thread-11925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:46:43.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:46:43.508 [DEBUG] [Thread-11925] [transport.py] [_log()] userauth is OK
2025-11-26T04:46:43.508 [DEBUG] [Thread-11925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:46:43.509 [DEBUG] [Thread-11925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:46:43.509 [DEBUG] [Thread-11925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:46:43.509 [DEBUG] [Thread-11925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:46:43.531 [INFO] [Thread-11925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:46:43.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:46:43.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:46:44.362 [DEBUG] [Thread-11925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:46:44.363 [DEBUG] [Thread-11925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:46:44.410 [DEBUG] [Thread-11925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:46:44.411 [DEBUG] [Thread-11925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:46:44.419 [DEBUG] [Thread-11925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:46:44.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:46:44.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:46:44.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:46:44.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:46:44.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:46:44.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:46:44.455 [DEBUG] [Thread-11925] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:46:51.187 [DEBUG] [Thread-11927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:47:06.249 [DEBUG] [Thread-11928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:47:11.613 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:47:11.614 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:47:14.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:47:14.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:47:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:47:15.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 46, 57), 27.28, 14.71, 0.0, 11.08, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:47:15.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:46:57
2025-11-26T04:47:15.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:47:15.400 [DEBUG] [Thread-11929] [transport.py] [_log()] starting thread (client mode): 0x70d28f40
2025-11-26T04:47:15.400 [DEBUG] [Thread-11929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:47:15.420 [DEBUG] [Thread-11929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:47:15.420 [INFO] [Thread-11929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:47:15.423 [DEBUG] [Thread-11929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] client lang: <none>
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] server lang: <none>
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] kex follows: False
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] Compression: none
2025-11-26T04:47:15.424 [DEBUG] [Thread-11929] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:47:15.440 [DEBUG] [Thread-11929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:47:15.440 [DEBUG] [Thread-11929] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:47:15.441 [DEBUG] [Thread-11929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:47:15.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:47:15.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:47:15.443 [DEBUG] [Thread-11929] [transport.py] [_log()] userauth is OK
2025-11-26T04:47:15.443 [DEBUG] [Thread-11929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:47:15.443 [DEBUG] [Thread-11929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:47:15.443 [DEBUG] [Thread-11929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:47:15.444 [DEBUG] [Thread-11929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:47:15.467 [INFO] [Thread-11929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:47:15.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:47:16.140 [DEBUG] [Thread-11929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:47:16.140 [DEBUG] [Thread-11929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:47:16.140 [DEBUG] [Thread-11929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:47:16.181 [DEBUG] [Thread-11929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:47:16.181 [DEBUG] [Thread-11929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:47:16.184 [DEBUG] [Thread-11929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:47:16.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:47:16.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:47:16.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:47:16.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:47:16.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:47:16.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:47:16.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:47:16.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:47:16.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:47:16.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.115720 -999.00  +18.20   9.53     19   -5.10 1 1 1 1 1    57    0 22.05 -57.82 ----- 8.8 9.5 60.8 11.7 18.2 -25.1 18.2 -24.7 17.9 -23.4 18.1 -24.5
2025-11-26T04:47:16.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:47:16.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:47:16.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.115720
2025-11-26T04:47:16.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:47:16.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:47:16.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:47:16.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:47:16.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:47:16.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:46:57', tmtdew=27.28, humidity=14.71, cloud=0.0, wind=11.08, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:46:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:47:16.212 [DEBUG] [Thread-11929] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:47:16.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:47:16.307 [DEBUG] [Thread-11932] [transport.py] [_log()] starting thread (client mode): 0x70d28af0
2025-11-26T04:47:16.307 [DEBUG] [Thread-11932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:47:16.322 [DEBUG] [Thread-11932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:47:16.322 [INFO] [Thread-11932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] client lang: <none>
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] server lang: <none>
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] kex follows: False
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:47:16.330 [DEBUG] [Thread-11932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:47:16.331 [DEBUG] [Thread-11932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:47:16.331 [DEBUG] [Thread-11932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:47:16.331 [DEBUG] [Thread-11932] [transport.py] [_log()] Compression: none
2025-11-26T04:47:16.331 [DEBUG] [Thread-11932] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:47:16.389 [DEBUG] [Thread-11932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:47:16.389 [DEBUG] [Thread-11932] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:47:16.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:47:16.391 [DEBUG] [Thread-11932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:47:16.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:47:16.444 [DEBUG] [Thread-11932] [transport.py] [_log()] userauth is OK
2025-11-26T04:47:16.444 [DEBUG] [Thread-11932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:47:16.444 [DEBUG] [Thread-11932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:47:16.444 [DEBUG] [Thread-11932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:47:16.445 [DEBUG] [Thread-11932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:47:16.468 [INFO] [Thread-11932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:47:16.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:47:16.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:47:17.296 [DEBUG] [Thread-11932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:47:17.296 [DEBUG] [Thread-11932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:47:17.343 [DEBUG] [Thread-11932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:47:17.344 [DEBUG] [Thread-11932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:47:17.353 [DEBUG] [Thread-11932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:47:17.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:47:17.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:47:17.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
2025-11-26T04:47:17.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:47:17.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:47:17.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:47:17.390 [DEBUG] [Thread-11932] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:47:21.281 [DEBUG] [Thread-11934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:47:30.858 [DEBUG] [Thread-11935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:47:36.336 [DEBUG] [Thread-11936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:47:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:47:47.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:47:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:47:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 47, 29), 27.24, 14.76, 0.0, 11.52, 18.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:47:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:47:29
2025-11-26T04:47:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:47:48.392 [DEBUG] [Thread-11937] [transport.py] [_log()] starting thread (client mode): 0x737c5120
2025-11-26T04:47:48.392 [DEBUG] [Thread-11937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:47:48.413 [DEBUG] [Thread-11937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:47:48.413 [INFO] [Thread-11937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:47:48.416 [DEBUG] [Thread-11937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:47:48.416 [DEBUG] [Thread-11937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:47:48.416 [DEBUG] [Thread-11937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:47:48.416 [DEBUG] [Thread-11937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:47:48.416 [DEBUG] [Thread-11937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] client lang: <none>
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] server lang: <none>
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] kex follows: False
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] Compression: none
2025-11-26T04:47:48.417 [DEBUG] [Thread-11937] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:47:48.431 [DEBUG] [Thread-11937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:47:48.432 [DEBUG] [Thread-11937] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:47:48.432 [DEBUG] [Thread-11937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:47:48.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:47:48.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:47:48.433 [DEBUG] [Thread-11937] [transport.py] [_log()] userauth is OK
2025-11-26T04:47:48.433 [DEBUG] [Thread-11937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:47:48.433 [DEBUG] [Thread-11937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:47:48.433 [DEBUG] [Thread-11937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:47:48.433 [DEBUG] [Thread-11937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:47:48.444 [INFO] [Thread-11937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:47:48.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:47:49.109 [DEBUG] [Thread-11937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:47:49.109 [DEBUG] [Thread-11937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:47:49.109 [DEBUG] [Thread-11937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:47:49.150 [DEBUG] [Thread-11937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:47:49.150 [DEBUG] [Thread-11937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:47:49.152 [DEBUG] [Thread-11937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:47:49.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:47:49.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:47:49.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:47:49.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:47:49.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:47:49.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:47:49.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:47:49.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:47:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:47:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.116414 -999.00  +18.10   8.88     19   -5.20 1 1 1 1 1    68    0 22.11 -60.66 ----- 8.5 8.9 58.0 10.3 18.2 -25.3 18.2 -24.6 17.9 -23.4 18.1 -24.2
2025-11-26T04:47:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:47:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:47:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.116414
2025-11-26T04:47:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:47:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:47:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:47:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:47:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:47:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:47:29', tmtdew=27.24, humidity=14.76, cloud=0.0, wind=11.52, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:47:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:47:49.171 [DEBUG] [Thread-11937] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:47:49.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:47:49.256 [DEBUG] [Thread-11940] [transport.py] [_log()] starting thread (client mode): 0x70d7ead0
2025-11-26T04:47:49.257 [DEBUG] [Thread-11940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:47:49.271 [DEBUG] [Thread-11940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:47:49.271 [INFO] [Thread-11940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] client lang: <none>
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] server lang: <none>
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] kex follows: False
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] Compression: none
2025-11-26T04:47:49.279 [DEBUG] [Thread-11940] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:47:49.339 [DEBUG] [Thread-11940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:47:49.339 [DEBUG] [Thread-11940] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:47:49.339 [DEBUG] [Thread-11940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:47:49.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:47:49.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:47:49.400 [DEBUG] [Thread-11940] [transport.py] [_log()] userauth is OK
2025-11-26T04:47:49.400 [DEBUG] [Thread-11940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:47:49.400 [DEBUG] [Thread-11940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:47:49.400 [DEBUG] [Thread-11940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:47:49.400 [DEBUG] [Thread-11940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:47:49.415 [INFO] [Thread-11940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:47:49.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:47:49.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:47:50.232 [DEBUG] [Thread-11940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:47:50.232 [DEBUG] [Thread-11940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:47:50.280 [DEBUG] [Thread-11940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:47:50.280 [DEBUG] [Thread-11940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:47:50.291 [DEBUG] [Thread-11940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:47:50.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:47:50.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:47:50.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:47:50.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:47:50.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:47:50.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:47:50.324 [DEBUG] [Thread-11940] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:47:51.371 [DEBUG] [Thread-11942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:48:06.430 [DEBUG] [Thread-11943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:48:11.818 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:48:11.819 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:48:20.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:48:20.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:48:20.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:48:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 48, 1), 27.23, 14.77, 0.0, 11.49, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:48:21.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:48:01
2025-11-26T04:48:21.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:48:21.292 [DEBUG] [Thread-11944] [transport.py] [_log()] starting thread (client mode): 0x70d2b730
2025-11-26T04:48:21.292 [DEBUG] [Thread-11944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:48:21.311 [DEBUG] [Thread-11944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:48:21.311 [INFO] [Thread-11944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:48:21.314 [DEBUG] [Thread-11944] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] client lang: <none>
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] server lang: <none>
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] kex follows: False
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] Compression: none
2025-11-26T04:48:21.315 [DEBUG] [Thread-11944] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:48:21.333 [DEBUG] [Thread-11944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:48:21.333 [DEBUG] [Thread-11944] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:48:21.334 [DEBUG] [Thread-11944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:48:21.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:48:21.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:48:21.336 [DEBUG] [Thread-11944] [transport.py] [_log()] userauth is OK
2025-11-26T04:48:21.336 [DEBUG] [Thread-11944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:48:21.336 [DEBUG] [Thread-11944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:48:21.336 [DEBUG] [Thread-11944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:48:21.336 [DEBUG] [Thread-11944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:48:21.354 [INFO] [Thread-11944] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:48:21.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:48:21.465 [DEBUG] [Thread-11946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:48:21.972 [DEBUG] [Thread-11944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:48:21.972 [DEBUG] [Thread-11944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:48:21.973 [DEBUG] [Thread-11944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:48:22.013 [DEBUG] [Thread-11944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:48:22.013 [DEBUG] [Thread-11944] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:48:22.016 [DEBUG] [Thread-11944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:48:22.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:48:22.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:48:22.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:48:22.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:48:22.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:48:22.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:48:22.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:48:22.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:48:22.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:48:22.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.116761 -999.00  +18.00   8.67     20   -5.20 1 1 1 1 1    73    0 22.04 -55.15 ----- 9.2 8.7 56.0 10.1 18.1 -25.3 18.1 -24.7 17.9 -23.4 18.1 -24.5
2025-11-26T04:48:22.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:48:22.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:48:22.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.116761
2025-11-26T04:48:22.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:48:22.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:48:22.041 [DEBUG] [Thread-11944] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:48:22.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:48:22.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:48:22.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:48:22.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:48:01', tmtdew=27.23, humidity=14.77, cloud=0.0, wind=11.49, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:48:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:48:22.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:48:22.136 [DEBUG] [Thread-11948] [transport.py] [_log()] starting thread (client mode): 0x70d7d390
2025-11-26T04:48:22.136 [DEBUG] [Thread-11948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:48:22.151 [DEBUG] [Thread-11948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:48:22.151 [INFO] [Thread-11948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:48:22.159 [DEBUG] [Thread-11948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:48:22.159 [DEBUG] [Thread-11948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:48:22.159 [DEBUG] [Thread-11948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:48:22.160 [DEBUG] [Thread-11948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:48:22.160 [DEBUG] [Thread-11948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:48:22.160 [DEBUG] [Thread-11948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:48:22.160 [DEBUG] [Thread-11948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:48:22.160 [DEBUG] [Thread-11948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:48:22.160 [DEBUG] [Thread-11948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:48:22.160 [DEBUG] [Thread-11948] [transport.py] [_log()] client lang: <none>
2025-11-26T04:48:22.160 [DEBUG] [Thread-11948] [transport.py] [_log()] server lang: <none>
2025-11-26T04:48:22.161 [DEBUG] [Thread-11948] [transport.py] [_log()] kex follows: False
2025-11-26T04:48:22.161 [DEBUG] [Thread-11948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:48:22.161 [DEBUG] [Thread-11948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:48:22.161 [DEBUG] [Thread-11948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:48:22.161 [DEBUG] [Thread-11948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:48:22.161 [DEBUG] [Thread-11948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:48:22.161 [DEBUG] [Thread-11948] [transport.py] [_log()] Compression: none
2025-11-26T04:48:22.161 [DEBUG] [Thread-11948] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:48:22.218 [DEBUG] [Thread-11948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:48:22.219 [DEBUG] [Thread-11948] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:48:22.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:48:22.220 [DEBUG] [Thread-11948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:48:22.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:48:22.278 [DEBUG] [Thread-11948] [transport.py] [_log()] userauth is OK
2025-11-26T04:48:22.278 [DEBUG] [Thread-11948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:48:22.279 [DEBUG] [Thread-11948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:48:22.279 [DEBUG] [Thread-11948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:48:22.279 [DEBUG] [Thread-11948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:48:22.297 [INFO] [Thread-11948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:48:22.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:48:22.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:48:23.124 [DEBUG] [Thread-11948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:48:23.124 [DEBUG] [Thread-11948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:48:23.172 [DEBUG] [Thread-11948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:48:23.172 [DEBUG] [Thread-11948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:48:23.180 [DEBUG] [Thread-11948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:48:23.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:48:23.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:48:23.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:48:23.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:48:23.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:48:23.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:48:23.212 [DEBUG] [Thread-11948] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:48:30.940 [DEBUG] [Thread-11950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:48:36.495 [DEBUG] [Thread-11951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:48:51.548 [DEBUG] [Thread-11952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:48:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:48:53.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:48: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
2025-11-26T04:48:53.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 48, 33), 26.49, 15.48, 0.0, 12.42, 17.34, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:48:53.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:48:33
2025-11-26T04:48:54.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:48:54.173 [DEBUG] [Thread-11953] [transport.py] [_log()] starting thread (client mode): 0x70d1fe20
2025-11-26T04:48:54.173 [DEBUG] [Thread-11953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:48:54.193 [DEBUG] [Thread-11953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:48:54.194 [INFO] [Thread-11953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:48:54.197 [DEBUG] [Thread-11953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:48:54.197 [DEBUG] [Thread-11953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:48:54.197 [DEBUG] [Thread-11953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:48:54.197 [DEBUG] [Thread-11953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:48:54.197 [DEBUG] [Thread-11953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:48:54.197 [DEBUG] [Thread-11953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:48:54.197 [DEBUG] [Thread-11953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:48:54.197 [DEBUG] [Thread-11953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:48:54.197 [DEBUG] [Thread-11953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] client lang: <none>
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] server lang: <none>
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] kex follows: False
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] Compression: none
2025-11-26T04:48:54.198 [DEBUG] [Thread-11953] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:48:54.217 [DEBUG] [Thread-11953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:48:54.218 [DEBUG] [Thread-11953] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:48:54.218 [DEBUG] [Thread-11953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:48:54.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:48:54.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:48:54.221 [DEBUG] [Thread-11953] [transport.py] [_log()] userauth is OK
2025-11-26T04:48:54.221 [DEBUG] [Thread-11953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:48:54.221 [DEBUG] [Thread-11953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:48:54.221 [DEBUG] [Thread-11953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:48:54.221 [DEBUG] [Thread-11953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:48:54.245 [INFO] [Thread-11953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:48:54.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:48:54.896 [DEBUG] [Thread-11953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:48:54.896 [DEBUG] [Thread-11953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:48:54.897 [DEBUG] [Thread-11953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:48:54.937 [DEBUG] [Thread-11953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:48:54.937 [DEBUG] [Thread-11953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:48:54.941 [DEBUG] [Thread-11953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:48:54.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:48:54.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:48:54.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:48:54.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:48:54.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:48:54.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:48:54.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:48:54.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:48:54.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:48:54.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.117109 -999.00  +18.00   8.73     20   -5.20 1 1 1 1 1    80    0 22.04 -59.59 ----- 8.6 8.7 60.6 11.3 18.2 -25.3 18.1 -24.3 17.8 -23.0 18.1 -24.2
2025-11-26T04:48:54.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:48:54.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:48:54.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.117109
2025-11-26T04:48:54.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:48:54.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:48:54.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:48:54.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:48:54.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:48:54.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:48:33', tmtdew=26.49, humidity=15.48, cloud=0.0, wind=12.42, temperature=17.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:48:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:48:54.968 [DEBUG] [Thread-11953] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:48:55.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:48:55.065 [DEBUG] [Thread-11956] [transport.py] [_log()] starting thread (client mode): 0x70de76d0
2025-11-26T04:48:55.065 [DEBUG] [Thread-11956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:48:55.082 [DEBUG] [Thread-11956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:48:55.083 [INFO] [Thread-11956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:48:55.093 [DEBUG] [Thread-11956] [transport.py] [_log()] client lang: <none>
2025-11-26T04:48:55.094 [DEBUG] [Thread-11956] [transport.py] [_log()] server lang: <none>
2025-11-26T04:48:55.094 [DEBUG] [Thread-11956] [transport.py] [_log()] kex follows: False
2025-11-26T04:48:55.094 [DEBUG] [Thread-11956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:48:55.094 [DEBUG] [Thread-11956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:48:55.094 [DEBUG] [Thread-11956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:48:55.094 [DEBUG] [Thread-11956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:48:55.094 [DEBUG] [Thread-11956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:48:55.094 [DEBUG] [Thread-11956] [transport.py] [_log()] Compression: none
2025-11-26T04:48:55.094 [DEBUG] [Thread-11956] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:48:55.150 [DEBUG] [Thread-11956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:48:55.151 [DEBUG] [Thread-11956] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:48:55.151 [DEBUG] [Thread-11956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:48:55.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:48:55.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:48:55.208 [DEBUG] [Thread-11956] [transport.py] [_log()] userauth is OK
2025-11-26T04:48:55.209 [DEBUG] [Thread-11956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:48:55.209 [DEBUG] [Thread-11956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:48:55.209 [DEBUG] [Thread-11956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:48:55.209 [DEBUG] [Thread-11956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:48:55.228 [INFO] [Thread-11956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:48:55.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:48:55.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:48:56.042 [DEBUG] [Thread-11956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:48:56.042 [DEBUG] [Thread-11956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:48:56.092 [DEBUG] [Thread-11956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:48:56.092 [DEBUG] [Thread-11956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:48:56.104 [DEBUG] [Thread-11956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:48:56.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:48:56.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:48:56.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:48:56.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:48:56.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:48:56.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:48:56.147 [DEBUG] [Thread-11956] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:49:06.581 [DEBUG] [Thread-11958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:49:12.026 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:49:12.027 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:49:21.624 [DEBUG] [Thread-11959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:49:26.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:49:26.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:49: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
2025-11-26T04:49:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 49, 5), 27.24, 14.8, 0.0, 10.32, 18.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:49:26.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:49:05
2025-11-26T04:49:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:49:27.077 [DEBUG] [Thread-11960] [transport.py] [_log()] starting thread (client mode): 0x70d2a050
2025-11-26T04:49:27.078 [DEBUG] [Thread-11960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:49:27.098 [DEBUG] [Thread-11960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:49:27.098 [INFO] [Thread-11960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] client lang: <none>
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] server lang: <none>
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] kex follows: False
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] Compression: none
2025-11-26T04:49:27.101 [DEBUG] [Thread-11960] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:49:27.119 [DEBUG] [Thread-11960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:49:27.119 [DEBUG] [Thread-11960] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:49:27.120 [DEBUG] [Thread-11960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:49:27.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:49:27.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:49:27.122 [DEBUG] [Thread-11960] [transport.py] [_log()] userauth is OK
2025-11-26T04:49:27.122 [DEBUG] [Thread-11960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:49:27.122 [DEBUG] [Thread-11960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:49:27.122 [DEBUG] [Thread-11960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:49:27.122 [DEBUG] [Thread-11960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:49:27.140 [INFO] [Thread-11960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:49:27.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:49:27.776 [DEBUG] [Thread-11960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:49:27.776 [DEBUG] [Thread-11960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:49:27.777 [DEBUG] [Thread-11960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:49:27.817 [DEBUG] [Thread-11960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:49:27.817 [DEBUG] [Thread-11960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:49:27.821 [DEBUG] [Thread-11960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:49:27.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:49:27.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:49:27.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:49:27.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:49:27.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:49:27.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:49:27.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:49:27.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:49:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:49:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.117456 -999.00  +18.00   8.54     20   -5.20 1 1 1 1 1    87    0 21.79 -58.40 ----- 8.4 8.5 55.8 10.0 18.2 -25.3 18.1 -24.7 17.8 -23.5 18.1 -24.3
2025-11-26T04:49:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:49:27.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:49:27.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.117456
2025-11-26T04:49:27.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:49:27.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:49:27.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:49:27.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:49:27.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:49:27.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:49:05', tmtdew=27.24, humidity=14.8, cloud=0.0, wind=10.32, temperature=18.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:49:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:49:27.847 [DEBUG] [Thread-11960] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:49:27.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:49:27.942 [DEBUG] [Thread-11963] [transport.py] [_log()] starting thread (client mode): 0x737c65f0
2025-11-26T04:49:27.942 [DEBUG] [Thread-11963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:49:27.957 [DEBUG] [Thread-11963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:49:27.957 [INFO] [Thread-11963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:49:27.965 [DEBUG] [Thread-11963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:49:27.965 [DEBUG] [Thread-11963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:49:27.965 [DEBUG] [Thread-11963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] client lang: <none>
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] server lang: <none>
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] kex follows: False
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:49:27.966 [DEBUG] [Thread-11963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:49:27.967 [DEBUG] [Thread-11963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:49:27.967 [DEBUG] [Thread-11963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:49:27.967 [DEBUG] [Thread-11963] [transport.py] [_log()] Compression: none
2025-11-26T04:49:27.967 [DEBUG] [Thread-11963] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:49:28.024 [DEBUG] [Thread-11963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:49:28.025 [DEBUG] [Thread-11963] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:49:28.025 [DEBUG] [Thread-11963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:49:28.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:49:28.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:49:28.083 [DEBUG] [Thread-11963] [transport.py] [_log()] userauth is OK
2025-11-26T04:49:28.083 [DEBUG] [Thread-11963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:49:28.083 [DEBUG] [Thread-11963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:49:28.083 [DEBUG] [Thread-11963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:49:28.083 [DEBUG] [Thread-11963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:49:28.108 [INFO] [Thread-11963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:49:28.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:49:28.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:49:28.917 [DEBUG] [Thread-11963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:49:28.918 [DEBUG] [Thread-11963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:49:28.966 [DEBUG] [Thread-11963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:49:28.966 [DEBUG] [Thread-11963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:49:28.977 [DEBUG] [Thread-11963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:49:28.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:49:28.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:49:28.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:49:29.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:49:29.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:49:29.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:49:29.013 [DEBUG] [Thread-11963] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:49:31.020 [DEBUG] [Thread-11965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:49:36.658 [DEBUG] [Thread-11966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:49:51.713 [DEBUG] [Thread-11967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:49:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:49:59.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:49:59.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
2025-11-26T04:49:59.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 49, 37), 27.21, 14.79, 0.0, 12.16, 17.99, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:49:59.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:49:37
2025-11-26T04:49:59.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:49:59.970 [DEBUG] [Thread-11968] [transport.py] [_log()] starting thread (client mode): 0x70d7caf0
2025-11-26T04:49:59.970 [DEBUG] [Thread-11968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:49:59.991 [DEBUG] [Thread-11968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:49:59.992 [INFO] [Thread-11968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] client lang: <none>
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] server lang: <none>
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] kex follows: False
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] Compression: none
2025-11-26T04:49:59.995 [DEBUG] [Thread-11968] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:50:00.017 [DEBUG] [Thread-11968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:50:00.018 [DEBUG] [Thread-11968] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:50:00.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:50:00.019 [DEBUG] [Thread-11968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:50:00.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:50:00.021 [DEBUG] [Thread-11968] [transport.py] [_log()] userauth is OK
2025-11-26T04:50:00.021 [DEBUG] [Thread-11968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:50:00.021 [DEBUG] [Thread-11968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:50:00.021 [DEBUG] [Thread-11968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:50:00.021 [DEBUG] [Thread-11968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:50:00.042 [INFO] [Thread-11968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:50:00.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:50:00.706 [DEBUG] [Thread-11968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:50:00.706 [DEBUG] [Thread-11968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:50:00.707 [DEBUG] [Thread-11968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:50:00.746 [DEBUG] [Thread-11968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:50:00.747 [DEBUG] [Thread-11968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:50:00.750 [DEBUG] [Thread-11968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:50:00.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:50:00.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:50:00.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:50:00.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:50:00.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:50:00.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:50:00.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:50:00.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:50:00.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:50:00.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.117803 -999.00  +17.90   8.57     20   -5.20 1 1 1 1 1    94    0 22.42 -59.42 ----- 7.9 8.6 63.4 9.7 18.1 -25.2 18.1 -24.7 17.8 -23.3 18.1 -24.4
2025-11-26T04:50:00.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:50:00.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:50:00.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.117803
2025-11-26T04:50:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:50:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:50:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:50:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:50:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:50:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:49:37', tmtdew=27.21, humidity=14.79, cloud=0.0, wind=12.16, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:49:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:50:00.777 [DEBUG] [Thread-11968] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:50:00.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:50:00.873 [DEBUG] [Thread-11971] [transport.py] [_log()] starting thread (client mode): 0x70d00fd0
2025-11-26T04:50:00.873 [DEBUG] [Thread-11971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:50:00.888 [DEBUG] [Thread-11971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:50:00.888 [INFO] [Thread-11971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:50:00.896 [DEBUG] [Thread-11971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:50:00.896 [DEBUG] [Thread-11971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:50:00.897 [DEBUG] [Thread-11971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:50:00.897 [DEBUG] [Thread-11971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:50:00.897 [DEBUG] [Thread-11971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:50:00.897 [DEBUG] [Thread-11971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:50:00.897 [DEBUG] [Thread-11971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:50:00.897 [DEBUG] [Thread-11971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:50:00.897 [DEBUG] [Thread-11971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:50:00.897 [DEBUG] [Thread-11971] [transport.py] [_log()] client lang: <none>
2025-11-26T04:50:00.897 [DEBUG] [Thread-11971] [transport.py] [_log()] server lang: <none>
2025-11-26T04:50:00.898 [DEBUG] [Thread-11971] [transport.py] [_log()] kex follows: False
2025-11-26T04:50:00.898 [DEBUG] [Thread-11971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:50:00.898 [DEBUG] [Thread-11971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:50:00.898 [DEBUG] [Thread-11971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:50:00.898 [DEBUG] [Thread-11971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:50:00.898 [DEBUG] [Thread-11971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:50:00.898 [DEBUG] [Thread-11971] [transport.py] [_log()] Compression: none
2025-11-26T04:50:00.898 [DEBUG] [Thread-11971] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:50:00.955 [DEBUG] [Thread-11971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:50:00.956 [DEBUG] [Thread-11971] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:50:00.956 [DEBUG] [Thread-11971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:50:00.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:50:00.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:50:01.011 [DEBUG] [Thread-11971] [transport.py] [_log()] userauth is OK
2025-11-26T04:50:01.011 [DEBUG] [Thread-11971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:50:01.011 [DEBUG] [Thread-11971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:50:01.012 [DEBUG] [Thread-11971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:50:01.012 [DEBUG] [Thread-11971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:50:01.030 [INFO] [Thread-11971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:50:01.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:50:01.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:50:01.865 [DEBUG] [Thread-11971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:50:01.865 [DEBUG] [Thread-11971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:50:01.917 [DEBUG] [Thread-11971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:50:01.917 [DEBUG] [Thread-11971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:50:01.926 [DEBUG] [Thread-11971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:50:01.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:50: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')
2025-11-26T04:50: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
2025-11-26T04:50:01.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:50:01.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:50:01.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:50:01.962 [DEBUG] [Thread-11971] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:50:06.751 [DEBUG] [Thread-11973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:50:12.230 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:50:12.231 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:50:21.801 [DEBUG] [Thread-11974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:50:31.096 [DEBUG] [Thread-11975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:50:31.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:50:31.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:50:31.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:50:32.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 50, 9), 27.2, 14.79, 0.0, 11.96, 17.92, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:50:32.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:50:09
2025-11-26T04:50:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:50:32.925 [DEBUG] [Thread-11976] [transport.py] [_log()] starting thread (client mode): 0x737c5a80
2025-11-26T04:50:32.925 [DEBUG] [Thread-11976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:50:32.939 [DEBUG] [Thread-11976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:50:32.939 [INFO] [Thread-11976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] client lang: <none>
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] server lang: <none>
2025-11-26T04:50:32.941 [DEBUG] [Thread-11976] [transport.py] [_log()] kex follows: False
2025-11-26T04:50:32.942 [DEBUG] [Thread-11976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:50:32.942 [DEBUG] [Thread-11976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:50:32.942 [DEBUG] [Thread-11976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:50:32.942 [DEBUG] [Thread-11976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:50:32.942 [DEBUG] [Thread-11976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:50:32.942 [DEBUG] [Thread-11976] [transport.py] [_log()] Compression: none
2025-11-26T04:50:32.942 [DEBUG] [Thread-11976] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:50:32.954 [DEBUG] [Thread-11976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:50:32.954 [DEBUG] [Thread-11976] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:50:32.955 [DEBUG] [Thread-11976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:50:32.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:50:32.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:50:32.956 [DEBUG] [Thread-11976] [transport.py] [_log()] userauth is OK
2025-11-26T04:50:32.957 [DEBUG] [Thread-11976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:50:32.957 [DEBUG] [Thread-11976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:50:32.957 [DEBUG] [Thread-11976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:50:32.957 [DEBUG] [Thread-11976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:50:32.981 [INFO] [Thread-11976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:50:32.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:50:33.649 [DEBUG] [Thread-11976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:50:33.649 [DEBUG] [Thread-11976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:50:33.650 [DEBUG] [Thread-11976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:50:33.691 [DEBUG] [Thread-11976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:50:33.691 [DEBUG] [Thread-11976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:50:33.695 [DEBUG] [Thread-11976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:50:33.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:50:33.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:50:33.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:50:33.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:50:33.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:50:33.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:50:33.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:50:33.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:50:33.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:50:33.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.118150 -999.00  +17.90   7.85     20   -5.20 1 1 1 1 1   102    0 22.07 -54.72 ----- 8.6 7.8 66.2 9.6 18.1 -25.2 18.1 -24.6 17.8 -23.3 18.1 -24.4
2025-11-26T04:50:33.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:50:33.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:50:33.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.118150
2025-11-26T04:50:33.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:50:33.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:50:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:50:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:50:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:50:33.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:50:09', tmtdew=27.2, humidity=14.79, cloud=0.0, wind=11.96, temperature=17.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:50:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:50:33.720 [DEBUG] [Thread-11976] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:50:33.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:50:33.815 [DEBUG] [Thread-11979] [transport.py] [_log()] starting thread (client mode): 0x70d1f580
2025-11-26T04:50:33.815 [DEBUG] [Thread-11979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:50:33.830 [DEBUG] [Thread-11979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:50:33.830 [INFO] [Thread-11979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:50:33.838 [DEBUG] [Thread-11979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:50:33.838 [DEBUG] [Thread-11979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:50:33.838 [DEBUG] [Thread-11979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:50:33.838 [DEBUG] [Thread-11979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:50:33.839 [DEBUG] [Thread-11979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:50:33.839 [DEBUG] [Thread-11979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:50:33.839 [DEBUG] [Thread-11979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:50:33.839 [DEBUG] [Thread-11979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:50:33.839 [DEBUG] [Thread-11979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:50:33.839 [DEBUG] [Thread-11979] [transport.py] [_log()] client lang: <none>
2025-11-26T04:50:33.839 [DEBUG] [Thread-11979] [transport.py] [_log()] server lang: <none>
2025-11-26T04:50:33.839 [DEBUG] [Thread-11979] [transport.py] [_log()] kex follows: False
2025-11-26T04:50:33.839 [DEBUG] [Thread-11979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:50:33.840 [DEBUG] [Thread-11979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:50:33.840 [DEBUG] [Thread-11979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:50:33.840 [DEBUG] [Thread-11979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:50:33.840 [DEBUG] [Thread-11979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:50:33.841 [DEBUG] [Thread-11979] [transport.py] [_log()] Compression: none
2025-11-26T04:50:33.841 [DEBUG] [Thread-11979] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:50:33.896 [DEBUG] [Thread-11979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:50:33.896 [DEBUG] [Thread-11979] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:50:33.897 [DEBUG] [Thread-11979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:50:33.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:50:33.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:50:33.951 [DEBUG] [Thread-11979] [transport.py] [_log()] userauth is OK
2025-11-26T04:50:33.951 [DEBUG] [Thread-11979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:50:33.952 [DEBUG] [Thread-11979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:50:33.952 [DEBUG] [Thread-11979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:50:33.952 [DEBUG] [Thread-11979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:50:33.972 [INFO] [Thread-11979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:50:33.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:50:33.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:50:34.794 [DEBUG] [Thread-11979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:50:34.794 [DEBUG] [Thread-11979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:50:34.842 [DEBUG] [Thread-11979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:50:34.842 [DEBUG] [Thread-11979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:50:34.851 [DEBUG] [Thread-11979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:50:34.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:50:34.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:50:34.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:50:34.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:50:34.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:50:34.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:50:34.890 [DEBUG] [Thread-11979] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:50:36.839 [DEBUG] [Thread-11981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:50:51.898 [DEBUG] [Thread-11982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:51:04.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:51:04.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:51:04.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:51:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 50, 41), 27.07, 14.87, 0.0, 11.98, 17.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:51:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:50:41
2025-11-26T04:51:05.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:51:05.841 [DEBUG] [Thread-11983] [transport.py] [_log()] starting thread (client mode): 0x70de6ef0
2025-11-26T04:51:05.841 [DEBUG] [Thread-11983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:51:05.860 [DEBUG] [Thread-11983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:51:05.860 [INFO] [Thread-11983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:51:05.863 [DEBUG] [Thread-11983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] client lang: <none>
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] server lang: <none>
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] kex follows: False
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:51:05.864 [DEBUG] [Thread-11983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:51:05.865 [DEBUG] [Thread-11983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:51:05.865 [DEBUG] [Thread-11983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:51:05.865 [DEBUG] [Thread-11983] [transport.py] [_log()] Compression: none
2025-11-26T04:51:05.865 [DEBUG] [Thread-11983] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:51:05.883 [DEBUG] [Thread-11983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:51:05.884 [DEBUG] [Thread-11983] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:51:05.884 [DEBUG] [Thread-11983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:51:05.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:51:05.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:51:05.886 [DEBUG] [Thread-11983] [transport.py] [_log()] userauth is OK
2025-11-26T04:51:05.886 [DEBUG] [Thread-11983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:51:05.886 [DEBUG] [Thread-11983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:51:05.887 [DEBUG] [Thread-11983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:51:05.887 [DEBUG] [Thread-11983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:51:05.905 [INFO] [Thread-11983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:51:05.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:51:06.529 [DEBUG] [Thread-11983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:51:06.530 [DEBUG] [Thread-11983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:51:06.530 [DEBUG] [Thread-11983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:51:06.571 [DEBUG] [Thread-11983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:51:06.571 [DEBUG] [Thread-11983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:51:06.574 [DEBUG] [Thread-11983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:51:06.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:51:06.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:51:06.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:51:06.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:51:06.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:51:06.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:51:06.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:51:06.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:51:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:51:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.118497 -999.00  +17.90   7.84     20   -5.20 1 1 1 1 1   111    0 21.81 -56.51 ----- 8.9 7.8 67.2 9.6 18.1 -25.1 18.0 -24.6 17.8 -23.3 18.0 -24.4
2025-11-26T04:51:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:51:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:51:06.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.118497
2025-11-26T04:51:06.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:51:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:51:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:51:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:51:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:51:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:50:41', tmtdew=27.07, humidity=14.87, cloud=0.0, wind=11.98, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:50:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:51:06.604 [DEBUG] [Thread-11983] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:51:06.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:51:06.703 [DEBUG] [Thread-11986] [transport.py] [_log()] starting thread (client mode): 0x70d03730
2025-11-26T04:51:06.703 [DEBUG] [Thread-11986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:51:06.719 [DEBUG] [Thread-11986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:51:06.719 [INFO] [Thread-11986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:51:06.731 [DEBUG] [Thread-11986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:51:06.731 [DEBUG] [Thread-11986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:51:06.731 [DEBUG] [Thread-11986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:51:06.731 [DEBUG] [Thread-11986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:51:06.731 [DEBUG] [Thread-11986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] client lang: <none>
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] server lang: <none>
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] kex follows: False
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] Compression: none
2025-11-26T04:51:06.732 [DEBUG] [Thread-11986] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:51:06.788 [DEBUG] [Thread-11986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:51:06.788 [DEBUG] [Thread-11986] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:51:06.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:51:06.789 [DEBUG] [Thread-11986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:51:06.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:51:06.855 [DEBUG] [Thread-11986] [transport.py] [_log()] userauth is OK
2025-11-26T04:51:06.855 [DEBUG] [Thread-11986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:51:06.856 [DEBUG] [Thread-11986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:51:06.856 [DEBUG] [Thread-11986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:51:06.856 [DEBUG] [Thread-11986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:51:06.875 [INFO] [Thread-11986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:51:06.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:51:06.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:51:06.930 [DEBUG] [Thread-11988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:51:07.697 [DEBUG] [Thread-11986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:51:07.698 [DEBUG] [Thread-11986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:51:07.749 [DEBUG] [Thread-11986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:51:07.749 [DEBUG] [Thread-11986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:51:07.762 [DEBUG] [Thread-11986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:51:07.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:51:07.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:51:07.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:51:07.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:51:07.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:51:07.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:51:07.806 [DEBUG] [Thread-11986] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:51:12.435 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:51:12.436 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:51:21.984 [DEBUG] [Thread-11989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:51:31.170 [DEBUG] [Thread-11990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:51:37.019 [DEBUG] [Thread-11991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:51:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:51:37.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:51:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:51:38.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 51, 13), 27.1, 14.84, 0.0, 12.07, 17.84, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:51:38.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:51:13
2025-11-26T04:51:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:51:38.778 [DEBUG] [Thread-11992] [transport.py] [_log()] starting thread (client mode): 0x70d7f670
2025-11-26T04:51:38.778 [DEBUG] [Thread-11992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:51:38.794 [DEBUG] [Thread-11992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:51:38.794 [INFO] [Thread-11992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] client lang: <none>
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] server lang: <none>
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] kex follows: False
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] Compression: none
2025-11-26T04:51:38.796 [DEBUG] [Thread-11992] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:51:38.808 [DEBUG] [Thread-11992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:51:38.808 [DEBUG] [Thread-11992] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:51:38.808 [DEBUG] [Thread-11992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:51:38.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:51:38.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:51:38.809 [DEBUG] [Thread-11992] [transport.py] [_log()] userauth is OK
2025-11-26T04:51:38.810 [DEBUG] [Thread-11992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:51:38.810 [DEBUG] [Thread-11992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:51:38.810 [DEBUG] [Thread-11992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:51:38.810 [DEBUG] [Thread-11992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:51:38.824 [INFO] [Thread-11992] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:51:38.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:51:39.391 [DEBUG] [Thread-11992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:51:39.391 [DEBUG] [Thread-11992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:51:39.392 [DEBUG] [Thread-11992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:51:39.432 [DEBUG] [Thread-11992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:51:39.433 [DEBUG] [Thread-11992] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:51:39.437 [DEBUG] [Thread-11992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:51:39.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:51:39.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:51:39.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:51:39.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:51:39.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:51:39.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:51:39.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:51:39.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:51:39.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:51:39.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.118845 -999.00  +17.90   8.68     20   -5.20 1 1 1 1 1   120    0 21.96 -55.75 ----- 9.3 8.7 58.0 12.6 18.1 -25.1 18.1 -24.4 17.8 -23.2 18.0 -24.1
2025-11-26T04:51:39.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:51:39.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:51:39.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.118845
2025-11-26T04:51:39.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:51:39.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:51:39.460 [DEBUG] [Thread-11992] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:51:39.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:51:39.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:51:39.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:51:39.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:51:13', tmtdew=27.1, humidity=14.84, cloud=0.0, wind=12.07, temperature=17.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:51:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:51:39.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:51:39.556 [DEBUG] [Thread-11995] [transport.py] [_log()] starting thread (client mode): 0x70d76d40
2025-11-26T04:51:39.556 [DEBUG] [Thread-11995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:51:39.570 [DEBUG] [Thread-11995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:51:39.571 [INFO] [Thread-11995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:51:39.578 [DEBUG] [Thread-11995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:51:39.578 [DEBUG] [Thread-11995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:51:39.578 [DEBUG] [Thread-11995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:51:39.578 [DEBUG] [Thread-11995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:51:39.578 [DEBUG] [Thread-11995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:51:39.578 [DEBUG] [Thread-11995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:51:39.578 [DEBUG] [Thread-11995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:51:39.578 [DEBUG] [Thread-11995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:51:39.578 [DEBUG] [Thread-11995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] client lang: <none>
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] server lang: <none>
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] kex follows: False
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] Compression: none
2025-11-26T04:51:39.579 [DEBUG] [Thread-11995] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:51:39.635 [DEBUG] [Thread-11995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:51:39.636 [DEBUG] [Thread-11995] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:51:39.636 [DEBUG] [Thread-11995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:51:39.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:51:39.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:51:39.692 [DEBUG] [Thread-11995] [transport.py] [_log()] userauth is OK
2025-11-26T04:51:39.692 [DEBUG] [Thread-11995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:51:39.692 [DEBUG] [Thread-11995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:51:39.692 [DEBUG] [Thread-11995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:51:39.692 [DEBUG] [Thread-11995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:51:39.711 [INFO] [Thread-11995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:51:39.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:51:39.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:51:40.540 [DEBUG] [Thread-11995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:51:40.540 [DEBUG] [Thread-11995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:51:40.590 [DEBUG] [Thread-11995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:51:40.590 [DEBUG] [Thread-11995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:51:40.600 [DEBUG] [Thread-11995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:51:40.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:51:40.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:51:40.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:51:40.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:51:40.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:51:40.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:51:40.635 [DEBUG] [Thread-11995] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:51:52.051 [DEBUG] [Thread-11997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:52:07.105 [DEBUG] [Thread-11998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:52:10.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:52:10.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:52:10.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:52:11.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 51, 45), 27.0, 14.9, 0.0, 12.19, 17.84, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:52:11.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:51:45
2025-11-26T04:52:11.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:52:11.585 [DEBUG] [Thread-11999] [transport.py] [_log()] starting thread (client mode): 0x737c7d00
2025-11-26T04:52:11.586 [DEBUG] [Thread-11999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:52:11.602 [DEBUG] [Thread-11999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:52:11.602 [INFO] [Thread-11999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] client lang: <none>
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] server lang: <none>
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] kex follows: False
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] Compression: none
2025-11-26T04:52:11.604 [DEBUG] [Thread-11999] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:52:11.615 [DEBUG] [Thread-11999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:52:11.615 [DEBUG] [Thread-11999] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:52:11.615 [DEBUG] [Thread-11999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:52:11.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:52:11.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:52:11.617 [DEBUG] [Thread-11999] [transport.py] [_log()] userauth is OK
2025-11-26T04:52:11.617 [DEBUG] [Thread-11999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:52:11.617 [DEBUG] [Thread-11999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:52:11.617 [DEBUG] [Thread-11999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:52:11.617 [DEBUG] [Thread-11999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:52:11.630 [INFO] [Thread-11999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:52:11.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:52:12.227 [DEBUG] [Thread-11999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:52:12.227 [DEBUG] [Thread-11999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:52:12.227 [DEBUG] [Thread-11999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:52:12.268 [DEBUG] [Thread-11999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:52:12.268 [DEBUG] [Thread-11999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:52:12.271 [DEBUG] [Thread-11999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:52:12.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:52:12.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:52:12.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:52:12.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:52:12.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:52:12.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:52:12.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:52:12.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:52:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:52:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.119539 -999.00  +17.90   9.63     20   -5.20 1 1 1 1 1   140    0 22.49 -49.30 ----- 9.0 9.6 58.0 11.9 18.1 -25.1 18.0 -24.4 17.7 -23.2 17.9 -24.2
2025-11-26T04:52:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:52:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:52:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.119539
2025-11-26T04:52:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:52:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:52:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:52:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:52:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:52:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:51:45', tmtdew=27.0, humidity=14.9, cloud=0.0, wind=12.19, temperature=17.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:52:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:52:12.288 [DEBUG] [Thread-11999] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:52:12.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:52:12.372 [DEBUG] [Thread-12002] [transport.py] [_log()] starting thread (client mode): 0x737c5a80
2025-11-26T04:52:12.372 [DEBUG] [Thread-12002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:52:12.387 [DEBUG] [Thread-12002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:52:12.387 [INFO] [Thread-12002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:52:12.395 [DEBUG] [Thread-12002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:52:12.395 [DEBUG] [Thread-12002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:52:12.395 [DEBUG] [Thread-12002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:52:12.395 [DEBUG] [Thread-12002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:52:12.395 [DEBUG] [Thread-12002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:52:12.395 [DEBUG] [Thread-12002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:52:12.395 [DEBUG] [Thread-12002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:52:12.395 [DEBUG] [Thread-12002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:52:12.396 [DEBUG] [Thread-12002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:52:12.396 [DEBUG] [Thread-12002] [transport.py] [_log()] client lang: <none>
2025-11-26T04:52:12.396 [DEBUG] [Thread-12002] [transport.py] [_log()] server lang: <none>
2025-11-26T04:52:12.396 [DEBUG] [Thread-12002] [transport.py] [_log()] kex follows: False
2025-11-26T04:52:12.396 [DEBUG] [Thread-12002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:52:12.396 [DEBUG] [Thread-12002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:52:12.396 [DEBUG] [Thread-12002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:52:12.396 [DEBUG] [Thread-12002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:52:12.396 [DEBUG] [Thread-12002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:52:12.397 [DEBUG] [Thread-12002] [transport.py] [_log()] Compression: none
2025-11-26T04:52:12.397 [DEBUG] [Thread-12002] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:52:12.452 [DEBUG] [Thread-12002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:52:12.452 [DEBUG] [Thread-12002] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:52:12.453 [DEBUG] [Thread-12002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:52:12.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:52:12.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:52:12.509 [DEBUG] [Thread-12002] [transport.py] [_log()] userauth is OK
2025-11-26T04:52:12.509 [DEBUG] [Thread-12002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:52:12.509 [DEBUG] [Thread-12002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:52:12.509 [DEBUG] [Thread-12002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:52:12.509 [DEBUG] [Thread-12002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:52:12.529 [INFO] [Thread-12002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:52:12.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:52:12.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:52:12.640 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:52:12.641 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:52:13.342 [DEBUG] [Thread-12002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:52:13.343 [DEBUG] [Thread-12002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:52:13.390 [DEBUG] [Thread-12002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:52:13.391 [DEBUG] [Thread-12002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:52:13.399 [DEBUG] [Thread-12002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:52:13.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:52:13.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:52:13.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:52:13.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:52:13.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:52:13.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:52:13.434 [DEBUG] [Thread-12002] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:52:22.135 [DEBUG] [Thread-12004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:52:31.247 [DEBUG] [Thread-12005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:52:37.190 [DEBUG] [Thread-12006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:52:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:52:43.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:52:43.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:52:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 52, 18), 26.97, 14.95, 0.0, 12.42, 17.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:52:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:52:18
2025-11-26T04:52:44.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:52:44.440 [DEBUG] [Thread-12007] [transport.py] [_log()] starting thread (client mode): 0x70df8190
2025-11-26T04:52:44.440 [DEBUG] [Thread-12007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:52:44.461 [DEBUG] [Thread-12007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:52:44.461 [INFO] [Thread-12007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:52:44.464 [DEBUG] [Thread-12007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:52:44.464 [DEBUG] [Thread-12007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:52:44.464 [DEBUG] [Thread-12007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:52:44.464 [DEBUG] [Thread-12007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:52:44.464 [DEBUG] [Thread-12007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:52:44.464 [DEBUG] [Thread-12007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:52:44.464 [DEBUG] [Thread-12007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] client lang: <none>
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] server lang: <none>
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] kex follows: False
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] Compression: none
2025-11-26T04:52:44.465 [DEBUG] [Thread-12007] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:52:44.481 [DEBUG] [Thread-12007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:52:44.481 [DEBUG] [Thread-12007] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:52:44.482 [DEBUG] [Thread-12007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:52:44.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:52:44.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:52:44.483 [DEBUG] [Thread-12007] [transport.py] [_log()] userauth is OK
2025-11-26T04:52:44.483 [DEBUG] [Thread-12007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:52:44.483 [DEBUG] [Thread-12007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:52:44.483 [DEBUG] [Thread-12007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:52:44.483 [DEBUG] [Thread-12007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:52:44.492 [INFO] [Thread-12007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:52:44.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:52:45.067 [DEBUG] [Thread-12007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:52:45.067 [DEBUG] [Thread-12007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:52:45.067 [DEBUG] [Thread-12007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:52:45.108 [DEBUG] [Thread-12007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:52:45.108 [DEBUG] [Thread-12007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:52:45.110 [DEBUG] [Thread-12007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:52:45.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:52:45.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:52:45.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:52:45.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:52:45.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:52:45.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:52:45.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.119539 -999.00  +17.90   9.63     20   -5.20 1 1 1 1 1   140    0 22.49 -49.30 ----- 9.0 9.6 58.0 11.9 18.1 -25.1 18.0 -24.4 17.7 -23.2 17.9 -24.2
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.119539
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:52:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:52:45.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:52:18', tmtdew=26.97, humidity=14.95, cloud=0.0, wind=12.42, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:52:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:52:45.129 [DEBUG] [Thread-12007] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:52:45.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:52:45.214 [DEBUG] [Thread-12010] [transport.py] [_log()] starting thread (client mode): 0x70d1f100
2025-11-26T04:52:45.214 [DEBUG] [Thread-12010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:52:45.228 [DEBUG] [Thread-12010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:52:45.228 [INFO] [Thread-12010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] client lang: <none>
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] server lang: <none>
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] kex follows: False
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] Compression: none
2025-11-26T04:52:45.236 [DEBUG] [Thread-12010] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:52:45.295 [DEBUG] [Thread-12010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:52:45.295 [DEBUG] [Thread-12010] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:52:45.295 [DEBUG] [Thread-12010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:52:45.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:52:45.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:52:45.352 [DEBUG] [Thread-12010] [transport.py] [_log()] userauth is OK
2025-11-26T04:52:45.352 [DEBUG] [Thread-12010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:52:45.353 [DEBUG] [Thread-12010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:52:45.353 [DEBUG] [Thread-12010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:52:45.353 [DEBUG] [Thread-12010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:52:45.370 [INFO] [Thread-12010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:52:45.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:52:45.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:52:46.197 [DEBUG] [Thread-12010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:52:46.197 [DEBUG] [Thread-12010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:52:46.244 [DEBUG] [Thread-12010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:52:46.244 [DEBUG] [Thread-12010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:52:46.253 [DEBUG] [Thread-12010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:52:46.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:52:46.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:52:46.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:52:46.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:52:46.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:52:46.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:52:46.284 [DEBUG] [Thread-12010] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:52:52.224 [DEBUG] [Thread-12012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:53:07.268 [DEBUG] [Thread-12013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:53:12.846 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:53:12.847 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:53:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:53:16.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:53:16.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:53:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 52, 50), 26.98, 14.94, 0.0, 12.65, 17.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:53:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:52:50
2025-11-26T04:53:17.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:53:17.218 [DEBUG] [Thread-12014] [transport.py] [_log()] starting thread (client mode): 0x737c6cb0
2025-11-26T04:53:17.218 [DEBUG] [Thread-12014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:53:17.241 [DEBUG] [Thread-12014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:53:17.241 [INFO] [Thread-12014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] client lang: <none>
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] server lang: <none>
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] kex follows: False
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:53:17.245 [DEBUG] [Thread-12014] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:53:17.246 [DEBUG] [Thread-12014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:53:17.246 [DEBUG] [Thread-12014] [transport.py] [_log()] Compression: none
2025-11-26T04:53:17.246 [DEBUG] [Thread-12014] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:53:17.262 [DEBUG] [Thread-12014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:53:17.263 [DEBUG] [Thread-12014] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:53:17.263 [DEBUG] [Thread-12014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:53:17.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:53:17.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:53:17.265 [DEBUG] [Thread-12014] [transport.py] [_log()] userauth is OK
2025-11-26T04:53:17.266 [DEBUG] [Thread-12014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:53:17.266 [DEBUG] [Thread-12014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:53:17.266 [DEBUG] [Thread-12014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:53:17.266 [DEBUG] [Thread-12014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:53:17.289 [INFO] [Thread-12014] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:53:17.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:53:17.883 [DEBUG] [Thread-12014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:53:17.883 [DEBUG] [Thread-12014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:53:17.883 [DEBUG] [Thread-12014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:53:17.924 [DEBUG] [Thread-12014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:53:17.924 [DEBUG] [Thread-12014] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:53:17.927 [DEBUG] [Thread-12014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:53:17.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:53:17.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:53:17.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:53:17.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:53:17.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:53:17.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:53:17.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:53:17.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:53:17.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:53:17.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.119886 -999.00  +17.90   9.08     20   -5.20 1 1 1 1 1   151    0 22.34 -43.78 ----- 9.3 9.1 57.6 11.6 18.0 -25.1 18.0 -24.4 17.8 -23.1 18.0 -24.2
2025-11-26T04:53:17.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:53:17.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:53:17.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.119886
2025-11-26T04:53:17.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:53:17.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:53:17.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:53:17.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:53:17.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:53:17.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:52:50', tmtdew=26.98, humidity=14.94, cloud=0.0, wind=12.65, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:52:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:53:17.953 [DEBUG] [Thread-12014] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:53:18.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:53:18.049 [DEBUG] [Thread-12017] [transport.py] [_log()] starting thread (client mode): 0x70d76590
2025-11-26T04:53:18.049 [DEBUG] [Thread-12017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:53:18.064 [DEBUG] [Thread-12017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:53:18.064 [INFO] [Thread-12017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] client lang: <none>
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] server lang: <none>
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] kex follows: False
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:53:18.073 [DEBUG] [Thread-12017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:53:18.074 [DEBUG] [Thread-12017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:53:18.074 [DEBUG] [Thread-12017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:53:18.074 [DEBUG] [Thread-12017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:53:18.074 [DEBUG] [Thread-12017] [transport.py] [_log()] Compression: none
2025-11-26T04:53:18.074 [DEBUG] [Thread-12017] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:53:18.134 [DEBUG] [Thread-12017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:53:18.134 [DEBUG] [Thread-12017] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:53:18.135 [DEBUG] [Thread-12017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:53:18.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:53:18.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:53:18.190 [DEBUG] [Thread-12017] [transport.py] [_log()] userauth is OK
2025-11-26T04:53:18.190 [DEBUG] [Thread-12017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:53:18.190 [DEBUG] [Thread-12017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:53:18.190 [DEBUG] [Thread-12017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:53:18.190 [DEBUG] [Thread-12017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:53:18.209 [INFO] [Thread-12017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:53:18.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:53:18.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:53:19.027 [DEBUG] [Thread-12017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:53:19.027 [DEBUG] [Thread-12017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:53:19.074 [DEBUG] [Thread-12017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:53:19.074 [DEBUG] [Thread-12017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:53:19.082 [DEBUG] [Thread-12017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:53:19.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:53:19.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:53:19.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:53:19.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:53:19.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:53:19.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:53:19.116 [DEBUG] [Thread-12017] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:53:22.301 [DEBUG] [Thread-12019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:53:31.322 [DEBUG] [Thread-12020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:53:37.345 [DEBUG] [Thread-12021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:53:49.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:53:49.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:53:49.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:53:49.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 53, 22), 27.0, 14.9, 0.0, 12.76, 17.82, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:53:49.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:53:22
2025-11-26T04:53:49.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:53:50.078 [DEBUG] [Thread-12022] [transport.py] [_log()] starting thread (client mode): 0x70d74850
2025-11-26T04:53:50.078 [DEBUG] [Thread-12022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:53:50.097 [DEBUG] [Thread-12022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:53:50.097 [INFO] [Thread-12022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:53:50.100 [DEBUG] [Thread-12022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:53:50.100 [DEBUG] [Thread-12022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:53:50.100 [DEBUG] [Thread-12022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:53:50.100 [DEBUG] [Thread-12022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:53:50.100 [DEBUG] [Thread-12022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:53:50.100 [DEBUG] [Thread-12022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] client lang: <none>
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] server lang: <none>
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] kex follows: False
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] Compression: none
2025-11-26T04:53:50.101 [DEBUG] [Thread-12022] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:53:50.117 [DEBUG] [Thread-12022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:53:50.118 [DEBUG] [Thread-12022] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:53:50.118 [DEBUG] [Thread-12022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:53:50.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:53:50.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:53:50.120 [DEBUG] [Thread-12022] [transport.py] [_log()] userauth is OK
2025-11-26T04:53:50.120 [DEBUG] [Thread-12022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:53:50.120 [DEBUG] [Thread-12022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:53:50.120 [DEBUG] [Thread-12022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:53:50.120 [DEBUG] [Thread-12022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:53:50.138 [INFO] [Thread-12022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:53:50.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:53:50.736 [DEBUG] [Thread-12022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:53:50.736 [DEBUG] [Thread-12022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:53:50.736 [DEBUG] [Thread-12022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:53:50.777 [DEBUG] [Thread-12022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:53:50.778 [DEBUG] [Thread-12022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:53:50.780 [DEBUG] [Thread-12022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:53:50.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:53:50.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:53:50.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:53:50.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:53:50.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:53:50.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:53:50.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:53:50.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:53:50.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:53:50.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.120234 -999.00  +17.90  11.08     20   -5.10 1 1 1 1 1   163    0 22.30 -40.94 ----- 11.3 11.1 63.6 13.4 18.0 -25.1 18.0 -24.5 17.7 -23.0 17.9 -24.3
2025-11-26T04:53:50.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:53:50.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:53:50.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.120234
2025-11-26T04:53:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:53:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:53:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:53:50.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:53:50.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:53:50.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:53:22', tmtdew=27.0, humidity=14.9, cloud=0.0, wind=12.76, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:53:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:53:50.803 [DEBUG] [Thread-12022] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:53:50.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:53:50.895 [DEBUG] [Thread-12025] [transport.py] [_log()] starting thread (client mode): 0x737c69b0
2025-11-26T04:53:50.895 [DEBUG] [Thread-12025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:53:50.909 [DEBUG] [Thread-12025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:53:50.909 [INFO] [Thread-12025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:53:50.917 [DEBUG] [Thread-12025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:53:50.917 [DEBUG] [Thread-12025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:53:50.917 [DEBUG] [Thread-12025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:53:50.917 [DEBUG] [Thread-12025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:53:50.917 [DEBUG] [Thread-12025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:53:50.917 [DEBUG] [Thread-12025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:53:50.917 [DEBUG] [Thread-12025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:53:50.917 [DEBUG] [Thread-12025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:53:50.918 [DEBUG] [Thread-12025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:53:50.918 [DEBUG] [Thread-12025] [transport.py] [_log()] client lang: <none>
2025-11-26T04:53:50.918 [DEBUG] [Thread-12025] [transport.py] [_log()] server lang: <none>
2025-11-26T04:53:50.918 [DEBUG] [Thread-12025] [transport.py] [_log()] kex follows: False
2025-11-26T04:53:50.918 [DEBUG] [Thread-12025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:53:50.918 [DEBUG] [Thread-12025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:53:50.918 [DEBUG] [Thread-12025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:53:50.918 [DEBUG] [Thread-12025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:53:50.918 [DEBUG] [Thread-12025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:53:50.919 [DEBUG] [Thread-12025] [transport.py] [_log()] Compression: none
2025-11-26T04:53:50.919 [DEBUG] [Thread-12025] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:53:50.973 [DEBUG] [Thread-12025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:53:50.973 [DEBUG] [Thread-12025] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:53:50.974 [DEBUG] [Thread-12025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:53:50.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:53:50.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:53:51.033 [DEBUG] [Thread-12025] [transport.py] [_log()] userauth is OK
2025-11-26T04:53:51.033 [DEBUG] [Thread-12025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:53:51.034 [DEBUG] [Thread-12025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:53:51.034 [DEBUG] [Thread-12025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:53:51.034 [DEBUG] [Thread-12025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:53:51.056 [INFO] [Thread-12025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:53:51.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:53:51.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:53:51.957 [DEBUG] [Thread-12025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:53:51.958 [DEBUG] [Thread-12025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:53:52.005 [DEBUG] [Thread-12025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:53:52.005 [DEBUG] [Thread-12025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:53:52.014 [DEBUG] [Thread-12025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:53:52.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:53:52.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:53:52.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:53:52.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:53:52.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:53:52.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:53:52.047 [DEBUG] [Thread-12025] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:53:52.380 [DEBUG] [Thread-12027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:54:07.425 [DEBUG] [Thread-12028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:54:13.047 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:54:13.049 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:54:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:54:22.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:54:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:54:22.463 [DEBUG] [Thread-12029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:54:22.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 53, 54), 26.9, 14.97, 0.0, 12.65, 17.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:54:22.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:53:54
2025-11-26T04:54:22.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:54:23.013 [DEBUG] [Thread-12030] [transport.py] [_log()] starting thread (client mode): 0x737c7ac0
2025-11-26T04:54:23.013 [DEBUG] [Thread-12030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:54:23.034 [DEBUG] [Thread-12030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:54:23.035 [INFO] [Thread-12030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] client lang: <none>
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] server lang: <none>
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] kex follows: False
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] Compression: none
2025-11-26T04:54:23.038 [DEBUG] [Thread-12030] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:54:23.056 [DEBUG] [Thread-12030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:54:23.056 [DEBUG] [Thread-12030] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:54:23.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:54:23.057 [DEBUG] [Thread-12030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:54:23.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:54:23.060 [DEBUG] [Thread-12030] [transport.py] [_log()] userauth is OK
2025-11-26T04:54:23.060 [DEBUG] [Thread-12030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:54:23.060 [DEBUG] [Thread-12030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:54:23.060 [DEBUG] [Thread-12030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:54:23.060 [DEBUG] [Thread-12030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:54:23.084 [INFO] [Thread-12030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:54:23.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:54:23.754 [DEBUG] [Thread-12030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:54:23.754 [DEBUG] [Thread-12030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:54:23.755 [DEBUG] [Thread-12030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:54:23.795 [DEBUG] [Thread-12030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:54:23.795 [DEBUG] [Thread-12030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:54:23.798 [DEBUG] [Thread-12030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:54:23.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:54:23.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:54:23.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:54:23.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:54:23.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:54:23.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:54:23.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:54:23.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:54:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:54:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.120581 -999.00  +18.00  12.04     20   -5.00 1 1 1 1 1   176    0 22.04 -45.14 ----- 11.7 12.0 65.6 13.4 18.1 -25.1 18.0 -24.4 17.8 -23.2 17.9 -24.1
2025-11-26T04:54:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:54:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:54:23.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.120581
2025-11-26T04:54:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:54:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:54:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:54:23.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:54:23.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:54:23.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:53:54', tmtdew=26.9, humidity=14.97, cloud=0.0, wind=12.65, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:53:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:54:23.828 [DEBUG] [Thread-12030] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:54:23.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:54:23.933 [DEBUG] [Thread-12033] [transport.py] [_log()] starting thread (client mode): 0x70d77490
2025-11-26T04:54:23.933 [DEBUG] [Thread-12033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:54:23.948 [DEBUG] [Thread-12033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:54:23.948 [INFO] [Thread-12033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] client lang: <none>
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] server lang: <none>
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] kex follows: False
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:54:23.956 [DEBUG] [Thread-12033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:54:23.957 [DEBUG] [Thread-12033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:54:23.957 [DEBUG] [Thread-12033] [transport.py] [_log()] Compression: none
2025-11-26T04:54:23.957 [DEBUG] [Thread-12033] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:54:24.015 [DEBUG] [Thread-12033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:54:24.016 [DEBUG] [Thread-12033] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:54:24.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:54:24.017 [DEBUG] [Thread-12033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:54:24.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:54:24.075 [DEBUG] [Thread-12033] [transport.py] [_log()] userauth is OK
2025-11-26T04:54:24.075 [DEBUG] [Thread-12033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:54:24.075 [DEBUG] [Thread-12033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:54:24.075 [DEBUG] [Thread-12033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:54:24.076 [DEBUG] [Thread-12033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:54:24.094 [INFO] [Thread-12033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:54:24.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:54:24.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:54:24.932 [DEBUG] [Thread-12033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:54:24.932 [DEBUG] [Thread-12033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:54:24.979 [DEBUG] [Thread-12033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:54:24.980 [DEBUG] [Thread-12033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:54:24.988 [DEBUG] [Thread-12033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:54:24.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:54:24.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:54:25.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:54:25.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:54:25.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:54:25.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:54:25.027 [DEBUG] [Thread-12033] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:54:31.396 [DEBUG] [Thread-12035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:54:37.493 [DEBUG] [Thread-12036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:54:52.533 [DEBUG] [Thread-12037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:54:55.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:54:55.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:54:55.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:54:55.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 54, 26), 26.97, 14.89, 0.0, 12.78, 17.84, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:54:55.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:54:26
2025-11-26T04:54:55.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:54:55.979 [DEBUG] [Thread-12038] [transport.py] [_log()] starting thread (client mode): 0x7374f0d0
2025-11-26T04:54:55.979 [DEBUG] [Thread-12038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:54:55.999 [DEBUG] [Thread-12038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:54:55.999 [INFO] [Thread-12038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] client lang: <none>
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] server lang: <none>
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] kex follows: False
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:54:56.002 [DEBUG] [Thread-12038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:54:56.003 [DEBUG] [Thread-12038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:54:56.003 [DEBUG] [Thread-12038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:54:56.003 [DEBUG] [Thread-12038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:54:56.003 [DEBUG] [Thread-12038] [transport.py] [_log()] Compression: none
2025-11-26T04:54:56.003 [DEBUG] [Thread-12038] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:54:56.021 [DEBUG] [Thread-12038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:54:56.022 [DEBUG] [Thread-12038] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:54:56.022 [DEBUG] [Thread-12038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:54:56.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:54:56.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:54:56.024 [DEBUG] [Thread-12038] [transport.py] [_log()] userauth is OK
2025-11-26T04:54:56.024 [DEBUG] [Thread-12038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:54:56.024 [DEBUG] [Thread-12038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:54:56.025 [DEBUG] [Thread-12038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:54:56.025 [DEBUG] [Thread-12038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:54:56.046 [INFO] [Thread-12038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:54:56.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:54:56.638 [DEBUG] [Thread-12038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:54:56.638 [DEBUG] [Thread-12038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:54:56.639 [DEBUG] [Thread-12038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:54:56.679 [DEBUG] [Thread-12038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:54:56.679 [DEBUG] [Thread-12038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:54:56.683 [DEBUG] [Thread-12038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:54:56.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:54:56.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:54:56.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:54:56.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:54:56.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:54:56.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:54:56.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:54:56.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:54:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:54:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.120928 -999.00  +18.10  12.78     20   -5.00 1 1 1 1 1   189    0 22.21 -45.18 ----- 13.0 12.8 63.0 13.9 18.1 -25.1 18.0 -24.4 17.7 -23.2 17.9 -24.1
2025-11-26T04:54:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:54:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:54:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.120928
2025-11-26T04:54:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:54:56.709 [DEBUG] [Thread-12038] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:54:56.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:54:56.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:54:56.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:54:56.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:54:56.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:54:26', tmtdew=26.97, humidity=14.89, cloud=0.0, wind=12.78, temperature=17.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:54:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:54:56.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:54:56.806 [DEBUG] [Thread-12041] [transport.py] [_log()] starting thread (client mode): 0x70d02a10
2025-11-26T04:54:56.806 [DEBUG] [Thread-12041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:54:56.822 [DEBUG] [Thread-12041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:54:56.823 [INFO] [Thread-12041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:54:56.830 [DEBUG] [Thread-12041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:54:56.831 [DEBUG] [Thread-12041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:54:56.831 [DEBUG] [Thread-12041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:54:56.831 [DEBUG] [Thread-12041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:54:56.831 [DEBUG] [Thread-12041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:54:56.831 [DEBUG] [Thread-12041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:54:56.831 [DEBUG] [Thread-12041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:54:56.831 [DEBUG] [Thread-12041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:54:56.831 [DEBUG] [Thread-12041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:54:56.831 [DEBUG] [Thread-12041] [transport.py] [_log()] client lang: <none>
2025-11-26T04:54:56.832 [DEBUG] [Thread-12041] [transport.py] [_log()] server lang: <none>
2025-11-26T04:54:56.832 [DEBUG] [Thread-12041] [transport.py] [_log()] kex follows: False
2025-11-26T04:54:56.832 [DEBUG] [Thread-12041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:54:56.832 [DEBUG] [Thread-12041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:54:56.832 [DEBUG] [Thread-12041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:54:56.832 [DEBUG] [Thread-12041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:54:56.832 [DEBUG] [Thread-12041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:54:56.832 [DEBUG] [Thread-12041] [transport.py] [_log()] Compression: none
2025-11-26T04:54:56.832 [DEBUG] [Thread-12041] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:54:56.891 [DEBUG] [Thread-12041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:54:56.891 [DEBUG] [Thread-12041] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:54:56.892 [DEBUG] [Thread-12041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:54:56.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:54:56.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:54:56.946 [DEBUG] [Thread-12041] [transport.py] [_log()] userauth is OK
2025-11-26T04:54:56.947 [DEBUG] [Thread-12041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:54:56.947 [DEBUG] [Thread-12041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:54:56.947 [DEBUG] [Thread-12041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:54:56.947 [DEBUG] [Thread-12041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:54:56.967 [INFO] [Thread-12041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:54:56.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:54:56.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:54:57.800 [DEBUG] [Thread-12041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:54:57.800 [DEBUG] [Thread-12041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:54:57.849 [DEBUG] [Thread-12041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:54:57.849 [DEBUG] [Thread-12041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:54:57.859 [DEBUG] [Thread-12041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:54:57.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:54:57.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:54:57.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:54:57.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:54:57.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:54:57.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:54:57.896 [DEBUG] [Thread-12041] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:55:07.569 [DEBUG] [Thread-12043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:55:13.253 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:55:13.254 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:55:22.622 [DEBUG] [Thread-12044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:55:27.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:55:27.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:55:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:55:28.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 54, 58), 26.96, 14.9, 0.0, 12.55, 17.92, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:55:28.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:54:58
2025-11-26T04:55:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:55:28.835 [DEBUG] [Thread-12045] [transport.py] [_log()] starting thread (client mode): 0x7374d420
2025-11-26T04:55:28.835 [DEBUG] [Thread-12045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:55:28.856 [DEBUG] [Thread-12045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:55:28.856 [INFO] [Thread-12045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:55:28.857 [DEBUG] [Thread-12045] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:55:28.857 [DEBUG] [Thread-12045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:55:28.857 [DEBUG] [Thread-12045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:55:28.857 [DEBUG] [Thread-12045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:55:28.857 [DEBUG] [Thread-12045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:55:28.857 [DEBUG] [Thread-12045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] client lang: <none>
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] server lang: <none>
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] kex follows: False
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] Compression: none
2025-11-26T04:55:28.858 [DEBUG] [Thread-12045] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:55:28.871 [DEBUG] [Thread-12045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:55:28.872 [DEBUG] [Thread-12045] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:55:28.872 [DEBUG] [Thread-12045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:55:28.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:55:28.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:55:28.875 [DEBUG] [Thread-12045] [transport.py] [_log()] userauth is OK
2025-11-26T04:55:28.875 [DEBUG] [Thread-12045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:55:28.875 [DEBUG] [Thread-12045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:55:28.875 [DEBUG] [Thread-12045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:55:28.875 [DEBUG] [Thread-12045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:55:28.900 [INFO] [Thread-12045] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:55:28.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:55:29.523 [DEBUG] [Thread-12045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:55:29.523 [DEBUG] [Thread-12045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:55:29.524 [DEBUG] [Thread-12045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:55:29.563 [DEBUG] [Thread-12045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:55:29.564 [DEBUG] [Thread-12045] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:55:29.566 [DEBUG] [Thread-12045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:55:29.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:55:29.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:55:29.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:55:29.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:55:29.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:55:29.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:55:29.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:55:29.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:55:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:55:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.121275 -999.00  +18.20  12.59     20   -5.00 1 1 1 1 1   203    0 22.26 -47.06 ----- 12.3 12.6 60.0 13.7 18.1 -25.3 18.1 -24.4 17.7 -23.1 17.9 -24.0
2025-11-26T04:55:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:55:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:55:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.121275
2025-11-26T04:55:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:55:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:55:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:55:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:55:29.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:55:29.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:54:58', tmtdew=26.96, humidity=14.9, cloud=0.0, wind=12.55, temperature=17.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:54:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:55:29.590 [DEBUG] [Thread-12045] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:55:29.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:55:29.686 [DEBUG] [Thread-12048] [transport.py] [_log()] starting thread (client mode): 0x7374ef50
2025-11-26T04:55:29.686 [DEBUG] [Thread-12048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:55:29.701 [DEBUG] [Thread-12048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:55:29.702 [INFO] [Thread-12048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:55:29.709 [DEBUG] [Thread-12048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:55:29.709 [DEBUG] [Thread-12048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] client lang: <none>
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] server lang: <none>
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] kex follows: False
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:55:29.710 [DEBUG] [Thread-12048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:55:29.711 [DEBUG] [Thread-12048] [transport.py] [_log()] Compression: none
2025-11-26T04:55:29.711 [DEBUG] [Thread-12048] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:55:29.767 [DEBUG] [Thread-12048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:55:29.768 [DEBUG] [Thread-12048] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:55:29.769 [DEBUG] [Thread-12048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:55:29.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:55:29.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:55:29.823 [DEBUG] [Thread-12048] [transport.py] [_log()] userauth is OK
2025-11-26T04:55:29.823 [DEBUG] [Thread-12048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:55:29.824 [DEBUG] [Thread-12048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:55:29.824 [DEBUG] [Thread-12048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:55:29.824 [DEBUG] [Thread-12048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:55:29.842 [INFO] [Thread-12048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:55:29.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:55:29.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:55:30.679 [DEBUG] [Thread-12048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:55:30.679 [DEBUG] [Thread-12048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:55:30.727 [DEBUG] [Thread-12048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:55:30.727 [DEBUG] [Thread-12048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:55:30.736 [DEBUG] [Thread-12048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:55:30.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:55:30.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:55:30.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:55:30.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:55:30.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:55:30.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:55:30.773 [DEBUG] [Thread-12048] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:55:31.465 [DEBUG] [Thread-12050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:55:37.662 [DEBUG] [Thread-12051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:55:52.714 [DEBUG] [Thread-12052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:56:00.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:56:00.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:56:00.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:56:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 55, 30), 26.96, 14.92, 0.0, 12.86, 17.99, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:56:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:55:30
2025-11-26T04:56:01.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:56:01.726 [DEBUG] [Thread-12053] [transport.py] [_log()] starting thread (client mode): 0x737c4f40
2025-11-26T04:56:01.726 [DEBUG] [Thread-12053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:56:01.746 [DEBUG] [Thread-12053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:56:01.747 [INFO] [Thread-12053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] client lang: <none>
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] server lang: <none>
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] kex follows: False
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] Compression: none
2025-11-26T04:56:01.750 [DEBUG] [Thread-12053] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:56:01.766 [DEBUG] [Thread-12053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:56:01.766 [DEBUG] [Thread-12053] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:56:01.766 [DEBUG] [Thread-12053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:56:01.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:56:01.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:56:01.767 [DEBUG] [Thread-12053] [transport.py] [_log()] userauth is OK
2025-11-26T04:56:01.767 [DEBUG] [Thread-12053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:56:01.767 [DEBUG] [Thread-12053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:56:01.767 [DEBUG] [Thread-12053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:56:01.767 [DEBUG] [Thread-12053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:56:01.782 [INFO] [Thread-12053] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:56:01.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:56:02.404 [DEBUG] [Thread-12053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:56:02.404 [DEBUG] [Thread-12053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:56:02.405 [DEBUG] [Thread-12053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:56:02.446 [DEBUG] [Thread-12053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:56:02.446 [DEBUG] [Thread-12053] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:56:02.449 [DEBUG] [Thread-12053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:56:02.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:56:02.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:56:02.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:56:02.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:56:02.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:56:02.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:56:02.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:56:02.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:56:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:56:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.121622 -999.00  +18.20  13.03     20   -5.00 1 1 1 1 1   218    0 22.79 -43.65 ----- 12.4 13.0 61.0 14.2 18.1 -25.1 18.0 -24.4 17.8 -23.1 17.9 -24.0
2025-11-26T04:56:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:56:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:56:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.121622
2025-11-26T04:56:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:56:02.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:56:02.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:56:02.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:56:02.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:56:02.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:55:30', tmtdew=26.96, humidity=14.92, cloud=0.0, wind=12.86, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:55:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:56:02.475 [DEBUG] [Thread-12053] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:56:02.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:56:02.567 [DEBUG] [Thread-12056] [transport.py] [_log()] starting thread (client mode): 0x70d7d930
2025-11-26T04:56:02.567 [DEBUG] [Thread-12056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:56:02.583 [DEBUG] [Thread-12056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:56:02.583 [INFO] [Thread-12056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:56:02.591 [DEBUG] [Thread-12056] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:56:02.591 [DEBUG] [Thread-12056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:56:02.591 [DEBUG] [Thread-12056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:56:02.591 [DEBUG] [Thread-12056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:56:02.591 [DEBUG] [Thread-12056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:56:02.591 [DEBUG] [Thread-12056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:56:02.591 [DEBUG] [Thread-12056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:56:02.591 [DEBUG] [Thread-12056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:56:02.591 [DEBUG] [Thread-12056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] client lang: <none>
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] server lang: <none>
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] kex follows: False
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] Compression: none
2025-11-26T04:56:02.592 [DEBUG] [Thread-12056] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:56:02.652 [DEBUG] [Thread-12056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:56:02.652 [DEBUG] [Thread-12056] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:56:02.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:56:02.653 [DEBUG] [Thread-12056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:56:02.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:56:02.712 [DEBUG] [Thread-12056] [transport.py] [_log()] userauth is OK
2025-11-26T04:56:02.712 [DEBUG] [Thread-12056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:56:02.712 [DEBUG] [Thread-12056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:56:02.712 [DEBUG] [Thread-12056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:56:02.712 [DEBUG] [Thread-12056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:56:02.731 [INFO] [Thread-12056] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:56:02.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:56:02.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:56:03.584 [DEBUG] [Thread-12056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:56:03.584 [DEBUG] [Thread-12056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:56:03.632 [DEBUG] [Thread-12056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:56:03.632 [DEBUG] [Thread-12056] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:56:03.640 [DEBUG] [Thread-12056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:56:03.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:56:03.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:56:03.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:56:03.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:56:03.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:56:03.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:56:03.671 [DEBUG] [Thread-12056] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:56:07.742 [DEBUG] [Thread-12058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:56:13.465 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:56:13.467 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:56:22.796 [DEBUG] [Thread-12059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:56:31.539 [DEBUG] [Thread-12060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:56:33.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:56:33.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:56:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:56:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 56, 2), 26.99, 14.89, 0.0, 12.7, 17.99, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:56:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:56:02
2025-11-26T04:56:34.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:56:34.622 [DEBUG] [Thread-12061] [transport.py] [_log()] starting thread (client mode): 0x737c4130
2025-11-26T04:56:34.622 [DEBUG] [Thread-12061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:56:34.642 [DEBUG] [Thread-12061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:56:34.642 [INFO] [Thread-12061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] client lang: <none>
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] server lang: <none>
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] kex follows: False
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:56:34.645 [DEBUG] [Thread-12061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:56:34.646 [DEBUG] [Thread-12061] [transport.py] [_log()] Compression: none
2025-11-26T04:56:34.646 [DEBUG] [Thread-12061] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:56:34.663 [DEBUG] [Thread-12061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:56:34.664 [DEBUG] [Thread-12061] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:56:34.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:56:34.665 [DEBUG] [Thread-12061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:56:34.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:56:34.667 [DEBUG] [Thread-12061] [transport.py] [_log()] userauth is OK
2025-11-26T04:56:34.667 [DEBUG] [Thread-12061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:56:34.667 [DEBUG] [Thread-12061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:56:34.667 [DEBUG] [Thread-12061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:56:34.667 [DEBUG] [Thread-12061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:56:34.692 [INFO] [Thread-12061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:56:34.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:56:35.341 [DEBUG] [Thread-12061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:56:35.342 [DEBUG] [Thread-12061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:56:35.342 [DEBUG] [Thread-12061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:56:35.382 [DEBUG] [Thread-12061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:56:35.382 [DEBUG] [Thread-12061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:56:35.384 [DEBUG] [Thread-12061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:56:35.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:56:35.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:56:35.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:56:35.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:56:35.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:56:35.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:56:35.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:56:35.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:56:35.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:56:35.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.121970 -999.00  +18.20  13.28     20   -5.00 1 1 1 1 1   233    0 22.31 -41.50 ----- 12.6 13.3 63.0 14.3 18.1 -25.1 18.1 -24.5 17.7 -23.0 18.0 -24.0
2025-11-26T04:56:35.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:56:35.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:56:35.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.121970
2025-11-26T04:56:35.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:56:35.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:56:35.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:56:35.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:56:35.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:56:35.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:56:02', tmtdew=26.99, humidity=14.89, cloud=0.0, wind=12.7, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:55:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:56:35.404 [DEBUG] [Thread-12061] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:56:35.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:56:35.490 [DEBUG] [Thread-12064] [transport.py] [_log()] starting thread (client mode): 0x70de58d0
2025-11-26T04:56:35.490 [DEBUG] [Thread-12064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:56:35.506 [DEBUG] [Thread-12064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:56:35.506 [INFO] [Thread-12064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] client lang: <none>
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] server lang: <none>
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] kex follows: False
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] Compression: none
2025-11-26T04:56:35.514 [DEBUG] [Thread-12064] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:56:35.570 [DEBUG] [Thread-12064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:56:35.570 [DEBUG] [Thread-12064] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:56:35.570 [DEBUG] [Thread-12064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:56:35.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:56:35.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:56:35.627 [DEBUG] [Thread-12064] [transport.py] [_log()] userauth is OK
2025-11-26T04:56:35.627 [DEBUG] [Thread-12064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:56:35.627 [DEBUG] [Thread-12064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:56:35.627 [DEBUG] [Thread-12064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:56:35.627 [DEBUG] [Thread-12064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:56:35.641 [INFO] [Thread-12064] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:56:35.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:56:35.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:56:36.517 [DEBUG] [Thread-12064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:56:36.517 [DEBUG] [Thread-12064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:56:36.565 [DEBUG] [Thread-12064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:56:36.565 [DEBUG] [Thread-12064] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:56:36.573 [DEBUG] [Thread-12064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:56:36.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:56:36.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:56: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') -> 00000000
2025-11-26T04:56:36.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:56:36.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:56:36.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:56:36.605 [DEBUG] [Thread-12064] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:56:37.829 [DEBUG] [Thread-12066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:56:52.887 [DEBUG] [Thread-12067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:57:06.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:57:06.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:57:06.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:57:07.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 56, 34), 27.1, 14.85, 0.0, 12.48, 18.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:57:07.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:56:34
2025-11-26T04:57:07.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:57:07.596 [DEBUG] [Thread-12068] [transport.py] [_log()] starting thread (client mode): 0x70de6a40
2025-11-26T04:57:07.596 [DEBUG] [Thread-12068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:57:07.617 [DEBUG] [Thread-12068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:57:07.617 [INFO] [Thread-12068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] client lang: <none>
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] server lang: <none>
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] kex follows: False
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:57:07.621 [DEBUG] [Thread-12068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:57:07.622 [DEBUG] [Thread-12068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:57:07.622 [DEBUG] [Thread-12068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:57:07.622 [DEBUG] [Thread-12068] [transport.py] [_log()] Compression: none
2025-11-26T04:57:07.622 [DEBUG] [Thread-12068] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:57:07.636 [DEBUG] [Thread-12068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:57:07.637 [DEBUG] [Thread-12068] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:57:07.637 [DEBUG] [Thread-12068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:57:07.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:57:07.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:57:07.638 [DEBUG] [Thread-12068] [transport.py] [_log()] userauth is OK
2025-11-26T04:57:07.638 [DEBUG] [Thread-12068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:57:07.638 [DEBUG] [Thread-12068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:57:07.638 [DEBUG] [Thread-12068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:57:07.638 [DEBUG] [Thread-12068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:57:07.647 [INFO] [Thread-12068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:57:07.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:57:07.921 [DEBUG] [Thread-12070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:57:08.259 [DEBUG] [Thread-12068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:57:08.260 [DEBUG] [Thread-12068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:57:08.260 [DEBUG] [Thread-12068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:57:08.300 [DEBUG] [Thread-12068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:57:08.300 [DEBUG] [Thread-12068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:57:08.302 [DEBUG] [Thread-12068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:57:08.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:57:08.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:57:08.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:57:08.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:57:08.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:57:08.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:57:08.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.122664 -999.00  +18.30  13.64     20   -4.90 1 1 1 1 1   267    0 21.78 -39.80 ----- 12.7 13.6 64.0 15.1 18.2 -25.1 18.0 -24.4 17.7 -23.1 18.0 -24.1
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.122664
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:57:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:56:34', tmtdew=27.1, humidity=14.85, cloud=0.0, wind=12.48, temperature=18.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:56:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:57:08.323 [DEBUG] [Thread-12068] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:57:08.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:57:08.421 [DEBUG] [Thread-12072] [transport.py] [_log()] starting thread (client mode): 0x737c7df0
2025-11-26T04:57:08.421 [DEBUG] [Thread-12072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:57:08.439 [DEBUG] [Thread-12072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:57:08.439 [INFO] [Thread-12072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:57:08.449 [DEBUG] [Thread-12072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] client lang: <none>
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] server lang: <none>
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] kex follows: False
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] Compression: none
2025-11-26T04:57:08.450 [DEBUG] [Thread-12072] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:57:08.504 [DEBUG] [Thread-12072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:57:08.504 [DEBUG] [Thread-12072] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:57:08.505 [DEBUG] [Thread-12072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:57:08.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:57:08.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:57:08.564 [DEBUG] [Thread-12072] [transport.py] [_log()] userauth is OK
2025-11-26T04:57:08.564 [DEBUG] [Thread-12072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:57:08.564 [DEBUG] [Thread-12072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:57:08.564 [DEBUG] [Thread-12072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:57:08.564 [DEBUG] [Thread-12072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:57:08.580 [INFO] [Thread-12072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:57:08.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:57:08.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:57:09.407 [DEBUG] [Thread-12072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:57:09.407 [DEBUG] [Thread-12072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:57:09.454 [DEBUG] [Thread-12072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:57:09.454 [DEBUG] [Thread-12072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:57:09.462 [DEBUG] [Thread-12072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:57:09.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:57:09.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:57:09.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:57:09.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:57:09.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:57:09.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:57:09.495 [DEBUG] [Thread-12072] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:57:13.669 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:57:13.670 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:57:22.955 [DEBUG] [Thread-12074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:57:31.614 [DEBUG] [Thread-12075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:57:38.019 [DEBUG] [Thread-12076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:57:39.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:57:39.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:57:39.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:57:40.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 57, 6), 27.08, 14.89, 0.0, 12.78, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:57:40.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:57:06
2025-11-26T04:57:40.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:57:40.511 [DEBUG] [Thread-12077] [transport.py] [_log()] starting thread (client mode): 0x737c70d0
2025-11-26T04:57:40.511 [DEBUG] [Thread-12077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:57:40.530 [DEBUG] [Thread-12077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:57:40.530 [INFO] [Thread-12077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:57:40.533 [DEBUG] [Thread-12077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:57:40.533 [DEBUG] [Thread-12077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:57:40.533 [DEBUG] [Thread-12077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] client lang: <none>
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] server lang: <none>
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] kex follows: False
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] Compression: none
2025-11-26T04:57:40.534 [DEBUG] [Thread-12077] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:57:40.548 [DEBUG] [Thread-12077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:57:40.549 [DEBUG] [Thread-12077] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:57:40.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:57:40.549 [DEBUG] [Thread-12077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:57:40.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:57:40.549 [DEBUG] [Thread-12077] [transport.py] [_log()] userauth is OK
2025-11-26T04:57:40.549 [DEBUG] [Thread-12077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:57:40.549 [DEBUG] [Thread-12077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:57:40.550 [DEBUG] [Thread-12077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:57:40.550 [DEBUG] [Thread-12077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:57:40.561 [INFO] [Thread-12077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:57:40.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:57:41.173 [DEBUG] [Thread-12077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:57:41.173 [DEBUG] [Thread-12077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:57:41.173 [DEBUG] [Thread-12077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:57:41.214 [DEBUG] [Thread-12077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:57:41.214 [DEBUG] [Thread-12077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:57:41.216 [DEBUG] [Thread-12077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:57:41.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:57:41.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:57:41.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:57:41.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:57:41.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:57:41.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:57:41.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:57:41.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:57:41.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:57:41.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.123011 -999.00  +18.30  12.78     20   -4.90 1 1 1 1 1   284    0 22.24 -35.91 ----- 12.7 12.8 69.6 14.9 18.1 -25.2 18.1 -24.6 17.8 -23.0 18.0 -24.2
2025-11-26T04:57:41.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:57:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:57:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.123011
2025-11-26T04:57:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:57:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:57:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:57:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:57:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:57:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:57:06', tmtdew=27.08, humidity=14.89, cloud=0.0, wind=12.78, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:57:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:57:41.236 [DEBUG] [Thread-12077] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:57:41.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:57:41.321 [DEBUG] [Thread-12080] [transport.py] [_log()] starting thread (client mode): 0x737c40a0
2025-11-26T04:57:41.321 [DEBUG] [Thread-12080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:57:41.336 [DEBUG] [Thread-12080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:57:41.337 [INFO] [Thread-12080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] client lang: <none>
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] server lang: <none>
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] kex follows: False
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:57:41.344 [DEBUG] [Thread-12080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:57:41.345 [DEBUG] [Thread-12080] [transport.py] [_log()] Compression: none
2025-11-26T04:57:41.345 [DEBUG] [Thread-12080] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:57:41.403 [DEBUG] [Thread-12080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:57:41.403 [DEBUG] [Thread-12080] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:57:41.403 [DEBUG] [Thread-12080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:57:41.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:57:41.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:57:41.464 [DEBUG] [Thread-12080] [transport.py] [_log()] userauth is OK
2025-11-26T04:57:41.464 [DEBUG] [Thread-12080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:57:41.464 [DEBUG] [Thread-12080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:57:41.464 [DEBUG] [Thread-12080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:57:41.464 [DEBUG] [Thread-12080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:57:41.482 [INFO] [Thread-12080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:57:41.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:57:41.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:57:42.293 [DEBUG] [Thread-12080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:57:42.293 [DEBUG] [Thread-12080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:57:42.341 [DEBUG] [Thread-12080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:57:42.341 [DEBUG] [Thread-12080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:57:42.350 [DEBUG] [Thread-12080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:57:42.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:57:42.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:57:42.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:57:42.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:57:42.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:57:42.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:57:42.381 [DEBUG] [Thread-12080] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:57:53.051 [DEBUG] [Thread-12082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:58:08.102 [DEBUG] [Thread-12083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:58:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:58:12.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:58:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:58:13.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 57, 39), 27.16, 14.85, 0.0, 12.33, 18.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:58:13.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:57:39
2025-11-26T04:58:13.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:58:13.384 [DEBUG] [Thread-12084] [transport.py] [_log()] starting thread (client mode): 0x70d75450
2025-11-26T04:58:13.384 [DEBUG] [Thread-12084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:58:13.403 [DEBUG] [Thread-12084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:58:13.403 [INFO] [Thread-12084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:58:13.406 [DEBUG] [Thread-12084] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:58:13.406 [DEBUG] [Thread-12084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:58:13.406 [DEBUG] [Thread-12084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:58:13.406 [DEBUG] [Thread-12084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:58:13.406 [DEBUG] [Thread-12084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:58:13.406 [DEBUG] [Thread-12084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:58:13.406 [DEBUG] [Thread-12084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:58:13.406 [DEBUG] [Thread-12084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:58:13.406 [DEBUG] [Thread-12084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] client lang: <none>
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] server lang: <none>
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] kex follows: False
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] Compression: none
2025-11-26T04:58:13.407 [DEBUG] [Thread-12084] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:58:13.423 [DEBUG] [Thread-12084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:58:13.424 [DEBUG] [Thread-12084] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:58:13.424 [DEBUG] [Thread-12084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:58:13.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:58:13.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:58:13.426 [DEBUG] [Thread-12084] [transport.py] [_log()] userauth is OK
2025-11-26T04:58:13.426 [DEBUG] [Thread-12084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:58:13.427 [DEBUG] [Thread-12084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:58:13.427 [DEBUG] [Thread-12084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:58:13.427 [DEBUG] [Thread-12084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:58:13.444 [INFO] [Thread-12084] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:58:13.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:58:13.874 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:58:13.875 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:58:14.091 [DEBUG] [Thread-12084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:58:14.091 [DEBUG] [Thread-12084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:58:14.092 [DEBUG] [Thread-12084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:58:14.132 [DEBUG] [Thread-12084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:58:14.132 [DEBUG] [Thread-12084] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:58:14.135 [DEBUG] [Thread-12084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:58:14.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:58:14.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:58:14.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:58:14.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:58:14.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:58:14.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:58:14.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:58:14.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:58:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:58:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.123358 -999.00  +18.40  13.98     19   -5.00 1 1 1 1 1   302    0 21.99 -37.76 ----- 12.4 14.0 64.8 15.6 18.1 -25.1 18.0 -24.4 17.8 -23.1 18.0 -24.1
2025-11-26T04:58:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:58:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:58:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.123358
2025-11-26T04:58:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:58:14.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:58:14.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:58:14.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:58:14.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:58:14.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:57:39', tmtdew=27.16, humidity=14.85, cloud=0.0, wind=12.33, temperature=18.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:57:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:58:14.164 [DEBUG] [Thread-12084] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:58:14.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:58:14.259 [DEBUG] [Thread-12087] [transport.py] [_log()] starting thread (client mode): 0x7374eb60
2025-11-26T04:58:14.259 [DEBUG] [Thread-12087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:58:14.274 [DEBUG] [Thread-12087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:58:14.274 [INFO] [Thread-12087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:58:14.282 [DEBUG] [Thread-12087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:58:14.282 [DEBUG] [Thread-12087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:58:14.282 [DEBUG] [Thread-12087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:58:14.282 [DEBUG] [Thread-12087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:58:14.282 [DEBUG] [Thread-12087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:58:14.282 [DEBUG] [Thread-12087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:58:14.282 [DEBUG] [Thread-12087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:58:14.282 [DEBUG] [Thread-12087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:58:14.282 [DEBUG] [Thread-12087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] client lang: <none>
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] server lang: <none>
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] kex follows: False
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] Compression: none
2025-11-26T04:58:14.283 [DEBUG] [Thread-12087] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:58:14.341 [DEBUG] [Thread-12087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:58:14.342 [DEBUG] [Thread-12087] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:58:14.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:58:14.343 [DEBUG] [Thread-12087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:58:14.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:58:14.397 [DEBUG] [Thread-12087] [transport.py] [_log()] userauth is OK
2025-11-26T04:58:14.398 [DEBUG] [Thread-12087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:58:14.398 [DEBUG] [Thread-12087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:58:14.398 [DEBUG] [Thread-12087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:58:14.398 [DEBUG] [Thread-12087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:58:14.417 [INFO] [Thread-12087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:58:14.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:58:14.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:58:15.263 [DEBUG] [Thread-12087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:58:15.263 [DEBUG] [Thread-12087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:58:15.311 [DEBUG] [Thread-12087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:58:15.311 [DEBUG] [Thread-12087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:58:15.321 [DEBUG] [Thread-12087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:58:15.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:58:15.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:58:15.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:58:15.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:58:15.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:58:15.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:58:15.362 [DEBUG] [Thread-12087] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:58:23.132 [DEBUG] [Thread-12089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:58:31.690 [DEBUG] [Thread-12090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:58:38.179 [DEBUG] [Thread-12091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:58:45.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:58:45.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:58:45.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:58:46.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 58, 11), 27.14, 14.87, 0.0, 12.55, 18.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:58:46.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:58:11
2025-11-26T04:58:46.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:58:46.359 [DEBUG] [Thread-12092] [transport.py] [_log()] starting thread (client mode): 0x7374e230
2025-11-26T04:58:46.359 [DEBUG] [Thread-12092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:58:46.380 [DEBUG] [Thread-12092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:58:46.380 [INFO] [Thread-12092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:58:46.383 [DEBUG] [Thread-12092] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:58:46.383 [DEBUG] [Thread-12092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:58:46.383 [DEBUG] [Thread-12092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] client lang: <none>
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] server lang: <none>
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] kex follows: False
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] Compression: none
2025-11-26T04:58:46.384 [DEBUG] [Thread-12092] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:58:46.401 [DEBUG] [Thread-12092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:58:46.401 [DEBUG] [Thread-12092] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:58:46.402 [DEBUG] [Thread-12092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:58:46.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:58:46.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:58:46.403 [DEBUG] [Thread-12092] [transport.py] [_log()] userauth is OK
2025-11-26T04:58:46.403 [DEBUG] [Thread-12092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:58:46.403 [DEBUG] [Thread-12092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:58:46.403 [DEBUG] [Thread-12092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:58:46.403 [DEBUG] [Thread-12092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:58:46.412 [INFO] [Thread-12092] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:58:46.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:58:47.042 [DEBUG] [Thread-12092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:58:47.042 [DEBUG] [Thread-12092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:58:47.043 [DEBUG] [Thread-12092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:58:47.083 [DEBUG] [Thread-12092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:58:47.083 [DEBUG] [Thread-12092] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:58:47.086 [DEBUG] [Thread-12092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:58:47.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:58:47.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:58:47.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:58:47.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:58:47.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:58:47.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:58:47.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:58:47.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:58:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:58:47.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.123706 -999.00  +18.30  11.81     19   -5.00 1 1 1 1 1   321    0 22.23 -39.16 ----- 13.1 11.8 58.0 14.7 18.1 -25.1 18.0 -24.4 17.8 -23.3 18.0 -24.2
2025-11-26T04:58:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:58:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:58:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.123706
2025-11-26T04:58:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:58:47.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:58:47.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:58:47.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:58:47.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:58:47.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:58:11', tmtdew=27.14, humidity=14.87, cloud=0.0, wind=12.55, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:58:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:58:47.111 [DEBUG] [Thread-12092] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:58:47.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:58:47.212 [DEBUG] [Thread-12095] [transport.py] [_log()] starting thread (client mode): 0x737c5180
2025-11-26T04:58:47.212 [DEBUG] [Thread-12095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:58:47.226 [DEBUG] [Thread-12095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:58:47.226 [INFO] [Thread-12095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:58:47.235 [DEBUG] [Thread-12095] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:58:47.235 [DEBUG] [Thread-12095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:58:47.235 [DEBUG] [Thread-12095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:58:47.235 [DEBUG] [Thread-12095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:58:47.235 [DEBUG] [Thread-12095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:58:47.235 [DEBUG] [Thread-12095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:58:47.235 [DEBUG] [Thread-12095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] client lang: <none>
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] server lang: <none>
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] kex follows: False
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:58:47.236 [DEBUG] [Thread-12095] [transport.py] [_log()] Compression: none
2025-11-26T04:58:47.237 [DEBUG] [Thread-12095] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:58:47.295 [DEBUG] [Thread-12095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:58:47.296 [DEBUG] [Thread-12095] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:58:47.296 [DEBUG] [Thread-12095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:58:47.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:58:47.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:58:47.354 [DEBUG] [Thread-12095] [transport.py] [_log()] userauth is OK
2025-11-26T04:58:47.354 [DEBUG] [Thread-12095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:58:47.354 [DEBUG] [Thread-12095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:58:47.354 [DEBUG] [Thread-12095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:58:47.354 [DEBUG] [Thread-12095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:58:47.373 [INFO] [Thread-12095] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:58:47.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:58:47.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:58:48.220 [DEBUG] [Thread-12095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:58:48.221 [DEBUG] [Thread-12095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:58:48.269 [DEBUG] [Thread-12095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:58:48.269 [DEBUG] [Thread-12095] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:58:48.278 [DEBUG] [Thread-12095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:58:48.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:58:48.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:58:48.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:58:48.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:58:48.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:58:48.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:58:48.315 [DEBUG] [Thread-12095] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:58:53.223 [DEBUG] [Thread-12097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:59:08.277 [DEBUG] [Thread-12098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:59:14.081 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:59:14.082 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:59:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:59:18.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:59:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:59:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 58, 43), 27.2, 14.85, 0.0, 11.95, 18.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:59:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:58:43
2025-11-26T04:59:19.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:59:19.315 [DEBUG] [Thread-12099] [transport.py] [_log()] starting thread (client mode): 0x70de5750
2025-11-26T04:59:19.315 [DEBUG] [Thread-12099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:59:19.335 [DEBUG] [Thread-12099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:59:19.336 [INFO] [Thread-12099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] client lang: <none>
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] server lang: <none>
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] kex follows: False
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] Compression: none
2025-11-26T04:59:19.339 [DEBUG] [Thread-12099] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:59:19.355 [DEBUG] [Thread-12099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:59:19.355 [DEBUG] [Thread-12099] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:59:19.355 [DEBUG] [Thread-12099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:59:19.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:59:19.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:59:19.356 [DEBUG] [Thread-12099] [transport.py] [_log()] userauth is OK
2025-11-26T04:59:19.356 [DEBUG] [Thread-12099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:59:19.356 [DEBUG] [Thread-12099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:59:19.356 [DEBUG] [Thread-12099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:59:19.356 [DEBUG] [Thread-12099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:59:19.367 [INFO] [Thread-12099] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:59:19.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:59:19.995 [DEBUG] [Thread-12099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:59:19.995 [DEBUG] [Thread-12099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:59:19.996 [DEBUG] [Thread-12099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:59:20.036 [DEBUG] [Thread-12099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:59:20.037 [DEBUG] [Thread-12099] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:59:20.040 [DEBUG] [Thread-12099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:59:20.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:59:20.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:59:20.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:59:20.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:59:20.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:59:20.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:59:20.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:59:20.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:59:20.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:59:20.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.124053 -999.00  +18.30  11.31     19   -5.00 1 1 1 1 1   340    0 22.00 -37.93 ----- 11.5 11.3 60.0 15.3 18.1 -25.2 18.0 -24.5 17.8 -23.2 18.1 -24.1
2025-11-26T04:59:20.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:59:20.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:59:20.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.124053
2025-11-26T04:59:20.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:59:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:59:20.067 [DEBUG] [Thread-12099] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:59:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:59:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:59:20.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:59:20.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:58:43', tmtdew=27.2, humidity=14.85, cloud=0.0, wind=11.95, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:58:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:59:20.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:59:20.162 [DEBUG] [Thread-12102] [transport.py] [_log()] starting thread (client mode): 0x7374ca00
2025-11-26T04:59:20.162 [DEBUG] [Thread-12102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:59:20.176 [DEBUG] [Thread-12102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:59:20.176 [INFO] [Thread-12102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] client lang: <none>
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] server lang: <none>
2025-11-26T04:59:20.184 [DEBUG] [Thread-12102] [transport.py] [_log()] kex follows: False
2025-11-26T04:59:20.185 [DEBUG] [Thread-12102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:59:20.185 [DEBUG] [Thread-12102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:59:20.185 [DEBUG] [Thread-12102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:59:20.185 [DEBUG] [Thread-12102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:59:20.185 [DEBUG] [Thread-12102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:59:20.185 [DEBUG] [Thread-12102] [transport.py] [_log()] Compression: none
2025-11-26T04:59:20.185 [DEBUG] [Thread-12102] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:59:20.242 [DEBUG] [Thread-12102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:59:20.242 [DEBUG] [Thread-12102] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:59:20.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:59:20.243 [DEBUG] [Thread-12102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:59:20.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:59:20.305 [DEBUG] [Thread-12102] [transport.py] [_log()] userauth is OK
2025-11-26T04:59:20.306 [DEBUG] [Thread-12102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:59:20.306 [DEBUG] [Thread-12102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:59:20.306 [DEBUG] [Thread-12102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:59:20.306 [DEBUG] [Thread-12102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:59:20.328 [INFO] [Thread-12102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:59:20.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:59:20.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:59:21.157 [DEBUG] [Thread-12102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:59:21.158 [DEBUG] [Thread-12102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:59:21.206 [DEBUG] [Thread-12102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:59:21.206 [DEBUG] [Thread-12102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:59:21.215 [DEBUG] [Thread-12102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:59:21.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:59:21.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')
2025-11-26T04:59:21.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T04:59:21.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:59:21.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:59:21.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:59:21.258 [DEBUG] [Thread-12102] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:59:23.315 [DEBUG] [Thread-12104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:59:31.770 [DEBUG] [Thread-12105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:59:38.362 [DEBUG] [Thread-12106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:59:51.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T04:59:51.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T04:59:51.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T04:59:51.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 4, 59, 16), 27.19, 14.87, 0.0, 12.67, 18.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T04:59:51.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 04:59:16
2025-11-26T04:59:52.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T04:59:52.215 [DEBUG] [Thread-12107] [transport.py] [_log()] starting thread (client mode): 0x7374f1f0
2025-11-26T04:59:52.215 [DEBUG] [Thread-12107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:59:52.237 [DEBUG] [Thread-12107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T04:59:52.237 [INFO] [Thread-12107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T04:59:52.240 [DEBUG] [Thread-12107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:59:52.240 [DEBUG] [Thread-12107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T04:59:52.240 [DEBUG] [Thread-12107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:59:52.240 [DEBUG] [Thread-12107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:59:52.240 [DEBUG] [Thread-12107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:59:52.240 [DEBUG] [Thread-12107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:59:52.240 [DEBUG] [Thread-12107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] client lang: <none>
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] server lang: <none>
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] kex follows: False
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] Compression: none
2025-11-26T04:59:52.241 [DEBUG] [Thread-12107] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:59:52.259 [DEBUG] [Thread-12107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:59:52.260 [DEBUG] [Thread-12107] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:59:52.260 [DEBUG] [Thread-12107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T04:59:52.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T04:59:52.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:59:52.262 [DEBUG] [Thread-12107] [transport.py] [_log()] userauth is OK
2025-11-26T04:59:52.263 [DEBUG] [Thread-12107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:59:52.263 [DEBUG] [Thread-12107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:59:52.263 [DEBUG] [Thread-12107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T04:59:52.263 [DEBUG] [Thread-12107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:59:52.287 [INFO] [Thread-12107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:59:52.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:59:52.916 [DEBUG] [Thread-12107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:59:52.917 [DEBUG] [Thread-12107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:59:52.917 [DEBUG] [Thread-12107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T04:59:52.958 [DEBUG] [Thread-12107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:59:52.959 [DEBUG] [Thread-12107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:59:52.961 [DEBUG] [Thread-12107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:59:52.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:59:52.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T04:59:52.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T04:59:52.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T04:59:52.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:59:52.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T04:59:52.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:59:52.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:59:52.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T04:59:52.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.124400 -999.00  +18.30  12.82     20   -5.00 1 1 1 1 1   359    0 22.17 -35.43 ----- 11.8 12.8 60.6 13.9 18.1 -25.2 18.0 -24.4 17.8 -23.2 18.0 -24.2
2025-11-26T04:59:52.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T04:59:52.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T04:59:52.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.124400
2025-11-26T04:59:52.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T04:59:52.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T04:59:52.987 [DEBUG] [Thread-12107] [transport.py] [_log()] EOF in transport thread
2025-11-26T04:59:52.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T04:59:52.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T04:59:52.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T04:59:52.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T04:59:16', tmtdew=27.19, humidity=14.87, cloud=0.0, wind=12.67, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:59:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T04:59:53.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T04:59:53.084 [DEBUG] [Thread-12110] [transport.py] [_log()] starting thread (client mode): 0x70d03f40
2025-11-26T04:59:53.084 [DEBUG] [Thread-12110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T04:59:53.097 [DEBUG] [Thread-12110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T04:59:53.098 [INFO] [Thread-12110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] client lang: <none>
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] server lang: <none>
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] kex follows: False
2025-11-26T04:59:53.106 [DEBUG] [Thread-12110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T04:59:53.107 [DEBUG] [Thread-12110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T04:59:53.107 [DEBUG] [Thread-12110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T04:59:53.107 [DEBUG] [Thread-12110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T04:59:53.107 [DEBUG] [Thread-12110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T04:59:53.107 [DEBUG] [Thread-12110] [transport.py] [_log()] Compression: none
2025-11-26T04:59:53.107 [DEBUG] [Thread-12110] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T04:59:53.170 [DEBUG] [Thread-12110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T04:59:53.170 [DEBUG] [Thread-12110] [transport.py] [_log()] Switch to new keys ...
2025-11-26T04:59:53.171 [DEBUG] [Thread-12110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T04:59:53.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T04:59:53.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T04:59:53.226 [DEBUG] [Thread-12110] [transport.py] [_log()] userauth is OK
2025-11-26T04:59:53.226 [DEBUG] [Thread-12110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T04:59:53.227 [DEBUG] [Thread-12110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T04:59:53.227 [DEBUG] [Thread-12110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T04:59:53.227 [DEBUG] [Thread-12110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T04:59:53.246 [INFO] [Thread-12110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T04:59:53.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T04:59:53.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T04:59:53.397 [DEBUG] [Thread-12112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T04:59:54.093 [DEBUG] [Thread-12110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T04:59:54.094 [DEBUG] [Thread-12110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T04:59:54.142 [DEBUG] [Thread-12110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T04:59:54.142 [DEBUG] [Thread-12110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T04:59:54.151 [DEBUG] [Thread-12110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T04:59:54.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T04:59:54.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T04:59: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
2025-11-26T04:59:54.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T04:59:54.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T04:59:54.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T04:59:54.188 [DEBUG] [Thread-12110] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:00:08.457 [DEBUG] [Thread-12113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:00:14.302 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:00:14.303 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:00:23.492 [DEBUG] [Thread-12114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:00:24.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:00:24.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:00:24.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:00:24.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 0, 21), 27.15, 14.87, 0.0, 12.09, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:00:24.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:00:21
2025-11-26T05:00:24.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:00:25.139 [DEBUG] [Thread-12115] [transport.py] [_log()] starting thread (client mode): 0x70d00b20
2025-11-26T05:00:25.139 [DEBUG] [Thread-12115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:00:25.162 [DEBUG] [Thread-12115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:00:25.162 [INFO] [Thread-12115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] client lang: <none>
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] server lang: <none>
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] kex follows: False
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:00:25.166 [DEBUG] [Thread-12115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:00:25.167 [DEBUG] [Thread-12115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:00:25.167 [DEBUG] [Thread-12115] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:00:25.167 [DEBUG] [Thread-12115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:00:25.167 [DEBUG] [Thread-12115] [transport.py] [_log()] Compression: none
2025-11-26T05:00:25.167 [DEBUG] [Thread-12115] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:00:25.187 [DEBUG] [Thread-12115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:00:25.188 [DEBUG] [Thread-12115] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:00:25.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:00:25.189 [DEBUG] [Thread-12115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:00:25.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:00:25.191 [DEBUG] [Thread-12115] [transport.py] [_log()] userauth is OK
2025-11-26T05:00:25.191 [DEBUG] [Thread-12115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:00:25.191 [DEBUG] [Thread-12115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:00:25.192 [DEBUG] [Thread-12115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:00:25.192 [DEBUG] [Thread-12115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:00:25.228 [INFO] [Thread-12115] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:00:25.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:00:25.870 [DEBUG] [Thread-12115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:00:25.871 [DEBUG] [Thread-12115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:00:25.871 [DEBUG] [Thread-12115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:00:25.912 [DEBUG] [Thread-12115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:00:25.912 [DEBUG] [Thread-12115] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:00:25.916 [DEBUG] [Thread-12115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:00:25.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:00:25.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:00:25.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:00:25.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:00:25.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:00:25.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:00:25.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:00:25.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:00:25.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:00:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.124747 -999.00  +18.30  11.18     19   -5.10 1 1 1 1 1   379    0 22.46 -36.16 ----- 11.7 11.2 57.6 13.0 18.1 -25.2 18.0 -24.6 17.8 -23.2 18.0 -24.3
2025-11-26T05:00:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:00:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:00:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.124747
2025-11-26T05:00:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:00:25.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:00:25.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:00:25.945 [DEBUG] [Thread-12115] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:00:25.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:00:25.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:00:25.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:00:21', tmtdew=27.15, humidity=14.87, cloud=0.0, wind=12.09, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T02:59:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:00:26.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:00:26.043 [DEBUG] [Thread-12118] [transport.py] [_log()] starting thread (client mode): 0x7374d4e0
2025-11-26T05:00:26.043 [DEBUG] [Thread-12118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:00:26.057 [DEBUG] [Thread-12118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:00:26.057 [INFO] [Thread-12118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:00:26.065 [DEBUG] [Thread-12118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:00:26.065 [DEBUG] [Thread-12118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:00:26.065 [DEBUG] [Thread-12118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:00:26.065 [DEBUG] [Thread-12118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:00:26.065 [DEBUG] [Thread-12118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:00:26.065 [DEBUG] [Thread-12118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:00:26.065 [DEBUG] [Thread-12118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:00:26.065 [DEBUG] [Thread-12118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:00:26.065 [DEBUG] [Thread-12118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] client lang: <none>
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] server lang: <none>
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] kex follows: False
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] Compression: none
2025-11-26T05:00:26.066 [DEBUG] [Thread-12118] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:00:26.123 [DEBUG] [Thread-12118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:00:26.123 [DEBUG] [Thread-12118] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:00:26.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:00:26.124 [DEBUG] [Thread-12118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:00:26.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:00:26.186 [DEBUG] [Thread-12118] [transport.py] [_log()] userauth is OK
2025-11-26T05:00:26.186 [DEBUG] [Thread-12118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:00:26.186 [DEBUG] [Thread-12118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:00:26.187 [DEBUG] [Thread-12118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:00:26.187 [DEBUG] [Thread-12118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:00:26.210 [INFO] [Thread-12118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:00:26.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:00:26.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:00:27.041 [DEBUG] [Thread-12118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:00:27.041 [DEBUG] [Thread-12118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:00:27.089 [DEBUG] [Thread-12118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:00:27.089 [DEBUG] [Thread-12118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:00:27.098 [DEBUG] [Thread-12118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:00:27.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:00:27.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:00:27.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:00:27.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:00:27.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:00:27.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:00:27.135 [DEBUG] [Thread-12118] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:00:31.842 [DEBUG] [Thread-12120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:00:38.527 [DEBUG] [Thread-12121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:00:53.579 [DEBUG] [Thread-12122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:00:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:00:57.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:00:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:00:57.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 0, 53), 27.06, 14.85, 0.0, 12.63, 17.97, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:00:57.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:00:53
2025-11-26T05:00:57.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:00:58.089 [DEBUG] [Thread-12123] [transport.py] [_log()] starting thread (client mode): 0x70d7e680
2025-11-26T05:00:58.089 [DEBUG] [Thread-12123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:00:58.110 [DEBUG] [Thread-12123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:00:58.110 [INFO] [Thread-12123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:00:58.113 [DEBUG] [Thread-12123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:00:58.113 [DEBUG] [Thread-12123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:00:58.113 [DEBUG] [Thread-12123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] client lang: <none>
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] server lang: <none>
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] kex follows: False
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:00:58.114 [DEBUG] [Thread-12123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:00:58.115 [DEBUG] [Thread-12123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:00:58.115 [DEBUG] [Thread-12123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:00:58.115 [DEBUG] [Thread-12123] [transport.py] [_log()] Compression: none
2025-11-26T05:00:58.115 [DEBUG] [Thread-12123] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:00:58.134 [DEBUG] [Thread-12123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:00:58.134 [DEBUG] [Thread-12123] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:00:58.135 [DEBUG] [Thread-12123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:00:58.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:00:58.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:00:58.138 [DEBUG] [Thread-12123] [transport.py] [_log()] userauth is OK
2025-11-26T05:00:58.138 [DEBUG] [Thread-12123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:00:58.138 [DEBUG] [Thread-12123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:00:58.138 [DEBUG] [Thread-12123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:00:58.138 [DEBUG] [Thread-12123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:00:58.160 [INFO] [Thread-12123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:00:58.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:00:58.841 [DEBUG] [Thread-12123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:00:58.841 [DEBUG] [Thread-12123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:00:58.842 [DEBUG] [Thread-12123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:00:58.882 [DEBUG] [Thread-12123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:00:58.882 [DEBUG] [Thread-12123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:00:58.885 [DEBUG] [Thread-12123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:00:58.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:00:58.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:00:58.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:00:58.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:00:58.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:00:58.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:00:58.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:00:58.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:00:58.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:00:58.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.125442 -999.00  +18.10  10.38     20   -5.00 1 1 1 1 1   420    0 22.26 -32.19 ----- 9.5 10.4 60.4 11.5 18.0 -25.3 18.0 -24.4 17.7 -23.1 17.9 -24.2
2025-11-26T05:00:58.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:00:58.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:00:58.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.125442
2025-11-26T05:00:58.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:00:58.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:00:58.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:00:58.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:00:58.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:00:58.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:00:53', tmtdew=27.06, humidity=14.85, cloud=0.0, wind=12.63, temperature=17.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:00:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:00:58.914 [DEBUG] [Thread-12123] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:00:58.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:00:59.009 [DEBUG] [Thread-12126] [transport.py] [_log()] starting thread (client mode): 0x70d7d630
2025-11-26T05:00:59.009 [DEBUG] [Thread-12126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:00:59.023 [DEBUG] [Thread-12126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:00:59.024 [INFO] [Thread-12126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:00:59.031 [DEBUG] [Thread-12126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] client lang: <none>
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] server lang: <none>
2025-11-26T05:00:59.032 [DEBUG] [Thread-12126] [transport.py] [_log()] kex follows: False
2025-11-26T05:00:59.033 [DEBUG] [Thread-12126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:00:59.033 [DEBUG] [Thread-12126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:00:59.033 [DEBUG] [Thread-12126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:00:59.033 [DEBUG] [Thread-12126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:00:59.033 [DEBUG] [Thread-12126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:00:59.033 [DEBUG] [Thread-12126] [transport.py] [_log()] Compression: none
2025-11-26T05:00:59.033 [DEBUG] [Thread-12126] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:00:59.091 [DEBUG] [Thread-12126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:00:59.091 [DEBUG] [Thread-12126] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:00:59.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:00:59.092 [DEBUG] [Thread-12126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:00:59.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:00:59.147 [DEBUG] [Thread-12126] [transport.py] [_log()] userauth is OK
2025-11-26T05:00:59.147 [DEBUG] [Thread-12126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:00:59.147 [DEBUG] [Thread-12126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:00:59.147 [DEBUG] [Thread-12126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:00:59.147 [DEBUG] [Thread-12126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:00:59.166 [INFO] [Thread-12126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:00:59.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:00:59.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:00:59.981 [DEBUG] [Thread-12126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:00:59.981 [DEBUG] [Thread-12126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:01:00.028 [DEBUG] [Thread-12126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:01:00.028 [DEBUG] [Thread-12126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:01:00.037 [DEBUG] [Thread-12126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:01:00.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:01:00.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:01:00.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:01:00.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:01:00.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:01:00.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:01:00.071 [DEBUG] [Thread-12126] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:01:08.616 [DEBUG] [Thread-12128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:01:14.520 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:01:14.521 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:01:23.669 [DEBUG] [Thread-12129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:01:30.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:01:30.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:01:30.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:01:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 1, 25), 27.08, 14.84, 0.0, 12.48, 18.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:01:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:01:25
2025-11-26T05:01:30.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:01:31.011 [DEBUG] [Thread-12130] [transport.py] [_log()] starting thread (client mode): 0x70d7c640
2025-11-26T05:01:31.011 [DEBUG] [Thread-12130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:01:31.032 [DEBUG] [Thread-12130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:01:31.033 [INFO] [Thread-12130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:01:31.036 [DEBUG] [Thread-12130] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:01:31.036 [DEBUG] [Thread-12130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:01:31.036 [DEBUG] [Thread-12130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:01:31.036 [DEBUG] [Thread-12130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:01:31.036 [DEBUG] [Thread-12130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:01:31.036 [DEBUG] [Thread-12130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:01:31.036 [DEBUG] [Thread-12130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] client lang: <none>
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] server lang: <none>
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] kex follows: False
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] Compression: none
2025-11-26T05:01:31.037 [DEBUG] [Thread-12130] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:01:31.054 [DEBUG] [Thread-12130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:01:31.055 [DEBUG] [Thread-12130] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:01:31.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:01:31.056 [DEBUG] [Thread-12130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:01:31.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:01:31.058 [DEBUG] [Thread-12130] [transport.py] [_log()] userauth is OK
2025-11-26T05:01:31.059 [DEBUG] [Thread-12130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:01:31.059 [DEBUG] [Thread-12130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:01:31.059 [DEBUG] [Thread-12130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:01:31.059 [DEBUG] [Thread-12130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:01:31.083 [INFO] [Thread-12130] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:01:31.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:01:31.717 [DEBUG] [Thread-12130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:01:31.717 [DEBUG] [Thread-12130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:01:31.717 [DEBUG] [Thread-12130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:01:31.758 [DEBUG] [Thread-12130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:01:31.758 [DEBUG] [Thread-12130] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:01:31.762 [DEBUG] [Thread-12130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:01:31.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:01:31.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:01:31.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:01:31.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:01:31.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:01:31.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:01:31.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:01:31.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:01:31.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:01:31.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.125789 -999.00  +18.10  10.06     20   -5.10 1 1 1 1 1   441    0 22.12 -35.01 ----- 10.4 10.1 61.4 12.6 18.0 -25.1 18.0 -24.5 17.7 -23.3 17.9 -24.1
2025-11-26T05:01:31.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:01:31.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:01:31.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.125789
2025-11-26T05:01:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:01:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:01:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:01:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:01:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:01:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:01:25', tmtdew=27.08, humidity=14.84, cloud=0.0, wind=12.48, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:01:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:01:31.789 [DEBUG] [Thread-12130] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:01:31.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:01:31.883 [DEBUG] [Thread-12133] [transport.py] [_log()] starting thread (client mode): 0x7374e6b0
2025-11-26T05:01:31.883 [DEBUG] [Thread-12133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:01:31.898 [DEBUG] [Thread-12133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:01:31.898 [INFO] [Thread-12133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] client lang: <none>
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] server lang: <none>
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] kex follows: False
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] Compression: none
2025-11-26T05:01:31.906 [DEBUG] [Thread-12133] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:01:31.912 [DEBUG] [Thread-12135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:01:31.963 [DEBUG] [Thread-12133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:01:31.964 [DEBUG] [Thread-12133] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:01:31.964 [DEBUG] [Thread-12133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:01:31.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:01:31.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:01:32.019 [DEBUG] [Thread-12133] [transport.py] [_log()] userauth is OK
2025-11-26T05:01:32.019 [DEBUG] [Thread-12133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:01:32.019 [DEBUG] [Thread-12133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:01:32.020 [DEBUG] [Thread-12133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:01:32.020 [DEBUG] [Thread-12133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:01:32.044 [INFO] [Thread-12133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:01:32.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:01:32.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:01:32.894 [DEBUG] [Thread-12133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:01:32.895 [DEBUG] [Thread-12133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:01:32.942 [DEBUG] [Thread-12133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:01:32.943 [DEBUG] [Thread-12133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:01:32.952 [DEBUG] [Thread-12133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:01:32.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:01:32.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:01:32.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:01:32.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:01:32.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:01:32.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:01:32.989 [DEBUG] [Thread-12133] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:01:38.700 [DEBUG] [Thread-12136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:01:53.756 [DEBUG] [Thread-12137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:02:03.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:02:03.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:02:03.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:02:03.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 1, 57), 27.01, 14.85, 0.0, 12.25, 17.89, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:02:03.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:01:57
2025-11-26T05:02:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:02:03.994 [DEBUG] [Thread-12138] [transport.py] [_log()] starting thread (client mode): 0x70d7c280
2025-11-26T05:02:03.994 [DEBUG] [Thread-12138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:02:04.017 [DEBUG] [Thread-12138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:02:04.017 [INFO] [Thread-12138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:02:04.020 [DEBUG] [Thread-12138] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:02:04.020 [DEBUG] [Thread-12138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:02:04.020 [DEBUG] [Thread-12138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:02:04.020 [DEBUG] [Thread-12138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:02:04.020 [DEBUG] [Thread-12138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] client lang: <none>
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] server lang: <none>
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] kex follows: False
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] Compression: none
2025-11-26T05:02:04.021 [DEBUG] [Thread-12138] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:02:04.036 [DEBUG] [Thread-12138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:02:04.036 [DEBUG] [Thread-12138] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:02:04.036 [DEBUG] [Thread-12138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:02:04.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:02:04.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:02:04.037 [DEBUG] [Thread-12138] [transport.py] [_log()] userauth is OK
2025-11-26T05:02:04.037 [DEBUG] [Thread-12138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:02:04.037 [DEBUG] [Thread-12138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:02:04.037 [DEBUG] [Thread-12138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:02:04.037 [DEBUG] [Thread-12138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:02:04.047 [INFO] [Thread-12138] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:02:04.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:02:04.702 [DEBUG] [Thread-12138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:02:04.702 [DEBUG] [Thread-12138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:02:04.702 [DEBUG] [Thread-12138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:02:04.743 [DEBUG] [Thread-12138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:02:04.743 [DEBUG] [Thread-12138] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:02:04.745 [DEBUG] [Thread-12138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:02:04.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:02:04.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:02:04.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:02:04.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:02:04.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:02:04.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:02:04.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.126136 -999.00  +18.00  11.08     20   -5.10 1 1 1 1 1   461    0 21.82 -38.03 NA 10.7 11.1 58.2 12.2 18.0 -25.2 18.0 -24.5 17.7 -23.2 17.9 -24.3
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.126136
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:02:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:01:57', tmtdew=27.01, humidity=14.85, cloud=0.0, wind=12.25, temperature=17.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:01:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:02:04.764 [DEBUG] [Thread-12138] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:02:04.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:02:04.851 [DEBUG] [Thread-12141] [transport.py] [_log()] starting thread (client mode): 0x70d29d50
2025-11-26T05:02:04.851 [DEBUG] [Thread-12141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:02:04.865 [DEBUG] [Thread-12141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:02:04.866 [INFO] [Thread-12141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] client lang: <none>
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] server lang: <none>
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] kex follows: False
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:02:04.873 [DEBUG] [Thread-12141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:02:04.874 [DEBUG] [Thread-12141] [transport.py] [_log()] Compression: none
2025-11-26T05:02:04.874 [DEBUG] [Thread-12141] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:02:04.933 [DEBUG] [Thread-12141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:02:04.933 [DEBUG] [Thread-12141] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:02:04.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:02:04.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:02:04.933 [DEBUG] [Thread-12141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:02:04.991 [DEBUG] [Thread-12141] [transport.py] [_log()] userauth is OK
2025-11-26T05:02:04.991 [DEBUG] [Thread-12141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:02:04.991 [DEBUG] [Thread-12141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:02:04.991 [DEBUG] [Thread-12141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:02:04.991 [DEBUG] [Thread-12141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:02:05.009 [INFO] [Thread-12141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:02:05.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:02:05.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:02:05.849 [DEBUG] [Thread-12141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:02:05.849 [DEBUG] [Thread-12141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:02:05.897 [DEBUG] [Thread-12141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:02:05.897 [DEBUG] [Thread-12141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:02:05.905 [DEBUG] [Thread-12141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:02:05.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:02: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')
2025-11-26T05:02:05.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:02:05.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:02:05.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:02:05.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:02:05.936 [DEBUG] [Thread-12141] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:02:08.793 [DEBUG] [Thread-12143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:02:14.731 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:02:14.732 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:02:23.853 [DEBUG] [Thread-12144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:02:31.986 [DEBUG] [Thread-12145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:02:35.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:02:35.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:02:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:02:36.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 2, 29), 27.02, 14.85, 0.0, 11.84, 17.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:02:36.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:02:29
2025-11-26T05:02:36.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:02:36.858 [DEBUG] [Thread-12146] [transport.py] [_log()] starting thread (client mode): 0x7374e470
2025-11-26T05:02:36.858 [DEBUG] [Thread-12146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:02:36.878 [DEBUG] [Thread-12146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:02:36.878 [INFO] [Thread-12146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] client lang: <none>
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] server lang: <none>
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] kex follows: False
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:02:36.881 [DEBUG] [Thread-12146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:02:36.882 [DEBUG] [Thread-12146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:02:36.882 [DEBUG] [Thread-12146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:02:36.882 [DEBUG] [Thread-12146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:02:36.882 [DEBUG] [Thread-12146] [transport.py] [_log()] Compression: none
2025-11-26T05:02:36.882 [DEBUG] [Thread-12146] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:02:36.901 [DEBUG] [Thread-12146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:02:36.901 [DEBUG] [Thread-12146] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:02:36.902 [DEBUG] [Thread-12146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:02:36.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:02:36.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:02:36.904 [DEBUG] [Thread-12146] [transport.py] [_log()] userauth is OK
2025-11-26T05:02:36.904 [DEBUG] [Thread-12146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:02:36.904 [DEBUG] [Thread-12146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:02:36.904 [DEBUG] [Thread-12146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:02:36.904 [DEBUG] [Thread-12146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:02:36.941 [INFO] [Thread-12146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:02:36.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:02:37.569 [DEBUG] [Thread-12146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:02:37.569 [DEBUG] [Thread-12146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:02:37.570 [DEBUG] [Thread-12146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:02:37.610 [DEBUG] [Thread-12146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:02:37.610 [DEBUG] [Thread-12146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:02:37.614 [DEBUG] [Thread-12146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:02:37.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:02:37.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:02:37.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:02:37.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:02:37.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:02:37.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:02:37.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:02:37.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:02:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:02:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.126483 -999.00  +17.90   8.76     20   -5.10 1 1 1 1 1   482    0 22.30 -36.32 NA 11.1 8.8 61.8 12.2 18.0 -25.2 18.0 -24.5 17.6 -23.3 17.9 -24.2
2025-11-26T05:02:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:02:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:02:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.126483
2025-11-26T05:02:37.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:02:37.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:02:37.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:02:37.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:02:37.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:02:37.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:02:29', tmtdew=27.02, humidity=14.85, cloud=0.0, wind=11.84, temperature=17.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:02:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:02:37.641 [DEBUG] [Thread-12146] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:02:37.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:02:37.737 [DEBUG] [Thread-12149] [transport.py] [_log()] starting thread (client mode): 0x70d03310
2025-11-26T05:02:37.737 [DEBUG] [Thread-12149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:02:37.751 [DEBUG] [Thread-12149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:02:37.751 [INFO] [Thread-12149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:02:37.759 [DEBUG] [Thread-12149] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:02:37.759 [DEBUG] [Thread-12149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:02:37.759 [DEBUG] [Thread-12149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:02:37.759 [DEBUG] [Thread-12149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:02:37.759 [DEBUG] [Thread-12149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:02:37.759 [DEBUG] [Thread-12149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] client lang: <none>
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] server lang: <none>
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] kex follows: False
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] Compression: none
2025-11-26T05:02:37.760 [DEBUG] [Thread-12149] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:02:37.818 [DEBUG] [Thread-12149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:02:37.819 [DEBUG] [Thread-12149] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:02:37.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:02:37.820 [DEBUG] [Thread-12149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:02:37.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:02:37.875 [DEBUG] [Thread-12149] [transport.py] [_log()] userauth is OK
2025-11-26T05:02:37.876 [DEBUG] [Thread-12149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:02:37.876 [DEBUG] [Thread-12149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:02:37.876 [DEBUG] [Thread-12149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:02:37.876 [DEBUG] [Thread-12149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:02:37.890 [INFO] [Thread-12149] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:02:37.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:02:37.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:02:38.795 [DEBUG] [Thread-12149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:02:38.795 [DEBUG] [Thread-12149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:02:38.843 [DEBUG] [Thread-12149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:02:38.843 [DEBUG] [Thread-12149] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:02:38.851 [DEBUG] [Thread-12149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:02:38.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:02:38.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:02:38.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:02:38.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:02:38.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:02:38.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:02:38.883 [DEBUG] [Thread-12149] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:02:38.886 [DEBUG] [Thread-12151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:02:53.926 [DEBUG] [Thread-12152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:03:08.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:03:08.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:03:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:03:08.962 [DEBUG] [Thread-12153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:03:09.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 3, 1), 27.02, 14.85, 0.0, 11.75, 17.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:03:09.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:03:01
2025-11-26T05:03:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:03:09.825 [DEBUG] [Thread-12154] [transport.py] [_log()] starting thread (client mode): 0x70d2bdc0
2025-11-26T05:03:09.825 [DEBUG] [Thread-12154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:03:09.844 [DEBUG] [Thread-12154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:03:09.844 [INFO] [Thread-12154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] client lang: <none>
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] server lang: <none>
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] kex follows: False
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] Compression: none
2025-11-26T05:03:09.846 [DEBUG] [Thread-12154] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:03:09.859 [DEBUG] [Thread-12154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:03:09.859 [DEBUG] [Thread-12154] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:03:09.860 [DEBUG] [Thread-12154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:03:09.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:03:09.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:03:09.862 [DEBUG] [Thread-12154] [transport.py] [_log()] userauth is OK
2025-11-26T05:03:09.862 [DEBUG] [Thread-12154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:03:09.862 [DEBUG] [Thread-12154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:03:09.862 [DEBUG] [Thread-12154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:03:09.862 [DEBUG] [Thread-12154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:03:09.880 [INFO] [Thread-12154] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:03:09.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:03:10.516 [DEBUG] [Thread-12154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:03:10.516 [DEBUG] [Thread-12154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:03:10.517 [DEBUG] [Thread-12154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:03:10.556 [DEBUG] [Thread-12154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:03:10.557 [DEBUG] [Thread-12154] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:03:10.560 [DEBUG] [Thread-12154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:03:10.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:03:10.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:03:10.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:03:10.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:03:10.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:03:10.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:03:10.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:03:10.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:03:10.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:03:10.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.126831 -999.00  +17.90  10.84     20   -5.10 1 1 1 1 1   502    0 22.89 -39.23 NA 11.2 10.8 58.8 12.9 18.0 -25.2 17.9 -24.5 17.6 -23.1 17.9 -24.2
2025-11-26T05:03:10.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:03:10.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:03:10.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.126831
2025-11-26T05:03:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:03:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:03:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:03:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:03:10.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:03:10.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:03:01', tmtdew=27.02, humidity=14.85, cloud=0.0, wind=11.75, temperature=17.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:02:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:03:10.583 [DEBUG] [Thread-12154] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:03:10.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:03:10.680 [DEBUG] [Thread-12157] [transport.py] [_log()] starting thread (client mode): 0x70d29e70
2025-11-26T05:03:10.680 [DEBUG] [Thread-12157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:03:10.694 [DEBUG] [Thread-12157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:03:10.695 [INFO] [Thread-12157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:03:10.702 [DEBUG] [Thread-12157] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:03:10.702 [DEBUG] [Thread-12157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:03:10.702 [DEBUG] [Thread-12157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] client lang: <none>
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] server lang: <none>
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] kex follows: False
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] Compression: none
2025-11-26T05:03:10.703 [DEBUG] [Thread-12157] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:03:10.760 [DEBUG] [Thread-12157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:03:10.761 [DEBUG] [Thread-12157] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:03:10.761 [DEBUG] [Thread-12157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:03:10.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:03:10.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:03:10.817 [DEBUG] [Thread-12157] [transport.py] [_log()] userauth is OK
2025-11-26T05:03:10.817 [DEBUG] [Thread-12157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:03:10.817 [DEBUG] [Thread-12157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:03:10.817 [DEBUG] [Thread-12157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:03:10.817 [DEBUG] [Thread-12157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:03:10.840 [INFO] [Thread-12157] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:03:10.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:03:10.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:03:11.651 [DEBUG] [Thread-12157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:03:11.652 [DEBUG] [Thread-12157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:03:11.700 [DEBUG] [Thread-12157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:03:11.700 [DEBUG] [Thread-12157] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:03:11.709 [DEBUG] [Thread-12157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:03:11.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:03:11.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:03:11.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:03:11.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:03:11.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:03:11.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:03:11.746 [DEBUG] [Thread-12157] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:03:14.954 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:03:14.955 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:03:23.995 [DEBUG] [Thread-12159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:03:32.060 [DEBUG] [Thread-12160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:03:39.047 [DEBUG] [Thread-12161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:03:41.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:03:41.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:03:41.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:03:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 3, 33), 26.3, 15.74, 0.0, 13.09, 17.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:03:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:03:33
2025-11-26T05:03:42.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:03:42.697 [DEBUG] [Thread-12162] [transport.py] [_log()] starting thread (client mode): 0x70d7d6f0
2025-11-26T05:03:42.697 [DEBUG] [Thread-12162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:03:42.717 [DEBUG] [Thread-12162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:03:42.717 [INFO] [Thread-12162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:03:42.720 [DEBUG] [Thread-12162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:03:42.720 [DEBUG] [Thread-12162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:03:42.720 [DEBUG] [Thread-12162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:03:42.720 [DEBUG] [Thread-12162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] client lang: <none>
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] server lang: <none>
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] kex follows: False
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] Compression: none
2025-11-26T05:03:42.721 [DEBUG] [Thread-12162] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:03:42.739 [DEBUG] [Thread-12162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:03:42.740 [DEBUG] [Thread-12162] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:03:42.740 [DEBUG] [Thread-12162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:03:42.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:03:42.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:03:42.742 [DEBUG] [Thread-12162] [transport.py] [_log()] userauth is OK
2025-11-26T05:03:42.742 [DEBUG] [Thread-12162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:03:42.742 [DEBUG] [Thread-12162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:03:42.743 [DEBUG] [Thread-12162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:03:42.743 [DEBUG] [Thread-12162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:03:42.767 [INFO] [Thread-12162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:03:42.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:03:43.378 [DEBUG] [Thread-12162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:03:43.378 [DEBUG] [Thread-12162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:03:43.378 [DEBUG] [Thread-12162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:03:43.419 [DEBUG] [Thread-12162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:03:43.419 [DEBUG] [Thread-12162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:03:43.422 [DEBUG] [Thread-12162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:03:43.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:03:43.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:03:43.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:03:43.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:03:43.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:03:43.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:03:43.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:03:43.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:03:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:03:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.127178 -999.00  +17.90  11.80     20   -5.10 1 1 1 1 1   522    0 22.22 -39.07 NA 11.3 11.8 57.4 14.8 18.0 -25.1 17.9 -24.3 17.6 -23.1 17.9 -24.0
2025-11-26T05:03:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:03:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:03:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.127178
2025-11-26T05:03:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:03:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:03:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:03:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:03:43.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:03:43.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:03:33', tmtdew=26.3, humidity=15.74, cloud=0.0, wind=13.09, temperature=17.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:03:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:03:43.449 [DEBUG] [Thread-12162] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:03:43.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:03:43.543 [DEBUG] [Thread-12165] [transport.py] [_log()] starting thread (client mode): 0x7374fc40
2025-11-26T05:03:43.543 [DEBUG] [Thread-12165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:03:43.557 [DEBUG] [Thread-12165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:03:43.557 [INFO] [Thread-12165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] client lang: <none>
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] server lang: <none>
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] kex follows: False
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:03:43.565 [DEBUG] [Thread-12165] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:03:43.566 [DEBUG] [Thread-12165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:03:43.566 [DEBUG] [Thread-12165] [transport.py] [_log()] Compression: none
2025-11-26T05:03:43.566 [DEBUG] [Thread-12165] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:03:43.621 [DEBUG] [Thread-12165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:03:43.622 [DEBUG] [Thread-12165] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:03:43.623 [DEBUG] [Thread-12165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:03:43.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:03:43.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:03:43.678 [DEBUG] [Thread-12165] [transport.py] [_log()] userauth is OK
2025-11-26T05:03:43.678 [DEBUG] [Thread-12165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:03:43.678 [DEBUG] [Thread-12165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:03:43.679 [DEBUG] [Thread-12165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:03:43.679 [DEBUG] [Thread-12165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:03:43.698 [INFO] [Thread-12165] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:03:43.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:03:43.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:03:44.565 [DEBUG] [Thread-12165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:03:44.565 [DEBUG] [Thread-12165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:03:44.612 [DEBUG] [Thread-12165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:03:44.613 [DEBUG] [Thread-12165] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:03:44.621 [DEBUG] [Thread-12165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:03:44.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:03:44.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:03:44.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:03:44.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:03:44.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:03:44.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:03:44.656 [DEBUG] [Thread-12165] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:03:54.084 [DEBUG] [Thread-12167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:04:09.125 [DEBUG] [Thread-12168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:04:14.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:04:14.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:04:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:04:15.164 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:04:15.165 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:04:15.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 4, 5), 26.89, 14.89, 0.0, 10.22, 17.89, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:04:15.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:04:05
2025-11-26T05:04:15.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:04:15.609 [DEBUG] [Thread-12169] [transport.py] [_log()] starting thread (client mode): 0x70d2a5c0
2025-11-26T05:04:15.609 [DEBUG] [Thread-12169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:04:15.630 [DEBUG] [Thread-12169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:04:15.630 [INFO] [Thread-12169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] client lang: <none>
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] server lang: <none>
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] kex follows: False
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:04:15.633 [DEBUG] [Thread-12169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:04:15.634 [DEBUG] [Thread-12169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:04:15.634 [DEBUG] [Thread-12169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:04:15.634 [DEBUG] [Thread-12169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:04:15.634 [DEBUG] [Thread-12169] [transport.py] [_log()] Compression: none
2025-11-26T05:04:15.634 [DEBUG] [Thread-12169] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:04:15.651 [DEBUG] [Thread-12169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:04:15.652 [DEBUG] [Thread-12169] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:04:15.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:04:15.653 [DEBUG] [Thread-12169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:04:15.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:04:15.655 [DEBUG] [Thread-12169] [transport.py] [_log()] userauth is OK
2025-11-26T05:04:15.656 [DEBUG] [Thread-12169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:04:15.656 [DEBUG] [Thread-12169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:04:15.656 [DEBUG] [Thread-12169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:04:15.656 [DEBUG] [Thread-12169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:04:15.674 [INFO] [Thread-12169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:04:15.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:04:16.333 [DEBUG] [Thread-12169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:04:16.333 [DEBUG] [Thread-12169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:04:16.333 [DEBUG] [Thread-12169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:04:16.374 [DEBUG] [Thread-12169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:04:16.374 [DEBUG] [Thread-12169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:04:16.377 [DEBUG] [Thread-12169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:04:16.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:04:16.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:04:16.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:04:16.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:04:16.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:04:16.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:04:16.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:04:16.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:04:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:04:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.127525 -999.00  +17.90  10.68     20   -5.10 1 1 1 1 1   542    0 22.36 -33.35 NA 9.7 10.7 59.0 12.5 18.0 -25.1 17.9 -24.2 17.7 -23.2 17.9 -24.0
2025-11-26T05:04:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:04:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:04:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.127525
2025-11-26T05:04:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:04:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:04:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:04:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:04:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:04:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:04:05', tmtdew=26.89, humidity=14.89, cloud=0.0, wind=10.22, temperature=17.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:03:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:04:16.404 [DEBUG] [Thread-12169] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:04:16.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:04:16.495 [DEBUG] [Thread-12172] [transport.py] [_log()] starting thread (client mode): 0x70d03b80
2025-11-26T05:04:16.495 [DEBUG] [Thread-12172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:04:16.510 [DEBUG] [Thread-12172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:04:16.510 [INFO] [Thread-12172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:04:16.518 [DEBUG] [Thread-12172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:04:16.518 [DEBUG] [Thread-12172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:04:16.518 [DEBUG] [Thread-12172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:04:16.518 [DEBUG] [Thread-12172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:04:16.519 [DEBUG] [Thread-12172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:04:16.519 [DEBUG] [Thread-12172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:04:16.519 [DEBUG] [Thread-12172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:04:16.519 [DEBUG] [Thread-12172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:04:16.519 [DEBUG] [Thread-12172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:04:16.519 [DEBUG] [Thread-12172] [transport.py] [_log()] client lang: <none>
2025-11-26T05:04:16.519 [DEBUG] [Thread-12172] [transport.py] [_log()] server lang: <none>
2025-11-26T05:04:16.519 [DEBUG] [Thread-12172] [transport.py] [_log()] kex follows: False
2025-11-26T05:04:16.519 [DEBUG] [Thread-12172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:04:16.520 [DEBUG] [Thread-12172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:04:16.520 [DEBUG] [Thread-12172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:04:16.520 [DEBUG] [Thread-12172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:04:16.520 [DEBUG] [Thread-12172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:04:16.521 [DEBUG] [Thread-12172] [transport.py] [_log()] Compression: none
2025-11-26T05:04:16.521 [DEBUG] [Thread-12172] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:04:16.576 [DEBUG] [Thread-12172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:04:16.576 [DEBUG] [Thread-12172] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:04:16.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:04:16.578 [DEBUG] [Thread-12172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:04:16.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:04:16.631 [DEBUG] [Thread-12172] [transport.py] [_log()] userauth is OK
2025-11-26T05:04:16.632 [DEBUG] [Thread-12172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:04:16.632 [DEBUG] [Thread-12172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:04:16.632 [DEBUG] [Thread-12172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:04:16.632 [DEBUG] [Thread-12172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:04:16.650 [INFO] [Thread-12172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:04:16.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:04:16.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:04:17.553 [DEBUG] [Thread-12172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:04:17.553 [DEBUG] [Thread-12172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:04:17.601 [DEBUG] [Thread-12172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:04:17.601 [DEBUG] [Thread-12172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:04:17.610 [DEBUG] [Thread-12172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:04:17.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:04:17.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:04:17.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:04:17.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:04:17.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:04:17.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:04:17.646 [DEBUG] [Thread-12172] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:04:24.162 [DEBUG] [Thread-12174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:04:32.133 [DEBUG] [Thread-12175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:04:39.204 [DEBUG] [Thread-12176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:04:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:04:47.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:04:47.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:04:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 4, 37), 26.9, 14.87, 0.0, 12.05, 17.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:04:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:04:37
2025-11-26T05:04:48.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:04:48.602 [DEBUG] [Thread-12177] [transport.py] [_log()] starting thread (client mode): 0x70d29e70
2025-11-26T05:04:48.603 [DEBUG] [Thread-12177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:04:48.618 [DEBUG] [Thread-12177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:04:48.618 [INFO] [Thread-12177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:04:48.621 [DEBUG] [Thread-12177] [transport.py] [_log()] client lang: <none>
2025-11-26T05:04:48.622 [DEBUG] [Thread-12177] [transport.py] [_log()] server lang: <none>
2025-11-26T05:04:48.622 [DEBUG] [Thread-12177] [transport.py] [_log()] kex follows: False
2025-11-26T05:04:48.622 [DEBUG] [Thread-12177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:04:48.622 [DEBUG] [Thread-12177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:04:48.622 [DEBUG] [Thread-12177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:04:48.622 [DEBUG] [Thread-12177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:04:48.622 [DEBUG] [Thread-12177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:04:48.622 [DEBUG] [Thread-12177] [transport.py] [_log()] Compression: none
2025-11-26T05:04:48.622 [DEBUG] [Thread-12177] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:04:48.641 [DEBUG] [Thread-12177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:04:48.642 [DEBUG] [Thread-12177] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:04:48.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:04:48.642 [DEBUG] [Thread-12177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:04:48.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:04:48.644 [DEBUG] [Thread-12177] [transport.py] [_log()] userauth is OK
2025-11-26T05:04:48.644 [DEBUG] [Thread-12177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:04:48.645 [DEBUG] [Thread-12177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:04:48.645 [DEBUG] [Thread-12177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:04:48.645 [DEBUG] [Thread-12177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:04:48.677 [INFO] [Thread-12177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:04:48.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:04:49.332 [DEBUG] [Thread-12177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:04:49.332 [DEBUG] [Thread-12177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:04:49.333 [DEBUG] [Thread-12177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:04:49.373 [DEBUG] [Thread-12177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:04:49.373 [DEBUG] [Thread-12177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:04:49.377 [DEBUG] [Thread-12177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:04:49.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:04:49.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:04:49.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:04:49.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:04:49.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:04:49.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:04:49.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:04:49.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:04:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:04:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.127872 -999.00  +17.90  10.57     20   -5.10 1 1 1 1 1   561    0 22.29 -33.45 NA 10.8 10.6 55.6 12.0 18.0 -25.0 17.9 -24.3 17.6 -23.1 17.9 -24.1
2025-11-26T05:04:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:04:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:04:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.127872
2025-11-26T05:04:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:04:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:04:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:04:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:04:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:04:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:04:37', tmtdew=26.9, humidity=14.87, cloud=0.0, wind=12.05, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:04:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:04:49.404 [DEBUG] [Thread-12177] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:04:49.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:04:49.506 [DEBUG] [Thread-12180] [transport.py] [_log()] starting thread (client mode): 0x70d1e6b0
2025-11-26T05:04:49.506 [DEBUG] [Thread-12180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:04:49.521 [DEBUG] [Thread-12180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:04:49.521 [INFO] [Thread-12180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:04:49.529 [DEBUG] [Thread-12180] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:04:49.529 [DEBUG] [Thread-12180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:04:49.529 [DEBUG] [Thread-12180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:04:49.529 [DEBUG] [Thread-12180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:04:49.529 [DEBUG] [Thread-12180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:04:49.529 [DEBUG] [Thread-12180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:04:49.529 [DEBUG] [Thread-12180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:04:49.529 [DEBUG] [Thread-12180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] client lang: <none>
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] server lang: <none>
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] kex follows: False
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] Compression: none
2025-11-26T05:04:49.530 [DEBUG] [Thread-12180] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:04:49.590 [DEBUG] [Thread-12180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:04:49.591 [DEBUG] [Thread-12180] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:04:49.592 [DEBUG] [Thread-12180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:04:49.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:04:49.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:04:49.650 [DEBUG] [Thread-12180] [transport.py] [_log()] userauth is OK
2025-11-26T05:04:49.650 [DEBUG] [Thread-12180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:04:49.651 [DEBUG] [Thread-12180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:04:49.651 [DEBUG] [Thread-12180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:04:49.651 [DEBUG] [Thread-12180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:04:49.670 [INFO] [Thread-12180] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:04:49.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:04:49.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:04:50.540 [DEBUG] [Thread-12180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:04:50.540 [DEBUG] [Thread-12180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:04:50.588 [DEBUG] [Thread-12180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:04:50.588 [DEBUG] [Thread-12180] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:04:50.597 [DEBUG] [Thread-12180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:04:50.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:04:50.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:04:50.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:04:50.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:04:50.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:04:50.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:04:50.634 [DEBUG] [Thread-12180] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:04:54.237 [DEBUG] [Thread-12182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:05:09.290 [DEBUG] [Thread-12183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:05:15.368 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:05:15.369 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:05:20.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:05:20.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:05:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:05:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 5, 9), 26.91, 14.85, 0.0, 12.07, 17.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:05:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:05:09
2025-11-26T05:05:21.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:05:21.591 [DEBUG] [Thread-12184] [transport.py] [_log()] starting thread (client mode): 0x70d1d870
2025-11-26T05:05:21.591 [DEBUG] [Thread-12184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:05:21.610 [DEBUG] [Thread-12184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:05:21.611 [INFO] [Thread-12184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] client lang: <none>
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] server lang: <none>
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] kex follows: False
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] Compression: none
2025-11-26T05:05:21.612 [DEBUG] [Thread-12184] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:05:21.624 [DEBUG] [Thread-12184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:05:21.624 [DEBUG] [Thread-12184] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:05:21.625 [DEBUG] [Thread-12184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:05:21.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:05:21.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:05:21.627 [DEBUG] [Thread-12184] [transport.py] [_log()] userauth is OK
2025-11-26T05:05:21.627 [DEBUG] [Thread-12184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:05:21.627 [DEBUG] [Thread-12184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:05:21.627 [DEBUG] [Thread-12184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:05:21.627 [DEBUG] [Thread-12184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:05:21.652 [INFO] [Thread-12184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:05:21.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:05:22.289 [DEBUG] [Thread-12184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:05:22.289 [DEBUG] [Thread-12184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:05:22.290 [DEBUG] [Thread-12184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:05:22.330 [DEBUG] [Thread-12184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:05:22.330 [DEBUG] [Thread-12184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:05:22.333 [DEBUG] [Thread-12184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:05:22.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:05:22.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:05:22.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:05:22.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:05:22.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:05:22.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:05:22.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:05:22.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:05:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:05:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.128566 -999.00  +17.90  10.89     20   -5.00 1 1 1 1 1   599    0 22.23 -30.09 NA 11.7 10.9 52.6 12.8 17.9 -25.1 17.9 -24.4 17.6 -23.1 17.9 -24.1
2025-11-26T05:05:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:05:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:05:22.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.128566
2025-11-26T05:05:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:05:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:05:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:05:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:05:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:05:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:05:09', tmtdew=26.91, humidity=14.85, cloud=0.0, wind=12.07, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:05:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:05:22.361 [DEBUG] [Thread-12184] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:05:22.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:05:22.459 [DEBUG] [Thread-12187] [transport.py] [_log()] starting thread (client mode): 0x70d1e170
2025-11-26T05:05:22.459 [DEBUG] [Thread-12187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:05:22.473 [DEBUG] [Thread-12187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:05:22.474 [INFO] [Thread-12187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:05:22.481 [DEBUG] [Thread-12187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:05:22.481 [DEBUG] [Thread-12187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:05:22.481 [DEBUG] [Thread-12187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:05:22.481 [DEBUG] [Thread-12187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] client lang: <none>
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] server lang: <none>
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] kex follows: False
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] Compression: none
2025-11-26T05:05:22.482 [DEBUG] [Thread-12187] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:05:22.538 [DEBUG] [Thread-12187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:05:22.539 [DEBUG] [Thread-12187] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:05:22.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:05:22.540 [DEBUG] [Thread-12187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:05:22.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:05:22.600 [DEBUG] [Thread-12187] [transport.py] [_log()] userauth is OK
2025-11-26T05:05:22.600 [DEBUG] [Thread-12187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:05:22.600 [DEBUG] [Thread-12187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:05:22.601 [DEBUG] [Thread-12187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:05:22.601 [DEBUG] [Thread-12187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:05:22.620 [INFO] [Thread-12187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:05:22.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:05:22.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:05:23.453 [DEBUG] [Thread-12187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:05:23.454 [DEBUG] [Thread-12187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:05:23.502 [DEBUG] [Thread-12187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:05:23.502 [DEBUG] [Thread-12187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:05:23.512 [DEBUG] [Thread-12187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:05:23.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:05:23.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:05:23.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:05:23.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:05:23.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:05:23.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:05:23.549 [DEBUG] [Thread-12187] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:05:24.322 [DEBUG] [Thread-12189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:05:32.209 [DEBUG] [Thread-12190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:05:39.375 [DEBUG] [Thread-12191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:05:53.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:05:53.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:05:53.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:05:54.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 5, 41), 26.85, 14.92, 0.0, 11.79, 17.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:05:54.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:05:41
2025-11-26T05:05:54.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:05:54.408 [DEBUG] [Thread-12192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:05:54.468 [DEBUG] [Thread-12193] [transport.py] [_log()] starting thread (client mode): 0x737c70d0
2025-11-26T05:05:54.468 [DEBUG] [Thread-12193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:05:54.488 [DEBUG] [Thread-12193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:05:54.489 [INFO] [Thread-12193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] client lang: <none>
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] server lang: <none>
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] kex follows: False
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] Compression: none
2025-11-26T05:05:54.492 [DEBUG] [Thread-12193] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:05:54.510 [DEBUG] [Thread-12193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:05:54.511 [DEBUG] [Thread-12193] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:05:54.512 [DEBUG] [Thread-12193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:05:54.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:05:54.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:05:54.514 [DEBUG] [Thread-12193] [transport.py] [_log()] userauth is OK
2025-11-26T05:05:54.514 [DEBUG] [Thread-12193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:05:54.514 [DEBUG] [Thread-12193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:05:54.514 [DEBUG] [Thread-12193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:05:54.514 [DEBUG] [Thread-12193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:05:54.539 [INFO] [Thread-12193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:05:54.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:05:55.179 [DEBUG] [Thread-12193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:05:55.180 [DEBUG] [Thread-12193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:05:55.180 [DEBUG] [Thread-12193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:05:55.221 [DEBUG] [Thread-12193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:05:55.221 [DEBUG] [Thread-12193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:05:55.225 [DEBUG] [Thread-12193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:05:55.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:05:55.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:05:55.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:05:55.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:05:55.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:05:55.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:05:55.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:05:55.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:05:55.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:05:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.128914 -999.00  +17.90  10.45     20   -5.00 1 1 1 1 1   616    0 22.61 -32.01 NA 10.8 10.4 57.2 12.3 17.9 -25.2 17.9 -24.5 17.6 -23.0 17.9 -24.1
2025-11-26T05:05:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:05:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:05:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.128914
2025-11-26T05:05:55.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:05:55.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:05:55.252 [DEBUG] [Thread-12193] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:05:55.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:05:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:05:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:05:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:05:41', tmtdew=26.85, humidity=14.92, cloud=0.0, wind=11.79, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:05:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:05:55.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:05:55.355 [DEBUG] [Thread-12196] [transport.py] [_log()] starting thread (client mode): 0x7374edd0
2025-11-26T05:05:55.355 [DEBUG] [Thread-12196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:05:55.372 [DEBUG] [Thread-12196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:05:55.372 [INFO] [Thread-12196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:05:55.379 [DEBUG] [Thread-12196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] client lang: <none>
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] server lang: <none>
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] kex follows: False
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:05:55.380 [DEBUG] [Thread-12196] [transport.py] [_log()] Compression: none
2025-11-26T05:05:55.381 [DEBUG] [Thread-12196] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:05:55.436 [DEBUG] [Thread-12196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:05:55.437 [DEBUG] [Thread-12196] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:05:55.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:05:55.438 [DEBUG] [Thread-12196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:05:55.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:05:55.492 [DEBUG] [Thread-12196] [transport.py] [_log()] userauth is OK
2025-11-26T05:05:55.493 [DEBUG] [Thread-12196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:05:55.493 [DEBUG] [Thread-12196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:05:55.493 [DEBUG] [Thread-12196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:05:55.493 [DEBUG] [Thread-12196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:05:55.512 [INFO] [Thread-12196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:05:55.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:05:55.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:05:56.313 [DEBUG] [Thread-12196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:05:56.313 [DEBUG] [Thread-12196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:05:56.362 [DEBUG] [Thread-12196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:05:56.362 [DEBUG] [Thread-12196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:05:56.371 [DEBUG] [Thread-12196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:05:56.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:05:56.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:05:56.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:05:56.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:05:56.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:05:56.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:05:56.408 [DEBUG] [Thread-12196] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:06:09.443 [DEBUG] [Thread-12198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:06:15.576 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:06:15.576 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:06:24.492 [DEBUG] [Thread-12199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:06:26.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:06:26.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:06:26.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:06:27.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 6, 13), 26.85, 14.9, 0.0, 12.03, 17.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:06:27.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:06:13
2025-11-26T05:06:27.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:06:27.367 [DEBUG] [Thread-12200] [transport.py] [_log()] starting thread (client mode): 0x73781210
2025-11-26T05:06:27.367 [DEBUG] [Thread-12200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:06:27.387 [DEBUG] [Thread-12200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:06:27.388 [INFO] [Thread-12200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] client lang: <none>
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] server lang: <none>
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] kex follows: False
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] Compression: none
2025-11-26T05:06:27.391 [DEBUG] [Thread-12200] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:06:27.408 [DEBUG] [Thread-12200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:06:27.408 [DEBUG] [Thread-12200] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:06:27.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:06:27.409 [DEBUG] [Thread-12200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:06:27.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:06:27.411 [DEBUG] [Thread-12200] [transport.py] [_log()] userauth is OK
2025-11-26T05:06:27.411 [DEBUG] [Thread-12200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:06:27.411 [DEBUG] [Thread-12200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:06:27.411 [DEBUG] [Thread-12200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:06:27.411 [DEBUG] [Thread-12200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:06:27.429 [INFO] [Thread-12200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:06:27.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:06:28.033 [DEBUG] [Thread-12200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:06:28.033 [DEBUG] [Thread-12200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:06:28.034 [DEBUG] [Thread-12200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:06:28.075 [DEBUG] [Thread-12200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:06:28.075 [DEBUG] [Thread-12200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:06:28.078 [DEBUG] [Thread-12200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:06:28.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:06:28.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:06:28.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:06:28.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:06:28.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:06:28.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:06:28.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:06:28.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:06:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:06:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.129261 -999.00  +17.90  10.12     20   -5.00 1 1 1 1 1   634    0 22.58 -32.23 NA 9.8 10.1 65.2 13.4 17.9 -25.0 17.9 -24.2 17.6 -22.8 17.8 -23.8
2025-11-26T05:06:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:06:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:06:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.129261
2025-11-26T05:06:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:06:28.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:06:28.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:06:28.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:06:28.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:06:28.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:06:13', tmtdew=26.85, humidity=14.9, cloud=0.0, wind=12.03, temperature=17.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:06:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:06:28.105 [DEBUG] [Thread-12200] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:06:28.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:06:28.211 [DEBUG] [Thread-12203] [transport.py] [_log()] starting thread (client mode): 0x737824d0
2025-11-26T05:06:28.211 [DEBUG] [Thread-12203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:06:28.227 [DEBUG] [Thread-12203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:06:28.227 [INFO] [Thread-12203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:06:28.234 [DEBUG] [Thread-12203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:06:28.234 [DEBUG] [Thread-12203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] client lang: <none>
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] server lang: <none>
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] kex follows: False
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] Compression: none
2025-11-26T05:06:28.235 [DEBUG] [Thread-12203] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:06:28.295 [DEBUG] [Thread-12203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:06:28.295 [DEBUG] [Thread-12203] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:06:28.296 [DEBUG] [Thread-12203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:06:28.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:06:28.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:06:28.355 [DEBUG] [Thread-12203] [transport.py] [_log()] userauth is OK
2025-11-26T05:06:28.355 [DEBUG] [Thread-12203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:06:28.355 [DEBUG] [Thread-12203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:06:28.355 [DEBUG] [Thread-12203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:06:28.355 [DEBUG] [Thread-12203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:06:28.375 [INFO] [Thread-12203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:06:28.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:06:28.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:06:29.214 [DEBUG] [Thread-12203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:06:29.214 [DEBUG] [Thread-12203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:06:29.261 [DEBUG] [Thread-12203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:06:29.262 [DEBUG] [Thread-12203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:06:29.271 [DEBUG] [Thread-12203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:06:29.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:06:29.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:06:29.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:06:29.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:06:29.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:06:29.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:06:29.308 [DEBUG] [Thread-12203] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:06:32.286 [DEBUG] [Thread-12205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:06:39.524 [DEBUG] [Thread-12206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:06:54.584 [DEBUG] [Thread-12207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:06:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:06:59.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:06:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:07:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 6, 45), 26.85, 14.92, 0.0, 12.03, 17.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:07:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:06:45
2025-11-26T05:07:00.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:07:00.306 [DEBUG] [Thread-12208] [transport.py] [_log()] starting thread (client mode): 0x737825f0
2025-11-26T05:07:00.307 [DEBUG] [Thread-12208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:07:00.328 [DEBUG] [Thread-12208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:07:00.328 [INFO] [Thread-12208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] client lang: <none>
2025-11-26T05:07:00.329 [DEBUG] [Thread-12208] [transport.py] [_log()] server lang: <none>
2025-11-26T05:07:00.330 [DEBUG] [Thread-12208] [transport.py] [_log()] kex follows: False
2025-11-26T05:07:00.330 [DEBUG] [Thread-12208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:07:00.330 [DEBUG] [Thread-12208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:07:00.330 [DEBUG] [Thread-12208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:07:00.330 [DEBUG] [Thread-12208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:07:00.330 [DEBUG] [Thread-12208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:07:00.330 [DEBUG] [Thread-12208] [transport.py] [_log()] Compression: none
2025-11-26T05:07:00.330 [DEBUG] [Thread-12208] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:07:00.345 [DEBUG] [Thread-12208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:07:00.346 [DEBUG] [Thread-12208] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:07:00.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:07:00.346 [DEBUG] [Thread-12208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:07:00.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:07:00.347 [DEBUG] [Thread-12208] [transport.py] [_log()] userauth is OK
2025-11-26T05:07:00.347 [DEBUG] [Thread-12208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:07:00.347 [DEBUG] [Thread-12208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:07:00.347 [DEBUG] [Thread-12208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:07:00.347 [DEBUG] [Thread-12208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:07:00.357 [INFO] [Thread-12208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:07:00.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:07:01.013 [DEBUG] [Thread-12208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:07:01.013 [DEBUG] [Thread-12208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:07:01.013 [DEBUG] [Thread-12208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:07:01.054 [DEBUG] [Thread-12208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:07:01.054 [DEBUG] [Thread-12208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:07:01.057 [DEBUG] [Thread-12208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:07:01.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:07:01.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:07:01.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:07:01.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:07:01.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:07:01.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:07:01.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.129608 -999.00  +17.90  11.53     20   -5.00 1 1 1 1 1   650    0 22.32 -30.13 NA 12.5 11.5 58.8 13.3 17.9 -25.1 17.9 -24.5 17.6 -23.0 17.8 -24.0
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.129608
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:07:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:06:45', tmtdew=26.85, humidity=14.92, cloud=0.0, wind=12.03, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:06:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:07:01.075 [DEBUG] [Thread-12208] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:07:01.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:07:01.160 [DEBUG] [Thread-12211] [transport.py] [_log()] starting thread (client mode): 0x7374c7f0
2025-11-26T05:07:01.161 [DEBUG] [Thread-12211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:07:01.175 [DEBUG] [Thread-12211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:07:01.175 [INFO] [Thread-12211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] client lang: <none>
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] server lang: <none>
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] kex follows: False
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] Compression: none
2025-11-26T05:07:01.183 [DEBUG] [Thread-12211] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:07:01.239 [DEBUG] [Thread-12211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:07:01.239 [DEBUG] [Thread-12211] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:07:01.239 [DEBUG] [Thread-12211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:07:01.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:07:01.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:07:01.296 [DEBUG] [Thread-12211] [transport.py] [_log()] userauth is OK
2025-11-26T05:07:01.297 [DEBUG] [Thread-12211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:07:01.297 [DEBUG] [Thread-12211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:07:01.297 [DEBUG] [Thread-12211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:07:01.297 [DEBUG] [Thread-12211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:07:01.313 [INFO] [Thread-12211] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:07:01.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:07:01.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:07:02.170 [DEBUG] [Thread-12211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:07:02.170 [DEBUG] [Thread-12211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:07:02.218 [DEBUG] [Thread-12211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:07:02.218 [DEBUG] [Thread-12211] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:07:02.226 [DEBUG] [Thread-12211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:07:02.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:07:02.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:07:02.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:07:02.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:07:02.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:07:02.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:07:02.258 [DEBUG] [Thread-12211] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:07:09.618 [DEBUG] [Thread-12213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:07:15.782 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:07:15.784 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:07:24.673 [DEBUG] [Thread-12214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:07:32.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:07:32.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:07:32.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:07:32.355 [DEBUG] [Thread-12215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:07:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 7, 17), 26.87, 14.87, 0.0, 11.84, 17.81, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:07:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:07:17
2025-11-26T05:07:33.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:07:33.216 [DEBUG] [Thread-12216] [transport.py] [_log()] starting thread (client mode): 0x73780700
2025-11-26T05:07:33.216 [DEBUG] [Thread-12216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:07:33.232 [DEBUG] [Thread-12216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:07:33.232 [INFO] [Thread-12216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] client lang: <none>
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] server lang: <none>
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] kex follows: False
2025-11-26T05:07:33.235 [DEBUG] [Thread-12216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:07:33.236 [DEBUG] [Thread-12216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:07:33.236 [DEBUG] [Thread-12216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:07:33.236 [DEBUG] [Thread-12216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:07:33.236 [DEBUG] [Thread-12216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:07:33.236 [DEBUG] [Thread-12216] [transport.py] [_log()] Compression: none
2025-11-26T05:07:33.236 [DEBUG] [Thread-12216] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:07:33.253 [DEBUG] [Thread-12216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:07:33.253 [DEBUG] [Thread-12216] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:07:33.254 [DEBUG] [Thread-12216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:07:33.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:07:33.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:07:33.256 [DEBUG] [Thread-12216] [transport.py] [_log()] userauth is OK
2025-11-26T05:07:33.256 [DEBUG] [Thread-12216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:07:33.256 [DEBUG] [Thread-12216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:07:33.256 [DEBUG] [Thread-12216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:07:33.256 [DEBUG] [Thread-12216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:07:33.274 [INFO] [Thread-12216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:07:33.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:07:33.907 [DEBUG] [Thread-12216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:07:33.907 [DEBUG] [Thread-12216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:07:33.908 [DEBUG] [Thread-12216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:07:33.948 [DEBUG] [Thread-12216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:07:33.948 [DEBUG] [Thread-12216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:07:33.951 [DEBUG] [Thread-12216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:07:33.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:07:33.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:07:33.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:07:33.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:07:33.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:07:33.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:07:33.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:07:33.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:07:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:07:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.129956 -999.00  +17.90  10.74     20   -5.00 1 1 1 1 1   666    0 22.07 -30.85 NA 11.8 10.7 59.4 13.6 17.9 -24.9 17.9 -24.2 17.6 -23.0 17.8 -24.0
2025-11-26T05:07:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:07:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:07:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.129956
2025-11-26T05:07:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:07:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:07:33.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:07:33.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:07:33.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:07:33.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:07:17', tmtdew=26.87, humidity=14.87, cloud=0.0, wind=11.84, temperature=17.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:07:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:07:33.978 [DEBUG] [Thread-12216] [transport.py] [_log()] EOF in transport thread
2025-11-26T05: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
2025-11-26T05:07:34.075 [DEBUG] [Thread-12219] [transport.py] [_log()] starting thread (client mode): 0x73783850
2025-11-26T05:07:34.076 [DEBUG] [Thread-12219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:07:34.091 [DEBUG] [Thread-12219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:07:34.091 [INFO] [Thread-12219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:07:34.099 [DEBUG] [Thread-12219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:07:34.099 [DEBUG] [Thread-12219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:07:34.099 [DEBUG] [Thread-12219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:07:34.099 [DEBUG] [Thread-12219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:07:34.099 [DEBUG] [Thread-12219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:07:34.099 [DEBUG] [Thread-12219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:07:34.099 [DEBUG] [Thread-12219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:07:34.099 [DEBUG] [Thread-12219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] client lang: <none>
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] server lang: <none>
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] kex follows: False
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] Compression: none
2025-11-26T05:07:34.100 [DEBUG] [Thread-12219] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:07:34.159 [DEBUG] [Thread-12219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:07:34.160 [DEBUG] [Thread-12219] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:07:34.161 [DEBUG] [Thread-12219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:07:34.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:07:34.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:07:34.215 [DEBUG] [Thread-12219] [transport.py] [_log()] userauth is OK
2025-11-26T05:07:34.216 [DEBUG] [Thread-12219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:07:34.216 [DEBUG] [Thread-12219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:07:34.216 [DEBUG] [Thread-12219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:07:34.216 [DEBUG] [Thread-12219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:07:34.234 [INFO] [Thread-12219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:07:34.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:07:34.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:07:35.047 [DEBUG] [Thread-12219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:07:35.048 [DEBUG] [Thread-12219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:07:35.096 [DEBUG] [Thread-12219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:07:35.096 [DEBUG] [Thread-12219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:07:35.106 [DEBUG] [Thread-12219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:07:35.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:07:35.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:07:35.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:07:35.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:07:35.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:07:35.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:07:35.138 [DEBUG] [Thread-12219] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:07:39.705 [DEBUG] [Thread-12221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:07:54.746 [DEBUG] [Thread-12222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:08:05.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:08:05.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:08:05.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:08:05.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 7, 49), 26.91, 14.95, 0.0, 11.91, 17.89, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:08:05.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:07:49
2025-11-26T05:08:05.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:08:06.083 [DEBUG] [Thread-12223] [transport.py] [_log()] starting thread (client mode): 0x73783af0
2025-11-26T05:08:06.083 [DEBUG] [Thread-12223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:08:06.103 [DEBUG] [Thread-12223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:08:06.104 [INFO] [Thread-12223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] client lang: <none>
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] server lang: <none>
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] kex follows: False
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] Compression: none
2025-11-26T05:08:06.107 [DEBUG] [Thread-12223] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:08:06.125 [DEBUG] [Thread-12223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:08:06.126 [DEBUG] [Thread-12223] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:08:06.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:08:06.127 [DEBUG] [Thread-12223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:08:06.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:08:06.129 [DEBUG] [Thread-12223] [transport.py] [_log()] userauth is OK
2025-11-26T05:08:06.129 [DEBUG] [Thread-12223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:08:06.129 [DEBUG] [Thread-12223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:08:06.129 [DEBUG] [Thread-12223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:08:06.129 [DEBUG] [Thread-12223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:08:06.155 [INFO] [Thread-12223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:08:06.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:08:06.788 [DEBUG] [Thread-12223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:08:06.788 [DEBUG] [Thread-12223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:08:06.788 [DEBUG] [Thread-12223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:08:06.829 [DEBUG] [Thread-12223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:08:06.829 [DEBUG] [Thread-12223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:08:06.833 [DEBUG] [Thread-12223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:08:06.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:08:06.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:08:06.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:08:06.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:08:06.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:08:06.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:08:06.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:08:06.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:08:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:08:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.130303 -999.00  +17.90  10.01     20   -5.10 1 1 1 1 1   681    0 22.68 -30.04 NA 10.6 10.0 59.6 14.0 17.9 -24.9 17.8 -24.1 17.6 -22.9 17.8 -24.1
2025-11-26T05:08:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:08:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:08:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.130303
2025-11-26T05:08:06.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:08:06.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:08:06.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:08:06.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:08:06.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:08:06.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:07:49', tmtdew=26.91, humidity=14.95, cloud=0.0, wind=11.91, temperature=17.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:07:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:08:06.861 [DEBUG] [Thread-12223] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:08:06.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:08:06.955 [DEBUG] [Thread-12226] [transport.py] [_log()] starting thread (client mode): 0x70d1d9f0
2025-11-26T05:08:06.955 [DEBUG] [Thread-12226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:08:06.970 [DEBUG] [Thread-12226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:08:06.970 [INFO] [Thread-12226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] client lang: <none>
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] server lang: <none>
2025-11-26T05:08:06.978 [DEBUG] [Thread-12226] [transport.py] [_log()] kex follows: False
2025-11-26T05:08:06.979 [DEBUG] [Thread-12226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:08:06.979 [DEBUG] [Thread-12226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:08:06.979 [DEBUG] [Thread-12226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:08:06.979 [DEBUG] [Thread-12226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:08:06.979 [DEBUG] [Thread-12226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:08:06.979 [DEBUG] [Thread-12226] [transport.py] [_log()] Compression: none
2025-11-26T05:08:06.979 [DEBUG] [Thread-12226] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:08:07.038 [DEBUG] [Thread-12226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:08:07.038 [DEBUG] [Thread-12226] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:08:07.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:08:07.039 [DEBUG] [Thread-12226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:08:07.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:08:07.094 [DEBUG] [Thread-12226] [transport.py] [_log()] userauth is OK
2025-11-26T05:08:07.094 [DEBUG] [Thread-12226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:08:07.094 [DEBUG] [Thread-12226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:08:07.094 [DEBUG] [Thread-12226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:08:07.095 [DEBUG] [Thread-12226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:08:07.112 [INFO] [Thread-12226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:08:07.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:08:07.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:08:07.962 [DEBUG] [Thread-12226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:08:07.962 [DEBUG] [Thread-12226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:08:08.010 [DEBUG] [Thread-12226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:08:08.010 [DEBUG] [Thread-12226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:08:08.019 [DEBUG] [Thread-12226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:08:08.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:08:08.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:08:08.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:08:08.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:08:08.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:08:08.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:08:08.056 [DEBUG] [Thread-12226] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:08:09.782 [DEBUG] [Thread-12228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:08:16.006 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:08:16.007 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:08:24.830 [DEBUG] [Thread-12229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:08:32.431 [DEBUG] [Thread-12230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:08:38.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:08:38.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:08:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:08:38.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 8, 21), 26.89, 14.97, 0.0, 11.68, 17.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:08:38.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:08:21
2025-11-26T05:08:38.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:08:38.999 [DEBUG] [Thread-12231] [transport.py] [_log()] starting thread (client mode): 0x73780370
2025-11-26T05:08:39.000 [DEBUG] [Thread-12231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:08:39.012 [DEBUG] [Thread-12231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:08:39.012 [INFO] [Thread-12231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] client lang: <none>
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] server lang: <none>
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] kex follows: False
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:08:39.015 [DEBUG] [Thread-12231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:08:39.016 [DEBUG] [Thread-12231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:08:39.016 [DEBUG] [Thread-12231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:08:39.016 [DEBUG] [Thread-12231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:08:39.016 [DEBUG] [Thread-12231] [transport.py] [_log()] Compression: none
2025-11-26T05:08:39.016 [DEBUG] [Thread-12231] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:08:39.036 [DEBUG] [Thread-12231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:08:39.036 [DEBUG] [Thread-12231] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:08:39.037 [DEBUG] [Thread-12231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:08:39.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:08:39.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:08:39.039 [DEBUG] [Thread-12231] [transport.py] [_log()] userauth is OK
2025-11-26T05:08:39.039 [DEBUG] [Thread-12231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:08:39.039 [DEBUG] [Thread-12231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:08:39.039 [DEBUG] [Thread-12231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:08:39.039 [DEBUG] [Thread-12231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:08:39.053 [INFO] [Thread-12231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:08:39.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:08:39.695 [DEBUG] [Thread-12231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:08:39.695 [DEBUG] [Thread-12231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:08:39.695 [DEBUG] [Thread-12231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:08:39.736 [DEBUG] [Thread-12231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:08:39.736 [DEBUG] [Thread-12231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:08:39.739 [DEBUG] [Thread-12231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:08:39.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:08:39.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:08:39.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:08:39.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:08:39.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:08:39.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:08:39.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:08:39.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:08:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:08:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.130650 -999.00  +17.90  10.47     20   -5.00 1 1 1 1 1   696    0 22.30 -29.21 NA 10.6 10.5 64.6 12.7 17.9 -25.1 17.8 -24.4 17.6 -22.8 17.7 -24.0
2025-11-26T05:08:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:08:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:08:39.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.130650
2025-11-26T05:08:39.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:08:39.760 [DEBUG] [Thread-12231] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:08:39.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:08:39.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:08:39.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:08:39.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:08:39.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:08:21', tmtdew=26.89, humidity=14.97, cloud=0.0, wind=11.68, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:08:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:08:39.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:08:39.866 [DEBUG] [Thread-12234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:08:54.901 [DEBUG] [Thread-12235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:09:09.935 [DEBUG] [Thread-12236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:09:16.210 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:09:16.212 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:09:24.974 [DEBUG] [Thread-12237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:09:32.502 [DEBUG] [Thread-12238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:09:40.009 [DEBUG] [Thread-12239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:09:55.046 [DEBUG] [Thread-12240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:10:10.078 [DEBUG] [Thread-12241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:10:16.413 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:10:16.414 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:10:25.112 [DEBUG] [Thread-12242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:10:32.577 [DEBUG] [Thread-12243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:10:40.151 [DEBUG] [Thread-12244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:10:52.621 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T05:10:55.182 [DEBUG] [Thread-12245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:11:10.219 [DEBUG] [Thread-12246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:11:16.621 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:11:16.622 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:11:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:11:22.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:11:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:11:23.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 11, 1), 26.94, 14.97, 0.0, 11.58, 17.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:11:23.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:11:01
2025-11-26T05:11:23.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:11:23.640 [DEBUG] [Thread-12247] [transport.py] [_log()] starting thread (client mode): 0x70d1d1b0
2025-11-26T05:11:23.640 [DEBUG] [Thread-12247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:11:23.655 [DEBUG] [Thread-12247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:11:23.655 [INFO] [Thread-12247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] client lang: <none>
2025-11-26T05:11:23.658 [DEBUG] [Thread-12247] [transport.py] [_log()] server lang: <none>
2025-11-26T05:11:23.659 [DEBUG] [Thread-12247] [transport.py] [_log()] kex follows: False
2025-11-26T05:11:23.659 [DEBUG] [Thread-12247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:11:23.659 [DEBUG] [Thread-12247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:11:23.659 [DEBUG] [Thread-12247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:11:23.659 [DEBUG] [Thread-12247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:11:23.659 [DEBUG] [Thread-12247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:11:23.659 [DEBUG] [Thread-12247] [transport.py] [_log()] Compression: none
2025-11-26T05:11:23.659 [DEBUG] [Thread-12247] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:11:23.675 [DEBUG] [Thread-12247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:11:23.675 [DEBUG] [Thread-12247] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:11:23.675 [DEBUG] [Thread-12247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:11:23.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:11:23.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:11:23.677 [DEBUG] [Thread-12247] [transport.py] [_log()] userauth is OK
2025-11-26T05:11:23.677 [DEBUG] [Thread-12247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:11:23.677 [DEBUG] [Thread-12247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:11:23.677 [DEBUG] [Thread-12247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:11:23.678 [DEBUG] [Thread-12247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:11:23.687 [INFO] [Thread-12247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:11:23.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:11:24.252 [DEBUG] [Thread-12247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:11:24.252 [DEBUG] [Thread-12247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:11:24.252 [DEBUG] [Thread-12247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:11:24.292 [DEBUG] [Thread-12247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:11:24.292 [DEBUG] [Thread-12247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:11:24.294 [DEBUG] [Thread-12247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:11:24.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:11:24.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:11:24.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:11:24.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:11:24.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:11:24.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:11:24.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.132733 -999.00  +18.10  11.78     20   -5.00 1 1 1 1 1   767    0 22.76 -21.03 NA 12.2 11.8 56.8 15.2 17.9 -24.9 17.9 -24.1 17.6 -22.9 17.8 -23.9
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.132733
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:11:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:11:01', tmtdew=26.94, humidity=14.97, cloud=0.0, wind=11.58, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:11:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:11:24.308 [DEBUG] [Thread-12247] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:11:24.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:11:24.393 [DEBUG] [Thread-12250] [transport.py] [_log()] starting thread (client mode): 0x70d00280
2025-11-26T05:11:24.393 [DEBUG] [Thread-12250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:11:24.409 [DEBUG] [Thread-12250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:11:24.409 [INFO] [Thread-12250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] client lang: <none>
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] server lang: <none>
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] kex follows: False
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:11:24.416 [DEBUG] [Thread-12250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:11:24.417 [DEBUG] [Thread-12250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:11:24.417 [DEBUG] [Thread-12250] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:11:24.417 [DEBUG] [Thread-12250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:11:24.417 [DEBUG] [Thread-12250] [transport.py] [_log()] Compression: none
2025-11-26T05:11:24.417 [DEBUG] [Thread-12250] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:11:24.472 [DEBUG] [Thread-12250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:11:24.472 [DEBUG] [Thread-12250] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:11:24.473 [DEBUG] [Thread-12250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:11:24.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:11:24.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:11:24.530 [DEBUG] [Thread-12250] [transport.py] [_log()] userauth is OK
2025-11-26T05:11:24.530 [DEBUG] [Thread-12250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:11:24.530 [DEBUG] [Thread-12250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:11:24.530 [DEBUG] [Thread-12250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:11:24.530 [DEBUG] [Thread-12250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:11:24.544 [INFO] [Thread-12250] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:11:24.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:11:24.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:11:25.251 [DEBUG] [Thread-12252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:11:25.446 [DEBUG] [Thread-12250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:11:25.446 [DEBUG] [Thread-12250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:11:25.494 [DEBUG] [Thread-12250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:11:25.494 [DEBUG] [Thread-12250] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:11:25.503 [DEBUG] [Thread-12250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:11:25.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:11:25.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:11:25.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:11:25.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:11:25.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:11:25.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:11:25.541 [DEBUG] [Thread-12250] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:11:32.657 [DEBUG] [Thread-12253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:11:40.304 [DEBUG] [Thread-12254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:11:55.341 [DEBUG] [Thread-12255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:11:55.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:11:55.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:11:55.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:11:56.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 11, 33), 26.09, 15.94, 0.0, 12.88, 17.21, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:11:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:11:33
2025-11-26T05:11:56.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:11:56.508 [DEBUG] [Thread-12256] [transport.py] [_log()] starting thread (client mode): 0x73782410
2025-11-26T05:11:56.508 [DEBUG] [Thread-12256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:11:56.529 [DEBUG] [Thread-12256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:11:56.529 [INFO] [Thread-12256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] client lang: <none>
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] server lang: <none>
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] kex follows: False
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:11:56.532 [DEBUG] [Thread-12256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:11:56.533 [DEBUG] [Thread-12256] [transport.py] [_log()] Compression: none
2025-11-26T05:11:56.533 [DEBUG] [Thread-12256] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:11:56.545 [DEBUG] [Thread-12256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:11:56.545 [DEBUG] [Thread-12256] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:11:56.545 [DEBUG] [Thread-12256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:11:56.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:11:56.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:11:56.546 [DEBUG] [Thread-12256] [transport.py] [_log()] userauth is OK
2025-11-26T05:11:56.546 [DEBUG] [Thread-12256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:11:56.546 [DEBUG] [Thread-12256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:11:56.546 [DEBUG] [Thread-12256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:11:56.546 [DEBUG] [Thread-12256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:11:56.559 [INFO] [Thread-12256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:11:56.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:11:57.154 [DEBUG] [Thread-12256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:11:57.154 [DEBUG] [Thread-12256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:11:57.154 [DEBUG] [Thread-12256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:11:57.194 [DEBUG] [Thread-12256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:11:57.194 [DEBUG] [Thread-12256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:11:57.197 [DEBUG] [Thread-12256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:11:57.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:11:57.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:11:57.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:11:57.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:11:57.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:11:57.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:11:57.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:11:57.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:11:57.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:11:57.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.133081 -999.00  +18.20  11.81     20   -5.00 1 1 1 1 1   776    0 22.64 -19.73 NA 11.7 11.8 58.8 13.7 17.9 -24.7 17.9 -24.1 17.6 -22.7 17.8 -24.0
2025-11-26T05:11:57.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:11:57.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:11:57.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.133081
2025-11-26T05:11:57.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:11:57.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:11:57.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:11:57.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:11:57.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:11:57.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:11:33', tmtdew=26.09, humidity=15.94, cloud=0.0, wind=12.88, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:11:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:11:57.216 [DEBUG] [Thread-12256] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:11:57.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:11:57.311 [DEBUG] [Thread-12259] [transport.py] [_log()] starting thread (client mode): 0x73781f90
2025-11-26T05:11:57.311 [DEBUG] [Thread-12259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:11:57.330 [DEBUG] [Thread-12259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:11:57.330 [INFO] [Thread-12259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:11:57.337 [DEBUG] [Thread-12259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:11:57.337 [DEBUG] [Thread-12259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] client lang: <none>
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] server lang: <none>
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] kex follows: False
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] Compression: none
2025-11-26T05:11:57.338 [DEBUG] [Thread-12259] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:11:57.395 [DEBUG] [Thread-12259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:11:57.395 [DEBUG] [Thread-12259] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:11:57.395 [DEBUG] [Thread-12259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:11:57.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:11:57.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:11:57.452 [DEBUG] [Thread-12259] [transport.py] [_log()] userauth is OK
2025-11-26T05:11:57.452 [DEBUG] [Thread-12259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:11:57.452 [DEBUG] [Thread-12259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:11:57.452 [DEBUG] [Thread-12259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:11:57.452 [DEBUG] [Thread-12259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:11:57.471 [INFO] [Thread-12259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:11:57.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:11:57.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:11:58.288 [DEBUG] [Thread-12259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:11:58.288 [DEBUG] [Thread-12259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:11:58.336 [DEBUG] [Thread-12259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:11:58.336 [DEBUG] [Thread-12259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:11:58.346 [DEBUG] [Thread-12259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:11:58.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:11:58.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:11:58.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:11:58.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:11:58.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:11:58.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:11:58.383 [DEBUG] [Thread-12259] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:12:10.371 [DEBUG] [Thread-12261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:12:16.827 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:12:16.829 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:12:25.425 [DEBUG] [Thread-12262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:12:28.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:12:28.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:12:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:12:29.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 12, 5), 27.11, 15.0, 0.0, 11.68, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:12:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:12:05
2025-11-26T05:12:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:12:29.340 [DEBUG] [Thread-12263] [transport.py] [_log()] starting thread (client mode): 0x70d2a920
2025-11-26T05:12:29.340 [DEBUG] [Thread-12263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:12:29.359 [DEBUG] [Thread-12263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:12:29.359 [INFO] [Thread-12263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:12:29.362 [DEBUG] [Thread-12263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:12:29.362 [DEBUG] [Thread-12263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] client lang: <none>
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] server lang: <none>
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] kex follows: False
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:12:29.363 [DEBUG] [Thread-12263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:12:29.364 [DEBUG] [Thread-12263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:12:29.364 [DEBUG] [Thread-12263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:12:29.364 [DEBUG] [Thread-12263] [transport.py] [_log()] Compression: none
2025-11-26T05:12:29.364 [DEBUG] [Thread-12263] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:12:29.383 [DEBUG] [Thread-12263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:12:29.383 [DEBUG] [Thread-12263] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:12:29.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:12:29.385 [DEBUG] [Thread-12263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:12:29.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:12:29.387 [DEBUG] [Thread-12263] [transport.py] [_log()] userauth is OK
2025-11-26T05:12:29.387 [DEBUG] [Thread-12263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:12:29.387 [DEBUG] [Thread-12263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:12:29.387 [DEBUG] [Thread-12263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:12:29.387 [DEBUG] [Thread-12263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:12:29.412 [INFO] [Thread-12263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:12:29.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:12:30.030 [DEBUG] [Thread-12263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:12:30.031 [DEBUG] [Thread-12263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:12:30.031 [DEBUG] [Thread-12263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:12:30.072 [DEBUG] [Thread-12263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:12:30.072 [DEBUG] [Thread-12263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:12:30.076 [DEBUG] [Thread-12263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:12:30.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:12:30.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:12:30.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:12:30.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:12:30.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:12:30.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:12:30.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:12:30.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:12:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:12:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.133081 -999.00  +18.20  11.81     20   -5.00 1 1 1 1 1   776    0 22.64 -19.73 NA 11.7 11.8 58.8 13.7 17.9 -24.7 17.9 -24.1 17.6 -22.7 17.8 -24.0
2025-11-26T05:12:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:12:30.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:12:30.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.133081
2025-11-26T05:12:30.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:12:30.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:12:30.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:12:30.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:12:30.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:12:30.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:12:05', tmtdew=27.11, humidity=15.0, cloud=0.0, wind=11.68, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:11:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:12:30.105 [DEBUG] [Thread-12263] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:12:30.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:12:30.205 [DEBUG] [Thread-12266] [transport.py] [_log()] starting thread (client mode): 0x70d28eb0
2025-11-26T05:12:30.205 [DEBUG] [Thread-12266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:12:30.224 [DEBUG] [Thread-12266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:12:30.224 [INFO] [Thread-12266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:12:30.231 [DEBUG] [Thread-12266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:12:30.232 [DEBUG] [Thread-12266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:12:30.232 [DEBUG] [Thread-12266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:12:30.232 [DEBUG] [Thread-12266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:12:30.232 [DEBUG] [Thread-12266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:12:30.232 [DEBUG] [Thread-12266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:12:30.232 [DEBUG] [Thread-12266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:12:30.232 [DEBUG] [Thread-12266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] client lang: <none>
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] server lang: <none>
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] kex follows: False
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] Compression: none
2025-11-26T05:12:30.233 [DEBUG] [Thread-12266] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:12:30.292 [DEBUG] [Thread-12266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:12:30.293 [DEBUG] [Thread-12266] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:12:30.293 [DEBUG] [Thread-12266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:12:30.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:12:30.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:12:30.348 [DEBUG] [Thread-12266] [transport.py] [_log()] userauth is OK
2025-11-26T05:12:30.348 [DEBUG] [Thread-12266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:12:30.348 [DEBUG] [Thread-12266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:12:30.349 [DEBUG] [Thread-12266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:12:30.349 [DEBUG] [Thread-12266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:12:30.368 [INFO] [Thread-12266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:12:30.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:12:30.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:12:31.208 [DEBUG] [Thread-12266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:12:31.208 [DEBUG] [Thread-12266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:12:31.256 [DEBUG] [Thread-12266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:12:31.256 [DEBUG] [Thread-12266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:12:31.265 [DEBUG] [Thread-12266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:12:31.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:12:31.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:12:31.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:12:31.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:12:31.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:12:31.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:12:31.302 [DEBUG] [Thread-12266] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:12:32.744 [DEBUG] [Thread-12268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:12:40.456 [DEBUG] [Thread-12269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:12:55.511 [DEBUG] [Thread-12270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:13:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:13:01.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:13:01.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:13:01.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 12, 37), 27.01, 15.02, 0.0, 11.42, 18.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:13:01.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:12:37
2025-11-26T05:13:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:13:02.275 [DEBUG] [Thread-12271] [transport.py] [_log()] starting thread (client mode): 0x73782680
2025-11-26T05:13:02.275 [DEBUG] [Thread-12271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:13:02.295 [DEBUG] [Thread-12271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:13:02.295 [INFO] [Thread-12271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] client lang: <none>
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] server lang: <none>
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] kex follows: False
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:13:02.298 [DEBUG] [Thread-12271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:13:02.299 [DEBUG] [Thread-12271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:13:02.299 [DEBUG] [Thread-12271] [transport.py] [_log()] Compression: none
2025-11-26T05:13:02.299 [DEBUG] [Thread-12271] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:13:02.315 [DEBUG] [Thread-12271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:13:02.316 [DEBUG] [Thread-12271] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:13:02.316 [DEBUG] [Thread-12271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:13:02.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:13:02.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:13:02.318 [DEBUG] [Thread-12271] [transport.py] [_log()] userauth is OK
2025-11-26T05:13:02.318 [DEBUG] [Thread-12271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:13:02.318 [DEBUG] [Thread-12271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:13:02.319 [DEBUG] [Thread-12271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:13:02.319 [DEBUG] [Thread-12271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:13:02.340 [INFO] [Thread-12271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:13:02.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:13:03.111 [DEBUG] [Thread-12271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:13:03.112 [DEBUG] [Thread-12271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:13:03.112 [DEBUG] [Thread-12271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:13:03.152 [DEBUG] [Thread-12271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:13:03.153 [DEBUG] [Thread-12271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:13:03.155 [DEBUG] [Thread-12271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:13:03.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:13:03.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:13:03.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:13:03.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:13:03.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:13:03.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:13:03.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:13:03.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:13:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:13:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.133428 -999.00  +18.30  10.97     20   -4.90 1 1 1 1 1   785    0 23.03 -16.94 NA 10.8 11.0 59.4 14.1 17.9 -24.8 17.9 -24.2 17.6 -22.8 17.8 -24.0
2025-11-26T05:13:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:13:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:13:03.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.133428
2025-11-26T05:13:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:13:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:13:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:13:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:13:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:13:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:12:37', tmtdew=27.01, humidity=15.02, cloud=0.0, wind=11.42, temperature=18.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:12:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:13:03.176 [DEBUG] [Thread-12271] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:13:03.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:13:03.273 [DEBUG] [Thread-12274] [transport.py] [_log()] starting thread (client mode): 0x73781f90
2025-11-26T05:13:03.273 [DEBUG] [Thread-12274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:13:03.288 [DEBUG] [Thread-12274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:13:03.288 [INFO] [Thread-12274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:13:03.295 [DEBUG] [Thread-12274] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:13:03.296 [DEBUG] [Thread-12274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:13:03.296 [DEBUG] [Thread-12274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:13:03.296 [DEBUG] [Thread-12274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:13:03.296 [DEBUG] [Thread-12274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:13:03.296 [DEBUG] [Thread-12274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:13:03.296 [DEBUG] [Thread-12274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:13:03.296 [DEBUG] [Thread-12274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:13:03.296 [DEBUG] [Thread-12274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:13:03.296 [DEBUG] [Thread-12274] [transport.py] [_log()] client lang: <none>
2025-11-26T05:13:03.297 [DEBUG] [Thread-12274] [transport.py] [_log()] server lang: <none>
2025-11-26T05:13:03.297 [DEBUG] [Thread-12274] [transport.py] [_log()] kex follows: False
2025-11-26T05:13:03.297 [DEBUG] [Thread-12274] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:13:03.297 [DEBUG] [Thread-12274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:13:03.297 [DEBUG] [Thread-12274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:13:03.297 [DEBUG] [Thread-12274] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:13:03.297 [DEBUG] [Thread-12274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:13:03.298 [DEBUG] [Thread-12274] [transport.py] [_log()] Compression: none
2025-11-26T05:13:03.298 [DEBUG] [Thread-12274] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:13:03.359 [DEBUG] [Thread-12274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:13:03.360 [DEBUG] [Thread-12274] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:13:03.360 [DEBUG] [Thread-12274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:13:03.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:13:03.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:13:03.415 [DEBUG] [Thread-12274] [transport.py] [_log()] userauth is OK
2025-11-26T05:13:03.415 [DEBUG] [Thread-12274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:13:03.416 [DEBUG] [Thread-12274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:13:03.416 [DEBUG] [Thread-12274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:13:03.416 [DEBUG] [Thread-12274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:13:03.434 [INFO] [Thread-12274] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:13:03.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:13:03.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:13:04.286 [DEBUG] [Thread-12274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:13:04.287 [DEBUG] [Thread-12274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:13:04.335 [DEBUG] [Thread-12274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:13:04.335 [DEBUG] [Thread-12274] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:13:04.344 [DEBUG] [Thread-12274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:13:04.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:13:04.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:13:04.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:13:04.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:13:04.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:13:04.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:13:04.381 [DEBUG] [Thread-12274] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:13:10.544 [DEBUG] [Thread-12276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:13:17.032 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:13:17.033 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:13:25.583 [DEBUG] [Thread-12277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:13:32.818 [DEBUG] [Thread-12278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:13:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:13:34.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:13:34.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:13:35.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 13, 9), 27.04, 14.97, 0.0, 11.52, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:13:35.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:13:09
2025-11-26T05:13:35.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:13:35.329 [DEBUG] [Thread-12279] [transport.py] [_log()] starting thread (client mode): 0x70d29e40
2025-11-26T05:13:35.329 [DEBUG] [Thread-12279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:13:35.350 [DEBUG] [Thread-12279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:13:35.350 [INFO] [Thread-12279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:13:35.353 [DEBUG] [Thread-12279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:13:35.353 [DEBUG] [Thread-12279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:13:35.353 [DEBUG] [Thread-12279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] client lang: <none>
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] server lang: <none>
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] kex follows: False
2025-11-26T05:13:35.354 [DEBUG] [Thread-12279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:13:35.355 [DEBUG] [Thread-12279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:13:35.355 [DEBUG] [Thread-12279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:13:35.355 [DEBUG] [Thread-12279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:13:35.355 [DEBUG] [Thread-12279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:13:35.355 [DEBUG] [Thread-12279] [transport.py] [_log()] Compression: none
2025-11-26T05:13:35.355 [DEBUG] [Thread-12279] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:13:35.374 [DEBUG] [Thread-12279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:13:35.375 [DEBUG] [Thread-12279] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:13:35.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:13:35.376 [DEBUG] [Thread-12279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:13:35.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:13:35.378 [DEBUG] [Thread-12279] [transport.py] [_log()] userauth is OK
2025-11-26T05:13:35.379 [DEBUG] [Thread-12279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:13:35.379 [DEBUG] [Thread-12279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:13:35.379 [DEBUG] [Thread-12279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:13:35.379 [DEBUG] [Thread-12279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:13:35.405 [INFO] [Thread-12279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:13:35.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:13:36.034 [DEBUG] [Thread-12279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:13:36.035 [DEBUG] [Thread-12279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:13:36.035 [DEBUG] [Thread-12279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:13:36.076 [DEBUG] [Thread-12279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:13:36.076 [DEBUG] [Thread-12279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:13:36.079 [DEBUG] [Thread-12279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:13:36.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:13:36.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:13:36.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:13:36.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:13:36.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:13:36.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:13:36.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:13:36.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:13:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:13:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.133775 -999.00  +18.30  12.66     20   -4.90 1 1 1 1 1   793    0 22.32 -15.57 NA 12.6 12.7 56.8 13.3 17.9 -24.9 17.9 -24.0 17.6 -23.0 17.9 -24.0
2025-11-26T05:13:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:13:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:13:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.133775
2025-11-26T05:13:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:13:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:13:36.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:13:36.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:13:36.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:13:36.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:13:09', tmtdew=27.04, humidity=14.97, cloud=0.0, wind=11.52, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:12:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:13:36.106 [DEBUG] [Thread-12279] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:13:36.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:13:36.203 [DEBUG] [Thread-12282] [transport.py] [_log()] starting thread (client mode): 0x70d1f4f0
2025-11-26T05:13:36.203 [DEBUG] [Thread-12282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:13:36.219 [DEBUG] [Thread-12282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:13:36.219 [INFO] [Thread-12282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] client lang: <none>
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] server lang: <none>
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] kex follows: False
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:13:36.227 [DEBUG] [Thread-12282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:13:36.228 [DEBUG] [Thread-12282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:13:36.228 [DEBUG] [Thread-12282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:13:36.228 [DEBUG] [Thread-12282] [transport.py] [_log()] Compression: none
2025-11-26T05:13:36.228 [DEBUG] [Thread-12282] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:13:36.285 [DEBUG] [Thread-12282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:13:36.286 [DEBUG] [Thread-12282] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:13:36.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:13:36.287 [DEBUG] [Thread-12282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:13:36.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:13:36.342 [DEBUG] [Thread-12282] [transport.py] [_log()] userauth is OK
2025-11-26T05:13:36.343 [DEBUG] [Thread-12282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:13:36.343 [DEBUG] [Thread-12282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:13:36.343 [DEBUG] [Thread-12282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:13:36.343 [DEBUG] [Thread-12282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:13:36.365 [INFO] [Thread-12282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:13:36.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:13:36.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:13:37.193 [DEBUG] [Thread-12282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:13:37.193 [DEBUG] [Thread-12282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:13:37.241 [DEBUG] [Thread-12282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:13:37.241 [DEBUG] [Thread-12282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:13:37.250 [DEBUG] [Thread-12282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:13:37.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:13:37.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:13:37.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:13:37.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:13:37.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:13:37.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:13:37.287 [DEBUG] [Thread-12282] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:13:40.621 [DEBUG] [Thread-12284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:13:55.677 [DEBUG] [Thread-12285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:14:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:14:07.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:14:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:14:07.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 13, 41), 27.08, 14.97, 0.0, 11.56, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:14:07.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:13:41
2025-11-26T05:14:08.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:14:08.206 [DEBUG] [Thread-12286] [transport.py] [_log()] starting thread (client mode): 0x70d1dcf0
2025-11-26T05:14:08.206 [DEBUG] [Thread-12286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:14:08.221 [DEBUG] [Thread-12286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:14:08.221 [INFO] [Thread-12286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:14:08.224 [DEBUG] [Thread-12286] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:14:08.224 [DEBUG] [Thread-12286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:14:08.224 [DEBUG] [Thread-12286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:14:08.224 [DEBUG] [Thread-12286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:14:08.224 [DEBUG] [Thread-12286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] client lang: <none>
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] server lang: <none>
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] kex follows: False
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] Compression: none
2025-11-26T05:14:08.225 [DEBUG] [Thread-12286] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:14:08.240 [DEBUG] [Thread-12286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:14:08.241 [DEBUG] [Thread-12286] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:14:08.242 [DEBUG] [Thread-12286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:14:08.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:14:08.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:14:08.243 [DEBUG] [Thread-12286] [transport.py] [_log()] userauth is OK
2025-11-26T05:14:08.243 [DEBUG] [Thread-12286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:14:08.243 [DEBUG] [Thread-12286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:14:08.244 [DEBUG] [Thread-12286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:14:08.244 [DEBUG] [Thread-12286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:14:08.261 [INFO] [Thread-12286] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:14:08.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:14:09.055 [DEBUG] [Thread-12286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:14:09.056 [DEBUG] [Thread-12286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:14:09.056 [DEBUG] [Thread-12286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:14:09.097 [DEBUG] [Thread-12286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:14:09.097 [DEBUG] [Thread-12286] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:14:09.100 [DEBUG] [Thread-12286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:14:09.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:14:09.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:14:09.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:14:09.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:14:09.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:14:09.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:14:09.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:14:09.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:14:09.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:14:09.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.134122 -999.00  +18.30  12.71     20   -4.90 1 1 1 1 1   801    0 22.52 -14.60 NA 12.2 12.7 48.2 14.4 17.9 -25.1 17.9 -24.2 17.6 -22.9 17.8 -23.9
2025-11-26T05:14:09.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:14:09.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:14:09.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.134122
2025-11-26T05:14:09.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:14:09.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:14:09.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:14:09.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:14:09.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:14:09.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:13:41', tmtdew=27.08, humidity=14.97, cloud=0.0, wind=11.56, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:13:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:14:09.127 [DEBUG] [Thread-12286] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:14:09.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:14:09.224 [DEBUG] [Thread-12289] [transport.py] [_log()] starting thread (client mode): 0x70de4c70
2025-11-26T05:14:09.224 [DEBUG] [Thread-12289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:14:09.239 [DEBUG] [Thread-12289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:14:09.239 [INFO] [Thread-12289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:14:09.247 [DEBUG] [Thread-12289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:14:09.248 [DEBUG] [Thread-12289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:14:09.248 [DEBUG] [Thread-12289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:14:09.248 [DEBUG] [Thread-12289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:14:09.248 [DEBUG] [Thread-12289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:14:09.248 [DEBUG] [Thread-12289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:14:09.248 [DEBUG] [Thread-12289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:14:09.248 [DEBUG] [Thread-12289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:14:09.248 [DEBUG] [Thread-12289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:14:09.248 [DEBUG] [Thread-12289] [transport.py] [_log()] client lang: <none>
2025-11-26T05:14:09.249 [DEBUG] [Thread-12289] [transport.py] [_log()] server lang: <none>
2025-11-26T05:14:09.249 [DEBUG] [Thread-12289] [transport.py] [_log()] kex follows: False
2025-11-26T05:14:09.249 [DEBUG] [Thread-12289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:14:09.249 [DEBUG] [Thread-12289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:14:09.249 [DEBUG] [Thread-12289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:14:09.249 [DEBUG] [Thread-12289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:14:09.249 [DEBUG] [Thread-12289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:14:09.250 [DEBUG] [Thread-12289] [transport.py] [_log()] Compression: none
2025-11-26T05:14:09.250 [DEBUG] [Thread-12289] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:14:09.306 [DEBUG] [Thread-12289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:14:09.306 [DEBUG] [Thread-12289] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:14:09.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:14:09.308 [DEBUG] [Thread-12289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:14:09.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:14:09.361 [DEBUG] [Thread-12289] [transport.py] [_log()] userauth is OK
2025-11-26T05:14:09.362 [DEBUG] [Thread-12289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:14:09.362 [DEBUG] [Thread-12289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:14:09.362 [DEBUG] [Thread-12289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:14:09.362 [DEBUG] [Thread-12289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:14:09.381 [INFO] [Thread-12289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:14:09.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:14:09.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:14:10.217 [DEBUG] [Thread-12289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:14:10.218 [DEBUG] [Thread-12289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:14:10.266 [DEBUG] [Thread-12289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:14:10.266 [DEBUG] [Thread-12289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:14:10.275 [DEBUG] [Thread-12289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:14:10.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:14:10.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:14:10.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:14:10.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:14:10.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:14:10.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:14:10.311 [DEBUG] [Thread-12289] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:14:10.716 [DEBUG] [Thread-12291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:14:17.236 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:14:17.237 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:14:25.765 [DEBUG] [Thread-12292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:14:32.894 [DEBUG] [Thread-12293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:14:40.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:14:40.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:14:40.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:14:40.795 [DEBUG] [Thread-12294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:14:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 14, 13), 27.07, 14.99, 0.0, 10.83, 18.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:14:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:14:13
2025-11-26T05:14:41.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:14:41.271 [DEBUG] [Thread-12295] [transport.py] [_log()] starting thread (client mode): 0x70de6c20
2025-11-26T05:14:41.271 [DEBUG] [Thread-12295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:14:41.291 [DEBUG] [Thread-12295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:14:41.292 [INFO] [Thread-12295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:14:41.294 [DEBUG] [Thread-12295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:14:41.294 [DEBUG] [Thread-12295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] client lang: <none>
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] server lang: <none>
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] kex follows: False
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] Compression: none
2025-11-26T05:14:41.295 [DEBUG] [Thread-12295] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:14:41.312 [DEBUG] [Thread-12295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:14:41.313 [DEBUG] [Thread-12295] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:14:41.313 [DEBUG] [Thread-12295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:14:41.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:14:41.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:14:41.315 [DEBUG] [Thread-12295] [transport.py] [_log()] userauth is OK
2025-11-26T05:14:41.315 [DEBUG] [Thread-12295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:14:41.316 [DEBUG] [Thread-12295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:14:41.316 [DEBUG] [Thread-12295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:14:41.316 [DEBUG] [Thread-12295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:14:41.344 [INFO] [Thread-12295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:14:41.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:14:41.961 [DEBUG] [Thread-12295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:14:41.962 [DEBUG] [Thread-12295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:14:41.962 [DEBUG] [Thread-12295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:14:42.003 [DEBUG] [Thread-12295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:14:42.003 [DEBUG] [Thread-12295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:14:42.007 [DEBUG] [Thread-12295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:14:42.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:14:42.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:14:42.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:14:42.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:14:42.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:14:42.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:14:42.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:14:42.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:14:42.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:14:42.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.134817 -999.00  +18.40  12.42     19   -4.90 1 1 1 1 1   815    0 22.35 -9.74 NA 10.2 12.4 51.6 13.1 18.0 -25.0 17.9 -23.9 17.7 -22.9 17.9 -23.9
2025-11-26T05:14:42.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:14:42.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:14:42.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.134817
2025-11-26T05:14:42.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:14:42.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:14:42.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:14:42.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:14:42.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:14:42.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:14:13', tmtdew=27.07, humidity=14.99, cloud=0.0, wind=10.83, temperature=18.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:14:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:14:42.035 [DEBUG] [Thread-12295] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:14:42.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:14:42.131 [DEBUG] [Thread-12298] [transport.py] [_log()] starting thread (client mode): 0x73783880
2025-11-26T05:14:42.131 [DEBUG] [Thread-12298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:14:42.146 [DEBUG] [Thread-12298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:14:42.146 [INFO] [Thread-12298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] client lang: <none>
2025-11-26T05:14:42.154 [DEBUG] [Thread-12298] [transport.py] [_log()] server lang: <none>
2025-11-26T05:14:42.155 [DEBUG] [Thread-12298] [transport.py] [_log()] kex follows: False
2025-11-26T05:14:42.155 [DEBUG] [Thread-12298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:14:42.155 [DEBUG] [Thread-12298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:14:42.155 [DEBUG] [Thread-12298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:14:42.155 [DEBUG] [Thread-12298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:14:42.155 [DEBUG] [Thread-12298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:14:42.155 [DEBUG] [Thread-12298] [transport.py] [_log()] Compression: none
2025-11-26T05:14:42.155 [DEBUG] [Thread-12298] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:14:42.212 [DEBUG] [Thread-12298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:14:42.213 [DEBUG] [Thread-12298] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:14:42.213 [DEBUG] [Thread-12298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:14:42.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:14:42.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:14:42.269 [DEBUG] [Thread-12298] [transport.py] [_log()] userauth is OK
2025-11-26T05:14:42.269 [DEBUG] [Thread-12298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:14:42.269 [DEBUG] [Thread-12298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:14:42.269 [DEBUG] [Thread-12298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:14:42.269 [DEBUG] [Thread-12298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:14:42.288 [INFO] [Thread-12298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:14:42.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:14:42.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:14:43.108 [DEBUG] [Thread-12298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:14:43.108 [DEBUG] [Thread-12298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:14:43.156 [DEBUG] [Thread-12298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:14:43.156 [DEBUG] [Thread-12298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:14:43.165 [DEBUG] [Thread-12298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:14:43.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:14:43.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:14:43.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:14:43.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:14:43.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:14:43.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:14:43.202 [DEBUG] [Thread-12298] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:14:55.830 [DEBUG] [Thread-12300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:15:10.881 [DEBUG] [Thread-12301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:15:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:15:13.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:15:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:15:13.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 14, 45), 27.11, 15.02, 0.0, 11.35, 18.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:15:13.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:14:45
2025-11-26T05:15:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:15:14.157 [DEBUG] [Thread-12302] [transport.py] [_log()] starting thread (client mode): 0x737813c0
2025-11-26T05:15:14.157 [DEBUG] [Thread-12302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:15:14.177 [DEBUG] [Thread-12302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:15:14.177 [INFO] [Thread-12302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:15:14.180 [DEBUG] [Thread-12302] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:15:14.180 [DEBUG] [Thread-12302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:15:14.180 [DEBUG] [Thread-12302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:15:14.180 [DEBUG] [Thread-12302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] client lang: <none>
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] server lang: <none>
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] kex follows: False
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:15:14.181 [DEBUG] [Thread-12302] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:15:14.182 [DEBUG] [Thread-12302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:15:14.182 [DEBUG] [Thread-12302] [transport.py] [_log()] Compression: none
2025-11-26T05:15:14.182 [DEBUG] [Thread-12302] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:15:14.200 [DEBUG] [Thread-12302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:15:14.201 [DEBUG] [Thread-12302] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:15:14.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:15:14.202 [DEBUG] [Thread-12302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:15:14.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:15:14.204 [DEBUG] [Thread-12302] [transport.py] [_log()] userauth is OK
2025-11-26T05:15:14.204 [DEBUG] [Thread-12302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:15:14.204 [DEBUG] [Thread-12302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:15:14.204 [DEBUG] [Thread-12302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:15:14.204 [DEBUG] [Thread-12302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:15:14.230 [INFO] [Thread-12302] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:15:14.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:15:15.362 [DEBUG] [Thread-12302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:15:15.362 [DEBUG] [Thread-12302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:15:15.362 [DEBUG] [Thread-12302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:15:15.403 [DEBUG] [Thread-12302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:15:15.403 [DEBUG] [Thread-12302] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:15:15.406 [DEBUG] [Thread-12302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:15:15.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:15:15.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:15:15.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:15:15.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:15:15.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:15:15.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:15:15.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:15:15.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:15:15.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:15:15.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.135164 -999.00  +18.40  10.26     20   -4.80 1 1 1 1 1   821    0 22.94 -8.38 NA 11.2 10.3 53.0 12.7 18.0 -25.0 17.9 -24.1 17.7 -22.8 17.9 -24.0
2025-11-26T05:15:15.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:15:15.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:15:15.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.135164
2025-11-26T05:15:15.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:15:15.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:15:15.433 [DEBUG] [Thread-12302] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:15:15.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:15:15.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:15:15.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:15:15.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:14:45', tmtdew=27.11, humidity=15.02, cloud=0.0, wind=11.35, temperature=18.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:14:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:15:15.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:15:15.526 [DEBUG] [Thread-12305] [transport.py] [_log()] starting thread (client mode): 0x70d743d0
2025-11-26T05:15:15.527 [DEBUG] [Thread-12305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:15:15.542 [DEBUG] [Thread-12305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:15:15.542 [INFO] [Thread-12305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:15:15.550 [DEBUG] [Thread-12305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:15:15.550 [DEBUG] [Thread-12305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:15:15.550 [DEBUG] [Thread-12305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:15:15.550 [DEBUG] [Thread-12305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:15:15.550 [DEBUG] [Thread-12305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:15:15.550 [DEBUG] [Thread-12305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:15:15.550 [DEBUG] [Thread-12305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:15:15.550 [DEBUG] [Thread-12305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:15:15.550 [DEBUG] [Thread-12305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] client lang: <none>
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] server lang: <none>
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] kex follows: False
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] Compression: none
2025-11-26T05:15:15.551 [DEBUG] [Thread-12305] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:15:15.608 [DEBUG] [Thread-12305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:15:15.608 [DEBUG] [Thread-12305] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:15:15.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:15:15.609 [DEBUG] [Thread-12305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:15:15.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:15:15.664 [DEBUG] [Thread-12305] [transport.py] [_log()] userauth is OK
2025-11-26T05:15:15.664 [DEBUG] [Thread-12305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:15:15.664 [DEBUG] [Thread-12305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:15:15.665 [DEBUG] [Thread-12305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:15:15.665 [DEBUG] [Thread-12305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:15:15.683 [INFO] [Thread-12305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:15:15.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:15:15.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:15:16.514 [DEBUG] [Thread-12305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:15:16.514 [DEBUG] [Thread-12305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:15:16.562 [DEBUG] [Thread-12305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:15:16.562 [DEBUG] [Thread-12305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:15:16.571 [DEBUG] [Thread-12305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:15:16.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:15:16.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:15:16.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:15:16.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:15:16.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:15:16.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:15:16.608 [DEBUG] [Thread-12305] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:15:17.441 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:15:17.442 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:15:25.922 [DEBUG] [Thread-12307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:15:32.966 [DEBUG] [Thread-12308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:15:40.971 [DEBUG] [Thread-12309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:15:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:15:46.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:15:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:15:47.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 15, 17), 27.18, 14.94, 0.0, 10.66, 18.24, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:15:47.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:15:17
2025-11-26T05:15:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:15:47.560 [DEBUG] [Thread-12310] [transport.py] [_log()] starting thread (client mode): 0x73782770
2025-11-26T05:15:47.560 [DEBUG] [Thread-12310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:15:47.580 [DEBUG] [Thread-12310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:15:47.580 [INFO] [Thread-12310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] client lang: <none>
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] server lang: <none>
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] kex follows: False
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] Compression: none
2025-11-26T05:15:47.584 [DEBUG] [Thread-12310] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:15:47.599 [DEBUG] [Thread-12310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:15:47.600 [DEBUG] [Thread-12310] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:15:47.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:15:47.601 [DEBUG] [Thread-12310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:15:47.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:15:47.603 [DEBUG] [Thread-12310] [transport.py] [_log()] userauth is OK
2025-11-26T05:15:47.604 [DEBUG] [Thread-12310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:15:47.604 [DEBUG] [Thread-12310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:15:47.604 [DEBUG] [Thread-12310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:15:47.604 [DEBUG] [Thread-12310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:15:47.629 [INFO] [Thread-12310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:15:47.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:15:48.245 [DEBUG] [Thread-12310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:15:48.245 [DEBUG] [Thread-12310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:15:48.246 [DEBUG] [Thread-12310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:15:48.287 [DEBUG] [Thread-12310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:15:48.287 [DEBUG] [Thread-12310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:15:48.291 [DEBUG] [Thread-12310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:15:48.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:15:48.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:15:48.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:15:48.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:15:48.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:15:48.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:15:48.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:15:48.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:15:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:15:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.135511 -999.00  +18.50  11.77     19   -4.90 1 1 1 1 1   826    0 23.17 -6.78 NA 12.6 11.8 57.0 13.4 18.0 -25.0 18.0 -24.1 17.7 -22.7 17.9 -23.9
2025-11-26T05:15:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:15:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:15:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.135511
2025-11-26T05:15:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:15:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:15:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:15:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:15:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:15:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:15:17', tmtdew=27.18, humidity=14.94, cloud=0.0, wind=10.66, temperature=18.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:15:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:15:48.315 [DEBUG] [Thread-12310] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:15:48.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:15:48.408 [DEBUG] [Thread-12313] [transport.py] [_log()] starting thread (client mode): 0x70de58d0
2025-11-26T05:15:48.408 [DEBUG] [Thread-12313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:15:48.423 [DEBUG] [Thread-12313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:15:48.423 [INFO] [Thread-12313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:15:48.430 [DEBUG] [Thread-12313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:15:48.431 [DEBUG] [Thread-12313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:15:48.431 [DEBUG] [Thread-12313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:15:48.431 [DEBUG] [Thread-12313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:15:48.431 [DEBUG] [Thread-12313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:15:48.431 [DEBUG] [Thread-12313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:15:48.431 [DEBUG] [Thread-12313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:15:48.431 [DEBUG] [Thread-12313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:15:48.431 [DEBUG] [Thread-12313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:15:48.432 [DEBUG] [Thread-12313] [transport.py] [_log()] client lang: <none>
2025-11-26T05:15:48.432 [DEBUG] [Thread-12313] [transport.py] [_log()] server lang: <none>
2025-11-26T05:15:48.432 [DEBUG] [Thread-12313] [transport.py] [_log()] kex follows: False
2025-11-26T05:15:48.432 [DEBUG] [Thread-12313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:15:48.432 [DEBUG] [Thread-12313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:15:48.432 [DEBUG] [Thread-12313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:15:48.432 [DEBUG] [Thread-12313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:15:48.432 [DEBUG] [Thread-12313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:15:48.433 [DEBUG] [Thread-12313] [transport.py] [_log()] Compression: none
2025-11-26T05:15:48.433 [DEBUG] [Thread-12313] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:15:48.495 [DEBUG] [Thread-12313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:15:48.496 [DEBUG] [Thread-12313] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:15:48.498 [DEBUG] [Thread-12313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:15:48.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:15:48.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:15:48.551 [DEBUG] [Thread-12313] [transport.py] [_log()] userauth is OK
2025-11-26T05:15:48.552 [DEBUG] [Thread-12313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:15:48.552 [DEBUG] [Thread-12313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:15:48.552 [DEBUG] [Thread-12313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:15:48.552 [DEBUG] [Thread-12313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:15:48.571 [INFO] [Thread-12313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:15:48.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:15:48.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:15:49.421 [DEBUG] [Thread-12313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:15:49.421 [DEBUG] [Thread-12313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:15:49.470 [DEBUG] [Thread-12313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:15:49.470 [DEBUG] [Thread-12313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:15:49.479 [DEBUG] [Thread-12313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:15:49.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:15:49.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:15:49.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:15:49.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:15:49.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:15:49.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:15:49.518 [DEBUG] [Thread-12313] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:15:56.003 [DEBUG] [Thread-12315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:16:11.059 [DEBUG] [Thread-12316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:16:17.645 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:16:17.646 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:16:19.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:16:19.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:16:19.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:16:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 15, 49), 27.18, 14.94, 0.0, 10.62, 18.27, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:16:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:15:49
2025-11-26T05:16:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:16:20.514 [DEBUG] [Thread-12317] [transport.py] [_log()] starting thread (client mode): 0x737827a0
2025-11-26T05:16:20.514 [DEBUG] [Thread-12317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:16:20.534 [DEBUG] [Thread-12317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:16:20.534 [INFO] [Thread-12317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] client lang: <none>
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] server lang: <none>
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] kex follows: False
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:16:20.536 [DEBUG] [Thread-12317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:16:20.537 [DEBUG] [Thread-12317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:16:20.537 [DEBUG] [Thread-12317] [transport.py] [_log()] Compression: none
2025-11-26T05:16:20.537 [DEBUG] [Thread-12317] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:16:20.549 [DEBUG] [Thread-12317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:16:20.549 [DEBUG] [Thread-12317] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:16:20.549 [DEBUG] [Thread-12317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:16:20.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:16:20.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:16:20.550 [DEBUG] [Thread-12317] [transport.py] [_log()] userauth is OK
2025-11-26T05:16:20.550 [DEBUG] [Thread-12317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:16:20.550 [DEBUG] [Thread-12317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:16:20.550 [DEBUG] [Thread-12317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:16:20.550 [DEBUG] [Thread-12317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:16:20.560 [INFO] [Thread-12317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:16:20.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:16:21.301 [DEBUG] [Thread-12317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:16:21.302 [DEBUG] [Thread-12317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:16:21.302 [DEBUG] [Thread-12317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:16:21.342 [DEBUG] [Thread-12317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:16:21.342 [DEBUG] [Thread-12317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:16:21.344 [DEBUG] [Thread-12317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:16:21.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:16:21.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:16:21.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:16:21.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:16:21.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:16:21.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:16:21.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:16:21.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:16:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:16:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.135858 -999.00  +18.60  12.79     20   -4.70 1 1 1 1 1   831    0 23.08 -5.03 NA 12.0 12.8 51.2 13.5 18.1 -24.8 18.0 -24.1 17.7 -22.7 17.9 -24.1
2025-11-26T05:16:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:16:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:16:21.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.135858
2025-11-26T05:16:21.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:16:21.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:16:21.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:16:21.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:16:21.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:16:21.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:15:49', tmtdew=27.18, humidity=14.94, cloud=0.0, wind=10.62, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:15:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:16:21.363 [DEBUG] [Thread-12317] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:16:21.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:16:21.450 [DEBUG] [Thread-12320] [transport.py] [_log()] starting thread (client mode): 0x73781090
2025-11-26T05:16:21.450 [DEBUG] [Thread-12320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:16:21.464 [DEBUG] [Thread-12320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:16:21.464 [INFO] [Thread-12320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:16:21.471 [DEBUG] [Thread-12320] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:16:21.471 [DEBUG] [Thread-12320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:16:21.471 [DEBUG] [Thread-12320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:16:21.471 [DEBUG] [Thread-12320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:16:21.471 [DEBUG] [Thread-12320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] client lang: <none>
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] server lang: <none>
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] kex follows: False
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] Compression: none
2025-11-26T05:16:21.472 [DEBUG] [Thread-12320] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:16:21.528 [DEBUG] [Thread-12320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:16:21.528 [DEBUG] [Thread-12320] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:16:21.528 [DEBUG] [Thread-12320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:16:21.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:16:21.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:16:21.586 [DEBUG] [Thread-12320] [transport.py] [_log()] userauth is OK
2025-11-26T05:16:21.586 [DEBUG] [Thread-12320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:16:21.586 [DEBUG] [Thread-12320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:16:21.586 [DEBUG] [Thread-12320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:16:21.586 [DEBUG] [Thread-12320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:16:21.600 [INFO] [Thread-12320] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:16:21.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:16:21.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:16:22.421 [DEBUG] [Thread-12320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:16:22.421 [DEBUG] [Thread-12320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:16:22.469 [DEBUG] [Thread-12320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:16:22.469 [DEBUG] [Thread-12320] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:16:22.477 [DEBUG] [Thread-12320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:16:22.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:16:22.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:16: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
2025-11-26T05:16:22.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:16:22.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:16:22.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:16:22.509 [DEBUG] [Thread-12320] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:16:26.092 [DEBUG] [Thread-12322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:16:33.045 [DEBUG] [Thread-12323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:16:41.146 [DEBUG] [Thread-12324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:16:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:16:52.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:16:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:16:53.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 16, 21), 27.2, 14.94, 0.0, 11.24, 18.36, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:16:53.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:16:21
2025-11-26T05:16:53.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:16:53.454 [DEBUG] [Thread-12325] [transport.py] [_log()] starting thread (client mode): 0x70d02410
2025-11-26T05:16:53.454 [DEBUG] [Thread-12325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:16:53.486 [DEBUG] [Thread-12325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:16:53.487 [INFO] [Thread-12325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] client lang: <none>
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] server lang: <none>
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] kex follows: False
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] Compression: none
2025-11-26T05:16:53.490 [DEBUG] [Thread-12325] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:16:53.506 [DEBUG] [Thread-12325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:16:53.506 [DEBUG] [Thread-12325] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:16:53.507 [DEBUG] [Thread-12325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:16:53.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:16:53.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:16:53.508 [DEBUG] [Thread-12325] [transport.py] [_log()] userauth is OK
2025-11-26T05:16:53.508 [DEBUG] [Thread-12325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:16:53.508 [DEBUG] [Thread-12325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:16:53.508 [DEBUG] [Thread-12325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:16:53.508 [DEBUG] [Thread-12325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:16:53.528 [INFO] [Thread-12325] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:16:53.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:16:54.183 [DEBUG] [Thread-12325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:16:54.183 [DEBUG] [Thread-12325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:16:54.183 [DEBUG] [Thread-12325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:16:54.224 [DEBUG] [Thread-12325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:16:54.224 [DEBUG] [Thread-12325] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:16:54.226 [DEBUG] [Thread-12325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:16:54.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:16:54.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:16:54.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:16:54.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:16:54.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:16:54.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:16:54.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.136206 -999.00  +18.70  11.35     19   -4.80 1 1 1 1 1   836    0 22.99 -2.74 NA 11.4 11.3 54.2 13.6 18.1 -24.7 18.0 -24.0 17.8 -22.9 17.9 -24.0
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.136206
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:16:54.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:16:21', tmtdew=27.2, humidity=14.94, cloud=0.0, wind=11.24, temperature=18.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:16:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:16:54.248 [DEBUG] [Thread-12325] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:16:54.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:16:54.333 [DEBUG] [Thread-12328] [transport.py] [_log()] starting thread (client mode): 0x70de4340
2025-11-26T05:16:54.333 [DEBUG] [Thread-12328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:16:54.348 [DEBUG] [Thread-12328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:16:54.348 [INFO] [Thread-12328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] client lang: <none>
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] server lang: <none>
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] kex follows: False
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] Compression: none
2025-11-26T05:16:54.356 [DEBUG] [Thread-12328] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:16:54.416 [DEBUG] [Thread-12328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:16:54.416 [DEBUG] [Thread-12328] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:16:54.417 [DEBUG] [Thread-12328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:16:54.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:16:54.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:16:54.473 [DEBUG] [Thread-12328] [transport.py] [_log()] userauth is OK
2025-11-26T05:16:54.473 [DEBUG] [Thread-12328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:16:54.473 [DEBUG] [Thread-12328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:16:54.473 [DEBUG] [Thread-12328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:16:54.473 [DEBUG] [Thread-12328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:16:54.487 [INFO] [Thread-12328] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:16:54.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:16:54.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:16:55.331 [DEBUG] [Thread-12328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:16:55.331 [DEBUG] [Thread-12328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:16:55.379 [DEBUG] [Thread-12328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:16:55.379 [DEBUG] [Thread-12328] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:16:55.387 [DEBUG] [Thread-12328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:16:55.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:16:55.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:16:55.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:16:55.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:16:55.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:16:55.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:16:55.419 [DEBUG] [Thread-12328] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:16:56.181 [DEBUG] [Thread-12330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:17:11.233 [DEBUG] [Thread-12331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:17:17.848 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:17:17.849 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:17:25.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:17:25.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:17:25.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:17:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 16, 53), 27.31, 14.94, 0.0, 10.92, 18.44, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:17:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:16:53
2025-11-26T05:17:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:17:26.267 [DEBUG] [Thread-12332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:17:26.399 [DEBUG] [Thread-12333] [transport.py] [_log()] starting thread (client mode): 0x7374f0a0
2025-11-26T05:17:26.400 [DEBUG] [Thread-12333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:17:26.420 [DEBUG] [Thread-12333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:17:26.420 [INFO] [Thread-12333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] client lang: <none>
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] server lang: <none>
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] kex follows: False
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:17:26.421 [DEBUG] [Thread-12333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:17:26.422 [DEBUG] [Thread-12333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:17:26.422 [DEBUG] [Thread-12333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:17:26.422 [DEBUG] [Thread-12333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:17:26.422 [DEBUG] [Thread-12333] [transport.py] [_log()] Compression: none
2025-11-26T05:17:26.422 [DEBUG] [Thread-12333] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:17:26.429 [DEBUG] [Thread-12333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:17:26.429 [DEBUG] [Thread-12333] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:17:26.429 [DEBUG] [Thread-12333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:17:26.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:17:26.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:17:26.429 [DEBUG] [Thread-12333] [transport.py] [_log()] userauth is OK
2025-11-26T05:17:26.429 [DEBUG] [Thread-12333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:17:26.429 [DEBUG] [Thread-12333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:17:26.429 [DEBUG] [Thread-12333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:17:26.430 [DEBUG] [Thread-12333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:17:26.439 [INFO] [Thread-12333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:17:26.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:17:27.202 [DEBUG] [Thread-12333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:17:27.202 [DEBUG] [Thread-12333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:17:27.202 [DEBUG] [Thread-12333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:17:27.243 [DEBUG] [Thread-12333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:17:27.243 [DEBUG] [Thread-12333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:17:27.245 [DEBUG] [Thread-12333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:17:27.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:17:27.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:17:27.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:17:27.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:17:27.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:17:27.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:17:27.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.136553 -999.00  +18.80  10.27     19   -4.60 1 1 1 1 1   841    0 22.77 -0.80 NA 11.7 10.3 51.6 13.1 18.1 -25.1 18.0 -24.0 17.8 -22.8 18.0 -24.0
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.136553
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:17:27.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:16:53', tmtdew=27.31, humidity=14.94, cloud=0.0, wind=10.92, temperature=18.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:16:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:17:27.261 [DEBUG] [Thread-12333] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:17:27.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:17:27.347 [DEBUG] [Thread-12336] [transport.py] [_log()] starting thread (client mode): 0x70d1e290
2025-11-26T05:17:27.347 [DEBUG] [Thread-12336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:17:27.362 [DEBUG] [Thread-12336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:17:27.362 [INFO] [Thread-12336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] client lang: <none>
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] server lang: <none>
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] kex follows: False
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:17:27.369 [DEBUG] [Thread-12336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:17:27.370 [DEBUG] [Thread-12336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:17:27.370 [DEBUG] [Thread-12336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:17:27.370 [DEBUG] [Thread-12336] [transport.py] [_log()] Compression: none
2025-11-26T05:17:27.370 [DEBUG] [Thread-12336] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:17:27.427 [DEBUG] [Thread-12336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:17:27.427 [DEBUG] [Thread-12336] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:17:27.427 [DEBUG] [Thread-12336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:17:27.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:17:27.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:17:27.484 [DEBUG] [Thread-12336] [transport.py] [_log()] userauth is OK
2025-11-26T05:17:27.484 [DEBUG] [Thread-12336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:17:27.484 [DEBUG] [Thread-12336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:17:27.484 [DEBUG] [Thread-12336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:17:27.484 [DEBUG] [Thread-12336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:17:27.499 [INFO] [Thread-12336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:17:27.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:17:27.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:17:28.341 [DEBUG] [Thread-12336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:17:28.341 [DEBUG] [Thread-12336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:17:28.390 [DEBUG] [Thread-12336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:17:28.390 [DEBUG] [Thread-12336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:17:28.399 [DEBUG] [Thread-12336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:17:28.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:17:28.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:17: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') -> 00000000
2025-11-26T05:17:28.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:17:28.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:17:28.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:17:28.435 [DEBUG] [Thread-12336] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:17:33.118 [DEBUG] [Thread-12338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:17:41.296 [DEBUG] [Thread-12339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:17:56.350 [DEBUG] [Thread-12340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:17:58.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:17:58.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:17:58.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:17:59.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 17, 25), 27.41, 14.84, 0.0, 11.42, 18.57, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:17:59.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:17:25
2025-11-26T05:17:59.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:17:59.440 [DEBUG] [Thread-12341] [transport.py] [_log()] starting thread (client mode): 0x737c6740
2025-11-26T05:17:59.440 [DEBUG] [Thread-12341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:17:59.459 [DEBUG] [Thread-12341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:17:59.459 [INFO] [Thread-12341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] client lang: <none>
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] server lang: <none>
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] kex follows: False
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] Compression: none
2025-11-26T05:17:59.463 [DEBUG] [Thread-12341] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:17:59.477 [DEBUG] [Thread-12341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:17:59.477 [DEBUG] [Thread-12341] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:17:59.477 [DEBUG] [Thread-12341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:17:59.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:17:59.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:17:59.478 [DEBUG] [Thread-12341] [transport.py] [_log()] userauth is OK
2025-11-26T05:17:59.478 [DEBUG] [Thread-12341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:17:59.478 [DEBUG] [Thread-12341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:17:59.478 [DEBUG] [Thread-12341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:17:59.478 [DEBUG] [Thread-12341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:17:59.487 [INFO] [Thread-12341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:17:59.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:18:00.143 [DEBUG] [Thread-12341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:18:00.143 [DEBUG] [Thread-12341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:18:00.144 [DEBUG] [Thread-12341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:18:00.184 [DEBUG] [Thread-12341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:18:00.184 [DEBUG] [Thread-12341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:18:00.187 [DEBUG] [Thread-12341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:18:00.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:18:00.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:18:00.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:18:00.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:18:00.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:18:00.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:18:00.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:18:00.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:18:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:18:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.136900 -999.00  +18.80  11.54     19   -4.70 1 1 1 1 1   845    0 23.27 1.58 NA 12.6 11.5 56.0 13.8 18.1 -24.9 18.1 -23.9 17.8 -22.9 18.0 -24.0
2025-11-26T05:18:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:18:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:18:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.136900
2025-11-26T05:18:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:18:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:18:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:18:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:18:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:18:00.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:17:25', tmtdew=27.41, humidity=14.84, cloud=0.0, wind=11.42, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:17:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:18:00.215 [DEBUG] [Thread-12341] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:18:00.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:18:00.308 [DEBUG] [Thread-12344] [transport.py] [_log()] starting thread (client mode): 0x7374d150
2025-11-26T05:18:00.308 [DEBUG] [Thread-12344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:18:00.322 [DEBUG] [Thread-12344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:18:00.322 [INFO] [Thread-12344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:18:00.330 [DEBUG] [Thread-12344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:18:00.330 [DEBUG] [Thread-12344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:18:00.330 [DEBUG] [Thread-12344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:18:00.330 [DEBUG] [Thread-12344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:18:00.330 [DEBUG] [Thread-12344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] client lang: <none>
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] server lang: <none>
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] kex follows: False
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:18:00.331 [DEBUG] [Thread-12344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:18:00.332 [DEBUG] [Thread-12344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:18:00.332 [DEBUG] [Thread-12344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:18:00.332 [DEBUG] [Thread-12344] [transport.py] [_log()] Compression: none
2025-11-26T05:18:00.332 [DEBUG] [Thread-12344] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:18:00.396 [DEBUG] [Thread-12344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:18:00.397 [DEBUG] [Thread-12344] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:18:00.397 [DEBUG] [Thread-12344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:18:00.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:18:00.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:18:00.453 [DEBUG] [Thread-12344] [transport.py] [_log()] userauth is OK
2025-11-26T05:18:00.453 [DEBUG] [Thread-12344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:18:00.453 [DEBUG] [Thread-12344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:18:00.454 [DEBUG] [Thread-12344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:18:00.454 [DEBUG] [Thread-12344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:18:00.472 [INFO] [Thread-12344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:18:00.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:18:00.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:18:01.288 [DEBUG] [Thread-12344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:18:01.288 [DEBUG] [Thread-12344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:18:01.336 [DEBUG] [Thread-12344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:18:01.336 [DEBUG] [Thread-12344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:18:01.344 [DEBUG] [Thread-12344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:18:01.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:18: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')
2025-11-26T05:18: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
2025-11-26T05:18:01.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:18:01.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:18:01.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:18:01.377 [DEBUG] [Thread-12344] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:18:11.386 [DEBUG] [Thread-12346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:18:18.053 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:18:18.054 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:18:26.428 [DEBUG] [Thread-12347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:18:31.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:18:31.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:18:31.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:18:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 17, 57), 27.41, 14.77, 0.0, 10.82, 18.59, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:18:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:17:57
2025-11-26T05:18:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:18:32.349 [DEBUG] [Thread-12348] [transport.py] [_log()] starting thread (client mode): 0x70d287f0
2025-11-26T05:18:32.349 [DEBUG] [Thread-12348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:18:32.369 [DEBUG] [Thread-12348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:18:32.369 [INFO] [Thread-12348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:18:32.372 [DEBUG] [Thread-12348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:18:32.372 [DEBUG] [Thread-12348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] client lang: <none>
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] server lang: <none>
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] kex follows: False
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] Compression: none
2025-11-26T05:18:32.373 [DEBUG] [Thread-12348] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:18:32.382 [DEBUG] [Thread-12348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:18:32.382 [DEBUG] [Thread-12348] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:18:32.383 [DEBUG] [Thread-12348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:18:32.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:18:32.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:18:32.385 [DEBUG] [Thread-12348] [transport.py] [_log()] userauth is OK
2025-11-26T05:18:32.385 [DEBUG] [Thread-12348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:18:32.385 [DEBUG] [Thread-12348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:18:32.385 [DEBUG] [Thread-12348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:18:32.386 [DEBUG] [Thread-12348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:18:32.403 [INFO] [Thread-12348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:18:32.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:18:33.122 [DEBUG] [Thread-12348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:18:33.122 [DEBUG] [Thread-12348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:18:33.123 [DEBUG] [Thread-12348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:18:33.163 [DEBUG] [Thread-12348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:18:33.163 [DEBUG] [Thread-12348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:18:33.166 [DEBUG] [Thread-12348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:18:33.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:18:33.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:18:33.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:18:33.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:18:33.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:18:33.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:18:33.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.137247 -999.00  +19.00  14.53     19   -4.50 1 1 1 1 1   848    0 23.55 3.94 NA 15.5 14.5 45.4 15.7 18.2 -24.7 18.1 -24.0 17.9 -22.3 18.1 -24.0
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.137247
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:18:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:17:57', tmtdew=27.41, humidity=14.77, cloud=0.0, wind=10.82, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:17:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:18:33.185 [DEBUG] [Thread-12348] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:18:33.196 [DEBUG] [Thread-12351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:18:33.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:18:33.267 [DEBUG] [Thread-12352] [transport.py] [_log()] starting thread (client mode): 0x737836a0
2025-11-26T05:18:33.267 [DEBUG] [Thread-12352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:18:33.285 [DEBUG] [Thread-12352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:18:33.285 [INFO] [Thread-12352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:18:33.294 [DEBUG] [Thread-12352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:18:33.294 [DEBUG] [Thread-12352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:18:33.294 [DEBUG] [Thread-12352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:18:33.294 [DEBUG] [Thread-12352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:18:33.294 [DEBUG] [Thread-12352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:18:33.294 [DEBUG] [Thread-12352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:18:33.294 [DEBUG] [Thread-12352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:18:33.295 [DEBUG] [Thread-12352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:18:33.295 [DEBUG] [Thread-12352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:18:33.295 [DEBUG] [Thread-12352] [transport.py] [_log()] client lang: <none>
2025-11-26T05:18:33.295 [DEBUG] [Thread-12352] [transport.py] [_log()] server lang: <none>
2025-11-26T05:18:33.295 [DEBUG] [Thread-12352] [transport.py] [_log()] kex follows: False
2025-11-26T05:18:33.295 [DEBUG] [Thread-12352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:18:33.295 [DEBUG] [Thread-12352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:18:33.295 [DEBUG] [Thread-12352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:18:33.296 [DEBUG] [Thread-12352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:18:33.297 [DEBUG] [Thread-12352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:18:33.297 [DEBUG] [Thread-12352] [transport.py] [_log()] Compression: none
2025-11-26T05:18:33.297 [DEBUG] [Thread-12352] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:18:33.357 [DEBUG] [Thread-12352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:18:33.358 [DEBUG] [Thread-12352] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:18:33.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:18:33.360 [DEBUG] [Thread-12352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:18:33.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:18:33.416 [DEBUG] [Thread-12352] [transport.py] [_log()] userauth is OK
2025-11-26T05:18:33.417 [DEBUG] [Thread-12352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:18:33.417 [DEBUG] [Thread-12352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:18:33.417 [DEBUG] [Thread-12352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:18:33.417 [DEBUG] [Thread-12352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:18:33.436 [INFO] [Thread-12352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:18:33.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:18:33.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:18:34.259 [DEBUG] [Thread-12352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:18:34.259 [DEBUG] [Thread-12352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:18:34.307 [DEBUG] [Thread-12352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:18:34.307 [DEBUG] [Thread-12352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:18:34.316 [DEBUG] [Thread-12352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:18:34.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:18:34.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:18:34.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:18:34.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:18:34.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:18:34.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:18:34.353 [DEBUG] [Thread-12352] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:18:41.465 [DEBUG] [Thread-12354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:18:56.518 [DEBUG] [Thread-12355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:19:04.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:19:04.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:19:04.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:19:05.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 19, 1), 27.63, 14.59, 0.0, 11.66, 18.95, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:19:05.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:19:01
2025-11-26T05:19:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:19:05.313 [DEBUG] [Thread-12356] [transport.py] [_log()] starting thread (client mode): 0x70de5c30
2025-11-26T05:19:05.313 [DEBUG] [Thread-12356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:19:05.333 [DEBUG] [Thread-12356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:19:05.333 [INFO] [Thread-12356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:19:05.336 [DEBUG] [Thread-12356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] client lang: <none>
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] server lang: <none>
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] kex follows: False
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] Compression: none
2025-11-26T05:19:05.337 [DEBUG] [Thread-12356] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:19:05.355 [DEBUG] [Thread-12356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:19:05.356 [DEBUG] [Thread-12356] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:19:05.356 [DEBUG] [Thread-12356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:19:05.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:19:05.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:19:05.359 [DEBUG] [Thread-12356] [transport.py] [_log()] userauth is OK
2025-11-26T05:19:05.359 [DEBUG] [Thread-12356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:19:05.359 [DEBUG] [Thread-12356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:19:05.359 [DEBUG] [Thread-12356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:19:05.359 [DEBUG] [Thread-12356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:19:05.398 [INFO] [Thread-12356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:19:05.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:19:06.032 [DEBUG] [Thread-12356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:19:06.033 [DEBUG] [Thread-12356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:19:06.033 [DEBUG] [Thread-12356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:19:06.074 [DEBUG] [Thread-12356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:19:06.074 [DEBUG] [Thread-12356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:19:06.078 [DEBUG] [Thread-12356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:19:06.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:19:06.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:19:06.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:19:06.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:19:06.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:19:06.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:19:06.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:19:06.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:19:06.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:19:06.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.137942 -999.00  +19.20  11.76     19   -4.50 1 1 1 1 1   855    0 23.42 9.34 NA 13.8 11.8 48.6 13.2 18.2 -24.8 18.2 -24.2 18.0 -23.0 18.2 -24.0
2025-11-26T05:19:06.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:19:06.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:19:06.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.137942
2025-11-26T05:19:06.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:19:06.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:19:06.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:19:06.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:19:06.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:19:06.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:19:01', tmtdew=27.63, humidity=14.59, cloud=0.0, wind=11.66, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:18:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:19:06.105 [DEBUG] [Thread-12356] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:19:06.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:19:06.201 [DEBUG] [Thread-12359] [transport.py] [_log()] starting thread (client mode): 0x70d1e0b0
2025-11-26T05:19:06.201 [DEBUG] [Thread-12359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:19:06.219 [DEBUG] [Thread-12359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:19:06.219 [INFO] [Thread-12359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:19:06.227 [DEBUG] [Thread-12359] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:19:06.227 [DEBUG] [Thread-12359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] client lang: <none>
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] server lang: <none>
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] kex follows: False
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:19:06.228 [DEBUG] [Thread-12359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:19:06.229 [DEBUG] [Thread-12359] [transport.py] [_log()] Compression: none
2025-11-26T05:19:06.229 [DEBUG] [Thread-12359] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:19:06.289 [DEBUG] [Thread-12359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:19:06.290 [DEBUG] [Thread-12359] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:19:06.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:19:06.291 [DEBUG] [Thread-12359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:19:06.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:19:06.348 [DEBUG] [Thread-12359] [transport.py] [_log()] userauth is OK
2025-11-26T05:19:06.348 [DEBUG] [Thread-12359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:19:06.348 [DEBUG] [Thread-12359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:19:06.348 [DEBUG] [Thread-12359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:19:06.349 [DEBUG] [Thread-12359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:19:06.368 [INFO] [Thread-12359] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:19:06.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:19:06.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:19:07.292 [DEBUG] [Thread-12359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:19:07.292 [DEBUG] [Thread-12359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:19:07.341 [DEBUG] [Thread-12359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:19:07.341 [DEBUG] [Thread-12359] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:19:07.355 [DEBUG] [Thread-12359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:19:07.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:19:07.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:19:07.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:19:07.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:19:07.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:19:07.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:19:07.392 [DEBUG] [Thread-12359] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:19:11.555 [DEBUG] [Thread-12361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:19:18.259 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:19:18.260 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:19:26.601 [DEBUG] [Thread-12362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:19:33.286 [DEBUG] [Thread-12363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:19:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:19:37.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:19:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:19:38.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 19, 33), 27.12, 15.05, 0.0, 11.75, 18.7, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:19:38.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:19:33
2025-11-26T05:19:38.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:19:38.335 [DEBUG] [Thread-12364] [transport.py] [_log()] starting thread (client mode): 0x70d1f4c0
2025-11-26T05:19:38.335 [DEBUG] [Thread-12364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:19:38.353 [DEBUG] [Thread-12364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:19:38.353 [INFO] [Thread-12364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:19:38.354 [DEBUG] [Thread-12364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:19:38.354 [DEBUG] [Thread-12364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:19:38.354 [DEBUG] [Thread-12364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:19:38.354 [DEBUG] [Thread-12364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] client lang: <none>
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] server lang: <none>
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] kex follows: False
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] Compression: none
2025-11-26T05:19:38.355 [DEBUG] [Thread-12364] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:19:38.365 [DEBUG] [Thread-12364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:19:38.365 [DEBUG] [Thread-12364] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:19:38.366 [DEBUG] [Thread-12364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:19:38.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:19:38.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:19:38.367 [DEBUG] [Thread-12364] [transport.py] [_log()] userauth is OK
2025-11-26T05:19:38.367 [DEBUG] [Thread-12364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:19:38.367 [DEBUG] [Thread-12364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:19:38.367 [DEBUG] [Thread-12364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:19:38.367 [DEBUG] [Thread-12364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:19:38.390 [INFO] [Thread-12364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:19:38.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:19:39.070 [DEBUG] [Thread-12364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:19:39.071 [DEBUG] [Thread-12364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:19:39.071 [DEBUG] [Thread-12364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:19:39.112 [DEBUG] [Thread-12364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:19:39.112 [DEBUG] [Thread-12364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:19:39.115 [DEBUG] [Thread-12364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:19:39.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:19:39.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:19:39.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:19:39.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:19:39.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:19:39.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:19:39.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:19:39.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:19:39.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:19:39.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.138289 -999.00  +19.30  12.05     19   -4.60 1 1 1 1 1   858    0 23.89 12.85 NA 11.5 12.1 46.8 15.1 18.2 -24.7 18.2 -24.0 18.0 -22.8 18.2 -24.0
2025-11-26T05:19:39.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:19:39.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:19:39.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.138289
2025-11-26T05:19:39.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:19:39.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:19:39.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:19:39.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:19:39.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:19:39.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:19:33', tmtdew=27.12, humidity=15.05, cloud=0.0, wind=11.75, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:19:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:19:39.142 [DEBUG] [Thread-12364] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:19:39.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:19:39.237 [DEBUG] [Thread-12367] [transport.py] [_log()] starting thread (client mode): 0x70d1cd60
2025-11-26T05:19:39.238 [DEBUG] [Thread-12367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:19:39.252 [DEBUG] [Thread-12367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:19:39.252 [INFO] [Thread-12367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:19:39.260 [DEBUG] [Thread-12367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:19:39.260 [DEBUG] [Thread-12367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:19:39.260 [DEBUG] [Thread-12367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:19:39.260 [DEBUG] [Thread-12367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:19:39.260 [DEBUG] [Thread-12367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:19:39.260 [DEBUG] [Thread-12367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:19:39.260 [DEBUG] [Thread-12367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:19:39.261 [DEBUG] [Thread-12367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:19:39.261 [DEBUG] [Thread-12367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:19:39.261 [DEBUG] [Thread-12367] [transport.py] [_log()] client lang: <none>
2025-11-26T05:19:39.261 [DEBUG] [Thread-12367] [transport.py] [_log()] server lang: <none>
2025-11-26T05:19:39.261 [DEBUG] [Thread-12367] [transport.py] [_log()] kex follows: False
2025-11-26T05:19:39.261 [DEBUG] [Thread-12367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:19:39.261 [DEBUG] [Thread-12367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:19:39.261 [DEBUG] [Thread-12367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:19:39.262 [DEBUG] [Thread-12367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:19:39.262 [DEBUG] [Thread-12367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:19:39.262 [DEBUG] [Thread-12367] [transport.py] [_log()] Compression: none
2025-11-26T05:19:39.262 [DEBUG] [Thread-12367] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:19:39.320 [DEBUG] [Thread-12367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:19:39.320 [DEBUG] [Thread-12367] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:19:39.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:19:39.322 [DEBUG] [Thread-12367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:19:39.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:19:39.375 [DEBUG] [Thread-12367] [transport.py] [_log()] userauth is OK
2025-11-26T05:19:39.376 [DEBUG] [Thread-12367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:19:39.376 [DEBUG] [Thread-12367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:19:39.376 [DEBUG] [Thread-12367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:19:39.376 [DEBUG] [Thread-12367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:19:39.401 [INFO] [Thread-12367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:19:39.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:19:39.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:19:40.228 [DEBUG] [Thread-12367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:19:40.228 [DEBUG] [Thread-12367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:19:40.276 [DEBUG] [Thread-12367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:19:40.276 [DEBUG] [Thread-12367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:19:40.285 [DEBUG] [Thread-12367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:19:40.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:19:40.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:19:40.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:19:40.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:19:40.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:19:40.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:19:40.322 [DEBUG] [Thread-12367] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:19:41.633 [DEBUG] [Thread-12369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:19:56.684 [DEBUG] [Thread-12370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:20:10.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:20:10.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:20:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:20:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 20, 5), 28.09, 14.36, 0.0, 11.42, 19.38, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:20:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:20:05
2025-11-26T05:20:11.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:20:11.268 [DEBUG] [Thread-12371] [transport.py] [_log()] starting thread (client mode): 0x7376dcf0
2025-11-26T05:20:11.269 [DEBUG] [Thread-12371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:20:11.288 [DEBUG] [Thread-12371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:20:11.288 [INFO] [Thread-12371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] client lang: <none>
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] server lang: <none>
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] kex follows: False
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] Compression: none
2025-11-26T05:20:11.291 [DEBUG] [Thread-12371] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:20:11.307 [DEBUG] [Thread-12371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:20:11.307 [DEBUG] [Thread-12371] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:20:11.308 [DEBUG] [Thread-12371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:20:11.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:20:11.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:20:11.310 [DEBUG] [Thread-12371] [transport.py] [_log()] userauth is OK
2025-11-26T05:20:11.310 [DEBUG] [Thread-12371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:20:11.310 [DEBUG] [Thread-12371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:20:11.310 [DEBUG] [Thread-12371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:20:11.310 [DEBUG] [Thread-12371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:20:11.330 [INFO] [Thread-12371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:20:11.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:20:11.716 [DEBUG] [Thread-12373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:20:12.215 [DEBUG] [Thread-12371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:20:12.215 [DEBUG] [Thread-12371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:20:12.215 [DEBUG] [Thread-12371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:20:12.256 [DEBUG] [Thread-12371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:20:12.256 [DEBUG] [Thread-12371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:20:12.259 [DEBUG] [Thread-12371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:20:12.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:20:12.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:20:12.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:20:12.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:20:12.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:20:12.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:20:12.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.138636 -999.00  +19.30  13.56     19   -4.50 1 1 1 1 1   860    0 23.46 16.33 NA 12.3 13.6 49.2 15.2 18.3 -24.7 18.2 -24.0 18.0 -22.6 18.3 -24.2
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.138636
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:20:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:20:12.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:20:05', tmtdew=28.09, humidity=14.36, cloud=0.0, wind=11.42, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:19:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:20:12.280 [DEBUG] [Thread-12371] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:20:12.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:20:12.376 [DEBUG] [Thread-12375] [transport.py] [_log()] starting thread (client mode): 0x7374e3e0
2025-11-26T05:20:12.376 [DEBUG] [Thread-12375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:20:12.390 [DEBUG] [Thread-12375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:20:12.390 [INFO] [Thread-12375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] client lang: <none>
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] server lang: <none>
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] kex follows: False
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:20:12.398 [DEBUG] [Thread-12375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:20:12.399 [DEBUG] [Thread-12375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:20:12.399 [DEBUG] [Thread-12375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:20:12.399 [DEBUG] [Thread-12375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:20:12.399 [DEBUG] [Thread-12375] [transport.py] [_log()] Compression: none
2025-11-26T05:20:12.399 [DEBUG] [Thread-12375] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:20:12.453 [DEBUG] [Thread-12375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:20:12.454 [DEBUG] [Thread-12375] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:20:12.455 [DEBUG] [Thread-12375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:20:12.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:20:12.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:20:12.510 [DEBUG] [Thread-12375] [transport.py] [_log()] userauth is OK
2025-11-26T05:20:12.511 [DEBUG] [Thread-12375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:20:12.511 [DEBUG] [Thread-12375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:20:12.511 [DEBUG] [Thread-12375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:20:12.511 [DEBUG] [Thread-12375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:20:12.529 [INFO] [Thread-12375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:20:12.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:20:12.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:20:13.367 [DEBUG] [Thread-12375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:20:13.367 [DEBUG] [Thread-12375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:20:13.414 [DEBUG] [Thread-12375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:20:13.415 [DEBUG] [Thread-12375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:20:13.424 [DEBUG] [Thread-12375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:20:13.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:20:13.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:20:13.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:20:13.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:20:13.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:20:13.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:20:13.460 [DEBUG] [Thread-12375] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:20:18.466 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:20:18.467 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:20:26.756 [DEBUG] [Thread-12377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:20:33.364 [DEBUG] [Thread-12378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:20:41.807 [DEBUG] [Thread-12379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:20:43.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:20:43.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:20:43.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:20:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 20, 37), 28.22, 13.77, 0.0, 11.43, 19.5, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:20:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:20:37
2025-11-26T05:20:44.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:20:44.400 [DEBUG] [Thread-12380] [transport.py] [_log()] starting thread (client mode): 0x7376e3b0
2025-11-26T05:20:44.400 [DEBUG] [Thread-12380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:20:44.420 [DEBUG] [Thread-12380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:20:44.420 [INFO] [Thread-12380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:20:44.421 [DEBUG] [Thread-12380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:20:44.421 [DEBUG] [Thread-12380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] client lang: <none>
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] server lang: <none>
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] kex follows: False
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:20:44.422 [DEBUG] [Thread-12380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:20:44.423 [DEBUG] [Thread-12380] [transport.py] [_log()] Compression: none
2025-11-26T05:20:44.423 [DEBUG] [Thread-12380] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:20:44.437 [DEBUG] [Thread-12380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:20:44.438 [DEBUG] [Thread-12380] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:20:44.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:20:44.438 [DEBUG] [Thread-12380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:20:44.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:20:44.441 [DEBUG] [Thread-12380] [transport.py] [_log()] userauth is OK
2025-11-26T05:20:44.441 [DEBUG] [Thread-12380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:20:44.441 [DEBUG] [Thread-12380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:20:44.441 [DEBUG] [Thread-12380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:20:44.441 [DEBUG] [Thread-12380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:20:44.456 [INFO] [Thread-12380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:20:44.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:20:45.158 [DEBUG] [Thread-12380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:20:45.159 [DEBUG] [Thread-12380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:20:45.159 [DEBUG] [Thread-12380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:20:45.199 [DEBUG] [Thread-12380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:20:45.199 [DEBUG] [Thread-12380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:20:45.202 [DEBUG] [Thread-12380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:20:45.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:20:45.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:20:45.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:20:45.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:20:45.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:20:45.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:20:45.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:20:45.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:20:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:20:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.138983 -999.00  +19.30  13.22     19   -4.50 1 1 1 1 1   863    0 23.29 18.23 NA 12.6 13.2 40.8 14.8 18.4 -24.9 18.2 -23.9 18.1 -22.7 18.3 -24.0
2025-11-26T05:20:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:20:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:20:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.138983
2025-11-26T05:20:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:20:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:20:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:20:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:20:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:20:45.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:20:37', tmtdew=28.22, humidity=13.77, cloud=0.0, wind=11.43, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:20:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:20:45.225 [DEBUG] [Thread-12380] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:20:45.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:20:45.318 [DEBUG] [Thread-12383] [transport.py] [_log()] starting thread (client mode): 0x7376f430
2025-11-26T05:20:45.319 [DEBUG] [Thread-12383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:20:45.333 [DEBUG] [Thread-12383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:20:45.333 [INFO] [Thread-12383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] client lang: <none>
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] server lang: <none>
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] kex follows: False
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:20:45.341 [DEBUG] [Thread-12383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:20:45.342 [DEBUG] [Thread-12383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:20:45.342 [DEBUG] [Thread-12383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:20:45.342 [DEBUG] [Thread-12383] [transport.py] [_log()] Compression: none
2025-11-26T05:20:45.342 [DEBUG] [Thread-12383] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:20:45.398 [DEBUG] [Thread-12383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:20:45.399 [DEBUG] [Thread-12383] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:20:45.400 [DEBUG] [Thread-12383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:20:45.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:20:45.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:20:45.454 [DEBUG] [Thread-12383] [transport.py] [_log()] userauth is OK
2025-11-26T05:20:45.455 [DEBUG] [Thread-12383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:20:45.455 [DEBUG] [Thread-12383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:20:45.455 [DEBUG] [Thread-12383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:20:45.455 [DEBUG] [Thread-12383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:20:45.474 [INFO] [Thread-12383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:20:45.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:20:45.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:20:46.309 [DEBUG] [Thread-12383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:20:46.309 [DEBUG] [Thread-12383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:20:46.357 [DEBUG] [Thread-12383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:20:46.357 [DEBUG] [Thread-12383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:20:46.366 [DEBUG] [Thread-12383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:20:46.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:20:46.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:20:46.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:20:46.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:20:46.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:20:46.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:20:46.400 [DEBUG] [Thread-12383] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:20:56.841 [DEBUG] [Thread-12385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:21:11.896 [DEBUG] [Thread-12386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:21:16.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:21:16.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:21:16.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:21:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 21, 9), 28.41, 13.61, 0.0, 11.75, 19.7, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:21:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:21:09
2025-11-26T05:21:17.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:21:17.375 [DEBUG] [Thread-12387] [transport.py] [_log()] starting thread (client mode): 0x7376fcd0
2025-11-26T05:21:17.375 [DEBUG] [Thread-12387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:21:17.395 [DEBUG] [Thread-12387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:21:17.395 [INFO] [Thread-12387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] client lang: <none>
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] server lang: <none>
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] kex follows: False
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] Compression: none
2025-11-26T05:21:17.399 [DEBUG] [Thread-12387] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:21:17.414 [DEBUG] [Thread-12387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:21:17.414 [DEBUG] [Thread-12387] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:21:17.414 [DEBUG] [Thread-12387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:21:17.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:21:17.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:21:17.415 [DEBUG] [Thread-12387] [transport.py] [_log()] userauth is OK
2025-11-26T05:21:17.415 [DEBUG] [Thread-12387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:21:17.415 [DEBUG] [Thread-12387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:21:17.415 [DEBUG] [Thread-12387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:21:17.415 [DEBUG] [Thread-12387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:21:17.428 [INFO] [Thread-12387] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:21:17.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:21:18.070 [DEBUG] [Thread-12387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:21:18.070 [DEBUG] [Thread-12387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:21:18.070 [DEBUG] [Thread-12387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:21:18.111 [DEBUG] [Thread-12387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:21:18.111 [DEBUG] [Thread-12387] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:21:18.114 [DEBUG] [Thread-12387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:21:18.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:21:18.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:21:18.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:21:18.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:21:18.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:21:18.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:21:18.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:21:18.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:21:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:21:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.139331 -999.00  +19.40  12.07     19   -4.50 1 1 1 1 1   865    0 23.77 22.47 ----- 13.5 12.1 37.6 15.3 18.4 -24.7 18.3 -24.1 18.1 -22.7 18.4 -24.2
2025-11-26T05:21:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:21:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.139331
2025-11-26T05:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:21:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:21:09', tmtdew=28.41, humidity=13.61, cloud=0.0, wind=11.75, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:20:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:21:18.133 [DEBUG] [Thread-12387] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:21:18.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:21:18.218 [DEBUG] [Thread-12390] [transport.py] [_log()] starting thread (client mode): 0x7376f0a0
2025-11-26T05:21:18.219 [DEBUG] [Thread-12390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:21:18.233 [DEBUG] [Thread-12390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:21:18.233 [INFO] [Thread-12390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] client lang: <none>
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] server lang: <none>
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] kex follows: False
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] Compression: none
2025-11-26T05:21:18.241 [DEBUG] [Thread-12390] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:21:18.295 [DEBUG] [Thread-12390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:21:18.296 [DEBUG] [Thread-12390] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:21:18.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:21:18.296 [DEBUG] [Thread-12390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:21:18.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:21:18.353 [DEBUG] [Thread-12390] [transport.py] [_log()] userauth is OK
2025-11-26T05:21:18.353 [DEBUG] [Thread-12390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:21:18.353 [DEBUG] [Thread-12390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:21:18.353 [DEBUG] [Thread-12390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:21:18.353 [DEBUG] [Thread-12390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:21:18.367 [INFO] [Thread-12390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:21:18.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:21:18.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:21:18.668 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:21:18.669 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:21:19.240 [DEBUG] [Thread-12390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:21:19.240 [DEBUG] [Thread-12390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:21:19.288 [DEBUG] [Thread-12390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:21:19.288 [DEBUG] [Thread-12390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:21:19.297 [DEBUG] [Thread-12390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:21:19.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:21:19.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:21:19.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:21:19.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:21:19.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:21:19.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:21:19.328 [DEBUG] [Thread-12390] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:21:26.924 [DEBUG] [Thread-12392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:21:33.444 [DEBUG] [Thread-12393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:21:41.971 [DEBUG] [Thread-12394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:21:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:21:49.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:21:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:21:50.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 21, 41), 28.57, 13.51, 0.0, 13.53, 19.82, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:21:50.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:21:41
2025-11-26T05:21:50.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:21:50.290 [DEBUG] [Thread-12395] [transport.py] [_log()] starting thread (client mode): 0x7376ecb0
2025-11-26T05:21:50.290 [DEBUG] [Thread-12395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:21:50.303 [DEBUG] [Thread-12395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:21:50.303 [INFO] [Thread-12395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:21:50.307 [DEBUG] [Thread-12395] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:21:50.307 [DEBUG] [Thread-12395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:21:50.307 [DEBUG] [Thread-12395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:21:50.307 [DEBUG] [Thread-12395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:21:50.307 [DEBUG] [Thread-12395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:21:50.307 [DEBUG] [Thread-12395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:21:50.307 [DEBUG] [Thread-12395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:21:50.307 [DEBUG] [Thread-12395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] client lang: <none>
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] server lang: <none>
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] kex follows: False
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] Compression: none
2025-11-26T05:21:50.308 [DEBUG] [Thread-12395] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:21:50.319 [DEBUG] [Thread-12395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:21:50.319 [DEBUG] [Thread-12395] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:21:50.320 [DEBUG] [Thread-12395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:21:50.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:21:50.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:21:50.321 [DEBUG] [Thread-12395] [transport.py] [_log()] userauth is OK
2025-11-26T05:21:50.322 [DEBUG] [Thread-12395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:21:50.322 [DEBUG] [Thread-12395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:21:50.322 [DEBUG] [Thread-12395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:21:50.322 [DEBUG] [Thread-12395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:21:50.339 [INFO] [Thread-12395] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:21:50.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:21:51.001 [DEBUG] [Thread-12395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:21:51.001 [DEBUG] [Thread-12395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:21:51.001 [DEBUG] [Thread-12395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:21:51.043 [DEBUG] [Thread-12395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:21:51.043 [DEBUG] [Thread-12395] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:21:51.046 [DEBUG] [Thread-12395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:21:51.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:21:51.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:21:51.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:21:51.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:21:51.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:21:51.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:21:51.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:21:51.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:21:51.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:21:51.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.139678 -999.00  +19.50  12.59     19   -4.50 1 1 1 1 1   867    0 23.95 26.67 ----- 12.5 12.6 43.0 14.5 18.4 -24.7 18.4 -24.2 18.1 -23.0 18.4 -24.2
2025-11-26T05:21:51.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:21:51.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:21:51.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.139678
2025-11-26T05:21:51.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:21:51.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:21:51.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:21:51.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:21:51.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:21:51.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:21:41', tmtdew=28.57, humidity=13.51, cloud=0.0, wind=13.53, temperature=19.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:21:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:21:51.072 [DEBUG] [Thread-12395] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:21:51.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:21:51.167 [DEBUG] [Thread-12398] [transport.py] [_log()] starting thread (client mode): 0x7376f2e0
2025-11-26T05:21:51.167 [DEBUG] [Thread-12398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:21:51.182 [DEBUG] [Thread-12398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:21:51.182 [INFO] [Thread-12398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:21:51.189 [DEBUG] [Thread-12398] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] client lang: <none>
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] server lang: <none>
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] kex follows: False
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] Compression: none
2025-11-26T05:21:51.190 [DEBUG] [Thread-12398] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:21:51.250 [DEBUG] [Thread-12398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:21:51.251 [DEBUG] [Thread-12398] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:21:51.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:21:51.252 [DEBUG] [Thread-12398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:21:51.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:21:51.305 [DEBUG] [Thread-12398] [transport.py] [_log()] userauth is OK
2025-11-26T05:21:51.306 [DEBUG] [Thread-12398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:21:51.306 [DEBUG] [Thread-12398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:21:51.306 [DEBUG] [Thread-12398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:21:51.306 [DEBUG] [Thread-12398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:21:51.325 [INFO] [Thread-12398] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:21:51.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:21:51.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:21:52.240 [DEBUG] [Thread-12398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:21:52.240 [DEBUG] [Thread-12398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:21:52.288 [DEBUG] [Thread-12398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:21:52.288 [DEBUG] [Thread-12398] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:21:52.296 [DEBUG] [Thread-12398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:21:52.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:21:52.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:21:52.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:21:52.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:21:52.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:21:52.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:21:52.329 [DEBUG] [Thread-12398] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:21:57.000 [DEBUG] [Thread-12400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:22:12.044 [DEBUG] [Thread-12401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:22:18.873 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:22:18.874 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:22:22.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:22:22.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:22:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:22:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 22, 13), 28.61, 13.48, 0.0, 13.78, 19.9, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:22:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:22:13
2025-11-26T05:22:23.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:22:23.275 [DEBUG] [Thread-12402] [transport.py] [_log()] starting thread (client mode): 0x7376d540
2025-11-26T05:22:23.275 [DEBUG] [Thread-12402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:22:23.296 [DEBUG] [Thread-12402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:22:23.297 [INFO] [Thread-12402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] client lang: <none>
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] server lang: <none>
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] kex follows: False
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:22:23.300 [DEBUG] [Thread-12402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:22:23.301 [DEBUG] [Thread-12402] [transport.py] [_log()] Compression: none
2025-11-26T05:22:23.301 [DEBUG] [Thread-12402] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:22:23.318 [DEBUG] [Thread-12402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:22:23.318 [DEBUG] [Thread-12402] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:22:23.319 [DEBUG] [Thread-12402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:22:23.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:22:23.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:22:23.321 [DEBUG] [Thread-12402] [transport.py] [_log()] userauth is OK
2025-11-26T05:22:23.321 [DEBUG] [Thread-12402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:22:23.321 [DEBUG] [Thread-12402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:22:23.322 [DEBUG] [Thread-12402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:22:23.322 [DEBUG] [Thread-12402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:22:23.338 [INFO] [Thread-12402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:22:23.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:22:23.963 [DEBUG] [Thread-12402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:22:23.963 [DEBUG] [Thread-12402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:22:23.964 [DEBUG] [Thread-12402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:22:24.004 [DEBUG] [Thread-12402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:22:24.004 [DEBUG] [Thread-12402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:22:24.007 [DEBUG] [Thread-12402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:22:24.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:22:24.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:22:24.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:22:24.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:22:24.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:22:24.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:22:24.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:22:24.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:22:24.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:22:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.140025 -999.00  +19.50  14.67     19   -4.50 1 1 1 1 1   869    0 23.91 30.63 ----- 13.9 14.7 44.2 16.1 18.4 -24.9 18.4 -23.8 18.2 -22.7 18.5 -24.3
2025-11-26T05:22:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:22:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:22:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.140025
2025-11-26T05:22:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:22:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:22:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:22:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:22:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:22:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:22:13', tmtdew=28.61, humidity=13.48, cloud=0.0, wind=13.78, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:21:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:22:24.035 [DEBUG] [Thread-12402] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:22:24.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:22:24.132 [DEBUG] [Thread-12405] [transport.py] [_log()] starting thread (client mode): 0x70d74bb0
2025-11-26T05:22:24.132 [DEBUG] [Thread-12405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:22:24.146 [DEBUG] [Thread-12405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:22:24.146 [INFO] [Thread-12405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:22:24.153 [DEBUG] [Thread-12405] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] client lang: <none>
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] server lang: <none>
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] kex follows: False
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] Compression: none
2025-11-26T05:22:24.154 [DEBUG] [Thread-12405] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:22:24.218 [DEBUG] [Thread-12405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:22:24.219 [DEBUG] [Thread-12405] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:22:24.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:22:24.220 [DEBUG] [Thread-12405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:22:24.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:22:24.277 [DEBUG] [Thread-12405] [transport.py] [_log()] userauth is OK
2025-11-26T05:22:24.278 [DEBUG] [Thread-12405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:22:24.278 [DEBUG] [Thread-12405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:22:24.278 [DEBUG] [Thread-12405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:22:24.278 [DEBUG] [Thread-12405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:22:24.296 [INFO] [Thread-12405] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:22:24.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:22:24.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:22:25.119 [DEBUG] [Thread-12405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:22:25.119 [DEBUG] [Thread-12405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:22:25.168 [DEBUG] [Thread-12405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:22:25.168 [DEBUG] [Thread-12405] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:22:25.179 [DEBUG] [Thread-12405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:22:25.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:22:25.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:22:25.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:22:25.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:22:25.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:22:25.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:22:25.216 [DEBUG] [Thread-12405] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:22:27.081 [DEBUG] [Thread-12407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:22:33.514 [DEBUG] [Thread-12408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:22:42.133 [DEBUG] [Thread-12409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:22:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:22:55.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:22:55.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:22:55.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 22, 45), 28.73, 13.36, 0.0, 13.57, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:22:55.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:22:45
2025-11-26T05:22:56.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:22:56.168 [DEBUG] [Thread-12410] [transport.py] [_log()] starting thread (client mode): 0x7376c580
2025-11-26T05:22:56.168 [DEBUG] [Thread-12410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:22:56.182 [DEBUG] [Thread-12410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:22:56.182 [INFO] [Thread-12410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:22:56.183 [DEBUG] [Thread-12410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:22:56.183 [DEBUG] [Thread-12410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:22:56.183 [DEBUG] [Thread-12410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:22:56.183 [DEBUG] [Thread-12410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:22:56.183 [DEBUG] [Thread-12410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:22:56.183 [DEBUG] [Thread-12410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:22:56.183 [DEBUG] [Thread-12410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:22:56.183 [DEBUG] [Thread-12410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:22:56.183 [DEBUG] [Thread-12410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] client lang: <none>
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] server lang: <none>
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] kex follows: False
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] Compression: none
2025-11-26T05:22:56.184 [DEBUG] [Thread-12410] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:22:56.193 [DEBUG] [Thread-12410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:22:56.193 [DEBUG] [Thread-12410] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:22:56.193 [DEBUG] [Thread-12410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:22:56.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:22:56.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:22:56.196 [DEBUG] [Thread-12410] [transport.py] [_log()] userauth is OK
2025-11-26T05:22:56.196 [DEBUG] [Thread-12410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:22:56.196 [DEBUG] [Thread-12410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:22:56.196 [DEBUG] [Thread-12410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:22:56.196 [DEBUG] [Thread-12410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:22:56.209 [INFO] [Thread-12410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:22:56.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:22:56.834 [DEBUG] [Thread-12410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:22:56.834 [DEBUG] [Thread-12410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:22:56.835 [DEBUG] [Thread-12410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:22:56.875 [DEBUG] [Thread-12410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:22:56.875 [DEBUG] [Thread-12410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:22:56.885 [DEBUG] [Thread-12410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:22:56.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:22:56.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:22:56.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:22:56.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:22:56.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:22:56.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:22:56.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:22:56.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:22:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:22:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.140719 -999.00  +19.60  16.63     19   -4.40 1 1 1 1 1   872    0 24.50 34.66 ----- 14.8 16.6 37.4 18.5 18.6 -24.8 18.5 -23.9 18.4 -22.6 18.6 -24.1
2025-11-26T05:22:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:22:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:22:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.140719
2025-11-26T05:22:56.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:22:56.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:22:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:22:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:22:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:22:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:22:45', tmtdew=28.73, humidity=13.36, cloud=0.0, wind=13.57, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:22:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:22:56.915 [DEBUG] [Thread-12410] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:22:57.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:22:57.015 [DEBUG] [Thread-12413] [transport.py] [_log()] starting thread (client mode): 0x7376c160
2025-11-26T05:22:57.015 [DEBUG] [Thread-12413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:22:57.030 [DEBUG] [Thread-12413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:22:57.030 [INFO] [Thread-12413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] client lang: <none>
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] server lang: <none>
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] kex follows: False
2025-11-26T05:22:57.038 [DEBUG] [Thread-12413] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:22:57.039 [DEBUG] [Thread-12413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:22:57.039 [DEBUG] [Thread-12413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:22:57.039 [DEBUG] [Thread-12413] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:22:57.039 [DEBUG] [Thread-12413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:22:57.039 [DEBUG] [Thread-12413] [transport.py] [_log()] Compression: none
2025-11-26T05:22:57.039 [DEBUG] [Thread-12413] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:22:57.098 [DEBUG] [Thread-12413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:22:57.099 [DEBUG] [Thread-12413] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:22:57.099 [DEBUG] [Thread-12413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:22:57.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:22:57.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:22:57.158 [DEBUG] [Thread-12413] [transport.py] [_log()] userauth is OK
2025-11-26T05:22:57.158 [DEBUG] [Thread-12413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:22:57.158 [DEBUG] [Thread-12413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:22:57.158 [DEBUG] [Thread-12413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:22:57.158 [DEBUG] [Thread-12413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:22:57.170 [DEBUG] [Thread-12415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:22:57.177 [INFO] [Thread-12413] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:22:57.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:22:57.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:22:58.036 [DEBUG] [Thread-12413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:22:58.036 [DEBUG] [Thread-12413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:22:58.085 [DEBUG] [Thread-12413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:22:58.085 [DEBUG] [Thread-12413] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:22:58.094 [DEBUG] [Thread-12413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:22:58.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:22:58.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:22:58.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:22:58.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:22:58.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:22:58.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:22:58.132 [DEBUG] [Thread-12413] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:23:12.230 [DEBUG] [Thread-12416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:23:19.077 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:23:19.078 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:23:27.267 [DEBUG] [Thread-12417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:23:28.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:23:28.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:23:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:23:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 23, 17), 28.72, 13.38, 0.0, 14.2, 19.97, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:23:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:23:17
2025-11-26T05:23:28.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:23:29.074 [DEBUG] [Thread-12418] [transport.py] [_log()] starting thread (client mode): 0x70d285e0
2025-11-26T05:23:29.074 [DEBUG] [Thread-12418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:23:29.094 [DEBUG] [Thread-12418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:23:29.094 [INFO] [Thread-12418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] client lang: <none>
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] server lang: <none>
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] kex follows: False
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:23:29.097 [DEBUG] [Thread-12418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:23:29.098 [DEBUG] [Thread-12418] [transport.py] [_log()] Compression: none
2025-11-26T05:23:29.098 [DEBUG] [Thread-12418] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:23:29.118 [DEBUG] [Thread-12418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:23:29.119 [DEBUG] [Thread-12418] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:23:29.119 [DEBUG] [Thread-12418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:23:29.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:23:29.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:23:29.121 [DEBUG] [Thread-12418] [transport.py] [_log()] userauth is OK
2025-11-26T05:23:29.122 [DEBUG] [Thread-12418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:23:29.122 [DEBUG] [Thread-12418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:23:29.122 [DEBUG] [Thread-12418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:23:29.122 [DEBUG] [Thread-12418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:23:29.157 [INFO] [Thread-12418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:23:29.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:23:29.744 [DEBUG] [Thread-12418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:23:29.744 [DEBUG] [Thread-12418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:23:29.745 [DEBUG] [Thread-12418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:23:29.785 [DEBUG] [Thread-12418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:23:29.785 [DEBUG] [Thread-12418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:23:29.787 [DEBUG] [Thread-12418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:23:29.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:23:29.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:23:29.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:23:29.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:23:29.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:23:29.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:23:29.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:23:29.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.141067 -999.00  +19.70  13.94     19   -4.40 1 1 1 1 1   873    0 24.21 37.30 ----- 13.7 13.9 33.4 18.5 18.6 -25.0 18.6 -24.0 18.4 -23.0 18.6 -24.4
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.141067
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:23:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:23:17', tmtdew=28.72, humidity=13.38, cloud=0.0, wind=14.2, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:23:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:23:29.805 [DEBUG] [Thread-12418] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:23:29.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:23:29.896 [DEBUG] [Thread-12421] [transport.py] [_log()] starting thread (client mode): 0x737c62c0
2025-11-26T05:23:29.896 [DEBUG] [Thread-12421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:23:29.911 [DEBUG] [Thread-12421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:23:29.911 [INFO] [Thread-12421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] client lang: <none>
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] server lang: <none>
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] kex follows: False
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:23:29.920 [DEBUG] [Thread-12421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:23:29.921 [DEBUG] [Thread-12421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:23:29.921 [DEBUG] [Thread-12421] [transport.py] [_log()] Compression: none
2025-11-26T05:23:29.921 [DEBUG] [Thread-12421] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:23:29.974 [DEBUG] [Thread-12421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:23:29.975 [DEBUG] [Thread-12421] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:23:29.975 [DEBUG] [Thread-12421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:23:29.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:23:29.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:23:30.032 [DEBUG] [Thread-12421] [transport.py] [_log()] userauth is OK
2025-11-26T05:23:30.032 [DEBUG] [Thread-12421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:23:30.032 [DEBUG] [Thread-12421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:23:30.032 [DEBUG] [Thread-12421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:23:30.032 [DEBUG] [Thread-12421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:23:30.046 [INFO] [Thread-12421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:23:30.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:23:30.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:23:30.876 [DEBUG] [Thread-12421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:23:30.876 [DEBUG] [Thread-12421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:23:30.925 [DEBUG] [Thread-12421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:23:30.925 [DEBUG] [Thread-12421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:23:30.934 [DEBUG] [Thread-12421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:23:30.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:23:30.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:23:30.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:23:30.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:23:30.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:23:30.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:23:30.971 [DEBUG] [Thread-12421] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:23:33.597 [DEBUG] [Thread-12423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:23:42.299 [DEBUG] [Thread-12424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:23:57.353 [DEBUG] [Thread-12425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:24:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:24:00.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:24:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:24:01.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 23, 49), 28.92, 13.28, 0.0, 15.79, 20.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:24:01.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:23:49
2025-11-26T05:24:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:24:01.919 [DEBUG] [Thread-12426] [transport.py] [_log()] starting thread (client mode): 0x7376faf0
2025-11-26T05:24:01.919 [DEBUG] [Thread-12426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:24:01.939 [DEBUG] [Thread-12426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:24:01.940 [INFO] [Thread-12426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:24:01.942 [DEBUG] [Thread-12426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] client lang: <none>
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] server lang: <none>
2025-11-26T05:24:01.943 [DEBUG] [Thread-12426] [transport.py] [_log()] kex follows: False
2025-11-26T05:24:01.944 [DEBUG] [Thread-12426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:24:01.944 [DEBUG] [Thread-12426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:24:01.944 [DEBUG] [Thread-12426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:24:01.944 [DEBUG] [Thread-12426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:24:01.944 [DEBUG] [Thread-12426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:24:01.944 [DEBUG] [Thread-12426] [transport.py] [_log()] Compression: none
2025-11-26T05:24:01.944 [DEBUG] [Thread-12426] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:24:01.966 [DEBUG] [Thread-12426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:24:01.966 [DEBUG] [Thread-12426] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:24:01.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:24:01.967 [DEBUG] [Thread-12426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:24:01.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:24:02.009 [DEBUG] [Thread-12426] [transport.py] [_log()] userauth is OK
2025-11-26T05:24:02.009 [DEBUG] [Thread-12426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:24:02.009 [DEBUG] [Thread-12426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:24:02.009 [DEBUG] [Thread-12426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:24:02.009 [DEBUG] [Thread-12426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:24:02.032 [INFO] [Thread-12426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:24:02.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:24:02.754 [DEBUG] [Thread-12426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:24:02.754 [DEBUG] [Thread-12426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:24:02.755 [DEBUG] [Thread-12426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:24:02.796 [DEBUG] [Thread-12426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:24:02.796 [DEBUG] [Thread-12426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:24:02.799 [DEBUG] [Thread-12426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:24:02.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:24:02.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:24:02.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:24:02.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:24:02.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:24:02.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:24:02.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:24:02.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:24:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:24:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.141414 -999.00  +19.80  15.96     19   -4.40 1 1 1 1 1   875    0 24.94 42.40 ----- 14.1 16.0 44.4 17.4 18.7 -24.9 18.6 -24.2 18.4 -22.9 18.7 -24.3
2025-11-26T05:24:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:24:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:24:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.141414
2025-11-26T05:24:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:24:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:24:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:24:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:24:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:24:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:23:49', tmtdew=28.92, humidity=13.28, cloud=0.0, wind=15.79, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:23:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:24:02.828 [DEBUG] [Thread-12426] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:24:02.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:24:02.923 [DEBUG] [Thread-12429] [transport.py] [_log()] starting thread (client mode): 0x7376d360
2025-11-26T05:24:02.923 [DEBUG] [Thread-12429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:24:02.938 [DEBUG] [Thread-12429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:24:02.938 [INFO] [Thread-12429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:24:02.946 [DEBUG] [Thread-12429] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:24:02.946 [DEBUG] [Thread-12429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:24:02.946 [DEBUG] [Thread-12429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:24:02.946 [DEBUG] [Thread-12429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:24:02.947 [DEBUG] [Thread-12429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:24:02.947 [DEBUG] [Thread-12429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:24:02.947 [DEBUG] [Thread-12429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:24:02.947 [DEBUG] [Thread-12429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:24:02.947 [DEBUG] [Thread-12429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:24:02.947 [DEBUG] [Thread-12429] [transport.py] [_log()] client lang: <none>
2025-11-26T05:24:02.947 [DEBUG] [Thread-12429] [transport.py] [_log()] server lang: <none>
2025-11-26T05:24:02.947 [DEBUG] [Thread-12429] [transport.py] [_log()] kex follows: False
2025-11-26T05:24:02.947 [DEBUG] [Thread-12429] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:24:02.948 [DEBUG] [Thread-12429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:24:02.948 [DEBUG] [Thread-12429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:24:02.948 [DEBUG] [Thread-12429] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:24:02.948 [DEBUG] [Thread-12429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:24:02.948 [DEBUG] [Thread-12429] [transport.py] [_log()] Compression: none
2025-11-26T05:24:02.948 [DEBUG] [Thread-12429] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:24:03.005 [DEBUG] [Thread-12429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:24:03.005 [DEBUG] [Thread-12429] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:24:03.006 [DEBUG] [Thread-12429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:24:03.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:24:03.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:24:03.060 [DEBUG] [Thread-12429] [transport.py] [_log()] userauth is OK
2025-11-26T05:24:03.060 [DEBUG] [Thread-12429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:24:03.061 [DEBUG] [Thread-12429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:24:03.061 [DEBUG] [Thread-12429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:24:03.061 [DEBUG] [Thread-12429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:24:03.074 [INFO] [Thread-12429] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:24:03.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:24:03.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:24:03.954 [DEBUG] [Thread-12429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:24:03.954 [DEBUG] [Thread-12429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:24:04.002 [DEBUG] [Thread-12429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:24:04.002 [DEBUG] [Thread-12429] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:24:04.012 [DEBUG] [Thread-12429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:24:04.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:24:04.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:24:04.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:24:04.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:24:04.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:24:04.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:24:04.049 [DEBUG] [Thread-12429] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:24:12.392 [DEBUG] [Thread-12431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:24:19.281 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:24:19.283 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:24:27.440 [DEBUG] [Thread-12432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:24:33.673 [DEBUG] [Thread-12433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:24:34.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:24:34.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:24:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:24:34.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 24, 21), 28.97, 13.24, 0.0, 15.28, 20.17, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:24:34.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:24:21
2025-11-26T05:24:34.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:24:34.995 [DEBUG] [Thread-12434] [transport.py] [_log()] starting thread (client mode): 0x70d753f0
2025-11-26T05:24:34.995 [DEBUG] [Thread-12434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:24:35.016 [DEBUG] [Thread-12434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:24:35.016 [INFO] [Thread-12434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] client lang: <none>
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] server lang: <none>
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] kex follows: False
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:24:35.019 [DEBUG] [Thread-12434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:24:35.020 [DEBUG] [Thread-12434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:24:35.020 [DEBUG] [Thread-12434] [transport.py] [_log()] Compression: none
2025-11-26T05:24:35.020 [DEBUG] [Thread-12434] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:24:35.039 [DEBUG] [Thread-12434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:24:35.039 [DEBUG] [Thread-12434] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:24:35.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:24:35.040 [DEBUG] [Thread-12434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:24:35.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:24:35.081 [DEBUG] [Thread-12434] [transport.py] [_log()] userauth is OK
2025-11-26T05:24:35.081 [DEBUG] [Thread-12434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:24:35.081 [DEBUG] [Thread-12434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:24:35.081 [DEBUG] [Thread-12434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:24:35.082 [DEBUG] [Thread-12434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:24:35.102 [INFO] [Thread-12434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:24:35.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:24:35.784 [DEBUG] [Thread-12434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:24:35.784 [DEBUG] [Thread-12434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:24:35.785 [DEBUG] [Thread-12434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:24:35.826 [DEBUG] [Thread-12434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:24:35.826 [DEBUG] [Thread-12434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:24:35.830 [DEBUG] [Thread-12434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:24:35.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:24:35.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:24:35.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:24:35.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:24:35.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:24:35.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:24:35.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:24:35.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.141761 -999.00  +19.80  14.71     18   -4.50 1 1 1 1 1   876    0 24.27 45.35 ----- 14.4 14.7 42.4 17.9 18.7 -24.9 18.7 -24.1 18.5 -23.3 18.7 -24.5
2025-11-26T05:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.141761
2025-11-26T05:24:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:24:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:24:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:24:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:24:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:24:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:24:21', tmtdew=28.97, humidity=13.24, cloud=0.0, wind=15.28, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:24:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:24:35.857 [DEBUG] [Thread-12434] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:24:35.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:24:35.966 [DEBUG] [Thread-12437] [transport.py] [_log()] starting thread (client mode): 0x7376e590
2025-11-26T05:24:35.966 [DEBUG] [Thread-12437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:24:35.980 [DEBUG] [Thread-12437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:24:35.981 [INFO] [Thread-12437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:24:35.988 [DEBUG] [Thread-12437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:24:35.988 [DEBUG] [Thread-12437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:24:35.988 [DEBUG] [Thread-12437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] client lang: <none>
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] server lang: <none>
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] kex follows: False
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:24:35.989 [DEBUG] [Thread-12437] [transport.py] [_log()] Compression: none
2025-11-26T05:24:35.990 [DEBUG] [Thread-12437] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:24:36.047 [DEBUG] [Thread-12437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:24:36.048 [DEBUG] [Thread-12437] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:24:36.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:24:36.049 [DEBUG] [Thread-12437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:24:36.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:24:36.104 [DEBUG] [Thread-12437] [transport.py] [_log()] userauth is OK
2025-11-26T05:24:36.105 [DEBUG] [Thread-12437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:24:36.105 [DEBUG] [Thread-12437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:24:36.105 [DEBUG] [Thread-12437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:24:36.105 [DEBUG] [Thread-12437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:24:36.123 [INFO] [Thread-12437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:24:36.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:24:36.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:24:36.976 [DEBUG] [Thread-12437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:24:36.977 [DEBUG] [Thread-12437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:24:37.025 [DEBUG] [Thread-12437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:24:37.025 [DEBUG] [Thread-12437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:24:37.034 [DEBUG] [Thread-12437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:24:37.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:24:37.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:24:37.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:24:37.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:24:37.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:24:37.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:24:37.071 [DEBUG] [Thread-12437] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:24:42.479 [DEBUG] [Thread-12439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:24:57.529 [DEBUG] [Thread-12440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:25:07.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:25:07.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:25:07.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:25:07.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 24, 53), 29.02, 13.19, 0.0, 15.02, 20.17, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:25:07.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:24:53
2025-11-26T05:25:07.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:25:08.024 [DEBUG] [Thread-12441] [transport.py] [_log()] starting thread (client mode): 0x7374f4c0
2025-11-26T05:25:08.024 [DEBUG] [Thread-12441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:25:08.044 [DEBUG] [Thread-12441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:25:08.044 [INFO] [Thread-12441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:25:08.045 [DEBUG] [Thread-12441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] client lang: <none>
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] server lang: <none>
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] kex follows: False
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] Compression: none
2025-11-26T05:25:08.046 [DEBUG] [Thread-12441] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:25:08.059 [DEBUG] [Thread-12441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:25:08.059 [DEBUG] [Thread-12441] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:25:08.060 [DEBUG] [Thread-12441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:25:08.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:25:08.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:25:08.062 [DEBUG] [Thread-12441] [transport.py] [_log()] userauth is OK
2025-11-26T05:25:08.062 [DEBUG] [Thread-12441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:25:08.062 [DEBUG] [Thread-12441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:25:08.062 [DEBUG] [Thread-12441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:25:08.062 [DEBUG] [Thread-12441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:25:08.081 [INFO] [Thread-12441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:25:08.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:25:09.060 [DEBUG] [Thread-12441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:25:09.061 [DEBUG] [Thread-12441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:25:09.061 [DEBUG] [Thread-12441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:25:09.101 [DEBUG] [Thread-12441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:25:09.102 [DEBUG] [Thread-12441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:25:09.105 [DEBUG] [Thread-12441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:25:09.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:25:09.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:25:09.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:25:09.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:25:09.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:25:09.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:25:09.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:25:09.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:25:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:25:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.142108 -999.00  +19.80  13.28     18   -4.50 1 1 1 1 1   877    0 24.78 50.94 ----- 14.4 13.3 39.6 19.1 18.8 -25.0 18.8 -24.5 18.5 -23.4 18.8 -24.4
2025-11-26T05:25:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:25:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:25:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.142108
2025-11-26T05:25:09.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:25:09.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:25:09.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:25:09.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:25:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:25:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:24:53', tmtdew=29.02, humidity=13.19, cloud=0.0, wind=15.02, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:24:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:25:09.141 [DEBUG] [Thread-12441] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:25:09.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:25:09.236 [DEBUG] [Thread-12444] [transport.py] [_log()] starting thread (client mode): 0x70d2a380
2025-11-26T05:25:09.236 [DEBUG] [Thread-12444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:25:09.251 [DEBUG] [Thread-12444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:25:09.251 [INFO] [Thread-12444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] client lang: <none>
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] server lang: <none>
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] kex follows: False
2025-11-26T05:25:09.259 [DEBUG] [Thread-12444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:25:09.260 [DEBUG] [Thread-12444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:25:09.260 [DEBUG] [Thread-12444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:25:09.260 [DEBUG] [Thread-12444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:25:09.260 [DEBUG] [Thread-12444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:25:09.260 [DEBUG] [Thread-12444] [transport.py] [_log()] Compression: none
2025-11-26T05:25:09.260 [DEBUG] [Thread-12444] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:25:09.315 [DEBUG] [Thread-12444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:25:09.316 [DEBUG] [Thread-12444] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:25:09.317 [DEBUG] [Thread-12444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:25:09.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:25:09.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:25:09.372 [DEBUG] [Thread-12444] [transport.py] [_log()] userauth is OK
2025-11-26T05:25:09.372 [DEBUG] [Thread-12444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:25:09.372 [DEBUG] [Thread-12444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:25:09.373 [DEBUG] [Thread-12444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:25:09.373 [DEBUG] [Thread-12444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:25:09.391 [INFO] [Thread-12444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:25:09.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:25:09.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:25:10.206 [DEBUG] [Thread-12444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:25:10.206 [DEBUG] [Thread-12444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:25:10.254 [DEBUG] [Thread-12444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:25:10.254 [DEBUG] [Thread-12444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:25:10.263 [DEBUG] [Thread-12444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:25:10.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:25:10.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:25:10.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:25:10.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:25:10.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:25:10.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:25:10.301 [DEBUG] [Thread-12444] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:25:12.564 [DEBUG] [Thread-12446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:25:19.489 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:25:19.492 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:25:27.624 [DEBUG] [Thread-12447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:25:33.748 [DEBUG] [Thread-12448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:25:40.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:25:40.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:25:40.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:25:40.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 25, 25), 29.1, 13.13, 0.0, 15.46, 20.21, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:25:40.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:25:25
2025-11-26T05:25:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:25:41.246 [DEBUG] [Thread-12449] [transport.py] [_log()] starting thread (client mode): 0x73781480
2025-11-26T05:25:41.246 [DEBUG] [Thread-12449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:25:41.266 [DEBUG] [Thread-12449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:25:41.266 [INFO] [Thread-12449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:25:41.269 [DEBUG] [Thread-12449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:25:41.269 [DEBUG] [Thread-12449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:25:41.269 [DEBUG] [Thread-12449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:25:41.269 [DEBUG] [Thread-12449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] client lang: <none>
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] server lang: <none>
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] kex follows: False
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] Compression: none
2025-11-26T05:25:41.270 [DEBUG] [Thread-12449] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:25:41.285 [DEBUG] [Thread-12449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:25:41.286 [DEBUG] [Thread-12449] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:25:41.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:25:41.286 [DEBUG] [Thread-12449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:25:41.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:25:41.288 [DEBUG] [Thread-12449] [transport.py] [_log()] userauth is OK
2025-11-26T05:25:41.288 [DEBUG] [Thread-12449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:25:41.288 [DEBUG] [Thread-12449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:25:41.288 [DEBUG] [Thread-12449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:25:41.288 [DEBUG] [Thread-12449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:25:41.308 [INFO] [Thread-12449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:25:41.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:25:41.952 [DEBUG] [Thread-12449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:25:41.952 [DEBUG] [Thread-12449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:25:41.953 [DEBUG] [Thread-12449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:25:41.993 [DEBUG] [Thread-12449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:25:41.993 [DEBUG] [Thread-12449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:25:41.996 [DEBUG] [Thread-12449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:25:42.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:25:42.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:25:42.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:25:42.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:25:42.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:25:42.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:25:42.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:25:42.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:25:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:25:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.142455 -999.00  +19.80  15.05     18   -4.50 1 1 1 1 1   878    0 24.91 52.19 ----- 14.0 15.1 37.4 17.2 18.9 -25.0 18.8 -24.4 18.6 -22.8 18.8 -24.6
2025-11-26T05:25:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:25:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:25:42.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.142455
2025-11-26T05:25:42.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:25:42.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:25:42.020 [DEBUG] [Thread-12449] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:25:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:25:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:25:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:25:42.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:25:25', tmtdew=29.1, humidity=13.13, cloud=0.0, wind=15.46, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:25:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:25:42.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:25:42.116 [DEBUG] [Thread-12452] [transport.py] [_log()] starting thread (client mode): 0x70d75060
2025-11-26T05:25:42.117 [DEBUG] [Thread-12452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:25:42.131 [DEBUG] [Thread-12452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:25:42.132 [INFO] [Thread-12452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:25:42.139 [DEBUG] [Thread-12452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:25:42.139 [DEBUG] [Thread-12452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:25:42.139 [DEBUG] [Thread-12452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:25:42.139 [DEBUG] [Thread-12452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] client lang: <none>
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] server lang: <none>
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] kex follows: False
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:25:42.140 [DEBUG] [Thread-12452] [transport.py] [_log()] Compression: none
2025-11-26T05:25:42.141 [DEBUG] [Thread-12452] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:25:42.202 [DEBUG] [Thread-12452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:25:42.203 [DEBUG] [Thread-12452] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:25:42.203 [DEBUG] [Thread-12452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:25:42.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:25:42.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:25:42.259 [DEBUG] [Thread-12452] [transport.py] [_log()] userauth is OK
2025-11-26T05:25:42.259 [DEBUG] [Thread-12452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:25:42.259 [DEBUG] [Thread-12452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:25:42.259 [DEBUG] [Thread-12452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:25:42.259 [DEBUG] [Thread-12452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:25:42.278 [INFO] [Thread-12452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:25:42.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:25:42.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:25:42.653 [DEBUG] [Thread-12454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:25:43.111 [DEBUG] [Thread-12452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:25:43.111 [DEBUG] [Thread-12452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:25:43.158 [DEBUG] [Thread-12452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:25:43.159 [DEBUG] [Thread-12452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:25:43.167 [DEBUG] [Thread-12452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:25:43.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:25: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')
2025-11-26T05:25:43.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:25:43.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:25:43.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:25:43.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:25:43.201 [DEBUG] [Thread-12452] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:25:57.703 [DEBUG] [Thread-12455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:26:12.740 [DEBUG] [Thread-12456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:26:13.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:26:13.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:26:13.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:26:13.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 25, 58), 29.03, 13.15, 0.0, 16.71, 20.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:26:13.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:25:58
2025-11-26T05:26:14.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:26:14.206 [DEBUG] [Thread-12457] [transport.py] [_log()] starting thread (client mode): 0x70d03b20
2025-11-26T05:26:14.206 [DEBUG] [Thread-12457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:26:14.226 [DEBUG] [Thread-12457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:26:14.226 [INFO] [Thread-12457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] client lang: <none>
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] server lang: <none>
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] kex follows: False
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] Compression: none
2025-11-26T05:26:14.229 [DEBUG] [Thread-12457] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:26:14.246 [DEBUG] [Thread-12457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:26:14.246 [DEBUG] [Thread-12457] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:26:14.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:26:14.246 [DEBUG] [Thread-12457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:26:14.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:26:14.247 [DEBUG] [Thread-12457] [transport.py] [_log()] userauth is OK
2025-11-26T05:26:14.247 [DEBUG] [Thread-12457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:26:14.247 [DEBUG] [Thread-12457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:26:14.247 [DEBUG] [Thread-12457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:26:14.247 [DEBUG] [Thread-12457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:26:14.258 [INFO] [Thread-12457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:26:14.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:26:14.877 [DEBUG] [Thread-12457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:26:14.878 [DEBUG] [Thread-12457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:26:14.878 [DEBUG] [Thread-12457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:26:14.919 [DEBUG] [Thread-12457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:26:14.919 [DEBUG] [Thread-12457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:26:14.921 [DEBUG] [Thread-12457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:26:14.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:26:14.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:26:14.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:26:14.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:26:14.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:26:14.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:26:14.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:26:14.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.142803 -999.00  +19.90  15.47     18   -4.40 1 1 1 1 1   879    0 25.26 54.49 ----- 14.7 15.5 46.0 16.4 18.9 -25.1 18.9 -24.2 18.6 -22.8 18.9 -24.4
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.142803
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:26:14.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:25:58', tmtdew=29.03, humidity=13.15, cloud=0.0, wind=16.71, temperature=20.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:25:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:26:14.939 [DEBUG] [Thread-12457] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:26:15.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:26:15.025 [DEBUG] [Thread-12460] [transport.py] [_log()] starting thread (client mode): 0x70d00b20
2025-11-26T05:26:15.025 [DEBUG] [Thread-12460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:26:15.040 [DEBUG] [Thread-12460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:26:15.040 [INFO] [Thread-12460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:26:15.047 [DEBUG] [Thread-12460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:26:15.047 [DEBUG] [Thread-12460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:26:15.047 [DEBUG] [Thread-12460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:26:15.047 [DEBUG] [Thread-12460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:26:15.047 [DEBUG] [Thread-12460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:26:15.047 [DEBUG] [Thread-12460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:26:15.047 [DEBUG] [Thread-12460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:26:15.047 [DEBUG] [Thread-12460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:26:15.047 [DEBUG] [Thread-12460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] client lang: <none>
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] server lang: <none>
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] kex follows: False
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] Compression: none
2025-11-26T05:26:15.048 [DEBUG] [Thread-12460] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:26:15.105 [DEBUG] [Thread-12460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:26:15.105 [DEBUG] [Thread-12460] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:26:15.106 [DEBUG] [Thread-12460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:26:15.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:26:15.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:26:15.162 [DEBUG] [Thread-12460] [transport.py] [_log()] userauth is OK
2025-11-26T05:26:15.162 [DEBUG] [Thread-12460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:26:15.162 [DEBUG] [Thread-12460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:26:15.163 [DEBUG] [Thread-12460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:26:15.163 [DEBUG] [Thread-12460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:26:15.177 [INFO] [Thread-12460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:26:15.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:26:15.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:26:16.017 [DEBUG] [Thread-12460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:26:16.017 [DEBUG] [Thread-12460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:26:16.065 [DEBUG] [Thread-12460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:26:16.065 [DEBUG] [Thread-12460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:26:16.073 [DEBUG] [Thread-12460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:26:16.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:26:16.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:26:16.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:26:16.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:26:16.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:26:16.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:26:16.104 [DEBUG] [Thread-12460] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:26:19.696 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:26:19.697 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:26:27.774 [DEBUG] [Thread-12462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:26:33.830 [DEBUG] [Thread-12463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:26:42.828 [DEBUG] [Thread-12464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:26:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:26:46.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:26:46.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:26:46.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 26, 30), 29.05, 13.13, 0.0, 16.55, 20.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:26:46.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:26:30
2025-11-26T05:26:46.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:26:47.072 [DEBUG] [Thread-12465] [transport.py] [_log()] starting thread (client mode): 0x73781930
2025-11-26T05:26:47.073 [DEBUG] [Thread-12465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:26:47.093 [DEBUG] [Thread-12465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:26:47.093 [INFO] [Thread-12465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:26:47.096 [DEBUG] [Thread-12465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:26:47.096 [DEBUG] [Thread-12465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:26:47.096 [DEBUG] [Thread-12465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:26:47.096 [DEBUG] [Thread-12465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] client lang: <none>
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] server lang: <none>
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] kex follows: False
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] Compression: none
2025-11-26T05:26:47.097 [DEBUG] [Thread-12465] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:26:47.115 [DEBUG] [Thread-12465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:26:47.116 [DEBUG] [Thread-12465] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:26:47.116 [DEBUG] [Thread-12465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:26:47.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:26:47.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:26:47.118 [DEBUG] [Thread-12465] [transport.py] [_log()] userauth is OK
2025-11-26T05:26:47.118 [DEBUG] [Thread-12465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:26:47.118 [DEBUG] [Thread-12465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:26:47.118 [DEBUG] [Thread-12465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:26:47.118 [DEBUG] [Thread-12465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:26:47.140 [INFO] [Thread-12465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:26:47.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:26:47.805 [DEBUG] [Thread-12465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:26:47.805 [DEBUG] [Thread-12465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:26:47.805 [DEBUG] [Thread-12465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:26:47.846 [DEBUG] [Thread-12465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:26:47.846 [DEBUG] [Thread-12465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:26:47.849 [DEBUG] [Thread-12465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:26:47.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:26:47.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:26:47.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:26:47.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:26:47.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:26:47.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:26:47.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:26:47.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:26:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:26:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.143150 -999.00  +19.90  14.48     18   -4.40 1 1 1 1 1   879    0 25.00 57.34 ----- 15.0 14.5 45.0 16.6 19.0 -25.2 18.9 -24.5 18.6 -23.2 18.9 -24.8
2025-11-26T05:26:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:26:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:26:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.143150
2025-11-26T05:26:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:26:47.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:26:47.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:26:47.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:26:47.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:26:47.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:26:30', tmtdew=29.05, humidity=13.13, cloud=0.0, wind=16.55, temperature=20.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:26:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:26:47.875 [DEBUG] [Thread-12465] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:26:47.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:26:47.972 [DEBUG] [Thread-12468] [transport.py] [_log()] starting thread (client mode): 0x70d2a5c0
2025-11-26T05:26:47.972 [DEBUG] [Thread-12468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:26:47.989 [DEBUG] [Thread-12468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:26:47.989 [INFO] [Thread-12468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:26:47.997 [DEBUG] [Thread-12468] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:26:47.997 [DEBUG] [Thread-12468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:26:47.997 [DEBUG] [Thread-12468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:26:47.997 [DEBUG] [Thread-12468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:26:47.997 [DEBUG] [Thread-12468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:26:47.997 [DEBUG] [Thread-12468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:26:47.997 [DEBUG] [Thread-12468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:26:47.997 [DEBUG] [Thread-12468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:26:47.998 [DEBUG] [Thread-12468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:26:47.998 [DEBUG] [Thread-12468] [transport.py] [_log()] client lang: <none>
2025-11-26T05:26:47.998 [DEBUG] [Thread-12468] [transport.py] [_log()] server lang: <none>
2025-11-26T05:26:47.998 [DEBUG] [Thread-12468] [transport.py] [_log()] kex follows: False
2025-11-26T05:26:47.998 [DEBUG] [Thread-12468] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:26:47.998 [DEBUG] [Thread-12468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:26:47.998 [DEBUG] [Thread-12468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:26:47.998 [DEBUG] [Thread-12468] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:26:47.998 [DEBUG] [Thread-12468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:26:47.999 [DEBUG] [Thread-12468] [transport.py] [_log()] Compression: none
2025-11-26T05:26:47.999 [DEBUG] [Thread-12468] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:26:48.068 [DEBUG] [Thread-12468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:26:48.068 [DEBUG] [Thread-12468] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:26:48.069 [DEBUG] [Thread-12468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:26:48.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:26:48.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:26:48.128 [DEBUG] [Thread-12468] [transport.py] [_log()] userauth is OK
2025-11-26T05:26:48.128 [DEBUG] [Thread-12468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:26:48.128 [DEBUG] [Thread-12468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:26:48.128 [DEBUG] [Thread-12468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:26:48.128 [DEBUG] [Thread-12468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:26:48.142 [INFO] [Thread-12468] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:26:48.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:26:48.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:26:48.967 [DEBUG] [Thread-12468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:26:48.967 [DEBUG] [Thread-12468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:26:49.015 [DEBUG] [Thread-12468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:26:49.015 [DEBUG] [Thread-12468] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:26:49.024 [DEBUG] [Thread-12468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:26:49.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:26:49.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:26:49.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:26:49.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:26:49.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:26:49.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:26:49.061 [DEBUG] [Thread-12468] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:26:57.867 [DEBUG] [Thread-12470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:27:12.918 [DEBUG] [Thread-12471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:27:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:27:19.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:27:19.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:27:19.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 27, 2), 29.08, 13.11, 0.0, 14.96, 20.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:27:19.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:27:02
2025-11-26T05:27:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:27:19.901 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:27:19.902 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:27:20.014 [DEBUG] [Thread-12472] [transport.py] [_log()] starting thread (client mode): 0x737c6ad0
2025-11-26T05:27:20.014 [DEBUG] [Thread-12472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:27:20.035 [DEBUG] [Thread-12472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:27:20.035 [INFO] [Thread-12472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] client lang: <none>
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] server lang: <none>
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] kex follows: False
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:27:20.038 [DEBUG] [Thread-12472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:27:20.039 [DEBUG] [Thread-12472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:27:20.039 [DEBUG] [Thread-12472] [transport.py] [_log()] Compression: none
2025-11-26T05:27:20.039 [DEBUG] [Thread-12472] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:27:20.056 [DEBUG] [Thread-12472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:27:20.057 [DEBUG] [Thread-12472] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:27:20.057 [DEBUG] [Thread-12472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:27:20.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:27:20.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:27:20.059 [DEBUG] [Thread-12472] [transport.py] [_log()] userauth is OK
2025-11-26T05:27:20.059 [DEBUG] [Thread-12472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:27:20.059 [DEBUG] [Thread-12472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:27:20.059 [DEBUG] [Thread-12472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:27:20.059 [DEBUG] [Thread-12472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:27:20.075 [INFO] [Thread-12472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:27:20.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:27:20.655 [DEBUG] [Thread-12472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:27:20.655 [DEBUG] [Thread-12472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:27:20.656 [DEBUG] [Thread-12472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:27:20.696 [DEBUG] [Thread-12472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:27:20.696 [DEBUG] [Thread-12472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:27:20.699 [DEBUG] [Thread-12472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:27:20.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:27:20.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:27:20.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:27:20.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:27:20.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:27:20.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:27:20.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:27:20.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:27:20.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:27:20.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.143844 -999.00  +19.90  12.99     18   -4.40 1 1 1 1 1   881    0 25.14 65.14 NA 14.8 13.0 43.2 18.1 19.1 -25.2 19.0 -24.4 18.8 -23.3 19.0 -24.6
2025-11-26T05:27:20.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:27:20.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:27:20.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.143844
2025-11-26T05:27:20.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:27:20.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:27:20.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:27:20.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:27:20.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:27:20.726 [DEBUG] [Thread-12472] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:27:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:27:02', tmtdew=29.08, humidity=13.11, cloud=0.0, wind=14.96, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:27:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:27:20.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:27:20.822 [DEBUG] [Thread-12475] [transport.py] [_log()] starting thread (client mode): 0x70d77370
2025-11-26T05:27:20.822 [DEBUG] [Thread-12475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:27:20.840 [DEBUG] [Thread-12475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:27:20.840 [INFO] [Thread-12475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:27:20.847 [DEBUG] [Thread-12475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:27:20.847 [DEBUG] [Thread-12475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:27:20.847 [DEBUG] [Thread-12475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:27:20.847 [DEBUG] [Thread-12475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] client lang: <none>
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] server lang: <none>
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] kex follows: False
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] Compression: none
2025-11-26T05:27:20.848 [DEBUG] [Thread-12475] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:27:20.907 [DEBUG] [Thread-12475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:27:20.907 [DEBUG] [Thread-12475] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:27:20.908 [DEBUG] [Thread-12475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:27:20.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:27:20.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:27:20.963 [DEBUG] [Thread-12475] [transport.py] [_log()] userauth is OK
2025-11-26T05:27:20.963 [DEBUG] [Thread-12475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:27:20.963 [DEBUG] [Thread-12475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:27:20.963 [DEBUG] [Thread-12475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:27:20.963 [DEBUG] [Thread-12475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:27:20.983 [INFO] [Thread-12475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:27:20.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:27:20.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:27:21.825 [DEBUG] [Thread-12475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:27:21.826 [DEBUG] [Thread-12475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:27:21.874 [DEBUG] [Thread-12475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:27:21.874 [DEBUG] [Thread-12475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:27:21.883 [DEBUG] [Thread-12475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:27:21.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:27:21.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:27:21.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:27:21.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:27:21.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:27:21.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:27:21.919 [DEBUG] [Thread-12475] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:27:27.950 [DEBUG] [Thread-12477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:27:33.885 [DEBUG] [Thread-12478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:27:42.988 [DEBUG] [Thread-12479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:27:51.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:27:51.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:27:51.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:27:52.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 27, 34), 29.06, 13.13, 0.0, 14.59, 20.23, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:27:52.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:27:34
2025-11-26T05:27:52.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:27:52.895 [DEBUG] [Thread-12480] [transport.py] [_log()] starting thread (client mode): 0x737c65c0
2025-11-26T05:27:52.895 [DEBUG] [Thread-12480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:27:52.915 [DEBUG] [Thread-12480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:27:52.915 [INFO] [Thread-12480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:27:52.919 [DEBUG] [Thread-12480] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:27:52.919 [DEBUG] [Thread-12480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:27:52.919 [DEBUG] [Thread-12480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:27:52.919 [DEBUG] [Thread-12480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:27:52.919 [DEBUG] [Thread-12480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] client lang: <none>
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] server lang: <none>
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] kex follows: False
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:27:52.920 [DEBUG] [Thread-12480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:27:52.921 [DEBUG] [Thread-12480] [transport.py] [_log()] Compression: none
2025-11-26T05:27:52.921 [DEBUG] [Thread-12480] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:27:52.935 [DEBUG] [Thread-12480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:27:52.936 [DEBUG] [Thread-12480] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:27:52.936 [DEBUG] [Thread-12480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:27:52.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:27:52.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:27:52.938 [DEBUG] [Thread-12480] [transport.py] [_log()] userauth is OK
2025-11-26T05:27:52.938 [DEBUG] [Thread-12480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:27:52.938 [DEBUG] [Thread-12480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:27:52.938 [DEBUG] [Thread-12480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:27:52.938 [DEBUG] [Thread-12480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:27:52.962 [INFO] [Thread-12480] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:27:52.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:27:53.624 [DEBUG] [Thread-12480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:27:53.624 [DEBUG] [Thread-12480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:27:53.624 [DEBUG] [Thread-12480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:27:53.665 [DEBUG] [Thread-12480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:27:53.665 [DEBUG] [Thread-12480] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:27:53.668 [DEBUG] [Thread-12480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:27:53.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:27:53.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:27:53.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:27:53.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:27:53.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:27:53.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:27:53.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:27:53.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:27:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:27:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.144192 -999.00  +19.90  14.75     18   -4.40 1 1 1 1 1   881    0 25.64 67.97 NA 15.6 14.8 47.0 19.4 19.1 -25.2 19.1 -24.5 18.8 -23.2 19.1 -24.7
2025-11-26T05:27:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:27:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:27:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.144192
2025-11-26T05:27:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:27:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:27:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:27:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:27:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:27:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:27:34', tmtdew=29.06, humidity=13.13, cloud=0.0, wind=14.59, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:27:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:27:53.693 [DEBUG] [Thread-12480] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:27:53.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:27:53.788 [DEBUG] [Thread-12483] [transport.py] [_log()] starting thread (client mode): 0x70d7dfc0
2025-11-26T05:27:53.788 [DEBUG] [Thread-12483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:27:53.803 [DEBUG] [Thread-12483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:27:53.804 [INFO] [Thread-12483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:27:53.811 [DEBUG] [Thread-12483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:27:53.811 [DEBUG] [Thread-12483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] client lang: <none>
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] server lang: <none>
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] kex follows: False
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:27:53.812 [DEBUG] [Thread-12483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:27:53.813 [DEBUG] [Thread-12483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:27:53.813 [DEBUG] [Thread-12483] [transport.py] [_log()] Compression: none
2025-11-26T05:27:53.813 [DEBUG] [Thread-12483] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:27:53.875 [DEBUG] [Thread-12483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:27:53.876 [DEBUG] [Thread-12483] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:27:53.876 [DEBUG] [Thread-12483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:27:53.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:27:53.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:27:53.934 [DEBUG] [Thread-12483] [transport.py] [_log()] userauth is OK
2025-11-26T05:27:53.934 [DEBUG] [Thread-12483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:27:53.935 [DEBUG] [Thread-12483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:27:53.935 [DEBUG] [Thread-12483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:27:53.935 [DEBUG] [Thread-12483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:27:53.954 [INFO] [Thread-12483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:27:53.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:27:53.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:27:54.777 [DEBUG] [Thread-12483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:27:54.777 [DEBUG] [Thread-12483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:27:54.824 [DEBUG] [Thread-12483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:27:54.824 [DEBUG] [Thread-12483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:27:54.832 [DEBUG] [Thread-12483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:27:54.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:27:54.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:27:54.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:27:54.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:27:54.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:27:54.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:27:54.864 [DEBUG] [Thread-12483] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:27:58.027 [DEBUG] [Thread-12485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:28:13.076 [DEBUG] [Thread-12486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:28:20.105 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:28:20.106 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:28:24.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:28:24.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:28:24.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:28:25.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 28, 6), 29.05, 13.15, 0.0, 13.02, 20.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:28:25.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:28:06
2025-11-26T05:28:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:28:25.811 [DEBUG] [Thread-12487] [transport.py] [_log()] starting thread (client mode): 0x70d75b40
2025-11-26T05:28:25.811 [DEBUG] [Thread-12487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:28:25.831 [DEBUG] [Thread-12487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:28:25.831 [INFO] [Thread-12487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:28:25.834 [DEBUG] [Thread-12487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] client lang: <none>
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] server lang: <none>
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] kex follows: False
2025-11-26T05:28:25.835 [DEBUG] [Thread-12487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:28:25.836 [DEBUG] [Thread-12487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:28:25.836 [DEBUG] [Thread-12487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:28:25.836 [DEBUG] [Thread-12487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:28:25.836 [DEBUG] [Thread-12487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:28:25.836 [DEBUG] [Thread-12487] [transport.py] [_log()] Compression: none
2025-11-26T05:28:25.836 [DEBUG] [Thread-12487] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:28:25.855 [DEBUG] [Thread-12487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:28:25.856 [DEBUG] [Thread-12487] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:28:25.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:28:25.857 [DEBUG] [Thread-12487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:28:25.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:28:25.858 [DEBUG] [Thread-12487] [transport.py] [_log()] userauth is OK
2025-11-26T05:28:25.858 [DEBUG] [Thread-12487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:28:25.858 [DEBUG] [Thread-12487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:28:25.858 [DEBUG] [Thread-12487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:28:25.858 [DEBUG] [Thread-12487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:28:25.883 [INFO] [Thread-12487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:28:25.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:28:26.470 [DEBUG] [Thread-12487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:28:26.470 [DEBUG] [Thread-12487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:28:26.471 [DEBUG] [Thread-12487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:28:26.511 [DEBUG] [Thread-12487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:28:26.511 [DEBUG] [Thread-12487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:28:26.514 [DEBUG] [Thread-12487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:28:26.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:28:26.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:28:26.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:28:26.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:28:26.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:28:26.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:28:26.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:28:26.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:28:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:28:26.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.144539 -999.00  +20.00  16.46     18   -4.30 1 1 1 1 1   882    0 26.08 74.75 NA 14.5 16.5 49.2 18.4 19.2 -25.2 19.1 -24.5 18.8 -23.2 19.1 -24.8
2025-11-26T05:28:26.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:28:26.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:28:26.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.144539
2025-11-26T05:28:26.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:28:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:28:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:28:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:28:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:28:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:28:06', tmtdew=29.05, humidity=13.15, cloud=0.0, wind=13.02, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:28:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:28:26.540 [DEBUG] [Thread-12487] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:28:26.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:28:26.634 [DEBUG] [Thread-12490] [transport.py] [_log()] starting thread (client mode): 0x73783610
2025-11-26T05:28:26.635 [DEBUG] [Thread-12490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:28:26.650 [DEBUG] [Thread-12490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:28:26.650 [INFO] [Thread-12490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:28:26.658 [DEBUG] [Thread-12490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:28:26.658 [DEBUG] [Thread-12490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:28:26.658 [DEBUG] [Thread-12490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:28:26.658 [DEBUG] [Thread-12490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:28:26.658 [DEBUG] [Thread-12490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:28:26.658 [DEBUG] [Thread-12490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:28:26.658 [DEBUG] [Thread-12490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:28:26.658 [DEBUG] [Thread-12490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] client lang: <none>
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] server lang: <none>
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] kex follows: False
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] Compression: none
2025-11-26T05:28:26.659 [DEBUG] [Thread-12490] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:28:26.718 [DEBUG] [Thread-12490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:28:26.719 [DEBUG] [Thread-12490] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:28:26.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:28:26.720 [DEBUG] [Thread-12490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:28:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:28:26.775 [DEBUG] [Thread-12490] [transport.py] [_log()] userauth is OK
2025-11-26T05:28:26.776 [DEBUG] [Thread-12490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:28:26.776 [DEBUG] [Thread-12490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:28:26.776 [DEBUG] [Thread-12490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:28:26.776 [DEBUG] [Thread-12490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:28:26.799 [INFO] [Thread-12490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:28:26.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:28:26.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:28:27.693 [DEBUG] [Thread-12490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:28:27.693 [DEBUG] [Thread-12490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:28:27.741 [DEBUG] [Thread-12490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:28:27.741 [DEBUG] [Thread-12490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:28:27.750 [DEBUG] [Thread-12490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:28:27.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:28:27.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:28:27.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:28:27.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:28:27.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:28:27.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:28:27.787 [DEBUG] [Thread-12490] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:28:28.116 [DEBUG] [Thread-12492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:28:33.938 [DEBUG] [Thread-12493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:28:43.167 [DEBUG] [Thread-12494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:28:57.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:28:57.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:28:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:28:58.203 [DEBUG] [Thread-12495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:28:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 28, 38), 28.98, 13.11, 0.0, 13.0, 20.2, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:28:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:28:38
2025-11-26T05:28:58.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:28:58.746 [DEBUG] [Thread-12496] [transport.py] [_log()] starting thread (client mode): 0x70d2ab90
2025-11-26T05:28:58.746 [DEBUG] [Thread-12496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:28:58.767 [DEBUG] [Thread-12496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:28:58.767 [INFO] [Thread-12496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:28:58.771 [DEBUG] [Thread-12496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:28:58.771 [DEBUG] [Thread-12496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:28:58.771 [DEBUG] [Thread-12496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:28:58.771 [DEBUG] [Thread-12496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:28:58.771 [DEBUG] [Thread-12496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:28:58.771 [DEBUG] [Thread-12496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:28:58.771 [DEBUG] [Thread-12496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] client lang: <none>
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] server lang: <none>
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] kex follows: False
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] Compression: none
2025-11-26T05:28:58.772 [DEBUG] [Thread-12496] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:28:58.792 [DEBUG] [Thread-12496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:28:58.793 [DEBUG] [Thread-12496] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:28:58.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:28:58.794 [DEBUG] [Thread-12496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:28:58.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:28:58.796 [DEBUG] [Thread-12496] [transport.py] [_log()] userauth is OK
2025-11-26T05:28:58.796 [DEBUG] [Thread-12496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:28:58.796 [DEBUG] [Thread-12496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:28:58.796 [DEBUG] [Thread-12496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:28:58.796 [DEBUG] [Thread-12496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:28:58.817 [INFO] [Thread-12496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:28:58.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:28:59.468 [DEBUG] [Thread-12496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:28:59.469 [DEBUG] [Thread-12496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:28:59.469 [DEBUG] [Thread-12496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:28:59.510 [DEBUG] [Thread-12496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:28:59.510 [DEBUG] [Thread-12496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:28:59.514 [DEBUG] [Thread-12496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:28:59.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:28:59.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:28:59.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:28:59.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:28:59.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:28:59.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:28:59.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:28:59.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:28:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:28:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.144886 -999.00  +20.00  16.44     18   -4.30 1 1 1 1 1   882    0 25.94 83.96 NA 15.8 16.4 47.2 19.5 19.2 -25.4 19.2 -24.7 18.9 -23.5 19.1 -24.5
2025-11-26T05:28:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:28:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:28:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.144886
2025-11-26T05:28:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:28:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:28:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:28:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:28:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:28:59.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:28:38', tmtdew=28.98, humidity=13.11, cloud=0.0, wind=13.0, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:28:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:28:59.541 [DEBUG] [Thread-12496] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:28:59.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:28:59.634 [DEBUG] [Thread-12499] [transport.py] [_log()] starting thread (client mode): 0x70d1e4d0
2025-11-26T05:28:59.634 [DEBUG] [Thread-12499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:28:59.648 [DEBUG] [Thread-12499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:28:59.648 [INFO] [Thread-12499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:28:59.656 [DEBUG] [Thread-12499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:28:59.656 [DEBUG] [Thread-12499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] client lang: <none>
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] server lang: <none>
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] kex follows: False
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] Compression: none
2025-11-26T05:28:59.657 [DEBUG] [Thread-12499] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:28:59.715 [DEBUG] [Thread-12499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:28:59.715 [DEBUG] [Thread-12499] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:28:59.716 [DEBUG] [Thread-12499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:28:59.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:28:59.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:28:59.774 [DEBUG] [Thread-12499] [transport.py] [_log()] userauth is OK
2025-11-26T05:28:59.774 [DEBUG] [Thread-12499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:28:59.775 [DEBUG] [Thread-12499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:28:59.775 [DEBUG] [Thread-12499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:28:59.775 [DEBUG] [Thread-12499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:28:59.798 [INFO] [Thread-12499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:28:59.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:28:59.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:29:00.617 [DEBUG] [Thread-12499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:29:00.617 [DEBUG] [Thread-12499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:29:00.665 [DEBUG] [Thread-12499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:29:00.665 [DEBUG] [Thread-12499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:29:00.674 [DEBUG] [Thread-12499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:29:00.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:29:00.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:29:00.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:29:00.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:29:00.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:29:00.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:29:00.711 [DEBUG] [Thread-12499] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:29:13.237 [DEBUG] [Thread-12501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:29:20.243 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:29:20.244 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:29:28.283 [DEBUG] [Thread-12502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:29:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:29:30.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:29:30.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:29:31.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 29, 10), 28.99, 13.1, 0.0, 13.89, 20.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:29:31.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:29:10
2025-11-26T05:29:31.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:29:31.681 [DEBUG] [Thread-12503] [transport.py] [_log()] starting thread (client mode): 0x70d7eaa0
2025-11-26T05:29:31.681 [DEBUG] [Thread-12503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:29:31.701 [DEBUG] [Thread-12503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:29:31.701 [INFO] [Thread-12503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:29:31.705 [DEBUG] [Thread-12503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:29:31.705 [DEBUG] [Thread-12503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:29:31.705 [DEBUG] [Thread-12503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:29:31.705 [DEBUG] [Thread-12503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:29:31.705 [DEBUG] [Thread-12503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:29:31.705 [DEBUG] [Thread-12503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:29:31.705 [DEBUG] [Thread-12503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:29:31.705 [DEBUG] [Thread-12503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:29:31.705 [DEBUG] [Thread-12503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] client lang: <none>
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] server lang: <none>
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] kex follows: False
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] Compression: none
2025-11-26T05:29:31.706 [DEBUG] [Thread-12503] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:29:31.724 [DEBUG] [Thread-12503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:29:31.725 [DEBUG] [Thread-12503] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:29:31.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:29:31.726 [DEBUG] [Thread-12503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:29:31.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:29:31.728 [DEBUG] [Thread-12503] [transport.py] [_log()] userauth is OK
2025-11-26T05:29:31.728 [DEBUG] [Thread-12503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:29:31.728 [DEBUG] [Thread-12503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:29:31.728 [DEBUG] [Thread-12503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:29:31.729 [DEBUG] [Thread-12503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:29:31.752 [INFO] [Thread-12503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:29:31.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:29:32.368 [DEBUG] [Thread-12503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:29:32.368 [DEBUG] [Thread-12503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:29:32.369 [DEBUG] [Thread-12503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:29:32.410 [DEBUG] [Thread-12503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:29:32.410 [DEBUG] [Thread-12503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:29:32.413 [DEBUG] [Thread-12503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:29:32.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:29:32.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:29:32.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:29:32.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:29:32.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:29:32.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:29:32.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:29:32.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:29:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:29:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.145233 -999.00  +20.00  13.28     18   -4.40 1 1 1 1 1   883    0 25.94 85.04 NA 12.7 13.3 43.2 17.9 19.3 -25.4 19.3 -24.6 18.9 -23.6 19.1 -24.8
2025-11-26T05:29:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:29:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:29:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.145233
2025-11-26T05:29:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:29:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:29:32.437 [DEBUG] [Thread-12503] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:29:32.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:29:32.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:29:32.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:29:32.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:29:10', tmtdew=28.99, humidity=13.1, cloud=0.0, wind=13.89, temperature=20.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:29:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:29:32.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:29:32.533 [DEBUG] [Thread-12506] [transport.py] [_log()] starting thread (client mode): 0x70d7d180
2025-11-26T05:29:32.533 [DEBUG] [Thread-12506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:29:32.547 [DEBUG] [Thread-12506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:29:32.548 [INFO] [Thread-12506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:29:32.555 [DEBUG] [Thread-12506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:29:32.555 [DEBUG] [Thread-12506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:29:32.555 [DEBUG] [Thread-12506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:29:32.555 [DEBUG] [Thread-12506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:29:32.555 [DEBUG] [Thread-12506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:29:32.555 [DEBUG] [Thread-12506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:29:32.555 [DEBUG] [Thread-12506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:29:32.556 [DEBUG] [Thread-12506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:29:32.556 [DEBUG] [Thread-12506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:29:32.556 [DEBUG] [Thread-12506] [transport.py] [_log()] client lang: <none>
2025-11-26T05:29:32.556 [DEBUG] [Thread-12506] [transport.py] [_log()] server lang: <none>
2025-11-26T05:29:32.556 [DEBUG] [Thread-12506] [transport.py] [_log()] kex follows: False
2025-11-26T05:29:32.556 [DEBUG] [Thread-12506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:29:32.556 [DEBUG] [Thread-12506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:29:32.556 [DEBUG] [Thread-12506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:29:32.556 [DEBUG] [Thread-12506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:29:32.557 [DEBUG] [Thread-12506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:29:32.557 [DEBUG] [Thread-12506] [transport.py] [_log()] Compression: none
2025-11-26T05:29:32.558 [DEBUG] [Thread-12506] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:29:32.618 [DEBUG] [Thread-12506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:29:32.619 [DEBUG] [Thread-12506] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:29:32.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:29:32.620 [DEBUG] [Thread-12506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:29:32.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:29:32.673 [DEBUG] [Thread-12506] [transport.py] [_log()] userauth is OK
2025-11-26T05:29:32.674 [DEBUG] [Thread-12506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:29:32.674 [DEBUG] [Thread-12506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:29:32.674 [DEBUG] [Thread-12506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:29:32.674 [DEBUG] [Thread-12506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:29:32.696 [INFO] [Thread-12506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:29:32.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:29:32.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:29:33.588 [DEBUG] [Thread-12506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:29:33.588 [DEBUG] [Thread-12506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:29:33.637 [DEBUG] [Thread-12506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:29:33.637 [DEBUG] [Thread-12506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:29:33.647 [DEBUG] [Thread-12506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:29:33.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:29:33.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:29:33.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:29:33.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:29:33.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:29:33.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:29:33.684 [DEBUG] [Thread-12506] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:29:33.990 [DEBUG] [Thread-12508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:29:43.319 [DEBUG] [Thread-12509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:29:58.357 [DEBUG] [Thread-12510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:30:03.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:30:03.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:30:03.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:30:04.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 29, 42), 28.93, 13.6, 0.0, 14.29, 20.1, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:30:04.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:29:42
2025-11-26T05:30:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:30:04.635 [DEBUG] [Thread-12511] [transport.py] [_log()] starting thread (client mode): 0x70d75b40
2025-11-26T05:30:04.635 [DEBUG] [Thread-12511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:30:04.649 [DEBUG] [Thread-12511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:30:04.649 [INFO] [Thread-12511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] client lang: <none>
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] server lang: <none>
2025-11-26T05:30:04.652 [DEBUG] [Thread-12511] [transport.py] [_log()] kex follows: False
2025-11-26T05:30:04.653 [DEBUG] [Thread-12511] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:30:04.653 [DEBUG] [Thread-12511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:30:04.653 [DEBUG] [Thread-12511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:30:04.653 [DEBUG] [Thread-12511] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:30:04.653 [DEBUG] [Thread-12511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:30:04.653 [DEBUG] [Thread-12511] [transport.py] [_log()] Compression: none
2025-11-26T05:30:04.653 [DEBUG] [Thread-12511] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:30:04.661 [DEBUG] [Thread-12511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:30:04.661 [DEBUG] [Thread-12511] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:30:04.662 [DEBUG] [Thread-12511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:30:04.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:30:04.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:30:04.662 [DEBUG] [Thread-12511] [transport.py] [_log()] userauth is OK
2025-11-26T05:30:04.662 [DEBUG] [Thread-12511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:30:04.663 [DEBUG] [Thread-12511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:30:04.663 [DEBUG] [Thread-12511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:30:04.663 [DEBUG] [Thread-12511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:30:04.674 [INFO] [Thread-12511] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:30:04.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:30:05.345 [DEBUG] [Thread-12511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:30:05.345 [DEBUG] [Thread-12511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:30:05.346 [DEBUG] [Thread-12511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:30:05.386 [DEBUG] [Thread-12511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:30:05.386 [DEBUG] [Thread-12511] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:30:05.389 [DEBUG] [Thread-12511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:30:05.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:30:05.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:30:05.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:30:05.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:30:05.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:30:05.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:30:05.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:30:05.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:30:05.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:30:05.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.145580 -999.00  +20.00  15.16     18   -4.40 1 1 1 1 1   883    0 26.31 80.32 ----- 13.6 15.2 43.4 18.9 19.4 -25.4 19.3 -24.5 18.9 -23.4 19.2 -24.9
2025-11-26T05:30:05.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:30:05.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:30:05.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.145580
2025-11-26T05:30:05.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:30:05.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:30:05.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:30:05.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:30:05.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:30:05.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:29:42', tmtdew=28.93, humidity=13.6, cloud=0.0, wind=14.29, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:29:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:30:05.416 [DEBUG] [Thread-12511] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:30:05.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:30:05.507 [DEBUG] [Thread-12514] [transport.py] [_log()] starting thread (client mode): 0x7376caf0
2025-11-26T05:30:05.508 [DEBUG] [Thread-12514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:30:05.522 [DEBUG] [Thread-12514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:30:05.522 [INFO] [Thread-12514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:30:05.530 [DEBUG] [Thread-12514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:30:05.530 [DEBUG] [Thread-12514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:30:05.530 [DEBUG] [Thread-12514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:30:05.530 [DEBUG] [Thread-12514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:30:05.530 [DEBUG] [Thread-12514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:30:05.530 [DEBUG] [Thread-12514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:30:05.530 [DEBUG] [Thread-12514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:30:05.530 [DEBUG] [Thread-12514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] client lang: <none>
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] server lang: <none>
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] kex follows: False
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] Compression: none
2025-11-26T05:30:05.531 [DEBUG] [Thread-12514] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:30:05.590 [DEBUG] [Thread-12514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:30:05.590 [DEBUG] [Thread-12514] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:30:05.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:30:05.591 [DEBUG] [Thread-12514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:30:05.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:30:05.650 [DEBUG] [Thread-12514] [transport.py] [_log()] userauth is OK
2025-11-26T05:30:05.650 [DEBUG] [Thread-12514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:30:05.650 [DEBUG] [Thread-12514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:30:05.650 [DEBUG] [Thread-12514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:30:05.650 [DEBUG] [Thread-12514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:30:05.669 [INFO] [Thread-12514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:30:05.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:30:05.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:30:06.552 [DEBUG] [Thread-12514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:30:06.552 [DEBUG] [Thread-12514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:30:06.600 [DEBUG] [Thread-12514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:30:06.600 [DEBUG] [Thread-12514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:30:06.609 [DEBUG] [Thread-12514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:30:06.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:30:06.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:30:06.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:30:06.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:30:06.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:30:06.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:30:06.645 [DEBUG] [Thread-12514] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:30:13.389 [DEBUG] [Thread-12516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:30:20.384 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:30:20.385 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:30:28.446 [DEBUG] [Thread-12517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:30:34.035 [DEBUG] [Thread-12518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:30:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:30:36.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:30:36.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:30:37.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 30, 14), 28.91, 13.63, 0.0, 13.87, 20.15, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:30:37.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:30:14
2025-11-26T05:30:37.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:30:37.650 [DEBUG] [Thread-12519] [transport.py] [_log()] starting thread (client mode): 0x70d7d8d0
2025-11-26T05:30:37.650 [DEBUG] [Thread-12519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:30:37.666 [DEBUG] [Thread-12519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:30:37.666 [INFO] [Thread-12519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] client lang: <none>
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] server lang: <none>
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] kex follows: False
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] Compression: none
2025-11-26T05:30:37.668 [DEBUG] [Thread-12519] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:30:37.677 [DEBUG] [Thread-12519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:30:37.677 [DEBUG] [Thread-12519] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:30:37.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:30:37.677 [DEBUG] [Thread-12519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:30:37.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:30:37.678 [DEBUG] [Thread-12519] [transport.py] [_log()] userauth is OK
2025-11-26T05:30:37.678 [DEBUG] [Thread-12519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:30:37.678 [DEBUG] [Thread-12519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:30:37.678 [DEBUG] [Thread-12519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:30:37.678 [DEBUG] [Thread-12519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:30:37.687 [INFO] [Thread-12519] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:30:37.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:30:38.244 [DEBUG] [Thread-12519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:30:38.244 [DEBUG] [Thread-12519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:30:38.245 [DEBUG] [Thread-12519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:30:38.284 [DEBUG] [Thread-12519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:30:38.285 [DEBUG] [Thread-12519] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:30:38.288 [DEBUG] [Thread-12519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:30:38.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:30:38.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:30:38.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:30:38.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:30:38.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:30:38.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:30:38.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:30:38.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:30:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:30:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.145927 -999.00  +20.00  16.61     18   -4.30 1 1 1 1 1   884    0 26.50 85.26 ----- 15.5 16.6 42.2 18.9 19.4 -25.6 19.3 -24.7 19.0 -23.6 19.3 -24.6
2025-11-26T05:30:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:30:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:30:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.145927
2025-11-26T05:30:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:30:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:30:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:30:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:30:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:30:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:30:14', tmtdew=28.91, humidity=13.63, cloud=0.0, wind=13.87, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:30:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:30:38.315 [DEBUG] [Thread-12519] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:30:38.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:30:38.407 [DEBUG] [Thread-12522] [transport.py] [_log()] starting thread (client mode): 0x70d76c50
2025-11-26T05:30:38.407 [DEBUG] [Thread-12522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:30:38.423 [DEBUG] [Thread-12522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:30:38.423 [INFO] [Thread-12522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:30:38.430 [DEBUG] [Thread-12522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:30:38.431 [DEBUG] [Thread-12522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:30:38.431 [DEBUG] [Thread-12522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:30:38.431 [DEBUG] [Thread-12522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:30:38.431 [DEBUG] [Thread-12522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:30:38.431 [DEBUG] [Thread-12522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:30:38.431 [DEBUG] [Thread-12522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:30:38.431 [DEBUG] [Thread-12522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:30:38.431 [DEBUG] [Thread-12522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:30:38.432 [DEBUG] [Thread-12522] [transport.py] [_log()] client lang: <none>
2025-11-26T05:30:38.432 [DEBUG] [Thread-12522] [transport.py] [_log()] server lang: <none>
2025-11-26T05:30:38.432 [DEBUG] [Thread-12522] [transport.py] [_log()] kex follows: False
2025-11-26T05:30:38.432 [DEBUG] [Thread-12522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:30:38.432 [DEBUG] [Thread-12522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:30:38.432 [DEBUG] [Thread-12522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:30:38.432 [DEBUG] [Thread-12522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:30:38.432 [DEBUG] [Thread-12522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:30:38.433 [DEBUG] [Thread-12522] [transport.py] [_log()] Compression: none
2025-11-26T05:30:38.433 [DEBUG] [Thread-12522] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:30:38.495 [DEBUG] [Thread-12522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:30:38.495 [DEBUG] [Thread-12522] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:30:38.496 [DEBUG] [Thread-12522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:30:38.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:30:38.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:30:38.554 [DEBUG] [Thread-12522] [transport.py] [_log()] userauth is OK
2025-11-26T05:30:38.554 [DEBUG] [Thread-12522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:30:38.554 [DEBUG] [Thread-12522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:30:38.554 [DEBUG] [Thread-12522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:30:38.554 [DEBUG] [Thread-12522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:30:38.577 [INFO] [Thread-12522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:30:38.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:30:38.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:30:39.410 [DEBUG] [Thread-12522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:30:39.410 [DEBUG] [Thread-12522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:30:39.457 [DEBUG] [Thread-12522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:30:39.457 [DEBUG] [Thread-12522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:30:39.467 [DEBUG] [Thread-12522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:30:39.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:30:39.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:30:39.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:30:39.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:30:39.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:30:39.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:30:39.504 [DEBUG] [Thread-12522] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:30:43.480 [DEBUG] [Thread-12524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:30:58.537 [DEBUG] [Thread-12525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:31:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:31:09.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:31:09.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
2025-11-26T05:31:10.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 30, 46), 28.88, 13.6, 0.0, 16.43, 20.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:31:10.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:30:46
2025-11-26T05:31:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:31:10.518 [DEBUG] [Thread-12526] [transport.py] [_log()] starting thread (client mode): 0x737809d0
2025-11-26T05:31:10.518 [DEBUG] [Thread-12526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:31:10.536 [DEBUG] [Thread-12526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:31:10.536 [INFO] [Thread-12526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] client lang: <none>
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] server lang: <none>
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] kex follows: False
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] Compression: none
2025-11-26T05:31:10.539 [DEBUG] [Thread-12526] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:31:10.555 [DEBUG] [Thread-12526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:31:10.555 [DEBUG] [Thread-12526] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:31:10.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:31:10.555 [DEBUG] [Thread-12526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:31:10.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:31:10.556 [DEBUG] [Thread-12526] [transport.py] [_log()] userauth is OK
2025-11-26T05:31:10.556 [DEBUG] [Thread-12526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:31:10.556 [DEBUG] [Thread-12526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:31:10.556 [DEBUG] [Thread-12526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:31:10.556 [DEBUG] [Thread-12526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:31:10.565 [INFO] [Thread-12526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:31:10.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:31:11.142 [DEBUG] [Thread-12526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:31:11.142 [DEBUG] [Thread-12526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:31:11.142 [DEBUG] [Thread-12526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:31:11.182 [DEBUG] [Thread-12526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:31:11.182 [DEBUG] [Thread-12526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:31:11.183 [DEBUG] [Thread-12526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:31:11.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:31:11.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:31:11.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:31:11.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:31:11.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:31:11.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:31:11.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.146275 -999.00  +20.00  15.23     18   -4.40 1 1 1 1 1   884    0 26.02 84.27 ----- 13.1 15.2 51.2 18.6 19.4 -25.5 19.4 -24.8 19.0 -23.8 19.2 -24.8
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.146275
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:31:11.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:30:46', tmtdew=28.88, humidity=13.6, cloud=0.0, wind=16.43, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:30:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:31:11.202 [DEBUG] [Thread-12526] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:31:11.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:31:13.570 [DEBUG] [Thread-12529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:31:20.524 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:31:20.524 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:31:28.613 [DEBUG] [Thread-12530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:31:34.098 [DEBUG] [Thread-12531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:31:43.650 [DEBUG] [Thread-12532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:31:58.686 [DEBUG] [Thread-12533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:32:13.722 [DEBUG] [Thread-12534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:32:20.664 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:32:20.665 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:32:28.754 [DEBUG] [Thread-12535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:32:34.156 [DEBUG] [Thread-12536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:32:43.789 [DEBUG] [Thread-12537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:32:58.830 [DEBUG] [Thread-12538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:33:13.866 [DEBUG] [Thread-12539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:33:20.807 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:33:20.809 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:33:24.301 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T05:33:28.901 [DEBUG] [Thread-12540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:33:34.212 [DEBUG] [Thread-12541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:33:43.937 [DEBUG] [Thread-12542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:33:54.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:33:54.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:33:54.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:33:55.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 33, 26), 28.85, 13.61, 0.0, 15.1, 20.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:33:55.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:33:26
2025-11-26T05:33:55.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:33:55.289 [DEBUG] [Thread-12543] [transport.py] [_log()] starting thread (client mode): 0x7376ec80
2025-11-26T05:33:55.289 [DEBUG] [Thread-12543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:33:55.310 [DEBUG] [Thread-12543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:33:55.311 [INFO] [Thread-12543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] client lang: <none>
2025-11-26T05:33:55.314 [DEBUG] [Thread-12543] [transport.py] [_log()] server lang: <none>
2025-11-26T05:33:55.315 [DEBUG] [Thread-12543] [transport.py] [_log()] kex follows: False
2025-11-26T05:33:55.315 [DEBUG] [Thread-12543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:33:55.315 [DEBUG] [Thread-12543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:33:55.315 [DEBUG] [Thread-12543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:33:55.315 [DEBUG] [Thread-12543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:33:55.315 [DEBUG] [Thread-12543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:33:55.315 [DEBUG] [Thread-12543] [transport.py] [_log()] Compression: none
2025-11-26T05:33:55.315 [DEBUG] [Thread-12543] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:33:55.333 [DEBUG] [Thread-12543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:33:55.334 [DEBUG] [Thread-12543] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:33:55.334 [DEBUG] [Thread-12543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:33:55.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:33:55.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:33:55.336 [DEBUG] [Thread-12543] [transport.py] [_log()] userauth is OK
2025-11-26T05:33:55.336 [DEBUG] [Thread-12543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:33:55.336 [DEBUG] [Thread-12543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:33:55.336 [DEBUG] [Thread-12543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:33:55.337 [DEBUG] [Thread-12543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:33:55.361 [INFO] [Thread-12543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:33:55.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:33:56.128 [DEBUG] [Thread-12543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:33:56.128 [DEBUG] [Thread-12543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:33:56.128 [DEBUG] [Thread-12543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:33:56.169 [DEBUG] [Thread-12543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:33:56.169 [DEBUG] [Thread-12543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:33:56.172 [DEBUG] [Thread-12543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:33:56.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:33:56.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:33:56.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:33:56.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:33:56.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:33:56.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:33:56.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:33:56.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:33:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:33:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.148011 -999.00  +20.10  13.54     18   -4.30 1 1 1 1 1   885    0 26.07 85.82 ----- 12.9 13.5 33.2 16.3 19.7 -25.7 19.6 -24.9 19.2 -24.0 19.4 -25.2
2025-11-26T05:33:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:33:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:33:56.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.148011
2025-11-26T05:33:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:33:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:33:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:33:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:33:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:33:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:33:26', tmtdew=28.85, humidity=13.61, cloud=0.0, wind=15.1, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:33:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:33:56.200 [DEBUG] [Thread-12543] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:33:56.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:33:56.295 [DEBUG] [Thread-12546] [transport.py] [_log()] starting thread (client mode): 0x70d75b40
2025-11-26T05:33:56.295 [DEBUG] [Thread-12546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:33:56.309 [DEBUG] [Thread-12546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:33:56.309 [INFO] [Thread-12546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] client lang: <none>
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] server lang: <none>
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] kex follows: False
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:33:56.317 [DEBUG] [Thread-12546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:33:56.318 [DEBUG] [Thread-12546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:33:56.318 [DEBUG] [Thread-12546] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:33:56.318 [DEBUG] [Thread-12546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:33:56.318 [DEBUG] [Thread-12546] [transport.py] [_log()] Compression: none
2025-11-26T05:33:56.318 [DEBUG] [Thread-12546] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:33:56.377 [DEBUG] [Thread-12546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:33:56.377 [DEBUG] [Thread-12546] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:33:56.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:33:56.378 [DEBUG] [Thread-12546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:33:56.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:33:56.432 [DEBUG] [Thread-12546] [transport.py] [_log()] userauth is OK
2025-11-26T05:33:56.433 [DEBUG] [Thread-12546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:33:56.433 [DEBUG] [Thread-12546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:33:56.433 [DEBUG] [Thread-12546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:33:56.433 [DEBUG] [Thread-12546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:33:56.452 [INFO] [Thread-12546] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:33:56.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:33:56.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:33:57.334 [DEBUG] [Thread-12546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:33:57.334 [DEBUG] [Thread-12546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:33:57.383 [DEBUG] [Thread-12546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:33:57.383 [DEBUG] [Thread-12546] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:33:57.392 [DEBUG] [Thread-12546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:33:57.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:33:57.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:33:57.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:33:57.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:33:57.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:33:57.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:33:57.429 [DEBUG] [Thread-12546] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:33:58.972 [DEBUG] [Thread-12548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:34:14.025 [DEBUG] [Thread-12549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:34:20.962 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:34:20.963 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:34:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:34:27.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:34:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:34:28.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 33, 58), 28.84, 13.63, 0.0, 15.88, 20.0, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:34:28.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:33:58
2025-11-26T05:34:28.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:34:28.402 [DEBUG] [Thread-12550] [transport.py] [_log()] starting thread (client mode): 0x761dac50
2025-11-26T05:34:28.402 [DEBUG] [Thread-12550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:34:28.422 [DEBUG] [Thread-12550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:34:28.422 [INFO] [Thread-12550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:34:28.425 [DEBUG] [Thread-12550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:34:28.425 [DEBUG] [Thread-12550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:34:28.425 [DEBUG] [Thread-12550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:34:28.425 [DEBUG] [Thread-12550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:34:28.425 [DEBUG] [Thread-12550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:34:28.425 [DEBUG] [Thread-12550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:34:28.425 [DEBUG] [Thread-12550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:34:28.425 [DEBUG] [Thread-12550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] client lang: <none>
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] server lang: <none>
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] kex follows: False
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] Compression: none
2025-11-26T05:34:28.426 [DEBUG] [Thread-12550] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:34:28.441 [DEBUG] [Thread-12550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:34:28.442 [DEBUG] [Thread-12550] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:34:28.442 [DEBUG] [Thread-12550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:34:28.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:34:28.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:34:28.444 [DEBUG] [Thread-12550] [transport.py] [_log()] userauth is OK
2025-11-26T05:34:28.445 [DEBUG] [Thread-12550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:34:28.445 [DEBUG] [Thread-12550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:34:28.445 [DEBUG] [Thread-12550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:34:28.445 [DEBUG] [Thread-12550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:34:28.467 [INFO] [Thread-12550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:34:28.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:34:29.063 [DEBUG] [Thread-12552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:34:29.080 [DEBUG] [Thread-12550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:34:29.080 [DEBUG] [Thread-12550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:34:29.081 [DEBUG] [Thread-12550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:34:29.122 [DEBUG] [Thread-12550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:34:29.122 [DEBUG] [Thread-12550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:34:29.125 [DEBUG] [Thread-12550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:34:29.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:34:29.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:34:29.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:34:29.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:34:29.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:34:29.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:34:29.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:34:29.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:34:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:34:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.148358 -999.00  +20.00  14.08     18   -4.40 1 1 1 1 1   886    0 26.43 82.91 ----- 14.8 14.1 41.0 16.2 19.7 -25.7 19.7 -25.0 19.2 -24.1 19.4 -25.1
2025-11-26T05:34:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:34:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:34:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.148358
2025-11-26T05:34:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:34:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:34:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:34:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:34:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:34:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:33:58', tmtdew=28.84, humidity=13.63, cloud=0.0, wind=15.88, temperature=20.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:33:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:34:29.153 [DEBUG] [Thread-12550] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:34:29.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:34:29.264 [DEBUG] [Thread-12554] [transport.py] [_log()] starting thread (client mode): 0x761db8e0
2025-11-26T05:34:29.264 [DEBUG] [Thread-12554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:34:29.279 [DEBUG] [Thread-12554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:34:29.279 [INFO] [Thread-12554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] client lang: <none>
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] server lang: <none>
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] kex follows: False
2025-11-26T05:34:29.290 [DEBUG] [Thread-12554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:34:29.291 [DEBUG] [Thread-12554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:34:29.291 [DEBUG] [Thread-12554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:34:29.291 [DEBUG] [Thread-12554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:34:29.291 [DEBUG] [Thread-12554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:34:29.291 [DEBUG] [Thread-12554] [transport.py] [_log()] Compression: none
2025-11-26T05:34:29.291 [DEBUG] [Thread-12554] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:34:29.348 [DEBUG] [Thread-12554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:34:29.349 [DEBUG] [Thread-12554] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:34:29.349 [DEBUG] [Thread-12554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:34:29.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:34:29.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:34:29.405 [DEBUG] [Thread-12554] [transport.py] [_log()] userauth is OK
2025-11-26T05:34:29.405 [DEBUG] [Thread-12554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:34:29.405 [DEBUG] [Thread-12554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:34:29.405 [DEBUG] [Thread-12554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:34:29.405 [DEBUG] [Thread-12554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:34:29.423 [INFO] [Thread-12554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:34:29.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:34:29.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:34:30.316 [DEBUG] [Thread-12554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:34:30.317 [DEBUG] [Thread-12554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:34:30.365 [DEBUG] [Thread-12554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:34:30.365 [DEBUG] [Thread-12554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:34:30.375 [DEBUG] [Thread-12554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:34:30.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:34:30.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:34:30.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:34:30.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:34:30.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:34:30.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:34:30.412 [DEBUG] [Thread-12554] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:34:34.262 [DEBUG] [Thread-12556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:34:44.103 [DEBUG] [Thread-12557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:34:59.157 [DEBUG] [Thread-12558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:35:00.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:35:00.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:35:00.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:35:01.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 34, 30), 28.8, 13.68, 0.0, 15.79, 20.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:35:01.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:34:30
2025-11-26T05:35:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:35:01.389 [DEBUG] [Thread-12559] [transport.py] [_log()] starting thread (client mode): 0x70d1d1b0
2025-11-26T05:35:01.389 [DEBUG] [Thread-12559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:35:01.402 [DEBUG] [Thread-12559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:35:01.402 [INFO] [Thread-12559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:35:01.405 [DEBUG] [Thread-12559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] client lang: <none>
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] server lang: <none>
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] kex follows: False
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] Compression: none
2025-11-26T05:35:01.411 [DEBUG] [Thread-12559] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:35:01.419 [DEBUG] [Thread-12559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:35:01.419 [DEBUG] [Thread-12559] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:35:01.420 [DEBUG] [Thread-12559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:35:01.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:35:01.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:35:01.421 [DEBUG] [Thread-12559] [transport.py] [_log()] userauth is OK
2025-11-26T05:35:01.421 [DEBUG] [Thread-12559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:35:01.421 [DEBUG] [Thread-12559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:35:01.421 [DEBUG] [Thread-12559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:35:01.421 [DEBUG] [Thread-12559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:35:01.433 [INFO] [Thread-12559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:35:01.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:35:02.195 [DEBUG] [Thread-12559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:35:02.196 [DEBUG] [Thread-12559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:35:02.196 [DEBUG] [Thread-12559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:35:02.237 [DEBUG] [Thread-12559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:35:02.237 [DEBUG] [Thread-12559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:35:02.240 [DEBUG] [Thread-12559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:35:02.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:35:02.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:35:02.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:35:02.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:35:02.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:35:02.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:35:02.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:35:02.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:35:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:35:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.148705 -999.00  +20.10  17.60     18   -4.30 1 1 1 1 1   886    0 26.07 84.96 ----- 15.1 17.6 39.4 20.2 19.8 -25.7 19.8 -24.9 19.3 -23.6 19.5 -24.9
2025-11-26T05:35:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:35:02.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:35:02.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.148705
2025-11-26T05:35:02.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:35:02.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:35:02.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:35:02.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:35:02.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:35:02.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:34:30', tmtdew=28.8, humidity=13.68, cloud=0.0, wind=15.79, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:34:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:35:02.266 [DEBUG] [Thread-12559] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:35:02.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:35:02.370 [DEBUG] [Thread-12562] [transport.py] [_log()] starting thread (client mode): 0x70d1ddb0
2025-11-26T05:35:02.370 [DEBUG] [Thread-12562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:35:02.385 [DEBUG] [Thread-12562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:35:02.385 [INFO] [Thread-12562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:35:02.392 [DEBUG] [Thread-12562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:35:02.393 [DEBUG] [Thread-12562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:35:02.393 [DEBUG] [Thread-12562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:35:02.393 [DEBUG] [Thread-12562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:35:02.393 [DEBUG] [Thread-12562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:35:02.393 [DEBUG] [Thread-12562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:35:02.393 [DEBUG] [Thread-12562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:35:02.394 [DEBUG] [Thread-12562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:35:02.394 [DEBUG] [Thread-12562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:35:02.394 [DEBUG] [Thread-12562] [transport.py] [_log()] client lang: <none>
2025-11-26T05:35:02.394 [DEBUG] [Thread-12562] [transport.py] [_log()] server lang: <none>
2025-11-26T05:35:02.394 [DEBUG] [Thread-12562] [transport.py] [_log()] kex follows: False
2025-11-26T05:35:02.394 [DEBUG] [Thread-12562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:35:02.394 [DEBUG] [Thread-12562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:35:02.394 [DEBUG] [Thread-12562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:35:02.394 [DEBUG] [Thread-12562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:35:02.395 [DEBUG] [Thread-12562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:35:02.395 [DEBUG] [Thread-12562] [transport.py] [_log()] Compression: none
2025-11-26T05:35:02.395 [DEBUG] [Thread-12562] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:35:02.453 [DEBUG] [Thread-12562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:35:02.454 [DEBUG] [Thread-12562] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:35:02.455 [DEBUG] [Thread-12562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:35:02.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:35:02.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:35:02.512 [DEBUG] [Thread-12562] [transport.py] [_log()] userauth is OK
2025-11-26T05:35:02.512 [DEBUG] [Thread-12562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:35:02.512 [DEBUG] [Thread-12562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:35:02.512 [DEBUG] [Thread-12562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:35:02.512 [DEBUG] [Thread-12562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:35:02.531 [INFO] [Thread-12562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:35:02.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:35:02.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:35:03.358 [DEBUG] [Thread-12562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:35:03.358 [DEBUG] [Thread-12562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:35:03.406 [DEBUG] [Thread-12562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:35:03.406 [DEBUG] [Thread-12562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:35:03.415 [DEBUG] [Thread-12562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:35:03.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:35:03.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:35:03.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:35:03.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:35:03.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:35:03.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:35:03.446 [DEBUG] [Thread-12562] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:35:14.192 [DEBUG] [Thread-12564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:35:21.117 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:35:21.118 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:35:29.252 [DEBUG] [Thread-12565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:35:33.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:35:33.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:35:33.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:35:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 35, 2), 28.88, 13.6, 0.0, 14.7, 20.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:35:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:35:02
2025-11-26T05:35:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:35:34.310 [DEBUG] [Thread-12566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:35:34.462 [DEBUG] [Thread-12567] [transport.py] [_log()] starting thread (client mode): 0x70d1cfd0
2025-11-26T05:35:34.462 [DEBUG] [Thread-12567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:35:34.483 [DEBUG] [Thread-12567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:35:34.484 [INFO] [Thread-12567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] client lang: <none>
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] server lang: <none>
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] kex follows: False
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] Compression: none
2025-11-26T05:35:34.487 [DEBUG] [Thread-12567] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:35:34.504 [DEBUG] [Thread-12567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:35:34.504 [DEBUG] [Thread-12567] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:35:34.504 [DEBUG] [Thread-12567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:35:34.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:35:34.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:35:34.504 [DEBUG] [Thread-12567] [transport.py] [_log()] userauth is OK
2025-11-26T05:35:34.505 [DEBUG] [Thread-12567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:35:34.505 [DEBUG] [Thread-12567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:35:34.505 [DEBUG] [Thread-12567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:35:34.505 [DEBUG] [Thread-12567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:35:34.531 [INFO] [Thread-12567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:35:34.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:35:35.159 [DEBUG] [Thread-12567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:35:35.159 [DEBUG] [Thread-12567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:35:35.160 [DEBUG] [Thread-12567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:35:35.200 [DEBUG] [Thread-12567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:35:35.200 [DEBUG] [Thread-12567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:35:35.202 [DEBUG] [Thread-12567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:35:35.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:35:35.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:35:35.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:35:35.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:35:35.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:35:35.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:35:35.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:35:35.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:35:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:35:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.149053 -999.00  +20.10  15.31     18   -4.30 1 1 1 1 1   886    0 26.50 92.78 ----- 16.2 15.3 42.2 17.5 19.8 -25.8 19.8 -25.0 19.4 -23.9 19.5 -25.0
2025-11-26T05:35:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:35:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:35:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.149053
2025-11-26T05:35:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:35:35.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:35:35.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:35:35.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:35:35.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:35:35.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:35:02', tmtdew=28.88, humidity=13.6, cloud=0.0, wind=14.7, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:34:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:35:35.221 [DEBUG] [Thread-12567] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:35:35.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:35:35.307 [DEBUG] [Thread-12570] [transport.py] [_log()] starting thread (client mode): 0x761d9ed0
2025-11-26T05:35:35.307 [DEBUG] [Thread-12570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:35:35.322 [DEBUG] [Thread-12570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:35:35.322 [INFO] [Thread-12570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:35:35.329 [DEBUG] [Thread-12570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:35:35.329 [DEBUG] [Thread-12570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:35:35.329 [DEBUG] [Thread-12570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:35:35.329 [DEBUG] [Thread-12570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] client lang: <none>
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] server lang: <none>
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] kex follows: False
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] Compression: none
2025-11-26T05:35:35.330 [DEBUG] [Thread-12570] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:35:35.386 [DEBUG] [Thread-12570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:35:35.386 [DEBUG] [Thread-12570] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:35:35.387 [DEBUG] [Thread-12570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:35:35.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:35:35.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:35:35.444 [DEBUG] [Thread-12570] [transport.py] [_log()] userauth is OK
2025-11-26T05:35:35.444 [DEBUG] [Thread-12570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:35:35.444 [DEBUG] [Thread-12570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:35:35.444 [DEBUG] [Thread-12570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:35:35.444 [DEBUG] [Thread-12570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:35:35.461 [INFO] [Thread-12570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:35:35.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:35:35.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:35:36.265 [DEBUG] [Thread-12570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:35:36.265 [DEBUG] [Thread-12570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:35:36.313 [DEBUG] [Thread-12570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:35:36.313 [DEBUG] [Thread-12570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:35:36.321 [DEBUG] [Thread-12570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:35:36.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:35:36.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:35:36.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:35:36.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:35:36.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:35:36.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:35:36.352 [DEBUG] [Thread-12570] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:35:44.283 [DEBUG] [Thread-12572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:35:59.350 [DEBUG] [Thread-12573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:36:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:36:06.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:36:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:36:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 35, 34), 28.77, 13.66, 0.0, 14.86, 19.95, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:36:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:35:34
2025-11-26T05:36:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:36:07.334 [DEBUG] [Thread-12574] [transport.py] [_log()] starting thread (client mode): 0x70d75630
2025-11-26T05:36:07.334 [DEBUG] [Thread-12574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:36:07.354 [DEBUG] [Thread-12574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:36:07.355 [INFO] [Thread-12574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] client lang: <none>
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] server lang: <none>
2025-11-26T05:36:07.356 [DEBUG] [Thread-12574] [transport.py] [_log()] kex follows: False
2025-11-26T05:36:07.357 [DEBUG] [Thread-12574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:36:07.357 [DEBUG] [Thread-12574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:36:07.357 [DEBUG] [Thread-12574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:36:07.357 [DEBUG] [Thread-12574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:36:07.357 [DEBUG] [Thread-12574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:36:07.357 [DEBUG] [Thread-12574] [transport.py] [_log()] Compression: none
2025-11-26T05:36:07.357 [DEBUG] [Thread-12574] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:36:07.367 [DEBUG] [Thread-12574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:36:07.368 [DEBUG] [Thread-12574] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:36:07.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:36:07.370 [DEBUG] [Thread-12574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:36:07.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:36:07.372 [DEBUG] [Thread-12574] [transport.py] [_log()] userauth is OK
2025-11-26T05:36:07.372 [DEBUG] [Thread-12574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:36:07.372 [DEBUG] [Thread-12574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:36:07.372 [DEBUG] [Thread-12574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:36:07.373 [DEBUG] [Thread-12574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:36:07.399 [INFO] [Thread-12574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:36:07.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:36:08.173 [DEBUG] [Thread-12574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:36:08.173 [DEBUG] [Thread-12574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:36:08.173 [DEBUG] [Thread-12574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:36:08.215 [DEBUG] [Thread-12574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:36:08.215 [DEBUG] [Thread-12574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:36:08.218 [DEBUG] [Thread-12574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:36:08.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:36:08.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:36:08.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:36:08.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:36:08.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:36:08.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:36:08.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.149747 -999.00  +20.10  19.14     18   -4.30 1 1 1 1 1   886    0 26.57 90.89 ----- 15.9 19.1 40.8 22.0 19.9 -25.9 19.9 -25.0 19.4 -23.8 19.5 -25.2
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.149747
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:36:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:35:34', tmtdew=28.77, humidity=13.66, cloud=0.0, wind=14.86, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:35:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:36:08.235 [DEBUG] [Thread-12574] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:36:08.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:36:08.321 [DEBUG] [Thread-12577] [transport.py] [_log()] starting thread (client mode): 0x761da800
2025-11-26T05:36:08.321 [DEBUG] [Thread-12577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:36:08.335 [DEBUG] [Thread-12577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:36:08.335 [INFO] [Thread-12577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] client lang: <none>
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] server lang: <none>
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] kex follows: False
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] Compression: none
2025-11-26T05:36:08.343 [DEBUG] [Thread-12577] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:36:08.398 [DEBUG] [Thread-12577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:36:08.399 [DEBUG] [Thread-12577] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:36:08.399 [DEBUG] [Thread-12577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:36:08.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:36:08.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:36:08.455 [DEBUG] [Thread-12577] [transport.py] [_log()] userauth is OK
2025-11-26T05:36:08.456 [DEBUG] [Thread-12577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:36:08.456 [DEBUG] [Thread-12577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:36:08.456 [DEBUG] [Thread-12577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:36:08.456 [DEBUG] [Thread-12577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:36:08.469 [INFO] [Thread-12577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:36:08.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:36:08.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:36:09.298 [DEBUG] [Thread-12577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:36:09.298 [DEBUG] [Thread-12577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:36:09.346 [DEBUG] [Thread-12577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:36:09.346 [DEBUG] [Thread-12577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:36:09.354 [DEBUG] [Thread-12577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:36:09.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:36:09.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:36:09.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:36:09.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:36:09.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:36:09.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:36:09.386 [DEBUG] [Thread-12577] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:36:14.384 [DEBUG] [Thread-12579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:36:21.262 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:36:21.263 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:36:29.436 [DEBUG] [Thread-12580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:36:34.363 [DEBUG] [Thread-12581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:36:39.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:36:39.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:36:39.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:36:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 36, 7), 28.82, 13.61, 0.0, 15.88, 19.95, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:36:40.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:36:07
2025-11-26T05:36:40.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:36:40.357 [DEBUG] [Thread-12582] [transport.py] [_log()] starting thread (client mode): 0x761d90f0
2025-11-26T05:36:40.357 [DEBUG] [Thread-12582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:36:40.377 [DEBUG] [Thread-12582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:36:40.377 [INFO] [Thread-12582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:36:40.380 [DEBUG] [Thread-12582] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] client lang: <none>
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] server lang: <none>
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] kex follows: False
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] Compression: none
2025-11-26T05:36:40.381 [DEBUG] [Thread-12582] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:36:40.401 [DEBUG] [Thread-12582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:36:40.401 [DEBUG] [Thread-12582] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:36:40.401 [DEBUG] [Thread-12582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:36:40.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:36:40.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:36:40.402 [DEBUG] [Thread-12582] [transport.py] [_log()] userauth is OK
2025-11-26T05:36:40.402 [DEBUG] [Thread-12582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:36:40.402 [DEBUG] [Thread-12582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:36:40.402 [DEBUG] [Thread-12582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:36:40.402 [DEBUG] [Thread-12582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:36:40.419 [INFO] [Thread-12582] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:36:40.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:36:41.071 [DEBUG] [Thread-12582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:36:41.071 [DEBUG] [Thread-12582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:36:41.071 [DEBUG] [Thread-12582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:36:41.112 [DEBUG] [Thread-12582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:36:41.112 [DEBUG] [Thread-12582] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:36:41.115 [DEBUG] [Thread-12582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:36:41.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:36:41.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:36:41.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:36:41.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:36:41.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:36:41.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:36:41.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.150094 -999.00  +20.10  14.49     18   -4.30 1 1 1 1 1   886    0 27.03 100.37 ----- 17.3 14.5 29.4 15.7 19.9 -26.0 19.9 -25.3 19.4 -24.0 19.6 -24.9
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.150094
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:36:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:36:07', tmtdew=28.82, humidity=13.61, cloud=0.0, wind=15.88, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:36:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:36:41.133 [DEBUG] [Thread-12582] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:36:41.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:36:41.220 [DEBUG] [Thread-12585] [transport.py] [_log()] starting thread (client mode): 0x70d28190
2025-11-26T05:36:41.220 [DEBUG] [Thread-12585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:36:41.234 [DEBUG] [Thread-12585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:36:41.235 [INFO] [Thread-12585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] client lang: <none>
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] server lang: <none>
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] kex follows: False
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] Compression: none
2025-11-26T05:36:41.242 [DEBUG] [Thread-12585] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:36:41.298 [DEBUG] [Thread-12585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:36:41.298 [DEBUG] [Thread-12585] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:36:41.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:36:41.298 [DEBUG] [Thread-12585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:36:41.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:36:41.355 [DEBUG] [Thread-12585] [transport.py] [_log()] userauth is OK
2025-11-26T05:36:41.355 [DEBUG] [Thread-12585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:36:41.355 [DEBUG] [Thread-12585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:36:41.355 [DEBUG] [Thread-12585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:36:41.355 [DEBUG] [Thread-12585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:36:41.369 [INFO] [Thread-12585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:36:41.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:36:41.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:36:42.170 [DEBUG] [Thread-12585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:36:42.170 [DEBUG] [Thread-12585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:36:42.222 [DEBUG] [Thread-12585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:36:42.222 [DEBUG] [Thread-12585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:36:42.233 [DEBUG] [Thread-12585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:36:42.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:36:42.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:36:42.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:36:42.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:36:42.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:36:42.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:36:42.270 [DEBUG] [Thread-12585] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:36:44.477 [DEBUG] [Thread-12587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:36:59.534 [DEBUG] [Thread-12588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:37:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:37:12.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:37:12.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:37:13.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 36, 39), 28.74, 13.63, 0.0, 13.15, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:37:13.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:36:39
2025-11-26T05:37:13.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:37:13.341 [DEBUG] [Thread-12589] [transport.py] [_log()] starting thread (client mode): 0x70d76b00
2025-11-26T05:37:13.341 [DEBUG] [Thread-12589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:37:13.362 [DEBUG] [Thread-12589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:37:13.362 [INFO] [Thread-12589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] client lang: <none>
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] server lang: <none>
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] kex follows: False
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:37:13.365 [DEBUG] [Thread-12589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:37:13.366 [DEBUG] [Thread-12589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:37:13.366 [DEBUG] [Thread-12589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:37:13.366 [DEBUG] [Thread-12589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:37:13.366 [DEBUG] [Thread-12589] [transport.py] [_log()] Compression: none
2025-11-26T05:37:13.366 [DEBUG] [Thread-12589] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:37:13.382 [DEBUG] [Thread-12589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:37:13.382 [DEBUG] [Thread-12589] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:37:13.382 [DEBUG] [Thread-12589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:37:13.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:37:13.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:37:13.383 [DEBUG] [Thread-12589] [transport.py] [_log()] userauth is OK
2025-11-26T05:37:13.383 [DEBUG] [Thread-12589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:37:13.384 [DEBUG] [Thread-12589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:37:13.384 [DEBUG] [Thread-12589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:37:13.384 [DEBUG] [Thread-12589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:37:13.393 [INFO] [Thread-12589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:37:13.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:37:14.168 [DEBUG] [Thread-12589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:37:14.169 [DEBUG] [Thread-12589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:37:14.169 [DEBUG] [Thread-12589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:37:14.210 [DEBUG] [Thread-12589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:37:14.210 [DEBUG] [Thread-12589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:37:14.214 [DEBUG] [Thread-12589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:37:14.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:37:14.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:37:14.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:37:14.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:37:14.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:37:14.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:37:14.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:37:14.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:37:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:37:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.150441 -999.00  +20.10  13.08     18   -4.30 1 1 1 1 1   886    0 27.16 104.90 ----- 15.4 13.1 39.2 18.9 20.0 -25.9 19.9 -25.1 19.4 -24.3 19.6 -25.2
2025-11-26T05:37:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:37:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:37:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.150441
2025-11-26T05:37:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:37:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:37:14.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:37:14.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:37:14.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:37:14.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:36:39', tmtdew=28.74, humidity=13.63, cloud=0.0, wind=13.15, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:36:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:37:14.240 [DEBUG] [Thread-12589] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:37:14.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:37:14.348 [DEBUG] [Thread-12592] [transport.py] [_log()] starting thread (client mode): 0x70d1c4c0
2025-11-26T05:37:14.348 [DEBUG] [Thread-12592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:37:14.363 [DEBUG] [Thread-12592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:37:14.363 [INFO] [Thread-12592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:37:14.371 [DEBUG] [Thread-12592] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:37:14.371 [DEBUG] [Thread-12592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] client lang: <none>
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] server lang: <none>
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] kex follows: False
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:37:14.372 [DEBUG] [Thread-12592] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:37:14.373 [DEBUG] [Thread-12592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:37:14.373 [DEBUG] [Thread-12592] [transport.py] [_log()] Compression: none
2025-11-26T05:37:14.373 [DEBUG] [Thread-12592] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:37:14.431 [DEBUG] [Thread-12592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:37:14.431 [DEBUG] [Thread-12592] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:37:14.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:37:14.433 [DEBUG] [Thread-12592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:37:14.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:37:14.486 [DEBUG] [Thread-12592] [transport.py] [_log()] userauth is OK
2025-11-26T05:37:14.486 [DEBUG] [Thread-12592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:37:14.487 [DEBUG] [Thread-12592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:37:14.487 [DEBUG] [Thread-12592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:37:14.487 [DEBUG] [Thread-12592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:37:14.506 [INFO] [Thread-12592] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:37:14.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:37:14.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:37:14.571 [DEBUG] [Thread-12594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:37:15.335 [DEBUG] [Thread-12592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:37:15.336 [DEBUG] [Thread-12592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:37:15.384 [DEBUG] [Thread-12592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:37:15.384 [DEBUG] [Thread-12592] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:37:15.393 [DEBUG] [Thread-12592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:37:15.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:37:15.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:37:15.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:37:15.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:37:15.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:37:15.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:37:15.430 [DEBUG] [Thread-12592] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:37:21.404 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:37:21.405 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:37:29.626 [DEBUG] [Thread-12595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:37:34.397 [DEBUG] [Thread-12596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:37:44.666 [DEBUG] [Thread-12597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:37:45.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:37:45.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:37:45.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:37:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 37, 11), 28.76, 13.6, 0.0, 13.39, 19.82, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:37:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:37:11
2025-11-26T05:37:46.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:37:46.412 [DEBUG] [Thread-12598] [transport.py] [_log()] starting thread (client mode): 0x73781ba0
2025-11-26T05:37:46.412 [DEBUG] [Thread-12598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:37:46.432 [DEBUG] [Thread-12598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:37:46.432 [INFO] [Thread-12598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:37:46.435 [DEBUG] [Thread-12598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] client lang: <none>
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] server lang: <none>
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] kex follows: False
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] Compression: none
2025-11-26T05:37:46.436 [DEBUG] [Thread-12598] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:37:46.454 [DEBUG] [Thread-12598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:37:46.454 [DEBUG] [Thread-12598] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:37:46.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:37:46.455 [DEBUG] [Thread-12598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:37:46.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:37:46.457 [DEBUG] [Thread-12598] [transport.py] [_log()] userauth is OK
2025-11-26T05:37:46.458 [DEBUG] [Thread-12598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:37:46.458 [DEBUG] [Thread-12598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:37:46.458 [DEBUG] [Thread-12598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:37:46.458 [DEBUG] [Thread-12598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:37:46.482 [INFO] [Thread-12598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:37:46.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:37:47.112 [DEBUG] [Thread-12598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:37:47.113 [DEBUG] [Thread-12598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:37:47.113 [DEBUG] [Thread-12598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:37:47.154 [DEBUG] [Thread-12598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:37:47.154 [DEBUG] [Thread-12598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:37:47.158 [DEBUG] [Thread-12598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:37:47.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:37:47.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:37:47.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:37:47.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:37:47.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:37:47.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:37:47.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:37:47.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:37:47.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:37:47.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.150789 -999.00  +20.10  15.62     18   -4.30 1 1 1 1 1   887    0 27.65 104.52 NA 15.3 15.6 45.6 18.7 20.0 -25.7 20.0 -25.1 19.4 -24.0 19.6 -25.1
2025-11-26T05:37:47.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:37:47.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:37:47.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.150789
2025-11-26T05:37:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:37:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:37:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:37:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:37:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:37:47.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:37:11', tmtdew=28.76, humidity=13.6, cloud=0.0, wind=13.39, temperature=19.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:37:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:37:47.184 [DEBUG] [Thread-12598] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:37:47.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:37:47.281 [DEBUG] [Thread-12601] [transport.py] [_log()] starting thread (client mode): 0x73781180
2025-11-26T05:37:47.281 [DEBUG] [Thread-12601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:37:47.295 [DEBUG] [Thread-12601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:37:47.295 [INFO] [Thread-12601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:37:47.302 [DEBUG] [Thread-12601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] client lang: <none>
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] server lang: <none>
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] kex follows: False
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] Compression: none
2025-11-26T05:37:47.303 [DEBUG] [Thread-12601] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:37:47.364 [DEBUG] [Thread-12601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:37:47.365 [DEBUG] [Thread-12601] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:37:47.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:37:47.366 [DEBUG] [Thread-12601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:37:47.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:37:47.421 [DEBUG] [Thread-12601] [transport.py] [_log()] userauth is OK
2025-11-26T05:37:47.421 [DEBUG] [Thread-12601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:37:47.421 [DEBUG] [Thread-12601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:37:47.421 [DEBUG] [Thread-12601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:37:47.421 [DEBUG] [Thread-12601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:37:47.439 [INFO] [Thread-12601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:37:47.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:37:47.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:37:48.313 [DEBUG] [Thread-12601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:37:48.314 [DEBUG] [Thread-12601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:37:48.362 [DEBUG] [Thread-12601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:37:48.362 [DEBUG] [Thread-12601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:37:48.371 [DEBUG] [Thread-12601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:37:48.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:37:48.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:37:48.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:37:48.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:37:48.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:37:48.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:37:48.406 [DEBUG] [Thread-12601] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:37:59.702 [DEBUG] [Thread-12603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:38:14.740 [DEBUG] [Thread-12604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:38:18.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:38:18.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:38:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:38:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 38, 15), 28.68, 13.68, 0.0, 13.67, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:38:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:38:15
2025-11-26T05:38:19.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:38:19.346 [DEBUG] [Thread-12605] [transport.py] [_log()] starting thread (client mode): 0x761dbbb0
2025-11-26T05:38:19.346 [DEBUG] [Thread-12605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:38:19.368 [DEBUG] [Thread-12605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:38:19.368 [INFO] [Thread-12605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:38:19.371 [DEBUG] [Thread-12605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:38:19.372 [DEBUG] [Thread-12605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:38:19.372 [DEBUG] [Thread-12605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:38:19.372 [DEBUG] [Thread-12605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:38:19.372 [DEBUG] [Thread-12605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:38:19.372 [DEBUG] [Thread-12605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:38:19.372 [DEBUG] [Thread-12605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:38:19.372 [DEBUG] [Thread-12605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:38:19.372 [DEBUG] [Thread-12605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:38:19.372 [DEBUG] [Thread-12605] [transport.py] [_log()] client lang: <none>
2025-11-26T05:38:19.373 [DEBUG] [Thread-12605] [transport.py] [_log()] server lang: <none>
2025-11-26T05:38:19.373 [DEBUG] [Thread-12605] [transport.py] [_log()] kex follows: False
2025-11-26T05:38:19.373 [DEBUG] [Thread-12605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:38:19.373 [DEBUG] [Thread-12605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:38:19.373 [DEBUG] [Thread-12605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:38:19.373 [DEBUG] [Thread-12605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:38:19.373 [DEBUG] [Thread-12605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:38:19.373 [DEBUG] [Thread-12605] [transport.py] [_log()] Compression: none
2025-11-26T05:38:19.373 [DEBUG] [Thread-12605] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:38:19.393 [DEBUG] [Thread-12605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:38:19.394 [DEBUG] [Thread-12605] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:38:19.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:38:19.395 [DEBUG] [Thread-12605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:38:19.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:38:19.397 [DEBUG] [Thread-12605] [transport.py] [_log()] userauth is OK
2025-11-26T05:38:19.397 [DEBUG] [Thread-12605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:38:19.398 [DEBUG] [Thread-12605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:38:19.398 [DEBUG] [Thread-12605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:38:19.398 [DEBUG] [Thread-12605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:38:19.412 [INFO] [Thread-12605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:38:19.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:38:20.126 [DEBUG] [Thread-12605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:38:20.126 [DEBUG] [Thread-12605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:38:20.126 [DEBUG] [Thread-12605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:38:20.166 [DEBUG] [Thread-12605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:38:20.167 [DEBUG] [Thread-12605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:38:20.173 [DEBUG] [Thread-12605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:38:20.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:38:20.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:38:20.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:38:20.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:38:20.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:38:20.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:38:20.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:38:20.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:38:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:38:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.151136 -999.00  +20.10  13.63     18   -4.30 1 1 1 1 1   887    0 27.10 100.82 NA 15.9 13.6 38.4 17.5 20.1 -26.0 20.0 -25.2 19.5 -24.2 19.6 -25.2
2025-11-26T05:38:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:38:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:38:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.151136
2025-11-26T05:38:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:38:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:38:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:38:20.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:38:20.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:38:20.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:38:15', tmtdew=28.68, humidity=13.68, cloud=0.0, wind=13.67, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:37:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:38:20.198 [DEBUG] [Thread-12605] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:38:20.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:38:20.293 [DEBUG] [Thread-12608] [transport.py] [_log()] starting thread (client mode): 0x70d012a0
2025-11-26T05:38:20.293 [DEBUG] [Thread-12608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:38:20.308 [DEBUG] [Thread-12608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:38:20.308 [INFO] [Thread-12608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] client lang: <none>
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] server lang: <none>
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] kex follows: False
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:38:20.316 [DEBUG] [Thread-12608] [transport.py] [_log()] Compression: none
2025-11-26T05:38:20.317 [DEBUG] [Thread-12608] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:38:20.374 [DEBUG] [Thread-12608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:38:20.375 [DEBUG] [Thread-12608] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:38:20.375 [DEBUG] [Thread-12608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:38:20.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:38:20.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:38:20.430 [DEBUG] [Thread-12608] [transport.py] [_log()] userauth is OK
2025-11-26T05:38:20.430 [DEBUG] [Thread-12608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:38:20.430 [DEBUG] [Thread-12608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:38:20.430 [DEBUG] [Thread-12608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:38:20.431 [DEBUG] [Thread-12608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:38:20.450 [INFO] [Thread-12608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:38:20.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:38:20.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:38:21.275 [DEBUG] [Thread-12608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:38:21.275 [DEBUG] [Thread-12608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:38:21.323 [DEBUG] [Thread-12608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:38:21.323 [DEBUG] [Thread-12608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:38:21.332 [DEBUG] [Thread-12608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:38:21.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:38:21.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:38:21.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:38:21.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:38:21.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:38:21.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:38:21.369 [DEBUG] [Thread-12608] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:38:21.545 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:38:21.546 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:38:29.773 [DEBUG] [Thread-12610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:38:34.430 [DEBUG] [Thread-12611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:38:44.818 [DEBUG] [Thread-12612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:38:51.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:38:51.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:38:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:38:52.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 38, 47), 28.71, 13.65, 0.0, 13.85, 19.77, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:38:52.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:38:47
2025-11-26T05:38:52.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:38:52.320 [DEBUG] [Thread-12613] [transport.py] [_log()] starting thread (client mode): 0x70d29810
2025-11-26T05:38:52.320 [DEBUG] [Thread-12613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:38:52.342 [DEBUG] [Thread-12613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:38:52.342 [INFO] [Thread-12613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:38:52.346 [DEBUG] [Thread-12613] [transport.py] [_log()] client lang: <none>
2025-11-26T05:38:52.347 [DEBUG] [Thread-12613] [transport.py] [_log()] server lang: <none>
2025-11-26T05:38:52.347 [DEBUG] [Thread-12613] [transport.py] [_log()] kex follows: False
2025-11-26T05:38:52.347 [DEBUG] [Thread-12613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:38:52.347 [DEBUG] [Thread-12613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:38:52.347 [DEBUG] [Thread-12613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:38:52.347 [DEBUG] [Thread-12613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:38:52.347 [DEBUG] [Thread-12613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:38:52.347 [DEBUG] [Thread-12613] [transport.py] [_log()] Compression: none
2025-11-26T05:38:52.347 [DEBUG] [Thread-12613] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:38:52.365 [DEBUG] [Thread-12613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:38:52.366 [DEBUG] [Thread-12613] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:38:52.366 [DEBUG] [Thread-12613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:38:52.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:38:52.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:38:52.368 [DEBUG] [Thread-12613] [transport.py] [_log()] userauth is OK
2025-11-26T05:38:52.368 [DEBUG] [Thread-12613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:38:52.369 [DEBUG] [Thread-12613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:38:52.369 [DEBUG] [Thread-12613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:38:52.369 [DEBUG] [Thread-12613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:38:52.391 [INFO] [Thread-12613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:38:52.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:38:53.044 [DEBUG] [Thread-12613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:38:53.045 [DEBUG] [Thread-12613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:38:53.045 [DEBUG] [Thread-12613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:38:53.085 [DEBUG] [Thread-12613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:38:53.085 [DEBUG] [Thread-12613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:38:53.088 [DEBUG] [Thread-12613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:38:53.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:38:53.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:38:53.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:38:53.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:38:53.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:38:53.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:38:53.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:38:53.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:38:53.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:38:53.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.151483 -999.00  +20.00  14.58     18   -4.40 1 1 1 1 1   887    0 26.73 95.56 ----- 14.1 14.6 40.4 17.5 20.1 -25.9 20.0 -25.3 19.5 -24.3 19.6 -25.3
2025-11-26T05:38:53.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:38:53.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:38:53.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.151483
2025-11-26T05:38:53.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:38:53.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:38:53.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:38:53.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:38:53.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:38:53.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:38:47', tmtdew=28.71, humidity=13.65, cloud=0.0, wind=13.85, temperature=19.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:38:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:38:53.116 [DEBUG] [Thread-12613] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:38:53.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:38:59.854 [DEBUG] [Thread-12616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:39:14.917 [DEBUG] [Thread-12617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:39:21.686 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:39:21.687 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:39:29.945 [DEBUG] [Thread-12618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:39:34.483 [DEBUG] [Thread-12619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:39:44.985 [DEBUG] [Thread-12620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:40:00.019 [DEBUG] [Thread-12621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:40:15.058 [DEBUG] [Thread-12622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:40:21.826 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:40:21.828 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:40:30.092 [DEBUG] [Thread-12623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:40:34.539 [DEBUG] [Thread-12624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:40:45.124 [DEBUG] [Thread-12625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:41:00.164 [DEBUG] [Thread-12626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:41:07.149 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T05:41:15.202 [DEBUG] [Thread-12627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:41:21.983 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:41:21.984 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:41:30.242 [DEBUG] [Thread-12628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:41:34.590 [DEBUG] [Thread-12629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:41:37.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:41:37.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:41:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:41:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 41, 27), 28.67, 13.69, 0.0, 14.26, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:41:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:41:27
2025-11-26T05:41:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:41:38.122 [DEBUG] [Thread-12630] [transport.py] [_log()] starting thread (client mode): 0x70d2a230
2025-11-26T05:41:38.122 [DEBUG] [Thread-12630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:41:38.143 [DEBUG] [Thread-12630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:41:38.143 [INFO] [Thread-12630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:41:38.146 [DEBUG] [Thread-12630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:41:38.146 [DEBUG] [Thread-12630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:41:38.146 [DEBUG] [Thread-12630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:41:38.146 [DEBUG] [Thread-12630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:41:38.146 [DEBUG] [Thread-12630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:41:38.146 [DEBUG] [Thread-12630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:41:38.146 [DEBUG] [Thread-12630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:41:38.146 [DEBUG] [Thread-12630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] client lang: <none>
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] server lang: <none>
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] kex follows: False
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] Compression: none
2025-11-26T05:41:38.147 [DEBUG] [Thread-12630] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:41:38.164 [DEBUG] [Thread-12630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:41:38.164 [DEBUG] [Thread-12630] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:41:38.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:41:38.165 [DEBUG] [Thread-12630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:41:38.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:41:38.167 [DEBUG] [Thread-12630] [transport.py] [_log()] userauth is OK
2025-11-26T05:41:38.167 [DEBUG] [Thread-12630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:41:38.167 [DEBUG] [Thread-12630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:41:38.168 [DEBUG] [Thread-12630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:41:38.168 [DEBUG] [Thread-12630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:41:38.194 [INFO] [Thread-12630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:41:38.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:41:38.821 [DEBUG] [Thread-12630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:41:38.822 [DEBUG] [Thread-12630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:41:38.822 [DEBUG] [Thread-12630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:41:38.863 [DEBUG] [Thread-12630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:41:38.863 [DEBUG] [Thread-12630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:41:38.866 [DEBUG] [Thread-12630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:41:38.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:41:38.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:41:38.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:41:38.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:41:38.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:41:38.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:41:38.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:41:38.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:41:38.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:41:38.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.153566 -999.00  +20.10  15.68     18   -4.30 1 1 1 1 1   887    0 26.23 62.11 ----- 14.6 15.7 40.4 18.1 20.3 -26.1 20.2 -25.2 19.7 -24.3 19.8 -25.3
2025-11-26T05:41:38.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:41:38.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:41:38.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.153566
2025-11-26T05:41:38.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:41:38.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:41:38.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:41:38.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:41:38.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:41:38.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:41:27', tmtdew=28.67, humidity=13.69, cloud=0.0, wind=14.26, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:41:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:41:38.893 [DEBUG] [Thread-12630] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:41:38.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:41:38.990 [DEBUG] [Thread-12633] [transport.py] [_log()] starting thread (client mode): 0x70d29000
2025-11-26T05:41:38.990 [DEBUG] [Thread-12633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:41:39.004 [DEBUG] [Thread-12633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:41:39.004 [INFO] [Thread-12633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:41:39.012 [DEBUG] [Thread-12633] [transport.py] [_log()] client lang: <none>
2025-11-26T05:41:39.013 [DEBUG] [Thread-12633] [transport.py] [_log()] server lang: <none>
2025-11-26T05:41:39.013 [DEBUG] [Thread-12633] [transport.py] [_log()] kex follows: False
2025-11-26T05:41:39.013 [DEBUG] [Thread-12633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:41:39.013 [DEBUG] [Thread-12633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:41:39.013 [DEBUG] [Thread-12633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:41:39.013 [DEBUG] [Thread-12633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:41:39.013 [DEBUG] [Thread-12633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:41:39.013 [DEBUG] [Thread-12633] [transport.py] [_log()] Compression: none
2025-11-26T05:41:39.013 [DEBUG] [Thread-12633] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:41:39.072 [DEBUG] [Thread-12633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:41:39.073 [DEBUG] [Thread-12633] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:41:39.074 [DEBUG] [Thread-12633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:41:39.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:41:39.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:41:39.128 [DEBUG] [Thread-12633] [transport.py] [_log()] userauth is OK
2025-11-26T05:41:39.128 [DEBUG] [Thread-12633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:41:39.128 [DEBUG] [Thread-12633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:41:39.128 [DEBUG] [Thread-12633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:41:39.128 [DEBUG] [Thread-12633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:41:39.147 [INFO] [Thread-12633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:41:39.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:41:39.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:41:39.947 [DEBUG] [Thread-12633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:41:39.948 [DEBUG] [Thread-12633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:41:39.995 [DEBUG] [Thread-12633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:41:39.996 [DEBUG] [Thread-12633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:41:40.005 [DEBUG] [Thread-12633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:41:40.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:41:40.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:41:40.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:41:40.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:41:40.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:41:40.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:41:40.042 [DEBUG] [Thread-12633] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:41:45.280 [DEBUG] [Thread-12635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:42:00.333 [DEBUG] [Thread-12636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:42:10.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:42:10.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:42:10.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:42:10.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 41, 59), 28.71, 13.66, 0.0, 15.46, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:42:10.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:41:59
2025-11-26T05:42:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:42:10.991 [DEBUG] [Thread-12637] [transport.py] [_log()] starting thread (client mode): 0x70d2a6b0
2025-11-26T05:42:10.991 [DEBUG] [Thread-12637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:42:11.011 [DEBUG] [Thread-12637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:42:11.012 [INFO] [Thread-12637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] client lang: <none>
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] server lang: <none>
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] kex follows: False
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] Compression: none
2025-11-26T05:42:11.015 [DEBUG] [Thread-12637] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:42:11.036 [DEBUG] [Thread-12637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:42:11.036 [DEBUG] [Thread-12637] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:42:11.037 [DEBUG] [Thread-12637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:42:11.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:42:11.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:42:11.080 [DEBUG] [Thread-12637] [transport.py] [_log()] userauth is OK
2025-11-26T05:42:11.081 [DEBUG] [Thread-12637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:42:11.081 [DEBUG] [Thread-12637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:42:11.081 [DEBUG] [Thread-12637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:42:11.081 [DEBUG] [Thread-12637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:42:11.107 [INFO] [Thread-12637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:42:11.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:42:11.761 [DEBUG] [Thread-12637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:42:11.761 [DEBUG] [Thread-12637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:42:11.761 [DEBUG] [Thread-12637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:42:11.801 [DEBUG] [Thread-12637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:42:11.802 [DEBUG] [Thread-12637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:42:11.805 [DEBUG] [Thread-12637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:42:11.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:42:11.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:42:11.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:42:11.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:42:11.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:42:11.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:42:11.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:42:11.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:42:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:42:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.153914 -999.00  +20.00  13.57     18   -4.40 1 1 1 1 1   887    0 25.98 55.71 ----- 14.0 13.6 41.8 16.2 20.2 -26.1 20.3 -25.3 19.6 -24.3 19.8 -25.1
2025-11-26T05:42:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:42:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:42:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.153914
2025-11-26T05:42:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:42:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:42:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:42:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:42:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:42:11.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:41:59', tmtdew=28.71, humidity=13.66, cloud=0.0, wind=15.46, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:41:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:42:11.832 [DEBUG] [Thread-12637] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:42:11.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:42:11.927 [DEBUG] [Thread-12640] [transport.py] [_log()] starting thread (client mode): 0x70d2b910
2025-11-26T05:42:11.927 [DEBUG] [Thread-12640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:42:11.942 [DEBUG] [Thread-12640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:42:11.942 [INFO] [Thread-12640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] client lang: <none>
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] server lang: <none>
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] kex follows: False
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:42:11.950 [DEBUG] [Thread-12640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:42:11.951 [DEBUG] [Thread-12640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:42:11.951 [DEBUG] [Thread-12640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:42:11.951 [DEBUG] [Thread-12640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:42:11.951 [DEBUG] [Thread-12640] [transport.py] [_log()] Compression: none
2025-11-26T05:42:11.951 [DEBUG] [Thread-12640] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:42:12.009 [DEBUG] [Thread-12640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:42:12.010 [DEBUG] [Thread-12640] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:42:12.010 [DEBUG] [Thread-12640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:42:12.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:42:12.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:42:12.065 [DEBUG] [Thread-12640] [transport.py] [_log()] userauth is OK
2025-11-26T05:42:12.065 [DEBUG] [Thread-12640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:42:12.065 [DEBUG] [Thread-12640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:42:12.065 [DEBUG] [Thread-12640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:42:12.065 [DEBUG] [Thread-12640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:42:12.079 [INFO] [Thread-12640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:42:12.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:42:12.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:42:12.900 [DEBUG] [Thread-12640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:42:12.900 [DEBUG] [Thread-12640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:42:12.951 [DEBUG] [Thread-12640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:42:12.951 [DEBUG] [Thread-12640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:42:12.960 [DEBUG] [Thread-12640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:42:12.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:42:12.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:42:12.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:42:12.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:42:12.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:42:12.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:42:12.992 [DEBUG] [Thread-12640] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:42:15.366 [DEBUG] [Thread-12642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:42:22.126 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:42:22.126 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:42:30.425 [DEBUG] [Thread-12643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:42:34.647 [DEBUG] [Thread-12644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:42:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:42:43.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:42: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
2025-11-26T05:42:43.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 42, 31), 28.73, 13.63, 0.0, 15.67, 19.83, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:42:43.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:42:31
2025-11-26T05:42:43.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:42:43.956 [DEBUG] [Thread-12645] [transport.py] [_log()] starting thread (client mode): 0x737810c0
2025-11-26T05:42:43.956 [DEBUG] [Thread-12645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:42:43.976 [DEBUG] [Thread-12645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:42:43.976 [INFO] [Thread-12645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:42:43.979 [DEBUG] [Thread-12645] [transport.py] [_log()] client lang: <none>
2025-11-26T05:42:43.980 [DEBUG] [Thread-12645] [transport.py] [_log()] server lang: <none>
2025-11-26T05:42:43.980 [DEBUG] [Thread-12645] [transport.py] [_log()] kex follows: False
2025-11-26T05:42:43.980 [DEBUG] [Thread-12645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:42:43.980 [DEBUG] [Thread-12645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:42:43.980 [DEBUG] [Thread-12645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:42:43.980 [DEBUG] [Thread-12645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:42:43.980 [DEBUG] [Thread-12645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:42:43.980 [DEBUG] [Thread-12645] [transport.py] [_log()] Compression: none
2025-11-26T05:42:43.980 [DEBUG] [Thread-12645] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:42:44.000 [DEBUG] [Thread-12645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:42:44.001 [DEBUG] [Thread-12645] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:42:44.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:42:44.002 [DEBUG] [Thread-12645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:42:44.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:42:44.004 [DEBUG] [Thread-12645] [transport.py] [_log()] userauth is OK
2025-11-26T05:42:44.004 [DEBUG] [Thread-12645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:42:44.004 [DEBUG] [Thread-12645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:42:44.004 [DEBUG] [Thread-12645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:42:44.004 [DEBUG] [Thread-12645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:42:44.028 [INFO] [Thread-12645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:42:44.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:42:44.658 [DEBUG] [Thread-12645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:42:44.658 [DEBUG] [Thread-12645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:42:44.659 [DEBUG] [Thread-12645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:42:44.699 [DEBUG] [Thread-12645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:42:44.699 [DEBUG] [Thread-12645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:42:44.702 [DEBUG] [Thread-12645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:42:44.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:42:44.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:42:44.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:42:44.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:42:44.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:42:44.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:42:44.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:42:44.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:42:44.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:42:44.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.154261 -999.00  +20.00  14.93     18   -4.40 1 1 1 1 1   887    0 25.78 54.49 ----- 14.0 14.9 42.0 18.6 20.4 -26.2 20.3 -25.3 19.7 -24.2 19.8 -25.3
2025-11-26T05:42:44.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:42:44.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:42:44.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.154261
2025-11-26T05:42:44.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:42:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:42:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:42:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:42:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:42:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:42:31', tmtdew=28.73, humidity=13.63, cloud=0.0, wind=15.67, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:42:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:42:44.725 [DEBUG] [Thread-12645] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:42:44.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:42:44.822 [DEBUG] [Thread-12648] [transport.py] [_log()] starting thread (client mode): 0x70de4340
2025-11-26T05:42:44.822 [DEBUG] [Thread-12648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:42:44.838 [DEBUG] [Thread-12648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:42:44.838 [INFO] [Thread-12648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:42:44.846 [DEBUG] [Thread-12648] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:42:44.846 [DEBUG] [Thread-12648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:42:44.846 [DEBUG] [Thread-12648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:42:44.846 [DEBUG] [Thread-12648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:42:44.846 [DEBUG] [Thread-12648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:42:44.846 [DEBUG] [Thread-12648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:42:44.846 [DEBUG] [Thread-12648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:42:44.846 [DEBUG] [Thread-12648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:42:44.847 [DEBUG] [Thread-12648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:42:44.847 [DEBUG] [Thread-12648] [transport.py] [_log()] client lang: <none>
2025-11-26T05:42:44.847 [DEBUG] [Thread-12648] [transport.py] [_log()] server lang: <none>
2025-11-26T05:42:44.847 [DEBUG] [Thread-12648] [transport.py] [_log()] kex follows: False
2025-11-26T05:42:44.847 [DEBUG] [Thread-12648] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:42:44.847 [DEBUG] [Thread-12648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:42:44.847 [DEBUG] [Thread-12648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:42:44.847 [DEBUG] [Thread-12648] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:42:44.847 [DEBUG] [Thread-12648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:42:44.848 [DEBUG] [Thread-12648] [transport.py] [_log()] Compression: none
2025-11-26T05:42:44.848 [DEBUG] [Thread-12648] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:42:44.906 [DEBUG] [Thread-12648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:42:44.906 [DEBUG] [Thread-12648] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:42:44.907 [DEBUG] [Thread-12648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:42:44.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:42:44.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:42:44.962 [DEBUG] [Thread-12648] [transport.py] [_log()] userauth is OK
2025-11-26T05:42:44.963 [DEBUG] [Thread-12648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:42:44.963 [DEBUG] [Thread-12648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:42:44.963 [DEBUG] [Thread-12648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:42:44.963 [DEBUG] [Thread-12648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:42:44.989 [INFO] [Thread-12648] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:42:44.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:42:44.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:42:45.457 [DEBUG] [Thread-12650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:42:45.805 [DEBUG] [Thread-12648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:42:45.805 [DEBUG] [Thread-12648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:42:45.855 [DEBUG] [Thread-12648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:42:45.855 [DEBUG] [Thread-12648] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:42:45.865 [DEBUG] [Thread-12648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:42:45.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:42:45.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:42:45.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:42:45.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:42:45.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:42:45.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:42:45.901 [DEBUG] [Thread-12648] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:43:00.505 [DEBUG] [Thread-12651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:43:15.538 [DEBUG] [Thread-12652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:43:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:43:15.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:43:15.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:43:16.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 43, 3), 28.72, 13.66, 0.0, 15.46, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:43:16.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:43:03
2025-11-26T05:43:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:43:16.866 [DEBUG] [Thread-12653] [transport.py] [_log()] starting thread (client mode): 0x70d1ff70
2025-11-26T05:43:16.866 [DEBUG] [Thread-12653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:43:16.886 [DEBUG] [Thread-12653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:43:16.886 [INFO] [Thread-12653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:43:16.889 [DEBUG] [Thread-12653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:43:16.889 [DEBUG] [Thread-12653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:43:16.889 [DEBUG] [Thread-12653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:43:16.889 [DEBUG] [Thread-12653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:43:16.889 [DEBUG] [Thread-12653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:43:16.889 [DEBUG] [Thread-12653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] client lang: <none>
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] server lang: <none>
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] kex follows: False
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] Compression: none
2025-11-26T05:43:16.890 [DEBUG] [Thread-12653] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:43:16.906 [DEBUG] [Thread-12653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:43:16.907 [DEBUG] [Thread-12653] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:43:16.907 [DEBUG] [Thread-12653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:43:16.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:43:16.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:43:16.909 [DEBUG] [Thread-12653] [transport.py] [_log()] userauth is OK
2025-11-26T05:43:16.909 [DEBUG] [Thread-12653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:43:16.909 [DEBUG] [Thread-12653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:43:16.909 [DEBUG] [Thread-12653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:43:16.909 [DEBUG] [Thread-12653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:43:16.926 [INFO] [Thread-12653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:43:16.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:43:17.564 [DEBUG] [Thread-12653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:43:17.564 [DEBUG] [Thread-12653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:43:17.565 [DEBUG] [Thread-12653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:43:17.605 [DEBUG] [Thread-12653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:43:17.605 [DEBUG] [Thread-12653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:43:17.609 [DEBUG] [Thread-12653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:43:17.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:43:17.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:43:17.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:43:17.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:43:17.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:43:17.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:43:17.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:43:17.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:43:17.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:43:17.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.154608 -999.00  +20.10  13.94     18   -4.30 1 1 1 1 1   887    0 25.77 50.51 ----- 13.9 13.9 39.8 17.4 20.4 -26.2 20.3 -25.3 19.7 -24.4 19.8 -25.3
2025-11-26T05:43:17.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:43:17.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:43:17.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.154608
2025-11-26T05:43:17.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:43:17.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:43:17.636 [DEBUG] [Thread-12653] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:43:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:43:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:43:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:43:17.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:43:03', tmtdew=28.72, humidity=13.66, cloud=0.0, wind=15.46, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:42:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:43:17.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:43:17.734 [DEBUG] [Thread-12656] [transport.py] [_log()] starting thread (client mode): 0x70d29180
2025-11-26T05:43:17.734 [DEBUG] [Thread-12656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:43:17.748 [DEBUG] [Thread-12656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:43:17.748 [INFO] [Thread-12656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:43:17.756 [DEBUG] [Thread-12656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:43:17.756 [DEBUG] [Thread-12656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:43:17.756 [DEBUG] [Thread-12656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:43:17.756 [DEBUG] [Thread-12656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:43:17.756 [DEBUG] [Thread-12656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] client lang: <none>
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] server lang: <none>
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] kex follows: False
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:43:17.757 [DEBUG] [Thread-12656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:43:17.758 [DEBUG] [Thread-12656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:43:17.758 [DEBUG] [Thread-12656] [transport.py] [_log()] Compression: none
2025-11-26T05:43:17.758 [DEBUG] [Thread-12656] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:43:17.815 [DEBUG] [Thread-12656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:43:17.816 [DEBUG] [Thread-12656] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:43:17.817 [DEBUG] [Thread-12656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:43:17.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:43:17.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:43:17.872 [DEBUG] [Thread-12656] [transport.py] [_log()] userauth is OK
2025-11-26T05:43:17.872 [DEBUG] [Thread-12656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:43:17.872 [DEBUG] [Thread-12656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:43:17.872 [DEBUG] [Thread-12656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:43:17.872 [DEBUG] [Thread-12656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:43:17.891 [INFO] [Thread-12656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:43:17.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:43:17.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:43:18.707 [DEBUG] [Thread-12656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:43:18.708 [DEBUG] [Thread-12656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:43:18.755 [DEBUG] [Thread-12656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:43:18.755 [DEBUG] [Thread-12656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:43:18.764 [DEBUG] [Thread-12656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:43:18.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:43:18.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:43:18.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:43:18.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:43:18.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:43:18.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:43:18.798 [DEBUG] [Thread-12656] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:43:22.267 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:43:22.269 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:43:30.574 [DEBUG] [Thread-12658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:43:34.693 [DEBUG] [Thread-12659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:43:45.633 [DEBUG] [Thread-12660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:43:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:43:48.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:43:48.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:43:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 43, 35), 28.7, 13.63, 0.0, 15.18, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:43:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:43:35
2025-11-26T05:43:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:43:49.741 [DEBUG] [Thread-12661] [transport.py] [_log()] starting thread (client mode): 0x761dba30
2025-11-26T05:43:49.742 [DEBUG] [Thread-12661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:43:49.765 [DEBUG] [Thread-12661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:43:49.765 [INFO] [Thread-12661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] client lang: <none>
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] server lang: <none>
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] kex follows: False
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] Compression: none
2025-11-26T05:43:49.769 [DEBUG] [Thread-12661] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:43:49.785 [DEBUG] [Thread-12661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:43:49.786 [DEBUG] [Thread-12661] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:43:49.786 [DEBUG] [Thread-12661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:43:49.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:43:49.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:43:49.788 [DEBUG] [Thread-12661] [transport.py] [_log()] userauth is OK
2025-11-26T05:43:49.788 [DEBUG] [Thread-12661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:43:49.788 [DEBUG] [Thread-12661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:43:49.788 [DEBUG] [Thread-12661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:43:49.788 [DEBUG] [Thread-12661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:43:49.809 [INFO] [Thread-12661] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:43:49.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:43:50.428 [DEBUG] [Thread-12661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:43:50.429 [DEBUG] [Thread-12661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:43:50.429 [DEBUG] [Thread-12661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:43:50.470 [DEBUG] [Thread-12661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:43:50.470 [DEBUG] [Thread-12661] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:43:50.474 [DEBUG] [Thread-12661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:43:50.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:43:50.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:43:50.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:43:50.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:43:50.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:43:50.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:43:50.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:43:50.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:43:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:43:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.154955 -999.00  +20.10  13.00     18   -4.40 1 1 1 1 1   887    0 25.72 48.09 ----- 15.8 13.0 30.0 18.5 20.4 -26.0 20.4 -25.3 19.7 -24.3 19.9 -25.4
2025-11-26T05:43:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:43:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:43:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.154955
2025-11-26T05:43:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:43:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:43:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:43:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:43:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:43:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:43:35', tmtdew=28.7, humidity=13.63, cloud=0.0, wind=15.18, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:43:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:43:50.502 [DEBUG] [Thread-12661] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:43:50.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:43:50.597 [DEBUG] [Thread-12664] [transport.py] [_log()] starting thread (client mode): 0x70d1c700
2025-11-26T05:43:50.598 [DEBUG] [Thread-12664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:43:50.612 [DEBUG] [Thread-12664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:43:50.613 [INFO] [Thread-12664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:43:50.620 [DEBUG] [Thread-12664] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] client lang: <none>
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] server lang: <none>
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] kex follows: False
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] Compression: none
2025-11-26T05:43:50.621 [DEBUG] [Thread-12664] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:43:50.680 [DEBUG] [Thread-12664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:43:50.681 [DEBUG] [Thread-12664] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:43:50.681 [DEBUG] [Thread-12664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:43:50.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:43:50.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:43:50.741 [DEBUG] [Thread-12664] [transport.py] [_log()] userauth is OK
2025-11-26T05:43:50.741 [DEBUG] [Thread-12664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:43:50.741 [DEBUG] [Thread-12664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:43:50.742 [DEBUG] [Thread-12664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:43:50.742 [DEBUG] [Thread-12664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:43:50.761 [INFO] [Thread-12664] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:43:50.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:43:50.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:43:51.660 [DEBUG] [Thread-12664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:43:51.660 [DEBUG] [Thread-12664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:43:51.708 [DEBUG] [Thread-12664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:43:51.708 [DEBUG] [Thread-12664] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:43:51.717 [DEBUG] [Thread-12664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:43:51.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:43:51.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:43:51.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:43:51.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:43:51.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:43:51.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:43:51.755 [DEBUG] [Thread-12664] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:44:00.670 [DEBUG] [Thread-12666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:44:15.717 [DEBUG] [Thread-12667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:44:21.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:44:21.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:44:21.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:44:22.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 44, 7), 28.69, 13.61, 0.0, 14.24, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:44:22.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:44:07
2025-11-26T05:44:22.413 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:44:22.414 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:44:22.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:44:22.686 [DEBUG] [Thread-12668] [transport.py] [_log()] starting thread (client mode): 0x737c5420
2025-11-26T05:44:22.686 [DEBUG] [Thread-12668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:44:22.706 [DEBUG] [Thread-12668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:44:22.706 [INFO] [Thread-12668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] client lang: <none>
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] server lang: <none>
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] kex follows: False
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] Compression: none
2025-11-26T05:44:22.709 [DEBUG] [Thread-12668] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:44:22.727 [DEBUG] [Thread-12668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:44:22.728 [DEBUG] [Thread-12668] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:44:22.728 [DEBUG] [Thread-12668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:44:22.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:44:22.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:44:22.730 [DEBUG] [Thread-12668] [transport.py] [_log()] userauth is OK
2025-11-26T05:44:22.731 [DEBUG] [Thread-12668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:44:22.731 [DEBUG] [Thread-12668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:44:22.731 [DEBUG] [Thread-12668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:44:22.731 [DEBUG] [Thread-12668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:44:22.754 [INFO] [Thread-12668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:44:22.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:44:23.439 [DEBUG] [Thread-12668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:44:23.439 [DEBUG] [Thread-12668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:44:23.439 [DEBUG] [Thread-12668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:44:23.480 [DEBUG] [Thread-12668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:44:23.480 [DEBUG] [Thread-12668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:44:23.483 [DEBUG] [Thread-12668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:44:23.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:44:23.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:44:23.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:44:23.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:44:23.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:44:23.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:44:23.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:44:23.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:44:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:44:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.155303 -999.00  +20.10  12.79     18   -4.30 1 1 1 1 1   887    0 25.70 46.75 ----- 15.6 12.8 43.0 20.2 20.4 -26.0 20.4 -25.3 19.8 -24.2 19.9 -25.2
2025-11-26T05:44:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:44:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:44:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.155303
2025-11-26T05:44:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:44:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:44:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:44:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:44:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:44:23.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:44:07', tmtdew=28.69, humidity=13.61, cloud=0.0, wind=14.24, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:43:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:44:23.511 [DEBUG] [Thread-12668] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:44:23.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:44:23.607 [DEBUG] [Thread-12671] [transport.py] [_log()] starting thread (client mode): 0x73780130
2025-11-26T05:44:23.608 [DEBUG] [Thread-12671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:44:23.624 [DEBUG] [Thread-12671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:44:23.624 [INFO] [Thread-12671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:44:23.632 [DEBUG] [Thread-12671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:44:23.632 [DEBUG] [Thread-12671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:44:23.632 [DEBUG] [Thread-12671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:44:23.632 [DEBUG] [Thread-12671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:44:23.633 [DEBUG] [Thread-12671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:44:23.633 [DEBUG] [Thread-12671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:44:23.633 [DEBUG] [Thread-12671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:44:23.633 [DEBUG] [Thread-12671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:44:23.633 [DEBUG] [Thread-12671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:44:23.633 [DEBUG] [Thread-12671] [transport.py] [_log()] client lang: <none>
2025-11-26T05:44:23.633 [DEBUG] [Thread-12671] [transport.py] [_log()] server lang: <none>
2025-11-26T05:44:23.633 [DEBUG] [Thread-12671] [transport.py] [_log()] kex follows: False
2025-11-26T05:44:23.633 [DEBUG] [Thread-12671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:44:23.634 [DEBUG] [Thread-12671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:44:23.634 [DEBUG] [Thread-12671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:44:23.634 [DEBUG] [Thread-12671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:44:23.634 [DEBUG] [Thread-12671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:44:23.634 [DEBUG] [Thread-12671] [transport.py] [_log()] Compression: none
2025-11-26T05:44:23.634 [DEBUG] [Thread-12671] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:44:23.690 [DEBUG] [Thread-12671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:44:23.691 [DEBUG] [Thread-12671] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:44:23.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:44:23.692 [DEBUG] [Thread-12671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:44:23.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:44:23.750 [DEBUG] [Thread-12671] [transport.py] [_log()] userauth is OK
2025-11-26T05:44:23.750 [DEBUG] [Thread-12671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:44:23.750 [DEBUG] [Thread-12671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:44:23.751 [DEBUG] [Thread-12671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:44:23.751 [DEBUG] [Thread-12671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:44:23.771 [INFO] [Thread-12671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:44:23.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:44:23.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:44:24.616 [DEBUG] [Thread-12671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:44:24.617 [DEBUG] [Thread-12671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:44:24.665 [DEBUG] [Thread-12671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:44:24.665 [DEBUG] [Thread-12671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:44:24.674 [DEBUG] [Thread-12671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:44:24.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:44: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')
2025-11-26T05:44:24.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:44:24.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:44:24.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:44:24.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:44:24.712 [DEBUG] [Thread-12671] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:44:30.752 [DEBUG] [Thread-12673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:44:34.754 [DEBUG] [Thread-12674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:44:45.814 [DEBUG] [Thread-12675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:44:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:44:54.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:44: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
2025-11-26T05:44:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 44, 39), 28.7, 13.68, 0.0, 13.36, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:44:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:44:39
2025-11-26T05:44:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:44:55.660 [DEBUG] [Thread-12676] [transport.py] [_log()] starting thread (client mode): 0x73783400
2025-11-26T05:44:55.660 [DEBUG] [Thread-12676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:44:55.679 [DEBUG] [Thread-12676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:44:55.679 [INFO] [Thread-12676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:44:55.683 [DEBUG] [Thread-12676] [transport.py] [_log()] client lang: <none>
2025-11-26T05:44:55.684 [DEBUG] [Thread-12676] [transport.py] [_log()] server lang: <none>
2025-11-26T05:44:55.684 [DEBUG] [Thread-12676] [transport.py] [_log()] kex follows: False
2025-11-26T05:44:55.684 [DEBUG] [Thread-12676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:44:55.684 [DEBUG] [Thread-12676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:44:55.684 [DEBUG] [Thread-12676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:44:55.684 [DEBUG] [Thread-12676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:44:55.684 [DEBUG] [Thread-12676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:44:55.684 [DEBUG] [Thread-12676] [transport.py] [_log()] Compression: none
2025-11-26T05:44:55.684 [DEBUG] [Thread-12676] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:44:55.701 [DEBUG] [Thread-12676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:44:55.702 [DEBUG] [Thread-12676] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:44:55.703 [DEBUG] [Thread-12676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:44:55.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:44:55.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:44:55.705 [DEBUG] [Thread-12676] [transport.py] [_log()] userauth is OK
2025-11-26T05:44:55.705 [DEBUG] [Thread-12676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:44:55.705 [DEBUG] [Thread-12676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:44:55.705 [DEBUG] [Thread-12676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:44:55.705 [DEBUG] [Thread-12676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:44:55.730 [INFO] [Thread-12676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:44:55.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:44:56.371 [DEBUG] [Thread-12676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:44:56.371 [DEBUG] [Thread-12676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:44:56.371 [DEBUG] [Thread-12676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:44:56.413 [DEBUG] [Thread-12676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:44:56.413 [DEBUG] [Thread-12676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:44:56.416 [DEBUG] [Thread-12676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:44:56.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:44:56.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:44:56.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:44:56.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:44:56.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:44:56.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:44:56.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:44:56.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:44:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:44:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.155997 -999.00  +20.10  16.66     18   -4.30 1 1 1 1 1   887    0 25.71 43.35 ----- 15.4 16.7 41.6 19.4 20.5 -26.1 20.5 -25.3 19.8 -24.2 19.9 -25.2
2025-11-26T05:44:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:44:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:44:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.155997
2025-11-26T05:44:56.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:44:56.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:44:56.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:44:56.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:44:56.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:44:56.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:44:39', tmtdew=28.7, humidity=13.68, cloud=0.0, wind=13.36, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:44:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:44:56.444 [DEBUG] [Thread-12676] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:44:56.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:44:56.539 [DEBUG] [Thread-12679] [transport.py] [_log()] starting thread (client mode): 0x761dbb20
2025-11-26T05:44:56.539 [DEBUG] [Thread-12679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:44:56.556 [DEBUG] [Thread-12679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:44:56.556 [INFO] [Thread-12679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:44:56.563 [DEBUG] [Thread-12679] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] client lang: <none>
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] server lang: <none>
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] kex follows: False
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:44:56.564 [DEBUG] [Thread-12679] [transport.py] [_log()] Compression: none
2025-11-26T05:44:56.565 [DEBUG] [Thread-12679] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:44:56.621 [DEBUG] [Thread-12679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:44:56.621 [DEBUG] [Thread-12679] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:44:56.622 [DEBUG] [Thread-12679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:44:56.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:44:56.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:44:56.680 [DEBUG] [Thread-12679] [transport.py] [_log()] userauth is OK
2025-11-26T05:44:56.680 [DEBUG] [Thread-12679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:44:56.680 [DEBUG] [Thread-12679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:44:56.680 [DEBUG] [Thread-12679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:44:56.680 [DEBUG] [Thread-12679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:44:56.699 [INFO] [Thread-12679] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:44:56.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:44:56.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:44:57.503 [DEBUG] [Thread-12679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:44:57.504 [DEBUG] [Thread-12679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:44:57.553 [DEBUG] [Thread-12679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:44:57.553 [DEBUG] [Thread-12679] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:44:57.563 [DEBUG] [Thread-12679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:44:57.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:44:57.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:44:57.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:44:57.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:44:57.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:44:57.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:44:57.604 [DEBUG] [Thread-12679] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:45:00.845 [DEBUG] [Thread-12681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:45:15.896 [DEBUG] [Thread-12682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:45:22.555 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:45:22.557 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:45:27.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:45:27.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:45:27.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:45:28.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 45, 11), 28.73, 13.65, 0.0, 13.25, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:45:28.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:45:11
2025-11-26T05:45:28.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:45:28.609 [DEBUG] [Thread-12683] [transport.py] [_log()] starting thread (client mode): 0x70d28fa0
2025-11-26T05:45:28.610 [DEBUG] [Thread-12683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:45:28.631 [DEBUG] [Thread-12683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:45:28.631 [INFO] [Thread-12683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] client lang: <none>
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] server lang: <none>
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] kex follows: False
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] Compression: none
2025-11-26T05:45:28.633 [DEBUG] [Thread-12683] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:45:28.648 [DEBUG] [Thread-12683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:45:28.649 [DEBUG] [Thread-12683] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:45:28.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:45:28.649 [DEBUG] [Thread-12683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:45:28.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:45:28.649 [DEBUG] [Thread-12683] [transport.py] [_log()] userauth is OK
2025-11-26T05:45:28.649 [DEBUG] [Thread-12683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:45:28.649 [DEBUG] [Thread-12683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:45:28.649 [DEBUG] [Thread-12683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:45:28.649 [DEBUG] [Thread-12683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:45:28.658 [INFO] [Thread-12683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:45:28.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:45:29.256 [DEBUG] [Thread-12683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:45:29.256 [DEBUG] [Thread-12683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:45:29.256 [DEBUG] [Thread-12683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:45:29.297 [DEBUG] [Thread-12683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:45:29.297 [DEBUG] [Thread-12683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:45:29.300 [DEBUG] [Thread-12683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:45:29.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:45:29.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:45:29.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:45:29.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:45:29.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:45:29.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:45:29.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.156344 -999.00  +20.20  13.20     18   -4.40 1 1 1 1 1   887    0 25.64 42.14 ----- 15.9 13.2 37.0 18.4 20.5 -26.1 20.5 -25.2 19.8 -24.4 19.9 -25.4
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.156344
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:45:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:45:11', tmtdew=28.73, humidity=13.65, cloud=0.0, wind=13.25, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:45:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:45:29.319 [DEBUG] [Thread-12683] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:45:29.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:45:29.405 [DEBUG] [Thread-12686] [transport.py] [_log()] starting thread (client mode): 0x7374d810
2025-11-26T05:45:29.405 [DEBUG] [Thread-12686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:45:29.420 [DEBUG] [Thread-12686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:45:29.420 [INFO] [Thread-12686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:45:29.427 [DEBUG] [Thread-12686] [transport.py] [_log()] client lang: <none>
2025-11-26T05:45:29.428 [DEBUG] [Thread-12686] [transport.py] [_log()] server lang: <none>
2025-11-26T05:45:29.428 [DEBUG] [Thread-12686] [transport.py] [_log()] kex follows: False
2025-11-26T05:45:29.428 [DEBUG] [Thread-12686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:45:29.428 [DEBUG] [Thread-12686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:45:29.428 [DEBUG] [Thread-12686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:45:29.428 [DEBUG] [Thread-12686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:45:29.428 [DEBUG] [Thread-12686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:45:29.428 [DEBUG] [Thread-12686] [transport.py] [_log()] Compression: none
2025-11-26T05:45:29.428 [DEBUG] [Thread-12686] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:45:29.486 [DEBUG] [Thread-12686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:45:29.486 [DEBUG] [Thread-12686] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:45:29.487 [DEBUG] [Thread-12686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:45:29.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:45:29.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:45:29.543 [DEBUG] [Thread-12686] [transport.py] [_log()] userauth is OK
2025-11-26T05:45:29.543 [DEBUG] [Thread-12686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:45:29.543 [DEBUG] [Thread-12686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:45:29.543 [DEBUG] [Thread-12686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:45:29.543 [DEBUG] [Thread-12686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:45:29.558 [INFO] [Thread-12686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:45:29.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:45:29.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:45:30.423 [DEBUG] [Thread-12686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:45:30.423 [DEBUG] [Thread-12686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:45:30.471 [DEBUG] [Thread-12686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:45:30.471 [DEBUG] [Thread-12686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:45:30.479 [DEBUG] [Thread-12686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:45:30.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:45:30.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:45:30.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:45:30.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:45:30.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:45:30.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:45:30.511 [DEBUG] [Thread-12686] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:45:30.927 [DEBUG] [Thread-12688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:45:34.805 [DEBUG] [Thread-12689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:45:45.968 [DEBUG] [Thread-12690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:46:00.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:46:00.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:46:00.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
2025-11-26T05:46:01.004 [DEBUG] [Thread-12691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:46:01.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 45, 43), 28.77, 13.6, 0.0, 13.76, 19.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:46:01.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:45:43
2025-11-26T05:46:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:46:01.458 [DEBUG] [Thread-12692] [transport.py] [_log()] starting thread (client mode): 0x70d28340
2025-11-26T05:46:01.458 [DEBUG] [Thread-12692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:46:01.480 [DEBUG] [Thread-12692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:46:01.480 [INFO] [Thread-12692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] client lang: <none>
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] server lang: <none>
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] kex follows: False
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] Compression: none
2025-11-26T05:46:01.483 [DEBUG] [Thread-12692] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:46:01.503 [DEBUG] [Thread-12692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:46:01.504 [DEBUG] [Thread-12692] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:46:01.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:46:01.505 [DEBUG] [Thread-12692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:46:01.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:46:01.507 [DEBUG] [Thread-12692] [transport.py] [_log()] userauth is OK
2025-11-26T05:46:01.508 [DEBUG] [Thread-12692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:46:01.508 [DEBUG] [Thread-12692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:46:01.508 [DEBUG] [Thread-12692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:46:01.508 [DEBUG] [Thread-12692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:46:01.533 [INFO] [Thread-12692] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:46:01.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:46:02.206 [DEBUG] [Thread-12692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:46:02.206 [DEBUG] [Thread-12692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:46:02.207 [DEBUG] [Thread-12692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:46:02.248 [DEBUG] [Thread-12692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:46:02.248 [DEBUG] [Thread-12692] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:46:02.251 [DEBUG] [Thread-12692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:46:02.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:46:02.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:46:02.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:46:02.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:46:02.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:46:02.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:46:02.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:46:02.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:46:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:46:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.156691 -999.00  +20.20  14.90     18   -4.30 1 1 1 1 1   887    0 25.53 40.35 ----- 14.9 14.9 36.2 18.2 20.6 -26.2 20.6 -25.3 19.8 -24.3 19.9 -25.2
2025-11-26T05:46:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:46:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:46:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.156691
2025-11-26T05:46:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:46:02.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:46:02.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:46:02.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:46:02.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:46:02.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:45:43', tmtdew=28.77, humidity=13.6, cloud=0.0, wind=13.76, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:45:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:46:02.280 [DEBUG] [Thread-12692] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:46:02.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:46:02.374 [DEBUG] [Thread-12695] [transport.py] [_log()] starting thread (client mode): 0x7374caf0
2025-11-26T05:46:02.374 [DEBUG] [Thread-12695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:46:02.389 [DEBUG] [Thread-12695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:46:02.389 [INFO] [Thread-12695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:46:02.396 [DEBUG] [Thread-12695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] client lang: <none>
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] server lang: <none>
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] kex follows: False
2025-11-26T05:46:02.397 [DEBUG] [Thread-12695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:46:02.398 [DEBUG] [Thread-12695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:46:02.398 [DEBUG] [Thread-12695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:46:02.398 [DEBUG] [Thread-12695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:46:02.398 [DEBUG] [Thread-12695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:46:02.398 [DEBUG] [Thread-12695] [transport.py] [_log()] Compression: none
2025-11-26T05:46:02.398 [DEBUG] [Thread-12695] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:46:02.457 [DEBUG] [Thread-12695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:46:02.458 [DEBUG] [Thread-12695] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:46:02.458 [DEBUG] [Thread-12695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:46:02.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:46:02.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:46:02.513 [DEBUG] [Thread-12695] [transport.py] [_log()] userauth is OK
2025-11-26T05:46:02.513 [DEBUG] [Thread-12695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:46:02.513 [DEBUG] [Thread-12695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:46:02.513 [DEBUG] [Thread-12695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:46:02.513 [DEBUG] [Thread-12695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:46:02.532 [INFO] [Thread-12695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:46:02.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:46:02.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:46:03.422 [DEBUG] [Thread-12695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:46:03.422 [DEBUG] [Thread-12695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:46:03.469 [DEBUG] [Thread-12695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:46:03.470 [DEBUG] [Thread-12695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:46:03.478 [DEBUG] [Thread-12695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:46:03.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:46:03.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:46:03.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:46:03.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:46:03.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:46:03.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:46:03.513 [DEBUG] [Thread-12695] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:46:16.038 [DEBUG] [Thread-12697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:46:22.697 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:46:22.698 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:46:31.091 [DEBUG] [Thread-12698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:46:33.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:46:33.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:46:33.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
2025-11-26T05:46:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 46, 15), 28.75, 13.63, 0.0, 13.57, 19.95, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:46:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:46:15
2025-11-26T05:46:34.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:46:34.435 [DEBUG] [Thread-12699] [transport.py] [_log()] starting thread (client mode): 0x737c65c0
2025-11-26T05:46:34.435 [DEBUG] [Thread-12699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:46:34.455 [DEBUG] [Thread-12699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:46:34.455 [INFO] [Thread-12699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:46:34.456 [DEBUG] [Thread-12699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] client lang: <none>
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] server lang: <none>
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] kex follows: False
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:46:34.457 [DEBUG] [Thread-12699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:46:34.458 [DEBUG] [Thread-12699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:46:34.458 [DEBUG] [Thread-12699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:46:34.458 [DEBUG] [Thread-12699] [transport.py] [_log()] Compression: none
2025-11-26T05:46:34.458 [DEBUG] [Thread-12699] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:46:34.467 [DEBUG] [Thread-12699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:46:34.468 [DEBUG] [Thread-12699] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:46:34.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:46:34.469 [DEBUG] [Thread-12699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:46:34.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:46:34.472 [DEBUG] [Thread-12699] [transport.py] [_log()] userauth is OK
2025-11-26T05:46:34.472 [DEBUG] [Thread-12699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:46:34.472 [DEBUG] [Thread-12699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:46:34.472 [DEBUG] [Thread-12699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:46:34.472 [DEBUG] [Thread-12699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:46:34.491 [INFO] [Thread-12699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:46:34.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:46:34.860 [DEBUG] [Thread-12701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:46:35.075 [DEBUG] [Thread-12699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:46:35.076 [DEBUG] [Thread-12699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:46:35.076 [DEBUG] [Thread-12699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:46:35.117 [DEBUG] [Thread-12699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:46:35.117 [DEBUG] [Thread-12699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:46:35.120 [DEBUG] [Thread-12699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:46:35.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:46:35.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:46:35.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:46:35.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:46:35.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:46:35.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:46:35.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:46:35.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:46:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:46:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.157039 -999.00  +20.10  13.68     18   -4.30 1 1 1 1 1   887    0 25.49 36.99 ----- 17.4 13.7 44.4 18.8 20.6 -26.3 20.6 -25.4 19.9 -24.2 20.0 -25.3
2025-11-26T05:46:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:46:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:46:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.157039
2025-11-26T05:46:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:46:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:46:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:46:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:46:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:46:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:46:15', tmtdew=28.75, humidity=13.63, cloud=0.0, wind=13.57, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:46:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:46:35.146 [DEBUG] [Thread-12699] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:46:35.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:46:35.246 [DEBUG] [Thread-12703] [transport.py] [_log()] starting thread (client mode): 0x70d2ad70
2025-11-26T05:46:35.246 [DEBUG] [Thread-12703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:46:35.261 [DEBUG] [Thread-12703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:46:35.261 [INFO] [Thread-12703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:46:35.269 [DEBUG] [Thread-12703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:46:35.269 [DEBUG] [Thread-12703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:46:35.269 [DEBUG] [Thread-12703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:46:35.269 [DEBUG] [Thread-12703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:46:35.269 [DEBUG] [Thread-12703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:46:35.269 [DEBUG] [Thread-12703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:46:35.269 [DEBUG] [Thread-12703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:46:35.269 [DEBUG] [Thread-12703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:46:35.269 [DEBUG] [Thread-12703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] client lang: <none>
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] server lang: <none>
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] kex follows: False
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] Compression: none
2025-11-26T05:46:35.270 [DEBUG] [Thread-12703] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:46:35.330 [DEBUG] [Thread-12703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:46:35.330 [DEBUG] [Thread-12703] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:46:35.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:46:35.331 [DEBUG] [Thread-12703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:46:35.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:46:35.390 [DEBUG] [Thread-12703] [transport.py] [_log()] userauth is OK
2025-11-26T05:46:35.390 [DEBUG] [Thread-12703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:46:35.390 [DEBUG] [Thread-12703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:46:35.390 [DEBUG] [Thread-12703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:46:35.391 [DEBUG] [Thread-12703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:46:35.415 [INFO] [Thread-12703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:46:35.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:46:35.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:46:36.262 [DEBUG] [Thread-12703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:46:36.262 [DEBUG] [Thread-12703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:46:36.310 [DEBUG] [Thread-12703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:46:36.311 [DEBUG] [Thread-12703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:46:36.320 [DEBUG] [Thread-12703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:46:36.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:46:36.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:46:36.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:46:36.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:46:36.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:46:36.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:46:36.358 [DEBUG] [Thread-12703] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:46:46.123 [DEBUG] [Thread-12705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:47:01.160 [DEBUG] [Thread-12706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:47:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:47:06.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:47:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:47:07.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 46, 47), 28.83, 13.55, 0.0, 15.35, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:47:07.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:46:47
2025-11-26T05:47:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:47:07.312 [DEBUG] [Thread-12707] [transport.py] [_log()] starting thread (client mode): 0x737c5180
2025-11-26T05:47:07.312 [DEBUG] [Thread-12707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:47:07.333 [DEBUG] [Thread-12707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:47:07.334 [INFO] [Thread-12707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:47:07.336 [DEBUG] [Thread-12707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] client lang: <none>
2025-11-26T05:47:07.337 [DEBUG] [Thread-12707] [transport.py] [_log()] server lang: <none>
2025-11-26T05:47:07.338 [DEBUG] [Thread-12707] [transport.py] [_log()] kex follows: False
2025-11-26T05:47:07.338 [DEBUG] [Thread-12707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:47:07.338 [DEBUG] [Thread-12707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:47:07.338 [DEBUG] [Thread-12707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:47:07.338 [DEBUG] [Thread-12707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:47:07.338 [DEBUG] [Thread-12707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:47:07.338 [DEBUG] [Thread-12707] [transport.py] [_log()] Compression: none
2025-11-26T05:47:07.338 [DEBUG] [Thread-12707] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:47:07.357 [DEBUG] [Thread-12707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:47:07.358 [DEBUG] [Thread-12707] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:47:07.359 [DEBUG] [Thread-12707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:47:07.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:47:07.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:47:07.362 [DEBUG] [Thread-12707] [transport.py] [_log()] userauth is OK
2025-11-26T05:47:07.362 [DEBUG] [Thread-12707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:47:07.362 [DEBUG] [Thread-12707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:47:07.362 [DEBUG] [Thread-12707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:47:07.362 [DEBUG] [Thread-12707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:47:07.382 [INFO] [Thread-12707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:47:07.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:47:08.040 [DEBUG] [Thread-12707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:47:08.040 [DEBUG] [Thread-12707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:47:08.040 [DEBUG] [Thread-12707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:47:08.081 [DEBUG] [Thread-12707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:47:08.081 [DEBUG] [Thread-12707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:47:08.085 [DEBUG] [Thread-12707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:47:08.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:47:08.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:47:08.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:47:08.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:47:08.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:47:08.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:47:08.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:47:08.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:47:08.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:47:08.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.157386 -999.00  +20.10  14.21     18   -4.30 1 1 1 1 1   887    0 25.67 36.31 ----- 15.8 14.2 39.8 18.4 20.6 -26.2 20.6 -25.4 19.9 -24.4 20.0 -25.3
2025-11-26T05:47:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:47:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:47:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.157386
2025-11-26T05:47:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:47:08.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:47:08.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:47:08.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:47:08.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:47:08.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:46:47', tmtdew=28.83, humidity=13.55, cloud=0.0, wind=15.35, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:46:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:47:08.112 [DEBUG] [Thread-12707] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:47:08.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:47:08.210 [DEBUG] [Thread-12710] [transport.py] [_log()] starting thread (client mode): 0x7376eb60
2025-11-26T05:47:08.211 [DEBUG] [Thread-12710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:47:08.225 [DEBUG] [Thread-12710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:47:08.226 [INFO] [Thread-12710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:47:08.233 [DEBUG] [Thread-12710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:47:08.233 [DEBUG] [Thread-12710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:47:08.233 [DEBUG] [Thread-12710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] client lang: <none>
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] server lang: <none>
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] kex follows: False
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:47:08.234 [DEBUG] [Thread-12710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:47:08.235 [DEBUG] [Thread-12710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:47:08.235 [DEBUG] [Thread-12710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:47:08.235 [DEBUG] [Thread-12710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:47:08.235 [DEBUG] [Thread-12710] [transport.py] [_log()] Compression: none
2025-11-26T05:47:08.235 [DEBUG] [Thread-12710] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:47:08.293 [DEBUG] [Thread-12710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:47:08.294 [DEBUG] [Thread-12710] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:47:08.295 [DEBUG] [Thread-12710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:47:08.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:47:08.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:47:08.350 [DEBUG] [Thread-12710] [transport.py] [_log()] userauth is OK
2025-11-26T05:47:08.351 [DEBUG] [Thread-12710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:47:08.351 [DEBUG] [Thread-12710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:47:08.351 [DEBUG] [Thread-12710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:47:08.351 [DEBUG] [Thread-12710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:47:08.370 [INFO] [Thread-12710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:47:08.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:47:08.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:47:09.271 [DEBUG] [Thread-12710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:47:09.272 [DEBUG] [Thread-12710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:47:09.320 [DEBUG] [Thread-12710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:47:09.320 [DEBUG] [Thread-12710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:47:09.329 [DEBUG] [Thread-12710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:47:09.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:47:09.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:47:09.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:47:09.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:47:09.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:47:09.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:47:09.366 [DEBUG] [Thread-12710] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:47:16.198 [DEBUG] [Thread-12712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:47:22.838 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:47:22.839 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:47:31.251 [DEBUG] [Thread-12713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:47:34.911 [DEBUG] [Thread-12714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:47:39.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:47:39.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:47:39.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:47:40.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 47, 19), 28.71, 13.66, 0.0, 14.24, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:47:40.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:47:19
2025-11-26T05:47:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:47:40.309 [DEBUG] [Thread-12715] [transport.py] [_log()] starting thread (client mode): 0x7376d150
2025-11-26T05:47:40.309 [DEBUG] [Thread-12715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:47:40.330 [DEBUG] [Thread-12715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:47:40.331 [INFO] [Thread-12715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] client lang: <none>
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] server lang: <none>
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] kex follows: False
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] Compression: none
2025-11-26T05:47:40.332 [DEBUG] [Thread-12715] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:47:40.341 [DEBUG] [Thread-12715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:47:40.342 [DEBUG] [Thread-12715] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:47:40.342 [DEBUG] [Thread-12715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:47:40.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:47:40.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:47:40.344 [DEBUG] [Thread-12715] [transport.py] [_log()] userauth is OK
2025-11-26T05:47:40.344 [DEBUG] [Thread-12715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:47:40.344 [DEBUG] [Thread-12715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:47:40.344 [DEBUG] [Thread-12715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:47:40.344 [DEBUG] [Thread-12715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:47:40.362 [INFO] [Thread-12715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:47:40.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:47:40.971 [DEBUG] [Thread-12715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:47:40.971 [DEBUG] [Thread-12715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:47:40.971 [DEBUG] [Thread-12715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:47:41.012 [DEBUG] [Thread-12715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:47:41.012 [DEBUG] [Thread-12715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:47:41.014 [DEBUG] [Thread-12715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:47:41.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:47:41.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:47:41.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:47:41.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:47:41.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:47:41.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:47:41.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:47:41.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:47:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:47:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.157733 -999.00  +20.20  15.69     18   -4.30 1 1 1 1 1   887    0 25.44 35.90 ----- 12.7 15.7 41.2 17.2 20.7 -26.1 20.6 -25.4 19.9 -24.6 20.0 -25.3
2025-11-26T05:47:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:47:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:47:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.157733
2025-11-26T05:47:41.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:47:41.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:47:41.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:47:41.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:47:41.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:47:41.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:47:19', tmtdew=28.71, humidity=13.66, cloud=0.0, wind=14.24, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:47:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:47:41.032 [DEBUG] [Thread-12715] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:47:41.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:47:41.123 [DEBUG] [Thread-12718] [transport.py] [_log()] starting thread (client mode): 0x7374da50
2025-11-26T05:47:41.124 [DEBUG] [Thread-12718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:47:41.138 [DEBUG] [Thread-12718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:47:41.138 [INFO] [Thread-12718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] client lang: <none>
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] server lang: <none>
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] kex follows: False
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:47:41.146 [DEBUG] [Thread-12718] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:47:41.147 [DEBUG] [Thread-12718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:47:41.147 [DEBUG] [Thread-12718] [transport.py] [_log()] Compression: none
2025-11-26T05:47:41.147 [DEBUG] [Thread-12718] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:47:41.209 [DEBUG] [Thread-12718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:47:41.209 [DEBUG] [Thread-12718] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:47:41.210 [DEBUG] [Thread-12718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:47:41.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:47:41.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:47:41.267 [DEBUG] [Thread-12718] [transport.py] [_log()] userauth is OK
2025-11-26T05:47:41.267 [DEBUG] [Thread-12718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:47:41.267 [DEBUG] [Thread-12718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:47:41.268 [DEBUG] [Thread-12718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:47:41.268 [DEBUG] [Thread-12718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:47:41.286 [INFO] [Thread-12718] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:47:41.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:47:41.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:47:42.116 [DEBUG] [Thread-12718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:47:42.117 [DEBUG] [Thread-12718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:47:42.165 [DEBUG] [Thread-12718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:47:42.165 [DEBUG] [Thread-12718] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:47:42.174 [DEBUG] [Thread-12718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:47:42.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:47:42.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:47:42.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:47:42.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:47:42.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:47:42.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:47:42.211 [DEBUG] [Thread-12718] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:47:46.288 [DEBUG] [Thread-12720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:48:01.338 [DEBUG] [Thread-12721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:48:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:48:12.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:48:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:48:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 47, 51), 28.77, 13.6, 0.0, 13.5, 19.9, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:48:12.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:47:51
2025-11-26T05:48:13.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:48:13.191 [DEBUG] [Thread-12722] [transport.py] [_log()] starting thread (client mode): 0x7376ecb0
2025-11-26T05:48:13.191 [DEBUG] [Thread-12722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:48:13.213 [DEBUG] [Thread-12722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:48:13.213 [INFO] [Thread-12722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:48:13.216 [DEBUG] [Thread-12722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:48:13.217 [DEBUG] [Thread-12722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:48:13.217 [DEBUG] [Thread-12722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:48:13.217 [DEBUG] [Thread-12722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:48:13.217 [DEBUG] [Thread-12722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:48:13.217 [DEBUG] [Thread-12722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:48:13.217 [DEBUG] [Thread-12722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:48:13.217 [DEBUG] [Thread-12722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:48:13.217 [DEBUG] [Thread-12722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:48:13.217 [DEBUG] [Thread-12722] [transport.py] [_log()] client lang: <none>
2025-11-26T05:48:13.218 [DEBUG] [Thread-12722] [transport.py] [_log()] server lang: <none>
2025-11-26T05:48:13.218 [DEBUG] [Thread-12722] [transport.py] [_log()] kex follows: False
2025-11-26T05:48:13.218 [DEBUG] [Thread-12722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:48:13.218 [DEBUG] [Thread-12722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:48:13.218 [DEBUG] [Thread-12722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:48:13.218 [DEBUG] [Thread-12722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:48:13.218 [DEBUG] [Thread-12722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:48:13.218 [DEBUG] [Thread-12722] [transport.py] [_log()] Compression: none
2025-11-26T05:48:13.218 [DEBUG] [Thread-12722] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:48:13.239 [DEBUG] [Thread-12722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:48:13.240 [DEBUG] [Thread-12722] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:48:13.240 [DEBUG] [Thread-12722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:48:13.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:48:13.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:48:13.243 [DEBUG] [Thread-12722] [transport.py] [_log()] userauth is OK
2025-11-26T05:48:13.243 [DEBUG] [Thread-12722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:48:13.243 [DEBUG] [Thread-12722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:48:13.243 [DEBUG] [Thread-12722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:48:13.243 [DEBUG] [Thread-12722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:48:13.268 [INFO] [Thread-12722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:48:13.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:48:13.911 [DEBUG] [Thread-12722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:48:13.912 [DEBUG] [Thread-12722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:48:13.912 [DEBUG] [Thread-12722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:48:13.953 [DEBUG] [Thread-12722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:48:13.953 [DEBUG] [Thread-12722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:48:13.957 [DEBUG] [Thread-12722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:48:13.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:48:13.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:48:13.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:48:13.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:48:13.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:48:13.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:48:13.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:48:13.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:48:13.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:48:13.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.158080 -999.00  +20.10  14.78     18   -4.30 1 1 1 1 1   887    0 25.62 33.01 ----- 13.1 14.8 45.6 17.7 20.7 -26.4 20.6 -25.5 19.9 -24.5 20.0 -25.3
2025-11-26T05:48:13.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:48:13.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:48:13.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.158080
2025-11-26T05:48:13.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:48:13.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:48:13.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:48:13.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:48:13.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:48:13.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:47:51', tmtdew=28.77, humidity=13.6, cloud=0.0, wind=13.5, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:47:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:48:13.986 [DEBUG] [Thread-12722] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:48:14.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:48:14.079 [DEBUG] [Thread-12725] [transport.py] [_log()] starting thread (client mode): 0x7376c4f0
2025-11-26T05:48:14.080 [DEBUG] [Thread-12725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:48:14.094 [DEBUG] [Thread-12725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:48:14.094 [INFO] [Thread-12725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:48:14.101 [DEBUG] [Thread-12725] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:48:14.102 [DEBUG] [Thread-12725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:48:14.102 [DEBUG] [Thread-12725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:48:14.102 [DEBUG] [Thread-12725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:48:14.102 [DEBUG] [Thread-12725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:48:14.102 [DEBUG] [Thread-12725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:48:14.102 [DEBUG] [Thread-12725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:48:14.103 [DEBUG] [Thread-12725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:48:14.103 [DEBUG] [Thread-12725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:48:14.103 [DEBUG] [Thread-12725] [transport.py] [_log()] client lang: <none>
2025-11-26T05:48:14.103 [DEBUG] [Thread-12725] [transport.py] [_log()] server lang: <none>
2025-11-26T05:48:14.103 [DEBUG] [Thread-12725] [transport.py] [_log()] kex follows: False
2025-11-26T05:48:14.103 [DEBUG] [Thread-12725] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:48:14.103 [DEBUG] [Thread-12725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:48:14.103 [DEBUG] [Thread-12725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:48:14.104 [DEBUG] [Thread-12725] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:48:14.104 [DEBUG] [Thread-12725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:48:14.104 [DEBUG] [Thread-12725] [transport.py] [_log()] Compression: none
2025-11-26T05:48:14.104 [DEBUG] [Thread-12725] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:48:14.160 [DEBUG] [Thread-12725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:48:14.160 [DEBUG] [Thread-12725] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:48:14.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:48:14.161 [DEBUG] [Thread-12725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:48:14.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:48:14.220 [DEBUG] [Thread-12725] [transport.py] [_log()] userauth is OK
2025-11-26T05:48:14.220 [DEBUG] [Thread-12725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:48:14.220 [DEBUG] [Thread-12725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:48:14.220 [DEBUG] [Thread-12725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:48:14.221 [DEBUG] [Thread-12725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:48:14.240 [INFO] [Thread-12725] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:48:14.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:48:14.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:48:15.034 [DEBUG] [Thread-12725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:48:15.034 [DEBUG] [Thread-12725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:48:15.082 [DEBUG] [Thread-12725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:48:15.082 [DEBUG] [Thread-12725] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:48:15.091 [DEBUG] [Thread-12725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:48:15.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:48:15.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:48:15.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
2025-11-26T05:48:15.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:48:15.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:48:15.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:48:15.128 [DEBUG] [Thread-12725] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:48:16.373 [DEBUG] [Thread-12727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:48:22.978 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:48:22.979 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:48:31.425 [DEBUG] [Thread-12728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:48:34.959 [DEBUG] [Thread-12729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:48:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:48:45.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:48:45.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:48:45.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 48, 23), 28.76, 13.61, 0.0, 15.51, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:48:45.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:48:23
2025-11-26T05:48:45.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:48:46.072 [DEBUG] [Thread-12730] [transport.py] [_log()] starting thread (client mode): 0x737c6ad0
2025-11-26T05:48:46.072 [DEBUG] [Thread-12730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:48:46.093 [DEBUG] [Thread-12730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:48:46.093 [INFO] [Thread-12730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:48:46.094 [DEBUG] [Thread-12730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:48:46.094 [DEBUG] [Thread-12730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:48:46.094 [DEBUG] [Thread-12730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:48:46.094 [DEBUG] [Thread-12730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:48:46.094 [DEBUG] [Thread-12730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] client lang: <none>
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] server lang: <none>
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] kex follows: False
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] Compression: none
2025-11-26T05:48:46.095 [DEBUG] [Thread-12730] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:48:46.103 [DEBUG] [Thread-12730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:48:46.103 [DEBUG] [Thread-12730] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:48:46.104 [DEBUG] [Thread-12730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:48:46.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:48:46.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:48:46.105 [DEBUG] [Thread-12730] [transport.py] [_log()] userauth is OK
2025-11-26T05:48:46.105 [DEBUG] [Thread-12730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:48:46.105 [DEBUG] [Thread-12730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:48:46.106 [DEBUG] [Thread-12730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:48:46.106 [DEBUG] [Thread-12730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:48:46.123 [INFO] [Thread-12730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:48:46.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:48:46.453 [DEBUG] [Thread-12732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:48:46.706 [DEBUG] [Thread-12730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:48:46.707 [DEBUG] [Thread-12730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:48:46.707 [DEBUG] [Thread-12730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:48:46.748 [DEBUG] [Thread-12730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:48:46.748 [DEBUG] [Thread-12730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:48:46.752 [DEBUG] [Thread-12730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:48:46.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:48:46.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:48:46.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:48:46.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:48:46.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:48:46.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:48:46.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:48:46.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:48:46.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:48:46.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.158775 -999.00  +20.10  13.82     18   -4.30 1 1 1 1 1   887    0 24.82 27.38 ----- 14.4 13.8 39.6 16.6 20.8 -26.5 20.7 -25.5 20.0 -24.4 20.1 -25.3
2025-11-26T05:48:46.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:48:46.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:48:46.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.158775
2025-11-26T05:48:46.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:48:46.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:48:46.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:48:46.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:48:46.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:48:46.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:48:23', tmtdew=28.76, humidity=13.61, cloud=0.0, wind=15.51, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:48:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:48:46.781 [DEBUG] [Thread-12730] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:48:46.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:48:46.873 [DEBUG] [Thread-12734] [transport.py] [_log()] starting thread (client mode): 0x7376dc60
2025-11-26T05:48:46.874 [DEBUG] [Thread-12734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:48:46.888 [DEBUG] [Thread-12734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:48:46.888 [INFO] [Thread-12734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:48:46.896 [DEBUG] [Thread-12734] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:48:46.896 [DEBUG] [Thread-12734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:48:46.896 [DEBUG] [Thread-12734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:48:46.896 [DEBUG] [Thread-12734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:48:46.897 [DEBUG] [Thread-12734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:48:46.897 [DEBUG] [Thread-12734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:48:46.897 [DEBUG] [Thread-12734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:48:46.897 [DEBUG] [Thread-12734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:48:46.897 [DEBUG] [Thread-12734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:48:46.897 [DEBUG] [Thread-12734] [transport.py] [_log()] client lang: <none>
2025-11-26T05:48:46.897 [DEBUG] [Thread-12734] [transport.py] [_log()] server lang: <none>
2025-11-26T05:48:46.897 [DEBUG] [Thread-12734] [transport.py] [_log()] kex follows: False
2025-11-26T05:48:46.897 [DEBUG] [Thread-12734] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:48:46.898 [DEBUG] [Thread-12734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:48:46.898 [DEBUG] [Thread-12734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:48:46.898 [DEBUG] [Thread-12734] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:48:46.898 [DEBUG] [Thread-12734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:48:46.898 [DEBUG] [Thread-12734] [transport.py] [_log()] Compression: none
2025-11-26T05:48:46.898 [DEBUG] [Thread-12734] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:48:46.957 [DEBUG] [Thread-12734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:48:46.958 [DEBUG] [Thread-12734] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:48:46.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:48:46.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:48:46.961 [DEBUG] [Thread-12734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:48:47.017 [DEBUG] [Thread-12734] [transport.py] [_log()] userauth is OK
2025-11-26T05:48:47.017 [DEBUG] [Thread-12734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:48:47.017 [DEBUG] [Thread-12734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:48:47.018 [DEBUG] [Thread-12734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:48:47.018 [DEBUG] [Thread-12734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:48:47.036 [INFO] [Thread-12734] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:48:47.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:48:47.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:48:47.866 [DEBUG] [Thread-12734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:48:47.867 [DEBUG] [Thread-12734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:48:47.916 [DEBUG] [Thread-12734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:48:47.917 [DEBUG] [Thread-12734] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:48:47.926 [DEBUG] [Thread-12734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:48:47.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:48:47.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:48:47.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:48:47.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:48:47.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:48:47.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:48:47.961 [DEBUG] [Thread-12734] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:49:01.493 [DEBUG] [Thread-12736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:49:16.543 [DEBUG] [Thread-12737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:49:17.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:49:17.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:49:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:49:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 48, 55), 28.87, 13.55, 0.0, 15.25, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:49:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:48:55
2025-11-26T05:49:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:49:18.914 [DEBUG] [Thread-12738] [transport.py] [_log()] starting thread (client mode): 0x7374dbd0
2025-11-26T05:49:18.914 [DEBUG] [Thread-12738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:49:18.935 [DEBUG] [Thread-12738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:49:18.935 [INFO] [Thread-12738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:49:18.939 [DEBUG] [Thread-12738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:49:18.939 [DEBUG] [Thread-12738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:49:18.939 [DEBUG] [Thread-12738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:49:18.939 [DEBUG] [Thread-12738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:49:18.939 [DEBUG] [Thread-12738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:49:18.939 [DEBUG] [Thread-12738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:49:18.939 [DEBUG] [Thread-12738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] client lang: <none>
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] server lang: <none>
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] kex follows: False
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] Compression: none
2025-11-26T05:49:18.940 [DEBUG] [Thread-12738] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:49:18.959 [DEBUG] [Thread-12738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:49:18.960 [DEBUG] [Thread-12738] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:49:18.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:49:18.961 [DEBUG] [Thread-12738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:49:18.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:49:18.964 [DEBUG] [Thread-12738] [transport.py] [_log()] userauth is OK
2025-11-26T05:49:18.964 [DEBUG] [Thread-12738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:49:18.964 [DEBUG] [Thread-12738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:49:18.964 [DEBUG] [Thread-12738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:49:18.964 [DEBUG] [Thread-12738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:49:18.978 [INFO] [Thread-12738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:49:18.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:49:19.570 [DEBUG] [Thread-12738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:49:19.570 [DEBUG] [Thread-12738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:49:19.571 [DEBUG] [Thread-12738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:49:19.611 [DEBUG] [Thread-12738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:49:19.612 [DEBUG] [Thread-12738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:49:19.615 [DEBUG] [Thread-12738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:49:19.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:49:19.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:49:19.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:49:19.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:49:19.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:49:19.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:49:19.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:49:19.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:49:19.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:49:19.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.159122 -999.00  +20.10  12.22     18   -4.30 1 1 1 1 1   887    0 24.53 23.03 ----- 13.5 12.2 38.0 16.9 20.8 -26.3 20.8 -25.5 20.0 -24.4 20.1 -25.3
2025-11-26T05:49:19.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:49:19.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:49:19.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.159122
2025-11-26T05:49:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:49:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:49:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:49:19.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:49:19.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:49:19.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:48:55', tmtdew=28.87, humidity=13.55, cloud=0.0, wind=15.25, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:49:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:49:19.642 [DEBUG] [Thread-12738] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:49:19.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:49:19.739 [DEBUG] [Thread-12741] [transport.py] [_log()] starting thread (client mode): 0x70d748b0
2025-11-26T05:49:19.739 [DEBUG] [Thread-12741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:49:19.754 [DEBUG] [Thread-12741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:49:19.754 [INFO] [Thread-12741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:49:19.762 [DEBUG] [Thread-12741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:49:19.762 [DEBUG] [Thread-12741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:49:19.762 [DEBUG] [Thread-12741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:49:19.762 [DEBUG] [Thread-12741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:49:19.762 [DEBUG] [Thread-12741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:49:19.763 [DEBUG] [Thread-12741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:49:19.763 [DEBUG] [Thread-12741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:49:19.763 [DEBUG] [Thread-12741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:49:19.763 [DEBUG] [Thread-12741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:49:19.763 [DEBUG] [Thread-12741] [transport.py] [_log()] client lang: <none>
2025-11-26T05:49:19.763 [DEBUG] [Thread-12741] [transport.py] [_log()] server lang: <none>
2025-11-26T05:49:19.763 [DEBUG] [Thread-12741] [transport.py] [_log()] kex follows: False
2025-11-26T05:49:19.763 [DEBUG] [Thread-12741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:49:19.763 [DEBUG] [Thread-12741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:49:19.764 [DEBUG] [Thread-12741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:49:19.764 [DEBUG] [Thread-12741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:49:19.764 [DEBUG] [Thread-12741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:49:19.764 [DEBUG] [Thread-12741] [transport.py] [_log()] Compression: none
2025-11-26T05:49:19.764 [DEBUG] [Thread-12741] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:49:19.825 [DEBUG] [Thread-12741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:49:19.826 [DEBUG] [Thread-12741] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:49:19.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:49:19.827 [DEBUG] [Thread-12741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:49:19.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:49:19.887 [DEBUG] [Thread-12741] [transport.py] [_log()] userauth is OK
2025-11-26T05:49:19.887 [DEBUG] [Thread-12741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:49:19.887 [DEBUG] [Thread-12741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:49:19.887 [DEBUG] [Thread-12741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:49:19.887 [DEBUG] [Thread-12741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:49:19.908 [INFO] [Thread-12741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:49:19.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:49:19.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:49:20.714 [DEBUG] [Thread-12741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:49:20.714 [DEBUG] [Thread-12741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:49:20.762 [DEBUG] [Thread-12741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:49:20.762 [DEBUG] [Thread-12741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:49:20.772 [DEBUG] [Thread-12741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:49:20.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:49:20.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:49:20.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:49:20.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:49:20.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:49:20.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:49:20.811 [DEBUG] [Thread-12741] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:49:23.118 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:49:23.120 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:49:31.578 [DEBUG] [Thread-12743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:49:35.010 [DEBUG] [Thread-12744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:49:46.628 [DEBUG] [Thread-12745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:49:50.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:49:50.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:49:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:49:51.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 49, 27), 28.76, 13.66, 0.0, 13.39, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:49:51.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:49:27
2025-11-26T05:49:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:49:51.765 [DEBUG] [Thread-12746] [transport.py] [_log()] starting thread (client mode): 0x7374e200
2025-11-26T05:49:51.765 [DEBUG] [Thread-12746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:49:51.786 [DEBUG] [Thread-12746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:49:51.786 [INFO] [Thread-12746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] client lang: <none>
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] server lang: <none>
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] kex follows: False
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:49:51.789 [DEBUG] [Thread-12746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:49:51.790 [DEBUG] [Thread-12746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:49:51.790 [DEBUG] [Thread-12746] [transport.py] [_log()] Compression: none
2025-11-26T05:49:51.790 [DEBUG] [Thread-12746] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:49:51.805 [DEBUG] [Thread-12746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:49:51.806 [DEBUG] [Thread-12746] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:49:51.806 [DEBUG] [Thread-12746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:49:51.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:49:51.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:49:51.807 [DEBUG] [Thread-12746] [transport.py] [_log()] userauth is OK
2025-11-26T05:49:51.807 [DEBUG] [Thread-12746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:49:51.807 [DEBUG] [Thread-12746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:49:51.807 [DEBUG] [Thread-12746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:49:51.807 [DEBUG] [Thread-12746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:49:51.820 [INFO] [Thread-12746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:49:51.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:49:52.360 [DEBUG] [Thread-12746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:49:52.360 [DEBUG] [Thread-12746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:49:52.360 [DEBUG] [Thread-12746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:49:52.401 [DEBUG] [Thread-12746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:49:52.401 [DEBUG] [Thread-12746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:49:52.404 [DEBUG] [Thread-12746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:49:52.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:49:52.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:49:52.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:49:52.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:49:52.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:49:52.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:49:52.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.159469 -999.00  +20.10  13.11     18   -4.30 1 1 1 1 1   887    0 25.04 23.36 ----- 13.2 13.1 43.4 16.6 20.8 -26.3 20.8 -25.5 20.0 -24.6 20.1 -25.5
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.159469
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:49:52.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:49:27', tmtdew=28.76, humidity=13.66, cloud=0.0, wind=13.39, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:49:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:49:52.424 [DEBUG] [Thread-12746] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:49:52.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:49:52.511 [DEBUG] [Thread-12749] [transport.py] [_log()] starting thread (client mode): 0x70de4370
2025-11-26T05:49:52.511 [DEBUG] [Thread-12749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:49:52.525 [DEBUG] [Thread-12749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:49:52.525 [INFO] [Thread-12749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] client lang: <none>
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] server lang: <none>
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] kex follows: False
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] Compression: none
2025-11-26T05:49:52.533 [DEBUG] [Thread-12749] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:49:52.588 [DEBUG] [Thread-12749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:49:52.588 [DEBUG] [Thread-12749] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:49:52.588 [DEBUG] [Thread-12749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:49:52.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:49:52.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:49:52.645 [DEBUG] [Thread-12749] [transport.py] [_log()] userauth is OK
2025-11-26T05:49:52.645 [DEBUG] [Thread-12749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:49:52.645 [DEBUG] [Thread-12749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:49:52.645 [DEBUG] [Thread-12749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:49:52.645 [DEBUG] [Thread-12749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:49:52.659 [INFO] [Thread-12749] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:49:52.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:49:52.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:49:53.479 [DEBUG] [Thread-12749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:49:53.479 [DEBUG] [Thread-12749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:49:53.527 [DEBUG] [Thread-12749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:49:53.527 [DEBUG] [Thread-12749] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:49:53.536 [DEBUG] [Thread-12749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:49:53.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:49:53.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:49:53.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:49:53.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:49:53.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:49:53.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:49:53.573 [DEBUG] [Thread-12749] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:50:01.660 [DEBUG] [Thread-12751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:50:16.701 [DEBUG] [Thread-12752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:50:23.263 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:50:23.264 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:50:23.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:50:23.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:50:23.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:50:24.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 49, 59), 28.71, 13.66, 0.0, 12.65, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:50:24.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:49:59
2025-11-26T05:50:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:50:24.554 [DEBUG] [Thread-12753] [transport.py] [_log()] starting thread (client mode): 0x7376c040
2025-11-26T05:50:24.554 [DEBUG] [Thread-12753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:50:24.574 [DEBUG] [Thread-12753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:50:24.574 [INFO] [Thread-12753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] client lang: <none>
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] server lang: <none>
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] kex follows: False
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] Compression: none
2025-11-26T05:50:24.578 [DEBUG] [Thread-12753] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:50:24.599 [DEBUG] [Thread-12753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:50:24.599 [DEBUG] [Thread-12753] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:50:24.599 [DEBUG] [Thread-12753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:50:24.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:50:24.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:50:24.600 [DEBUG] [Thread-12753] [transport.py] [_log()] userauth is OK
2025-11-26T05:50:24.600 [DEBUG] [Thread-12753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:50:24.600 [DEBUG] [Thread-12753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:50:24.601 [DEBUG] [Thread-12753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:50:24.601 [DEBUG] [Thread-12753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:50:24.616 [INFO] [Thread-12753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:50:24.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:50:25.185 [DEBUG] [Thread-12753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:50:25.185 [DEBUG] [Thread-12753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:50:25.185 [DEBUG] [Thread-12753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:50:25.226 [DEBUG] [Thread-12753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:50:25.226 [DEBUG] [Thread-12753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:50:25.228 [DEBUG] [Thread-12753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:50:25.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:50:25.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:50:25.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:50:25.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:50:25.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:50:25.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:50:25.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.159816 -999.00  +20.10  15.54     18   -4.30 1 1 1 1 1   887    0 25.27 20.12 ----- 14.4 15.5 40.4 17.7 20.9 -26.2 20.8 -25.4 20.1 -24.5 20.1 -25.1
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.159816
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:50:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:49:59', tmtdew=28.71, humidity=13.66, cloud=0.0, wind=12.65, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:50:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:50:25.243 [DEBUG] [Thread-12753] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:50:25.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:50:25.331 [DEBUG] [Thread-12756] [transport.py] [_log()] starting thread (client mode): 0x70d29360
2025-11-26T05:50:25.331 [DEBUG] [Thread-12756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:50:25.346 [DEBUG] [Thread-12756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:50:25.346 [INFO] [Thread-12756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:50:25.353 [DEBUG] [Thread-12756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] client lang: <none>
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] server lang: <none>
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] kex follows: False
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] Compression: none
2025-11-26T05:50:25.354 [DEBUG] [Thread-12756] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:50:25.409 [DEBUG] [Thread-12756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:50:25.409 [DEBUG] [Thread-12756] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:50:25.409 [DEBUG] [Thread-12756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:50:25.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:50:25.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:50:25.466 [DEBUG] [Thread-12756] [transport.py] [_log()] userauth is OK
2025-11-26T05:50:25.466 [DEBUG] [Thread-12756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:50:25.466 [DEBUG] [Thread-12756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:50:25.466 [DEBUG] [Thread-12756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:50:25.466 [DEBUG] [Thread-12756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:50:25.484 [INFO] [Thread-12756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:50:25.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:50:25.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:50:26.304 [DEBUG] [Thread-12756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:50:26.304 [DEBUG] [Thread-12756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:50:26.352 [DEBUG] [Thread-12756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:50:26.352 [DEBUG] [Thread-12756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:50:26.360 [DEBUG] [Thread-12756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:50:26.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:50:26.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:50:26.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:50:26.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:50:26.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:50:26.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:50:26.392 [DEBUG] [Thread-12756] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:50:31.740 [DEBUG] [Thread-12758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:50:35.062 [DEBUG] [Thread-12759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:50:46.793 [DEBUG] [Thread-12760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:50:56.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:50:56.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:50:56.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:50:57.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 50, 31), 28.73, 13.64, 0.0, 13.27, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:50:57.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:50:31
2025-11-26T05:50:57.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:50:57.360 [DEBUG] [Thread-12761] [transport.py] [_log()] starting thread (client mode): 0x7376ffd0
2025-11-26T05:50:57.360 [DEBUG] [Thread-12761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:50:57.372 [DEBUG] [Thread-12761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:50:57.372 [INFO] [Thread-12761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:50:57.375 [DEBUG] [Thread-12761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] client lang: <none>
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] server lang: <none>
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] kex follows: False
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] Compression: none
2025-11-26T05:50:57.376 [DEBUG] [Thread-12761] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:50:57.394 [DEBUG] [Thread-12761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:50:57.394 [DEBUG] [Thread-12761] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:50:57.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:50:57.395 [DEBUG] [Thread-12761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:50:57.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:50:57.397 [DEBUG] [Thread-12761] [transport.py] [_log()] userauth is OK
2025-11-26T05:50:57.398 [DEBUG] [Thread-12761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:50:57.398 [DEBUG] [Thread-12761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:50:57.398 [DEBUG] [Thread-12761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:50:57.398 [DEBUG] [Thread-12761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:50:57.422 [INFO] [Thread-12761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:50:57.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:50:58.045 [DEBUG] [Thread-12761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:50:58.045 [DEBUG] [Thread-12761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:50:58.046 [DEBUG] [Thread-12761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:50:58.087 [DEBUG] [Thread-12761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:50:58.087 [DEBUG] [Thread-12761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:50:58.091 [DEBUG] [Thread-12761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:50:58.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:50:58.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:50:58.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:50:58.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:50:58.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:50:58.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:50:58.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:50:58.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:50:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:50:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.160164 -999.00  +20.10  13.70     18   -4.30 1 1 1 1 1   887    0 24.71 20.97 ----- 12.8 13.7 43.6 15.6 20.9 -26.3 20.9 -25.7 20.0 -24.3 20.1 -25.4
2025-11-26T05:50:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:50:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:50:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.160164
2025-11-26T05:50:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:50:58.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:50:58.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:50:58.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:50:58.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:50:58.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:50:31', tmtdew=28.73, humidity=13.64, cloud=0.0, wind=13.27, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:50:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:50:58.119 [DEBUG] [Thread-12761] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:50:58.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:50:58.219 [DEBUG] [Thread-12764] [transport.py] [_log()] starting thread (client mode): 0x73782cb0
2025-11-26T05:50:58.219 [DEBUG] [Thread-12764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:50:58.237 [DEBUG] [Thread-12764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:50:58.237 [INFO] [Thread-12764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:50:58.245 [DEBUG] [Thread-12764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:50:58.245 [DEBUG] [Thread-12764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:50:58.246 [DEBUG] [Thread-12764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:50:58.246 [DEBUG] [Thread-12764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:50:58.246 [DEBUG] [Thread-12764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:50:58.246 [DEBUG] [Thread-12764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:50:58.246 [DEBUG] [Thread-12764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:50:58.246 [DEBUG] [Thread-12764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:50:58.246 [DEBUG] [Thread-12764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:50:58.246 [DEBUG] [Thread-12764] [transport.py] [_log()] client lang: <none>
2025-11-26T05:50:58.246 [DEBUG] [Thread-12764] [transport.py] [_log()] server lang: <none>
2025-11-26T05:50:58.247 [DEBUG] [Thread-12764] [transport.py] [_log()] kex follows: False
2025-11-26T05:50:58.247 [DEBUG] [Thread-12764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:50:58.247 [DEBUG] [Thread-12764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:50:58.247 [DEBUG] [Thread-12764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:50:58.247 [DEBUG] [Thread-12764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:50:58.247 [DEBUG] [Thread-12764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:50:58.247 [DEBUG] [Thread-12764] [transport.py] [_log()] Compression: none
2025-11-26T05:50:58.247 [DEBUG] [Thread-12764] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:50:58.303 [DEBUG] [Thread-12764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:50:58.304 [DEBUG] [Thread-12764] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:50:58.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:50:58.305 [DEBUG] [Thread-12764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:50:58.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:50:58.359 [DEBUG] [Thread-12764] [transport.py] [_log()] userauth is OK
2025-11-26T05:50:58.359 [DEBUG] [Thread-12764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:50:58.359 [DEBUG] [Thread-12764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:50:58.359 [DEBUG] [Thread-12764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:50:58.360 [DEBUG] [Thread-12764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:50:58.380 [INFO] [Thread-12764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:50:58.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:50:58.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:50:59.203 [DEBUG] [Thread-12764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:50:59.203 [DEBUG] [Thread-12764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:50:59.252 [DEBUG] [Thread-12764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:50:59.252 [DEBUG] [Thread-12764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:50:59.264 [DEBUG] [Thread-12764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:50:59.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:50:59.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:50: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') -> 00000000
2025-11-26T05:50:59.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:50:59.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:50:59.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:50:59.303 [DEBUG] [Thread-12764] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:51:01.830 [DEBUG] [Thread-12766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:51:16.874 [DEBUG] [Thread-12767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:51:23.403 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:51:23.404 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:51:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:51:29.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:51:29.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:51:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 51, 3), 28.75, 13.63, 0.0, 12.92, 19.95, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:51:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:51:03
2025-11-26T05:51:30.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:51:30.251 [DEBUG] [Thread-12768] [transport.py] [_log()] starting thread (client mode): 0x70d1cc70
2025-11-26T05:51:30.251 [DEBUG] [Thread-12768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:51:30.271 [DEBUG] [Thread-12768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:51:30.271 [INFO] [Thread-12768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:51:30.274 [DEBUG] [Thread-12768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:51:30.274 [DEBUG] [Thread-12768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:51:30.274 [DEBUG] [Thread-12768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] client lang: <none>
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] server lang: <none>
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] kex follows: False
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] Compression: none
2025-11-26T05:51:30.275 [DEBUG] [Thread-12768] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:51:30.284 [DEBUG] [Thread-12768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:51:30.285 [DEBUG] [Thread-12768] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:51:30.285 [DEBUG] [Thread-12768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:51:30.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:51:30.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:51:30.328 [DEBUG] [Thread-12768] [transport.py] [_log()] userauth is OK
2025-11-26T05:51:30.329 [DEBUG] [Thread-12768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:51:30.329 [DEBUG] [Thread-12768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:51:30.329 [DEBUG] [Thread-12768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:51:30.329 [DEBUG] [Thread-12768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:51:30.361 [INFO] [Thread-12768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:51:30.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:51:31.002 [DEBUG] [Thread-12768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:51:31.002 [DEBUG] [Thread-12768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:51:31.003 [DEBUG] [Thread-12768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:51:31.044 [DEBUG] [Thread-12768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:51:31.044 [DEBUG] [Thread-12768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:51:31.048 [DEBUG] [Thread-12768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:51:31.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:51:31.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:51:31.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:51:31.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:51:31.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:51:31.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:51:31.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:51:31.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:51:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:51:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.160511 -999.00  +20.20  14.44     18   -4.30 1 1 1 1 1   887    0 25.24 16.35 ----- 15.7 14.4 39.8 18.8 20.9 -26.4 20.9 -25.6 20.1 -24.5 20.1 -25.3
2025-11-26T05:51:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:51:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:51:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.160511
2025-11-26T05:51:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:51:31.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:51:31.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:51:31.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:51:31.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:51:31.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:51:03', tmtdew=28.75, humidity=13.63, cloud=0.0, wind=12.92, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:51:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:51:31.075 [DEBUG] [Thread-12768] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:51:31.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:51:31.170 [DEBUG] [Thread-12771] [transport.py] [_log()] starting thread (client mode): 0x70d74700
2025-11-26T05:51:31.170 [DEBUG] [Thread-12771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:51:31.184 [DEBUG] [Thread-12771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:51:31.184 [INFO] [Thread-12771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:51:31.192 [DEBUG] [Thread-12771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:51:31.192 [DEBUG] [Thread-12771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] client lang: <none>
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] server lang: <none>
2025-11-26T05:51:31.193 [DEBUG] [Thread-12771] [transport.py] [_log()] kex follows: False
2025-11-26T05:51:31.194 [DEBUG] [Thread-12771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:51:31.194 [DEBUG] [Thread-12771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:51:31.194 [DEBUG] [Thread-12771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:51:31.194 [DEBUG] [Thread-12771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:51:31.194 [DEBUG] [Thread-12771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:51:31.194 [DEBUG] [Thread-12771] [transport.py] [_log()] Compression: none
2025-11-26T05:51:31.194 [DEBUG] [Thread-12771] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:51:31.253 [DEBUG] [Thread-12771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:51:31.254 [DEBUG] [Thread-12771] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:51:31.254 [DEBUG] [Thread-12771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:51:31.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:51:31.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:51:31.316 [DEBUG] [Thread-12771] [transport.py] [_log()] userauth is OK
2025-11-26T05:51:31.316 [DEBUG] [Thread-12771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:51:31.316 [DEBUG] [Thread-12771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:51:31.317 [DEBUG] [Thread-12771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:51:31.317 [DEBUG] [Thread-12771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:51:31.336 [INFO] [Thread-12771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:51:31.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:51:31.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:51:31.912 [DEBUG] [Thread-12773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:51:32.209 [DEBUG] [Thread-12771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:51:32.209 [DEBUG] [Thread-12771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:51:32.257 [DEBUG] [Thread-12771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:51:32.257 [DEBUG] [Thread-12771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:51:32.266 [DEBUG] [Thread-12771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:51:32.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:51:32.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:51:32.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:51:32.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:51:32.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:51:32.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:51:32.303 [DEBUG] [Thread-12771] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:51:35.117 [DEBUG] [Thread-12774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:51:46.961 [DEBUG] [Thread-12775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:52:02.000 [DEBUG] [Thread-12776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:52:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:52:02.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:52:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:52:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 51, 35), 28.8, 13.63, 0.0, 13.87, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:52:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:51:35
2025-11-26T05:52:03.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:52:03.237 [DEBUG] [Thread-12777] [transport.py] [_log()] starting thread (client mode): 0x70d2b730
2025-11-26T05:52:03.237 [DEBUG] [Thread-12777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:52:03.259 [DEBUG] [Thread-12777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:52:03.259 [INFO] [Thread-12777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:52:03.262 [DEBUG] [Thread-12777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] client lang: <none>
2025-11-26T05:52:03.263 [DEBUG] [Thread-12777] [transport.py] [_log()] server lang: <none>
2025-11-26T05:52:03.264 [DEBUG] [Thread-12777] [transport.py] [_log()] kex follows: False
2025-11-26T05:52:03.264 [DEBUG] [Thread-12777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:52:03.264 [DEBUG] [Thread-12777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:52:03.264 [DEBUG] [Thread-12777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:52:03.264 [DEBUG] [Thread-12777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:52:03.264 [DEBUG] [Thread-12777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:52:03.264 [DEBUG] [Thread-12777] [transport.py] [_log()] Compression: none
2025-11-26T05:52:03.264 [DEBUG] [Thread-12777] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:52:03.283 [DEBUG] [Thread-12777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:52:03.284 [DEBUG] [Thread-12777] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:52:03.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:52:03.285 [DEBUG] [Thread-12777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:52:03.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:52:03.287 [DEBUG] [Thread-12777] [transport.py] [_log()] userauth is OK
2025-11-26T05:52:03.288 [DEBUG] [Thread-12777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:52:03.288 [DEBUG] [Thread-12777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:52:03.288 [DEBUG] [Thread-12777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:52:03.288 [DEBUG] [Thread-12777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:52:03.326 [INFO] [Thread-12777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:52:03.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:52:03.914 [DEBUG] [Thread-12777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:52:03.914 [DEBUG] [Thread-12777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:52:03.914 [DEBUG] [Thread-12777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:52:03.955 [DEBUG] [Thread-12777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:52:03.955 [DEBUG] [Thread-12777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:52:03.958 [DEBUG] [Thread-12777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:52:03.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:52:03.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:52:03.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:52:03.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:52:03.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:52:03.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:52:03.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:52:03.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:52:03.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:52:03.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.160511 -999.00  +20.20  14.44     18   -4.30 1 1 1 1 1   887    0 25.24 16.35 ----- 15.7 14.4 39.8 18.8 20.9 -26.4 20.9 -25.6 20.1 -24.5 20.1 -25.3
2025-11-26T05:52:03.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:52:03.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:52:03.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.160511
2025-11-26T05:52:03.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:52:03.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:52:03.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:52:03.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:52:03.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:52:03.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:51:35', tmtdew=28.8, humidity=13.63, cloud=0.0, wind=13.87, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:51:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:52:03.985 [DEBUG] [Thread-12777] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:52:04.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:52:04.083 [DEBUG] [Thread-12780] [transport.py] [_log()] starting thread (client mode): 0x70d7e170
2025-11-26T05:52:04.083 [DEBUG] [Thread-12780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:52:04.100 [DEBUG] [Thread-12780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:52:04.101 [INFO] [Thread-12780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:52:04.111 [DEBUG] [Thread-12780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] client lang: <none>
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] server lang: <none>
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] kex follows: False
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:52:04.112 [DEBUG] [Thread-12780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:52:04.113 [DEBUG] [Thread-12780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:52:04.113 [DEBUG] [Thread-12780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:52:04.113 [DEBUG] [Thread-12780] [transport.py] [_log()] Compression: none
2025-11-26T05:52:04.113 [DEBUG] [Thread-12780] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:52:04.168 [DEBUG] [Thread-12780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:52:04.169 [DEBUG] [Thread-12780] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:52:04.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:52:04.170 [DEBUG] [Thread-12780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:52:04.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:52:04.229 [DEBUG] [Thread-12780] [transport.py] [_log()] userauth is OK
2025-11-26T05:52:04.229 [DEBUG] [Thread-12780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:52:04.229 [DEBUG] [Thread-12780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:52:04.229 [DEBUG] [Thread-12780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:52:04.229 [DEBUG] [Thread-12780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:52:04.252 [INFO] [Thread-12780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:52:04.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:52:04.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:52:05.091 [DEBUG] [Thread-12780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:52:05.091 [DEBUG] [Thread-12780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:52:05.139 [DEBUG] [Thread-12780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:52:05.139 [DEBUG] [Thread-12780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:52:05.148 [DEBUG] [Thread-12780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:52:05.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:52:05.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:52:05.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:52:05.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:52:05.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:52:05.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:52:05.185 [DEBUG] [Thread-12780] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:52:17.032 [DEBUG] [Thread-12782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:52:23.550 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:52:23.551 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:52:32.077 [DEBUG] [Thread-12783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:52:35.173 [DEBUG] [Thread-12784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:52:35.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:52:35.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:52:35.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:52:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 52, 7), 28.83, 13.6, 0.0, 14.35, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:52:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:52:07
2025-11-26T05:52:35.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:52:36.098 [DEBUG] [Thread-12785] [transport.py] [_log()] starting thread (client mode): 0x70d29d50
2025-11-26T05:52:36.098 [DEBUG] [Thread-12785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:52:36.119 [DEBUG] [Thread-12785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:52:36.119 [INFO] [Thread-12785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] client lang: <none>
2025-11-26T05:52:36.121 [DEBUG] [Thread-12785] [transport.py] [_log()] server lang: <none>
2025-11-26T05:52:36.122 [DEBUG] [Thread-12785] [transport.py] [_log()] kex follows: False
2025-11-26T05:52:36.122 [DEBUG] [Thread-12785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:52:36.122 [DEBUG] [Thread-12785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:52:36.122 [DEBUG] [Thread-12785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:52:36.122 [DEBUG] [Thread-12785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:52:36.122 [DEBUG] [Thread-12785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:52:36.122 [DEBUG] [Thread-12785] [transport.py] [_log()] Compression: none
2025-11-26T05:52:36.122 [DEBUG] [Thread-12785] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:52:36.132 [DEBUG] [Thread-12785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:52:36.133 [DEBUG] [Thread-12785] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:52:36.133 [DEBUG] [Thread-12785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:52:36.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:52:36.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:52:36.135 [DEBUG] [Thread-12785] [transport.py] [_log()] userauth is OK
2025-11-26T05:52:36.135 [DEBUG] [Thread-12785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:52:36.135 [DEBUG] [Thread-12785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:52:36.136 [DEBUG] [Thread-12785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:52:36.136 [DEBUG] [Thread-12785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:52:36.155 [INFO] [Thread-12785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:52:36.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:52:36.923 [DEBUG] [Thread-12785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:52:36.923 [DEBUG] [Thread-12785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:52:36.923 [DEBUG] [Thread-12785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:52:36.964 [DEBUG] [Thread-12785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:52:36.964 [DEBUG] [Thread-12785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:52:36.967 [DEBUG] [Thread-12785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:52:36.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:52:36.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:52:36.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:52:36.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:52:36.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:52:36.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:52:36.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:52:36.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:52:36.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:52:36.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.160858 -999.00  +20.20  14.48     18   -4.30 1 1 1 1 1   887    0 25.01 14.18 ----- 14.6 14.5 35.2 18.8 20.9 -26.4 20.9 -25.5 20.1 -24.5 20.2 -25.4
2025-11-26T05:52:36.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:52:36.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:52:36.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.160858
2025-11-26T05:52:36.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:52:36.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:52:36.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:52:36.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:52:36.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:52:36.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:52:07', tmtdew=28.83, humidity=13.6, cloud=0.0, wind=14.35, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:51:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:52:36.994 [DEBUG] [Thread-12785] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:52:37.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:52:37.098 [DEBUG] [Thread-12788] [transport.py] [_log()] starting thread (client mode): 0x70d1c370
2025-11-26T05:52:37.098 [DEBUG] [Thread-12788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:52:37.114 [DEBUG] [Thread-12788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:52:37.114 [INFO] [Thread-12788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:52:37.123 [DEBUG] [Thread-12788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:52:37.123 [DEBUG] [Thread-12788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:52:37.123 [DEBUG] [Thread-12788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:52:37.124 [DEBUG] [Thread-12788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:52:37.124 [DEBUG] [Thread-12788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:52:37.124 [DEBUG] [Thread-12788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:52:37.124 [DEBUG] [Thread-12788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:52:37.124 [DEBUG] [Thread-12788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:52:37.124 [DEBUG] [Thread-12788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:52:37.124 [DEBUG] [Thread-12788] [transport.py] [_log()] client lang: <none>
2025-11-26T05:52:37.124 [DEBUG] [Thread-12788] [transport.py] [_log()] server lang: <none>
2025-11-26T05:52:37.124 [DEBUG] [Thread-12788] [transport.py] [_log()] kex follows: False
2025-11-26T05:52:37.125 [DEBUG] [Thread-12788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:52:37.125 [DEBUG] [Thread-12788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:52:37.125 [DEBUG] [Thread-12788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:52:37.125 [DEBUG] [Thread-12788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:52:37.125 [DEBUG] [Thread-12788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:52:37.125 [DEBUG] [Thread-12788] [transport.py] [_log()] Compression: none
2025-11-26T05:52:37.125 [DEBUG] [Thread-12788] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:52:37.182 [DEBUG] [Thread-12788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:52:37.183 [DEBUG] [Thread-12788] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:52:37.183 [DEBUG] [Thread-12788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:52:37.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:52:37.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:52:37.241 [DEBUG] [Thread-12788] [transport.py] [_log()] userauth is OK
2025-11-26T05:52:37.241 [DEBUG] [Thread-12788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:52:37.241 [DEBUG] [Thread-12788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:52:37.241 [DEBUG] [Thread-12788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:52:37.241 [DEBUG] [Thread-12788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:52:37.259 [INFO] [Thread-12788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:52:37.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:52:37.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:52:38.114 [DEBUG] [Thread-12788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:52:38.114 [DEBUG] [Thread-12788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:52:38.162 [DEBUG] [Thread-12788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:52:38.162 [DEBUG] [Thread-12788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:52:38.172 [DEBUG] [Thread-12788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:52:38.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:52:38.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:52:38.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:52:38.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:52:38.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:52:38.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:52:38.209 [DEBUG] [Thread-12788] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:52:47.113 [DEBUG] [Thread-12790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:53:02.168 [DEBUG] [Thread-12791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:53:08.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:53:08.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:53:08.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:53:08.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 52, 39), 28.79, 13.6, 0.0, 14.54, 20.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:53:08.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:52:39
2025-11-26T05:53:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:53:09.160 [DEBUG] [Thread-12792] [transport.py] [_log()] starting thread (client mode): 0x70d1fee0
2025-11-26T05:53:09.160 [DEBUG] [Thread-12792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:53:09.180 [DEBUG] [Thread-12792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:53:09.180 [INFO] [Thread-12792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:53:09.183 [DEBUG] [Thread-12792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:53:09.183 [DEBUG] [Thread-12792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] client lang: <none>
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] server lang: <none>
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] kex follows: False
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] Compression: none
2025-11-26T05:53:09.184 [DEBUG] [Thread-12792] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:53:09.200 [DEBUG] [Thread-12792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:53:09.201 [DEBUG] [Thread-12792] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:53:09.201 [DEBUG] [Thread-12792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:53:09.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:53:09.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:53:09.203 [DEBUG] [Thread-12792] [transport.py] [_log()] userauth is OK
2025-11-26T05:53:09.203 [DEBUG] [Thread-12792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:53:09.204 [DEBUG] [Thread-12792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:53:09.204 [DEBUG] [Thread-12792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:53:09.204 [DEBUG] [Thread-12792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:53:09.230 [INFO] [Thread-12792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:53:09.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:53:09.894 [DEBUG] [Thread-12792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:53:09.894 [DEBUG] [Thread-12792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:53:09.895 [DEBUG] [Thread-12792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:53:09.935 [DEBUG] [Thread-12792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:53:09.935 [DEBUG] [Thread-12792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:53:09.938 [DEBUG] [Thread-12792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:53:09.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:53:09.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:53:09.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:53:09.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:53:09.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:53:09.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:53:09.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:53:09.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:53:09.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:53:09.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.161205 -999.00  +20.20  14.62     18   -4.40 1 1 1 1 1   887    0 24.80 12.38 ----- 12.6 14.6 33.5 19.2 21.0 -26.3 20.9 -25.6 20.1 -24.5 20.2 -25.5
2025-11-26T05:53:09.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:53:09.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:53:09.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.161205
2025-11-26T05:53:09.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:53:09.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:53:09.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:53:09.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:53:09.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:53:09.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:52:39', tmtdew=28.79, humidity=13.6, cloud=0.0, wind=14.54, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:52:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:53:09.965 [DEBUG] [Thread-12792] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:53:10.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:53:10.063 [DEBUG] [Thread-12795] [transport.py] [_log()] starting thread (client mode): 0x761db9a0
2025-11-26T05:53:10.063 [DEBUG] [Thread-12795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:53:10.078 [DEBUG] [Thread-12795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:53:10.079 [INFO] [Thread-12795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:53:10.086 [DEBUG] [Thread-12795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:53:10.086 [DEBUG] [Thread-12795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] client lang: <none>
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] server lang: <none>
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] kex follows: False
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] Compression: none
2025-11-26T05:53:10.087 [DEBUG] [Thread-12795] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:53:10.145 [DEBUG] [Thread-12795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:53:10.146 [DEBUG] [Thread-12795] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:53:10.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:53:10.147 [DEBUG] [Thread-12795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:53:10.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:53:10.201 [DEBUG] [Thread-12795] [transport.py] [_log()] userauth is OK
2025-11-26T05:53:10.202 [DEBUG] [Thread-12795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:53:10.202 [DEBUG] [Thread-12795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:53:10.202 [DEBUG] [Thread-12795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:53:10.202 [DEBUG] [Thread-12795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:53:10.226 [INFO] [Thread-12795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:53:10.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:53:10.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:53:11.056 [DEBUG] [Thread-12795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:53:11.056 [DEBUG] [Thread-12795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:53:11.107 [DEBUG] [Thread-12795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:53:11.108 [DEBUG] [Thread-12795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:53:11.120 [DEBUG] [Thread-12795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:53:11.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:53:11.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:53:11.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:53:11.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:53:11.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:53:11.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:53:11.157 [DEBUG] [Thread-12795] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:53:17.205 [DEBUG] [Thread-12797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:53:23.692 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:53:23.693 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:53:32.253 [DEBUG] [Thread-12798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:53:35.224 [DEBUG] [Thread-12799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:53:41.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:53:41.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:53:41.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:53:41.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 53, 11), 28.78, 13.61, 0.0, 14.59, 20.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:53:41.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:53:11
2025-11-26T05:53:41.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:53:42.114 [DEBUG] [Thread-12800] [transport.py] [_log()] starting thread (client mode): 0x7376f580
2025-11-26T05:53:42.115 [DEBUG] [Thread-12800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:53:42.135 [DEBUG] [Thread-12800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:53:42.135 [INFO] [Thread-12800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:53:42.136 [DEBUG] [Thread-12800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:53:42.136 [DEBUG] [Thread-12800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:53:42.136 [DEBUG] [Thread-12800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:53:42.136 [DEBUG] [Thread-12800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:53:42.136 [DEBUG] [Thread-12800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] client lang: <none>
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] server lang: <none>
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] kex follows: False
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] Compression: none
2025-11-26T05:53:42.137 [DEBUG] [Thread-12800] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:53:42.154 [DEBUG] [Thread-12800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:53:42.155 [DEBUG] [Thread-12800] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:53:42.156 [DEBUG] [Thread-12800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:53:42.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:53:42.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:53:42.158 [DEBUG] [Thread-12800] [transport.py] [_log()] userauth is OK
2025-11-26T05:53:42.158 [DEBUG] [Thread-12800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:53:42.158 [DEBUG] [Thread-12800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:53:42.158 [DEBUG] [Thread-12800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:53:42.158 [DEBUG] [Thread-12800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:53:42.181 [INFO] [Thread-12800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:53:42.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:53:42.949 [DEBUG] [Thread-12800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:53:42.950 [DEBUG] [Thread-12800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:53:42.951 [DEBUG] [Thread-12800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:53:42.991 [DEBUG] [Thread-12800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:53:42.991 [DEBUG] [Thread-12800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:53:42.994 [DEBUG] [Thread-12800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:53:43.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:53:43.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:53:43.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:53:43.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:53:43.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:53:43.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:53:43.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:53:43.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:53:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:53:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.161900 -999.00  +20.30  17.49     18   -4.30 1 1 1 1 1   887    0 24.73 10.25 ----- 16.6 17.5 45.3 18.9 21.0 -26.3 21.1 -25.4 20.3 -24.6 20.3 -25.4
2025-11-26T05:53:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:53:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:53:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.161900
2025-11-26T05:53:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:53:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:53:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:53:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:53:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:53:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:53:11', tmtdew=28.78, humidity=13.61, cloud=0.0, wind=14.59, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:53:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:53:43.019 [DEBUG] [Thread-12800] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:53:43.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:53:43.116 [DEBUG] [Thread-12803] [transport.py] [_log()] starting thread (client mode): 0x70d283a0
2025-11-26T05:53:43.116 [DEBUG] [Thread-12803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:53:43.132 [DEBUG] [Thread-12803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:53:43.132 [INFO] [Thread-12803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:53:43.140 [DEBUG] [Thread-12803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:53:43.140 [DEBUG] [Thread-12803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:53:43.140 [DEBUG] [Thread-12803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:53:43.140 [DEBUG] [Thread-12803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:53:43.140 [DEBUG] [Thread-12803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:53:43.140 [DEBUG] [Thread-12803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:53:43.141 [DEBUG] [Thread-12803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:53:43.141 [DEBUG] [Thread-12803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:53:43.141 [DEBUG] [Thread-12803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:53:43.141 [DEBUG] [Thread-12803] [transport.py] [_log()] client lang: <none>
2025-11-26T05:53:43.141 [DEBUG] [Thread-12803] [transport.py] [_log()] server lang: <none>
2025-11-26T05:53:43.141 [DEBUG] [Thread-12803] [transport.py] [_log()] kex follows: False
2025-11-26T05:53:43.141 [DEBUG] [Thread-12803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:53:43.141 [DEBUG] [Thread-12803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:53:43.142 [DEBUG] [Thread-12803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:53:43.142 [DEBUG] [Thread-12803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:53:43.142 [DEBUG] [Thread-12803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:53:43.142 [DEBUG] [Thread-12803] [transport.py] [_log()] Compression: none
2025-11-26T05:53:43.142 [DEBUG] [Thread-12803] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:53:43.198 [DEBUG] [Thread-12803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:53:43.198 [DEBUG] [Thread-12803] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:53:43.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:53:43.199 [DEBUG] [Thread-12803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:53:43.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:53:43.253 [DEBUG] [Thread-12803] [transport.py] [_log()] userauth is OK
2025-11-26T05:53:43.254 [DEBUG] [Thread-12803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:53:43.254 [DEBUG] [Thread-12803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:53:43.254 [DEBUG] [Thread-12803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:53:43.254 [DEBUG] [Thread-12803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:53:43.274 [INFO] [Thread-12803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:53:43.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:53:43.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:53:44.073 [DEBUG] [Thread-12803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:53:44.073 [DEBUG] [Thread-12803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:53:44.121 [DEBUG] [Thread-12803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:53:44.121 [DEBUG] [Thread-12803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:53:44.130 [DEBUG] [Thread-12803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:53:44.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:53: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')
2025-11-26T05:53:44.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:53:44.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:53:44.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:53:44.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:53:44.167 [DEBUG] [Thread-12803] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:53:47.281 [DEBUG] [Thread-12805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:54:02.340 [DEBUG] [Thread-12806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:54:14.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:54:14.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:54:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:54:14.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 53, 44), 28.86, 13.58, 0.0, 15.58, 20.08, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:54:14.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:53:44
2025-11-26T05:54:14.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:54:15.105 [DEBUG] [Thread-12807] [transport.py] [_log()] starting thread (client mode): 0x7376f1c0
2025-11-26T05:54:15.106 [DEBUG] [Thread-12807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:54:15.126 [DEBUG] [Thread-12807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:54:15.126 [INFO] [Thread-12807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] client lang: <none>
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] server lang: <none>
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] kex follows: False
2025-11-26T05:54:15.129 [DEBUG] [Thread-12807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:54:15.130 [DEBUG] [Thread-12807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:54:15.130 [DEBUG] [Thread-12807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:54:15.130 [DEBUG] [Thread-12807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:54:15.130 [DEBUG] [Thread-12807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:54:15.130 [DEBUG] [Thread-12807] [transport.py] [_log()] Compression: none
2025-11-26T05:54:15.130 [DEBUG] [Thread-12807] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:54:15.146 [DEBUG] [Thread-12807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:54:15.147 [DEBUG] [Thread-12807] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:54:15.147 [DEBUG] [Thread-12807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:54:15.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:54:15.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:54:15.149 [DEBUG] [Thread-12807] [transport.py] [_log()] userauth is OK
2025-11-26T05:54:15.149 [DEBUG] [Thread-12807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:54:15.149 [DEBUG] [Thread-12807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:54:15.149 [DEBUG] [Thread-12807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:54:15.149 [DEBUG] [Thread-12807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:54:15.168 [INFO] [Thread-12807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:54:15.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:54:15.798 [DEBUG] [Thread-12807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:54:15.798 [DEBUG] [Thread-12807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:54:15.798 [DEBUG] [Thread-12807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:54:15.839 [DEBUG] [Thread-12807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:54:15.839 [DEBUG] [Thread-12807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:54:15.843 [DEBUG] [Thread-12807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:54:15.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:54:15.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:54:15.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:54:15.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:54:15.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:54:15.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:54:15.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:54:15.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:54:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:54:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.162247 -999.00  +20.30  13.99     18   -4.20 1 1 1 1 1   887    0 24.71 9.58 ----- 15.8 14.0 37.4 17.9 21.1 -26.3 21.1 -25.6 20.2 -24.5 20.3 -25.4
2025-11-26T05:54:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:54:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:54:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.162247
2025-11-26T05:54:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:54:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:54:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:54:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:54:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:54:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:53:44', tmtdew=28.86, humidity=13.58, cloud=0.0, wind=15.58, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:53:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:54:15.873 [DEBUG] [Thread-12807] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:54:15.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:54:15.969 [DEBUG] [Thread-12810] [transport.py] [_log()] starting thread (client mode): 0x70d7d180
2025-11-26T05:54:15.969 [DEBUG] [Thread-12810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:54:15.984 [DEBUG] [Thread-12810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:54:15.984 [INFO] [Thread-12810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:54:15.991 [DEBUG] [Thread-12810] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:54:15.991 [DEBUG] [Thread-12810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:54:15.991 [DEBUG] [Thread-12810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] client lang: <none>
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] server lang: <none>
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] kex follows: False
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:54:15.992 [DEBUG] [Thread-12810] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:54:15.993 [DEBUG] [Thread-12810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:54:15.993 [DEBUG] [Thread-12810] [transport.py] [_log()] Compression: none
2025-11-26T05:54:15.993 [DEBUG] [Thread-12810] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:54:16.050 [DEBUG] [Thread-12810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:54:16.051 [DEBUG] [Thread-12810] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:54:16.051 [DEBUG] [Thread-12810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:54:16.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:54:16.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:54:16.106 [DEBUG] [Thread-12810] [transport.py] [_log()] userauth is OK
2025-11-26T05:54:16.106 [DEBUG] [Thread-12810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:54:16.106 [DEBUG] [Thread-12810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:54:16.106 [DEBUG] [Thread-12810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:54:16.106 [DEBUG] [Thread-12810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:54:16.125 [INFO] [Thread-12810] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:54:16.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:54:16.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:54:16.948 [DEBUG] [Thread-12810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:54:16.948 [DEBUG] [Thread-12810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:54:16.996 [DEBUG] [Thread-12810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:54:16.996 [DEBUG] [Thread-12810] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:54:17.004 [DEBUG] [Thread-12810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:54:17.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:54:17.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:54:17.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:54:17.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:54:17.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:54:17.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:54:17.035 [DEBUG] [Thread-12810] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:54:17.370 [DEBUG] [Thread-12812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:54:23.836 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:54:23.837 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:54:32.421 [DEBUG] [Thread-12813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:54:35.275 [DEBUG] [Thread-12814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:54:47.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:54:47.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:54:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:54:47.454 [DEBUG] [Thread-12815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:54:47.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 54, 16), 28.88, 13.56, 0.0, 16.39, 20.11, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:54:47.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:54:16
2025-11-26T05:54:47.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:54:48.033 [DEBUG] [Thread-12816] [transport.py] [_log()] starting thread (client mode): 0x7376f190
2025-11-26T05:54:48.033 [DEBUG] [Thread-12816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:54:48.057 [DEBUG] [Thread-12816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:54:48.057 [INFO] [Thread-12816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] client lang: <none>
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] server lang: <none>
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] kex follows: False
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] Compression: none
2025-11-26T05:54:48.061 [DEBUG] [Thread-12816] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:54:48.074 [DEBUG] [Thread-12816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:54:48.074 [DEBUG] [Thread-12816] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:54:48.074 [DEBUG] [Thread-12816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:54:48.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:54:48.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:54:48.075 [DEBUG] [Thread-12816] [transport.py] [_log()] userauth is OK
2025-11-26T05:54:48.075 [DEBUG] [Thread-12816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:54:48.075 [DEBUG] [Thread-12816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:54:48.075 [DEBUG] [Thread-12816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:54:48.075 [DEBUG] [Thread-12816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:54:48.102 [INFO] [Thread-12816] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:54:48.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:54:48.911 [DEBUG] [Thread-12816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:54:48.911 [DEBUG] [Thread-12816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:54:48.911 [DEBUG] [Thread-12816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:54:48.953 [DEBUG] [Thread-12816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:54:48.953 [DEBUG] [Thread-12816] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:54:48.955 [DEBUG] [Thread-12816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:54:48.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:54:48.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:54:48.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:54:48.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:54:48.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:54:48.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:54:48.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.162594 -999.00  +20.40  16.86     18   -4.30 1 1 1 1 1   887    0 24.61 9.91 ----- 15.7 16.9 33.8 18.6 21.1 -26.4 21.1 -25.4 20.3 -24.7 20.4 -25.2
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.162594
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:54:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:54:16', tmtdew=28.88, humidity=13.56, cloud=0.0, wind=16.39, temperature=20.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:54:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:54:48.973 [DEBUG] [Thread-12816] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:54:49.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:54:49.057 [DEBUG] [Thread-12819] [transport.py] [_log()] starting thread (client mode): 0x70d014e0
2025-11-26T05:54:49.057 [DEBUG] [Thread-12819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:54:49.073 [DEBUG] [Thread-12819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:54:49.073 [INFO] [Thread-12819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:54:49.080 [DEBUG] [Thread-12819] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:54:49.080 [DEBUG] [Thread-12819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:54:49.080 [DEBUG] [Thread-12819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:54:49.080 [DEBUG] [Thread-12819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:54:49.080 [DEBUG] [Thread-12819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] client lang: <none>
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] server lang: <none>
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] kex follows: False
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] Compression: none
2025-11-26T05:54:49.081 [DEBUG] [Thread-12819] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:54:49.137 [DEBUG] [Thread-12819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:54:49.138 [DEBUG] [Thread-12819] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:54:49.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:54:49.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:54:49.138 [DEBUG] [Thread-12819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:54:49.198 [DEBUG] [Thread-12819] [transport.py] [_log()] userauth is OK
2025-11-26T05:54:49.198 [DEBUG] [Thread-12819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:54:49.198 [DEBUG] [Thread-12819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:54:49.198 [DEBUG] [Thread-12819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:54:49.198 [DEBUG] [Thread-12819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:54:49.213 [INFO] [Thread-12819] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:54:49.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:54:49.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:54:50.103 [DEBUG] [Thread-12819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:54:50.103 [DEBUG] [Thread-12819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:54:50.151 [DEBUG] [Thread-12819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:54:50.151 [DEBUG] [Thread-12819] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:54:50.159 [DEBUG] [Thread-12819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:54:50.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:54:50.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:54:50.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:54:50.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:54:50.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:54:50.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:54:50.191 [DEBUG] [Thread-12819] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:55:02.488 [DEBUG] [Thread-12821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:55:17.541 [DEBUG] [Thread-12822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:55:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:55:20.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:55:20.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:55:20.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 54, 48), 29.05, 13.5, 0.0, 15.21, 20.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:55:20.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:54:48
2025-11-26T05:55:21.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:55:21.191 [DEBUG] [Thread-12823] [transport.py] [_log()] starting thread (client mode): 0x70d7e9e0
2025-11-26T05:55:21.191 [DEBUG] [Thread-12823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:55:21.211 [DEBUG] [Thread-12823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:55:21.212 [INFO] [Thread-12823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] client lang: <none>
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] server lang: <none>
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] kex follows: False
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:55:21.213 [DEBUG] [Thread-12823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:55:21.214 [DEBUG] [Thread-12823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:55:21.214 [DEBUG] [Thread-12823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:55:21.214 [DEBUG] [Thread-12823] [transport.py] [_log()] Compression: none
2025-11-26T05:55:21.214 [DEBUG] [Thread-12823] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:55:21.229 [DEBUG] [Thread-12823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:55:21.229 [DEBUG] [Thread-12823] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:55:21.229 [DEBUG] [Thread-12823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:55:21.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:55:21.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:55:21.230 [DEBUG] [Thread-12823] [transport.py] [_log()] userauth is OK
2025-11-26T05:55:21.230 [DEBUG] [Thread-12823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:55:21.230 [DEBUG] [Thread-12823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:55:21.230 [DEBUG] [Thread-12823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:55:21.230 [DEBUG] [Thread-12823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:55:21.239 [INFO] [Thread-12823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:55:21.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:55:21.865 [DEBUG] [Thread-12823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:55:21.865 [DEBUG] [Thread-12823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:55:21.865 [DEBUG] [Thread-12823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:55:21.906 [DEBUG] [Thread-12823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:55:21.906 [DEBUG] [Thread-12823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:55:21.908 [DEBUG] [Thread-12823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:55:21.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:55:21.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:55:21.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:55:21.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:55:21.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:55:21.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:55:21.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.162941 -999.00  +20.40  13.41     18   -4.30 1 1 1 1 1   887    0 25.00 10.22 ----- 16.1 13.4 43.6 19.7 21.1 -26.3 21.1 -25.5 20.3 -24.5 20.4 -25.4
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.162941
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:55:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:54:48', tmtdew=29.05, humidity=13.5, cloud=0.0, wind=15.21, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:54:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:55:21.927 [DEBUG] [Thread-12823] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:55:22.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:55:22.013 [DEBUG] [Thread-12826] [transport.py] [_log()] starting thread (client mode): 0x761d9c00
2025-11-26T05:55:22.013 [DEBUG] [Thread-12826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:55:22.031 [DEBUG] [Thread-12826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:55:22.031 [INFO] [Thread-12826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:55:22.038 [DEBUG] [Thread-12826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:55:22.038 [DEBUG] [Thread-12826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:55:22.038 [DEBUG] [Thread-12826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:55:22.038 [DEBUG] [Thread-12826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:55:22.038 [DEBUG] [Thread-12826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:55:22.038 [DEBUG] [Thread-12826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:55:22.038 [DEBUG] [Thread-12826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:55:22.038 [DEBUG] [Thread-12826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:55:22.038 [DEBUG] [Thread-12826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] client lang: <none>
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] server lang: <none>
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] kex follows: False
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] Compression: none
2025-11-26T05:55:22.039 [DEBUG] [Thread-12826] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:55:22.093 [DEBUG] [Thread-12826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:55:22.094 [DEBUG] [Thread-12826] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:55:22.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:55:22.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:55:22.094 [DEBUG] [Thread-12826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:55:22.152 [DEBUG] [Thread-12826] [transport.py] [_log()] userauth is OK
2025-11-26T05:55:22.152 [DEBUG] [Thread-12826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:55:22.152 [DEBUG] [Thread-12826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:55:22.152 [DEBUG] [Thread-12826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:55:22.152 [DEBUG] [Thread-12826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:55:22.169 [INFO] [Thread-12826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:55:22.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:55:22.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:55:22.999 [DEBUG] [Thread-12826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:55:22.999 [DEBUG] [Thread-12826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:55:23.047 [DEBUG] [Thread-12826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:55:23.047 [DEBUG] [Thread-12826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:55:23.056 [DEBUG] [Thread-12826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:55:23.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:55:23.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:55:23.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:55:23.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:55:23.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:55:23.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:55:23.089 [DEBUG] [Thread-12826] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:55:23.977 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:55:23.978 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:55:32.575 [DEBUG] [Thread-12828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:55:35.330 [DEBUG] [Thread-12829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:55:47.629 [DEBUG] [Thread-12830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:55:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:55:53.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:55:53.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:55:53.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 55, 20), 29.02, 13.53, 0.0, 15.19, 20.26, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:55:53.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:55:20
2025-11-26T05:55:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:55:54.085 [DEBUG] [Thread-12831] [transport.py] [_log()] starting thread (client mode): 0x70d02050
2025-11-26T05:55:54.085 [DEBUG] [Thread-12831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:55:54.105 [DEBUG] [Thread-12831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:55:54.105 [INFO] [Thread-12831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] client lang: <none>
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] server lang: <none>
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] kex follows: False
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] Compression: none
2025-11-26T05:55:54.109 [DEBUG] [Thread-12831] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:55:54.124 [DEBUG] [Thread-12831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:55:54.124 [DEBUG] [Thread-12831] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:55:54.125 [DEBUG] [Thread-12831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:55:54.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:55:54.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:55:54.126 [DEBUG] [Thread-12831] [transport.py] [_log()] userauth is OK
2025-11-26T05:55:54.126 [DEBUG] [Thread-12831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:55:54.126 [DEBUG] [Thread-12831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:55:54.126 [DEBUG] [Thread-12831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:55:54.126 [DEBUG] [Thread-12831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:55:54.139 [INFO] [Thread-12831] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:55:54.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:55:54.755 [DEBUG] [Thread-12831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:55:54.755 [DEBUG] [Thread-12831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:55:54.756 [DEBUG] [Thread-12831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:55:54.796 [DEBUG] [Thread-12831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:55:54.796 [DEBUG] [Thread-12831] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:55:54.800 [DEBUG] [Thread-12831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:55:54.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:55:54.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:55:54.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:55:54.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:55:54.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:55:54.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:55:54.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:55:54.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:55:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:55:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.163288 -999.00  +20.50  15.09     18   -4.20 1 1 1 1 1   887    0 24.49 10.27 ----- 14.0 15.1 44.6 18.5 21.2 -26.4 21.2 -25.5 20.4 -24.5 20.4 -25.2
2025-11-26T05:55:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:55:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:55:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.163288
2025-11-26T05:55:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:55:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:55:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:55:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:55:54.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:55:54.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:55:20', tmtdew=29.02, humidity=13.53, cloud=0.0, wind=15.19, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:55:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:55:54.828 [DEBUG] [Thread-12831] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:55:54.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:55:54.923 [DEBUG] [Thread-12834] [transport.py] [_log()] starting thread (client mode): 0x70d2aa40
2025-11-26T05:55:54.923 [DEBUG] [Thread-12834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:55:54.939 [DEBUG] [Thread-12834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:55:54.939 [INFO] [Thread-12834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:55:54.946 [DEBUG] [Thread-12834] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:55:54.947 [DEBUG] [Thread-12834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:55:54.947 [DEBUG] [Thread-12834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:55:54.947 [DEBUG] [Thread-12834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:55:54.947 [DEBUG] [Thread-12834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:55:54.947 [DEBUG] [Thread-12834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:55:54.947 [DEBUG] [Thread-12834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:55:54.948 [DEBUG] [Thread-12834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:55:54.948 [DEBUG] [Thread-12834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:55:54.948 [DEBUG] [Thread-12834] [transport.py] [_log()] client lang: <none>
2025-11-26T05:55:54.948 [DEBUG] [Thread-12834] [transport.py] [_log()] server lang: <none>
2025-11-26T05:55:54.948 [DEBUG] [Thread-12834] [transport.py] [_log()] kex follows: False
2025-11-26T05:55:54.948 [DEBUG] [Thread-12834] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:55:54.948 [DEBUG] [Thread-12834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:55:54.948 [DEBUG] [Thread-12834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:55:54.949 [DEBUG] [Thread-12834] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:55:54.949 [DEBUG] [Thread-12834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:55:54.949 [DEBUG] [Thread-12834] [transport.py] [_log()] Compression: none
2025-11-26T05:55:54.949 [DEBUG] [Thread-12834] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:55:55.009 [DEBUG] [Thread-12834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:55:55.009 [DEBUG] [Thread-12834] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:55:55.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:55:55.011 [DEBUG] [Thread-12834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:55:55.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:55:55.071 [DEBUG] [Thread-12834] [transport.py] [_log()] userauth is OK
2025-11-26T05:55:55.072 [DEBUG] [Thread-12834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:55:55.072 [DEBUG] [Thread-12834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:55:55.072 [DEBUG] [Thread-12834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:55:55.072 [DEBUG] [Thread-12834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:55:55.090 [INFO] [Thread-12834] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:55:55.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:55:55.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:55:55.934 [DEBUG] [Thread-12834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:55:55.935 [DEBUG] [Thread-12834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:55:55.983 [DEBUG] [Thread-12834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:55:55.983 [DEBUG] [Thread-12834] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:55:55.992 [DEBUG] [Thread-12834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:55:56.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:55:56.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:55:56.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:55:56.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:55:56.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:55:56.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:55:56.029 [DEBUG] [Thread-12834] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:56:02.666 [DEBUG] [Thread-12836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:56:17.708 [DEBUG] [Thread-12837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:56:24.121 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:56:24.124 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:56:26.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:56:26.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:56:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:56:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 55, 52), 29.25, 12.91, 0.0, 15.69, 20.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:56:26.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:55:52
2025-11-26T05:56:26.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:56:26.981 [DEBUG] [Thread-12838] [transport.py] [_log()] starting thread (client mode): 0x70d7eb30
2025-11-26T05:56:26.981 [DEBUG] [Thread-12838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:56:27.002 [DEBUG] [Thread-12838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:56:27.002 [INFO] [Thread-12838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:56:27.005 [DEBUG] [Thread-12838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] client lang: <none>
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] server lang: <none>
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] kex follows: False
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] Compression: none
2025-11-26T05:56:27.006 [DEBUG] [Thread-12838] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:56:27.025 [DEBUG] [Thread-12838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:56:27.025 [DEBUG] [Thread-12838] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:56:27.026 [DEBUG] [Thread-12838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:56:27.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:56:27.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:56:27.028 [DEBUG] [Thread-12838] [transport.py] [_log()] userauth is OK
2025-11-26T05:56:27.028 [DEBUG] [Thread-12838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:56:27.028 [DEBUG] [Thread-12838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:56:27.028 [DEBUG] [Thread-12838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:56:27.029 [DEBUG] [Thread-12838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:56:27.065 [INFO] [Thread-12838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:56:27.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:56:27.695 [DEBUG] [Thread-12838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:56:27.695 [DEBUG] [Thread-12838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:56:27.696 [DEBUG] [Thread-12838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:56:27.735 [DEBUG] [Thread-12838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:56:27.736 [DEBUG] [Thread-12838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:56:27.739 [DEBUG] [Thread-12838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:56:27.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:56:27.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:56:27.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:56:27.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:56:27.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:56:27.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:56:27.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:56:27.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:56:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:56:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.163636 -999.00  +20.40  15.79     18   -4.20 1 1 1 1 1   887    0 25.22 11.19 ----- 14.5 15.8 47.8 18.8 21.3 -26.5 21.2 -25.6 20.4 -24.7 20.4 -25.3
2025-11-26T05:56:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:56:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:56:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.163636
2025-11-26T05:56:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:56:27.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:56:27.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:56:27.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:56:27.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:56:27.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:55:52', tmtdew=29.25, humidity=12.91, cloud=0.0, wind=15.69, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:55:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:56:27.764 [DEBUG] [Thread-12838] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:56:27.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:56:27.861 [DEBUG] [Thread-12841] [transport.py] [_log()] starting thread (client mode): 0x70d03340
2025-11-26T05:56:27.861 [DEBUG] [Thread-12841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:56:27.876 [DEBUG] [Thread-12841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:56:27.876 [INFO] [Thread-12841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:56:27.883 [DEBUG] [Thread-12841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:56:27.884 [DEBUG] [Thread-12841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:56:27.884 [DEBUG] [Thread-12841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:56:27.884 [DEBUG] [Thread-12841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:56:27.884 [DEBUG] [Thread-12841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:56:27.884 [DEBUG] [Thread-12841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:56:27.884 [DEBUG] [Thread-12841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:56:27.885 [DEBUG] [Thread-12841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:56:27.885 [DEBUG] [Thread-12841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:56:27.885 [DEBUG] [Thread-12841] [transport.py] [_log()] client lang: <none>
2025-11-26T05:56:27.885 [DEBUG] [Thread-12841] [transport.py] [_log()] server lang: <none>
2025-11-26T05:56:27.885 [DEBUG] [Thread-12841] [transport.py] [_log()] kex follows: False
2025-11-26T05:56:27.885 [DEBUG] [Thread-12841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:56:27.885 [DEBUG] [Thread-12841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:56:27.885 [DEBUG] [Thread-12841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:56:27.886 [DEBUG] [Thread-12841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:56:27.886 [DEBUG] [Thread-12841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:56:27.886 [DEBUG] [Thread-12841] [transport.py] [_log()] Compression: none
2025-11-26T05:56:27.886 [DEBUG] [Thread-12841] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:56:27.944 [DEBUG] [Thread-12841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:56:27.944 [DEBUG] [Thread-12841] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:56:27.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:56:27.946 [DEBUG] [Thread-12841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:56:27.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:56:28.000 [DEBUG] [Thread-12841] [transport.py] [_log()] userauth is OK
2025-11-26T05:56:28.000 [DEBUG] [Thread-12841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:56:28.000 [DEBUG] [Thread-12841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:56:28.000 [DEBUG] [Thread-12841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:56:28.000 [DEBUG] [Thread-12841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:56:28.019 [INFO] [Thread-12841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:56:28.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:56:28.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:56:28.857 [DEBUG] [Thread-12841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:56:28.857 [DEBUG] [Thread-12841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:56:28.905 [DEBUG] [Thread-12841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:56:28.905 [DEBUG] [Thread-12841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:56:28.914 [DEBUG] [Thread-12841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:56:28.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:56:28.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:56:28.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:56:28.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:56:28.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:56:28.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:56:28.951 [DEBUG] [Thread-12841] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:56:32.744 [DEBUG] [Thread-12843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:56:35.382 [DEBUG] [Thread-12844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:56:47.797 [DEBUG] [Thread-12845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:56:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:56:58.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:56:58.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:56:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 56, 56), 29.3, 12.88, 0.0, 16.45, 20.46, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:56:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:56:56
2025-11-26T05:56:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:56:59.900 [DEBUG] [Thread-12846] [transport.py] [_log()] starting thread (client mode): 0x70d1c700
2025-11-26T05:56:59.900 [DEBUG] [Thread-12846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:56:59.921 [DEBUG] [Thread-12846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:56:59.921 [INFO] [Thread-12846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:56:59.925 [DEBUG] [Thread-12846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:56:59.925 [DEBUG] [Thread-12846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:56:59.925 [DEBUG] [Thread-12846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:56:59.925 [DEBUG] [Thread-12846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:56:59.925 [DEBUG] [Thread-12846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:56:59.925 [DEBUG] [Thread-12846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:56:59.926 [DEBUG] [Thread-12846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:56:59.926 [DEBUG] [Thread-12846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:56:59.926 [DEBUG] [Thread-12846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:56:59.926 [DEBUG] [Thread-12846] [transport.py] [_log()] client lang: <none>
2025-11-26T05:56:59.926 [DEBUG] [Thread-12846] [transport.py] [_log()] server lang: <none>
2025-11-26T05:56:59.926 [DEBUG] [Thread-12846] [transport.py] [_log()] kex follows: False
2025-11-26T05:56:59.926 [DEBUG] [Thread-12846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:56:59.926 [DEBUG] [Thread-12846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:56:59.926 [DEBUG] [Thread-12846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:56:59.927 [DEBUG] [Thread-12846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:56:59.927 [DEBUG] [Thread-12846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:56:59.927 [DEBUG] [Thread-12846] [transport.py] [_log()] Compression: none
2025-11-26T05:56:59.927 [DEBUG] [Thread-12846] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:56:59.946 [DEBUG] [Thread-12846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:56:59.947 [DEBUG] [Thread-12846] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:56:59.948 [DEBUG] [Thread-12846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:56:59.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:56:59.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:56:59.950 [DEBUG] [Thread-12846] [transport.py] [_log()] userauth is OK
2025-11-26T05:56:59.950 [DEBUG] [Thread-12846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:56:59.950 [DEBUG] [Thread-12846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:56:59.950 [DEBUG] [Thread-12846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:56:59.950 [DEBUG] [Thread-12846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:56:59.974 [INFO] [Thread-12846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:56:59.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:57:00.634 [DEBUG] [Thread-12846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:57:00.634 [DEBUG] [Thread-12846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:57:00.635 [DEBUG] [Thread-12846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:57:00.676 [DEBUG] [Thread-12846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:57:00.676 [DEBUG] [Thread-12846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:57:00.680 [DEBUG] [Thread-12846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:57:00.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:57:00.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:57:00.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:57:00.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:57:00.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:57:00.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:57:00.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:57:00.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:57:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:57:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.163983 -999.00  +20.40  15.26     18   -4.20 1 1 1 1 1   887    0 24.22 11.20 ----- 15.2 15.3 45.4 19.0 21.3 -26.3 21.3 -25.6 20.4 -24.7 20.5 -25.3
2025-11-26T05:57:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:57:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:57:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.163983
2025-11-26T05:57:00.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:57:00.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:57:00.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:57:00.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:57:00.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:57:00.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:56:56', tmtdew=29.3, humidity=12.88, cloud=0.0, wind=16.45, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:56:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:57:00.707 [DEBUG] [Thread-12846] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:57:00.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:57:00.804 [DEBUG] [Thread-12849] [transport.py] [_log()] starting thread (client mode): 0x70d0eb00
2025-11-26T05:57:00.804 [DEBUG] [Thread-12849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:57:00.820 [DEBUG] [Thread-12849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:57:00.820 [INFO] [Thread-12849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] client lang: <none>
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] server lang: <none>
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] kex follows: False
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:57:00.828 [DEBUG] [Thread-12849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:57:00.829 [DEBUG] [Thread-12849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:57:00.829 [DEBUG] [Thread-12849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:57:00.829 [DEBUG] [Thread-12849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:57:00.829 [DEBUG] [Thread-12849] [transport.py] [_log()] Compression: none
2025-11-26T05:57:00.829 [DEBUG] [Thread-12849] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:57:00.888 [DEBUG] [Thread-12849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:57:00.889 [DEBUG] [Thread-12849] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:57:00.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:57:00.890 [DEBUG] [Thread-12849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:57:00.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:57:00.944 [DEBUG] [Thread-12849] [transport.py] [_log()] userauth is OK
2025-11-26T05:57:00.944 [DEBUG] [Thread-12849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:57:00.945 [DEBUG] [Thread-12849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:57:00.945 [DEBUG] [Thread-12849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:57:00.945 [DEBUG] [Thread-12849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:57:00.964 [INFO] [Thread-12849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:57:00.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:57:00.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:57:01.828 [DEBUG] [Thread-12849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:57:01.829 [DEBUG] [Thread-12849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:57:01.877 [DEBUG] [Thread-12849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:57:01.877 [DEBUG] [Thread-12849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:57:01.886 [DEBUG] [Thread-12849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:57:01.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:57:01.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:57:01.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:57:01.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:57:01.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:57:01.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:57:01.923 [DEBUG] [Thread-12849] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:57:02.837 [DEBUG] [Thread-12851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:57:17.887 [DEBUG] [Thread-12852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:57:24.265 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:57:24.266 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:57:31.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:57:31.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:57:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:57:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 57, 28), 29.32, 12.86, 0.0, 16.16, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:57:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:57:28
2025-11-26T05:57:32.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:57:32.844 [DEBUG] [Thread-12853] [transport.py] [_log()] starting thread (client mode): 0x761dbf40
2025-11-26T05:57:32.845 [DEBUG] [Thread-12853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:57:32.865 [DEBUG] [Thread-12853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:57:32.865 [INFO] [Thread-12853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] client lang: <none>
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] server lang: <none>
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] kex follows: False
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] Compression: none
2025-11-26T05:57:32.867 [DEBUG] [Thread-12853] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:57:32.876 [DEBUG] [Thread-12853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:57:32.877 [DEBUG] [Thread-12853] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:57:32.877 [DEBUG] [Thread-12853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:57:32.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:57:32.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:57:32.879 [DEBUG] [Thread-12853] [transport.py] [_log()] userauth is OK
2025-11-26T05:57:32.879 [DEBUG] [Thread-12853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:57:32.879 [DEBUG] [Thread-12853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:57:32.879 [DEBUG] [Thread-12853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:57:32.879 [DEBUG] [Thread-12853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:57:32.903 [INFO] [Thread-12853] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:57:32.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:57:32.918 [DEBUG] [Thread-12855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:57:33.533 [DEBUG] [Thread-12853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:57:33.533 [DEBUG] [Thread-12853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:57:33.534 [DEBUG] [Thread-12853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:57:33.574 [DEBUG] [Thread-12853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:57:33.575 [DEBUG] [Thread-12853] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:57:33.577 [DEBUG] [Thread-12853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:57:33.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:57:33.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:57:33.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:57:33.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:57:33.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:57:33.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:57:33.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:57:33.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:57:33.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:57:33.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.164677 -999.00  +20.50  16.00     18   -4.30 1 1 1 1 1   887    0 25.11 13.15 ----- 17.0 16.0 47.0 16.9 21.4 -26.4 21.4 -25.5 20.5 -24.7 20.6 -25.4
2025-11-26T05:57:33.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:57:33.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:57:33.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.164677
2025-11-26T05:57:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:57:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:57:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:57:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:57:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:57:33.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:57:28', tmtdew=29.32, humidity=12.86, cloud=0.0, wind=16.16, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:57:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:57:33.603 [DEBUG] [Thread-12853] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:57:33.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:57:33.699 [DEBUG] [Thread-12857] [transport.py] [_log()] starting thread (client mode): 0x7376efb0
2025-11-26T05:57:33.699 [DEBUG] [Thread-12857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:57:33.713 [DEBUG] [Thread-12857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:57:33.713 [INFO] [Thread-12857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:57:33.720 [DEBUG] [Thread-12857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:57:33.720 [DEBUG] [Thread-12857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] client lang: <none>
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] server lang: <none>
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] kex follows: False
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] Compression: none
2025-11-26T05:57:33.721 [DEBUG] [Thread-12857] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:57:33.779 [DEBUG] [Thread-12857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:57:33.779 [DEBUG] [Thread-12857] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:57:33.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:57:33.780 [DEBUG] [Thread-12857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:57:33.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:57:33.836 [DEBUG] [Thread-12857] [transport.py] [_log()] userauth is OK
2025-11-26T05:57:33.836 [DEBUG] [Thread-12857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:57:33.836 [DEBUG] [Thread-12857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:57:33.836 [DEBUG] [Thread-12857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:57:33.836 [DEBUG] [Thread-12857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:57:33.855 [INFO] [Thread-12857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:57:33.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:57:33.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:57:34.656 [DEBUG] [Thread-12857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:57:34.656 [DEBUG] [Thread-12857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:57:34.704 [DEBUG] [Thread-12857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:57:34.704 [DEBUG] [Thread-12857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:57:34.713 [DEBUG] [Thread-12857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:57:34.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:57:34.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:57:34.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:57:34.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:57:34.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:57:34.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:57:34.748 [DEBUG] [Thread-12857] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:57:35.437 [DEBUG] [Thread-12859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:57:47.952 [DEBUG] [Thread-12860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:58:03.007 [DEBUG] [Thread-12861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:58:04.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:58:04.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:58:04.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:58:05.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 57, 28), 29.32, 12.86, 0.0, 16.16, 20.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:58:05.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:57:28
2025-11-26T05:58:05.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:58:05.671 [DEBUG] [Thread-12862] [transport.py] [_log()] starting thread (client mode): 0x70d7fdf0
2025-11-26T05:58:05.671 [DEBUG] [Thread-12862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:58:05.692 [DEBUG] [Thread-12862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:58:05.692 [INFO] [Thread-12862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] client lang: <none>
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] server lang: <none>
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] kex follows: False
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] Compression: none
2025-11-26T05:58:05.695 [DEBUG] [Thread-12862] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:58:05.717 [DEBUG] [Thread-12862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:58:05.718 [DEBUG] [Thread-12862] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:58:05.718 [DEBUG] [Thread-12862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:58:05.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:58:05.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:58:05.760 [DEBUG] [Thread-12862] [transport.py] [_log()] userauth is OK
2025-11-26T05:58:05.761 [DEBUG] [Thread-12862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:58:05.761 [DEBUG] [Thread-12862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:58:05.761 [DEBUG] [Thread-12862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:58:05.761 [DEBUG] [Thread-12862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:58:05.784 [INFO] [Thread-12862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:58:05.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:58:06.438 [DEBUG] [Thread-12862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:58:06.438 [DEBUG] [Thread-12862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:58:06.439 [DEBUG] [Thread-12862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:58:06.479 [DEBUG] [Thread-12862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:58:06.479 [DEBUG] [Thread-12862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:58:06.482 [DEBUG] [Thread-12862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:58:06.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:58:06.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:58:06.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:58:06.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:58:06.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:58:06.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:58:06.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:58:06.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:58:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:58:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.165025 -999.00  +20.50  15.78     18   -4.30 1 1 1 1 1   887    0 25.10 13.51 ----- 14.2 15.8 46.6 19.4 21.4 -26.6 21.4 -25.8 20.5 -24.7 20.6 -25.2
2025-11-26T05:58:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:58:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:58:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.165025
2025-11-26T05:58:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:58:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:58:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:58:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:58:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:58:06.512 [DEBUG] [Thread-12862] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:58:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:57:28', tmtdew=29.32, humidity=12.86, cloud=0.0, wind=16.16, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:57:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:58:06.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:58:06.610 [DEBUG] [Thread-12865] [transport.py] [_log()] starting thread (client mode): 0x737804f0
2025-11-26T05:58:06.610 [DEBUG] [Thread-12865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:58:06.628 [DEBUG] [Thread-12865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:58:06.628 [INFO] [Thread-12865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:58:06.638 [DEBUG] [Thread-12865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] client lang: <none>
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] server lang: <none>
2025-11-26T05:58:06.639 [DEBUG] [Thread-12865] [transport.py] [_log()] kex follows: False
2025-11-26T05:58:06.640 [DEBUG] [Thread-12865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:58:06.640 [DEBUG] [Thread-12865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:58:06.640 [DEBUG] [Thread-12865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:58:06.640 [DEBUG] [Thread-12865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:58:06.640 [DEBUG] [Thread-12865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:58:06.640 [DEBUG] [Thread-12865] [transport.py] [_log()] Compression: none
2025-11-26T05:58:06.640 [DEBUG] [Thread-12865] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:58:06.697 [DEBUG] [Thread-12865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:58:06.698 [DEBUG] [Thread-12865] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:58:06.698 [DEBUG] [Thread-12865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:58:06.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:58:06.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:58:06.756 [DEBUG] [Thread-12865] [transport.py] [_log()] userauth is OK
2025-11-26T05:58:06.757 [DEBUG] [Thread-12865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:58:06.757 [DEBUG] [Thread-12865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:58:06.757 [DEBUG] [Thread-12865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:58:06.757 [DEBUG] [Thread-12865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:58:06.775 [INFO] [Thread-12865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:58:06.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:58:06.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:58:07.622 [DEBUG] [Thread-12865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:58:07.622 [DEBUG] [Thread-12865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:58:07.670 [DEBUG] [Thread-12865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:58:07.670 [DEBUG] [Thread-12865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:58:07.679 [DEBUG] [Thread-12865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:58:07.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:58:07.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:58:07.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:58:07.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:58:07.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:58:07.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:58:07.716 [DEBUG] [Thread-12865] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:58:18.047 [DEBUG] [Thread-12867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:58:24.405 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:58:24.406 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:58:33.094 [DEBUG] [Thread-12868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:58:35.483 [DEBUG] [Thread-12869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:58:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:58:37.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:58:37.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:58:38.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 58, 32), 29.5, 12.8, 0.0, 17.04, 20.59, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:58:38.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:58:32
2025-11-26T05:58:38.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:58:38.648 [DEBUG] [Thread-12870] [transport.py] [_log()] starting thread (client mode): 0x761db460
2025-11-26T05:58:38.648 [DEBUG] [Thread-12870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:58:38.668 [DEBUG] [Thread-12870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:58:38.669 [INFO] [Thread-12870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:58:38.672 [DEBUG] [Thread-12870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:58:38.672 [DEBUG] [Thread-12870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:58:38.672 [DEBUG] [Thread-12870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] client lang: <none>
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] server lang: <none>
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] kex follows: False
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:58:38.673 [DEBUG] [Thread-12870] [transport.py] [_log()] Compression: none
2025-11-26T05:58:38.674 [DEBUG] [Thread-12870] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:58:38.691 [DEBUG] [Thread-12870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:58:38.692 [DEBUG] [Thread-12870] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:58:38.692 [DEBUG] [Thread-12870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:58:38.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:58:38.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:58:38.695 [DEBUG] [Thread-12870] [transport.py] [_log()] userauth is OK
2025-11-26T05:58:38.695 [DEBUG] [Thread-12870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:58:38.695 [DEBUG] [Thread-12870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:58:38.695 [DEBUG] [Thread-12870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:58:38.695 [DEBUG] [Thread-12870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:58:38.715 [INFO] [Thread-12870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:58:38.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:58:39.362 [DEBUG] [Thread-12870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:58:39.363 [DEBUG] [Thread-12870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:58:39.363 [DEBUG] [Thread-12870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:58:39.404 [DEBUG] [Thread-12870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:58:39.404 [DEBUG] [Thread-12870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:58:39.408 [DEBUG] [Thread-12870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:58:39.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:58:39.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:58:39.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:58:39.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:58:39.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:58:39.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:58:39.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:58:39.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:58:39.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:58:39.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.165372 -999.00  +20.50  16.11     18   -4.30 1 1 1 1 1   887    0 25.05 15.26 ----- 15.2 16.1 42.0 18.3 21.5 -26.5 21.4 -25.5 20.5 -24.7 20.6 -25.5
2025-11-26T05:58:39.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:58:39.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:58:39.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.165372
2025-11-26T05:58:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:58:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:58:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:58:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:58:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:58:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:58:32', tmtdew=29.5, humidity=12.8, cloud=0.0, wind=17.04, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:58:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:58:39.435 [DEBUG] [Thread-12870] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:58:39.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:58:39.531 [DEBUG] [Thread-12873] [transport.py] [_log()] starting thread (client mode): 0x70de57e0
2025-11-26T05:58:39.531 [DEBUG] [Thread-12873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:58:39.546 [DEBUG] [Thread-12873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:58:39.546 [INFO] [Thread-12873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:58:39.554 [DEBUG] [Thread-12873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:58:39.554 [DEBUG] [Thread-12873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:58:39.554 [DEBUG] [Thread-12873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:58:39.554 [DEBUG] [Thread-12873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:58:39.554 [DEBUG] [Thread-12873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:58:39.554 [DEBUG] [Thread-12873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:58:39.554 [DEBUG] [Thread-12873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:58:39.554 [DEBUG] [Thread-12873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:58:39.554 [DEBUG] [Thread-12873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] client lang: <none>
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] server lang: <none>
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] kex follows: False
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] Compression: none
2025-11-26T05:58:39.555 [DEBUG] [Thread-12873] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:58:39.613 [DEBUG] [Thread-12873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:58:39.614 [DEBUG] [Thread-12873] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:58:39.614 [DEBUG] [Thread-12873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:58:39.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:58:39.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:58:39.669 [DEBUG] [Thread-12873] [transport.py] [_log()] userauth is OK
2025-11-26T05:58:39.669 [DEBUG] [Thread-12873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:58:39.669 [DEBUG] [Thread-12873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:58:39.670 [DEBUG] [Thread-12873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:58:39.670 [DEBUG] [Thread-12873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:58:39.688 [INFO] [Thread-12873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:58:39.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:58:39.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:58:40.505 [DEBUG] [Thread-12873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:58:40.505 [DEBUG] [Thread-12873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:58:40.552 [DEBUG] [Thread-12873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:58:40.553 [DEBUG] [Thread-12873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:58:40.562 [DEBUG] [Thread-12873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:58:40.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:58:40.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:58:40.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:58:40.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:58:40.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:58:40.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:58:40.596 [DEBUG] [Thread-12873] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:58:48.128 [DEBUG] [Thread-12875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:59:03.180 [DEBUG] [Thread-12876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:59:10.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:59:10.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:59:10.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:59:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 59, 4), 29.54, 12.78, 0.0, 16.62, 20.68, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:59:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:59:04
2025-11-26T05:59:11.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:59:11.516 [DEBUG] [Thread-12877] [transport.py] [_log()] starting thread (client mode): 0x70d0cca0
2025-11-26T05:59:11.517 [DEBUG] [Thread-12877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:59:11.537 [DEBUG] [Thread-12877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:59:11.537 [INFO] [Thread-12877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] client lang: <none>
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] server lang: <none>
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] kex follows: False
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:59:11.540 [DEBUG] [Thread-12877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:59:11.541 [DEBUG] [Thread-12877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:59:11.541 [DEBUG] [Thread-12877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:59:11.541 [DEBUG] [Thread-12877] [transport.py] [_log()] Compression: none
2025-11-26T05:59:11.541 [DEBUG] [Thread-12877] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:59:11.560 [DEBUG] [Thread-12877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:59:11.561 [DEBUG] [Thread-12877] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:59:11.561 [DEBUG] [Thread-12877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:59:11.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:59:11.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:59:11.563 [DEBUG] [Thread-12877] [transport.py] [_log()] userauth is OK
2025-11-26T05:59:11.563 [DEBUG] [Thread-12877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:59:11.563 [DEBUG] [Thread-12877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:59:11.564 [DEBUG] [Thread-12877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:59:11.564 [DEBUG] [Thread-12877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:59:11.586 [INFO] [Thread-12877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:59:11.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:59:12.222 [DEBUG] [Thread-12877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:59:12.222 [DEBUG] [Thread-12877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:59:12.223 [DEBUG] [Thread-12877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:59:12.262 [DEBUG] [Thread-12877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:59:12.262 [DEBUG] [Thread-12877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:59:12.265 [DEBUG] [Thread-12877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:59:12.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:59:12.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:59:12.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:59:12.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:59:12.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:59:12.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:59:12.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:59:12.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.165719 -999.00  +20.50  17.94     18   -4.30 1 1 1 1 1   887    0 24.63 15.57 ----- 17.7 17.9 33.6 19.7 21.4 -26.5 21.4 -25.6 20.5 -24.7 20.6 -25.4
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.165719
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:59:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:59:04', tmtdew=29.54, humidity=12.78, cloud=0.0, wind=16.62, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:58:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:59:12.284 [DEBUG] [Thread-12877] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:59:12.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:59:12.371 [DEBUG] [Thread-12880] [transport.py] [_log()] starting thread (client mode): 0x70d0d120
2025-11-26T05:59:12.371 [DEBUG] [Thread-12880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:59:12.386 [DEBUG] [Thread-12880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:59:12.386 [INFO] [Thread-12880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:59:12.394 [DEBUG] [Thread-12880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:59:12.394 [DEBUG] [Thread-12880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:59:12.394 [DEBUG] [Thread-12880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:59:12.394 [DEBUG] [Thread-12880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:59:12.395 [DEBUG] [Thread-12880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:59:12.395 [DEBUG] [Thread-12880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:59:12.395 [DEBUG] [Thread-12880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:59:12.395 [DEBUG] [Thread-12880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:59:12.395 [DEBUG] [Thread-12880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:59:12.395 [DEBUG] [Thread-12880] [transport.py] [_log()] client lang: <none>
2025-11-26T05:59:12.395 [DEBUG] [Thread-12880] [transport.py] [_log()] server lang: <none>
2025-11-26T05:59:12.395 [DEBUG] [Thread-12880] [transport.py] [_log()] kex follows: False
2025-11-26T05:59:12.395 [DEBUG] [Thread-12880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:59:12.396 [DEBUG] [Thread-12880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:59:12.396 [DEBUG] [Thread-12880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:59:12.396 [DEBUG] [Thread-12880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:59:12.396 [DEBUG] [Thread-12880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:59:12.396 [DEBUG] [Thread-12880] [transport.py] [_log()] Compression: none
2025-11-26T05:59:12.396 [DEBUG] [Thread-12880] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:59:12.453 [DEBUG] [Thread-12880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:59:12.454 [DEBUG] [Thread-12880] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:59:12.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:59:12.454 [DEBUG] [Thread-12880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:59:12.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:59:12.509 [DEBUG] [Thread-12880] [transport.py] [_log()] userauth is OK
2025-11-26T05:59:12.509 [DEBUG] [Thread-12880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:59:12.509 [DEBUG] [Thread-12880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:59:12.509 [DEBUG] [Thread-12880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:59:12.510 [DEBUG] [Thread-12880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:59:12.528 [INFO] [Thread-12880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:59:12.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:59:12.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:59:13.353 [DEBUG] [Thread-12880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:59:13.353 [DEBUG] [Thread-12880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:59:13.401 [DEBUG] [Thread-12880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:59:13.401 [DEBUG] [Thread-12880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:59:13.410 [DEBUG] [Thread-12880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:59:13.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:59:13.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:59:13.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:59:13.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:59:13.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:59:13.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:59:13.446 [DEBUG] [Thread-12880] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:59:18.216 [DEBUG] [Thread-12882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:59:24.548 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:59:24.549 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:59:33.270 [DEBUG] [Thread-12883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:59:35.548 [DEBUG] [Thread-12884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T05:59:43.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T05:59:43.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T05:59:43.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T05:59:44.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 5, 59, 36), 29.7, 12.76, 0.0, 19.39, 20.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T05:59:44.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 05:59:36
2025-11-26T05:59:44.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T05:59:44.404 [DEBUG] [Thread-12885] [transport.py] [_log()] starting thread (client mode): 0x70d0f010
2025-11-26T05:59:44.404 [DEBUG] [Thread-12885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:59:44.423 [DEBUG] [Thread-12885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T05:59:44.424 [INFO] [Thread-12885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] client lang: <none>
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] server lang: <none>
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] kex follows: False
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] Compression: none
2025-11-26T05:59:44.427 [DEBUG] [Thread-12885] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:59:44.443 [DEBUG] [Thread-12885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:59:44.443 [DEBUG] [Thread-12885] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:59:44.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T05:59:44.443 [DEBUG] [Thread-12885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T05:59:44.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:59:44.444 [DEBUG] [Thread-12885] [transport.py] [_log()] userauth is OK
2025-11-26T05:59:44.444 [DEBUG] [Thread-12885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:59:44.444 [DEBUG] [Thread-12885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:59:44.444 [DEBUG] [Thread-12885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T05:59:44.444 [DEBUG] [Thread-12885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:59:44.459 [INFO] [Thread-12885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:59:44.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:59:45.094 [DEBUG] [Thread-12885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:59:45.094 [DEBUG] [Thread-12885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:59:45.095 [DEBUG] [Thread-12885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T05:59:45.135 [DEBUG] [Thread-12885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:59:45.135 [DEBUG] [Thread-12885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:59:45.138 [DEBUG] [Thread-12885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:59:45.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:59:45.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T05:59:45.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T05:59:45.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T05:59:45.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:59:45.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T05:59:45.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:59:45.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:59:45.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T05:59:45.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.166066 -999.00  +20.60  16.98     18   -4.30 1 1 1 1 1   887    0 25.25 18.92 ----- 16.1 17.0 50.0 19.5 21.6 -26.3 21.5 -25.4 20.6 -24.8 20.6 -25.3
2025-11-26T05:59:45.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T05:59:45.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T05:59:45.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.166066
2025-11-26T05:59:45.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T05:59:45.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T05:59:45.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T05:59:45.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T05:59:45.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T05:59:45.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T05:59:36', tmtdew=29.7, humidity=12.76, cloud=0.0, wind=19.39, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:59:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T05:59:45.157 [DEBUG] [Thread-12885] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:59:45.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T05:59:45.244 [DEBUG] [Thread-12888] [transport.py] [_log()] starting thread (client mode): 0x70d0c280
2025-11-26T05:59:45.244 [DEBUG] [Thread-12888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T05:59:45.258 [DEBUG] [Thread-12888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T05:59:45.258 [INFO] [Thread-12888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] client lang: <none>
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] server lang: <none>
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] kex follows: False
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] Compression: none
2025-11-26T05:59:45.267 [DEBUG] [Thread-12888] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T05:59:45.324 [DEBUG] [Thread-12888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T05:59:45.324 [DEBUG] [Thread-12888] [transport.py] [_log()] Switch to new keys ...
2025-11-26T05:59:45.324 [DEBUG] [Thread-12888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T05:59:45.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T05:59:45.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T05:59:45.381 [DEBUG] [Thread-12888] [transport.py] [_log()] userauth is OK
2025-11-26T05:59:45.381 [DEBUG] [Thread-12888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T05:59:45.381 [DEBUG] [Thread-12888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T05:59:45.381 [DEBUG] [Thread-12888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T05:59:45.381 [DEBUG] [Thread-12888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T05:59:45.399 [INFO] [Thread-12888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T05:59:45.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T05:59:45.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T05:59:46.239 [DEBUG] [Thread-12888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T05:59:46.240 [DEBUG] [Thread-12888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T05:59:46.287 [DEBUG] [Thread-12888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T05:59:46.287 [DEBUG] [Thread-12888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T05:59:46.295 [DEBUG] [Thread-12888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T05:59:46.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T05:59:46.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T05:59:46.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T05:59:46.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T05:59:46.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T05:59:46.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T05:59:46.326 [DEBUG] [Thread-12888] [transport.py] [_log()] EOF in transport thread
2025-11-26T05:59:48.300 [DEBUG] [Thread-12890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:00:03.354 [DEBUG] [Thread-12891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:00:16.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:00:16.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:00:16.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:00:16.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 0, 8), 29.7, 12.76, 0.0, 18.7, 20.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:00:16.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:00:08
2025-11-26T06:00:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:00:17.272 [DEBUG] [Thread-12892] [transport.py] [_log()] starting thread (client mode): 0x70d0eaa0
2025-11-26T06:00:17.272 [DEBUG] [Thread-12892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:00:17.292 [DEBUG] [Thread-12892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:00:17.292 [INFO] [Thread-12892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:00:17.295 [DEBUG] [Thread-12892] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] client lang: <none>
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] server lang: <none>
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] kex follows: False
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] Compression: none
2025-11-26T06:00:17.296 [DEBUG] [Thread-12892] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:00:17.314 [DEBUG] [Thread-12892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:00:17.314 [DEBUG] [Thread-12892] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:00:17.315 [DEBUG] [Thread-12892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:00:17.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:00:17.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:00:17.315 [DEBUG] [Thread-12892] [transport.py] [_log()] userauth is OK
2025-11-26T06:00:17.315 [DEBUG] [Thread-12892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:00:17.315 [DEBUG] [Thread-12892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:00:17.315 [DEBUG] [Thread-12892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:00:17.316 [DEBUG] [Thread-12892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:00:17.325 [INFO] [Thread-12892] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:00:17.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:00:17.953 [DEBUG] [Thread-12892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:00:17.953 [DEBUG] [Thread-12892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:00:17.954 [DEBUG] [Thread-12892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:00:17.995 [DEBUG] [Thread-12892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:00:17.995 [DEBUG] [Thread-12892] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:00:17.999 [DEBUG] [Thread-12892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:00:18.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:00:18.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:00:18.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:00:18.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:00:18.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:00:18.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:00:18.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:00:18.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:00:18.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:00:18.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.166413 -999.00  +20.60  16.08     18   -4.30 1 1 1 1 1   887    0 25.35 21.18 ----- 15.5 16.1 41.8 19.4 21.6 -26.5 21.5 -25.7 20.6 -24.6 20.7 -25.6
2025-11-26T06:00:18.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:00:18.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:00:18.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.166413
2025-11-26T06:00:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:00:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:00:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:00:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:00:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:00:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:00:08', tmtdew=29.7, humidity=12.76, cloud=0.0, wind=18.7, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T03:59:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:00:18.024 [DEBUG] [Thread-12892] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:00:18.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:00:18.121 [DEBUG] [Thread-12895] [transport.py] [_log()] starting thread (client mode): 0x7374e470
2025-11-26T06:00:18.121 [DEBUG] [Thread-12895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:00:18.137 [DEBUG] [Thread-12895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:00:18.137 [INFO] [Thread-12895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:00:18.144 [DEBUG] [Thread-12895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] client lang: <none>
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] server lang: <none>
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] kex follows: False
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:00:18.145 [DEBUG] [Thread-12895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:00:18.146 [DEBUG] [Thread-12895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:00:18.146 [DEBUG] [Thread-12895] [transport.py] [_log()] Compression: none
2025-11-26T06:00:18.146 [DEBUG] [Thread-12895] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:00:18.202 [DEBUG] [Thread-12895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:00:18.203 [DEBUG] [Thread-12895] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:00:18.204 [DEBUG] [Thread-12895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:00:18.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:00:18.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:00:18.258 [DEBUG] [Thread-12895] [transport.py] [_log()] userauth is OK
2025-11-26T06:00:18.259 [DEBUG] [Thread-12895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:00:18.259 [DEBUG] [Thread-12895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:00:18.259 [DEBUG] [Thread-12895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:00:18.259 [DEBUG] [Thread-12895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:00:18.283 [INFO] [Thread-12895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:00:18.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:00:18.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:00:18.392 [DEBUG] [Thread-12897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:00:19.128 [DEBUG] [Thread-12895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:00:19.128 [DEBUG] [Thread-12895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:00:19.176 [DEBUG] [Thread-12895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:00:19.176 [DEBUG] [Thread-12895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:00:19.184 [DEBUG] [Thread-12895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:00:19.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:00:19.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:00:19.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:00:19.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:00:19.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:00:19.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:00:19.216 [DEBUG] [Thread-12895] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:00:24.688 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:00:24.690 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:00:33.444 [DEBUG] [Thread-12898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:00:35.605 [DEBUG] [Thread-12899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:00:48.482 [DEBUG] [Thread-12900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:00:49.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:00:49.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:00:49.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:00:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 0, 40), 29.77, 12.75, 0.0, 16.15, 20.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:00:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:00:40
2025-11-26T06:00:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:00:50.132 [DEBUG] [Thread-12901] [transport.py] [_log()] starting thread (client mode): 0x70d7e320
2025-11-26T06:00:50.132 [DEBUG] [Thread-12901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:00:50.154 [DEBUG] [Thread-12901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:00:50.154 [INFO] [Thread-12901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:00:50.157 [DEBUG] [Thread-12901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:00:50.157 [DEBUG] [Thread-12901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:00:50.157 [DEBUG] [Thread-12901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] client lang: <none>
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] server lang: <none>
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] kex follows: False
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:00:50.158 [DEBUG] [Thread-12901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:00:50.159 [DEBUG] [Thread-12901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:00:50.159 [DEBUG] [Thread-12901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:00:50.159 [DEBUG] [Thread-12901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:00:50.159 [DEBUG] [Thread-12901] [transport.py] [_log()] Compression: none
2025-11-26T06:00:50.159 [DEBUG] [Thread-12901] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:00:50.179 [DEBUG] [Thread-12901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:00:50.179 [DEBUG] [Thread-12901] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:00:50.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:00:50.181 [DEBUG] [Thread-12901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:00:50.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:00:50.183 [DEBUG] [Thread-12901] [transport.py] [_log()] userauth is OK
2025-11-26T06:00:50.183 [DEBUG] [Thread-12901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:00:50.184 [DEBUG] [Thread-12901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:00:50.184 [DEBUG] [Thread-12901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:00:50.184 [DEBUG] [Thread-12901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:00:50.219 [INFO] [Thread-12901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:00:50.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:00:50.985 [DEBUG] [Thread-12901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:00:50.986 [DEBUG] [Thread-12901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:00:50.995 [DEBUG] [Thread-12901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:00:51.026 [DEBUG] [Thread-12901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:00:51.027 [DEBUG] [Thread-12901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:00:51.029 [DEBUG] [Thread-12901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:00:51.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:00:51.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:00:51.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:00:51.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:00:51.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:00:51.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:00:51.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:00:51.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:00:51.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:00:51.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.166760 -999.00  +20.60  18.45     18   -4.30 1 1 1 1 1   887    0 25.19 22.19 ----- 17.2 18.4 41.2 20.3 21.6 -26.3 21.6 -25.7 20.6 -24.7 20.8 -25.6
2025-11-26T06:00:51.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:00:51.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:00:51.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.166760
2025-11-26T06:00:51.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:00:51.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:00:51.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:00:51.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:00:51.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:00:51.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:00:40', tmtdew=29.77, humidity=12.75, cloud=0.0, wind=16.15, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:00:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:00:51.056 [DEBUG] [Thread-12901] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:00:51.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:00:51.151 [DEBUG] [Thread-12904] [transport.py] [_log()] starting thread (client mode): 0x70d756c0
2025-11-26T06:00:51.151 [DEBUG] [Thread-12904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:00:51.165 [DEBUG] [Thread-12904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:00:51.166 [INFO] [Thread-12904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] client lang: <none>
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] server lang: <none>
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] kex follows: False
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:00:51.174 [DEBUG] [Thread-12904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:00:51.175 [DEBUG] [Thread-12904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:00:51.175 [DEBUG] [Thread-12904] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:00:51.175 [DEBUG] [Thread-12904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:00:51.175 [DEBUG] [Thread-12904] [transport.py] [_log()] Compression: none
2025-11-26T06:00:51.175 [DEBUG] [Thread-12904] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:00:51.230 [DEBUG] [Thread-12904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:00:51.231 [DEBUG] [Thread-12904] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:00:51.232 [DEBUG] [Thread-12904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:00:51.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:00:51.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:00:51.287 [DEBUG] [Thread-12904] [transport.py] [_log()] userauth is OK
2025-11-26T06:00:51.287 [DEBUG] [Thread-12904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:00:51.287 [DEBUG] [Thread-12904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:00:51.287 [DEBUG] [Thread-12904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:00:51.287 [DEBUG] [Thread-12904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:00:51.306 [INFO] [Thread-12904] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:00:51.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:00:51.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:00:52.175 [DEBUG] [Thread-12904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:00:52.175 [DEBUG] [Thread-12904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:00:52.223 [DEBUG] [Thread-12904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:00:52.223 [DEBUG] [Thread-12904] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:00:52.232 [DEBUG] [Thread-12904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:00:52.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:00:52.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:00:52.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:00:52.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:00:52.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:00:52.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:00:52.270 [DEBUG] [Thread-12904] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:01:03.515 [DEBUG] [Thread-12906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:01:18.575 [DEBUG] [Thread-12907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:01:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:01:22.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:01:22.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:01:22.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 1, 12), 29.82, 12.7, 0.0, 16.04, 20.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:01:22.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:01:12
2025-11-26T06:01:23.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:01:23.207 [DEBUG] [Thread-12908] [transport.py] [_log()] starting thread (client mode): 0x70d0fa30
2025-11-26T06:01:23.208 [DEBUG] [Thread-12908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:01:23.227 [DEBUG] [Thread-12908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:01:23.227 [INFO] [Thread-12908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:01:23.230 [DEBUG] [Thread-12908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:01:23.230 [DEBUG] [Thread-12908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:01:23.230 [DEBUG] [Thread-12908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:01:23.230 [DEBUG] [Thread-12908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] client lang: <none>
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] server lang: <none>
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] kex follows: False
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] Compression: none
2025-11-26T06:01:23.231 [DEBUG] [Thread-12908] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:01:23.249 [DEBUG] [Thread-12908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:01:23.250 [DEBUG] [Thread-12908] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:01:23.250 [DEBUG] [Thread-12908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:01:23.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:01:23.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:01:23.252 [DEBUG] [Thread-12908] [transport.py] [_log()] userauth is OK
2025-11-26T06:01:23.252 [DEBUG] [Thread-12908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:01:23.253 [DEBUG] [Thread-12908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:01:23.253 [DEBUG] [Thread-12908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:01:23.253 [DEBUG] [Thread-12908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:01:23.289 [INFO] [Thread-12908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:01:23.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:01:23.941 [DEBUG] [Thread-12908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:01:23.941 [DEBUG] [Thread-12908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:01:23.942 [DEBUG] [Thread-12908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:01:23.983 [DEBUG] [Thread-12908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:01:23.983 [DEBUG] [Thread-12908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:01:23.987 [DEBUG] [Thread-12908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:01:23.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:01:23.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:01:24.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:01:24.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:01:24.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:01:24.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:01:24.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:01:24.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:01:24.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:01:24.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.167108 -999.00  +20.70  15.94     18   -4.30 1 1 1 1 1   887    0 24.78 24.16 ----- 17.6 15.9 43.0 21.9 21.6 -26.4 21.6 -25.6 20.7 -24.9 20.8 -25.5
2025-11-26T06:01:24.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:01:24.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:01:24.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.167108
2025-11-26T06:01:24.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:01:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:01:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:01:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:01:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:01:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:01:12', tmtdew=29.82, humidity=12.7, cloud=0.0, wind=16.04, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:00:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:01:24.012 [DEBUG] [Thread-12908] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:01:24.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:01:24.107 [DEBUG] [Thread-12911] [transport.py] [_log()] starting thread (client mode): 0x70d7e2f0
2025-11-26T06:01:24.107 [DEBUG] [Thread-12911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:01:24.122 [DEBUG] [Thread-12911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:01:24.122 [INFO] [Thread-12911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:01:24.130 [DEBUG] [Thread-12911] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:01:24.130 [DEBUG] [Thread-12911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:01:24.131 [DEBUG] [Thread-12911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:01:24.131 [DEBUG] [Thread-12911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:01:24.131 [DEBUG] [Thread-12911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:01:24.131 [DEBUG] [Thread-12911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:01:24.131 [DEBUG] [Thread-12911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:01:24.131 [DEBUG] [Thread-12911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:01:24.131 [DEBUG] [Thread-12911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:01:24.131 [DEBUG] [Thread-12911] [transport.py] [_log()] client lang: <none>
2025-11-26T06:01:24.132 [DEBUG] [Thread-12911] [transport.py] [_log()] server lang: <none>
2025-11-26T06:01:24.132 [DEBUG] [Thread-12911] [transport.py] [_log()] kex follows: False
2025-11-26T06:01:24.132 [DEBUG] [Thread-12911] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:01:24.132 [DEBUG] [Thread-12911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:01:24.132 [DEBUG] [Thread-12911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:01:24.132 [DEBUG] [Thread-12911] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:01:24.132 [DEBUG] [Thread-12911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:01:24.132 [DEBUG] [Thread-12911] [transport.py] [_log()] Compression: none
2025-11-26T06:01:24.133 [DEBUG] [Thread-12911] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:01:24.192 [DEBUG] [Thread-12911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:01:24.192 [DEBUG] [Thread-12911] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:01:24.193 [DEBUG] [Thread-12911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:01:24.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:01:24.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:01:24.251 [DEBUG] [Thread-12911] [transport.py] [_log()] userauth is OK
2025-11-26T06:01:24.251 [DEBUG] [Thread-12911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:01:24.251 [DEBUG] [Thread-12911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:01:24.251 [DEBUG] [Thread-12911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:01:24.252 [DEBUG] [Thread-12911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:01:24.270 [INFO] [Thread-12911] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:01:24.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:01:24.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:01:24.830 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:01:24.832 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:01:25.155 [DEBUG] [Thread-12911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:01:25.155 [DEBUG] [Thread-12911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:01:25.203 [DEBUG] [Thread-12911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:01:25.203 [DEBUG] [Thread-12911] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:01:25.212 [DEBUG] [Thread-12911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:01:25.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:01:25.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:01:25.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:01:25.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:01:25.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:01:25.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:01:25.249 [DEBUG] [Thread-12911] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:01:33.611 [DEBUG] [Thread-12913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:01:35.652 [DEBUG] [Thread-12914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:01:48.649 [DEBUG] [Thread-12915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:01:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:01:55.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:01:55.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:01:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 1, 44), 29.85, 12.7, 0.0, 17.61, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:01:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:01:44
2025-11-26T06:01:56.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:01:56.196 [DEBUG] [Thread-12916] [transport.py] [_log()] starting thread (client mode): 0x70d0cbb0
2025-11-26T06:01:56.197 [DEBUG] [Thread-12916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:01:56.213 [DEBUG] [Thread-12916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:01:56.214 [INFO] [Thread-12916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] client lang: <none>
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] server lang: <none>
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] kex follows: False
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] Compression: none
2025-11-26T06:01:56.217 [DEBUG] [Thread-12916] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:01:56.236 [DEBUG] [Thread-12916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:01:56.236 [DEBUG] [Thread-12916] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:01:56.237 [DEBUG] [Thread-12916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:01:56.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:01:56.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:01:56.239 [DEBUG] [Thread-12916] [transport.py] [_log()] userauth is OK
2025-11-26T06:01:56.239 [DEBUG] [Thread-12916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:01:56.239 [DEBUG] [Thread-12916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:01:56.239 [DEBUG] [Thread-12916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:01:56.239 [DEBUG] [Thread-12916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:01:56.260 [INFO] [Thread-12916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:01:56.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:01:56.785 [DEBUG] [Thread-12916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:01:56.785 [DEBUG] [Thread-12916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:01:56.786 [DEBUG] [Thread-12916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:01:56.826 [DEBUG] [Thread-12916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:01:56.826 [DEBUG] [Thread-12916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:01:56.829 [DEBUG] [Thread-12916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:01:56.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:01:56.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:01:56.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:01:56.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:01:56.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:01:56.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:01:56.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:01:56.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:01:56.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:01:56.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.167802 -999.00  +20.70  17.77     18   -4.30 1 1 1 1 1   887    0 25.43 24.30 ----- 16.6 17.8 41.2 21.0 21.8 -26.6 21.7 -25.6 20.7 -24.6 20.8 -25.6
2025-11-26T06:01:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:01:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:01:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.167802
2025-11-26T06:01:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:01:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:01:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:01:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:01:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:01:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:01:44', tmtdew=29.85, humidity=12.7, cloud=0.0, wind=17.61, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:01:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:01:56.855 [DEBUG] [Thread-12916] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:01:56.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:01:56.950 [DEBUG] [Thread-12919] [transport.py] [_log()] starting thread (client mode): 0x70d2af50
2025-11-26T06:01:56.950 [DEBUG] [Thread-12919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:01:56.964 [DEBUG] [Thread-12919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:01:56.965 [INFO] [Thread-12919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:01:56.972 [DEBUG] [Thread-12919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:01:56.972 [DEBUG] [Thread-12919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:01:56.972 [DEBUG] [Thread-12919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:01:56.972 [DEBUG] [Thread-12919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:01:56.972 [DEBUG] [Thread-12919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] client lang: <none>
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] server lang: <none>
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] kex follows: False
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] Compression: none
2025-11-26T06:01:56.973 [DEBUG] [Thread-12919] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:01:57.031 [DEBUG] [Thread-12919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:01:57.032 [DEBUG] [Thread-12919] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:01:57.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:01:57.033 [DEBUG] [Thread-12919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:01:57.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:01:57.087 [DEBUG] [Thread-12919] [transport.py] [_log()] userauth is OK
2025-11-26T06:01:57.087 [DEBUG] [Thread-12919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:01:57.088 [DEBUG] [Thread-12919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:01:57.088 [DEBUG] [Thread-12919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:01:57.088 [DEBUG] [Thread-12919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:01:57.106 [INFO] [Thread-12919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:01:57.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:01:57.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:01:57.916 [DEBUG] [Thread-12919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:01:57.916 [DEBUG] [Thread-12919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:01:57.964 [DEBUG] [Thread-12919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:01:57.964 [DEBUG] [Thread-12919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:01:57.973 [DEBUG] [Thread-12919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:01:57.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:01:57.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:01:57.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
2025-11-26T06:01:57.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:01:57.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:01:58.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:01:58.010 [DEBUG] [Thread-12919] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:02:03.684 [DEBUG] [Thread-12921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:02:18.732 [DEBUG] [Thread-12922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:02:24.975 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:02:24.977 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:02:28.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:02:28.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:02:28.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
2025-11-26T06:02:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 2, 16), 29.91, 12.61, 0.0, 17.27, 20.89, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:02:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:02:16
2025-11-26T06:02:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:02:28.918 [DEBUG] [Thread-12923] [transport.py] [_log()] starting thread (client mode): 0x70d01750
2025-11-26T06:02:28.918 [DEBUG] [Thread-12923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:02:28.939 [DEBUG] [Thread-12923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:02:28.940 [INFO] [Thread-12923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] client lang: <none>
2025-11-26T06:02:28.943 [DEBUG] [Thread-12923] [transport.py] [_log()] server lang: <none>
2025-11-26T06:02:28.944 [DEBUG] [Thread-12923] [transport.py] [_log()] kex follows: False
2025-11-26T06:02:28.944 [DEBUG] [Thread-12923] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:02:28.944 [DEBUG] [Thread-12923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:02:28.944 [DEBUG] [Thread-12923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:02:28.944 [DEBUG] [Thread-12923] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:02:28.944 [DEBUG] [Thread-12923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:02:28.944 [DEBUG] [Thread-12923] [transport.py] [_log()] Compression: none
2025-11-26T06:02:28.944 [DEBUG] [Thread-12923] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:02:28.964 [DEBUG] [Thread-12923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:02:28.964 [DEBUG] [Thread-12923] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:02:28.965 [DEBUG] [Thread-12923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:02:28.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:02:28.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:02:28.967 [DEBUG] [Thread-12923] [transport.py] [_log()] userauth is OK
2025-11-26T06:02:28.967 [DEBUG] [Thread-12923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:02:28.967 [DEBUG] [Thread-12923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:02:28.968 [DEBUG] [Thread-12923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:02:28.968 [DEBUG] [Thread-12923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:02:28.993 [INFO] [Thread-12923] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:02:28.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:02:29.585 [DEBUG] [Thread-12923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:02:29.585 [DEBUG] [Thread-12923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:02:29.586 [DEBUG] [Thread-12923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:02:29.626 [DEBUG] [Thread-12923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:02:29.626 [DEBUG] [Thread-12923] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:02:29.630 [DEBUG] [Thread-12923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:02:29.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:02:29.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:02:29.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:02:29.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:02:29.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:02:29.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:02:29.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:02:29.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:02:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:02:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.168150 -999.00  +20.70  18.62     18   -4.30 1 1 1 1 1   887    0 25.54 25.99 ----- 17.1 18.6 46.6 20.5 21.8 -26.7 21.8 -25.6 20.8 -24.9 20.8 -25.5
2025-11-26T06:02:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:02:29.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:02:29.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.168150
2025-11-26T06:02:29.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:02:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:02:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:02:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:02:29.654 [DEBUG] [Thread-12923] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:02:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:02:29.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:02:16', tmtdew=29.91, humidity=12.61, cloud=0.0, wind=17.27, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:02:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:02:29.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:02:29.751 [DEBUG] [Thread-12926] [transport.py] [_log()] starting thread (client mode): 0x7374da50
2025-11-26T06:02:29.751 [DEBUG] [Thread-12926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:02:29.766 [DEBUG] [Thread-12926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:02:29.766 [INFO] [Thread-12926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] client lang: <none>
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] server lang: <none>
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] kex follows: False
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:02:29.774 [DEBUG] [Thread-12926] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:02:29.775 [DEBUG] [Thread-12926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:02:29.775 [DEBUG] [Thread-12926] [transport.py] [_log()] Compression: none
2025-11-26T06:02:29.775 [DEBUG] [Thread-12926] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:02:29.831 [DEBUG] [Thread-12926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:02:29.832 [DEBUG] [Thread-12926] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:02:29.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:02:29.833 [DEBUG] [Thread-12926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:02:29.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:02:29.888 [DEBUG] [Thread-12926] [transport.py] [_log()] userauth is OK
2025-11-26T06:02:29.888 [DEBUG] [Thread-12926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:02:29.888 [DEBUG] [Thread-12926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:02:29.888 [DEBUG] [Thread-12926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:02:29.888 [DEBUG] [Thread-12926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:02:29.907 [INFO] [Thread-12926] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:02:29.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:02:29.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:02:30.771 [DEBUG] [Thread-12926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:02:30.771 [DEBUG] [Thread-12926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:02:30.819 [DEBUG] [Thread-12926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:02:30.819 [DEBUG] [Thread-12926] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:02:30.830 [DEBUG] [Thread-12926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:02:30.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:02:30.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:02:30.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:02:30.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:02:30.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:02:30.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:02:30.868 [DEBUG] [Thread-12926] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:02:33.767 [DEBUG] [Thread-12928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:02:35.706 [DEBUG] [Thread-12929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:02:48.819 [DEBUG] [Thread-12930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:03:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:03:00.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:03:00.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:03:01.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 2, 48), 29.93, 12.61, 0.0, 18.4, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:03:01.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:02:48
2025-11-26T06:03:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:03:01.803 [DEBUG] [Thread-12931] [transport.py] [_log()] starting thread (client mode): 0x70d2bc70
2025-11-26T06:03:01.804 [DEBUG] [Thread-12931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:03:01.823 [DEBUG] [Thread-12931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:03:01.824 [INFO] [Thread-12931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] client lang: <none>
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] server lang: <none>
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] kex follows: False
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] Compression: none
2025-11-26T06:03:01.827 [DEBUG] [Thread-12931] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:03:01.847 [DEBUG] [Thread-12931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:03:01.847 [DEBUG] [Thread-12931] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:03:01.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:03:01.848 [DEBUG] [Thread-12931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:03:01.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:03:01.850 [DEBUG] [Thread-12931] [transport.py] [_log()] userauth is OK
2025-11-26T06:03:01.850 [DEBUG] [Thread-12931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:03:01.851 [DEBUG] [Thread-12931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:03:01.851 [DEBUG] [Thread-12931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:03:01.851 [DEBUG] [Thread-12931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:03:01.889 [INFO] [Thread-12931] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:03:01.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:03:02.630 [DEBUG] [Thread-12931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:03:02.630 [DEBUG] [Thread-12931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:03:02.631 [DEBUG] [Thread-12931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:03:02.671 [DEBUG] [Thread-12931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:03:02.671 [DEBUG] [Thread-12931] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:03:02.674 [DEBUG] [Thread-12931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:03:02.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:03:02.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:03:02.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:03:02.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:03:02.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:03:02.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:03:02.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:03:02.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:03:02.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:03:02.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.168497 -999.00  +20.70  18.79     18   -4.30 1 1 1 1 1   887    0 25.26 28.91 ----- 15.7 18.8 52.8 20.6 21.9 -26.6 21.8 -25.7 20.8 -24.9 20.9 -25.7
2025-11-26T06:03:02.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:03:02.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:03:02.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.168497
2025-11-26T06:03:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:03:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:03:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:03:02.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:03:02.703 [DEBUG] [Thread-12931] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:03:02.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:03:02.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:02:48', tmtdew=29.93, humidity=12.61, cloud=0.0, wind=18.4, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:02:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:03:02.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:03:02.801 [DEBUG] [Thread-12934] [transport.py] [_log()] starting thread (client mode): 0x70d7f700
2025-11-26T06:03:02.801 [DEBUG] [Thread-12934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:03:02.817 [DEBUG] [Thread-12934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:03:02.818 [INFO] [Thread-12934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:03:02.825 [DEBUG] [Thread-12934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:03:02.825 [DEBUG] [Thread-12934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:03:02.825 [DEBUG] [Thread-12934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:03:02.825 [DEBUG] [Thread-12934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:03:02.825 [DEBUG] [Thread-12934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] client lang: <none>
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] server lang: <none>
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] kex follows: False
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] Compression: none
2025-11-26T06:03:02.826 [DEBUG] [Thread-12934] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:03:02.884 [DEBUG] [Thread-12934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:03:02.885 [DEBUG] [Thread-12934] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:03:02.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:03:02.886 [DEBUG] [Thread-12934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:03:02.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:03:02.944 [DEBUG] [Thread-12934] [transport.py] [_log()] userauth is OK
2025-11-26T06:03:02.944 [DEBUG] [Thread-12934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:03:02.944 [DEBUG] [Thread-12934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:03:02.944 [DEBUG] [Thread-12934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:03:02.944 [DEBUG] [Thread-12934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:03:02.963 [INFO] [Thread-12934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:03:02.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:03:02.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:03:03.819 [DEBUG] [Thread-12934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:03:03.820 [DEBUG] [Thread-12934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:03:03.852 [DEBUG] [Thread-12936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:03:03.867 [DEBUG] [Thread-12934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:03:03.868 [DEBUG] [Thread-12934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:03:03.877 [DEBUG] [Thread-12934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:03:03.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:03:03.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:03:03.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:03:03.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:03:03.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:03:03.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:03:03.912 [DEBUG] [Thread-12934] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:03:18.907 [DEBUG] [Thread-12937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:03:25.117 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:03:25.118 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:03:33.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:03:33.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:03:33.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:03:33.940 [DEBUG] [Thread-12938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:03:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 3, 20), 29.9, 12.65, 0.0, 17.2, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:03:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:03:20
2025-11-26T06:03:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:03:34.839 [DEBUG] [Thread-12939] [transport.py] [_log()] starting thread (client mode): 0x7374dbd0
2025-11-26T06:03:34.839 [DEBUG] [Thread-12939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:03:34.859 [DEBUG] [Thread-12939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:03:34.859 [INFO] [Thread-12939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:03:34.862 [DEBUG] [Thread-12939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:03:34.862 [DEBUG] [Thread-12939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] client lang: <none>
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] server lang: <none>
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] kex follows: False
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] Compression: none
2025-11-26T06:03:34.863 [DEBUG] [Thread-12939] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:03:34.880 [DEBUG] [Thread-12939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:03:34.880 [DEBUG] [Thread-12939] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:03:34.881 [DEBUG] [Thread-12939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:03:34.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:03:34.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:03:34.883 [DEBUG] [Thread-12939] [transport.py] [_log()] userauth is OK
2025-11-26T06:03:34.883 [DEBUG] [Thread-12939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:03:34.884 [DEBUG] [Thread-12939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:03:34.884 [DEBUG] [Thread-12939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:03:34.884 [DEBUG] [Thread-12939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:03:34.909 [INFO] [Thread-12939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:03:34.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:03:35.557 [DEBUG] [Thread-12939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:03:35.558 [DEBUG] [Thread-12939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:03:35.558 [DEBUG] [Thread-12939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:03:35.599 [DEBUG] [Thread-12939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:03:35.599 [DEBUG] [Thread-12939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:03:35.602 [DEBUG] [Thread-12939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:03:35.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:03:35.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:03:35.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:03:35.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:03:35.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:03:35.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:03:35.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:03:35.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:03:35.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:03:35.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.168844 -999.00  +20.70  16.96     18   -4.30 1 1 1 1 1   887    0 25.52 30.08 ----- 18.1 17.0 43.4 20.4 21.8 -26.7 21.8 -25.7 20.9 -24.8 20.9 -25.6
2025-11-26T06:03:35.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:03:35.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:03:35.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.168844
2025-11-26T06:03:35.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:03:35.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:03:35.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:03:35.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:03:35.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:03:20', tmtdew=29.9, humidity=12.65, cloud=0.0, wind=17.2, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:03:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:03:35.622 [DEBUG] [Thread-12939] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:03:35.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:03:35.717 [DEBUG] [Thread-12942] [transport.py] [_log()] starting thread (client mode): 0x70de6830
2025-11-26T06:03:35.717 [DEBUG] [Thread-12942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:03:35.731 [DEBUG] [Thread-12942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:03:35.732 [INFO] [Thread-12942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] client lang: <none>
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] server lang: <none>
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] kex follows: False
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:03:35.739 [DEBUG] [Thread-12942] [transport.py] [_log()] Compression: none
2025-11-26T06:03:35.740 [DEBUG] [Thread-12942] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:03:35.755 [DEBUG] [Thread-12944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:03:35.796 [DEBUG] [Thread-12942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:03:35.797 [DEBUG] [Thread-12942] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:03:35.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:03:35.798 [DEBUG] [Thread-12942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:03:35.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:03:35.852 [DEBUG] [Thread-12942] [transport.py] [_log()] userauth is OK
2025-11-26T06:03:35.852 [DEBUG] [Thread-12942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:03:35.852 [DEBUG] [Thread-12942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:03:35.852 [DEBUG] [Thread-12942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:03:35.852 [DEBUG] [Thread-12942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:03:35.878 [INFO] [Thread-12942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:03:35.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:03:35.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:03:36.719 [DEBUG] [Thread-12942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:03:36.719 [DEBUG] [Thread-12942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:03:36.768 [DEBUG] [Thread-12942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:03:36.768 [DEBUG] [Thread-12942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:03:36.777 [DEBUG] [Thread-12942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:03:36.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:03:36.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:03:36.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:03:36.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:03:36.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:03:36.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:03:36.814 [DEBUG] [Thread-12942] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:03:48.976 [DEBUG] [Thread-12945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:04:04.032 [DEBUG] [Thread-12946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:04:06.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:04:06.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:04:06.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
2025-11-26T06:04:07.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 3, 52), 29.96, 12.63, 0.0, 19.73, 21.03, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:04:07.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:03:52
2025-11-26T06:04:07.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:04:07.744 [DEBUG] [Thread-12947] [transport.py] [_log()] starting thread (client mode): 0x761da9b0
2025-11-26T06:04:07.745 [DEBUG] [Thread-12947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:04:07.765 [DEBUG] [Thread-12947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:04:07.765 [INFO] [Thread-12947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] client lang: <none>
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] server lang: <none>
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] kex follows: False
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] Compression: none
2025-11-26T06:04:07.767 [DEBUG] [Thread-12947] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:04:07.779 [DEBUG] [Thread-12947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:04:07.780 [DEBUG] [Thread-12947] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:04:07.780 [DEBUG] [Thread-12947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:04:07.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:04:07.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:04:07.783 [DEBUG] [Thread-12947] [transport.py] [_log()] userauth is OK
2025-11-26T06:04:07.783 [DEBUG] [Thread-12947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:04:07.783 [DEBUG] [Thread-12947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:04:07.783 [DEBUG] [Thread-12947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:04:07.783 [DEBUG] [Thread-12947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:04:07.820 [INFO] [Thread-12947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:04:07.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:04:08.475 [DEBUG] [Thread-12947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:04:08.476 [DEBUG] [Thread-12947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:04:08.476 [DEBUG] [Thread-12947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:04:08.516 [DEBUG] [Thread-12947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:04:08.516 [DEBUG] [Thread-12947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:04:08.518 [DEBUG] [Thread-12947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:04:08.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:04:08.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:04:08.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:04:08.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:04:08.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:04:08.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:04:08.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:04:08.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:04:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:04:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.169191 -999.00  +20.70  17.48     18   -4.30 1 1 1 1 1   887    0 25.44 31.45 ----- 17.0 17.5 42.8 19.8 21.9 -26.8 21.8 -25.8 20.9 -24.8 21.0 -25.7
2025-11-26T06:04:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:04:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:04:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.169191
2025-11-26T06:04:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:04:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:04:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:04:08.539 [DEBUG] [Thread-12947] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:04:08.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:04:08.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:04:08.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:03:52', tmtdew=29.96, humidity=12.63, cloud=0.0, wind=19.73, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:03:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:04:08.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:04:08.637 [DEBUG] [Thread-12950] [transport.py] [_log()] starting thread (client mode): 0x73780850
2025-11-26T06:04:08.637 [DEBUG] [Thread-12950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:04:08.651 [DEBUG] [Thread-12950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:04:08.651 [INFO] [Thread-12950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:04:08.658 [DEBUG] [Thread-12950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] client lang: <none>
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] server lang: <none>
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] kex follows: False
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] Compression: none
2025-11-26T06:04:08.659 [DEBUG] [Thread-12950] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:04:08.717 [DEBUG] [Thread-12950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:04:08.717 [DEBUG] [Thread-12950] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:04:08.718 [DEBUG] [Thread-12950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:04:08.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:04:08.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:04:08.772 [DEBUG] [Thread-12950] [transport.py] [_log()] userauth is OK
2025-11-26T06:04:08.773 [DEBUG] [Thread-12950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:04:08.773 [DEBUG] [Thread-12950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:04:08.773 [DEBUG] [Thread-12950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:04:08.773 [DEBUG] [Thread-12950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:04:08.791 [INFO] [Thread-12950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:04:08.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:04:08.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:04:09.652 [DEBUG] [Thread-12950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:04:09.652 [DEBUG] [Thread-12950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:04:09.701 [DEBUG] [Thread-12950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:04:09.701 [DEBUG] [Thread-12950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:04:09.710 [DEBUG] [Thread-12950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:04:09.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:04:09.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:04:09.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:04:09.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:04:09.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:04:09.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:04:09.751 [DEBUG] [Thread-12950] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:04:19.065 [DEBUG] [Thread-12952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:04:25.257 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:04:25.258 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:04:34.120 [DEBUG] [Thread-12953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:04:35.813 [DEBUG] [Thread-12954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:04:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:04:39.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:04:39.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:04:40.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 4, 24), 29.98, 12.63, 0.0, 18.42, 21.08, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:04:40.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:04:24
2025-11-26T06:04:40.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:04:40.701 [DEBUG] [Thread-12955] [transport.py] [_log()] starting thread (client mode): 0x7374c280
2025-11-26T06:04:40.702 [DEBUG] [Thread-12955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:04:40.720 [DEBUG] [Thread-12955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:04:40.721 [INFO] [Thread-12955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] client lang: <none>
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] server lang: <none>
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] kex follows: False
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] Compression: none
2025-11-26T06:04:40.724 [DEBUG] [Thread-12955] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:04:40.739 [DEBUG] [Thread-12955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:04:40.739 [DEBUG] [Thread-12955] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:04:40.739 [DEBUG] [Thread-12955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:04:40.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:04:40.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:04:40.740 [DEBUG] [Thread-12955] [transport.py] [_log()] userauth is OK
2025-11-26T06:04:40.740 [DEBUG] [Thread-12955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:04:40.740 [DEBUG] [Thread-12955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:04:40.740 [DEBUG] [Thread-12955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:04:40.740 [DEBUG] [Thread-12955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:04:40.767 [INFO] [Thread-12955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:04:40.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:04:41.427 [DEBUG] [Thread-12955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:04:41.427 [DEBUG] [Thread-12955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:04:41.427 [DEBUG] [Thread-12955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:04:41.468 [DEBUG] [Thread-12955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:04:41.468 [DEBUG] [Thread-12955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:04:41.470 [DEBUG] [Thread-12955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:04:41.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:04:41.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:04:41.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:04:41.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:04:41.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:04:41.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:04:41.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.169538 -999.00  +20.70  19.23     18   -4.20 1 1 1 1 1   887    0 25.56 29.46 ----- 19.2 19.2 45.6 20.5 22.0 -26.8 21.9 -25.7 20.9 -24.9 21.0 -25.7
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.169538
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:04:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:04:24', tmtdew=29.98, humidity=12.63, cloud=0.0, wind=18.42, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:04:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:04:41.489 [DEBUG] [Thread-12955] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:04:41.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:04:41.574 [DEBUG] [Thread-12958] [transport.py] [_log()] starting thread (client mode): 0x761daaa0
2025-11-26T06:04:41.574 [DEBUG] [Thread-12958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:04:41.588 [DEBUG] [Thread-12958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:04:41.588 [INFO] [Thread-12958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] client lang: <none>
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] server lang: <none>
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] kex follows: False
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] Compression: none
2025-11-26T06:04:41.596 [DEBUG] [Thread-12958] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:04:41.651 [DEBUG] [Thread-12958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:04:41.651 [DEBUG] [Thread-12958] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:04:41.651 [DEBUG] [Thread-12958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:04:41.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:04:41.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:04:41.708 [DEBUG] [Thread-12958] [transport.py] [_log()] userauth is OK
2025-11-26T06:04:41.708 [DEBUG] [Thread-12958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:04:41.708 [DEBUG] [Thread-12958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:04:41.708 [DEBUG] [Thread-12958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:04:41.708 [DEBUG] [Thread-12958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:04:41.722 [INFO] [Thread-12958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:04:41.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:04:41.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:04:42.521 [DEBUG] [Thread-12958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:04:42.521 [DEBUG] [Thread-12958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:04:42.569 [DEBUG] [Thread-12958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:04:42.569 [DEBUG] [Thread-12958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:04:42.577 [DEBUG] [Thread-12958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:04:42.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:04:42.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:04:42.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:04:42.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:04:42.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:04:42.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:04:42.608 [DEBUG] [Thread-12958] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:04:49.154 [DEBUG] [Thread-12960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:05:04.211 [DEBUG] [Thread-12961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:05:12.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:05:12.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:05:12.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:05:13.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 4, 56), 29.99, 12.61, 0.0, 16.02, 21.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:05:13.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:04:56
2025-11-26T06:05:13.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:05:13.558 [DEBUG] [Thread-12962] [transport.py] [_log()] starting thread (client mode): 0x761d92d0
2025-11-26T06:05:13.558 [DEBUG] [Thread-12962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:05:13.579 [DEBUG] [Thread-12962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:05:13.579 [INFO] [Thread-12962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] client lang: <none>
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] server lang: <none>
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] kex follows: False
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:05:13.580 [DEBUG] [Thread-12962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:05:13.581 [DEBUG] [Thread-12962] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:05:13.581 [DEBUG] [Thread-12962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:05:13.581 [DEBUG] [Thread-12962] [transport.py] [_log()] Compression: none
2025-11-26T06:05:13.581 [DEBUG] [Thread-12962] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:05:13.599 [DEBUG] [Thread-12962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:05:13.600 [DEBUG] [Thread-12962] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:05:13.600 [DEBUG] [Thread-12962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:05:13.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:05:13.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:05:13.602 [DEBUG] [Thread-12962] [transport.py] [_log()] userauth is OK
2025-11-26T06:05:13.602 [DEBUG] [Thread-12962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:05:13.603 [DEBUG] [Thread-12962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:05:13.603 [DEBUG] [Thread-12962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:05:13.603 [DEBUG] [Thread-12962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:05:13.629 [INFO] [Thread-12962] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:05:13.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:05:14.387 [DEBUG] [Thread-12962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:05:14.387 [DEBUG] [Thread-12962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:05:14.387 [DEBUG] [Thread-12962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:05:14.428 [DEBUG] [Thread-12962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:05:14.428 [DEBUG] [Thread-12962] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:05:14.430 [DEBUG] [Thread-12962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:05:14.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:05:14.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:05:14.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:05:14.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:05:14.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:05:14.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:05:14.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:05:14.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:05:14.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:05:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.169886 -999.00  +20.70  16.52     18   -4.30 1 1 1 1 1   887    0 25.68 30.90 ----- 15.1 16.5 49.2 23.0 22.0 -26.7 21.9 -25.9 20.9 -24.9 21.0 -25.7
2025-11-26T06:05:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:05:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:05:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.169886
2025-11-26T06:05:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:05:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:05:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:05:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:05:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:05:14.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:04:56', tmtdew=29.99, humidity=12.61, cloud=0.0, wind=16.02, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:04:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:05:14.481 [DEBUG] [Thread-12962] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:05:14.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:05:14.579 [DEBUG] [Thread-12965] [transport.py] [_log()] starting thread (client mode): 0x70d29f60
2025-11-26T06:05:14.579 [DEBUG] [Thread-12965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:05:14.593 [DEBUG] [Thread-12965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:05:14.593 [INFO] [Thread-12965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:05:14.601 [DEBUG] [Thread-12965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:05:14.601 [DEBUG] [Thread-12965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:05:14.601 [DEBUG] [Thread-12965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:05:14.601 [DEBUG] [Thread-12965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:05:14.601 [DEBUG] [Thread-12965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:05:14.601 [DEBUG] [Thread-12965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:05:14.601 [DEBUG] [Thread-12965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:05:14.601 [DEBUG] [Thread-12965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] client lang: <none>
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] server lang: <none>
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] kex follows: False
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] Compression: none
2025-11-26T06:05:14.602 [DEBUG] [Thread-12965] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:05:14.661 [DEBUG] [Thread-12965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:05:14.661 [DEBUG] [Thread-12965] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:05:14.662 [DEBUG] [Thread-12965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:05:14.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:05:14.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:05:14.721 [DEBUG] [Thread-12965] [transport.py] [_log()] userauth is OK
2025-11-26T06:05:14.722 [DEBUG] [Thread-12965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:05:14.722 [DEBUG] [Thread-12965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:05:14.722 [DEBUG] [Thread-12965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:05:14.722 [DEBUG] [Thread-12965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:05:14.742 [INFO] [Thread-12965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:05:14.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:05:14.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:05:15.559 [DEBUG] [Thread-12965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:05:15.559 [DEBUG] [Thread-12965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:05:15.609 [DEBUG] [Thread-12965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:05:15.609 [DEBUG] [Thread-12965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:05:15.617 [DEBUG] [Thread-12965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:05:15.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:05:15.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:05:15.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:05:15.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:05:15.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:05:15.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:05:15.649 [DEBUG] [Thread-12965] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:05:19.244 [DEBUG] [Thread-12967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:05:25.397 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:05:25.399 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:05:34.280 [DEBUG] [Thread-12968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:05:35.863 [DEBUG] [Thread-12969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:05:45.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:05:45.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:05:45.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:05:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 5, 28), 29.98, 12.63, 0.0, 18.44, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:05:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:05:28
2025-11-26T06:05:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:05:46.572 [DEBUG] [Thread-12970] [transport.py] [_log()] starting thread (client mode): 0x70d2a5c0
2025-11-26T06:05:46.572 [DEBUG] [Thread-12970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:05:46.593 [DEBUG] [Thread-12970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:05:46.593 [INFO] [Thread-12970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:05:46.596 [DEBUG] [Thread-12970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:05:46.596 [DEBUG] [Thread-12970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:05:46.596 [DEBUG] [Thread-12970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] client lang: <none>
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] server lang: <none>
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] kex follows: False
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:05:46.597 [DEBUG] [Thread-12970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:05:46.598 [DEBUG] [Thread-12970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:05:46.598 [DEBUG] [Thread-12970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:05:46.598 [DEBUG] [Thread-12970] [transport.py] [_log()] Compression: none
2025-11-26T06:05:46.598 [DEBUG] [Thread-12970] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:05:46.616 [DEBUG] [Thread-12970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:05:46.617 [DEBUG] [Thread-12970] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:05:46.618 [DEBUG] [Thread-12970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:05:46.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:05:46.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:05:46.620 [DEBUG] [Thread-12970] [transport.py] [_log()] userauth is OK
2025-11-26T06:05:46.620 [DEBUG] [Thread-12970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:05:46.620 [DEBUG] [Thread-12970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:05:46.620 [DEBUG] [Thread-12970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:05:46.620 [DEBUG] [Thread-12970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:05:46.659 [INFO] [Thread-12970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:05:46.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:05:47.316 [DEBUG] [Thread-12970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:05:47.317 [DEBUG] [Thread-12970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:05:47.317 [DEBUG] [Thread-12970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:05:47.357 [DEBUG] [Thread-12970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:05:47.358 [DEBUG] [Thread-12970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:05:47.361 [DEBUG] [Thread-12970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:05:47.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:05:47.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:05:47.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:05:47.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:05:47.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:05:47.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:05:47.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:05:47.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:05:47.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:05:47.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.170580 -999.00  +20.70  18.24     18   -4.30 1 1 1 1 1   887    0 25.82 32.53 ----- 18.2 18.2 48.6 20.2 22.1 -26.7 22.0 -25.8 21.0 -24.9 21.1 -25.7
2025-11-26T06:05:47.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:05:47.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:05:47.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.170580
2025-11-26T06:05:47.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:05:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:05:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:05:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:05:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:05:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:05:28', tmtdew=29.98, humidity=12.63, cloud=0.0, wind=18.44, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:05:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:05:47.383 [DEBUG] [Thread-12970] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:05:47.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:05:47.477 [DEBUG] [Thread-12973] [transport.py] [_log()] starting thread (client mode): 0x70d1ca00
2025-11-26T06:05:47.477 [DEBUG] [Thread-12973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:05:47.491 [DEBUG] [Thread-12973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:05:47.492 [INFO] [Thread-12973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:05:47.499 [DEBUG] [Thread-12973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:05:47.499 [DEBUG] [Thread-12973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] client lang: <none>
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] server lang: <none>
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] kex follows: False
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] Compression: none
2025-11-26T06:05:47.500 [DEBUG] [Thread-12973] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:05:47.557 [DEBUG] [Thread-12973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:05:47.558 [DEBUG] [Thread-12973] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:05:47.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:05:47.559 [DEBUG] [Thread-12973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:05:47.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:05:47.613 [DEBUG] [Thread-12973] [transport.py] [_log()] userauth is OK
2025-11-26T06:05:47.614 [DEBUG] [Thread-12973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:05:47.614 [DEBUG] [Thread-12973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:05:47.614 [DEBUG] [Thread-12973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:05:47.614 [DEBUG] [Thread-12973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:05:47.638 [INFO] [Thread-12973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:05:47.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:05:47.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:05:48.489 [DEBUG] [Thread-12973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:05:48.489 [DEBUG] [Thread-12973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:05:48.537 [DEBUG] [Thread-12973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:05:48.537 [DEBUG] [Thread-12973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:05:48.546 [DEBUG] [Thread-12973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:05:48.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:05:48.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:05:48.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:05:48.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:05:48.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:05:48.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:05:48.582 [DEBUG] [Thread-12973] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:05:49.311 [DEBUG] [Thread-12975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:06:04.356 [DEBUG] [Thread-12976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:06:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:06:18.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:06:18.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:06:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 6), 30.14, 12.56, 0.0, 17.86, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:06:19.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:06:00
2025-11-26T06:06:19.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:06:19.388 [DEBUG] [Thread-12977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:06:19.526 [DEBUG] [Thread-12978] [transport.py] [_log()] starting thread (client mode): 0x70d0edd0
2025-11-26T06:06:19.526 [DEBUG] [Thread-12978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:06:19.546 [DEBUG] [Thread-12978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:06:19.546 [INFO] [Thread-12978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:06:19.549 [DEBUG] [Thread-12978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:06:19.549 [DEBUG] [Thread-12978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:06:19.549 [DEBUG] [Thread-12978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:06:19.549 [DEBUG] [Thread-12978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:06:19.549 [DEBUG] [Thread-12978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:06:19.549 [DEBUG] [Thread-12978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:06:19.549 [DEBUG] [Thread-12978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] client lang: <none>
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] server lang: <none>
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] kex follows: False
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] Compression: none
2025-11-26T06:06:19.550 [DEBUG] [Thread-12978] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:06:19.569 [DEBUG] [Thread-12978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:06:19.569 [DEBUG] [Thread-12978] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:06:19.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:06:19.571 [DEBUG] [Thread-12978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:06:19.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:06:19.573 [DEBUG] [Thread-12978] [transport.py] [_log()] userauth is OK
2025-11-26T06:06:19.573 [DEBUG] [Thread-12978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:06:19.573 [DEBUG] [Thread-12978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:06:19.573 [DEBUG] [Thread-12978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:06:19.573 [DEBUG] [Thread-12978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:06:19.597 [INFO] [Thread-12978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:06:19.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:06:20.165 [DEBUG] [Thread-12978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:06:20.166 [DEBUG] [Thread-12978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:06:20.166 [DEBUG] [Thread-12978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:06:20.206 [DEBUG] [Thread-12978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:06:20.206 [DEBUG] [Thread-12978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:06:20.208 [DEBUG] [Thread-12978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:06:20.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:06:20.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:06:20.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:06:20.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:06:20.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:06:20.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:06:20.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:06:20.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:06:20.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:06:20.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.170927 -999.00  +20.70  16.29     18   -4.30 1 1 1 1 1   887    0 25.71 30.84 ----- 16.8 16.3 46.8 20.1 22.1 -26.8 22.1 -25.9 21.0 -25.0 21.1 -25.7
2025-11-26T06:06:20.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:06:20.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:06:20.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.170927
2025-11-26T06:06:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:06:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:06:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:06:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:06:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:06:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:06:00', tmtdew=30.14, humidity=12.56, cloud=0.0, wind=17.86, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:06:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:06:20.232 [DEBUG] [Thread-12978] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:06:20.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:06:20.327 [DEBUG] [Thread-12981] [transport.py] [_log()] starting thread (client mode): 0x70d0f4f0
2025-11-26T06:06:20.327 [DEBUG] [Thread-12981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:06:20.342 [DEBUG] [Thread-12981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:06:20.343 [INFO] [Thread-12981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:06:20.352 [DEBUG] [Thread-12981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:06:20.352 [DEBUG] [Thread-12981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:06:20.352 [DEBUG] [Thread-12981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:06:20.352 [DEBUG] [Thread-12981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:06:20.352 [DEBUG] [Thread-12981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:06:20.352 [DEBUG] [Thread-12981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:06:20.352 [DEBUG] [Thread-12981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:06:20.352 [DEBUG] [Thread-12981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] client lang: <none>
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] server lang: <none>
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] kex follows: False
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] Compression: none
2025-11-26T06:06:20.353 [DEBUG] [Thread-12981] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:06:20.409 [DEBUG] [Thread-12981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:06:20.410 [DEBUG] [Thread-12981] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:06:20.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:06:20.411 [DEBUG] [Thread-12981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:06:20.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:06:20.470 [DEBUG] [Thread-12981] [transport.py] [_log()] userauth is OK
2025-11-26T06:06:20.471 [DEBUG] [Thread-12981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:06:20.471 [DEBUG] [Thread-12981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:06:20.471 [DEBUG] [Thread-12981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:06:20.471 [DEBUG] [Thread-12981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:06:20.489 [INFO] [Thread-12981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:06:20.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:06:20.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:06:21.327 [DEBUG] [Thread-12981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:06:21.327 [DEBUG] [Thread-12981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:06:21.376 [DEBUG] [Thread-12981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:06:21.376 [DEBUG] [Thread-12981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:06:21.385 [DEBUG] [Thread-12981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:06:21.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:06:21.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:06:21.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:06:21.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:06:21.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:06:21.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:06:21.423 [DEBUG] [Thread-12981] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:06:25.539 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:06:25.541 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:06:34.418 [DEBUG] [Thread-12983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:06:35.922 [DEBUG] [Thread-12984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:06:49.468 [DEBUG] [Thread-12985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:06:51.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:06:51.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:06:51.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:06:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 6, 32), 30.14, 12.56, 0.0, 16.96, 21.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:06:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:06:32
2025-11-26T06:06:52.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:06:52.345 [DEBUG] [Thread-12986] [transport.py] [_log()] starting thread (client mode): 0x7376df90
2025-11-26T06:06:52.346 [DEBUG] [Thread-12986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:06:52.365 [DEBUG] [Thread-12986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:06:52.365 [INFO] [Thread-12986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] client lang: <none>
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] server lang: <none>
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] kex follows: False
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] Compression: none
2025-11-26T06:06:52.368 [DEBUG] [Thread-12986] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:06:52.386 [DEBUG] [Thread-12986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:06:52.386 [DEBUG] [Thread-12986] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:06:52.387 [DEBUG] [Thread-12986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:06:52.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:06:52.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:06:52.389 [DEBUG] [Thread-12986] [transport.py] [_log()] userauth is OK
2025-11-26T06:06:52.389 [DEBUG] [Thread-12986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:06:52.390 [DEBUG] [Thread-12986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:06:52.390 [DEBUG] [Thread-12986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:06:52.390 [DEBUG] [Thread-12986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:06:52.413 [INFO] [Thread-12986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:06:52.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:06:53.061 [DEBUG] [Thread-12986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:06:53.061 [DEBUG] [Thread-12986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:06:53.061 [DEBUG] [Thread-12986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:06:53.102 [DEBUG] [Thread-12986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:06:53.102 [DEBUG] [Thread-12986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:06:53.105 [DEBUG] [Thread-12986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:06:53.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:06:53.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:06:53.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:06:53.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:06:53.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:06:53.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:06:53.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:06:53.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:06:53.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:06:53.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.171275 -999.00  +20.70  16.96     18   -4.30 1 1 1 1 1   887    0 25.43 32.06 ----- 17.2 17.0 45.8 21.4 22.1 -26.9 22.1 -25.8 21.1 -25.2 21.1 -25.9
2025-11-26T06:06:53.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:06:53.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:06:53.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.171275
2025-11-26T06:06:53.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:06:53.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:06:53.131 [DEBUG] [Thread-12986] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:06:53.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:06:53.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:06:53.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:06:53.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:06:32', tmtdew=30.14, humidity=12.56, cloud=0.0, wind=16.96, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:06:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:06:53.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:06:53.226 [DEBUG] [Thread-12989] [transport.py] [_log()] starting thread (client mode): 0x7376f4c0
2025-11-26T06:06:53.226 [DEBUG] [Thread-12989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:06:53.241 [DEBUG] [Thread-12989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:06:53.241 [INFO] [Thread-12989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:06:53.249 [DEBUG] [Thread-12989] [transport.py] [_log()] client lang: <none>
2025-11-26T06:06:53.250 [DEBUG] [Thread-12989] [transport.py] [_log()] server lang: <none>
2025-11-26T06:06:53.250 [DEBUG] [Thread-12989] [transport.py] [_log()] kex follows: False
2025-11-26T06:06:53.250 [DEBUG] [Thread-12989] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:06:53.250 [DEBUG] [Thread-12989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:06:53.250 [DEBUG] [Thread-12989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:06:53.250 [DEBUG] [Thread-12989] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:06:53.250 [DEBUG] [Thread-12989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:06:53.250 [DEBUG] [Thread-12989] [transport.py] [_log()] Compression: none
2025-11-26T06:06:53.250 [DEBUG] [Thread-12989] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:06:53.309 [DEBUG] [Thread-12989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:06:53.310 [DEBUG] [Thread-12989] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:06:53.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:06:53.311 [DEBUG] [Thread-12989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:06:53.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:06:53.366 [DEBUG] [Thread-12989] [transport.py] [_log()] userauth is OK
2025-11-26T06:06:53.367 [DEBUG] [Thread-12989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:06:53.367 [DEBUG] [Thread-12989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:06:53.367 [DEBUG] [Thread-12989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:06:53.367 [DEBUG] [Thread-12989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:06:53.387 [INFO] [Thread-12989] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:06:53.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:06:53.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:06:54.217 [DEBUG] [Thread-12989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:06:54.217 [DEBUG] [Thread-12989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:06:54.265 [DEBUG] [Thread-12989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:06:54.265 [DEBUG] [Thread-12989] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:06:54.277 [DEBUG] [Thread-12989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:06:54.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:06:54.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:06:54.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:06:54.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:06:54.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:06:54.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:06:54.316 [DEBUG] [Thread-12989] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:07:04.506 [DEBUG] [Thread-12991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:07:19.561 [DEBUG] [Thread-12992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:07:24.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:07:24.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:07:24.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:07:24.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 7, 4), 30.13, 12.58, 0.0, 16.64, 21.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:07:24.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:07:04
2025-11-26T06:07:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:07:25.243 [DEBUG] [Thread-12993] [transport.py] [_log()] starting thread (client mode): 0x7374f580
2025-11-26T06:07:25.243 [DEBUG] [Thread-12993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:07:25.264 [DEBUG] [Thread-12993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:07:25.264 [INFO] [Thread-12993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:07:25.267 [DEBUG] [Thread-12993] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:07:25.267 [DEBUG] [Thread-12993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:07:25.267 [DEBUG] [Thread-12993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] client lang: <none>
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] server lang: <none>
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] kex follows: False
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] Compression: none
2025-11-26T06:07:25.268 [DEBUG] [Thread-12993] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:07:25.285 [DEBUG] [Thread-12993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:07:25.286 [DEBUG] [Thread-12993] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:07:25.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:07:25.287 [DEBUG] [Thread-12993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:07:25.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:07:25.289 [DEBUG] [Thread-12993] [transport.py] [_log()] userauth is OK
2025-11-26T06:07:25.289 [DEBUG] [Thread-12993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:07:25.289 [DEBUG] [Thread-12993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:07:25.289 [DEBUG] [Thread-12993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:07:25.290 [DEBUG] [Thread-12993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:07:25.307 [INFO] [Thread-12993] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:07:25.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:07:25.682 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:07:25.683 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:07:25.918 [DEBUG] [Thread-12993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:07:25.919 [DEBUG] [Thread-12993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:07:25.919 [DEBUG] [Thread-12993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:07:25.960 [DEBUG] [Thread-12993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:07:25.960 [DEBUG] [Thread-12993] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:07:25.964 [DEBUG] [Thread-12993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:07:25.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:07:25.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:07:25.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:07:25.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:07:25.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:07:25.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:07:25.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:07:25.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:07:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:07:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.171622 -999.00  +20.70  16.26     18   -4.30 1 1 1 1 1   887    0 25.57 33.80 ----- 17.6 16.3 38.2 19.9 22.1 -26.7 22.1 -26.0 21.1 -25.3 21.2 -25.7
2025-11-26T06:07:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:07:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:07:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.171622
2025-11-26T06:07:25.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:07:25.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:07:25.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:07:25.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:07:25.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:07:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:07:04', tmtdew=30.13, humidity=12.58, cloud=0.0, wind=16.64, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:07:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:07:25.993 [DEBUG] [Thread-12993] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:07:26.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:07:26.088 [DEBUG] [Thread-12996] [transport.py] [_log()] starting thread (client mode): 0x761db9d0
2025-11-26T06:07:26.088 [DEBUG] [Thread-12996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:07:26.103 [DEBUG] [Thread-12996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:07:26.103 [INFO] [Thread-12996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:07:26.111 [DEBUG] [Thread-12996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:07:26.111 [DEBUG] [Thread-12996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:07:26.111 [DEBUG] [Thread-12996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:07:26.111 [DEBUG] [Thread-12996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:07:26.111 [DEBUG] [Thread-12996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:07:26.111 [DEBUG] [Thread-12996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:07:26.111 [DEBUG] [Thread-12996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] client lang: <none>
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] server lang: <none>
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] kex follows: False
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] Compression: none
2025-11-26T06:07:26.112 [DEBUG] [Thread-12996] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:07:26.170 [DEBUG] [Thread-12996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:07:26.171 [DEBUG] [Thread-12996] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:07:26.171 [DEBUG] [Thread-12996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:07:26.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:07:26.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:07:26.226 [DEBUG] [Thread-12996] [transport.py] [_log()] userauth is OK
2025-11-26T06:07:26.226 [DEBUG] [Thread-12996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:07:26.226 [DEBUG] [Thread-12996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:07:26.226 [DEBUG] [Thread-12996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:07:26.226 [DEBUG] [Thread-12996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:07:26.247 [INFO] [Thread-12996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:07:26.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:07:26.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:07:27.094 [DEBUG] [Thread-12996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:07:27.094 [DEBUG] [Thread-12996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:07:27.142 [DEBUG] [Thread-12996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:07:27.142 [DEBUG] [Thread-12996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:07:27.151 [DEBUG] [Thread-12996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:07:27.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:07:27.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:07:27.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:07:27.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:07:27.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:07:27.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:07:27.188 [DEBUG] [Thread-12996] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:07:34.598 [DEBUG] [Thread-12998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:07:35.974 [DEBUG] [Thread-12999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:07:49.646 [DEBUG] [Thread-13000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:07:57.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:07:57.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:07: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
2025-11-26T06:07:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 7, 36), 30.14, 12.56, 0.0, 18.0, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:07:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:07:36
2025-11-26T06:07:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:07:58.131 [DEBUG] [Thread-13001] [transport.py] [_log()] starting thread (client mode): 0x761da800
2025-11-26T06:07:58.131 [DEBUG] [Thread-13001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:07:58.151 [DEBUG] [Thread-13001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:07:58.151 [INFO] [Thread-13001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:07:58.154 [DEBUG] [Thread-13001] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:07:58.154 [DEBUG] [Thread-13001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:07:58.154 [DEBUG] [Thread-13001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:07:58.154 [DEBUG] [Thread-13001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] client lang: <none>
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] server lang: <none>
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] kex follows: False
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:07:58.155 [DEBUG] [Thread-13001] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:07:58.156 [DEBUG] [Thread-13001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:07:58.156 [DEBUG] [Thread-13001] [transport.py] [_log()] Compression: none
2025-11-26T06:07:58.156 [DEBUG] [Thread-13001] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:07:58.173 [DEBUG] [Thread-13001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:07:58.174 [DEBUG] [Thread-13001] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:07:58.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:07:58.176 [DEBUG] [Thread-13001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:07:58.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:07:58.217 [DEBUG] [Thread-13001] [transport.py] [_log()] userauth is OK
2025-11-26T06:07:58.217 [DEBUG] [Thread-13001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:07:58.217 [DEBUG] [Thread-13001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:07:58.218 [DEBUG] [Thread-13001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:07:58.218 [DEBUG] [Thread-13001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:07:58.252 [INFO] [Thread-13001] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:07:58.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:07:58.867 [DEBUG] [Thread-13001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:07:58.868 [DEBUG] [Thread-13001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:07:58.869 [DEBUG] [Thread-13001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:07:58.908 [DEBUG] [Thread-13001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:07:58.909 [DEBUG] [Thread-13001] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:07:58.911 [DEBUG] [Thread-13001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:07:58.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:07:58.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:07:58.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:07:58.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:07:58.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:07:58.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:07:58.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:07:58.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:07:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:07:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.171969 -999.00  +20.70  17.82     18   -4.30 1 1 1 1 1   887    0 25.69 35.02 ----- 15.8 17.8 36.0 20.6 22.2 -26.9 22.1 -26.1 21.1 -25.0 21.2 -25.8
2025-11-26T06:07:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:07:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:07:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.171969
2025-11-26T06:07:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:07:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:07:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:07:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:07:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:07:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:07:36', tmtdew=30.14, humidity=12.56, cloud=0.0, wind=18.0, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:07:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:07:58.932 [DEBUG] [Thread-13001] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:07:59.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:07:59.029 [DEBUG] [Thread-13004] [transport.py] [_log()] starting thread (client mode): 0x70d0c640
2025-11-26T06:07:59.029 [DEBUG] [Thread-13004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:07:59.044 [DEBUG] [Thread-13004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:07:59.044 [INFO] [Thread-13004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:07:59.051 [DEBUG] [Thread-13004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] client lang: <none>
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] server lang: <none>
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] kex follows: False
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] Compression: none
2025-11-26T06:07:59.052 [DEBUG] [Thread-13004] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:07:59.110 [DEBUG] [Thread-13004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:07:59.110 [DEBUG] [Thread-13004] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:07:59.111 [DEBUG] [Thread-13004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:07:59.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:07:59.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:07:59.166 [DEBUG] [Thread-13004] [transport.py] [_log()] userauth is OK
2025-11-26T06:07:59.167 [DEBUG] [Thread-13004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:07:59.167 [DEBUG] [Thread-13004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:07:59.167 [DEBUG] [Thread-13004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:07:59.167 [DEBUG] [Thread-13004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:07:59.186 [INFO] [Thread-13004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:07:59.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:07:59.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:07:59.964 [DEBUG] [Thread-13004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:07:59.964 [DEBUG] [Thread-13004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:08:00.012 [DEBUG] [Thread-13004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:08:00.012 [DEBUG] [Thread-13004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:08:00.022 [DEBUG] [Thread-13004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:08:00.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:08:00.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:08:00.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:08:00.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:08:00.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:08:00.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:08:00.057 [DEBUG] [Thread-13004] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:08:04.683 [DEBUG] [Thread-13006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:08:19.734 [DEBUG] [Thread-13007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:08:25.823 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:08:25.824 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:08:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:08:30.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:08:30.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:08:30.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 8, 8), 30.15, 12.56, 0.0, 19.87, 21.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:08:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:08:08
2025-11-26T06:08:30.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:08:31.005 [DEBUG] [Thread-13008] [transport.py] [_log()] starting thread (client mode): 0x70d1ddb0
2025-11-26T06:08:31.005 [DEBUG] [Thread-13008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:08:31.026 [DEBUG] [Thread-13008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:08:31.026 [INFO] [Thread-13008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:08:31.028 [DEBUG] [Thread-13008] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:08:31.028 [DEBUG] [Thread-13008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:08:31.028 [DEBUG] [Thread-13008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] client lang: <none>
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] server lang: <none>
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] kex follows: False
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] Compression: none
2025-11-26T06:08:31.029 [DEBUG] [Thread-13008] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:08:31.041 [DEBUG] [Thread-13008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:08:31.042 [DEBUG] [Thread-13008] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:08:31.043 [DEBUG] [Thread-13008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:08:31.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:08:31.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:08:31.044 [DEBUG] [Thread-13008] [transport.py] [_log()] userauth is OK
2025-11-26T06:08:31.045 [DEBUG] [Thread-13008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:08:31.045 [DEBUG] [Thread-13008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:08:31.045 [DEBUG] [Thread-13008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:08:31.045 [DEBUG] [Thread-13008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:08:31.069 [INFO] [Thread-13008] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:08:31.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:08:31.642 [DEBUG] [Thread-13008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:08:31.642 [DEBUG] [Thread-13008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:08:31.643 [DEBUG] [Thread-13008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:08:31.683 [DEBUG] [Thread-13008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:08:31.683 [DEBUG] [Thread-13008] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:08:31.686 [DEBUG] [Thread-13008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:08:31.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:08:31.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:08:31.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:08:31.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:08:31.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:08:31.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:08:31.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:08:31.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:08:31.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:08:31.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.172316 -999.00  +20.70  17.91     18   -4.30 1 1 1 1 1   887    0 26.28 37.71 ----- 18.2 17.9 39.4 20.1 22.2 -26.9 22.1 -26.0 21.1 -25.3 21.2 -25.9
2025-11-26T06:08:31.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:08:31.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:08:31.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.172316
2025-11-26T06:08:31.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:08:31.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:08:31.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:08:31.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:08:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:08:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:08:08', tmtdew=30.15, humidity=12.56, cloud=0.0, wind=19.87, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:08:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:08:31.712 [DEBUG] [Thread-13008] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:08:31.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:08:31.808 [DEBUG] [Thread-13011] [transport.py] [_log()] starting thread (client mode): 0x70d1c880
2025-11-26T06:08:31.808 [DEBUG] [Thread-13011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:08:31.827 [DEBUG] [Thread-13011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:08:31.828 [INFO] [Thread-13011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:08:31.835 [DEBUG] [Thread-13011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:08:31.835 [DEBUG] [Thread-13011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:08:31.835 [DEBUG] [Thread-13011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:08:31.835 [DEBUG] [Thread-13011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] client lang: <none>
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] server lang: <none>
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] kex follows: False
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] Compression: none
2025-11-26T06:08:31.836 [DEBUG] [Thread-13011] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:08:31.895 [DEBUG] [Thread-13011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:08:31.895 [DEBUG] [Thread-13011] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:08:31.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:08:31.897 [DEBUG] [Thread-13011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:08:31.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:08:31.954 [DEBUG] [Thread-13011] [transport.py] [_log()] userauth is OK
2025-11-26T06:08:31.955 [DEBUG] [Thread-13011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:08:31.955 [DEBUG] [Thread-13011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:08:31.955 [DEBUG] [Thread-13011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:08:31.955 [DEBUG] [Thread-13011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:08:31.974 [INFO] [Thread-13011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:08:31.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:08:31.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:08:32.837 [DEBUG] [Thread-13011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:08:32.837 [DEBUG] [Thread-13011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:08:32.885 [DEBUG] [Thread-13011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:08:32.885 [DEBUG] [Thread-13011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:08:32.894 [DEBUG] [Thread-13011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:08:32.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:08:32.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')
2025-11-26T06:08:32.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:08:32.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:08:32.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:08:32.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:08:32.931 [DEBUG] [Thread-13011] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:08:34.766 [DEBUG] [Thread-13013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:08:36.023 [DEBUG] [Thread-13014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:08:49.818 [DEBUG] [Thread-13015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:09:02.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:09:02.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:09:02.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:09:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 8, 40), 30.13, 12.58, 0.0, 21.1, 21.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:09:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:08:40
2025-11-26T06:09:03.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:09:03.875 [DEBUG] [Thread-13016] [transport.py] [_log()] starting thread (client mode): 0x7374f580
2025-11-26T06:09:03.875 [DEBUG] [Thread-13016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:09:03.894 [DEBUG] [Thread-13016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:09:03.895 [INFO] [Thread-13016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] client lang: <none>
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] server lang: <none>
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] kex follows: False
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] Compression: none
2025-11-26T06:09:03.898 [DEBUG] [Thread-13016] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:09:03.918 [DEBUG] [Thread-13016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:09:03.919 [DEBUG] [Thread-13016] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:09:03.919 [DEBUG] [Thread-13016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:09:03.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:09:03.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:09:03.923 [DEBUG] [Thread-13016] [transport.py] [_log()] userauth is OK
2025-11-26T06:09:03.923 [DEBUG] [Thread-13016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:09:03.923 [DEBUG] [Thread-13016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:09:03.923 [DEBUG] [Thread-13016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:09:03.923 [DEBUG] [Thread-13016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:09:03.942 [INFO] [Thread-13016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:09:03.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:09:04.522 [DEBUG] [Thread-13016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:09:04.523 [DEBUG] [Thread-13016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:09:04.524 [DEBUG] [Thread-13016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:09:04.564 [DEBUG] [Thread-13016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:09:04.564 [DEBUG] [Thread-13016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:09:04.567 [DEBUG] [Thread-13016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:09:04.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:09:04.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:09:04.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:09:04.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:09:04.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:09:04.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:09:04.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:09:04.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:09:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:09:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.172663 -999.00  +20.70  17.59     18   -4.30 1 1 1 1 1   887    0 26.26 36.78 ----- 19.4 17.6 47.6 21.6 22.3 -26.8 22.2 -26.2 21.2 -25.3 21.2 -25.9
2025-11-26T06:09:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:09:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:09:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.172663
2025-11-26T06:09:04.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:09:04.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:09:04.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:09:04.590 [DEBUG] [Thread-13016] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:09:04.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:09:04.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:09:04.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:08:40', tmtdew=30.13, humidity=12.58, cloud=0.0, wind=21.1, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:08:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:09:04.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:09:04.690 [DEBUG] [Thread-13019] [transport.py] [_log()] starting thread (client mode): 0x7376e350
2025-11-26T06:09:04.690 [DEBUG] [Thread-13019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:09:04.704 [DEBUG] [Thread-13019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:09:04.705 [INFO] [Thread-13019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] client lang: <none>
2025-11-26T06:09:04.712 [DEBUG] [Thread-13019] [transport.py] [_log()] server lang: <none>
2025-11-26T06:09:04.713 [DEBUG] [Thread-13019] [transport.py] [_log()] kex follows: False
2025-11-26T06:09:04.713 [DEBUG] [Thread-13019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:09:04.713 [DEBUG] [Thread-13019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:09:04.713 [DEBUG] [Thread-13019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:09:04.713 [DEBUG] [Thread-13019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:09:04.713 [DEBUG] [Thread-13019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:09:04.713 [DEBUG] [Thread-13019] [transport.py] [_log()] Compression: none
2025-11-26T06:09:04.713 [DEBUG] [Thread-13019] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:09:04.771 [DEBUG] [Thread-13019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:09:04.771 [DEBUG] [Thread-13019] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:09:04.772 [DEBUG] [Thread-13019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:09:04.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:09:04.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:09:04.827 [DEBUG] [Thread-13019] [transport.py] [_log()] userauth is OK
2025-11-26T06:09:04.827 [DEBUG] [Thread-13019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:09:04.827 [DEBUG] [Thread-13019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:09:04.827 [DEBUG] [Thread-13019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:09:04.827 [DEBUG] [Thread-13019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:09:04.848 [INFO] [Thread-13019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:09:04.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:09:04.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:09:04.851 [DEBUG] [Thread-13021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:09:05.666 [DEBUG] [Thread-13019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:09:05.666 [DEBUG] [Thread-13019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:09:05.714 [DEBUG] [Thread-13019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:09:05.714 [DEBUG] [Thread-13019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:09:05.723 [DEBUG] [Thread-13019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:09:05.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:09:05.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:09:05.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:09:05.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:09:05.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:09:05.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:09:05.760 [DEBUG] [Thread-13019] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:09:19.903 [DEBUG] [Thread-13022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:09:25.964 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:09:25.966 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:09:34.940 [DEBUG] [Thread-13023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:09:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:09:35.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:09:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:09:36.069 [DEBUG] [Thread-13024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:09:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 9, 12), 30.14, 12.56, 0.0, 19.82, 21.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:09:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:09:12
2025-11-26T06:09:36.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:09:36.754 [DEBUG] [Thread-13025] [transport.py] [_log()] starting thread (client mode): 0x70de58d0
2025-11-26T06:09:36.754 [DEBUG] [Thread-13025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:09:36.768 [DEBUG] [Thread-13025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:09:36.768 [INFO] [Thread-13025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] client lang: <none>
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] server lang: <none>
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] kex follows: False
2025-11-26T06:09:36.769 [DEBUG] [Thread-13025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:09:36.770 [DEBUG] [Thread-13025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:09:36.770 [DEBUG] [Thread-13025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:09:36.770 [DEBUG] [Thread-13025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:09:36.770 [DEBUG] [Thread-13025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:09:36.770 [DEBUG] [Thread-13025] [transport.py] [_log()] Compression: none
2025-11-26T06:09:36.770 [DEBUG] [Thread-13025] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:09:36.777 [DEBUG] [Thread-13025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:09:36.777 [DEBUG] [Thread-13025] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:09:36.777 [DEBUG] [Thread-13025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:09:36.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:09:36.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:09:36.778 [DEBUG] [Thread-13025] [transport.py] [_log()] userauth is OK
2025-11-26T06:09:36.778 [DEBUG] [Thread-13025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:09:36.778 [DEBUG] [Thread-13025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:09:36.778 [DEBUG] [Thread-13025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:09:36.778 [DEBUG] [Thread-13025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:09:36.789 [INFO] [Thread-13025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:09:36.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:09:37.431 [DEBUG] [Thread-13025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:09:37.431 [DEBUG] [Thread-13025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:09:37.431 [DEBUG] [Thread-13025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:09:37.472 [DEBUG] [Thread-13025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:09:37.472 [DEBUG] [Thread-13025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:09:37.475 [DEBUG] [Thread-13025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:09:37.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:09:37.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:09:37.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:09:37.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:09:37.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:09:37.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:09:37.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:09:37.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:09:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:09:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.173011 -999.00  +20.70  20.73     18   -4.30 1 1 1 1 1   887    0 26.11 36.32 ----- 19.1 20.7 42.0 22.9 22.3 -26.8 22.2 -26.0 21.1 -25.1 21.2 -25.9
2025-11-26T06:09:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:09:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:09:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.173011
2025-11-26T06:09:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:09:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:09:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:09:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:09:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:09:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:09:12', tmtdew=30.14, humidity=12.56, cloud=0.0, wind=19.82, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:09:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:09:37.486 [DEBUG] [Thread-13025] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:09:37.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:09:37.572 [DEBUG] [Thread-13028] [transport.py] [_log()] starting thread (client mode): 0x7378f5e0
2025-11-26T06:09:37.572 [DEBUG] [Thread-13028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:09:37.587 [DEBUG] [Thread-13028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:09:37.587 [INFO] [Thread-13028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] client lang: <none>
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] server lang: <none>
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] kex follows: False
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] Compression: none
2025-11-26T06:09:37.595 [DEBUG] [Thread-13028] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:09:37.652 [DEBUG] [Thread-13028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:09:37.653 [DEBUG] [Thread-13028] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:09:37.653 [DEBUG] [Thread-13028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:09:37.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:09:37.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:09:37.711 [DEBUG] [Thread-13028] [transport.py] [_log()] userauth is OK
2025-11-26T06:09:37.711 [DEBUG] [Thread-13028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:09:37.711 [DEBUG] [Thread-13028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:09:37.711 [DEBUG] [Thread-13028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:09:37.711 [DEBUG] [Thread-13028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:09:37.728 [INFO] [Thread-13028] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:09:37.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:09:37.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:09:38.575 [DEBUG] [Thread-13028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:09:38.575 [DEBUG] [Thread-13028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:09:38.622 [DEBUG] [Thread-13028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:09:38.622 [DEBUG] [Thread-13028] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:09:38.631 [DEBUG] [Thread-13028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:09:38.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:09:38.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:09:38.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:09:38.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:09:38.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:09:38.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:09:38.663 [DEBUG] [Thread-13028] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:09:49.974 [DEBUG] [Thread-13030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:10:05.028 [DEBUG] [Thread-13031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:10:08.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:10:08.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:10:08.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:10:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 9, 44), 30.16, 12.55, 0.0, 15.32, 21.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:10:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:09:44
2025-11-26T06:10:09.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:10:09.578 [DEBUG] [Thread-13032] [transport.py] [_log()] starting thread (client mode): 0x7378e6e0
2025-11-26T06:10:09.578 [DEBUG] [Thread-13032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:10:09.599 [DEBUG] [Thread-13032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:10:09.599 [INFO] [Thread-13032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] client lang: <none>
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] server lang: <none>
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] kex follows: False
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:10:09.602 [DEBUG] [Thread-13032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:10:09.603 [DEBUG] [Thread-13032] [transport.py] [_log()] Compression: none
2025-11-26T06:10:09.603 [DEBUG] [Thread-13032] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:10:09.622 [DEBUG] [Thread-13032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:10:09.623 [DEBUG] [Thread-13032] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:10:09.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:10:09.624 [DEBUG] [Thread-13032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:10:09.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:10:09.626 [DEBUG] [Thread-13032] [transport.py] [_log()] userauth is OK
2025-11-26T06:10:09.626 [DEBUG] [Thread-13032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:10:09.626 [DEBUG] [Thread-13032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:10:09.626 [DEBUG] [Thread-13032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:10:09.626 [DEBUG] [Thread-13032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:10:09.649 [INFO] [Thread-13032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:10:09.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:10:11.077 [DEBUG] [Thread-13032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:10:11.077 [DEBUG] [Thread-13032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:10:11.077 [DEBUG] [Thread-13032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:10:11.117 [DEBUG] [Thread-13032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:10:11.118 [DEBUG] [Thread-13032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:10:11.121 [DEBUG] [Thread-13032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:10:11.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:10:11.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:10:11.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:10:11.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:10:11.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:10:11.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:10:11.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:10:11.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:10:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:10:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.173011 -999.00  +20.70  20.73     18   -4.30 1 1 1 1 1   887    0 26.11 36.32 ----- 19.1 20.7 42.0 22.9 22.3 -26.8 22.2 -26.0 21.1 -25.1 21.2 -25.9
2025-11-26T06:10:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:10:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:10:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.173011
2025-11-26T06:10:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:10:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:10:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:10:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:10:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:10:11.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:09:44', tmtdew=30.16, humidity=12.55, cloud=0.0, wind=15.32, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:09:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:10:11.148 [DEBUG] [Thread-13032] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:10:11.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:10:11.233 [DEBUG] [Thread-13035] [transport.py] [_log()] starting thread (client mode): 0x7378dd20
2025-11-26T06:10:11.233 [DEBUG] [Thread-13035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:10:11.248 [DEBUG] [Thread-13035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:10:11.248 [INFO] [Thread-13035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:10:11.255 [DEBUG] [Thread-13035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:10:11.255 [DEBUG] [Thread-13035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:10:11.255 [DEBUG] [Thread-13035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] client lang: <none>
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] server lang: <none>
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] kex follows: False
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:10:11.256 [DEBUG] [Thread-13035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:10:11.257 [DEBUG] [Thread-13035] [transport.py] [_log()] Compression: none
2025-11-26T06:10:11.257 [DEBUG] [Thread-13035] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:10:11.315 [DEBUG] [Thread-13035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:10:11.316 [DEBUG] [Thread-13035] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:10:11.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:10:11.317 [DEBUG] [Thread-13035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:10:11.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:10:11.371 [DEBUG] [Thread-13035] [transport.py] [_log()] userauth is OK
2025-11-26T06:10:11.372 [DEBUG] [Thread-13035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:10:11.372 [DEBUG] [Thread-13035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:10:11.372 [DEBUG] [Thread-13035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:10:11.372 [DEBUG] [Thread-13035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:10:11.392 [INFO] [Thread-13035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:10:11.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:10:11.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:10:12.196 [DEBUG] [Thread-13035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:10:12.196 [DEBUG] [Thread-13035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:10:12.244 [DEBUG] [Thread-13035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:10:12.244 [DEBUG] [Thread-13035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:10:12.252 [DEBUG] [Thread-13035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:10:12.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:10:12.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:10: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
2025-11-26T06:10:12.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:10:12.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:10:12.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:10:12.283 [DEBUG] [Thread-13035] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:10:20.060 [DEBUG] [Thread-13037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:10:26.110 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:10:26.111 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:10:35.118 [DEBUG] [Thread-13038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:10:36.127 [DEBUG] [Thread-13039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:10:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:10:42.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:10:42.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:10:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 10, 16), 30.16, 12.55, 0.0, 16.76, 21.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:10:42.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:10:16
2025-11-26T06:10:43.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:10:43.214 [DEBUG] [Thread-13040] [transport.py] [_log()] starting thread (client mode): 0x7374dbd0
2025-11-26T06:10:43.214 [DEBUG] [Thread-13040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:10:43.234 [DEBUG] [Thread-13040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:10:43.234 [INFO] [Thread-13040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:10:43.235 [DEBUG] [Thread-13040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] client lang: <none>
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] server lang: <none>
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] kex follows: False
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:10:43.236 [DEBUG] [Thread-13040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:10:43.237 [DEBUG] [Thread-13040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:10:43.237 [DEBUG] [Thread-13040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:10:43.237 [DEBUG] [Thread-13040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:10:43.237 [DEBUG] [Thread-13040] [transport.py] [_log()] Compression: none
2025-11-26T06:10:43.237 [DEBUG] [Thread-13040] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:10:43.246 [DEBUG] [Thread-13040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:10:43.247 [DEBUG] [Thread-13040] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:10:43.248 [DEBUG] [Thread-13040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:10:43.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:10:43.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:10:43.250 [DEBUG] [Thread-13040] [transport.py] [_log()] userauth is OK
2025-11-26T06:10:43.250 [DEBUG] [Thread-13040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:10:43.251 [DEBUG] [Thread-13040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:10:43.251 [DEBUG] [Thread-13040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:10:43.251 [DEBUG] [Thread-13040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:10:43.287 [INFO] [Thread-13040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:10:43.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:10:43.917 [DEBUG] [Thread-13040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:10:43.917 [DEBUG] [Thread-13040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:10:43.918 [DEBUG] [Thread-13040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:10:43.958 [DEBUG] [Thread-13040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:10:43.958 [DEBUG] [Thread-13040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:10:43.961 [DEBUG] [Thread-13040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:10:43.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:10:43.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:10:43.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:10:43.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:10:43.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:10:43.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:10:43.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:10:43.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:10:43.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:10:43.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.173705 -999.00  +20.70  15.82     18   -4.30 1 1 1 1 1   887    0 26.02 38.37 ----- 16.5 15.8 38.0 20.4 22.4 -27.0 22.3 -26.1 21.2 -25.4 21.3 -25.9
2025-11-26T06:10:43.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:10:43.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:10:43.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.173705
2025-11-26T06:10:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:10:43.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:10:43.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:10:43.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:10:43.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:10:43.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:10:16', tmtdew=30.16, humidity=12.55, cloud=0.0, wind=16.76, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:10:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:10:43.998 [DEBUG] [Thread-13040] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:10:44.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:10:44.102 [DEBUG] [Thread-13043] [transport.py] [_log()] starting thread (client mode): 0x7374f730
2025-11-26T06:10:44.102 [DEBUG] [Thread-13043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:10:44.116 [DEBUG] [Thread-13043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:10:44.117 [INFO] [Thread-13043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:10:44.124 [DEBUG] [Thread-13043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:10:44.124 [DEBUG] [Thread-13043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:10:44.124 [DEBUG] [Thread-13043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:10:44.125 [DEBUG] [Thread-13043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:10:44.125 [DEBUG] [Thread-13043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:10:44.125 [DEBUG] [Thread-13043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:10:44.125 [DEBUG] [Thread-13043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:10:44.125 [DEBUG] [Thread-13043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:10:44.125 [DEBUG] [Thread-13043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:10:44.125 [DEBUG] [Thread-13043] [transport.py] [_log()] client lang: <none>
2025-11-26T06:10:44.125 [DEBUG] [Thread-13043] [transport.py] [_log()] server lang: <none>
2025-11-26T06:10:44.125 [DEBUG] [Thread-13043] [transport.py] [_log()] kex follows: False
2025-11-26T06:10:44.126 [DEBUG] [Thread-13043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:10:44.126 [DEBUG] [Thread-13043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:10:44.126 [DEBUG] [Thread-13043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:10:44.126 [DEBUG] [Thread-13043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:10:44.126 [DEBUG] [Thread-13043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:10:44.126 [DEBUG] [Thread-13043] [transport.py] [_log()] Compression: none
2025-11-26T06:10:44.126 [DEBUG] [Thread-13043] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:10:44.184 [DEBUG] [Thread-13043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:10:44.185 [DEBUG] [Thread-13043] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:10:44.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:10:44.187 [DEBUG] [Thread-13043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:10:44.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:10:44.246 [DEBUG] [Thread-13043] [transport.py] [_log()] userauth is OK
2025-11-26T06:10:44.246 [DEBUG] [Thread-13043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:10:44.246 [DEBUG] [Thread-13043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:10:44.246 [DEBUG] [Thread-13043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:10:44.246 [DEBUG] [Thread-13043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:10:44.268 [INFO] [Thread-13043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:10:44.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:10:44.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:10:45.115 [DEBUG] [Thread-13043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:10:45.115 [DEBUG] [Thread-13043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:10:45.162 [DEBUG] [Thread-13043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:10:45.163 [DEBUG] [Thread-13043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:10:45.172 [DEBUG] [Thread-13043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:10:45.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:10:45.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:10:45.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:10:45.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:10:45.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:10:45.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:10:45.214 [DEBUG] [Thread-13043] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:10:50.154 [DEBUG] [Thread-13045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:11:05.194 [DEBUG] [Thread-13046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:11:15.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:11:15.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:11:15.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:11:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 10, 48), 30.13, 12.58, 0.0, 19.07, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:11:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:10:48
2025-11-26T06:11:16.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:11:16.164 [DEBUG] [Thread-13047] [transport.py] [_log()] starting thread (client mode): 0x7378fc10
2025-11-26T06:11:16.165 [DEBUG] [Thread-13047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:11:16.184 [DEBUG] [Thread-13047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:11:16.184 [INFO] [Thread-13047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:11:16.187 [DEBUG] [Thread-13047] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:11:16.187 [DEBUG] [Thread-13047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:11:16.187 [DEBUG] [Thread-13047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:11:16.187 [DEBUG] [Thread-13047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:11:16.187 [DEBUG] [Thread-13047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:11:16.187 [DEBUG] [Thread-13047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:11:16.187 [DEBUG] [Thread-13047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:11:16.187 [DEBUG] [Thread-13047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] client lang: <none>
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] server lang: <none>
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] kex follows: False
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] Compression: none
2025-11-26T06:11:16.188 [DEBUG] [Thread-13047] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:11:16.197 [DEBUG] [Thread-13047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:11:16.198 [DEBUG] [Thread-13047] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:11:16.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:11:16.199 [DEBUG] [Thread-13047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:11:16.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:11:16.201 [DEBUG] [Thread-13047] [transport.py] [_log()] userauth is OK
2025-11-26T06:11:16.201 [DEBUG] [Thread-13047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:11:16.201 [DEBUG] [Thread-13047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:11:16.201 [DEBUG] [Thread-13047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:11:16.201 [DEBUG] [Thread-13047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:11:16.226 [INFO] [Thread-13047] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:11:16.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:11:16.865 [DEBUG] [Thread-13047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:11:16.866 [DEBUG] [Thread-13047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:11:16.866 [DEBUG] [Thread-13047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:11:16.907 [DEBUG] [Thread-13047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:11:16.907 [DEBUG] [Thread-13047] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:11:16.910 [DEBUG] [Thread-13047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:11:16.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:11:16.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:11:16.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:11:16.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:11:16.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:11:16.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:11:16.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:11:16.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:11:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:11:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.174052 -999.00  +20.70  19.55     18   -4.40 1 1 1 1 1   887    0 25.71 36.30 ----- 17.3 19.6 38.2 22.6 22.4 -26.8 22.3 -26.1 21.2 -25.1 21.3 -26.0
2025-11-26T06:11:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:11:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:11:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.174052
2025-11-26T06:11:16.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:11:16.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:11:16.936 [DEBUG] [Thread-13047] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:11:16.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:11:16.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:11:16.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:11:16.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:10:48', tmtdew=30.13, humidity=12.58, cloud=0.0, wind=19.07, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:10:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:11:17.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:11:17.032 [DEBUG] [Thread-13050] [transport.py] [_log()] starting thread (client mode): 0x7374e440
2025-11-26T06:11:17.032 [DEBUG] [Thread-13050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:11:17.047 [DEBUG] [Thread-13050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:11:17.047 [INFO] [Thread-13050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:11:17.054 [DEBUG] [Thread-13050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] client lang: <none>
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] server lang: <none>
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] kex follows: False
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] Compression: none
2025-11-26T06:11:17.055 [DEBUG] [Thread-13050] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:11:17.117 [DEBUG] [Thread-13050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:11:17.118 [DEBUG] [Thread-13050] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:11:17.118 [DEBUG] [Thread-13050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:11:17.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:11:17.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:11:17.175 [DEBUG] [Thread-13050] [transport.py] [_log()] userauth is OK
2025-11-26T06:11:17.175 [DEBUG] [Thread-13050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:11:17.175 [DEBUG] [Thread-13050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:11:17.176 [DEBUG] [Thread-13050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:11:17.176 [DEBUG] [Thread-13050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:11:17.198 [INFO] [Thread-13050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:11:17.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:11:17.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:11:18.023 [DEBUG] [Thread-13050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:11:18.023 [DEBUG] [Thread-13050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:11:18.071 [DEBUG] [Thread-13050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:11:18.071 [DEBUG] [Thread-13050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:11:18.080 [DEBUG] [Thread-13050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:11:18.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:11:18.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:11:18.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:11:18.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:11:18.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:11:18.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:11:18.117 [DEBUG] [Thread-13050] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:11:20.235 [DEBUG] [Thread-13052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:11:26.251 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:11:26.252 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:11:35.282 [DEBUG] [Thread-13053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:11:36.183 [DEBUG] [Thread-13054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:11:48.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:11:48.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:11:48.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:11:48.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 11, 20), 30.2, 12.51, 0.0, 18.33, 21.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:11:48.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:11:20
2025-11-26T06:11:48.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:11:49.070 [DEBUG] [Thread-13055] [transport.py] [_log()] starting thread (client mode): 0x7374c820
2025-11-26T06:11:49.070 [DEBUG] [Thread-13055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:11:49.093 [DEBUG] [Thread-13055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:11:49.093 [INFO] [Thread-13055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:11:49.097 [DEBUG] [Thread-13055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:11:49.097 [DEBUG] [Thread-13055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] client lang: <none>
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] server lang: <none>
2025-11-26T06:11:49.098 [DEBUG] [Thread-13055] [transport.py] [_log()] kex follows: False
2025-11-26T06:11:49.099 [DEBUG] [Thread-13055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:11:49.099 [DEBUG] [Thread-13055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:11:49.099 [DEBUG] [Thread-13055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:11:49.099 [DEBUG] [Thread-13055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:11:49.099 [DEBUG] [Thread-13055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:11:49.099 [DEBUG] [Thread-13055] [transport.py] [_log()] Compression: none
2025-11-26T06:11:49.099 [DEBUG] [Thread-13055] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:11:49.118 [DEBUG] [Thread-13055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:11:49.118 [DEBUG] [Thread-13055] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:11:49.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:11:49.120 [DEBUG] [Thread-13055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:11:49.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:11:49.122 [DEBUG] [Thread-13055] [transport.py] [_log()] userauth is OK
2025-11-26T06:11:49.122 [DEBUG] [Thread-13055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:11:49.122 [DEBUG] [Thread-13055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:11:49.122 [DEBUG] [Thread-13055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:11:49.122 [DEBUG] [Thread-13055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:11:49.157 [INFO] [Thread-13055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:11:49.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:11:49.807 [DEBUG] [Thread-13055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:11:49.807 [DEBUG] [Thread-13055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:11:49.807 [DEBUG] [Thread-13055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:11:49.848 [DEBUG] [Thread-13055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:11:49.848 [DEBUG] [Thread-13055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:11:49.852 [DEBUG] [Thread-13055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:11:49.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:11:49.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:11:49.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:11:49.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:11:49.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:11:49.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:11:49.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:11:49.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:11:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:11:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.174399 -999.00  +20.70  18.53     17   -4.40 1 1 1 1 1   887    0 25.72 36.19 ----- 15.5 18.5 48.2 22.7 22.5 -27.0 22.3 -26.2 21.2 -25.2 21.3 -25.9
2025-11-26T06:11:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:11:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:11:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.174399
2025-11-26T06:11:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:11:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:11:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:11:49.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:11:49.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:11:49.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:11:20', tmtdew=30.2, humidity=12.51, cloud=0.0, wind=18.33, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:11:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:11:49.877 [DEBUG] [Thread-13055] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:11:49.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:11:49.973 [DEBUG] [Thread-13058] [transport.py] [_log()] starting thread (client mode): 0x7378c6d0
2025-11-26T06:11:49.973 [DEBUG] [Thread-13058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:11:49.988 [DEBUG] [Thread-13058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:11:49.988 [INFO] [Thread-13058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:11:49.996 [DEBUG] [Thread-13058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:11:49.996 [DEBUG] [Thread-13058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:11:49.996 [DEBUG] [Thread-13058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:11:49.996 [DEBUG] [Thread-13058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:11:49.996 [DEBUG] [Thread-13058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:11:49.996 [DEBUG] [Thread-13058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] client lang: <none>
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] server lang: <none>
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] kex follows: False
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] Compression: none
2025-11-26T06:11:49.997 [DEBUG] [Thread-13058] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:11:50.056 [DEBUG] [Thread-13058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:11:50.057 [DEBUG] [Thread-13058] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:11:50.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:11:50.058 [DEBUG] [Thread-13058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:11:50.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:11:50.114 [DEBUG] [Thread-13058] [transport.py] [_log()] userauth is OK
2025-11-26T06:11:50.114 [DEBUG] [Thread-13058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:11:50.114 [DEBUG] [Thread-13058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:11:50.115 [DEBUG] [Thread-13058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:11:50.115 [DEBUG] [Thread-13058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:11:50.133 [INFO] [Thread-13058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:11:50.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:11:50.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:11:50.320 [DEBUG] [Thread-13060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:11:50.957 [DEBUG] [Thread-13058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:11:50.957 [DEBUG] [Thread-13058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:11:51.005 [DEBUG] [Thread-13058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:11:51.005 [DEBUG] [Thread-13058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:11:51.014 [DEBUG] [Thread-13058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:11:51.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:11:51.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:11:51.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:11:51.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:11:51.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:11:51.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:11:51.051 [DEBUG] [Thread-13058] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:12:05.371 [DEBUG] [Thread-13061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:12:20.404 [DEBUG] [Thread-13062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:12:21.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:12:21.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:12:21.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:12:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 11, 52), 30.14, 12.53, 0.0, 16.13, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:12:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:11:52
2025-11-26T06:12:21.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:12:21.977 [DEBUG] [Thread-13063] [transport.py] [_log()] starting thread (client mode): 0x7376d870
2025-11-26T06:12:21.977 [DEBUG] [Thread-13063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:12:21.997 [DEBUG] [Thread-13063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:12:21.998 [INFO] [Thread-13063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:12:22.001 [DEBUG] [Thread-13063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:12:22.001 [DEBUG] [Thread-13063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:12:22.001 [DEBUG] [Thread-13063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:12:22.001 [DEBUG] [Thread-13063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:12:22.001 [DEBUG] [Thread-13063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:12:22.001 [DEBUG] [Thread-13063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:12:22.001 [DEBUG] [Thread-13063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:12:22.001 [DEBUG] [Thread-13063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:12:22.001 [DEBUG] [Thread-13063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] client lang: <none>
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] server lang: <none>
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] kex follows: False
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] Compression: none
2025-11-26T06:12:22.002 [DEBUG] [Thread-13063] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:12:22.022 [DEBUG] [Thread-13063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:12:22.022 [DEBUG] [Thread-13063] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:12:22.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:12:22.023 [DEBUG] [Thread-13063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:12:22.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:12:22.026 [DEBUG] [Thread-13063] [transport.py] [_log()] userauth is OK
2025-11-26T06:12:22.026 [DEBUG] [Thread-13063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:12:22.026 [DEBUG] [Thread-13063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:12:22.026 [DEBUG] [Thread-13063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:12:22.026 [DEBUG] [Thread-13063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:12:22.062 [INFO] [Thread-13063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:12:22.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:12:22.706 [DEBUG] [Thread-13063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:12:22.706 [DEBUG] [Thread-13063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:12:22.706 [DEBUG] [Thread-13063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:12:22.747 [DEBUG] [Thread-13063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:12:22.747 [DEBUG] [Thread-13063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:12:22.750 [DEBUG] [Thread-13063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:12:22.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:12:22.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:12:22.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:12:22.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:12:22.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:12:22.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:12:22.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:12:22.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:12:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:12:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.174747 -999.00  +20.70  15.93     17   -4.50 1 1 1 1 1   887    0 25.84 37.72 ----- 14.7 15.9 32.8 21.9 22.5 -27.0 22.4 -26.2 21.3 -25.1 21.3 -25.8
2025-11-26T06:12:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:12:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:12:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.174747
2025-11-26T06:12:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:12:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:12:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:12:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:12:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:12:22.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:11:52', tmtdew=30.14, humidity=12.53, cloud=0.0, wind=16.13, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:11:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:12:22.777 [DEBUG] [Thread-13063] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:12:22.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:12:22.872 [DEBUG] [Thread-13066] [transport.py] [_log()] starting thread (client mode): 0x7376f640
2025-11-26T06:12:22.872 [DEBUG] [Thread-13066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:12:22.888 [DEBUG] [Thread-13066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:12:22.888 [INFO] [Thread-13066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] client lang: <none>
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] server lang: <none>
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] kex follows: False
2025-11-26T06:12:22.899 [DEBUG] [Thread-13066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:12:22.900 [DEBUG] [Thread-13066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:12:22.900 [DEBUG] [Thread-13066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:12:22.900 [DEBUG] [Thread-13066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:12:22.900 [DEBUG] [Thread-13066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:12:22.900 [DEBUG] [Thread-13066] [transport.py] [_log()] Compression: none
2025-11-26T06:12:22.900 [DEBUG] [Thread-13066] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:12:22.959 [DEBUG] [Thread-13066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:12:22.960 [DEBUG] [Thread-13066] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:12:22.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:12:22.961 [DEBUG] [Thread-13066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:12:22.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:12:23.018 [DEBUG] [Thread-13066] [transport.py] [_log()] userauth is OK
2025-11-26T06:12:23.018 [DEBUG] [Thread-13066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:12:23.018 [DEBUG] [Thread-13066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:12:23.018 [DEBUG] [Thread-13066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:12:23.019 [DEBUG] [Thread-13066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:12:23.037 [INFO] [Thread-13066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:12:23.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:12:23.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:12:23.872 [DEBUG] [Thread-13066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:12:23.872 [DEBUG] [Thread-13066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:12:23.921 [DEBUG] [Thread-13066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:12:23.921 [DEBUG] [Thread-13066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:12:23.930 [DEBUG] [Thread-13066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:12:23.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:12:23.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:12:23.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:12:23.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:12:23.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:12:23.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:12:23.967 [DEBUG] [Thread-13066] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:12:26.414 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:12:26.415 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:12:35.436 [DEBUG] [Thread-13068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:12:36.236 [DEBUG] [Thread-13069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:12:50.498 [DEBUG] [Thread-13070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:12:53.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:12:53.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:12:54.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:12:54.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 12, 24), 30.12, 12.55, 0.0, 15.49, 21.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:12:54.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:12:24
2025-11-26T06:12:54.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:12:54.921 [DEBUG] [Thread-13071] [transport.py] [_log()] starting thread (client mode): 0x7378dc30
2025-11-26T06:12:54.921 [DEBUG] [Thread-13071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:12:54.941 [DEBUG] [Thread-13071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:12:54.941 [INFO] [Thread-13071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:12:54.944 [DEBUG] [Thread-13071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:12:54.944 [DEBUG] [Thread-13071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:12:54.944 [DEBUG] [Thread-13071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:12:54.944 [DEBUG] [Thread-13071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:12:54.944 [DEBUG] [Thread-13071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:12:54.944 [DEBUG] [Thread-13071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] client lang: <none>
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] server lang: <none>
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] kex follows: False
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] Compression: none
2025-11-26T06:12:54.945 [DEBUG] [Thread-13071] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:12:54.963 [DEBUG] [Thread-13071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:12:54.964 [DEBUG] [Thread-13071] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:12:54.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:12:54.965 [DEBUG] [Thread-13071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:12:54.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:12:54.968 [DEBUG] [Thread-13071] [transport.py] [_log()] userauth is OK
2025-11-26T06:12:54.968 [DEBUG] [Thread-13071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:12:54.968 [DEBUG] [Thread-13071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:12:54.968 [DEBUG] [Thread-13071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:12:54.968 [DEBUG] [Thread-13071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:12:54.988 [INFO] [Thread-13071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:12:54.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:12:55.587 [DEBUG] [Thread-13071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:12:55.587 [DEBUG] [Thread-13071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:12:55.588 [DEBUG] [Thread-13071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:12:55.628 [DEBUG] [Thread-13071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:12:55.628 [DEBUG] [Thread-13071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:12:55.632 [DEBUG] [Thread-13071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:12:55.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:12:55.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:12:55.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:12:55.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:12:55.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:12:55.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:12:55.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:12:55.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:12:55.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:12:55.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.175094 -999.00  +20.70  17.90     18   -4.40 1 1 1 1 1   887    0 26.46 38.92 ----- 15.3 17.9 41.4 21.3 22.5 -27.2 22.4 -26.2 21.3 -25.3 21.4 -25.8
2025-11-26T06:12:55.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:12:55.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:12:55.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.175094
2025-11-26T06:12:55.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:12:55.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:12:55.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:12:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:12:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:12:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:12:24', tmtdew=30.12, humidity=12.55, cloud=0.0, wind=15.49, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:12:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:12:55.661 [DEBUG] [Thread-13071] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:12:55.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:12:55.755 [DEBUG] [Thread-13074] [transport.py] [_log()] starting thread (client mode): 0x7378e770
2025-11-26T06:12:55.755 [DEBUG] [Thread-13074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:12:55.770 [DEBUG] [Thread-13074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:12:55.770 [INFO] [Thread-13074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:12:55.778 [DEBUG] [Thread-13074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:12:55.778 [DEBUG] [Thread-13074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:12:55.778 [DEBUG] [Thread-13074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:12:55.778 [DEBUG] [Thread-13074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:12:55.778 [DEBUG] [Thread-13074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:12:55.778 [DEBUG] [Thread-13074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:12:55.778 [DEBUG] [Thread-13074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:12:55.779 [DEBUG] [Thread-13074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:12:55.779 [DEBUG] [Thread-13074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:12:55.779 [DEBUG] [Thread-13074] [transport.py] [_log()] client lang: <none>
2025-11-26T06:12:55.779 [DEBUG] [Thread-13074] [transport.py] [_log()] server lang: <none>
2025-11-26T06:12:55.779 [DEBUG] [Thread-13074] [transport.py] [_log()] kex follows: False
2025-11-26T06:12:55.779 [DEBUG] [Thread-13074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:12:55.779 [DEBUG] [Thread-13074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:12:55.779 [DEBUG] [Thread-13074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:12:55.779 [DEBUG] [Thread-13074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:12:55.780 [DEBUG] [Thread-13074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:12:55.780 [DEBUG] [Thread-13074] [transport.py] [_log()] Compression: none
2025-11-26T06:12:55.780 [DEBUG] [Thread-13074] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:12:55.839 [DEBUG] [Thread-13074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:12:55.840 [DEBUG] [Thread-13074] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:12:55.840 [DEBUG] [Thread-13074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:12:55.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:12:55.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:12:55.897 [DEBUG] [Thread-13074] [transport.py] [_log()] userauth is OK
2025-11-26T06:12:55.898 [DEBUG] [Thread-13074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:12:55.898 [DEBUG] [Thread-13074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:12:55.898 [DEBUG] [Thread-13074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:12:55.898 [DEBUG] [Thread-13074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:12:55.920 [INFO] [Thread-13074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:12:55.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:12:55.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:12:56.743 [DEBUG] [Thread-13074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:12:56.743 [DEBUG] [Thread-13074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:12:56.791 [DEBUG] [Thread-13074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:12:56.791 [DEBUG] [Thread-13074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:12:56.800 [DEBUG] [Thread-13074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:12:56.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:12:56.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:12:56.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:12:56.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:12:56.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:12:56.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:12:56.838 [DEBUG] [Thread-13074] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:13:05.533 [DEBUG] [Thread-13076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:13:20.581 [DEBUG] [Thread-13077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:13:26.570 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:13:26.572 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:13:26.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:13:26.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:13:26.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:13:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 12, 56), 30.06, 12.55, 0.0, 16.15, 21.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:13:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:12:56
2025-11-26T06:13:27.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:13:27.785 [DEBUG] [Thread-13078] [transport.py] [_log()] starting thread (client mode): 0x7374fa90
2025-11-26T06:13:27.785 [DEBUG] [Thread-13078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:13:27.806 [DEBUG] [Thread-13078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:13:27.806 [INFO] [Thread-13078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:13:27.809 [DEBUG] [Thread-13078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:13:27.809 [DEBUG] [Thread-13078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:13:27.809 [DEBUG] [Thread-13078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] client lang: <none>
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] server lang: <none>
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] kex follows: False
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:13:27.810 [DEBUG] [Thread-13078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:13:27.811 [DEBUG] [Thread-13078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:13:27.811 [DEBUG] [Thread-13078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:13:27.811 [DEBUG] [Thread-13078] [transport.py] [_log()] Compression: none
2025-11-26T06:13:27.811 [DEBUG] [Thread-13078] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:13:27.830 [DEBUG] [Thread-13078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:13:27.830 [DEBUG] [Thread-13078] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:13:27.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:13:27.832 [DEBUG] [Thread-13078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:13:27.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:13:27.834 [DEBUG] [Thread-13078] [transport.py] [_log()] userauth is OK
2025-11-26T06:13:27.834 [DEBUG] [Thread-13078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:13:27.834 [DEBUG] [Thread-13078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:13:27.834 [DEBUG] [Thread-13078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:13:27.835 [DEBUG] [Thread-13078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:13:27.856 [INFO] [Thread-13078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:13:27.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:13:28.468 [DEBUG] [Thread-13078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:13:28.469 [DEBUG] [Thread-13078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:13:28.469 [DEBUG] [Thread-13078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:13:28.510 [DEBUG] [Thread-13078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:13:28.510 [DEBUG] [Thread-13078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:13:28.514 [DEBUG] [Thread-13078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:13:28.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:13:28.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:13:28.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:13:28.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:13:28.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:13:28.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:13:28.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:13:28.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:13:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:13:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.175441 -999.00  +20.70  17.01     18   -4.40 1 1 1 1 1   887    0 26.17 36.85 ----- 16.9 17.0 37.8 23.3 22.5 -27.0 22.4 -26.1 21.3 -25.2 21.4 -25.8
2025-11-26T06:13:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:13:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:13:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.175441
2025-11-26T06:13:28.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:13:28.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:13:28.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:13:28.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:13:28.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:13:28.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:12:56', tmtdew=30.06, humidity=12.55, cloud=0.0, wind=16.15, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:12:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:13:28.541 [DEBUG] [Thread-13078] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:13:28.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:13:28.635 [DEBUG] [Thread-13081] [transport.py] [_log()] starting thread (client mode): 0x7378e8c0
2025-11-26T06:13:28.635 [DEBUG] [Thread-13081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:13:28.652 [DEBUG] [Thread-13081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:13:28.652 [INFO] [Thread-13081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:13:28.660 [DEBUG] [Thread-13081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:13:28.660 [DEBUG] [Thread-13081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:13:28.661 [DEBUG] [Thread-13081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:13:28.661 [DEBUG] [Thread-13081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:13:28.661 [DEBUG] [Thread-13081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:13:28.661 [DEBUG] [Thread-13081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:13:28.661 [DEBUG] [Thread-13081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:13:28.661 [DEBUG] [Thread-13081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:13:28.661 [DEBUG] [Thread-13081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] client lang: <none>
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] server lang: <none>
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] kex follows: False
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] Compression: none
2025-11-26T06:13:28.662 [DEBUG] [Thread-13081] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:13:28.721 [DEBUG] [Thread-13081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:13:28.721 [DEBUG] [Thread-13081] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:13:28.722 [DEBUG] [Thread-13081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:13:28.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:13:28.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:13:28.777 [DEBUG] [Thread-13081] [transport.py] [_log()] userauth is OK
2025-11-26T06:13:28.778 [DEBUG] [Thread-13081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:13:28.778 [DEBUG] [Thread-13081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:13:28.778 [DEBUG] [Thread-13081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:13:28.778 [DEBUG] [Thread-13081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:13:28.805 [INFO] [Thread-13081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:13:28.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:13:28.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:13:29.656 [DEBUG] [Thread-13081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:13:29.656 [DEBUG] [Thread-13081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:13:29.707 [DEBUG] [Thread-13081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:13:29.707 [DEBUG] [Thread-13081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:13:29.715 [DEBUG] [Thread-13081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:13:29.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:13:29.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:13:29.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:13:29.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:13:29.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:13:29.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:13:29.749 [DEBUG] [Thread-13081] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:13:35.613 [DEBUG] [Thread-13083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:13:36.287 [DEBUG] [Thread-13084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:13:50.675 [DEBUG] [Thread-13085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:13:59.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:13:59.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:13:59.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:14:00.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 13, 28), 30.01, 12.6, 0.0, 16.43, 21.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:14:00.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:13:28
2025-11-26T06:14:00.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:14:00.716 [DEBUG] [Thread-13086] [transport.py] [_log()] starting thread (client mode): 0x7378c5e0
2025-11-26T06:14:00.716 [DEBUG] [Thread-13086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:14:00.737 [DEBUG] [Thread-13086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:14:00.737 [INFO] [Thread-13086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] client lang: <none>
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] server lang: <none>
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] kex follows: False
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] Compression: none
2025-11-26T06:14:00.740 [DEBUG] [Thread-13086] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:14:00.759 [DEBUG] [Thread-13086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:14:00.759 [DEBUG] [Thread-13086] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:14:00.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:14:00.760 [DEBUG] [Thread-13086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:14:00.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:14:00.762 [DEBUG] [Thread-13086] [transport.py] [_log()] userauth is OK
2025-11-26T06:14:00.763 [DEBUG] [Thread-13086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:14:00.763 [DEBUG] [Thread-13086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:14:00.763 [DEBUG] [Thread-13086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:14:00.763 [DEBUG] [Thread-13086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:14:00.787 [INFO] [Thread-13086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:14:00.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:14:01.452 [DEBUG] [Thread-13086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:14:01.452 [DEBUG] [Thread-13086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:14:01.452 [DEBUG] [Thread-13086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:14:01.493 [DEBUG] [Thread-13086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:14:01.493 [DEBUG] [Thread-13086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:14:01.495 [DEBUG] [Thread-13086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:14:01.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:14:01.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:14:01.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:14:01.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:14:01.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:14:01.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:14:01.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.175788 -999.00  +20.70  18.48     18   -4.30 1 1 1 1 1   887    0 25.75 36.81 ----- 15.9 18.5 44.0 21.6 22.5 -27.0 22.4 -26.3 21.4 -25.2 21.4 -26.0
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.175788
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:14:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:13:28', tmtdew=30.01, humidity=12.6, cloud=0.0, wind=16.43, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:13:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:14:01.510 [DEBUG] [Thread-13086] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:14:01.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:14:01.596 [DEBUG] [Thread-13089] [transport.py] [_log()] starting thread (client mode): 0x7374e470
2025-11-26T06:14:01.596 [DEBUG] [Thread-13089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:14:01.611 [DEBUG] [Thread-13089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:14:01.611 [INFO] [Thread-13089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:14:01.618 [DEBUG] [Thread-13089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:14:01.618 [DEBUG] [Thread-13089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:14:01.618 [DEBUG] [Thread-13089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] client lang: <none>
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] server lang: <none>
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] kex follows: False
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] Compression: none
2025-11-26T06:14:01.619 [DEBUG] [Thread-13089] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:14:01.675 [DEBUG] [Thread-13089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:14:01.675 [DEBUG] [Thread-13089] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:14:01.676 [DEBUG] [Thread-13089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:14:01.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:14:01.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:14:01.732 [DEBUG] [Thread-13089] [transport.py] [_log()] userauth is OK
2025-11-26T06:14:01.732 [DEBUG] [Thread-13089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:14:01.732 [DEBUG] [Thread-13089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:14:01.732 [DEBUG] [Thread-13089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:14:01.732 [DEBUG] [Thread-13089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:14:01.749 [INFO] [Thread-13089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:14:01.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:14:01.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:14:02.612 [DEBUG] [Thread-13089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:14:02.612 [DEBUG] [Thread-13089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:14:02.660 [DEBUG] [Thread-13089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:14:02.660 [DEBUG] [Thread-13089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:14:02.669 [DEBUG] [Thread-13089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:14:02.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:14:02.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:14:02.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:14:02.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:14:02.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:14:02.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:14:02.701 [DEBUG] [Thread-13089] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:14:05.708 [DEBUG] [Thread-13091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:14:20.762 [DEBUG] [Thread-13092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:14:26.711 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:14:26.712 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:14:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:14:32.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:14:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:14:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 14), 30.03, 12.58, 0.0, 17.01, 21.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:14:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:14:00
2025-11-26T06:14:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:14:33.729 [DEBUG] [Thread-13093] [transport.py] [_log()] starting thread (client mode): 0x73783c70
2025-11-26T06:14:33.729 [DEBUG] [Thread-13093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:14:33.749 [DEBUG] [Thread-13093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:14:33.749 [INFO] [Thread-13093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:14:33.752 [DEBUG] [Thread-13093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:14:33.752 [DEBUG] [Thread-13093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:14:33.752 [DEBUG] [Thread-13093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:14:33.752 [DEBUG] [Thread-13093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:14:33.752 [DEBUG] [Thread-13093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] client lang: <none>
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] server lang: <none>
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] kex follows: False
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] Compression: none
2025-11-26T06:14:33.753 [DEBUG] [Thread-13093] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:14:33.769 [DEBUG] [Thread-13093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:14:33.769 [DEBUG] [Thread-13093] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:14:33.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:14:33.769 [DEBUG] [Thread-13093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:14:33.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:14:33.770 [DEBUG] [Thread-13093] [transport.py] [_log()] userauth is OK
2025-11-26T06:14:33.770 [DEBUG] [Thread-13093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:14:33.770 [DEBUG] [Thread-13093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:14:33.770 [DEBUG] [Thread-13093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:14:33.770 [DEBUG] [Thread-13093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:14:33.782 [INFO] [Thread-13093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:14:33.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:14:34.409 [DEBUG] [Thread-13093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:14:34.409 [DEBUG] [Thread-13093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:14:34.409 [DEBUG] [Thread-13093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:14:34.450 [DEBUG] [Thread-13093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:14:34.450 [DEBUG] [Thread-13093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:14:34.453 [DEBUG] [Thread-13093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:14:34.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:14:34.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:14:34.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:14:34.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:14:34.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:14:34.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:14:34.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:14:34.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:14:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:14:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.176136 -999.00  +20.70  17.42     18   -4.40 1 1 1 1 1   887    0 25.96 36.92 ----- 18.1 17.4 46.4 21.1 22.6 -27.1 22.5 -26.2 21.4 -25.3 21.5 -25.9
2025-11-26T06:14:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:14:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:14:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.176136
2025-11-26T06:14:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:14:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:14:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:14:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:14:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:14:34.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:14:00', tmtdew=30.03, humidity=12.58, cloud=0.0, wind=17.01, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:13:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:14:34.471 [DEBUG] [Thread-13093] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:14:34.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:14:34.556 [DEBUG] [Thread-13096] [transport.py] [_log()] starting thread (client mode): 0x73783760
2025-11-26T06:14:34.556 [DEBUG] [Thread-13096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:14:34.570 [DEBUG] [Thread-13096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:14:34.570 [INFO] [Thread-13096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] client lang: <none>
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] server lang: <none>
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] kex follows: False
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] Compression: none
2025-11-26T06:14:34.578 [DEBUG] [Thread-13096] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:14:34.641 [DEBUG] [Thread-13096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:14:34.641 [DEBUG] [Thread-13096] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:14:34.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:14:34.641 [DEBUG] [Thread-13096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:14:34.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:14:34.699 [DEBUG] [Thread-13096] [transport.py] [_log()] userauth is OK
2025-11-26T06:14:34.699 [DEBUG] [Thread-13096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:14:34.699 [DEBUG] [Thread-13096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:14:34.699 [DEBUG] [Thread-13096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:14:34.699 [DEBUG] [Thread-13096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:14:34.713 [INFO] [Thread-13096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:14:34.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:14:34.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:14:35.557 [DEBUG] [Thread-13096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:14:35.557 [DEBUG] [Thread-13096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:14:35.605 [DEBUG] [Thread-13096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:14:35.605 [DEBUG] [Thread-13096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:14:35.613 [DEBUG] [Thread-13096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:14:35.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:14:35.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:14:35.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:14:35.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:14:35.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:14:35.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:14:35.643 [DEBUG] [Thread-13096] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:14:35.795 [DEBUG] [Thread-13098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:14:36.339 [DEBUG] [Thread-13099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:14:50.834 [DEBUG] [Thread-13100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:15:05.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:15:05.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:15:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:15:05.873 [DEBUG] [Thread-13101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:15:06.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 14, 32), 30.08, 12.53, 0.0, 17.26, 21.01, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:15:06.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:14:32
2025-11-26T06:15:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:15:06.654 [DEBUG] [Thread-13102] [transport.py] [_log()] starting thread (client mode): 0x7374d390
2025-11-26T06:15:06.654 [DEBUG] [Thread-13102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:15:06.674 [DEBUG] [Thread-13102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:15:06.674 [INFO] [Thread-13102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] client lang: <none>
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] server lang: <none>
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] kex follows: False
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:15:06.677 [DEBUG] [Thread-13102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:15:06.678 [DEBUG] [Thread-13102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:15:06.678 [DEBUG] [Thread-13102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:15:06.678 [DEBUG] [Thread-13102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:15:06.678 [DEBUG] [Thread-13102] [transport.py] [_log()] Compression: none
2025-11-26T06:15:06.678 [DEBUG] [Thread-13102] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:15:06.693 [DEBUG] [Thread-13102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:15:06.693 [DEBUG] [Thread-13102] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:15:06.693 [DEBUG] [Thread-13102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:15:06.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:15:06.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:15:06.694 [DEBUG] [Thread-13102] [transport.py] [_log()] userauth is OK
2025-11-26T06:15:06.694 [DEBUG] [Thread-13102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:15:06.694 [DEBUG] [Thread-13102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:15:06.694 [DEBUG] [Thread-13102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:15:06.694 [DEBUG] [Thread-13102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:15:06.704 [INFO] [Thread-13102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:15:06.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:15:09.599 [DEBUG] [Thread-13102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:15:09.599 [DEBUG] [Thread-13102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:15:09.600 [DEBUG] [Thread-13102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:15:09.640 [DEBUG] [Thread-13102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:15:09.640 [DEBUG] [Thread-13102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:15:09.642 [DEBUG] [Thread-13102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:15:09.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:15:09.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:15:09.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:15:09.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:15:09.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:15:09.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:15:09.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:15:09.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:15:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:15:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.176830 -999.00  +20.70  17.16     18   -4.40 1 1 1 1 1   887    0 25.89 34.84 ----- 18.8 17.2 42.8 19.5 22.6 -27.0 22.6 -26.2 21.4 -25.3 21.4 -25.9
2025-11-26T06:15:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:15:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:15:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.176830
2025-11-26T06:15:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:15:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:15:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:15:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:15:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:15:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:14:32', tmtdew=30.08, humidity=12.53, cloud=0.0, wind=17.26, temperature=21.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:14:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:15:09.676 [DEBUG] [Thread-13102] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:15:09.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:15:09.763 [DEBUG] [Thread-13105] [transport.py] [_log()] starting thread (client mode): 0x737c67d0
2025-11-26T06:15:09.763 [DEBUG] [Thread-13105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:15:09.778 [DEBUG] [Thread-13105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:15:09.778 [INFO] [Thread-13105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] client lang: <none>
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] server lang: <none>
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] kex follows: False
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:15:09.785 [DEBUG] [Thread-13105] [transport.py] [_log()] Compression: none
2025-11-26T06:15:09.786 [DEBUG] [Thread-13105] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:15:09.842 [DEBUG] [Thread-13105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:15:09.842 [DEBUG] [Thread-13105] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:15:09.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:15:09.842 [DEBUG] [Thread-13105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:15:09.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:15:09.899 [DEBUG] [Thread-13105] [transport.py] [_log()] userauth is OK
2025-11-26T06:15:09.899 [DEBUG] [Thread-13105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:15:09.899 [DEBUG] [Thread-13105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:15:09.899 [DEBUG] [Thread-13105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:15:09.899 [DEBUG] [Thread-13105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:15:09.913 [INFO] [Thread-13105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:15:09.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:15:09.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:15:10.744 [DEBUG] [Thread-13105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:15:10.744 [DEBUG] [Thread-13105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:15:10.792 [DEBUG] [Thread-13105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:15:10.792 [DEBUG] [Thread-13105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:15:10.800 [DEBUG] [Thread-13105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:15:10.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:15:10.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:15:10.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:15:10.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:15:10.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:15:10.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:15:10.832 [DEBUG] [Thread-13105] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:15:20.902 [DEBUG] [Thread-13107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:15:26.862 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:15:26.864 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:15:35.965 [DEBUG] [Thread-13108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:15:36.392 [DEBUG] [Thread-13109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:15:40.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:15:40.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:15:40.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:15:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 15, 36), 30.04, 12.56, 0.0, 16.07, 21.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:15:41.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:15:36
2025-11-26T06:15:41.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:15:41.757 [DEBUG] [Thread-13110] [transport.py] [_log()] starting thread (client mode): 0x7378d7e0
2025-11-26T06:15:41.757 [DEBUG] [Thread-13110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:15:41.777 [DEBUG] [Thread-13110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:15:41.777 [INFO] [Thread-13110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:15:41.780 [DEBUG] [Thread-13110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:15:41.780 [DEBUG] [Thread-13110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:15:41.780 [DEBUG] [Thread-13110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] client lang: <none>
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] server lang: <none>
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] kex follows: False
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] Compression: none
2025-11-26T06:15:41.781 [DEBUG] [Thread-13110] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:15:41.801 [DEBUG] [Thread-13110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:15:41.802 [DEBUG] [Thread-13110] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:15:41.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:15:41.802 [DEBUG] [Thread-13110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:15:41.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:15:41.805 [DEBUG] [Thread-13110] [transport.py] [_log()] userauth is OK
2025-11-26T06:15:41.805 [DEBUG] [Thread-13110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:15:41.805 [DEBUG] [Thread-13110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:15:41.805 [DEBUG] [Thread-13110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:15:41.805 [DEBUG] [Thread-13110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:15:41.840 [INFO] [Thread-13110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:15:41.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:15:42.478 [DEBUG] [Thread-13110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:15:42.479 [DEBUG] [Thread-13110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:15:42.479 [DEBUG] [Thread-13110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:15:42.520 [DEBUG] [Thread-13110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:15:42.521 [DEBUG] [Thread-13110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:15:42.525 [DEBUG] [Thread-13110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:15:42.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:15:42.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:15:42.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:15:42.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:15:42.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:15:42.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:15:42.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:15:42.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:15:42.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:15:42.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.177177 -999.00  +20.70  17.54     18   -4.40 1 1 1 1 1   887    0 25.47 33.50 ----- 15.9 17.5 46.4 19.6 22.6 -27.1 22.6 -26.2 21.4 -25.3 21.5 -25.9
2025-11-26T06:15:42.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:15:42.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:15:42.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.177177
2025-11-26T06:15:42.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:15:42.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:15:42.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:15:42.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:15:42.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:15:42.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:15:36', tmtdew=30.04, humidity=12.56, cloud=0.0, wind=16.07, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:15:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:15:42.553 [DEBUG] [Thread-13110] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:15:42.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:15:42.648 [DEBUG] [Thread-13113] [transport.py] [_log()] starting thread (client mode): 0x7378cb50
2025-11-26T06:15:42.648 [DEBUG] [Thread-13113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:15:42.664 [DEBUG] [Thread-13113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:15:42.664 [INFO] [Thread-13113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:15:42.672 [DEBUG] [Thread-13113] [transport.py] [_log()] client lang: <none>
2025-11-26T06:15:42.673 [DEBUG] [Thread-13113] [transport.py] [_log()] server lang: <none>
2025-11-26T06:15:42.673 [DEBUG] [Thread-13113] [transport.py] [_log()] kex follows: False
2025-11-26T06:15:42.673 [DEBUG] [Thread-13113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:15:42.673 [DEBUG] [Thread-13113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:15:42.673 [DEBUG] [Thread-13113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:15:42.673 [DEBUG] [Thread-13113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:15:42.673 [DEBUG] [Thread-13113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:15:42.673 [DEBUG] [Thread-13113] [transport.py] [_log()] Compression: none
2025-11-26T06:15:42.673 [DEBUG] [Thread-13113] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:15:42.731 [DEBUG] [Thread-13113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:15:42.732 [DEBUG] [Thread-13113] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:15:42.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:15:42.733 [DEBUG] [Thread-13113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:15:42.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:15:42.787 [DEBUG] [Thread-13113] [transport.py] [_log()] userauth is OK
2025-11-26T06:15:42.788 [DEBUG] [Thread-13113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:15:42.788 [DEBUG] [Thread-13113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:15:42.788 [DEBUG] [Thread-13113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:15:42.788 [DEBUG] [Thread-13113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:15:42.807 [INFO] [Thread-13113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:15:42.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:15:42.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:15:43.622 [DEBUG] [Thread-13113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:15:43.622 [DEBUG] [Thread-13113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:15:43.670 [DEBUG] [Thread-13113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:15:43.670 [DEBUG] [Thread-13113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:15:43.679 [DEBUG] [Thread-13113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:15:43.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:15:43.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:15: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
2025-11-26T06:15:43.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:15:43.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:15:43.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:15:43.722 [DEBUG] [Thread-13113] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:15:50.998 [DEBUG] [Thread-13115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:16:06.041 [DEBUG] [Thread-13116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:16:13.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:16:13.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:16:13.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:16:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 16, 8), 30.04, 12.58, 0.0, 16.59, 21.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:16:14.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:16:08
2025-11-26T06:16:14.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:16:14.680 [DEBUG] [Thread-13117] [transport.py] [_log()] starting thread (client mode): 0x70d2b430
2025-11-26T06:16:14.680 [DEBUG] [Thread-13117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:16:14.702 [DEBUG] [Thread-13117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:16:14.702 [INFO] [Thread-13117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] client lang: <none>
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] server lang: <none>
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] kex follows: False
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:16:14.705 [DEBUG] [Thread-13117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:16:14.706 [DEBUG] [Thread-13117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:16:14.706 [DEBUG] [Thread-13117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:16:14.706 [DEBUG] [Thread-13117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:16:14.706 [DEBUG] [Thread-13117] [transport.py] [_log()] Compression: none
2025-11-26T06:16:14.706 [DEBUG] [Thread-13117] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:16:14.723 [DEBUG] [Thread-13117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:16:14.724 [DEBUG] [Thread-13117] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:16:14.724 [DEBUG] [Thread-13117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:16:14.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:16:14.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:16:14.726 [DEBUG] [Thread-13117] [transport.py] [_log()] userauth is OK
2025-11-26T06:16:14.727 [DEBUG] [Thread-13117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:16:14.727 [DEBUG] [Thread-13117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:16:14.727 [DEBUG] [Thread-13117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:16:14.727 [DEBUG] [Thread-13117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:16:14.752 [INFO] [Thread-13117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:16:14.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:16:15.561 [DEBUG] [Thread-13117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:16:15.561 [DEBUG] [Thread-13117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:16:15.561 [DEBUG] [Thread-13117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:16:15.602 [DEBUG] [Thread-13117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:16:15.602 [DEBUG] [Thread-13117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:16:15.606 [DEBUG] [Thread-13117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:16:15.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:16:15.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:16:15.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:16:15.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:16:15.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:16:15.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:16:15.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:16:15.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:16:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:16:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.177524 -999.00  +20.70  16.80     18   -4.40 1 1 1 1 1   887    0 25.86 32.56 ----- 17.2 16.8 48.2 21.1 22.6 -27.2 22.6 -26.2 21.5 -25.2 21.5 -26.1
2025-11-26T06:16:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:16:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:16:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.177524
2025-11-26T06:16:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:16:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:16:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:16:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:16:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:16:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:16:08', tmtdew=30.04, humidity=12.58, cloud=0.0, wind=16.59, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:15:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:16:15.631 [DEBUG] [Thread-13117] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:16:15.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:16:15.727 [DEBUG] [Thread-13120] [transport.py] [_log()] starting thread (client mode): 0x7374f730
2025-11-26T06:16:15.727 [DEBUG] [Thread-13120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:16:15.741 [DEBUG] [Thread-13120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:16:15.741 [INFO] [Thread-13120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] client lang: <none>
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] server lang: <none>
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] kex follows: False
2025-11-26T06:16:15.749 [DEBUG] [Thread-13120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:16:15.750 [DEBUG] [Thread-13120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:16:15.750 [DEBUG] [Thread-13120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:16:15.750 [DEBUG] [Thread-13120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:16:15.750 [DEBUG] [Thread-13120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:16:15.750 [DEBUG] [Thread-13120] [transport.py] [_log()] Compression: none
2025-11-26T06:16:15.750 [DEBUG] [Thread-13120] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:16:15.807 [DEBUG] [Thread-13120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:16:15.807 [DEBUG] [Thread-13120] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:16:15.808 [DEBUG] [Thread-13120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:16:15.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:16:15.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:16:15.863 [DEBUG] [Thread-13120] [transport.py] [_log()] userauth is OK
2025-11-26T06:16:15.863 [DEBUG] [Thread-13120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:16:15.863 [DEBUG] [Thread-13120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:16:15.863 [DEBUG] [Thread-13120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:16:15.864 [DEBUG] [Thread-13120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:16:15.883 [INFO] [Thread-13120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:16:15.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:16:15.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:16:16.703 [DEBUG] [Thread-13120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:16:16.704 [DEBUG] [Thread-13120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:16:16.752 [DEBUG] [Thread-13120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:16:16.752 [DEBUG] [Thread-13120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:16:16.761 [DEBUG] [Thread-13120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:16:16.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:16:16.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:16:16.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:16:16.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:16:16.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:16:16.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:16:16.800 [DEBUG] [Thread-13120] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:16:21.081 [DEBUG] [Thread-13122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:16:27.003 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:16:27.004 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:16:36.141 [DEBUG] [Thread-13123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:16:36.443 [DEBUG] [Thread-13124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:16:46.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:16:46.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:16:46.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:16:47.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 16, 40), 30.07, 12.58, 0.0, 15.12, 21.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:16:47.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:16:40
2025-11-26T06:16:47.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:16:47.757 [DEBUG] [Thread-13125] [transport.py] [_log()] starting thread (client mode): 0x73781510
2025-11-26T06:16:47.757 [DEBUG] [Thread-13125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:16:47.777 [DEBUG] [Thread-13125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:16:47.777 [INFO] [Thread-13125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:16:47.780 [DEBUG] [Thread-13125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:16:47.780 [DEBUG] [Thread-13125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] client lang: <none>
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] server lang: <none>
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] kex follows: False
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:16:47.781 [DEBUG] [Thread-13125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:16:47.782 [DEBUG] [Thread-13125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:16:47.782 [DEBUG] [Thread-13125] [transport.py] [_log()] Compression: none
2025-11-26T06:16:47.782 [DEBUG] [Thread-13125] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:16:47.800 [DEBUG] [Thread-13125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:16:47.800 [DEBUG] [Thread-13125] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:16:47.801 [DEBUG] [Thread-13125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:16:47.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:16:47.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:16:47.803 [DEBUG] [Thread-13125] [transport.py] [_log()] userauth is OK
2025-11-26T06:16:47.803 [DEBUG] [Thread-13125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:16:47.803 [DEBUG] [Thread-13125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:16:47.803 [DEBUG] [Thread-13125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:16:47.803 [DEBUG] [Thread-13125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:16:47.838 [INFO] [Thread-13125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:16:47.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:16:48.451 [DEBUG] [Thread-13125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:16:48.451 [DEBUG] [Thread-13125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:16:48.451 [DEBUG] [Thread-13125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:16:48.492 [DEBUG] [Thread-13125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:16:48.492 [DEBUG] [Thread-13125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:16:48.495 [DEBUG] [Thread-13125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:16:48.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:16:48.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:16:48.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:16:48.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:16:48.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:16:48.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:16:48.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:16:48.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:16:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:16:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.177871 -999.00  +20.70  17.55     18   -4.40 1 1 1 1 1   887    0 25.89 33.15 ----- 17.8 17.6 54.2 20.2 22.7 -27.2 22.6 -26.3 21.5 -25.4 21.5 -25.9
2025-11-26T06:16:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:16:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:16:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.177871
2025-11-26T06:16:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:16:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:16:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:16:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:16:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:16:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:16:40', tmtdew=30.07, humidity=12.58, cloud=0.0, wind=15.12, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:16:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:16:48.520 [DEBUG] [Thread-13125] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:16:48.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:16:48.623 [DEBUG] [Thread-13128] [transport.py] [_log()] starting thread (client mode): 0x761dbf10
2025-11-26T06:16:48.623 [DEBUG] [Thread-13128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:16:48.637 [DEBUG] [Thread-13128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:16:48.637 [INFO] [Thread-13128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:16:48.645 [DEBUG] [Thread-13128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:16:48.645 [DEBUG] [Thread-13128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:16:48.645 [DEBUG] [Thread-13128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:16:48.645 [DEBUG] [Thread-13128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:16:48.645 [DEBUG] [Thread-13128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:16:48.645 [DEBUG] [Thread-13128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:16:48.645 [DEBUG] [Thread-13128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:16:48.645 [DEBUG] [Thread-13128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:16:48.646 [DEBUG] [Thread-13128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:16:48.646 [DEBUG] [Thread-13128] [transport.py] [_log()] client lang: <none>
2025-11-26T06:16:48.646 [DEBUG] [Thread-13128] [transport.py] [_log()] server lang: <none>
2025-11-26T06:16:48.646 [DEBUG] [Thread-13128] [transport.py] [_log()] kex follows: False
2025-11-26T06:16:48.646 [DEBUG] [Thread-13128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:16:48.646 [DEBUG] [Thread-13128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:16:48.646 [DEBUG] [Thread-13128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:16:48.646 [DEBUG] [Thread-13128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:16:48.646 [DEBUG] [Thread-13128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:16:48.647 [DEBUG] [Thread-13128] [transport.py] [_log()] Compression: none
2025-11-26T06:16:48.647 [DEBUG] [Thread-13128] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:16:48.702 [DEBUG] [Thread-13128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:16:48.702 [DEBUG] [Thread-13128] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:16:48.703 [DEBUG] [Thread-13128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:16:48.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:16:48.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:16:48.758 [DEBUG] [Thread-13128] [transport.py] [_log()] userauth is OK
2025-11-26T06:16:48.758 [DEBUG] [Thread-13128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:16:48.759 [DEBUG] [Thread-13128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:16:48.759 [DEBUG] [Thread-13128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:16:48.759 [DEBUG] [Thread-13128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:16:48.777 [INFO] [Thread-13128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:16:48.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:16:48.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:16:49.648 [DEBUG] [Thread-13128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:16:49.648 [DEBUG] [Thread-13128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:16:49.699 [DEBUG] [Thread-13128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:16:49.700 [DEBUG] [Thread-13128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:16:49.709 [DEBUG] [Thread-13128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:16:49.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:16:49.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:16:49.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:16:49.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:16:49.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:16:49.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:16:49.751 [DEBUG] [Thread-13128] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:16:51.175 [DEBUG] [Thread-13130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:17:06.228 [DEBUG] [Thread-13131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:17:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:17:19.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:17:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:17:20.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 17, 12), 30.07, 12.58, 0.0, 15.79, 21.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:17:20.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:17:12
2025-11-26T06:17:20.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:17:20.678 [DEBUG] [Thread-13132] [transport.py] [_log()] starting thread (client mode): 0x70d29180
2025-11-26T06:17:20.678 [DEBUG] [Thread-13132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:17:20.698 [DEBUG] [Thread-13132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:17:20.698 [INFO] [Thread-13132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:17:20.701 [DEBUG] [Thread-13132] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:17:20.701 [DEBUG] [Thread-13132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:17:20.701 [DEBUG] [Thread-13132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] client lang: <none>
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] server lang: <none>
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] kex follows: False
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] Compression: none
2025-11-26T06:17:20.702 [DEBUG] [Thread-13132] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:17:20.711 [DEBUG] [Thread-13132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:17:20.711 [DEBUG] [Thread-13132] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:17:20.712 [DEBUG] [Thread-13132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:17:20.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:17:20.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:17:20.714 [DEBUG] [Thread-13132] [transport.py] [_log()] userauth is OK
2025-11-26T06:17:20.714 [DEBUG] [Thread-13132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:17:20.714 [DEBUG] [Thread-13132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:17:20.714 [DEBUG] [Thread-13132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:17:20.714 [DEBUG] [Thread-13132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:17:20.732 [INFO] [Thread-13132] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:17:20.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:17:21.263 [DEBUG] [Thread-13134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:17:21.481 [DEBUG] [Thread-13132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:17:21.482 [DEBUG] [Thread-13132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:17:21.482 [DEBUG] [Thread-13132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:17:21.522 [DEBUG] [Thread-13132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:17:21.523 [DEBUG] [Thread-13132] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:17:21.526 [DEBUG] [Thread-13132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:17:21.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:17:21.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:17:21.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:17:21.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:17:21.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:17:21.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:17:21.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:17:21.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:17:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:17:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.178219 -999.00  +20.70  15.13     18   -4.30 1 1 1 1 1   887    0 25.81 32.13 ----- 17.2 15.1 38.6 20.3 22.7 -27.3 22.6 -26.4 21.5 -25.5 21.5 -25.8
2025-11-26T06:17:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:17:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:17:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.178219
2025-11-26T06:17:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:17:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:17:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:17:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:17:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:17:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:17:12', tmtdew=30.07, humidity=12.58, cloud=0.0, wind=15.79, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:16:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:17:21.553 [DEBUG] [Thread-13132] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:17:21.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:17:21.650 [DEBUG] [Thread-13136] [transport.py] [_log()] starting thread (client mode): 0x7374e200
2025-11-26T06:17:21.650 [DEBUG] [Thread-13136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:17:21.665 [DEBUG] [Thread-13136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:17:21.665 [INFO] [Thread-13136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:17:21.673 [DEBUG] [Thread-13136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:17:21.673 [DEBUG] [Thread-13136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:17:21.673 [DEBUG] [Thread-13136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:17:21.673 [DEBUG] [Thread-13136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:17:21.673 [DEBUG] [Thread-13136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:17:21.674 [DEBUG] [Thread-13136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:17:21.674 [DEBUG] [Thread-13136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:17:21.674 [DEBUG] [Thread-13136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:17:21.674 [DEBUG] [Thread-13136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:17:21.674 [DEBUG] [Thread-13136] [transport.py] [_log()] client lang: <none>
2025-11-26T06:17:21.674 [DEBUG] [Thread-13136] [transport.py] [_log()] server lang: <none>
2025-11-26T06:17:21.674 [DEBUG] [Thread-13136] [transport.py] [_log()] kex follows: False
2025-11-26T06:17:21.674 [DEBUG] [Thread-13136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:17:21.675 [DEBUG] [Thread-13136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:17:21.675 [DEBUG] [Thread-13136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:17:21.675 [DEBUG] [Thread-13136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:17:21.675 [DEBUG] [Thread-13136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:17:21.675 [DEBUG] [Thread-13136] [transport.py] [_log()] Compression: none
2025-11-26T06:17:21.675 [DEBUG] [Thread-13136] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:17:21.731 [DEBUG] [Thread-13136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:17:21.731 [DEBUG] [Thread-13136] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:17:21.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:17:21.733 [DEBUG] [Thread-13136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:17:21.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:17:21.789 [DEBUG] [Thread-13136] [transport.py] [_log()] userauth is OK
2025-11-26T06:17:21.789 [DEBUG] [Thread-13136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:17:21.789 [DEBUG] [Thread-13136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:17:21.789 [DEBUG] [Thread-13136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:17:21.789 [DEBUG] [Thread-13136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:17:21.808 [INFO] [Thread-13136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:17:21.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:17:21.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:17:22.618 [DEBUG] [Thread-13136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:17:22.619 [DEBUG] [Thread-13136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:17:22.667 [DEBUG] [Thread-13136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:17:22.667 [DEBUG] [Thread-13136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:17:22.676 [DEBUG] [Thread-13136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:17:22.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:17:22.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:17:22.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:17:22.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:17:22.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:17:22.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:17:22.713 [DEBUG] [Thread-13136] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:17:27.146 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:17:27.147 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:17:36.301 [DEBUG] [Thread-13138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:17:36.505 [DEBUG] [Thread-13139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:17:51.338 [DEBUG] [Thread-13140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:17:52.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:17:52.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:17:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:17:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 17, 44), 30.07, 12.58, 0.0, 16.59, 21.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:17:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:17:44
2025-11-26T06:17:53.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:17:53.648 [DEBUG] [Thread-13141] [transport.py] [_log()] starting thread (client mode): 0x70d02050
2025-11-26T06:17:53.648 [DEBUG] [Thread-13141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:17:53.668 [DEBUG] [Thread-13141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:17:53.668 [INFO] [Thread-13141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:17:53.671 [DEBUG] [Thread-13141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] client lang: <none>
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] server lang: <none>
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] kex follows: False
2025-11-26T06:17:53.672 [DEBUG] [Thread-13141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:17:53.673 [DEBUG] [Thread-13141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:17:53.673 [DEBUG] [Thread-13141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:17:53.673 [DEBUG] [Thread-13141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:17:53.673 [DEBUG] [Thread-13141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:17:53.673 [DEBUG] [Thread-13141] [transport.py] [_log()] Compression: none
2025-11-26T06:17:53.673 [DEBUG] [Thread-13141] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:17:53.691 [DEBUG] [Thread-13141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:17:53.692 [DEBUG] [Thread-13141] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:17:53.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:17:53.693 [DEBUG] [Thread-13141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:17:53.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:17:53.696 [DEBUG] [Thread-13141] [transport.py] [_log()] userauth is OK
2025-11-26T06:17:53.696 [DEBUG] [Thread-13141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:17:53.696 [DEBUG] [Thread-13141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:17:53.696 [DEBUG] [Thread-13141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:17:53.696 [DEBUG] [Thread-13141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:17:53.720 [INFO] [Thread-13141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:17:53.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:17:54.353 [DEBUG] [Thread-13141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:17:54.353 [DEBUG] [Thread-13141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:17:54.353 [DEBUG] [Thread-13141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:17:54.394 [DEBUG] [Thread-13141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:17:54.394 [DEBUG] [Thread-13141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:17:54.398 [DEBUG] [Thread-13141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:17:54.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:17:54.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:17:54.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:17:54.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:17:54.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:17:54.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:17:54.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:17:54.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:17:54.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:17:54.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.178566 -999.00  +20.70  19.57     18   -4.30 1 1 1 1 1   887    0 25.93 32.62 ----- 16.9 19.6 51.6 21.6 22.8 -27.1 22.6 -26.2 21.4 -25.3 21.5 -26.0
2025-11-26T06:17:54.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:17:54.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:17:54.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.178566
2025-11-26T06:17:54.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:17:54.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:17:54.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:17:54.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:17:54.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:17:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:17:44', tmtdew=30.07, humidity=12.58, cloud=0.0, wind=16.59, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:17:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:17:54.424 [DEBUG] [Thread-13141] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:17:54.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:17:54.523 [DEBUG] [Thread-13144] [transport.py] [_log()] starting thread (client mode): 0x7376cb20
2025-11-26T06:17:54.523 [DEBUG] [Thread-13144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:17:54.538 [DEBUG] [Thread-13144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:17:54.538 [INFO] [Thread-13144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:17:54.547 [DEBUG] [Thread-13144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:17:54.547 [DEBUG] [Thread-13144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:17:54.547 [DEBUG] [Thread-13144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:17:54.547 [DEBUG] [Thread-13144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:17:54.547 [DEBUG] [Thread-13144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:17:54.547 [DEBUG] [Thread-13144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:17:54.547 [DEBUG] [Thread-13144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] client lang: <none>
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] server lang: <none>
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] kex follows: False
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] Compression: none
2025-11-26T06:17:54.548 [DEBUG] [Thread-13144] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:17:54.606 [DEBUG] [Thread-13144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:17:54.607 [DEBUG] [Thread-13144] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:17:54.608 [DEBUG] [Thread-13144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:17:54.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:17:54.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:17:54.662 [DEBUG] [Thread-13144] [transport.py] [_log()] userauth is OK
2025-11-26T06:17:54.663 [DEBUG] [Thread-13144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:17:54.663 [DEBUG] [Thread-13144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:17:54.663 [DEBUG] [Thread-13144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:17:54.663 [DEBUG] [Thread-13144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:17:54.682 [INFO] [Thread-13144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:17:54.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:17:54.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:17:55.490 [DEBUG] [Thread-13144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:17:55.491 [DEBUG] [Thread-13144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:17:55.539 [DEBUG] [Thread-13144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:17:55.539 [DEBUG] [Thread-13144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:17:55.548 [DEBUG] [Thread-13144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:17:55.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:17:55.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:17:55.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:17:55.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:17:55.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:17:55.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:17:55.586 [DEBUG] [Thread-13144] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:18:06.376 [DEBUG] [Thread-13146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:18:21.428 [DEBUG] [Thread-13147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:18:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:18:25.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:18: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
2025-11-26T06:18:26.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 18, 16), 30.04, 12.61, 0.0, 15.86, 21.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:18:26.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:18:16
2025-11-26T06:18:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:18:26.522 [DEBUG] [Thread-13148] [transport.py] [_log()] starting thread (client mode): 0x7378c1c0
2025-11-26T06:18:26.522 [DEBUG] [Thread-13148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:18:26.542 [DEBUG] [Thread-13148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:18:26.542 [INFO] [Thread-13148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] client lang: <none>
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] server lang: <none>
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] kex follows: False
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] Compression: none
2025-11-26T06:18:26.546 [DEBUG] [Thread-13148] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:18:26.564 [DEBUG] [Thread-13148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:18:26.565 [DEBUG] [Thread-13148] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:18:26.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:18:26.566 [DEBUG] [Thread-13148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:18:26.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:18:26.568 [DEBUG] [Thread-13148] [transport.py] [_log()] userauth is OK
2025-11-26T06:18:26.568 [DEBUG] [Thread-13148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:18:26.568 [DEBUG] [Thread-13148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:18:26.568 [DEBUG] [Thread-13148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:18:26.568 [DEBUG] [Thread-13148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:18:26.601 [INFO] [Thread-13148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:18:26.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:18:27.296 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:18:27.299 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:18:27.379 [DEBUG] [Thread-13148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:18:27.379 [DEBUG] [Thread-13148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:18:27.380 [DEBUG] [Thread-13148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:18:27.421 [DEBUG] [Thread-13148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:18:27.421 [DEBUG] [Thread-13148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:18:27.425 [DEBUG] [Thread-13148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:18:27.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:18:27.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:18:27.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:18:27.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:18:27.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:18:27.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:18:27.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:18:27.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:18:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:18:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.178913 -999.00  +20.70  15.57     18   -4.30 1 1 1 1 1   887    0 25.81 32.69 ----- 14.4 15.6 43.0 20.0 22.8 -27.1 22.7 -26.3 21.6 -25.5 21.6 -25.9
2025-11-26T06:18:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:18:27.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:18:27.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.178913
2025-11-26T06:18:27.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:18:27.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:18:27.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:18:27.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:18:27.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:18:27.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:18:16', tmtdew=30.04, humidity=12.61, cloud=0.0, wind=15.86, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:17:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:18:27.449 [DEBUG] [Thread-13148] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:18:27.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:18:27.546 [DEBUG] [Thread-13151] [transport.py] [_log()] starting thread (client mode): 0x7378e5f0
2025-11-26T06:18:27.546 [DEBUG] [Thread-13151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:18:27.562 [DEBUG] [Thread-13151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:18:27.562 [INFO] [Thread-13151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:18:27.570 [DEBUG] [Thread-13151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:18:27.570 [DEBUG] [Thread-13151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:18:27.570 [DEBUG] [Thread-13151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:18:27.570 [DEBUG] [Thread-13151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:18:27.571 [DEBUG] [Thread-13151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:18:27.571 [DEBUG] [Thread-13151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:18:27.571 [DEBUG] [Thread-13151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:18:27.571 [DEBUG] [Thread-13151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:18:27.571 [DEBUG] [Thread-13151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:18:27.571 [DEBUG] [Thread-13151] [transport.py] [_log()] client lang: <none>
2025-11-26T06:18:27.571 [DEBUG] [Thread-13151] [transport.py] [_log()] server lang: <none>
2025-11-26T06:18:27.571 [DEBUG] [Thread-13151] [transport.py] [_log()] kex follows: False
2025-11-26T06:18:27.571 [DEBUG] [Thread-13151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:18:27.572 [DEBUG] [Thread-13151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:18:27.572 [DEBUG] [Thread-13151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:18:27.572 [DEBUG] [Thread-13151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:18:27.572 [DEBUG] [Thread-13151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:18:27.572 [DEBUG] [Thread-13151] [transport.py] [_log()] Compression: none
2025-11-26T06:18:27.572 [DEBUG] [Thread-13151] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:18:27.630 [DEBUG] [Thread-13151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:18:27.630 [DEBUG] [Thread-13151] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:18:27.631 [DEBUG] [Thread-13151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:18:27.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:18:27.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:18:27.686 [DEBUG] [Thread-13151] [transport.py] [_log()] userauth is OK
2025-11-26T06:18:27.686 [DEBUG] [Thread-13151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:18:27.686 [DEBUG] [Thread-13151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:18:27.687 [DEBUG] [Thread-13151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:18:27.687 [DEBUG] [Thread-13151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:18:27.705 [INFO] [Thread-13151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:18:27.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:18:27.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:18:28.541 [DEBUG] [Thread-13151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:18:28.542 [DEBUG] [Thread-13151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:18:28.590 [DEBUG] [Thread-13151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:18:28.590 [DEBUG] [Thread-13151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:18:28.599 [DEBUG] [Thread-13151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:18:28.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:18:28.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:18:28.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:18:28.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:18:28.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:18:28.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:18:28.637 [DEBUG] [Thread-13151] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:18:36.466 [DEBUG] [Thread-13153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:18:36.561 [DEBUG] [Thread-13154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:18:51.526 [DEBUG] [Thread-13155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:18:58.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:18:58.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:18:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:18:59.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 18, 49), 30.09, 12.61, 0.0, 15.76, 21.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:18:59.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:18:49
2025-11-26T06:18:59.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:18:59.570 [DEBUG] [Thread-13156] [transport.py] [_log()] starting thread (client mode): 0x7378fcd0
2025-11-26T06:18:59.570 [DEBUG] [Thread-13156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:18:59.595 [DEBUG] [Thread-13156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:18:59.596 [INFO] [Thread-13156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] client lang: <none>
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] server lang: <none>
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] kex follows: False
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:18:59.599 [DEBUG] [Thread-13156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:18:59.600 [DEBUG] [Thread-13156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:18:59.600 [DEBUG] [Thread-13156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:18:59.600 [DEBUG] [Thread-13156] [transport.py] [_log()] Compression: none
2025-11-26T06:18:59.600 [DEBUG] [Thread-13156] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:18:59.618 [DEBUG] [Thread-13156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:18:59.619 [DEBUG] [Thread-13156] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:18:59.619 [DEBUG] [Thread-13156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:18:59.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:18:59.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:18:59.621 [DEBUG] [Thread-13156] [transport.py] [_log()] userauth is OK
2025-11-26T06:18:59.622 [DEBUG] [Thread-13156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:18:59.622 [DEBUG] [Thread-13156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:18:59.622 [DEBUG] [Thread-13156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:18:59.622 [DEBUG] [Thread-13156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:18:59.648 [INFO] [Thread-13156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:18:59.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:19:00.241 [DEBUG] [Thread-13156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:19:00.241 [DEBUG] [Thread-13156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:19:00.241 [DEBUG] [Thread-13156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:19:00.282 [DEBUG] [Thread-13156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:19:00.282 [DEBUG] [Thread-13156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:19:00.285 [DEBUG] [Thread-13156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:19:00.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:19:00.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:19:00.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:19:00.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:19:00.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:19:00.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:19:00.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:19:00.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:19:00.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:19:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.179608 -999.00  +20.70  15.53     18   -4.30 1 1 1 1 1   887    0 26.19 29.98 ----- 17.7 15.5 41.6 20.0 22.8 -27.3 22.7 -26.7 21.5 -25.5 21.6 -25.9
2025-11-26T06:19:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:19:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:19:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.179608
2025-11-26T06:19:00.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:19:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:19:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:19:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:19:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:19:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:18:49', tmtdew=30.09, humidity=12.61, cloud=0.0, wind=15.76, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:18:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:19:00.314 [DEBUG] [Thread-13156] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:19:00.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:19:00.409 [DEBUG] [Thread-13159] [transport.py] [_log()] starting thread (client mode): 0x7378dc30
2025-11-26T06:19:00.409 [DEBUG] [Thread-13159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:19:00.423 [DEBUG] [Thread-13159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:19:00.424 [INFO] [Thread-13159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:19:00.431 [DEBUG] [Thread-13159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:19:00.431 [DEBUG] [Thread-13159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:19:00.431 [DEBUG] [Thread-13159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] client lang: <none>
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] server lang: <none>
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] kex follows: False
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:19:00.432 [DEBUG] [Thread-13159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:19:00.433 [DEBUG] [Thread-13159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:19:00.433 [DEBUG] [Thread-13159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:19:00.433 [DEBUG] [Thread-13159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:19:00.433 [DEBUG] [Thread-13159] [transport.py] [_log()] Compression: none
2025-11-26T06:19:00.433 [DEBUG] [Thread-13159] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:19:00.490 [DEBUG] [Thread-13159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:19:00.491 [DEBUG] [Thread-13159] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:19:00.491 [DEBUG] [Thread-13159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:19:00.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:19:00.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:19:00.545 [DEBUG] [Thread-13159] [transport.py] [_log()] userauth is OK
2025-11-26T06:19:00.546 [DEBUG] [Thread-13159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:19:00.546 [DEBUG] [Thread-13159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:19:00.546 [DEBUG] [Thread-13159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:19:00.546 [DEBUG] [Thread-13159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:19:00.565 [INFO] [Thread-13159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:19:00.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:19:00.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:19:01.414 [DEBUG] [Thread-13159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:19:01.414 [DEBUG] [Thread-13159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:19:01.463 [DEBUG] [Thread-13159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:19:01.463 [DEBUG] [Thread-13159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:19:01.472 [DEBUG] [Thread-13159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:19:01.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:19: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')
2025-11-26T06:19:01.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:19:01.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:19:01.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:19:01.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:19:01.510 [DEBUG] [Thread-13159] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:19:06.562 [DEBUG] [Thread-13161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:19:21.621 [DEBUG] [Thread-13162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:19:27.441 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:19:27.442 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:19:31.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:19:31.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:19:31.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:19:32.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 19, 21), 30.09, 12.61, 0.0, 14.98, 21.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:19:32.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:19:21
2025-11-26T06:19:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:19:32.504 [DEBUG] [Thread-13163] [transport.py] [_log()] starting thread (client mode): 0x761d9c00
2025-11-26T06:19:32.504 [DEBUG] [Thread-13163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:19:32.523 [DEBUG] [Thread-13163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:19:32.523 [INFO] [Thread-13163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] client lang: <none>
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] server lang: <none>
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] kex follows: False
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] Compression: none
2025-11-26T06:19:32.527 [DEBUG] [Thread-13163] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:19:32.541 [DEBUG] [Thread-13163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:19:32.541 [DEBUG] [Thread-13163] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:19:32.541 [DEBUG] [Thread-13163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:19:32.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:19:32.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:19:32.542 [DEBUG] [Thread-13163] [transport.py] [_log()] userauth is OK
2025-11-26T06:19:32.542 [DEBUG] [Thread-13163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:19:32.542 [DEBUG] [Thread-13163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:19:32.542 [DEBUG] [Thread-13163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:19:32.542 [DEBUG] [Thread-13163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:19:32.551 [INFO] [Thread-13163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:19:32.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:19:33.344 [DEBUG] [Thread-13163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:19:33.345 [DEBUG] [Thread-13163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:19:33.345 [DEBUG] [Thread-13163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:19:33.385 [DEBUG] [Thread-13163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:19:33.385 [DEBUG] [Thread-13163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:19:33.387 [DEBUG] [Thread-13163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:19:33.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:19:33.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:19:33.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:19:33.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:19:33.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:19:33.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:19:33.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:19:33.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:19:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:19:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.179955 -999.00  +20.70  15.88     18   -4.30 1 1 1 1 1   887    0 25.70 26.58 ----- 16.4 15.9 51.0 18.4 22.8 -27.2 22.7 -26.2 21.6 -25.5 21.6 -26.1
2025-11-26T06:19:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:19:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:19:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.179955
2025-11-26T06:19:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:19:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:19:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:19:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:19:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:19:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:19:21', tmtdew=30.09, humidity=12.61, cloud=0.0, wind=14.98, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:19:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:19:33.408 [DEBUG] [Thread-13163] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:19:33.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:19:33.492 [DEBUG] [Thread-13166] [transport.py] [_log()] starting thread (client mode): 0x70d0df00
2025-11-26T06:19:33.492 [DEBUG] [Thread-13166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:19:33.506 [DEBUG] [Thread-13166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:19:33.506 [INFO] [Thread-13166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:19:33.513 [DEBUG] [Thread-13166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:19:33.513 [DEBUG] [Thread-13166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:19:33.513 [DEBUG] [Thread-13166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:19:33.513 [DEBUG] [Thread-13166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:19:33.513 [DEBUG] [Thread-13166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:19:33.513 [DEBUG] [Thread-13166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:19:33.513 [DEBUG] [Thread-13166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:19:33.513 [DEBUG] [Thread-13166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:19:33.513 [DEBUG] [Thread-13166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] client lang: <none>
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] server lang: <none>
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] kex follows: False
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] Compression: none
2025-11-26T06:19:33.514 [DEBUG] [Thread-13166] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:19:33.576 [DEBUG] [Thread-13166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:19:33.577 [DEBUG] [Thread-13166] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:19:33.577 [DEBUG] [Thread-13166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:19:33.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:19:33.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:19:33.634 [DEBUG] [Thread-13166] [transport.py] [_log()] userauth is OK
2025-11-26T06:19:33.634 [DEBUG] [Thread-13166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:19:33.634 [DEBUG] [Thread-13166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:19:33.634 [DEBUG] [Thread-13166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:19:33.634 [DEBUG] [Thread-13166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:19:33.648 [INFO] [Thread-13166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:19:33.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:19:33.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:19:34.485 [DEBUG] [Thread-13166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:19:34.485 [DEBUG] [Thread-13166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:19:34.533 [DEBUG] [Thread-13166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:19:34.533 [DEBUG] [Thread-13166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:19:34.541 [DEBUG] [Thread-13166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:19:34.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:19:34.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:19:34.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:19:34.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:19:34.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:19:34.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:19:34.576 [DEBUG] [Thread-13166] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:19:36.614 [DEBUG] [Thread-13168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:19:36.649 [DEBUG] [Thread-13169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:19:51.711 [DEBUG] [Thread-13170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:20:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:20:04.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:20:04.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:20:05.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 19, 53), 30.07, 12.58, 0.0, 16.8, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:20:05.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:19:53
2025-11-26T06:20:05.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:20:05.507 [DEBUG] [Thread-13171] [transport.py] [_log()] starting thread (client mode): 0x70d0ffd0
2025-11-26T06:20:05.507 [DEBUG] [Thread-13171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:20:05.531 [DEBUG] [Thread-13171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:20:05.531 [INFO] [Thread-13171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] client lang: <none>
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] server lang: <none>
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] kex follows: False
2025-11-26T06:20:05.536 [DEBUG] [Thread-13171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:20:05.537 [DEBUG] [Thread-13171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:20:05.537 [DEBUG] [Thread-13171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:20:05.537 [DEBUG] [Thread-13171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:20:05.537 [DEBUG] [Thread-13171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:20:05.537 [DEBUG] [Thread-13171] [transport.py] [_log()] Compression: none
2025-11-26T06:20:05.537 [DEBUG] [Thread-13171] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:20:05.553 [DEBUG] [Thread-13171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:20:05.554 [DEBUG] [Thread-13171] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:20:05.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:20:05.555 [DEBUG] [Thread-13171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:20:05.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:20:05.597 [DEBUG] [Thread-13171] [transport.py] [_log()] userauth is OK
2025-11-26T06:20:05.597 [DEBUG] [Thread-13171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:20:05.597 [DEBUG] [Thread-13171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:20:05.598 [DEBUG] [Thread-13171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:20:05.598 [DEBUG] [Thread-13171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:20:05.629 [INFO] [Thread-13171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:20:05.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:20:06.747 [DEBUG] [Thread-13173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:20:06.881 [DEBUG] [Thread-13171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:20:06.882 [DEBUG] [Thread-13171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:20:06.882 [DEBUG] [Thread-13171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:20:06.922 [DEBUG] [Thread-13171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:20:06.922 [DEBUG] [Thread-13171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:20:06.925 [DEBUG] [Thread-13171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:20:06.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:20:06.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:20:06.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:20:06.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:20:06.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:20:06.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:20:06.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.180302 -999.00  +20.70  16.66     18   -4.30 1 1 1 1 1   887    0 26.22 26.26 ----- 18.0 16.7 39.8 19.5 22.9 -27.3 22.8 -26.5 21.6 -25.6 21.6 -26.0
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.180302
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:20:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:19:53', tmtdew=30.07, humidity=12.58, cloud=0.0, wind=16.8, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:19:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:20:06.971 [DEBUG] [Thread-13171] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:20:07.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:20:07.055 [DEBUG] [Thread-13175] [transport.py] [_log()] starting thread (client mode): 0x761db2e0
2025-11-26T06:20:07.055 [DEBUG] [Thread-13175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:20:07.069 [DEBUG] [Thread-13175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:20:07.069 [INFO] [Thread-13175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:20:07.077 [DEBUG] [Thread-13175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:20:07.077 [DEBUG] [Thread-13175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:20:07.077 [DEBUG] [Thread-13175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:20:07.077 [DEBUG] [Thread-13175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:20:07.077 [DEBUG] [Thread-13175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:20:07.077 [DEBUG] [Thread-13175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] client lang: <none>
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] server lang: <none>
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] kex follows: False
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] Compression: none
2025-11-26T06:20:07.078 [DEBUG] [Thread-13175] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:20:07.136 [DEBUG] [Thread-13175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:20:07.136 [DEBUG] [Thread-13175] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:20:07.136 [DEBUG] [Thread-13175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:20:07.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:20:07.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:20:07.193 [DEBUG] [Thread-13175] [transport.py] [_log()] userauth is OK
2025-11-26T06:20:07.193 [DEBUG] [Thread-13175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:20:07.193 [DEBUG] [Thread-13175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:20:07.193 [DEBUG] [Thread-13175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:20:07.193 [DEBUG] [Thread-13175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:20:07.207 [INFO] [Thread-13175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:20:07.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:20:07.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:20:08.033 [DEBUG] [Thread-13175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:20:08.033 [DEBUG] [Thread-13175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:20:08.081 [DEBUG] [Thread-13175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:20:08.081 [DEBUG] [Thread-13175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:20:08.089 [DEBUG] [Thread-13175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:20:08.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:20:08.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:20:08.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:20:08.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:20:08.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:20:08.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:20:08.121 [DEBUG] [Thread-13175] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:20:21.780 [DEBUG] [Thread-13177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:20:27.586 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:20:27.588 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:20:36.665 [DEBUG] [Thread-13178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:20:36.832 [DEBUG] [Thread-13179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:20:38.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:20:38.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:20:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:20:38.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 20, 25), 30.08, 12.58, 0.0, 17.42, 21.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:20:38.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:20:25
2025-11-26T06:20:38.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:20:39.061 [DEBUG] [Thread-13180] [transport.py] [_log()] starting thread (client mode): 0x737e8760
2025-11-26T06:20:39.062 [DEBUG] [Thread-13180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:20:39.081 [DEBUG] [Thread-13180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:20:39.081 [INFO] [Thread-13180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:20:39.084 [DEBUG] [Thread-13180] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:20:39.084 [DEBUG] [Thread-13180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:20:39.084 [DEBUG] [Thread-13180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:20:39.084 [DEBUG] [Thread-13180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:20:39.084 [DEBUG] [Thread-13180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] client lang: <none>
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] server lang: <none>
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] kex follows: False
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] Compression: none
2025-11-26T06:20:39.085 [DEBUG] [Thread-13180] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:20:39.105 [DEBUG] [Thread-13180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:20:39.106 [DEBUG] [Thread-13180] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:20:39.106 [DEBUG] [Thread-13180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:20:39.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:20:39.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:20:39.109 [DEBUG] [Thread-13180] [transport.py] [_log()] userauth is OK
2025-11-26T06:20:39.109 [DEBUG] [Thread-13180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:20:39.109 [DEBUG] [Thread-13180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:20:39.109 [DEBUG] [Thread-13180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:20:39.109 [DEBUG] [Thread-13180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:20:39.129 [INFO] [Thread-13180] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:20:39.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:20:39.980 [DEBUG] [Thread-13180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:20:39.980 [DEBUG] [Thread-13180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:20:39.981 [DEBUG] [Thread-13180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:20:40.021 [DEBUG] [Thread-13180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:20:40.021 [DEBUG] [Thread-13180] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:20:40.024 [DEBUG] [Thread-13180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:20:40.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:20:40.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:20:40.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:20:40.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:20:40.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:20:40.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:20:40.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:20:40.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:20:40.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:20:40.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.180649 -999.00  +20.70  17.88     18   -4.30 1 1 1 1 1   887    0 25.22 23.79 ----- 17.4 17.9 51.6 22.2 22.9 -27.1 22.8 -26.3 21.6 -25.6 21.6 -26.0
2025-11-26T06:20:40.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:20:40.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:20:40.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.180649
2025-11-26T06:20:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:20:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:20:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:20:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:20:40.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:20:40.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:20:25', tmtdew=30.08, humidity=12.58, cloud=0.0, wind=17.42, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:20:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:20:40.051 [DEBUG] [Thread-13180] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:20:40.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:20:40.136 [DEBUG] [Thread-13183] [transport.py] [_log()] starting thread (client mode): 0x7374f460
2025-11-26T06:20:40.136 [DEBUG] [Thread-13183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:20:40.151 [DEBUG] [Thread-13183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:20:40.151 [INFO] [Thread-13183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] client lang: <none>
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] server lang: <none>
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] kex follows: False
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:20:40.159 [DEBUG] [Thread-13183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:20:40.160 [DEBUG] [Thread-13183] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:20:40.160 [DEBUG] [Thread-13183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:20:40.160 [DEBUG] [Thread-13183] [transport.py] [_log()] Compression: none
2025-11-26T06:20:40.160 [DEBUG] [Thread-13183] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:20:40.217 [DEBUG] [Thread-13183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:20:40.218 [DEBUG] [Thread-13183] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:20:40.218 [DEBUG] [Thread-13183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:20:40.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:20:40.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:20:40.273 [DEBUG] [Thread-13183] [transport.py] [_log()] userauth is OK
2025-11-26T06:20:40.274 [DEBUG] [Thread-13183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:20:40.274 [DEBUG] [Thread-13183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:20:40.274 [DEBUG] [Thread-13183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:20:40.274 [DEBUG] [Thread-13183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:20:40.293 [INFO] [Thread-13183] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:20:40.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:20:40.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:20:41.114 [DEBUG] [Thread-13183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:20:41.114 [DEBUG] [Thread-13183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:20:41.162 [DEBUG] [Thread-13183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:20:41.162 [DEBUG] [Thread-13183] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:20:41.171 [DEBUG] [Thread-13183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:20:41.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:20:41.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')
2025-11-26T06:20:41.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:20:41.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:20:41.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:20:41.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:20:41.209 [DEBUG] [Thread-13183] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:20:51.866 [DEBUG] [Thread-13185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:21:06.915 [DEBUG] [Thread-13186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:21:11.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:21:11.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:21:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:21:11.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 20, 57), 30.15, 12.61, 0.0, 17.52, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:21:11.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:20:57
2025-11-26T06:21:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:21:12.124 [DEBUG] [Thread-13187] [transport.py] [_log()] starting thread (client mode): 0x70d0c640
2025-11-26T06:21:12.124 [DEBUG] [Thread-13187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:21:12.144 [DEBUG] [Thread-13187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:21:12.144 [INFO] [Thread-13187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] client lang: <none>
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] server lang: <none>
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] kex follows: False
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] Compression: none
2025-11-26T06:21:12.146 [DEBUG] [Thread-13187] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:21:12.158 [DEBUG] [Thread-13187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:21:12.158 [DEBUG] [Thread-13187] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:21:12.159 [DEBUG] [Thread-13187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:21:12.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:21:12.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:21:12.159 [DEBUG] [Thread-13187] [transport.py] [_log()] userauth is OK
2025-11-26T06:21:12.159 [DEBUG] [Thread-13187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:21:12.160 [DEBUG] [Thread-13187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:21:12.160 [DEBUG] [Thread-13187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:21:12.160 [DEBUG] [Thread-13187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:21:12.172 [INFO] [Thread-13187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:21:12.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:21:12.796 [DEBUG] [Thread-13187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:21:12.796 [DEBUG] [Thread-13187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:21:12.796 [DEBUG] [Thread-13187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:21:12.838 [DEBUG] [Thread-13187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:21:12.838 [DEBUG] [Thread-13187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:21:12.840 [DEBUG] [Thread-13187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:21:12.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:21:12.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:21:12.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:21:12.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:21:12.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:21:12.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:21:12.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:21:12.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:21:12.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:21:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.180997 -999.00  +20.70  14.73     18   -4.30 1 1 1 1 1   887    0 25.53 22.37 ----- 16.6 14.7 46.4 19.8 22.9 -27.1 22.8 -26.2 21.6 -25.4 21.6 -26.1
2025-11-26T06:21:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:21:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:21:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.180997
2025-11-26T06:21:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:21:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:21:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:21:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:21:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:21:12.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:20:57', tmtdew=30.15, humidity=12.61, cloud=0.0, wind=17.52, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:20:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:21:12.864 [DEBUG] [Thread-13187] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:21:12.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:21:12.974 [DEBUG] [Thread-13190] [transport.py] [_log()] starting thread (client mode): 0x70d0d4e0
2025-11-26T06:21:12.974 [DEBUG] [Thread-13190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:21:12.989 [DEBUG] [Thread-13190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:21:12.989 [INFO] [Thread-13190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:21:12.996 [DEBUG] [Thread-13190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] client lang: <none>
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] server lang: <none>
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] kex follows: False
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:21:12.997 [DEBUG] [Thread-13190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:21:12.998 [DEBUG] [Thread-13190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:21:12.998 [DEBUG] [Thread-13190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:21:12.998 [DEBUG] [Thread-13190] [transport.py] [_log()] Compression: none
2025-11-26T06:21:12.998 [DEBUG] [Thread-13190] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:21:13.053 [DEBUG] [Thread-13190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:21:13.054 [DEBUG] [Thread-13190] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:21:13.054 [DEBUG] [Thread-13190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:21:13.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:21:13.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:21:13.110 [DEBUG] [Thread-13190] [transport.py] [_log()] userauth is OK
2025-11-26T06:21:13.110 [DEBUG] [Thread-13190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:21:13.110 [DEBUG] [Thread-13190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:21:13.110 [DEBUG] [Thread-13190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:21:13.111 [DEBUG] [Thread-13190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:21:13.130 [INFO] [Thread-13190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:21:13.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:21:13.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:21:13.955 [DEBUG] [Thread-13190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:21:13.955 [DEBUG] [Thread-13190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:21:14.004 [DEBUG] [Thread-13190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:21:14.004 [DEBUG] [Thread-13190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:21:14.015 [DEBUG] [Thread-13190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:21:14.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:21:14.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:21:14.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:21:14.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:21:14.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:21:14.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:21:14.053 [DEBUG] [Thread-13190] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:21:21.950 [DEBUG] [Thread-13192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:21:27.727 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:21:27.729 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:21:36.726 [DEBUG] [Thread-13193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:21:36.988 [DEBUG] [Thread-13194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:21:44.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:21:44.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:21:44.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:21:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 21, 29), 30.16, 12.6, 0.0, 19.48, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:21:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:21:29
2025-11-26T06:21:44.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:21:44.983 [DEBUG] [Thread-13195] [transport.py] [_log()] starting thread (client mode): 0x70d03730
2025-11-26T06:21:44.983 [DEBUG] [Thread-13195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:21:45.004 [DEBUG] [Thread-13195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:21:45.004 [INFO] [Thread-13195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:21:45.007 [DEBUG] [Thread-13195] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] client lang: <none>
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] server lang: <none>
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] kex follows: False
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] Compression: none
2025-11-26T06:21:45.008 [DEBUG] [Thread-13195] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:21:45.025 [DEBUG] [Thread-13195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:21:45.026 [DEBUG] [Thread-13195] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:21:45.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:21:45.026 [DEBUG] [Thread-13195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:21:45.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:21:45.028 [DEBUG] [Thread-13195] [transport.py] [_log()] userauth is OK
2025-11-26T06:21:45.028 [DEBUG] [Thread-13195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:21:45.028 [DEBUG] [Thread-13195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:21:45.029 [DEBUG] [Thread-13195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:21:45.029 [DEBUG] [Thread-13195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:21:45.052 [INFO] [Thread-13195] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:21:45.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:21:45.818 [DEBUG] [Thread-13195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:21:45.818 [DEBUG] [Thread-13195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:21:45.818 [DEBUG] [Thread-13195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:21:45.859 [DEBUG] [Thread-13195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:21:45.859 [DEBUG] [Thread-13195] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:21:45.862 [DEBUG] [Thread-13195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:21:45.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:21:45.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:21:45.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:21:45.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:21:45.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:21:45.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:21:45.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:21:45.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:21:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:21:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.181344 -999.00  +20.70  17.52     18   -4.30 1 1 1 1 1   887    0 25.22 20.91 ----- 14.9 17.5 37.2 20.1 23.0 -27.3 22.8 -26.3 21.6 -25.4 21.7 -26.3
2025-11-26T06:21:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:21:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:21:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.181344
2025-11-26T06:21:45.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:21:45.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:21:45.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:21:45.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:21:45.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:21:45.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:21:29', tmtdew=30.16, humidity=12.6, cloud=0.0, wind=19.48, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:21:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:21:45.888 [DEBUG] [Thread-13195] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:21:45.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:21:45.983 [DEBUG] [Thread-13198] [transport.py] [_log()] starting thread (client mode): 0x70d01240
2025-11-26T06:21:45.983 [DEBUG] [Thread-13198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:21:45.997 [DEBUG] [Thread-13198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:21:45.997 [INFO] [Thread-13198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:21:46.004 [DEBUG] [Thread-13198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:21:46.004 [DEBUG] [Thread-13198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:21:46.004 [DEBUG] [Thread-13198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:21:46.004 [DEBUG] [Thread-13198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:21:46.004 [DEBUG] [Thread-13198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:21:46.004 [DEBUG] [Thread-13198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] client lang: <none>
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] server lang: <none>
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] kex follows: False
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] Compression: none
2025-11-26T06:21:46.005 [DEBUG] [Thread-13198] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:21:46.061 [DEBUG] [Thread-13198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:21:46.062 [DEBUG] [Thread-13198] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:21:46.062 [DEBUG] [Thread-13198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:21:46.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:21:46.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:21:46.117 [DEBUG] [Thread-13198] [transport.py] [_log()] userauth is OK
2025-11-26T06:21:46.117 [DEBUG] [Thread-13198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:21:46.117 [DEBUG] [Thread-13198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:21:46.117 [DEBUG] [Thread-13198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:21:46.117 [DEBUG] [Thread-13198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:21:46.136 [INFO] [Thread-13198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:21:46.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:21:46.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:21:46.961 [DEBUG] [Thread-13198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:21:46.961 [DEBUG] [Thread-13198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:21:47.009 [DEBUG] [Thread-13198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:21:47.009 [DEBUG] [Thread-13198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:21:47.019 [DEBUG] [Thread-13198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:21:47.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:21:47.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:21:47.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:21:47.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:21:47.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:21:47.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:21:47.056 [DEBUG] [Thread-13198] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:21:52.028 [DEBUG] [Thread-13200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:22:07.080 [DEBUG] [Thread-13201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:22:17.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:22:17.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:22:17.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:22:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 22, 3), 30.16, 12.6, 0.0, 17.26, 21.17, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:22:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:22:03
2025-11-26T06:22:17.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:22:17.980 [DEBUG] [Thread-13202] [transport.py] [_log()] starting thread (client mode): 0x70d7eda0
2025-11-26T06:22:17.980 [DEBUG] [Thread-13202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:22:18.001 [DEBUG] [Thread-13202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:22:18.001 [INFO] [Thread-13202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:22:18.004 [DEBUG] [Thread-13202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:22:18.004 [DEBUG] [Thread-13202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] client lang: <none>
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] server lang: <none>
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] kex follows: False
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:22:18.005 [DEBUG] [Thread-13202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:22:18.006 [DEBUG] [Thread-13202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:22:18.006 [DEBUG] [Thread-13202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:22:18.006 [DEBUG] [Thread-13202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:22:18.006 [DEBUG] [Thread-13202] [transport.py] [_log()] Compression: none
2025-11-26T06:22:18.006 [DEBUG] [Thread-13202] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:22:18.025 [DEBUG] [Thread-13202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:22:18.026 [DEBUG] [Thread-13202] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:22:18.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:22:18.028 [DEBUG] [Thread-13202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:22:18.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:22:18.030 [DEBUG] [Thread-13202] [transport.py] [_log()] userauth is OK
2025-11-26T06:22:18.030 [DEBUG] [Thread-13202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:22:18.030 [DEBUG] [Thread-13202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:22:18.030 [DEBUG] [Thread-13202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:22:18.030 [DEBUG] [Thread-13202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:22:18.055 [INFO] [Thread-13202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:22:18.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:22:18.665 [DEBUG] [Thread-13202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:22:18.665 [DEBUG] [Thread-13202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:22:18.665 [DEBUG] [Thread-13202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:22:18.706 [DEBUG] [Thread-13202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:22:18.706 [DEBUG] [Thread-13202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:22:18.709 [DEBUG] [Thread-13202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:22:18.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:22:18.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:22:18.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:22:18.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:22:18.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:22:18.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:22:18.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:22:18.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:22:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:22:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.181691 -999.00  +20.70  17.35     18   -4.30 1 1 1 1 1   887    0 25.86 19.12 ----- 16.3 17.4 41.8 19.6 23.0 -27.1 22.9 -26.5 21.6 -25.5 21.7 -26.1
2025-11-26T06:22:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:22:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:22:18.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.181691
2025-11-26T06:22:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:22:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:22:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:22:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:22:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:22:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:22:03', tmtdew=30.16, humidity=12.6, cloud=0.0, wind=17.26, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:21:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:22:18.736 [DEBUG] [Thread-13202] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:22:18.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:22:18.831 [DEBUG] [Thread-13205] [transport.py] [_log()] starting thread (client mode): 0x761da680
2025-11-26T06:22:18.831 [DEBUG] [Thread-13205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:22:18.847 [DEBUG] [Thread-13205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:22:18.847 [INFO] [Thread-13205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:22:18.855 [DEBUG] [Thread-13205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:22:18.855 [DEBUG] [Thread-13205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:22:18.855 [DEBUG] [Thread-13205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:22:18.855 [DEBUG] [Thread-13205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:22:18.855 [DEBUG] [Thread-13205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:22:18.855 [DEBUG] [Thread-13205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] client lang: <none>
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] server lang: <none>
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] kex follows: False
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] Compression: none
2025-11-26T06:22:18.856 [DEBUG] [Thread-13205] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:22:18.913 [DEBUG] [Thread-13205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:22:18.914 [DEBUG] [Thread-13205] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:22:18.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:22:18.915 [DEBUG] [Thread-13205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:22:18.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:22:18.969 [DEBUG] [Thread-13205] [transport.py] [_log()] userauth is OK
2025-11-26T06:22:18.969 [DEBUG] [Thread-13205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:22:18.969 [DEBUG] [Thread-13205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:22:18.970 [DEBUG] [Thread-13205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:22:18.970 [DEBUG] [Thread-13205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:22:18.989 [INFO] [Thread-13205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:22:18.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:22:18.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:22:19.839 [DEBUG] [Thread-13205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:22:19.839 [DEBUG] [Thread-13205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:22:19.887 [DEBUG] [Thread-13205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:22:19.887 [DEBUG] [Thread-13205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:22:19.896 [DEBUG] [Thread-13205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:22:19.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:22:19.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:22:19.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:22:19.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:22:19.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:22:19.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:22:19.934 [DEBUG] [Thread-13205] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:22:22.122 [DEBUG] [Thread-13207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:22:27.878 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:22:27.879 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:22:36.774 [DEBUG] [Thread-13208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:22:37.176 [DEBUG] [Thread-13209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:22:49.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:22:49.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:22:49.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:22:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 22, 35), 30.13, 12.58, 0.0, 13.78, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:22:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:22:35
2025-11-26T06:22:50.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:22:50.852 [DEBUG] [Thread-13210] [transport.py] [_log()] starting thread (client mode): 0x7374df00
2025-11-26T06:22:50.853 [DEBUG] [Thread-13210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:22:50.872 [DEBUG] [Thread-13210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:22:50.872 [INFO] [Thread-13210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] client lang: <none>
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] server lang: <none>
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] kex follows: False
2025-11-26T06:22:50.874 [DEBUG] [Thread-13210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:22:50.875 [DEBUG] [Thread-13210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:22:50.875 [DEBUG] [Thread-13210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:22:50.875 [DEBUG] [Thread-13210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:22:50.875 [DEBUG] [Thread-13210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:22:50.875 [DEBUG] [Thread-13210] [transport.py] [_log()] Compression: none
2025-11-26T06:22:50.875 [DEBUG] [Thread-13210] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:22:50.894 [DEBUG] [Thread-13210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:22:50.895 [DEBUG] [Thread-13210] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:22:50.896 [DEBUG] [Thread-13210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:22:50.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:22:50.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:22:50.898 [DEBUG] [Thread-13210] [transport.py] [_log()] userauth is OK
2025-11-26T06:22:50.898 [DEBUG] [Thread-13210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:22:50.898 [DEBUG] [Thread-13210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:22:50.898 [DEBUG] [Thread-13210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:22:50.899 [DEBUG] [Thread-13210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:22:50.919 [INFO] [Thread-13210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:22:50.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:22:51.535 [DEBUG] [Thread-13210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:22:51.536 [DEBUG] [Thread-13210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:22:51.536 [DEBUG] [Thread-13210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:22:51.577 [DEBUG] [Thread-13210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:22:51.577 [DEBUG] [Thread-13210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:22:51.580 [DEBUG] [Thread-13210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:22:51.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:22:51.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:22:51.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:22:51.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:22:51.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:22:51.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:22:51.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:22:51.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:22:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:22:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.182038 -999.00  +20.70  16.93     18   -4.30 1 1 1 1 1   887    0 25.54 17.48 ----- 15.3 16.9 42.2 20.9 23.0 -27.3 22.9 -26.4 21.7 -25.6 21.7 -26.1
2025-11-26T06:22:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:22:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:22:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.182038
2025-11-26T06:22:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:22:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:22:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:22:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:22:51.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:22:51.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:22:35', tmtdew=30.13, humidity=12.58, cloud=0.0, wind=13.78, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:22:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:22:51.608 [DEBUG] [Thread-13210] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:22:51.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:22:51.702 [DEBUG] [Thread-13213] [transport.py] [_log()] starting thread (client mode): 0x70d00c40
2025-11-26T06:22:51.702 [DEBUG] [Thread-13213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:22:51.717 [DEBUG] [Thread-13213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:22:51.717 [INFO] [Thread-13213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:22:51.725 [DEBUG] [Thread-13213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:22:51.725 [DEBUG] [Thread-13213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:22:51.725 [DEBUG] [Thread-13213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:22:51.725 [DEBUG] [Thread-13213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:22:51.725 [DEBUG] [Thread-13213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] client lang: <none>
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] server lang: <none>
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] kex follows: False
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] Compression: none
2025-11-26T06:22:51.726 [DEBUG] [Thread-13213] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:22:51.785 [DEBUG] [Thread-13213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:22:51.786 [DEBUG] [Thread-13213] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:22:51.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:22:51.787 [DEBUG] [Thread-13213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:22:51.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:22:51.841 [DEBUG] [Thread-13213] [transport.py] [_log()] userauth is OK
2025-11-26T06:22:51.841 [DEBUG] [Thread-13213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:22:51.841 [DEBUG] [Thread-13213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:22:51.842 [DEBUG] [Thread-13213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:22:51.842 [DEBUG] [Thread-13213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:22:51.860 [INFO] [Thread-13213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:22:51.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:22:51.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:22:52.208 [DEBUG] [Thread-13215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:22:52.682 [DEBUG] [Thread-13213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:22:52.682 [DEBUG] [Thread-13213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:22:52.730 [DEBUG] [Thread-13213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:22:52.730 [DEBUG] [Thread-13213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:22:52.739 [DEBUG] [Thread-13213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:22:52.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:22:52.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:22:52.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:22:52.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:22:52.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:22:52.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:22:52.775 [DEBUG] [Thread-13213] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:23:07.269 [DEBUG] [Thread-13216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:23:22.300 [DEBUG] [Thread-13217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:23:22.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:23:22.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:23:22.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:23:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 23, 7), 30.12, 12.58, 0.0, 14.56, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:23:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:23:07
2025-11-26T06:23:23.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:23:23.701 [DEBUG] [Thread-13218] [transport.py] [_log()] starting thread (client mode): 0x70d02cb0
2025-11-26T06:23:23.701 [DEBUG] [Thread-13218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:23:23.722 [DEBUG] [Thread-13218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:23:23.722 [INFO] [Thread-13218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] client lang: <none>
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] server lang: <none>
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] kex follows: False
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] Compression: none
2025-11-26T06:23:23.725 [DEBUG] [Thread-13218] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:23:23.743 [DEBUG] [Thread-13218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:23:23.743 [DEBUG] [Thread-13218] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:23:23.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:23:23.745 [DEBUG] [Thread-13218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:23:23.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:23:23.747 [DEBUG] [Thread-13218] [transport.py] [_log()] userauth is OK
2025-11-26T06:23:23.747 [DEBUG] [Thread-13218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:23:23.747 [DEBUG] [Thread-13218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:23:23.747 [DEBUG] [Thread-13218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:23:23.747 [DEBUG] [Thread-13218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:23:23.772 [INFO] [Thread-13218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:23:23.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:23:24.418 [DEBUG] [Thread-13218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:23:24.418 [DEBUG] [Thread-13218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:23:24.418 [DEBUG] [Thread-13218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:23:24.458 [DEBUG] [Thread-13218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:23:24.459 [DEBUG] [Thread-13218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:23:24.462 [DEBUG] [Thread-13218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:23:24.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:23:24.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:23:24.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:23:24.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:23:24.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:23:24.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:23:24.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:23:24.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:23:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:23:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.182733 -999.00  +20.70  17.91     18   -4.30 1 1 1 1 1   887    0 25.23 14.60 ----- 16.5 17.9 47.0 20.9 23.0 -27.3 22.9 -26.5 21.7 -25.7 21.8 -26.1
2025-11-26T06:23:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:23:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:23:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.182733
2025-11-26T06:23:24.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:23:24.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:23:24.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:23:24.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:23:24.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:23:24.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:23:07', tmtdew=30.12, humidity=12.58, cloud=0.0, wind=14.56, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:23:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:23:24.488 [DEBUG] [Thread-13218] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:23:24.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:23:24.585 [DEBUG] [Thread-13221] [transport.py] [_log()] starting thread (client mode): 0x70d29000
2025-11-26T06:23:24.585 [DEBUG] [Thread-13221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:23:24.599 [DEBUG] [Thread-13221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:23:24.600 [INFO] [Thread-13221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:23:24.607 [DEBUG] [Thread-13221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:23:24.607 [DEBUG] [Thread-13221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] client lang: <none>
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] server lang: <none>
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] kex follows: False
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] Compression: none
2025-11-26T06:23:24.608 [DEBUG] [Thread-13221] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:23:24.665 [DEBUG] [Thread-13221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:23:24.666 [DEBUG] [Thread-13221] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:23:24.666 [DEBUG] [Thread-13221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:23:24.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:23:24.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:23:24.721 [DEBUG] [Thread-13221] [transport.py] [_log()] userauth is OK
2025-11-26T06:23:24.721 [DEBUG] [Thread-13221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:23:24.721 [DEBUG] [Thread-13221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:23:24.721 [DEBUG] [Thread-13221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:23:24.721 [DEBUG] [Thread-13221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:23:24.739 [INFO] [Thread-13221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:23:24.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:23:24.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:23:25.586 [DEBUG] [Thread-13221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:23:25.586 [DEBUG] [Thread-13221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:23:25.635 [DEBUG] [Thread-13221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:23:25.635 [DEBUG] [Thread-13221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:23:25.644 [DEBUG] [Thread-13221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:23:25.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:23:25.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:23:25.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:23:25.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:23:25.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:23:25.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:23:25.681 [DEBUG] [Thread-13221] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:23:28.018 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:23:28.019 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:23:36.825 [DEBUG] [Thread-13223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:23:37.341 [DEBUG] [Thread-13224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:23:52.391 [DEBUG] [Thread-13225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:23:55.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:23:55.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:23:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:23:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 23, 39), 30.16, 12.1, 0.0, 17.26, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:23:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:23:39
2025-11-26T06:23:56.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:23:56.612 [DEBUG] [Thread-13226] [transport.py] [_log()] starting thread (client mode): 0x70d0c730
2025-11-26T06:23:56.612 [DEBUG] [Thread-13226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:23:56.632 [DEBUG] [Thread-13226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:23:56.632 [INFO] [Thread-13226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:23:56.635 [DEBUG] [Thread-13226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:23:56.635 [DEBUG] [Thread-13226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] client lang: <none>
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] server lang: <none>
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] kex follows: False
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] Compression: none
2025-11-26T06:23:56.636 [DEBUG] [Thread-13226] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:23:56.654 [DEBUG] [Thread-13226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:23:56.654 [DEBUG] [Thread-13226] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:23:56.655 [DEBUG] [Thread-13226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:23:56.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:23:56.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:23:56.657 [DEBUG] [Thread-13226] [transport.py] [_log()] userauth is OK
2025-11-26T06:23:56.657 [DEBUG] [Thread-13226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:23:56.657 [DEBUG] [Thread-13226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:23:56.657 [DEBUG] [Thread-13226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:23:56.657 [DEBUG] [Thread-13226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:23:56.675 [INFO] [Thread-13226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:23:56.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:23:57.330 [DEBUG] [Thread-13226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:23:57.330 [DEBUG] [Thread-13226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:23:57.330 [DEBUG] [Thread-13226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:23:57.371 [DEBUG] [Thread-13226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:23:57.371 [DEBUG] [Thread-13226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:23:57.374 [DEBUG] [Thread-13226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:23:57.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:23:57.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:23:57.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:23:57.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:23:57.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:23:57.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:23:57.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:23:57.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:23:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:23:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.183080 -999.00  +20.70  15.04     18   -4.30 1 1 1 1 1   887    0 25.13 13.28 ----- 13.7 15.0 42.8 19.9 23.1 -27.0 22.9 -26.5 21.7 -25.6 21.7 -26.1
2025-11-26T06:23:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:23:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:23:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.183080
2025-11-26T06:23:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:23:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:23:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:23:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:23:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:23:57.400 [DEBUG] [Thread-13226] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:23:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:23:39', tmtdew=30.16, humidity=12.1, cloud=0.0, wind=17.26, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:23:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:23:57.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:23:57.498 [DEBUG] [Thread-13229] [transport.py] [_log()] starting thread (client mode): 0x70d0ead0
2025-11-26T06:23:57.498 [DEBUG] [Thread-13229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:23:57.512 [DEBUG] [Thread-13229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:23:57.512 [INFO] [Thread-13229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:23:57.520 [DEBUG] [Thread-13229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:23:57.520 [DEBUG] [Thread-13229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:23:57.520 [DEBUG] [Thread-13229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:23:57.520 [DEBUG] [Thread-13229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:23:57.520 [DEBUG] [Thread-13229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:23:57.520 [DEBUG] [Thread-13229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:23:57.520 [DEBUG] [Thread-13229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:23:57.521 [DEBUG] [Thread-13229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:23:57.521 [DEBUG] [Thread-13229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:23:57.521 [DEBUG] [Thread-13229] [transport.py] [_log()] client lang: <none>
2025-11-26T06:23:57.521 [DEBUG] [Thread-13229] [transport.py] [_log()] server lang: <none>
2025-11-26T06:23:57.521 [DEBUG] [Thread-13229] [transport.py] [_log()] kex follows: False
2025-11-26T06:23:57.521 [DEBUG] [Thread-13229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:23:57.521 [DEBUG] [Thread-13229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:23:57.521 [DEBUG] [Thread-13229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:23:57.521 [DEBUG] [Thread-13229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:23:57.522 [DEBUG] [Thread-13229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:23:57.522 [DEBUG] [Thread-13229] [transport.py] [_log()] Compression: none
2025-11-26T06:23:57.522 [DEBUG] [Thread-13229] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:23:57.576 [DEBUG] [Thread-13229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:23:57.577 [DEBUG] [Thread-13229] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:23:57.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:23:57.578 [DEBUG] [Thread-13229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:23:57.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:23:57.633 [DEBUG] [Thread-13229] [transport.py] [_log()] userauth is OK
2025-11-26T06:23:57.633 [DEBUG] [Thread-13229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:23:57.634 [DEBUG] [Thread-13229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:23:57.634 [DEBUG] [Thread-13229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:23:57.634 [DEBUG] [Thread-13229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:23:57.653 [INFO] [Thread-13229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:23:57.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:23:57.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:23:58.481 [DEBUG] [Thread-13229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:23:58.482 [DEBUG] [Thread-13229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:23:58.530 [DEBUG] [Thread-13229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:23:58.530 [DEBUG] [Thread-13229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:23:58.539 [DEBUG] [Thread-13229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:23:58.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:23:58.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:23:58.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:23:58.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:23:58.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:23:58.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:23:58.584 [DEBUG] [Thread-13229] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:24:07.424 [DEBUG] [Thread-13231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:24:22.480 [DEBUG] [Thread-13232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:24:28.165 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:24:28.166 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:24:28.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:24:28.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:24:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:24:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 24, 11), 30.16, 12.1, 0.0, 15.65, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:24:29.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:24:11
2025-11-26T06:24:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:24:29.541 [DEBUG] [Thread-13233] [transport.py] [_log()] starting thread (client mode): 0x761dbc40
2025-11-26T06:24:29.541 [DEBUG] [Thread-13233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:24:29.560 [DEBUG] [Thread-13233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:24:29.561 [INFO] [Thread-13233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] client lang: <none>
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] server lang: <none>
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] kex follows: False
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] Compression: none
2025-11-26T06:24:29.564 [DEBUG] [Thread-13233] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:24:29.579 [DEBUG] [Thread-13233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:24:29.580 [DEBUG] [Thread-13233] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:24:29.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:24:29.580 [DEBUG] [Thread-13233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:24:29.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:24:29.581 [DEBUG] [Thread-13233] [transport.py] [_log()] userauth is OK
2025-11-26T06:24:29.581 [DEBUG] [Thread-13233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:24:29.581 [DEBUG] [Thread-13233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:24:29.581 [DEBUG] [Thread-13233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:24:29.581 [DEBUG] [Thread-13233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:24:29.597 [INFO] [Thread-13233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:24:29.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:24:30.242 [DEBUG] [Thread-13233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:24:30.242 [DEBUG] [Thread-13233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:24:30.242 [DEBUG] [Thread-13233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:24:30.283 [DEBUG] [Thread-13233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:24:30.283 [DEBUG] [Thread-13233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:24:30.285 [DEBUG] [Thread-13233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:24:30.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:24:30.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:24:30.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:24:30.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:24:30.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:24:30.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:24:30.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:24:30.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:24:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:24:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.183427 -999.00  +20.70  15.63     18   -4.30 1 1 1 1 1   887    0 25.41 11.50 ----- 14.8 15.6 41.2 19.3 23.1 -27.1 23.0 -26.4 21.7 -25.4 21.8 -26.1
2025-11-26T06:24:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:24:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:24:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.183427
2025-11-26T06:24:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:24:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:24:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:24:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:24:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:24:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:24:11', tmtdew=30.16, humidity=12.1, cloud=0.0, wind=15.65, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:24:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:24:30.307 [DEBUG] [Thread-13233] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:24:30.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:24:30.391 [DEBUG] [Thread-13236] [transport.py] [_log()] starting thread (client mode): 0x70d0cac0
2025-11-26T06:24:30.391 [DEBUG] [Thread-13236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:24:30.410 [DEBUG] [Thread-13236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:24:30.410 [INFO] [Thread-13236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] client lang: <none>
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] server lang: <none>
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] kex follows: False
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] Compression: none
2025-11-26T06:24:30.421 [DEBUG] [Thread-13236] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:24:30.475 [DEBUG] [Thread-13236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:24:30.475 [DEBUG] [Thread-13236] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:24:30.475 [DEBUG] [Thread-13236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:24:30.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:24:30.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:24:30.532 [DEBUG] [Thread-13236] [transport.py] [_log()] userauth is OK
2025-11-26T06:24:30.532 [DEBUG] [Thread-13236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:24:30.532 [DEBUG] [Thread-13236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:24:30.532 [DEBUG] [Thread-13236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:24:30.532 [DEBUG] [Thread-13236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:24:30.547 [INFO] [Thread-13236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:24:30.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:24:30.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:24:31.444 [DEBUG] [Thread-13236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:24:31.445 [DEBUG] [Thread-13236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:24:31.492 [DEBUG] [Thread-13236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:24:31.493 [DEBUG] [Thread-13236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:24:31.502 [DEBUG] [Thread-13236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:24:31.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:24:31.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:24:31.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:24:31.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:24:31.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:24:31.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:24:31.539 [DEBUG] [Thread-13236] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:24:36.878 [DEBUG] [Thread-13238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:24:37.513 [DEBUG] [Thread-13239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:24:52.563 [DEBUG] [Thread-13240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:25:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:25:01.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:25:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:25:02.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 24, 43), 30.05, 12.61, 0.0, 16.8, 21.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:25:02.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:24:43
2025-11-26T06:25:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:25:02.473 [DEBUG] [Thread-13241] [transport.py] [_log()] starting thread (client mode): 0x70d2b910
2025-11-26T06:25:02.473 [DEBUG] [Thread-13241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:25:02.494 [DEBUG] [Thread-13241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:25:02.494 [INFO] [Thread-13241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:25:02.498 [DEBUG] [Thread-13241] [transport.py] [_log()] client lang: <none>
2025-11-26T06:25:02.499 [DEBUG] [Thread-13241] [transport.py] [_log()] server lang: <none>
2025-11-26T06:25:02.499 [DEBUG] [Thread-13241] [transport.py] [_log()] kex follows: False
2025-11-26T06:25:02.499 [DEBUG] [Thread-13241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:25:02.499 [DEBUG] [Thread-13241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:25:02.499 [DEBUG] [Thread-13241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:25:02.499 [DEBUG] [Thread-13241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:25:02.499 [DEBUG] [Thread-13241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:25:02.499 [DEBUG] [Thread-13241] [transport.py] [_log()] Compression: none
2025-11-26T06:25:02.499 [DEBUG] [Thread-13241] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:25:02.510 [DEBUG] [Thread-13241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:25:02.511 [DEBUG] [Thread-13241] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:25:02.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:25:02.512 [DEBUG] [Thread-13241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:25:02.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:25:02.514 [DEBUG] [Thread-13241] [transport.py] [_log()] userauth is OK
2025-11-26T06:25:02.514 [DEBUG] [Thread-13241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:25:02.514 [DEBUG] [Thread-13241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:25:02.514 [DEBUG] [Thread-13241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:25:02.514 [DEBUG] [Thread-13241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:25:02.552 [INFO] [Thread-13241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:25:02.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:25:03.242 [DEBUG] [Thread-13241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:25:03.243 [DEBUG] [Thread-13241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:25:03.243 [DEBUG] [Thread-13241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:25:03.283 [DEBUG] [Thread-13241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:25:03.283 [DEBUG] [Thread-13241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:25:03.285 [DEBUG] [Thread-13241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:25:03.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:25:03.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:25:03.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:25:03.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:25:03.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:25:03.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:25:03.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:25:03.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:25:03.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:25:03.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.183774 -999.00  +20.70  15.34     18   -4.30 1 1 1 1 1   887    0 25.38 10.66 ----- 15.3 15.3 45.0 18.1 23.1 -27.2 23.0 -26.3 21.7 -25.6 21.8 -26.1
2025-11-26T06:25:03.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:25:03.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:25:03.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.183774
2025-11-26T06:25:03.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:25:03.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:25:03.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:25:03.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:25:03.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:25:03.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:24:43', tmtdew=30.05, humidity=12.61, cloud=0.0, wind=16.8, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:24:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:25:03.305 [DEBUG] [Thread-13241] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:25:03.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:25:03.390 [DEBUG] [Thread-13244] [transport.py] [_log()] starting thread (client mode): 0x73780880
2025-11-26T06:25:03.390 [DEBUG] [Thread-13244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:25:03.405 [DEBUG] [Thread-13244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:25:03.405 [INFO] [Thread-13244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:25:03.412 [DEBUG] [Thread-13244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:25:03.412 [DEBUG] [Thread-13244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:25:03.412 [DEBUG] [Thread-13244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:25:03.412 [DEBUG] [Thread-13244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:25:03.412 [DEBUG] [Thread-13244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] client lang: <none>
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] server lang: <none>
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] kex follows: False
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] Compression: none
2025-11-26T06:25:03.413 [DEBUG] [Thread-13244] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:25:03.475 [DEBUG] [Thread-13244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:25:03.475 [DEBUG] [Thread-13244] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:25:03.476 [DEBUG] [Thread-13244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:25:03.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:25:03.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:25:03.532 [DEBUG] [Thread-13244] [transport.py] [_log()] userauth is OK
2025-11-26T06:25:03.532 [DEBUG] [Thread-13244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:25:03.532 [DEBUG] [Thread-13244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:25:03.532 [DEBUG] [Thread-13244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:25:03.532 [DEBUG] [Thread-13244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:25:03.546 [INFO] [Thread-13244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:25:03.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:25:03.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:25:04.441 [DEBUG] [Thread-13244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:25:04.441 [DEBUG] [Thread-13244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:25:04.489 [DEBUG] [Thread-13244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:25:04.489 [DEBUG] [Thread-13244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:25:04.497 [DEBUG] [Thread-13244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:25:04.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:25:04.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:25:04.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:25:04.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:25:04.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:25:04.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:25:04.529 [DEBUG] [Thread-13244] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:25:07.595 [DEBUG] [Thread-13246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:25:22.638 [DEBUG] [Thread-13247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:25:28.307 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:25:28.308 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:25:34.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:25:34.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:25:34.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:25:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 25, 15), 30.06, 12.6, 0.0, 14.65, 21.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:25:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:25:15
2025-11-26T06:25:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:25:35.465 [DEBUG] [Thread-13248] [transport.py] [_log()] starting thread (client mode): 0x73783430
2025-11-26T06:25:35.466 [DEBUG] [Thread-13248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:25:35.485 [DEBUG] [Thread-13248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:25:35.486 [INFO] [Thread-13248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] client lang: <none>
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] server lang: <none>
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] kex follows: False
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] Compression: none
2025-11-26T06:25:35.489 [DEBUG] [Thread-13248] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:25:35.507 [DEBUG] [Thread-13248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:25:35.507 [DEBUG] [Thread-13248] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:25:35.508 [DEBUG] [Thread-13248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:25:35.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:25:35.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:25:35.510 [DEBUG] [Thread-13248] [transport.py] [_log()] userauth is OK
2025-11-26T06:25:35.510 [DEBUG] [Thread-13248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:25:35.510 [DEBUG] [Thread-13248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:25:35.510 [DEBUG] [Thread-13248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:25:35.510 [DEBUG] [Thread-13248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:25:35.536 [INFO] [Thread-13248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:25:35.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:25:36.172 [DEBUG] [Thread-13248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:25:36.172 [DEBUG] [Thread-13248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:25:36.172 [DEBUG] [Thread-13248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:25:36.213 [DEBUG] [Thread-13248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:25:36.213 [DEBUG] [Thread-13248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:25:36.216 [DEBUG] [Thread-13248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:25:36.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:25:36.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:25:36.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:25:36.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:25:36.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:25:36.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:25:36.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:25:36.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:25:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:25:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.184121 -999.00  +20.70  13.60     18   -4.20 1 1 1 1 1   887    0 25.66 8.96 ----- 14.9 13.6 41.4 18.2 23.1 -27.1 23.0 -26.3 21.8 -25.2 21.8 -26.2
2025-11-26T06:25:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:25:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:25:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.184121
2025-11-26T06:25:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:25:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:25:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:25:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:25:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:25:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:25:15', tmtdew=30.06, humidity=12.6, cloud=0.0, wind=14.65, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:25:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:25:36.245 [DEBUG] [Thread-13248] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:25:36.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:25:36.353 [DEBUG] [Thread-13251] [transport.py] [_log()] starting thread (client mode): 0x761db3a0
2025-11-26T06:25:36.353 [DEBUG] [Thread-13251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:25:36.369 [DEBUG] [Thread-13251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:25:36.369 [INFO] [Thread-13251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:25:36.376 [DEBUG] [Thread-13251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:25:36.377 [DEBUG] [Thread-13251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:25:36.377 [DEBUG] [Thread-13251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:25:36.377 [DEBUG] [Thread-13251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:25:36.377 [DEBUG] [Thread-13251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:25:36.377 [DEBUG] [Thread-13251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:25:36.377 [DEBUG] [Thread-13251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:25:36.377 [DEBUG] [Thread-13251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:25:36.378 [DEBUG] [Thread-13251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:25:36.378 [DEBUG] [Thread-13251] [transport.py] [_log()] client lang: <none>
2025-11-26T06:25:36.378 [DEBUG] [Thread-13251] [transport.py] [_log()] server lang: <none>
2025-11-26T06:25:36.378 [DEBUG] [Thread-13251] [transport.py] [_log()] kex follows: False
2025-11-26T06:25:36.378 [DEBUG] [Thread-13251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:25:36.378 [DEBUG] [Thread-13251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:25:36.378 [DEBUG] [Thread-13251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:25:36.379 [DEBUG] [Thread-13251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:25:36.379 [DEBUG] [Thread-13251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:25:36.379 [DEBUG] [Thread-13251] [transport.py] [_log()] Compression: none
2025-11-26T06:25:36.379 [DEBUG] [Thread-13251] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:25:36.436 [DEBUG] [Thread-13251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:25:36.437 [DEBUG] [Thread-13251] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:25:36.437 [DEBUG] [Thread-13251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:25:36.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:25:36.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:25:36.493 [DEBUG] [Thread-13251] [transport.py] [_log()] userauth is OK
2025-11-26T06:25:36.493 [DEBUG] [Thread-13251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:25:36.493 [DEBUG] [Thread-13251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:25:36.493 [DEBUG] [Thread-13251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:25:36.493 [DEBUG] [Thread-13251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:25:36.512 [INFO] [Thread-13251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:25:36.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:25:36.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:25:36.933 [DEBUG] [Thread-13253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:25:37.338 [DEBUG] [Thread-13251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:25:37.338 [DEBUG] [Thread-13251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:25:37.386 [DEBUG] [Thread-13251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:25:37.386 [DEBUG] [Thread-13251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:25:37.396 [DEBUG] [Thread-13251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:25:37.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:25:37.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:25:37.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:25:37.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:25:37.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:25:37.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:25:37.432 [DEBUG] [Thread-13251] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:25:37.676 [DEBUG] [Thread-13254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:25:52.724 [DEBUG] [Thread-13255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:26:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:26:07.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:26:07.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:26:07.757 [DEBUG] [Thread-13256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:26:08.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 25, 47), 30.03, 12.63, 0.0, 16.59, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:26:08.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:25:47
2025-11-26T06:26:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:26:08.389 [DEBUG] [Thread-13257] [transport.py] [_log()] starting thread (client mode): 0x7374e230
2025-11-26T06:26:08.389 [DEBUG] [Thread-13257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:26:08.410 [DEBUG] [Thread-13257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:26:08.410 [INFO] [Thread-13257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:26:08.412 [DEBUG] [Thread-13257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:26:08.412 [DEBUG] [Thread-13257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:26:08.412 [DEBUG] [Thread-13257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:26:08.412 [DEBUG] [Thread-13257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:26:08.412 [DEBUG] [Thread-13257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:26:08.412 [DEBUG] [Thread-13257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] client lang: <none>
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] server lang: <none>
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] kex follows: False
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] Compression: none
2025-11-26T06:26:08.413 [DEBUG] [Thread-13257] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:26:08.429 [DEBUG] [Thread-13257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:26:08.430 [DEBUG] [Thread-13257] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:26:08.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:26:08.431 [DEBUG] [Thread-13257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:26:08.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:26:08.432 [DEBUG] [Thread-13257] [transport.py] [_log()] userauth is OK
2025-11-26T06:26:08.432 [DEBUG] [Thread-13257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:26:08.432 [DEBUG] [Thread-13257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:26:08.432 [DEBUG] [Thread-13257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:26:08.433 [DEBUG] [Thread-13257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:26:08.465 [INFO] [Thread-13257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:26:08.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:26:09.109 [DEBUG] [Thread-13257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:26:09.110 [DEBUG] [Thread-13257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:26:09.110 [DEBUG] [Thread-13257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:26:09.151 [DEBUG] [Thread-13257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:26:09.151 [DEBUG] [Thread-13257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:26:09.154 [DEBUG] [Thread-13257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:26:09.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:26:09.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:26:09.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:26:09.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:26:09.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:26:09.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:26:09.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:26:09.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:26:09.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:26:09.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.184469 -999.00  +20.70  16.50     18   -4.20 1 1 1 1 1   887    0 24.62 7.62 ----- 17.1 16.5 46.4 19.6 23.1 -27.2 23.0 -26.3 21.8 -25.7 21.8 -26.2
2025-11-26T06:26:09.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:26:09.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:26:09.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.184469
2025-11-26T06:26:09.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:26:09.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:26:09.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:26:09.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:26:09.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:26:09.183 [DEBUG] [Thread-13257] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:26:09.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:25:47', tmtdew=30.03, humidity=12.63, cloud=0.0, wind=16.59, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:25:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:26:09.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:26:09.291 [DEBUG] [Thread-13260] [transport.py] [_log()] starting thread (client mode): 0x70d29ed0
2025-11-26T06:26:09.291 [DEBUG] [Thread-13260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:26:09.306 [DEBUG] [Thread-13260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:26:09.306 [INFO] [Thread-13260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:26:09.314 [DEBUG] [Thread-13260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:26:09.314 [DEBUG] [Thread-13260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:26:09.314 [DEBUG] [Thread-13260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:26:09.314 [DEBUG] [Thread-13260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:26:09.315 [DEBUG] [Thread-13260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:26:09.315 [DEBUG] [Thread-13260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:26:09.315 [DEBUG] [Thread-13260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:26:09.315 [DEBUG] [Thread-13260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:26:09.315 [DEBUG] [Thread-13260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:26:09.315 [DEBUG] [Thread-13260] [transport.py] [_log()] client lang: <none>
2025-11-26T06:26:09.315 [DEBUG] [Thread-13260] [transport.py] [_log()] server lang: <none>
2025-11-26T06:26:09.315 [DEBUG] [Thread-13260] [transport.py] [_log()] kex follows: False
2025-11-26T06:26:09.315 [DEBUG] [Thread-13260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:26:09.316 [DEBUG] [Thread-13260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:26:09.316 [DEBUG] [Thread-13260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:26:09.316 [DEBUG] [Thread-13260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:26:09.316 [DEBUG] [Thread-13260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:26:09.316 [DEBUG] [Thread-13260] [transport.py] [_log()] Compression: none
2025-11-26T06:26:09.316 [DEBUG] [Thread-13260] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:26:09.373 [DEBUG] [Thread-13260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:26:09.374 [DEBUG] [Thread-13260] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:26:09.375 [DEBUG] [Thread-13260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:26:09.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:26:09.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:26:09.429 [DEBUG] [Thread-13260] [transport.py] [_log()] userauth is OK
2025-11-26T06:26:09.429 [DEBUG] [Thread-13260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:26:09.429 [DEBUG] [Thread-13260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:26:09.430 [DEBUG] [Thread-13260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:26:09.430 [DEBUG] [Thread-13260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:26:09.451 [INFO] [Thread-13260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:26:09.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:26:09.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:26:10.301 [DEBUG] [Thread-13260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:26:10.302 [DEBUG] [Thread-13260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:26:10.350 [DEBUG] [Thread-13260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:26:10.350 [DEBUG] [Thread-13260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:26:10.359 [DEBUG] [Thread-13260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:26:10.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:26:10.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:26:10.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:26:10.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:26:10.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:26:10.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:26:10.396 [DEBUG] [Thread-13260] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:26:22.789 [DEBUG] [Thread-13262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:26:28.450 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:26:28.451 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:26:36.983 [DEBUG] [Thread-13263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:26:37.851 [DEBUG] [Thread-13264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:26:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:26:40.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:26:40.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:26:41.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 26, 23), 30.08, 12.58, 0.0, 14.45, 21.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:26:41.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:26:23
2025-11-26T06:26:41.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:26:41.314 [DEBUG] [Thread-13265] [transport.py] [_log()] starting thread (client mode): 0x70d02a10
2025-11-26T06:26:41.315 [DEBUG] [Thread-13265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:26:41.334 [DEBUG] [Thread-13265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:26:41.335 [INFO] [Thread-13265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] client lang: <none>
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] server lang: <none>
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] kex follows: False
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:26:41.338 [DEBUG] [Thread-13265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:26:41.339 [DEBUG] [Thread-13265] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:26:41.339 [DEBUG] [Thread-13265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:26:41.339 [DEBUG] [Thread-13265] [transport.py] [_log()] Compression: none
2025-11-26T06:26:41.339 [DEBUG] [Thread-13265] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:26:41.354 [DEBUG] [Thread-13265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:26:41.354 [DEBUG] [Thread-13265] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:26:41.355 [DEBUG] [Thread-13265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:26:41.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:26:41.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:26:41.357 [DEBUG] [Thread-13265] [transport.py] [_log()] userauth is OK
2025-11-26T06:26:41.357 [DEBUG] [Thread-13265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:26:41.357 [DEBUG] [Thread-13265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:26:41.357 [DEBUG] [Thread-13265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:26:41.357 [DEBUG] [Thread-13265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:26:41.379 [INFO] [Thread-13265] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:26:41.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:26:42.029 [DEBUG] [Thread-13265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:26:42.029 [DEBUG] [Thread-13265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:26:42.030 [DEBUG] [Thread-13265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:26:42.071 [DEBUG] [Thread-13265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:26:42.071 [DEBUG] [Thread-13265] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:26:42.074 [DEBUG] [Thread-13265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:26:42.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:26:42.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:26:42.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:26:42.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:26:42.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:26:42.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:26:42.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:26:42.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:26:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:26:42.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.184816 -999.00  +20.70  15.22     18   -4.20 1 1 1 1 1   887    0 24.86 6.07 ----- 14.1 15.2 52.4 19.2 23.2 -27.2 23.0 -26.3 21.7 -25.6 21.9 -26.3
2025-11-26T06:26:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:26:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:26:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.184816
2025-11-26T06:26:42.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:26:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:26:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:26:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:26:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:26:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:26:23', tmtdew=30.08, humidity=12.58, cloud=0.0, wind=14.45, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:26:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:26:42.102 [DEBUG] [Thread-13265] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:26:42.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:26:42.199 [DEBUG] [Thread-13268] [transport.py] [_log()] starting thread (client mode): 0x70d1f910
2025-11-26T06:26:42.199 [DEBUG] [Thread-13268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:26:42.216 [DEBUG] [Thread-13268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:26:42.217 [INFO] [Thread-13268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:26:42.224 [DEBUG] [Thread-13268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:26:42.225 [DEBUG] [Thread-13268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:26:42.225 [DEBUG] [Thread-13268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:26:42.225 [DEBUG] [Thread-13268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:26:42.225 [DEBUG] [Thread-13268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:26:42.225 [DEBUG] [Thread-13268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:26:42.225 [DEBUG] [Thread-13268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:26:42.225 [DEBUG] [Thread-13268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:26:42.225 [DEBUG] [Thread-13268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:26:42.226 [DEBUG] [Thread-13268] [transport.py] [_log()] client lang: <none>
2025-11-26T06:26:42.226 [DEBUG] [Thread-13268] [transport.py] [_log()] server lang: <none>
2025-11-26T06:26:42.226 [DEBUG] [Thread-13268] [transport.py] [_log()] kex follows: False
2025-11-26T06:26:42.226 [DEBUG] [Thread-13268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:26:42.226 [DEBUG] [Thread-13268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:26:42.226 [DEBUG] [Thread-13268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:26:42.227 [DEBUG] [Thread-13268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:26:42.227 [DEBUG] [Thread-13268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:26:42.227 [DEBUG] [Thread-13268] [transport.py] [_log()] Compression: none
2025-11-26T06:26:42.227 [DEBUG] [Thread-13268] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:26:42.288 [DEBUG] [Thread-13268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:26:42.289 [DEBUG] [Thread-13268] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:26:42.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:26:42.290 [DEBUG] [Thread-13268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:26:42.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:26:42.345 [DEBUG] [Thread-13268] [transport.py] [_log()] userauth is OK
2025-11-26T06:26:42.345 [DEBUG] [Thread-13268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:26:42.345 [DEBUG] [Thread-13268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:26:42.345 [DEBUG] [Thread-13268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:26:42.346 [DEBUG] [Thread-13268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:26:42.363 [INFO] [Thread-13268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:26:42.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:26:42.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:26:43.202 [DEBUG] [Thread-13268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:26:43.202 [DEBUG] [Thread-13268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:26:43.249 [DEBUG] [Thread-13268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:26:43.250 [DEBUG] [Thread-13268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:26:43.259 [DEBUG] [Thread-13268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:26:43.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:26:43.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:26:43.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:26:43.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:26:43.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:26:43.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:26:43.293 [DEBUG] [Thread-13268] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:26:52.893 [DEBUG] [Thread-13270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:27:07.945 [DEBUG] [Thread-13271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:27:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:27:13.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:27:13.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:27:13.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 26, 55), 30.1, 12.58, 0.0, 15.03, 21.21, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:27:13.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:26:55
2025-11-26T06:27:14.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:27:14.238 [DEBUG] [Thread-13272] [transport.py] [_log()] starting thread (client mode): 0x70d0cb20
2025-11-26T06:27:14.238 [DEBUG] [Thread-13272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:27:14.258 [DEBUG] [Thread-13272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:27:14.258 [INFO] [Thread-13272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:27:14.261 [DEBUG] [Thread-13272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:27:14.261 [DEBUG] [Thread-13272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:27:14.261 [DEBUG] [Thread-13272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:27:14.261 [DEBUG] [Thread-13272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:27:14.261 [DEBUG] [Thread-13272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] client lang: <none>
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] server lang: <none>
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] kex follows: False
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] Compression: none
2025-11-26T06:27:14.262 [DEBUG] [Thread-13272] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:27:14.279 [DEBUG] [Thread-13272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:27:14.280 [DEBUG] [Thread-13272] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:27:14.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:27:14.281 [DEBUG] [Thread-13272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:27:14.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:27:14.283 [DEBUG] [Thread-13272] [transport.py] [_log()] userauth is OK
2025-11-26T06:27:14.283 [DEBUG] [Thread-13272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:27:14.283 [DEBUG] [Thread-13272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:27:14.283 [DEBUG] [Thread-13272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:27:14.283 [DEBUG] [Thread-13272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:27:14.306 [INFO] [Thread-13272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:27:14.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:27:14.944 [DEBUG] [Thread-13272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:27:14.945 [DEBUG] [Thread-13272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:27:14.945 [DEBUG] [Thread-13272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:27:14.986 [DEBUG] [Thread-13272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:27:14.986 [DEBUG] [Thread-13272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:27:14.989 [DEBUG] [Thread-13272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:27:15.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:27:15.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:27:15.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:27:15.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:27:15.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:27:15.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:27:15.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:27:15.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:27:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:27:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.185163 -999.00  +20.70  16.72     18   -4.20 1 1 1 1 1   887    0 24.50 3.84 ----- 16.7 16.7 42.8 21.2 23.2 -27.2 23.1 -26.5 21.8 -25.6 21.8 -26.1
2025-11-26T06:27:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:27:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:27:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.185163
2025-11-26T06:27:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:27:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:27:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:27:15.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:27:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:27:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:26:55', tmtdew=30.1, humidity=12.58, cloud=0.0, wind=15.03, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:26:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:27:15.015 [DEBUG] [Thread-13272] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:27:15.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:27:15.117 [DEBUG] [Thread-13275] [transport.py] [_log()] starting thread (client mode): 0x70d0ece0
2025-11-26T06:27:15.117 [DEBUG] [Thread-13275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:27:15.132 [DEBUG] [Thread-13275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:27:15.132 [INFO] [Thread-13275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:27:15.140 [DEBUG] [Thread-13275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:27:15.140 [DEBUG] [Thread-13275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:27:15.140 [DEBUG] [Thread-13275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:27:15.140 [DEBUG] [Thread-13275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:27:15.140 [DEBUG] [Thread-13275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:27:15.140 [DEBUG] [Thread-13275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] client lang: <none>
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] server lang: <none>
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] kex follows: False
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] Compression: none
2025-11-26T06:27:15.141 [DEBUG] [Thread-13275] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:27:15.201 [DEBUG] [Thread-13275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:27:15.201 [DEBUG] [Thread-13275] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:27:15.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:27:15.203 [DEBUG] [Thread-13275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:27:15.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:27:15.257 [DEBUG] [Thread-13275] [transport.py] [_log()] userauth is OK
2025-11-26T06:27:15.257 [DEBUG] [Thread-13275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:27:15.257 [DEBUG] [Thread-13275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:27:15.258 [DEBUG] [Thread-13275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:27:15.258 [DEBUG] [Thread-13275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:27:15.276 [INFO] [Thread-13275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:27:15.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:27:15.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:27:16.107 [DEBUG] [Thread-13275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:27:16.108 [DEBUG] [Thread-13275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:27:16.155 [DEBUG] [Thread-13275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:27:16.155 [DEBUG] [Thread-13275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:27:16.164 [DEBUG] [Thread-13275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:27:16.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:27:16.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:27:16.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:27:16.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:27:16.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:27:16.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:27:16.204 [DEBUG] [Thread-13275] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:27:22.983 [DEBUG] [Thread-13277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:27:28.589 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:27:28.590 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:27:37.034 [DEBUG] [Thread-13278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:27:38.028 [DEBUG] [Thread-13279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:27:46.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:27:46.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:27:46.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:27:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 27, 27), 30.12, 12.55, 0.0, 14.84, 21.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:27:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:27:27
2025-11-26T06:27:46.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:27:47.134 [DEBUG] [Thread-13280] [transport.py] [_log()] starting thread (client mode): 0x70d0ca00
2025-11-26T06:27:47.135 [DEBUG] [Thread-13280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:27:47.155 [DEBUG] [Thread-13280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:27:47.155 [INFO] [Thread-13280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:27:47.158 [DEBUG] [Thread-13280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:27:47.164 [DEBUG] [Thread-13280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] client lang: <none>
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] server lang: <none>
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] kex follows: False
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] Compression: none
2025-11-26T06:27:47.165 [DEBUG] [Thread-13280] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:27:47.183 [DEBUG] [Thread-13280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:27:47.184 [DEBUG] [Thread-13280] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:27:47.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:27:47.185 [DEBUG] [Thread-13280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:27:47.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:27:47.187 [DEBUG] [Thread-13280] [transport.py] [_log()] userauth is OK
2025-11-26T06:27:47.187 [DEBUG] [Thread-13280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:27:47.187 [DEBUG] [Thread-13280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:27:47.188 [DEBUG] [Thread-13280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:27:47.188 [DEBUG] [Thread-13280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:27:47.211 [INFO] [Thread-13280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:27:47.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:27:47.882 [DEBUG] [Thread-13280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:27:47.883 [DEBUG] [Thread-13280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:27:47.883 [DEBUG] [Thread-13280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:27:47.924 [DEBUG] [Thread-13280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:27:47.924 [DEBUG] [Thread-13280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:27:47.928 [DEBUG] [Thread-13280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:27:47.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:27:47.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:27:47.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:27:47.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:27:47.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:27:47.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:27:47.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:27:47.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:27:47.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:27:47.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.185858 -999.00  +20.70  13.28     18   -4.30 1 1 1 1 1   887    0 24.94 1.45 ----- 17.6 13.3 49.2 19.6 23.2 -27.2 23.1 -26.5 21.8 -25.5 21.9 -26.2
2025-11-26T06:27:47.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:27:47.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:27:47.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.185858
2025-11-26T06:27:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:27:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:27:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:27:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:27:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:27:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:27:27', tmtdew=30.12, humidity=12.55, cloud=0.0, wind=14.84, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:27:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:27:47.954 [DEBUG] [Thread-13280] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:27:48.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:27:48.051 [DEBUG] [Thread-13283] [transport.py] [_log()] starting thread (client mode): 0x761db0a0
2025-11-26T06:27:48.051 [DEBUG] [Thread-13283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:27:48.065 [DEBUG] [Thread-13283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:27:48.066 [INFO] [Thread-13283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:27:48.073 [DEBUG] [Thread-13283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:27:48.073 [DEBUG] [Thread-13283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:27:48.073 [DEBUG] [Thread-13283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:27:48.073 [DEBUG] [Thread-13283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:27:48.073 [DEBUG] [Thread-13283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] client lang: <none>
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] server lang: <none>
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] kex follows: False
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] Compression: none
2025-11-26T06:27:48.074 [DEBUG] [Thread-13283] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:27:48.133 [DEBUG] [Thread-13283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:27:48.133 [DEBUG] [Thread-13283] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:27:48.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:27:48.135 [DEBUG] [Thread-13283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:27:48.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:27:48.188 [DEBUG] [Thread-13283] [transport.py] [_log()] userauth is OK
2025-11-26T06:27:48.189 [DEBUG] [Thread-13283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:27:48.189 [DEBUG] [Thread-13283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:27:48.189 [DEBUG] [Thread-13283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:27:48.189 [DEBUG] [Thread-13283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:27:48.207 [INFO] [Thread-13283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:27:48.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:27:48.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:27:49.098 [DEBUG] [Thread-13283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:27:49.098 [DEBUG] [Thread-13283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:27:49.146 [DEBUG] [Thread-13283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:27:49.146 [DEBUG] [Thread-13283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:27:49.155 [DEBUG] [Thread-13283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:27:49.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:27:49.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')
2025-11-26T06:27:49.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:27:49.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:27:49.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:27:49.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:27:49.192 [DEBUG] [Thread-13283] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:27:53.063 [DEBUG] [Thread-13285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:28:08.114 [DEBUG] [Thread-13286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:28:19.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:28:19.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:28:19.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:28:19.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 27, 27), 30.12, 12.55, 0.0, 14.84, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:28:19.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:27:27
2025-11-26T06:28:19.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:28:20.135 [DEBUG] [Thread-13287] [transport.py] [_log()] starting thread (client mode): 0x70d0d2a0
2025-11-26T06:28:20.135 [DEBUG] [Thread-13287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:28:20.155 [DEBUG] [Thread-13287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:28:20.156 [INFO] [Thread-13287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:28:20.158 [DEBUG] [Thread-13287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] client lang: <none>
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] server lang: <none>
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] kex follows: False
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] Compression: none
2025-11-26T06:28:20.159 [DEBUG] [Thread-13287] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:28:20.176 [DEBUG] [Thread-13287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:28:20.177 [DEBUG] [Thread-13287] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:28:20.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:28:20.178 [DEBUG] [Thread-13287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:28:20.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:28:20.180 [DEBUG] [Thread-13287] [transport.py] [_log()] userauth is OK
2025-11-26T06:28:20.180 [DEBUG] [Thread-13287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:28:20.180 [DEBUG] [Thread-13287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:28:20.180 [DEBUG] [Thread-13287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:28:20.180 [DEBUG] [Thread-13287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:28:20.195 [INFO] [Thread-13287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:28:20.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:28:20.828 [DEBUG] [Thread-13287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:28:20.828 [DEBUG] [Thread-13287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:28:20.829 [DEBUG] [Thread-13287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:28:20.869 [DEBUG] [Thread-13287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:28:20.869 [DEBUG] [Thread-13287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:28:20.872 [DEBUG] [Thread-13287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:28:20.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:28:20.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:28:20.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:28:20.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:28:20.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:28:20.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:28:20.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:28:20.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:28:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:28:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.186205 -999.00  +20.70  14.46     18   -4.20 1 1 1 1 1   887    0 24.67 0.43 ----- 16.0 14.5 42.2 16.4 23.2 -27.3 23.1 -26.5 21.8 -25.6 21.9 -25.9
2025-11-26T06:28:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:28:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:28:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.186205
2025-11-26T06:28:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:28:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:28:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:28:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:28:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:28:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:27:27', tmtdew=30.12, humidity=12.55, cloud=0.0, wind=14.84, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:28:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:28:20.897 [DEBUG] [Thread-13287] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:28:20.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:28:20.993 [DEBUG] [Thread-13290] [transport.py] [_log()] starting thread (client mode): 0x70d0f400
2025-11-26T06:28:20.993 [DEBUG] [Thread-13290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:28:21.007 [DEBUG] [Thread-13290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:28:21.007 [INFO] [Thread-13290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:28:21.015 [DEBUG] [Thread-13290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:28:21.015 [DEBUG] [Thread-13290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:28:21.015 [DEBUG] [Thread-13290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:28:21.015 [DEBUG] [Thread-13290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:28:21.015 [DEBUG] [Thread-13290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:28:21.015 [DEBUG] [Thread-13290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:28:21.015 [DEBUG] [Thread-13290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] client lang: <none>
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] server lang: <none>
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] kex follows: False
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] Compression: none
2025-11-26T06:28:21.016 [DEBUG] [Thread-13290] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:28:21.072 [DEBUG] [Thread-13290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:28:21.073 [DEBUG] [Thread-13290] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:28:21.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:28:21.074 [DEBUG] [Thread-13290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:28:21.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:28:21.129 [DEBUG] [Thread-13290] [transport.py] [_log()] userauth is OK
2025-11-26T06:28:21.129 [DEBUG] [Thread-13290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:28:21.129 [DEBUG] [Thread-13290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:28:21.129 [DEBUG] [Thread-13290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:28:21.129 [DEBUG] [Thread-13290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:28:21.148 [INFO] [Thread-13290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:28:21.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:28:21.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:28:21.990 [DEBUG] [Thread-13290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:28:21.990 [DEBUG] [Thread-13290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:28:22.039 [DEBUG] [Thread-13290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:28:22.039 [DEBUG] [Thread-13290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:28:22.048 [DEBUG] [Thread-13290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:28:22.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:28:22.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:28:22.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:28:22.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:28:22.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:28:22.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:28:22.084 [DEBUG] [Thread-13290] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:28:23.148 [DEBUG] [Thread-13292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:28:28.731 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:28:28.732 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:28:37.086 [DEBUG] [Thread-13293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:28:38.201 [DEBUG] [Thread-13294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:28:52.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:28:52.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:28:52.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:28:52.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 28, 31), 30.09, 12.58, 0.0, 13.76, 21.24, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:28:52.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:28:31
2025-11-26T06:28:52.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:28:53.029 [DEBUG] [Thread-13295] [transport.py] [_log()] starting thread (client mode): 0x7376f970
2025-11-26T06:28:53.029 [DEBUG] [Thread-13295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:28:53.043 [DEBUG] [Thread-13295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:28:53.044 [INFO] [Thread-13295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] client lang: <none>
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] server lang: <none>
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] kex follows: False
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] Compression: none
2025-11-26T06:28:53.047 [DEBUG] [Thread-13295] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:28:53.064 [DEBUG] [Thread-13295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:28:53.064 [DEBUG] [Thread-13295] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:28:53.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:28:53.065 [DEBUG] [Thread-13295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:28:53.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:28:53.067 [DEBUG] [Thread-13295] [transport.py] [_log()] userauth is OK
2025-11-26T06:28:53.068 [DEBUG] [Thread-13295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:28:53.068 [DEBUG] [Thread-13295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:28:53.068 [DEBUG] [Thread-13295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:28:53.068 [DEBUG] [Thread-13295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:28:53.092 [INFO] [Thread-13295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:28:53.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:28:53.235 [DEBUG] [Thread-13297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:28:53.652 [DEBUG] [Thread-13295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:28:53.652 [DEBUG] [Thread-13295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:28:53.653 [DEBUG] [Thread-13295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:28:53.694 [DEBUG] [Thread-13295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:28:53.694 [DEBUG] [Thread-13295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:28:53.698 [DEBUG] [Thread-13295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:28:53.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:28:53.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:28:53.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:28:53.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:28:53.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:28:53.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:28:53.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:28:53.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:28:53.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:28:53.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.186552 -999.00  +20.70  16.51     18   -4.20 1 1 1 1 1   887    0 25.03 -0.79 ----- 13.9 16.5 55.2 20.9 23.3 -27.1 23.1 -26.5 21.9 -25.7 21.9 -26.2
2025-11-26T06:28:53.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:28:53.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:28:53.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.186552
2025-11-26T06:28:53.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:28:53.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:28:53.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:28:53.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:28:53.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:28:53.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:28:31', tmtdew=30.09, humidity=12.58, cloud=0.0, wind=13.76, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:28:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:28:53.724 [DEBUG] [Thread-13295] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:28:53.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:28:53.819 [DEBUG] [Thread-13299] [transport.py] [_log()] starting thread (client mode): 0x73782680
2025-11-26T06:28:53.819 [DEBUG] [Thread-13299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:28:53.835 [DEBUG] [Thread-13299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:28:53.835 [INFO] [Thread-13299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:28:53.842 [DEBUG] [Thread-13299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:28:53.843 [DEBUG] [Thread-13299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:28:53.843 [DEBUG] [Thread-13299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:28:53.843 [DEBUG] [Thread-13299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:28:53.843 [DEBUG] [Thread-13299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:28:53.843 [DEBUG] [Thread-13299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:28:53.843 [DEBUG] [Thread-13299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:28:53.843 [DEBUG] [Thread-13299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:28:53.843 [DEBUG] [Thread-13299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:28:53.844 [DEBUG] [Thread-13299] [transport.py] [_log()] client lang: <none>
2025-11-26T06:28:53.844 [DEBUG] [Thread-13299] [transport.py] [_log()] server lang: <none>
2025-11-26T06:28:53.844 [DEBUG] [Thread-13299] [transport.py] [_log()] kex follows: False
2025-11-26T06:28:53.844 [DEBUG] [Thread-13299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:28:53.844 [DEBUG] [Thread-13299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:28:53.844 [DEBUG] [Thread-13299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:28:53.844 [DEBUG] [Thread-13299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:28:53.845 [DEBUG] [Thread-13299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:28:53.845 [DEBUG] [Thread-13299] [transport.py] [_log()] Compression: none
2025-11-26T06:28:53.845 [DEBUG] [Thread-13299] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:28:53.905 [DEBUG] [Thread-13299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:28:53.906 [DEBUG] [Thread-13299] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:28:53.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:28:53.907 [DEBUG] [Thread-13299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:28:53.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:28:53.961 [DEBUG] [Thread-13299] [transport.py] [_log()] userauth is OK
2025-11-26T06:28:53.961 [DEBUG] [Thread-13299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:28:53.961 [DEBUG] [Thread-13299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:28:53.962 [DEBUG] [Thread-13299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:28:53.962 [DEBUG] [Thread-13299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:28:53.981 [INFO] [Thread-13299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:28:53.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:28:53.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:28:54.898 [DEBUG] [Thread-13299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:28:54.898 [DEBUG] [Thread-13299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:28:54.946 [DEBUG] [Thread-13299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:28:54.946 [DEBUG] [Thread-13299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:28:54.955 [DEBUG] [Thread-13299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:28:54.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:28:54.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:28:54.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:28:54.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:28:54.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:28:54.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:28:54.992 [DEBUG] [Thread-13299] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:29:08.272 [DEBUG] [Thread-13301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:29:23.321 [DEBUG] [Thread-13302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:29:24.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:29:24.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:29:24.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:29:25.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 29, 3), 30.08, 12.58, 0.0, 13.76, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:29:25.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:29:03
2025-11-26T06:29:25.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:29:25.979 [DEBUG] [Thread-13303] [transport.py] [_log()] starting thread (client mode): 0x7376e890
2025-11-26T06:29:25.979 [DEBUG] [Thread-13303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:29:25.998 [DEBUG] [Thread-13303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:29:25.998 [INFO] [Thread-13303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] client lang: <none>
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] server lang: <none>
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] kex follows: False
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:29:26.000 [DEBUG] [Thread-13303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:29:26.001 [DEBUG] [Thread-13303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:29:26.001 [DEBUG] [Thread-13303] [transport.py] [_log()] Compression: none
2025-11-26T06:29:26.001 [DEBUG] [Thread-13303] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:29:26.013 [DEBUG] [Thread-13303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:29:26.013 [DEBUG] [Thread-13303] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:29:26.013 [DEBUG] [Thread-13303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:29:26.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:29:26.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:29:26.014 [DEBUG] [Thread-13303] [transport.py] [_log()] userauth is OK
2025-11-26T06:29:26.014 [DEBUG] [Thread-13303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:29:26.014 [DEBUG] [Thread-13303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:29:26.014 [DEBUG] [Thread-13303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:29:26.014 [DEBUG] [Thread-13303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:29:26.027 [INFO] [Thread-13303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:29:26.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:29:26.607 [DEBUG] [Thread-13303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:29:26.607 [DEBUG] [Thread-13303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:29:26.607 [DEBUG] [Thread-13303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:29:26.648 [DEBUG] [Thread-13303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:29:26.648 [DEBUG] [Thread-13303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:29:26.650 [DEBUG] [Thread-13303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:29:26.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:29:26.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:29:26.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:29:26.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:29:26.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:29:26.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:29:26.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:29:26.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.186899 -999.00  +20.70  15.18     18   -4.20 1 1 1 1 1   887    0 24.97 -1.87 ----- 16.2 15.2 41.6 19.5 23.3 -27.2 23.2 -26.6 21.9 -25.4 21.9 -26.2
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.186899
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:29:26.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:29:03', tmtdew=30.08, humidity=12.58, cloud=0.0, wind=13.76, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:29:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:29:26.666 [DEBUG] [Thread-13303] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:29:26.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:29:26.754 [DEBUG] [Thread-13306] [transport.py] [_log()] starting thread (client mode): 0x70d0e170
2025-11-26T06:29:26.754 [DEBUG] [Thread-13306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:29:26.768 [DEBUG] [Thread-13306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:29:26.768 [INFO] [Thread-13306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] client lang: <none>
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] server lang: <none>
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] kex follows: False
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] Compression: none
2025-11-26T06:29:26.776 [DEBUG] [Thread-13306] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:29:26.830 [DEBUG] [Thread-13306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:29:26.831 [DEBUG] [Thread-13306] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:29:26.831 [DEBUG] [Thread-13306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:29:26.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:29:26.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:29:26.888 [DEBUG] [Thread-13306] [transport.py] [_log()] userauth is OK
2025-11-26T06:29:26.888 [DEBUG] [Thread-13306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:29:26.888 [DEBUG] [Thread-13306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:29:26.888 [DEBUG] [Thread-13306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:29:26.888 [DEBUG] [Thread-13306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:29:26.905 [INFO] [Thread-13306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:29:26.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:29:26.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:29:27.748 [DEBUG] [Thread-13306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:29:27.749 [DEBUG] [Thread-13306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:29:27.796 [DEBUG] [Thread-13306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:29:27.796 [DEBUG] [Thread-13306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:29:27.804 [DEBUG] [Thread-13306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:29:27.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:29:27.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:29:27.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:29:27.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:29:27.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:29:27.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:29:27.835 [DEBUG] [Thread-13306] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:29:28.872 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:29:28.873 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:29:37.134 [DEBUG] [Thread-13308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:29:38.349 [DEBUG] [Thread-13309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:29:53.401 [DEBUG] [Thread-13310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:29:57.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:29:57.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:29:57.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:29:58.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 29, 35), 30.22, 12.5, 0.0, 15.79, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:29:58.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:29:35
2025-11-26T06:29:58.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:29:58.767 [DEBUG] [Thread-13311] [transport.py] [_log()] starting thread (client mode): 0x73783520
2025-11-26T06:29:58.767 [DEBUG] [Thread-13311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:29:58.786 [DEBUG] [Thread-13311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:29:58.786 [INFO] [Thread-13311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:29:58.789 [DEBUG] [Thread-13311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] client lang: <none>
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] server lang: <none>
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] kex follows: False
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] Compression: none
2025-11-26T06:29:58.790 [DEBUG] [Thread-13311] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:29:58.799 [DEBUG] [Thread-13311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:29:58.799 [DEBUG] [Thread-13311] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:29:58.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:29:58.800 [DEBUG] [Thread-13311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:29:58.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:29:58.802 [DEBUG] [Thread-13311] [transport.py] [_log()] userauth is OK
2025-11-26T06:29:58.802 [DEBUG] [Thread-13311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:29:58.802 [DEBUG] [Thread-13311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:29:58.802 [DEBUG] [Thread-13311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:29:58.802 [DEBUG] [Thread-13311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:29:58.826 [INFO] [Thread-13311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:29:58.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:29:59.455 [DEBUG] [Thread-13311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:29:59.456 [DEBUG] [Thread-13311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:29:59.456 [DEBUG] [Thread-13311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:29:59.497 [DEBUG] [Thread-13311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:29:59.497 [DEBUG] [Thread-13311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:29:59.500 [DEBUG] [Thread-13311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:29:59.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:29:59.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:29:59.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:29:59.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:29:59.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:29:59.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:29:59.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:29:59.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:29:59.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:29:59.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.187247 -999.00  +20.70  16.57     18   -4.20 1 1 1 1 1   887    0 24.77 -2.29 ----- 15.9 16.6 42.0 19.9 23.3 -27.3 23.2 -26.4 21.9 -25.6 21.9 -26.3
2025-11-26T06:29:59.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:29:59.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:29:59.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.187247
2025-11-26T06:29:59.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:29:59.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:29:59.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:29:59.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:29:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:29:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:29:35', tmtdew=30.22, humidity=12.5, cloud=0.0, wind=15.79, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:29:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:29:59.521 [DEBUG] [Thread-13311] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:29:59.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:29:59.613 [DEBUG] [Thread-13314] [transport.py] [_log()] starting thread (client mode): 0x7376efe0
2025-11-26T06:29:59.613 [DEBUG] [Thread-13314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:29:59.629 [DEBUG] [Thread-13314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:29:59.629 [INFO] [Thread-13314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] client lang: <none>
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] server lang: <none>
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] kex follows: False
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:29:59.636 [DEBUG] [Thread-13314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:29:59.637 [DEBUG] [Thread-13314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:29:59.637 [DEBUG] [Thread-13314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:29:59.637 [DEBUG] [Thread-13314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:29:59.637 [DEBUG] [Thread-13314] [transport.py] [_log()] Compression: none
2025-11-26T06:29:59.637 [DEBUG] [Thread-13314] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:29:59.696 [DEBUG] [Thread-13314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:29:59.696 [DEBUG] [Thread-13314] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:29:59.696 [DEBUG] [Thread-13314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:29:59.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:29:59.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:29:59.755 [DEBUG] [Thread-13314] [transport.py] [_log()] userauth is OK
2025-11-26T06:29:59.755 [DEBUG] [Thread-13314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:29:59.755 [DEBUG] [Thread-13314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:29:59.755 [DEBUG] [Thread-13314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:29:59.755 [DEBUG] [Thread-13314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:29:59.771 [INFO] [Thread-13314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:29:59.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:29:59.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:30:00.619 [DEBUG] [Thread-13314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:30:00.619 [DEBUG] [Thread-13314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:30:00.667 [DEBUG] [Thread-13314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:30:00.667 [DEBUG] [Thread-13314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:30:00.675 [DEBUG] [Thread-13314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:30:00.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:30:00.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:30:00.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:30:00.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:30:00.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:30:00.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:30:00.712 [DEBUG] [Thread-13314] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:30:08.435 [DEBUG] [Thread-13316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:30:23.477 [DEBUG] [Thread-13317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:30:29.016 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:30:29.017 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:30:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:30:30.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:30:30.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:30:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 30, 7), 30.2, 12.51, 0.0, 14.77, 21.17, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:30:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:30:07
2025-11-26T06:30:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:30:31.652 [DEBUG] [Thread-13318] [transport.py] [_log()] starting thread (client mode): 0x7376fd60
2025-11-26T06:30:31.652 [DEBUG] [Thread-13318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:30:31.673 [DEBUG] [Thread-13318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:30:31.674 [INFO] [Thread-13318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:30:31.675 [DEBUG] [Thread-13318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] client lang: <none>
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] server lang: <none>
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] kex follows: False
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] Compression: none
2025-11-26T06:30:31.676 [DEBUG] [Thread-13318] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:30:31.691 [DEBUG] [Thread-13318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:30:31.691 [DEBUG] [Thread-13318] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:30:31.692 [DEBUG] [Thread-13318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:30:31.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:30:31.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:30:31.693 [DEBUG] [Thread-13318] [transport.py] [_log()] userauth is OK
2025-11-26T06:30:31.693 [DEBUG] [Thread-13318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:30:31.694 [DEBUG] [Thread-13318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:30:31.694 [DEBUG] [Thread-13318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:30:31.694 [DEBUG] [Thread-13318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:30:31.709 [INFO] [Thread-13318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:30:31.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:30:32.318 [DEBUG] [Thread-13318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:30:32.318 [DEBUG] [Thread-13318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:30:32.318 [DEBUG] [Thread-13318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:30:32.359 [DEBUG] [Thread-13318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:30:32.359 [DEBUG] [Thread-13318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:30:32.363 [DEBUG] [Thread-13318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:30:32.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:30:32.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:30:32.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:30:32.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:30:32.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:30:32.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:30:32.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:30:32.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:30:32.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:30:32.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.187593 -999.00  +20.70  16.27     18   -4.20 1 1 1 1 1   887    0 24.40 -3.35 ----- 16.8 16.3 49.2 19.3 23.4 -27.2 23.2 -26.5 21.9 -25.6 21.9 -26.3
2025-11-26T06:30:32.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:30:32.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:30:32.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.187593
2025-11-26T06:30:32.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:30:32.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:30:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:30:32.391 [DEBUG] [Thread-13318] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:30:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:30:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:30:32.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:30:07', tmtdew=30.2, humidity=12.51, cloud=0.0, wind=14.77, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:30:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:30:32.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:30:32.502 [DEBUG] [Thread-13321] [transport.py] [_log()] starting thread (client mode): 0x73783520
2025-11-26T06:30:32.502 [DEBUG] [Thread-13321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:30:32.516 [DEBUG] [Thread-13321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:30:32.517 [INFO] [Thread-13321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:30:32.524 [DEBUG] [Thread-13321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:30:32.525 [DEBUG] [Thread-13321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:30:32.525 [DEBUG] [Thread-13321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:30:32.525 [DEBUG] [Thread-13321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:30:32.525 [DEBUG] [Thread-13321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:30:32.525 [DEBUG] [Thread-13321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:30:32.525 [DEBUG] [Thread-13321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:30:32.525 [DEBUG] [Thread-13321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:30:32.525 [DEBUG] [Thread-13321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:30:32.525 [DEBUG] [Thread-13321] [transport.py] [_log()] client lang: <none>
2025-11-26T06:30:32.526 [DEBUG] [Thread-13321] [transport.py] [_log()] server lang: <none>
2025-11-26T06:30:32.526 [DEBUG] [Thread-13321] [transport.py] [_log()] kex follows: False
2025-11-26T06:30:32.526 [DEBUG] [Thread-13321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:30:32.526 [DEBUG] [Thread-13321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:30:32.526 [DEBUG] [Thread-13321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:30:32.526 [DEBUG] [Thread-13321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:30:32.526 [DEBUG] [Thread-13321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:30:32.527 [DEBUG] [Thread-13321] [transport.py] [_log()] Compression: none
2025-11-26T06:30:32.527 [DEBUG] [Thread-13321] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:30:32.584 [DEBUG] [Thread-13321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:30:32.585 [DEBUG] [Thread-13321] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:30:32.585 [DEBUG] [Thread-13321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:30:32.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:30:32.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:30:32.641 [DEBUG] [Thread-13321] [transport.py] [_log()] userauth is OK
2025-11-26T06:30:32.641 [DEBUG] [Thread-13321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:30:32.641 [DEBUG] [Thread-13321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:30:32.641 [DEBUG] [Thread-13321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:30:32.641 [DEBUG] [Thread-13321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:30:32.659 [INFO] [Thread-13321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:30:32.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:30:32.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:30:33.440 [DEBUG] [Thread-13321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:30:33.440 [DEBUG] [Thread-13321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:30:33.488 [DEBUG] [Thread-13321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:30:33.488 [DEBUG] [Thread-13321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:30:33.499 [DEBUG] [Thread-13321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:30:33.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:30:33.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:30:33.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:30:33.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:30:33.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:30:33.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:30:33.546 [DEBUG] [Thread-13321] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:30:37.179 [DEBUG] [Thread-13323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:30:38.510 [DEBUG] [Thread-13324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:30:53.554 [DEBUG] [Thread-13325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:31:03.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:31:03.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:31:03.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:31:04.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 30, 39), 30.15, 12.56, 0.0, 13.38, 21.21, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:31:04.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:30:39
2025-11-26T06:31:04.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:31:04.501 [DEBUG] [Thread-13326] [transport.py] [_log()] starting thread (client mode): 0x7378c430
2025-11-26T06:31:04.501 [DEBUG] [Thread-13326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:31:04.522 [DEBUG] [Thread-13326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:31:04.522 [INFO] [Thread-13326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] client lang: <none>
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] server lang: <none>
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] kex follows: False
2025-11-26T06:31:04.525 [DEBUG] [Thread-13326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:31:04.526 [DEBUG] [Thread-13326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:31:04.526 [DEBUG] [Thread-13326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:31:04.526 [DEBUG] [Thread-13326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:31:04.526 [DEBUG] [Thread-13326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:31:04.526 [DEBUG] [Thread-13326] [transport.py] [_log()] Compression: none
2025-11-26T06:31:04.526 [DEBUG] [Thread-13326] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:31:04.544 [DEBUG] [Thread-13326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:31:04.545 [DEBUG] [Thread-13326] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:31:04.545 [DEBUG] [Thread-13326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:31:04.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:31:04.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:31:04.547 [DEBUG] [Thread-13326] [transport.py] [_log()] userauth is OK
2025-11-26T06:31:04.548 [DEBUG] [Thread-13326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:31:04.548 [DEBUG] [Thread-13326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:31:04.548 [DEBUG] [Thread-13326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:31:04.548 [DEBUG] [Thread-13326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:31:04.573 [INFO] [Thread-13326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:31:04.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:31:05.172 [DEBUG] [Thread-13326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:31:05.172 [DEBUG] [Thread-13326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:31:05.172 [DEBUG] [Thread-13326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:31:05.213 [DEBUG] [Thread-13326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:31:05.213 [DEBUG] [Thread-13326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:31:05.216 [DEBUG] [Thread-13326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:31:05.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:31:05.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:31:05.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:31:05.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:31:05.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:31:05.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:31:05.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:31:05.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:31:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:31:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.187593 -999.00  +20.70  16.27     18   -4.20 1 1 1 1 1   887    0 24.40 -3.35 ----- 16.8 16.3 49.2 19.3 23.4 -27.2 23.2 -26.5 21.9 -25.6 21.9 -26.3
2025-11-26T06:31:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:31:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:31:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.187593
2025-11-26T06:31:05.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:31:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:31:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:31:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:31:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:31:05.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:30:39', tmtdew=30.15, humidity=12.56, cloud=0.0, wind=13.38, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:30:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:31:05.243 [DEBUG] [Thread-13326] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:31:05.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:31:05.328 [DEBUG] [Thread-13329] [transport.py] [_log()] starting thread (client mode): 0x7378fdf0
2025-11-26T06:31:05.328 [DEBUG] [Thread-13329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:31:05.343 [DEBUG] [Thread-13329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:31:05.343 [INFO] [Thread-13329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:31:05.351 [DEBUG] [Thread-13329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:31:05.351 [DEBUG] [Thread-13329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:31:05.351 [DEBUG] [Thread-13329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:31:05.351 [DEBUG] [Thread-13329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:31:05.352 [DEBUG] [Thread-13329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:31:05.352 [DEBUG] [Thread-13329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:31:05.352 [DEBUG] [Thread-13329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:31:05.352 [DEBUG] [Thread-13329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:31:05.352 [DEBUG] [Thread-13329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:31:05.352 [DEBUG] [Thread-13329] [transport.py] [_log()] client lang: <none>
2025-11-26T06:31:05.352 [DEBUG] [Thread-13329] [transport.py] [_log()] server lang: <none>
2025-11-26T06:31:05.352 [DEBUG] [Thread-13329] [transport.py] [_log()] kex follows: False
2025-11-26T06:31:05.353 [DEBUG] [Thread-13329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:31:05.353 [DEBUG] [Thread-13329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:31:05.353 [DEBUG] [Thread-13329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:31:05.353 [DEBUG] [Thread-13329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:31:05.353 [DEBUG] [Thread-13329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:31:05.353 [DEBUG] [Thread-13329] [transport.py] [_log()] Compression: none
2025-11-26T06:31:05.353 [DEBUG] [Thread-13329] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:31:05.410 [DEBUG] [Thread-13329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:31:05.411 [DEBUG] [Thread-13329] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:31:05.411 [DEBUG] [Thread-13329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:31:05.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:31:05.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:31:05.469 [DEBUG] [Thread-13329] [transport.py] [_log()] userauth is OK
2025-11-26T06:31:05.469 [DEBUG] [Thread-13329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:31:05.469 [DEBUG] [Thread-13329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:31:05.469 [DEBUG] [Thread-13329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:31:05.470 [DEBUG] [Thread-13329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:31:05.488 [INFO] [Thread-13329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:31:05.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:31:05.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:31:06.341 [DEBUG] [Thread-13329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:31:06.341 [DEBUG] [Thread-13329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:31:06.389 [DEBUG] [Thread-13329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:31:06.389 [DEBUG] [Thread-13329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:31:06.398 [DEBUG] [Thread-13329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:31:06.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:31:06.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:31:06.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:31:06.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:31:06.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:31:06.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:31:06.439 [DEBUG] [Thread-13329] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:31:08.592 [DEBUG] [Thread-13331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:31:23.642 [DEBUG] [Thread-13332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:31:29.159 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:31:29.160 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:31:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:31:36.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:31:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:31:37.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 31, 11), 30.1, 12.61, 0.0, 13.13, 21.21, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:31:37.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:31:11
2025-11-26T06:31:37.228 [DEBUG] [Thread-13333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:31:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:31:37.388 [DEBUG] [Thread-13334] [transport.py] [_log()] starting thread (client mode): 0x70d7eda0
2025-11-26T06:31:37.388 [DEBUG] [Thread-13334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:31:37.407 [DEBUG] [Thread-13334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:31:37.407 [INFO] [Thread-13334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:31:37.410 [DEBUG] [Thread-13334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] client lang: <none>
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] server lang: <none>
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] kex follows: False
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:31:37.411 [DEBUG] [Thread-13334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:31:37.412 [DEBUG] [Thread-13334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:31:37.412 [DEBUG] [Thread-13334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:31:37.412 [DEBUG] [Thread-13334] [transport.py] [_log()] Compression: none
2025-11-26T06:31:37.412 [DEBUG] [Thread-13334] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:31:37.432 [DEBUG] [Thread-13334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:31:37.432 [DEBUG] [Thread-13334] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:31:37.433 [DEBUG] [Thread-13334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:31:37.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:31:37.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:31:37.435 [DEBUG] [Thread-13334] [transport.py] [_log()] userauth is OK
2025-11-26T06:31:37.435 [DEBUG] [Thread-13334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:31:37.435 [DEBUG] [Thread-13334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:31:37.435 [DEBUG] [Thread-13334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:31:37.435 [DEBUG] [Thread-13334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:31:37.457 [INFO] [Thread-13334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:31:37.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:31:38.089 [DEBUG] [Thread-13334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:31:38.089 [DEBUG] [Thread-13334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:31:38.090 [DEBUG] [Thread-13334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:31:38.130 [DEBUG] [Thread-13334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:31:38.131 [DEBUG] [Thread-13334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:31:38.133 [DEBUG] [Thread-13334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:31:38.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:31:38.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:31:38.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:31:38.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:31:38.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:31:38.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:31:38.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:31:38.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:31:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:31:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.187941 -999.00  +20.70  13.23     18   -4.20 1 1 1 1 1   887    0 25.18 -4.05 ----- 12.7 13.2 35.8 18.3 23.4 -27.1 23.2 -26.3 21.9 -25.3 21.9 -26.2
2025-11-26T06:31:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:31:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:31:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.187941
2025-11-26T06:31:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:31:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:31:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:31:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:31:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:31:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:31:11', tmtdew=30.1, humidity=12.61, cloud=0.0, wind=13.13, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:30:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:31:38.159 [DEBUG] [Thread-13334] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:31:38.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:31:38.254 [DEBUG] [Thread-13337] [transport.py] [_log()] starting thread (client mode): 0x7378e8c0
2025-11-26T06:31:38.254 [DEBUG] [Thread-13337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:31:38.269 [DEBUG] [Thread-13337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:31:38.269 [INFO] [Thread-13337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:31:38.276 [DEBUG] [Thread-13337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:31:38.276 [DEBUG] [Thread-13337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] client lang: <none>
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] server lang: <none>
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] kex follows: False
2025-11-26T06:31:38.277 [DEBUG] [Thread-13337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:31:38.278 [DEBUG] [Thread-13337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:31:38.278 [DEBUG] [Thread-13337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:31:38.278 [DEBUG] [Thread-13337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:31:38.278 [DEBUG] [Thread-13337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:31:38.278 [DEBUG] [Thread-13337] [transport.py] [_log()] Compression: none
2025-11-26T06:31:38.278 [DEBUG] [Thread-13337] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:31:38.336 [DEBUG] [Thread-13337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:31:38.336 [DEBUG] [Thread-13337] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:31:38.337 [DEBUG] [Thread-13337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:31:38.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:31:38.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:31:38.392 [DEBUG] [Thread-13337] [transport.py] [_log()] userauth is OK
2025-11-26T06:31:38.392 [DEBUG] [Thread-13337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:31:38.393 [DEBUG] [Thread-13337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:31:38.393 [DEBUG] [Thread-13337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:31:38.393 [DEBUG] [Thread-13337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:31:38.412 [INFO] [Thread-13337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:31:38.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:31:38.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:31:38.676 [DEBUG] [Thread-13339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:31:39.216 [DEBUG] [Thread-13337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:31:39.222 [DEBUG] [Thread-13337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:31:39.263 [DEBUG] [Thread-13337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:31:39.263 [DEBUG] [Thread-13337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:31:39.272 [DEBUG] [Thread-13337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:31:39.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:31:39.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:31:39.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:31:39.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:31:39.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:31:39.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:31:39.306 [DEBUG] [Thread-13337] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:31:53.724 [DEBUG] [Thread-13340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:32:08.756 [DEBUG] [Thread-13341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:32:09.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:32:09.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:32:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:32:09.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 31, 43), 30.03, 12.61, 0.0, 15.9, 21.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:32:09.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:31:43
2025-11-26T06:32:10.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:32:10.234 [DEBUG] [Thread-13342] [transport.py] [_log()] starting thread (client mode): 0x7378f280
2025-11-26T06:32:10.235 [DEBUG] [Thread-13342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:32:10.250 [DEBUG] [Thread-13342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:32:10.250 [INFO] [Thread-13342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:32:10.251 [DEBUG] [Thread-13342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:32:10.251 [DEBUG] [Thread-13342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:32:10.251 [DEBUG] [Thread-13342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:32:10.251 [DEBUG] [Thread-13342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:32:10.251 [DEBUG] [Thread-13342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:32:10.251 [DEBUG] [Thread-13342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:32:10.251 [DEBUG] [Thread-13342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] client lang: <none>
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] server lang: <none>
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] kex follows: False
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] Compression: none
2025-11-26T06:32:10.252 [DEBUG] [Thread-13342] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:32:10.264 [DEBUG] [Thread-13342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:32:10.265 [DEBUG] [Thread-13342] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:32:10.265 [DEBUG] [Thread-13342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:32:10.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:32:10.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:32:10.266 [DEBUG] [Thread-13342] [transport.py] [_log()] userauth is OK
2025-11-26T06:32:10.266 [DEBUG] [Thread-13342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:32:10.266 [DEBUG] [Thread-13342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:32:10.267 [DEBUG] [Thread-13342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:32:10.267 [DEBUG] [Thread-13342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:32:10.280 [INFO] [Thread-13342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:32:10.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:32:10.931 [DEBUG] [Thread-13342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:32:10.931 [DEBUG] [Thread-13342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:32:10.932 [DEBUG] [Thread-13342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:32:10.973 [DEBUG] [Thread-13342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:32:10.973 [DEBUG] [Thread-13342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:32:10.977 [DEBUG] [Thread-13342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:32:10.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:32:10.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:32:10.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:32:10.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:32:10.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:32:11.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:32:11.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:32:11.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:32:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:32:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.188635 -999.00  +20.70  14.93     18   -4.30 1 1 1 1 1   887    0 25.20 -4.78 ----- 13.6 14.9 37.8 18.5 23.4 -27.2 23.3 -26.5 21.9 -25.6 22.0 -26.2
2025-11-26T06:32:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:32:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:32:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.188635
2025-11-26T06:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:32:11.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:31:43', tmtdew=30.03, humidity=12.61, cloud=0.0, wind=15.9, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:31:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:32:11.004 [DEBUG] [Thread-13342] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:32:11.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:32:11.099 [DEBUG] [Thread-13345] [transport.py] [_log()] starting thread (client mode): 0x7378e2f0
2025-11-26T06:32:11.099 [DEBUG] [Thread-13345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:32:11.113 [DEBUG] [Thread-13345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:32:11.114 [INFO] [Thread-13345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:32:11.121 [DEBUG] [Thread-13345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:32:11.121 [DEBUG] [Thread-13345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:32:11.121 [DEBUG] [Thread-13345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] client lang: <none>
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] server lang: <none>
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] kex follows: False
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] Compression: none
2025-11-26T06:32:11.122 [DEBUG] [Thread-13345] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:32:11.181 [DEBUG] [Thread-13345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:32:11.181 [DEBUG] [Thread-13345] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:32:11.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:32:11.183 [DEBUG] [Thread-13345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:32:11.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:32:11.239 [DEBUG] [Thread-13345] [transport.py] [_log()] userauth is OK
2025-11-26T06:32:11.239 [DEBUG] [Thread-13345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:32:11.239 [DEBUG] [Thread-13345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:32:11.240 [DEBUG] [Thread-13345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:32:11.240 [DEBUG] [Thread-13345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:32:11.262 [INFO] [Thread-13345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:32:11.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:32:11.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:32:12.068 [DEBUG] [Thread-13345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:32:12.068 [DEBUG] [Thread-13345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:32:12.116 [DEBUG] [Thread-13345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:32:12.116 [DEBUG] [Thread-13345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:32:12.125 [DEBUG] [Thread-13345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:32:12.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:32:12.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:32:12.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:32:12.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:32:12.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:32:12.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:32:12.157 [DEBUG] [Thread-13345] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:32:23.792 [DEBUG] [Thread-13347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:32:29.300 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:32:29.301 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:32:37.289 [DEBUG] [Thread-13348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:32:38.850 [DEBUG] [Thread-13349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:32:42.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:32:42.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:32:42.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:32:42.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 32, 15), 30.02, 12.63, 0.0, 15.26, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:32:42.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:32:15
2025-11-26T06:32:42.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:32:43.121 [DEBUG] [Thread-13350] [transport.py] [_log()] starting thread (client mode): 0x7378ef20
2025-11-26T06:32:43.121 [DEBUG] [Thread-13350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:32:43.141 [DEBUG] [Thread-13350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:32:43.142 [INFO] [Thread-13350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:32:43.145 [DEBUG] [Thread-13350] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:32:43.145 [DEBUG] [Thread-13350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:32:43.145 [DEBUG] [Thread-13350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] client lang: <none>
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] server lang: <none>
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] kex follows: False
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:32:43.146 [DEBUG] [Thread-13350] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:32:43.147 [DEBUG] [Thread-13350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:32:43.147 [DEBUG] [Thread-13350] [transport.py] [_log()] Compression: none
2025-11-26T06:32:43.147 [DEBUG] [Thread-13350] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:32:43.166 [DEBUG] [Thread-13350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:32:43.167 [DEBUG] [Thread-13350] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:32:43.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:32:43.168 [DEBUG] [Thread-13350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:32:43.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:32:43.170 [DEBUG] [Thread-13350] [transport.py] [_log()] userauth is OK
2025-11-26T06:32:43.170 [DEBUG] [Thread-13350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:32:43.170 [DEBUG] [Thread-13350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:32:43.170 [DEBUG] [Thread-13350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:32:43.170 [DEBUG] [Thread-13350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:32:43.195 [INFO] [Thread-13350] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:32:43.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:32:43.853 [DEBUG] [Thread-13350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:32:43.853 [DEBUG] [Thread-13350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:32:43.854 [DEBUG] [Thread-13350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:32:43.894 [DEBUG] [Thread-13350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:32:43.894 [DEBUG] [Thread-13350] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:32:43.897 [DEBUG] [Thread-13350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:32:43.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:32:43.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:32:43.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:32:43.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:32:43.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:32:43.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:32:43.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:32:43.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:32:43.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:32:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.188983 -999.00  +20.70  15.22     18   -4.30 1 1 1 1 1   887    0 24.67 -4.38 ----- 16.0 15.2 44.4 17.7 23.5 -27.3 23.3 -26.5 21.9 -25.8 22.0 -26.3
2025-11-26T06:32:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:32:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:32:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.188983
2025-11-26T06:32:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:32:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:32:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:32:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:32:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:32:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:32:15', tmtdew=30.02, humidity=12.63, cloud=0.0, wind=15.26, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:32:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:32:43.924 [DEBUG] [Thread-13350] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:32:44.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:32:44.019 [DEBUG] [Thread-13353] [transport.py] [_log()] starting thread (client mode): 0x7378ca90
2025-11-26T06:32:44.019 [DEBUG] [Thread-13353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:32:44.034 [DEBUG] [Thread-13353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:32:44.034 [INFO] [Thread-13353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:32:44.042 [DEBUG] [Thread-13353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:32:44.042 [DEBUG] [Thread-13353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:32:44.042 [DEBUG] [Thread-13353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:32:44.042 [DEBUG] [Thread-13353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:32:44.042 [DEBUG] [Thread-13353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:32:44.043 [DEBUG] [Thread-13353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:32:44.043 [DEBUG] [Thread-13353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:32:44.043 [DEBUG] [Thread-13353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:32:44.043 [DEBUG] [Thread-13353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:32:44.043 [DEBUG] [Thread-13353] [transport.py] [_log()] client lang: <none>
2025-11-26T06:32:44.043 [DEBUG] [Thread-13353] [transport.py] [_log()] server lang: <none>
2025-11-26T06:32:44.043 [DEBUG] [Thread-13353] [transport.py] [_log()] kex follows: False
2025-11-26T06:32:44.043 [DEBUG] [Thread-13353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:32:44.044 [DEBUG] [Thread-13353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:32:44.044 [DEBUG] [Thread-13353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:32:44.044 [DEBUG] [Thread-13353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:32:44.044 [DEBUG] [Thread-13353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:32:44.044 [DEBUG] [Thread-13353] [transport.py] [_log()] Compression: none
2025-11-26T06:32:44.044 [DEBUG] [Thread-13353] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:32:44.102 [DEBUG] [Thread-13353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:32:44.102 [DEBUG] [Thread-13353] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:32:44.103 [DEBUG] [Thread-13353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:32:44.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:32:44.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:32:44.161 [DEBUG] [Thread-13353] [transport.py] [_log()] userauth is OK
2025-11-26T06:32:44.161 [DEBUG] [Thread-13353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:32:44.162 [DEBUG] [Thread-13353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:32:44.162 [DEBUG] [Thread-13353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:32:44.162 [DEBUG] [Thread-13353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:32:44.187 [INFO] [Thread-13353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:32:44.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:32:44.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:32:45.026 [DEBUG] [Thread-13353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:32:45.026 [DEBUG] [Thread-13353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:32:45.073 [DEBUG] [Thread-13353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:32:45.073 [DEBUG] [Thread-13353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:32:45.082 [DEBUG] [Thread-13353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:32:45.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:32: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')
2025-11-26T06:32:45.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:32:45.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:32:45.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:32:45.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:32:45.115 [DEBUG] [Thread-13353] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:32:53.890 [DEBUG] [Thread-13355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:33:08.941 [DEBUG] [Thread-13356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:33:15.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:33:15.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:33:15.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:33:15.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 32, 47), 30.1, 12.6, 0.0, 14.22, 21.11, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:33:15.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:32:47
2025-11-26T06:33:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:33:16.064 [DEBUG] [Thread-13357] [transport.py] [_log()] starting thread (client mode): 0x7378c8e0
2025-11-26T06:33:16.064 [DEBUG] [Thread-13357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:33:16.082 [DEBUG] [Thread-13357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:33:16.082 [INFO] [Thread-13357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:33:16.085 [DEBUG] [Thread-13357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:33:16.085 [DEBUG] [Thread-13357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:33:16.085 [DEBUG] [Thread-13357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:33:16.085 [DEBUG] [Thread-13357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] client lang: <none>
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] server lang: <none>
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] kex follows: False
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:33:16.086 [DEBUG] [Thread-13357] [transport.py] [_log()] Compression: none
2025-11-26T06:33:16.087 [DEBUG] [Thread-13357] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:33:16.104 [DEBUG] [Thread-13357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:33:16.105 [DEBUG] [Thread-13357] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:33:16.105 [DEBUG] [Thread-13357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:33:16.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:33:16.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:33:16.108 [DEBUG] [Thread-13357] [transport.py] [_log()] userauth is OK
2025-11-26T06:33:16.108 [DEBUG] [Thread-13357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:33:16.108 [DEBUG] [Thread-13357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:33:16.108 [DEBUG] [Thread-13357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:33:16.108 [DEBUG] [Thread-13357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:33:16.125 [INFO] [Thread-13357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:33:16.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:33:16.784 [DEBUG] [Thread-13357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:33:16.785 [DEBUG] [Thread-13357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:33:16.785 [DEBUG] [Thread-13357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:33:16.826 [DEBUG] [Thread-13357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:33:16.826 [DEBUG] [Thread-13357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:33:16.830 [DEBUG] [Thread-13357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:33:16.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:33:16.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:33:16.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:33:16.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:33:16.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:33:16.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:33:16.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:33:16.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:33:16.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:33:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.189330 -999.00  +20.70  15.55     18   -4.30 1 1 1 1 1   887    0 24.87 -4.48 ----- 14.5 15.6 45.0 18.7 23.4 -27.2 23.3 -26.6 21.9 -25.7 22.0 -26.2
2025-11-26T06:33:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:33:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:33:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.189330
2025-11-26T06:33:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:33:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:33:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:33:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:33:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:33:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:32:47', tmtdew=30.1, humidity=12.6, cloud=0.0, wind=14.22, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:32:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:33:16.867 [DEBUG] [Thread-13357] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:33:16.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:33:16.974 [DEBUG] [Thread-13360] [transport.py] [_log()] starting thread (client mode): 0x7378f9a0
2025-11-26T06:33:16.974 [DEBUG] [Thread-13360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:33:16.988 [DEBUG] [Thread-13360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:33:16.989 [INFO] [Thread-13360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] client lang: <none>
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] server lang: <none>
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] kex follows: False
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:33:16.996 [DEBUG] [Thread-13360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:33:16.997 [DEBUG] [Thread-13360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:33:16.997 [DEBUG] [Thread-13360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:33:16.997 [DEBUG] [Thread-13360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:33:16.997 [DEBUG] [Thread-13360] [transport.py] [_log()] Compression: none
2025-11-26T06:33:16.997 [DEBUG] [Thread-13360] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:33:17.057 [DEBUG] [Thread-13360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:33:17.058 [DEBUG] [Thread-13360] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:33:17.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:33:17.059 [DEBUG] [Thread-13360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:33:17.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:33:17.113 [DEBUG] [Thread-13360] [transport.py] [_log()] userauth is OK
2025-11-26T06:33:17.113 [DEBUG] [Thread-13360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:33:17.114 [DEBUG] [Thread-13360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:33:17.114 [DEBUG] [Thread-13360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:33:17.114 [DEBUG] [Thread-13360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:33:17.133 [INFO] [Thread-13360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:33:17.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:33:17.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:33:17.942 [DEBUG] [Thread-13360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:33:17.943 [DEBUG] [Thread-13360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:33:17.991 [DEBUG] [Thread-13360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:33:17.991 [DEBUG] [Thread-13360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:33:18.000 [DEBUG] [Thread-13360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:33:18.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:33:18.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:33:18.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:33:18.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:33:18.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:33:18.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:33:18.037 [DEBUG] [Thread-13360] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:33:23.975 [DEBUG] [Thread-13362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:33:29.441 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:33:29.442 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:33:37.352 [DEBUG] [Thread-13363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:33:39.032 [DEBUG] [Thread-13364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:33:48.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:33:48.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:33:48.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:33:48.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 33, 19), 30.1, 12.6, 0.0, 14.06, 21.12, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:33:48.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:33:19
2025-11-26T06:33:48.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:33:48.985 [DEBUG] [Thread-13365] [transport.py] [_log()] starting thread (client mode): 0x7378e680
2025-11-26T06:33:48.985 [DEBUG] [Thread-13365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:33:49.005 [DEBUG] [Thread-13365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:33:49.005 [INFO] [Thread-13365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:33:49.008 [DEBUG] [Thread-13365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] client lang: <none>
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] server lang: <none>
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] kex follows: False
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] Compression: none
2025-11-26T06:33:49.009 [DEBUG] [Thread-13365] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:33:49.032 [DEBUG] [Thread-13365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:33:49.032 [DEBUG] [Thread-13365] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:33:49.033 [DEBUG] [Thread-13365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:33:49.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:33:49.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:33:49.035 [DEBUG] [Thread-13365] [transport.py] [_log()] userauth is OK
2025-11-26T06:33:49.035 [DEBUG] [Thread-13365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:33:49.035 [DEBUG] [Thread-13365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:33:49.035 [DEBUG] [Thread-13365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:33:49.035 [DEBUG] [Thread-13365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:33:49.063 [INFO] [Thread-13365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:33:49.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:33:49.690 [DEBUG] [Thread-13365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:33:49.690 [DEBUG] [Thread-13365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:33:49.690 [DEBUG] [Thread-13365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:33:49.731 [DEBUG] [Thread-13365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:33:49.731 [DEBUG] [Thread-13365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:33:49.735 [DEBUG] [Thread-13365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:33:49.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:33:49.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:33:49.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:33:49.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:33:49.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:33:49.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:33:49.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:33:49.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:33:49.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:33:49.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.189677 -999.00  +20.70  14.95     18   -4.30 1 1 1 1 1   887    0 24.74 -5.06 ----- 16.0 14.9 41.6 17.8 23.5 -27.6 23.4 -26.5 21.9 -25.7 22.1 -26.2
2025-11-26T06:33:49.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:33:49.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:33:49.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.189677
2025-11-26T06:33:49.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:33:49.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:33:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:33:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:33:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:33:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:33:19', tmtdew=30.1, humidity=12.6, cloud=0.0, wind=14.06, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:33:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:33:49.763 [DEBUG] [Thread-13365] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:33:49.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:33:49.859 [DEBUG] [Thread-13368] [transport.py] [_log()] starting thread (client mode): 0x7378c4f0
2025-11-26T06:33:49.859 [DEBUG] [Thread-13368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:33:49.877 [DEBUG] [Thread-13368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:33:49.878 [INFO] [Thread-13368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:33:49.885 [DEBUG] [Thread-13368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:33:49.885 [DEBUG] [Thread-13368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:33:49.885 [DEBUG] [Thread-13368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:33:49.885 [DEBUG] [Thread-13368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:33:49.885 [DEBUG] [Thread-13368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] client lang: <none>
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] server lang: <none>
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] kex follows: False
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] Compression: none
2025-11-26T06:33:49.886 [DEBUG] [Thread-13368] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:33:49.946 [DEBUG] [Thread-13368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:33:49.946 [DEBUG] [Thread-13368] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:33:49.947 [DEBUG] [Thread-13368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:33:49.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:33:49.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:33:50.005 [DEBUG] [Thread-13368] [transport.py] [_log()] userauth is OK
2025-11-26T06:33:50.005 [DEBUG] [Thread-13368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:33:50.006 [DEBUG] [Thread-13368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:33:50.006 [DEBUG] [Thread-13368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:33:50.006 [DEBUG] [Thread-13368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:33:50.025 [INFO] [Thread-13368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:33:50.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:33:50.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:33:50.893 [DEBUG] [Thread-13368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:33:50.894 [DEBUG] [Thread-13368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:33:50.942 [DEBUG] [Thread-13368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:33:50.942 [DEBUG] [Thread-13368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:33:50.951 [DEBUG] [Thread-13368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:33:50.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:33:50.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:33:50.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:33:50.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:33:50.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:33:50.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:33:50.989 [DEBUG] [Thread-13368] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:33:54.063 [DEBUG] [Thread-13370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:34:09.117 [DEBUG] [Thread-13371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:34:21.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:34:21.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:34:21.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:34:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 33, 51), 30.11, 12.6, 0.0, 14.56, 21.17, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:34:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:33:51
2025-11-26T06:34:21.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:34:21.948 [DEBUG] [Thread-13372] [transport.py] [_log()] starting thread (client mode): 0x7376c0a0
2025-11-26T06:34:21.948 [DEBUG] [Thread-13372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:34:21.967 [DEBUG] [Thread-13372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:34:21.967 [INFO] [Thread-13372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] client lang: <none>
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] server lang: <none>
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] kex follows: False
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] Compression: none
2025-11-26T06:34:21.969 [DEBUG] [Thread-13372] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:34:21.979 [DEBUG] [Thread-13372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:34:21.979 [DEBUG] [Thread-13372] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:34:21.979 [DEBUG] [Thread-13372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:34:21.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:34:21.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:34:21.980 [DEBUG] [Thread-13372] [transport.py] [_log()] userauth is OK
2025-11-26T06:34:21.980 [DEBUG] [Thread-13372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:34:21.980 [DEBUG] [Thread-13372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:34:21.980 [DEBUG] [Thread-13372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:34:21.980 [DEBUG] [Thread-13372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:34:21.989 [INFO] [Thread-13372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:34:21.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:34:22.623 [DEBUG] [Thread-13372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:34:22.623 [DEBUG] [Thread-13372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:34:22.623 [DEBUG] [Thread-13372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:34:22.664 [DEBUG] [Thread-13372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:34:22.664 [DEBUG] [Thread-13372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:34:22.666 [DEBUG] [Thread-13372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:34:22.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:34:22.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:34:22.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:34:22.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:34:22.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:34:22.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:34:22.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.190024 -999.00  +20.70  13.13     18   -4.20 1 1 1 1 1   887    0 24.70 -5.23 ----- 13.7 13.1 42.2 19.3 23.5 -27.2 23.4 -26.5 22.0 -25.8 22.1 -26.5
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.190024
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:34:22.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:33:51', tmtdew=30.11, humidity=12.6, cloud=0.0, wind=14.56, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:33:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:34:22.688 [DEBUG] [Thread-13372] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:34:22.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:34:22.771 [DEBUG] [Thread-13375] [transport.py] [_log()] starting thread (client mode): 0x7376e050
2025-11-26T06:34:22.771 [DEBUG] [Thread-13375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:34:22.786 [DEBUG] [Thread-13375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:34:22.786 [INFO] [Thread-13375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] client lang: <none>
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] server lang: <none>
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] kex follows: False
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] Compression: none
2025-11-26T06:34:22.794 [DEBUG] [Thread-13375] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:34:22.851 [DEBUG] [Thread-13375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:34:22.851 [DEBUG] [Thread-13375] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:34:22.851 [DEBUG] [Thread-13375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:34:22.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:34:22.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:34:22.908 [DEBUG] [Thread-13375] [transport.py] [_log()] userauth is OK
2025-11-26T06:34:22.909 [DEBUG] [Thread-13375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:34:22.909 [DEBUG] [Thread-13375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:34:22.909 [DEBUG] [Thread-13375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:34:22.909 [DEBUG] [Thread-13375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:34:22.922 [INFO] [Thread-13375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:34:22.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:34:22.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:34:23.779 [DEBUG] [Thread-13375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:34:23.779 [DEBUG] [Thread-13375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:34:23.827 [DEBUG] [Thread-13375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:34:23.827 [DEBUG] [Thread-13375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:34:23.836 [DEBUG] [Thread-13375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:34:23.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:34:23.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:34:23.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:34:23.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:34:23.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:34:23.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:34:23.867 [DEBUG] [Thread-13375] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:34:24.153 [DEBUG] [Thread-13377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:34:29.583 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:34:29.585 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:34:37.408 [DEBUG] [Thread-13378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:34:39.195 [DEBUG] [Thread-13379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:34:53.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:34:53.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:34:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:34:54.234 [DEBUG] [Thread-13380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:34:54.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 34, 23), 30.11, 12.6, 0.0, 13.66, 21.17, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:34:54.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:34:23
2025-11-26T06:34:54.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:34:54.819 [DEBUG] [Thread-13381] [transport.py] [_log()] starting thread (client mode): 0x7376c6d0
2025-11-26T06:34:54.819 [DEBUG] [Thread-13381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:34:54.840 [DEBUG] [Thread-13381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:34:54.840 [INFO] [Thread-13381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:34:54.843 [DEBUG] [Thread-13381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] client lang: <none>
2025-11-26T06:34:54.844 [DEBUG] [Thread-13381] [transport.py] [_log()] server lang: <none>
2025-11-26T06:34:54.845 [DEBUG] [Thread-13381] [transport.py] [_log()] kex follows: False
2025-11-26T06:34:54.845 [DEBUG] [Thread-13381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:34:54.845 [DEBUG] [Thread-13381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:34:54.845 [DEBUG] [Thread-13381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:34:54.845 [DEBUG] [Thread-13381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:34:54.845 [DEBUG] [Thread-13381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:34:54.845 [DEBUG] [Thread-13381] [transport.py] [_log()] Compression: none
2025-11-26T06:34:54.845 [DEBUG] [Thread-13381] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:34:54.865 [DEBUG] [Thread-13381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:34:54.866 [DEBUG] [Thread-13381] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:34:54.866 [DEBUG] [Thread-13381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:34:54.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:34:54.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:34:54.869 [DEBUG] [Thread-13381] [transport.py] [_log()] userauth is OK
2025-11-26T06:34:54.869 [DEBUG] [Thread-13381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:34:54.869 [DEBUG] [Thread-13381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:34:54.870 [DEBUG] [Thread-13381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:34:54.870 [DEBUG] [Thread-13381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:34:54.896 [INFO] [Thread-13381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:34:54.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:34:55.511 [DEBUG] [Thread-13381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:34:55.511 [DEBUG] [Thread-13381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:34:55.511 [DEBUG] [Thread-13381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:34:55.552 [DEBUG] [Thread-13381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:34:55.552 [DEBUG] [Thread-13381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:34:55.555 [DEBUG] [Thread-13381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:34:55.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:34:55.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:34:55.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:34:55.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:34:55.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:34:55.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:34:55.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:34:55.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:34:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:34:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.190371 -999.00  +20.70  14.21     18   -4.20 1 1 1 1 1   887    0 24.48 -6.40 ----- 14.3 14.2 40.8 17.2 23.5 -27.1 23.4 -26.5 22.0 -25.4 22.1 -26.3
2025-11-26T06:34:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:34:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:34:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.190371
2025-11-26T06:34:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:34:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:34:55.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:34:55.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:34:55.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:34:55.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:34:23', tmtdew=30.11, humidity=12.6, cloud=0.0, wind=13.66, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:34:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:34:55.582 [DEBUG] [Thread-13381] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:34:55.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:34:55.690 [DEBUG] [Thread-13384] [transport.py] [_log()] starting thread (client mode): 0x7378cbe0
2025-11-26T06:34:55.690 [DEBUG] [Thread-13384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:34:55.704 [DEBUG] [Thread-13384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:34:55.705 [INFO] [Thread-13384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:34:55.713 [DEBUG] [Thread-13384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:34:55.713 [DEBUG] [Thread-13384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] client lang: <none>
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] server lang: <none>
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] kex follows: False
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:34:55.714 [DEBUG] [Thread-13384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:34:55.715 [DEBUG] [Thread-13384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:34:55.715 [DEBUG] [Thread-13384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:34:55.715 [DEBUG] [Thread-13384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:34:55.715 [DEBUG] [Thread-13384] [transport.py] [_log()] Compression: none
2025-11-26T06:34:55.715 [DEBUG] [Thread-13384] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:34:55.773 [DEBUG] [Thread-13384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:34:55.774 [DEBUG] [Thread-13384] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:34:55.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:34:55.775 [DEBUG] [Thread-13384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:34:55.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:34:55.829 [DEBUG] [Thread-13384] [transport.py] [_log()] userauth is OK
2025-11-26T06:34:55.830 [DEBUG] [Thread-13384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:34:55.830 [DEBUG] [Thread-13384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:34:55.830 [DEBUG] [Thread-13384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:34:55.830 [DEBUG] [Thread-13384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:34:55.849 [INFO] [Thread-13384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:34:55.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:34:55.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:34:56.650 [DEBUG] [Thread-13384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:34:56.650 [DEBUG] [Thread-13384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:34:56.698 [DEBUG] [Thread-13384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:34:56.698 [DEBUG] [Thread-13384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:34:56.706 [DEBUG] [Thread-13384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:34:56.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:34:56.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:34:56.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:34:56.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:34:56.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:34:56.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:34:56.738 [DEBUG] [Thread-13384] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:35:09.264 [DEBUG] [Thread-13386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:35:24.320 [DEBUG] [Thread-13387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:35:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:35:26.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:35:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:35:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 34, 55), 30.11, 12.6, 0.0, 9.97, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:35:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:34:55
2025-11-26T06:35:27.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:35:27.674 [DEBUG] [Thread-13388] [transport.py] [_log()] starting thread (client mode): 0x7378d150
2025-11-26T06:35:27.674 [DEBUG] [Thread-13388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:35:27.695 [DEBUG] [Thread-13388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:35:27.695 [INFO] [Thread-13388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:35:27.698 [DEBUG] [Thread-13388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] client lang: <none>
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] server lang: <none>
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] kex follows: False
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] Compression: none
2025-11-26T06:35:27.699 [DEBUG] [Thread-13388] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:35:27.715 [DEBUG] [Thread-13388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:35:27.716 [DEBUG] [Thread-13388] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:35:27.716 [DEBUG] [Thread-13388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:35:27.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:35:27.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:35:27.718 [DEBUG] [Thread-13388] [transport.py] [_log()] userauth is OK
2025-11-26T06:35:27.718 [DEBUG] [Thread-13388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:35:27.718 [DEBUG] [Thread-13388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:35:27.719 [DEBUG] [Thread-13388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:35:27.719 [DEBUG] [Thread-13388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:35:27.737 [INFO] [Thread-13388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:35:27.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:35:28.330 [DEBUG] [Thread-13388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:35:28.330 [DEBUG] [Thread-13388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:35:28.330 [DEBUG] [Thread-13388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:35:28.370 [DEBUG] [Thread-13388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:35:28.370 [DEBUG] [Thread-13388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:35:28.373 [DEBUG] [Thread-13388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:35:28.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:35:28.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:35:28.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:35:28.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:35:28.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:35:28.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:35:28.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:35:28.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.190719 -999.00  +20.70  17.34     18   -4.30 1 1 1 1 1   887    0 25.03 -6.67 ----- 16.1 17.3 45.4 19.3 23.5 -27.5 23.4 -26.4 22.1 -25.8 22.1 -26.3
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.190719
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:35:28.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:34:55', tmtdew=30.11, humidity=12.6, cloud=0.0, wind=9.97, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:34:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:35:28.391 [DEBUG] [Thread-13388] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:35:28.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:35:28.476 [DEBUG] [Thread-13391] [transport.py] [_log()] starting thread (client mode): 0x7378c1c0
2025-11-26T06:35:28.476 [DEBUG] [Thread-13391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:35:28.492 [DEBUG] [Thread-13391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:35:28.492 [INFO] [Thread-13391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] client lang: <none>
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] server lang: <none>
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] kex follows: False
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] Compression: none
2025-11-26T06:35:28.500 [DEBUG] [Thread-13391] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:35:28.555 [DEBUG] [Thread-13391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:35:28.556 [DEBUG] [Thread-13391] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:35:28.556 [DEBUG] [Thread-13391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:35:28.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:35:28.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:35:28.612 [DEBUG] [Thread-13391] [transport.py] [_log()] userauth is OK
2025-11-26T06:35:28.613 [DEBUG] [Thread-13391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:35:28.613 [DEBUG] [Thread-13391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:35:28.613 [DEBUG] [Thread-13391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:35:28.613 [DEBUG] [Thread-13391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:35:28.627 [INFO] [Thread-13391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:35:28.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:35:28.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:35:29.477 [DEBUG] [Thread-13391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:35:29.477 [DEBUG] [Thread-13391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:35:29.525 [DEBUG] [Thread-13391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:35:29.525 [DEBUG] [Thread-13391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:35:29.533 [DEBUG] [Thread-13391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:35:29.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:35:29.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:35:29.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:35:29.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:35:29.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:35:29.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:35:29.565 [DEBUG] [Thread-13391] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:35:29.726 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:35:29.726 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:35:37.455 [DEBUG] [Thread-13393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:35:39.350 [DEBUG] [Thread-13394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:35:54.389 [DEBUG] [Thread-13395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:35:59.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:35:59.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:35:59.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:36:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 35, 27), 30.11, 12.6, 0.0, 11.29, 21.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:36:00.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:35:27
2025-11-26T06:36:00.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:36:00.560 [DEBUG] [Thread-13396] [transport.py] [_log()] starting thread (client mode): 0x7378c2e0
2025-11-26T06:36:00.560 [DEBUG] [Thread-13396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:36:00.582 [DEBUG] [Thread-13396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:36:00.582 [INFO] [Thread-13396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:36:00.585 [DEBUG] [Thread-13396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] client lang: <none>
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] server lang: <none>
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] kex follows: False
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] Compression: none
2025-11-26T06:36:00.586 [DEBUG] [Thread-13396] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:36:00.603 [DEBUG] [Thread-13396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:36:00.603 [DEBUG] [Thread-13396] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:36:00.603 [DEBUG] [Thread-13396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:36:00.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:36:00.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:36:00.604 [DEBUG] [Thread-13396] [transport.py] [_log()] userauth is OK
2025-11-26T06:36:00.604 [DEBUG] [Thread-13396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:36:00.604 [DEBUG] [Thread-13396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:36:00.604 [DEBUG] [Thread-13396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:36:00.604 [DEBUG] [Thread-13396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:36:00.613 [INFO] [Thread-13396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:36:00.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:36:01.217 [DEBUG] [Thread-13396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:36:01.217 [DEBUG] [Thread-13396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:36:01.217 [DEBUG] [Thread-13396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:36:01.258 [DEBUG] [Thread-13396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:36:01.258 [DEBUG] [Thread-13396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:36:01.260 [DEBUG] [Thread-13396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:36:01.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:36:01.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:36:01.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:36:01.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:36:01.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:36:01.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:36:01.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.191066 -999.00  +20.70  18.15     18   -4.30 1 1 1 1 1   887    0 24.53 -6.11 ----- 14.2 18.1 38.6 20.9 23.6 -27.2 23.4 -26.6 22.1 -25.8 22.1 -26.3
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.191066
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:36:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:35:27', tmtdew=30.11, humidity=12.6, cloud=0.0, wind=11.29, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:35:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:36:01.280 [DEBUG] [Thread-13396] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:36:01.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:36:01.364 [DEBUG] [Thread-13399] [transport.py] [_log()] starting thread (client mode): 0x70d1c130
2025-11-26T06:36:01.364 [DEBUG] [Thread-13399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:36:01.379 [DEBUG] [Thread-13399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:36:01.379 [INFO] [Thread-13399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] client lang: <none>
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] server lang: <none>
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] kex follows: False
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] Compression: none
2025-11-26T06:36:01.386 [DEBUG] [Thread-13399] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:36:01.447 [DEBUG] [Thread-13399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:36:01.447 [DEBUG] [Thread-13399] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:36:01.447 [DEBUG] [Thread-13399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:36:01.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:36:01.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:36:01.505 [DEBUG] [Thread-13399] [transport.py] [_log()] userauth is OK
2025-11-26T06:36:01.505 [DEBUG] [Thread-13399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:36:01.505 [DEBUG] [Thread-13399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:36:01.505 [DEBUG] [Thread-13399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:36:01.505 [DEBUG] [Thread-13399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:36:01.519 [INFO] [Thread-13399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:36:01.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:36:01.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:36:02.448 [DEBUG] [Thread-13399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:36:02.449 [DEBUG] [Thread-13399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:36:02.497 [DEBUG] [Thread-13399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:36:02.497 [DEBUG] [Thread-13399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:36:02.507 [DEBUG] [Thread-13399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:36:02.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:36:02.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:36:02.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:36:02.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:36:02.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:36:02.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:36:02.545 [DEBUG] [Thread-13399] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:36:09.424 [DEBUG] [Thread-13401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:36:24.472 [DEBUG] [Thread-13402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:36:29.868 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:36:29.869 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:36:32.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:36:32.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:36:32.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:36:33.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 35, 59), 30.11, 12.6, 0.0, 14.88, 21.17, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:36:33.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:35:59
2025-11-26T06:36:33.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:36:33.553 [DEBUG] [Thread-13403] [transport.py] [_log()] starting thread (client mode): 0x73783f70
2025-11-26T06:36:33.554 [DEBUG] [Thread-13403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:36:33.574 [DEBUG] [Thread-13403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:36:33.574 [INFO] [Thread-13403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] client lang: <none>
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] server lang: <none>
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] kex follows: False
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] Compression: none
2025-11-26T06:36:33.578 [DEBUG] [Thread-13403] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:36:33.592 [DEBUG] [Thread-13403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:36:33.592 [DEBUG] [Thread-13403] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:36:33.592 [DEBUG] [Thread-13403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:36:33.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:36:33.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:36:33.593 [DEBUG] [Thread-13403] [transport.py] [_log()] userauth is OK
2025-11-26T06:36:33.593 [DEBUG] [Thread-13403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:36:33.593 [DEBUG] [Thread-13403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:36:33.593 [DEBUG] [Thread-13403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:36:33.593 [DEBUG] [Thread-13403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:36:33.602 [INFO] [Thread-13403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:36:33.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:36:34.169 [DEBUG] [Thread-13403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:36:34.169 [DEBUG] [Thread-13403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:36:34.170 [DEBUG] [Thread-13403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:36:34.211 [DEBUG] [Thread-13403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:36:34.211 [DEBUG] [Thread-13403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:36:34.214 [DEBUG] [Thread-13403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:36:34.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:36:34.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:36:34.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:36:34.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:36:34.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:36:34.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:36:34.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:36:34.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:36:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:36:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.191760 -999.00  +20.70  14.72     18   -4.30 1 1 1 1 1   887    0 24.74 -6.66 ----- 12.6 14.7 54.2 18.3 23.6 -27.2 23.5 -26.5 22.1 -25.7 22.1 -26.3
2025-11-26T06:36:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:36:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:36:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.191760
2025-11-26T06:36:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:36:34.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:36:34.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:36:34.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:36:34.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:36:34.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:35:59', tmtdew=30.11, humidity=12.6, cloud=0.0, wind=14.88, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:36:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:36:34.242 [DEBUG] [Thread-13403] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:36:34.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:36:34.337 [DEBUG] [Thread-13406] [transport.py] [_log()] starting thread (client mode): 0x7376c2e0
2025-11-26T06:36:34.337 [DEBUG] [Thread-13406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:36:34.351 [DEBUG] [Thread-13406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:36:34.351 [INFO] [Thread-13406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:36:34.359 [DEBUG] [Thread-13406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:36:34.359 [DEBUG] [Thread-13406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:36:34.359 [DEBUG] [Thread-13406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:36:34.359 [DEBUG] [Thread-13406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:36:34.359 [DEBUG] [Thread-13406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:36:34.359 [DEBUG] [Thread-13406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:36:34.359 [DEBUG] [Thread-13406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:36:34.359 [DEBUG] [Thread-13406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:36:34.359 [DEBUG] [Thread-13406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] client lang: <none>
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] server lang: <none>
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] kex follows: False
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] Compression: none
2025-11-26T06:36:34.360 [DEBUG] [Thread-13406] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:36:34.417 [DEBUG] [Thread-13406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:36:34.418 [DEBUG] [Thread-13406] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:36:34.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:36:34.419 [DEBUG] [Thread-13406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:36:34.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:36:34.474 [DEBUG] [Thread-13406] [transport.py] [_log()] userauth is OK
2025-11-26T06:36:34.474 [DEBUG] [Thread-13406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:36:34.474 [DEBUG] [Thread-13406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:36:34.474 [DEBUG] [Thread-13406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:36:34.474 [DEBUG] [Thread-13406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:36:34.493 [INFO] [Thread-13406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:36:34.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:36:34.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:36:35.321 [DEBUG] [Thread-13406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:36:35.321 [DEBUG] [Thread-13406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:36:35.369 [DEBUG] [Thread-13406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:36:35.369 [DEBUG] [Thread-13406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:36:35.378 [DEBUG] [Thread-13406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:36:35.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:36:35.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:36:35.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:36:35.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:36:35.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:36:35.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:36:35.415 [DEBUG] [Thread-13406] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:36:37.512 [DEBUG] [Thread-13408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:36:39.508 [DEBUG] [Thread-13409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:36:54.566 [DEBUG] [Thread-13410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:37:05.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:37:05.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:37:05.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:37:06.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 36, 31), 30.09, 12.63, 0.0, 14.89, 21.24, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:37:06.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:36:31
2025-11-26T06:37:06.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:37:06.399 [DEBUG] [Thread-13411] [transport.py] [_log()] starting thread (client mode): 0x7378c4f0
2025-11-26T06:37:06.399 [DEBUG] [Thread-13411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:37:06.421 [DEBUG] [Thread-13411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:37:06.421 [INFO] [Thread-13411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] client lang: <none>
2025-11-26T06:37:06.423 [DEBUG] [Thread-13411] [transport.py] [_log()] server lang: <none>
2025-11-26T06:37:06.424 [DEBUG] [Thread-13411] [transport.py] [_log()] kex follows: False
2025-11-26T06:37:06.424 [DEBUG] [Thread-13411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:37:06.424 [DEBUG] [Thread-13411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:37:06.424 [DEBUG] [Thread-13411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:37:06.424 [DEBUG] [Thread-13411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:37:06.424 [DEBUG] [Thread-13411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:37:06.424 [DEBUG] [Thread-13411] [transport.py] [_log()] Compression: none
2025-11-26T06:37:06.424 [DEBUG] [Thread-13411] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:37:06.434 [DEBUG] [Thread-13411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:37:06.435 [DEBUG] [Thread-13411] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:37:06.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:37:06.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:37:06.436 [DEBUG] [Thread-13411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:37:06.436 [DEBUG] [Thread-13411] [transport.py] [_log()] userauth is OK
2025-11-26T06:37:06.437 [DEBUG] [Thread-13411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:37:06.437 [DEBUG] [Thread-13411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:37:06.437 [DEBUG] [Thread-13411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:37:06.437 [DEBUG] [Thread-13411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:37:06.473 [INFO] [Thread-13411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:37:06.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:37:07.101 [DEBUG] [Thread-13411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:37:07.101 [DEBUG] [Thread-13411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:37:07.102 [DEBUG] [Thread-13411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:37:07.142 [DEBUG] [Thread-13411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:37:07.142 [DEBUG] [Thread-13411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:37:07.145 [DEBUG] [Thread-13411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:37:07.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:37:07.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:37:07.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:37:07.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:37:07.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:37:07.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:37:07.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:37:07.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:37:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:37:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.192108 -999.00  +20.70  14.24     18   -4.20 1 1 1 1 1   887    0 24.87 -6.68 ----- 15.2 14.2 47.4 18.8 23.6 -27.2 23.5 -26.4 22.1 -25.8 22.2 -26.4
2025-11-26T06:37:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:37:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:37:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.192108
2025-11-26T06:37:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:37:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:37:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:37:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:37:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:37:07.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:36:31', tmtdew=30.09, humidity=12.63, cloud=0.0, wind=14.89, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:36:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:37:07.172 [DEBUG] [Thread-13411] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:37:07.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:37:07.267 [DEBUG] [Thread-13414] [transport.py] [_log()] starting thread (client mode): 0x7376f970
2025-11-26T06:37:07.267 [DEBUG] [Thread-13414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:37:07.282 [DEBUG] [Thread-13414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:37:07.282 [INFO] [Thread-13414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:37:07.290 [DEBUG] [Thread-13414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:37:07.290 [DEBUG] [Thread-13414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:37:07.290 [DEBUG] [Thread-13414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:37:07.291 [DEBUG] [Thread-13414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:37:07.291 [DEBUG] [Thread-13414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:37:07.291 [DEBUG] [Thread-13414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:37:07.291 [DEBUG] [Thread-13414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:37:07.291 [DEBUG] [Thread-13414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:37:07.291 [DEBUG] [Thread-13414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:37:07.291 [DEBUG] [Thread-13414] [transport.py] [_log()] client lang: <none>
2025-11-26T06:37:07.291 [DEBUG] [Thread-13414] [transport.py] [_log()] server lang: <none>
2025-11-26T06:37:07.291 [DEBUG] [Thread-13414] [transport.py] [_log()] kex follows: False
2025-11-26T06:37:07.292 [DEBUG] [Thread-13414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:37:07.292 [DEBUG] [Thread-13414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:37:07.292 [DEBUG] [Thread-13414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:37:07.292 [DEBUG] [Thread-13414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:37:07.292 [DEBUG] [Thread-13414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:37:07.292 [DEBUG] [Thread-13414] [transport.py] [_log()] Compression: none
2025-11-26T06:37:07.292 [DEBUG] [Thread-13414] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:37:07.350 [DEBUG] [Thread-13414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:37:07.351 [DEBUG] [Thread-13414] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:37:07.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:37:07.352 [DEBUG] [Thread-13414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:37:07.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:37:07.409 [DEBUG] [Thread-13414] [transport.py] [_log()] userauth is OK
2025-11-26T06:37:07.410 [DEBUG] [Thread-13414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:37:07.410 [DEBUG] [Thread-13414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:37:07.410 [DEBUG] [Thread-13414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:37:07.410 [DEBUG] [Thread-13414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:37:07.429 [INFO] [Thread-13414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:37:07.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:37:07.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:37:08.249 [DEBUG] [Thread-13414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:37:08.249 [DEBUG] [Thread-13414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:37:08.297 [DEBUG] [Thread-13414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:37:08.297 [DEBUG] [Thread-13414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:37:08.306 [DEBUG] [Thread-13414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:37:08.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:37:08.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:37: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
2025-11-26T06:37:08.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:37:08.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:37:08.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:37:08.343 [DEBUG] [Thread-13414] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:37:09.601 [DEBUG] [Thread-13416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:37:24.656 [DEBUG] [Thread-13417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:37:30.013 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:37:30.014 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:37:37.558 [DEBUG] [Thread-13418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:37:38.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:37:38.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:37:38.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:37:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 37, 35), 30.17, 12.55, 0.0, 12.79, 21.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:37:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:37:35
2025-11-26T06:37:39.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:37:39.295 [DEBUG] [Thread-13419] [transport.py] [_log()] starting thread (client mode): 0x7376ecb0
2025-11-26T06:37:39.295 [DEBUG] [Thread-13419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:37:39.314 [DEBUG] [Thread-13419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:37:39.314 [INFO] [Thread-13419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] client lang: <none>
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] server lang: <none>
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] kex follows: False
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] Compression: none
2025-11-26T06:37:39.315 [DEBUG] [Thread-13419] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:37:39.327 [DEBUG] [Thread-13419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:37:39.327 [DEBUG] [Thread-13419] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:37:39.328 [DEBUG] [Thread-13419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:37:39.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:37:39.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:37:39.330 [DEBUG] [Thread-13419] [transport.py] [_log()] userauth is OK
2025-11-26T06:37:39.330 [DEBUG] [Thread-13419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:37:39.331 [DEBUG] [Thread-13419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:37:39.331 [DEBUG] [Thread-13419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:37:39.331 [DEBUG] [Thread-13419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:37:39.351 [INFO] [Thread-13419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:37:39.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:37:39.688 [DEBUG] [Thread-13421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:37:39.944 [DEBUG] [Thread-13419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:37:39.944 [DEBUG] [Thread-13419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:37:39.945 [DEBUG] [Thread-13419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:37:39.986 [DEBUG] [Thread-13419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:37:39.986 [DEBUG] [Thread-13419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:37:39.990 [DEBUG] [Thread-13419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:37:40.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:37:40.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:37:40.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:37:40.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:37:40.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:37:40.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:37:40.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:37:40.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:37:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:37:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.192455 -999.00  +20.70  18.73     18   -4.20 1 1 1 1 1   887    0 24.78 -6.83 ----- 15.8 18.7 50.4 20.3 23.6 -27.3 23.5 -26.5 22.1 -25.7 22.2 -26.4
2025-11-26T06:37:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:37:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:37:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.192455
2025-11-26T06:37:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:37:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:37:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:37:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:37:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:37:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:37:35', tmtdew=30.17, humidity=12.55, cloud=0.0, wind=12.79, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:37:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:37:40.019 [DEBUG] [Thread-13419] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:37:40.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:37:40.118 [DEBUG] [Thread-13423] [transport.py] [_log()] starting thread (client mode): 0x73780e80
2025-11-26T06:37:40.119 [DEBUG] [Thread-13423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:37:40.137 [DEBUG] [Thread-13423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:37:40.137 [INFO] [Thread-13423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:37:40.148 [DEBUG] [Thread-13423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] client lang: <none>
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] server lang: <none>
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] kex follows: False
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:37:40.149 [DEBUG] [Thread-13423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:37:40.150 [DEBUG] [Thread-13423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:37:40.150 [DEBUG] [Thread-13423] [transport.py] [_log()] Compression: none
2025-11-26T06:37:40.150 [DEBUG] [Thread-13423] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:37:40.209 [DEBUG] [Thread-13423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:37:40.209 [DEBUG] [Thread-13423] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:37:40.210 [DEBUG] [Thread-13423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:37:40.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:37:40.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:37:40.266 [DEBUG] [Thread-13423] [transport.py] [_log()] userauth is OK
2025-11-26T06:37:40.266 [DEBUG] [Thread-13423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:37:40.266 [DEBUG] [Thread-13423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:37:40.266 [DEBUG] [Thread-13423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:37:40.266 [DEBUG] [Thread-13423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:37:40.286 [INFO] [Thread-13423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:37:40.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:37:40.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:37:41.102 [DEBUG] [Thread-13423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:37:41.103 [DEBUG] [Thread-13423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:37:41.154 [DEBUG] [Thread-13423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:37:41.154 [DEBUG] [Thread-13423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:37:41.166 [DEBUG] [Thread-13423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:37:41.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:37:41.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:37:41.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:37:41.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:37:41.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:37:41.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:37:41.205 [DEBUG] [Thread-13423] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:37:54.724 [DEBUG] [Thread-13425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:38:09.775 [DEBUG] [Thread-13426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:38:11.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:38:11.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:38:11.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:38:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 38, 7), 30.1, 12.61, 0.0, 12.46, 21.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:38:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:38:07
2025-11-26T06:38:12.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:38:12.172 [DEBUG] [Thread-13427] [transport.py] [_log()] starting thread (client mode): 0x73780c10
2025-11-26T06:38:12.173 [DEBUG] [Thread-13427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:38:12.192 [DEBUG] [Thread-13427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:38:12.192 [INFO] [Thread-13427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:38:12.195 [DEBUG] [Thread-13427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] client lang: <none>
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] server lang: <none>
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] kex follows: False
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] Compression: none
2025-11-26T06:38:12.196 [DEBUG] [Thread-13427] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:38:12.212 [DEBUG] [Thread-13427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:38:12.212 [DEBUG] [Thread-13427] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:38:12.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:38:12.213 [DEBUG] [Thread-13427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:38:12.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:38:12.215 [DEBUG] [Thread-13427] [transport.py] [_log()] userauth is OK
2025-11-26T06:38:12.215 [DEBUG] [Thread-13427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:38:12.215 [DEBUG] [Thread-13427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:38:12.215 [DEBUG] [Thread-13427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:38:12.215 [DEBUG] [Thread-13427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:38:12.232 [INFO] [Thread-13427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:38:12.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:38:12.854 [DEBUG] [Thread-13427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:38:12.854 [DEBUG] [Thread-13427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:38:12.855 [DEBUG] [Thread-13427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:38:12.895 [DEBUG] [Thread-13427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:38:12.895 [DEBUG] [Thread-13427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:38:12.898 [DEBUG] [Thread-13427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:38:12.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:38:12.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:38:12.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:38:12.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:38:12.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:38:12.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:38:12.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:38:12.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:38:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:38:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.192802 -999.00  +20.70  14.59     18   -4.20 1 1 1 1 1   887    0 24.91 -6.95 ----- 15.1 14.6 41.8 18.8 23.7 -27.4 23.5 -26.5 22.1 -25.7 22.1 -26.3
2025-11-26T06:38:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:38:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:38:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.192802
2025-11-26T06:38:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:38:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:38:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:38:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:38:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:38:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:38:07', tmtdew=30.1, humidity=12.61, cloud=0.0, wind=12.46, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:37:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:38:12.918 [DEBUG] [Thread-13427] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:38:13.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:38:13.032 [DEBUG] [Thread-13430] [transport.py] [_log()] starting thread (client mode): 0x737828c0
2025-11-26T06:38:13.032 [DEBUG] [Thread-13430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:38:13.047 [DEBUG] [Thread-13430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:38:13.047 [INFO] [Thread-13430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:38:13.055 [DEBUG] [Thread-13430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:38:13.055 [DEBUG] [Thread-13430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:38:13.055 [DEBUG] [Thread-13430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:38:13.055 [DEBUG] [Thread-13430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:38:13.055 [DEBUG] [Thread-13430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:38:13.056 [DEBUG] [Thread-13430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:38:13.056 [DEBUG] [Thread-13430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:38:13.056 [DEBUG] [Thread-13430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:38:13.056 [DEBUG] [Thread-13430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:38:13.056 [DEBUG] [Thread-13430] [transport.py] [_log()] client lang: <none>
2025-11-26T06:38:13.056 [DEBUG] [Thread-13430] [transport.py] [_log()] server lang: <none>
2025-11-26T06:38:13.056 [DEBUG] [Thread-13430] [transport.py] [_log()] kex follows: False
2025-11-26T06:38:13.056 [DEBUG] [Thread-13430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:38:13.056 [DEBUG] [Thread-13430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:38:13.057 [DEBUG] [Thread-13430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:38:13.057 [DEBUG] [Thread-13430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:38:13.057 [DEBUG] [Thread-13430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:38:13.057 [DEBUG] [Thread-13430] [transport.py] [_log()] Compression: none
2025-11-26T06:38:13.057 [DEBUG] [Thread-13430] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:38:13.114 [DEBUG] [Thread-13430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:38:13.115 [DEBUG] [Thread-13430] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:38:13.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:38:13.116 [DEBUG] [Thread-13430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:38:13.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:38:13.174 [DEBUG] [Thread-13430] [transport.py] [_log()] userauth is OK
2025-11-26T06:38:13.174 [DEBUG] [Thread-13430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:38:13.174 [DEBUG] [Thread-13430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:38:13.174 [DEBUG] [Thread-13430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:38:13.174 [DEBUG] [Thread-13430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:38:13.193 [INFO] [Thread-13430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:38:13.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:38:13.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:38:14.008 [DEBUG] [Thread-13430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:38:14.008 [DEBUG] [Thread-13430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:38:14.056 [DEBUG] [Thread-13430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:38:14.056 [DEBUG] [Thread-13430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:38:14.065 [DEBUG] [Thread-13430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:38:14.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:38:14.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:38:14.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:38:14.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:38:14.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:38:14.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:38:14.102 [DEBUG] [Thread-13430] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:38:24.809 [DEBUG] [Thread-13432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:38:30.168 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:38:30.169 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:38:37.610 [DEBUG] [Thread-13433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:38:39.871 [DEBUG] [Thread-13434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:38:44.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:38:44.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:38:44.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:38:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 38, 39), 30.18, 12.6, 0.0, 13.5, 21.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:38:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:38:39
2025-11-26T06:38:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:38:45.082 [DEBUG] [Thread-13435] [transport.py] [_log()] starting thread (client mode): 0x7378f130
2025-11-26T06:38:45.082 [DEBUG] [Thread-13435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:38:45.093 [DEBUG] [Thread-13435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:38:45.093 [INFO] [Thread-13435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:38:45.094 [DEBUG] [Thread-13435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:38:45.094 [DEBUG] [Thread-13435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:38:45.094 [DEBUG] [Thread-13435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:38:45.094 [DEBUG] [Thread-13435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:38:45.094 [DEBUG] [Thread-13435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:38:45.094 [DEBUG] [Thread-13435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:38:45.094 [DEBUG] [Thread-13435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] client lang: <none>
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] server lang: <none>
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] kex follows: False
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] Compression: none
2025-11-26T06:38:45.095 [DEBUG] [Thread-13435] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:38:45.103 [DEBUG] [Thread-13435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:38:45.103 [DEBUG] [Thread-13435] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:38:45.103 [DEBUG] [Thread-13435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:38:45.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:38:45.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:38:45.105 [DEBUG] [Thread-13435] [transport.py] [_log()] userauth is OK
2025-11-26T06:38:45.105 [DEBUG] [Thread-13435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:38:45.105 [DEBUG] [Thread-13435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:38:45.105 [DEBUG] [Thread-13435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:38:45.105 [DEBUG] [Thread-13435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:38:45.116 [INFO] [Thread-13435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:38:45.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:38:45.703 [DEBUG] [Thread-13435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:38:45.703 [DEBUG] [Thread-13435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:38:45.703 [DEBUG] [Thread-13435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:38:45.744 [DEBUG] [Thread-13435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:38:45.744 [DEBUG] [Thread-13435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:38:45.746 [DEBUG] [Thread-13435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:38:45.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:38:45.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:38:45.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:38:45.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:38:45.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:38:45.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:38:45.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.193149 -999.00  +20.70  17.74     18   -4.30 1 1 1 1 1   887    0 25.03 -6.60 ----- 19.2 17.7 49.2 20.0 23.7 -27.1 23.6 -26.7 22.2 -25.4 22.2 -26.3
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.193149
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:38:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:38:45.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:38:39', tmtdew=30.18, humidity=12.6, cloud=0.0, wind=13.5, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:38:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:38:45.769 [DEBUG] [Thread-13435] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:38:45.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:38:45.852 [DEBUG] [Thread-13438] [transport.py] [_log()] starting thread (client mode): 0x7376ecb0
2025-11-26T06:38:45.852 [DEBUG] [Thread-13438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:38:45.866 [DEBUG] [Thread-13438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:38:45.866 [INFO] [Thread-13438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] client lang: <none>
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] server lang: <none>
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] kex follows: False
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:38:45.874 [DEBUG] [Thread-13438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:38:45.875 [DEBUG] [Thread-13438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:38:45.875 [DEBUG] [Thread-13438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:38:45.875 [DEBUG] [Thread-13438] [transport.py] [_log()] Compression: none
2025-11-26T06:38:45.875 [DEBUG] [Thread-13438] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:38:45.933 [DEBUG] [Thread-13438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:38:45.933 [DEBUG] [Thread-13438] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:38:45.934 [DEBUG] [Thread-13438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:38:45.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:38:45.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:38:45.994 [DEBUG] [Thread-13438] [transport.py] [_log()] userauth is OK
2025-11-26T06:38:45.995 [DEBUG] [Thread-13438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:38:45.995 [DEBUG] [Thread-13438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:38:45.995 [DEBUG] [Thread-13438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:38:45.995 [DEBUG] [Thread-13438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:38:46.014 [INFO] [Thread-13438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:38:46.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:38:46.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:38:46.858 [DEBUG] [Thread-13438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:38:46.858 [DEBUG] [Thread-13438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:38:46.906 [DEBUG] [Thread-13438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:38:46.906 [DEBUG] [Thread-13438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:38:46.914 [DEBUG] [Thread-13438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:38:46.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:38:46.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:38:46.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:38:46.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:38:46.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:38:46.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:38:46.946 [DEBUG] [Thread-13438] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:38:54.903 [DEBUG] [Thread-13440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:39:09.958 [DEBUG] [Thread-13441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:39:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:39:16.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:39:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:39:17.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 39, 11), 30.2, 12.58, 0.0, 14.4, 21.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:39:17.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:39:11
2025-11-26T06:39:17.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:39:17.960 [DEBUG] [Thread-13442] [transport.py] [_log()] starting thread (client mode): 0x70d01870
2025-11-26T06:39:17.960 [DEBUG] [Thread-13442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:39:17.983 [DEBUG] [Thread-13442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:39:17.983 [INFO] [Thread-13442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] client lang: <none>
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] server lang: <none>
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] kex follows: False
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] Compression: none
2025-11-26T06:39:17.986 [DEBUG] [Thread-13442] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:39:18.001 [DEBUG] [Thread-13442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:39:18.001 [DEBUG] [Thread-13442] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:39:18.002 [DEBUG] [Thread-13442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:39:18.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:39:18.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:39:18.002 [DEBUG] [Thread-13442] [transport.py] [_log()] userauth is OK
2025-11-26T06:39:18.002 [DEBUG] [Thread-13442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:39:18.002 [DEBUG] [Thread-13442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:39:18.002 [DEBUG] [Thread-13442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:39:18.002 [DEBUG] [Thread-13442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:39:18.011 [INFO] [Thread-13442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:39:18.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:39:18.675 [DEBUG] [Thread-13442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:39:18.675 [DEBUG] [Thread-13442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:39:18.675 [DEBUG] [Thread-13442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:39:18.716 [DEBUG] [Thread-13442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:39:18.716 [DEBUG] [Thread-13442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:39:18.718 [DEBUG] [Thread-13442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:39:18.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:39:18.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:39:18.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:39:18.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:39:18.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:39:18.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:39:18.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.193497 -999.00  +20.70  14.31     18   -4.30 1 1 1 1 1   887    0 24.64 -6.43 ----- 14.9 14.3 43.8 19.6 23.7 -27.3 23.6 -26.5 22.1 -25.9 22.3 -26.4
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.193497
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:39:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:39:11', tmtdew=30.2, humidity=12.58, cloud=0.0, wind=14.4, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:38:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:39:18.736 [DEBUG] [Thread-13442] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:39:18.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:39:18.823 [DEBUG] [Thread-13445] [transport.py] [_log()] starting thread (client mode): 0x73780c10
2025-11-26T06:39:18.823 [DEBUG] [Thread-13445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:39:18.837 [DEBUG] [Thread-13445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:39:18.837 [INFO] [Thread-13445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] client lang: <none>
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] server lang: <none>
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] kex follows: False
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] Compression: none
2025-11-26T06:39:18.845 [DEBUG] [Thread-13445] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:39:18.900 [DEBUG] [Thread-13445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:39:18.900 [DEBUG] [Thread-13445] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:39:18.900 [DEBUG] [Thread-13445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:39:18.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:39:18.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:39:18.957 [DEBUG] [Thread-13445] [transport.py] [_log()] userauth is OK
2025-11-26T06:39:18.957 [DEBUG] [Thread-13445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:39:18.957 [DEBUG] [Thread-13445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:39:18.957 [DEBUG] [Thread-13445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:39:18.957 [DEBUG] [Thread-13445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:39:18.974 [INFO] [Thread-13445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:39:18.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:39:18.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:39:19.796 [DEBUG] [Thread-13445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:39:19.796 [DEBUG] [Thread-13445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:39:19.844 [DEBUG] [Thread-13445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:39:19.844 [DEBUG] [Thread-13445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:39:19.853 [DEBUG] [Thread-13445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:39:19.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:39:19.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:39:19.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:39:19.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:39:19.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:39:19.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:39:19.885 [DEBUG] [Thread-13445] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:39:24.993 [DEBUG] [Thread-13447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:39:30.311 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:39:30.312 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:39:37.659 [DEBUG] [Thread-13448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:39:40.055 [DEBUG] [Thread-13449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:39:49.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:39:49.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:39:49.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:39:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 39, 43), 30.23, 12.55, 0.0, 13.66, 21.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:39:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:39:43
2025-11-26T06:39:50.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:39:50.853 [DEBUG] [Thread-13450] [transport.py] [_log()] starting thread (client mode): 0x73782350
2025-11-26T06:39:50.853 [DEBUG] [Thread-13450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:39:50.865 [DEBUG] [Thread-13450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:39:50.865 [INFO] [Thread-13450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:39:50.866 [DEBUG] [Thread-13450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] client lang: <none>
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] server lang: <none>
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] kex follows: False
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] Compression: none
2025-11-26T06:39:50.867 [DEBUG] [Thread-13450] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:39:50.875 [DEBUG] [Thread-13450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:39:50.876 [DEBUG] [Thread-13450] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:39:50.876 [DEBUG] [Thread-13450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:39:50.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:39:50.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:39:50.878 [DEBUG] [Thread-13450] [transport.py] [_log()] userauth is OK
2025-11-26T06:39:50.878 [DEBUG] [Thread-13450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:39:50.878 [DEBUG] [Thread-13450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:39:50.878 [DEBUG] [Thread-13450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:39:50.878 [DEBUG] [Thread-13450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:39:50.896 [INFO] [Thread-13450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:39:50.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:39:51.565 [DEBUG] [Thread-13450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:39:51.566 [DEBUG] [Thread-13450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:39:51.566 [DEBUG] [Thread-13450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:39:51.606 [DEBUG] [Thread-13450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:39:51.607 [DEBUG] [Thread-13450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:39:51.610 [DEBUG] [Thread-13450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:39:51.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:39:51.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:39:51.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:39:51.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:39:51.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:39:51.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:39:51.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:39:51.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:39:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:39:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.193844 -999.00  +20.70  16.68     18   -4.30 1 1 1 1 1   887    0 24.88 -7.20 ----- 16.1 16.7 43.8 19.1 23.7 -27.1 23.5 -26.8 22.2 -25.8 22.2 -26.4
2025-11-26T06:39:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:39:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:39:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.193844
2025-11-26T06:39:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:39:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:39:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:39:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:39:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:39:51.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:39:43', tmtdew=30.23, humidity=12.55, cloud=0.0, wind=13.66, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:39:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:39:51.636 [DEBUG] [Thread-13450] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:39:51.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:39:51.732 [DEBUG] [Thread-13453] [transport.py] [_log()] starting thread (client mode): 0x73783c10
2025-11-26T06:39:51.732 [DEBUG] [Thread-13453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:39:51.747 [DEBUG] [Thread-13453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:39:51.747 [INFO] [Thread-13453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] client lang: <none>
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] server lang: <none>
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] kex follows: False
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:39:51.755 [DEBUG] [Thread-13453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:39:51.756 [DEBUG] [Thread-13453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:39:51.756 [DEBUG] [Thread-13453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:39:51.756 [DEBUG] [Thread-13453] [transport.py] [_log()] Compression: none
2025-11-26T06:39:51.756 [DEBUG] [Thread-13453] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:39:51.814 [DEBUG] [Thread-13453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:39:51.815 [DEBUG] [Thread-13453] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:39:51.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:39:51.816 [DEBUG] [Thread-13453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:39:51.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:39:51.870 [DEBUG] [Thread-13453] [transport.py] [_log()] userauth is OK
2025-11-26T06:39:51.870 [DEBUG] [Thread-13453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:39:51.870 [DEBUG] [Thread-13453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:39:51.870 [DEBUG] [Thread-13453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:39:51.870 [DEBUG] [Thread-13453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:39:51.889 [INFO] [Thread-13453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:39:51.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:39:51.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:39:52.752 [DEBUG] [Thread-13453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:39:52.752 [DEBUG] [Thread-13453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:39:52.800 [DEBUG] [Thread-13453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:39:52.800 [DEBUG] [Thread-13453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:39:52.813 [DEBUG] [Thread-13453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:39:52.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:39:52.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:39:52.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:39:52.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:39:52.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:39:52.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:39:52.846 [DEBUG] [Thread-13453] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:39:55.093 [DEBUG] [Thread-13455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:40:10.133 [DEBUG] [Thread-13456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:40:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:40:22.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:40:22.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:40:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 40, 15), 30.26, 12.51, 0.0, 14.45, 21.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:40:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:40:15
2025-11-26T06:40:23.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:40:23.784 [DEBUG] [Thread-13457] [transport.py] [_log()] starting thread (client mode): 0x761daaa0
2025-11-26T06:40:23.784 [DEBUG] [Thread-13457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:40:23.804 [DEBUG] [Thread-13457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:40:23.804 [INFO] [Thread-13457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:40:23.807 [DEBUG] [Thread-13457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:40:23.807 [DEBUG] [Thread-13457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:40:23.807 [DEBUG] [Thread-13457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] client lang: <none>
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] server lang: <none>
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] kex follows: False
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] Compression: none
2025-11-26T06:40:23.808 [DEBUG] [Thread-13457] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:40:23.825 [DEBUG] [Thread-13457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:40:23.825 [DEBUG] [Thread-13457] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:40:23.826 [DEBUG] [Thread-13457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:40:23.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:40:23.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:40:23.828 [DEBUG] [Thread-13457] [transport.py] [_log()] userauth is OK
2025-11-26T06:40:23.828 [DEBUG] [Thread-13457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:40:23.828 [DEBUG] [Thread-13457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:40:23.829 [DEBUG] [Thread-13457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:40:23.829 [DEBUG] [Thread-13457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:40:23.854 [INFO] [Thread-13457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:40:23.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:40:24.476 [DEBUG] [Thread-13457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:40:24.477 [DEBUG] [Thread-13457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:40:24.477 [DEBUG] [Thread-13457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:40:24.518 [DEBUG] [Thread-13457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:40:24.518 [DEBUG] [Thread-13457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:40:24.521 [DEBUG] [Thread-13457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:40:24.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:40:24.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:40:24.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:40:24.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:40:24.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:40:24.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:40:24.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:40:24.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:40:24.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:40:24.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.194191 -999.00  +20.70  13.23     18   -4.30 1 1 1 1 1   887    0 25.02 -7.30 ----- 14.2 13.2 49.2 18.2 23.8 -27.3 23.6 -26.4 22.2 -25.6 22.3 -26.4
2025-11-26T06:40:24.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:40:24.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:40:24.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.194191
2025-11-26T06:40:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:40:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:40:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:40:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:40:24.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:40:24.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:40:15', tmtdew=30.26, humidity=12.51, cloud=0.0, wind=14.45, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:39:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:40:24.546 [DEBUG] [Thread-13457] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:40:24.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:40:24.643 [DEBUG] [Thread-13460] [transport.py] [_log()] starting thread (client mode): 0x70d1ff70
2025-11-26T06:40:24.643 [DEBUG] [Thread-13460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:40:24.659 [DEBUG] [Thread-13460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:40:24.659 [INFO] [Thread-13460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:40:24.667 [DEBUG] [Thread-13460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:40:24.667 [DEBUG] [Thread-13460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:40:24.667 [DEBUG] [Thread-13460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:40:24.667 [DEBUG] [Thread-13460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:40:24.668 [DEBUG] [Thread-13460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:40:24.668 [DEBUG] [Thread-13460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:40:24.668 [DEBUG] [Thread-13460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:40:24.668 [DEBUG] [Thread-13460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:40:24.668 [DEBUG] [Thread-13460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:40:24.668 [DEBUG] [Thread-13460] [transport.py] [_log()] client lang: <none>
2025-11-26T06:40:24.668 [DEBUG] [Thread-13460] [transport.py] [_log()] server lang: <none>
2025-11-26T06:40:24.668 [DEBUG] [Thread-13460] [transport.py] [_log()] kex follows: False
2025-11-26T06:40:24.669 [DEBUG] [Thread-13460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:40:24.669 [DEBUG] [Thread-13460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:40:24.669 [DEBUG] [Thread-13460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:40:24.669 [DEBUG] [Thread-13460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:40:24.669 [DEBUG] [Thread-13460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:40:24.669 [DEBUG] [Thread-13460] [transport.py] [_log()] Compression: none
2025-11-26T06:40:24.670 [DEBUG] [Thread-13460] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:40:24.739 [DEBUG] [Thread-13460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:40:24.740 [DEBUG] [Thread-13460] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:40:24.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:40:24.741 [DEBUG] [Thread-13460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:40:24.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:40:24.798 [DEBUG] [Thread-13460] [transport.py] [_log()] userauth is OK
2025-11-26T06:40:24.798 [DEBUG] [Thread-13460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:40:24.798 [DEBUG] [Thread-13460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:40:24.798 [DEBUG] [Thread-13460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:40:24.798 [DEBUG] [Thread-13460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:40:24.816 [INFO] [Thread-13460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:40:24.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:40:24.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:40:25.168 [DEBUG] [Thread-13462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:40:25.693 [DEBUG] [Thread-13460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:40:25.693 [DEBUG] [Thread-13460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:40:25.741 [DEBUG] [Thread-13460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:40:25.741 [DEBUG] [Thread-13460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:40:25.750 [DEBUG] [Thread-13460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:40:25.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:40:25.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:40:25.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:40:25.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:40:25.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:40:25.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:40:25.787 [DEBUG] [Thread-13460] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:40:30.453 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:40:30.455 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:40:37.692 [DEBUG] [Thread-13463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:40:40.221 [DEBUG] [Thread-13464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:40:55.258 [DEBUG] [Thread-13465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:40:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:40:55.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:40:55.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:40:56.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 40, 47), 30.18, 12.55, 0.0, 15.09, 21.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:40:56.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:40:47
2025-11-26T06:40:56.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:40:56.749 [DEBUG] [Thread-13466] [transport.py] [_log()] starting thread (client mode): 0x70d1cc70
2025-11-26T06:40:56.749 [DEBUG] [Thread-13466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:40:56.769 [DEBUG] [Thread-13466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:40:56.770 [INFO] [Thread-13466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:40:56.773 [DEBUG] [Thread-13466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:40:56.773 [DEBUG] [Thread-13466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:40:56.773 [DEBUG] [Thread-13466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:40:56.773 [DEBUG] [Thread-13466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:40:56.773 [DEBUG] [Thread-13466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] client lang: <none>
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] server lang: <none>
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] kex follows: False
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:40:56.774 [DEBUG] [Thread-13466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:40:56.775 [DEBUG] [Thread-13466] [transport.py] [_log()] Compression: none
2025-11-26T06:40:56.775 [DEBUG] [Thread-13466] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:40:56.793 [DEBUG] [Thread-13466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:40:56.793 [DEBUG] [Thread-13466] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:40:56.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:40:56.794 [DEBUG] [Thread-13466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:40:56.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:40:56.797 [DEBUG] [Thread-13466] [transport.py] [_log()] userauth is OK
2025-11-26T06:40:56.797 [DEBUG] [Thread-13466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:40:56.797 [DEBUG] [Thread-13466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:40:56.797 [DEBUG] [Thread-13466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:40:56.797 [DEBUG] [Thread-13466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:40:56.820 [INFO] [Thread-13466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:40:56.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:40:57.418 [DEBUG] [Thread-13466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:40:57.418 [DEBUG] [Thread-13466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:40:57.419 [DEBUG] [Thread-13466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:40:57.459 [DEBUG] [Thread-13466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:40:57.459 [DEBUG] [Thread-13466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:40:57.462 [DEBUG] [Thread-13466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:40:57.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:40:57.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:40:57.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:40:57.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:40:57.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:40:57.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:40:57.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:40:57.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:40:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:40:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.194885 -999.00  +20.70  16.27     18   -4.30 1 1 1 1 1   887    0 24.75 -6.32 ----- 18.2 16.3 45.0 21.1 23.7 -27.4 23.6 -27.0 22.2 -25.9 22.3 -26.3
2025-11-26T06:40:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:40:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:40:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.194885
2025-11-26T06:40:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:40:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:40:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:40:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:40:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:40:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:40:47', tmtdew=30.18, humidity=12.55, cloud=0.0, wind=15.09, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:40:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:40:57.487 [DEBUG] [Thread-13466] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:40:57.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:40:57.582 [DEBUG] [Thread-13469] [transport.py] [_log()] starting thread (client mode): 0x7376d0c0
2025-11-26T06:40:57.582 [DEBUG] [Thread-13469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:40:57.597 [DEBUG] [Thread-13469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:40:57.597 [INFO] [Thread-13469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:40:57.604 [DEBUG] [Thread-13469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:40:57.605 [DEBUG] [Thread-13469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:40:57.605 [DEBUG] [Thread-13469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:40:57.605 [DEBUG] [Thread-13469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:40:57.605 [DEBUG] [Thread-13469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:40:57.605 [DEBUG] [Thread-13469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:40:57.605 [DEBUG] [Thread-13469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:40:57.605 [DEBUG] [Thread-13469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:40:57.605 [DEBUG] [Thread-13469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:40:57.605 [DEBUG] [Thread-13469] [transport.py] [_log()] client lang: <none>
2025-11-26T06:40:57.606 [DEBUG] [Thread-13469] [transport.py] [_log()] server lang: <none>
2025-11-26T06:40:57.606 [DEBUG] [Thread-13469] [transport.py] [_log()] kex follows: False
2025-11-26T06:40:57.606 [DEBUG] [Thread-13469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:40:57.606 [DEBUG] [Thread-13469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:40:57.606 [DEBUG] [Thread-13469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:40:57.606 [DEBUG] [Thread-13469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:40:57.606 [DEBUG] [Thread-13469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:40:57.606 [DEBUG] [Thread-13469] [transport.py] [_log()] Compression: none
2025-11-26T06:40:57.607 [DEBUG] [Thread-13469] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:40:57.664 [DEBUG] [Thread-13469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:40:57.664 [DEBUG] [Thread-13469] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:40:57.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:40:57.665 [DEBUG] [Thread-13469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:40:57.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:40:57.722 [DEBUG] [Thread-13469] [transport.py] [_log()] userauth is OK
2025-11-26T06:40:57.723 [DEBUG] [Thread-13469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:40:57.723 [DEBUG] [Thread-13469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:40:57.723 [DEBUG] [Thread-13469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:40:57.723 [DEBUG] [Thread-13469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:40:57.741 [INFO] [Thread-13469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:40:57.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:40:57.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:40:58.610 [DEBUG] [Thread-13469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:40:58.611 [DEBUG] [Thread-13469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:40:58.659 [DEBUG] [Thread-13469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:40:58.659 [DEBUG] [Thread-13469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:40:58.668 [DEBUG] [Thread-13469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:40:58.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:40:58.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')
2025-11-26T06:40:58.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:40:58.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:40:58.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:40:58.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:40:58.705 [DEBUG] [Thread-13469] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:41:10.293 [DEBUG] [Thread-13471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:41:25.340 [DEBUG] [Thread-13472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:41:28.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:41:28.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:41:28.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:41:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 41, 19), 30.14, 12.58, 0.0, 14.28, 21.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:41:29.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:41:19
2025-11-26T06:41:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:41:29.670 [DEBUG] [Thread-13473] [transport.py] [_log()] starting thread (client mode): 0x761dbeb0
2025-11-26T06:41:29.670 [DEBUG] [Thread-13473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:41:29.690 [DEBUG] [Thread-13473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:41:29.690 [INFO] [Thread-13473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] client lang: <none>
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] server lang: <none>
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] kex follows: False
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] Compression: none
2025-11-26T06:41:29.694 [DEBUG] [Thread-13473] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:41:29.710 [DEBUG] [Thread-13473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:41:29.711 [DEBUG] [Thread-13473] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:41:29.712 [DEBUG] [Thread-13473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:41:29.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:41:29.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:41:29.714 [DEBUG] [Thread-13473] [transport.py] [_log()] userauth is OK
2025-11-26T06:41:29.714 [DEBUG] [Thread-13473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:41:29.714 [DEBUG] [Thread-13473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:41:29.715 [DEBUG] [Thread-13473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:41:29.715 [DEBUG] [Thread-13473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:41:29.750 [INFO] [Thread-13473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:41:29.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:41:30.400 [DEBUG] [Thread-13473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:41:30.400 [DEBUG] [Thread-13473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:41:30.400 [DEBUG] [Thread-13473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:41:30.441 [DEBUG] [Thread-13473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:41:30.441 [DEBUG] [Thread-13473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:41:30.444 [DEBUG] [Thread-13473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:41:30.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:41:30.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:41:30.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:41:30.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:41:30.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:41:30.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:41:30.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:41:30.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:41:30.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:41:30.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.195233 -999.00  +20.70  16.38     18   -4.30 1 1 1 1 1   887    0 25.16 -5.60 ----- 16.1 16.4 50.4 20.4 23.8 -27.4 23.6 -26.6 22.2 -25.5 22.3 -26.4
2025-11-26T06:41:30.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:41:30.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:41:30.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.195233
2025-11-26T06:41:30.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:41:30.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:41:30.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:41:30.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:41:30.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:41:30.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:41:19', tmtdew=30.14, humidity=12.58, cloud=0.0, wind=14.28, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:41:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:41:30.472 [DEBUG] [Thread-13473] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:41:30.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:41:30.566 [DEBUG] [Thread-13476] [transport.py] [_log()] starting thread (client mode): 0x73782920
2025-11-26T06:41:30.566 [DEBUG] [Thread-13476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:41:30.581 [DEBUG] [Thread-13476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:41:30.581 [INFO] [Thread-13476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:41:30.588 [DEBUG] [Thread-13476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:41:30.588 [DEBUG] [Thread-13476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] client lang: <none>
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] server lang: <none>
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] kex follows: False
2025-11-26T06:41:30.589 [DEBUG] [Thread-13476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:41:30.590 [DEBUG] [Thread-13476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:41:30.590 [DEBUG] [Thread-13476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:41:30.590 [DEBUG] [Thread-13476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:41:30.590 [DEBUG] [Thread-13476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:41:30.590 [DEBUG] [Thread-13476] [transport.py] [_log()] Compression: none
2025-11-26T06:41:30.590 [DEBUG] [Thread-13476] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:41:30.595 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:41:30.596 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:41:30.649 [DEBUG] [Thread-13476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:41:30.650 [DEBUG] [Thread-13476] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:41:30.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:41:30.651 [DEBUG] [Thread-13476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:41:30.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:41:30.710 [DEBUG] [Thread-13476] [transport.py] [_log()] userauth is OK
2025-11-26T06:41:30.710 [DEBUG] [Thread-13476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:41:30.711 [DEBUG] [Thread-13476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:41:30.711 [DEBUG] [Thread-13476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:41:30.711 [DEBUG] [Thread-13476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:41:30.731 [INFO] [Thread-13476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:41:30.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:41:30.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:41:31.567 [DEBUG] [Thread-13476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:41:31.567 [DEBUG] [Thread-13476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:41:31.615 [DEBUG] [Thread-13476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:41:31.615 [DEBUG] [Thread-13476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:41:31.625 [DEBUG] [Thread-13476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:41:31.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:41:31.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:41:31.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:41:31.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:41:31.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:41:31.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:41:31.662 [DEBUG] [Thread-13476] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:41:37.747 [DEBUG] [Thread-13478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:41:40.378 [DEBUG] [Thread-13479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:41:55.428 [DEBUG] [Thread-13480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:42:01.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:42:01.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:42:01.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:42:02.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 41, 51), 30.17, 12.55, 0.0, 15.9, 21.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:42:02.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:41:51
2025-11-26T06:42:02.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:42:02.625 [DEBUG] [Thread-13481] [transport.py] [_log()] starting thread (client mode): 0x70d29d50
2025-11-26T06:42:02.625 [DEBUG] [Thread-13481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:42:02.646 [DEBUG] [Thread-13481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:42:02.646 [INFO] [Thread-13481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] client lang: <none>
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] server lang: <none>
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] kex follows: False
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] Compression: none
2025-11-26T06:42:02.650 [DEBUG] [Thread-13481] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:42:02.668 [DEBUG] [Thread-13481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:42:02.668 [DEBUG] [Thread-13481] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:42:02.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:42:02.669 [DEBUG] [Thread-13481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:42:02.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:42:02.672 [DEBUG] [Thread-13481] [transport.py] [_log()] userauth is OK
2025-11-26T06:42:02.672 [DEBUG] [Thread-13481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:42:02.672 [DEBUG] [Thread-13481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:42:02.672 [DEBUG] [Thread-13481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:42:02.672 [DEBUG] [Thread-13481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:42:02.691 [INFO] [Thread-13481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:42:02.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:42:03.287 [DEBUG] [Thread-13481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:42:03.287 [DEBUG] [Thread-13481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:42:03.288 [DEBUG] [Thread-13481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:42:03.328 [DEBUG] [Thread-13481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:42:03.328 [DEBUG] [Thread-13481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:42:03.331 [DEBUG] [Thread-13481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:42:03.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:42:03.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:42:03.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:42:03.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:42:03.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:42:03.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:42:03.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:42:03.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:42:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:42:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.195580 -999.00  +20.70  15.48     18   -4.30 1 1 1 1 1   887    0 24.86 -5.07 ----- 14.7 15.5 39.8 19.9 23.8 -27.2 23.6 -26.5 22.2 -26.0 22.4 -26.3
2025-11-26T06:42:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:42:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:42:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.195580
2025-11-26T06:42:03.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:42:03.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:42:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:42:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:42:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:42:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:41:51', tmtdew=30.17, humidity=12.55, cloud=0.0, wind=15.9, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:41:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:42:03.362 [DEBUG] [Thread-13481] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:42:03.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:42:03.463 [DEBUG] [Thread-13484] [transport.py] [_log()] starting thread (client mode): 0x761d94e0
2025-11-26T06:42:03.464 [DEBUG] [Thread-13484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:42:03.480 [DEBUG] [Thread-13484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:42:03.480 [INFO] [Thread-13484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:42:03.488 [DEBUG] [Thread-13484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] client lang: <none>
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] server lang: <none>
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] kex follows: False
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:42:03.489 [DEBUG] [Thread-13484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:42:03.490 [DEBUG] [Thread-13484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:42:03.490 [DEBUG] [Thread-13484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:42:03.490 [DEBUG] [Thread-13484] [transport.py] [_log()] Compression: none
2025-11-26T06:42:03.490 [DEBUG] [Thread-13484] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:42:03.546 [DEBUG] [Thread-13484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:42:03.547 [DEBUG] [Thread-13484] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:42:03.547 [DEBUG] [Thread-13484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:42:03.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:42:03.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:42:03.602 [DEBUG] [Thread-13484] [transport.py] [_log()] userauth is OK
2025-11-26T06:42:03.602 [DEBUG] [Thread-13484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:42:03.603 [DEBUG] [Thread-13484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:42:03.603 [DEBUG] [Thread-13484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:42:03.603 [DEBUG] [Thread-13484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:42:03.622 [INFO] [Thread-13484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:42:03.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:42:03.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:42:04.488 [DEBUG] [Thread-13484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:42:04.488 [DEBUG] [Thread-13484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:42:04.537 [DEBUG] [Thread-13484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:42:04.537 [DEBUG] [Thread-13484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:42:04.546 [DEBUG] [Thread-13484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:42:04.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:42:04.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:42:04.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:42:04.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:42:04.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:42:04.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:42:04.583 [DEBUG] [Thread-13484] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:42:10.466 [DEBUG] [Thread-13486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:42:25.511 [DEBUG] [Thread-13487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:42:30.735 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:42:30.737 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:42:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:42:34.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:42:34.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:42:35.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 42, 23), 30.21, 12.51, 0.0, 14.58, 21.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:42:35.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:42:23
2025-11-26T06:42:35.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:42:35.538 [DEBUG] [Thread-13488] [transport.py] [_log()] starting thread (client mode): 0x70d0d630
2025-11-26T06:42:35.538 [DEBUG] [Thread-13488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:42:35.558 [DEBUG] [Thread-13488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:42:35.559 [INFO] [Thread-13488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:42:35.561 [DEBUG] [Thread-13488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] client lang: <none>
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] server lang: <none>
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] kex follows: False
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] Compression: none
2025-11-26T06:42:35.562 [DEBUG] [Thread-13488] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:42:35.581 [DEBUG] [Thread-13488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:42:35.581 [DEBUG] [Thread-13488] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:42:35.582 [DEBUG] [Thread-13488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:42:35.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:42:35.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:42:35.584 [DEBUG] [Thread-13488] [transport.py] [_log()] userauth is OK
2025-11-26T06:42:35.584 [DEBUG] [Thread-13488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:42:35.584 [DEBUG] [Thread-13488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:42:35.584 [DEBUG] [Thread-13488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:42:35.584 [DEBUG] [Thread-13488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:42:35.609 [INFO] [Thread-13488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:42:35.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:42:36.233 [DEBUG] [Thread-13488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:42:36.233 [DEBUG] [Thread-13488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:42:36.234 [DEBUG] [Thread-13488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:42:36.275 [DEBUG] [Thread-13488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:42:36.275 [DEBUG] [Thread-13488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:42:36.278 [DEBUG] [Thread-13488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:42:36.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:42:36.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:42:36.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:42:36.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:42:36.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:42:36.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:42:36.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:42:36.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:42:36.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:42:36.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.195927 -999.00  +20.70  18.40     18   -4.30 1 1 1 1 1   887    0 25.08 -4.41 ----- 17.0 18.4 49.2 19.6 23.9 -27.4 23.7 -26.7 22.3 -25.8 22.3 -26.4
2025-11-26T06:42:36.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:42:36.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:42:36.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.195927
2025-11-26T06:42:36.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:42:36.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:42:36.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:42:36.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:42:36.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:42:36.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:42:23', tmtdew=30.21, humidity=12.51, cloud=0.0, wind=14.58, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:42:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:42:36.306 [DEBUG] [Thread-13488] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:42:36.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:42:36.402 [DEBUG] [Thread-13491] [transport.py] [_log()] starting thread (client mode): 0x70d0f6a0
2025-11-26T06:42:36.402 [DEBUG] [Thread-13491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:42:36.417 [DEBUG] [Thread-13491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:42:36.417 [INFO] [Thread-13491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:42:36.425 [DEBUG] [Thread-13491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:42:36.425 [DEBUG] [Thread-13491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:42:36.425 [DEBUG] [Thread-13491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:42:36.425 [DEBUG] [Thread-13491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:42:36.425 [DEBUG] [Thread-13491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] client lang: <none>
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] server lang: <none>
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] kex follows: False
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:42:36.426 [DEBUG] [Thread-13491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:42:36.427 [DEBUG] [Thread-13491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:42:36.427 [DEBUG] [Thread-13491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:42:36.427 [DEBUG] [Thread-13491] [transport.py] [_log()] Compression: none
2025-11-26T06:42:36.427 [DEBUG] [Thread-13491] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:42:36.481 [DEBUG] [Thread-13491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:42:36.482 [DEBUG] [Thread-13491] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:42:36.483 [DEBUG] [Thread-13491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:42:36.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:42:36.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:42:36.538 [DEBUG] [Thread-13491] [transport.py] [_log()] userauth is OK
2025-11-26T06:42:36.539 [DEBUG] [Thread-13491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:42:36.539 [DEBUG] [Thread-13491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:42:36.539 [DEBUG] [Thread-13491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:42:36.539 [DEBUG] [Thread-13491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:42:36.557 [INFO] [Thread-13491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:42:36.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:42:36.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:42:37.342 [DEBUG] [Thread-13491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:42:37.342 [DEBUG] [Thread-13491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:42:37.390 [DEBUG] [Thread-13491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:42:37.390 [DEBUG] [Thread-13491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:42:37.399 [DEBUG] [Thread-13491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:42:37.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:42:37.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:42:37.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:42:37.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:42:37.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:42:37.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:42:37.436 [DEBUG] [Thread-13491] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:42:37.797 [DEBUG] [Thread-13493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:42:40.543 [DEBUG] [Thread-13494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:42:55.606 [DEBUG] [Thread-13495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:43:07.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:43:07.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:43:07.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:43:08.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 42, 55), 30.16, 12.56, 0.0, 15.74, 21.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:43:08.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:42:55
2025-11-26T06:43:08.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:43:08.373 [DEBUG] [Thread-13496] [transport.py] [_log()] starting thread (client mode): 0x70d0ceb0
2025-11-26T06:43:08.373 [DEBUG] [Thread-13496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:43:08.395 [DEBUG] [Thread-13496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:43:08.396 [INFO] [Thread-13496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:43:08.399 [DEBUG] [Thread-13496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:43:08.399 [DEBUG] [Thread-13496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:43:08.399 [DEBUG] [Thread-13496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] client lang: <none>
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] server lang: <none>
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] kex follows: False
2025-11-26T06:43:08.400 [DEBUG] [Thread-13496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:43:08.401 [DEBUG] [Thread-13496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:43:08.401 [DEBUG] [Thread-13496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:43:08.401 [DEBUG] [Thread-13496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:43:08.401 [DEBUG] [Thread-13496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:43:08.401 [DEBUG] [Thread-13496] [transport.py] [_log()] Compression: none
2025-11-26T06:43:08.401 [DEBUG] [Thread-13496] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:43:08.422 [DEBUG] [Thread-13496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:43:08.423 [DEBUG] [Thread-13496] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:43:08.424 [DEBUG] [Thread-13496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:43:08.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:43:08.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:43:08.426 [DEBUG] [Thread-13496] [transport.py] [_log()] userauth is OK
2025-11-26T06:43:08.426 [DEBUG] [Thread-13496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:43:08.426 [DEBUG] [Thread-13496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:43:08.426 [DEBUG] [Thread-13496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:43:08.426 [DEBUG] [Thread-13496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:43:08.462 [INFO] [Thread-13496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:43:08.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:43:09.085 [DEBUG] [Thread-13496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:43:09.085 [DEBUG] [Thread-13496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:43:09.086 [DEBUG] [Thread-13496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:43:09.126 [DEBUG] [Thread-13496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:43:09.126 [DEBUG] [Thread-13496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:43:09.129 [DEBUG] [Thread-13496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:43:09.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:43:09.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:43:09.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:43:09.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:43:09.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:43:09.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:43:09.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:43:09.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:43:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:43:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.196274 -999.00  +20.70  16.47     18   -4.30 1 1 1 1 1   887    0 25.57 -3.78 ----- 15.4 16.5 40.8 20.4 23.9 -27.3 23.7 -26.7 22.3 -25.9 22.4 -26.3
2025-11-26T06:43:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:43:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:43:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.196274
2025-11-26T06:43:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:43:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:43:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:43:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:43:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:43:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:42:55', tmtdew=30.16, humidity=12.56, cloud=0.0, wind=15.74, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:42:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:43:09.157 [DEBUG] [Thread-13496] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:43:09.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:43:09.253 [DEBUG] [Thread-13499] [transport.py] [_log()] starting thread (client mode): 0x70d021d0
2025-11-26T06:43:09.253 [DEBUG] [Thread-13499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:43:09.268 [DEBUG] [Thread-13499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:43:09.268 [INFO] [Thread-13499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:43:09.276 [DEBUG] [Thread-13499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:43:09.276 [DEBUG] [Thread-13499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:43:09.276 [DEBUG] [Thread-13499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:43:09.276 [DEBUG] [Thread-13499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:43:09.276 [DEBUG] [Thread-13499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:43:09.276 [DEBUG] [Thread-13499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:43:09.276 [DEBUG] [Thread-13499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:43:09.276 [DEBUG] [Thread-13499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:43:09.276 [DEBUG] [Thread-13499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] client lang: <none>
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] server lang: <none>
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] kex follows: False
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] Compression: none
2025-11-26T06:43:09.277 [DEBUG] [Thread-13499] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:43:09.334 [DEBUG] [Thread-13499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:43:09.335 [DEBUG] [Thread-13499] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:43:09.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:43:09.336 [DEBUG] [Thread-13499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:43:09.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:43:09.390 [DEBUG] [Thread-13499] [transport.py] [_log()] userauth is OK
2025-11-26T06:43:09.391 [DEBUG] [Thread-13499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:43:09.391 [DEBUG] [Thread-13499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:43:09.391 [DEBUG] [Thread-13499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:43:09.391 [DEBUG] [Thread-13499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:43:09.409 [INFO] [Thread-13499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:43:09.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:43:09.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:43:10.234 [DEBUG] [Thread-13499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:43:10.234 [DEBUG] [Thread-13499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:43:10.282 [DEBUG] [Thread-13499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:43:10.282 [DEBUG] [Thread-13499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:43:10.291 [DEBUG] [Thread-13499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:43:10.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:43:10.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:43:10.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:43:10.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:43:10.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:43:10.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:43:10.325 [DEBUG] [Thread-13499] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:43:10.640 [DEBUG] [Thread-13501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:43:25.693 [DEBUG] [Thread-13502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:43:30.879 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:43:30.880 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:43:37.863 [DEBUG] [Thread-13503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:43:40.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:43:40.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:43:40.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:43:40.725 [DEBUG] [Thread-13504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:43:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 43, 27), 30.13, 12.6, 0.0, 16.37, 21.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:43:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:43:27
2025-11-26T06:43:41.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:43:41.323 [DEBUG] [Thread-13505] [transport.py] [_log()] starting thread (client mode): 0x70d03130
2025-11-26T06:43:41.323 [DEBUG] [Thread-13505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:43:41.344 [DEBUG] [Thread-13505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:43:41.345 [INFO] [Thread-13505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:43:41.347 [DEBUG] [Thread-13505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] client lang: <none>
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] server lang: <none>
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] kex follows: False
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] Compression: none
2025-11-26T06:43:41.348 [DEBUG] [Thread-13505] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:43:41.363 [DEBUG] [Thread-13505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:43:41.364 [DEBUG] [Thread-13505] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:43:41.364 [DEBUG] [Thread-13505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:43:41.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:43:41.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:43:41.365 [DEBUG] [Thread-13505] [transport.py] [_log()] userauth is OK
2025-11-26T06:43:41.365 [DEBUG] [Thread-13505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:43:41.365 [DEBUG] [Thread-13505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:43:41.365 [DEBUG] [Thread-13505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:43:41.365 [DEBUG] [Thread-13505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:43:41.376 [INFO] [Thread-13505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:43:41.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:43:42.009 [DEBUG] [Thread-13505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:43:42.009 [DEBUG] [Thread-13505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:43:42.009 [DEBUG] [Thread-13505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:43:42.049 [DEBUG] [Thread-13505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:43:42.049 [DEBUG] [Thread-13505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:43:42.052 [DEBUG] [Thread-13505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:43:42.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:43:42.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:43:42.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:43:42.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:43:42.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:43:42.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:43:42.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.196621 -999.00  +20.70  14.54     18   -4.30 1 1 1 1 1   887    0 25.12 -2.93 ----- 13.5 14.5 43.8 18.2 23.9 -27.3 23.7 -26.7 22.3 -25.7 22.4 -26.4
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.196621
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:43:42.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:43:27', tmtdew=30.13, humidity=12.6, cloud=0.0, wind=16.37, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:43:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:43:42.071 [DEBUG] [Thread-13505] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:43:42.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:43:42.156 [DEBUG] [Thread-13508] [transport.py] [_log()] starting thread (client mode): 0x70d0fac0
2025-11-26T06:43:42.156 [DEBUG] [Thread-13508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:43:42.170 [DEBUG] [Thread-13508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:43:42.170 [INFO] [Thread-13508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] client lang: <none>
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] server lang: <none>
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] kex follows: False
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] Compression: none
2025-11-26T06:43:42.178 [DEBUG] [Thread-13508] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:43:42.236 [DEBUG] [Thread-13508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:43:42.236 [DEBUG] [Thread-13508] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:43:42.236 [DEBUG] [Thread-13508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:43:42.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:43:42.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:43:42.293 [DEBUG] [Thread-13508] [transport.py] [_log()] userauth is OK
2025-11-26T06:43:42.293 [DEBUG] [Thread-13508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:43:42.293 [DEBUG] [Thread-13508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:43:42.293 [DEBUG] [Thread-13508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:43:42.293 [DEBUG] [Thread-13508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:43:42.307 [INFO] [Thread-13508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:43:42.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:43:42.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:43:43.124 [DEBUG] [Thread-13508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:43:43.124 [DEBUG] [Thread-13508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:43:43.172 [DEBUG] [Thread-13508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:43:43.173 [DEBUG] [Thread-13508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:43:43.181 [DEBUG] [Thread-13508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:43:43.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:43:43.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:43:43.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:43:43.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:43:43.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:43:43.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:43:43.213 [DEBUG] [Thread-13508] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:43:55.758 [DEBUG] [Thread-13510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:44:10.812 [DEBUG] [Thread-13511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:44:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:44:13.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:44:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:44:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 43, 59), 30.09, 12.63, 0.0, 14.82, 21.24, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:44:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:43:59
2025-11-26T06:44:14.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:44:14.151 [DEBUG] [Thread-13512] [transport.py] [_log()] starting thread (client mode): 0x70d0d990
2025-11-26T06:44:14.151 [DEBUG] [Thread-13512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:44:14.171 [DEBUG] [Thread-13512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:44:14.172 [INFO] [Thread-13512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:44:14.172 [DEBUG] [Thread-13512] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:44:14.172 [DEBUG] [Thread-13512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:44:14.172 [DEBUG] [Thread-13512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:44:14.172 [DEBUG] [Thread-13512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:44:14.172 [DEBUG] [Thread-13512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:44:14.172 [DEBUG] [Thread-13512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:44:14.172 [DEBUG] [Thread-13512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] client lang: <none>
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] server lang: <none>
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] kex follows: False
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] Compression: none
2025-11-26T06:44:14.173 [DEBUG] [Thread-13512] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:44:14.192 [DEBUG] [Thread-13512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:44:14.193 [DEBUG] [Thread-13512] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:44:14.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:44:14.194 [DEBUG] [Thread-13512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:44:14.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:44:14.196 [DEBUG] [Thread-13512] [transport.py] [_log()] userauth is OK
2025-11-26T06:44:14.196 [DEBUG] [Thread-13512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:44:14.196 [DEBUG] [Thread-13512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:44:14.196 [DEBUG] [Thread-13512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:44:14.197 [DEBUG] [Thread-13512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:44:14.220 [INFO] [Thread-13512] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:44:14.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:44:14.784 [DEBUG] [Thread-13512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:44:14.784 [DEBUG] [Thread-13512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:44:14.785 [DEBUG] [Thread-13512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:44:14.825 [DEBUG] [Thread-13512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:44:14.825 [DEBUG] [Thread-13512] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:44:14.826 [DEBUG] [Thread-13512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:44:14.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:44:14.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:44:14.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:44:14.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:44:14.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:44:14.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:44:14.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.196969 -999.00  +20.80  15.96     18   -4.30 1 1 1 1 1   887    0 24.76 -2.54 ----- 16.1 16.0 44.2 19.5 23.9 -27.3 23.7 -26.4 22.3 -25.9 22.4 -26.5
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.196969
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:44:14.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:43:59', tmtdew=30.09, humidity=12.63, cloud=0.0, wind=14.82, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:43:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:44:14.843 [DEBUG] [Thread-13512] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:44:14.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:44:14.929 [DEBUG] [Thread-13515] [transport.py] [_log()] starting thread (client mode): 0x70d29d50
2025-11-26T06:44:14.929 [DEBUG] [Thread-13515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:44:14.944 [DEBUG] [Thread-13515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:44:14.944 [INFO] [Thread-13515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] client lang: <none>
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] server lang: <none>
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] kex follows: False
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] Compression: none
2025-11-26T06:44:14.952 [DEBUG] [Thread-13515] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:44:15.015 [DEBUG] [Thread-13515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:44:15.015 [DEBUG] [Thread-13515] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:44:15.015 [DEBUG] [Thread-13515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:44:15.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:44:15.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:44:15.074 [DEBUG] [Thread-13515] [transport.py] [_log()] userauth is OK
2025-11-26T06:44:15.074 [DEBUG] [Thread-13515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:44:15.074 [DEBUG] [Thread-13515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:44:15.074 [DEBUG] [Thread-13515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:44:15.074 [DEBUG] [Thread-13515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:44:15.091 [INFO] [Thread-13515] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:44:15.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:44:15.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:44:15.904 [DEBUG] [Thread-13515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:44:15.904 [DEBUG] [Thread-13515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:44:15.952 [DEBUG] [Thread-13515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:44:15.952 [DEBUG] [Thread-13515] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:44:15.961 [DEBUG] [Thread-13515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:44:15.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:44:15.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:44:15.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:44:15.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:44:15.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:44:15.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:44:15.993 [DEBUG] [Thread-13515] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:44:25.849 [DEBUG] [Thread-13517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:44:31.020 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:44:31.022 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:44:37.918 [DEBUG] [Thread-13518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:44:40.907 [DEBUG] [Thread-13519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:44:46.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:44:46.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:44:46.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:44:46.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 44, 31), 30.11, 12.61, 0.0, 16.37, 21.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:44:46.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:44:31
2025-11-26T06:44:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:44:46.957 [DEBUG] [Thread-13520] [transport.py] [_log()] starting thread (client mode): 0x761d9a80
2025-11-26T06:44:46.957 [DEBUG] [Thread-13520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:44:46.978 [DEBUG] [Thread-13520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:44:46.978 [INFO] [Thread-13520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] client lang: <none>
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] server lang: <none>
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] kex follows: False
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] Compression: none
2025-11-26T06:44:46.981 [DEBUG] [Thread-13520] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:44:46.999 [DEBUG] [Thread-13520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:44:47.000 [DEBUG] [Thread-13520] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:44:47.001 [DEBUG] [Thread-13520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:44:47.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:44:47.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:44:47.002 [DEBUG] [Thread-13520] [transport.py] [_log()] userauth is OK
2025-11-26T06:44:47.003 [DEBUG] [Thread-13520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:44:47.003 [DEBUG] [Thread-13520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:44:47.003 [DEBUG] [Thread-13520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:44:47.003 [DEBUG] [Thread-13520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:44:47.039 [INFO] [Thread-13520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:44:47.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:44:47.682 [DEBUG] [Thread-13520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:44:47.682 [DEBUG] [Thread-13520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:44:47.682 [DEBUG] [Thread-13520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:44:47.722 [DEBUG] [Thread-13520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:44:47.723 [DEBUG] [Thread-13520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:44:47.726 [DEBUG] [Thread-13520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:44:47.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:44:47.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:44:47.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:44:47.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:44:47.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:44:47.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:44:47.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:44:47.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:44:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:44:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.197663 -999.00  +20.80  17.09     18   -4.20 1 1 1 1 1   887    0 25.11 -1.15 ----- 15.2 17.1 35.8 20.9 23.9 -27.4 23.7 -26.7 22.3 -25.9 22.4 -26.4
2025-11-26T06:44:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:44:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:44:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.197663
2025-11-26T06:44:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:44:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:44:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:44:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:44:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:44:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:44:31', tmtdew=30.11, humidity=12.61, cloud=0.0, wind=16.37, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:44:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:44:47.751 [DEBUG] [Thread-13520] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:44:47.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:44:47.847 [DEBUG] [Thread-13523] [transport.py] [_log()] starting thread (client mode): 0x761dbd30
2025-11-26T06:44:47.847 [DEBUG] [Thread-13523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:44:47.863 [DEBUG] [Thread-13523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:44:47.863 [INFO] [Thread-13523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:44:47.870 [DEBUG] [Thread-13523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:44:47.870 [DEBUG] [Thread-13523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] client lang: <none>
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] server lang: <none>
2025-11-26T06:44:47.871 [DEBUG] [Thread-13523] [transport.py] [_log()] kex follows: False
2025-11-26T06:44:47.872 [DEBUG] [Thread-13523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:44:47.872 [DEBUG] [Thread-13523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:44:47.872 [DEBUG] [Thread-13523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:44:47.872 [DEBUG] [Thread-13523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:44:47.872 [DEBUG] [Thread-13523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:44:47.872 [DEBUG] [Thread-13523] [transport.py] [_log()] Compression: none
2025-11-26T06:44:47.872 [DEBUG] [Thread-13523] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:44:47.933 [DEBUG] [Thread-13523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:44:47.934 [DEBUG] [Thread-13523] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:44:47.934 [DEBUG] [Thread-13523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:44:47.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:44:47.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:44:47.990 [DEBUG] [Thread-13523] [transport.py] [_log()] userauth is OK
2025-11-26T06:44:47.990 [DEBUG] [Thread-13523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:44:47.990 [DEBUG] [Thread-13523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:44:47.990 [DEBUG] [Thread-13523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:44:47.990 [DEBUG] [Thread-13523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:44:48.003 [INFO] [Thread-13523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:44:48.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:44:48.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:44:48.842 [DEBUG] [Thread-13523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:44:48.842 [DEBUG] [Thread-13523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:44:48.890 [DEBUG] [Thread-13523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:44:48.890 [DEBUG] [Thread-13523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:44:48.899 [DEBUG] [Thread-13523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:44:48.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:44:48.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:44:48.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:44:48.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:44:48.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:44:48.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:44:48.936 [DEBUG] [Thread-13523] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:44:55.941 [DEBUG] [Thread-13525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:45:10.982 [DEBUG] [Thread-13526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:45:18.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:45:18.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:45:18.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:45:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 45, 3), 30.12, 12.6, 0.0, 14.61, 21.24, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:45:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:45:03
2025-11-26T06:45:19.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:45:19.895 [DEBUG] [Thread-13527] [transport.py] [_log()] starting thread (client mode): 0x70d1c8b0
2025-11-26T06:45:19.895 [DEBUG] [Thread-13527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:45:19.915 [DEBUG] [Thread-13527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:45:19.916 [INFO] [Thread-13527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] client lang: <none>
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] server lang: <none>
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] kex follows: False
2025-11-26T06:45:19.919 [DEBUG] [Thread-13527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:45:19.920 [DEBUG] [Thread-13527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:45:19.920 [DEBUG] [Thread-13527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:45:19.920 [DEBUG] [Thread-13527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:45:19.920 [DEBUG] [Thread-13527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:45:19.920 [DEBUG] [Thread-13527] [transport.py] [_log()] Compression: none
2025-11-26T06:45:19.920 [DEBUG] [Thread-13527] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:45:19.936 [DEBUG] [Thread-13527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:45:19.936 [DEBUG] [Thread-13527] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:45:19.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:45:19.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:45:19.938 [DEBUG] [Thread-13527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:45:19.938 [DEBUG] [Thread-13527] [transport.py] [_log()] userauth is OK
2025-11-26T06:45:19.939 [DEBUG] [Thread-13527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:45:19.939 [DEBUG] [Thread-13527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:45:19.939 [DEBUG] [Thread-13527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:45:19.939 [DEBUG] [Thread-13527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:45:19.956 [INFO] [Thread-13527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:45:19.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:45:20.605 [DEBUG] [Thread-13527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:45:20.605 [DEBUG] [Thread-13527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:45:20.605 [DEBUG] [Thread-13527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:45:20.645 [DEBUG] [Thread-13527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:45:20.646 [DEBUG] [Thread-13527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:45:20.649 [DEBUG] [Thread-13527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:45:20.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:45:20.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:45:20.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:45:20.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:45:20.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:45:20.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:45:20.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:45:20.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:45:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:45:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.198010 -999.00  +20.80  16.55     18   -4.20 1 1 1 1 1   887    0 25.08 -0.46 ----- 16.4 16.6 40.0 22.8 23.9 -27.3 23.7 -26.8 22.4 -25.6 22.4 -26.4
2025-11-26T06:45:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:45:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:45:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.198010
2025-11-26T06:45:20.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:45:20.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:45:20.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:45:20.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:45:20.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:45:20.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:45:03', tmtdew=30.12, humidity=12.6, cloud=0.0, wind=14.61, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:45:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:45:20.674 [DEBUG] [Thread-13527] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:45:20.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:45:20.770 [DEBUG] [Thread-13530] [transport.py] [_log()] starting thread (client mode): 0x7374f880
2025-11-26T06:45:20.770 [DEBUG] [Thread-13530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:45:20.786 [DEBUG] [Thread-13530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:45:20.786 [INFO] [Thread-13530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:45:20.793 [DEBUG] [Thread-13530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:45:20.794 [DEBUG] [Thread-13530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:45:20.794 [DEBUG] [Thread-13530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:45:20.794 [DEBUG] [Thread-13530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:45:20.794 [DEBUG] [Thread-13530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:45:20.794 [DEBUG] [Thread-13530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:45:20.794 [DEBUG] [Thread-13530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:45:20.794 [DEBUG] [Thread-13530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:45:20.794 [DEBUG] [Thread-13530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] client lang: <none>
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] server lang: <none>
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] kex follows: False
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] Compression: none
2025-11-26T06:45:20.795 [DEBUG] [Thread-13530] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:45:20.852 [DEBUG] [Thread-13530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:45:20.853 [DEBUG] [Thread-13530] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:45:20.854 [DEBUG] [Thread-13530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:45:20.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:45:20.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:45:20.909 [DEBUG] [Thread-13530] [transport.py] [_log()] userauth is OK
2025-11-26T06:45:20.909 [DEBUG] [Thread-13530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:45:20.909 [DEBUG] [Thread-13530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:45:20.910 [DEBUG] [Thread-13530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:45:20.910 [DEBUG] [Thread-13530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:45:20.928 [INFO] [Thread-13530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:45:20.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:45:20.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:45:21.796 [DEBUG] [Thread-13530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:45:21.796 [DEBUG] [Thread-13530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:45:21.844 [DEBUG] [Thread-13530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:45:21.844 [DEBUG] [Thread-13530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:45:21.853 [DEBUG] [Thread-13530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:45:21.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:45:21.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:45: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') -> 00000000
2025-11-26T06:45:21.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:45:21.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:45:21.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:45:21.890 [DEBUG] [Thread-13530] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:45:26.019 [DEBUG] [Thread-13532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:45:31.164 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:45:31.166 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:45:37.971 [DEBUG] [Thread-13533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:45:41.068 [DEBUG] [Thread-13534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:45:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:45:51.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:45:51.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:45:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 45, 35), 30.19, 12.58, 0.0, 17.2, 21.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:45:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:45:35
2025-11-26T06:45:52.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:45:52.825 [DEBUG] [Thread-13535] [transport.py] [_log()] starting thread (client mode): 0x70d28910
2025-11-26T06:45:52.825 [DEBUG] [Thread-13535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:45:52.843 [DEBUG] [Thread-13535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:45:52.844 [INFO] [Thread-13535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:45:52.847 [DEBUG] [Thread-13535] [transport.py] [_log()] client lang: <none>
2025-11-26T06:45:52.848 [DEBUG] [Thread-13535] [transport.py] [_log()] server lang: <none>
2025-11-26T06:45:52.848 [DEBUG] [Thread-13535] [transport.py] [_log()] kex follows: False
2025-11-26T06:45:52.848 [DEBUG] [Thread-13535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:45:52.848 [DEBUG] [Thread-13535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:45:52.848 [DEBUG] [Thread-13535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:45:52.848 [DEBUG] [Thread-13535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:45:52.848 [DEBUG] [Thread-13535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:45:52.848 [DEBUG] [Thread-13535] [transport.py] [_log()] Compression: none
2025-11-26T06:45:52.848 [DEBUG] [Thread-13535] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:45:52.866 [DEBUG] [Thread-13535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:45:52.867 [DEBUG] [Thread-13535] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:45:52.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:45:52.868 [DEBUG] [Thread-13535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:45:52.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:45:52.871 [DEBUG] [Thread-13535] [transport.py] [_log()] userauth is OK
2025-11-26T06:45:52.871 [DEBUG] [Thread-13535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:45:52.871 [DEBUG] [Thread-13535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:45:52.871 [DEBUG] [Thread-13535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:45:52.871 [DEBUG] [Thread-13535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:45:52.908 [INFO] [Thread-13535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:45:52.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:45:53.559 [DEBUG] [Thread-13535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:45:53.560 [DEBUG] [Thread-13535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:45:53.560 [DEBUG] [Thread-13535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:45:53.601 [DEBUG] [Thread-13535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:45:53.601 [DEBUG] [Thread-13535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:45:53.604 [DEBUG] [Thread-13535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:45:53.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:45:53.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:45:53.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:45:53.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:45:53.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:45:53.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:45:53.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:45:53.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:45:53.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:45:53.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.198358 -999.00  +20.90  15.02     18   -4.20 1 1 1 1 1   887    0 25.34 0.47 ----- 14.8 15.0 45.8 21.8 23.9 -27.4 23.7 -26.5 22.3 -25.9 22.4 -26.3
2025-11-26T06:45:53.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:45:53.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:45:53.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.198358
2025-11-26T06:45:53.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:45:53.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:45:53.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:45:53.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:45:53.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:45:53.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:45:35', tmtdew=30.19, humidity=12.58, cloud=0.0, wind=17.2, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:45:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:45:53.631 [DEBUG] [Thread-13535] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:45:53.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:45:53.726 [DEBUG] [Thread-13538] [transport.py] [_log()] starting thread (client mode): 0x761d9690
2025-11-26T06:45:53.726 [DEBUG] [Thread-13538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:45:53.740 [DEBUG] [Thread-13538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:45:53.741 [INFO] [Thread-13538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:45:53.748 [DEBUG] [Thread-13538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:45:53.748 [DEBUG] [Thread-13538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:45:53.748 [DEBUG] [Thread-13538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:45:53.748 [DEBUG] [Thread-13538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] client lang: <none>
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] server lang: <none>
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] kex follows: False
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:45:53.749 [DEBUG] [Thread-13538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:45:53.750 [DEBUG] [Thread-13538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:45:53.750 [DEBUG] [Thread-13538] [transport.py] [_log()] Compression: none
2025-11-26T06:45:53.750 [DEBUG] [Thread-13538] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:45:53.805 [DEBUG] [Thread-13538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:45:53.806 [DEBUG] [Thread-13538] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:45:53.806 [DEBUG] [Thread-13538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:45:53.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:45:53.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:45:53.861 [DEBUG] [Thread-13538] [transport.py] [_log()] userauth is OK
2025-11-26T06:45:53.862 [DEBUG] [Thread-13538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:45:53.862 [DEBUG] [Thread-13538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:45:53.862 [DEBUG] [Thread-13538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:45:53.862 [DEBUG] [Thread-13538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:45:53.879 [INFO] [Thread-13538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:45:53.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:45:53.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:45:54.724 [DEBUG] [Thread-13538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:45:54.725 [DEBUG] [Thread-13538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:45:54.773 [DEBUG] [Thread-13538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:45:54.773 [DEBUG] [Thread-13538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:45:54.782 [DEBUG] [Thread-13538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:45:54.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:45:54.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:45:54.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:45:54.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:45:54.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:45:54.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:45:54.819 [DEBUG] [Thread-13538] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:45:56.105 [DEBUG] [Thread-13540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:46:11.163 [DEBUG] [Thread-13541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:46:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:46:24.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:46: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
2025-11-26T06:46:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 46, 7), 30.2, 12.58, 0.0, 16.96, 21.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:46:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:46:07
2025-11-26T06:46:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:46:25.769 [DEBUG] [Thread-13542] [transport.py] [_log()] starting thread (client mode): 0x70d1f7f0
2025-11-26T06:46:25.770 [DEBUG] [Thread-13542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:46:25.791 [DEBUG] [Thread-13542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:46:25.791 [INFO] [Thread-13542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:46:25.794 [DEBUG] [Thread-13542] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:46:25.794 [DEBUG] [Thread-13542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:46:25.794 [DEBUG] [Thread-13542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:46:25.794 [DEBUG] [Thread-13542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:46:25.794 [DEBUG] [Thread-13542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:46:25.794 [DEBUG] [Thread-13542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] client lang: <none>
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] server lang: <none>
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] kex follows: False
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:46:25.795 [DEBUG] [Thread-13542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:46:25.796 [DEBUG] [Thread-13542] [transport.py] [_log()] Compression: none
2025-11-26T06:46:25.796 [DEBUG] [Thread-13542] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:46:25.815 [DEBUG] [Thread-13542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:46:25.816 [DEBUG] [Thread-13542] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:46:25.816 [DEBUG] [Thread-13542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:46:25.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:46:25.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:46:25.818 [DEBUG] [Thread-13542] [transport.py] [_log()] userauth is OK
2025-11-26T06:46:25.818 [DEBUG] [Thread-13542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:46:25.818 [DEBUG] [Thread-13542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:46:25.818 [DEBUG] [Thread-13542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:46:25.818 [DEBUG] [Thread-13542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:46:25.835 [INFO] [Thread-13542] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:46:25.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:46:26.195 [DEBUG] [Thread-13544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:46:26.453 [DEBUG] [Thread-13542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:46:26.453 [DEBUG] [Thread-13542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:46:26.453 [DEBUG] [Thread-13542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:46:26.494 [DEBUG] [Thread-13542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:46:26.494 [DEBUG] [Thread-13542] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:46:26.497 [DEBUG] [Thread-13542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:46:26.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:46:26.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:46:26.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:46:26.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:46:26.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:46:26.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:46:26.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:46:26.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:46:26.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:46:26.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.198705 -999.00  +20.90  15.06     18   -4.10 1 1 1 1 1   887    0 25.18 1.20 ----- 15.6 15.1 42.8 21.1 23.9 -27.3 23.7 -26.6 22.4 -25.6 22.4 -26.3
2025-11-26T06:46:26.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:46:26.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:46:26.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.198705
2025-11-26T06:46:26.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:46:26.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:46:26.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:46:26.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:46:26.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:46:26.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:46:07', tmtdew=30.2, humidity=12.58, cloud=0.0, wind=16.96, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:46:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:46:26.522 [DEBUG] [Thread-13542] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:46:26.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:46:26.623 [DEBUG] [Thread-13546] [transport.py] [_log()] starting thread (client mode): 0x737c67d0
2025-11-26T06:46:26.623 [DEBUG] [Thread-13546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:46:26.638 [DEBUG] [Thread-13546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:46:26.638 [INFO] [Thread-13546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:46:26.646 [DEBUG] [Thread-13546] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:46:26.646 [DEBUG] [Thread-13546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] client lang: <none>
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] server lang: <none>
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] kex follows: False
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] Compression: none
2025-11-26T06:46:26.647 [DEBUG] [Thread-13546] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:46:26.703 [DEBUG] [Thread-13546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:46:26.704 [DEBUG] [Thread-13546] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:46:26.704 [DEBUG] [Thread-13546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:46:26.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:46:26.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:46:26.763 [DEBUG] [Thread-13546] [transport.py] [_log()] userauth is OK
2025-11-26T06:46:26.763 [DEBUG] [Thread-13546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:46:26.764 [DEBUG] [Thread-13546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:46:26.764 [DEBUG] [Thread-13546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:46:26.764 [DEBUG] [Thread-13546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:46:26.782 [INFO] [Thread-13546] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:46:26.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:46:26.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:46:27.637 [DEBUG] [Thread-13546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:46:27.637 [DEBUG] [Thread-13546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:46:27.685 [DEBUG] [Thread-13546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:46:27.685 [DEBUG] [Thread-13546] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:46:27.694 [DEBUG] [Thread-13546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:46:27.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:46:27.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:46:27.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:46:27.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:46:27.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:46:27.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:46:27.728 [DEBUG] [Thread-13546] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:46:31.315 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:46:31.317 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:46:38.026 [DEBUG] [Thread-13548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:46:41.227 [DEBUG] [Thread-13549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:46:56.267 [DEBUG] [Thread-13550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:46:57.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:46:57.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:46:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:46:58.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 46, 39), 30.19, 12.53, 0.0, 16.83, 21.27, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:46:58.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:46:39
2025-11-26T06:46:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:46:58.669 [DEBUG] [Thread-13551] [transport.py] [_log()] starting thread (client mode): 0x737819f0
2025-11-26T06:46:58.669 [DEBUG] [Thread-13551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:46:58.690 [DEBUG] [Thread-13551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:46:58.690 [INFO] [Thread-13551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:46:58.693 [DEBUG] [Thread-13551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:46:58.693 [DEBUG] [Thread-13551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:46:58.693 [DEBUG] [Thread-13551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:46:58.693 [DEBUG] [Thread-13551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:46:58.693 [DEBUG] [Thread-13551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] client lang: <none>
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] server lang: <none>
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] kex follows: False
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] Compression: none
2025-11-26T06:46:58.694 [DEBUG] [Thread-13551] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:46:58.703 [DEBUG] [Thread-13551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:46:58.703 [DEBUG] [Thread-13551] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:46:58.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:46:58.704 [DEBUG] [Thread-13551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:46:58.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:46:58.706 [DEBUG] [Thread-13551] [transport.py] [_log()] userauth is OK
2025-11-26T06:46:58.707 [DEBUG] [Thread-13551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:46:58.707 [DEBUG] [Thread-13551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:46:58.707 [DEBUG] [Thread-13551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:46:58.707 [DEBUG] [Thread-13551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:46:58.732 [INFO] [Thread-13551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:46:58.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:46:59.382 [DEBUG] [Thread-13551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:46:59.383 [DEBUG] [Thread-13551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:46:59.383 [DEBUG] [Thread-13551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:46:59.424 [DEBUG] [Thread-13551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:46:59.424 [DEBUG] [Thread-13551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:46:59.427 [DEBUG] [Thread-13551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:46:59.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:46:59.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:46:59.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:46:59.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:46:59.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:46:59.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:46:59.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:46:59.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:46:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:46:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.199052 -999.00  +20.90  15.09     18   -4.10 1 1 1 1 1   887    0 24.86 1.36 ----- 18.1 15.1 47.6 17.2 23.9 -27.4 23.8 -26.5 22.4 -25.7 22.4 -26.3
2025-11-26T06:46:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:46:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:46:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.199052
2025-11-26T06:46:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:46:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:46:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:46:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:46:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:46:59.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:46:39', tmtdew=30.19, humidity=12.53, cloud=0.0, wind=16.83, temperature=21.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:46:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:46:59.454 [DEBUG] [Thread-13551] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:46:59.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:46:59.550 [DEBUG] [Thread-13554] [transport.py] [_log()] starting thread (client mode): 0x737827a0
2025-11-26T06:46:59.550 [DEBUG] [Thread-13554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:46:59.565 [DEBUG] [Thread-13554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:46:59.565 [INFO] [Thread-13554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] client lang: <none>
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] server lang: <none>
2025-11-26T06:46:59.573 [DEBUG] [Thread-13554] [transport.py] [_log()] kex follows: False
2025-11-26T06:46:59.574 [DEBUG] [Thread-13554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:46:59.574 [DEBUG] [Thread-13554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:46:59.574 [DEBUG] [Thread-13554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:46:59.574 [DEBUG] [Thread-13554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:46:59.574 [DEBUG] [Thread-13554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:46:59.574 [DEBUG] [Thread-13554] [transport.py] [_log()] Compression: none
2025-11-26T06:46:59.574 [DEBUG] [Thread-13554] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:46:59.629 [DEBUG] [Thread-13554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:46:59.630 [DEBUG] [Thread-13554] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:46:59.630 [DEBUG] [Thread-13554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:46:59.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:46:59.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:46:59.686 [DEBUG] [Thread-13554] [transport.py] [_log()] userauth is OK
2025-11-26T06:46:59.686 [DEBUG] [Thread-13554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:46:59.686 [DEBUG] [Thread-13554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:46:59.686 [DEBUG] [Thread-13554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:46:59.686 [DEBUG] [Thread-13554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:46:59.710 [INFO] [Thread-13554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:46:59.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:46:59.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:47:00.514 [DEBUG] [Thread-13554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:47:00.514 [DEBUG] [Thread-13554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:47:00.561 [DEBUG] [Thread-13554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:47:00.561 [DEBUG] [Thread-13554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:47:00.570 [DEBUG] [Thread-13554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:47:00.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:47:00.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:47:00.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:47:00.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:47:00.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:47:00.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:47:00.606 [DEBUG] [Thread-13554] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:47:11.304 [DEBUG] [Thread-13556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:47:26.361 [DEBUG] [Thread-13557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:47:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:47:30.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:47:30.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:47:31.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 47, 11), 30.21, 12.51, 0.0, 15.32, 21.29, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:47:31.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:47:11
2025-11-26T06:47:31.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:47:31.458 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:47:31.459 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:47:31.550 [DEBUG] [Thread-13558] [transport.py] [_log()] starting thread (client mode): 0x70d02020
2025-11-26T06:47:31.550 [DEBUG] [Thread-13558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:47:31.570 [DEBUG] [Thread-13558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:47:31.571 [INFO] [Thread-13558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:47:31.571 [DEBUG] [Thread-13558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:47:31.571 [DEBUG] [Thread-13558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] client lang: <none>
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] server lang: <none>
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] kex follows: False
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] Compression: none
2025-11-26T06:47:31.572 [DEBUG] [Thread-13558] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:47:31.582 [DEBUG] [Thread-13558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:47:31.582 [DEBUG] [Thread-13558] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:47:31.583 [DEBUG] [Thread-13558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:47:31.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:47:31.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:47:31.584 [DEBUG] [Thread-13558] [transport.py] [_log()] userauth is OK
2025-11-26T06:47:31.585 [DEBUG] [Thread-13558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:47:31.585 [DEBUG] [Thread-13558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:47:31.585 [DEBUG] [Thread-13558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:47:31.585 [DEBUG] [Thread-13558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:47:31.604 [INFO] [Thread-13558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:47:31.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:47:32.203 [DEBUG] [Thread-13558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:47:32.203 [DEBUG] [Thread-13558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:47:32.204 [DEBUG] [Thread-13558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:47:32.245 [DEBUG] [Thread-13558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:47:32.245 [DEBUG] [Thread-13558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:47:32.249 [DEBUG] [Thread-13558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:47:32.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:47:32.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:47:32.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:47:32.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:47:32.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:47:32.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:47:32.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:47:32.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:47:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:47:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.199399 -999.00  +20.90  16.15     18   -4.20 1 1 1 1 1   887    0 24.66 1.73 ----- 14.7 16.1 33.4 21.9 24.0 -27.2 23.8 -26.7 22.4 -25.8 22.5 -26.4
2025-11-26T06:47:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:47:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:47:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.199399
2025-11-26T06:47:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:47:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:47:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:47:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:47:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:47:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:47:11', tmtdew=30.21, humidity=12.51, cloud=0.0, wind=15.32, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:47:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:47:32.276 [DEBUG] [Thread-13558] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:47:32.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:47:32.372 [DEBUG] [Thread-13561] [transport.py] [_log()] starting thread (client mode): 0x70d02c50
2025-11-26T06:47:32.372 [DEBUG] [Thread-13561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:47:32.387 [DEBUG] [Thread-13561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:47:32.387 [INFO] [Thread-13561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:47:32.395 [DEBUG] [Thread-13561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:47:32.395 [DEBUG] [Thread-13561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:47:32.396 [DEBUG] [Thread-13561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:47:32.396 [DEBUG] [Thread-13561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:47:32.396 [DEBUG] [Thread-13561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:47:32.396 [DEBUG] [Thread-13561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:47:32.396 [DEBUG] [Thread-13561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:47:32.396 [DEBUG] [Thread-13561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:47:32.396 [DEBUG] [Thread-13561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:47:32.396 [DEBUG] [Thread-13561] [transport.py] [_log()] client lang: <none>
2025-11-26T06:47:32.397 [DEBUG] [Thread-13561] [transport.py] [_log()] server lang: <none>
2025-11-26T06:47:32.397 [DEBUG] [Thread-13561] [transport.py] [_log()] kex follows: False
2025-11-26T06:47:32.397 [DEBUG] [Thread-13561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:47:32.397 [DEBUG] [Thread-13561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:47:32.397 [DEBUG] [Thread-13561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:47:32.397 [DEBUG] [Thread-13561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:47:32.397 [DEBUG] [Thread-13561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:47:32.398 [DEBUG] [Thread-13561] [transport.py] [_log()] Compression: none
2025-11-26T06:47:32.398 [DEBUG] [Thread-13561] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:47:32.457 [DEBUG] [Thread-13561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:47:32.458 [DEBUG] [Thread-13561] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:47:32.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:47:32.459 [DEBUG] [Thread-13561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:47:32.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:47:32.516 [DEBUG] [Thread-13561] [transport.py] [_log()] userauth is OK
2025-11-26T06:47:32.517 [DEBUG] [Thread-13561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:47:32.517 [DEBUG] [Thread-13561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:47:32.517 [DEBUG] [Thread-13561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:47:32.517 [DEBUG] [Thread-13561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:47:32.535 [INFO] [Thread-13561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:47:32.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:47:32.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:47:33.343 [DEBUG] [Thread-13561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:47:33.344 [DEBUG] [Thread-13561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:47:33.392 [DEBUG] [Thread-13561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:47:33.392 [DEBUG] [Thread-13561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:47:33.401 [DEBUG] [Thread-13561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:47:33.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:47:33.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:47:33.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:47:33.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:47:33.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:47:33.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:47:33.437 [DEBUG] [Thread-13561] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:47:38.078 [DEBUG] [Thread-13563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:47:41.399 [DEBUG] [Thread-13564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:47:56.449 [DEBUG] [Thread-13565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:48:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:48:03.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:48:03.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
2025-11-26T06:48:04.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 47, 43), 30.18, 12.55, 0.0, 12.86, 21.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:48:04.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:47:43
2025-11-26T06:48:04.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:48:04.378 [DEBUG] [Thread-13566] [transport.py] [_log()] starting thread (client mode): 0x737833a0
2025-11-26T06:48:04.378 [DEBUG] [Thread-13566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:48:04.399 [DEBUG] [Thread-13566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:48:04.399 [INFO] [Thread-13566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:48:04.400 [DEBUG] [Thread-13566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:48:04.400 [DEBUG] [Thread-13566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:48:04.400 [DEBUG] [Thread-13566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:48:04.400 [DEBUG] [Thread-13566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] client lang: <none>
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] server lang: <none>
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] kex follows: False
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:48:04.401 [DEBUG] [Thread-13566] [transport.py] [_log()] Compression: none
2025-11-26T06:48:04.402 [DEBUG] [Thread-13566] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:48:04.411 [DEBUG] [Thread-13566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:48:04.411 [DEBUG] [Thread-13566] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:48:04.412 [DEBUG] [Thread-13566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:48:04.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:48:04.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:48:04.414 [DEBUG] [Thread-13566] [transport.py] [_log()] userauth is OK
2025-11-26T06:48:04.414 [DEBUG] [Thread-13566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:48:04.414 [DEBUG] [Thread-13566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:48:04.415 [DEBUG] [Thread-13566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:48:04.415 [DEBUG] [Thread-13566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:48:04.431 [INFO] [Thread-13566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:48:04.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:48:04.967 [DEBUG] [Thread-13566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:48:04.967 [DEBUG] [Thread-13566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:48:04.968 [DEBUG] [Thread-13566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:48:05.008 [DEBUG] [Thread-13566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:48:05.008 [DEBUG] [Thread-13566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:48:05.011 [DEBUG] [Thread-13566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:48:05.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:48:05.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:48:05.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:48:05.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:48:05.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:48:05.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:48:05.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:48:05.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:48:05.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:48:05.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.199746 -999.00  +20.90  17.07     18   -4.10 1 1 1 1 1   887    0 25.12 2.22 ----- 16.6 17.1 31.0 18.9 24.0 -27.4 23.8 -26.5 22.4 -25.6 22.4 -26.5
2025-11-26T06:48:05.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:48:05.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:48:05.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.199746
2025-11-26T06:48:05.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:48:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:48:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:48:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:48:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:48:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:47:43', tmtdew=30.18, humidity=12.55, cloud=0.0, wind=12.86, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:47:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:48:05.037 [DEBUG] [Thread-13566] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:48:05.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:48:05.133 [DEBUG] [Thread-13569] [transport.py] [_log()] starting thread (client mode): 0x70d0dff0
2025-11-26T06:48:05.133 [DEBUG] [Thread-13569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:48:05.148 [DEBUG] [Thread-13569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:48:05.148 [INFO] [Thread-13569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:48:05.155 [DEBUG] [Thread-13569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] client lang: <none>
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] server lang: <none>
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] kex follows: False
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] Compression: none
2025-11-26T06:48:05.156 [DEBUG] [Thread-13569] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:48:05.214 [DEBUG] [Thread-13569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:48:05.214 [DEBUG] [Thread-13569] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:48:05.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:48:05.215 [DEBUG] [Thread-13569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:48:05.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:48:05.270 [DEBUG] [Thread-13569] [transport.py] [_log()] userauth is OK
2025-11-26T06:48:05.270 [DEBUG] [Thread-13569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:48:05.271 [DEBUG] [Thread-13569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:48:05.271 [DEBUG] [Thread-13569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:48:05.271 [DEBUG] [Thread-13569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:48:05.289 [INFO] [Thread-13569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:48:05.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:48:05.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:48:06.090 [DEBUG] [Thread-13569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:48:06.090 [DEBUG] [Thread-13569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:48:06.139 [DEBUG] [Thread-13569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:48:06.140 [DEBUG] [Thread-13569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:48:06.149 [DEBUG] [Thread-13569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:48:06.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:48:06.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:48: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
2025-11-26T06:48:06.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:48:06.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:48:06.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:48:06.186 [DEBUG] [Thread-13569] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:48:11.484 [DEBUG] [Thread-13571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:48:26.546 [DEBUG] [Thread-13572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:48:31.615 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:48:31.616 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:48:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:48:36.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:48:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:48:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 48, 15), 30.15, 12.58, 0.0, 17.77, 21.32, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:48:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:48:15
2025-11-26T06:48:37.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:48:37.187 [DEBUG] [Thread-13573] [transport.py] [_log()] starting thread (client mode): 0x761d9570
2025-11-26T06:48:37.187 [DEBUG] [Thread-13573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:48:37.207 [DEBUG] [Thread-13573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:48:37.207 [INFO] [Thread-13573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] client lang: <none>
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] server lang: <none>
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] kex follows: False
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] Compression: none
2025-11-26T06:48:37.210 [DEBUG] [Thread-13573] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:48:37.219 [DEBUG] [Thread-13573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:48:37.220 [DEBUG] [Thread-13573] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:48:37.220 [DEBUG] [Thread-13573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:48:37.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:48:37.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:48:37.220 [DEBUG] [Thread-13573] [transport.py] [_log()] userauth is OK
2025-11-26T06:48:37.220 [DEBUG] [Thread-13573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:48:37.220 [DEBUG] [Thread-13573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:48:37.220 [DEBUG] [Thread-13573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:48:37.220 [DEBUG] [Thread-13573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:48:37.229 [INFO] [Thread-13573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:48:37.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:48:37.825 [DEBUG] [Thread-13573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:48:37.825 [DEBUG] [Thread-13573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:48:37.825 [DEBUG] [Thread-13573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:48:37.866 [DEBUG] [Thread-13573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:48:37.866 [DEBUG] [Thread-13573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:48:37.869 [DEBUG] [Thread-13573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:48:37.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:48:37.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:48:37.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:48:37.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:48:37.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:48:37.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:48:37.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:48:37.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:48:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:48:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.200094 -999.00  +21.00  16.17     18   -4.20 1 1 1 1 1   887    0 25.05 3.43 ----- 15.5 16.2 36.4 20.6 24.1 -27.3 23.9 -26.4 22.5 -25.9 22.6 -26.3
2025-11-26T06:48:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:48:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:48:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.200094
2025-11-26T06:48:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:48:37.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:48:37.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:48:37.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:48:37.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:48:37.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:48:15', tmtdew=30.15, humidity=12.58, cloud=0.0, wind=17.77, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:48:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:48:37.897 [DEBUG] [Thread-13573] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:48:37.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:48:37.987 [DEBUG] [Thread-13576] [transport.py] [_log()] starting thread (client mode): 0x73783640
2025-11-26T06:48:37.987 [DEBUG] [Thread-13576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:48:38.002 [DEBUG] [Thread-13576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:48:38.002 [INFO] [Thread-13576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] client lang: <none>
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] server lang: <none>
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] kex follows: False
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:48:38.009 [DEBUG] [Thread-13576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:48:38.010 [DEBUG] [Thread-13576] [transport.py] [_log()] Compression: none
2025-11-26T06:48:38.010 [DEBUG] [Thread-13576] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:48:38.066 [DEBUG] [Thread-13576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:48:38.066 [DEBUG] [Thread-13576] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:48:38.066 [DEBUG] [Thread-13576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:48:38.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:48:38.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:48:38.123 [DEBUG] [Thread-13576] [transport.py] [_log()] userauth is OK
2025-11-26T06:48:38.123 [DEBUG] [Thread-13576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:48:38.123 [DEBUG] [Thread-13576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:48:38.123 [DEBUG] [Thread-13576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:48:38.123 [DEBUG] [Thread-13576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:48:38.124 [DEBUG] [Thread-13578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:48:38.142 [INFO] [Thread-13576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:48:38.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:48:38.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:48:38.980 [DEBUG] [Thread-13576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:48:38.980 [DEBUG] [Thread-13576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:48:39.028 [DEBUG] [Thread-13576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:48:39.028 [DEBUG] [Thread-13576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:48:39.036 [DEBUG] [Thread-13576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:48:39.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:48:39.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:48:39.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:48:39.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:48:39.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:48:39.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:48:39.067 [DEBUG] [Thread-13576] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:48:41.581 [DEBUG] [Thread-13579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:48:56.634 [DEBUG] [Thread-13580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:49:09.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:49:09.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:49:09.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:49:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 48, 47), 30.2, 12.58, 0.0, 13.89, 21.39, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:49:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:48:47
2025-11-26T06:49:09.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:49:10.027 [DEBUG] [Thread-13581] [transport.py] [_log()] starting thread (client mode): 0x73780f40
2025-11-26T06:49:10.027 [DEBUG] [Thread-13581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:49:10.048 [DEBUG] [Thread-13581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:49:10.048 [INFO] [Thread-13581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] client lang: <none>
2025-11-26T06:49:10.050 [DEBUG] [Thread-13581] [transport.py] [_log()] server lang: <none>
2025-11-26T06:49:10.051 [DEBUG] [Thread-13581] [transport.py] [_log()] kex follows: False
2025-11-26T06:49:10.051 [DEBUG] [Thread-13581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:49:10.051 [DEBUG] [Thread-13581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:49:10.051 [DEBUG] [Thread-13581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:49:10.051 [DEBUG] [Thread-13581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:49:10.051 [DEBUG] [Thread-13581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:49:10.051 [DEBUG] [Thread-13581] [transport.py] [_log()] Compression: none
2025-11-26T06:49:10.051 [DEBUG] [Thread-13581] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:49:10.061 [DEBUG] [Thread-13581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:49:10.062 [DEBUG] [Thread-13581] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:49:10.062 [DEBUG] [Thread-13581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:49:10.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:49:10.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:49:10.064 [DEBUG] [Thread-13581] [transport.py] [_log()] userauth is OK
2025-11-26T06:49:10.064 [DEBUG] [Thread-13581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:49:10.064 [DEBUG] [Thread-13581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:49:10.064 [DEBUG] [Thread-13581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:49:10.065 [DEBUG] [Thread-13581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:49:10.083 [INFO] [Thread-13581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:49:10.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:49:10.652 [DEBUG] [Thread-13581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:49:10.652 [DEBUG] [Thread-13581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:49:10.653 [DEBUG] [Thread-13581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:49:10.694 [DEBUG] [Thread-13581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:49:10.694 [DEBUG] [Thread-13581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:49:10.697 [DEBUG] [Thread-13581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:49:10.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:49:10.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:49:10.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:49:10.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:49:10.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:49:10.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:49:10.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:49:10.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:49:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:49:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.200094 -999.00  +21.00  16.17     18   -4.20 1 1 1 1 1   887    0 25.05 3.43 ----- 15.5 16.2 36.4 20.6 24.1 -27.3 23.9 -26.4 22.5 -25.9 22.6 -26.3
2025-11-26T06:49:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:49:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:49:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.200094
2025-11-26T06:49:10.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:49:10.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:49:10.733 [DEBUG] [Thread-13581] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:49:10.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:49:10.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:49:10.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:49:10.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:48:47', tmtdew=30.2, humidity=12.58, cloud=0.0, wind=13.89, temperature=21.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:48:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:49:10.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:49:10.827 [DEBUG] [Thread-13584] [transport.py] [_log()] starting thread (client mode): 0x761d9600
2025-11-26T06:49:10.827 [DEBUG] [Thread-13584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:49:10.842 [DEBUG] [Thread-13584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:49:10.842 [INFO] [Thread-13584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] client lang: <none>
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] server lang: <none>
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] kex follows: False
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:49:10.850 [DEBUG] [Thread-13584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:49:10.851 [DEBUG] [Thread-13584] [transport.py] [_log()] Compression: none
2025-11-26T06:49:10.851 [DEBUG] [Thread-13584] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:49:10.910 [DEBUG] [Thread-13584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:49:10.911 [DEBUG] [Thread-13584] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:49:10.912 [DEBUG] [Thread-13584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:49:10.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:49:10.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:49:10.966 [DEBUG] [Thread-13584] [transport.py] [_log()] userauth is OK
2025-11-26T06:49:10.967 [DEBUG] [Thread-13584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:49:10.967 [DEBUG] [Thread-13584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:49:10.967 [DEBUG] [Thread-13584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:49:10.967 [DEBUG] [Thread-13584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:49:10.985 [INFO] [Thread-13584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:49:10.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:49:10.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:49:11.674 [DEBUG] [Thread-13586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:49:11.803 [DEBUG] [Thread-13584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:49:11.804 [DEBUG] [Thread-13584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:49:11.852 [DEBUG] [Thread-13584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:49:11.852 [DEBUG] [Thread-13584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:49:11.861 [DEBUG] [Thread-13584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:49:11.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:49:11.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:49:11.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:49:11.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:49:11.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:49:11.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:49:11.898 [DEBUG] [Thread-13584] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:49:26.733 [DEBUG] [Thread-13587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:49:31.764 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:49:31.765 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:49:38.175 [DEBUG] [Thread-13588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:49:41.773 [DEBUG] [Thread-13589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:49:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:49:41.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:49:41.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:49:42.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 49, 19), 30.23, 12.55, 0.0, 14.73, 21.34, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:49:42.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:49:19
2025-11-26T06:49:42.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:49:42.850 [DEBUG] [Thread-13590] [transport.py] [_log()] starting thread (client mode): 0x737814b0
2025-11-26T06:49:42.850 [DEBUG] [Thread-13590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:49:42.871 [DEBUG] [Thread-13590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:49:42.871 [INFO] [Thread-13590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] client lang: <none>
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] server lang: <none>
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] kex follows: False
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] Compression: none
2025-11-26T06:49:42.874 [DEBUG] [Thread-13590] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:49:42.890 [DEBUG] [Thread-13590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:49:42.890 [DEBUG] [Thread-13590] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:49:42.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:49:42.891 [DEBUG] [Thread-13590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:49:42.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:49:42.893 [DEBUG] [Thread-13590] [transport.py] [_log()] userauth is OK
2025-11-26T06:49:42.893 [DEBUG] [Thread-13590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:49:42.893 [DEBUG] [Thread-13590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:49:42.893 [DEBUG] [Thread-13590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:49:42.894 [DEBUG] [Thread-13590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:49:42.919 [INFO] [Thread-13590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:49:42.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:49:43.715 [DEBUG] [Thread-13590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:49:43.715 [DEBUG] [Thread-13590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:49:43.716 [DEBUG] [Thread-13590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:49:43.756 [DEBUG] [Thread-13590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:49:43.756 [DEBUG] [Thread-13590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:49:43.760 [DEBUG] [Thread-13590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:49:43.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:49:43.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:49:43.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:49:43.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:49:43.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:49:43.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:49:43.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:49:43.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:49:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:49:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.200788 -999.00  +21.00  17.30     18   -4.20 1 1 1 1 1   887    0 25.18 6.00 ----- 19.4 17.3 35.4 20.0 24.1 -27.4 23.9 -26.6 22.5 -25.8 22.6 -26.5
2025-11-26T06:49:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:49:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:49:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.200788
2025-11-26T06:49:43.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:49:43.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:49:43.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:49:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:49:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:49:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:49:19', tmtdew=30.23, humidity=12.55, cloud=0.0, wind=14.73, temperature=21.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:49:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:49:43.786 [DEBUG] [Thread-13590] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:49:43.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:49:43.881 [DEBUG] [Thread-13593] [transport.py] [_log()] starting thread (client mode): 0x737804f0
2025-11-26T06:49:43.881 [DEBUG] [Thread-13593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:49:43.896 [DEBUG] [Thread-13593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:49:43.896 [INFO] [Thread-13593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:49:43.903 [DEBUG] [Thread-13593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] client lang: <none>
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] server lang: <none>
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] kex follows: False
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] Compression: none
2025-11-26T06:49:43.904 [DEBUG] [Thread-13593] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:49:43.960 [DEBUG] [Thread-13593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:49:43.961 [DEBUG] [Thread-13593] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:49:43.961 [DEBUG] [Thread-13593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:49:43.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:49:43.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:49:44.017 [DEBUG] [Thread-13593] [transport.py] [_log()] userauth is OK
2025-11-26T06:49:44.017 [DEBUG] [Thread-13593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:49:44.017 [DEBUG] [Thread-13593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:49:44.018 [DEBUG] [Thread-13593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:49:44.018 [DEBUG] [Thread-13593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:49:44.038 [INFO] [Thread-13593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:49:44.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:49:44.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:49:44.849 [DEBUG] [Thread-13593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:49:44.850 [DEBUG] [Thread-13593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:49:44.902 [DEBUG] [Thread-13593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:49:44.902 [DEBUG] [Thread-13593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:49:44.911 [DEBUG] [Thread-13593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:49:44.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:49:44.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:49:44.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:49:44.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:49:44.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:49:44.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:49:44.949 [DEBUG] [Thread-13593] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:49:56.805 [DEBUG] [Thread-13595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:50:11.860 [DEBUG] [Thread-13596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:50:14.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:50:14.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:50:14.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:50:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 49, 51), 30.24, 12.55, 0.0, 15.79, 21.4, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:50:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:49:51
2025-11-26T06:50:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:50:15.907 [DEBUG] [Thread-13597] [transport.py] [_log()] starting thread (client mode): 0x7376c250
2025-11-26T06:50:15.907 [DEBUG] [Thread-13597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:50:15.928 [DEBUG] [Thread-13597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:50:15.928 [INFO] [Thread-13597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] client lang: <none>
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] server lang: <none>
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] kex follows: False
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] Compression: none
2025-11-26T06:50:15.931 [DEBUG] [Thread-13597] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:50:15.949 [DEBUG] [Thread-13597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:50:15.950 [DEBUG] [Thread-13597] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:50:15.950 [DEBUG] [Thread-13597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:50:15.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:50:15.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:50:15.993 [DEBUG] [Thread-13597] [transport.py] [_log()] userauth is OK
2025-11-26T06:50:15.993 [DEBUG] [Thread-13597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:50:15.993 [DEBUG] [Thread-13597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:50:15.993 [DEBUG] [Thread-13597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:50:15.993 [DEBUG] [Thread-13597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:50:16.025 [INFO] [Thread-13597] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:50:16.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:50:16.654 [DEBUG] [Thread-13597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:50:16.655 [DEBUG] [Thread-13597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:50:16.655 [DEBUG] [Thread-13597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:50:16.696 [DEBUG] [Thread-13597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:50:16.696 [DEBUG] [Thread-13597] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:50:16.699 [DEBUG] [Thread-13597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:50:16.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:50:16.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:50:16.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:50:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:50:16.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:50:16.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:50:16.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:50:16.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:50:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:50:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.201135 -999.00  +21.00  17.13     18   -4.20 1 1 1 1 1   887    0 24.75 6.99 ----- 16.1 17.1 48.7 21.7 24.1 -27.3 23.9 -26.5 22.5 -25.8 22.6 -26.5
2025-11-26T06:50:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:50:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:50:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.201135
2025-11-26T06:50:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:50:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:50:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:50:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:50:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:50:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:49:51', tmtdew=30.24, humidity=12.55, cloud=0.0, wind=15.79, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:49:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:50:16.727 [DEBUG] [Thread-13597] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:50:16.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:50:16.822 [DEBUG] [Thread-13600] [transport.py] [_log()] starting thread (client mode): 0x70d0e110
2025-11-26T06:50:16.822 [DEBUG] [Thread-13600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:50:16.836 [DEBUG] [Thread-13600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:50:16.837 [INFO] [Thread-13600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:50:16.844 [DEBUG] [Thread-13600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:50:16.844 [DEBUG] [Thread-13600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:50:16.844 [DEBUG] [Thread-13600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:50:16.844 [DEBUG] [Thread-13600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:50:16.844 [DEBUG] [Thread-13600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] client lang: <none>
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] server lang: <none>
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] kex follows: False
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] Compression: none
2025-11-26T06:50:16.845 [DEBUG] [Thread-13600] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:50:16.903 [DEBUG] [Thread-13600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:50:16.904 [DEBUG] [Thread-13600] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:50:16.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:50:16.905 [DEBUG] [Thread-13600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:50:16.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:50:16.959 [DEBUG] [Thread-13600] [transport.py] [_log()] userauth is OK
2025-11-26T06:50:16.960 [DEBUG] [Thread-13600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:50:16.960 [DEBUG] [Thread-13600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:50:16.960 [DEBUG] [Thread-13600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:50:16.960 [DEBUG] [Thread-13600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:50:16.978 [INFO] [Thread-13600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:50:16.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:50:16.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:50:17.809 [DEBUG] [Thread-13600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:50:17.809 [DEBUG] [Thread-13600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:50:17.856 [DEBUG] [Thread-13600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:50:17.857 [DEBUG] [Thread-13600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:50:17.866 [DEBUG] [Thread-13600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:50:17.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:50:17.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:50:17.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:50:17.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:50:17.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:50:17.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:50:17.902 [DEBUG] [Thread-13600] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:50:26.894 [DEBUG] [Thread-13602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:50:31.906 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:50:31.907 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:50:38.237 [DEBUG] [Thread-13603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:50:41.942 [DEBUG] [Thread-13604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:50:47.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:50:47.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:50:47.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:50:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 50, 23), 30.27, 12.51, 0.0, 15.51, 21.35, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:50:48.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:50:23
2025-11-26T06:50:48.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:50:48.849 [DEBUG] [Thread-13605] [transport.py] [_log()] starting thread (client mode): 0x7376dbd0
2025-11-26T06:50:48.849 [DEBUG] [Thread-13605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:50:48.869 [DEBUG] [Thread-13605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:50:48.869 [INFO] [Thread-13605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] client lang: <none>
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] server lang: <none>
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] kex follows: False
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:50:48.872 [DEBUG] [Thread-13605] [transport.py] [_log()] Compression: none
2025-11-26T06:50:48.873 [DEBUG] [Thread-13605] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:50:48.890 [DEBUG] [Thread-13605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:50:48.890 [DEBUG] [Thread-13605] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:50:48.890 [DEBUG] [Thread-13605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:50:48.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:50:48.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:50:48.891 [DEBUG] [Thread-13605] [transport.py] [_log()] userauth is OK
2025-11-26T06:50:48.891 [DEBUG] [Thread-13605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:50:48.891 [DEBUG] [Thread-13605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:50:48.891 [DEBUG] [Thread-13605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:50:48.892 [DEBUG] [Thread-13605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:50:48.911 [INFO] [Thread-13605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:50:48.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:50:49.720 [DEBUG] [Thread-13605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:50:49.720 [DEBUG] [Thread-13605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:50:49.720 [DEBUG] [Thread-13605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:50:49.761 [DEBUG] [Thread-13605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:50:49.762 [DEBUG] [Thread-13605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:50:49.764 [DEBUG] [Thread-13605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:50:49.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:50:49.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:50:49.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:50:49.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:50:49.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:50:49.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:50:49.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:50:49.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:50:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:50:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.201482 -999.00  +21.00  14.82     18   -4.10 1 1 1 1 1   887    0 25.45 6.85 ----- 16.1 14.8 45.4 20.2 24.1 -27.3 23.9 -26.2 22.5 -26.0 22.6 -26.5
2025-11-26T06:50:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:50:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:50:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.201482
2025-11-26T06:50:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:50:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:50:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:50:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:50:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:50:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:50:23', tmtdew=30.27, humidity=12.51, cloud=0.0, wind=15.51, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:50:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:50:49.790 [DEBUG] [Thread-13605] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:50:49.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:50:49.887 [DEBUG] [Thread-13608] [transport.py] [_log()] starting thread (client mode): 0x761d8fd0
2025-11-26T06:50:49.887 [DEBUG] [Thread-13608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:50:49.903 [DEBUG] [Thread-13608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:50:49.903 [INFO] [Thread-13608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:50:49.911 [DEBUG] [Thread-13608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:50:49.911 [DEBUG] [Thread-13608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:50:49.911 [DEBUG] [Thread-13608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:50:49.911 [DEBUG] [Thread-13608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:50:49.911 [DEBUG] [Thread-13608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:50:49.911 [DEBUG] [Thread-13608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:50:49.911 [DEBUG] [Thread-13608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] client lang: <none>
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] server lang: <none>
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] kex follows: False
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:50:49.912 [DEBUG] [Thread-13608] [transport.py] [_log()] Compression: none
2025-11-26T06:50:49.913 [DEBUG] [Thread-13608] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:50:49.974 [DEBUG] [Thread-13608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:50:49.974 [DEBUG] [Thread-13608] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:50:49.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:50:49.975 [DEBUG] [Thread-13608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:50:49.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:50:50.034 [DEBUG] [Thread-13608] [transport.py] [_log()] userauth is OK
2025-11-26T06:50:50.034 [DEBUG] [Thread-13608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:50:50.034 [DEBUG] [Thread-13608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:50:50.034 [DEBUG] [Thread-13608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:50:50.034 [DEBUG] [Thread-13608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:50:50.053 [INFO] [Thread-13608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:50:50.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:50:50.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:50:50.860 [DEBUG] [Thread-13608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:50:50.860 [DEBUG] [Thread-13608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:50:50.908 [DEBUG] [Thread-13608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:50:50.908 [DEBUG] [Thread-13608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:50:50.917 [DEBUG] [Thread-13608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:50:50.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:50:50.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:50:50.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:50:50.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:50:50.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:50:50.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:50:50.954 [DEBUG] [Thread-13608] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:50:56.976 [DEBUG] [Thread-13610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:51:12.023 [DEBUG] [Thread-13611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:51:20.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:51:20.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:51:20.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:51:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 50, 55), 30.28, 12.01, 0.0, 15.58, 21.4, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:51:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:50:55
2025-11-26T06:51:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:51:21.874 [DEBUG] [Thread-13612] [transport.py] [_log()] starting thread (client mode): 0x7376e3e0
2025-11-26T06:51:21.874 [DEBUG] [Thread-13612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:51:21.889 [DEBUG] [Thread-13612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:51:21.889 [INFO] [Thread-13612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] client lang: <none>
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] server lang: <none>
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] kex follows: False
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] Compression: none
2025-11-26T06:51:21.891 [DEBUG] [Thread-13612] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:51:21.910 [DEBUG] [Thread-13612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:51:21.910 [DEBUG] [Thread-13612] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:51:21.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:51:21.911 [DEBUG] [Thread-13612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:51:21.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:51:21.913 [DEBUG] [Thread-13612] [transport.py] [_log()] userauth is OK
2025-11-26T06:51:21.913 [DEBUG] [Thread-13612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:51:21.914 [DEBUG] [Thread-13612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:51:21.914 [DEBUG] [Thread-13612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:51:21.914 [DEBUG] [Thread-13612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:51:21.935 [INFO] [Thread-13612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:51:21.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:51:22.517 [DEBUG] [Thread-13612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:51:22.517 [DEBUG] [Thread-13612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:51:22.517 [DEBUG] [Thread-13612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:51:22.557 [DEBUG] [Thread-13612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:51:22.558 [DEBUG] [Thread-13612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:51:22.560 [DEBUG] [Thread-13612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:51:22.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:51:22.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:51:22.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:51:22.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:51:22.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:51:22.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:51:22.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:51:22.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:51:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:51:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.201830 -999.00  +21.00  15.23     18   -4.20 1 1 1 1 1   887    0 25.31 7.77 ----- 15.7 15.2 42.6 20.1 24.1 -27.4 23.9 -26.6 22.6 -25.7 22.6 -26.5
2025-11-26T06:51:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:51:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:51:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.201830
2025-11-26T06:51:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:51:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:51:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:51:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:51:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:51:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:50:55', tmtdew=30.28, humidity=12.01, cloud=0.0, wind=15.58, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:50:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:51:22.585 [DEBUG] [Thread-13612] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:51:22.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:51:22.683 [DEBUG] [Thread-13615] [transport.py] [_log()] starting thread (client mode): 0x73780f40
2025-11-26T06:51:22.683 [DEBUG] [Thread-13615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:51:22.698 [DEBUG] [Thread-13615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:51:22.699 [INFO] [Thread-13615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:51:22.706 [DEBUG] [Thread-13615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:51:22.706 [DEBUG] [Thread-13615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:51:22.706 [DEBUG] [Thread-13615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:51:22.706 [DEBUG] [Thread-13615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:51:22.706 [DEBUG] [Thread-13615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] client lang: <none>
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] server lang: <none>
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] kex follows: False
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] Compression: none
2025-11-26T06:51:22.707 [DEBUG] [Thread-13615] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:51:22.763 [DEBUG] [Thread-13615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:51:22.764 [DEBUG] [Thread-13615] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:51:22.765 [DEBUG] [Thread-13615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:51:22.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:51:22.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:51:22.820 [DEBUG] [Thread-13615] [transport.py] [_log()] userauth is OK
2025-11-26T06:51:22.821 [DEBUG] [Thread-13615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:51:22.821 [DEBUG] [Thread-13615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:51:22.821 [DEBUG] [Thread-13615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:51:22.821 [DEBUG] [Thread-13615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:51:22.840 [INFO] [Thread-13615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:51:22.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:51:22.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:51:23.664 [DEBUG] [Thread-13615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:51:23.664 [DEBUG] [Thread-13615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:51:23.712 [DEBUG] [Thread-13615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:51:23.712 [DEBUG] [Thread-13615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:51:23.721 [DEBUG] [Thread-13615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:51:23.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:51:23.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:51:23.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:51:23.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:51:23.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:51:23.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:51:23.758 [DEBUG] [Thread-13615] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:51:27.061 [DEBUG] [Thread-13617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:51:32.047 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:51:32.049 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:51:38.287 [DEBUG] [Thread-13618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:51:42.111 [DEBUG] [Thread-13619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:51:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:51:53.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:51:53.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:51:54.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 51, 27), 30.27, 12.03, 0.0, 14.61, 21.47, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:51:54.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:51:27
2025-11-26T06:51:54.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:51:54.712 [DEBUG] [Thread-13620] [transport.py] [_log()] starting thread (client mode): 0x7378c8e0
2025-11-26T06:51:54.712 [DEBUG] [Thread-13620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:51:54.724 [DEBUG] [Thread-13620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:51:54.725 [INFO] [Thread-13620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] client lang: <none>
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] server lang: <none>
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] kex follows: False
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:51:54.726 [DEBUG] [Thread-13620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:51:54.727 [DEBUG] [Thread-13620] [transport.py] [_log()] Compression: none
2025-11-26T06:51:54.727 [DEBUG] [Thread-13620] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:51:54.735 [DEBUG] [Thread-13620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:51:54.735 [DEBUG] [Thread-13620] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:51:54.736 [DEBUG] [Thread-13620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:51:54.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:51:54.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:51:54.737 [DEBUG] [Thread-13620] [transport.py] [_log()] userauth is OK
2025-11-26T06:51:54.737 [DEBUG] [Thread-13620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:51:54.738 [DEBUG] [Thread-13620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:51:54.738 [DEBUG] [Thread-13620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:51:54.738 [DEBUG] [Thread-13620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:51:54.764 [INFO] [Thread-13620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:51:54.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:51:55.585 [DEBUG] [Thread-13620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:51:55.585 [DEBUG] [Thread-13620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:51:55.586 [DEBUG] [Thread-13620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:51:55.627 [DEBUG] [Thread-13620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:51:55.627 [DEBUG] [Thread-13620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:51:55.630 [DEBUG] [Thread-13620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:51:55.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:51:55.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:51:55.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:51:55.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:51:55.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:51:55.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:51:55.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:51:55.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:51:55.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:51:55.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.202177 -999.00  +21.00  18.82     18   -4.20 1 1 1 1 1   887    0 24.76 8.50 ----- 18.6 18.8 44.4 20.8 24.1 -27.7 24.0 -26.6 22.6 -26.0 22.6 -26.5
2025-11-26T06:51:55.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:51:55.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:51:55.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.202177
2025-11-26T06:51:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:51:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:51:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:51:55.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:51:55.656 [DEBUG] [Thread-13620] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:51:55.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:51:55.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:51:27', tmtdew=30.27, humidity=12.03, cloud=0.0, wind=14.61, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:51:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:51:55.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:51:55.751 [DEBUG] [Thread-13623] [transport.py] [_log()] starting thread (client mode): 0x7378ca60
2025-11-26T06:51:55.751 [DEBUG] [Thread-13623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:51:55.766 [DEBUG] [Thread-13623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:51:55.766 [INFO] [Thread-13623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:51:55.774 [DEBUG] [Thread-13623] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] client lang: <none>
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] server lang: <none>
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] kex follows: False
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] Compression: none
2025-11-26T06:51:55.775 [DEBUG] [Thread-13623] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:51:55.835 [DEBUG] [Thread-13623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:51:55.835 [DEBUG] [Thread-13623] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:51:55.836 [DEBUG] [Thread-13623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:51:55.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:51:55.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:51:55.891 [DEBUG] [Thread-13623] [transport.py] [_log()] userauth is OK
2025-11-26T06:51:55.891 [DEBUG] [Thread-13623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:51:55.892 [DEBUG] [Thread-13623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:51:55.892 [DEBUG] [Thread-13623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:51:55.892 [DEBUG] [Thread-13623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:51:55.910 [INFO] [Thread-13623] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:51:55.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:51:55.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:51:56.753 [DEBUG] [Thread-13623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:51:56.754 [DEBUG] [Thread-13623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:51:56.802 [DEBUG] [Thread-13623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:51:56.802 [DEBUG] [Thread-13623] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:51:56.811 [DEBUG] [Thread-13623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:51:56.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:51:56.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:51:56.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:51:56.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:51:56.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:51:56.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:51:56.850 [DEBUG] [Thread-13623] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:51:57.145 [DEBUG] [Thread-13625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:52:12.208 [DEBUG] [Thread-13626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:52:26.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:52:26.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:52:26.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:52:27.239 [DEBUG] [Thread-13627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:52:27.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 51, 59), 30.3, 12.0, 0.0, 15.62, 21.42, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:52:27.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:51:59
2025-11-26T06:52:27.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:52:27.800 [DEBUG] [Thread-13628] [transport.py] [_log()] starting thread (client mode): 0x737804f0
2025-11-26T06:52:27.800 [DEBUG] [Thread-13628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:52:27.820 [DEBUG] [Thread-13628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:52:27.820 [INFO] [Thread-13628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] client lang: <none>
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] server lang: <none>
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] kex follows: False
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:52:27.821 [DEBUG] [Thread-13628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:52:27.822 [DEBUG] [Thread-13628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:52:27.822 [DEBUG] [Thread-13628] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:52:27.822 [DEBUG] [Thread-13628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:52:27.822 [DEBUG] [Thread-13628] [transport.py] [_log()] Compression: none
2025-11-26T06:52:27.822 [DEBUG] [Thread-13628] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:52:27.830 [DEBUG] [Thread-13628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:52:27.831 [DEBUG] [Thread-13628] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:52:27.831 [DEBUG] [Thread-13628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:52:27.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:52:27.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:52:27.833 [DEBUG] [Thread-13628] [transport.py] [_log()] userauth is OK
2025-11-26T06:52:27.833 [DEBUG] [Thread-13628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:52:27.833 [DEBUG] [Thread-13628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:52:27.833 [DEBUG] [Thread-13628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:52:27.834 [DEBUG] [Thread-13628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:52:27.875 [INFO] [Thread-13628] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:52:27.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:52:28.487 [DEBUG] [Thread-13628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:52:28.487 [DEBUG] [Thread-13628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:52:28.487 [DEBUG] [Thread-13628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:52:28.528 [DEBUG] [Thread-13628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:52:28.528 [DEBUG] [Thread-13628] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:52:28.532 [DEBUG] [Thread-13628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:52:28.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:52:28.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:52:28.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:52:28.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:52:28.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:52:28.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:52:28.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:52:28.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:52:28.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:52:28.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.202524 -999.00  +21.00  16.68     18   -4.20 1 1 1 1 1   887    0 25.03 8.99 ----- 20.0 16.7 37.8 20.2 24.1 -27.3 23.9 -26.8 22.6 -25.6 22.6 -26.5
2025-11-26T06:52:28.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:52:28.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:52:28.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.202524
2025-11-26T06:52:28.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:52:28.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:52:28.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:52:28.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:52:28.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:52:28.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:51:59', tmtdew=30.3, humidity=12.0, cloud=0.0, wind=15.62, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:51:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:52:28.562 [DEBUG] [Thread-13628] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:52:28.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:52:28.657 [DEBUG] [Thread-13631] [transport.py] [_log()] starting thread (client mode): 0x73781990
2025-11-26T06:52:28.657 [DEBUG] [Thread-13631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:52:28.671 [DEBUG] [Thread-13631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:52:28.672 [INFO] [Thread-13631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:52:28.679 [DEBUG] [Thread-13631] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:52:28.680 [DEBUG] [Thread-13631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:52:28.680 [DEBUG] [Thread-13631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:52:28.680 [DEBUG] [Thread-13631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:52:28.680 [DEBUG] [Thread-13631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:52:28.680 [DEBUG] [Thread-13631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:52:28.680 [DEBUG] [Thread-13631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:52:28.680 [DEBUG] [Thread-13631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:52:28.680 [DEBUG] [Thread-13631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:52:28.681 [DEBUG] [Thread-13631] [transport.py] [_log()] client lang: <none>
2025-11-26T06:52:28.681 [DEBUG] [Thread-13631] [transport.py] [_log()] server lang: <none>
2025-11-26T06:52:28.681 [DEBUG] [Thread-13631] [transport.py] [_log()] kex follows: False
2025-11-26T06:52:28.681 [DEBUG] [Thread-13631] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:52:28.681 [DEBUG] [Thread-13631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:52:28.681 [DEBUG] [Thread-13631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:52:28.681 [DEBUG] [Thread-13631] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:52:28.681 [DEBUG] [Thread-13631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:52:28.682 [DEBUG] [Thread-13631] [transport.py] [_log()] Compression: none
2025-11-26T06:52:28.682 [DEBUG] [Thread-13631] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:52:28.738 [DEBUG] [Thread-13631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:52:28.739 [DEBUG] [Thread-13631] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:52:28.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:52:28.741 [DEBUG] [Thread-13631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:52:28.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:52:28.798 [DEBUG] [Thread-13631] [transport.py] [_log()] userauth is OK
2025-11-26T06:52:28.798 [DEBUG] [Thread-13631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:52:28.798 [DEBUG] [Thread-13631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:52:28.799 [DEBUG] [Thread-13631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:52:28.799 [DEBUG] [Thread-13631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:52:28.821 [INFO] [Thread-13631] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:52:28.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:52:28.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:52:29.654 [DEBUG] [Thread-13631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:52:29.654 [DEBUG] [Thread-13631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:52:29.702 [DEBUG] [Thread-13631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:52:29.702 [DEBUG] [Thread-13631] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:52:29.711 [DEBUG] [Thread-13631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:52:29.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:52:29.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:52:29.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:52:29.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:52:29.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:52:29.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:52:29.746 [DEBUG] [Thread-13631] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:52:32.189 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:52:32.190 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:52:38.338 [DEBUG] [Thread-13633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:52:42.274 [DEBUG] [Thread-13634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:52:57.325 [DEBUG] [Thread-13635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:52:59.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:52:59.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:52:59.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:53:00.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 52, 31), 30.28, 12.03, 0.0, 17.01, 21.49, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:53:00.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:52:31
2025-11-26T06:53:00.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:53:00.736 [DEBUG] [Thread-13636] [transport.py] [_log()] starting thread (client mode): 0x7376fd90
2025-11-26T06:53:00.736 [DEBUG] [Thread-13636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:53:00.756 [DEBUG] [Thread-13636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:53:00.756 [INFO] [Thread-13636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:53:00.759 [DEBUG] [Thread-13636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:53:00.759 [DEBUG] [Thread-13636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:53:00.759 [DEBUG] [Thread-13636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:53:00.759 [DEBUG] [Thread-13636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:53:00.759 [DEBUG] [Thread-13636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:53:00.759 [DEBUG] [Thread-13636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:53:00.759 [DEBUG] [Thread-13636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:53:00.759 [DEBUG] [Thread-13636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:53:00.759 [DEBUG] [Thread-13636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] client lang: <none>
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] server lang: <none>
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] kex follows: False
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] Compression: none
2025-11-26T06:53:00.760 [DEBUG] [Thread-13636] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:53:00.776 [DEBUG] [Thread-13636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:53:00.776 [DEBUG] [Thread-13636] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:53:00.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:53:00.776 [DEBUG] [Thread-13636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:53:00.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:53:00.777 [DEBUG] [Thread-13636] [transport.py] [_log()] userauth is OK
2025-11-26T06:53:00.777 [DEBUG] [Thread-13636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:53:00.777 [DEBUG] [Thread-13636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:53:00.777 [DEBUG] [Thread-13636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:53:00.777 [DEBUG] [Thread-13636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:53:00.792 [INFO] [Thread-13636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:53:00.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:53:01.592 [DEBUG] [Thread-13636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:53:01.592 [DEBUG] [Thread-13636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:53:01.592 [DEBUG] [Thread-13636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:53:01.633 [DEBUG] [Thread-13636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:53:01.633 [DEBUG] [Thread-13636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:53:01.636 [DEBUG] [Thread-13636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:53:01.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:53:01.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:53:01.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:53:01.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:53:01.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:53:01.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:53:01.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:53:01.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:53:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:53:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.202871 -999.00  +21.00  17.34     18   -4.20 1 1 1 1 1   887    0 25.32 9.48 ----- 16.5 17.3 46.4 22.3 24.1 -27.7 23.9 -26.5 22.5 -25.9 22.6 -26.5
2025-11-26T06:53:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:53:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:53:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.202871
2025-11-26T06:53:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:53:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:53:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:53:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:53:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:53:01.662 [DEBUG] [Thread-13636] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:53:01.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:52:31', tmtdew=30.28, humidity=12.03, cloud=0.0, wind=17.01, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:52:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:53:01.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:53:01.754 [DEBUG] [Thread-13639] [transport.py] [_log()] starting thread (client mode): 0x761d8940
2025-11-26T06:53:01.754 [DEBUG] [Thread-13639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:53:01.768 [DEBUG] [Thread-13639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:53:01.768 [INFO] [Thread-13639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:53:01.776 [DEBUG] [Thread-13639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:53:01.776 [DEBUG] [Thread-13639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] client lang: <none>
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] server lang: <none>
2025-11-26T06:53:01.777 [DEBUG] [Thread-13639] [transport.py] [_log()] kex follows: False
2025-11-26T06:53:01.778 [DEBUG] [Thread-13639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:53:01.778 [DEBUG] [Thread-13639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:53:01.778 [DEBUG] [Thread-13639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:53:01.778 [DEBUG] [Thread-13639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:53:01.778 [DEBUG] [Thread-13639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:53:01.778 [DEBUG] [Thread-13639] [transport.py] [_log()] Compression: none
2025-11-26T06:53:01.778 [DEBUG] [Thread-13639] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:53:01.840 [DEBUG] [Thread-13639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:53:01.840 [DEBUG] [Thread-13639] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:53:01.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:53:01.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:53:01.842 [DEBUG] [Thread-13639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:53:01.901 [DEBUG] [Thread-13639] [transport.py] [_log()] userauth is OK
2025-11-26T06:53:01.901 [DEBUG] [Thread-13639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:53:01.901 [DEBUG] [Thread-13639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:53:01.901 [DEBUG] [Thread-13639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:53:01.901 [DEBUG] [Thread-13639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:53:01.920 [INFO] [Thread-13639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:53:01.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:53:01.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:53:02.785 [DEBUG] [Thread-13639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:53:02.785 [DEBUG] [Thread-13639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:53:02.833 [DEBUG] [Thread-13639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:53:02.833 [DEBUG] [Thread-13639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:53:02.842 [DEBUG] [Thread-13639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:53:02.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:53:02.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:53:02.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:53:02.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:53:02.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:53:02.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:53:02.878 [DEBUG] [Thread-13639] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:53:12.357 [DEBUG] [Thread-13641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:53:27.416 [DEBUG] [Thread-13642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:53:32.331 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:53:32.332 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:53:32.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:53:32.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:53:32.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:53:33.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 53, 3), 30.26, 12.05, 0.0, 16.68, 21.47, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:53:33.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:53:03
2025-11-26T06:53:33.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:53:33.875 [DEBUG] [Thread-13643] [transport.py] [_log()] starting thread (client mode): 0x70d0c5b0
2025-11-26T06:53:33.875 [DEBUG] [Thread-13643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:53:33.894 [DEBUG] [Thread-13643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:53:33.895 [INFO] [Thread-13643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] client lang: <none>
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] server lang: <none>
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] kex follows: False
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] Compression: none
2025-11-26T06:53:33.898 [DEBUG] [Thread-13643] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:53:33.914 [DEBUG] [Thread-13643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:53:33.915 [DEBUG] [Thread-13643] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:53:33.915 [DEBUG] [Thread-13643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:53:33.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:53:33.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:53:33.916 [DEBUG] [Thread-13643] [transport.py] [_log()] userauth is OK
2025-11-26T06:53:33.916 [DEBUG] [Thread-13643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:53:33.916 [DEBUG] [Thread-13643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:53:33.916 [DEBUG] [Thread-13643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:53:33.916 [DEBUG] [Thread-13643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:53:33.929 [INFO] [Thread-13643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:53:33.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:53:34.552 [DEBUG] [Thread-13643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:53:34.552 [DEBUG] [Thread-13643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:53:34.553 [DEBUG] [Thread-13643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:53:34.593 [DEBUG] [Thread-13643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:53:34.593 [DEBUG] [Thread-13643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:53:34.596 [DEBUG] [Thread-13643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:53:34.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:53:34.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:53:34.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:53:34.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:53:34.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:53:34.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:53:34.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.203219 -999.00  +21.00  15.25     18   -4.20 1 1 1 1 1   887    0 25.55 10.26 ----- 16.3 15.2 38.6 20.3 24.2 -27.4 24.0 -26.7 22.6 -26.0 22.6 -26.5
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.203219
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:53:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:53:03', tmtdew=30.26, humidity=12.05, cloud=0.0, wind=16.68, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:52:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:53:34.617 [DEBUG] [Thread-13643] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:53:34.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:53:34.702 [DEBUG] [Thread-13646] [transport.py] [_log()] starting thread (client mode): 0x7378e3e0
2025-11-26T06:53:34.702 [DEBUG] [Thread-13646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:53:34.717 [DEBUG] [Thread-13646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:53:34.717 [INFO] [Thread-13646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] client lang: <none>
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] server lang: <none>
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] kex follows: False
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:53:34.725 [DEBUG] [Thread-13646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:53:34.726 [DEBUG] [Thread-13646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:53:34.726 [DEBUG] [Thread-13646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:53:34.726 [DEBUG] [Thread-13646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:53:34.726 [DEBUG] [Thread-13646] [transport.py] [_log()] Compression: none
2025-11-26T06:53:34.726 [DEBUG] [Thread-13646] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:53:34.781 [DEBUG] [Thread-13646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:53:34.782 [DEBUG] [Thread-13646] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:53:34.782 [DEBUG] [Thread-13646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:53:34.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:53:34.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:53:34.839 [DEBUG] [Thread-13646] [transport.py] [_log()] userauth is OK
2025-11-26T06:53:34.839 [DEBUG] [Thread-13646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:53:34.839 [DEBUG] [Thread-13646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:53:34.839 [DEBUG] [Thread-13646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:53:34.839 [DEBUG] [Thread-13646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:53:34.856 [INFO] [Thread-13646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:53:34.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:53:34.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:53:35.743 [DEBUG] [Thread-13646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:53:35.744 [DEBUG] [Thread-13646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:53:35.791 [DEBUG] [Thread-13646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:53:35.791 [DEBUG] [Thread-13646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:53:35.800 [DEBUG] [Thread-13646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:53:35.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:53:35.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:53:35.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:53:35.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:53:35.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:53:35.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:53:35.833 [DEBUG] [Thread-13646] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:53:38.401 [DEBUG] [Thread-13648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:53:42.451 [DEBUG] [Thread-13649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:53:57.505 [DEBUG] [Thread-13650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:54:05.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:54:05.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:54:05.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:54:06.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 53, 35), 30.28, 12.01, 0.0, 18.0, 21.44, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:54:06.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:53:35
2025-11-26T06:54:06.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:54:06.789 [DEBUG] [Thread-13651] [transport.py] [_log()] starting thread (client mode): 0x7378df60
2025-11-26T06:54:06.789 [DEBUG] [Thread-13651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:54:06.809 [DEBUG] [Thread-13651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:54:06.809 [INFO] [Thread-13651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:54:06.813 [DEBUG] [Thread-13651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:54:06.813 [DEBUG] [Thread-13651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:54:06.813 [DEBUG] [Thread-13651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:54:06.813 [DEBUG] [Thread-13651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:54:06.813 [DEBUG] [Thread-13651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:54:06.813 [DEBUG] [Thread-13651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] client lang: <none>
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] server lang: <none>
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] kex follows: False
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] Compression: none
2025-11-26T06:54:06.814 [DEBUG] [Thread-13651] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:54:06.831 [DEBUG] [Thread-13651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:54:06.832 [DEBUG] [Thread-13651] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:54:06.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:54:06.833 [DEBUG] [Thread-13651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:54:06.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:54:06.835 [DEBUG] [Thread-13651] [transport.py] [_log()] userauth is OK
2025-11-26T06:54:06.835 [DEBUG] [Thread-13651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:54:06.836 [DEBUG] [Thread-13651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:54:06.836 [DEBUG] [Thread-13651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:54:06.836 [DEBUG] [Thread-13651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:54:06.860 [INFO] [Thread-13651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:54:06.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:54:07.675 [DEBUG] [Thread-13651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:54:07.675 [DEBUG] [Thread-13651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:54:07.676 [DEBUG] [Thread-13651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:54:07.716 [DEBUG] [Thread-13651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:54:07.716 [DEBUG] [Thread-13651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:54:07.719 [DEBUG] [Thread-13651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:54:07.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:54:07.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:54:07.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:54:07.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:54:07.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:54:07.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:54:07.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:54:07.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:54:07.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:54:07.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.203913 -999.00  +21.00  17.14     18   -4.10 1 1 1 1 1   887    0 25.24 12.63 ----- 17.4 17.1 48.0 21.6 -999.0 -999.0 24.0 -26.6 22.6 -26.1 22.7 -26.5
2025-11-26T06:54:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:54:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:54:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.203913
2025-11-26T06:54:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:54:07.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:54:07.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:54:07.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:54:07.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:54:07.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:53:35', tmtdew=30.28, humidity=12.01, cloud=0.0, wind=18.0, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:53:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:54:07.746 [DEBUG] [Thread-13651] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:54:07.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:54:07.841 [DEBUG] [Thread-13654] [transport.py] [_log()] starting thread (client mode): 0x7378fe20
2025-11-26T06:54:07.841 [DEBUG] [Thread-13654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:54:07.856 [DEBUG] [Thread-13654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:54:07.856 [INFO] [Thread-13654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] client lang: <none>
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] server lang: <none>
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] kex follows: False
2025-11-26T06:54:07.864 [DEBUG] [Thread-13654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:54:07.865 [DEBUG] [Thread-13654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:54:07.865 [DEBUG] [Thread-13654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:54:07.865 [DEBUG] [Thread-13654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:54:07.865 [DEBUG] [Thread-13654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:54:07.865 [DEBUG] [Thread-13654] [transport.py] [_log()] Compression: none
2025-11-26T06:54:07.865 [DEBUG] [Thread-13654] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:54:07.922 [DEBUG] [Thread-13654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:54:07.923 [DEBUG] [Thread-13654] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:54:07.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:54:07.924 [DEBUG] [Thread-13654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:54:07.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:54:07.978 [DEBUG] [Thread-13654] [transport.py] [_log()] userauth is OK
2025-11-26T06:54:07.979 [DEBUG] [Thread-13654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:54:07.979 [DEBUG] [Thread-13654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:54:07.979 [DEBUG] [Thread-13654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:54:07.979 [DEBUG] [Thread-13654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:54:07.998 [INFO] [Thread-13654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:54:07.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:54:07.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:54:08.823 [DEBUG] [Thread-13654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:54:08.823 [DEBUG] [Thread-13654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:54:08.870 [DEBUG] [Thread-13654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:54:08.870 [DEBUG] [Thread-13654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:54:08.880 [DEBUG] [Thread-13654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:54:08.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:54:08.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:54:08.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:54:08.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:54:08.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:54:08.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:54:08.912 [DEBUG] [Thread-13654] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:54:12.536 [DEBUG] [Thread-13656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:54:27.579 [DEBUG] [Thread-13657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:54:32.473 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:54:32.474 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:54:38.453 [DEBUG] [Thread-13658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:54:38.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:54:38.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:54:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:54:39.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 54, 7), 30.29, 12.01, 0.0, 19.44, 21.45, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:54:39.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:54:07
2025-11-26T06:54:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:54:39.877 [DEBUG] [Thread-13659] [transport.py] [_log()] starting thread (client mode): 0x7378f820
2025-11-26T06:54:39.878 [DEBUG] [Thread-13659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:54:39.900 [DEBUG] [Thread-13659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:54:39.900 [INFO] [Thread-13659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:54:39.903 [DEBUG] [Thread-13659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] client lang: <none>
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] server lang: <none>
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] kex follows: False
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] Compression: none
2025-11-26T06:54:39.904 [DEBUG] [Thread-13659] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:54:39.921 [DEBUG] [Thread-13659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:54:39.922 [DEBUG] [Thread-13659] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:54:39.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:54:39.923 [DEBUG] [Thread-13659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:54:39.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:54:39.926 [DEBUG] [Thread-13659] [transport.py] [_log()] userauth is OK
2025-11-26T06:54:39.926 [DEBUG] [Thread-13659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:54:39.926 [DEBUG] [Thread-13659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:54:39.926 [DEBUG] [Thread-13659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:54:39.926 [DEBUG] [Thread-13659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:54:39.962 [INFO] [Thread-13659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:54:39.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:54:40.634 [DEBUG] [Thread-13659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:54:40.634 [DEBUG] [Thread-13659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:54:40.634 [DEBUG] [Thread-13659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:54:40.675 [DEBUG] [Thread-13659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:54:40.675 [DEBUG] [Thread-13659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:54:40.677 [DEBUG] [Thread-13659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:54:40.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:54:40.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:54:40.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:54:40.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:54:40.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:54:40.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:54:40.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.204260 -999.00  +21.00  17.68     18   -4.10 1 1 1 1 1   887    0 25.33 13.85 ----- 18.4 17.7 41.4 19.0 24.3 -27.3 24.0 -26.6 22.6 -25.9 22.7 -26.5
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.204260
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:54:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:54:07', tmtdew=30.29, humidity=12.01, cloud=0.0, wind=19.44, temperature=21.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:54:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:54:40.697 [DEBUG] [Thread-13659] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:54:40.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:54:40.786 [DEBUG] [Thread-13662] [transport.py] [_log()] starting thread (client mode): 0x7378c100
2025-11-26T06:54:40.786 [DEBUG] [Thread-13662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:54:40.801 [DEBUG] [Thread-13662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:54:40.801 [INFO] [Thread-13662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] client lang: <none>
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] server lang: <none>
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] kex follows: False
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] Compression: none
2025-11-26T06:54:40.809 [DEBUG] [Thread-13662] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:54:40.863 [DEBUG] [Thread-13662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:54:40.863 [DEBUG] [Thread-13662] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:54:40.863 [DEBUG] [Thread-13662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:54:40.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:54:40.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:54:40.921 [DEBUG] [Thread-13662] [transport.py] [_log()] userauth is OK
2025-11-26T06:54:40.921 [DEBUG] [Thread-13662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:54:40.921 [DEBUG] [Thread-13662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:54:40.921 [DEBUG] [Thread-13662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:54:40.921 [DEBUG] [Thread-13662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:54:40.938 [INFO] [Thread-13662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:54:40.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:54:40.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:54:41.759 [DEBUG] [Thread-13662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:54:41.759 [DEBUG] [Thread-13662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:54:41.807 [DEBUG] [Thread-13662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:54:41.807 [DEBUG] [Thread-13662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:54:41.816 [DEBUG] [Thread-13662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:54:41.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:54:41.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:54: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') -> 00000000
2025-11-26T06:54:41.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:54:41.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:54:41.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:54:41.847 [DEBUG] [Thread-13662] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:54:42.616 [DEBUG] [Thread-13664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:54:57.672 [DEBUG] [Thread-13665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:55:11.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:55:11.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:55:11.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:55:12.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 54, 40), 30.27, 12.03, 0.0, 16.55, 21.45, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:55:12.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:54:40
2025-11-26T06:55:12.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:55:12.708 [DEBUG] [Thread-13666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:55:12.860 [DEBUG] [Thread-13667] [transport.py] [_log()] starting thread (client mode): 0x7378cb80
2025-11-26T06:55:12.860 [DEBUG] [Thread-13667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:55:12.881 [DEBUG] [Thread-13667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:55:12.881 [INFO] [Thread-13667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] client lang: <none>
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] server lang: <none>
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] kex follows: False
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] Compression: none
2025-11-26T06:55:12.884 [DEBUG] [Thread-13667] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:55:12.903 [DEBUG] [Thread-13667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:55:12.903 [DEBUG] [Thread-13667] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:55:12.903 [DEBUG] [Thread-13667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:55:12.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:55:12.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:55:12.905 [DEBUG] [Thread-13667] [transport.py] [_log()] userauth is OK
2025-11-26T06:55:12.905 [DEBUG] [Thread-13667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:55:12.905 [DEBUG] [Thread-13667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:55:12.905 [DEBUG] [Thread-13667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:55:12.905 [DEBUG] [Thread-13667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:55:12.921 [INFO] [Thread-13667] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:55:12.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:55:13.947 [DEBUG] [Thread-13667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:55:13.947 [DEBUG] [Thread-13667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:55:13.948 [DEBUG] [Thread-13667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:55:13.988 [DEBUG] [Thread-13667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:55:13.988 [DEBUG] [Thread-13667] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:55:13.990 [DEBUG] [Thread-13667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:55:14.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:55:14.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:55:14.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:55:14.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:55:14.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:55:14.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:55:14.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:55:14.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:55:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:55:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.204607 -999.00  +21.00  15.83     18   -4.10 1 1 1 1 1   887    0 25.03 14.19 ----- 16.3 15.8 45.2 21.1 24.3 -27.3 24.1 -26.5 22.6 -25.8 22.8 -26.3
2025-11-26T06:55:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:55:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:55:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.204607
2025-11-26T06:55:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:55:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:55:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:55:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:55:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:55:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:54:40', tmtdew=30.27, humidity=12.03, cloud=0.0, wind=16.55, temperature=21.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:54:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:55:14.010 [DEBUG] [Thread-13667] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:55:14.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:55:14.096 [DEBUG] [Thread-13670] [transport.py] [_log()] starting thread (client mode): 0x7376e0b0
2025-11-26T06:55:14.096 [DEBUG] [Thread-13670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:55:14.111 [DEBUG] [Thread-13670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:55:14.111 [INFO] [Thread-13670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:55:14.118 [DEBUG] [Thread-13670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] client lang: <none>
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] server lang: <none>
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] kex follows: False
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] Compression: none
2025-11-26T06:55:14.119 [DEBUG] [Thread-13670] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:55:14.176 [DEBUG] [Thread-13670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:55:14.177 [DEBUG] [Thread-13670] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:55:14.177 [DEBUG] [Thread-13670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:55:14.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:55:14.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:55:14.232 [DEBUG] [Thread-13670] [transport.py] [_log()] userauth is OK
2025-11-26T06:55:14.233 [DEBUG] [Thread-13670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:55:14.233 [DEBUG] [Thread-13670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:55:14.233 [DEBUG] [Thread-13670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:55:14.233 [DEBUG] [Thread-13670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:55:14.252 [INFO] [Thread-13670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:55:14.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:55:14.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:55:15.076 [DEBUG] [Thread-13670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:55:15.077 [DEBUG] [Thread-13670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:55:15.125 [DEBUG] [Thread-13670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:55:15.125 [DEBUG] [Thread-13670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:55:15.134 [DEBUG] [Thread-13670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:55:15.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:55:15.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:55:15.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:55:15.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:55:15.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:55:15.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:55:15.171 [DEBUG] [Thread-13670] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:55:27.742 [DEBUG] [Thread-13672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:55:32.615 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:55:32.616 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:55:38.508 [DEBUG] [Thread-13673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:55:42.782 [DEBUG] [Thread-13674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:55:45.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:55:45.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:55:45.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:55:45.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 55, 11), 30.29, 12.01, 0.0, 16.78, 21.47, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:55:45.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:55:11
2025-11-26T06:55:45.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:55:46.143 [DEBUG] [Thread-13675] [transport.py] [_log()] starting thread (client mode): 0x7376e410
2025-11-26T06:55:46.143 [DEBUG] [Thread-13675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:55:46.163 [DEBUG] [Thread-13675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:55:46.163 [INFO] [Thread-13675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] client lang: <none>
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] server lang: <none>
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] kex follows: False
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] Compression: none
2025-11-26T06:55:46.166 [DEBUG] [Thread-13675] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:55:46.185 [DEBUG] [Thread-13675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:55:46.185 [DEBUG] [Thread-13675] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:55:46.185 [DEBUG] [Thread-13675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:55:46.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:55:46.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:55:46.186 [DEBUG] [Thread-13675] [transport.py] [_log()] userauth is OK
2025-11-26T06:55:46.186 [DEBUG] [Thread-13675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:55:46.187 [DEBUG] [Thread-13675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:55:46.187 [DEBUG] [Thread-13675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:55:46.187 [DEBUG] [Thread-13675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:55:46.202 [INFO] [Thread-13675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:55:46.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:55:46.848 [DEBUG] [Thread-13675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:55:46.848 [DEBUG] [Thread-13675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:55:46.848 [DEBUG] [Thread-13675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:55:46.889 [DEBUG] [Thread-13675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:55:46.889 [DEBUG] [Thread-13675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:55:46.891 [DEBUG] [Thread-13675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:55:46.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:55:46.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:55:46.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:55:46.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:55:46.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:55:46.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:55:46.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:55:46.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:55:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:55:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.204954 -999.00  +21.00  15.79     18   -4.00 1 1 1 1 1   887    0 25.46 13.48 ----- 12.1 15.8 50.6 21.4 24.3 -27.7 24.1 -26.6 22.7 -25.7 22.8 -26.4
2025-11-26T06:55:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:55:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:55:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.204954
2025-11-26T06:55:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:55:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:55:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:55:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:55:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:55:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:55:11', tmtdew=30.29, humidity=12.01, cloud=0.0, wind=16.78, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:55:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:55:46.912 [DEBUG] [Thread-13675] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:55:46.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:55:47.012 [DEBUG] [Thread-13678] [transport.py] [_log()] starting thread (client mode): 0x7376fbb0
2025-11-26T06:55:47.012 [DEBUG] [Thread-13678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:55:47.030 [DEBUG] [Thread-13678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:55:47.030 [INFO] [Thread-13678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] client lang: <none>
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] server lang: <none>
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] kex follows: False
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:55:47.041 [DEBUG] [Thread-13678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:55:47.042 [DEBUG] [Thread-13678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:55:47.042 [DEBUG] [Thread-13678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:55:47.042 [DEBUG] [Thread-13678] [transport.py] [_log()] Compression: none
2025-11-26T06:55:47.042 [DEBUG] [Thread-13678] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:55:47.098 [DEBUG] [Thread-13678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:55:47.098 [DEBUG] [Thread-13678] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:55:47.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:55:47.098 [DEBUG] [Thread-13678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:55:47.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:55:47.155 [DEBUG] [Thread-13678] [transport.py] [_log()] userauth is OK
2025-11-26T06:55:47.155 [DEBUG] [Thread-13678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:55:47.155 [DEBUG] [Thread-13678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:55:47.155 [DEBUG] [Thread-13678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:55:47.155 [DEBUG] [Thread-13678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:55:47.172 [INFO] [Thread-13678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:55:47.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:55:47.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:55:47.979 [DEBUG] [Thread-13678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:55:47.980 [DEBUG] [Thread-13678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:55:48.028 [DEBUG] [Thread-13678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:55:48.028 [DEBUG] [Thread-13678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:55:48.037 [DEBUG] [Thread-13678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:55:48.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:55:48.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:55:48.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:55:48.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:55:48.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:55:48.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:55:48.073 [DEBUG] [Thread-13678] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:55:57.825 [DEBUG] [Thread-13680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:56:12.873 [DEBUG] [Thread-13681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:56:18.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:56:18.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:56:18.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:56:18.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 55, 43), 30.28, 12.51, 0.0, 15.74, 21.47, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:56:18.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:55:43
2025-11-26T06:56:18.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:56:19.066 [DEBUG] [Thread-13682] [transport.py] [_log()] starting thread (client mode): 0x7378d840
2025-11-26T06:56:19.066 [DEBUG] [Thread-13682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:56:19.088 [DEBUG] [Thread-13682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:56:19.088 [INFO] [Thread-13682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] client lang: <none>
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] server lang: <none>
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] kex follows: False
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:56:19.091 [DEBUG] [Thread-13682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:56:19.092 [DEBUG] [Thread-13682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:56:19.092 [DEBUG] [Thread-13682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:56:19.092 [DEBUG] [Thread-13682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:56:19.092 [DEBUG] [Thread-13682] [transport.py] [_log()] Compression: none
2025-11-26T06:56:19.092 [DEBUG] [Thread-13682] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:56:19.107 [DEBUG] [Thread-13682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:56:19.107 [DEBUG] [Thread-13682] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:56:19.107 [DEBUG] [Thread-13682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:56:19.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:56:19.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:56:19.108 [DEBUG] [Thread-13682] [transport.py] [_log()] userauth is OK
2025-11-26T06:56:19.108 [DEBUG] [Thread-13682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:56:19.108 [DEBUG] [Thread-13682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:56:19.108 [DEBUG] [Thread-13682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:56:19.108 [DEBUG] [Thread-13682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:56:19.119 [INFO] [Thread-13682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:56:19.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:56:19.908 [DEBUG] [Thread-13682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:56:19.908 [DEBUG] [Thread-13682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:56:19.908 [DEBUG] [Thread-13682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:56:19.949 [DEBUG] [Thread-13682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:56:19.949 [DEBUG] [Thread-13682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:56:19.952 [DEBUG] [Thread-13682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:56:19.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:56:19.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:56:19.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:56:19.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:56:19.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:56:19.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:56:19.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:56:19.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:56:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:56:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.205302 -999.00  +21.10  15.40     18   -4.10 1 1 1 1 1   887    0 25.06 12.53 ----- 14.2 15.4 47.0 19.9 24.4 -27.3 24.1 -26.4 22.7 -25.8 22.8 -26.9
2025-11-26T06:56:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:56:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:56:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.205302
2025-11-26T06:56:19.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:56:19.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:56:19.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:56:19.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:56:19.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:56:19.980 [DEBUG] [Thread-13682] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:56:19.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:55:43', tmtdew=30.28, humidity=12.51, cloud=0.0, wind=15.74, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:55:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:56:20.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:56:20.076 [DEBUG] [Thread-13685] [transport.py] [_log()] starting thread (client mode): 0x761db0d0
2025-11-26T06:56:20.076 [DEBUG] [Thread-13685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:56:20.091 [DEBUG] [Thread-13685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:56:20.091 [INFO] [Thread-13685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:56:20.098 [DEBUG] [Thread-13685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:56:20.099 [DEBUG] [Thread-13685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:56:20.099 [DEBUG] [Thread-13685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:56:20.099 [DEBUG] [Thread-13685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:56:20.099 [DEBUG] [Thread-13685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:56:20.099 [DEBUG] [Thread-13685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:56:20.099 [DEBUG] [Thread-13685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:56:20.099 [DEBUG] [Thread-13685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:56:20.099 [DEBUG] [Thread-13685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:56:20.099 [DEBUG] [Thread-13685] [transport.py] [_log()] client lang: <none>
2025-11-26T06:56:20.100 [DEBUG] [Thread-13685] [transport.py] [_log()] server lang: <none>
2025-11-26T06:56:20.100 [DEBUG] [Thread-13685] [transport.py] [_log()] kex follows: False
2025-11-26T06:56:20.100 [DEBUG] [Thread-13685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:56:20.100 [DEBUG] [Thread-13685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:56:20.100 [DEBUG] [Thread-13685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:56:20.100 [DEBUG] [Thread-13685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:56:20.100 [DEBUG] [Thread-13685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:56:20.100 [DEBUG] [Thread-13685] [transport.py] [_log()] Compression: none
2025-11-26T06:56:20.101 [DEBUG] [Thread-13685] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:56:20.159 [DEBUG] [Thread-13685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:56:20.160 [DEBUG] [Thread-13685] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:56:20.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:56:20.161 [DEBUG] [Thread-13685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:56:20.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:56:20.218 [DEBUG] [Thread-13685] [transport.py] [_log()] userauth is OK
2025-11-26T06:56:20.219 [DEBUG] [Thread-13685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:56:20.219 [DEBUG] [Thread-13685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:56:20.219 [DEBUG] [Thread-13685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:56:20.219 [DEBUG] [Thread-13685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:56:20.240 [INFO] [Thread-13685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:56:20.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:56:20.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:56:21.104 [DEBUG] [Thread-13685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:56:21.105 [DEBUG] [Thread-13685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:56:21.153 [DEBUG] [Thread-13685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:56:21.153 [DEBUG] [Thread-13685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:56:21.163 [DEBUG] [Thread-13685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:56:21.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:56: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')
2025-11-26T06:56:21.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:56:21.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:56:21.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:56:21.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:56:21.204 [DEBUG] [Thread-13685] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:56:27.913 [DEBUG] [Thread-13687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:56:32.757 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:56:32.759 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:56:38.559 [DEBUG] [Thread-13688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:56:42.960 [DEBUG] [Thread-13689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:56:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:56:51.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:56:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:56:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 56, 17), 30.2, 12.6, 0.0, 15.76, 21.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:56:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:56:17
2025-11-26T06:56:52.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:56:52.174 [DEBUG] [Thread-13690] [transport.py] [_log()] starting thread (client mode): 0x7378f160
2025-11-26T06:56:52.174 [DEBUG] [Thread-13690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:56:52.194 [DEBUG] [Thread-13690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:56:52.194 [INFO] [Thread-13690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:56:52.197 [DEBUG] [Thread-13690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:56:52.197 [DEBUG] [Thread-13690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:56:52.197 [DEBUG] [Thread-13690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:56:52.197 [DEBUG] [Thread-13690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] client lang: <none>
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] server lang: <none>
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] kex follows: False
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:56:52.198 [DEBUG] [Thread-13690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:56:52.199 [DEBUG] [Thread-13690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:56:52.199 [DEBUG] [Thread-13690] [transport.py] [_log()] Compression: none
2025-11-26T06:56:52.199 [DEBUG] [Thread-13690] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:56:52.217 [DEBUG] [Thread-13690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:56:52.218 [DEBUG] [Thread-13690] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:56:52.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:56:52.219 [DEBUG] [Thread-13690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:56:52.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:56:52.222 [DEBUG] [Thread-13690] [transport.py] [_log()] userauth is OK
2025-11-26T06:56:52.222 [DEBUG] [Thread-13690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:56:52.222 [DEBUG] [Thread-13690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:56:52.222 [DEBUG] [Thread-13690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:56:52.222 [DEBUG] [Thread-13690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:56:52.247 [INFO] [Thread-13690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:56:52.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:56:52.846 [DEBUG] [Thread-13690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:56:52.846 [DEBUG] [Thread-13690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:56:52.847 [DEBUG] [Thread-13690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:56:52.887 [DEBUG] [Thread-13690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:56:52.887 [DEBUG] [Thread-13690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:56:52.891 [DEBUG] [Thread-13690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:56:52.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:56:52.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:56:52.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:56:52.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:56:52.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:56:52.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:56:52.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:56:52.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:56:52.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:56:52.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.205649 -999.00  +21.10  19.32     18   -4.10 1 1 1 1 1   887    0 25.30 13.08 ----- 16.3 19.3 41.2 21.3 24.4 -27.6 24.1 -26.6 22.7 -25.7 22.8 -26.4
2025-11-26T06:56:52.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:56:52.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:56:52.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.205649
2025-11-26T06:56:52.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:56:52.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:56:52.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:56:52.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:56:52.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:56:52.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:56:17', tmtdew=30.2, humidity=12.6, cloud=0.0, wind=15.76, temperature=21.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:56:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:56:52.918 [DEBUG] [Thread-13690] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:56:53.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:56:53.013 [DEBUG] [Thread-13693] [transport.py] [_log()] starting thread (client mode): 0x7378e3e0
2025-11-26T06:56:53.013 [DEBUG] [Thread-13693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:56:53.028 [DEBUG] [Thread-13693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:56:53.029 [INFO] [Thread-13693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:56:53.036 [DEBUG] [Thread-13693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:56:53.036 [DEBUG] [Thread-13693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] client lang: <none>
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] server lang: <none>
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] kex follows: False
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] Compression: none
2025-11-26T06:56:53.037 [DEBUG] [Thread-13693] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:56:53.094 [DEBUG] [Thread-13693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:56:53.095 [DEBUG] [Thread-13693] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:56:53.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:56:53.096 [DEBUG] [Thread-13693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:56:53.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:56:53.153 [DEBUG] [Thread-13693] [transport.py] [_log()] userauth is OK
2025-11-26T06:56:53.153 [DEBUG] [Thread-13693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:56:53.153 [DEBUG] [Thread-13693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:56:53.153 [DEBUG] [Thread-13693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:56:53.153 [DEBUG] [Thread-13693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:56:53.176 [INFO] [Thread-13693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:56:53.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:56:53.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:56:54.041 [DEBUG] [Thread-13693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:56:54.042 [DEBUG] [Thread-13693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:56:54.090 [DEBUG] [Thread-13693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:56:54.090 [DEBUG] [Thread-13693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:56:54.099 [DEBUG] [Thread-13693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:56:54.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:56:54.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:56:54.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:56:54.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:56:54.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:56:54.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:56:54.136 [DEBUG] [Thread-13693] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:56:57.996 [DEBUG] [Thread-13695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:57:13.048 [DEBUG] [Thread-13696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:57:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:57:24.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:57:24.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:57:24.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 57, 21), 30.26, 12.05, 0.0, 15.92, 21.53, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:57:24.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:57:21
2025-11-26T06:57:24.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:57:25.094 [DEBUG] [Thread-13697] [transport.py] [_log()] starting thread (client mode): 0x7376c610
2025-11-26T06:57:25.094 [DEBUG] [Thread-13697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:57:25.115 [DEBUG] [Thread-13697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:57:25.115 [INFO] [Thread-13697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:57:25.119 [DEBUG] [Thread-13697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:57:25.119 [DEBUG] [Thread-13697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:57:25.119 [DEBUG] [Thread-13697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:57:25.119 [DEBUG] [Thread-13697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:57:25.119 [DEBUG] [Thread-13697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:57:25.119 [DEBUG] [Thread-13697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:57:25.119 [DEBUG] [Thread-13697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:57:25.119 [DEBUG] [Thread-13697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] client lang: <none>
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] server lang: <none>
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] kex follows: False
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] Compression: none
2025-11-26T06:57:25.120 [DEBUG] [Thread-13697] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:57:25.138 [DEBUG] [Thread-13697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:57:25.138 [DEBUG] [Thread-13697] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:57:25.139 [DEBUG] [Thread-13697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:57:25.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:57:25.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:57:25.141 [DEBUG] [Thread-13697] [transport.py] [_log()] userauth is OK
2025-11-26T06:57:25.141 [DEBUG] [Thread-13697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:57:25.141 [DEBUG] [Thread-13697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:57:25.141 [DEBUG] [Thread-13697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:57:25.141 [DEBUG] [Thread-13697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:57:25.160 [INFO] [Thread-13697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:57:25.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:57:25.910 [DEBUG] [Thread-13697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:57:25.911 [DEBUG] [Thread-13697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:57:25.911 [DEBUG] [Thread-13697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:57:25.952 [DEBUG] [Thread-13697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:57:25.952 [DEBUG] [Thread-13697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:57:25.955 [DEBUG] [Thread-13697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:57:25.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:57:25.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:57:25.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:57:25.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:57:25.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:57:25.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:57:25.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:57:25.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:57:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:57:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.205996 -999.00  +21.10  15.85     18   -4.10 1 1 1 1 1   887    0 25.60 14.58 ----- 16.4 15.8 48.6 18.6 24.4 -27.3 24.1 -26.5 22.7 -26.1 22.8 -26.4
2025-11-26T06:57:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:57:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:57:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.205996
2025-11-26T06:57:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:57:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:57:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:57:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:57:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:57:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:57:21', tmtdew=30.26, humidity=12.05, cloud=0.0, wind=15.92, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:56:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:57:25.980 [DEBUG] [Thread-13697] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:57:26.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:57:26.075 [DEBUG] [Thread-13700] [transport.py] [_log()] starting thread (client mode): 0x7376ec20
2025-11-26T06:57:26.075 [DEBUG] [Thread-13700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:57:26.090 [DEBUG] [Thread-13700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:57:26.090 [INFO] [Thread-13700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:57:26.097 [DEBUG] [Thread-13700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:57:26.097 [DEBUG] [Thread-13700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] client lang: <none>
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] server lang: <none>
2025-11-26T06:57:26.098 [DEBUG] [Thread-13700] [transport.py] [_log()] kex follows: False
2025-11-26T06:57:26.099 [DEBUG] [Thread-13700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:57:26.099 [DEBUG] [Thread-13700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:57:26.099 [DEBUG] [Thread-13700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:57:26.099 [DEBUG] [Thread-13700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:57:26.099 [DEBUG] [Thread-13700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:57:26.099 [DEBUG] [Thread-13700] [transport.py] [_log()] Compression: none
2025-11-26T06:57:26.099 [DEBUG] [Thread-13700] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:57:26.160 [DEBUG] [Thread-13700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:57:26.161 [DEBUG] [Thread-13700] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:57:26.162 [DEBUG] [Thread-13700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:57:26.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:57:26.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:57:26.217 [DEBUG] [Thread-13700] [transport.py] [_log()] userauth is OK
2025-11-26T06:57:26.217 [DEBUG] [Thread-13700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:57:26.217 [DEBUG] [Thread-13700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:57:26.217 [DEBUG] [Thread-13700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:57:26.217 [DEBUG] [Thread-13700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:57:26.236 [INFO] [Thread-13700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:57:26.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:57:26.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:57:27.069 [DEBUG] [Thread-13700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:57:27.069 [DEBUG] [Thread-13700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:57:27.117 [DEBUG] [Thread-13700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:57:27.117 [DEBUG] [Thread-13700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:57:27.126 [DEBUG] [Thread-13700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:57:27.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:57:27.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:57:27.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:57:27.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:57:27.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:57:27.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:57:27.163 [DEBUG] [Thread-13700] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:57:28.085 [DEBUG] [Thread-13702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:57:32.901 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:57:32.902 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:57:38.608 [DEBUG] [Thread-13703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:57:43.140 [DEBUG] [Thread-13704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:57:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:57:57.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:57:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:57:57.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 57, 53), 30.3, 12.51, 0.0, 14.73, 21.55, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:57:57.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:57:53
2025-11-26T06:57:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:57:58.129 [DEBUG] [Thread-13705] [transport.py] [_log()] starting thread (client mode): 0x761dae60
2025-11-26T06:57:58.129 [DEBUG] [Thread-13705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:57:58.148 [DEBUG] [Thread-13705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:57:58.148 [INFO] [Thread-13705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] client lang: <none>
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] server lang: <none>
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] kex follows: False
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] Compression: none
2025-11-26T06:57:58.152 [DEBUG] [Thread-13705] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:57:58.167 [DEBUG] [Thread-13705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:57:58.167 [DEBUG] [Thread-13705] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:57:58.168 [DEBUG] [Thread-13705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:57:58.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:57:58.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:57:58.169 [DEBUG] [Thread-13705] [transport.py] [_log()] userauth is OK
2025-11-26T06:57:58.169 [DEBUG] [Thread-13705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:57:58.169 [DEBUG] [Thread-13705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:57:58.169 [DEBUG] [Thread-13705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:57:58.169 [DEBUG] [Thread-13705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:57:58.177 [DEBUG] [Thread-13707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:57:58.183 [INFO] [Thread-13705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:57:58.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:57:58.817 [DEBUG] [Thread-13705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:57:58.817 [DEBUG] [Thread-13705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:57:58.817 [DEBUG] [Thread-13705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:57:58.857 [DEBUG] [Thread-13705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:57:58.857 [DEBUG] [Thread-13705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:57:58.860 [DEBUG] [Thread-13705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:57:58.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:57:58.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:57:58.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:57:58.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:57:58.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:57:58.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:57:58.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:57:58.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:57:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:57:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.206691 -999.00  +21.10  18.10     18   -4.00 1 1 1 1 1   887    0 25.20 13.98 ----- 15.9 18.1 39.2 19.2 24.4 -27.5 24.2 -26.6 22.7 -25.6 22.8 -26.3
2025-11-26T06:57:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:57:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:57:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.206691
2025-11-26T06:57:58.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:57:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:57:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:57:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:57:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:57:58.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:57:53', tmtdew=30.3, humidity=12.51, cloud=0.0, wind=14.73, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:57:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:57:58.878 [DEBUG] [Thread-13705] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:57:58.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:57:58.964 [DEBUG] [Thread-13709] [transport.py] [_log()] starting thread (client mode): 0x73782410
2025-11-26T06:57:58.964 [DEBUG] [Thread-13709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:57:58.979 [DEBUG] [Thread-13709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:57:58.979 [INFO] [Thread-13709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:57:58.986 [DEBUG] [Thread-13709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] client lang: <none>
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] server lang: <none>
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] kex follows: False
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] Compression: none
2025-11-26T06:57:58.987 [DEBUG] [Thread-13709] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:57:59.045 [DEBUG] [Thread-13709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:57:59.045 [DEBUG] [Thread-13709] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:57:59.046 [DEBUG] [Thread-13709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:57:59.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:57:59.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:57:59.107 [DEBUG] [Thread-13709] [transport.py] [_log()] userauth is OK
2025-11-26T06:57:59.107 [DEBUG] [Thread-13709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:57:59.107 [DEBUG] [Thread-13709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:57:59.108 [DEBUG] [Thread-13709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:57:59.108 [DEBUG] [Thread-13709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:57:59.129 [INFO] [Thread-13709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:57:59.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:57:59.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:57:59.969 [DEBUG] [Thread-13709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:57:59.969 [DEBUG] [Thread-13709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:58:00.016 [DEBUG] [Thread-13709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:58:00.017 [DEBUG] [Thread-13709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:58:00.026 [DEBUG] [Thread-13709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:58:00.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:58:00.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:58: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') -> 00000000
2025-11-26T06:58:00.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:58:00.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:58:00.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:58:00.065 [DEBUG] [Thread-13709] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:58:13.211 [DEBUG] [Thread-13711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:58:28.260 [DEBUG] [Thread-13712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:58:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:58:30.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:58:30.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:58:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 58, 25), 30.29, 12.53, 0.0, 16.07, 21.62, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:58:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:58:25
2025-11-26T06:58:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:58:31.059 [DEBUG] [Thread-13713] [transport.py] [_log()] starting thread (client mode): 0x7376e740
2025-11-26T06:58:31.059 [DEBUG] [Thread-13713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:58:31.079 [DEBUG] [Thread-13713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:58:31.079 [INFO] [Thread-13713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] client lang: <none>
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] server lang: <none>
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] kex follows: False
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] Compression: none
2025-11-26T06:58:31.083 [DEBUG] [Thread-13713] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:58:31.099 [DEBUG] [Thread-13713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:58:31.099 [DEBUG] [Thread-13713] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:58:31.100 [DEBUG] [Thread-13713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:58:31.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:58:31.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:58:31.101 [DEBUG] [Thread-13713] [transport.py] [_log()] userauth is OK
2025-11-26T06:58:31.101 [DEBUG] [Thread-13713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:58:31.101 [DEBUG] [Thread-13713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:58:31.101 [DEBUG] [Thread-13713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:58:31.101 [DEBUG] [Thread-13713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:58:31.138 [INFO] [Thread-13713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:58:31.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:58:31.841 [DEBUG] [Thread-13713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:58:31.841 [DEBUG] [Thread-13713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:58:31.841 [DEBUG] [Thread-13713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:58:31.882 [DEBUG] [Thread-13713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:58:31.882 [DEBUG] [Thread-13713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:58:31.885 [DEBUG] [Thread-13713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:58:31.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:58:31.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:58:31.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:58:31.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:58:31.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:58:31.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:58:31.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:58:31.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:58:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:58:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.207038 -999.00  +21.10  16.32     18   -4.10 1 1 1 1 1   887    0 25.83 15.30 ----- 17.4 16.3 37.2 20.8 24.4 -27.3 24.2 -26.6 22.7 -26.1 22.8 -26.4
2025-11-26T06:58:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:58:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.207038
2025-11-26T06:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:58:25', tmtdew=30.29, humidity=12.53, cloud=0.0, wind=16.07, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:58:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:58:31.907 [DEBUG] [Thread-13713] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:58:31.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:58:31.992 [DEBUG] [Thread-13716] [transport.py] [_log()] starting thread (client mode): 0x7376d7e0
2025-11-26T06:58:31.993 [DEBUG] [Thread-13716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:58:32.009 [DEBUG] [Thread-13716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:58:32.009 [INFO] [Thread-13716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] client lang: <none>
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] server lang: <none>
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] kex follows: False
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] Compression: none
2025-11-26T06:58:32.020 [DEBUG] [Thread-13716] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:58:32.077 [DEBUG] [Thread-13716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:58:32.077 [DEBUG] [Thread-13716] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:58:32.077 [DEBUG] [Thread-13716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:58:32.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:58:32.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:58:32.134 [DEBUG] [Thread-13716] [transport.py] [_log()] userauth is OK
2025-11-26T06:58:32.134 [DEBUG] [Thread-13716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:58:32.134 [DEBUG] [Thread-13716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:58:32.134 [DEBUG] [Thread-13716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:58:32.134 [DEBUG] [Thread-13716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:58:32.148 [INFO] [Thread-13716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:58:32.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:58:32.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:58:33.008 [DEBUG] [Thread-13716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:58:33.008 [DEBUG] [Thread-13716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:58:33.045 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:58:33.045 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:58:33.055 [DEBUG] [Thread-13716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:58:33.055 [DEBUG] [Thread-13716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:58:33.063 [DEBUG] [Thread-13716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:58:33.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:58:33.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:58:33.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:58:33.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:58:33.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:58:33.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:58:33.094 [DEBUG] [Thread-13716] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:58:38.660 [DEBUG] [Thread-13718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:58:43.295 [DEBUG] [Thread-13719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:58:58.347 [DEBUG] [Thread-13720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:59:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:59:03.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:59:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:59:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 58, 57), 30.36, 12.01, 0.0, 14.33, 21.65, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:59:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:58:57
2025-11-26T06:59:03.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:59:04.052 [DEBUG] [Thread-13721] [transport.py] [_log()] starting thread (client mode): 0x7376e7a0
2025-11-26T06:59:04.052 [DEBUG] [Thread-13721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:59:04.072 [DEBUG] [Thread-13721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:59:04.073 [INFO] [Thread-13721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] client lang: <none>
2025-11-26T06:59:04.076 [DEBUG] [Thread-13721] [transport.py] [_log()] server lang: <none>
2025-11-26T06:59:04.077 [DEBUG] [Thread-13721] [transport.py] [_log()] kex follows: False
2025-11-26T06:59:04.077 [DEBUG] [Thread-13721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:59:04.077 [DEBUG] [Thread-13721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:59:04.077 [DEBUG] [Thread-13721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:59:04.077 [DEBUG] [Thread-13721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:59:04.077 [DEBUG] [Thread-13721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:59:04.077 [DEBUG] [Thread-13721] [transport.py] [_log()] Compression: none
2025-11-26T06:59:04.077 [DEBUG] [Thread-13721] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:59:04.087 [DEBUG] [Thread-13721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:59:04.088 [DEBUG] [Thread-13721] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:59:04.089 [DEBUG] [Thread-13721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:59:04.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:59:04.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:59:04.092 [DEBUG] [Thread-13721] [transport.py] [_log()] userauth is OK
2025-11-26T06:59:04.092 [DEBUG] [Thread-13721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:59:04.092 [DEBUG] [Thread-13721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:59:04.092 [DEBUG] [Thread-13721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:59:04.092 [DEBUG] [Thread-13721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:59:04.112 [INFO] [Thread-13721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:59:04.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:59:04.769 [DEBUG] [Thread-13721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:59:04.769 [DEBUG] [Thread-13721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:59:04.769 [DEBUG] [Thread-13721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:59:04.810 [DEBUG] [Thread-13721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:59:04.810 [DEBUG] [Thread-13721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:59:04.814 [DEBUG] [Thread-13721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:59:04.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:59:04.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:59:04.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:59:04.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:59:04.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:59:04.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:59:04.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:59:04.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:59:04.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:59:04.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.207385 -999.00  +21.10  14.07     18   -4.00 1 1 1 1 1   887    0 25.58 14.23 ----- 13.4 14.1 40.4 18.8 24.4 -27.4 24.2 -26.3 22.8 -26.0 22.9 -26.3
2025-11-26T06:59:04.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:59:04.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:59:04.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.207385
2025-11-26T06:59:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:59:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:59:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:59:04.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:59:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:59:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:58:57', tmtdew=30.36, humidity=12.01, cloud=0.0, wind=14.33, temperature=21.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:58:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:59:04.839 [DEBUG] [Thread-13721] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:59:04.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:59:04.935 [DEBUG] [Thread-13724] [transport.py] [_log()] starting thread (client mode): 0x70d2a230
2025-11-26T06:59:04.935 [DEBUG] [Thread-13724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:59:04.952 [DEBUG] [Thread-13724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:59:04.952 [INFO] [Thread-13724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:59:04.961 [DEBUG] [Thread-13724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:59:04.961 [DEBUG] [Thread-13724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:59:04.961 [DEBUG] [Thread-13724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] client lang: <none>
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] server lang: <none>
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] kex follows: False
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] Compression: none
2025-11-26T06:59:04.962 [DEBUG] [Thread-13724] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:59:05.020 [DEBUG] [Thread-13724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:59:05.021 [DEBUG] [Thread-13724] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:59:05.022 [DEBUG] [Thread-13724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:59:05.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:59:05.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:59:05.079 [DEBUG] [Thread-13724] [transport.py] [_log()] userauth is OK
2025-11-26T06:59:05.079 [DEBUG] [Thread-13724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:59:05.079 [DEBUG] [Thread-13724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:59:05.079 [DEBUG] [Thread-13724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:59:05.079 [DEBUG] [Thread-13724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:59:05.098 [INFO] [Thread-13724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:59:05.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:59:05.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:59:05.942 [DEBUG] [Thread-13724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:59:05.943 [DEBUG] [Thread-13724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:59:05.990 [DEBUG] [Thread-13724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:59:05.991 [DEBUG] [Thread-13724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:59:06.000 [DEBUG] [Thread-13724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:59:06.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:59:06.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:59:06.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:59:06.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:59:06.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:59:06.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:59:06.037 [DEBUG] [Thread-13724] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:59:13.373 [DEBUG] [Thread-13726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:59:28.415 [DEBUG] [Thread-13727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:59:33.199 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:59:33.201 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:59:36.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T06:59:36.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T06:59:36.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T06:59:36.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 6, 59, 29), 30.35, 12.01, 0.0, 13.13, 21.62, 0, 0, 0, 2, 0, 0),)
2025-11-26T06:59:36.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 06:59:29
2025-11-26T06:59:36.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T06:59:36.967 [DEBUG] [Thread-13728] [transport.py] [_log()] starting thread (client mode): 0x761dac80
2025-11-26T06:59:36.967 [DEBUG] [Thread-13728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:59:36.987 [DEBUG] [Thread-13728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T06:59:36.987 [INFO] [Thread-13728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T06:59:36.990 [DEBUG] [Thread-13728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] client lang: <none>
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] server lang: <none>
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] kex follows: False
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:59:36.991 [DEBUG] [Thread-13728] [transport.py] [_log()] Compression: none
2025-11-26T06:59:36.992 [DEBUG] [Thread-13728] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:59:37.010 [DEBUG] [Thread-13728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:59:37.010 [DEBUG] [Thread-13728] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:59:37.011 [DEBUG] [Thread-13728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T06:59:37.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T06:59:37.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:59:37.053 [DEBUG] [Thread-13728] [transport.py] [_log()] userauth is OK
2025-11-26T06:59:37.053 [DEBUG] [Thread-13728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:59:37.053 [DEBUG] [Thread-13728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:59:37.053 [DEBUG] [Thread-13728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T06:59:37.053 [DEBUG] [Thread-13728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:59:37.084 [INFO] [Thread-13728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:59:37.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:59:37.818 [DEBUG] [Thread-13728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:59:37.818 [DEBUG] [Thread-13728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:59:37.819 [DEBUG] [Thread-13728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T06:59:37.859 [DEBUG] [Thread-13728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:59:37.859 [DEBUG] [Thread-13728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:59:37.863 [DEBUG] [Thread-13728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:59:37.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:59:37.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T06:59:37.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T06:59:37.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T06:59:37.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:59:37.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T06:59:37.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:59:37.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:59:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T06:59:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.207732 -999.00  +21.10  16.86     18   -4.00 1 1 1 1 1   887    0 25.89 13.21 ----- 14.4 16.9 38.0 19.5 24.5 -27.2 24.3 -26.7 22.8 -25.5 22.9 -26.5
2025-11-26T06:59:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T06:59:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T06:59:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.207732
2025-11-26T06:59:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T06:59:37.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T06:59:37.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T06:59:37.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T06:59:37.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T06:59:37.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T06:59:29', tmtdew=30.35, humidity=12.01, cloud=0.0, wind=13.13, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:59:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T06:59:37.891 [DEBUG] [Thread-13728] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:59:37.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T06:59:37.985 [DEBUG] [Thread-13731] [transport.py] [_log()] starting thread (client mode): 0x7376dc60
2025-11-26T06:59:37.985 [DEBUG] [Thread-13731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T06:59:37.999 [DEBUG] [Thread-13731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T06:59:37.999 [INFO] [Thread-13731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T06:59:38.006 [DEBUG] [Thread-13731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T06:59:38.006 [DEBUG] [Thread-13731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T06:59:38.006 [DEBUG] [Thread-13731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] client lang: <none>
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] server lang: <none>
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] kex follows: False
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] Compression: none
2025-11-26T06:59:38.007 [DEBUG] [Thread-13731] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T06:59:38.065 [DEBUG] [Thread-13731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T06:59:38.066 [DEBUG] [Thread-13731] [transport.py] [_log()] Switch to new keys ...
2025-11-26T06:59:38.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T06:59:38.067 [DEBUG] [Thread-13731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T06:59:38.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T06:59:38.121 [DEBUG] [Thread-13731] [transport.py] [_log()] userauth is OK
2025-11-26T06:59:38.121 [DEBUG] [Thread-13731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T06:59:38.122 [DEBUG] [Thread-13731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T06:59:38.122 [DEBUG] [Thread-13731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T06:59:38.122 [DEBUG] [Thread-13731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T06:59:38.140 [INFO] [Thread-13731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T06:59:38.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T06:59:38.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T06:59:38.731 [DEBUG] [Thread-13733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:59:38.963 [DEBUG] [Thread-13731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T06:59:38.963 [DEBUG] [Thread-13731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T06:59:39.011 [DEBUG] [Thread-13731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T06:59:39.011 [DEBUG] [Thread-13731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T06:59:39.020 [DEBUG] [Thread-13731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T06:59:39.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T06:59:39.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T06:59:39.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T06:59:39.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T06:59:39.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T06:59:39.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T06:59:39.057 [DEBUG] [Thread-13731] [transport.py] [_log()] EOF in transport thread
2025-11-26T06:59:43.453 [DEBUG] [Thread-13734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T06:59:58.505 [DEBUG] [Thread-13735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:00:09.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:00:09.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:00:09.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:00:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 0, 1), 30.37, 12.0, 0.0, 14.19, 21.6, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:00:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:00:01
2025-11-26T07:00:09.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:00:09.975 [DEBUG] [Thread-13736] [transport.py] [_log()] starting thread (client mode): 0x73781d50
2025-11-26T07:00:09.975 [DEBUG] [Thread-13736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:00:09.995 [DEBUG] [Thread-13736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:00:09.995 [INFO] [Thread-13736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] client lang: <none>
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] server lang: <none>
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] kex follows: False
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:00:09.999 [DEBUG] [Thread-13736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:00:10.000 [DEBUG] [Thread-13736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:00:10.000 [DEBUG] [Thread-13736] [transport.py] [_log()] Compression: none
2025-11-26T07:00:10.000 [DEBUG] [Thread-13736] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:00:10.008 [DEBUG] [Thread-13736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:00:10.008 [DEBUG] [Thread-13736] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:00:10.009 [DEBUG] [Thread-13736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:00:10.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:00:10.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:00:10.053 [DEBUG] [Thread-13736] [transport.py] [_log()] userauth is OK
2025-11-26T07:00:10.053 [DEBUG] [Thread-13736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:00:10.053 [DEBUG] [Thread-13736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:00:10.053 [DEBUG] [Thread-13736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:00:10.053 [DEBUG] [Thread-13736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:00:10.085 [INFO] [Thread-13736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:00:10.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:00:11.150 [DEBUG] [Thread-13736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:00:11.150 [DEBUG] [Thread-13736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:00:11.151 [DEBUG] [Thread-13736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:00:11.192 [DEBUG] [Thread-13736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:00:11.192 [DEBUG] [Thread-13736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:00:11.195 [DEBUG] [Thread-13736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:00:11.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:00:11.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:00:11.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:00:11.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:00:11.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:00:11.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:00:11.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:00:11.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:00:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:00:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.208080 -999.00  +21.20  15.51     18   -3.90 1 1 1 1 1   887    0 25.09 13.58 ----- 14.3 15.5 31.0 18.6 24.5 -27.3 24.3 -26.6 22.8 -25.7 22.9 -26.1
2025-11-26T07:00:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:00:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:00:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.208080
2025-11-26T07:00:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:00:11.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:00:11.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:00:11.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:00:11.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:00:11.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:00:01', tmtdew=30.37, humidity=12.0, cloud=0.0, wind=14.19, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T04:59:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:00:11.223 [DEBUG] [Thread-13736] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:00:11.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:00:11.318 [DEBUG] [Thread-13739] [transport.py] [_log()] starting thread (client mode): 0x7376d990
2025-11-26T07:00:11.318 [DEBUG] [Thread-13739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:00:11.337 [DEBUG] [Thread-13739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:00:11.338 [INFO] [Thread-13739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:00:11.345 [DEBUG] [Thread-13739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:00:11.346 [DEBUG] [Thread-13739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:00:11.346 [DEBUG] [Thread-13739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:00:11.346 [DEBUG] [Thread-13739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:00:11.346 [DEBUG] [Thread-13739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:00:11.346 [DEBUG] [Thread-13739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:00:11.346 [DEBUG] [Thread-13739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:00:11.346 [DEBUG] [Thread-13739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:00:11.346 [DEBUG] [Thread-13739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:00:11.346 [DEBUG] [Thread-13739] [transport.py] [_log()] client lang: <none>
2025-11-26T07:00:11.347 [DEBUG] [Thread-13739] [transport.py] [_log()] server lang: <none>
2025-11-26T07:00:11.347 [DEBUG] [Thread-13739] [transport.py] [_log()] kex follows: False
2025-11-26T07:00:11.347 [DEBUG] [Thread-13739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:00:11.347 [DEBUG] [Thread-13739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:00:11.347 [DEBUG] [Thread-13739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:00:11.347 [DEBUG] [Thread-13739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:00:11.347 [DEBUG] [Thread-13739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:00:11.348 [DEBUG] [Thread-13739] [transport.py] [_log()] Compression: none
2025-11-26T07:00:11.348 [DEBUG] [Thread-13739] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:00:11.404 [DEBUG] [Thread-13739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:00:11.405 [DEBUG] [Thread-13739] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:00:11.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:00:11.406 [DEBUG] [Thread-13739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:00:11.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:00:11.461 [DEBUG] [Thread-13739] [transport.py] [_log()] userauth is OK
2025-11-26T07:00:11.461 [DEBUG] [Thread-13739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:00:11.461 [DEBUG] [Thread-13739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:00:11.461 [DEBUG] [Thread-13739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:00:11.461 [DEBUG] [Thread-13739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:00:11.480 [INFO] [Thread-13739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:00:11.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:00:11.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:00:12.314 [DEBUG] [Thread-13739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:00:12.314 [DEBUG] [Thread-13739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:00:12.361 [DEBUG] [Thread-13739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:00:12.361 [DEBUG] [Thread-13739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:00:12.370 [DEBUG] [Thread-13739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:00:12.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:00:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:00:12.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:00:12.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:00:12.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:00:12.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:00:12.405 [DEBUG] [Thread-13739] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:00:13.541 [DEBUG] [Thread-13741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:00:28.590 [DEBUG] [Thread-13742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:00:33.342 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:00:33.344 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:00:38.780 [DEBUG] [Thread-13743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:00:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:00:42.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:00:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:00:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 0, 33), 30.74, 11.99, 0.0, 19.55, 22.13, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:00:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:00:33
2025-11-26T07:00:43.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:00:43.359 [DEBUG] [Thread-13744] [transport.py] [_log()] starting thread (client mode): 0x70d2b430
2025-11-26T07:00:43.360 [DEBUG] [Thread-13744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:00:43.380 [DEBUG] [Thread-13744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:00:43.380 [INFO] [Thread-13744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] client lang: <none>
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] server lang: <none>
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] kex follows: False
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] Compression: none
2025-11-26T07:00:43.383 [DEBUG] [Thread-13744] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:00:43.401 [DEBUG] [Thread-13744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:00:43.401 [DEBUG] [Thread-13744] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:00:43.402 [DEBUG] [Thread-13744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:00:43.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:00:43.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:00:43.404 [DEBUG] [Thread-13744] [transport.py] [_log()] userauth is OK
2025-11-26T07:00:43.404 [DEBUG] [Thread-13744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:00:43.405 [DEBUG] [Thread-13744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:00:43.405 [DEBUG] [Thread-13744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:00:43.405 [DEBUG] [Thread-13744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:00:43.428 [INFO] [Thread-13744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:00:43.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:00:43.630 [DEBUG] [Thread-13746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:00:44.099 [DEBUG] [Thread-13744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:00:44.099 [DEBUG] [Thread-13744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:00:44.100 [DEBUG] [Thread-13744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:00:44.141 [DEBUG] [Thread-13744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:00:44.141 [DEBUG] [Thread-13744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:00:44.145 [DEBUG] [Thread-13744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:00:44.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:00:44.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:00:44.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:00:44.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:00:44.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:00:44.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:00:44.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:00:44.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:00:44.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:00:44.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.208427 -999.00  +21.20  14.37     17   -4.00 1 1 1 1 1   887    0 25.47 13.55 ----- 14.6 14.4 43.4 19.9 24.6 -27.1 24.4 -26.7 22.8 -25.3 22.9 -26.3
2025-11-26T07:00:44.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:00:44.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:00:44.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.208427
2025-11-26T07:00:44.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:00:44.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:00:44.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:00:44.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:00:44.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:00:44.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:00:33', tmtdew=30.74, humidity=11.99, cloud=0.0, wind=19.55, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:00:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:00:44.170 [DEBUG] [Thread-13744] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:00:44.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:00:44.265 [DEBUG] [Thread-13748] [transport.py] [_log()] starting thread (client mode): 0x70d0ceb0
2025-11-26T07:00:44.266 [DEBUG] [Thread-13748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:00:44.281 [DEBUG] [Thread-13748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:00:44.281 [INFO] [Thread-13748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] client lang: <none>
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] server lang: <none>
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] kex follows: False
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:00:44.289 [DEBUG] [Thread-13748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:00:44.290 [DEBUG] [Thread-13748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:00:44.290 [DEBUG] [Thread-13748] [transport.py] [_log()] Compression: none
2025-11-26T07:00:44.290 [DEBUG] [Thread-13748] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:00:44.349 [DEBUG] [Thread-13748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:00:44.349 [DEBUG] [Thread-13748] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:00:44.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:00:44.350 [DEBUG] [Thread-13748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:00:44.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:00:44.404 [DEBUG] [Thread-13748] [transport.py] [_log()] userauth is OK
2025-11-26T07:00:44.405 [DEBUG] [Thread-13748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:00:44.405 [DEBUG] [Thread-13748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:00:44.405 [DEBUG] [Thread-13748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:00:44.405 [DEBUG] [Thread-13748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:00:44.423 [INFO] [Thread-13748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:00:44.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:00:44.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:00:45.267 [DEBUG] [Thread-13748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:00:45.267 [DEBUG] [Thread-13748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:00:45.314 [DEBUG] [Thread-13748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:00:45.315 [DEBUG] [Thread-13748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:00:45.323 [DEBUG] [Thread-13748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:00:45.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:00:45.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:00:45.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:00:45.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:00:45.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:00:45.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:00:45.357 [DEBUG] [Thread-13748] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:00:58.668 [DEBUG] [Thread-13750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:01:13.704 [DEBUG] [Thread-13751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:01:15.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:01:15.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:01:15.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:01:16.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 1, 5), 30.36, 12.01, 0.0, 12.95, 21.7, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:01:16.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:01:05
2025-11-26T07:01:16.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:01:16.289 [DEBUG] [Thread-13752] [transport.py] [_log()] starting thread (client mode): 0x70d0c880
2025-11-26T07:01:16.289 [DEBUG] [Thread-13752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:01:16.310 [DEBUG] [Thread-13752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:01:16.310 [INFO] [Thread-13752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:01:16.313 [DEBUG] [Thread-13752] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] client lang: <none>
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] server lang: <none>
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] kex follows: False
2025-11-26T07:01:16.314 [DEBUG] [Thread-13752] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:01:16.315 [DEBUG] [Thread-13752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:01:16.315 [DEBUG] [Thread-13752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:01:16.315 [DEBUG] [Thread-13752] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:01:16.315 [DEBUG] [Thread-13752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:01:16.315 [DEBUG] [Thread-13752] [transport.py] [_log()] Compression: none
2025-11-26T07:01:16.315 [DEBUG] [Thread-13752] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:01:16.334 [DEBUG] [Thread-13752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:01:16.334 [DEBUG] [Thread-13752] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:01:16.335 [DEBUG] [Thread-13752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:01:16.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:01:16.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:01:16.336 [DEBUG] [Thread-13752] [transport.py] [_log()] userauth is OK
2025-11-26T07:01:16.336 [DEBUG] [Thread-13752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:01:16.337 [DEBUG] [Thread-13752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:01:16.337 [DEBUG] [Thread-13752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:01:16.337 [DEBUG] [Thread-13752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:01:16.357 [INFO] [Thread-13752] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:01:16.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:01:16.976 [DEBUG] [Thread-13752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:01:16.977 [DEBUG] [Thread-13752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:01:16.977 [DEBUG] [Thread-13752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:01:17.018 [DEBUG] [Thread-13752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:01:17.018 [DEBUG] [Thread-13752] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:01:17.022 [DEBUG] [Thread-13752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:01:17.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:01:17.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:01:17.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:01:17.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:01:17.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:01:17.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:01:17.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:01:17.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:01:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:01:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.208774 -999.00  +21.30  16.26     18   -3.90 1 1 1 1 1   887    0 25.90 14.44 ----- 16.5 16.3 40.8 18.4 24.6 -27.1 24.4 -26.3 22.9 -25.5 23.0 -26.4
2025-11-26T07:01:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:01:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:01:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.208774
2025-11-26T07:01:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:01:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:01:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:01:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:01:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:01:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:01:05', tmtdew=30.36, humidity=12.01, cloud=0.0, wind=12.95, temperature=21.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:00:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:01:17.050 [DEBUG] [Thread-13752] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:01:17.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:01:17.146 [DEBUG] [Thread-13755] [transport.py] [_log()] starting thread (client mode): 0x761daa10
2025-11-26T07:01:17.147 [DEBUG] [Thread-13755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:01:17.162 [DEBUG] [Thread-13755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:01:17.162 [INFO] [Thread-13755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:01:17.169 [DEBUG] [Thread-13755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] client lang: <none>
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] server lang: <none>
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] kex follows: False
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:01:17.170 [DEBUG] [Thread-13755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:01:17.171 [DEBUG] [Thread-13755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:01:17.171 [DEBUG] [Thread-13755] [transport.py] [_log()] Compression: none
2025-11-26T07:01:17.171 [DEBUG] [Thread-13755] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:01:17.227 [DEBUG] [Thread-13755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:01:17.228 [DEBUG] [Thread-13755] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:01:17.229 [DEBUG] [Thread-13755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:01:17.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:01:17.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:01:17.283 [DEBUG] [Thread-13755] [transport.py] [_log()] userauth is OK
2025-11-26T07:01:17.284 [DEBUG] [Thread-13755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:01:17.284 [DEBUG] [Thread-13755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:01:17.284 [DEBUG] [Thread-13755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:01:17.284 [DEBUG] [Thread-13755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:01:17.303 [INFO] [Thread-13755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:01:17.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:01:17.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:01:18.210 [DEBUG] [Thread-13755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:01:18.210 [DEBUG] [Thread-13755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:01:18.259 [DEBUG] [Thread-13755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:01:18.259 [DEBUG] [Thread-13755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:01:18.268 [DEBUG] [Thread-13755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:01:18.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:01:18.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:01:18.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:01:18.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:01:18.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:01:18.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:01:18.305 [DEBUG] [Thread-13755] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:01:28.744 [DEBUG] [Thread-13757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:01:33.484 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:01:33.486 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:01:38.830 [DEBUG] [Thread-13758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:01:43.798 [DEBUG] [Thread-13759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:01:48.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:01:48.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:01:48.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:01:48.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 1, 37), 30.42, 12.0, 0.0, 17.57, 21.68, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:01:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:01:37
2025-11-26T07:01:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:01:49.237 [DEBUG] [Thread-13760] [transport.py] [_log()] starting thread (client mode): 0x70d01db0
2025-11-26T07:01:49.237 [DEBUG] [Thread-13760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:01:49.248 [DEBUG] [Thread-13760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:01:49.248 [INFO] [Thread-13760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] client lang: <none>
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] server lang: <none>
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] kex follows: False
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] Compression: none
2025-11-26T07:01:49.251 [DEBUG] [Thread-13760] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:01:49.259 [DEBUG] [Thread-13760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:01:49.259 [DEBUG] [Thread-13760] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:01:49.260 [DEBUG] [Thread-13760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:01:49.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:01:49.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:01:49.261 [DEBUG] [Thread-13760] [transport.py] [_log()] userauth is OK
2025-11-26T07:01:49.261 [DEBUG] [Thread-13760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:01:49.261 [DEBUG] [Thread-13760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:01:49.261 [DEBUG] [Thread-13760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:01:49.261 [DEBUG] [Thread-13760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:01:49.275 [INFO] [Thread-13760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:01:49.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:01:49.921 [DEBUG] [Thread-13760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:01:49.921 [DEBUG] [Thread-13760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:01:49.922 [DEBUG] [Thread-13760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:01:49.962 [DEBUG] [Thread-13760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:01:49.962 [DEBUG] [Thread-13760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:01:49.965 [DEBUG] [Thread-13760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:01:49.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:01:49.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:01:49.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:01:49.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:01:49.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:01:49.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:01:49.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:01:49.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:01:49.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:01:49.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.209121 -999.00  +21.30  16.38     17   -4.00 1 1 1 1 1   887    0 24.83 12.93 ----- 15.5 16.4 37.8 21.2 24.6 -27.3 24.4 -26.7 22.9 -25.8 23.0 -26.4
2025-11-26T07:01:49.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:01:49.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:01:49.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.209121
2025-11-26T07:01:49.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:01:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:01:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:01:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:01:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:01:49.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:01:37', tmtdew=30.42, humidity=12.0, cloud=0.0, wind=17.57, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:01:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:01:49.992 [DEBUG] [Thread-13760] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:01:50.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:01:50.087 [DEBUG] [Thread-13763] [transport.py] [_log()] starting thread (client mode): 0x761da170
2025-11-26T07:01:50.087 [DEBUG] [Thread-13763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:01:50.102 [DEBUG] [Thread-13763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:01:50.102 [INFO] [Thread-13763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] client lang: <none>
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] server lang: <none>
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] kex follows: False
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:01:50.110 [DEBUG] [Thread-13763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:01:50.111 [DEBUG] [Thread-13763] [transport.py] [_log()] Compression: none
2025-11-26T07:01:50.111 [DEBUG] [Thread-13763] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:01:50.169 [DEBUG] [Thread-13763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:01:50.169 [DEBUG] [Thread-13763] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:01:50.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:01:50.169 [DEBUG] [Thread-13763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:01:50.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:01:50.227 [DEBUG] [Thread-13763] [transport.py] [_log()] userauth is OK
2025-11-26T07:01:50.227 [DEBUG] [Thread-13763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:01:50.227 [DEBUG] [Thread-13763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:01:50.227 [DEBUG] [Thread-13763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:01:50.227 [DEBUG] [Thread-13763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:01:50.245 [INFO] [Thread-13763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:01:50.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:01:50.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:01:51.098 [DEBUG] [Thread-13763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:01:51.098 [DEBUG] [Thread-13763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:01:51.146 [DEBUG] [Thread-13763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:01:51.146 [DEBUG] [Thread-13763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:01:51.155 [DEBUG] [Thread-13763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:01:51.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:01:51.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')
2025-11-26T07:01:51.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:01:51.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:01:51.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:01:51.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:01:51.191 [DEBUG] [Thread-13763] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:01:58.840 [DEBUG] [Thread-13765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:02:13.889 [DEBUG] [Thread-13766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:02:21.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:02:21.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:02:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:02:21.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 2, 9), 30.46, 11.98, 0.0, 18.37, 21.75, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:02:21.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:02:09
2025-11-26T07:02:21.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:02:22.130 [DEBUG] [Thread-13767] [transport.py] [_log()] starting thread (client mode): 0x70d283a0
2025-11-26T07:02:22.130 [DEBUG] [Thread-13767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:02:22.152 [DEBUG] [Thread-13767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:02:22.153 [INFO] [Thread-13767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:02:22.156 [DEBUG] [Thread-13767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:02:22.156 [DEBUG] [Thread-13767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] client lang: <none>
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] server lang: <none>
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] kex follows: False
2025-11-26T07:02:22.157 [DEBUG] [Thread-13767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:02:22.158 [DEBUG] [Thread-13767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:02:22.158 [DEBUG] [Thread-13767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:02:22.158 [DEBUG] [Thread-13767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:02:22.158 [DEBUG] [Thread-13767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:02:22.158 [DEBUG] [Thread-13767] [transport.py] [_log()] Compression: none
2025-11-26T07:02:22.158 [DEBUG] [Thread-13767] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:02:22.177 [DEBUG] [Thread-13767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:02:22.178 [DEBUG] [Thread-13767] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:02:22.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:02:22.179 [DEBUG] [Thread-13767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:02:22.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:02:22.181 [DEBUG] [Thread-13767] [transport.py] [_log()] userauth is OK
2025-11-26T07:02:22.181 [DEBUG] [Thread-13767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:02:22.181 [DEBUG] [Thread-13767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:02:22.181 [DEBUG] [Thread-13767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:02:22.182 [DEBUG] [Thread-13767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:02:22.218 [INFO] [Thread-13767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:02:22.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:02:22.857 [DEBUG] [Thread-13767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:02:22.857 [DEBUG] [Thread-13767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:02:22.858 [DEBUG] [Thread-13767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:02:22.898 [DEBUG] [Thread-13767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:02:22.898 [DEBUG] [Thread-13767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:02:22.902 [DEBUG] [Thread-13767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:02:22.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:02:22.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:02:22.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:02:22.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:02:22.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:02:22.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:02:22.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:02:22.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:02:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:02:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.209816 -999.00  +21.30  15.60     17   -4.00 1 1 1 1 1   887    0 26.11 13.06 ----- 13.8 15.6 36.4 20.7 24.7 -27.1 24.4 -26.6 22.9 -26.1 23.1 -26.4
2025-11-26T07:02:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:02:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:02:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.209816
2025-11-26T07:02:22.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:02:22.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:02:22.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:02:22.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:02:22.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:02:22.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:02:09', tmtdew=30.46, humidity=11.98, cloud=0.0, wind=18.37, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:02:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:02:22.929 [DEBUG] [Thread-13767] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:02:23.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:02:23.025 [DEBUG] [Thread-13770] [transport.py] [_log()] starting thread (client mode): 0x73783160
2025-11-26T07:02:23.025 [DEBUG] [Thread-13770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:02:23.040 [DEBUG] [Thread-13770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:02:23.040 [INFO] [Thread-13770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:02:23.053 [DEBUG] [Thread-13770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:02:23.053 [DEBUG] [Thread-13770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:02:23.053 [DEBUG] [Thread-13770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:02:23.053 [DEBUG] [Thread-13770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:02:23.053 [DEBUG] [Thread-13770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:02:23.053 [DEBUG] [Thread-13770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:02:23.053 [DEBUG] [Thread-13770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:02:23.053 [DEBUG] [Thread-13770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] client lang: <none>
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] server lang: <none>
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] kex follows: False
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] Compression: none
2025-11-26T07:02:23.054 [DEBUG] [Thread-13770] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:02:23.109 [DEBUG] [Thread-13770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:02:23.110 [DEBUG] [Thread-13770] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:02:23.110 [DEBUG] [Thread-13770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:02:23.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:02:23.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:02:23.166 [DEBUG] [Thread-13770] [transport.py] [_log()] userauth is OK
2025-11-26T07:02:23.166 [DEBUG] [Thread-13770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:02:23.166 [DEBUG] [Thread-13770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:02:23.166 [DEBUG] [Thread-13770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:02:23.166 [DEBUG] [Thread-13770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:02:23.185 [INFO] [Thread-13770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:02:23.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:02:23.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:02:23.991 [DEBUG] [Thread-13770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:02:23.992 [DEBUG] [Thread-13770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:02:24.040 [DEBUG] [Thread-13770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:02:24.040 [DEBUG] [Thread-13770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:02:24.049 [DEBUG] [Thread-13770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:02:24.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:02:24.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:02:24.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:02:24.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:02:24.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:02:24.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:02:24.083 [DEBUG] [Thread-13770] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:02:28.922 [DEBUG] [Thread-13772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:02:33.630 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:02:33.631 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:02:38.883 [DEBUG] [Thread-13773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:02:43.979 [DEBUG] [Thread-13774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:02:54.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:02:54.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:02:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:02:54.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 2, 41), 30.39, 12.03, 0.0, 15.62, 21.77, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:02:54.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:02:41
2025-11-26T07:02:54.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:02:55.041 [DEBUG] [Thread-13775] [transport.py] [_log()] starting thread (client mode): 0x7378c4c0
2025-11-26T07:02:55.041 [DEBUG] [Thread-13775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:02:55.061 [DEBUG] [Thread-13775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:02:55.061 [INFO] [Thread-13775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] client lang: <none>
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] server lang: <none>
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] kex follows: False
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:02:55.064 [DEBUG] [Thread-13775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:02:55.065 [DEBUG] [Thread-13775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:02:55.065 [DEBUG] [Thread-13775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:02:55.065 [DEBUG] [Thread-13775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:02:55.065 [DEBUG] [Thread-13775] [transport.py] [_log()] Compression: none
2025-11-26T07:02:55.065 [DEBUG] [Thread-13775] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:02:55.080 [DEBUG] [Thread-13775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:02:55.080 [DEBUG] [Thread-13775] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:02:55.080 [DEBUG] [Thread-13775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:02:55.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:02:55.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:02:55.081 [DEBUG] [Thread-13775] [transport.py] [_log()] userauth is OK
2025-11-26T07:02:55.081 [DEBUG] [Thread-13775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:02:55.081 [DEBUG] [Thread-13775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:02:55.081 [DEBUG] [Thread-13775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:02:55.081 [DEBUG] [Thread-13775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:02:55.095 [INFO] [Thread-13775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:02:55.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:02:55.685 [DEBUG] [Thread-13775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:02:55.685 [DEBUG] [Thread-13775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:02:55.685 [DEBUG] [Thread-13775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:02:55.725 [DEBUG] [Thread-13775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:02:55.725 [DEBUG] [Thread-13775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:02:55.728 [DEBUG] [Thread-13775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:02:55.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:02:55.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:02:55.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:02:55.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:02:55.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:02:55.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:02:55.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.210163 -999.00  +21.30  14.82     17   -3.90 1 1 1 1 1   887    0 25.43 14.10 ----- 15.2 14.8 40.2 17.5 24.7 -27.0 24.4 -26.3 23.0 -25.5 23.1 -26.4
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.210163
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:02:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:02:41', tmtdew=30.39, humidity=12.03, cloud=0.0, wind=15.62, temperature=21.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:02:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:02:55.746 [DEBUG] [Thread-13775] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:02:55.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:02:55.829 [DEBUG] [Thread-13778] [transport.py] [_log()] starting thread (client mode): 0x70d0c9d0
2025-11-26T07:02:55.829 [DEBUG] [Thread-13778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:02:55.844 [DEBUG] [Thread-13778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:02:55.845 [INFO] [Thread-13778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] client lang: <none>
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] server lang: <none>
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] kex follows: False
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] Compression: none
2025-11-26T07:02:55.852 [DEBUG] [Thread-13778] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:02:55.907 [DEBUG] [Thread-13778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:02:55.907 [DEBUG] [Thread-13778] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:02:55.908 [DEBUG] [Thread-13778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:02:55.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:02:55.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:02:55.965 [DEBUG] [Thread-13778] [transport.py] [_log()] userauth is OK
2025-11-26T07:02:55.965 [DEBUG] [Thread-13778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:02:55.965 [DEBUG] [Thread-13778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:02:55.965 [DEBUG] [Thread-13778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:02:55.965 [DEBUG] [Thread-13778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:02:55.979 [INFO] [Thread-13778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:02:55.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:02:55.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:02:56.814 [DEBUG] [Thread-13778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:02:56.814 [DEBUG] [Thread-13778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:02:56.862 [DEBUG] [Thread-13778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:02:56.863 [DEBUG] [Thread-13778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:02:56.872 [DEBUG] [Thread-13778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:02:56.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:02:56.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:02:56.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:02:56.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:02:56.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:02:56.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:02:56.909 [DEBUG] [Thread-13778] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:02:59.018 [DEBUG] [Thread-13780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:03:14.068 [DEBUG] [Thread-13781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:03:26.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:03:26.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:03: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
2025-11-26T07:03:27.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 3, 13), 30.39, 12.03, 0.0, 15.53, 21.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:03:27.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:03:13
2025-11-26T07:03:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:03:27.838 [DEBUG] [Thread-13782] [transport.py] [_log()] starting thread (client mode): 0x70d0d090
2025-11-26T07:03:27.839 [DEBUG] [Thread-13782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:03:27.859 [DEBUG] [Thread-13782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:03:27.859 [INFO] [Thread-13782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:03:27.862 [DEBUG] [Thread-13782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] client lang: <none>
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] server lang: <none>
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] kex follows: False
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] Compression: none
2025-11-26T07:03:27.863 [DEBUG] [Thread-13782] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:03:27.880 [DEBUG] [Thread-13782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:03:27.880 [DEBUG] [Thread-13782] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:03:27.881 [DEBUG] [Thread-13782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:03:27.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:03:27.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:03:27.883 [DEBUG] [Thread-13782] [transport.py] [_log()] userauth is OK
2025-11-26T07:03:27.883 [DEBUG] [Thread-13782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:03:27.883 [DEBUG] [Thread-13782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:03:27.883 [DEBUG] [Thread-13782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:03:27.883 [DEBUG] [Thread-13782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:03:27.918 [INFO] [Thread-13782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:03:27.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:03:28.566 [DEBUG] [Thread-13782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:03:28.567 [DEBUG] [Thread-13782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:03:28.567 [DEBUG] [Thread-13782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:03:28.607 [DEBUG] [Thread-13782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:03:28.607 [DEBUG] [Thread-13782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:03:28.609 [DEBUG] [Thread-13782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:03:28.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:03:28.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:03:28.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:03:28.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:03:28.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:03:28.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:03:28.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.210510 -999.00  +21.40  17.77     17   -3.90 1 1 1 1 1   887    0 25.21 14.44 ----- 14.0 17.8 29.4 20.5 24.8 -27.1 24.4 -26.6 23.0 -25.7 23.1 -26.4
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.210510
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:03:28.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:03:13', tmtdew=30.39, humidity=12.03, cloud=0.0, wind=15.53, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:03:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:03:28.630 [DEBUG] [Thread-13782] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:03:28.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:03:28.714 [DEBUG] [Thread-13785] [transport.py] [_log()] starting thread (client mode): 0x761dafb0
2025-11-26T07:03:28.714 [DEBUG] [Thread-13785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:03:28.728 [DEBUG] [Thread-13785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:03:28.728 [INFO] [Thread-13785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] client lang: <none>
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] server lang: <none>
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] kex follows: False
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] Compression: none
2025-11-26T07:03:28.736 [DEBUG] [Thread-13785] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:03:28.791 [DEBUG] [Thread-13785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:03:28.791 [DEBUG] [Thread-13785] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:03:28.791 [DEBUG] [Thread-13785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:03:28.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:03:28.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:03:28.848 [DEBUG] [Thread-13785] [transport.py] [_log()] userauth is OK
2025-11-26T07:03:28.848 [DEBUG] [Thread-13785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:03:28.848 [DEBUG] [Thread-13785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:03:28.848 [DEBUG] [Thread-13785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:03:28.848 [DEBUG] [Thread-13785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:03:28.863 [INFO] [Thread-13785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:03:28.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:03:28.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:03:29.101 [DEBUG] [Thread-13787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:03:29.696 [DEBUG] [Thread-13785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:03:29.696 [DEBUG] [Thread-13785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:03:29.744 [DEBUG] [Thread-13785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:03:29.744 [DEBUG] [Thread-13785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:03:29.752 [DEBUG] [Thread-13785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:03:29.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:03:29.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:03:29.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:03:29.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:03:29.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:03:29.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:03:29.783 [DEBUG] [Thread-13785] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:03:33.771 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:03:33.772 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:03:38.938 [DEBUG] [Thread-13788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:03:44.155 [DEBUG] [Thread-13789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:03:59.194 [DEBUG] [Thread-13790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:03:59.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:03:59.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:03:59.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:04:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 3, 45), 30.42, 12.1, 0.0, 14.93, 21.8, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:04:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:03:45
2025-11-26T07:04:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:04:00.711 [DEBUG] [Thread-13791] [transport.py] [_log()] starting thread (client mode): 0x73781630
2025-11-26T07:04:00.711 [DEBUG] [Thread-13791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:04:00.731 [DEBUG] [Thread-13791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:04:00.732 [INFO] [Thread-13791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:04:00.734 [DEBUG] [Thread-13791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] client lang: <none>
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] server lang: <none>
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] kex follows: False
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] Compression: none
2025-11-26T07:04:00.735 [DEBUG] [Thread-13791] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:04:00.753 [DEBUG] [Thread-13791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:04:00.754 [DEBUG] [Thread-13791] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:04:00.754 [DEBUG] [Thread-13791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:04:00.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:04:00.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:04:00.756 [DEBUG] [Thread-13791] [transport.py] [_log()] userauth is OK
2025-11-26T07:04:00.757 [DEBUG] [Thread-13791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:04:00.757 [DEBUG] [Thread-13791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:04:00.757 [DEBUG] [Thread-13791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:04:00.757 [DEBUG] [Thread-13791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:04:00.781 [INFO] [Thread-13791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:04:00.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:04:01.431 [DEBUG] [Thread-13791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:04:01.431 [DEBUG] [Thread-13791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:04:01.432 [DEBUG] [Thread-13791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:04:01.473 [DEBUG] [Thread-13791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:04:01.473 [DEBUG] [Thread-13791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:04:01.476 [DEBUG] [Thread-13791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:04:01.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:04:01.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:04:01.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:04:01.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:04:01.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:04:01.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:04:01.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:04:01.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:04:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:04:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.210857 -999.00  +21.40  17.21     17   -3.90 1 1 1 1 1   887    0 25.72 14.01 ----- 17.2 17.2 44.0 19.3 24.8 -27.2 24.6 -26.5 23.1 -25.6 23.1 -26.7
2025-11-26T07:04:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:04:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:04:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.210857
2025-11-26T07:04:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:04:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:04:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:04:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:04:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:04:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:03:45', tmtdew=30.42, humidity=12.1, cloud=0.0, wind=14.93, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:03:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:04:01.501 [DEBUG] [Thread-13791] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:04:01.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:04:01.607 [DEBUG] [Thread-13794] [transport.py] [_log()] starting thread (client mode): 0x70d283a0
2025-11-26T07:04:01.607 [DEBUG] [Thread-13794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:04:01.621 [DEBUG] [Thread-13794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:04:01.621 [INFO] [Thread-13794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:04:01.629 [DEBUG] [Thread-13794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:04:01.629 [DEBUG] [Thread-13794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:04:01.629 [DEBUG] [Thread-13794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:04:01.629 [DEBUG] [Thread-13794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:04:01.629 [DEBUG] [Thread-13794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:04:01.629 [DEBUG] [Thread-13794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:04:01.629 [DEBUG] [Thread-13794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] client lang: <none>
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] server lang: <none>
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] kex follows: False
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] Compression: none
2025-11-26T07:04:01.630 [DEBUG] [Thread-13794] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:04:01.687 [DEBUG] [Thread-13794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:04:01.687 [DEBUG] [Thread-13794] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:04:01.688 [DEBUG] [Thread-13794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:04:01.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:04:01.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:04:01.744 [DEBUG] [Thread-13794] [transport.py] [_log()] userauth is OK
2025-11-26T07:04:01.744 [DEBUG] [Thread-13794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:04:01.744 [DEBUG] [Thread-13794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:04:01.744 [DEBUG] [Thread-13794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:04:01.744 [DEBUG] [Thread-13794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:04:01.767 [INFO] [Thread-13794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:04:01.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:04:01.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:04:02.588 [DEBUG] [Thread-13794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:04:02.588 [DEBUG] [Thread-13794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:04:02.636 [DEBUG] [Thread-13794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:04:02.636 [DEBUG] [Thread-13794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:04:02.645 [DEBUG] [Thread-13794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:04:02.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:04:02.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:04:02.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:04:02.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:04:02.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:04:02.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:04:02.682 [DEBUG] [Thread-13794] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:04:14.225 [DEBUG] [Thread-13796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:04:29.278 [DEBUG] [Thread-13797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:04:32.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:04:32.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:04:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:04:33.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 4, 17), 30.45, 12.06, 0.0, 15.95, 21.77, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:04:33.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:04:17
2025-11-26T07:04:33.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:04:33.642 [DEBUG] [Thread-13798] [transport.py] [_log()] starting thread (client mode): 0x70d2a0b0
2025-11-26T07:04:33.642 [DEBUG] [Thread-13798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:04:33.662 [DEBUG] [Thread-13798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:04:33.662 [INFO] [Thread-13798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:04:33.665 [DEBUG] [Thread-13798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:04:33.665 [DEBUG] [Thread-13798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:04:33.665 [DEBUG] [Thread-13798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:04:33.665 [DEBUG] [Thread-13798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:04:33.665 [DEBUG] [Thread-13798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:04:33.665 [DEBUG] [Thread-13798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] client lang: <none>
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] server lang: <none>
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] kex follows: False
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] Compression: none
2025-11-26T07:04:33.666 [DEBUG] [Thread-13798] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:04:33.684 [DEBUG] [Thread-13798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:04:33.684 [DEBUG] [Thread-13798] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:04:33.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:04:33.685 [DEBUG] [Thread-13798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:04:33.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:04:33.687 [DEBUG] [Thread-13798] [transport.py] [_log()] userauth is OK
2025-11-26T07:04:33.687 [DEBUG] [Thread-13798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:04:33.688 [DEBUG] [Thread-13798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:04:33.688 [DEBUG] [Thread-13798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:04:33.688 [DEBUG] [Thread-13798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:04:33.723 [INFO] [Thread-13798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:04:33.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:04:33.913 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:04:33.914 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:04:34.372 [DEBUG] [Thread-13798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:04:34.373 [DEBUG] [Thread-13798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:04:34.373 [DEBUG] [Thread-13798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:04:34.418 [DEBUG] [Thread-13798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:04:34.418 [DEBUG] [Thread-13798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:04:34.421 [DEBUG] [Thread-13798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:04:34.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:04:34.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:04:34.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:04:34.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:04:34.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:04:34.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:04:34.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:04:34.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:04:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:04:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.211205 -999.00  +21.40  18.97     17   -3.90 1 1 1 1 1   887    0 25.31 12.82 ----- 16.0 19.0 32.2 20.4 24.8 -27.4 24.5 -26.9 23.1 -25.7 23.2 -26.4
2025-11-26T07:04:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:04:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:04:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.211205
2025-11-26T07:04:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:04:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:04:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:04:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:04:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:04:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:04:17', tmtdew=30.45, humidity=12.06, cloud=0.0, wind=15.95, temperature=21.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:04:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:04:34.449 [DEBUG] [Thread-13798] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:04:34.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:04:34.544 [DEBUG] [Thread-13801] [transport.py] [_log()] starting thread (client mode): 0x70d2ae30
2025-11-26T07:04:34.544 [DEBUG] [Thread-13801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:04:34.559 [DEBUG] [Thread-13801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:04:34.559 [INFO] [Thread-13801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:04:34.567 [DEBUG] [Thread-13801] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:04:34.567 [DEBUG] [Thread-13801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:04:34.567 [DEBUG] [Thread-13801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:04:34.567 [DEBUG] [Thread-13801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:04:34.567 [DEBUG] [Thread-13801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:04:34.567 [DEBUG] [Thread-13801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] client lang: <none>
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] server lang: <none>
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] kex follows: False
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] Compression: none
2025-11-26T07:04:34.568 [DEBUG] [Thread-13801] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:04:34.628 [DEBUG] [Thread-13801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:04:34.629 [DEBUG] [Thread-13801] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:04:34.629 [DEBUG] [Thread-13801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:04:34.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:04:34.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:04:34.684 [DEBUG] [Thread-13801] [transport.py] [_log()] userauth is OK
2025-11-26T07:04:34.684 [DEBUG] [Thread-13801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:04:34.684 [DEBUG] [Thread-13801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:04:34.684 [DEBUG] [Thread-13801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:04:34.684 [DEBUG] [Thread-13801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:04:34.703 [INFO] [Thread-13801] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:04:34.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:04:34.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:04:35.503 [DEBUG] [Thread-13801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:04:35.504 [DEBUG] [Thread-13801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:04:35.552 [DEBUG] [Thread-13801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:04:35.552 [DEBUG] [Thread-13801] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:04:35.561 [DEBUG] [Thread-13801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:04:35.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:04:35.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:04:35.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:04:35.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:04:35.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:04:35.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:04:35.598 [DEBUG] [Thread-13801] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:04:38.998 [DEBUG] [Thread-13803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:04:44.310 [DEBUG] [Thread-13804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:04:59.354 [DEBUG] [Thread-13805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:05:05.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:05:05.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:05:05.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:05:06.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 4, 49), 30.41, 12.06, 0.0, 18.28, 21.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:05:06.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:04:49
2025-11-26T07:05:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:05:06.529 [DEBUG] [Thread-13806] [transport.py] [_log()] starting thread (client mode): 0x737e9960
2025-11-26T07:05:06.529 [DEBUG] [Thread-13806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:05:06.549 [DEBUG] [Thread-13806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:05:06.549 [INFO] [Thread-13806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:05:06.550 [DEBUG] [Thread-13806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:05:06.550 [DEBUG] [Thread-13806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:05:06.550 [DEBUG] [Thread-13806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:05:06.550 [DEBUG] [Thread-13806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:05:06.550 [DEBUG] [Thread-13806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:05:06.550 [DEBUG] [Thread-13806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:05:06.550 [DEBUG] [Thread-13806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:05:06.550 [DEBUG] [Thread-13806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] client lang: <none>
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] server lang: <none>
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] kex follows: False
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] Compression: none
2025-11-26T07:05:06.551 [DEBUG] [Thread-13806] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:05:06.559 [DEBUG] [Thread-13806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:05:06.560 [DEBUG] [Thread-13806] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:05:06.561 [DEBUG] [Thread-13806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:05:06.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:05:06.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:05:06.564 [DEBUG] [Thread-13806] [transport.py] [_log()] userauth is OK
2025-11-26T07:05:06.564 [DEBUG] [Thread-13806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:05:06.564 [DEBUG] [Thread-13806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:05:06.564 [DEBUG] [Thread-13806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:05:06.564 [DEBUG] [Thread-13806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:05:06.586 [INFO] [Thread-13806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:05:06.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:05:07.175 [DEBUG] [Thread-13806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:05:07.176 [DEBUG] [Thread-13806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:05:07.176 [DEBUG] [Thread-13806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:05:07.217 [DEBUG] [Thread-13806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:05:07.217 [DEBUG] [Thread-13806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:05:07.222 [DEBUG] [Thread-13806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:05:07.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:05:07.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:05:07.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:05:07.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:05:07.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:05:07.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:05:07.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:05:07.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:05:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:05:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.211552 -999.00  +21.40  11.65     17   -3.90 1 1 1 1 1   887    0 25.12 12.28 ----- 13.2 11.7 29.8 18.8 24.8 -27.2 24.6 -26.4 23.1 -25.6 23.2 -26.8
2025-11-26T07:05:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:05:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:05:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.211552
2025-11-26T07:05:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:05:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:05:07.247 [DEBUG] [Thread-13806] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:05:07.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:05:07.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:05:07.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:05:07.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:04:49', tmtdew=30.41, humidity=12.06, cloud=0.0, wind=18.28, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:04:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:05:07.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:05:07.342 [DEBUG] [Thread-13809] [transport.py] [_log()] starting thread (client mode): 0x737e9d80
2025-11-26T07:05:07.343 [DEBUG] [Thread-13809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:05:07.358 [DEBUG] [Thread-13809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:05:07.358 [INFO] [Thread-13809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:05:07.367 [DEBUG] [Thread-13809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:05:07.367 [DEBUG] [Thread-13809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:05:07.367 [DEBUG] [Thread-13809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:05:07.367 [DEBUG] [Thread-13809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:05:07.367 [DEBUG] [Thread-13809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:05:07.367 [DEBUG] [Thread-13809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:05:07.367 [DEBUG] [Thread-13809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] client lang: <none>
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] server lang: <none>
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] kex follows: False
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] Compression: none
2025-11-26T07:05:07.368 [DEBUG] [Thread-13809] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:05:07.424 [DEBUG] [Thread-13809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:05:07.425 [DEBUG] [Thread-13809] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:05:07.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:05:07.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:05:07.427 [DEBUG] [Thread-13809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:05:07.483 [DEBUG] [Thread-13809] [transport.py] [_log()] userauth is OK
2025-11-26T07:05:07.484 [DEBUG] [Thread-13809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:05:07.484 [DEBUG] [Thread-13809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:05:07.484 [DEBUG] [Thread-13809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:05:07.484 [DEBUG] [Thread-13809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:05:07.503 [INFO] [Thread-13809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:05:07.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:05:07.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:05:08.363 [DEBUG] [Thread-13809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:05:08.363 [DEBUG] [Thread-13809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:05:08.415 [DEBUG] [Thread-13809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:05:08.415 [DEBUG] [Thread-13809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:05:08.427 [DEBUG] [Thread-13809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:05:08.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:05:08.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:05:08.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:05:08.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:05:08.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:05:08.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:05:08.484 [DEBUG] [Thread-13809] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:05:14.393 [DEBUG] [Thread-13811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:05:29.444 [DEBUG] [Thread-13812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:05:34.057 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:05:34.057 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:05:38.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:05:38.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:05:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:05:39.052 [DEBUG] [Thread-13813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:05:39.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 5, 21), 30.44, 12.05, 0.0, 15.9, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:05:39.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:05:21
2025-11-26T07:05:39.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:05:39.436 [DEBUG] [Thread-13814] [transport.py] [_log()] starting thread (client mode): 0x737eb010
2025-11-26T07:05:39.436 [DEBUG] [Thread-13814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:05:39.457 [DEBUG] [Thread-13814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:05:39.457 [INFO] [Thread-13814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:05:39.460 [DEBUG] [Thread-13814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:05:39.460 [DEBUG] [Thread-13814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:05:39.460 [DEBUG] [Thread-13814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] client lang: <none>
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] server lang: <none>
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] kex follows: False
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:05:39.461 [DEBUG] [Thread-13814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:05:39.462 [DEBUG] [Thread-13814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:05:39.462 [DEBUG] [Thread-13814] [transport.py] [_log()] Compression: none
2025-11-26T07:05:39.462 [DEBUG] [Thread-13814] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:05:39.480 [DEBUG] [Thread-13814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:05:39.480 [DEBUG] [Thread-13814] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:05:39.481 [DEBUG] [Thread-13814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:05:39.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:05:39.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:05:39.483 [DEBUG] [Thread-13814] [transport.py] [_log()] userauth is OK
2025-11-26T07:05:39.483 [DEBUG] [Thread-13814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:05:39.483 [DEBUG] [Thread-13814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:05:39.483 [DEBUG] [Thread-13814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:05:39.483 [DEBUG] [Thread-13814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:05:39.517 [INFO] [Thread-13814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:05:39.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:05:40.181 [DEBUG] [Thread-13814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:05:40.181 [DEBUG] [Thread-13814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:05:40.182 [DEBUG] [Thread-13814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:05:40.222 [DEBUG] [Thread-13814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:05:40.222 [DEBUG] [Thread-13814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:05:40.224 [DEBUG] [Thread-13814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:05:40.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:05:40.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:05:40.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:05:40.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:05:40.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:05:40.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:05:40.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:05:40.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:05:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:05:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.211899 -999.00  +21.50  17.34     17   -3.80 1 1 1 1 1   887    0 25.67 12.71 ----- 16.0 17.3 39.5 20.1 24.9 -27.2 24.6 -26.1 23.2 -25.6 23.2 -26.3
2025-11-26T07:05:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:05:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:05:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.211899
2025-11-26T07:05:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:05:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:05:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:05:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:05:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:05:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:05:21', tmtdew=30.44, humidity=12.05, cloud=0.0, wind=15.9, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:05:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:05:40.247 [DEBUG] [Thread-13814] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:05:40.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:05:40.337 [DEBUG] [Thread-13817] [transport.py] [_log()] starting thread (client mode): 0x737e8d00
2025-11-26T07:05:40.337 [DEBUG] [Thread-13817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:05:40.352 [DEBUG] [Thread-13817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:05:40.352 [INFO] [Thread-13817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:05:40.359 [DEBUG] [Thread-13817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:05:40.359 [DEBUG] [Thread-13817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:05:40.360 [DEBUG] [Thread-13817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:05:40.360 [DEBUG] [Thread-13817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:05:40.360 [DEBUG] [Thread-13817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:05:40.360 [DEBUG] [Thread-13817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:05:40.360 [DEBUG] [Thread-13817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:05:40.360 [DEBUG] [Thread-13817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:05:40.360 [DEBUG] [Thread-13817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:05:40.360 [DEBUG] [Thread-13817] [transport.py] [_log()] client lang: <none>
2025-11-26T07:05:40.361 [DEBUG] [Thread-13817] [transport.py] [_log()] server lang: <none>
2025-11-26T07:05:40.361 [DEBUG] [Thread-13817] [transport.py] [_log()] kex follows: False
2025-11-26T07:05:40.361 [DEBUG] [Thread-13817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:05:40.361 [DEBUG] [Thread-13817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:05:40.361 [DEBUG] [Thread-13817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:05:40.361 [DEBUG] [Thread-13817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:05:40.361 [DEBUG] [Thread-13817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:05:40.361 [DEBUG] [Thread-13817] [transport.py] [_log()] Compression: none
2025-11-26T07:05:40.362 [DEBUG] [Thread-13817] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:05:40.418 [DEBUG] [Thread-13817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:05:40.419 [DEBUG] [Thread-13817] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:05:40.420 [DEBUG] [Thread-13817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:05:40.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:05:40.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:05:40.475 [DEBUG] [Thread-13817] [transport.py] [_log()] userauth is OK
2025-11-26T07:05:40.475 [DEBUG] [Thread-13817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:05:40.475 [DEBUG] [Thread-13817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:05:40.476 [DEBUG] [Thread-13817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:05:40.476 [DEBUG] [Thread-13817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:05:40.494 [INFO] [Thread-13817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:05:40.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:05:40.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:05:41.316 [DEBUG] [Thread-13817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:05:41.316 [DEBUG] [Thread-13817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:05:41.365 [DEBUG] [Thread-13817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:05:41.365 [DEBUG] [Thread-13817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:05:41.374 [DEBUG] [Thread-13817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:05:41.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:05:41.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:05:41.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:05:41.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:05:41.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:05:41.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:05:41.412 [DEBUG] [Thread-13817] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:05:44.479 [DEBUG] [Thread-13819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:05:59.530 [DEBUG] [Thread-13820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:06:11.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:06:11.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:06:11.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:06:12.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 5, 53), 30.37, 12.06, 0.0, 17.59, 21.82, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:06:12.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:05:53
2025-11-26T07:06:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:06:12.325 [DEBUG] [Thread-13821] [transport.py] [_log()] starting thread (client mode): 0x737e9c00
2025-11-26T07:06:12.325 [DEBUG] [Thread-13821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:06:12.346 [DEBUG] [Thread-13821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:06:12.346 [INFO] [Thread-13821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:06:12.351 [DEBUG] [Thread-13821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:06:12.351 [DEBUG] [Thread-13821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:06:12.351 [DEBUG] [Thread-13821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:06:12.351 [DEBUG] [Thread-13821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:06:12.351 [DEBUG] [Thread-13821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:06:12.351 [DEBUG] [Thread-13821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:06:12.351 [DEBUG] [Thread-13821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:06:12.351 [DEBUG] [Thread-13821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] client lang: <none>
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] server lang: <none>
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] kex follows: False
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:06:12.352 [DEBUG] [Thread-13821] [transport.py] [_log()] Compression: none
2025-11-26T07:06:12.353 [DEBUG] [Thread-13821] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:06:12.364 [DEBUG] [Thread-13821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:06:12.365 [DEBUG] [Thread-13821] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:06:12.365 [DEBUG] [Thread-13821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:06:12.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:06:12.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:06:12.366 [DEBUG] [Thread-13821] [transport.py] [_log()] userauth is OK
2025-11-26T07:06:12.366 [DEBUG] [Thread-13821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:06:12.366 [DEBUG] [Thread-13821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:06:12.366 [DEBUG] [Thread-13821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:06:12.366 [DEBUG] [Thread-13821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:06:12.383 [INFO] [Thread-13821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:06:12.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:06:12.987 [DEBUG] [Thread-13821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:06:12.987 [DEBUG] [Thread-13821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:06:12.987 [DEBUG] [Thread-13821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:06:13.028 [DEBUG] [Thread-13821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:06:13.029 [DEBUG] [Thread-13821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:06:13.032 [DEBUG] [Thread-13821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:06:13.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:06:13.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:06:13.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:06:13.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:06:13.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:06:13.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:06:13.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:06:13.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:06:13.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:06:13.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.212246 -999.00  +21.40  19.48     17   -3.80 1 1 1 1 1   887    0 25.41 13.55 ----- 15.8 19.5 39.0 21.0 24.9 -27.1 24.6 -26.7 23.1 -25.7 23.2 -27.3
2025-11-26T07:06:13.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:06:13.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:06:13.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.212246
2025-11-26T07:06:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:06:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:06:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:06:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:06:13.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:06:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:05:53', tmtdew=30.37, humidity=12.06, cloud=0.0, wind=17.59, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:05:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:06:13.058 [DEBUG] [Thread-13821] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:06:13.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:06:13.154 [DEBUG] [Thread-13824] [transport.py] [_log()] starting thread (client mode): 0x70d0f310
2025-11-26T07:06:13.154 [DEBUG] [Thread-13824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:06:13.174 [DEBUG] [Thread-13824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:06:13.174 [INFO] [Thread-13824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:06:13.182 [DEBUG] [Thread-13824] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:06:13.182 [DEBUG] [Thread-13824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:06:13.182 [DEBUG] [Thread-13824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:06:13.182 [DEBUG] [Thread-13824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:06:13.182 [DEBUG] [Thread-13824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:06:13.182 [DEBUG] [Thread-13824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:06:13.183 [DEBUG] [Thread-13824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:06:13.183 [DEBUG] [Thread-13824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:06:13.183 [DEBUG] [Thread-13824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:06:13.183 [DEBUG] [Thread-13824] [transport.py] [_log()] client lang: <none>
2025-11-26T07:06:13.183 [DEBUG] [Thread-13824] [transport.py] [_log()] server lang: <none>
2025-11-26T07:06:13.183 [DEBUG] [Thread-13824] [transport.py] [_log()] kex follows: False
2025-11-26T07:06:13.183 [DEBUG] [Thread-13824] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:06:13.183 [DEBUG] [Thread-13824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:06:13.183 [DEBUG] [Thread-13824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:06:13.184 [DEBUG] [Thread-13824] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:06:13.184 [DEBUG] [Thread-13824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:06:13.184 [DEBUG] [Thread-13824] [transport.py] [_log()] Compression: none
2025-11-26T07:06:13.184 [DEBUG] [Thread-13824] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:06:13.243 [DEBUG] [Thread-13824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:06:13.243 [DEBUG] [Thread-13824] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:06:13.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:06:13.244 [DEBUG] [Thread-13824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:06:13.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:06:13.298 [DEBUG] [Thread-13824] [transport.py] [_log()] userauth is OK
2025-11-26T07:06:13.299 [DEBUG] [Thread-13824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:06:13.299 [DEBUG] [Thread-13824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:06:13.299 [DEBUG] [Thread-13824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:06:13.299 [DEBUG] [Thread-13824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:06:13.318 [INFO] [Thread-13824] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:06:13.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:06:13.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:06:14.149 [DEBUG] [Thread-13824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:06:14.150 [DEBUG] [Thread-13824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:06:14.198 [DEBUG] [Thread-13824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:06:14.198 [DEBUG] [Thread-13824] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:06:14.207 [DEBUG] [Thread-13824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:06:14.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:06:14.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')
2025-11-26T07:06:14.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:06:14.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:06:14.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:06:14.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:06:14.247 [DEBUG] [Thread-13824] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:06:14.562 [DEBUG] [Thread-13826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:06:29.615 [DEBUG] [Thread-13827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:06:34.197 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:06:34.198 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:06:39.101 [DEBUG] [Thread-13828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:06:44.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:06:44.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:06:44.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:06:44.647 [DEBUG] [Thread-13829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:06:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 6, 25), 30.45, 11.98, 0.0, 16.5, 21.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:06:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:06:25
2025-11-26T07:06:45.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:06:45.171 [DEBUG] [Thread-13830] [transport.py] [_log()] starting thread (client mode): 0x70d023e0
2025-11-26T07:06:45.171 [DEBUG] [Thread-13830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:06:45.191 [DEBUG] [Thread-13830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:06:45.192 [INFO] [Thread-13830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] client lang: <none>
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] server lang: <none>
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] kex follows: False
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] Compression: none
2025-11-26T07:06:45.195 [DEBUG] [Thread-13830] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:06:45.212 [DEBUG] [Thread-13830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:06:45.212 [DEBUG] [Thread-13830] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:06:45.213 [DEBUG] [Thread-13830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:06:45.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:06:45.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:06:45.215 [DEBUG] [Thread-13830] [transport.py] [_log()] userauth is OK
2025-11-26T07:06:45.215 [DEBUG] [Thread-13830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:06:45.215 [DEBUG] [Thread-13830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:06:45.215 [DEBUG] [Thread-13830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:06:45.215 [DEBUG] [Thread-13830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:06:45.232 [INFO] [Thread-13830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:06:45.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:06:45.835 [DEBUG] [Thread-13830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:06:45.835 [DEBUG] [Thread-13830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:06:45.836 [DEBUG] [Thread-13830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:06:45.877 [DEBUG] [Thread-13830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:06:45.877 [DEBUG] [Thread-13830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:06:45.880 [DEBUG] [Thread-13830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:06:45.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:06:45.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:06:45.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:06:45.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:06:45.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:06:45.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:06:45.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:06:45.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:06:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:06:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.212941 -999.00  +21.50  13.43     17   -3.80 1 1 1 1 1   887    0 25.27 15.28 ----- 14.2 13.4 33.0 17.5 24.9 -27.0 24.6 -26.4 23.2 -25.4 23.3 -26.4
2025-11-26T07:06:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:06:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:06:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.212941
2025-11-26T07:06:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:06:45.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:06:45.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:06:45.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:06:45.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:06:45.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:06:25', tmtdew=30.45, humidity=11.98, cloud=0.0, wind=16.5, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:06:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:06:45.898 [DEBUG] [Thread-13830] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:06:45.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:06:45.990 [DEBUG] [Thread-13833] [transport.py] [_log()] starting thread (client mode): 0x70d28910
2025-11-26T07:06:45.990 [DEBUG] [Thread-13833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:06:46.007 [DEBUG] [Thread-13833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:06:46.007 [INFO] [Thread-13833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:06:46.017 [DEBUG] [Thread-13833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:06:46.017 [DEBUG] [Thread-13833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:06:46.017 [DEBUG] [Thread-13833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:06:46.017 [DEBUG] [Thread-13833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:06:46.017 [DEBUG] [Thread-13833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] client lang: <none>
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] server lang: <none>
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] kex follows: False
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:06:46.018 [DEBUG] [Thread-13833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:06:46.019 [DEBUG] [Thread-13833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:06:46.019 [DEBUG] [Thread-13833] [transport.py] [_log()] Compression: none
2025-11-26T07:06:46.019 [DEBUG] [Thread-13833] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:06:46.077 [DEBUG] [Thread-13833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:06:46.077 [DEBUG] [Thread-13833] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:06:46.077 [DEBUG] [Thread-13833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:06:46.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:06:46.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:06:46.133 [DEBUG] [Thread-13833] [transport.py] [_log()] userauth is OK
2025-11-26T07:06:46.134 [DEBUG] [Thread-13833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:06:46.134 [DEBUG] [Thread-13833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:06:46.134 [DEBUG] [Thread-13833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:06:46.134 [DEBUG] [Thread-13833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:06:46.153 [INFO] [Thread-13833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:06:46.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:06:46.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:06:47.008 [DEBUG] [Thread-13833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:06:47.008 [DEBUG] [Thread-13833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:06:47.056 [DEBUG] [Thread-13833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:06:47.056 [DEBUG] [Thread-13833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:06:47.065 [DEBUG] [Thread-13833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:06:47.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:06:47.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:06:47.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:06:47.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:06:47.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:06:47.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:06:47.101 [DEBUG] [Thread-13833] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:06:59.683 [DEBUG] [Thread-13835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:07:14.732 [DEBUG] [Thread-13836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:07:17.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:07:17.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:07:17.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:07:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 6, 57), 30.52, 11.98, 0.0, 16.23, 21.9, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:07:17.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:06:57
2025-11-26T07:07:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:07:18.023 [DEBUG] [Thread-13837] [transport.py] [_log()] starting thread (client mode): 0x737ea5c0
2025-11-26T07:07:18.023 [DEBUG] [Thread-13837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:07:18.043 [DEBUG] [Thread-13837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:07:18.043 [INFO] [Thread-13837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:07:18.046 [DEBUG] [Thread-13837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] client lang: <none>
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] server lang: <none>
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] kex follows: False
2025-11-26T07:07:18.047 [DEBUG] [Thread-13837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:07:18.048 [DEBUG] [Thread-13837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:07:18.048 [DEBUG] [Thread-13837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:07:18.048 [DEBUG] [Thread-13837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:07:18.048 [DEBUG] [Thread-13837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:07:18.048 [DEBUG] [Thread-13837] [transport.py] [_log()] Compression: none
2025-11-26T07:07:18.048 [DEBUG] [Thread-13837] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:07:18.067 [DEBUG] [Thread-13837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:07:18.068 [DEBUG] [Thread-13837] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:07:18.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:07:18.069 [DEBUG] [Thread-13837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:07:18.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:07:18.071 [DEBUG] [Thread-13837] [transport.py] [_log()] userauth is OK
2025-11-26T07:07:18.071 [DEBUG] [Thread-13837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:07:18.072 [DEBUG] [Thread-13837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:07:18.072 [DEBUG] [Thread-13837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:07:18.072 [DEBUG] [Thread-13837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:07:18.097 [INFO] [Thread-13837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:07:18.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:07:18.749 [DEBUG] [Thread-13837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:07:18.749 [DEBUG] [Thread-13837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:07:18.750 [DEBUG] [Thread-13837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:07:18.790 [DEBUG] [Thread-13837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:07:18.790 [DEBUG] [Thread-13837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:07:18.793 [DEBUG] [Thread-13837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:07:18.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:07:18.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:07:18.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:07:18.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:07:18.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:07:18.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:07:18.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:07:18.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:07:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:07:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.213288 -999.00  +21.60  15.26     18   -3.60 1 1 1 1 1   887    0 24.94 13.68 ----- 16.2 15.3 40.6 22.2 25.0 -27.1 24.7 -26.6 23.2 -25.7 23.3 -26.9
2025-11-26T07:07:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:07:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:07:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.213288
2025-11-26T07:07:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:07:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:07:18.820 [DEBUG] [Thread-13837] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:07:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:07:18.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:07:18.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:07:18.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:06:57', tmtdew=30.52, humidity=11.98, cloud=0.0, wind=16.23, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:07:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:07:18.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:07:18.918 [DEBUG] [Thread-13840] [transport.py] [_log()] starting thread (client mode): 0x70d1dcf0
2025-11-26T07:07:18.918 [DEBUG] [Thread-13840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:07:18.936 [DEBUG] [Thread-13840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:07:18.937 [INFO] [Thread-13840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:07:18.944 [DEBUG] [Thread-13840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:07:18.944 [DEBUG] [Thread-13840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:07:18.944 [DEBUG] [Thread-13840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:07:18.944 [DEBUG] [Thread-13840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:07:18.944 [DEBUG] [Thread-13840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] client lang: <none>
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] server lang: <none>
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] kex follows: False
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] Compression: none
2025-11-26T07:07:18.945 [DEBUG] [Thread-13840] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:07:19.005 [DEBUG] [Thread-13840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:07:19.005 [DEBUG] [Thread-13840] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:07:19.006 [DEBUG] [Thread-13840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:07:19.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:07:19.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:07:19.061 [DEBUG] [Thread-13840] [transport.py] [_log()] userauth is OK
2025-11-26T07:07:19.062 [DEBUG] [Thread-13840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:07:19.062 [DEBUG] [Thread-13840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:07:19.062 [DEBUG] [Thread-13840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:07:19.062 [DEBUG] [Thread-13840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:07:19.081 [INFO] [Thread-13840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:07:19.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:07:19.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:07:19.976 [DEBUG] [Thread-13840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:07:19.977 [DEBUG] [Thread-13840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:07:20.025 [DEBUG] [Thread-13840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:07:20.025 [DEBUG] [Thread-13840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:07:20.034 [DEBUG] [Thread-13840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:07:20.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:07:20.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:07:20.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:07:20.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:07:20.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:07:20.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:07:20.071 [DEBUG] [Thread-13840] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:07:29.765 [DEBUG] [Thread-13842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:07:34.339 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:07:34.340 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:07:39.169 [DEBUG] [Thread-13843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:07:44.805 [DEBUG] [Thread-13844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:07:50.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:07:50.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:07:50.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:07:50.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 7, 29), 30.48, 12.01, 0.0, 12.19, 21.88, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:07:50.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:07:29
2025-11-26T07:07:50.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:07:51.018 [DEBUG] [Thread-13845] [transport.py] [_log()] starting thread (client mode): 0x737e8340
2025-11-26T07:07:51.018 [DEBUG] [Thread-13845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:07:51.037 [DEBUG] [Thread-13845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:07:51.038 [INFO] [Thread-13845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:07:51.040 [DEBUG] [Thread-13845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:07:51.040 [DEBUG] [Thread-13845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] client lang: <none>
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] server lang: <none>
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] kex follows: False
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] Compression: none
2025-11-26T07:07:51.041 [DEBUG] [Thread-13845] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:07:51.057 [DEBUG] [Thread-13845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:07:51.057 [DEBUG] [Thread-13845] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:07:51.057 [DEBUG] [Thread-13845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:07:51.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:07:51.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:07:51.058 [DEBUG] [Thread-13845] [transport.py] [_log()] userauth is OK
2025-11-26T07:07:51.058 [DEBUG] [Thread-13845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:07:51.058 [DEBUG] [Thread-13845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:07:51.058 [DEBUG] [Thread-13845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:07:51.058 [DEBUG] [Thread-13845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:07:51.068 [INFO] [Thread-13845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:07:51.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:07:51.688 [DEBUG] [Thread-13845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:07:51.688 [DEBUG] [Thread-13845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:07:51.688 [DEBUG] [Thread-13845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:07:51.729 [DEBUG] [Thread-13845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:07:51.729 [DEBUG] [Thread-13845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:07:51.731 [DEBUG] [Thread-13845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:07:51.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:07:51.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:07:51.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:07:51.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:07:51.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:07:51.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:07:51.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.213635 -999.00  +21.60  15.21     17   -3.70 1 1 1 1 1   887    0 25.17 13.44 ----- 15.6 15.2 36.2 22.4 25.0 -27.3 24.7 -26.2 23.2 -25.4 23.3 -26.3
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.213635
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:07:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:07:29', tmtdew=30.48, humidity=12.01, cloud=0.0, wind=12.19, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:07:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:07:51.745 [DEBUG] [Thread-13845] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:07:51.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:07:51.831 [DEBUG] [Thread-13848] [transport.py] [_log()] starting thread (client mode): 0x70d00970
2025-11-26T07:07:51.831 [DEBUG] [Thread-13848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:07:51.849 [DEBUG] [Thread-13848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:07:51.849 [INFO] [Thread-13848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:07:51.856 [DEBUG] [Thread-13848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:07:51.856 [DEBUG] [Thread-13848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:07:51.856 [DEBUG] [Thread-13848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] client lang: <none>
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] server lang: <none>
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] kex follows: False
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] Compression: none
2025-11-26T07:07:51.857 [DEBUG] [Thread-13848] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:07:51.915 [DEBUG] [Thread-13848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:07:51.915 [DEBUG] [Thread-13848] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:07:51.915 [DEBUG] [Thread-13848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:07:51.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:07:51.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:07:51.972 [DEBUG] [Thread-13848] [transport.py] [_log()] userauth is OK
2025-11-26T07:07:51.972 [DEBUG] [Thread-13848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:07:51.972 [DEBUG] [Thread-13848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:07:51.972 [DEBUG] [Thread-13848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:07:51.972 [DEBUG] [Thread-13848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:07:51.986 [INFO] [Thread-13848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:07:51.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:07:51.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:07:52.838 [DEBUG] [Thread-13848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:07:52.839 [DEBUG] [Thread-13848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:07:52.886 [DEBUG] [Thread-13848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:07:52.886 [DEBUG] [Thread-13848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:07:52.895 [DEBUG] [Thread-13848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:07:52.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:07:52.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:07:52.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:07:52.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:07:52.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:07:52.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:07:52.927 [DEBUG] [Thread-13848] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:07:59.840 [DEBUG] [Thread-13850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:08:14.896 [DEBUG] [Thread-13851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:08:22.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:08:22.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:08:22.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:08:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 8, 1), 30.47, 12.03, 0.0, 14.22, 21.93, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:08:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:08:01
2025-11-26T07:08:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:08:23.873 [DEBUG] [Thread-13852] [transport.py] [_log()] starting thread (client mode): 0x70d0c490
2025-11-26T07:08:23.873 [DEBUG] [Thread-13852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:08:23.892 [DEBUG] [Thread-13852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:08:23.892 [INFO] [Thread-13852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] client lang: <none>
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] server lang: <none>
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] kex follows: False
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] Compression: none
2025-11-26T07:08:23.894 [DEBUG] [Thread-13852] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:08:23.913 [DEBUG] [Thread-13852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:08:23.913 [DEBUG] [Thread-13852] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:08:23.914 [DEBUG] [Thread-13852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:08:23.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:08:23.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:08:23.915 [DEBUG] [Thread-13852] [transport.py] [_log()] userauth is OK
2025-11-26T07:08:23.915 [DEBUG] [Thread-13852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:08:23.916 [DEBUG] [Thread-13852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:08:23.916 [DEBUG] [Thread-13852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:08:23.916 [DEBUG] [Thread-13852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:08:23.932 [INFO] [Thread-13852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:08:23.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:08:24.526 [DEBUG] [Thread-13852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:08:24.526 [DEBUG] [Thread-13852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:08:24.527 [DEBUG] [Thread-13852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:08:24.568 [DEBUG] [Thread-13852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:08:24.568 [DEBUG] [Thread-13852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:08:24.571 [DEBUG] [Thread-13852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:08:24.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:08:24.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:08:24.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:08:24.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:08:24.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:08:24.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:08:24.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:08:24.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:08:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:08:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.213635 -999.00  +21.60  15.21     17   -3.70 1 1 1 1 1   887    0 25.17 13.44 ----- 15.6 15.2 36.2 22.4 25.0 -27.3 24.7 -26.2 23.2 -25.4 23.3 -26.3
2025-11-26T07:08:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:08:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:08:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.213635
2025-11-26T07:08:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:08:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:08:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:08:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:08:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:08:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:08:01', tmtdew=30.47, humidity=12.03, cloud=0.0, wind=14.22, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:07:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:08:24.600 [DEBUG] [Thread-13852] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:08:24.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:08:24.693 [DEBUG] [Thread-13855] [transport.py] [_log()] starting thread (client mode): 0x70d01780
2025-11-26T07:08:24.693 [DEBUG] [Thread-13855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:08:24.710 [DEBUG] [Thread-13855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:08:24.711 [INFO] [Thread-13855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] client lang: <none>
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] server lang: <none>
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] kex follows: False
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] Compression: none
2025-11-26T07:08:24.718 [DEBUG] [Thread-13855] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:08:24.774 [DEBUG] [Thread-13855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:08:24.774 [DEBUG] [Thread-13855] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:08:24.774 [DEBUG] [Thread-13855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:08:24.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:08:24.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:08:24.832 [DEBUG] [Thread-13855] [transport.py] [_log()] userauth is OK
2025-11-26T07:08:24.832 [DEBUG] [Thread-13855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:08:24.832 [DEBUG] [Thread-13855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:08:24.832 [DEBUG] [Thread-13855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:08:24.832 [DEBUG] [Thread-13855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:08:24.846 [INFO] [Thread-13855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:08:24.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:08:24.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:08:25.653 [DEBUG] [Thread-13855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:08:25.653 [DEBUG] [Thread-13855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:08:25.701 [DEBUG] [Thread-13855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:08:25.701 [DEBUG] [Thread-13855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:08:25.709 [DEBUG] [Thread-13855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:08:25.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:08:25.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:08:25.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:08:25.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:08:25.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:08:25.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:08:25.742 [DEBUG] [Thread-13855] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:08:29.931 [DEBUG] [Thread-13857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:08:34.479 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:08:34.480 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:08:39.226 [DEBUG] [Thread-13858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:08:44.975 [DEBUG] [Thread-13859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:08:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:08:55.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:08:55.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:08:56.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 8, 33), 30.86, 11.93, 0.0, 15.84, 22.36, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:08:56.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:08:33
2025-11-26T07:08:56.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:08:56.683 [DEBUG] [Thread-13860] [transport.py] [_log()] starting thread (client mode): 0x70d0ddb0
2025-11-26T07:08:56.684 [DEBUG] [Thread-13860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:08:56.703 [DEBUG] [Thread-13860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:08:56.703 [INFO] [Thread-13860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] client lang: <none>
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] server lang: <none>
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] kex follows: False
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] Compression: none
2025-11-26T07:08:56.705 [DEBUG] [Thread-13860] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:08:56.714 [DEBUG] [Thread-13860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:08:56.714 [DEBUG] [Thread-13860] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:08:56.714 [DEBUG] [Thread-13860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:08:56.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:08:56.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:08:56.716 [DEBUG] [Thread-13860] [transport.py] [_log()] userauth is OK
2025-11-26T07:08:56.716 [DEBUG] [Thread-13860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:08:56.716 [DEBUG] [Thread-13860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:08:56.716 [DEBUG] [Thread-13860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:08:56.716 [DEBUG] [Thread-13860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:08:56.735 [INFO] [Thread-13860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:08:56.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:08:57.375 [DEBUG] [Thread-13860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:08:57.376 [DEBUG] [Thread-13860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:08:57.376 [DEBUG] [Thread-13860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:08:57.417 [DEBUG] [Thread-13860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:08:57.417 [DEBUG] [Thread-13860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:08:57.421 [DEBUG] [Thread-13860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:08:57.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:08:57.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:08:57.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:08:57.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:08:57.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:08:57.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:08:57.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:08:57.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:08:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:08:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.213982 -999.00  +21.60  14.97     17   -3.70 1 1 1 1 1   887    0 26.07 14.69 ----- 13.3 15.0 37.8 20.2 25.0 -27.2 24.8 -26.5 23.3 -25.6 23.4 -26.3
2025-11-26T07:08:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:08:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:08:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.213982
2025-11-26T07:08:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:08:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:08:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:08:57.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:08:57.448 [DEBUG] [Thread-13860] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:08:57.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:08:57.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:08:33', tmtdew=30.86, humidity=11.93, cloud=0.0, wind=15.84, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:08:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:08:57.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:08:57.548 [DEBUG] [Thread-13863] [transport.py] [_log()] starting thread (client mode): 0x73781630
2025-11-26T07:08:57.548 [DEBUG] [Thread-13863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:08:57.562 [DEBUG] [Thread-13863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:08:57.563 [INFO] [Thread-13863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:08:57.570 [DEBUG] [Thread-13863] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:08:57.570 [DEBUG] [Thread-13863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:08:57.570 [DEBUG] [Thread-13863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] client lang: <none>
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] server lang: <none>
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] kex follows: False
2025-11-26T07:08:57.571 [DEBUG] [Thread-13863] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:08:57.572 [DEBUG] [Thread-13863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:08:57.572 [DEBUG] [Thread-13863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:08:57.572 [DEBUG] [Thread-13863] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:08:57.572 [DEBUG] [Thread-13863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:08:57.572 [DEBUG] [Thread-13863] [transport.py] [_log()] Compression: none
2025-11-26T07:08:57.572 [DEBUG] [Thread-13863] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:08:57.628 [DEBUG] [Thread-13863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:08:57.628 [DEBUG] [Thread-13863] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:08:57.628 [DEBUG] [Thread-13863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:08:57.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:08:57.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:08:57.684 [DEBUG] [Thread-13863] [transport.py] [_log()] userauth is OK
2025-11-26T07:08:57.684 [DEBUG] [Thread-13863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:08:57.684 [DEBUG] [Thread-13863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:08:57.685 [DEBUG] [Thread-13863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:08:57.685 [DEBUG] [Thread-13863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:08:57.709 [INFO] [Thread-13863] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:08:57.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:08:57.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:08:58.540 [DEBUG] [Thread-13863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:08:58.541 [DEBUG] [Thread-13863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:08:58.589 [DEBUG] [Thread-13863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:08:58.589 [DEBUG] [Thread-13863] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:08:58.598 [DEBUG] [Thread-13863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:08:58.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:08:58.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:08:58.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:08:58.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:08:58.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:08:58.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:08:58.634 [DEBUG] [Thread-13863] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:09:00.013 [DEBUG] [Thread-13865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:09:15.063 [DEBUG] [Thread-13866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:09:28.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:09:28.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:09:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:09:29.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 9, 5), 30.54, 12.01, 0.0, 18.76, 22.05, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:09:29.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:09:05
2025-11-26T07:09:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:09:29.529 [DEBUG] [Thread-13867] [transport.py] [_log()] starting thread (client mode): 0x73782050
2025-11-26T07:09:29.529 [DEBUG] [Thread-13867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:09:29.549 [DEBUG] [Thread-13867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:09:29.550 [INFO] [Thread-13867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] client lang: <none>
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] server lang: <none>
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] kex follows: False
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] Compression: none
2025-11-26T07:09:29.553 [DEBUG] [Thread-13867] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:09:29.571 [DEBUG] [Thread-13867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:09:29.571 [DEBUG] [Thread-13867] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:09:29.572 [DEBUG] [Thread-13867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:09:29.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:09:29.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:09:29.574 [DEBUG] [Thread-13867] [transport.py] [_log()] userauth is OK
2025-11-26T07:09:29.574 [DEBUG] [Thread-13867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:09:29.574 [DEBUG] [Thread-13867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:09:29.574 [DEBUG] [Thread-13867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:09:29.575 [DEBUG] [Thread-13867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:09:29.599 [INFO] [Thread-13867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:09:29.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:09:30.100 [DEBUG] [Thread-13869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:09:30.368 [DEBUG] [Thread-13867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:09:30.368 [DEBUG] [Thread-13867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:09:30.369 [DEBUG] [Thread-13867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:09:30.410 [DEBUG] [Thread-13867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:09:30.410 [DEBUG] [Thread-13867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:09:30.413 [DEBUG] [Thread-13867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:09:30.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:09:30.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:09:30.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:09:30.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:09:30.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:09:30.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:09:30.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:09:30.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:09:30.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:09:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.214330 -999.00  +21.60  19.84     17   -3.70 1 1 1 1 1   887    0 25.42 15.74 ----- 17.2 19.8 36.2 24.9 25.1 -27.6 24.7 -26.5 23.3 -25.9 23.4 -26.9
2025-11-26T07:09:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:09:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:09:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.214330
2025-11-26T07:09:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:09:30.437 [DEBUG] [Thread-13867] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:09:30.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:09:30.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:09:30.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:09:30.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:09:30.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:09:05', tmtdew=30.54, humidity=12.01, cloud=0.0, wind=18.76, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:08:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:09:30.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:09:30.533 [DEBUG] [Thread-13871] [transport.py] [_log()] starting thread (client mode): 0x70d02470
2025-11-26T07:09:30.533 [DEBUG] [Thread-13871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:09:30.547 [DEBUG] [Thread-13871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:09:30.547 [INFO] [Thread-13871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:09:30.554 [DEBUG] [Thread-13871] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:09:30.554 [DEBUG] [Thread-13871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:09:30.554 [DEBUG] [Thread-13871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] client lang: <none>
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] server lang: <none>
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] kex follows: False
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] Compression: none
2025-11-26T07:09:30.555 [DEBUG] [Thread-13871] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:09:30.615 [DEBUG] [Thread-13871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:09:30.615 [DEBUG] [Thread-13871] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:09:30.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:09:30.616 [DEBUG] [Thread-13871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:09:30.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:09:30.671 [DEBUG] [Thread-13871] [transport.py] [_log()] userauth is OK
2025-11-26T07:09:30.672 [DEBUG] [Thread-13871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:09:30.672 [DEBUG] [Thread-13871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:09:30.672 [DEBUG] [Thread-13871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:09:30.672 [DEBUG] [Thread-13871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:09:30.691 [INFO] [Thread-13871] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:09:30.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:09:30.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:09:31.507 [DEBUG] [Thread-13871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:09:31.507 [DEBUG] [Thread-13871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:09:31.562 [DEBUG] [Thread-13871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:09:31.562 [DEBUG] [Thread-13871] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:09:31.575 [DEBUG] [Thread-13871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:09:31.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:09:31.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:09:31.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:09:31.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:09:31.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:09:31.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:09:31.615 [DEBUG] [Thread-13871] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:09:34.621 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:09:34.622 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:09:39.273 [DEBUG] [Thread-13873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:09:45.137 [DEBUG] [Thread-13874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:10:00.188 [DEBUG] [Thread-13875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:10:01.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:10:01.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:10:01.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:10:02.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 9, 37), 30.57, 12.0, 0.0, 14.68, 22.08, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:10:02.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:09:37
2025-11-26T07:10:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:10:02.568 [DEBUG] [Thread-13876] [transport.py] [_log()] starting thread (client mode): 0x761dbb80
2025-11-26T07:10:02.569 [DEBUG] [Thread-13876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:10:02.584 [DEBUG] [Thread-13876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:10:02.584 [INFO] [Thread-13876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:10:02.587 [DEBUG] [Thread-13876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:10:02.587 [DEBUG] [Thread-13876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:10:02.587 [DEBUG] [Thread-13876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] client lang: <none>
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] server lang: <none>
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] kex follows: False
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] Compression: none
2025-11-26T07:10:02.588 [DEBUG] [Thread-13876] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:10:02.605 [DEBUG] [Thread-13876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:10:02.606 [DEBUG] [Thread-13876] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:10:02.606 [DEBUG] [Thread-13876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:10:02.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:10:02.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:10:02.608 [DEBUG] [Thread-13876] [transport.py] [_log()] userauth is OK
2025-11-26T07:10:02.608 [DEBUG] [Thread-13876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:10:02.608 [DEBUG] [Thread-13876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:10:02.608 [DEBUG] [Thread-13876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:10:02.608 [DEBUG] [Thread-13876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:10:02.626 [INFO] [Thread-13876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:10:02.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:10:03.332 [DEBUG] [Thread-13876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:10:03.332 [DEBUG] [Thread-13876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:10:03.333 [DEBUG] [Thread-13876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:10:03.374 [DEBUG] [Thread-13876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:10:03.374 [DEBUG] [Thread-13876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:10:03.378 [DEBUG] [Thread-13876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:10:03.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:10:03.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:10:03.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:10:03.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:10:03.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:10:03.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:10:03.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:10:03.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:10:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:10:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.214677 -999.00  +21.60  15.13     17   -3.70 1 1 1 1 1   887    0 25.73 14.90 ----- 15.7 15.1 28.2 21.1 25.0 -27.4 24.7 -27.0 23.4 -25.5 23.4 -26.4
2025-11-26T07:10:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:10:03.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:10:03.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.214677
2025-11-26T07:10:03.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:10:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:10:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:10:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:10:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:10:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:09:37', tmtdew=30.57, humidity=12.0, cloud=0.0, wind=14.68, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:09:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:10:03.431 [DEBUG] [Thread-13876] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:10:03.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:10:03.526 [DEBUG] [Thread-13879] [transport.py] [_log()] starting thread (client mode): 0x70d01bd0
2025-11-26T07:10:03.526 [DEBUG] [Thread-13879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:10:03.540 [DEBUG] [Thread-13879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:10:03.540 [INFO] [Thread-13879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:10:03.547 [DEBUG] [Thread-13879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] client lang: <none>
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] server lang: <none>
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] kex follows: False
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] Compression: none
2025-11-26T07:10:03.548 [DEBUG] [Thread-13879] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:10:03.607 [DEBUG] [Thread-13879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:10:03.608 [DEBUG] [Thread-13879] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:10:03.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:10:03.608 [DEBUG] [Thread-13879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:10:03.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:10:03.667 [DEBUG] [Thread-13879] [transport.py] [_log()] userauth is OK
2025-11-26T07:10:03.667 [DEBUG] [Thread-13879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:10:03.668 [DEBUG] [Thread-13879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:10:03.668 [DEBUG] [Thread-13879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:10:03.668 [DEBUG] [Thread-13879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:10:03.687 [INFO] [Thread-13879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:10:03.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:10:03.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:10:04.491 [DEBUG] [Thread-13879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:10:04.492 [DEBUG] [Thread-13879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:10:04.540 [DEBUG] [Thread-13879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:10:04.540 [DEBUG] [Thread-13879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:10:04.549 [DEBUG] [Thread-13879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:10:04.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:10:04.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:10:04.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:10:04.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:10:04.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:10:04.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:10:04.584 [DEBUG] [Thread-13879] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:10:15.222 [DEBUG] [Thread-13881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:10:30.272 [DEBUG] [Thread-13882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:10:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:10:34.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:10:34.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:10:34.765 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:10:34.766 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:10:35.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 10, 9), 30.55, 12.01, 0.0, 17.13, 22.08, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:10:35.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:10:09
2025-11-26T07:10:35.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:10:35.508 [DEBUG] [Thread-13883] [transport.py] [_log()] starting thread (client mode): 0x737eb7c0
2025-11-26T07:10:35.508 [DEBUG] [Thread-13883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:10:35.530 [DEBUG] [Thread-13883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:10:35.530 [INFO] [Thread-13883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] client lang: <none>
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] server lang: <none>
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] kex follows: False
2025-11-26T07:10:35.533 [DEBUG] [Thread-13883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:10:35.534 [DEBUG] [Thread-13883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:10:35.534 [DEBUG] [Thread-13883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:10:35.534 [DEBUG] [Thread-13883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:10:35.534 [DEBUG] [Thread-13883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:10:35.534 [DEBUG] [Thread-13883] [transport.py] [_log()] Compression: none
2025-11-26T07:10:35.534 [DEBUG] [Thread-13883] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:10:35.551 [DEBUG] [Thread-13883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:10:35.552 [DEBUG] [Thread-13883] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:10:35.552 [DEBUG] [Thread-13883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:10:35.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:10:35.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:10:35.555 [DEBUG] [Thread-13883] [transport.py] [_log()] userauth is OK
2025-11-26T07:10:35.555 [DEBUG] [Thread-13883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:10:35.555 [DEBUG] [Thread-13883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:10:35.555 [DEBUG] [Thread-13883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:10:35.555 [DEBUG] [Thread-13883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:10:35.579 [INFO] [Thread-13883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:10:35.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:10:36.372 [DEBUG] [Thread-13883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:10:36.372 [DEBUG] [Thread-13883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:10:36.373 [DEBUG] [Thread-13883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:10:36.414 [DEBUG] [Thread-13883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:10:36.414 [DEBUG] [Thread-13883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:10:36.418 [DEBUG] [Thread-13883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:10:36.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:10:36.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:10:36.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:10:36.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:10:36.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:10:36.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:10:36.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:10:36.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:10:36.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:10:36.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.215024 -999.00  +21.60  15.51     17   -3.80 1 1 1 1 1   887    0 25.52 15.27 ----- 17.8 15.5 26.8 20.3 25.1 -27.2 24.8 -26.4 23.4 -25.6 23.4 -26.5
2025-11-26T07:10:36.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:10:36.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:10:36.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.215024
2025-11-26T07:10:36.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:10:36.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:10:36.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:10:36.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:10:36.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:10:36.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:10:09', tmtdew=30.55, humidity=12.01, cloud=0.0, wind=17.13, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:09:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:10:36.443 [DEBUG] [Thread-13883] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:10:36.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:10:36.538 [DEBUG] [Thread-13886] [transport.py] [_log()] starting thread (client mode): 0x70d1e170
2025-11-26T07:10:36.538 [DEBUG] [Thread-13886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:10:36.553 [DEBUG] [Thread-13886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:10:36.553 [INFO] [Thread-13886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:10:36.561 [DEBUG] [Thread-13886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:10:36.561 [DEBUG] [Thread-13886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] client lang: <none>
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] server lang: <none>
2025-11-26T07:10:36.562 [DEBUG] [Thread-13886] [transport.py] [_log()] kex follows: False
2025-11-26T07:10:36.563 [DEBUG] [Thread-13886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:10:36.563 [DEBUG] [Thread-13886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:10:36.563 [DEBUG] [Thread-13886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:10:36.563 [DEBUG] [Thread-13886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:10:36.563 [DEBUG] [Thread-13886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:10:36.563 [DEBUG] [Thread-13886] [transport.py] [_log()] Compression: none
2025-11-26T07:10:36.563 [DEBUG] [Thread-13886] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:10:36.618 [DEBUG] [Thread-13886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:10:36.618 [DEBUG] [Thread-13886] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:10:36.619 [DEBUG] [Thread-13886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:10:36.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:10:36.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:10:36.674 [DEBUG] [Thread-13886] [transport.py] [_log()] userauth is OK
2025-11-26T07:10:36.675 [DEBUG] [Thread-13886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:10:36.675 [DEBUG] [Thread-13886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:10:36.675 [DEBUG] [Thread-13886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:10:36.675 [DEBUG] [Thread-13886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:10:36.694 [INFO] [Thread-13886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:10:36.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:10:36.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:10:37.508 [DEBUG] [Thread-13886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:10:37.508 [DEBUG] [Thread-13886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:10:37.558 [DEBUG] [Thread-13886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:10:37.559 [DEBUG] [Thread-13886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:10:37.568 [DEBUG] [Thread-13886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:10:37.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:10:37.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:10:37.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:10:37.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:10:37.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:10:37.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:10:37.606 [DEBUG] [Thread-13886] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:10:39.329 [DEBUG] [Thread-13888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:10:45.311 [DEBUG] [Thread-13889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:11:00.371 [DEBUG] [Thread-13890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:11:07.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:11:07.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:11:07.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:11:08.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 10, 41), 30.53, 12.03, 0.0, 13.76, 22.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:11:08.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:10:41
2025-11-26T07:11:08.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:11:08.550 [DEBUG] [Thread-13891] [transport.py] [_log()] starting thread (client mode): 0x70d036a0
2025-11-26T07:11:08.550 [DEBUG] [Thread-13891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:11:08.565 [DEBUG] [Thread-13891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:11:08.566 [INFO] [Thread-13891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] client lang: <none>
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] server lang: <none>
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] kex follows: False
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] Compression: none
2025-11-26T07:11:08.569 [DEBUG] [Thread-13891] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:11:08.586 [DEBUG] [Thread-13891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:11:08.587 [DEBUG] [Thread-13891] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:11:08.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:11:08.588 [DEBUG] [Thread-13891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:11:08.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:11:08.590 [DEBUG] [Thread-13891] [transport.py] [_log()] userauth is OK
2025-11-26T07:11:08.590 [DEBUG] [Thread-13891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:11:08.590 [DEBUG] [Thread-13891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:11:08.590 [DEBUG] [Thread-13891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:11:08.591 [DEBUG] [Thread-13891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:11:08.606 [INFO] [Thread-13891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:11:08.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:11:09.266 [DEBUG] [Thread-13891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:11:09.266 [DEBUG] [Thread-13891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:11:09.266 [DEBUG] [Thread-13891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:11:09.307 [DEBUG] [Thread-13891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:11:09.307 [DEBUG] [Thread-13891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:11:09.311 [DEBUG] [Thread-13891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:11:09.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:11:09.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:11:09.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:11:09.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:11:09.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:11:09.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:11:09.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:11:09.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:11:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:11:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.215718 -999.00  +21.70  12.59     17   -3.60 1 1 1 1 1   887    0 25.36 18.18 ----- 19.7 12.6 26.0 20.0 25.1 -27.1 24.8 -26.4 23.4 -25.6 23.5 -26.7
2025-11-26T07:11:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:11:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:11:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.215718
2025-11-26T07:11:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:11:09.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:11:09.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:11:09.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:11:09.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:11:09.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:10:41', tmtdew=30.53, humidity=12.03, cloud=0.0, wind=13.76, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:10:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:11:09.336 [DEBUG] [Thread-13891] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:11:09.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:11:09.431 [DEBUG] [Thread-13894] [transport.py] [_log()] starting thread (client mode): 0x737838b0
2025-11-26T07:11:09.431 [DEBUG] [Thread-13894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:11:09.445 [DEBUG] [Thread-13894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:11:09.446 [INFO] [Thread-13894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:11:09.453 [DEBUG] [Thread-13894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:11:09.453 [DEBUG] [Thread-13894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:11:09.453 [DEBUG] [Thread-13894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:11:09.453 [DEBUG] [Thread-13894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:11:09.453 [DEBUG] [Thread-13894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:11:09.453 [DEBUG] [Thread-13894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:11:09.453 [DEBUG] [Thread-13894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] client lang: <none>
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] server lang: <none>
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] kex follows: False
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] Compression: none
2025-11-26T07:11:09.454 [DEBUG] [Thread-13894] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:11:09.514 [DEBUG] [Thread-13894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:11:09.515 [DEBUG] [Thread-13894] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:11:09.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:11:09.516 [DEBUG] [Thread-13894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:11:09.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:11:09.570 [DEBUG] [Thread-13894] [transport.py] [_log()] userauth is OK
2025-11-26T07:11:09.570 [DEBUG] [Thread-13894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:11:09.571 [DEBUG] [Thread-13894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:11:09.571 [DEBUG] [Thread-13894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:11:09.571 [DEBUG] [Thread-13894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:11:09.589 [INFO] [Thread-13894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:11:09.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:11:09.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:11:10.401 [DEBUG] [Thread-13894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:11:10.402 [DEBUG] [Thread-13894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:11:10.450 [DEBUG] [Thread-13894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:11:10.450 [DEBUG] [Thread-13894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:11:10.459 [DEBUG] [Thread-13894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:11:10.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:11:10.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:11:10.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:11:10.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:11:10.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:11:10.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:11:10.497 [DEBUG] [Thread-13894] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:11:15.404 [DEBUG] [Thread-13896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:11:30.445 [DEBUG] [Thread-13897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:11:34.908 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:11:34.910 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:11:39.390 [DEBUG] [Thread-13898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:11:40.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:11:40.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:11:40.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:11:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 11, 13), 30.55, 12.03, 0.0, 17.96, 22.15, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:11:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:11:13
2025-11-26T07:11:41.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:11:41.420 [DEBUG] [Thread-13899] [transport.py] [_log()] starting thread (client mode): 0x761db880
2025-11-26T07:11:41.420 [DEBUG] [Thread-13899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:11:41.440 [DEBUG] [Thread-13899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:11:41.440 [INFO] [Thread-13899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:11:41.443 [DEBUG] [Thread-13899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:11:41.443 [DEBUG] [Thread-13899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:11:41.443 [DEBUG] [Thread-13899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] client lang: <none>
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] server lang: <none>
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] kex follows: False
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] Compression: none
2025-11-26T07:11:41.444 [DEBUG] [Thread-13899] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:11:41.463 [DEBUG] [Thread-13899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:11:41.463 [DEBUG] [Thread-13899] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:11:41.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:11:41.464 [DEBUG] [Thread-13899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:11:41.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:11:41.466 [DEBUG] [Thread-13899] [transport.py] [_log()] userauth is OK
2025-11-26T07:11:41.467 [DEBUG] [Thread-13899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:11:41.467 [DEBUG] [Thread-13899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:11:41.467 [DEBUG] [Thread-13899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:11:41.467 [DEBUG] [Thread-13899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:11:41.488 [INFO] [Thread-13899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:11:41.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:11:42.245 [DEBUG] [Thread-13899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:11:42.245 [DEBUG] [Thread-13899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:11:42.246 [DEBUG] [Thread-13899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:11:42.286 [DEBUG] [Thread-13899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:11:42.286 [DEBUG] [Thread-13899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:11:42.289 [DEBUG] [Thread-13899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:11:42.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:11:42.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:11:42.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:11:42.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:11:42.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:11:42.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:11:42.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:11:42.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:11:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:11:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.216066 -999.00  +21.70  15.44     17   -3.70 1 1 1 1 1   887    0 25.66 19.10 ----- 14.9 15.4 37.6 19.7 25.2 -27.2 24.9 -26.5 23.4 -25.8 23.5 -26.6
2025-11-26T07:11:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:11:42.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:11:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.216066
2025-11-26T07:11:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:11:42.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:11:42.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:11:42.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:11:42.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:11:42.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:11:13', tmtdew=30.55, humidity=12.03, cloud=0.0, wind=17.96, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:11:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:11:42.315 [DEBUG] [Thread-13899] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:11:42.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:11:42.411 [DEBUG] [Thread-13902] [transport.py] [_log()] starting thread (client mode): 0x70d026b0
2025-11-26T07:11:42.411 [DEBUG] [Thread-13902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:11:42.425 [DEBUG] [Thread-13902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:11:42.426 [INFO] [Thread-13902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:11:42.433 [DEBUG] [Thread-13902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] client lang: <none>
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] server lang: <none>
2025-11-26T07:11:42.434 [DEBUG] [Thread-13902] [transport.py] [_log()] kex follows: False
2025-11-26T07:11:42.435 [DEBUG] [Thread-13902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:11:42.435 [DEBUG] [Thread-13902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:11:42.435 [DEBUG] [Thread-13902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:11:42.435 [DEBUG] [Thread-13902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:11:42.435 [DEBUG] [Thread-13902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:11:42.435 [DEBUG] [Thread-13902] [transport.py] [_log()] Compression: none
2025-11-26T07:11:42.435 [DEBUG] [Thread-13902] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:11:42.498 [DEBUG] [Thread-13902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:11:42.498 [DEBUG] [Thread-13902] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:11:42.499 [DEBUG] [Thread-13902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:11:42.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:11:42.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:11:42.554 [DEBUG] [Thread-13902] [transport.py] [_log()] userauth is OK
2025-11-26T07:11:42.554 [DEBUG] [Thread-13902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:11:42.555 [DEBUG] [Thread-13902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:11:42.555 [DEBUG] [Thread-13902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:11:42.555 [DEBUG] [Thread-13902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:11:42.574 [INFO] [Thread-13902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:11:42.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:11:42.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:11:43.434 [DEBUG] [Thread-13902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:11:43.434 [DEBUG] [Thread-13902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:11:43.482 [DEBUG] [Thread-13902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:11:43.482 [DEBUG] [Thread-13902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:11:43.491 [DEBUG] [Thread-13902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:11:43.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:11:43.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:11:43.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:11:43.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:11:43.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:11:43.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:11:43.528 [DEBUG] [Thread-13902] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:11:45.478 [DEBUG] [Thread-13904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:12:00.528 [DEBUG] [Thread-13905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:12:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:12:13.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:12:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:12:14.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 11, 45), 30.63, 12.0, 0.0, 18.4, 22.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:12:14.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:11:45
2025-11-26T07:12:14.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:12:14.475 [DEBUG] [Thread-13906] [transport.py] [_log()] starting thread (client mode): 0x761dac50
2025-11-26T07:12:14.475 [DEBUG] [Thread-13906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:12:14.496 [DEBUG] [Thread-13906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:12:14.496 [INFO] [Thread-13906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] client lang: <none>
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] server lang: <none>
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] kex follows: False
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:12:14.500 [DEBUG] [Thread-13906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:12:14.501 [DEBUG] [Thread-13906] [transport.py] [_log()] Compression: none
2025-11-26T07:12:14.501 [DEBUG] [Thread-13906] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:12:14.516 [DEBUG] [Thread-13906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:12:14.517 [DEBUG] [Thread-13906] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:12:14.517 [DEBUG] [Thread-13906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:12:14.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:12:14.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:12:14.520 [DEBUG] [Thread-13906] [transport.py] [_log()] userauth is OK
2025-11-26T07:12:14.520 [DEBUG] [Thread-13906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:12:14.520 [DEBUG] [Thread-13906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:12:14.520 [DEBUG] [Thread-13906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:12:14.520 [DEBUG] [Thread-13906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:12:14.556 [INFO] [Thread-13906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:12:14.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:12:15.194 [DEBUG] [Thread-13906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:12:15.195 [DEBUG] [Thread-13906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:12:15.195 [DEBUG] [Thread-13906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:12:15.236 [DEBUG] [Thread-13906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:12:15.236 [DEBUG] [Thread-13906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:12:15.240 [DEBUG] [Thread-13906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:12:15.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:12:15.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:12:15.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:12:15.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:12:15.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:12:15.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:12:15.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:12:15.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:12:15.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:12:15.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.216413 -999.00  +21.80  14.13     17   -3.60 1 1 1 1 1   887    0 25.52 20.13 ----- 19.5 14.1 31.5 19.8 25.2 -27.6 24.9 -26.5 23.4 -25.8 23.6 -26.6
2025-11-26T07:12:15.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:12:15.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:12:15.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.216413
2025-11-26T07:12:15.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:12:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:12:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:12:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:12:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:12:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:11:45', tmtdew=30.63, humidity=12.0, cloud=0.0, wind=18.4, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:11:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:12:15.268 [DEBUG] [Thread-13906] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:12:15.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:12:15.368 [DEBUG] [Thread-13909] [transport.py] [_log()] starting thread (client mode): 0x70d0cac0
2025-11-26T07:12:15.368 [DEBUG] [Thread-13909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:12:15.387 [DEBUG] [Thread-13909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:12:15.387 [INFO] [Thread-13909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:12:15.398 [DEBUG] [Thread-13909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:12:15.398 [DEBUG] [Thread-13909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:12:15.398 [DEBUG] [Thread-13909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:12:15.398 [DEBUG] [Thread-13909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:12:15.398 [DEBUG] [Thread-13909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] client lang: <none>
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] server lang: <none>
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] kex follows: False
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] Compression: none
2025-11-26T07:12:15.399 [DEBUG] [Thread-13909] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:12:15.453 [DEBUG] [Thread-13909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:12:15.454 [DEBUG] [Thread-13909] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:12:15.463 [DEBUG] [Thread-13909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:12:15.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:12:15.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:12:15.510 [DEBUG] [Thread-13909] [transport.py] [_log()] userauth is OK
2025-11-26T07:12:15.511 [DEBUG] [Thread-13909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:12:15.511 [DEBUG] [Thread-13909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:12:15.511 [DEBUG] [Thread-13909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:12:15.511 [DEBUG] [Thread-13909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:12:15.529 [INFO] [Thread-13909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:12:15.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:12:15.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:12:15.565 [DEBUG] [Thread-13911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:12:16.419 [DEBUG] [Thread-13909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:12:16.420 [DEBUG] [Thread-13909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:12:16.471 [DEBUG] [Thread-13909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:12:16.471 [DEBUG] [Thread-13909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:12:16.482 [DEBUG] [Thread-13909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:12:16.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:12:16.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:12:16.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:12:16.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:12:16.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:12:16.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:12:16.526 [DEBUG] [Thread-13909] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:12:30.618 [DEBUG] [Thread-13912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:12:35.056 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:12:35.057 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:12:39.442 [DEBUG] [Thread-13913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:12:45.657 [DEBUG] [Thread-13914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:12:46.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:12:46.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:12:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:12:47.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 12, 17), 30.71, 11.91, 0.0, 18.63, 22.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:12:47.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:12:17
2025-11-26T07:12:47.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:12:47.510 [DEBUG] [Thread-13915] [transport.py] [_log()] starting thread (client mode): 0x737e85e0
2025-11-26T07:12:47.510 [DEBUG] [Thread-13915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:12:47.526 [DEBUG] [Thread-13915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:12:47.527 [INFO] [Thread-13915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] client lang: <none>
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] server lang: <none>
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] kex follows: False
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] Compression: none
2025-11-26T07:12:47.528 [DEBUG] [Thread-13915] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:12:47.540 [DEBUG] [Thread-13915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:12:47.540 [DEBUG] [Thread-13915] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:12:47.540 [DEBUG] [Thread-13915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:12:47.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:12:47.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:12:47.541 [DEBUG] [Thread-13915] [transport.py] [_log()] userauth is OK
2025-11-26T07:12:47.541 [DEBUG] [Thread-13915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:12:47.541 [DEBUG] [Thread-13915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:12:47.541 [DEBUG] [Thread-13915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:12:47.541 [DEBUG] [Thread-13915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:12:47.567 [INFO] [Thread-13915] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:12:47.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:12:48.356 [DEBUG] [Thread-13915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:12:48.356 [DEBUG] [Thread-13915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:12:48.356 [DEBUG] [Thread-13915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:12:48.396 [DEBUG] [Thread-13915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:12:48.396 [DEBUG] [Thread-13915] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:12:48.398 [DEBUG] [Thread-13915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:12:48.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:12:48.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:12:48.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:12:48.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:12:48.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:12:48.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:12:48.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.216760 -999.00  +21.80  16.58     17   -3.60 1 1 1 1 1   887    0 25.43 20.74 ----- 17.4 16.6 32.6 19.8 25.2 -27.5 24.9 -26.6 23.4 -25.8 23.6 -26.3
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.216760
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:12:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:12:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:12:17', tmtdew=30.71, humidity=11.91, cloud=0.0, wind=18.63, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:12:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:12:48.418 [DEBUG] [Thread-13915] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:12:48.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:12:48.504 [DEBUG] [Thread-13918] [transport.py] [_log()] starting thread (client mode): 0x7376f1f0
2025-11-26T07:12:48.504 [DEBUG] [Thread-13918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:12:48.518 [DEBUG] [Thread-13918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:12:48.518 [INFO] [Thread-13918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] client lang: <none>
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] server lang: <none>
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] kex follows: False
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] Compression: none
2025-11-26T07:12:48.526 [DEBUG] [Thread-13918] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:12:48.587 [DEBUG] [Thread-13918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:12:48.587 [DEBUG] [Thread-13918] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:12:48.587 [DEBUG] [Thread-13918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:12:48.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:12:48.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:12:48.646 [DEBUG] [Thread-13918] [transport.py] [_log()] userauth is OK
2025-11-26T07:12:48.646 [DEBUG] [Thread-13918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:12:48.646 [DEBUG] [Thread-13918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:12:48.646 [DEBUG] [Thread-13918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:12:48.646 [DEBUG] [Thread-13918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:12:48.659 [INFO] [Thread-13918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:12:48.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:12:48.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:12:49.481 [DEBUG] [Thread-13918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:12:49.482 [DEBUG] [Thread-13918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:12:49.529 [DEBUG] [Thread-13918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:12:49.529 [DEBUG] [Thread-13918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:12:49.538 [DEBUG] [Thread-13918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:12:49.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:12:49.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:12: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') -> 00000000
2025-11-26T07:12:49.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:12:49.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:12:49.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:12:49.569 [DEBUG] [Thread-13918] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:13:00.692 [DEBUG] [Thread-13920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:13:15.755 [DEBUG] [Thread-13921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:13:19.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:13:19.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:13:19.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:13:20.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 12, 49), 30.65, 11.93, 0.0, 13.57, 22.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:13:20.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:12:49
2025-11-26T07:13:20.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:13:20.495 [DEBUG] [Thread-13922] [transport.py] [_log()] starting thread (client mode): 0x73782350
2025-11-26T07:13:20.495 [DEBUG] [Thread-13922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:13:20.515 [DEBUG] [Thread-13922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:13:20.515 [INFO] [Thread-13922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:13:20.518 [DEBUG] [Thread-13922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] client lang: <none>
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] server lang: <none>
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] kex follows: False
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:13:20.519 [DEBUG] [Thread-13922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:13:20.520 [DEBUG] [Thread-13922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:13:20.520 [DEBUG] [Thread-13922] [transport.py] [_log()] Compression: none
2025-11-26T07:13:20.520 [DEBUG] [Thread-13922] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:13:20.538 [DEBUG] [Thread-13922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:13:20.539 [DEBUG] [Thread-13922] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:13:20.539 [DEBUG] [Thread-13922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:13:20.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:13:20.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:13:20.580 [DEBUG] [Thread-13922] [transport.py] [_log()] userauth is OK
2025-11-26T07:13:20.580 [DEBUG] [Thread-13922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:13:20.581 [DEBUG] [Thread-13922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:13:20.581 [DEBUG] [Thread-13922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:13:20.581 [DEBUG] [Thread-13922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:13:20.613 [INFO] [Thread-13922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:13:20.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:13:21.264 [DEBUG] [Thread-13922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:13:21.264 [DEBUG] [Thread-13922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:13:21.264 [DEBUG] [Thread-13922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:13:21.305 [DEBUG] [Thread-13922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:13:21.305 [DEBUG] [Thread-13922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:13:21.309 [DEBUG] [Thread-13922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:13:21.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:13:21.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:13:21.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:13:21.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:13:21.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:13:21.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:13:21.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:13:21.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:13:21.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:13:21.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.217107 -999.00  +21.80  15.29     17   -3.60 1 1 1 1 1   887    0 25.55 21.47 ----- 17.1 15.3 26.8 21.8 25.3 -27.4 25.0 -26.9 23.5 -25.6 23.6 -26.4
2025-11-26T07:13:21.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:13:21.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:13:21.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.217107
2025-11-26T07:13:21.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:13:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:13:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:13:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:13:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:13:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:12:49', tmtdew=30.65, humidity=11.93, cloud=0.0, wind=13.57, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:12:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:13:21.340 [DEBUG] [Thread-13922] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:13:21.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:13:21.430 [DEBUG] [Thread-13925] [transport.py] [_log()] starting thread (client mode): 0x73782920
2025-11-26T07:13:21.430 [DEBUG] [Thread-13925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:13:21.445 [DEBUG] [Thread-13925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:13:21.445 [INFO] [Thread-13925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:13:21.452 [DEBUG] [Thread-13925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] client lang: <none>
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] server lang: <none>
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] kex follows: False
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] Compression: none
2025-11-26T07:13:21.453 [DEBUG] [Thread-13925] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:13:21.512 [DEBUG] [Thread-13925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:13:21.512 [DEBUG] [Thread-13925] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:13:21.512 [DEBUG] [Thread-13925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:13:21.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:13:21.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:13:21.570 [DEBUG] [Thread-13925] [transport.py] [_log()] userauth is OK
2025-11-26T07:13:21.570 [DEBUG] [Thread-13925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:13:21.570 [DEBUG] [Thread-13925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:13:21.570 [DEBUG] [Thread-13925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:13:21.570 [DEBUG] [Thread-13925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:13:21.589 [INFO] [Thread-13925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:13:21.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:13:21.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:13:22.421 [DEBUG] [Thread-13925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:13:22.421 [DEBUG] [Thread-13925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:13:22.469 [DEBUG] [Thread-13925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:13:22.469 [DEBUG] [Thread-13925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:13:22.477 [DEBUG] [Thread-13925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:13:22.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:13:22.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:13:22.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:13:22.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:13:22.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:13:22.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:13:22.508 [DEBUG] [Thread-13925] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:13:30.792 [DEBUG] [Thread-13927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:13:35.198 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:13:35.200 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:13:39.492 [DEBUG] [Thread-13928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:13:45.843 [DEBUG] [Thread-13929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:13:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:13:52.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:13:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:13:53.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 13, 21), 30.67, 11.93, 0.0, 13.8, 22.31, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:13:53.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:13:21
2025-11-26T07:13:53.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:13:53.439 [DEBUG] [Thread-13930] [transport.py] [_log()] starting thread (client mode): 0x70d0d600
2025-11-26T07:13:53.440 [DEBUG] [Thread-13930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:13:53.460 [DEBUG] [Thread-13930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:13:53.460 [INFO] [Thread-13930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] client lang: <none>
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] server lang: <none>
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] kex follows: False
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:13:53.463 [DEBUG] [Thread-13930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:13:53.464 [DEBUG] [Thread-13930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:13:53.464 [DEBUG] [Thread-13930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:13:53.464 [DEBUG] [Thread-13930] [transport.py] [_log()] Compression: none
2025-11-26T07:13:53.464 [DEBUG] [Thread-13930] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:13:53.481 [DEBUG] [Thread-13930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:13:53.481 [DEBUG] [Thread-13930] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:13:53.482 [DEBUG] [Thread-13930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:13:53.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:13:53.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:13:53.484 [DEBUG] [Thread-13930] [transport.py] [_log()] userauth is OK
2025-11-26T07:13:53.484 [DEBUG] [Thread-13930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:13:53.485 [DEBUG] [Thread-13930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:13:53.485 [DEBUG] [Thread-13930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:13:53.485 [DEBUG] [Thread-13930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:13:53.504 [INFO] [Thread-13930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:13:53.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:13:54.271 [DEBUG] [Thread-13930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:13:54.271 [DEBUG] [Thread-13930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:13:54.271 [DEBUG] [Thread-13930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:13:54.311 [DEBUG] [Thread-13930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:13:54.311 [DEBUG] [Thread-13930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:13:54.312 [DEBUG] [Thread-13930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:13:54.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:13:54.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:13:54.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:13:54.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:13:54.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:13:54.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:13:54.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.217455 -999.00  +21.80  16.18     17   -3.60 1 1 1 1 1   887    0 26.07 22.27 ----- 18.6 16.2 43.6 21.8 25.3 -27.5 25.0 -26.6 23.5 -25.3 23.6 -26.4
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.217455
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:13:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:13:21', tmtdew=30.67, humidity=11.93, cloud=0.0, wind=13.8, temperature=22.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:13:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:13:54.329 [DEBUG] [Thread-13930] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:13:54.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:13:54.414 [DEBUG] [Thread-13933] [transport.py] [_log()] starting thread (client mode): 0x737ea8c0
2025-11-26T07:13:54.414 [DEBUG] [Thread-13933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:13:54.428 [DEBUG] [Thread-13933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:13:54.428 [INFO] [Thread-13933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] client lang: <none>
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] server lang: <none>
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] kex follows: False
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] Compression: none
2025-11-26T07:13:54.437 [DEBUG] [Thread-13933] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:13:54.512 [DEBUG] [Thread-13933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:13:54.512 [DEBUG] [Thread-13933] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:13:54.513 [DEBUG] [Thread-13933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:13:54.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:13:54.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:13:54.567 [DEBUG] [Thread-13933] [transport.py] [_log()] userauth is OK
2025-11-26T07:13:54.567 [DEBUG] [Thread-13933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:13:54.567 [DEBUG] [Thread-13933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:13:54.567 [DEBUG] [Thread-13933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:13:54.567 [DEBUG] [Thread-13933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:13:54.585 [INFO] [Thread-13933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:13:54.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:13:54.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:13:55.411 [DEBUG] [Thread-13933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:13:55.411 [DEBUG] [Thread-13933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:13:55.458 [DEBUG] [Thread-13933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:13:55.458 [DEBUG] [Thread-13933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:13:55.467 [DEBUG] [Thread-13933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:13:55.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:13:55.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:13: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') -> 00000000
2025-11-26T07:13:55.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:13:55.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:13:55.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:13:55.499 [DEBUG] [Thread-13933] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:14:00.872 [DEBUG] [Thread-13935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:14:15.913 [DEBUG] [Thread-13936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:14:25.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:14:25.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:14:25.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:14:26.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 13, 53), 30.65, 12.0, 0.0, 15.28, 22.4, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:14:26.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:13:53
2025-11-26T07:14:26.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:14:26.477 [DEBUG] [Thread-13937] [transport.py] [_log()] starting thread (client mode): 0x7376e590
2025-11-26T07:14:26.477 [DEBUG] [Thread-13937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:14:26.498 [DEBUG] [Thread-13937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:14:26.498 [INFO] [Thread-13937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:14:26.501 [DEBUG] [Thread-13937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:14:26.501 [DEBUG] [Thread-13937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:14:26.501 [DEBUG] [Thread-13937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:14:26.501 [DEBUG] [Thread-13937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:14:26.501 [DEBUG] [Thread-13937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:14:26.501 [DEBUG] [Thread-13937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:14:26.501 [DEBUG] [Thread-13937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:14:26.501 [DEBUG] [Thread-13937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:14:26.501 [DEBUG] [Thread-13937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] client lang: <none>
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] server lang: <none>
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] kex follows: False
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] Compression: none
2025-11-26T07:14:26.502 [DEBUG] [Thread-13937] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:14:26.517 [DEBUG] [Thread-13937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:14:26.517 [DEBUG] [Thread-13937] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:14:26.517 [DEBUG] [Thread-13937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:14:26.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:14:26.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:14:26.518 [DEBUG] [Thread-13937] [transport.py] [_log()] userauth is OK
2025-11-26T07:14:26.518 [DEBUG] [Thread-13937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:14:26.518 [DEBUG] [Thread-13937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:14:26.518 [DEBUG] [Thread-13937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:14:26.518 [DEBUG] [Thread-13937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:14:26.533 [INFO] [Thread-13937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:14:26.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:14:27.146 [DEBUG] [Thread-13937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:14:27.146 [DEBUG] [Thread-13937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:14:27.146 [DEBUG] [Thread-13937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:14:27.188 [DEBUG] [Thread-13937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:14:27.188 [DEBUG] [Thread-13937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:14:27.191 [DEBUG] [Thread-13937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:14:27.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:14:27.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:14:27.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:14:27.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:14:27.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:14:27.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:14:27.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.217802 -999.00  +21.80  17.01     17   -3.70 1 1 1 1 1   887    0 25.50 21.94 ----- 17.8 17.0 35.2 22.0 25.3 -27.5 24.9 -26.9 23.5 -26.1 23.7 -26.5
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.217802
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:14:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:13:53', tmtdew=30.65, humidity=12.0, cloud=0.0, wind=15.28, temperature=22.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:13:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:14:27.209 [DEBUG] [Thread-13937] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:14:27.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:14:27.295 [DEBUG] [Thread-13940] [transport.py] [_log()] starting thread (client mode): 0x7378cac0
2025-11-26T07:14:27.295 [DEBUG] [Thread-13940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:14:27.311 [DEBUG] [Thread-13940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:14:27.311 [INFO] [Thread-13940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:14:27.318 [DEBUG] [Thread-13940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] client lang: <none>
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] server lang: <none>
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] kex follows: False
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] Compression: none
2025-11-26T07:14:27.319 [DEBUG] [Thread-13940] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:14:27.374 [DEBUG] [Thread-13940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:14:27.374 [DEBUG] [Thread-13940] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:14:27.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:14:27.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:14:27.375 [DEBUG] [Thread-13940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:14:27.435 [DEBUG] [Thread-13940] [transport.py] [_log()] userauth is OK
2025-11-26T07:14:27.435 [DEBUG] [Thread-13940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:14:27.435 [DEBUG] [Thread-13940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:14:27.435 [DEBUG] [Thread-13940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:14:27.435 [DEBUG] [Thread-13940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:14:27.454 [INFO] [Thread-13940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:14:27.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:14:27.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:14:28.263 [DEBUG] [Thread-13940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:14:28.264 [DEBUG] [Thread-13940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:14:28.316 [DEBUG] [Thread-13940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:14:28.317 [DEBUG] [Thread-13940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:14:28.331 [DEBUG] [Thread-13940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:14:28.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:14:28.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:14:28.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:14:28.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:14:28.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:14:28.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:14:28.388 [DEBUG] [Thread-13940] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:14:30.954 [DEBUG] [Thread-13942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:14:35.340 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:14:35.341 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:14:39.537 [DEBUG] [Thread-13943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:14:46.002 [DEBUG] [Thread-13944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:14:58.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:14:58.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:14:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:14:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 14, 25), 30.58, 12.05, 0.0, 14.01, 22.3, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:14:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:14:25
2025-11-26T07:14:59.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:14:59.393 [DEBUG] [Thread-13945] [transport.py] [_log()] starting thread (client mode): 0x70d01d80
2025-11-26T07:14:59.394 [DEBUG] [Thread-13945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:14:59.414 [DEBUG] [Thread-13945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:14:59.414 [INFO] [Thread-13945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] client lang: <none>
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] server lang: <none>
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] kex follows: False
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] Compression: none
2025-11-26T07:14:59.417 [DEBUG] [Thread-13945] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:14:59.432 [DEBUG] [Thread-13945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:14:59.432 [DEBUG] [Thread-13945] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:14:59.432 [DEBUG] [Thread-13945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:14:59.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:14:59.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:14:59.433 [DEBUG] [Thread-13945] [transport.py] [_log()] userauth is OK
2025-11-26T07:14:59.433 [DEBUG] [Thread-13945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:14:59.433 [DEBUG] [Thread-13945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:14:59.433 [DEBUG] [Thread-13945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:14:59.433 [DEBUG] [Thread-13945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:14:59.442 [INFO] [Thread-13945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:14:59.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:15:00.229 [DEBUG] [Thread-13945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:15:00.230 [DEBUG] [Thread-13945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:15:00.230 [DEBUG] [Thread-13945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:15:00.271 [DEBUG] [Thread-13945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:15:00.271 [DEBUG] [Thread-13945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:15:00.274 [DEBUG] [Thread-13945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:15:00.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:15:00.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:15:00.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:15:00.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:15:00.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:15:00.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:15:00.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:15:00.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:15:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:15:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.218149 -999.00  +21.80  19.15     18   -3.40 1 1 1 1 1   887    0 25.64 20.53 ----- 14.0 19.1 10.2 23.9 25.3 -27.1 25.0 -26.9 23.5 -25.5 23.7 -26.3
2025-11-26T07:15:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:15:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:15:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.218149
2025-11-26T07:15:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:15:00.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:15:00.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:15:00.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:15:00.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:15:00.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:14:25', tmtdew=30.58, humidity=12.05, cloud=0.0, wind=14.01, temperature=22.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:14:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:15:00.302 [DEBUG] [Thread-13945] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:15:00.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:15:00.398 [DEBUG] [Thread-13948] [transport.py] [_log()] starting thread (client mode): 0x737eab90
2025-11-26T07:15:00.398 [DEBUG] [Thread-13948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:15:00.412 [DEBUG] [Thread-13948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:15:00.412 [INFO] [Thread-13948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:15:00.420 [DEBUG] [Thread-13948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:15:00.420 [DEBUG] [Thread-13948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:15:00.420 [DEBUG] [Thread-13948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:15:00.420 [DEBUG] [Thread-13948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:15:00.420 [DEBUG] [Thread-13948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:15:00.420 [DEBUG] [Thread-13948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:15:00.420 [DEBUG] [Thread-13948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:15:00.421 [DEBUG] [Thread-13948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:15:00.421 [DEBUG] [Thread-13948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:15:00.421 [DEBUG] [Thread-13948] [transport.py] [_log()] client lang: <none>
2025-11-26T07:15:00.421 [DEBUG] [Thread-13948] [transport.py] [_log()] server lang: <none>
2025-11-26T07:15:00.421 [DEBUG] [Thread-13948] [transport.py] [_log()] kex follows: False
2025-11-26T07:15:00.421 [DEBUG] [Thread-13948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:15:00.421 [DEBUG] [Thread-13948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:15:00.421 [DEBUG] [Thread-13948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:15:00.421 [DEBUG] [Thread-13948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:15:00.422 [DEBUG] [Thread-13948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:15:00.422 [DEBUG] [Thread-13948] [transport.py] [_log()] Compression: none
2025-11-26T07:15:00.422 [DEBUG] [Thread-13948] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:15:00.481 [DEBUG] [Thread-13948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:15:00.482 [DEBUG] [Thread-13948] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:15:00.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:15:00.483 [DEBUG] [Thread-13948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:15:00.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:15:00.539 [DEBUG] [Thread-13948] [transport.py] [_log()] userauth is OK
2025-11-26T07:15:00.539 [DEBUG] [Thread-13948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:15:00.539 [DEBUG] [Thread-13948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:15:00.540 [DEBUG] [Thread-13948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:15:00.540 [DEBUG] [Thread-13948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:15:00.562 [INFO] [Thread-13948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:15:00.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:15:00.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:15:01.038 [DEBUG] [Thread-13950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:15:01.393 [DEBUG] [Thread-13948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:15:01.393 [DEBUG] [Thread-13948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:15:01.441 [DEBUG] [Thread-13948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:15:01.441 [DEBUG] [Thread-13948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:15:01.450 [DEBUG] [Thread-13948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:15:01.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:15:01.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:15:01.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:15:01.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:15:01.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:15:01.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:15:01.482 [DEBUG] [Thread-13948] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:15:16.088 [DEBUG] [Thread-13951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:15:31.119 [DEBUG] [Thread-13952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:15:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:15:31.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:15:31.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:15:32.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 14, 57), 30.46, 12.06, 0.0, 15.53, 22.31, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:15:32.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:14:57
2025-11-26T07:15:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:15:32.434 [DEBUG] [Thread-13953] [transport.py] [_log()] starting thread (client mode): 0x7374f880
2025-11-26T07:15:32.434 [DEBUG] [Thread-13953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:15:32.455 [DEBUG] [Thread-13953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:15:32.455 [INFO] [Thread-13953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] client lang: <none>
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] server lang: <none>
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] kex follows: False
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] Compression: none
2025-11-26T07:15:32.458 [DEBUG] [Thread-13953] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:15:32.475 [DEBUG] [Thread-13953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:15:32.475 [DEBUG] [Thread-13953] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:15:32.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:15:32.476 [DEBUG] [Thread-13953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:15:32.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:15:32.478 [DEBUG] [Thread-13953] [transport.py] [_log()] userauth is OK
2025-11-26T07:15:32.478 [DEBUG] [Thread-13953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:15:32.479 [DEBUG] [Thread-13953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:15:32.479 [DEBUG] [Thread-13953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:15:32.479 [DEBUG] [Thread-13953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:15:32.513 [INFO] [Thread-13953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:15:32.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:15:33.127 [DEBUG] [Thread-13953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:15:33.128 [DEBUG] [Thread-13953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:15:33.128 [DEBUG] [Thread-13953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:15:33.169 [DEBUG] [Thread-13953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:15:33.169 [DEBUG] [Thread-13953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:15:33.172 [DEBUG] [Thread-13953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:15:33.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:15:33.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:15:33.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:15:33.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:15:33.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:15:33.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:15:33.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:15:33.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:15:33.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:15:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.218843 -999.00  +21.80  15.62     18   -3.30 1 1 1 1 1   887    0 25.66 17.37 ----- 17.6 15.6 23.0 22.4 25.4 -27.6 25.1 -26.6 23.6 -25.6 23.7 -26.4
2025-11-26T07:15:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:15:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:15:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.218843
2025-11-26T07:15:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:15:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:15:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:15:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:15:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:15:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:14:57', tmtdew=30.46, humidity=12.06, cloud=0.0, wind=15.53, temperature=22.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:15:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:15:33.200 [DEBUG] [Thread-13953] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:15:33.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:15:33.295 [DEBUG] [Thread-13956] [transport.py] [_log()] starting thread (client mode): 0x7378f2b0
2025-11-26T07:15:33.295 [DEBUG] [Thread-13956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:15:33.310 [DEBUG] [Thread-13956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:15:33.310 [INFO] [Thread-13956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:15:33.317 [DEBUG] [Thread-13956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:15:33.318 [DEBUG] [Thread-13956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:15:33.318 [DEBUG] [Thread-13956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:15:33.318 [DEBUG] [Thread-13956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:15:33.318 [DEBUG] [Thread-13956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:15:33.318 [DEBUG] [Thread-13956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:15:33.318 [DEBUG] [Thread-13956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:15:33.318 [DEBUG] [Thread-13956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:15:33.318 [DEBUG] [Thread-13956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:15:33.318 [DEBUG] [Thread-13956] [transport.py] [_log()] client lang: <none>
2025-11-26T07:15:33.319 [DEBUG] [Thread-13956] [transport.py] [_log()] server lang: <none>
2025-11-26T07:15:33.319 [DEBUG] [Thread-13956] [transport.py] [_log()] kex follows: False
2025-11-26T07:15:33.319 [DEBUG] [Thread-13956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:15:33.319 [DEBUG] [Thread-13956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:15:33.319 [DEBUG] [Thread-13956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:15:33.319 [DEBUG] [Thread-13956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:15:33.319 [DEBUG] [Thread-13956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:15:33.319 [DEBUG] [Thread-13956] [transport.py] [_log()] Compression: none
2025-11-26T07:15:33.320 [DEBUG] [Thread-13956] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:15:33.375 [DEBUG] [Thread-13956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:15:33.375 [DEBUG] [Thread-13956] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:15:33.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:15:33.376 [DEBUG] [Thread-13956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:15:33.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:15:33.431 [DEBUG] [Thread-13956] [transport.py] [_log()] userauth is OK
2025-11-26T07:15:33.431 [DEBUG] [Thread-13956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:15:33.431 [DEBUG] [Thread-13956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:15:33.431 [DEBUG] [Thread-13956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:15:33.431 [DEBUG] [Thread-13956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:15:33.450 [INFO] [Thread-13956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:15:33.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:15:33.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:15:34.249 [DEBUG] [Thread-13956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:15:34.249 [DEBUG] [Thread-13956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:15:34.298 [DEBUG] [Thread-13956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:15:34.298 [DEBUG] [Thread-13956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:15:34.307 [DEBUG] [Thread-13956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:15:34.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:15: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')
2025-11-26T07:15:34.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:15:34.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:15:34.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:15:34.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:15:34.344 [DEBUG] [Thread-13956] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:15:35.480 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:15:35.481 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:15:39.605 [DEBUG] [Thread-13958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:15:46.151 [DEBUG] [Thread-13959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:16:01.204 [DEBUG] [Thread-13960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:16:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:16:04.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:16:04.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:16:05.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 16, 1), 30.51, 12.01, 0.0, 16.44, 22.28, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:16:05.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:16:01
2025-11-26T07:16:05.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:16:05.285 [DEBUG] [Thread-13961] [transport.py] [_log()] starting thread (client mode): 0x70d1d9f0
2025-11-26T07:16:05.285 [DEBUG] [Thread-13961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:16:05.306 [DEBUG] [Thread-13961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:16:05.306 [INFO] [Thread-13961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:16:05.309 [DEBUG] [Thread-13961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:16:05.309 [DEBUG] [Thread-13961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:16:05.309 [DEBUG] [Thread-13961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:16:05.309 [DEBUG] [Thread-13961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:16:05.309 [DEBUG] [Thread-13961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] client lang: <none>
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] server lang: <none>
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] kex follows: False
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:16:05.310 [DEBUG] [Thread-13961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:16:05.311 [DEBUG] [Thread-13961] [transport.py] [_log()] Compression: none
2025-11-26T07:16:05.311 [DEBUG] [Thread-13961] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:16:05.328 [DEBUG] [Thread-13961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:16:05.328 [DEBUG] [Thread-13961] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:16:05.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:16:05.329 [DEBUG] [Thread-13961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:16:05.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:16:05.331 [DEBUG] [Thread-13961] [transport.py] [_log()] userauth is OK
2025-11-26T07:16:05.331 [DEBUG] [Thread-13961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:16:05.331 [DEBUG] [Thread-13961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:16:05.331 [DEBUG] [Thread-13961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:16:05.331 [DEBUG] [Thread-13961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:16:05.356 [INFO] [Thread-13961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:16:05.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:16:06.136 [DEBUG] [Thread-13961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:16:06.136 [DEBUG] [Thread-13961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:16:06.136 [DEBUG] [Thread-13961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:16:06.177 [DEBUG] [Thread-13961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:16:06.177 [DEBUG] [Thread-13961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:16:06.180 [DEBUG] [Thread-13961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:16:06.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:16:06.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:16:06.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:16:06.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:16:06.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:16:06.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:16:06.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:16:06.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:16:06.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:16:06.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.219191 -999.00  +21.90  18.87     17   -3.40 1 1 1 1 1   887    0 25.64 15.24 ----- 16.7 18.9 34.2 21.0 25.4 -27.2 25.1 -26.4 23.6 -25.5 23.8 -26.4
2025-11-26T07:16:06.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:16:06.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:16:06.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.219191
2025-11-26T07:16:06.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:16:06.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:16:06.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:16:06.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:16:06.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:16:06.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:16:01', tmtdew=30.51, humidity=12.01, cloud=0.0, wind=16.44, temperature=22.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:15:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:16:06.208 [DEBUG] [Thread-13961] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:16:06.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:16:06.304 [DEBUG] [Thread-13964] [transport.py] [_log()] starting thread (client mode): 0x70d1cfd0
2025-11-26T07:16:06.304 [DEBUG] [Thread-13964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:16:06.319 [DEBUG] [Thread-13964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:16:06.319 [INFO] [Thread-13964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:16:06.326 [DEBUG] [Thread-13964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:16:06.326 [DEBUG] [Thread-13964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:16:06.326 [DEBUG] [Thread-13964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] client lang: <none>
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] server lang: <none>
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] kex follows: False
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] Compression: none
2025-11-26T07:16:06.327 [DEBUG] [Thread-13964] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:16:06.387 [DEBUG] [Thread-13964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:16:06.388 [DEBUG] [Thread-13964] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:16:06.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:16:06.389 [DEBUG] [Thread-13964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:16:06.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:16:06.443 [DEBUG] [Thread-13964] [transport.py] [_log()] userauth is OK
2025-11-26T07:16:06.443 [DEBUG] [Thread-13964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:16:06.443 [DEBUG] [Thread-13964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:16:06.443 [DEBUG] [Thread-13964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:16:06.443 [DEBUG] [Thread-13964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:16:06.466 [INFO] [Thread-13964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:16:06.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:16:06.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:16:07.320 [DEBUG] [Thread-13964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:16:07.321 [DEBUG] [Thread-13964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:16:07.369 [DEBUG] [Thread-13964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:16:07.369 [DEBUG] [Thread-13964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:16:07.378 [DEBUG] [Thread-13964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:16:07.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:16:07.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:16:07.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:16:07.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:16:07.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:16:07.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:16:07.415 [DEBUG] [Thread-13964] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:16:16.238 [DEBUG] [Thread-13966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:16:31.282 [DEBUG] [Thread-13967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:16:35.622 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:16:35.623 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:16:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:16:37.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:16:37.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:16:38.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 16, 33), 30.64, 12.23, 0.0, 16.73, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:16:38.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:16:33
2025-11-26T07:16:38.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:16:38.358 [DEBUG] [Thread-13968] [transport.py] [_log()] starting thread (client mode): 0x70d2a9b0
2025-11-26T07:16:38.358 [DEBUG] [Thread-13968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:16:38.378 [DEBUG] [Thread-13968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:16:38.378 [INFO] [Thread-13968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:16:38.381 [DEBUG] [Thread-13968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:16:38.381 [DEBUG] [Thread-13968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] client lang: <none>
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] server lang: <none>
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] kex follows: False
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:16:38.382 [DEBUG] [Thread-13968] [transport.py] [_log()] Compression: none
2025-11-26T07:16:38.383 [DEBUG] [Thread-13968] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:16:38.401 [DEBUG] [Thread-13968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:16:38.401 [DEBUG] [Thread-13968] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:16:38.402 [DEBUG] [Thread-13968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:16:38.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:16:38.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:16:38.404 [DEBUG] [Thread-13968] [transport.py] [_log()] userauth is OK
2025-11-26T07:16:38.404 [DEBUG] [Thread-13968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:16:38.404 [DEBUG] [Thread-13968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:16:38.404 [DEBUG] [Thread-13968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:16:38.404 [DEBUG] [Thread-13968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:16:38.423 [INFO] [Thread-13968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:16:38.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:16:39.009 [DEBUG] [Thread-13968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:16:39.009 [DEBUG] [Thread-13968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:16:39.009 [DEBUG] [Thread-13968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:16:39.050 [DEBUG] [Thread-13968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:16:39.050 [DEBUG] [Thread-13968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:16:39.054 [DEBUG] [Thread-13968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:16:39.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:16:39.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:16:39.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:16:39.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:16:39.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:16:39.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:16:39.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:16:39.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:16:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:16:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.219538 -999.00  +22.00  14.72     18   -3.20 1 1 1 1 1   887    0 26.04 15.66 ----- 21.0 14.7 35.2 21.5 25.4 -27.3 25.1 -26.2 23.7 -25.3 23.8 -26.3
2025-11-26T07:16:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:16:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:16:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.219538
2025-11-26T07:16:39.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:16:39.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:16:39.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:16:39.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:16:39.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:16:39.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:16:33', tmtdew=30.64, humidity=12.23, cloud=0.0, wind=16.73, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:16:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:16:39.082 [DEBUG] [Thread-13968] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:16:39.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:16:39.177 [DEBUG] [Thread-13971] [transport.py] [_log()] starting thread (client mode): 0x70d2a5c0
2025-11-26T07:16:39.177 [DEBUG] [Thread-13971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:16:39.193 [DEBUG] [Thread-13971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:16:39.193 [INFO] [Thread-13971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:16:39.200 [DEBUG] [Thread-13971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] client lang: <none>
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] server lang: <none>
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] kex follows: False
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] Compression: none
2025-11-26T07:16:39.201 [DEBUG] [Thread-13971] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:16:39.258 [DEBUG] [Thread-13971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:16:39.259 [DEBUG] [Thread-13971] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:16:39.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:16:39.259 [DEBUG] [Thread-13971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:16:39.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:16:39.314 [DEBUG] [Thread-13971] [transport.py] [_log()] userauth is OK
2025-11-26T07:16:39.315 [DEBUG] [Thread-13971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:16:39.315 [DEBUG] [Thread-13971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:16:39.315 [DEBUG] [Thread-13971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:16:39.315 [DEBUG] [Thread-13971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:16:39.333 [INFO] [Thread-13971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:16:39.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:16:39.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:16:39.641 [DEBUG] [Thread-13973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:16:40.183 [DEBUG] [Thread-13971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:16:40.183 [DEBUG] [Thread-13971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:16:40.231 [DEBUG] [Thread-13971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:16:40.231 [DEBUG] [Thread-13971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:16:40.240 [DEBUG] [Thread-13971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:16:40.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:16:40.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:16:40.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:16:40.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:16:40.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:16:40.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:16:40.277 [DEBUG] [Thread-13971] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:16:46.311 [DEBUG] [Thread-13974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:17:01.373 [DEBUG] [Thread-13975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:17:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:17:10.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:17:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:17:10.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 17, 5), 30.14, 12.65, 0.0, 18.39, 22.4, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:17:10.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:17:05
2025-11-26T07:17:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:17:11.188 [DEBUG] [Thread-13976] [transport.py] [_log()] starting thread (client mode): 0x70d1e3e0
2025-11-26T07:17:11.189 [DEBUG] [Thread-13976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:17:11.209 [DEBUG] [Thread-13976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:17:11.209 [INFO] [Thread-13976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] client lang: <none>
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] server lang: <none>
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] kex follows: False
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] Compression: none
2025-11-26T07:17:11.212 [DEBUG] [Thread-13976] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:17:11.230 [DEBUG] [Thread-13976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:17:11.230 [DEBUG] [Thread-13976] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:17:11.231 [DEBUG] [Thread-13976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:17:11.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:17:11.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:17:11.233 [DEBUG] [Thread-13976] [transport.py] [_log()] userauth is OK
2025-11-26T07:17:11.233 [DEBUG] [Thread-13976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:17:11.233 [DEBUG] [Thread-13976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:17:11.233 [DEBUG] [Thread-13976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:17:11.234 [DEBUG] [Thread-13976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:17:11.258 [INFO] [Thread-13976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:17:11.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:17:12.044 [DEBUG] [Thread-13976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:17:12.044 [DEBUG] [Thread-13976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:17:12.044 [DEBUG] [Thread-13976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:17:12.084 [DEBUG] [Thread-13976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:17:12.084 [DEBUG] [Thread-13976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:17:12.087 [DEBUG] [Thread-13976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:17:12.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:17:12.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:17:12.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:17:12.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:17:12.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:17:12.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:17:12.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:17:12.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:17:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:17:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.219885 -999.00  +22.00  20.60     18   -3.00 1 1 1 1 1   887    0 26.12 13.15 ----- 17.7 20.6 43.4 25.6 25.5 -27.5 25.1 -26.9 23.7 -25.9 23.8 -26.5
2025-11-26T07:17:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:17:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:17:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.219885
2025-11-26T07:17:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:17:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:17:12.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:17:12.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:17:12.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:17:12.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:17:05', tmtdew=30.14, humidity=12.65, cloud=0.0, wind=18.39, temperature=22.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:16:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:17:12.101 [DEBUG] [Thread-13976] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:17:12.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:17:12.184 [DEBUG] [Thread-13979] [transport.py] [_log()] starting thread (client mode): 0x70d28bb0
2025-11-26T07:17:12.184 [DEBUG] [Thread-13979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:17:12.200 [DEBUG] [Thread-13979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:17:12.200 [INFO] [Thread-13979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] client lang: <none>
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] server lang: <none>
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] kex follows: False
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] Compression: none
2025-11-26T07:17:12.207 [DEBUG] [Thread-13979] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:17:12.274 [DEBUG] [Thread-13979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:17:12.274 [DEBUG] [Thread-13979] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:17:12.275 [DEBUG] [Thread-13979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:17:12.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:17:12.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:17:12.330 [DEBUG] [Thread-13979] [transport.py] [_log()] userauth is OK
2025-11-26T07:17:12.330 [DEBUG] [Thread-13979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:17:12.330 [DEBUG] [Thread-13979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:17:12.330 [DEBUG] [Thread-13979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:17:12.330 [DEBUG] [Thread-13979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:17:12.349 [INFO] [Thread-13979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:17:12.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:17:12.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:17:13.205 [DEBUG] [Thread-13979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:17:13.205 [DEBUG] [Thread-13979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:17:13.255 [DEBUG] [Thread-13979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:17:13.255 [DEBUG] [Thread-13979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:17:13.264 [DEBUG] [Thread-13979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:17:13.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:17:13.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:17:13.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:17:13.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:17:13.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:17:13.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:17:13.304 [DEBUG] [Thread-13979] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:17:16.406 [DEBUG] [Thread-13981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:17:31.466 [DEBUG] [Thread-13982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:17:35.773 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:17:35.774 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:17:39.670 [DEBUG] [Thread-13983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:17:43.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:17:43.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:17:43.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:17:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 17, 37), 30.3, 12.6, 0.0, 13.87, 22.51, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:17:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:17:37
2025-11-26T07:17:44.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:17:44.276 [DEBUG] [Thread-13984] [transport.py] [_log()] starting thread (client mode): 0x70d1e290
2025-11-26T07:17:44.276 [DEBUG] [Thread-13984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:17:44.297 [DEBUG] [Thread-13984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:17:44.297 [INFO] [Thread-13984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] client lang: <none>
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] server lang: <none>
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] kex follows: False
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] Compression: none
2025-11-26T07:17:44.300 [DEBUG] [Thread-13984] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:17:44.315 [DEBUG] [Thread-13984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:17:44.315 [DEBUG] [Thread-13984] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:17:44.315 [DEBUG] [Thread-13984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:17:44.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:17:44.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:17:44.316 [DEBUG] [Thread-13984] [transport.py] [_log()] userauth is OK
2025-11-26T07:17:44.316 [DEBUG] [Thread-13984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:17:44.316 [DEBUG] [Thread-13984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:17:44.316 [DEBUG] [Thread-13984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:17:44.316 [DEBUG] [Thread-13984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:17:44.343 [INFO] [Thread-13984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:17:44.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:17:44.955 [DEBUG] [Thread-13984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:17:44.955 [DEBUG] [Thread-13984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:17:44.955 [DEBUG] [Thread-13984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:17:44.996 [DEBUG] [Thread-13984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:17:44.996 [DEBUG] [Thread-13984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:17:44.999 [DEBUG] [Thread-13984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:17:45.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:17:45.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:17:45.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:17:45.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:17:45.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:17:45.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:17:45.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:17:45.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:17:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:17:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.220232 -999.00  +22.00  13.31     18   -3.10 1 1 1 1 1   887    0 25.91 10.83 ----- 17.1 13.3 22.9 22.2 25.5 -27.5 25.2 -26.2 23.8 -25.8 23.9 -26.6
2025-11-26T07:17:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:17:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:17:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.220232
2025-11-26T07:17:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:17:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:17:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:17:45.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:17:45.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:17:45.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:17:37', tmtdew=30.3, humidity=12.6, cloud=0.0, wind=13.87, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:17:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:17:45.021 [DEBUG] [Thread-13984] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:17:45.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:17:45.105 [DEBUG] [Thread-13987] [transport.py] [_log()] starting thread (client mode): 0x7378f820
2025-11-26T07:17:45.105 [DEBUG] [Thread-13987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:17:45.120 [DEBUG] [Thread-13987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:17:45.120 [INFO] [Thread-13987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:17:45.127 [DEBUG] [Thread-13987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:17:45.127 [DEBUG] [Thread-13987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:17:45.127 [DEBUG] [Thread-13987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:17:45.127 [DEBUG] [Thread-13987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:17:45.127 [DEBUG] [Thread-13987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:17:45.127 [DEBUG] [Thread-13987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:17:45.127 [DEBUG] [Thread-13987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:17:45.127 [DEBUG] [Thread-13987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] client lang: <none>
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] server lang: <none>
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] kex follows: False
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] Compression: none
2025-11-26T07:17:45.128 [DEBUG] [Thread-13987] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:17:45.183 [DEBUG] [Thread-13987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:17:45.183 [DEBUG] [Thread-13987] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:17:45.183 [DEBUG] [Thread-13987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:17:45.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:17:45.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:17:45.240 [DEBUG] [Thread-13987] [transport.py] [_log()] userauth is OK
2025-11-26T07:17:45.240 [DEBUG] [Thread-13987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:17:45.240 [DEBUG] [Thread-13987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:17:45.241 [DEBUG] [Thread-13987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:17:45.241 [DEBUG] [Thread-13987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:17:45.254 [INFO] [Thread-13987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:17:45.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:17:45.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:17:46.098 [DEBUG] [Thread-13987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:17:46.098 [DEBUG] [Thread-13987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:17:46.146 [DEBUG] [Thread-13987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:17:46.146 [DEBUG] [Thread-13987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:17:46.154 [DEBUG] [Thread-13987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:17:46.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:17:46.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:17:46.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:17:46.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:17:46.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:17:46.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:17:46.186 [DEBUG] [Thread-13987] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:17:46.497 [DEBUG] [Thread-13989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:18:01.544 [DEBUG] [Thread-13990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:18:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:18:16.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:18:16.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:18:16.578 [DEBUG] [Thread-13991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:18:16.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 18, 9), 30.39, 12.51, 0.0, 16.07, 22.53, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:18:16.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:18:09
2025-11-26T07:18:16.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:18:17.139 [DEBUG] [Thread-13992] [transport.py] [_log()] starting thread (client mode): 0x7378dc00
2025-11-26T07:18:17.139 [DEBUG] [Thread-13992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:18:17.161 [DEBUG] [Thread-13992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:18:17.161 [INFO] [Thread-13992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:18:17.164 [DEBUG] [Thread-13992] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:18:17.164 [DEBUG] [Thread-13992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:18:17.164 [DEBUG] [Thread-13992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:18:17.164 [DEBUG] [Thread-13992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:18:17.164 [DEBUG] [Thread-13992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:18:17.164 [DEBUG] [Thread-13992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:18:17.164 [DEBUG] [Thread-13992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] client lang: <none>
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] server lang: <none>
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] kex follows: False
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] Compression: none
2025-11-26T07:18:17.165 [DEBUG] [Thread-13992] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:18:17.184 [DEBUG] [Thread-13992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:18:17.185 [DEBUG] [Thread-13992] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:18:17.186 [DEBUG] [Thread-13992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:18:17.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:18:17.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:18:17.188 [DEBUG] [Thread-13992] [transport.py] [_log()] userauth is OK
2025-11-26T07:18:17.188 [DEBUG] [Thread-13992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:18:17.188 [DEBUG] [Thread-13992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:18:17.188 [DEBUG] [Thread-13992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:18:17.188 [DEBUG] [Thread-13992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:18:17.211 [INFO] [Thread-13992] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:18:17.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:18:18.057 [DEBUG] [Thread-13992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:18:18.057 [DEBUG] [Thread-13992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:18:18.057 [DEBUG] [Thread-13992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:18:18.098 [DEBUG] [Thread-13992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:18:18.098 [DEBUG] [Thread-13992] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:18:18.101 [DEBUG] [Thread-13992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:18:18.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:18:18.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:18:18.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:18:18.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:18:18.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:18:18.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:18:18.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:18:18.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:18:18.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:18:18.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.220579 -999.00  +22.10  18.22     18   -3.20 1 1 1 1 1   887    0 25.82 9.08 ----- 18.9 18.2 29.6 21.2 25.6 -27.1 25.2 -26.9 23.8 -26.0 23.9 -26.3
2025-11-26T07:18:18.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:18:18.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:18:18.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.220579
2025-11-26T07:18:18.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:18:18.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:18:18.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:18:18.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:18:18.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:18:18.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:18:09', tmtdew=30.39, humidity=12.51, cloud=0.0, wind=16.07, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:17:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:18:18.138 [DEBUG] [Thread-13992] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:18:18.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:18:18.236 [DEBUG] [Thread-13995] [transport.py] [_log()] starting thread (client mode): 0x7376c520
2025-11-26T07:18:18.236 [DEBUG] [Thread-13995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:18:18.253 [DEBUG] [Thread-13995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:18:18.254 [INFO] [Thread-13995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] client lang: <none>
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] server lang: <none>
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] kex follows: False
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] Compression: none
2025-11-26T07:18:18.262 [DEBUG] [Thread-13995] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:18:18.328 [DEBUG] [Thread-13995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:18:18.329 [DEBUG] [Thread-13995] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:18:18.330 [DEBUG] [Thread-13995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:18:18.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:18:18.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:18:18.385 [DEBUG] [Thread-13995] [transport.py] [_log()] userauth is OK
2025-11-26T07:18:18.385 [DEBUG] [Thread-13995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:18:18.386 [DEBUG] [Thread-13995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:18:18.386 [DEBUG] [Thread-13995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:18:18.386 [DEBUG] [Thread-13995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:18:18.405 [INFO] [Thread-13995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:18:18.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:18:18.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:18:19.292 [DEBUG] [Thread-13995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:18:19.292 [DEBUG] [Thread-13995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:18:19.341 [DEBUG] [Thread-13995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:18:19.341 [DEBUG] [Thread-13995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:18:19.349 [DEBUG] [Thread-13995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:18:19.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:18:19.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:18:19.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:18:19.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:18:19.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:18:19.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:18:19.381 [DEBUG] [Thread-13995] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:18:31.609 [DEBUG] [Thread-13997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:18:35.915 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:18:35.916 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:18:39.728 [DEBUG] [Thread-13998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:18:46.668 [DEBUG] [Thread-13999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:18:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:18:49.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:18:49.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:18:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 18, 41), 30.56, 12.05, 0.0, 23.43, 22.5, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:18:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:18:41
2025-11-26T07:18:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:18:50.327 [DEBUG] [Thread-14000] [transport.py] [_log()] starting thread (client mode): 0x7378c8b0
2025-11-26T07:18:50.327 [DEBUG] [Thread-14000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:18:50.347 [DEBUG] [Thread-14000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:18:50.347 [INFO] [Thread-14000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:18:50.350 [DEBUG] [Thread-14000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:18:50.350 [DEBUG] [Thread-14000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:18:50.350 [DEBUG] [Thread-14000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:18:50.350 [DEBUG] [Thread-14000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:18:50.350 [DEBUG] [Thread-14000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] client lang: <none>
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] server lang: <none>
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] kex follows: False
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:18:50.351 [DEBUG] [Thread-14000] [transport.py] [_log()] Compression: none
2025-11-26T07:18:50.352 [DEBUG] [Thread-14000] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:18:50.372 [DEBUG] [Thread-14000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:18:50.373 [DEBUG] [Thread-14000] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:18:50.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:18:50.374 [DEBUG] [Thread-14000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:18:50.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:18:50.417 [DEBUG] [Thread-14000] [transport.py] [_log()] userauth is OK
2025-11-26T07:18:50.417 [DEBUG] [Thread-14000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:18:50.417 [DEBUG] [Thread-14000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:18:50.417 [DEBUG] [Thread-14000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:18:50.417 [DEBUG] [Thread-14000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:18:50.449 [INFO] [Thread-14000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:18:50.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:18:51.022 [DEBUG] [Thread-14000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:18:51.022 [DEBUG] [Thread-14000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:18:51.022 [DEBUG] [Thread-14000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:18:51.063 [DEBUG] [Thread-14000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:18:51.063 [DEBUG] [Thread-14000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:18:51.066 [DEBUG] [Thread-14000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:18:51.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:18:51.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:18:51.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:18:51.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:18:51.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:18:51.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:18:51.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:18:51.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:18:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:18:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.220927 -999.00  +22.10  19.08     17   -3.30 1 1 1 1 1   887    0 25.46 8.67 ----- 21.5 19.1 32.8 23.7 25.6 -27.8 25.3 -26.6 23.8 -25.5 23.9 -26.4
2025-11-26T07:18:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:18:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:18:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.220927
2025-11-26T07:18:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:18:51.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:18:51.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:18:51.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:18:51.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:18:51.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:18:41', tmtdew=30.56, humidity=12.05, cloud=0.0, wind=23.43, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:18:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:18:51.095 [DEBUG] [Thread-14000] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:18:51.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:18:51.191 [DEBUG] [Thread-14003] [transport.py] [_log()] starting thread (client mode): 0x7378fb50
2025-11-26T07:18:51.191 [DEBUG] [Thread-14003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:18:51.205 [DEBUG] [Thread-14003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:18:51.206 [INFO] [Thread-14003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:18:51.213 [DEBUG] [Thread-14003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:18:51.213 [DEBUG] [Thread-14003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:18:51.213 [DEBUG] [Thread-14003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:18:51.213 [DEBUG] [Thread-14003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:18:51.213 [DEBUG] [Thread-14003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] client lang: <none>
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] server lang: <none>
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] kex follows: False
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] Compression: none
2025-11-26T07:18:51.214 [DEBUG] [Thread-14003] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:18:51.273 [DEBUG] [Thread-14003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:18:51.274 [DEBUG] [Thread-14003] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:18:51.275 [DEBUG] [Thread-14003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:18:51.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:18:51.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:18:51.333 [DEBUG] [Thread-14003] [transport.py] [_log()] userauth is OK
2025-11-26T07:18:51.333 [DEBUG] [Thread-14003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:18:51.333 [DEBUG] [Thread-14003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:18:51.333 [DEBUG] [Thread-14003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:18:51.333 [DEBUG] [Thread-14003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:18:51.353 [INFO] [Thread-14003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:18:51.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:18:51.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:18:52.239 [DEBUG] [Thread-14003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:18:52.239 [DEBUG] [Thread-14003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:18:52.287 [DEBUG] [Thread-14003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:18:52.287 [DEBUG] [Thread-14003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:18:52.296 [DEBUG] [Thread-14003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:18:52.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:18:52.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:18:52.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:18:52.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:18:52.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:18:52.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:18:52.331 [DEBUG] [Thread-14003] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:19:01.699 [DEBUG] [Thread-14005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:19:16.747 [DEBUG] [Thread-14006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:19:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:19:22.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:19:22.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:19:23.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 19, 13), 30.47, 12.13, 0.0, 20.22, 22.46, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:19:23.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:19:13
2025-11-26T07:19:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:19:23.277 [DEBUG] [Thread-14007] [transport.py] [_log()] starting thread (client mode): 0x70d2a9b0
2025-11-26T07:19:23.278 [DEBUG] [Thread-14007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:19:23.293 [DEBUG] [Thread-14007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:19:23.294 [INFO] [Thread-14007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:19:23.296 [DEBUG] [Thread-14007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] client lang: <none>
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] server lang: <none>
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] kex follows: False
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] Compression: none
2025-11-26T07:19:23.297 [DEBUG] [Thread-14007] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:19:23.314 [DEBUG] [Thread-14007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:19:23.315 [DEBUG] [Thread-14007] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:19:23.315 [DEBUG] [Thread-14007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:19:23.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:19:23.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:19:23.317 [DEBUG] [Thread-14007] [transport.py] [_log()] userauth is OK
2025-11-26T07:19:23.317 [DEBUG] [Thread-14007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:19:23.318 [DEBUG] [Thread-14007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:19:23.318 [DEBUG] [Thread-14007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:19:23.318 [DEBUG] [Thread-14007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:19:23.343 [INFO] [Thread-14007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:19:23.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:19:24.102 [DEBUG] [Thread-14007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:19:24.103 [DEBUG] [Thread-14007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:19:24.103 [DEBUG] [Thread-14007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:19:24.144 [DEBUG] [Thread-14007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:19:24.144 [DEBUG] [Thread-14007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:19:24.147 [DEBUG] [Thread-14007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:19:24.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:19:24.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:19:24.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:19:24.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:19:24.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:19:24.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:19:24.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:19:24.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:19:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:19:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.221621 -999.00  +22.10  19.39     17   -3.30 1 1 1 1 1   887    0 24.98 8.85 ----- 18.7 19.4 27.4 22.0 25.6 -27.6 25.3 -26.9 23.9 -25.5 24.0 -26.3
2025-11-26T07:19:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:19:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:19:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.221621
2025-11-26T07:19:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:19:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:19:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:19:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:19:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:19:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:19:13', tmtdew=30.47, humidity=12.13, cloud=0.0, wind=20.22, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:19:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:19:24.166 [DEBUG] [Thread-14007] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:19:24.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:19:24.263 [DEBUG] [Thread-14010] [transport.py] [_log()] starting thread (client mode): 0x7378e890
2025-11-26T07:19:24.263 [DEBUG] [Thread-14010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:19:24.277 [DEBUG] [Thread-14010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:19:24.277 [INFO] [Thread-14010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] client lang: <none>
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] server lang: <none>
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] kex follows: False
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:19:24.285 [DEBUG] [Thread-14010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:19:24.286 [DEBUG] [Thread-14010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:19:24.286 [DEBUG] [Thread-14010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:19:24.286 [DEBUG] [Thread-14010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:19:24.286 [DEBUG] [Thread-14010] [transport.py] [_log()] Compression: none
2025-11-26T07:19:24.286 [DEBUG] [Thread-14010] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:19:24.345 [DEBUG] [Thread-14010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:19:24.346 [DEBUG] [Thread-14010] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:19:24.347 [DEBUG] [Thread-14010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:19:24.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:19:24.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:19:24.404 [DEBUG] [Thread-14010] [transport.py] [_log()] userauth is OK
2025-11-26T07:19:24.404 [DEBUG] [Thread-14010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:19:24.404 [DEBUG] [Thread-14010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:19:24.405 [DEBUG] [Thread-14010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:19:24.405 [DEBUG] [Thread-14010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:19:24.423 [INFO] [Thread-14010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:19:24.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:19:24.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:19:25.282 [DEBUG] [Thread-14010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:19:25.283 [DEBUG] [Thread-14010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:19:25.331 [DEBUG] [Thread-14010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:19:25.331 [DEBUG] [Thread-14010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:19:25.340 [DEBUG] [Thread-14010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:19:25.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:19:25.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:19:25.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:19:25.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:19:25.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:19:25.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:19:25.382 [DEBUG] [Thread-14010] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:19:31.789 [DEBUG] [Thread-14012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:19:36.055 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:19:36.056 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:19:39.761 [DEBUG] [Thread-14013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:19:46.845 [DEBUG] [Thread-14014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:19:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:19:55.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:19:55.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:19:56.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 19, 45), 30.47, 12.13, 0.0, 14.95, 22.51, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:19:56.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:19:45
2025-11-26T07:19:56.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:19:56.335 [DEBUG] [Thread-14015] [transport.py] [_log()] starting thread (client mode): 0x7378fc10
2025-11-26T07:19:56.335 [DEBUG] [Thread-14015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:19:56.356 [DEBUG] [Thread-14015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:19:56.356 [INFO] [Thread-14015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:19:56.359 [DEBUG] [Thread-14015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:19:56.359 [DEBUG] [Thread-14015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:19:56.359 [DEBUG] [Thread-14015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:19:56.359 [DEBUG] [Thread-14015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:19:56.359 [DEBUG] [Thread-14015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:19:56.359 [DEBUG] [Thread-14015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:19:56.359 [DEBUG] [Thread-14015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] client lang: <none>
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] server lang: <none>
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] kex follows: False
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] Compression: none
2025-11-26T07:19:56.360 [DEBUG] [Thread-14015] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:19:56.380 [DEBUG] [Thread-14015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:19:56.381 [DEBUG] [Thread-14015] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:19:56.382 [DEBUG] [Thread-14015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:19:56.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:19:56.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:19:56.425 [DEBUG] [Thread-14015] [transport.py] [_log()] userauth is OK
2025-11-26T07:19:56.425 [DEBUG] [Thread-14015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:19:56.425 [DEBUG] [Thread-14015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:19:56.425 [DEBUG] [Thread-14015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:19:56.425 [DEBUG] [Thread-14015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:19:56.445 [INFO] [Thread-14015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:19:56.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:19:57.064 [DEBUG] [Thread-14015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:19:57.064 [DEBUG] [Thread-14015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:19:57.065 [DEBUG] [Thread-14015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:19:57.105 [DEBUG] [Thread-14015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:19:57.105 [DEBUG] [Thread-14015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:19:57.109 [DEBUG] [Thread-14015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:19:57.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:19:57.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:19:57.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:19:57.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:19:57.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:19:57.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:19:57.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:19:57.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:19:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:19:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.221968 -999.00  +22.20  18.55     17   -3.30 1 1 1 1 1   887    0 25.42 9.42 ----- 21.0 18.6 22.0 24.3 25.7 -27.2 25.3 -26.6 23.9 -25.4 24.0 -26.5
2025-11-26T07:19:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:19:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:19:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.221968
2025-11-26T07:19:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:19:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:19:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:19:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:19:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:19:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:19:45', tmtdew=30.47, humidity=12.13, cloud=0.0, wind=14.95, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:19:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:19:57.138 [DEBUG] [Thread-14015] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:19:57.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:19:57.234 [DEBUG] [Thread-14018] [transport.py] [_log()] starting thread (client mode): 0x70d01c90
2025-11-26T07:19:57.234 [DEBUG] [Thread-14018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:19:57.249 [DEBUG] [Thread-14018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:19:57.249 [INFO] [Thread-14018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:19:57.257 [DEBUG] [Thread-14018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:19:57.257 [DEBUG] [Thread-14018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:19:57.257 [DEBUG] [Thread-14018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] client lang: <none>
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] server lang: <none>
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] kex follows: False
2025-11-26T07:19:57.258 [DEBUG] [Thread-14018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:19:57.259 [DEBUG] [Thread-14018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:19:57.259 [DEBUG] [Thread-14018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:19:57.259 [DEBUG] [Thread-14018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:19:57.259 [DEBUG] [Thread-14018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:19:57.259 [DEBUG] [Thread-14018] [transport.py] [_log()] Compression: none
2025-11-26T07:19:57.259 [DEBUG] [Thread-14018] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:19:57.314 [DEBUG] [Thread-14018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:19:57.315 [DEBUG] [Thread-14018] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:19:57.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:19:57.316 [DEBUG] [Thread-14018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:19:57.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:19:57.372 [DEBUG] [Thread-14018] [transport.py] [_log()] userauth is OK
2025-11-26T07:19:57.372 [DEBUG] [Thread-14018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:19:57.372 [DEBUG] [Thread-14018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:19:57.372 [DEBUG] [Thread-14018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:19:57.372 [DEBUG] [Thread-14018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:19:57.397 [INFO] [Thread-14018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:19:57.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:19:57.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:19:58.235 [DEBUG] [Thread-14018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:19:58.235 [DEBUG] [Thread-14018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:19:58.283 [DEBUG] [Thread-14018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:19:58.283 [DEBUG] [Thread-14018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:19:58.292 [DEBUG] [Thread-14018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:19:58.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:19:58.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:19:58.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:19:58.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:19:58.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:19:58.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:19:58.328 [DEBUG] [Thread-14018] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:20:01.878 [DEBUG] [Thread-14020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:20:16.924 [DEBUG] [Thread-14021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:20:28.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:20:28.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:20:28.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:20:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 20, 17), 30.55, 12.05, 0.0, 17.4, 22.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:20:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:20:17
2025-11-26T07:20:29.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:20:29.293 [DEBUG] [Thread-14022] [transport.py] [_log()] starting thread (client mode): 0x70d28bb0
2025-11-26T07:20:29.293 [DEBUG] [Thread-14022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:20:29.314 [DEBUG] [Thread-14022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:20:29.314 [INFO] [Thread-14022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:20:29.317 [DEBUG] [Thread-14022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] client lang: <none>
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] server lang: <none>
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] kex follows: False
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] Compression: none
2025-11-26T07:20:29.318 [DEBUG] [Thread-14022] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:20:29.334 [DEBUG] [Thread-14022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:20:29.334 [DEBUG] [Thread-14022] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:20:29.335 [DEBUG] [Thread-14022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:20:29.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:20:29.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:20:29.337 [DEBUG] [Thread-14022] [transport.py] [_log()] userauth is OK
2025-11-26T07:20:29.337 [DEBUG] [Thread-14022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:20:29.337 [DEBUG] [Thread-14022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:20:29.337 [DEBUG] [Thread-14022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:20:29.337 [DEBUG] [Thread-14022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:20:29.355 [INFO] [Thread-14022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:20:29.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:20:29.964 [DEBUG] [Thread-14022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:20:29.964 [DEBUG] [Thread-14022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:20:29.964 [DEBUG] [Thread-14022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:20:30.005 [DEBUG] [Thread-14022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:20:30.005 [DEBUG] [Thread-14022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:20:30.008 [DEBUG] [Thread-14022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:20:30.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:20:30.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:20:30.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:20:30.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:20:30.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:20:30.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:20:30.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:20:30.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:20:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:20:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.222315 -999.00  +22.20  11.25     18   -2.90 1 1 1 1 1   887    0 25.33 9.22 ----- 9.4 11.2 3.5 24.9 25.7 -27.0 25.4 -26.7 23.9 -25.9 24.0 -27.2
2025-11-26T07:20:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:20:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:20:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.222315
2025-11-26T07:20:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:20:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:20:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:20:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:20:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:20:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:20:17', tmtdew=30.55, humidity=12.05, cloud=0.0, wind=17.4, temperature=22.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:20:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:20:30.034 [DEBUG] [Thread-14022] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:20:30.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:20:30.130 [DEBUG] [Thread-14025] [transport.py] [_log()] starting thread (client mode): 0x761da590
2025-11-26T07:20:30.130 [DEBUG] [Thread-14025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:20:30.146 [DEBUG] [Thread-14025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:20:30.146 [INFO] [Thread-14025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] client lang: <none>
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] server lang: <none>
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] kex follows: False
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:20:30.154 [DEBUG] [Thread-14025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:20:30.155 [DEBUG] [Thread-14025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:20:30.155 [DEBUG] [Thread-14025] [transport.py] [_log()] Compression: none
2025-11-26T07:20:30.155 [DEBUG] [Thread-14025] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:20:30.214 [DEBUG] [Thread-14025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:20:30.215 [DEBUG] [Thread-14025] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:20:30.215 [DEBUG] [Thread-14025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:20:30.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:20:30.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:20:30.276 [DEBUG] [Thread-14025] [transport.py] [_log()] userauth is OK
2025-11-26T07:20:30.276 [DEBUG] [Thread-14025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:20:30.276 [DEBUG] [Thread-14025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:20:30.276 [DEBUG] [Thread-14025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:20:30.277 [DEBUG] [Thread-14025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:20:30.296 [INFO] [Thread-14025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:20:30.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:20:30.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:20:31.155 [DEBUG] [Thread-14025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:20:31.156 [DEBUG] [Thread-14025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:20:31.203 [DEBUG] [Thread-14025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:20:31.203 [DEBUG] [Thread-14025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:20:31.212 [DEBUG] [Thread-14025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:20:31.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:20:31.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:20:31.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:20:31.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:20:31.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:20:31.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:20:31.247 [DEBUG] [Thread-14025] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:20:31.960 [DEBUG] [Thread-14027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:20:36.197 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:20:36.198 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:20:39.812 [DEBUG] [Thread-14028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:20:47.008 [DEBUG] [Thread-14029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:21:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:21:01.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:21:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:21:01.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 20, 49), 30.44, 12.56, 0.0, 24.16, 22.51, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:21:01.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:20:49
2025-11-26T07:21:02.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:21:02.041 [DEBUG] [Thread-14030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:21:02.172 [DEBUG] [Thread-14031] [transport.py] [_log()] starting thread (client mode): 0x70d28e50
2025-11-26T07:21:02.172 [DEBUG] [Thread-14031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:21:02.192 [DEBUG] [Thread-14031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:21:02.192 [INFO] [Thread-14031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:21:02.195 [DEBUG] [Thread-14031] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:21:02.195 [DEBUG] [Thread-14031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:21:02.195 [DEBUG] [Thread-14031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:21:02.195 [DEBUG] [Thread-14031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:21:02.195 [DEBUG] [Thread-14031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:21:02.195 [DEBUG] [Thread-14031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:21:02.195 [DEBUG] [Thread-14031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] client lang: <none>
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] server lang: <none>
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] kex follows: False
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] Compression: none
2025-11-26T07:21:02.196 [DEBUG] [Thread-14031] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:21:02.214 [DEBUG] [Thread-14031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:21:02.214 [DEBUG] [Thread-14031] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:21:02.215 [DEBUG] [Thread-14031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:21:02.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:21:02.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:21:02.217 [DEBUG] [Thread-14031] [transport.py] [_log()] userauth is OK
2025-11-26T07:21:02.217 [DEBUG] [Thread-14031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:21:02.217 [DEBUG] [Thread-14031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:21:02.217 [DEBUG] [Thread-14031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:21:02.217 [DEBUG] [Thread-14031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:21:02.235 [INFO] [Thread-14031] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:21:02.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:21:02.845 [DEBUG] [Thread-14031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:21:02.845 [DEBUG] [Thread-14031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:21:02.846 [DEBUG] [Thread-14031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:21:02.886 [DEBUG] [Thread-14031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:21:02.886 [DEBUG] [Thread-14031] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:21:02.890 [DEBUG] [Thread-14031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:21:02.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:21:02.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:21:02.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:21:02.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:21:02.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:21:02.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:21:02.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:21:02.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:21:02.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:21:02.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.222663 -999.00  +22.10  19.06     18   -3.00 1 1 1 1 1   887    0 25.84 8.46 ----- 21.4 19.1 44.4 21.7 25.7 -27.2 25.4 -26.9 23.9 -26.2 24.0 -26.2
2025-11-26T07:21:02.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:21:02.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:21:02.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.222663
2025-11-26T07:21:02.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:21:02.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:21:02.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:21:02.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:21:02.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:21:02.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:20:49', tmtdew=30.44, humidity=12.56, cloud=0.0, wind=24.16, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:20:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:21:02.918 [DEBUG] [Thread-14031] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:21:03.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:21:03.017 [DEBUG] [Thread-14034] [transport.py] [_log()] starting thread (client mode): 0x7378e350
2025-11-26T07:21:03.017 [DEBUG] [Thread-14034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:21:03.033 [DEBUG] [Thread-14034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:21:03.033 [INFO] [Thread-14034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:21:03.041 [DEBUG] [Thread-14034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:21:03.041 [DEBUG] [Thread-14034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:21:03.041 [DEBUG] [Thread-14034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:21:03.042 [DEBUG] [Thread-14034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:21:03.042 [DEBUG] [Thread-14034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:21:03.042 [DEBUG] [Thread-14034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:21:03.042 [DEBUG] [Thread-14034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:21:03.042 [DEBUG] [Thread-14034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:21:03.042 [DEBUG] [Thread-14034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:21:03.042 [DEBUG] [Thread-14034] [transport.py] [_log()] client lang: <none>
2025-11-26T07:21:03.042 [DEBUG] [Thread-14034] [transport.py] [_log()] server lang: <none>
2025-11-26T07:21:03.043 [DEBUG] [Thread-14034] [transport.py] [_log()] kex follows: False
2025-11-26T07:21:03.043 [DEBUG] [Thread-14034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:21:03.043 [DEBUG] [Thread-14034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:21:03.043 [DEBUG] [Thread-14034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:21:03.043 [DEBUG] [Thread-14034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:21:03.043 [DEBUG] [Thread-14034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:21:03.043 [DEBUG] [Thread-14034] [transport.py] [_log()] Compression: none
2025-11-26T07:21:03.044 [DEBUG] [Thread-14034] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:21:03.104 [DEBUG] [Thread-14034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:21:03.105 [DEBUG] [Thread-14034] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:21:03.106 [DEBUG] [Thread-14034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:21:03.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:21:03.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:21:03.166 [DEBUG] [Thread-14034] [transport.py] [_log()] userauth is OK
2025-11-26T07:21:03.166 [DEBUG] [Thread-14034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:21:03.166 [DEBUG] [Thread-14034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:21:03.166 [DEBUG] [Thread-14034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:21:03.166 [DEBUG] [Thread-14034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:21:03.187 [INFO] [Thread-14034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:21:03.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:21:03.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:21:04.025 [DEBUG] [Thread-14034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:21:04.025 [DEBUG] [Thread-14034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:21:04.073 [DEBUG] [Thread-14034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:21:04.073 [DEBUG] [Thread-14034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:21:04.083 [DEBUG] [Thread-14034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:21:04.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:21:04.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:21:04.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:21:04.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:21:04.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:21:04.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:21:04.121 [DEBUG] [Thread-14034] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:21:17.077 [DEBUG] [Thread-14036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:21:32.134 [DEBUG] [Thread-14037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:21:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:21:34.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:21:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:21:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 21, 21), 30.39, 12.61, 0.0, 21.09, 22.53, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:21:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:21:21
2025-11-26T07:21:34.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:21:35.059 [DEBUG] [Thread-14038] [transport.py] [_log()] starting thread (client mode): 0x761d96c0
2025-11-26T07:21:35.059 [DEBUG] [Thread-14038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:21:35.079 [DEBUG] [Thread-14038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:21:35.079 [INFO] [Thread-14038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:21:35.083 [DEBUG] [Thread-14038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:21:35.083 [DEBUG] [Thread-14038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:21:35.083 [DEBUG] [Thread-14038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:21:35.083 [DEBUG] [Thread-14038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:21:35.083 [DEBUG] [Thread-14038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:21:35.083 [DEBUG] [Thread-14038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:21:35.083 [DEBUG] [Thread-14038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:21:35.083 [DEBUG] [Thread-14038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] client lang: <none>
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] server lang: <none>
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] kex follows: False
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] Compression: none
2025-11-26T07:21:35.084 [DEBUG] [Thread-14038] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:21:35.098 [DEBUG] [Thread-14038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:21:35.099 [DEBUG] [Thread-14038] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:21:35.100 [DEBUG] [Thread-14038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:21:35.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:21:35.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:21:35.141 [DEBUG] [Thread-14038] [transport.py] [_log()] userauth is OK
2025-11-26T07:21:35.141 [DEBUG] [Thread-14038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:21:35.141 [DEBUG] [Thread-14038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:21:35.142 [DEBUG] [Thread-14038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:21:35.142 [DEBUG] [Thread-14038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:21:35.164 [INFO] [Thread-14038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:21:35.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:21:35.808 [DEBUG] [Thread-14038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:21:35.808 [DEBUG] [Thread-14038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:21:35.808 [DEBUG] [Thread-14038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:21:35.849 [DEBUG] [Thread-14038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:21:35.849 [DEBUG] [Thread-14038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:21:35.853 [DEBUG] [Thread-14038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:21:35.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:21:35.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:21:35.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:21:35.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:21:35.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:21:35.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:21:35.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:21:35.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:21:35.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:21:35.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.223010 -999.00  +22.20  21.83     18   -2.70 1 1 1 1 1   887    0 25.50 7.60 ----- 17.7 21.8 28.2 25.3 25.7 -27.4 25.4 -26.9 23.9 -25.4 24.1 -26.4
2025-11-26T07:21:35.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:21:35.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:21:35.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.223010
2025-11-26T07:21:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:21:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:21:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:21:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:21:35.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:21:35.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:21:21', tmtdew=30.39, humidity=12.61, cloud=0.0, wind=21.09, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:21:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:21:35.880 [DEBUG] [Thread-14038] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:21:35.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:21:35.975 [DEBUG] [Thread-14041] [transport.py] [_log()] starting thread (client mode): 0x7376ca30
2025-11-26T07:21:35.975 [DEBUG] [Thread-14041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:21:35.990 [DEBUG] [Thread-14041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:21:35.991 [INFO] [Thread-14041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:21:35.998 [DEBUG] [Thread-14041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:21:35.998 [DEBUG] [Thread-14041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:21:35.998 [DEBUG] [Thread-14041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:21:35.998 [DEBUG] [Thread-14041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:21:35.998 [DEBUG] [Thread-14041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:21:35.998 [DEBUG] [Thread-14041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:21:35.998 [DEBUG] [Thread-14041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:21:35.998 [DEBUG] [Thread-14041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:21:35.998 [DEBUG] [Thread-14041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] client lang: <none>
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] server lang: <none>
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] kex follows: False
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] Compression: none
2025-11-26T07:21:35.999 [DEBUG] [Thread-14041] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:21:36.057 [DEBUG] [Thread-14041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:21:36.057 [DEBUG] [Thread-14041] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:21:36.058 [DEBUG] [Thread-14041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:21:36.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:21:36.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:21:36.113 [DEBUG] [Thread-14041] [transport.py] [_log()] userauth is OK
2025-11-26T07:21:36.113 [DEBUG] [Thread-14041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:21:36.113 [DEBUG] [Thread-14041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:21:36.113 [DEBUG] [Thread-14041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:21:36.114 [DEBUG] [Thread-14041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:21:36.132 [INFO] [Thread-14041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:21:36.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:21:36.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:21:36.341 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:21:36.342 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:21:36.958 [DEBUG] [Thread-14041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:21:36.959 [DEBUG] [Thread-14041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:21:37.007 [DEBUG] [Thread-14041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:21:37.007 [DEBUG] [Thread-14041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:21:37.016 [DEBUG] [Thread-14041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:21:37.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:21:37.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:21:37.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:21:37.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:21:37.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:21:37.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:21:37.053 [DEBUG] [Thread-14041] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:21:39.867 [DEBUG] [Thread-14043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:21:47.175 [DEBUG] [Thread-14044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:22:02.226 [DEBUG] [Thread-14045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:22:07.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:22:07.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:22:07.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:22:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 21, 53), 30.04, 12.71, 0.0, 17.4, 22.54, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:22:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:21:53
2025-11-26T07:22:07.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:22:08.009 [DEBUG] [Thread-14046] [transport.py] [_log()] starting thread (client mode): 0x7376fbb0
2025-11-26T07:22:08.009 [DEBUG] [Thread-14046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:22:08.029 [DEBUG] [Thread-14046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:22:08.030 [INFO] [Thread-14046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] client lang: <none>
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] server lang: <none>
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] kex follows: False
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] Compression: none
2025-11-26T07:22:08.033 [DEBUG] [Thread-14046] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:22:08.050 [DEBUG] [Thread-14046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:22:08.051 [DEBUG] [Thread-14046] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:22:08.051 [DEBUG] [Thread-14046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:22:08.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:22:08.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:22:08.053 [DEBUG] [Thread-14046] [transport.py] [_log()] userauth is OK
2025-11-26T07:22:08.053 [DEBUG] [Thread-14046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:22:08.053 [DEBUG] [Thread-14046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:22:08.053 [DEBUG] [Thread-14046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:22:08.054 [DEBUG] [Thread-14046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:22:08.078 [INFO] [Thread-14046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:22:08.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:22:08.670 [DEBUG] [Thread-14046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:22:08.670 [DEBUG] [Thread-14046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:22:08.670 [DEBUG] [Thread-14046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:22:08.711 [DEBUG] [Thread-14046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:22:08.711 [DEBUG] [Thread-14046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:22:08.714 [DEBUG] [Thread-14046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:22:08.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:22:08.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:22:08.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:22:08.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:22:08.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:22:08.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:22:08.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:22:08.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:22:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:22:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.223357 -999.00  +22.10  14.29     18   -2.70 1 1 1 1 1   887    0 25.52 5.61 ----- 12.7 14.3 343.8 26.8 25.7 -28.0 25.3 -27.4 23.9 -25.9 24.0 -27.6
2025-11-26T07:22:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:22:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:22:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.223357
2025-11-26T07:22:08.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:22:08.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:22:08.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:22:08.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:22:08.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:22:08.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:21:53', tmtdew=30.04, humidity=12.71, cloud=0.0, wind=17.4, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:21:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:22:08.744 [DEBUG] [Thread-14046] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:22:08.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:22:17.261 [DEBUG] [Thread-14049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:22:32.321 [DEBUG] [Thread-14050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:22:36.483 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:22:36.484 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:22:39.913 [DEBUG] [Thread-14051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:22:47.353 [DEBUG] [Thread-14052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:23:02.388 [DEBUG] [Thread-14053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:23:17.423 [DEBUG] [Thread-14054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:23:32.454 [DEBUG] [Thread-14055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:23:36.625 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:23:36.626 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:23:39.969 [DEBUG] [Thread-14056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:23:47.491 [DEBUG] [Thread-14057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:24:02.524 [DEBUG] [Thread-14058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:24:17.558 [DEBUG] [Thread-14059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:24:20.301 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-11-26T07:24:32.596 [DEBUG] [Thread-14060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:24:36.765 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:24:36.766 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:24:40.002 [DEBUG] [Thread-14061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:24:47.625 [DEBUG] [Thread-14062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:24:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:24:50.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:24:50.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:24:50.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 24, 33), 30.58, 12.32, 0.0, 21.35, 23.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:24:50.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:24:33
2025-11-26T07:24:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:24:51.254 [DEBUG] [Thread-14063] [transport.py] [_log()] starting thread (client mode): 0x737810c0
2025-11-26T07:24:51.254 [DEBUG] [Thread-14063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:24:51.273 [DEBUG] [Thread-14063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:24:51.274 [INFO] [Thread-14063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] client lang: <none>
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] server lang: <none>
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] kex follows: False
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] Compression: none
2025-11-26T07:24:51.277 [DEBUG] [Thread-14063] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:24:51.293 [DEBUG] [Thread-14063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:24:51.293 [DEBUG] [Thread-14063] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:24:51.294 [DEBUG] [Thread-14063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:24:51.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:24:51.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:24:51.296 [DEBUG] [Thread-14063] [transport.py] [_log()] userauth is OK
2025-11-26T07:24:51.296 [DEBUG] [Thread-14063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:24:51.296 [DEBUG] [Thread-14063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:24:51.296 [DEBUG] [Thread-14063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:24:51.296 [DEBUG] [Thread-14063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:24:51.311 [INFO] [Thread-14063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:24:51.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:24:51.917 [DEBUG] [Thread-14063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:24:51.917 [DEBUG] [Thread-14063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:24:51.917 [DEBUG] [Thread-14063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:24:51.958 [DEBUG] [Thread-14063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:24:51.958 [DEBUG] [Thread-14063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:24:51.962 [DEBUG] [Thread-14063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:24:51.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:24:51.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:24:51.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:24:51.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:24:51.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:24:51.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:24:51.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:24:51.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:24:51.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:24:51.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.225441 -999.00  +22.10  21.12     18   -3.10 1 1 1 1 1   887    0 25.13 0.10 ----- 18.7 21.1 31.2 23.5 25.8 -27.2 25.5 -26.8 24.0 -25.7 24.2 -27.2
2025-11-26T07:24:51.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:24:51.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:24:51.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.225441
2025-11-26T07:24:51.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:24:51.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:24:51.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:24:51.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:24:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:24:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:24:33', tmtdew=30.58, humidity=12.32, cloud=0.0, wind=21.35, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:24:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:24:51.983 [DEBUG] [Thread-14063] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:24:52.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:24:52.079 [DEBUG] [Thread-14066] [transport.py] [_log()] starting thread (client mode): 0x7376f3a0
2025-11-26T07:24:52.079 [DEBUG] [Thread-14066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:24:52.093 [DEBUG] [Thread-14066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:24:52.094 [INFO] [Thread-14066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:24:52.101 [DEBUG] [Thread-14066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:24:52.101 [DEBUG] [Thread-14066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:24:52.101 [DEBUG] [Thread-14066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:24:52.101 [DEBUG] [Thread-14066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] client lang: <none>
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] server lang: <none>
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] kex follows: False
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] Compression: none
2025-11-26T07:24:52.102 [DEBUG] [Thread-14066] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:24:52.165 [DEBUG] [Thread-14066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:24:52.166 [DEBUG] [Thread-14066] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:24:52.166 [DEBUG] [Thread-14066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:24:52.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:24:52.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:24:52.225 [DEBUG] [Thread-14066] [transport.py] [_log()] userauth is OK
2025-11-26T07:24:52.226 [DEBUG] [Thread-14066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:24:52.226 [DEBUG] [Thread-14066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:24:52.226 [DEBUG] [Thread-14066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:24:52.226 [DEBUG] [Thread-14066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:24:52.244 [INFO] [Thread-14066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:24:52.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:24:52.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:24:53.140 [DEBUG] [Thread-14066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:24:53.141 [DEBUG] [Thread-14066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:24:53.189 [DEBUG] [Thread-14066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:24:53.189 [DEBUG] [Thread-14066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:24:53.198 [DEBUG] [Thread-14066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:24:53.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:24:53.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:24: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
2025-11-26T07:24:53.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:24:53.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:24:53.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:24:53.270 [DEBUG] [Thread-14066] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:25:02.666 [DEBUG] [Thread-14068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:25:17.716 [DEBUG] [Thread-14069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:25:23.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:25:23.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:25:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:25:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 25, 5), 30.35, 12.56, 0.0, 14.5, 22.56, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:25:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:25:05
2025-11-26T07:25:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:25:24.241 [DEBUG] [Thread-14070] [transport.py] [_log()] starting thread (client mode): 0x70d2b250
2025-11-26T07:25:24.241 [DEBUG] [Thread-14070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:25:24.262 [DEBUG] [Thread-14070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:25:24.262 [INFO] [Thread-14070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:25:24.263 [DEBUG] [Thread-14070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:25:24.263 [DEBUG] [Thread-14070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] client lang: <none>
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] server lang: <none>
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] kex follows: False
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:25:24.264 [DEBUG] [Thread-14070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:25:24.265 [DEBUG] [Thread-14070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:25:24.265 [DEBUG] [Thread-14070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:25:24.265 [DEBUG] [Thread-14070] [transport.py] [_log()] Compression: none
2025-11-26T07:25:24.265 [DEBUG] [Thread-14070] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:25:24.275 [DEBUG] [Thread-14070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:25:24.276 [DEBUG] [Thread-14070] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:25:24.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:25:24.277 [DEBUG] [Thread-14070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:25:24.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:25:24.278 [DEBUG] [Thread-14070] [transport.py] [_log()] userauth is OK
2025-11-26T07:25:24.279 [DEBUG] [Thread-14070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:25:24.279 [DEBUG] [Thread-14070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:25:24.279 [DEBUG] [Thread-14070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:25:24.279 [DEBUG] [Thread-14070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:25:24.304 [INFO] [Thread-14070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:25:24.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:25:24.868 [DEBUG] [Thread-14070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:25:24.868 [DEBUG] [Thread-14070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:25:24.869 [DEBUG] [Thread-14070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:25:24.909 [DEBUG] [Thread-14070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:25:24.909 [DEBUG] [Thread-14070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:25:24.913 [DEBUG] [Thread-14070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:25:24.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:25:24.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:25:24.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:25:24.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:25:24.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:25:24.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:25:24.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:25:24.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:25:24.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:25:24.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.225787 -999.00  +22.20  15.98     18   -3.00 1 1 1 1 1   887    0 25.18 -1.37 ----- 15.4 16.0 18.9 23.9 25.9 -27.5 25.6 -26.0 24.1 -25.5 24.2 -26.1
2025-11-26T07:25:24.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:25:24.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:25:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.225787
2025-11-26T07:25:24.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:25:24.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:25:24.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:25:24.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:25:24.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:25:24.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:25:05', tmtdew=30.35, humidity=12.56, cloud=0.0, wind=14.5, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:25:07.997', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:25:24.938 [DEBUG] [Thread-14070] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:25:25.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:25:25.033 [DEBUG] [Thread-14073] [transport.py] [_log()] starting thread (client mode): 0x737814b0
2025-11-26T07:25:25.033 [DEBUG] [Thread-14073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:25:25.047 [DEBUG] [Thread-14073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:25:25.047 [INFO] [Thread-14073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:25:25.055 [DEBUG] [Thread-14073] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:25:25.055 [DEBUG] [Thread-14073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:25:25.055 [DEBUG] [Thread-14073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:25:25.055 [DEBUG] [Thread-14073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:25:25.055 [DEBUG] [Thread-14073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:25:25.055 [DEBUG] [Thread-14073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:25:25.055 [DEBUG] [Thread-14073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] client lang: <none>
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] server lang: <none>
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] kex follows: False
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] Compression: none
2025-11-26T07:25:25.056 [DEBUG] [Thread-14073] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:25:25.119 [DEBUG] [Thread-14073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:25:25.120 [DEBUG] [Thread-14073] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:25:25.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:25:25.121 [DEBUG] [Thread-14073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:25:25.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:25:25.180 [DEBUG] [Thread-14073] [transport.py] [_log()] userauth is OK
2025-11-26T07:25:25.181 [DEBUG] [Thread-14073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:25:25.181 [DEBUG] [Thread-14073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:25:25.181 [DEBUG] [Thread-14073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:25:25.181 [DEBUG] [Thread-14073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:25:25.199 [INFO] [Thread-14073] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:25:25.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:25:25.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:25:26.055 [DEBUG] [Thread-14073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:25:26.056 [DEBUG] [Thread-14073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:25:26.103 [DEBUG] [Thread-14073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:25:26.104 [DEBUG] [Thread-14073] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:25:26.113 [DEBUG] [Thread-14073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:25:26.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:25:26.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:25:26.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:25:26.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:25:26.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:25:26.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:25:26.150 [DEBUG] [Thread-14073] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:25:32.754 [DEBUG] [Thread-14075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:25:36.909 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:25:36.910 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:25:40.053 [DEBUG] [Thread-14076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:25:47.799 [DEBUG] [Thread-14077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:25:56.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:25:56.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:25:56.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:25:56.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 25, 37), 30.53, 12.55, 0.0, 13.11, 22.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:25:56.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:25:37
2025-11-26T07:25:56.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:25:57.083 [DEBUG] [Thread-14078] [transport.py] [_log()] starting thread (client mode): 0x70d2be80
2025-11-26T07:25:57.083 [DEBUG] [Thread-14078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:25:57.103 [DEBUG] [Thread-14078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:25:57.103 [INFO] [Thread-14078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] client lang: <none>
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] server lang: <none>
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] kex follows: False
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:25:57.105 [DEBUG] [Thread-14078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:25:57.106 [DEBUG] [Thread-14078] [transport.py] [_log()] Compression: none
2025-11-26T07:25:57.106 [DEBUG] [Thread-14078] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:25:57.120 [DEBUG] [Thread-14078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:25:57.120 [DEBUG] [Thread-14078] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:25:57.121 [DEBUG] [Thread-14078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:25:57.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:25:57.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:25:57.123 [DEBUG] [Thread-14078] [transport.py] [_log()] userauth is OK
2025-11-26T07:25:57.123 [DEBUG] [Thread-14078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:25:57.123 [DEBUG] [Thread-14078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:25:57.123 [DEBUG] [Thread-14078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:25:57.123 [DEBUG] [Thread-14078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:25:57.143 [INFO] [Thread-14078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:25:57.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:25:57.690 [DEBUG] [Thread-14078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:25:57.690 [DEBUG] [Thread-14078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:25:57.690 [DEBUG] [Thread-14078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:25:57.731 [DEBUG] [Thread-14078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:25:57.731 [DEBUG] [Thread-14078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:25:57.735 [DEBUG] [Thread-14078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:25:57.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:25:57.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:25:57.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:25:57.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:25:57.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:25:57.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:25:57.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:25:57.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:25:57.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:25:57.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.226135 -999.00  +22.20  18.73     18   -3.00 1 1 1 1 1   887    0 24.66 -2.46 ----- 16.8 18.7 44.6 21.9 25.9 -27.3 25.5 -27.0 24.1 -26.1 24.2 -26.5
2025-11-26T07:25:57.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:25:57.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:25:57.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.226135
2025-11-26T07:25:57.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:25:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:25:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:25:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:25:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:25:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:25:37', tmtdew=30.53, humidity=12.55, cloud=0.0, wind=13.11, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:25:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:25:57.761 [DEBUG] [Thread-14078] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:25:57.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:25:57.856 [DEBUG] [Thread-14081] [transport.py] [_log()] starting thread (client mode): 0x7378ed40
2025-11-26T07:25:57.856 [DEBUG] [Thread-14081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:25:57.871 [DEBUG] [Thread-14081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:25:57.871 [INFO] [Thread-14081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:25:57.878 [DEBUG] [Thread-14081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:25:57.879 [DEBUG] [Thread-14081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:25:57.879 [DEBUG] [Thread-14081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:25:57.879 [DEBUG] [Thread-14081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:25:57.879 [DEBUG] [Thread-14081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:25:57.879 [DEBUG] [Thread-14081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:25:57.879 [DEBUG] [Thread-14081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:25:57.879 [DEBUG] [Thread-14081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:25:57.880 [DEBUG] [Thread-14081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:25:57.880 [DEBUG] [Thread-14081] [transport.py] [_log()] client lang: <none>
2025-11-26T07:25:57.880 [DEBUG] [Thread-14081] [transport.py] [_log()] server lang: <none>
2025-11-26T07:25:57.880 [DEBUG] [Thread-14081] [transport.py] [_log()] kex follows: False
2025-11-26T07:25:57.880 [DEBUG] [Thread-14081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:25:57.880 [DEBUG] [Thread-14081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:25:57.880 [DEBUG] [Thread-14081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:25:57.880 [DEBUG] [Thread-14081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:25:57.881 [DEBUG] [Thread-14081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:25:57.881 [DEBUG] [Thread-14081] [transport.py] [_log()] Compression: none
2025-11-26T07:25:57.881 [DEBUG] [Thread-14081] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:25:57.937 [DEBUG] [Thread-14081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:25:57.937 [DEBUG] [Thread-14081] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:25:57.938 [DEBUG] [Thread-14081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:25:57.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:25:57.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:25:57.995 [DEBUG] [Thread-14081] [transport.py] [_log()] userauth is OK
2025-11-26T07:25:57.996 [DEBUG] [Thread-14081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:25:57.996 [DEBUG] [Thread-14081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:25:57.996 [DEBUG] [Thread-14081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:25:57.996 [DEBUG] [Thread-14081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:25:58.016 [INFO] [Thread-14081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:25:58.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:25:58.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:25:58.811 [DEBUG] [Thread-14081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:25:58.811 [DEBUG] [Thread-14081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:25:58.859 [DEBUG] [Thread-14081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:25:58.859 [DEBUG] [Thread-14081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:25:58.868 [DEBUG] [Thread-14081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:25:58.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:25:58.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:25:58.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:25:58.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:25:58.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:25:58.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:25:58.905 [DEBUG] [Thread-14081] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:26:02.835 [DEBUG] [Thread-14083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:26:17.896 [DEBUG] [Thread-14084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:26:28.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:26:28.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:26:28.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:26:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 26, 9), 30.48, 12.6, 0.0, 15.95, 22.73, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:26:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:26:09
2025-11-26T07:26:29.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:26:29.869 [DEBUG] [Thread-14085] [transport.py] [_log()] starting thread (client mode): 0x761d8790
2025-11-26T07:26:29.869 [DEBUG] [Thread-14085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:26:29.889 [DEBUG] [Thread-14085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:26:29.889 [INFO] [Thread-14085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:26:29.892 [DEBUG] [Thread-14085] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:26:29.892 [DEBUG] [Thread-14085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] client lang: <none>
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] server lang: <none>
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] kex follows: False
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] Compression: none
2025-11-26T07:26:29.893 [DEBUG] [Thread-14085] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:26:29.912 [DEBUG] [Thread-14085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:26:29.913 [DEBUG] [Thread-14085] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:26:29.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:26:29.914 [DEBUG] [Thread-14085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:26:29.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:26:29.916 [DEBUG] [Thread-14085] [transport.py] [_log()] userauth is OK
2025-11-26T07:26:29.916 [DEBUG] [Thread-14085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:26:29.916 [DEBUG] [Thread-14085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:26:29.916 [DEBUG] [Thread-14085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:26:29.917 [DEBUG] [Thread-14085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:26:29.953 [INFO] [Thread-14085] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:26:29.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:26:30.607 [DEBUG] [Thread-14085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:26:30.607 [DEBUG] [Thread-14085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:26:30.608 [DEBUG] [Thread-14085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:26:30.649 [DEBUG] [Thread-14085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:26:30.649 [DEBUG] [Thread-14085] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:26:30.653 [DEBUG] [Thread-14085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:26:30.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:26:30.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:26:30.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:26:30.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:26:30.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:26:30.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:26:30.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:26:30.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:26:30.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:26:30.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.226135 -999.00  +22.20  18.73     18   -3.00 1 1 1 1 1   887    0 24.66 -2.46 ----- 16.8 18.7 44.6 21.9 25.9 -27.3 25.5 -27.0 24.1 -26.1 24.2 -26.5
2025-11-26T07:26:30.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:26:30.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:26:30.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.226135
2025-11-26T07:26:30.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:26:30.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:26:30.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:26:30.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:26:30.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:26:30.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:26:09', tmtdew=30.48, humidity=12.6, cloud=0.0, wind=15.95, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:25:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:26:30.681 [DEBUG] [Thread-14085] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:26:30.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:26:30.778 [DEBUG] [Thread-14088] [transport.py] [_log()] starting thread (client mode): 0x761dae60
2025-11-26T07:26:30.778 [DEBUG] [Thread-14088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:26:30.794 [DEBUG] [Thread-14088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:26:30.794 [INFO] [Thread-14088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:26:30.801 [DEBUG] [Thread-14088] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:26:30.801 [DEBUG] [Thread-14088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:26:30.801 [DEBUG] [Thread-14088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:26:30.801 [DEBUG] [Thread-14088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:26:30.801 [DEBUG] [Thread-14088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] client lang: <none>
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] server lang: <none>
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] kex follows: False
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] Compression: none
2025-11-26T07:26:30.802 [DEBUG] [Thread-14088] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:26:30.866 [DEBUG] [Thread-14088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:26:30.867 [DEBUG] [Thread-14088] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:26:30.868 [DEBUG] [Thread-14088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:26:30.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:26:30.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:26:30.929 [DEBUG] [Thread-14088] [transport.py] [_log()] userauth is OK
2025-11-26T07:26:30.929 [DEBUG] [Thread-14088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:26:30.929 [DEBUG] [Thread-14088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:26:30.929 [DEBUG] [Thread-14088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:26:30.929 [DEBUG] [Thread-14088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:26:30.947 [INFO] [Thread-14088] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:26:30.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:26:30.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:26:31.810 [DEBUG] [Thread-14088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:26:31.810 [DEBUG] [Thread-14088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:26:31.858 [DEBUG] [Thread-14088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:26:31.858 [DEBUG] [Thread-14088] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:26:31.868 [DEBUG] [Thread-14088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:26:31.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:26:31.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:26:31.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:26:31.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:26:31.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:26:31.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:26:31.903 [DEBUG] [Thread-14088] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:26:32.929 [DEBUG] [Thread-14090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:26:37.052 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:26:37.053 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:26:40.108 [DEBUG] [Thread-14091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:26:47.981 [DEBUG] [Thread-14092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:27:01.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:27:01.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:27:01.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:27:02.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 26, 41), 30.43, 12.2, 0.0, 16.2, 22.81, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:27:02.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:26:41
2025-11-26T07:27:02.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:27:02.904 [DEBUG] [Thread-14093] [transport.py] [_log()] starting thread (client mode): 0x761d9b10
2025-11-26T07:27:02.904 [DEBUG] [Thread-14093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:27:02.925 [DEBUG] [Thread-14093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:27:02.925 [INFO] [Thread-14093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] client lang: <none>
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] server lang: <none>
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] kex follows: False
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:27:02.929 [DEBUG] [Thread-14093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:27:02.930 [DEBUG] [Thread-14093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:27:02.930 [DEBUG] [Thread-14093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:27:02.930 [DEBUG] [Thread-14093] [transport.py] [_log()] Compression: none
2025-11-26T07:27:02.930 [DEBUG] [Thread-14093] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:27:02.945 [DEBUG] [Thread-14093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:27:02.946 [DEBUG] [Thread-14093] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:27:02.946 [DEBUG] [Thread-14093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:27:02.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:27:02.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:27:02.947 [DEBUG] [Thread-14093] [transport.py] [_log()] userauth is OK
2025-11-26T07:27:02.947 [DEBUG] [Thread-14093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:27:02.947 [DEBUG] [Thread-14093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:27:02.947 [DEBUG] [Thread-14093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:27:02.947 [DEBUG] [Thread-14093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:27:02.957 [INFO] [Thread-14093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:27:02.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:27:03.015 [DEBUG] [Thread-14095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:27:03.560 [DEBUG] [Thread-14093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:27:03.560 [DEBUG] [Thread-14093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:27:03.560 [DEBUG] [Thread-14093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:27:03.601 [DEBUG] [Thread-14093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:27:03.601 [DEBUG] [Thread-14093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:27:03.604 [DEBUG] [Thread-14093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:27:03.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:27:03.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:27:03.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:27:03.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:27:03.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:27:03.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:27:03.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.226482 -999.00  +22.30  19.18     18   -3.10 1 1 1 1 1   887    0 24.97 -2.38 ----- 10.6 19.2 15.2 25.0 26.0 -27.2 25.6 -26.5 24.1 -25.5 24.2 -26.4
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.226482
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:27:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:26:41', tmtdew=30.43, humidity=12.2, cloud=0.0, wind=16.2, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:26:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:27:03.625 [DEBUG] [Thread-14093] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:27:03.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:27:03.711 [DEBUG] [Thread-14097] [transport.py] [_log()] starting thread (client mode): 0x70d00970
2025-11-26T07:27:03.711 [DEBUG] [Thread-14097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:27:03.727 [DEBUG] [Thread-14097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:27:03.727 [INFO] [Thread-14097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] client lang: <none>
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] server lang: <none>
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] kex follows: False
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] Compression: none
2025-11-26T07:27:03.735 [DEBUG] [Thread-14097] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:27:03.793 [DEBUG] [Thread-14097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:27:03.793 [DEBUG] [Thread-14097] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:27:03.793 [DEBUG] [Thread-14097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:27:03.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:27:03.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:27:03.849 [DEBUG] [Thread-14097] [transport.py] [_log()] userauth is OK
2025-11-26T07:27:03.849 [DEBUG] [Thread-14097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:27:03.849 [DEBUG] [Thread-14097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:27:03.849 [DEBUG] [Thread-14097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:27:03.849 [DEBUG] [Thread-14097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:27:03.864 [INFO] [Thread-14097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:27:03.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:27:03.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:27:04.691 [DEBUG] [Thread-14097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:27:04.691 [DEBUG] [Thread-14097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:27:04.739 [DEBUG] [Thread-14097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:27:04.739 [DEBUG] [Thread-14097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:27:04.747 [DEBUG] [Thread-14097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:27:04.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:27:04.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:27:04.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:27:04.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:27:04.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:27:04.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:27:04.780 [DEBUG] [Thread-14097] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:27:18.046 [DEBUG] [Thread-14099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:27:33.103 [DEBUG] [Thread-14100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:27:34.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:27:34.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:27:34.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:27:35.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 27, 13), 30.38, 12.23, 0.0, 19.3, 22.76, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:27:35.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:27:13
2025-11-26T07:27:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:27:35.742 [DEBUG] [Thread-14101] [transport.py] [_log()] starting thread (client mode): 0x761d99f0
2025-11-26T07:27:35.742 [DEBUG] [Thread-14101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:27:35.762 [DEBUG] [Thread-14101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:27:35.762 [INFO] [Thread-14101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:27:35.765 [DEBUG] [Thread-14101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:27:35.765 [DEBUG] [Thread-14101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] client lang: <none>
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] server lang: <none>
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] kex follows: False
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] Compression: none
2025-11-26T07:27:35.766 [DEBUG] [Thread-14101] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:27:35.781 [DEBUG] [Thread-14101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:27:35.782 [DEBUG] [Thread-14101] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:27:35.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:27:35.783 [DEBUG] [Thread-14101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:27:35.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:27:35.785 [DEBUG] [Thread-14101] [transport.py] [_log()] userauth is OK
2025-11-26T07:27:35.785 [DEBUG] [Thread-14101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:27:35.786 [DEBUG] [Thread-14101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:27:35.786 [DEBUG] [Thread-14101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:27:35.786 [DEBUG] [Thread-14101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:27:35.811 [INFO] [Thread-14101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:27:35.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:27:36.440 [DEBUG] [Thread-14101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:27:36.440 [DEBUG] [Thread-14101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:27:36.440 [DEBUG] [Thread-14101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:27:36.481 [DEBUG] [Thread-14101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:27:36.481 [DEBUG] [Thread-14101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:27:36.484 [DEBUG] [Thread-14101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:27:36.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:27:36.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:27:36.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:27:36.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:27:36.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:27:36.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:27:36.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:27:36.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:27:36.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:27:36.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.226829 -999.00  +22.30  21.90     18   -3.00 1 1 1 1 1   887    0 25.73 -2.12 ----- 16.3 21.9 30.4 24.1 26.0 -27.0 25.6 -26.8 24.2 -25.8 24.3 -26.4
2025-11-26T07:27:36.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:27:36.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:27:36.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.226829
2025-11-26T07:27:36.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:27:36.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:27:36.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:27:36.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:27:36.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:27:36.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:27:13', tmtdew=30.38, humidity=12.23, cloud=0.0, wind=19.3, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:26:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:27:36.513 [DEBUG] [Thread-14101] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:27:36.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:27:36.610 [DEBUG] [Thread-14104] [transport.py] [_log()] starting thread (client mode): 0x70d0f2e0
2025-11-26T07:27:36.610 [DEBUG] [Thread-14104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:27:36.625 [DEBUG] [Thread-14104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:27:36.625 [INFO] [Thread-14104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:27:36.632 [DEBUG] [Thread-14104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:27:36.632 [DEBUG] [Thread-14104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] client lang: <none>
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] server lang: <none>
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] kex follows: False
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:27:36.633 [DEBUG] [Thread-14104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:27:36.634 [DEBUG] [Thread-14104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:27:36.634 [DEBUG] [Thread-14104] [transport.py] [_log()] Compression: none
2025-11-26T07:27:36.634 [DEBUG] [Thread-14104] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:27:36.690 [DEBUG] [Thread-14104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:27:36.691 [DEBUG] [Thread-14104] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:27:36.692 [DEBUG] [Thread-14104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:27:36.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:27:36.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:27:36.750 [DEBUG] [Thread-14104] [transport.py] [_log()] userauth is OK
2025-11-26T07:27:36.750 [DEBUG] [Thread-14104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:27:36.750 [DEBUG] [Thread-14104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:27:36.750 [DEBUG] [Thread-14104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:27:36.750 [DEBUG] [Thread-14104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:27:36.773 [INFO] [Thread-14104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:27:36.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:27:36.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:27:37.191 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:27:37.192 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:27:37.685 [DEBUG] [Thread-14104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:27:37.685 [DEBUG] [Thread-14104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:27:37.733 [DEBUG] [Thread-14104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:27:37.733 [DEBUG] [Thread-14104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:27:37.741 [DEBUG] [Thread-14104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:27:37.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:27:37.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:27:37.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:27:37.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:27:37.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:27:37.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:27:37.773 [DEBUG] [Thread-14104] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:27:40.163 [DEBUG] [Thread-14106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:27:48.141 [DEBUG] [Thread-14107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:28:03.196 [DEBUG] [Thread-14108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:28:07.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:28:07.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:28:07.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:28:08.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 27, 45), 30.26, 12.71, 0.0, 19.13, 22.66, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:28:08.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:27:45
2025-11-26T07:28:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:28:08.733 [DEBUG] [Thread-14109] [transport.py] [_log()] starting thread (client mode): 0x73780220
2025-11-26T07:28:08.734 [DEBUG] [Thread-14109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:28:08.754 [DEBUG] [Thread-14109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:28:08.754 [INFO] [Thread-14109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] client lang: <none>
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] server lang: <none>
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] kex follows: False
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:28:08.757 [DEBUG] [Thread-14109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:28:08.758 [DEBUG] [Thread-14109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:28:08.758 [DEBUG] [Thread-14109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:28:08.758 [DEBUG] [Thread-14109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:28:08.758 [DEBUG] [Thread-14109] [transport.py] [_log()] Compression: none
2025-11-26T07:28:08.758 [DEBUG] [Thread-14109] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:28:08.774 [DEBUG] [Thread-14109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:28:08.774 [DEBUG] [Thread-14109] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:28:08.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:28:08.776 [DEBUG] [Thread-14109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:28:08.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:28:08.778 [DEBUG] [Thread-14109] [transport.py] [_log()] userauth is OK
2025-11-26T07:28:08.778 [DEBUG] [Thread-14109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:28:08.778 [DEBUG] [Thread-14109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:28:08.778 [DEBUG] [Thread-14109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:28:08.778 [DEBUG] [Thread-14109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:28:08.803 [INFO] [Thread-14109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:28:08.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:28:09.452 [DEBUG] [Thread-14109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:28:09.452 [DEBUG] [Thread-14109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:28:09.453 [DEBUG] [Thread-14109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:28:09.493 [DEBUG] [Thread-14109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:28:09.493 [DEBUG] [Thread-14109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:28:09.496 [DEBUG] [Thread-14109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:28:09.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:28:09.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:28:09.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:28:09.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:28:09.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:28:09.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:28:09.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:28:09.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:28:09.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:28:09.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.227524 -999.00  +22.30  15.03     18   -3.00 1 1 1 1 1   887    0 25.40 -3.63 ----- 19.1 15.0 21.0 27.0 26.0 -27.8 25.6 -26.3 24.2 -25.5 24.3 -26.4
2025-11-26T07:28:09.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:28:09.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:28:09.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.227524
2025-11-26T07:28:09.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:28:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:28:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:28:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:28:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:28:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:27:45', tmtdew=30.26, humidity=12.71, cloud=0.0, wind=19.13, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:27:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:28:09.526 [DEBUG] [Thread-14109] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:28:09.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:28:09.635 [DEBUG] [Thread-14112] [transport.py] [_log()] starting thread (client mode): 0x737e8790
2025-11-26T07:28:09.636 [DEBUG] [Thread-14112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:28:09.651 [DEBUG] [Thread-14112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:28:09.651 [INFO] [Thread-14112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:28:09.658 [DEBUG] [Thread-14112] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] client lang: <none>
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] server lang: <none>
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] kex follows: False
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] Compression: none
2025-11-26T07:28:09.659 [DEBUG] [Thread-14112] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:28:09.722 [DEBUG] [Thread-14112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:28:09.723 [DEBUG] [Thread-14112] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:28:09.723 [DEBUG] [Thread-14112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:28:09.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:28:09.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:28:09.778 [DEBUG] [Thread-14112] [transport.py] [_log()] userauth is OK
2025-11-26T07:28:09.779 [DEBUG] [Thread-14112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:28:09.779 [DEBUG] [Thread-14112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:28:09.779 [DEBUG] [Thread-14112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:28:09.779 [DEBUG] [Thread-14112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:28:09.798 [INFO] [Thread-14112] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:28:09.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:28:09.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:28:10.624 [DEBUG] [Thread-14112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:28:10.624 [DEBUG] [Thread-14112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:28:10.672 [DEBUG] [Thread-14112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:28:10.672 [DEBUG] [Thread-14112] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:28:10.681 [DEBUG] [Thread-14112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:28:10.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:28:10.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:28:10.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
2025-11-26T07:28:10.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:28:10.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:28:10.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:28:10.722 [DEBUG] [Thread-14112] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:28:18.228 [DEBUG] [Thread-14114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:28:33.271 [DEBUG] [Thread-14115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:28:37.336 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:28:37.337 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:28:40.214 [DEBUG] [Thread-14116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:28:40.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:28:40.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:28:41.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 28, 17), 30.33, 12.65, 0.0, 19.06, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:28:41.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:28:17
2025-11-26T07:28:41.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:28:41.668 [DEBUG] [Thread-14117] [transport.py] [_log()] starting thread (client mode): 0x70d0dcc0
2025-11-26T07:28:41.668 [DEBUG] [Thread-14117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:28:41.688 [DEBUG] [Thread-14117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:28:41.688 [INFO] [Thread-14117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:28:41.692 [DEBUG] [Thread-14117] [transport.py] [_log()] client lang: <none>
2025-11-26T07:28:41.693 [DEBUG] [Thread-14117] [transport.py] [_log()] server lang: <none>
2025-11-26T07:28:41.693 [DEBUG] [Thread-14117] [transport.py] [_log()] kex follows: False
2025-11-26T07:28:41.693 [DEBUG] [Thread-14117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:28:41.693 [DEBUG] [Thread-14117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:28:41.693 [DEBUG] [Thread-14117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:28:41.693 [DEBUG] [Thread-14117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:28:41.693 [DEBUG] [Thread-14117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:28:41.693 [DEBUG] [Thread-14117] [transport.py] [_log()] Compression: none
2025-11-26T07:28:41.693 [DEBUG] [Thread-14117] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:28:41.708 [DEBUG] [Thread-14117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:28:41.709 [DEBUG] [Thread-14117] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:28:41.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:28:41.710 [DEBUG] [Thread-14117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:28:41.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:28:41.712 [DEBUG] [Thread-14117] [transport.py] [_log()] userauth is OK
2025-11-26T07:28:41.712 [DEBUG] [Thread-14117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:28:41.712 [DEBUG] [Thread-14117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:28:41.712 [DEBUG] [Thread-14117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:28:41.712 [DEBUG] [Thread-14117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:28:41.737 [INFO] [Thread-14117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:28:41.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:28:42.396 [DEBUG] [Thread-14117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:28:42.396 [DEBUG] [Thread-14117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:28:42.396 [DEBUG] [Thread-14117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:28:42.438 [DEBUG] [Thread-14117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:28:42.438 [DEBUG] [Thread-14117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:28:42.440 [DEBUG] [Thread-14117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:28:42.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:28:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:28:42.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:28:42.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:28:42.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:28:42.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:28:42.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.227871 -999.00  +22.30  15.97     18   -2.90 1 1 1 1 1   887    0 25.51 -4.44 ----- 18.4 16.0 34.6 24.6 26.0 -27.5 25.6 -26.2 24.2 -25.4 24.3 -26.2
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.227871
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:28:17', tmtdew=30.33, humidity=12.65, cloud=0.0, wind=19.06, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:28:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:28:42.465 [DEBUG] [Thread-14117] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:28:42.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:28:42.562 [DEBUG] [Thread-14120] [transport.py] [_log()] starting thread (client mode): 0x761dbc70
2025-11-26T07:28:42.562 [DEBUG] [Thread-14120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:28:42.578 [DEBUG] [Thread-14120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:28:42.578 [INFO] [Thread-14120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:28:42.585 [DEBUG] [Thread-14120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:28:42.585 [DEBUG] [Thread-14120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:28:42.585 [DEBUG] [Thread-14120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] client lang: <none>
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] server lang: <none>
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] kex follows: False
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] Compression: none
2025-11-26T07:28:42.586 [DEBUG] [Thread-14120] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:28:42.643 [DEBUG] [Thread-14120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:28:42.643 [DEBUG] [Thread-14120] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:28:42.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:28:42.644 [DEBUG] [Thread-14120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:28:42.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:28:42.698 [DEBUG] [Thread-14120] [transport.py] [_log()] userauth is OK
2025-11-26T07:28:42.698 [DEBUG] [Thread-14120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:28:42.699 [DEBUG] [Thread-14120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:28:42.699 [DEBUG] [Thread-14120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:28:42.699 [DEBUG] [Thread-14120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:28:42.717 [INFO] [Thread-14120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:28:42.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:28:42.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:28:43.611 [DEBUG] [Thread-14120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:28:43.611 [DEBUG] [Thread-14120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:28:43.658 [DEBUG] [Thread-14120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:28:43.659 [DEBUG] [Thread-14120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:28:43.668 [DEBUG] [Thread-14120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:28:43.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:28:43.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')
2025-11-26T07:28:43.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:28:43.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:28:43.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:28:43.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:28:43.706 [DEBUG] [Thread-14120] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:28:48.309 [DEBUG] [Thread-14122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:29:03.359 [DEBUG] [Thread-14123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:29:13.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:29:13.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:29:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:29:14.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 28, 49), 30.29, 12.75, 0.0, 16.73, 22.78, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:29:14.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:28:49
2025-11-26T07:29:14.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:29:14.654 [DEBUG] [Thread-14124] [transport.py] [_log()] starting thread (client mode): 0x70d2ab90
2025-11-26T07:29:14.654 [DEBUG] [Thread-14124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:29:14.673 [DEBUG] [Thread-14124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:29:14.673 [INFO] [Thread-14124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:29:14.676 [DEBUG] [Thread-14124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:29:14.676 [DEBUG] [Thread-14124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:29:14.676 [DEBUG] [Thread-14124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:29:14.676 [DEBUG] [Thread-14124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:29:14.676 [DEBUG] [Thread-14124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:29:14.676 [DEBUG] [Thread-14124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:29:14.676 [DEBUG] [Thread-14124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:29:14.676 [DEBUG] [Thread-14124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:29:14.676 [DEBUG] [Thread-14124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] client lang: <none>
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] server lang: <none>
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] kex follows: False
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] Compression: none
2025-11-26T07:29:14.677 [DEBUG] [Thread-14124] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:29:14.694 [DEBUG] [Thread-14124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:29:14.695 [DEBUG] [Thread-14124] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:29:14.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:29:14.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:29:14.697 [DEBUG] [Thread-14124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:29:14.697 [DEBUG] [Thread-14124] [transport.py] [_log()] userauth is OK
2025-11-26T07:29:14.698 [DEBUG] [Thread-14124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:29:14.698 [DEBUG] [Thread-14124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:29:14.698 [DEBUG] [Thread-14124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:29:14.698 [DEBUG] [Thread-14124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:29:14.715 [INFO] [Thread-14124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:29:14.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:29:15.322 [DEBUG] [Thread-14124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:29:15.322 [DEBUG] [Thread-14124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:29:15.323 [DEBUG] [Thread-14124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:29:15.364 [DEBUG] [Thread-14124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:29:15.364 [DEBUG] [Thread-14124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:29:15.367 [DEBUG] [Thread-14124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:29:15.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:29:15.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:29:15.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:29:15.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:29:15.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:29:15.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:29:15.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:29:15.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:29:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:29:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.228218 -999.00  +22.40  10.69     18   -2.90 1 1 1 1 1   887    0 25.26 -4.10 ----- 12.1 10.7 12.0 17.9 26.1 -27.0 25.7 -26.5 24.2 -25.7 24.3 -27.7
2025-11-26T07:29:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:29:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:29:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.228218
2025-11-26T07:29:15.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:29:15.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:29:15.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:29:15.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:29:15.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:29:15.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:28:49', tmtdew=30.29, humidity=12.75, cloud=0.0, wind=16.73, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:28:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:29:15.395 [DEBUG] [Thread-14124] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:29:15.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:29:15.491 [DEBUG] [Thread-14127] [transport.py] [_log()] starting thread (client mode): 0x70d0cb20
2025-11-26T07:29:15.492 [DEBUG] [Thread-14127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:29:15.507 [DEBUG] [Thread-14127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:29:15.507 [INFO] [Thread-14127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] client lang: <none>
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] server lang: <none>
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] kex follows: False
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:29:15.515 [DEBUG] [Thread-14127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:29:15.516 [DEBUG] [Thread-14127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:29:15.516 [DEBUG] [Thread-14127] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:29:15.516 [DEBUG] [Thread-14127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:29:15.516 [DEBUG] [Thread-14127] [transport.py] [_log()] Compression: none
2025-11-26T07:29:15.516 [DEBUG] [Thread-14127] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:29:15.582 [DEBUG] [Thread-14127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:29:15.583 [DEBUG] [Thread-14127] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:29:15.584 [DEBUG] [Thread-14127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:29:15.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:29:15.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:29:15.639 [DEBUG] [Thread-14127] [transport.py] [_log()] userauth is OK
2025-11-26T07:29:15.639 [DEBUG] [Thread-14127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:29:15.639 [DEBUG] [Thread-14127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:29:15.639 [DEBUG] [Thread-14127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:29:15.639 [DEBUG] [Thread-14127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:29:15.660 [INFO] [Thread-14127] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:29:15.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:29:15.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:29:16.567 [DEBUG] [Thread-14127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:29:16.568 [DEBUG] [Thread-14127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:29:16.616 [DEBUG] [Thread-14127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:29:16.616 [DEBUG] [Thread-14127] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:29:16.625 [DEBUG] [Thread-14127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:29:16.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:29:16.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:29:16.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:29:16.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:29:16.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:29:16.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:29:16.659 [DEBUG] [Thread-14127] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:29:18.399 [DEBUG] [Thread-14129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:29:33.449 [DEBUG] [Thread-14130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:29:37.480 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:29:37.481 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:29:40.276 [DEBUG] [Thread-14131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:29:46.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:29:46.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:29:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:29:47.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 29, 21), 30.31, 12.75, 0.0, 14.1, 22.86, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:29:47.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:29:21
2025-11-26T07:29:47.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:29:47.573 [DEBUG] [Thread-14132] [transport.py] [_log()] starting thread (client mode): 0x70d2be80
2025-11-26T07:29:47.573 [DEBUG] [Thread-14132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:29:47.593 [DEBUG] [Thread-14132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:29:47.593 [INFO] [Thread-14132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:29:47.596 [DEBUG] [Thread-14132] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] client lang: <none>
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] server lang: <none>
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] kex follows: False
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] Compression: none
2025-11-26T07:29:47.597 [DEBUG] [Thread-14132] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:29:47.614 [DEBUG] [Thread-14132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:29:47.614 [DEBUG] [Thread-14132] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:29:47.615 [DEBUG] [Thread-14132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:29:47.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:29:47.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:29:47.617 [DEBUG] [Thread-14132] [transport.py] [_log()] userauth is OK
2025-11-26T07:29:47.617 [DEBUG] [Thread-14132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:29:47.617 [DEBUG] [Thread-14132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:29:47.617 [DEBUG] [Thread-14132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:29:47.617 [DEBUG] [Thread-14132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:29:47.641 [INFO] [Thread-14132] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:29:47.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:29:48.311 [DEBUG] [Thread-14132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:29:48.311 [DEBUG] [Thread-14132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:29:48.312 [DEBUG] [Thread-14132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:29:48.352 [DEBUG] [Thread-14132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:29:48.352 [DEBUG] [Thread-14132] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:29:48.355 [DEBUG] [Thread-14132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:29:48.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:29:48.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:29:48.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:29:48.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:29:48.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:29:48.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:29:48.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:29:48.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:29:48.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:29:48.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.228565 -999.00  +22.50  17.91     18   -2.70 1 1 1 1 1   887    0 25.59 -4.92 ----- 16.6 17.9 33.2 19.3 26.2 -27.1 25.8 -26.6 24.3 -25.6 24.4 -26.4
2025-11-26T07:29:48.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:29:48.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:29:48.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.228565
2025-11-26T07:29:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:29:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:29:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:29:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:29:48.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:29:48.381 [DEBUG] [Thread-14132] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:29:48.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:29:21', tmtdew=30.31, humidity=12.75, cloud=0.0, wind=14.1, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:29:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:29:48.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:29:48.473 [DEBUG] [Thread-14135] [transport.py] [_log()] starting thread (client mode): 0x70d2b670
2025-11-26T07:29:48.473 [DEBUG] [Thread-14135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:29:48.482 [DEBUG] [Thread-14136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:29:48.489 [DEBUG] [Thread-14135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:29:48.490 [INFO] [Thread-14135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] client lang: <none>
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] server lang: <none>
2025-11-26T07:29:48.497 [DEBUG] [Thread-14135] [transport.py] [_log()] kex follows: False
2025-11-26T07:29:48.498 [DEBUG] [Thread-14135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:29:48.498 [DEBUG] [Thread-14135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:29:48.498 [DEBUG] [Thread-14135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:29:48.498 [DEBUG] [Thread-14135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:29:48.498 [DEBUG] [Thread-14135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:29:48.498 [DEBUG] [Thread-14135] [transport.py] [_log()] Compression: none
2025-11-26T07:29:48.498 [DEBUG] [Thread-14135] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:29:48.554 [DEBUG] [Thread-14135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:29:48.555 [DEBUG] [Thread-14135] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:29:48.555 [DEBUG] [Thread-14135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:29:48.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:29:48.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:29:48.611 [DEBUG] [Thread-14135] [transport.py] [_log()] userauth is OK
2025-11-26T07:29:48.611 [DEBUG] [Thread-14135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:29:48.612 [DEBUG] [Thread-14135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:29:48.612 [DEBUG] [Thread-14135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:29:48.612 [DEBUG] [Thread-14135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:29:48.632 [INFO] [Thread-14135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:29:48.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:29:48.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:29:49.462 [DEBUG] [Thread-14135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:29:49.462 [DEBUG] [Thread-14135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:29:49.512 [DEBUG] [Thread-14135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:29:49.512 [DEBUG] [Thread-14135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:29:49.521 [DEBUG] [Thread-14135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:29:49.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:29:49.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:29:49.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:29:49.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:29:49.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:29:49.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:29:49.561 [DEBUG] [Thread-14135] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:30:03.523 [DEBUG] [Thread-14138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:30:18.556 [DEBUG] [Thread-14139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:30:19.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:30:19.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:30:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:30:20.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 29, 53), 30.05, 12.78, 0.0, 14.22, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:30:20.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:29:53
2025-11-26T07:30:20.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:30:20.509 [DEBUG] [Thread-14140] [transport.py] [_log()] starting thread (client mode): 0x70d0c9d0
2025-11-26T07:30:20.509 [DEBUG] [Thread-14140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:30:20.531 [DEBUG] [Thread-14140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:30:20.531 [INFO] [Thread-14140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:30:20.534 [DEBUG] [Thread-14140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:30:20.534 [DEBUG] [Thread-14140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:30:20.534 [DEBUG] [Thread-14140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:30:20.534 [DEBUG] [Thread-14140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:30:20.534 [DEBUG] [Thread-14140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:30:20.534 [DEBUG] [Thread-14140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:30:20.534 [DEBUG] [Thread-14140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] client lang: <none>
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] server lang: <none>
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] kex follows: False
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:30:20.535 [DEBUG] [Thread-14140] [transport.py] [_log()] Compression: none
2025-11-26T07:30:20.536 [DEBUG] [Thread-14140] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:30:20.553 [DEBUG] [Thread-14140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:30:20.554 [DEBUG] [Thread-14140] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:30:20.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:30:20.555 [DEBUG] [Thread-14140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:30:20.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:30:20.557 [DEBUG] [Thread-14140] [transport.py] [_log()] userauth is OK
2025-11-26T07:30:20.557 [DEBUG] [Thread-14140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:30:20.557 [DEBUG] [Thread-14140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:30:20.557 [DEBUG] [Thread-14140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:30:20.557 [DEBUG] [Thread-14140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:30:20.581 [INFO] [Thread-14140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:30:20.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:30:21.220 [DEBUG] [Thread-14140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:30:21.220 [DEBUG] [Thread-14140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:30:21.221 [DEBUG] [Thread-14140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:30:21.261 [DEBUG] [Thread-14140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:30:21.261 [DEBUG] [Thread-14140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:30:21.264 [DEBUG] [Thread-14140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:30:21.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:30:21.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:30:21.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:30:21.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:30:21.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:30:21.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:30:21.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.228913 -999.00  +22.50  14.25     18   -2.70 1 1 1 1 1   887    0 24.73 -5.84 ----- 17.3 14.2 6.8 17.8 26.2 -27.0 25.9 -26.4 24.3 -25.2 24.5 -26.1
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.228913
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:30:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:29:53', tmtdew=30.05, humidity=12.78, cloud=0.0, wind=14.22, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:29:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:30:21.281 [DEBUG] [Thread-14140] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:30:21.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:30:21.366 [DEBUG] [Thread-14143] [transport.py] [_log()] starting thread (client mode): 0x70d0c790
2025-11-26T07:30:21.366 [DEBUG] [Thread-14143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:30:21.382 [DEBUG] [Thread-14143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:30:21.382 [INFO] [Thread-14143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:30:21.389 [DEBUG] [Thread-14143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] client lang: <none>
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] server lang: <none>
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] kex follows: False
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] Compression: none
2025-11-26T07:30:21.390 [DEBUG] [Thread-14143] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:30:21.448 [DEBUG] [Thread-14143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:30:21.449 [DEBUG] [Thread-14143] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:30:21.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:30:21.451 [DEBUG] [Thread-14143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:30:21.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:30:21.507 [DEBUG] [Thread-14143] [transport.py] [_log()] userauth is OK
2025-11-26T07:30:21.508 [DEBUG] [Thread-14143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:30:21.508 [DEBUG] [Thread-14143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:30:21.508 [DEBUG] [Thread-14143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:30:21.508 [DEBUG] [Thread-14143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:30:21.528 [INFO] [Thread-14143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:30:21.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:30:21.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:30:22.379 [DEBUG] [Thread-14143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:30:22.379 [DEBUG] [Thread-14143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:30:22.429 [DEBUG] [Thread-14143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:30:22.429 [DEBUG] [Thread-14143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:30:22.440 [DEBUG] [Thread-14143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:30:22.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:30:22.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:30:22.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:30:22.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:30:22.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:30:22.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:30:22.478 [DEBUG] [Thread-14143] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:30:33.593 [DEBUG] [Thread-14145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:30:37.635 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:30:37.636 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:30:40.308 [DEBUG] [Thread-14146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:30:48.640 [DEBUG] [Thread-14147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:30:52.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:30:52.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:30:52.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:30:53.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 30, 25), 30.12, 12.73, 0.0, 15.72, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:30:53.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:30:25
2025-11-26T07:30:53.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:30:53.400 [DEBUG] [Thread-14148] [transport.py] [_log()] starting thread (client mode): 0x737e9150
2025-11-26T07:30:53.400 [DEBUG] [Thread-14148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:30:53.423 [DEBUG] [Thread-14148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:30:53.423 [INFO] [Thread-14148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:30:53.425 [DEBUG] [Thread-14148] [transport.py] [_log()] client lang: <none>
2025-11-26T07:30:53.426 [DEBUG] [Thread-14148] [transport.py] [_log()] server lang: <none>
2025-11-26T07:30:53.426 [DEBUG] [Thread-14148] [transport.py] [_log()] kex follows: False
2025-11-26T07:30:53.426 [DEBUG] [Thread-14148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:30:53.426 [DEBUG] [Thread-14148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:30:53.426 [DEBUG] [Thread-14148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:30:53.426 [DEBUG] [Thread-14148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:30:53.426 [DEBUG] [Thread-14148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:30:53.426 [DEBUG] [Thread-14148] [transport.py] [_log()] Compression: none
2025-11-26T07:30:53.426 [DEBUG] [Thread-14148] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:30:53.436 [DEBUG] [Thread-14148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:30:53.437 [DEBUG] [Thread-14148] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:30:53.438 [DEBUG] [Thread-14148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:30:53.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:30:53.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:30:53.440 [DEBUG] [Thread-14148] [transport.py] [_log()] userauth is OK
2025-11-26T07:30:53.441 [DEBUG] [Thread-14148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:30:53.441 [DEBUG] [Thread-14148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:30:53.441 [DEBUG] [Thread-14148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:30:53.441 [DEBUG] [Thread-14148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:30:53.456 [INFO] [Thread-14148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:30:53.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:30:54.109 [DEBUG] [Thread-14148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:30:54.109 [DEBUG] [Thread-14148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:30:54.110 [DEBUG] [Thread-14148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:30:54.150 [DEBUG] [Thread-14148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:30:54.150 [DEBUG] [Thread-14148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:30:54.154 [DEBUG] [Thread-14148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:30:54.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:30:54.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:30:54.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:30:54.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:30:54.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:30:54.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:30:54.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:30:54.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:30:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:30:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.229260 -999.00  +22.50  22.89     19   -2.20 1 1 1 1 1   887    0 24.86 -7.04 ----- 22.4 22.9 23.5 24.8 26.2 -27.7 25.9 -27.3 24.4 -25.9 24.5 -26.4
2025-11-26T07:30:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:30:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:30:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.229260
2025-11-26T07:30:54.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:30:54.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:30:54.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:30:54.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:30:54.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:30:54.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:30:25', tmtdew=30.12, humidity=12.73, cloud=0.0, wind=15.72, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:30:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:30:54.183 [DEBUG] [Thread-14148] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:30:54.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:30:54.277 [DEBUG] [Thread-14151] [transport.py] [_log()] starting thread (client mode): 0x73782bc0
2025-11-26T07:30:54.278 [DEBUG] [Thread-14151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:30:54.293 [DEBUG] [Thread-14151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:30:54.293 [INFO] [Thread-14151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] client lang: <none>
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] server lang: <none>
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] kex follows: False
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:30:54.301 [DEBUG] [Thread-14151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:30:54.302 [DEBUG] [Thread-14151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:30:54.302 [DEBUG] [Thread-14151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:30:54.302 [DEBUG] [Thread-14151] [transport.py] [_log()] Compression: none
2025-11-26T07:30:54.302 [DEBUG] [Thread-14151] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:30:54.363 [DEBUG] [Thread-14151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:30:54.364 [DEBUG] [Thread-14151] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:30:54.365 [DEBUG] [Thread-14151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:30:54.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:30:54.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:30:54.419 [DEBUG] [Thread-14151] [transport.py] [_log()] userauth is OK
2025-11-26T07:30:54.420 [DEBUG] [Thread-14151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:30:54.420 [DEBUG] [Thread-14151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:30:54.420 [DEBUG] [Thread-14151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:30:54.420 [DEBUG] [Thread-14151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:30:54.440 [INFO] [Thread-14151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:30:54.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:30:54.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:30:55.277 [DEBUG] [Thread-14151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:30:55.278 [DEBUG] [Thread-14151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:30:55.326 [DEBUG] [Thread-14151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:30:55.326 [DEBUG] [Thread-14151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:30:55.335 [DEBUG] [Thread-14151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:30:55.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:30:55.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:30:55.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:30:55.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:30:55.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:30:55.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:30:55.372 [DEBUG] [Thread-14151] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:31:03.676 [DEBUG] [Thread-14153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:31:18.726 [DEBUG] [Thread-14154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:31:25.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:31:25.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:31:25.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:31:26.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 30, 57), 29.89, 12.76, 0.0, 23.45, 22.79, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:31:26.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:30:57
2025-11-26T07:31:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:31:26.332 [DEBUG] [Thread-14155] [transport.py] [_log()] starting thread (client mode): 0x737808b0
2025-11-26T07:31:26.332 [DEBUG] [Thread-14155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:31:26.352 [DEBUG] [Thread-14155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:31:26.352 [INFO] [Thread-14155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] client lang: <none>
2025-11-26T07:31:26.355 [DEBUG] [Thread-14155] [transport.py] [_log()] server lang: <none>
2025-11-26T07:31:26.356 [DEBUG] [Thread-14155] [transport.py] [_log()] kex follows: False
2025-11-26T07:31:26.356 [DEBUG] [Thread-14155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:31:26.356 [DEBUG] [Thread-14155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:31:26.356 [DEBUG] [Thread-14155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:31:26.356 [DEBUG] [Thread-14155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:31:26.356 [DEBUG] [Thread-14155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:31:26.356 [DEBUG] [Thread-14155] [transport.py] [_log()] Compression: none
2025-11-26T07:31:26.356 [DEBUG] [Thread-14155] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:31:26.371 [DEBUG] [Thread-14155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:31:26.372 [DEBUG] [Thread-14155] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:31:26.373 [DEBUG] [Thread-14155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:31:26.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:31:26.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:31:26.375 [DEBUG] [Thread-14155] [transport.py] [_log()] userauth is OK
2025-11-26T07:31:26.375 [DEBUG] [Thread-14155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:31:26.375 [DEBUG] [Thread-14155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:31:26.375 [DEBUG] [Thread-14155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:31:26.375 [DEBUG] [Thread-14155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:31:26.401 [INFO] [Thread-14155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:31:26.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:31:27.042 [DEBUG] [Thread-14155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:31:27.043 [DEBUG] [Thread-14155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:31:27.043 [DEBUG] [Thread-14155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:31:27.084 [DEBUG] [Thread-14155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:31:27.084 [DEBUG] [Thread-14155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:31:27.087 [DEBUG] [Thread-14155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:31:27.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:31:27.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:31:27.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:31:27.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:31:27.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:31:27.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:31:27.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:31:27.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:31:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:31:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.229607 -999.00  +22.30  19.44     18   -2.40 1 1 1 1 1   887    0 24.64 -10.24 ----- 13.1 19.4 4.0 25.6 26.2 -27.3 25.8 -27.5 24.3 -25.7 24.5 -27.6
2025-11-26T07:31:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:31:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:31:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.229607
2025-11-26T07:31:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:31:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:31:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:31:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:31:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:31:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:30:57', tmtdew=29.89, humidity=12.76, cloud=0.0, wind=23.45, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:30:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:31:27.117 [DEBUG] [Thread-14155] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:31:27.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:31:27.213 [DEBUG] [Thread-14158] [transport.py] [_log()] starting thread (client mode): 0x737eb460
2025-11-26T07:31:27.213 [DEBUG] [Thread-14158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:31:27.233 [DEBUG] [Thread-14158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:31:27.233 [INFO] [Thread-14158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:31:27.245 [DEBUG] [Thread-14158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:31:27.245 [DEBUG] [Thread-14158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:31:27.246 [DEBUG] [Thread-14158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:31:27.246 [DEBUG] [Thread-14158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:31:27.246 [DEBUG] [Thread-14158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:31:27.246 [DEBUG] [Thread-14158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:31:27.246 [DEBUG] [Thread-14158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:31:27.246 [DEBUG] [Thread-14158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:31:27.246 [DEBUG] [Thread-14158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] client lang: <none>
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] server lang: <none>
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] kex follows: False
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] Compression: none
2025-11-26T07:31:27.247 [DEBUG] [Thread-14158] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:31:27.301 [DEBUG] [Thread-14158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:31:27.301 [DEBUG] [Thread-14158] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:31:27.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:31:27.303 [DEBUG] [Thread-14158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:31:27.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:31:27.360 [DEBUG] [Thread-14158] [transport.py] [_log()] userauth is OK
2025-11-26T07:31:27.361 [DEBUG] [Thread-14158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:31:27.361 [DEBUG] [Thread-14158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:31:27.361 [DEBUG] [Thread-14158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:31:27.361 [DEBUG] [Thread-14158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:31:27.381 [INFO] [Thread-14158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:31:27.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:31:27.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:31:28.375 [DEBUG] [Thread-14158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:31:28.376 [DEBUG] [Thread-14158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:31:28.425 [DEBUG] [Thread-14158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:31:28.425 [DEBUG] [Thread-14158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:31:28.434 [DEBUG] [Thread-14158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:31:28.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:31:28.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:31:28.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:31:28.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:31:28.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:31:28.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:31:28.470 [DEBUG] [Thread-14158] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:31:33.759 [DEBUG] [Thread-14160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:31:37.777 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:31:37.778 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:31:40.372 [DEBUG] [Thread-14161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:31:48.813 [DEBUG] [Thread-14162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:31:58.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:31:58.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:31:58.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:31:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 31, 29), 29.86, 12.76, 0.0, 25.0, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:31:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:31:29
2025-11-26T07:31:59.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:31:59.461 [DEBUG] [Thread-14163] [transport.py] [_log()] starting thread (client mode): 0x70d0fe20
2025-11-26T07:31:59.461 [DEBUG] [Thread-14163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:31:59.483 [DEBUG] [Thread-14163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:31:59.483 [INFO] [Thread-14163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:31:59.486 [DEBUG] [Thread-14163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] client lang: <none>
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] server lang: <none>
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] kex follows: False
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] Compression: none
2025-11-26T07:31:59.487 [DEBUG] [Thread-14163] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:31:59.494 [DEBUG] [Thread-14163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:31:59.494 [DEBUG] [Thread-14163] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:31:59.494 [DEBUG] [Thread-14163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:31:59.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:31:59.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:31:59.495 [DEBUG] [Thread-14163] [transport.py] [_log()] userauth is OK
2025-11-26T07:31:59.495 [DEBUG] [Thread-14163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:31:59.495 [DEBUG] [Thread-14163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:31:59.495 [DEBUG] [Thread-14163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:31:59.495 [DEBUG] [Thread-14163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:31:59.507 [INFO] [Thread-14163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:31:59.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:32:00.127 [DEBUG] [Thread-14163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:32:00.127 [DEBUG] [Thread-14163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:32:00.128 [DEBUG] [Thread-14163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:32:00.168 [DEBUG] [Thread-14163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:32:00.168 [DEBUG] [Thread-14163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:32:00.170 [DEBUG] [Thread-14163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:32:00.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:32:00.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:32:00.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:32:00.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:32:00.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:32:00.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:32:00.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.229954 -999.00  +22.30  19.99     18   -2.40 1 1 1 1 1   887    0 24.65 -14.29 ----- 16.4 20.0 27.2 24.7 26.2 -27.4 25.8 -26.6 24.4 -25.6 24.4 -26.1
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.229954
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:32:00.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:32:00.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:31:29', tmtdew=29.86, humidity=12.76, cloud=0.0, wind=25.0, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:31:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:32:00.190 [DEBUG] [Thread-14163] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:32:00.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:32:00.276 [DEBUG] [Thread-14166] [transport.py] [_log()] starting thread (client mode): 0x737ebf10
2025-11-26T07:32:00.277 [DEBUG] [Thread-14166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:32:00.290 [DEBUG] [Thread-14166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:32:00.291 [INFO] [Thread-14166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] client lang: <none>
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] server lang: <none>
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] kex follows: False
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:32:00.298 [DEBUG] [Thread-14166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:32:00.299 [DEBUG] [Thread-14166] [transport.py] [_log()] Compression: none
2025-11-26T07:32:00.299 [DEBUG] [Thread-14166] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:32:00.362 [DEBUG] [Thread-14166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:32:00.362 [DEBUG] [Thread-14166] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:32:00.362 [DEBUG] [Thread-14166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:32:00.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:32:00.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:32:00.419 [DEBUG] [Thread-14166] [transport.py] [_log()] userauth is OK
2025-11-26T07:32:00.419 [DEBUG] [Thread-14166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:32:00.419 [DEBUG] [Thread-14166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:32:00.419 [DEBUG] [Thread-14166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:32:00.419 [DEBUG] [Thread-14166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:32:00.433 [INFO] [Thread-14166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:32:00.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:32:00.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:32:01.256 [DEBUG] [Thread-14166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:32:01.256 [DEBUG] [Thread-14166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:32:01.304 [DEBUG] [Thread-14166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:32:01.305 [DEBUG] [Thread-14166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:32:01.313 [DEBUG] [Thread-14166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:32:01.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:32:01.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:32:01.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:32:01.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:32:01.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:32:01.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:32:01.347 [DEBUG] [Thread-14166] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:32:03.847 [DEBUG] [Thread-14168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:32:18.903 [DEBUG] [Thread-14169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:32:31.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:32:31.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:32:31.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:32:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 32, 1), 29.91, 12.71, 0.0, 24.09, 22.66, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:32:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:32:01
2025-11-26T07:32:32.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:32:32.296 [DEBUG] [Thread-14170] [transport.py] [_log()] starting thread (client mode): 0x70d023e0
2025-11-26T07:32:32.296 [DEBUG] [Thread-14170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:32:32.316 [DEBUG] [Thread-14170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:32:32.316 [INFO] [Thread-14170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:32:32.319 [DEBUG] [Thread-14170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:32:32.319 [DEBUG] [Thread-14170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:32:32.319 [DEBUG] [Thread-14170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] client lang: <none>
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] server lang: <none>
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] kex follows: False
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] Compression: none
2025-11-26T07:32:32.320 [DEBUG] [Thread-14170] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:32:32.339 [DEBUG] [Thread-14170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:32:32.339 [DEBUG] [Thread-14170] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:32:32.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:32:32.341 [DEBUG] [Thread-14170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:32:32.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:32:32.343 [DEBUG] [Thread-14170] [transport.py] [_log()] userauth is OK
2025-11-26T07:32:32.343 [DEBUG] [Thread-14170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:32:32.343 [DEBUG] [Thread-14170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:32:32.343 [DEBUG] [Thread-14170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:32:32.344 [DEBUG] [Thread-14170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:32:32.379 [INFO] [Thread-14170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:32:32.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:32:33.025 [DEBUG] [Thread-14170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:32:33.025 [DEBUG] [Thread-14170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:32:33.025 [DEBUG] [Thread-14170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:32:33.066 [DEBUG] [Thread-14170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:32:33.066 [DEBUG] [Thread-14170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:32:33.069 [DEBUG] [Thread-14170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:32:33.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:32:33.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:32:33.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:32:33.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:32:33.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:32:33.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:32:33.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:32:33.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:32:33.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:32:33.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.230649 -999.00  +22.50  11.72     18   -2.60 1 1 1 1 1   887    0 24.14 -17.74 ----- 13.1 11.7 38.0 17.9 26.3 -27.3 25.9 -26.2 24.4 -25.3 24.6 -25.9
2025-11-26T07:32:33.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:32:33.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:32:33.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.230649
2025-11-26T07:32:33.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:32:33.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:32:33.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:32:33.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:32:33.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:32:33.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:32:01', tmtdew=29.91, humidity=12.71, cloud=0.0, wind=24.09, temperature=22.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:32:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:32:33.097 [DEBUG] [Thread-14170] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:32:33.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:32:33.193 [DEBUG] [Thread-14173] [transport.py] [_log()] starting thread (client mode): 0x70d02560
2025-11-26T07:32:33.193 [DEBUG] [Thread-14173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:32:33.208 [DEBUG] [Thread-14173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:32:33.208 [INFO] [Thread-14173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:32:33.216 [DEBUG] [Thread-14173] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:32:33.216 [DEBUG] [Thread-14173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:32:33.216 [DEBUG] [Thread-14173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:32:33.216 [DEBUG] [Thread-14173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:32:33.216 [DEBUG] [Thread-14173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:32:33.216 [DEBUG] [Thread-14173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:32:33.216 [DEBUG] [Thread-14173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:32:33.216 [DEBUG] [Thread-14173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] client lang: <none>
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] server lang: <none>
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] kex follows: False
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] Compression: none
2025-11-26T07:32:33.217 [DEBUG] [Thread-14173] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:32:33.276 [DEBUG] [Thread-14173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:32:33.277 [DEBUG] [Thread-14173] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:32:33.278 [DEBUG] [Thread-14173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:32:33.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:32:33.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:32:33.336 [DEBUG] [Thread-14173] [transport.py] [_log()] userauth is OK
2025-11-26T07:32:33.336 [DEBUG] [Thread-14173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:32:33.337 [DEBUG] [Thread-14173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:32:33.337 [DEBUG] [Thread-14173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:32:33.337 [DEBUG] [Thread-14173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:32:33.359 [INFO] [Thread-14173] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:32:33.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:32:33.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:32:33.937 [DEBUG] [Thread-14175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:32:34.174 [DEBUG] [Thread-14173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:32:34.174 [DEBUG] [Thread-14173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:32:34.222 [DEBUG] [Thread-14173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:32:34.222 [DEBUG] [Thread-14173] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:32:34.231 [DEBUG] [Thread-14173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:32:34.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:32:34.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:32:34.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:32:34.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:32:34.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:32:34.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:32:34.263 [DEBUG] [Thread-14173] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:32:37.919 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:32:37.920 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:32:40.421 [DEBUG] [Thread-14176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:32:48.978 [DEBUG] [Thread-14177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:33:04.019 [DEBUG] [Thread-14178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:33:04.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:33:04.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:33:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:33:04.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 32, 33), 30.62, 12.32, 0.0, 17.26, 23.18, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:33:04.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:32:33
2025-11-26T07:33:05.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:33:05.208 [DEBUG] [Thread-14179] [transport.py] [_log()] starting thread (client mode): 0x70d0ce80
2025-11-26T07:33:05.209 [DEBUG] [Thread-14179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:33:05.227 [DEBUG] [Thread-14179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:33:05.227 [INFO] [Thread-14179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:33:05.230 [DEBUG] [Thread-14179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] client lang: <none>
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] server lang: <none>
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] kex follows: False
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] Compression: none
2025-11-26T07:33:05.231 [DEBUG] [Thread-14179] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:33:05.248 [DEBUG] [Thread-14179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:33:05.248 [DEBUG] [Thread-14179] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:33:05.249 [DEBUG] [Thread-14179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:33:05.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:33:05.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:33:05.259 [DEBUG] [Thread-14179] [transport.py] [_log()] userauth is OK
2025-11-26T07:33:05.259 [DEBUG] [Thread-14179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:33:05.259 [DEBUG] [Thread-14179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:33:05.259 [DEBUG] [Thread-14179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:33:05.259 [DEBUG] [Thread-14179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:33:05.283 [INFO] [Thread-14179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:33:05.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:33:05.916 [DEBUG] [Thread-14179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:33:05.916 [DEBUG] [Thread-14179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:33:05.916 [DEBUG] [Thread-14179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:33:05.957 [DEBUG] [Thread-14179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:33:05.957 [DEBUG] [Thread-14179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:33:05.960 [DEBUG] [Thread-14179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:33:05.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:33:05.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:33:05.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:33:05.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:33:05.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:33:05.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:33:05.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:33:05.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:33:05.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.230996 -999.00  +22.60  14.88     18   -2.50 1 1 1 1 1   887    0 24.63 -17.94 ----- 13.9 14.9 40.4 17.0 26.4 -27.0 26.0 -26.3 24.5 -25.3 24.6 -26.3
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.230996
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:33:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:32:33', tmtdew=30.62, humidity=12.32, cloud=0.0, wind=17.26, temperature=23.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:32:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:33:05.978 [DEBUG] [Thread-14179] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:33:06.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:33:06.065 [DEBUG] [Thread-14182] [transport.py] [_log()] starting thread (client mode): 0x73782a70
2025-11-26T07:33:06.065 [DEBUG] [Thread-14182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:33:06.083 [DEBUG] [Thread-14182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:33:06.083 [INFO] [Thread-14182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] client lang: <none>
2025-11-26T07:33:06.091 [DEBUG] [Thread-14182] [transport.py] [_log()] server lang: <none>
2025-11-26T07:33:06.092 [DEBUG] [Thread-14182] [transport.py] [_log()] kex follows: False
2025-11-26T07:33:06.092 [DEBUG] [Thread-14182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:33:06.092 [DEBUG] [Thread-14182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:33:06.092 [DEBUG] [Thread-14182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:33:06.092 [DEBUG] [Thread-14182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:33:06.092 [DEBUG] [Thread-14182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:33:06.092 [DEBUG] [Thread-14182] [transport.py] [_log()] Compression: none
2025-11-26T07:33:06.092 [DEBUG] [Thread-14182] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:33:06.150 [DEBUG] [Thread-14182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:33:06.150 [DEBUG] [Thread-14182] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:33:06.150 [DEBUG] [Thread-14182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:33:06.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:33:06.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:33:06.211 [DEBUG] [Thread-14182] [transport.py] [_log()] userauth is OK
2025-11-26T07:33:06.211 [DEBUG] [Thread-14182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:33:06.211 [DEBUG] [Thread-14182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:33:06.211 [DEBUG] [Thread-14182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:33:06.211 [DEBUG] [Thread-14182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:33:06.226 [INFO] [Thread-14182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:33:06.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:33:06.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:33:07.150 [DEBUG] [Thread-14182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:33:07.150 [DEBUG] [Thread-14182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:33:07.203 [DEBUG] [Thread-14182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:33:07.203 [DEBUG] [Thread-14182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:33:07.212 [DEBUG] [Thread-14182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:33:07.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:33:07.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:33:07.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:33:07.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:33:07.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:33:07.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:33:07.254 [DEBUG] [Thread-14182] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:33:19.050 [DEBUG] [Thread-14184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:33:34.104 [DEBUG] [Thread-14185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:33:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:33:37.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:33:37.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:33:37.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 33, 5), 29.84, 12.78, 0.0, 23.27, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:33:37.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:33:05
2025-11-26T07:33:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:33:38.058 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:33:38.059 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:33:38.203 [DEBUG] [Thread-14186] [transport.py] [_log()] starting thread (client mode): 0x70d29fc0
2025-11-26T07:33:38.203 [DEBUG] [Thread-14186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:33:38.223 [DEBUG] [Thread-14186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:33:38.223 [INFO] [Thread-14186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] client lang: <none>
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] server lang: <none>
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] kex follows: False
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:33:38.226 [DEBUG] [Thread-14186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:33:38.227 [DEBUG] [Thread-14186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:33:38.227 [DEBUG] [Thread-14186] [transport.py] [_log()] Compression: none
2025-11-26T07:33:38.227 [DEBUG] [Thread-14186] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:33:38.242 [DEBUG] [Thread-14186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:33:38.242 [DEBUG] [Thread-14186] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:33:38.242 [DEBUG] [Thread-14186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:33:38.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:33:38.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:33:38.242 [DEBUG] [Thread-14186] [transport.py] [_log()] userauth is OK
2025-11-26T07:33:38.243 [DEBUG] [Thread-14186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:33:38.243 [DEBUG] [Thread-14186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:33:38.243 [DEBUG] [Thread-14186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:33:38.243 [DEBUG] [Thread-14186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:33:38.258 [INFO] [Thread-14186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:33:38.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:33:38.889 [DEBUG] [Thread-14186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:33:38.889 [DEBUG] [Thread-14186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:33:38.889 [DEBUG] [Thread-14186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:33:38.929 [DEBUG] [Thread-14186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:33:38.929 [DEBUG] [Thread-14186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:33:38.931 [DEBUG] [Thread-14186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:33:38.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:33:38.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:33:38.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:33:38.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:33:38.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:33:38.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:33:38.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:33:38.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:33:38.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:33:38.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.231343 -999.00  +22.80  11.25     18   -2.50 1 1 1 1 1   887    0 24.63 -16.43 ----- 10.8 11.2 24.8 15.7 26.5 -27.1 26.1 -26.2 24.6 -25.2 24.8 -26.3
2025-11-26T07:33:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:33:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:33:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.231343
2025-11-26T07:33:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:33:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:33:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:33:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:33:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:33:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:33:05', tmtdew=29.84, humidity=12.78, cloud=0.0, wind=23.27, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:33:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:33:38.951 [DEBUG] [Thread-14186] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:33:39.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:33:39.036 [DEBUG] [Thread-14189] [transport.py] [_log()] starting thread (client mode): 0x7378c4f0
2025-11-26T07:33:39.037 [DEBUG] [Thread-14189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:33:39.052 [DEBUG] [Thread-14189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:33:39.052 [INFO] [Thread-14189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] client lang: <none>
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] server lang: <none>
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] kex follows: False
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] Compression: none
2025-11-26T07:33:39.060 [DEBUG] [Thread-14189] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:33:39.123 [DEBUG] [Thread-14189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:33:39.123 [DEBUG] [Thread-14189] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:33:39.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:33:39.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:33:39.123 [DEBUG] [Thread-14189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:33:39.180 [DEBUG] [Thread-14189] [transport.py] [_log()] userauth is OK
2025-11-26T07:33:39.180 [DEBUG] [Thread-14189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:33:39.180 [DEBUG] [Thread-14189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:33:39.180 [DEBUG] [Thread-14189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:33:39.180 [DEBUG] [Thread-14189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:33:39.195 [INFO] [Thread-14189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:33:39.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:33:39.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:33:40.026 [DEBUG] [Thread-14189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:33:40.026 [DEBUG] [Thread-14189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:33:40.074 [DEBUG] [Thread-14189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:33:40.074 [DEBUG] [Thread-14189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:33:40.083 [DEBUG] [Thread-14189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:33:40.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:33:40.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:33:40.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:33:40.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:33:40.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:33:40.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:33:40.120 [DEBUG] [Thread-14189] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:33:40.479 [DEBUG] [Thread-14191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:33:49.141 [DEBUG] [Thread-14192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:34:04.191 [DEBUG] [Thread-14193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:34:10.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:34:10.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:34:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:34:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 33, 37), 29.86, 13.21, 0.0, 16.73, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:34:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:33:37
2025-11-26T07:34:10.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:34:11.100 [DEBUG] [Thread-14194] [transport.py] [_log()] starting thread (client mode): 0x737810c0
2025-11-26T07:34:11.100 [DEBUG] [Thread-14194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:34:11.115 [DEBUG] [Thread-14194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:34:11.116 [INFO] [Thread-14194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] client lang: <none>
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] server lang: <none>
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] kex follows: False
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] Compression: none
2025-11-26T07:34:11.119 [DEBUG] [Thread-14194] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:34:11.135 [DEBUG] [Thread-14194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:34:11.136 [DEBUG] [Thread-14194] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:34:11.136 [DEBUG] [Thread-14194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:34:11.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:34:11.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:34:11.137 [DEBUG] [Thread-14194] [transport.py] [_log()] userauth is OK
2025-11-26T07:34:11.137 [DEBUG] [Thread-14194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:34:11.137 [DEBUG] [Thread-14194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:34:11.137 [DEBUG] [Thread-14194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:34:11.137 [DEBUG] [Thread-14194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:34:11.152 [INFO] [Thread-14194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:34:11.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:34:11.804 [DEBUG] [Thread-14194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:34:11.804 [DEBUG] [Thread-14194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:34:11.804 [DEBUG] [Thread-14194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:34:11.846 [DEBUG] [Thread-14194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:34:11.846 [DEBUG] [Thread-14194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:34:11.849 [DEBUG] [Thread-14194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:34:11.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:34:11.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:34:11.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:34:11.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:34:11.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:34:11.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:34:11.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:34:11.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:34:11.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:34:11.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.231690 -999.00  +22.80  16.87     17   -2.70 1 1 1 1 1   887    0 25.06 -13.89 ----- 18.7 16.9 48.4 19.9 26.6 -27.7 26.1 -26.3 24.6 -25.2 24.8 -26.3
2025-11-26T07:34:11.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:34:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:34:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.231690
2025-11-26T07:34:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:34:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:34:11.873 [DEBUG] [Thread-14194] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:34:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:34:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:34:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:34:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:33:37', tmtdew=29.86, humidity=13.21, cloud=0.0, wind=16.73, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:33:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:34:11.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:34:11.973 [DEBUG] [Thread-14197] [transport.py] [_log()] starting thread (client mode): 0x70d0f010
2025-11-26T07:34:11.973 [DEBUG] [Thread-14197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:34:11.991 [DEBUG] [Thread-14197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:34:11.991 [INFO] [Thread-14197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:34:11.999 [DEBUG] [Thread-14197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:34:11.999 [DEBUG] [Thread-14197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:34:11.999 [DEBUG] [Thread-14197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:34:11.999 [DEBUG] [Thread-14197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:34:12.000 [DEBUG] [Thread-14197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:34:12.000 [DEBUG] [Thread-14197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:34:12.000 [DEBUG] [Thread-14197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:34:12.000 [DEBUG] [Thread-14197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:34:12.000 [DEBUG] [Thread-14197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:34:12.000 [DEBUG] [Thread-14197] [transport.py] [_log()] client lang: <none>
2025-11-26T07:34:12.000 [DEBUG] [Thread-14197] [transport.py] [_log()] server lang: <none>
2025-11-26T07:34:12.000 [DEBUG] [Thread-14197] [transport.py] [_log()] kex follows: False
2025-11-26T07:34:12.000 [DEBUG] [Thread-14197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:34:12.001 [DEBUG] [Thread-14197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:34:12.001 [DEBUG] [Thread-14197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:34:12.001 [DEBUG] [Thread-14197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:34:12.001 [DEBUG] [Thread-14197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:34:12.001 [DEBUG] [Thread-14197] [transport.py] [_log()] Compression: none
2025-11-26T07:34:12.001 [DEBUG] [Thread-14197] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:34:12.066 [DEBUG] [Thread-14197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:34:12.066 [DEBUG] [Thread-14197] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:34:12.066 [DEBUG] [Thread-14197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:34:12.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:34:12.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:34:12.125 [DEBUG] [Thread-14197] [transport.py] [_log()] userauth is OK
2025-11-26T07:34:12.125 [DEBUG] [Thread-14197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:34:12.125 [DEBUG] [Thread-14197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:34:12.125 [DEBUG] [Thread-14197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:34:12.125 [DEBUG] [Thread-14197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:34:12.142 [INFO] [Thread-14197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:34:12.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:34:12.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:34:13.025 [DEBUG] [Thread-14197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:34:13.025 [DEBUG] [Thread-14197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:34:13.075 [DEBUG] [Thread-14197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:34:13.075 [DEBUG] [Thread-14197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:34:13.084 [DEBUG] [Thread-14197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:34:13.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:34:13.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:34:13.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:34:13.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:34:13.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:34:13.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:34:13.122 [DEBUG] [Thread-14197] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:34:19.228 [DEBUG] [Thread-14199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:34:34.275 [DEBUG] [Thread-14200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:34:38.199 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:34:38.200 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:34:40.532 [DEBUG] [Thread-14201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:34:43.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:34:43.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:34:43.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:34:43.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 34, 9), 29.89, 13.2, 0.0, 17.03, 22.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:34:43.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:34:09
2025-11-26T07:34:43.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:34:44.112 [DEBUG] [Thread-14202] [transport.py] [_log()] starting thread (client mode): 0x737eacb0
2025-11-26T07:34:44.112 [DEBUG] [Thread-14202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:34:44.130 [DEBUG] [Thread-14202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:34:44.130 [INFO] [Thread-14202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] client lang: <none>
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] server lang: <none>
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] kex follows: False
2025-11-26T07:34:44.134 [DEBUG] [Thread-14202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:34:44.135 [DEBUG] [Thread-14202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:34:44.135 [DEBUG] [Thread-14202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:34:44.135 [DEBUG] [Thread-14202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:34:44.135 [DEBUG] [Thread-14202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:34:44.135 [DEBUG] [Thread-14202] [transport.py] [_log()] Compression: none
2025-11-26T07:34:44.135 [DEBUG] [Thread-14202] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:34:44.153 [DEBUG] [Thread-14202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:34:44.154 [DEBUG] [Thread-14202] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:34:44.155 [DEBUG] [Thread-14202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:34:44.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:34:44.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:34:44.157 [DEBUG] [Thread-14202] [transport.py] [_log()] userauth is OK
2025-11-26T07:34:44.158 [DEBUG] [Thread-14202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:34:44.158 [DEBUG] [Thread-14202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:34:44.158 [DEBUG] [Thread-14202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:34:44.158 [DEBUG] [Thread-14202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:34:44.187 [INFO] [Thread-14202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:34:44.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:34:44.774 [DEBUG] [Thread-14202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:34:44.775 [DEBUG] [Thread-14202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:34:44.775 [DEBUG] [Thread-14202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:34:44.815 [DEBUG] [Thread-14202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:34:44.816 [DEBUG] [Thread-14202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:34:44.818 [DEBUG] [Thread-14202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:34:44.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:34:44.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:34:44.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:34:44.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:34:44.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:34:44.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:34:44.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:34:44.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:34:44.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:34:44.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.232038 -999.00  +22.80  18.86     17   -2.90 1 1 1 1 1   887    0 24.58 -11.29 ----- 17.2 18.9 44.4 23.5 26.6 -27.7 26.1 -26.9 24.6 -26.1 24.9 -26.4
2025-11-26T07:34:44.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:34:44.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:34:44.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.232038
2025-11-26T07:34:44.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:34:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:34:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:34:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:34:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:34:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:34:09', tmtdew=29.89, humidity=13.2, cloud=0.0, wind=17.03, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:34:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:34:44.843 [DEBUG] [Thread-14202] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:34:44.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:34:44.938 [DEBUG] [Thread-14205] [transport.py] [_log()] starting thread (client mode): 0x70d036a0
2025-11-26T07:34:44.938 [DEBUG] [Thread-14205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:34:44.953 [DEBUG] [Thread-14205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:34:44.953 [INFO] [Thread-14205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] client lang: <none>
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] server lang: <none>
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] kex follows: False
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:34:44.961 [DEBUG] [Thread-14205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:34:44.962 [DEBUG] [Thread-14205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:34:44.962 [DEBUG] [Thread-14205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:34:44.962 [DEBUG] [Thread-14205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:34:44.962 [DEBUG] [Thread-14205] [transport.py] [_log()] Compression: none
2025-11-26T07:34:44.962 [DEBUG] [Thread-14205] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:34:45.019 [DEBUG] [Thread-14205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:34:45.020 [DEBUG] [Thread-14205] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:34:45.020 [DEBUG] [Thread-14205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:34:45.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:34:45.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:34:45.075 [DEBUG] [Thread-14205] [transport.py] [_log()] userauth is OK
2025-11-26T07:34:45.075 [DEBUG] [Thread-14205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:34:45.075 [DEBUG] [Thread-14205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:34:45.076 [DEBUG] [Thread-14205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:34:45.076 [DEBUG] [Thread-14205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:34:45.094 [INFO] [Thread-14205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:34:45.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:34:45.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:34:45.931 [DEBUG] [Thread-14205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:34:45.931 [DEBUG] [Thread-14205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:34:45.978 [DEBUG] [Thread-14205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:34:45.979 [DEBUG] [Thread-14205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:34:45.987 [DEBUG] [Thread-14205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:34:45.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:34:45.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:34:46.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:34:46.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:34:46.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:34:46.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:34:46.033 [DEBUG] [Thread-14205] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:34:49.310 [DEBUG] [Thread-14207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:35:04.369 [DEBUG] [Thread-14208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:35:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:35:16.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:35:16.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:35:16.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 35, 13), 30.05, 12.98, 0.0, 16.6, 22.92, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:35:16.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:35:13
2025-11-26T07:35:16.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:35:16.974 [DEBUG] [Thread-14209] [transport.py] [_log()] starting thread (client mode): 0x70d0e110
2025-11-26T07:35:16.974 [DEBUG] [Thread-14209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:35:16.994 [DEBUG] [Thread-14209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:35:16.994 [INFO] [Thread-14209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] client lang: <none>
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] server lang: <none>
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] kex follows: False
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] Compression: none
2025-11-26T07:35:16.997 [DEBUG] [Thread-14209] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:35:17.014 [DEBUG] [Thread-14209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:35:17.015 [DEBUG] [Thread-14209] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:35:17.015 [DEBUG] [Thread-14209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:35:17.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:35:17.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:35:17.017 [DEBUG] [Thread-14209] [transport.py] [_log()] userauth is OK
2025-11-26T07:35:17.018 [DEBUG] [Thread-14209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:35:17.018 [DEBUG] [Thread-14209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:35:17.018 [DEBUG] [Thread-14209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:35:17.018 [DEBUG] [Thread-14209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:35:17.043 [INFO] [Thread-14209] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:35:17.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:35:18.463 [DEBUG] [Thread-14209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:35:18.464 [DEBUG] [Thread-14209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:35:18.465 [DEBUG] [Thread-14209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:35:18.505 [DEBUG] [Thread-14209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:35:18.505 [DEBUG] [Thread-14209] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:35:18.508 [DEBUG] [Thread-14209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:35:18.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:35:18.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:35:18.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:35:18.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:35:18.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:35:18.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:35:18.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:35:18.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:35:18.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:35:18.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.232385 -999.00  +22.60  18.68     18   -2.60 1 1 1 1 1   887    0 24.95 -10.94 ----- 21.4 18.7 35.6 22.9 26.6 -27.3 26.1 -26.9 24.6 -25.5 24.8 -26.5
2025-11-26T07:35:18.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:35:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:35:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.232385
2025-11-26T07:35:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:35:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:35:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:35:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:35:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:35:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:35:13', tmtdew=30.05, humidity=12.98, cloud=0.0, wind=16.6, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:34:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:35:18.535 [DEBUG] [Thread-14209] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:35:18.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:35:18.632 [DEBUG] [Thread-14212] [transport.py] [_log()] starting thread (client mode): 0x737e9ab0
2025-11-26T07:35:18.632 [DEBUG] [Thread-14212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:35:18.645 [DEBUG] [Thread-14212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:35:18.646 [INFO] [Thread-14212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:35:18.653 [DEBUG] [Thread-14212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:35:18.653 [DEBUG] [Thread-14212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:35:18.653 [DEBUG] [Thread-14212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] client lang: <none>
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] server lang: <none>
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] kex follows: False
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] Compression: none
2025-11-26T07:35:18.654 [DEBUG] [Thread-14212] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:35:18.712 [DEBUG] [Thread-14212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:35:18.713 [DEBUG] [Thread-14212] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:35:18.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:35:18.714 [DEBUG] [Thread-14212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:35:18.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:35:18.768 [DEBUG] [Thread-14212] [transport.py] [_log()] userauth is OK
2025-11-26T07:35:18.769 [DEBUG] [Thread-14212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:35:18.769 [DEBUG] [Thread-14212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:35:18.769 [DEBUG] [Thread-14212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:35:18.769 [DEBUG] [Thread-14212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:35:18.788 [INFO] [Thread-14212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:35:18.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:35:18.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:35:19.401 [DEBUG] [Thread-14214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:35:19.652 [DEBUG] [Thread-14212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:35:19.652 [DEBUG] [Thread-14212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:35:19.700 [DEBUG] [Thread-14212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:35:19.700 [DEBUG] [Thread-14212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:35:19.709 [DEBUG] [Thread-14212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:35:19.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:35:19.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:35:19.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:35:19.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:35:19.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:35:19.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:35:19.747 [DEBUG] [Thread-14212] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:35:34.453 [DEBUG] [Thread-14215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:35:38.340 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:35:38.341 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:35:40.580 [DEBUG] [Thread-14216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:35:49.487 [DEBUG] [Thread-14217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:35:49.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:35:49.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:35:49.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:35:50.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 35, 45), 29.75, 13.39, 0.0, 16.04, 22.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:35:50.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:35:45
2025-11-26T07:35:50.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:35:50.693 [DEBUG] [Thread-14218] [transport.py] [_log()] starting thread (client mode): 0x70d018d0
2025-11-26T07:35:50.693 [DEBUG] [Thread-14218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:35:50.713 [DEBUG] [Thread-14218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:35:50.714 [INFO] [Thread-14218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] client lang: <none>
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] server lang: <none>
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] kex follows: False
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] Compression: none
2025-11-26T07:35:50.717 [DEBUG] [Thread-14218] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:35:50.735 [DEBUG] [Thread-14218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:35:50.735 [DEBUG] [Thread-14218] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:35:50.736 [DEBUG] [Thread-14218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:35:50.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:35:50.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:35:50.738 [DEBUG] [Thread-14218] [transport.py] [_log()] userauth is OK
2025-11-26T07:35:50.738 [DEBUG] [Thread-14218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:35:50.738 [DEBUG] [Thread-14218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:35:50.738 [DEBUG] [Thread-14218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:35:50.738 [DEBUG] [Thread-14218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:35:50.753 [INFO] [Thread-14218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:35:50.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:35:51.394 [DEBUG] [Thread-14218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:35:51.394 [DEBUG] [Thread-14218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:35:51.395 [DEBUG] [Thread-14218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:35:51.435 [DEBUG] [Thread-14218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:35:51.435 [DEBUG] [Thread-14218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:35:51.437 [DEBUG] [Thread-14218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:35:51.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:35:51.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:35:51.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:35:51.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:35:51.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:35:51.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:35:51.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:35:51.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:35:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:35:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.232732 -999.00  +22.60  18.63     19   -2.10 1 1 1 1 1   887    0 24.32 -11.86 ----- 24.0 18.6 27.5 27.5 26.6 -27.3 26.0 -27.3 24.6 -26.1 24.8 -26.7
2025-11-26T07:35:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:35:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:35:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.232732
2025-11-26T07:35:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:35:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:35:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:35:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:35:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:35:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:35:45', tmtdew=29.75, humidity=13.39, cloud=0.0, wind=16.04, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:35:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:35:51.463 [DEBUG] [Thread-14218] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:35:51.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:35:51.561 [DEBUG] [Thread-14221] [transport.py] [_log()] starting thread (client mode): 0x70d03310
2025-11-26T07:35:51.561 [DEBUG] [Thread-14221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:35:51.576 [DEBUG] [Thread-14221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:35:51.576 [INFO] [Thread-14221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:35:51.583 [DEBUG] [Thread-14221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] client lang: <none>
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] server lang: <none>
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] kex follows: False
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:35:51.584 [DEBUG] [Thread-14221] [transport.py] [_log()] Compression: none
2025-11-26T07:35:51.585 [DEBUG] [Thread-14221] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:35:51.647 [DEBUG] [Thread-14221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:35:51.648 [DEBUG] [Thread-14221] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:35:51.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:35:51.649 [DEBUG] [Thread-14221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:35:51.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:35:51.709 [DEBUG] [Thread-14221] [transport.py] [_log()] userauth is OK
2025-11-26T07:35:51.710 [DEBUG] [Thread-14221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:35:51.710 [DEBUG] [Thread-14221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:35:51.710 [DEBUG] [Thread-14221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:35:51.710 [DEBUG] [Thread-14221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:35:51.731 [INFO] [Thread-14221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:35:51.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:35:51.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:35:52.615 [DEBUG] [Thread-14221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:35:52.615 [DEBUG] [Thread-14221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:35:52.666 [DEBUG] [Thread-14221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:35:52.667 [DEBUG] [Thread-14221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:35:52.679 [DEBUG] [Thread-14221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:35:52.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:35:52.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:35:52.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:35:52.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:35:52.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:35:52.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:35:52.717 [DEBUG] [Thread-14221] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:36:04.525 [DEBUG] [Thread-14223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:36:19.579 [DEBUG] [Thread-14224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:36:22.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:36:22.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:36:22.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:36:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 36, 17), 29.81, 13.36, 0.0, 13.15, 23.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:36:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:36:17
2025-11-26T07:36:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:36:23.658 [DEBUG] [Thread-14225] [transport.py] [_log()] starting thread (client mode): 0x7378c400
2025-11-26T07:36:23.658 [DEBUG] [Thread-14225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:36:23.678 [DEBUG] [Thread-14225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:36:23.679 [INFO] [Thread-14225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] client lang: <none>
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] server lang: <none>
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] kex follows: False
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] Compression: none
2025-11-26T07:36:23.682 [DEBUG] [Thread-14225] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:36:23.700 [DEBUG] [Thread-14225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:36:23.700 [DEBUG] [Thread-14225] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:36:23.701 [DEBUG] [Thread-14225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:36:23.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:36:23.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:36:23.703 [DEBUG] [Thread-14225] [transport.py] [_log()] userauth is OK
2025-11-26T07:36:23.703 [DEBUG] [Thread-14225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:36:23.703 [DEBUG] [Thread-14225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:36:23.703 [DEBUG] [Thread-14225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:36:23.704 [DEBUG] [Thread-14225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:36:23.722 [INFO] [Thread-14225] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:36:23.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:36:24.298 [DEBUG] [Thread-14225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:36:24.298 [DEBUG] [Thread-14225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:36:24.299 [DEBUG] [Thread-14225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:36:24.339 [DEBUG] [Thread-14225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:36:24.339 [DEBUG] [Thread-14225] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:36:24.342 [DEBUG] [Thread-14225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:36:24.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:36:24.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:36:24.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:36:24.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:36:24.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:36:24.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:36:24.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:36:24.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:36:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:36:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.233079 -999.00  +22.50  23.59     18   -2.30 1 1 1 1 1   887    0 24.51 -14.39 ----- 20.9 23.6 36.8 28.3 26.5 -27.5 26.1 -26.7 24.6 -25.9 24.8 -26.5
2025-11-26T07:36:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:36:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:36:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.233079
2025-11-26T07:36:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:36:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:36:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:36:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:36:24.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:36:24.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:36:17', tmtdew=29.81, humidity=13.36, cloud=0.0, wind=13.15, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:35:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:36:24.366 [DEBUG] [Thread-14225] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:36:24.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:36:24.463 [DEBUG] [Thread-14228] [transport.py] [_log()] starting thread (client mode): 0x70d03b20
2025-11-26T07:36:24.463 [DEBUG] [Thread-14228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:36:24.478 [DEBUG] [Thread-14228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:36:24.478 [INFO] [Thread-14228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:36:24.485 [DEBUG] [Thread-14228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:36:24.485 [DEBUG] [Thread-14228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] client lang: <none>
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] server lang: <none>
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] kex follows: False
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] Compression: none
2025-11-26T07:36:24.486 [DEBUG] [Thread-14228] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:36:24.544 [DEBUG] [Thread-14228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:36:24.544 [DEBUG] [Thread-14228] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:36:24.545 [DEBUG] [Thread-14228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:36:24.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:36:24.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:36:24.600 [DEBUG] [Thread-14228] [transport.py] [_log()] userauth is OK
2025-11-26T07:36:24.600 [DEBUG] [Thread-14228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:36:24.600 [DEBUG] [Thread-14228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:36:24.601 [DEBUG] [Thread-14228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:36:24.601 [DEBUG] [Thread-14228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:36:24.620 [INFO] [Thread-14228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:36:24.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:36:24.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:36:25.459 [DEBUG] [Thread-14228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:36:25.460 [DEBUG] [Thread-14228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:36:25.508 [DEBUG] [Thread-14228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:36:25.508 [DEBUG] [Thread-14228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:36:25.518 [DEBUG] [Thread-14228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:36:25.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:36:25.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:36:25.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:36:25.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:36:25.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:36:25.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:36:25.555 [DEBUG] [Thread-14228] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:36:34.614 [DEBUG] [Thread-14230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:36:38.484 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:36:38.485 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:36:40.634 [DEBUG] [Thread-14231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:36:49.669 [DEBUG] [Thread-14232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:36:55.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:36:55.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:36:55.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:36:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 36, 49), 29.83, 12.84, 0.0, 23.96, 23.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:36:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:36:49
2025-11-26T07:36:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:36:56.562 [DEBUG] [Thread-14233] [transport.py] [_log()] starting thread (client mode): 0x761d90f0
2025-11-26T07:36:56.562 [DEBUG] [Thread-14233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:36:56.582 [DEBUG] [Thread-14233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:36:56.582 [INFO] [Thread-14233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:36:56.585 [DEBUG] [Thread-14233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:36:56.585 [DEBUG] [Thread-14233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] client lang: <none>
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] server lang: <none>
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] kex follows: False
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] Compression: none
2025-11-26T07:36:56.586 [DEBUG] [Thread-14233] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:36:56.602 [DEBUG] [Thread-14233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:36:56.602 [DEBUG] [Thread-14233] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:36:56.602 [DEBUG] [Thread-14233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:36:56.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:36:56.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:36:56.603 [DEBUG] [Thread-14233] [transport.py] [_log()] userauth is OK
2025-11-26T07:36:56.603 [DEBUG] [Thread-14233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:36:56.603 [DEBUG] [Thread-14233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:36:56.604 [DEBUG] [Thread-14233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:36:56.604 [DEBUG] [Thread-14233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:36:56.614 [INFO] [Thread-14233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:36:56.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:36:57.240 [DEBUG] [Thread-14233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:36:57.240 [DEBUG] [Thread-14233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:36:57.240 [DEBUG] [Thread-14233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:36:57.280 [DEBUG] [Thread-14233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:36:57.281 [DEBUG] [Thread-14233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:36:57.283 [DEBUG] [Thread-14233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:36:57.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:36:57.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:36:57.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:36:57.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:36:57.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:36:57.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:36:57.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.233774 -999.00  +22.70  15.72     18   -2.20 1 1 1 1 1   887    0 24.29 -17.72 ----- 11.6 15.7 16.8 23.8 26.6 -27.6 26.2 -26.2 24.7 -25.3 24.9 -26.3
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.233774
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:36:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:36:49', tmtdew=29.83, humidity=12.84, cloud=0.0, wind=23.96, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:36:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:36:57.301 [DEBUG] [Thread-14233] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:36:57.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:36:57.388 [DEBUG] [Thread-14236] [transport.py] [_log()] starting thread (client mode): 0x761d87c0
2025-11-26T07:36:57.389 [DEBUG] [Thread-14236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:36:57.403 [DEBUG] [Thread-14236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:36:57.403 [INFO] [Thread-14236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:36:57.412 [DEBUG] [Thread-14236] [transport.py] [_log()] client lang: <none>
2025-11-26T07:36:57.413 [DEBUG] [Thread-14236] [transport.py] [_log()] server lang: <none>
2025-11-26T07:36:57.413 [DEBUG] [Thread-14236] [transport.py] [_log()] kex follows: False
2025-11-26T07:36:57.413 [DEBUG] [Thread-14236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:36:57.413 [DEBUG] [Thread-14236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:36:57.413 [DEBUG] [Thread-14236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:36:57.413 [DEBUG] [Thread-14236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:36:57.413 [DEBUG] [Thread-14236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:36:57.413 [DEBUG] [Thread-14236] [transport.py] [_log()] Compression: none
2025-11-26T07:36:57.413 [DEBUG] [Thread-14236] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:36:57.470 [DEBUG] [Thread-14236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:36:57.470 [DEBUG] [Thread-14236] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:36:57.470 [DEBUG] [Thread-14236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:36:57.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:36:57.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:36:57.528 [DEBUG] [Thread-14236] [transport.py] [_log()] userauth is OK
2025-11-26T07:36:57.528 [DEBUG] [Thread-14236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:36:57.528 [DEBUG] [Thread-14236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:36:57.528 [DEBUG] [Thread-14236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:36:57.528 [DEBUG] [Thread-14236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:36:57.546 [INFO] [Thread-14236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:36:57.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:36:57.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:36:58.358 [DEBUG] [Thread-14236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:36:58.359 [DEBUG] [Thread-14236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:36:58.406 [DEBUG] [Thread-14236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:36:58.406 [DEBUG] [Thread-14236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:36:58.414 [DEBUG] [Thread-14236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:36:58.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:36:58.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:36:58.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:36:58.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:36:58.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:36:58.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:36:58.448 [DEBUG] [Thread-14236] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:37:04.699 [DEBUG] [Thread-14238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:37:19.745 [DEBUG] [Thread-14239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:37:28.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:37:28.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:37:28.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:37:29.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 37, 21), 29.78, 12.89, 0.0, 25.21, 23.01, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:37:29.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:37:21
2025-11-26T07:37:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:37:29.421 [DEBUG] [Thread-14240] [transport.py] [_log()] starting thread (client mode): 0x737e9270
2025-11-26T07:37:29.421 [DEBUG] [Thread-14240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:37:29.442 [DEBUG] [Thread-14240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:37:29.442 [INFO] [Thread-14240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:37:29.443 [DEBUG] [Thread-14240] [transport.py] [_log()] client lang: <none>
2025-11-26T07:37:29.444 [DEBUG] [Thread-14240] [transport.py] [_log()] server lang: <none>
2025-11-26T07:37:29.444 [DEBUG] [Thread-14240] [transport.py] [_log()] kex follows: False
2025-11-26T07:37:29.444 [DEBUG] [Thread-14240] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:37:29.444 [DEBUG] [Thread-14240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:37:29.444 [DEBUG] [Thread-14240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:37:29.444 [DEBUG] [Thread-14240] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:37:29.444 [DEBUG] [Thread-14240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:37:29.444 [DEBUG] [Thread-14240] [transport.py] [_log()] Compression: none
2025-11-26T07:37:29.444 [DEBUG] [Thread-14240] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:37:29.455 [DEBUG] [Thread-14240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:37:29.456 [DEBUG] [Thread-14240] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:37:29.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:37:29.457 [DEBUG] [Thread-14240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:37:29.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:37:29.458 [DEBUG] [Thread-14240] [transport.py] [_log()] userauth is OK
2025-11-26T07:37:29.458 [DEBUG] [Thread-14240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:37:29.459 [DEBUG] [Thread-14240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:37:29.459 [DEBUG] [Thread-14240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:37:29.459 [DEBUG] [Thread-14240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:37:29.481 [INFO] [Thread-14240] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:37:29.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:37:30.197 [DEBUG] [Thread-14240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:37:30.197 [DEBUG] [Thread-14240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:37:30.198 [DEBUG] [Thread-14240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:37:30.238 [DEBUG] [Thread-14240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:37:30.238 [DEBUG] [Thread-14240] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:37:30.241 [DEBUG] [Thread-14240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:37:30.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:37:30.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:37:30.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:37:30.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:37:30.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:37:30.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:37:30.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:37:30.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:37:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:37:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.234121 -999.00  +22.60  17.11     18   -2.20 1 1 1 1 1   887    0 24.27 -19.41 ----- 17.7 17.1 25.0 28.0 26.6 -27.5 26.2 -26.5 24.7 -25.6 24.8 -26.2
2025-11-26T07:37:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:37:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:37:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.234121
2025-11-26T07:37:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:37:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:37:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:37:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:37:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:37:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:37:21', tmtdew=29.78, humidity=12.89, cloud=0.0, wind=25.21, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:37:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:37:30.267 [DEBUG] [Thread-14240] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:37:30.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:37:30.368 [DEBUG] [Thread-14243] [transport.py] [_log()] starting thread (client mode): 0x7378f4c0
2025-11-26T07:37:30.368 [DEBUG] [Thread-14243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:37:30.383 [DEBUG] [Thread-14243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:37:30.383 [INFO] [Thread-14243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:37:30.391 [DEBUG] [Thread-14243] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:37:30.391 [DEBUG] [Thread-14243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:37:30.391 [DEBUG] [Thread-14243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:37:30.391 [DEBUG] [Thread-14243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] client lang: <none>
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] server lang: <none>
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] kex follows: False
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:37:30.392 [DEBUG] [Thread-14243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:37:30.393 [DEBUG] [Thread-14243] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:37:30.393 [DEBUG] [Thread-14243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:37:30.393 [DEBUG] [Thread-14243] [transport.py] [_log()] Compression: none
2025-11-26T07:37:30.393 [DEBUG] [Thread-14243] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:37:30.451 [DEBUG] [Thread-14243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:37:30.451 [DEBUG] [Thread-14243] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:37:30.451 [DEBUG] [Thread-14243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:37:30.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:37:30.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:37:30.507 [DEBUG] [Thread-14243] [transport.py] [_log()] userauth is OK
2025-11-26T07:37:30.507 [DEBUG] [Thread-14243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:37:30.507 [DEBUG] [Thread-14243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:37:30.507 [DEBUG] [Thread-14243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:37:30.507 [DEBUG] [Thread-14243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:37:30.521 [INFO] [Thread-14243] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:37:30.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:37:30.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:37:31.412 [DEBUG] [Thread-14243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:37:31.412 [DEBUG] [Thread-14243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:37:31.459 [DEBUG] [Thread-14243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:37:31.460 [DEBUG] [Thread-14243] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:37:31.468 [DEBUG] [Thread-14243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:37:31.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:37:31.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:37:31.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:37:31.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:37:31.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:37:31.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:37:31.512 [DEBUG] [Thread-14243] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:37:34.774 [DEBUG] [Thread-14245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:37:38.630 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:37:38.631 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:37:40.686 [DEBUG] [Thread-14246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:37:49.814 [DEBUG] [Thread-14247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:38:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:38:01.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:38:01.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:38:02.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 37, 53), 29.86, 13.36, 0.0, 23.89, 23.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:38:02.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:37:53
2025-11-26T07:38:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:38:02.453 [DEBUG] [Thread-14248] [transport.py] [_log()] starting thread (client mode): 0x761da800
2025-11-26T07:38:02.453 [DEBUG] [Thread-14248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:38:02.473 [DEBUG] [Thread-14248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:38:02.473 [INFO] [Thread-14248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:38:02.477 [DEBUG] [Thread-14248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:38:02.477 [DEBUG] [Thread-14248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:38:02.477 [DEBUG] [Thread-14248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:38:02.477 [DEBUG] [Thread-14248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:38:02.477 [DEBUG] [Thread-14248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:38:02.477 [DEBUG] [Thread-14248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] client lang: <none>
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] server lang: <none>
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] kex follows: False
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:38:02.478 [DEBUG] [Thread-14248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:38:02.479 [DEBUG] [Thread-14248] [transport.py] [_log()] Compression: none
2025-11-26T07:38:02.479 [DEBUG] [Thread-14248] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:38:02.497 [DEBUG] [Thread-14248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:38:02.498 [DEBUG] [Thread-14248] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:38:02.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:38:02.499 [DEBUG] [Thread-14248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:38:02.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:38:02.502 [DEBUG] [Thread-14248] [transport.py] [_log()] userauth is OK
2025-11-26T07:38:02.502 [DEBUG] [Thread-14248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:38:02.502 [DEBUG] [Thread-14248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:38:02.502 [DEBUG] [Thread-14248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:38:02.502 [DEBUG] [Thread-14248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:38:02.526 [INFO] [Thread-14248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:38:02.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:38:03.186 [DEBUG] [Thread-14248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:38:03.186 [DEBUG] [Thread-14248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:38:03.187 [DEBUG] [Thread-14248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:38:03.228 [DEBUG] [Thread-14248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:38:03.228 [DEBUG] [Thread-14248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:38:03.231 [DEBUG] [Thread-14248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:38:03.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:38:03.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:38:03.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:38:03.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:38:03.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:38:03.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:38:03.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:38:03.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:38:03.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:38:03.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.234468 -999.00  +22.70  25.88     18   -2.20 1 1 1 1 1   887    0 24.65 -22.00 ----- 22.8 25.9 37.8 29.8 26.6 -27.3 26.2 -26.8 24.7 -25.5 24.9 -26.2
2025-11-26T07:38:03.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:38:03.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:38:03.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.234468
2025-11-26T07:38:03.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:38:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:38:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:38:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:38:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:38:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:37:53', tmtdew=29.86, humidity=13.36, cloud=0.0, wind=23.89, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:37:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:38:03.257 [DEBUG] [Thread-14248] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:38:03.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:38:03.353 [DEBUG] [Thread-14251] [transport.py] [_log()] starting thread (client mode): 0x70d1e950
2025-11-26T07:38:03.353 [DEBUG] [Thread-14251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:38:03.368 [DEBUG] [Thread-14251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:38:03.369 [INFO] [Thread-14251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] client lang: <none>
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] server lang: <none>
2025-11-26T07:38:03.376 [DEBUG] [Thread-14251] [transport.py] [_log()] kex follows: False
2025-11-26T07:38:03.377 [DEBUG] [Thread-14251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:38:03.377 [DEBUG] [Thread-14251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:38:03.377 [DEBUG] [Thread-14251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:38:03.377 [DEBUG] [Thread-14251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:38:03.377 [DEBUG] [Thread-14251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:38:03.377 [DEBUG] [Thread-14251] [transport.py] [_log()] Compression: none
2025-11-26T07:38:03.377 [DEBUG] [Thread-14251] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:38:03.435 [DEBUG] [Thread-14251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:38:03.436 [DEBUG] [Thread-14251] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:38:03.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:38:03.437 [DEBUG] [Thread-14251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:38:03.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:38:03.492 [DEBUG] [Thread-14251] [transport.py] [_log()] userauth is OK
2025-11-26T07:38:03.492 [DEBUG] [Thread-14251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:38:03.492 [DEBUG] [Thread-14251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:38:03.492 [DEBUG] [Thread-14251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:38:03.493 [DEBUG] [Thread-14251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:38:03.515 [INFO] [Thread-14251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:38:03.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:38:03.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:38:04.355 [DEBUG] [Thread-14251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:38:04.355 [DEBUG] [Thread-14251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:38:04.402 [DEBUG] [Thread-14251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:38:04.403 [DEBUG] [Thread-14251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:38:04.412 [DEBUG] [Thread-14251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:38:04.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:38:04.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:38:04.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:38:04.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:38:04.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:38:04.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:38:04.449 [DEBUG] [Thread-14251] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:38:04.850 [DEBUG] [Thread-14253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:38:19.910 [DEBUG] [Thread-14254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:38:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:38:34.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:38:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:38:34.946 [DEBUG] [Thread-14255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:38:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 38, 25), 29.63, 13.54, 0.0, 19.36, 22.92, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:38:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:38:25
2025-11-26T07:38:35.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:38:35.413 [DEBUG] [Thread-14256] [transport.py] [_log()] starting thread (client mode): 0x7378c1c0
2025-11-26T07:38:35.413 [DEBUG] [Thread-14256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:38:35.434 [DEBUG] [Thread-14256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:38:35.434 [INFO] [Thread-14256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:38:35.437 [DEBUG] [Thread-14256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:38:35.437 [DEBUG] [Thread-14256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] client lang: <none>
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] server lang: <none>
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] kex follows: False
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:38:35.438 [DEBUG] [Thread-14256] [transport.py] [_log()] Compression: none
2025-11-26T07:38:35.439 [DEBUG] [Thread-14256] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:38:35.456 [DEBUG] [Thread-14256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:38:35.456 [DEBUG] [Thread-14256] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:38:35.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:38:35.457 [DEBUG] [Thread-14256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:38:35.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:38:35.460 [DEBUG] [Thread-14256] [transport.py] [_log()] userauth is OK
2025-11-26T07:38:35.460 [DEBUG] [Thread-14256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:38:35.460 [DEBUG] [Thread-14256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:38:35.460 [DEBUG] [Thread-14256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:38:35.460 [DEBUG] [Thread-14256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:38:35.485 [INFO] [Thread-14256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:38:35.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:38:36.060 [DEBUG] [Thread-14256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:38:36.060 [DEBUG] [Thread-14256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:38:36.060 [DEBUG] [Thread-14256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:38:36.101 [DEBUG] [Thread-14256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:38:36.101 [DEBUG] [Thread-14256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:38:36.105 [DEBUG] [Thread-14256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:38:36.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:38:36.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:38:36.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:38:36.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:38:36.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:38:36.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:38:36.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:38:36.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:38:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:38:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.234815 -999.00  +22.80  17.89     18   -2.10 1 1 1 1 1   887    0 24.67 -23.09 ----- 23.3 17.9 20.8 31.1 26.6 -27.4 26.2 -27.3 24.7 -26.0 24.9 -27.6
2025-11-26T07:38:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:38:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:38:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.234815
2025-11-26T07:38:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:38:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:38:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:38:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:38:36.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:38:36.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:38:25', tmtdew=29.63, humidity=13.54, cloud=0.0, wind=19.36, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:38:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:38:36.131 [DEBUG] [Thread-14256] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:38:36.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:38:36.226 [DEBUG] [Thread-14259] [transport.py] [_log()] starting thread (client mode): 0x7378fa90
2025-11-26T07:38:36.226 [DEBUG] [Thread-14259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:38:36.242 [DEBUG] [Thread-14259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:38:36.243 [INFO] [Thread-14259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:38:36.250 [DEBUG] [Thread-14259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] client lang: <none>
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] server lang: <none>
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] kex follows: False
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:38:36.251 [DEBUG] [Thread-14259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:38:36.252 [DEBUG] [Thread-14259] [transport.py] [_log()] Compression: none
2025-11-26T07:38:36.252 [DEBUG] [Thread-14259] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:38:36.309 [DEBUG] [Thread-14259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:38:36.310 [DEBUG] [Thread-14259] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:38:36.311 [DEBUG] [Thread-14259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:38:36.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:38:36.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:38:36.369 [DEBUG] [Thread-14259] [transport.py] [_log()] userauth is OK
2025-11-26T07:38:36.370 [DEBUG] [Thread-14259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:38:36.370 [DEBUG] [Thread-14259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:38:36.370 [DEBUG] [Thread-14259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:38:36.370 [DEBUG] [Thread-14259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:38:36.397 [INFO] [Thread-14259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:38:36.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:38:36.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:38:37.250 [DEBUG] [Thread-14259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:38:37.251 [DEBUG] [Thread-14259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:38:37.298 [DEBUG] [Thread-14259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:38:37.299 [DEBUG] [Thread-14259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:38:37.308 [DEBUG] [Thread-14259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:38:37.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:38:37.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:38:37.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:38:37.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:38:37.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:38:37.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:38:37.345 [DEBUG] [Thread-14259] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:38:38.775 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:38:38.776 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:38:40.742 [DEBUG] [Thread-14261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:38:49.979 [DEBUG] [Thread-14262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:39:05.020 [DEBUG] [Thread-14263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:39:07.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:39:07.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:39:07.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:39:08.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 38, 57), 29.79, 13.33, 0.0, 21.05, 22.81, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:39:08.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:38:57
2025-11-26T07:39:08.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:39:08.280 [DEBUG] [Thread-14264] [transport.py] [_log()] starting thread (client mode): 0x7376ead0
2025-11-26T07:39:08.280 [DEBUG] [Thread-14264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:39:08.301 [DEBUG] [Thread-14264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:39:08.301 [INFO] [Thread-14264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:39:08.304 [DEBUG] [Thread-14264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:39:08.304 [DEBUG] [Thread-14264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] client lang: <none>
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] server lang: <none>
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] kex follows: False
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:39:08.305 [DEBUG] [Thread-14264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:39:08.306 [DEBUG] [Thread-14264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:39:08.306 [DEBUG] [Thread-14264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:39:08.306 [DEBUG] [Thread-14264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:39:08.306 [DEBUG] [Thread-14264] [transport.py] [_log()] Compression: none
2025-11-26T07:39:08.306 [DEBUG] [Thread-14264] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:39:08.316 [DEBUG] [Thread-14264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:39:08.317 [DEBUG] [Thread-14264] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:39:08.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:39:08.318 [DEBUG] [Thread-14264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:39:08.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:39:08.320 [DEBUG] [Thread-14264] [transport.py] [_log()] userauth is OK
2025-11-26T07:39:08.321 [DEBUG] [Thread-14264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:39:08.321 [DEBUG] [Thread-14264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:39:08.321 [DEBUG] [Thread-14264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:39:08.321 [DEBUG] [Thread-14264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:39:08.341 [INFO] [Thread-14264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:39:08.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:39:08.996 [DEBUG] [Thread-14264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:39:08.996 [DEBUG] [Thread-14264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:39:08.997 [DEBUG] [Thread-14264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:39:09.039 [DEBUG] [Thread-14264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:39:09.039 [DEBUG] [Thread-14264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:39:09.042 [DEBUG] [Thread-14264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:39:09.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:39:09.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:39:09.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:39:09.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:39:09.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:39:09.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:39:09.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:39:09.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:39:09.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:39:09.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.235163 -999.00  +22.70  20.61     18   -2.10 1 1 1 1 1   887    0 24.37 -21.84 ----- 19.9 20.6 35.6 27.5 26.6 -27.5 26.2 -26.8 24.8 -25.5 24.9 -26.2
2025-11-26T07:39:09.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:39:09.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:39:09.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.235163
2025-11-26T07:39:09.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:39:09.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:39:09.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:39:09.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:39:09.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:39:09.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:38:57', tmtdew=29.79, humidity=13.33, cloud=0.0, wind=21.05, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:38:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:39:09.070 [DEBUG] [Thread-14264] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:39:09.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:39:09.167 [DEBUG] [Thread-14267] [transport.py] [_log()] starting thread (client mode): 0x737828c0
2025-11-26T07:39:09.167 [DEBUG] [Thread-14267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:39:09.186 [DEBUG] [Thread-14267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:39:09.186 [INFO] [Thread-14267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] client lang: <none>
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] server lang: <none>
2025-11-26T07:39:09.195 [DEBUG] [Thread-14267] [transport.py] [_log()] kex follows: False
2025-11-26T07:39:09.196 [DEBUG] [Thread-14267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:39:09.196 [DEBUG] [Thread-14267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:39:09.196 [DEBUG] [Thread-14267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:39:09.196 [DEBUG] [Thread-14267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:39:09.196 [DEBUG] [Thread-14267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:39:09.196 [DEBUG] [Thread-14267] [transport.py] [_log()] Compression: none
2025-11-26T07:39:09.196 [DEBUG] [Thread-14267] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:39:09.255 [DEBUG] [Thread-14267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:39:09.256 [DEBUG] [Thread-14267] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:39:09.256 [DEBUG] [Thread-14267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:39:09.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:39:09.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:39:09.318 [DEBUG] [Thread-14267] [transport.py] [_log()] userauth is OK
2025-11-26T07:39:09.318 [DEBUG] [Thread-14267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:39:09.318 [DEBUG] [Thread-14267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:39:09.318 [DEBUG] [Thread-14267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:39:09.318 [DEBUG] [Thread-14267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:39:09.340 [INFO] [Thread-14267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:39:09.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:39:09.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:39:10.201 [DEBUG] [Thread-14267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:39:10.201 [DEBUG] [Thread-14267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:39:10.253 [DEBUG] [Thread-14267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:39:10.253 [DEBUG] [Thread-14267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:39:10.265 [DEBUG] [Thread-14267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:39:10.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:39:10.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:39:10.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:39:10.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:39:10.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:39:10.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:39:10.317 [DEBUG] [Thread-14267] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:39:20.061 [DEBUG] [Thread-14269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:39:35.111 [DEBUG] [Thread-14270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:39:38.917 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:39:38.918 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:39:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:39:40.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:39:40.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:39:40.789 [DEBUG] [Thread-14271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:39:41.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 39, 29), 29.72, 13.41, 0.0, 20.64, 22.89, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:39:41.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:39:29
2025-11-26T07:39:41.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:39:41.278 [DEBUG] [Thread-14272] [transport.py] [_log()] starting thread (client mode): 0x7376e290
2025-11-26T07:39:41.278 [DEBUG] [Thread-14272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:39:41.289 [DEBUG] [Thread-14272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:39:41.290 [INFO] [Thread-14272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:39:41.292 [DEBUG] [Thread-14272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:39:41.292 [DEBUG] [Thread-14272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] client lang: <none>
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] server lang: <none>
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] kex follows: False
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] Compression: none
2025-11-26T07:39:41.293 [DEBUG] [Thread-14272] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:39:41.307 [DEBUG] [Thread-14272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:39:41.307 [DEBUG] [Thread-14272] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:39:41.307 [DEBUG] [Thread-14272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:39:41.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:39:41.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:39:41.309 [DEBUG] [Thread-14272] [transport.py] [_log()] userauth is OK
2025-11-26T07:39:41.309 [DEBUG] [Thread-14272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:39:41.309 [DEBUG] [Thread-14272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:39:41.309 [DEBUG] [Thread-14272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:39:41.309 [DEBUG] [Thread-14272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:39:41.321 [INFO] [Thread-14272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:39:41.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:39:41.912 [DEBUG] [Thread-14272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:39:41.912 [DEBUG] [Thread-14272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:39:41.912 [DEBUG] [Thread-14272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:39:41.953 [DEBUG] [Thread-14272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:39:41.954 [DEBUG] [Thread-14272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:39:41.956 [DEBUG] [Thread-14272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:39:41.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:39:41.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:39:41.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:39:41.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:39:41.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:39:41.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:39:41.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:39:41.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:39:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:39:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.235510 -999.00  +22.80  22.87     18   -2.20 1 1 1 1 1   887    0 24.68 -21.49 ----- 24.2 22.9 18.4 27.2 26.6 -27.3 26.2 -27.0 24.8 -25.6 24.9 -26.3
2025-11-26T07:39:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:39:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:39:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.235510
2025-11-26T07:39:41.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:39:41.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:39:41.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:39:41.980 [DEBUG] [Thread-14272] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:39:41.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:39:41.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:39:41.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:39:29', tmtdew=29.72, humidity=13.41, cloud=0.0, wind=20.64, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:39:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:39:42.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:39:42.082 [DEBUG] [Thread-14275] [transport.py] [_log()] starting thread (client mode): 0x7378c910
2025-11-26T07:39:42.082 [DEBUG] [Thread-14275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:39:42.097 [DEBUG] [Thread-14275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:39:42.097 [INFO] [Thread-14275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] client lang: <none>
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] server lang: <none>
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] kex follows: False
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:39:42.105 [DEBUG] [Thread-14275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:39:42.106 [DEBUG] [Thread-14275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:39:42.106 [DEBUG] [Thread-14275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:39:42.106 [DEBUG] [Thread-14275] [transport.py] [_log()] Compression: none
2025-11-26T07:39:42.106 [DEBUG] [Thread-14275] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:39:42.167 [DEBUG] [Thread-14275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:39:42.168 [DEBUG] [Thread-14275] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:39:42.168 [DEBUG] [Thread-14275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:39:42.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:39:42.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:39:42.225 [DEBUG] [Thread-14275] [transport.py] [_log()] userauth is OK
2025-11-26T07:39:42.225 [DEBUG] [Thread-14275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:39:42.225 [DEBUG] [Thread-14275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:39:42.225 [DEBUG] [Thread-14275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:39:42.225 [DEBUG] [Thread-14275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:39:42.244 [INFO] [Thread-14275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:39:42.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:39:42.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:39:43.146 [DEBUG] [Thread-14275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:39:43.146 [DEBUG] [Thread-14275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:39:43.194 [DEBUG] [Thread-14275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:39:43.195 [DEBUG] [Thread-14275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:39:43.203 [DEBUG] [Thread-14275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:39:43.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:39:43.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:39:43.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:39:43.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:39:43.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:39:43.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:39:43.239 [DEBUG] [Thread-14275] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:39:50.143 [DEBUG] [Thread-14277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:40:05.193 [DEBUG] [Thread-14278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:40:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:40:13.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:40:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:40:13.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 40, 1), 29.72, 13.43, 0.0, 18.46, 22.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:40:13.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:40:01
2025-11-26T07:40:14.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:40:14.186 [DEBUG] [Thread-14279] [transport.py] [_log()] starting thread (client mode): 0x70d1cee0
2025-11-26T07:40:14.186 [DEBUG] [Thread-14279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:40:14.206 [DEBUG] [Thread-14279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:40:14.206 [INFO] [Thread-14279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] client lang: <none>
2025-11-26T07:40:14.207 [DEBUG] [Thread-14279] [transport.py] [_log()] server lang: <none>
2025-11-26T07:40:14.208 [DEBUG] [Thread-14279] [transport.py] [_log()] kex follows: False
2025-11-26T07:40:14.208 [DEBUG] [Thread-14279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:40:14.208 [DEBUG] [Thread-14279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:40:14.208 [DEBUG] [Thread-14279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:40:14.208 [DEBUG] [Thread-14279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:40:14.208 [DEBUG] [Thread-14279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:40:14.208 [DEBUG] [Thread-14279] [transport.py] [_log()] Compression: none
2025-11-26T07:40:14.208 [DEBUG] [Thread-14279] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:40:14.220 [DEBUG] [Thread-14279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:40:14.220 [DEBUG] [Thread-14279] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:40:14.221 [DEBUG] [Thread-14279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:40:14.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:40:14.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:40:14.223 [DEBUG] [Thread-14279] [transport.py] [_log()] userauth is OK
2025-11-26T07:40:14.223 [DEBUG] [Thread-14279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:40:14.223 [DEBUG] [Thread-14279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:40:14.223 [DEBUG] [Thread-14279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:40:14.223 [DEBUG] [Thread-14279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:40:14.248 [INFO] [Thread-14279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:40:14.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:40:15.448 [DEBUG] [Thread-14279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:40:15.448 [DEBUG] [Thread-14279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:40:15.449 [DEBUG] [Thread-14279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:40:15.489 [DEBUG] [Thread-14279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:40:15.489 [DEBUG] [Thread-14279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:40:15.493 [DEBUG] [Thread-14279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:40:15.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:40:15.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:40:15.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:40:15.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:40:15.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:40:15.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:40:15.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:40:15.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:40:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:40:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.235857 -999.00  +22.80  18.17     18   -2.20 1 1 1 1 1   887    0 24.11 -21.97 ----- 21.5 18.2 36.2 25.3 26.6 -27.4 26.2 -26.8 24.8 -25.5 24.9 -26.5
2025-11-26T07:40:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:40:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:40:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.235857
2025-11-26T07:40:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:40:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:40:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:40:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:40:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:40:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:40:01', tmtdew=29.72, humidity=13.43, cloud=0.0, wind=18.46, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:39:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:40:15.520 [DEBUG] [Thread-14279] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:40:15.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:40:15.618 [DEBUG] [Thread-14282] [transport.py] [_log()] starting thread (client mode): 0x70d1fe20
2025-11-26T07:40:15.618 [DEBUG] [Thread-14282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:40:15.634 [DEBUG] [Thread-14282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:40:15.634 [INFO] [Thread-14282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:40:15.642 [DEBUG] [Thread-14282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:40:15.643 [DEBUG] [Thread-14282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:40:15.643 [DEBUG] [Thread-14282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:40:15.643 [DEBUG] [Thread-14282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:40:15.643 [DEBUG] [Thread-14282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:40:15.643 [DEBUG] [Thread-14282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:40:15.643 [DEBUG] [Thread-14282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:40:15.643 [DEBUG] [Thread-14282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:40:15.643 [DEBUG] [Thread-14282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:40:15.644 [DEBUG] [Thread-14282] [transport.py] [_log()] client lang: <none>
2025-11-26T07:40:15.644 [DEBUG] [Thread-14282] [transport.py] [_log()] server lang: <none>
2025-11-26T07:40:15.644 [DEBUG] [Thread-14282] [transport.py] [_log()] kex follows: False
2025-11-26T07:40:15.644 [DEBUG] [Thread-14282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:40:15.644 [DEBUG] [Thread-14282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:40:15.644 [DEBUG] [Thread-14282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:40:15.644 [DEBUG] [Thread-14282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:40:15.644 [DEBUG] [Thread-14282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:40:15.645 [DEBUG] [Thread-14282] [transport.py] [_log()] Compression: none
2025-11-26T07:40:15.645 [DEBUG] [Thread-14282] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:40:15.702 [DEBUG] [Thread-14282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:40:15.703 [DEBUG] [Thread-14282] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:40:15.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:40:15.705 [DEBUG] [Thread-14282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:40:15.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:40:15.764 [DEBUG] [Thread-14282] [transport.py] [_log()] userauth is OK
2025-11-26T07:40:15.764 [DEBUG] [Thread-14282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:40:15.764 [DEBUG] [Thread-14282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:40:15.764 [DEBUG] [Thread-14282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:40:15.764 [DEBUG] [Thread-14282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:40:15.785 [INFO] [Thread-14282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:40:15.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:40:15.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:40:16.620 [DEBUG] [Thread-14282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:40:16.621 [DEBUG] [Thread-14282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:40:16.669 [DEBUG] [Thread-14282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:40:16.669 [DEBUG] [Thread-14282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:40:16.679 [DEBUG] [Thread-14282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:40:16.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:40:16.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:40:16.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:40:16.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:40:16.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:40:16.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:40:16.717 [DEBUG] [Thread-14282] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:40:20.226 [DEBUG] [Thread-14284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:40:35.278 [DEBUG] [Thread-14285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:40:39.060 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:40:39.061 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:40:40.842 [DEBUG] [Thread-14286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:40:46.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:40:46.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:40:46.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:40:47.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 40, 33), 30.39, 12.59, 0.0, 18.7, 23.41, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:40:47.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:40:33
2025-11-26T07:40:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:40:47.667 [DEBUG] [Thread-14287] [transport.py] [_log()] starting thread (client mode): 0x70d29000
2025-11-26T07:40:47.667 [DEBUG] [Thread-14287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:40:47.687 [DEBUG] [Thread-14287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:40:47.687 [INFO] [Thread-14287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] client lang: <none>
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] server lang: <none>
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] kex follows: False
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] Compression: none
2025-11-26T07:40:47.690 [DEBUG] [Thread-14287] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:40:47.710 [DEBUG] [Thread-14287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:40:47.711 [DEBUG] [Thread-14287] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:40:47.711 [DEBUG] [Thread-14287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:40:47.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:40:47.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:40:47.753 [DEBUG] [Thread-14287] [transport.py] [_log()] userauth is OK
2025-11-26T07:40:47.753 [DEBUG] [Thread-14287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:40:47.753 [DEBUG] [Thread-14287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:40:47.753 [DEBUG] [Thread-14287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:40:47.754 [DEBUG] [Thread-14287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:40:47.786 [INFO] [Thread-14287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:40:47.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:40:48.405 [DEBUG] [Thread-14287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:40:48.405 [DEBUG] [Thread-14287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:40:48.406 [DEBUG] [Thread-14287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:40:48.447 [DEBUG] [Thread-14287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:40:48.447 [DEBUG] [Thread-14287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:40:48.451 [DEBUG] [Thread-14287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:40:48.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:40:48.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:40:48.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:40:48.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:40:48.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:40:48.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:40:48.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:40:48.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:40:48.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:40:48.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.236552 -999.00  +22.60  17.93     18   -2.40 1 1 1 1 1   887    0 24.12 -22.11 ----- 18.4 17.9 41.0 24.4 26.7 -27.6 26.2 -26.6 24.8 -25.4 25.0 -26.4
2025-11-26T07:40:48.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:40:48.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:40:48.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.236552
2025-11-26T07:40:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:40:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:40:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:40:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:40:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:40:48.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:40:33', tmtdew=30.39, humidity=12.59, cloud=0.0, wind=18.7, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:40:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:40:48.485 [DEBUG] [Thread-14287] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:40:48.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:40:48.582 [DEBUG] [Thread-14290] [transport.py] [_log()] starting thread (client mode): 0x70d2a890
2025-11-26T07:40:48.582 [DEBUG] [Thread-14290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:40:48.598 [DEBUG] [Thread-14290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:40:48.598 [INFO] [Thread-14290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:40:48.605 [DEBUG] [Thread-14290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:40:48.606 [DEBUG] [Thread-14290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:40:48.606 [DEBUG] [Thread-14290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:40:48.606 [DEBUG] [Thread-14290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:40:48.606 [DEBUG] [Thread-14290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:40:48.606 [DEBUG] [Thread-14290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:40:48.606 [DEBUG] [Thread-14290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:40:48.606 [DEBUG] [Thread-14290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:40:48.606 [DEBUG] [Thread-14290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:40:48.607 [DEBUG] [Thread-14290] [transport.py] [_log()] client lang: <none>
2025-11-26T07:40:48.607 [DEBUG] [Thread-14290] [transport.py] [_log()] server lang: <none>
2025-11-26T07:40:48.607 [DEBUG] [Thread-14290] [transport.py] [_log()] kex follows: False
2025-11-26T07:40:48.607 [DEBUG] [Thread-14290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:40:48.607 [DEBUG] [Thread-14290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:40:48.607 [DEBUG] [Thread-14290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:40:48.607 [DEBUG] [Thread-14290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:40:48.608 [DEBUG] [Thread-14290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:40:48.608 [DEBUG] [Thread-14290] [transport.py] [_log()] Compression: none
2025-11-26T07:40:48.608 [DEBUG] [Thread-14290] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:40:48.664 [DEBUG] [Thread-14290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:40:48.665 [DEBUG] [Thread-14290] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:40:48.666 [DEBUG] [Thread-14290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:40:48.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:40:48.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:40:48.728 [DEBUG] [Thread-14290] [transport.py] [_log()] userauth is OK
2025-11-26T07:40:48.728 [DEBUG] [Thread-14290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:40:48.728 [DEBUG] [Thread-14290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:40:48.729 [DEBUG] [Thread-14290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:40:48.729 [DEBUG] [Thread-14290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:40:48.748 [INFO] [Thread-14290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:40:48.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:40:48.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:40:49.614 [DEBUG] [Thread-14290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:40:49.614 [DEBUG] [Thread-14290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:40:49.662 [DEBUG] [Thread-14290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:40:49.662 [DEBUG] [Thread-14290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:40:49.671 [DEBUG] [Thread-14290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:40:49.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:40:49.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:40:49.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:40:49.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:40:49.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:40:49.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:40:49.709 [DEBUG] [Thread-14290] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:40:50.308 [DEBUG] [Thread-14292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:41:05.364 [DEBUG] [Thread-14293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:41:19.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:41:19.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:41:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:41:20.394 [DEBUG] [Thread-14294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:41:20.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 41, 5), 29.83, 12.88, 0.0, 25.21, 22.94, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:41:20.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:41:05
2025-11-26T07:41:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:41:20.695 [DEBUG] [Thread-14295] [transport.py] [_log()] starting thread (client mode): 0x70d2ab90
2025-11-26T07:41:20.695 [DEBUG] [Thread-14295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:41:20.715 [DEBUG] [Thread-14295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:41:20.715 [INFO] [Thread-14295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:41:20.718 [DEBUG] [Thread-14295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] client lang: <none>
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] server lang: <none>
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] kex follows: False
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] Compression: none
2025-11-26T07:41:20.719 [DEBUG] [Thread-14295] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:41:20.735 [DEBUG] [Thread-14295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:41:20.736 [DEBUG] [Thread-14295] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:41:20.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:41:20.736 [DEBUG] [Thread-14295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:41:20.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:41:20.780 [DEBUG] [Thread-14295] [transport.py] [_log()] userauth is OK
2025-11-26T07:41:20.780 [DEBUG] [Thread-14295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:41:20.780 [DEBUG] [Thread-14295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:41:20.780 [DEBUG] [Thread-14295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:41:20.780 [DEBUG] [Thread-14295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:41:20.799 [INFO] [Thread-14295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:41:20.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:41:21.418 [DEBUG] [Thread-14295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:41:21.418 [DEBUG] [Thread-14295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:41:21.419 [DEBUG] [Thread-14295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:41:21.459 [DEBUG] [Thread-14295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:41:21.459 [DEBUG] [Thread-14295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:41:21.462 [DEBUG] [Thread-14295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:41:21.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:41:21.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:41:21.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:41:21.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:41:21.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:41:21.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:41:21.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:41:21.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:41:21.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:41:21.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.236899 -999.00  +22.50  26.67     18   -2.50 1 1 1 1 1   887    0 24.26 -21.12 ----- 20.8 26.7 49.0 30.3 26.6 -27.6 26.1 -27.0 24.6 -26.1 24.9 -26.1
2025-11-26T07:41:21.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:41:21.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:41:21.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.236899
2025-11-26T07:41:21.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:41:21.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:41:21.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:41:21.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:41:21.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:41:21.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:41:05', tmtdew=29.83, humidity=12.88, cloud=0.0, wind=25.21, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:41:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:41:21.491 [DEBUG] [Thread-14295] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:41:21.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:41:21.587 [DEBUG] [Thread-14298] [transport.py] [_log()] starting thread (client mode): 0x70d1c880
2025-11-26T07:41:21.587 [DEBUG] [Thread-14298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:41:21.602 [DEBUG] [Thread-14298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:41:21.602 [INFO] [Thread-14298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:41:21.610 [DEBUG] [Thread-14298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:41:21.610 [DEBUG] [Thread-14298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:41:21.610 [DEBUG] [Thread-14298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:41:21.611 [DEBUG] [Thread-14298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:41:21.611 [DEBUG] [Thread-14298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:41:21.611 [DEBUG] [Thread-14298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:41:21.611 [DEBUG] [Thread-14298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:41:21.611 [DEBUG] [Thread-14298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:41:21.611 [DEBUG] [Thread-14298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:41:21.611 [DEBUG] [Thread-14298] [transport.py] [_log()] client lang: <none>
2025-11-26T07:41:21.611 [DEBUG] [Thread-14298] [transport.py] [_log()] server lang: <none>
2025-11-26T07:41:21.611 [DEBUG] [Thread-14298] [transport.py] [_log()] kex follows: False
2025-11-26T07:41:21.612 [DEBUG] [Thread-14298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:41:21.612 [DEBUG] [Thread-14298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:41:21.612 [DEBUG] [Thread-14298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:41:21.612 [DEBUG] [Thread-14298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:41:21.612 [DEBUG] [Thread-14298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:41:21.612 [DEBUG] [Thread-14298] [transport.py] [_log()] Compression: none
2025-11-26T07:41:21.612 [DEBUG] [Thread-14298] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:41:21.668 [DEBUG] [Thread-14298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:41:21.669 [DEBUG] [Thread-14298] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:41:21.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:41:21.671 [DEBUG] [Thread-14298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:41:21.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:41:21.730 [DEBUG] [Thread-14298] [transport.py] [_log()] userauth is OK
2025-11-26T07:41:21.730 [DEBUG] [Thread-14298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:41:21.731 [DEBUG] [Thread-14298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:41:21.731 [DEBUG] [Thread-14298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:41:21.731 [DEBUG] [Thread-14298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:41:21.751 [INFO] [Thread-14298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:41:21.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:41:21.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:41:22.633 [DEBUG] [Thread-14298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:41:22.633 [DEBUG] [Thread-14298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:41:22.684 [DEBUG] [Thread-14298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:41:22.685 [DEBUG] [Thread-14298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:41:22.694 [DEBUG] [Thread-14298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:41:22.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:41:22.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:41:22.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:41:22.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:41:22.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:41:22.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:41:22.732 [DEBUG] [Thread-14298] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:41:35.431 [DEBUG] [Thread-14300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:41:39.200 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:41:39.201 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:41:40.878 [DEBUG] [Thread-14301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:41:50.492 [DEBUG] [Thread-14302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:41:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:41:52.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:41:52.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:41:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 41, 37), 29.8, 12.91, 0.0, 21.93, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:41:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:41:37
2025-11-26T07:41:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:41:53.721 [DEBUG] [Thread-14303] [transport.py] [_log()] starting thread (client mode): 0x7376efb0
2025-11-26T07:41:53.722 [DEBUG] [Thread-14303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:41:53.742 [DEBUG] [Thread-14303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:41:53.742 [INFO] [Thread-14303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] client lang: <none>
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] server lang: <none>
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] kex follows: False
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] Compression: none
2025-11-26T07:41:53.745 [DEBUG] [Thread-14303] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:41:53.761 [DEBUG] [Thread-14303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:41:53.761 [DEBUG] [Thread-14303] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:41:53.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:41:53.761 [DEBUG] [Thread-14303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:41:53.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:41:53.762 [DEBUG] [Thread-14303] [transport.py] [_log()] userauth is OK
2025-11-26T07:41:53.762 [DEBUG] [Thread-14303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:41:53.762 [DEBUG] [Thread-14303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:41:53.762 [DEBUG] [Thread-14303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:41:53.762 [DEBUG] [Thread-14303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:41:53.777 [INFO] [Thread-14303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:41:53.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:41:54.410 [DEBUG] [Thread-14303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:41:54.410 [DEBUG] [Thread-14303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:41:54.410 [DEBUG] [Thread-14303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:41:54.450 [DEBUG] [Thread-14303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:41:54.450 [DEBUG] [Thread-14303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:41:54.452 [DEBUG] [Thread-14303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:41:54.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:41:54.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:41:54.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:41:54.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:41:54.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:41:54.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:41:54.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.237246 -999.00  +22.50  24.47     18   -2.20 1 1 1 1 1   887    0 24.76 -21.32 ----- 23.5 24.5 39.0 27.8 26.6 -27.3 26.2 -26.8 24.7 -25.3 25.0 -26.8
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.237246
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:41:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:41:37', tmtdew=29.8, humidity=12.91, cloud=0.0, wind=21.93, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:41:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:41:54.472 [DEBUG] [Thread-14303] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:41:54.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:41:54.561 [DEBUG] [Thread-14306] [transport.py] [_log()] starting thread (client mode): 0x761da170
2025-11-26T07:41:54.561 [DEBUG] [Thread-14306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:41:54.575 [DEBUG] [Thread-14306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:41:54.575 [INFO] [Thread-14306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:41:54.582 [DEBUG] [Thread-14306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:41:54.582 [DEBUG] [Thread-14306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:41:54.582 [DEBUG] [Thread-14306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] client lang: <none>
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] server lang: <none>
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] kex follows: False
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] Compression: none
2025-11-26T07:41:54.583 [DEBUG] [Thread-14306] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:41:54.638 [DEBUG] [Thread-14306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:41:54.638 [DEBUG] [Thread-14306] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:41:54.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:41:54.638 [DEBUG] [Thread-14306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:41:54.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:41:54.695 [DEBUG] [Thread-14306] [transport.py] [_log()] userauth is OK
2025-11-26T07:41:54.695 [DEBUG] [Thread-14306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:41:54.695 [DEBUG] [Thread-14306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:41:54.695 [DEBUG] [Thread-14306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:41:54.695 [DEBUG] [Thread-14306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:41:54.711 [INFO] [Thread-14306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:41:54.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:41:54.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:41:55.552 [DEBUG] [Thread-14306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:41:55.552 [DEBUG] [Thread-14306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:41:55.600 [DEBUG] [Thread-14306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:41:55.600 [DEBUG] [Thread-14306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:41:55.608 [DEBUG] [Thread-14306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:41:55.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:41:55.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:41:55.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:41:55.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:41:55.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:41:55.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:41:55.641 [DEBUG] [Thread-14306] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:42:05.522 [DEBUG] [Thread-14308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:42:20.568 [DEBUG] [Thread-14309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:42:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:42:25.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:42:25.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:42:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 42, 9), 29.73, 12.98, 0.0, 19.25, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:42:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:42:09
2025-11-26T07:42:26.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:42:26.586 [DEBUG] [Thread-14310] [transport.py] [_log()] starting thread (client mode): 0x7376db10
2025-11-26T07:42:26.586 [DEBUG] [Thread-14310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:42:26.607 [DEBUG] [Thread-14310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:42:26.608 [INFO] [Thread-14310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:42:26.610 [DEBUG] [Thread-14310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] client lang: <none>
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] server lang: <none>
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] kex follows: False
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] Compression: none
2025-11-26T07:42:26.611 [DEBUG] [Thread-14310] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:42:26.628 [DEBUG] [Thread-14310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:42:26.629 [DEBUG] [Thread-14310] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:42:26.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:42:26.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:42:26.630 [DEBUG] [Thread-14310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:42:26.631 [DEBUG] [Thread-14310] [transport.py] [_log()] userauth is OK
2025-11-26T07:42:26.631 [DEBUG] [Thread-14310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:42:26.631 [DEBUG] [Thread-14310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:42:26.631 [DEBUG] [Thread-14310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:42:26.631 [DEBUG] [Thread-14310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:42:26.664 [INFO] [Thread-14310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:42:26.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:42:27.248 [DEBUG] [Thread-14310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:42:27.249 [DEBUG] [Thread-14310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:42:27.249 [DEBUG] [Thread-14310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:42:27.290 [DEBUG] [Thread-14310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:42:27.290 [DEBUG] [Thread-14310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:42:27.293 [DEBUG] [Thread-14310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:42:27.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:42:27.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:42:27.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:42:27.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:42:27.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:42:27.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:42:27.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:42:27.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:42:27.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:42:27.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.237593 -999.00  +22.60  25.50     18   -2.20 1 1 1 1 1   887    0 24.67 -21.30 ----- 19.4 25.5 46.8 33.1 26.6 -27.2 26.2 -26.9 24.7 -26.2 25.0 -26.6
2025-11-26T07:42:27.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:42:27.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:42:27.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.237593
2025-11-26T07:42:27.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:42:27.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:42:27.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:42:27.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:42:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:42:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:42:09', tmtdew=29.73, humidity=12.98, cloud=0.0, wind=19.25, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:42:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:42:27.322 [DEBUG] [Thread-14310] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:42:27.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:42:27.420 [DEBUG] [Thread-14313] [transport.py] [_log()] starting thread (client mode): 0x7376f340
2025-11-26T07:42:27.420 [DEBUG] [Thread-14313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:42:27.435 [DEBUG] [Thread-14313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:42:27.435 [INFO] [Thread-14313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:42:27.442 [DEBUG] [Thread-14313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:42:27.442 [DEBUG] [Thread-14313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] client lang: <none>
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] server lang: <none>
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] kex follows: False
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] Compression: none
2025-11-26T07:42:27.443 [DEBUG] [Thread-14313] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:42:27.504 [DEBUG] [Thread-14313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:42:27.504 [DEBUG] [Thread-14313] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:42:27.505 [DEBUG] [Thread-14313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:42:27.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:42:27.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:42:27.568 [DEBUG] [Thread-14313] [transport.py] [_log()] userauth is OK
2025-11-26T07:42:27.568 [DEBUG] [Thread-14313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:42:27.568 [DEBUG] [Thread-14313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:42:27.568 [DEBUG] [Thread-14313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:42:27.568 [DEBUG] [Thread-14313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:42:27.587 [INFO] [Thread-14313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:42:27.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:42:27.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:42:28.420 [DEBUG] [Thread-14313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:42:28.420 [DEBUG] [Thread-14313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:42:28.472 [DEBUG] [Thread-14313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:42:28.472 [DEBUG] [Thread-14313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:42:28.485 [DEBUG] [Thread-14313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:42:28.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:42:28.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:42: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') -> 00000000
2025-11-26T07:42:28.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:42:28.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:42:28.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:42:28.522 [DEBUG] [Thread-14313] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:42:35.602 [DEBUG] [Thread-14315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:42:39.343 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:42:39.344 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:42:40.920 [DEBUG] [Thread-14316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:42:50.651 [DEBUG] [Thread-14317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:42:58.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:42:58.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:42:58.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:42:59.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 42, 41), 29.9, 12.88, 0.0, 14.5, 23.17, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:42:59.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:42:41
2025-11-26T07:42:59.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:42:59.438 [DEBUG] [Thread-14318] [transport.py] [_log()] starting thread (client mode): 0x70d1fe20
2025-11-26T07:42:59.438 [DEBUG] [Thread-14318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:42:59.459 [DEBUG] [Thread-14318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:42:59.459 [INFO] [Thread-14318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] client lang: <none>
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] server lang: <none>
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] kex follows: False
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:42:59.460 [DEBUG] [Thread-14318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:42:59.461 [DEBUG] [Thread-14318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:42:59.461 [DEBUG] [Thread-14318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:42:59.461 [DEBUG] [Thread-14318] [transport.py] [_log()] Compression: none
2025-11-26T07:42:59.461 [DEBUG] [Thread-14318] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:42:59.469 [DEBUG] [Thread-14318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:42:59.469 [DEBUG] [Thread-14318] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:42:59.470 [DEBUG] [Thread-14318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:42:59.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:42:59.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:42:59.471 [DEBUG] [Thread-14318] [transport.py] [_log()] userauth is OK
2025-11-26T07:42:59.472 [DEBUG] [Thread-14318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:42:59.472 [DEBUG] [Thread-14318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:42:59.472 [DEBUG] [Thread-14318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:42:59.472 [DEBUG] [Thread-14318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:42:59.489 [INFO] [Thread-14318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:42:59.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:43:00.110 [DEBUG] [Thread-14318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:43:00.111 [DEBUG] [Thread-14318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:43:00.111 [DEBUG] [Thread-14318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:43:00.152 [DEBUG] [Thread-14318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:43:00.152 [DEBUG] [Thread-14318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:43:00.156 [DEBUG] [Thread-14318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:43:00.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:43:00.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:43:00.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:43:00.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:43:00.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:43:00.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:43:00.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:43:00.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:43:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:43:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.237940 -999.00  +22.60  22.56     18   -2.30 1 1 1 1 1   887    0 24.99 -20.15 ----- 24.0 22.6 36.0 29.4 26.6 -27.4 26.2 -27.2 24.7 -25.9 24.9 -26.3
2025-11-26T07:43:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:43:00.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:43:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.237940
2025-11-26T07:43:00.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:43:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:43:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:43:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:43:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:43:00.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:42:41', tmtdew=29.9, humidity=12.88, cloud=0.0, wind=14.5, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:42:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:43:00.185 [DEBUG] [Thread-14318] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:43:00.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:43:00.281 [DEBUG] [Thread-14321] [transport.py] [_log()] starting thread (client mode): 0x70d1f7f0
2025-11-26T07:43:00.281 [DEBUG] [Thread-14321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:43:00.295 [DEBUG] [Thread-14321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:43:00.296 [INFO] [Thread-14321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:43:00.303 [DEBUG] [Thread-14321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:43:00.303 [DEBUG] [Thread-14321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] client lang: <none>
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] server lang: <none>
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] kex follows: False
2025-11-26T07:43:00.304 [DEBUG] [Thread-14321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:43:00.305 [DEBUG] [Thread-14321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:43:00.305 [DEBUG] [Thread-14321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:43:00.305 [DEBUG] [Thread-14321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:43:00.305 [DEBUG] [Thread-14321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:43:00.305 [DEBUG] [Thread-14321] [transport.py] [_log()] Compression: none
2025-11-26T07:43:00.305 [DEBUG] [Thread-14321] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:43:00.363 [DEBUG] [Thread-14321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:43:00.364 [DEBUG] [Thread-14321] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:43:00.364 [DEBUG] [Thread-14321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:43:00.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:43:00.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:43:00.419 [DEBUG] [Thread-14321] [transport.py] [_log()] userauth is OK
2025-11-26T07:43:00.419 [DEBUG] [Thread-14321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:43:00.420 [DEBUG] [Thread-14321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:43:00.420 [DEBUG] [Thread-14321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:43:00.420 [DEBUG] [Thread-14321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:43:00.438 [INFO] [Thread-14321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:43:00.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:43:00.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:43:01.247 [DEBUG] [Thread-14321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:43:01.247 [DEBUG] [Thread-14321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:43:01.296 [DEBUG] [Thread-14321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:43:01.296 [DEBUG] [Thread-14321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:43:01.305 [DEBUG] [Thread-14321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:43:01.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:43:01.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:43:01.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:43:01.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:43:01.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:43:01.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:43:01.342 [DEBUG] [Thread-14321] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:43:05.689 [DEBUG] [Thread-14323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:43:20.733 [DEBUG] [Thread-14324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:43:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:43:31.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:43:31.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:43:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 43, 13), 30.1, 12.68, 0.0, 16.0, 23.16, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:43:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:43:13
2025-11-26T07:43:32.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:43:32.277 [DEBUG] [Thread-14325] [transport.py] [_log()] starting thread (client mode): 0x7376eb90
2025-11-26T07:43:32.277 [DEBUG] [Thread-14325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:43:32.291 [DEBUG] [Thread-14325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:43:32.292 [INFO] [Thread-14325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:43:32.294 [DEBUG] [Thread-14325] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:43:32.294 [DEBUG] [Thread-14325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:43:32.294 [DEBUG] [Thread-14325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:43:32.294 [DEBUG] [Thread-14325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] client lang: <none>
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] server lang: <none>
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] kex follows: False
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] Compression: none
2025-11-26T07:43:32.295 [DEBUG] [Thread-14325] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:43:32.310 [DEBUG] [Thread-14325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:43:32.310 [DEBUG] [Thread-14325] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:43:32.311 [DEBUG] [Thread-14325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:43:32.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:43:32.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:43:32.313 [DEBUG] [Thread-14325] [transport.py] [_log()] userauth is OK
2025-11-26T07:43:32.313 [DEBUG] [Thread-14325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:43:32.314 [DEBUG] [Thread-14325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:43:32.314 [DEBUG] [Thread-14325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:43:32.314 [DEBUG] [Thread-14325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:43:32.338 [INFO] [Thread-14325] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:43:32.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:43:32.957 [DEBUG] [Thread-14325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:43:32.958 [DEBUG] [Thread-14325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:43:32.958 [DEBUG] [Thread-14325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:43:32.999 [DEBUG] [Thread-14325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:43:32.999 [DEBUG] [Thread-14325] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:43:33.001 [DEBUG] [Thread-14325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:43:33.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:43:33.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:43:33.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:43:33.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:43:33.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:43:33.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:43:33.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:43:33.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:43:33.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:43:33.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.238288 -999.00  +22.50  22.88     18   -2.50 1 1 1 1 1   887    0 25.06 -19.95 ----- 21.9 22.9 52.6 27.0 26.6 -27.2 26.2 -27.0 24.8 -25.8 25.0 -26.2
2025-11-26T07:43:33.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:43:33.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:43:33.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.238288
2025-11-26T07:43:33.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:43:33.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:43:33.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:43:33.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:43:33.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:43:33.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:43:13', tmtdew=30.1, humidity=12.68, cloud=0.0, wind=16.0, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:43:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:43:33.022 [DEBUG] [Thread-14325] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:43:33.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:43:33.130 [DEBUG] [Thread-14328] [transport.py] [_log()] starting thread (client mode): 0x70d0df00
2025-11-26T07:43:33.130 [DEBUG] [Thread-14328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:43:33.149 [DEBUG] [Thread-14328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:43:33.150 [INFO] [Thread-14328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:43:33.157 [DEBUG] [Thread-14328] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] client lang: <none>
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] server lang: <none>
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] kex follows: False
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:43:33.158 [DEBUG] [Thread-14328] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:43:33.159 [DEBUG] [Thread-14328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:43:33.159 [DEBUG] [Thread-14328] [transport.py] [_log()] Compression: none
2025-11-26T07:43:33.159 [DEBUG] [Thread-14328] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:43:33.214 [DEBUG] [Thread-14328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:43:33.214 [DEBUG] [Thread-14328] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:43:33.214 [DEBUG] [Thread-14328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:43:33.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:43:33.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:43:33.271 [DEBUG] [Thread-14328] [transport.py] [_log()] userauth is OK
2025-11-26T07:43:33.272 [DEBUG] [Thread-14328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:43:33.272 [DEBUG] [Thread-14328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:43:33.272 [DEBUG] [Thread-14328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:43:33.272 [DEBUG] [Thread-14328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:43:33.296 [INFO] [Thread-14328] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:43:33.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:43:33.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:43:34.164 [DEBUG] [Thread-14328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:43:34.165 [DEBUG] [Thread-14328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:43:34.213 [DEBUG] [Thread-14328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:43:34.213 [DEBUG] [Thread-14328] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:43:34.222 [DEBUG] [Thread-14328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:43:34.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:43:34.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:43:34.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:43:34.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:43:34.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:43:34.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:43:34.260 [DEBUG] [Thread-14328] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:43:35.772 [DEBUG] [Thread-14330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:43:39.485 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:43:39.486 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:43:40.969 [DEBUG] [Thread-14331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:43:50.825 [DEBUG] [Thread-14332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:44:04.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:44:04.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:44:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:44:04.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 43, 45), 29.99, 12.78, 0.0, 22.48, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:44:04.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:43:45
2025-11-26T07:44:05.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:44:05.202 [DEBUG] [Thread-14333] [transport.py] [_log()] starting thread (client mode): 0x7378d810
2025-11-26T07:44:05.202 [DEBUG] [Thread-14333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:44:05.222 [DEBUG] [Thread-14333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:44:05.223 [INFO] [Thread-14333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] client lang: <none>
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] server lang: <none>
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] kex follows: False
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] Compression: none
2025-11-26T07:44:05.224 [DEBUG] [Thread-14333] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:44:05.235 [DEBUG] [Thread-14333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:44:05.235 [DEBUG] [Thread-14333] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:44:05.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:44:05.236 [DEBUG] [Thread-14333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:44:05.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:44:05.238 [DEBUG] [Thread-14333] [transport.py] [_log()] userauth is OK
2025-11-26T07:44:05.238 [DEBUG] [Thread-14333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:44:05.238 [DEBUG] [Thread-14333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:44:05.238 [DEBUG] [Thread-14333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:44:05.239 [DEBUG] [Thread-14333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:44:05.263 [INFO] [Thread-14333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:44:05.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:44:05.846 [DEBUG] [Thread-14333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:44:05.846 [DEBUG] [Thread-14333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:44:05.847 [DEBUG] [Thread-14333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:44:05.859 [DEBUG] [Thread-14335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:44:05.887 [DEBUG] [Thread-14333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:44:05.887 [DEBUG] [Thread-14333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:44:05.890 [DEBUG] [Thread-14333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:44:05.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:44:05.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:44:05.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:44:05.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:44:05.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:44:05.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:44:05.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:44:05.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:44:05.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:44:05.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.238635 -999.00  +22.50  18.09     18   -2.30 1 1 1 1 1   887    0 24.06 -19.17 ----- 24.0 18.1 32.7 25.5 26.6 -27.7 26.2 -26.3 24.8 -25.4 24.9 -26.1
2025-11-26T07:44:05.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:44:05.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:44:05.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.238635
2025-11-26T07:44:05.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:44:05.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:44:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:44:05.918 [DEBUG] [Thread-14333] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:44:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:44:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:44:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:43:45', tmtdew=29.99, humidity=12.78, cloud=0.0, wind=22.48, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:43:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:44:06.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:44:06.013 [DEBUG] [Thread-14337] [transport.py] [_log()] starting thread (client mode): 0x70d1e0e0
2025-11-26T07:44:06.013 [DEBUG] [Thread-14337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:44:06.031 [DEBUG] [Thread-14337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:44:06.032 [INFO] [Thread-14337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:44:06.039 [DEBUG] [Thread-14337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:44:06.040 [DEBUG] [Thread-14337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:44:06.040 [DEBUG] [Thread-14337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:44:06.040 [DEBUG] [Thread-14337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:44:06.040 [DEBUG] [Thread-14337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:44:06.040 [DEBUG] [Thread-14337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:44:06.040 [DEBUG] [Thread-14337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:44:06.040 [DEBUG] [Thread-14337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:44:06.040 [DEBUG] [Thread-14337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:44:06.040 [DEBUG] [Thread-14337] [transport.py] [_log()] client lang: <none>
2025-11-26T07:44:06.041 [DEBUG] [Thread-14337] [transport.py] [_log()] server lang: <none>
2025-11-26T07:44:06.041 [DEBUG] [Thread-14337] [transport.py] [_log()] kex follows: False
2025-11-26T07:44:06.041 [DEBUG] [Thread-14337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:44:06.041 [DEBUG] [Thread-14337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:44:06.041 [DEBUG] [Thread-14337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:44:06.041 [DEBUG] [Thread-14337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:44:06.041 [DEBUG] [Thread-14337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:44:06.042 [DEBUG] [Thread-14337] [transport.py] [_log()] Compression: none
2025-11-26T07:44:06.042 [DEBUG] [Thread-14337] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:44:06.103 [DEBUG] [Thread-14337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:44:06.104 [DEBUG] [Thread-14337] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:44:06.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:44:06.105 [DEBUG] [Thread-14337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:44:06.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:44:06.162 [DEBUG] [Thread-14337] [transport.py] [_log()] userauth is OK
2025-11-26T07:44:06.163 [DEBUG] [Thread-14337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:44:06.163 [DEBUG] [Thread-14337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:44:06.163 [DEBUG] [Thread-14337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:44:06.163 [DEBUG] [Thread-14337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:44:06.185 [INFO] [Thread-14337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:44:06.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:44:06.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:44:07.023 [DEBUG] [Thread-14337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:44:07.023 [DEBUG] [Thread-14337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:44:07.072 [DEBUG] [Thread-14337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:44:07.072 [DEBUG] [Thread-14337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:44:07.081 [DEBUG] [Thread-14337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:44:07.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:44:07.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:44:07.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:44:07.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:44:07.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:44:07.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:44:07.117 [DEBUG] [Thread-14337] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:44:20.899 [DEBUG] [Thread-14339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:44:35.948 [DEBUG] [Thread-14340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:44:37.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:44:37.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:44:37.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:44:37.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 44, 17), 29.89, 12.88, 0.0, 18.97, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:44:37.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:44:17
2025-11-26T07:44:37.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:44:38.053 [DEBUG] [Thread-14341] [transport.py] [_log()] starting thread (client mode): 0x70d03220
2025-11-26T07:44:38.053 [DEBUG] [Thread-14341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:44:38.073 [DEBUG] [Thread-14341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:44:38.073 [INFO] [Thread-14341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:44:38.076 [DEBUG] [Thread-14341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:44:38.076 [DEBUG] [Thread-14341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:44:38.076 [DEBUG] [Thread-14341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:44:38.076 [DEBUG] [Thread-14341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:44:38.076 [DEBUG] [Thread-14341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:44:38.076 [DEBUG] [Thread-14341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:44:38.076 [DEBUG] [Thread-14341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:44:38.076 [DEBUG] [Thread-14341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:44:38.076 [DEBUG] [Thread-14341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] client lang: <none>
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] server lang: <none>
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] kex follows: False
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] Compression: none
2025-11-26T07:44:38.077 [DEBUG] [Thread-14341] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:44:38.094 [DEBUG] [Thread-14341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:44:38.095 [DEBUG] [Thread-14341] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:44:38.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:44:38.095 [DEBUG] [Thread-14341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:44:38.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:44:38.097 [DEBUG] [Thread-14341] [transport.py] [_log()] userauth is OK
2025-11-26T07:44:38.097 [DEBUG] [Thread-14341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:44:38.098 [DEBUG] [Thread-14341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:44:38.098 [DEBUG] [Thread-14341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:44:38.098 [DEBUG] [Thread-14341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:44:38.121 [INFO] [Thread-14341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:44:38.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:44:38.703 [DEBUG] [Thread-14341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:44:38.703 [DEBUG] [Thread-14341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:44:38.704 [DEBUG] [Thread-14341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:44:38.744 [DEBUG] [Thread-14341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:44:38.745 [DEBUG] [Thread-14341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:44:38.747 [DEBUG] [Thread-14341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:44:38.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:44:38.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:44:38.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:44:38.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:44:38.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:44:38.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:44:38.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:44:38.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:44:38.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:44:38.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.238982 -999.00  +22.50  26.65     18   -2.20 1 1 1 1 1   887    0 24.67 -18.76 ----- 23.6 26.6 43.4 28.8 26.6 -28.2 26.2 -27.3 24.6 -26.5 25.0 -26.2
2025-11-26T07:44:38.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:44:38.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:44:38.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.238982
2025-11-26T07:44:38.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:44:38.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:44:38.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:44:38.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:44:38.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:44:38.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:44:17', tmtdew=29.89, humidity=12.88, cloud=0.0, wind=18.97, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:44:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:44:38.776 [DEBUG] [Thread-14341] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:44:38.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:44:38.871 [DEBUG] [Thread-14344] [transport.py] [_log()] starting thread (client mode): 0x70d02f80
2025-11-26T07:44:38.871 [DEBUG] [Thread-14344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:44:38.885 [DEBUG] [Thread-14344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:44:38.885 [INFO] [Thread-14344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] client lang: <none>
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] server lang: <none>
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] kex follows: False
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:44:38.893 [DEBUG] [Thread-14344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:44:38.894 [DEBUG] [Thread-14344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:44:38.894 [DEBUG] [Thread-14344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:44:38.894 [DEBUG] [Thread-14344] [transport.py] [_log()] Compression: none
2025-11-26T07:44:38.894 [DEBUG] [Thread-14344] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:44:38.951 [DEBUG] [Thread-14344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:44:38.951 [DEBUG] [Thread-14344] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:44:38.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:44:38.953 [DEBUG] [Thread-14344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:44:38.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:44:39.007 [DEBUG] [Thread-14344] [transport.py] [_log()] userauth is OK
2025-11-26T07:44:39.007 [DEBUG] [Thread-14344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:44:39.007 [DEBUG] [Thread-14344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:44:39.007 [DEBUG] [Thread-14344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:44:39.007 [DEBUG] [Thread-14344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:44:39.026 [INFO] [Thread-14344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:44:39.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:44:39.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:44:39.625 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:44:39.626 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:44:39.889 [DEBUG] [Thread-14344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:44:39.889 [DEBUG] [Thread-14344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:44:39.937 [DEBUG] [Thread-14344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:44:39.937 [DEBUG] [Thread-14344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:44:39.946 [DEBUG] [Thread-14344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:44:39.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:44:39.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:44:39.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:44:39.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:44:39.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:44:39.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:44:39.982 [DEBUG] [Thread-14344] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:44:41.040 [DEBUG] [Thread-14346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:44:50.984 [DEBUG] [Thread-14347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:45:06.023 [DEBUG] [Thread-14348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:45:09.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:45:09.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:45:09.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:45:10.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 44, 49), 30.15, 13.01, 0.0, 18.9, 22.99, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:45:10.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:44:49
2025-11-26T07:45:10.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:45:10.910 [DEBUG] [Thread-14349] [transport.py] [_log()] starting thread (client mode): 0x70d01b70
2025-11-26T07:45:10.910 [DEBUG] [Thread-14349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:45:10.922 [DEBUG] [Thread-14349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:45:10.922 [INFO] [Thread-14349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] client lang: <none>
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] server lang: <none>
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] kex follows: False
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:45:10.923 [DEBUG] [Thread-14349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:45:10.924 [DEBUG] [Thread-14349] [transport.py] [_log()] Compression: none
2025-11-26T07:45:10.924 [DEBUG] [Thread-14349] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:45:10.933 [DEBUG] [Thread-14349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:45:10.934 [DEBUG] [Thread-14349] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:45:10.934 [DEBUG] [Thread-14349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:45:10.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:45:10.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:45:10.936 [DEBUG] [Thread-14349] [transport.py] [_log()] userauth is OK
2025-11-26T07:45:10.936 [DEBUG] [Thread-14349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:45:10.936 [DEBUG] [Thread-14349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:45:10.937 [DEBUG] [Thread-14349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:45:10.937 [DEBUG] [Thread-14349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:45:10.961 [INFO] [Thread-14349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:45:10.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:45:14.983 [DEBUG] [Thread-14349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:45:14.983 [DEBUG] [Thread-14349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:45:14.993 [DEBUG] [Thread-14349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:45:15.025 [DEBUG] [Thread-14349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:45:15.025 [DEBUG] [Thread-14349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:45:15.029 [DEBUG] [Thread-14349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:45:15.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:45:15.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:45:15.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:45:15.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:45:15.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:45:15.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:45:15.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:45:15.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:45:15.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:45:15.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.239676 -999.00  +22.20  24.90     19   -2.40 1 1 1 1 1   887    0 24.35 -20.33 ----- 24.6 24.9 42.8 32.1 26.5 -27.8 26.0 -26.8 24.5 -25.9 24.8 -26.2
2025-11-26T07:45:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:45:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:45:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.239676
2025-11-26T07:45:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:45:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:45:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:45:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:45:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:45:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:44:49', tmtdew=30.15, humidity=13.01, cloud=0.0, wind=18.9, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:45:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:45:15.055 [DEBUG] [Thread-14349] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:45:15.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:45:15.150 [DEBUG] [Thread-14352] [transport.py] [_log()] starting thread (client mode): 0x7376ca60
2025-11-26T07:45:15.150 [DEBUG] [Thread-14352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:45:15.169 [DEBUG] [Thread-14352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:45:15.169 [INFO] [Thread-14352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:45:15.177 [DEBUG] [Thread-14352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:45:15.177 [DEBUG] [Thread-14352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:45:15.177 [DEBUG] [Thread-14352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:45:15.177 [DEBUG] [Thread-14352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:45:15.178 [DEBUG] [Thread-14352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:45:15.178 [DEBUG] [Thread-14352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:45:15.178 [DEBUG] [Thread-14352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:45:15.178 [DEBUG] [Thread-14352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:45:15.178 [DEBUG] [Thread-14352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:45:15.178 [DEBUG] [Thread-14352] [transport.py] [_log()] client lang: <none>
2025-11-26T07:45:15.178 [DEBUG] [Thread-14352] [transport.py] [_log()] server lang: <none>
2025-11-26T07:45:15.178 [DEBUG] [Thread-14352] [transport.py] [_log()] kex follows: False
2025-11-26T07:45:15.178 [DEBUG] [Thread-14352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:45:15.179 [DEBUG] [Thread-14352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:45:15.179 [DEBUG] [Thread-14352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:45:15.179 [DEBUG] [Thread-14352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:45:15.179 [DEBUG] [Thread-14352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:45:15.179 [DEBUG] [Thread-14352] [transport.py] [_log()] Compression: none
2025-11-26T07:45:15.179 [DEBUG] [Thread-14352] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:45:15.234 [DEBUG] [Thread-14352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:45:15.235 [DEBUG] [Thread-14352] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:45:15.236 [DEBUG] [Thread-14352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:45:15.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:45:15.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:45:15.291 [DEBUG] [Thread-14352] [transport.py] [_log()] userauth is OK
2025-11-26T07:45:15.291 [DEBUG] [Thread-14352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:45:15.292 [DEBUG] [Thread-14352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:45:15.292 [DEBUG] [Thread-14352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:45:15.292 [DEBUG] [Thread-14352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:45:15.314 [INFO] [Thread-14352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:45:15.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:45:15.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:45:16.127 [DEBUG] [Thread-14352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:45:16.127 [DEBUG] [Thread-14352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:45:16.174 [DEBUG] [Thread-14352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:45:16.174 [DEBUG] [Thread-14352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:45:16.183 [DEBUG] [Thread-14352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:45:16.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:45:16.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:45:16.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:45:16.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:45:16.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:45:16.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:45:16.217 [DEBUG] [Thread-14352] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:45:21.062 [DEBUG] [Thread-14354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:45:36.110 [DEBUG] [Thread-14355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:45:39.765 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:45:39.766 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:45:41.089 [DEBUG] [Thread-14356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:45:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:45:46.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:45:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:45:46.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 45, 21), 29.98, 13.18, 0.0, 20.1, 23.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:45:46.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:45:21
2025-11-26T07:45:47.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:45:47.157 [DEBUG] [Thread-14357] [transport.py] [_log()] starting thread (client mode): 0x761dbdf0
2025-11-26T07:45:47.157 [DEBUG] [Thread-14357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:45:47.177 [DEBUG] [Thread-14357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:45:47.177 [INFO] [Thread-14357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:45:47.180 [DEBUG] [Thread-14357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:45:47.180 [DEBUG] [Thread-14357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:45:47.180 [DEBUG] [Thread-14357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:45:47.180 [DEBUG] [Thread-14357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:45:47.180 [DEBUG] [Thread-14357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:45:47.180 [DEBUG] [Thread-14357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] client lang: <none>
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] server lang: <none>
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] kex follows: False
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] Compression: none
2025-11-26T07:45:47.181 [DEBUG] [Thread-14357] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:45:47.200 [DEBUG] [Thread-14357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:45:47.200 [DEBUG] [Thread-14357] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:45:47.201 [DEBUG] [Thread-14357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:45:47.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:45:47.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:45:47.202 [DEBUG] [Thread-14357] [transport.py] [_log()] userauth is OK
2025-11-26T07:45:47.203 [DEBUG] [Thread-14357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:45:47.203 [DEBUG] [Thread-14357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:45:47.203 [DEBUG] [Thread-14357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:45:47.203 [DEBUG] [Thread-14357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:45:47.238 [INFO] [Thread-14357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:45:47.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:45:47.832 [DEBUG] [Thread-14357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:45:47.833 [DEBUG] [Thread-14357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:45:47.833 [DEBUG] [Thread-14357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:45:47.874 [DEBUG] [Thread-14357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:45:47.874 [DEBUG] [Thread-14357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:45:47.877 [DEBUG] [Thread-14357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:45:47.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:45:47.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:45:47.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:45:47.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:45:47.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:45:47.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:45:47.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:45:47.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:45:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:45:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.239676 -999.00  +22.20  24.90     19   -2.40 1 1 1 1 1   887    0 24.35 -20.33 ----- 24.6 24.9 42.8 32.1 26.5 -27.8 26.0 -26.8 24.5 -25.9 24.8 -26.2
2025-11-26T07:45:47.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:45:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:45:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.239676
2025-11-26T07:45:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:45:47.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:45:47.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:45:47.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:45:47.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:45:47.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:45:21', tmtdew=29.98, humidity=13.18, cloud=0.0, wind=20.1, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:45:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:45:47.905 [DEBUG] [Thread-14357] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:45:47.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:45:48.003 [DEBUG] [Thread-14360] [transport.py] [_log()] starting thread (client mode): 0x7378c490
2025-11-26T07:45:48.003 [DEBUG] [Thread-14360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:45:48.017 [DEBUG] [Thread-14360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:45:48.017 [INFO] [Thread-14360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:45:48.025 [DEBUG] [Thread-14360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:45:48.025 [DEBUG] [Thread-14360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:45:48.025 [DEBUG] [Thread-14360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:45:48.025 [DEBUG] [Thread-14360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:45:48.025 [DEBUG] [Thread-14360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:45:48.025 [DEBUG] [Thread-14360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:45:48.025 [DEBUG] [Thread-14360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:45:48.025 [DEBUG] [Thread-14360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:45:48.025 [DEBUG] [Thread-14360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] client lang: <none>
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] server lang: <none>
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] kex follows: False
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] Compression: none
2025-11-26T07:45:48.026 [DEBUG] [Thread-14360] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:45:48.087 [DEBUG] [Thread-14360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:45:48.088 [DEBUG] [Thread-14360] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:45:48.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:45:48.089 [DEBUG] [Thread-14360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:45:48.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:45:48.151 [DEBUG] [Thread-14360] [transport.py] [_log()] userauth is OK
2025-11-26T07:45:48.151 [DEBUG] [Thread-14360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:45:48.151 [DEBUG] [Thread-14360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:45:48.152 [DEBUG] [Thread-14360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:45:48.152 [DEBUG] [Thread-14360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:45:48.170 [INFO] [Thread-14360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:45:48.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:45:48.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:45:49.089 [DEBUG] [Thread-14360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:45:49.090 [DEBUG] [Thread-14360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:45:49.138 [DEBUG] [Thread-14360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:45:49.138 [DEBUG] [Thread-14360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:45:49.147 [DEBUG] [Thread-14360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:45:49.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:45:49.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:45:49.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:45:49.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:45:49.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:45:49.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:45:49.184 [DEBUG] [Thread-14360] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:45:51.145 [DEBUG] [Thread-14362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:46:06.194 [DEBUG] [Thread-14363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:46:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:46:19.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:46:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:46:19.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 45, 53), 29.81, 13.29, 0.0, 17.36, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:46:19.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:45:53
2025-11-26T07:46:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:46:20.112 [DEBUG] [Thread-14364] [transport.py] [_log()] starting thread (client mode): 0x7378caf0
2025-11-26T07:46:20.112 [DEBUG] [Thread-14364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:46:20.121 [DEBUG] [Thread-14364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:46:20.121 [INFO] [Thread-14364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] client lang: <none>
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] server lang: <none>
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] kex follows: False
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] Compression: none
2025-11-26T07:46:20.123 [DEBUG] [Thread-14364] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:46:20.130 [DEBUG] [Thread-14364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:46:20.131 [DEBUG] [Thread-14364] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:46:20.131 [DEBUG] [Thread-14364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:46:20.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:46:20.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:46:20.132 [DEBUG] [Thread-14364] [transport.py] [_log()] userauth is OK
2025-11-26T07:46:20.132 [DEBUG] [Thread-14364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:46:20.132 [DEBUG] [Thread-14364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:46:20.132 [DEBUG] [Thread-14364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:46:20.132 [DEBUG] [Thread-14364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:46:20.144 [INFO] [Thread-14364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:46:20.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:46:20.871 [DEBUG] [Thread-14364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:46:20.871 [DEBUG] [Thread-14364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:46:20.871 [DEBUG] [Thread-14364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:46:20.912 [DEBUG] [Thread-14364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:46:20.912 [DEBUG] [Thread-14364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:46:20.916 [DEBUG] [Thread-14364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:46:20.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:46:20.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:46:20.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:46:20.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:46:20.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:46:20.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:46:20.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:46:20.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:46:20.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:46:20.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.240024 -999.00  +22.10  18.54     19   -2.50 1 1 1 1 1   887    0 24.79 -21.95 ----- 20.1 18.5 41.4 26.9 26.4 -27.6 26.0 -26.3 24.5 -25.8 24.8 -26.3
2025-11-26T07:46:20.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:46:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:46:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.240024
2025-11-26T07:46:20.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:46:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:46:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:46:20.943 [DEBUG] [Thread-14364] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:46:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:46:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:46:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:45:53', tmtdew=29.81, humidity=13.29, cloud=0.0, wind=17.36, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:45:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:46:21.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:46:21.040 [DEBUG] [Thread-14367] [transport.py] [_log()] starting thread (client mode): 0x73780c10
2025-11-26T07:46:21.041 [DEBUG] [Thread-14367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:46:21.055 [DEBUG] [Thread-14367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:46:21.056 [INFO] [Thread-14367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:46:21.063 [DEBUG] [Thread-14367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:46:21.063 [DEBUG] [Thread-14367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:46:21.063 [DEBUG] [Thread-14367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] client lang: <none>
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] server lang: <none>
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] kex follows: False
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] Compression: none
2025-11-26T07:46:21.064 [DEBUG] [Thread-14367] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:46:21.122 [DEBUG] [Thread-14367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:46:21.123 [DEBUG] [Thread-14367] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:46:21.123 [DEBUG] [Thread-14367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:46:21.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:46:21.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:46:21.178 [DEBUG] [Thread-14367] [transport.py] [_log()] userauth is OK
2025-11-26T07:46:21.178 [DEBUG] [Thread-14367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:46:21.179 [DEBUG] [Thread-14367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:46:21.179 [DEBUG] [Thread-14367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:46:21.179 [DEBUG] [Thread-14367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:46:21.198 [INFO] [Thread-14367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:46:21.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:46:21.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:46:21.224 [DEBUG] [Thread-14369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:46:22.013 [DEBUG] [Thread-14367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:46:22.014 [DEBUG] [Thread-14367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:46:22.061 [DEBUG] [Thread-14367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:46:22.062 [DEBUG] [Thread-14367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:46:22.071 [DEBUG] [Thread-14367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:46:22.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:46:22.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:46:22.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
2025-11-26T07:46:22.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:46:22.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:46:22.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:46:22.111 [DEBUG] [Thread-14367] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:46:36.277 [DEBUG] [Thread-14370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:46:39.907 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:46:39.908 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:46:41.122 [DEBUG] [Thread-14371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:46:51.312 [DEBUG] [Thread-14372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:46:52.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:46:52.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:46:52.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:46:52.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 46, 25), 29.7, 13.41, 0.0, 19.87, 22.91, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:46:52.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:46:25
2025-11-26T07:46:52.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:46:53.109 [DEBUG] [Thread-14373] [transport.py] [_log()] starting thread (client mode): 0x7378e290
2025-11-26T07:46:53.109 [DEBUG] [Thread-14373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:46:53.128 [DEBUG] [Thread-14373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:46:53.128 [INFO] [Thread-14373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:46:53.130 [DEBUG] [Thread-14373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] client lang: <none>
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] server lang: <none>
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] kex follows: False
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] Compression: none
2025-11-26T07:46:53.131 [DEBUG] [Thread-14373] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:46:53.140 [DEBUG] [Thread-14373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:46:53.140 [DEBUG] [Thread-14373] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:46:53.140 [DEBUG] [Thread-14373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:46:53.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:46:53.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:46:53.141 [DEBUG] [Thread-14373] [transport.py] [_log()] userauth is OK
2025-11-26T07:46:53.141 [DEBUG] [Thread-14373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:46:53.141 [DEBUG] [Thread-14373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:46:53.141 [DEBUG] [Thread-14373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:46:53.141 [DEBUG] [Thread-14373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:46:53.151 [INFO] [Thread-14373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:46:53.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:46:53.803 [DEBUG] [Thread-14373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:46:53.803 [DEBUG] [Thread-14373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:46:53.803 [DEBUG] [Thread-14373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:46:53.844 [DEBUG] [Thread-14373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:46:53.844 [DEBUG] [Thread-14373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:46:53.846 [DEBUG] [Thread-14373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:46:53.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:46:53.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:46:53.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:46:53.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:46:53.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:46:53.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:46:53.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.240371 -999.00  +22.20  16.14     18   -2.50 1 1 1 1 1   887    0 24.33 -22.48 ----- 18.8 16.1 52.3 23.3 26.6 -27.0 26.1 -26.6 24.5 -25.6 24.8 -26.1
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.240371
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:46:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:46:25', tmtdew=29.7, humidity=13.41, cloud=0.0, wind=19.87, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:46:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:46:53.864 [DEBUG] [Thread-14373] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:46:53.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:46:53.951 [DEBUG] [Thread-14376] [transport.py] [_log()] starting thread (client mode): 0x7378f430
2025-11-26T07:46:53.952 [DEBUG] [Thread-14376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:46:53.966 [DEBUG] [Thread-14376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:46:53.966 [INFO] [Thread-14376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:46:53.973 [DEBUG] [Thread-14376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] client lang: <none>
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] server lang: <none>
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] kex follows: False
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] Compression: none
2025-11-26T07:46:53.974 [DEBUG] [Thread-14376] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:46:54.028 [DEBUG] [Thread-14376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:46:54.028 [DEBUG] [Thread-14376] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:46:54.029 [DEBUG] [Thread-14376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:46:54.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:46:54.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:46:54.085 [DEBUG] [Thread-14376] [transport.py] [_log()] userauth is OK
2025-11-26T07:46:54.086 [DEBUG] [Thread-14376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:46:54.086 [DEBUG] [Thread-14376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:46:54.086 [DEBUG] [Thread-14376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:46:54.086 [DEBUG] [Thread-14376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:46:54.099 [INFO] [Thread-14376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:46:54.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:46:54.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:46:54.952 [DEBUG] [Thread-14376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:46:54.953 [DEBUG] [Thread-14376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:46:55.000 [DEBUG] [Thread-14376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:46:55.000 [DEBUG] [Thread-14376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:46:55.008 [DEBUG] [Thread-14376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:46:55.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:46:55.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:46:55.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:46:55.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:46:55.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:46:55.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:46:55.041 [DEBUG] [Thread-14376] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:47:06.342 [DEBUG] [Thread-14378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:47:21.405 [DEBUG] [Thread-14379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:47:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:47:25.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:47:25.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:47:25.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 46, 57), 29.97, 13.19, 0.0, 17.63, 22.97, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:47:25.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:46:57
2025-11-26T07:47:25.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:47:25.997 [DEBUG] [Thread-14380] [transport.py] [_log()] starting thread (client mode): 0x7378d0c0
2025-11-26T07:47:25.997 [DEBUG] [Thread-14380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:47:26.017 [DEBUG] [Thread-14380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:47:26.017 [INFO] [Thread-14380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:47:26.018 [DEBUG] [Thread-14380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] client lang: <none>
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] server lang: <none>
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] kex follows: False
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] Compression: none
2025-11-26T07:47:26.019 [DEBUG] [Thread-14380] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:47:26.038 [DEBUG] [Thread-14380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:47:26.038 [DEBUG] [Thread-14380] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:47:26.038 [DEBUG] [Thread-14380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:47:26.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:47:26.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:47:26.040 [DEBUG] [Thread-14380] [transport.py] [_log()] userauth is OK
2025-11-26T07:47:26.041 [DEBUG] [Thread-14380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:47:26.041 [DEBUG] [Thread-14380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:47:26.041 [DEBUG] [Thread-14380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:47:26.041 [DEBUG] [Thread-14380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:47:26.058 [INFO] [Thread-14380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:47:26.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:47:26.780 [DEBUG] [Thread-14380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:47:26.781 [DEBUG] [Thread-14380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:47:26.781 [DEBUG] [Thread-14380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:47:26.821 [DEBUG] [Thread-14380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:47:26.821 [DEBUG] [Thread-14380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:47:26.823 [DEBUG] [Thread-14380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:47:26.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:47:26.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:47:26.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:47:26.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:47:26.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:47:26.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:47:26.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:47:26.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.240718 -999.00  +22.40  17.06     18   -2.40 1 1 1 1 1   887    0 24.11 -25.66 ----- 17.7 17.1 51.4 20.9 26.6 -26.7 26.2 -26.5 24.6 -25.9 24.9 -25.9
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.240718
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:47:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:46:57', tmtdew=29.97, humidity=13.19, cloud=0.0, wind=17.63, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:46:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:47:26.843 [DEBUG] [Thread-14380] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:47:26.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:47:26.929 [DEBUG] [Thread-14383] [transport.py] [_log()] starting thread (client mode): 0x7378c4c0
2025-11-26T07:47:26.929 [DEBUG] [Thread-14383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:47:26.943 [DEBUG] [Thread-14383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:47:26.944 [INFO] [Thread-14383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:47:26.953 [DEBUG] [Thread-14383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:47:26.953 [DEBUG] [Thread-14383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:47:26.953 [DEBUG] [Thread-14383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:47:26.953 [DEBUG] [Thread-14383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:47:26.953 [DEBUG] [Thread-14383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:47:26.954 [DEBUG] [Thread-14383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:47:26.954 [DEBUG] [Thread-14383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:47:26.954 [DEBUG] [Thread-14383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:47:26.954 [DEBUG] [Thread-14383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:47:26.954 [DEBUG] [Thread-14383] [transport.py] [_log()] client lang: <none>
2025-11-26T07:47:26.954 [DEBUG] [Thread-14383] [transport.py] [_log()] server lang: <none>
2025-11-26T07:47:26.954 [DEBUG] [Thread-14383] [transport.py] [_log()] kex follows: False
2025-11-26T07:47:26.954 [DEBUG] [Thread-14383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:47:26.954 [DEBUG] [Thread-14383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:47:26.955 [DEBUG] [Thread-14383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:47:26.955 [DEBUG] [Thread-14383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:47:26.955 [DEBUG] [Thread-14383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:47:26.955 [DEBUG] [Thread-14383] [transport.py] [_log()] Compression: none
2025-11-26T07:47:26.955 [DEBUG] [Thread-14383] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:47:27.010 [DEBUG] [Thread-14383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:47:27.011 [DEBUG] [Thread-14383] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:47:27.012 [DEBUG] [Thread-14383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:47:27.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:47:27.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:47:27.066 [DEBUG] [Thread-14383] [transport.py] [_log()] userauth is OK
2025-11-26T07:47:27.066 [DEBUG] [Thread-14383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:47:27.067 [DEBUG] [Thread-14383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:47:27.067 [DEBUG] [Thread-14383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:47:27.067 [DEBUG] [Thread-14383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:47:27.086 [INFO] [Thread-14383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:47:27.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:47:27.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:47:27.919 [DEBUG] [Thread-14383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:47:27.919 [DEBUG] [Thread-14383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:47:27.967 [DEBUG] [Thread-14383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:47:27.967 [DEBUG] [Thread-14383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:47:27.975 [DEBUG] [Thread-14383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:47:27.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:47:27.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:47:27.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:47:27.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:47:27.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:47:27.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:47:28.007 [DEBUG] [Thread-14383] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:47:36.435 [DEBUG] [Thread-14385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:47:40.051 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:47:40.052 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:47:41.174 [DEBUG] [Thread-14386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:47:51.502 [DEBUG] [Thread-14387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:47:58.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:47:58.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:47:58.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:47:58.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 47, 29), 30.35, 12.86, 0.0, 16.29, 23.04, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:47:58.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:47:29
2025-11-26T07:47:58.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:47:58.968 [DEBUG] [Thread-14388] [transport.py] [_log()] starting thread (client mode): 0x70d1f760
2025-11-26T07:47:58.968 [DEBUG] [Thread-14388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:47:58.988 [DEBUG] [Thread-14388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:47:58.989 [INFO] [Thread-14388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] client lang: <none>
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] server lang: <none>
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] kex follows: False
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:47:58.991 [DEBUG] [Thread-14388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:47:58.992 [DEBUG] [Thread-14388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:47:58.992 [DEBUG] [Thread-14388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:47:58.992 [DEBUG] [Thread-14388] [transport.py] [_log()] Compression: none
2025-11-26T07:47:58.992 [DEBUG] [Thread-14388] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:47:59.005 [DEBUG] [Thread-14388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:47:59.006 [DEBUG] [Thread-14388] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:47:59.006 [DEBUG] [Thread-14388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:47:59.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:47:59.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:47:59.009 [DEBUG] [Thread-14388] [transport.py] [_log()] userauth is OK
2025-11-26T07:47:59.009 [DEBUG] [Thread-14388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:47:59.009 [DEBUG] [Thread-14388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:47:59.009 [DEBUG] [Thread-14388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:47:59.009 [DEBUG] [Thread-14388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:47:59.035 [INFO] [Thread-14388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:47:59.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:47:59.690 [DEBUG] [Thread-14388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:47:59.690 [DEBUG] [Thread-14388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:47:59.691 [DEBUG] [Thread-14388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:47:59.732 [DEBUG] [Thread-14388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:47:59.732 [DEBUG] [Thread-14388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:47:59.735 [DEBUG] [Thread-14388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:47:59.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:47:59.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:47:59.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:47:59.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:47:59.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:47:59.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:47:59.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:47:59.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:47:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:47:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.241065 -999.00  +22.50  19.11     18   -2.30 1 1 1 1 1   887    0 23.77 -25.91 ----- 23.5 19.1 44.8 21.9 26.6 -27.1 26.2 -26.1 24.6 -24.9 25.0 -25.9
2025-11-26T07:47:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:47:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:47:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.241065
2025-11-26T07:47:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:47:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:47:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:47:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:47:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:47:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:47:29', tmtdew=30.35, humidity=12.86, cloud=0.0, wind=16.29, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:47:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:47:59.762 [DEBUG] [Thread-14388] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:47:59.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:47:59.857 [DEBUG] [Thread-14391] [transport.py] [_log()] starting thread (client mode): 0x73782cb0
2025-11-26T07:47:59.857 [DEBUG] [Thread-14391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:47:59.873 [DEBUG] [Thread-14391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:47:59.873 [INFO] [Thread-14391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:47:59.881 [DEBUG] [Thread-14391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:47:59.881 [DEBUG] [Thread-14391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:47:59.881 [DEBUG] [Thread-14391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:47:59.881 [DEBUG] [Thread-14391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:47:59.881 [DEBUG] [Thread-14391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:47:59.882 [DEBUG] [Thread-14391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:47:59.882 [DEBUG] [Thread-14391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:47:59.882 [DEBUG] [Thread-14391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:47:59.882 [DEBUG] [Thread-14391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:47:59.882 [DEBUG] [Thread-14391] [transport.py] [_log()] client lang: <none>
2025-11-26T07:47:59.882 [DEBUG] [Thread-14391] [transport.py] [_log()] server lang: <none>
2025-11-26T07:47:59.882 [DEBUG] [Thread-14391] [transport.py] [_log()] kex follows: False
2025-11-26T07:47:59.882 [DEBUG] [Thread-14391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:47:59.882 [DEBUG] [Thread-14391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:47:59.883 [DEBUG] [Thread-14391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:47:59.883 [DEBUG] [Thread-14391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:47:59.883 [DEBUG] [Thread-14391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:47:59.883 [DEBUG] [Thread-14391] [transport.py] [_log()] Compression: none
2025-11-26T07:47:59.883 [DEBUG] [Thread-14391] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:47:59.938 [DEBUG] [Thread-14391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:47:59.939 [DEBUG] [Thread-14391] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:47:59.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:47:59.940 [DEBUG] [Thread-14391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:47:59.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:47:59.998 [DEBUG] [Thread-14391] [transport.py] [_log()] userauth is OK
2025-11-26T07:47:59.999 [DEBUG] [Thread-14391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:47:59.999 [DEBUG] [Thread-14391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:47:59.999 [DEBUG] [Thread-14391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:47:59.999 [DEBUG] [Thread-14391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:48:00.018 [INFO] [Thread-14391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:48:00.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:48:00.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:48:00.849 [DEBUG] [Thread-14391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:48:00.849 [DEBUG] [Thread-14391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:48:00.897 [DEBUG] [Thread-14391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:48:00.897 [DEBUG] [Thread-14391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:48:00.906 [DEBUG] [Thread-14391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:48:00.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:48:00.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:48:00.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:48:00.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:48:00.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:48:00.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:48:00.943 [DEBUG] [Thread-14391] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:48:06.535 [DEBUG] [Thread-14393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:48:21.573 [DEBUG] [Thread-14394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:48:30.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:48:30.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:48:30.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:48:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 48, 1), 30.48, 12.75, 0.0, 14.65, 23.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:48:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:48:01
2025-11-26T07:48:31.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:48:31.872 [DEBUG] [Thread-14395] [transport.py] [_log()] starting thread (client mode): 0x70d1ca60
2025-11-26T07:48:31.872 [DEBUG] [Thread-14395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:48:31.893 [DEBUG] [Thread-14395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:48:31.893 [INFO] [Thread-14395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] client lang: <none>
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] server lang: <none>
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] kex follows: False
2025-11-26T07:48:31.896 [DEBUG] [Thread-14395] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:48:31.897 [DEBUG] [Thread-14395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:48:31.897 [DEBUG] [Thread-14395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:48:31.897 [DEBUG] [Thread-14395] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:48:31.897 [DEBUG] [Thread-14395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:48:31.897 [DEBUG] [Thread-14395] [transport.py] [_log()] Compression: none
2025-11-26T07:48:31.897 [DEBUG] [Thread-14395] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:48:31.913 [DEBUG] [Thread-14395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:48:31.913 [DEBUG] [Thread-14395] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:48:31.914 [DEBUG] [Thread-14395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:48:31.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:48:31.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:48:31.916 [DEBUG] [Thread-14395] [transport.py] [_log()] userauth is OK
2025-11-26T07:48:31.916 [DEBUG] [Thread-14395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:48:31.916 [DEBUG] [Thread-14395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:48:31.916 [DEBUG] [Thread-14395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:48:31.916 [DEBUG] [Thread-14395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:48:31.934 [INFO] [Thread-14395] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:48:31.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:48:32.674 [DEBUG] [Thread-14395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:48:32.674 [DEBUG] [Thread-14395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:48:32.674 [DEBUG] [Thread-14395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:48:32.715 [DEBUG] [Thread-14395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:48:32.715 [DEBUG] [Thread-14395] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:48:32.718 [DEBUG] [Thread-14395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:48:32.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:48:32.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:48:32.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:48:32.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:48:32.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:48:32.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:48:32.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:48:32.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:48:32.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:48:32.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.241413 -999.00  +22.60  20.69     18   -2.40 1 1 1 1 1   887    0 24.37 -26.08 ----- 20.7 20.7 26.4 23.3 26.7 -26.9 26.2 -26.6 24.7 -25.2 25.0 -25.9
2025-11-26T07:48:32.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:48:32.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:48:32.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.241413
2025-11-26T07:48:32.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:48:32.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:48:32.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:48:32.745 [DEBUG] [Thread-14395] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:48:32.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:48:32.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:48:32.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:48:01', tmtdew=30.48, humidity=12.75, cloud=0.0, wind=14.65, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:47:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:48:32.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:48:32.841 [DEBUG] [Thread-14398] [transport.py] [_log()] starting thread (client mode): 0x70d03130
2025-11-26T07:48:32.841 [DEBUG] [Thread-14398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:48:32.856 [DEBUG] [Thread-14398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:48:32.856 [INFO] [Thread-14398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:48:32.864 [DEBUG] [Thread-14398] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:48:32.864 [DEBUG] [Thread-14398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:48:32.864 [DEBUG] [Thread-14398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:48:32.864 [DEBUG] [Thread-14398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:48:32.864 [DEBUG] [Thread-14398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:48:32.864 [DEBUG] [Thread-14398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:48:32.865 [DEBUG] [Thread-14398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:48:32.865 [DEBUG] [Thread-14398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:48:32.865 [DEBUG] [Thread-14398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:48:32.865 [DEBUG] [Thread-14398] [transport.py] [_log()] client lang: <none>
2025-11-26T07:48:32.865 [DEBUG] [Thread-14398] [transport.py] [_log()] server lang: <none>
2025-11-26T07:48:32.865 [DEBUG] [Thread-14398] [transport.py] [_log()] kex follows: False
2025-11-26T07:48:32.865 [DEBUG] [Thread-14398] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:48:32.865 [DEBUG] [Thread-14398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:48:32.866 [DEBUG] [Thread-14398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:48:32.866 [DEBUG] [Thread-14398] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:48:32.866 [DEBUG] [Thread-14398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:48:32.866 [DEBUG] [Thread-14398] [transport.py] [_log()] Compression: none
2025-11-26T07:48:32.866 [DEBUG] [Thread-14398] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:48:32.920 [DEBUG] [Thread-14398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:48:32.920 [DEBUG] [Thread-14398] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:48:32.921 [DEBUG] [Thread-14398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:48:32.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:48:32.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:48:32.978 [DEBUG] [Thread-14398] [transport.py] [_log()] userauth is OK
2025-11-26T07:48:32.978 [DEBUG] [Thread-14398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:48:32.978 [DEBUG] [Thread-14398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:48:32.978 [DEBUG] [Thread-14398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:48:32.979 [DEBUG] [Thread-14398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:48:33.003 [INFO] [Thread-14398] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:48:33.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:48:33.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:48:33.828 [DEBUG] [Thread-14398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:48:33.828 [DEBUG] [Thread-14398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:48:33.877 [DEBUG] [Thread-14398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:48:33.877 [DEBUG] [Thread-14398] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:48:33.887 [DEBUG] [Thread-14398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:48:33.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:48:33.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:48:33.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:48:33.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:48:33.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:48:33.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:48:33.926 [DEBUG] [Thread-14398] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:48:36.610 [DEBUG] [Thread-14400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:48:40.202 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:48:40.203 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:48:41.226 [DEBUG] [Thread-14401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:48:51.658 [DEBUG] [Thread-14402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:49:03.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:49:03.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:49:03.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:49:04.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 48, 33), 31.6, 11.53, 0.0, 19.44, 23.71, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:49:04.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:48:33
2025-11-26T07:49:04.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:49:04.881 [DEBUG] [Thread-14403] [transport.py] [_log()] starting thread (client mode): 0x70d007c0
2025-11-26T07:49:04.881 [DEBUG] [Thread-14403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:49:04.901 [DEBUG] [Thread-14403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:49:04.901 [INFO] [Thread-14403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:49:04.904 [DEBUG] [Thread-14403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] client lang: <none>
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] server lang: <none>
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] kex follows: False
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] Compression: none
2025-11-26T07:49:04.905 [DEBUG] [Thread-14403] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:49:04.922 [DEBUG] [Thread-14403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:49:04.922 [DEBUG] [Thread-14403] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:49:04.923 [DEBUG] [Thread-14403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:49:04.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:49:04.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:49:04.925 [DEBUG] [Thread-14403] [transport.py] [_log()] userauth is OK
2025-11-26T07:49:04.925 [DEBUG] [Thread-14403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:49:04.925 [DEBUG] [Thread-14403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:49:04.925 [DEBUG] [Thread-14403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:49:04.925 [DEBUG] [Thread-14403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:49:04.961 [INFO] [Thread-14403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:49:04.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:49:05.595 [DEBUG] [Thread-14403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:49:05.596 [DEBUG] [Thread-14403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:49:05.596 [DEBUG] [Thread-14403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:49:05.637 [DEBUG] [Thread-14403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:49:05.637 [DEBUG] [Thread-14403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:49:05.640 [DEBUG] [Thread-14403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:49:05.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:49:05.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:49:05.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:49:05.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:49:05.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:49:05.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:49:05.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:49:05.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:49:05.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:49:05.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.241760 -999.00  +22.50  19.94     17   -3.00 1 1 1 1 1   887    0 24.40 -23.18 ----- 19.1 19.9 52.8 23.5 26.7 -27.0 26.2 -27.3 24.7 -26.6 25.0 -26.3
2025-11-26T07:49:05.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:49:05.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:49:05.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.241760
2025-11-26T07:49:05.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:49:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:49:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:49:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:49:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:49:05.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:48:33', tmtdew=31.6, humidity=11.53, cloud=0.0, wind=19.44, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:48:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:49:05.668 [DEBUG] [Thread-14403] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:49:05.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:49:05.765 [DEBUG] [Thread-14406] [transport.py] [_log()] starting thread (client mode): 0x7378d300
2025-11-26T07:49:05.765 [DEBUG] [Thread-14406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:49:05.779 [DEBUG] [Thread-14406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:49:05.779 [INFO] [Thread-14406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:49:05.787 [DEBUG] [Thread-14406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:49:05.787 [DEBUG] [Thread-14406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:49:05.787 [DEBUG] [Thread-14406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:49:05.787 [DEBUG] [Thread-14406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:49:05.787 [DEBUG] [Thread-14406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:49:05.787 [DEBUG] [Thread-14406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:49:05.787 [DEBUG] [Thread-14406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] client lang: <none>
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] server lang: <none>
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] kex follows: False
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] Compression: none
2025-11-26T07:49:05.788 [DEBUG] [Thread-14406] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:49:05.846 [DEBUG] [Thread-14406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:49:05.846 [DEBUG] [Thread-14406] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:49:05.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:49:05.847 [DEBUG] [Thread-14406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:49:05.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:49:05.902 [DEBUG] [Thread-14406] [transport.py] [_log()] userauth is OK
2025-11-26T07:49:05.902 [DEBUG] [Thread-14406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:49:05.902 [DEBUG] [Thread-14406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:49:05.903 [DEBUG] [Thread-14406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:49:05.903 [DEBUG] [Thread-14406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:49:05.921 [INFO] [Thread-14406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:49:05.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:49:05.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:49:06.693 [DEBUG] [Thread-14408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:49:06.780 [DEBUG] [Thread-14406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:49:06.780 [DEBUG] [Thread-14406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:49:06.828 [DEBUG] [Thread-14406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:49:06.828 [DEBUG] [Thread-14406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:49:06.837 [DEBUG] [Thread-14406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:49:06.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:49:06.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')
2025-11-26T07:49: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') -> 00000000
2025-11-26T07:49:06.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:49:06.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:49:06.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:49:06.868 [DEBUG] [Thread-14406] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:49:21.731 [DEBUG] [Thread-14409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:49:36.766 [DEBUG] [Thread-14410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:49:36.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:49:36.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:49:36.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:49:37.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 49, 5), 30.93, 12.0, 0.0, 19.46, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:49:37.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:49:05
2025-11-26T07:49:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:49:37.785 [DEBUG] [Thread-14411] [transport.py] [_log()] starting thread (client mode): 0x70d01c00
2025-11-26T07:49:37.785 [DEBUG] [Thread-14411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:49:37.800 [DEBUG] [Thread-14411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:49:37.800 [INFO] [Thread-14411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:49:37.801 [DEBUG] [Thread-14411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:49:37.801 [DEBUG] [Thread-14411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:49:37.801 [DEBUG] [Thread-14411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:49:37.801 [DEBUG] [Thread-14411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:49:37.801 [DEBUG] [Thread-14411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:49:37.801 [DEBUG] [Thread-14411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] client lang: <none>
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] server lang: <none>
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] kex follows: False
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] Compression: none
2025-11-26T07:49:37.802 [DEBUG] [Thread-14411] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:49:37.811 [DEBUG] [Thread-14411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:49:37.812 [DEBUG] [Thread-14411] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:49:37.812 [DEBUG] [Thread-14411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:49:37.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:49:37.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:49:37.814 [DEBUG] [Thread-14411] [transport.py] [_log()] userauth is OK
2025-11-26T07:49:37.814 [DEBUG] [Thread-14411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:49:37.814 [DEBUG] [Thread-14411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:49:37.814 [DEBUG] [Thread-14411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:49:37.814 [DEBUG] [Thread-14411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:49:37.828 [INFO] [Thread-14411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:49:37.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:49:38.380 [DEBUG] [Thread-14411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:49:38.381 [DEBUG] [Thread-14411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:49:38.381 [DEBUG] [Thread-14411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:49:38.421 [DEBUG] [Thread-14411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:49:38.421 [DEBUG] [Thread-14411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:49:38.423 [DEBUG] [Thread-14411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:49:38.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:49:38.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:49:38.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:49:38.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:49:38.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:49:38.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:49:38.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:49:38.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.242455 -999.00  +22.30  19.25     17   -3.20 1 1 1 1 1   887    0 24.81 -14.04 ----- 18.2 19.2 48.2 25.7 26.7 -26.8 26.2 -26.1 24.7 -25.1 25.0 -26.0
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.242455
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:49:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:49:05', tmtdew=30.93, humidity=12.0, cloud=0.0, wind=19.46, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:49:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:49:38.435 [DEBUG] [Thread-14411] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:49:38.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:49:38.522 [DEBUG] [Thread-14414] [transport.py] [_log()] starting thread (client mode): 0x70d1cfd0
2025-11-26T07:49:38.523 [DEBUG] [Thread-14414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:49:38.540 [DEBUG] [Thread-14414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:49:38.540 [INFO] [Thread-14414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] client lang: <none>
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] server lang: <none>
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] kex follows: False
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] Compression: none
2025-11-26T07:49:38.548 [DEBUG] [Thread-14414] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:49:38.604 [DEBUG] [Thread-14414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:49:38.604 [DEBUG] [Thread-14414] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:49:38.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:49:38.605 [DEBUG] [Thread-14414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:49:38.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:49:38.661 [DEBUG] [Thread-14414] [transport.py] [_log()] userauth is OK
2025-11-26T07:49:38.661 [DEBUG] [Thread-14414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:49:38.661 [DEBUG] [Thread-14414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:49:38.661 [DEBUG] [Thread-14414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:49:38.661 [DEBUG] [Thread-14414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:49:38.675 [INFO] [Thread-14414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:49:38.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:49:38.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:49:39.523 [DEBUG] [Thread-14414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:49:39.523 [DEBUG] [Thread-14414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:49:39.571 [DEBUG] [Thread-14414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:49:39.571 [DEBUG] [Thread-14414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:49:39.579 [DEBUG] [Thread-14414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:49:39.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:49:39.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:49:39.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:49:39.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:49:39.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:49:39.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:49:39.611 [DEBUG] [Thread-14414] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:49:40.341 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:49:40.342 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:49:41.279 [DEBUG] [Thread-14416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:49:51.801 [DEBUG] [Thread-14417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:50:06.853 [DEBUG] [Thread-14418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:50:09.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:50:09.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:50:09.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:50:10.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 49, 37), 30.52, 12.29, 0.0, 20.43, 23.07, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:50:10.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:49:37
2025-11-26T07:50:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:50:10.598 [DEBUG] [Thread-14419] [transport.py] [_log()] starting thread (client mode): 0x737e92d0
2025-11-26T07:50:10.599 [DEBUG] [Thread-14419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:50:10.620 [DEBUG] [Thread-14419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:50:10.620 [INFO] [Thread-14419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] client lang: <none>
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] server lang: <none>
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] kex follows: False
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] Compression: none
2025-11-26T07:50:10.624 [DEBUG] [Thread-14419] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:50:10.640 [DEBUG] [Thread-14419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:50:10.640 [DEBUG] [Thread-14419] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:50:10.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:50:10.640 [DEBUG] [Thread-14419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:50:10.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:50:10.641 [DEBUG] [Thread-14419] [transport.py] [_log()] userauth is OK
2025-11-26T07:50:10.641 [DEBUG] [Thread-14419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:50:10.641 [DEBUG] [Thread-14419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:50:10.641 [DEBUG] [Thread-14419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:50:10.641 [DEBUG] [Thread-14419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:50:10.650 [INFO] [Thread-14419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:50:10.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:50:11.756 [DEBUG] [Thread-14419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:50:11.756 [DEBUG] [Thread-14419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:50:11.756 [DEBUG] [Thread-14419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:50:11.797 [DEBUG] [Thread-14419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:50:11.797 [DEBUG] [Thread-14419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:50:11.799 [DEBUG] [Thread-14419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:50:11.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:50:11.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:50:11.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:50:11.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:50:11.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:50:11.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:50:11.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:50:11.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.242801 -999.00  +22.50  16.96     18   -2.50 1 1 1 1 1   887    0 24.80 -12.11 ----- 18.7 17.0 21.4 25.6 26.7 -26.6 26.3 -26.1 24.9 -25.3 25.1 -26.0
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.242801
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:50:11.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:49:37', tmtdew=30.52, humidity=12.29, cloud=0.0, wind=20.43, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:49:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:50:11.819 [DEBUG] [Thread-14419] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:50:11.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:50:11.908 [DEBUG] [Thread-14422] [transport.py] [_log()] starting thread (client mode): 0x737e8790
2025-11-26T07:50:11.908 [DEBUG] [Thread-14422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:50:11.923 [DEBUG] [Thread-14422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:50:11.923 [INFO] [Thread-14422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:50:11.930 [DEBUG] [Thread-14422] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:50:11.930 [DEBUG] [Thread-14422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:50:11.930 [DEBUG] [Thread-14422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] client lang: <none>
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] server lang: <none>
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] kex follows: False
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] Compression: none
2025-11-26T07:50:11.931 [DEBUG] [Thread-14422] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:50:11.987 [DEBUG] [Thread-14422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:50:11.987 [DEBUG] [Thread-14422] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:50:11.987 [DEBUG] [Thread-14422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:50:11.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:50:11.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:50:12.045 [DEBUG] [Thread-14422] [transport.py] [_log()] userauth is OK
2025-11-26T07:50:12.045 [DEBUG] [Thread-14422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:50:12.045 [DEBUG] [Thread-14422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:50:12.045 [DEBUG] [Thread-14422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:50:12.045 [DEBUG] [Thread-14422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:50:12.059 [INFO] [Thread-14422] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:50:12.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:50:12.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:50:12.904 [DEBUG] [Thread-14422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:50:12.905 [DEBUG] [Thread-14422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:50:12.952 [DEBUG] [Thread-14422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:50:12.952 [DEBUG] [Thread-14422] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:50:12.961 [DEBUG] [Thread-14422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:50:12.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:50:12.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:50:12.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:50:12.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:50:12.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:50:12.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:50:12.993 [DEBUG] [Thread-14422] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:50:21.888 [DEBUG] [Thread-14424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:50:36.932 [DEBUG] [Thread-14425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:50:40.484 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:50:40.485 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:50:41.328 [DEBUG] [Thread-14426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:50:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:50:43.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:50: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
2025-11-26T07:50:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 50, 9), 30.39, 12.43, 0.0, 19.09, 23.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:50:43.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:50:09
2025-11-26T07:50:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:50:44.009 [DEBUG] [Thread-14427] [transport.py] [_log()] starting thread (client mode): 0x737e8190
2025-11-26T07:50:44.009 [DEBUG] [Thread-14427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:50:44.029 [DEBUG] [Thread-14427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:50:44.029 [INFO] [Thread-14427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:50:44.032 [DEBUG] [Thread-14427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:50:44.032 [DEBUG] [Thread-14427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:50:44.032 [DEBUG] [Thread-14427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:50:44.032 [DEBUG] [Thread-14427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:50:44.032 [DEBUG] [Thread-14427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:50:44.032 [DEBUG] [Thread-14427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:50:44.032 [DEBUG] [Thread-14427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:50:44.032 [DEBUG] [Thread-14427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:50:44.032 [DEBUG] [Thread-14427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] client lang: <none>
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] server lang: <none>
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] kex follows: False
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] Compression: none
2025-11-26T07:50:44.033 [DEBUG] [Thread-14427] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:50:44.047 [DEBUG] [Thread-14427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:50:44.047 [DEBUG] [Thread-14427] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:50:44.047 [DEBUG] [Thread-14427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:50:44.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:50:44.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:50:44.048 [DEBUG] [Thread-14427] [transport.py] [_log()] userauth is OK
2025-11-26T07:50:44.048 [DEBUG] [Thread-14427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:50:44.048 [DEBUG] [Thread-14427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:50:44.048 [DEBUG] [Thread-14427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:50:44.048 [DEBUG] [Thread-14427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:50:44.063 [INFO] [Thread-14427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:50:44.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:50:44.784 [DEBUG] [Thread-14427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:50:44.785 [DEBUG] [Thread-14427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:50:44.785 [DEBUG] [Thread-14427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:50:44.825 [DEBUG] [Thread-14427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:50:44.826 [DEBUG] [Thread-14427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:50:44.828 [DEBUG] [Thread-14427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:50:44.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:50:44.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:50:44.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:50:44.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:50:44.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:50:44.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:50:44.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:50:44.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:50:44.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:50:44.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.243148 -999.00  +22.70  23.60     18   -2.10 1 1 1 1 1   887    0 24.63 -11.08 ----- 20.8 23.6 27.0 32.0 26.8 -28.4 26.2 -26.9 24.8 -25.5 25.1 -27.7
2025-11-26T07:50:44.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:50:44.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:50:44.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.243148
2025-11-26T07:50:44.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:50:44.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:50:44.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:50:44.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:50:44.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:50:44.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:50:09', tmtdew=30.39, humidity=12.43, cloud=0.0, wind=19.09, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:50:07.987', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:50:44.848 [DEBUG] [Thread-14427] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:50:44.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:50:44.943 [DEBUG] [Thread-14430] [transport.py] [_log()] starting thread (client mode): 0x70d03820
2025-11-26T07:50:44.943 [DEBUG] [Thread-14430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:50:44.958 [DEBUG] [Thread-14430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:50:44.958 [INFO] [Thread-14430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:50:44.965 [DEBUG] [Thread-14430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:50:44.965 [DEBUG] [Thread-14430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] client lang: <none>
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] server lang: <none>
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] kex follows: False
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] Compression: none
2025-11-26T07:50:44.966 [DEBUG] [Thread-14430] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:50:45.024 [DEBUG] [Thread-14430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:50:45.025 [DEBUG] [Thread-14430] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:50:45.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:50:45.025 [DEBUG] [Thread-14430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:50:45.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:50:45.081 [DEBUG] [Thread-14430] [transport.py] [_log()] userauth is OK
2025-11-26T07:50:45.081 [DEBUG] [Thread-14430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:50:45.081 [DEBUG] [Thread-14430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:50:45.081 [DEBUG] [Thread-14430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:50:45.082 [DEBUG] [Thread-14430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:50:45.100 [INFO] [Thread-14430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:50:45.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:50:45.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:50:45.925 [DEBUG] [Thread-14430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:50:45.925 [DEBUG] [Thread-14430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:50:45.972 [DEBUG] [Thread-14430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:50:45.973 [DEBUG] [Thread-14430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:50:45.981 [DEBUG] [Thread-14430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:50:45.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:50:45.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:50:45.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:50:46.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:50:46.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:50:46.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:50:46.015 [DEBUG] [Thread-14430] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:50:51.965 [DEBUG] [Thread-14432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:51:07.024 [DEBUG] [Thread-14433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:51:16.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:51:16.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:51:16.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:51:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 50, 41), 30.29, 12.55, 0.0, 18.93, 23.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:51:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:50:41
2025-11-26T07:51:16.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:51:16.971 [DEBUG] [Thread-14434] [transport.py] [_log()] starting thread (client mode): 0x70d01240
2025-11-26T07:51:16.971 [DEBUG] [Thread-14434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:51:16.991 [DEBUG] [Thread-14434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:51:16.991 [INFO] [Thread-14434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:51:16.994 [DEBUG] [Thread-14434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:51:16.994 [DEBUG] [Thread-14434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:51:16.994 [DEBUG] [Thread-14434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] client lang: <none>
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] server lang: <none>
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] kex follows: False
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:51:16.995 [DEBUG] [Thread-14434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:51:16.996 [DEBUG] [Thread-14434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:51:16.996 [DEBUG] [Thread-14434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:51:16.996 [DEBUG] [Thread-14434] [transport.py] [_log()] Compression: none
2025-11-26T07:51:16.996 [DEBUG] [Thread-14434] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:51:17.015 [DEBUG] [Thread-14434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:51:17.016 [DEBUG] [Thread-14434] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:51:17.016 [DEBUG] [Thread-14434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:51:17.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:51:17.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:51:17.061 [DEBUG] [Thread-14434] [transport.py] [_log()] userauth is OK
2025-11-26T07:51:17.061 [DEBUG] [Thread-14434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:51:17.061 [DEBUG] [Thread-14434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:51:17.061 [DEBUG] [Thread-14434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:51:17.061 [DEBUG] [Thread-14434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:51:17.086 [INFO] [Thread-14434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:51:17.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:51:17.720 [DEBUG] [Thread-14434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:51:17.721 [DEBUG] [Thread-14434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:51:17.721 [DEBUG] [Thread-14434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:51:17.761 [DEBUG] [Thread-14434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:51:17.761 [DEBUG] [Thread-14434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:51:17.764 [DEBUG] [Thread-14434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:51:17.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:51:17.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:51:17.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:51:17.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:51:17.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:51:17.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:51:17.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:51:17.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:51:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:51:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.243496 -999.00  +22.60  19.81     18   -2.20 1 1 1 1 1   887    0 24.92 -11.70 ----- 17.2 19.8 5.7 29.1 26.7 -27.3 26.3 -26.6 24.8 -25.1 25.0 -27.7
2025-11-26T07:51:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:51:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:51:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.243496
2025-11-26T07:51:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:51:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:51:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:51:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:51:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:51:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:50:41', tmtdew=30.29, humidity=12.55, cloud=0.0, wind=18.93, temperature=23.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:50:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:51:17.792 [DEBUG] [Thread-14434] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:51:17.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:51:17.887 [DEBUG] [Thread-14437] [transport.py] [_log()] starting thread (client mode): 0x70d00d90
2025-11-26T07:51:17.887 [DEBUG] [Thread-14437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:51:17.902 [DEBUG] [Thread-14437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:51:17.902 [INFO] [Thread-14437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:51:17.909 [DEBUG] [Thread-14437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] client lang: <none>
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] server lang: <none>
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] kex follows: False
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:51:17.910 [DEBUG] [Thread-14437] [transport.py] [_log()] Compression: none
2025-11-26T07:51:17.911 [DEBUG] [Thread-14437] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:51:17.972 [DEBUG] [Thread-14437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:51:17.973 [DEBUG] [Thread-14437] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:51:17.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:51:17.974 [DEBUG] [Thread-14437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:51:17.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:51:18.029 [DEBUG] [Thread-14437] [transport.py] [_log()] userauth is OK
2025-11-26T07:51:18.030 [DEBUG] [Thread-14437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:51:18.030 [DEBUG] [Thread-14437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:51:18.030 [DEBUG] [Thread-14437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:51:18.030 [DEBUG] [Thread-14437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:51:18.050 [INFO] [Thread-14437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:51:18.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:51:18.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:51:18.945 [DEBUG] [Thread-14437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:51:18.946 [DEBUG] [Thread-14437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:51:18.994 [DEBUG] [Thread-14437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:51:18.994 [DEBUG] [Thread-14437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:51:19.003 [DEBUG] [Thread-14437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:51:19.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:51:19.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:51: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') -> 00000000
2025-11-26T07:51:19.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:51:19.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:51:19.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:51:19.040 [DEBUG] [Thread-14437] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:51:22.057 [DEBUG] [Thread-14439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:51:37.118 [DEBUG] [Thread-14440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:51:40.628 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:51:40.629 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:51:41.382 [DEBUG] [Thread-14441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:51:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:51:49.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:51:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:51:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 51, 45), 30.3, 12.65, 0.0, 17.12, 23.17, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:51:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:51:45
2025-11-26T07:51:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:51:50.038 [DEBUG] [Thread-14442] [transport.py] [_log()] starting thread (client mode): 0x737eb700
2025-11-26T07:51:50.038 [DEBUG] [Thread-14442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:51:50.059 [DEBUG] [Thread-14442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:51:50.059 [INFO] [Thread-14442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] client lang: <none>
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] server lang: <none>
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] kex follows: False
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] Compression: none
2025-11-26T07:51:50.063 [DEBUG] [Thread-14442] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:51:50.081 [DEBUG] [Thread-14442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:51:50.081 [DEBUG] [Thread-14442] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:51:50.081 [DEBUG] [Thread-14442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:51:50.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:51:50.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:51:50.082 [DEBUG] [Thread-14442] [transport.py] [_log()] userauth is OK
2025-11-26T07:51:50.082 [DEBUG] [Thread-14442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:51:50.082 [DEBUG] [Thread-14442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:51:50.082 [DEBUG] [Thread-14442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:51:50.082 [DEBUG] [Thread-14442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:51:50.092 [INFO] [Thread-14442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:51:50.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:51:50.842 [DEBUG] [Thread-14442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:51:50.842 [DEBUG] [Thread-14442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:51:50.842 [DEBUG] [Thread-14442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:51:50.883 [DEBUG] [Thread-14442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:51:50.883 [DEBUG] [Thread-14442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:51:50.886 [DEBUG] [Thread-14442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:51:50.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:51:50.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:51:50.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:51:50.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:51:50.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:51:50.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:51:50.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:51:50.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:51:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:51:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.243843 -999.00  +22.50  22.70     18   -2.60 1 1 1 1 1   887    0 24.95 -11.98 ----- 21.0 22.7 19.8 27.6 26.7 -27.1 26.3 -26.9 24.8 -25.7 25.0 -26.3
2025-11-26T07:51:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:51:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:51:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.243843
2025-11-26T07:51:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:51:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:51:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:51:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:51:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:51:50.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:51:45', tmtdew=30.3, humidity=12.65, cloud=0.0, wind=17.12, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:51:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:51:50.907 [DEBUG] [Thread-14442] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:51:50.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:51:51.006 [DEBUG] [Thread-14445] [transport.py] [_log()] starting thread (client mode): 0x70d02560
2025-11-26T07:51:51.006 [DEBUG] [Thread-14445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:51:51.021 [DEBUG] [Thread-14445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:51:51.021 [INFO] [Thread-14445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:51:51.028 [DEBUG] [Thread-14445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:51:51.028 [DEBUG] [Thread-14445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:51:51.028 [DEBUG] [Thread-14445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:51:51.028 [DEBUG] [Thread-14445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:51:51.028 [DEBUG] [Thread-14445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:51:51.028 [DEBUG] [Thread-14445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:51:51.028 [DEBUG] [Thread-14445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] client lang: <none>
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] server lang: <none>
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] kex follows: False
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] Compression: none
2025-11-26T07:51:51.029 [DEBUG] [Thread-14445] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:51:51.084 [DEBUG] [Thread-14445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:51:51.084 [DEBUG] [Thread-14445] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:51:51.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:51:51.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:51:51.085 [DEBUG] [Thread-14445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:51:51.141 [DEBUG] [Thread-14445] [transport.py] [_log()] userauth is OK
2025-11-26T07:51:51.141 [DEBUG] [Thread-14445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:51:51.141 [DEBUG] [Thread-14445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:51:51.141 [DEBUG] [Thread-14445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:51:51.141 [DEBUG] [Thread-14445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:51:51.155 [INFO] [Thread-14445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:51:51.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:51:51.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:51:52.022 [DEBUG] [Thread-14445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:51:52.022 [DEBUG] [Thread-14445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:51:52.070 [DEBUG] [Thread-14445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:51:52.070 [DEBUG] [Thread-14445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:51:52.078 [DEBUG] [Thread-14445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:51:52.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:51:52.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:51:52.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:51:52.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:51:52.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:51:52.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:51:52.110 [DEBUG] [Thread-14445] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:51:52.149 [DEBUG] [Thread-14447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:52:07.193 [DEBUG] [Thread-14448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:52:22.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:52:22.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:52:22.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:52:22.228 [DEBUG] [Thread-14449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:52:22.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 52, 17), 30.22, 12.71, 0.0, 15.76, 23.14, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:52:22.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:52:17
2025-11-26T07:52:22.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:52:23.079 [DEBUG] [Thread-14450] [transport.py] [_log()] starting thread (client mode): 0x70d02020
2025-11-26T07:52:23.079 [DEBUG] [Thread-14450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:52:23.100 [DEBUG] [Thread-14450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:52:23.100 [INFO] [Thread-14450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:52:23.103 [DEBUG] [Thread-14450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] client lang: <none>
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] server lang: <none>
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] kex follows: False
2025-11-26T07:52:23.104 [DEBUG] [Thread-14450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:52:23.105 [DEBUG] [Thread-14450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:52:23.105 [DEBUG] [Thread-14450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:52:23.105 [DEBUG] [Thread-14450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:52:23.105 [DEBUG] [Thread-14450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:52:23.105 [DEBUG] [Thread-14450] [transport.py] [_log()] Compression: none
2025-11-26T07:52:23.105 [DEBUG] [Thread-14450] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:52:23.125 [DEBUG] [Thread-14450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:52:23.125 [DEBUG] [Thread-14450] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:52:23.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:52:23.126 [DEBUG] [Thread-14450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:52:23.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:52:23.129 [DEBUG] [Thread-14450] [transport.py] [_log()] userauth is OK
2025-11-26T07:52:23.129 [DEBUG] [Thread-14450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:52:23.129 [DEBUG] [Thread-14450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:52:23.129 [DEBUG] [Thread-14450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:52:23.129 [DEBUG] [Thread-14450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:52:23.152 [INFO] [Thread-14450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:52:23.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:52:23.770 [DEBUG] [Thread-14450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:52:23.771 [DEBUG] [Thread-14450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:52:23.771 [DEBUG] [Thread-14450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:52:23.812 [DEBUG] [Thread-14450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:52:23.812 [DEBUG] [Thread-14450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:52:23.815 [DEBUG] [Thread-14450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:52:23.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:52:23.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:52:23.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:52:23.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:52:23.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:52:23.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:52:23.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:52:23.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:52:23.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:52:23.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.244190 -999.00  +22.50  14.96     17   -3.60 1 1 1 1 1   887    0 25.01 -9.73 ----- 15.1 15.0 40.8 25.6 26.7 -27.0 26.3 -26.5 24.8 -26.0 25.0 -26.1
2025-11-26T07:52:23.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:52:23.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:52:23.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.244190
2025-11-26T07:52:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:52:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:52:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:52:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:52:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:52:23.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:52:17', tmtdew=30.22, humidity=12.71, cloud=0.0, wind=15.76, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:51:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:52:23.845 [DEBUG] [Thread-14450] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:52:23.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:52:23.940 [DEBUG] [Thread-14453] [transport.py] [_log()] starting thread (client mode): 0x70d018d0
2025-11-26T07:52:23.940 [DEBUG] [Thread-14453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:52:23.959 [DEBUG] [Thread-14453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:52:23.960 [INFO] [Thread-14453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:52:23.968 [DEBUG] [Thread-14453] [transport.py] [_log()] client lang: <none>
2025-11-26T07:52:23.969 [DEBUG] [Thread-14453] [transport.py] [_log()] server lang: <none>
2025-11-26T07:52:23.969 [DEBUG] [Thread-14453] [transport.py] [_log()] kex follows: False
2025-11-26T07:52:23.969 [DEBUG] [Thread-14453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:52:23.969 [DEBUG] [Thread-14453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:52:23.969 [DEBUG] [Thread-14453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:52:23.969 [DEBUG] [Thread-14453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:52:23.969 [DEBUG] [Thread-14453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:52:23.969 [DEBUG] [Thread-14453] [transport.py] [_log()] Compression: none
2025-11-26T07:52:23.969 [DEBUG] [Thread-14453] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:52:24.024 [DEBUG] [Thread-14453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:52:24.025 [DEBUG] [Thread-14453] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:52:24.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:52:24.026 [DEBUG] [Thread-14453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:52:24.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:52:24.081 [DEBUG] [Thread-14453] [transport.py] [_log()] userauth is OK
2025-11-26T07:52:24.081 [DEBUG] [Thread-14453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:52:24.081 [DEBUG] [Thread-14453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:52:24.081 [DEBUG] [Thread-14453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:52:24.081 [DEBUG] [Thread-14453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:52:24.104 [INFO] [Thread-14453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:52:24.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:52:24.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:52:24.959 [DEBUG] [Thread-14453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:52:24.959 [DEBUG] [Thread-14453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:52:25.007 [DEBUG] [Thread-14453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:52:25.007 [DEBUG] [Thread-14453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:52:25.015 [DEBUG] [Thread-14453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:52:25.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:52:25.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:52:25.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:52:25.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:52:25.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:52:25.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:52:25.047 [DEBUG] [Thread-14453] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:52:37.256 [DEBUG] [Thread-14455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:52:40.768 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:52:40.770 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:52:41.414 [DEBUG] [Thread-14456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:52:52.306 [DEBUG] [Thread-14457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:52:55.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:52:55.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:52:55.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:52:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 52, 49), 30.26, 12.38, 0.0, 20.66, 23.02, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:52:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:52:49
2025-11-26T07:52:55.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:52:56.014 [DEBUG] [Thread-14458] [transport.py] [_log()] starting thread (client mode): 0x737e84f0
2025-11-26T07:52:56.014 [DEBUG] [Thread-14458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:52:56.025 [DEBUG] [Thread-14458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:52:56.026 [INFO] [Thread-14458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] client lang: <none>
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] server lang: <none>
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] kex follows: False
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] Compression: none
2025-11-26T07:52:56.027 [DEBUG] [Thread-14458] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:52:56.036 [DEBUG] [Thread-14458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:52:56.036 [DEBUG] [Thread-14458] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:52:56.036 [DEBUG] [Thread-14458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:52:56.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:52:56.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:52:56.037 [DEBUG] [Thread-14458] [transport.py] [_log()] userauth is OK
2025-11-26T07:52:56.037 [DEBUG] [Thread-14458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:52:56.037 [DEBUG] [Thread-14458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:52:56.038 [DEBUG] [Thread-14458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:52:56.038 [DEBUG] [Thread-14458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:52:56.051 [INFO] [Thread-14458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:52:56.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:52:56.709 [DEBUG] [Thread-14458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:52:56.709 [DEBUG] [Thread-14458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:52:56.710 [DEBUG] [Thread-14458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:52:56.751 [DEBUG] [Thread-14458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:52:56.751 [DEBUG] [Thread-14458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:52:56.755 [DEBUG] [Thread-14458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:52:56.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:52:56.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:52:56.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:52:56.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:52:56.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:52:56.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:52:56.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:52:56.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:52:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:52:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.244538 -999.00  +22.50  14.49     18   -2.90 1 1 1 1 1   887    0 24.22 -8.46 ----- 15.4 14.5 29.6 22.4 26.9 -26.6 26.4 -26.2 24.9 -25.1 25.1 -26.2
2025-11-26T07:52:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:52:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:52:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.244538
2025-11-26T07:52:56.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:52:56.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:52:56.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:52:56.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:52:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:52:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:52:49', tmtdew=30.26, humidity=12.38, cloud=0.0, wind=20.66, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:52:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:52:56.783 [DEBUG] [Thread-14458] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:52:56.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:52:56.879 [DEBUG] [Thread-14461] [transport.py] [_log()] starting thread (client mode): 0x73780a90
2025-11-26T07:52:56.879 [DEBUG] [Thread-14461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:52:56.893 [DEBUG] [Thread-14461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:52:56.893 [INFO] [Thread-14461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:52:56.901 [DEBUG] [Thread-14461] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:52:56.901 [DEBUG] [Thread-14461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:52:56.901 [DEBUG] [Thread-14461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:52:56.901 [DEBUG] [Thread-14461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:52:56.902 [DEBUG] [Thread-14461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:52:56.902 [DEBUG] [Thread-14461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:52:56.902 [DEBUG] [Thread-14461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:52:56.902 [DEBUG] [Thread-14461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:52:56.902 [DEBUG] [Thread-14461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:52:56.902 [DEBUG] [Thread-14461] [transport.py] [_log()] client lang: <none>
2025-11-26T07:52:56.902 [DEBUG] [Thread-14461] [transport.py] [_log()] server lang: <none>
2025-11-26T07:52:56.902 [DEBUG] [Thread-14461] [transport.py] [_log()] kex follows: False
2025-11-26T07:52:56.902 [DEBUG] [Thread-14461] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:52:56.903 [DEBUG] [Thread-14461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:52:56.903 [DEBUG] [Thread-14461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:52:56.903 [DEBUG] [Thread-14461] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:52:56.903 [DEBUG] [Thread-14461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:52:56.903 [DEBUG] [Thread-14461] [transport.py] [_log()] Compression: none
2025-11-26T07:52:56.903 [DEBUG] [Thread-14461] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:52:56.961 [DEBUG] [Thread-14461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:52:56.962 [DEBUG] [Thread-14461] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:52:56.962 [DEBUG] [Thread-14461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:52:56.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:52:56.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:52:57.021 [DEBUG] [Thread-14461] [transport.py] [_log()] userauth is OK
2025-11-26T07:52:57.022 [DEBUG] [Thread-14461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:52:57.022 [DEBUG] [Thread-14461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:52:57.022 [DEBUG] [Thread-14461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:52:57.022 [DEBUG] [Thread-14461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:52:57.041 [INFO] [Thread-14461] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:52:57.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:52:57.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:52:57.871 [DEBUG] [Thread-14461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:52:57.871 [DEBUG] [Thread-14461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:52:57.923 [DEBUG] [Thread-14461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:52:57.923 [DEBUG] [Thread-14461] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:52:57.932 [DEBUG] [Thread-14461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:52:57.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:52: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')
2025-11-26T07:52:57.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:52:57.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:52:57.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:52:57.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:52:57.968 [DEBUG] [Thread-14461] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:53:07.339 [DEBUG] [Thread-14463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:53:22.388 [DEBUG] [Thread-14464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:53:27.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:53:27.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:53:27.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:53:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 53, 21), 30.22, 12.43, 0.0, 22.95, 23.09, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:53:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:53:21
2025-11-26T07:53:28.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:53:28.914 [DEBUG] [Thread-14465] [transport.py] [_log()] starting thread (client mode): 0x73782bf0
2025-11-26T07:53:28.914 [DEBUG] [Thread-14465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:53:28.935 [DEBUG] [Thread-14465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:53:28.935 [INFO] [Thread-14465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:53:28.938 [DEBUG] [Thread-14465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:53:28.938 [DEBUG] [Thread-14465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:53:28.938 [DEBUG] [Thread-14465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:53:28.938 [DEBUG] [Thread-14465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:53:28.938 [DEBUG] [Thread-14465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] client lang: <none>
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] server lang: <none>
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] kex follows: False
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:53:28.939 [DEBUG] [Thread-14465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:53:28.940 [DEBUG] [Thread-14465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:53:28.940 [DEBUG] [Thread-14465] [transport.py] [_log()] Compression: none
2025-11-26T07:53:28.940 [DEBUG] [Thread-14465] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:53:28.958 [DEBUG] [Thread-14465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:53:28.958 [DEBUG] [Thread-14465] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:53:28.959 [DEBUG] [Thread-14465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:53:28.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:53:28.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:53:28.960 [DEBUG] [Thread-14465] [transport.py] [_log()] userauth is OK
2025-11-26T07:53:28.961 [DEBUG] [Thread-14465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:53:28.961 [DEBUG] [Thread-14465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:53:28.961 [DEBUG] [Thread-14465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:53:28.961 [DEBUG] [Thread-14465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:53:28.985 [INFO] [Thread-14465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:53:28.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:53:29.620 [DEBUG] [Thread-14465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:53:29.620 [DEBUG] [Thread-14465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:53:29.620 [DEBUG] [Thread-14465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:53:29.661 [DEBUG] [Thread-14465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:53:29.661 [DEBUG] [Thread-14465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:53:29.664 [DEBUG] [Thread-14465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:53:29.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:53:29.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:53:29.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:53:29.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:53:29.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:53:29.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:53:29.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:53:29.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:53:29.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:53:29.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.245232 -999.00  +22.80  23.77     18   -2.20 1 1 1 1 1   887    0 24.86 -6.80 ----- 21.6 23.8 42.2 30.1 26.9 -27.5 26.4 -26.6 24.9 -25.4 25.1 -25.9
2025-11-26T07:53:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:53:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:53:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.245232
2025-11-26T07:53:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:53:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:53:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:53:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:53:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:53:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:53:21', tmtdew=30.22, humidity=12.43, cloud=0.0, wind=22.95, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:53:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:53:29.691 [DEBUG] [Thread-14465] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:53:29.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:53:29.786 [DEBUG] [Thread-14468] [transport.py] [_log()] starting thread (client mode): 0x737e8d30
2025-11-26T07:53:29.786 [DEBUG] [Thread-14468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:53:29.805 [DEBUG] [Thread-14468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:53:29.805 [INFO] [Thread-14468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:53:29.813 [DEBUG] [Thread-14468] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:53:29.813 [DEBUG] [Thread-14468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:53:29.813 [DEBUG] [Thread-14468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:53:29.813 [DEBUG] [Thread-14468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:53:29.813 [DEBUG] [Thread-14468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] client lang: <none>
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] server lang: <none>
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] kex follows: False
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] Compression: none
2025-11-26T07:53:29.814 [DEBUG] [Thread-14468] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:53:29.870 [DEBUG] [Thread-14468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:53:29.870 [DEBUG] [Thread-14468] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:53:29.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:53:29.871 [DEBUG] [Thread-14468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:53:29.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:53:29.927 [DEBUG] [Thread-14468] [transport.py] [_log()] userauth is OK
2025-11-26T07:53:29.927 [DEBUG] [Thread-14468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:53:29.927 [DEBUG] [Thread-14468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:53:29.927 [DEBUG] [Thread-14468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:53:29.927 [DEBUG] [Thread-14468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:53:29.946 [INFO] [Thread-14468] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:53:29.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:53:29.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:53:30.795 [DEBUG] [Thread-14468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:53:30.795 [DEBUG] [Thread-14468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:53:30.843 [DEBUG] [Thread-14468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:53:30.843 [DEBUG] [Thread-14468] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:53:30.853 [DEBUG] [Thread-14468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:53:30.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:53: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')
2025-11-26T07:53:30.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:53:30.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:53:30.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:53:30.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:53:30.897 [DEBUG] [Thread-14468] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:53:37.423 [DEBUG] [Thread-14470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:53:40.912 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:53:40.912 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:53:41.462 [DEBUG] [Thread-14471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:53:52.476 [DEBUG] [Thread-14472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:54:00.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:54:00.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:54:00.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:54:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 53, 53), 29.88, 12.89, 0.0, 27.31, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:54:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:53:53
2025-11-26T07:54:01.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:54:01.841 [DEBUG] [Thread-14473] [transport.py] [_log()] starting thread (client mode): 0x70d1cfd0
2025-11-26T07:54:01.841 [DEBUG] [Thread-14473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:54:01.862 [DEBUG] [Thread-14473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:54:01.862 [INFO] [Thread-14473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] client lang: <none>
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] server lang: <none>
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] kex follows: False
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] Compression: none
2025-11-26T07:54:01.865 [DEBUG] [Thread-14473] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:54:01.886 [DEBUG] [Thread-14473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:54:01.887 [DEBUG] [Thread-14473] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:54:01.887 [DEBUG] [Thread-14473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:54:01.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:54:01.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:54:01.889 [DEBUG] [Thread-14473] [transport.py] [_log()] userauth is OK
2025-11-26T07:54:01.889 [DEBUG] [Thread-14473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:54:01.889 [DEBUG] [Thread-14473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:54:01.890 [DEBUG] [Thread-14473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:54:01.890 [DEBUG] [Thread-14473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:54:01.912 [INFO] [Thread-14473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:54:01.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:54:02.585 [DEBUG] [Thread-14473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:54:02.586 [DEBUG] [Thread-14473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:54:02.586 [DEBUG] [Thread-14473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:54:02.627 [DEBUG] [Thread-14473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:54:02.627 [DEBUG] [Thread-14473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:54:02.631 [DEBUG] [Thread-14473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:54:02.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:54:02.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:54:02.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:54:02.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:54:02.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:54:02.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:54:02.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:54:02.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:54:02.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:54:02.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.245579 -999.00  +22.90  23.21     19   -1.90 1 1 1 1 1   887    0 24.95 -7.15 ----- 19.4 23.2 31.6 25.7 26.9 -27.4 26.4 -26.0 25.0 -25.5 25.2 -25.9
2025-11-26T07:54:02.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:54:02.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:54:02.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.245579
2025-11-26T07:54:02.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:54:02.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:54:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:54:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:54:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:54:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:53:53', tmtdew=29.88, humidity=12.89, cloud=0.0, wind=27.31, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:53:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:54:02.662 [DEBUG] [Thread-14473] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:54:02.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:54:02.757 [DEBUG] [Thread-14476] [transport.py] [_log()] starting thread (client mode): 0x70d01de0
2025-11-26T07:54:02.758 [DEBUG] [Thread-14476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:54:02.771 [DEBUG] [Thread-14476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:54:02.772 [INFO] [Thread-14476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:54:02.779 [DEBUG] [Thread-14476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:54:02.779 [DEBUG] [Thread-14476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:54:02.779 [DEBUG] [Thread-14476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:54:02.779 [DEBUG] [Thread-14476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:54:02.779 [DEBUG] [Thread-14476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:54:02.779 [DEBUG] [Thread-14476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:54:02.779 [DEBUG] [Thread-14476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:54:02.779 [DEBUG] [Thread-14476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] client lang: <none>
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] server lang: <none>
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] kex follows: False
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] Compression: none
2025-11-26T07:54:02.780 [DEBUG] [Thread-14476] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:54:02.837 [DEBUG] [Thread-14476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:54:02.838 [DEBUG] [Thread-14476] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:54:02.838 [DEBUG] [Thread-14476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:54:02.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:54:02.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:54:02.896 [DEBUG] [Thread-14476] [transport.py] [_log()] userauth is OK
2025-11-26T07:54:02.897 [DEBUG] [Thread-14476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:54:02.897 [DEBUG] [Thread-14476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:54:02.897 [DEBUG] [Thread-14476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:54:02.897 [DEBUG] [Thread-14476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:54:02.917 [INFO] [Thread-14476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:54:02.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:54:02.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:54:03.794 [DEBUG] [Thread-14476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:54:03.794 [DEBUG] [Thread-14476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:54:03.842 [DEBUG] [Thread-14476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:54:03.842 [DEBUG] [Thread-14476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:54:03.850 [DEBUG] [Thread-14476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:54:03.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:54:03.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:54:03.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:54:03.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:54:03.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:54:03.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:54:03.883 [DEBUG] [Thread-14476] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:54:07.510 [DEBUG] [Thread-14478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:54:22.568 [DEBUG] [Thread-14479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:54:33.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:54:33.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:54:33.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:54:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 54, 25), 29.81, 12.96, 0.0, 22.85, 23.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:54:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:54:25
2025-11-26T07:54:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:54:34.837 [DEBUG] [Thread-14480] [transport.py] [_log()] starting thread (client mode): 0x737ebf10
2025-11-26T07:54:34.837 [DEBUG] [Thread-14480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:54:34.857 [DEBUG] [Thread-14480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:54:34.857 [INFO] [Thread-14480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:54:34.860 [DEBUG] [Thread-14480] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] client lang: <none>
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] server lang: <none>
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] kex follows: False
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:54:34.861 [DEBUG] [Thread-14480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:54:34.862 [DEBUG] [Thread-14480] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:54:34.862 [DEBUG] [Thread-14480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:54:34.862 [DEBUG] [Thread-14480] [transport.py] [_log()] Compression: none
2025-11-26T07:54:34.862 [DEBUG] [Thread-14480] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:54:34.880 [DEBUG] [Thread-14480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:54:34.880 [DEBUG] [Thread-14480] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:54:34.881 [DEBUG] [Thread-14480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:54:34.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:54:34.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:54:34.883 [DEBUG] [Thread-14480] [transport.py] [_log()] userauth is OK
2025-11-26T07:54:34.883 [DEBUG] [Thread-14480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:54:34.883 [DEBUG] [Thread-14480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:54:34.883 [DEBUG] [Thread-14480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:54:34.883 [DEBUG] [Thread-14480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:54:34.897 [INFO] [Thread-14480] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:54:34.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:54:35.539 [DEBUG] [Thread-14480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:54:35.539 [DEBUG] [Thread-14480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:54:35.540 [DEBUG] [Thread-14480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:54:35.580 [DEBUG] [Thread-14480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:54:35.580 [DEBUG] [Thread-14480] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:54:35.583 [DEBUG] [Thread-14480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:54:35.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:54:35.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:54:35.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:54:35.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:54:35.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:54:35.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:54:35.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:54:35.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:54:35.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:54:35.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.245926 -999.00  +22.80  24.31     18   -2.00 1 1 1 1 1   887    0 24.42 -7.10 ----- 19.4 24.3 52.2 28.2 26.9 -27.1 26.5 -26.4 24.9 -25.4 25.2 -26.1
2025-11-26T07:54:35.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:54:35.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:54:35.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.245926
2025-11-26T07:54:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:54:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:54:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:54:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:54:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:54:35.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:54:25', tmtdew=29.81, humidity=12.96, cloud=0.0, wind=22.85, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:54:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:54:35.605 [DEBUG] [Thread-14480] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:54:35.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:54:35.701 [DEBUG] [Thread-14483] [transport.py] [_log()] starting thread (client mode): 0x70d0e740
2025-11-26T07:54:35.701 [DEBUG] [Thread-14483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:54:35.720 [DEBUG] [Thread-14483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:54:35.720 [INFO] [Thread-14483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:54:35.727 [DEBUG] [Thread-14483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:54:35.727 [DEBUG] [Thread-14483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:54:35.727 [DEBUG] [Thread-14483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] client lang: <none>
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] server lang: <none>
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] kex follows: False
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:54:35.728 [DEBUG] [Thread-14483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:54:35.729 [DEBUG] [Thread-14483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:54:35.729 [DEBUG] [Thread-14483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:54:35.729 [DEBUG] [Thread-14483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:54:35.729 [DEBUG] [Thread-14483] [transport.py] [_log()] Compression: none
2025-11-26T07:54:35.729 [DEBUG] [Thread-14483] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:54:35.786 [DEBUG] [Thread-14483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:54:35.787 [DEBUG] [Thread-14483] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:54:35.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:54:35.787 [DEBUG] [Thread-14483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:54:35.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:54:35.842 [DEBUG] [Thread-14483] [transport.py] [_log()] userauth is OK
2025-11-26T07:54:35.843 [DEBUG] [Thread-14483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:54:35.843 [DEBUG] [Thread-14483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:54:35.843 [DEBUG] [Thread-14483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:54:35.843 [DEBUG] [Thread-14483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:54:35.865 [INFO] [Thread-14483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:54:35.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:54:35.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:54:36.735 [DEBUG] [Thread-14483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:54:36.735 [DEBUG] [Thread-14483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:54:36.782 [DEBUG] [Thread-14483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:54:36.782 [DEBUG] [Thread-14483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:54:36.791 [DEBUG] [Thread-14483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:54:36.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:54:36.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:54:36.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:54:36.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:54:36.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:54:36.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:54:36.826 [DEBUG] [Thread-14483] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:54:37.603 [DEBUG] [Thread-14485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:54:41.058 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:54:41.059 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:54:41.518 [DEBUG] [Thread-14486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:54:52.652 [DEBUG] [Thread-14487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:55:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:55:06.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:55:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:55:07.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 54, 57), 29.9, 12.88, 0.0, 24.47, 23.32, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:55:07.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:54:57
2025-11-26T07:55:07.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:55:07.682 [DEBUG] [Thread-14488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:55:07.785 [DEBUG] [Thread-14489] [transport.py] [_log()] starting thread (client mode): 0x70d00d90
2025-11-26T07:55:07.785 [DEBUG] [Thread-14489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:55:07.805 [DEBUG] [Thread-14489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:55:07.805 [INFO] [Thread-14489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:55:07.808 [DEBUG] [Thread-14489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:55:07.808 [DEBUG] [Thread-14489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] client lang: <none>
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] server lang: <none>
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] kex follows: False
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:55:07.809 [DEBUG] [Thread-14489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:55:07.810 [DEBUG] [Thread-14489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:55:07.810 [DEBUG] [Thread-14489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:55:07.810 [DEBUG] [Thread-14489] [transport.py] [_log()] Compression: none
2025-11-26T07:55:07.810 [DEBUG] [Thread-14489] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:55:07.827 [DEBUG] [Thread-14489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:55:07.828 [DEBUG] [Thread-14489] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:55:07.829 [DEBUG] [Thread-14489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:55:07.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:55:07.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:55:07.830 [DEBUG] [Thread-14489] [transport.py] [_log()] userauth is OK
2025-11-26T07:55:07.831 [DEBUG] [Thread-14489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:55:07.831 [DEBUG] [Thread-14489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:55:07.831 [DEBUG] [Thread-14489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:55:07.831 [DEBUG] [Thread-14489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:55:07.856 [INFO] [Thread-14489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:55:07.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:55:08.576 [DEBUG] [Thread-14489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:55:08.576 [DEBUG] [Thread-14489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:55:08.577 [DEBUG] [Thread-14489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:55:08.617 [DEBUG] [Thread-14489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:55:08.617 [DEBUG] [Thread-14489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:55:08.620 [DEBUG] [Thread-14489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:55:08.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:55:08.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:55:08.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:55:08.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:55:08.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:55:08.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:55:08.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:55:08.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:55:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:55:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.246274 -999.00  +22.80  23.03     18   -2.10 1 1 1 1 1   887    0 24.29 -8.13 ----- 24.7 23.0 16.9 31.1 26.9 -27.2 26.4 -26.9 25.0 -25.4 25.3 -26.2
2025-11-26T07:55:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:55:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:55:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.246274
2025-11-26T07:55:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:55:08.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:55:08.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:55:08.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:55:08.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:55:08.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:54:57', tmtdew=29.9, humidity=12.88, cloud=0.0, wind=24.47, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:54:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:55:08.646 [DEBUG] [Thread-14489] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:55:08.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:55:08.743 [DEBUG] [Thread-14492] [transport.py] [_log()] starting thread (client mode): 0x73782830
2025-11-26T07:55:08.743 [DEBUG] [Thread-14492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:55:08.758 [DEBUG] [Thread-14492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:55:08.758 [INFO] [Thread-14492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:55:08.765 [DEBUG] [Thread-14492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:55:08.766 [DEBUG] [Thread-14492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:55:08.766 [DEBUG] [Thread-14492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:55:08.766 [DEBUG] [Thread-14492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:55:08.766 [DEBUG] [Thread-14492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:55:08.766 [DEBUG] [Thread-14492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:55:08.766 [DEBUG] [Thread-14492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:55:08.766 [DEBUG] [Thread-14492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:55:08.767 [DEBUG] [Thread-14492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:55:08.767 [DEBUG] [Thread-14492] [transport.py] [_log()] client lang: <none>
2025-11-26T07:55:08.767 [DEBUG] [Thread-14492] [transport.py] [_log()] server lang: <none>
2025-11-26T07:55:08.767 [DEBUG] [Thread-14492] [transport.py] [_log()] kex follows: False
2025-11-26T07:55:08.767 [DEBUG] [Thread-14492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:55:08.767 [DEBUG] [Thread-14492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:55:08.767 [DEBUG] [Thread-14492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:55:08.767 [DEBUG] [Thread-14492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:55:08.768 [DEBUG] [Thread-14492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:55:08.768 [DEBUG] [Thread-14492] [transport.py] [_log()] Compression: none
2025-11-26T07:55:08.768 [DEBUG] [Thread-14492] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:55:08.826 [DEBUG] [Thread-14492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:55:08.827 [DEBUG] [Thread-14492] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:55:08.827 [DEBUG] [Thread-14492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:55:08.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:55:08.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:55:08.885 [DEBUG] [Thread-14492] [transport.py] [_log()] userauth is OK
2025-11-26T07:55:08.886 [DEBUG] [Thread-14492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:55:08.886 [DEBUG] [Thread-14492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:55:08.886 [DEBUG] [Thread-14492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:55:08.886 [DEBUG] [Thread-14492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:55:08.905 [INFO] [Thread-14492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:55:08.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:55:08.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:55:09.743 [DEBUG] [Thread-14492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:55:09.743 [DEBUG] [Thread-14492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:55:09.791 [DEBUG] [Thread-14492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:55:09.791 [DEBUG] [Thread-14492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:55:09.801 [DEBUG] [Thread-14492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:55:09.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:55:09.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:55:09.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:55:09.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:55:09.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:55:09.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:55:09.838 [DEBUG] [Thread-14492] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:55:22.718 [DEBUG] [Thread-14494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:55:37.765 [DEBUG] [Thread-14495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:55:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:55:39.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:55:39.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:55:40.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 55, 29), 30.3, 12.46, 0.0, 19.22, 23.19, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:55:40.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:55:29
2025-11-26T07:55:40.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:55:40.784 [DEBUG] [Thread-14496] [transport.py] [_log()] starting thread (client mode): 0x73782350
2025-11-26T07:55:40.784 [DEBUG] [Thread-14496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:55:40.803 [DEBUG] [Thread-14496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:55:40.804 [INFO] [Thread-14496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] client lang: <none>
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] server lang: <none>
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] kex follows: False
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] Compression: none
2025-11-26T07:55:40.805 [DEBUG] [Thread-14496] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:55:40.823 [DEBUG] [Thread-14496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:55:40.823 [DEBUG] [Thread-14496] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:55:40.824 [DEBUG] [Thread-14496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:55:40.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:55:40.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:55:40.826 [DEBUG] [Thread-14496] [transport.py] [_log()] userauth is OK
2025-11-26T07:55:40.826 [DEBUG] [Thread-14496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:55:40.826 [DEBUG] [Thread-14496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:55:40.826 [DEBUG] [Thread-14496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:55:40.826 [DEBUG] [Thread-14496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:55:40.851 [INFO] [Thread-14496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:55:40.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:55:41.198 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:55:41.199 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:55:41.493 [DEBUG] [Thread-14496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:55:41.493 [DEBUG] [Thread-14496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:55:41.494 [DEBUG] [Thread-14496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:55:41.535 [DEBUG] [Thread-14496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:55:41.535 [DEBUG] [Thread-14496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:55:41.538 [DEBUG] [Thread-14496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:55:41.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:55:41.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:55:41.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:55:41.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:55:41.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:55:41.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:55:41.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:55:41.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.246621 -999.00  +22.70  28.26     18   -2.50 1 1 1 1 1   887    0 24.48 -7.29 ----- 33.3 28.3 43.2 35.9 26.9 -27.7 26.4 -27.8 24.9 -26.7 25.2 -25.9
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.246621
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:55:41.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:55:29', tmtdew=30.3, humidity=12.46, cloud=0.0, wind=19.22, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:55:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:55:41.564 [DEBUG] [Thread-14496] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:55:41.584 [DEBUG] [Thread-14499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:55:41.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:55:41.647 [DEBUG] [Thread-14500] [transport.py] [_log()] starting thread (client mode): 0x73783160
2025-11-26T07:55:41.647 [DEBUG] [Thread-14500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:55:41.661 [DEBUG] [Thread-14500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:55:41.661 [INFO] [Thread-14500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:55:41.669 [DEBUG] [Thread-14500] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:55:41.669 [DEBUG] [Thread-14500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] client lang: <none>
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] server lang: <none>
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] kex follows: False
2025-11-26T07:55:41.670 [DEBUG] [Thread-14500] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:55:41.671 [DEBUG] [Thread-14500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:55:41.671 [DEBUG] [Thread-14500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:55:41.671 [DEBUG] [Thread-14500] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:55:41.671 [DEBUG] [Thread-14500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:55:41.671 [DEBUG] [Thread-14500] [transport.py] [_log()] Compression: none
2025-11-26T07:55:41.671 [DEBUG] [Thread-14500] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:55:41.727 [DEBUG] [Thread-14500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:55:41.728 [DEBUG] [Thread-14500] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:55:41.728 [DEBUG] [Thread-14500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:55:41.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:55:41.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:55:41.783 [DEBUG] [Thread-14500] [transport.py] [_log()] userauth is OK
2025-11-26T07:55:41.784 [DEBUG] [Thread-14500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:55:41.784 [DEBUG] [Thread-14500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:55:41.784 [DEBUG] [Thread-14500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:55:41.784 [DEBUG] [Thread-14500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:55:41.802 [INFO] [Thread-14500] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:55:41.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:55:41.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:55:42.628 [DEBUG] [Thread-14500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:55:42.628 [DEBUG] [Thread-14500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:55:42.675 [DEBUG] [Thread-14500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:55:42.675 [DEBUG] [Thread-14500] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:55:42.683 [DEBUG] [Thread-14500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:55:42.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:55:42.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:55:42.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:55:42.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:55:42.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:55:42.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:55:42.717 [DEBUG] [Thread-14500] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:55:52.801 [DEBUG] [Thread-14502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:56:07.851 [DEBUG] [Thread-14503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:56:12.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:56:12.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:56:12.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:56:13.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 56, 2), 30.15, 12.61, 0.0, 20.33, 23.2, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:56:13.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:56:02
2025-11-26T07:56:13.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:56:13.718 [DEBUG] [Thread-14504] [transport.py] [_log()] starting thread (client mode): 0x7378c2e0
2025-11-26T07:56:13.718 [DEBUG] [Thread-14504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:56:13.734 [DEBUG] [Thread-14504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:56:13.734 [INFO] [Thread-14504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] client lang: <none>
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] server lang: <none>
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] kex follows: False
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] Compression: none
2025-11-26T07:56:13.737 [DEBUG] [Thread-14504] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:56:13.753 [DEBUG] [Thread-14504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:56:13.754 [DEBUG] [Thread-14504] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:56:13.754 [DEBUG] [Thread-14504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:56:13.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:56:13.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:56:13.755 [DEBUG] [Thread-14504] [transport.py] [_log()] userauth is OK
2025-11-26T07:56:13.755 [DEBUG] [Thread-14504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:56:13.755 [DEBUG] [Thread-14504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:56:13.755 [DEBUG] [Thread-14504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:56:13.755 [DEBUG] [Thread-14504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:56:13.765 [INFO] [Thread-14504] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:56:13.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:56:14.483 [DEBUG] [Thread-14504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:56:14.484 [DEBUG] [Thread-14504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:56:14.484 [DEBUG] [Thread-14504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:56:14.525 [DEBUG] [Thread-14504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:56:14.525 [DEBUG] [Thread-14504] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:56:14.530 [DEBUG] [Thread-14504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:56:14.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:56:14.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:56:14.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:56:14.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:56:14.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:56:14.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:56:14.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:56:14.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:56:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:56:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.246968 -999.00  +22.50  18.33     18   -2.60 1 1 1 1 1   887    0 24.95 -5.62 ----- 16.8 18.3 38.8 33.4 26.9 -27.1 26.4 -25.9 24.9 -25.0 25.2 -26.5
2025-11-26T07:56:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:56:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:56:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.246968
2025-11-26T07:56:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:56:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:56:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:56:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:56:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:56:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:56:02', tmtdew=30.15, humidity=12.61, cloud=0.0, wind=20.33, temperature=23.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:55:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:56:14.557 [DEBUG] [Thread-14504] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:56:14.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:56:14.654 [DEBUG] [Thread-14507] [transport.py] [_log()] starting thread (client mode): 0x70d1f760
2025-11-26T07:56:14.654 [DEBUG] [Thread-14507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:56:14.668 [DEBUG] [Thread-14507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:56:14.668 [INFO] [Thread-14507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:56:14.678 [DEBUG] [Thread-14507] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] client lang: <none>
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] server lang: <none>
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] kex follows: False
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:56:14.679 [DEBUG] [Thread-14507] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:56:14.680 [DEBUG] [Thread-14507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:56:14.680 [DEBUG] [Thread-14507] [transport.py] [_log()] Compression: none
2025-11-26T07:56:14.680 [DEBUG] [Thread-14507] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:56:14.733 [DEBUG] [Thread-14507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:56:14.734 [DEBUG] [Thread-14507] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:56:14.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:56:14.735 [DEBUG] [Thread-14507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:56:14.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:56:14.789 [DEBUG] [Thread-14507] [transport.py] [_log()] userauth is OK
2025-11-26T07:56:14.790 [DEBUG] [Thread-14507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:56:14.790 [DEBUG] [Thread-14507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:56:14.790 [DEBUG] [Thread-14507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:56:14.790 [DEBUG] [Thread-14507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:56:14.809 [INFO] [Thread-14507] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:56:14.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:56:14.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:56:15.684 [DEBUG] [Thread-14507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:56:15.684 [DEBUG] [Thread-14507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:56:15.732 [DEBUG] [Thread-14507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:56:15.732 [DEBUG] [Thread-14507] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:56:15.744 [DEBUG] [Thread-14507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:56:15.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:56:15.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:56:15.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:56:15.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:56:15.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:56:15.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:56:15.785 [DEBUG] [Thread-14507] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:56:22.886 [DEBUG] [Thread-14509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:56:37.934 [DEBUG] [Thread-14510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:56:41.338 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:56:41.339 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:56:41.642 [DEBUG] [Thread-14511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:56:45.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:56:45.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:56:45.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:56:46.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 56, 34), 30.54, 12.49, 0.0, 22.05, 23.61, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:56:46.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:56:34
2025-11-26T07:56:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:56:46.782 [DEBUG] [Thread-14512] [transport.py] [_log()] starting thread (client mode): 0x70d0d8d0
2025-11-26T07:56:46.782 [DEBUG] [Thread-14512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:56:46.802 [DEBUG] [Thread-14512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:56:46.802 [INFO] [Thread-14512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] client lang: <none>
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] server lang: <none>
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] kex follows: False
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:56:46.805 [DEBUG] [Thread-14512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:56:46.806 [DEBUG] [Thread-14512] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:56:46.806 [DEBUG] [Thread-14512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:56:46.806 [DEBUG] [Thread-14512] [transport.py] [_log()] Compression: none
2025-11-26T07:56:46.806 [DEBUG] [Thread-14512] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:56:46.823 [DEBUG] [Thread-14512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:56:46.823 [DEBUG] [Thread-14512] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:56:46.823 [DEBUG] [Thread-14512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:56:46.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:56:46.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:56:46.824 [DEBUG] [Thread-14512] [transport.py] [_log()] userauth is OK
2025-11-26T07:56:46.824 [DEBUG] [Thread-14512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:56:46.824 [DEBUG] [Thread-14512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:56:46.824 [DEBUG] [Thread-14512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:56:46.824 [DEBUG] [Thread-14512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:56:46.833 [INFO] [Thread-14512] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:56:46.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:56:47.486 [DEBUG] [Thread-14512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:56:47.486 [DEBUG] [Thread-14512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:56:47.487 [DEBUG] [Thread-14512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:56:47.527 [DEBUG] [Thread-14512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:56:47.527 [DEBUG] [Thread-14512] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:56:47.529 [DEBUG] [Thread-14512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:56:47.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:56:47.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:56:47.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:56:47.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:56:47.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:56:47.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:56:47.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.247315 -999.00  +22.80  22.67     17   -2.70 1 1 1 1 1   887    0 25.13 -2.62 ----- 22.8 22.7 42.0 28.4 26.9 -26.8 26.4 -26.5 25.0 -25.2 25.2 -25.8
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.247315
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:56:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:56:34', tmtdew=30.54, humidity=12.49, cloud=0.0, wind=22.05, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:56:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:56:47.548 [DEBUG] [Thread-14512] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:56:47.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:56:47.633 [DEBUG] [Thread-14515] [transport.py] [_log()] starting thread (client mode): 0x70d0d780
2025-11-26T07:56:47.633 [DEBUG] [Thread-14515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:56:47.647 [DEBUG] [Thread-14515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:56:47.647 [INFO] [Thread-14515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] client lang: <none>
2025-11-26T07:56:47.654 [DEBUG] [Thread-14515] [transport.py] [_log()] server lang: <none>
2025-11-26T07:56:47.655 [DEBUG] [Thread-14515] [transport.py] [_log()] kex follows: False
2025-11-26T07:56:47.655 [DEBUG] [Thread-14515] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:56:47.655 [DEBUG] [Thread-14515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:56:47.655 [DEBUG] [Thread-14515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:56:47.655 [DEBUG] [Thread-14515] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:56:47.655 [DEBUG] [Thread-14515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:56:47.655 [DEBUG] [Thread-14515] [transport.py] [_log()] Compression: none
2025-11-26T07:56:47.655 [DEBUG] [Thread-14515] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:56:47.714 [DEBUG] [Thread-14515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:56:47.714 [DEBUG] [Thread-14515] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:56:47.714 [DEBUG] [Thread-14515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:56:47.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:56:47.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:56:47.774 [DEBUG] [Thread-14515] [transport.py] [_log()] userauth is OK
2025-11-26T07:56:47.774 [DEBUG] [Thread-14515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:56:47.774 [DEBUG] [Thread-14515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:56:47.774 [DEBUG] [Thread-14515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:56:47.774 [DEBUG] [Thread-14515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:56:47.787 [INFO] [Thread-14515] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:56:47.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:56:47.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:56:48.695 [DEBUG] [Thread-14515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:56:48.695 [DEBUG] [Thread-14515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:56:48.743 [DEBUG] [Thread-14515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:56:48.743 [DEBUG] [Thread-14515] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:56:48.751 [DEBUG] [Thread-14515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:56:48.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:56:48.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:56:48.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:56:48.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:56:48.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:56:48.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:56:48.789 [DEBUG] [Thread-14515] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:56:52.966 [DEBUG] [Thread-14517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:57:08.025 [DEBUG] [Thread-14518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:57:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:57:18.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:57:18.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:57:19.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 57, 6), 30.17, 12.54, 0.0, 25.41, 23.15, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:57:19.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:57:06
2025-11-26T07:57:19.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:57:19.736 [DEBUG] [Thread-14519] [transport.py] [_log()] starting thread (client mode): 0x737e9480
2025-11-26T07:57:19.736 [DEBUG] [Thread-14519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:57:19.758 [DEBUG] [Thread-14519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:57:19.758 [INFO] [Thread-14519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] client lang: <none>
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] server lang: <none>
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] kex follows: False
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:57:19.759 [DEBUG] [Thread-14519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:57:19.760 [DEBUG] [Thread-14519] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:57:19.760 [DEBUG] [Thread-14519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:57:19.760 [DEBUG] [Thread-14519] [transport.py] [_log()] Compression: none
2025-11-26T07:57:19.760 [DEBUG] [Thread-14519] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:57:19.771 [DEBUG] [Thread-14519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:57:19.771 [DEBUG] [Thread-14519] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:57:19.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:57:19.772 [DEBUG] [Thread-14519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:57:19.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:57:19.774 [DEBUG] [Thread-14519] [transport.py] [_log()] userauth is OK
2025-11-26T07:57:19.775 [DEBUG] [Thread-14519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:57:19.775 [DEBUG] [Thread-14519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:57:19.775 [DEBUG] [Thread-14519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:57:19.775 [DEBUG] [Thread-14519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:57:19.793 [INFO] [Thread-14519] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:57:19.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:57:20.385 [DEBUG] [Thread-14519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:57:20.385 [DEBUG] [Thread-14519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:57:20.386 [DEBUG] [Thread-14519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:57:20.426 [DEBUG] [Thread-14519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:57:20.426 [DEBUG] [Thread-14519] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:57:20.430 [DEBUG] [Thread-14519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:57:20.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:57:20.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:57:20.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:57:20.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:57:20.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:57:20.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:57:20.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:57:20.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:57:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:57:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.247663 -999.00  +22.90  20.26     17   -2.70 1 1 1 1 1   887    0 25.09 1.75 ----- 24.1 20.3 37.0 26.0 27.0 -27.4 26.5 -26.5 25.0 -25.3 25.3 -26.1
2025-11-26T07:57:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:57:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:57:20.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.247663
2025-11-26T07:57:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:57:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:57:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:57:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:57:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:57:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:57:06', tmtdew=30.17, humidity=12.54, cloud=0.0, wind=25.41, temperature=23.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:56:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:57:20.458 [DEBUG] [Thread-14519] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:57:20.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:57:20.553 [DEBUG] [Thread-14522] [transport.py] [_log()] starting thread (client mode): 0x73782da0
2025-11-26T07:57:20.553 [DEBUG] [Thread-14522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:57:20.567 [DEBUG] [Thread-14522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:57:20.568 [INFO] [Thread-14522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:57:20.575 [DEBUG] [Thread-14522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] client lang: <none>
2025-11-26T07:57:20.576 [DEBUG] [Thread-14522] [transport.py] [_log()] server lang: <none>
2025-11-26T07:57:20.577 [DEBUG] [Thread-14522] [transport.py] [_log()] kex follows: False
2025-11-26T07:57:20.577 [DEBUG] [Thread-14522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:57:20.577 [DEBUG] [Thread-14522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:57:20.577 [DEBUG] [Thread-14522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:57:20.577 [DEBUG] [Thread-14522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:57:20.577 [DEBUG] [Thread-14522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:57:20.577 [DEBUG] [Thread-14522] [transport.py] [_log()] Compression: none
2025-11-26T07:57:20.577 [DEBUG] [Thread-14522] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:57:20.633 [DEBUG] [Thread-14522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:57:20.634 [DEBUG] [Thread-14522] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:57:20.635 [DEBUG] [Thread-14522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:57:20.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:57:20.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:57:20.689 [DEBUG] [Thread-14522] [transport.py] [_log()] userauth is OK
2025-11-26T07:57:20.690 [DEBUG] [Thread-14522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:57:20.690 [DEBUG] [Thread-14522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:57:20.690 [DEBUG] [Thread-14522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:57:20.690 [DEBUG] [Thread-14522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:57:20.709 [INFO] [Thread-14522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:57:20.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:57:20.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:57:21.583 [DEBUG] [Thread-14522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:57:21.583 [DEBUG] [Thread-14522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:57:21.630 [DEBUG] [Thread-14522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:57:21.630 [DEBUG] [Thread-14522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:57:21.639 [DEBUG] [Thread-14522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:57:21.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:57:21.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:57:21.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:57:21.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:57:21.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:57:21.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:57:21.674 [DEBUG] [Thread-14522] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:57:23.055 [DEBUG] [Thread-14524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:57:38.098 [DEBUG] [Thread-14525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:57:41.478 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:57:41.479 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:57:41.696 [DEBUG] [Thread-14526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:57:51.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:57:51.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:57:51.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:57:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 57, 38), 29.92, 13.03, 0.0, 21.65, 23.25, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:57:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:57:38
2025-11-26T07:57:52.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:57:52.612 [DEBUG] [Thread-14527] [transport.py] [_log()] starting thread (client mode): 0x761da3b0
2025-11-26T07:57:52.612 [DEBUG] [Thread-14527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:57:52.632 [DEBUG] [Thread-14527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:57:52.632 [INFO] [Thread-14527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] client lang: <none>
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] server lang: <none>
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] kex follows: False
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] Compression: none
2025-11-26T07:57:52.635 [DEBUG] [Thread-14527] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:57:52.653 [DEBUG] [Thread-14527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:57:52.654 [DEBUG] [Thread-14527] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:57:52.654 [DEBUG] [Thread-14527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:57:52.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:57:52.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:57:52.656 [DEBUG] [Thread-14527] [transport.py] [_log()] userauth is OK
2025-11-26T07:57:52.657 [DEBUG] [Thread-14527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:57:52.657 [DEBUG] [Thread-14527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:57:52.657 [DEBUG] [Thread-14527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:57:52.657 [DEBUG] [Thread-14527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:57:52.679 [INFO] [Thread-14527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:57:52.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:57:53.136 [DEBUG] [Thread-14529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:57:53.347 [DEBUG] [Thread-14527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:57:53.347 [DEBUG] [Thread-14527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:57:53.348 [DEBUG] [Thread-14527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:57:53.389 [DEBUG] [Thread-14527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:57:53.389 [DEBUG] [Thread-14527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:57:53.392 [DEBUG] [Thread-14527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:57:53.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:57:53.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:57:53.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:57:53.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:57:53.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:57:53.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:57:53.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:57:53.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:57:53.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:57:53.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.248357 -999.00  +23.00  22.00     18   -2.10 1 1 1 1 1   887    0 25.24 6.60 ----- 18.5 22.0 24.4 35.8 27.1 -26.8 26.6 -26.6 25.1 -25.1 25.3 -26.1
2025-11-26T07:57:53.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:57:53.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:57:53.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.248357
2025-11-26T07:57:53.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:57:53.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:57:53.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:57:53.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:57:53.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:57:53.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:57:38', tmtdew=29.92, humidity=13.03, cloud=0.0, wind=21.65, temperature=23.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:57:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:57:53.419 [DEBUG] [Thread-14527] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:57:53.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:57:53.524 [DEBUG] [Thread-14531] [transport.py] [_log()] starting thread (client mode): 0x70d1d9f0
2025-11-26T07:57:53.524 [DEBUG] [Thread-14531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:57:53.541 [DEBUG] [Thread-14531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:57:53.542 [INFO] [Thread-14531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:57:53.549 [DEBUG] [Thread-14531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:57:53.550 [DEBUG] [Thread-14531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:57:53.550 [DEBUG] [Thread-14531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:57:53.550 [DEBUG] [Thread-14531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:57:53.550 [DEBUG] [Thread-14531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:57:53.550 [DEBUG] [Thread-14531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:57:53.550 [DEBUG] [Thread-14531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:57:53.550 [DEBUG] [Thread-14531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:57:53.559 [DEBUG] [Thread-14531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:57:53.559 [DEBUG] [Thread-14531] [transport.py] [_log()] client lang: <none>
2025-11-26T07:57:53.559 [DEBUG] [Thread-14531] [transport.py] [_log()] server lang: <none>
2025-11-26T07:57:53.559 [DEBUG] [Thread-14531] [transport.py] [_log()] kex follows: False
2025-11-26T07:57:53.559 [DEBUG] [Thread-14531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:57:53.560 [DEBUG] [Thread-14531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:57:53.560 [DEBUG] [Thread-14531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:57:53.560 [DEBUG] [Thread-14531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:57:53.560 [DEBUG] [Thread-14531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:57:53.560 [DEBUG] [Thread-14531] [transport.py] [_log()] Compression: none
2025-11-26T07:57:53.560 [DEBUG] [Thread-14531] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:57:53.612 [DEBUG] [Thread-14531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:57:53.613 [DEBUG] [Thread-14531] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:57:53.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:57:53.614 [DEBUG] [Thread-14531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:57:53.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:57:53.675 [DEBUG] [Thread-14531] [transport.py] [_log()] userauth is OK
2025-11-26T07:57:53.675 [DEBUG] [Thread-14531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:57:53.675 [DEBUG] [Thread-14531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:57:53.675 [DEBUG] [Thread-14531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:57:53.675 [DEBUG] [Thread-14531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:57:53.699 [INFO] [Thread-14531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:57:53.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:57:53.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:57:54.578 [DEBUG] [Thread-14531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:57:54.579 [DEBUG] [Thread-14531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:57:54.627 [DEBUG] [Thread-14531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:57:54.627 [DEBUG] [Thread-14531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:57:54.636 [DEBUG] [Thread-14531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:57:54.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:57:54.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:57:54.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:57:54.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:57:54.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:57:54.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:57:54.673 [DEBUG] [Thread-14531] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:58:08.174 [DEBUG] [Thread-14533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:58:23.225 [DEBUG] [Thread-14534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:58:24.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:58:24.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:58:24.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:58:25.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 58, 10), 29.86, 13.08, 0.0, 23.54, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:58:25.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:58:10
2025-11-26T07:58:25.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:58:25.608 [DEBUG] [Thread-14535] [transport.py] [_log()] starting thread (client mode): 0x70d1fee0
2025-11-26T07:58:25.609 [DEBUG] [Thread-14535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:58:25.628 [DEBUG] [Thread-14535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:58:25.628 [INFO] [Thread-14535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] client lang: <none>
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] server lang: <none>
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] kex follows: False
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] Compression: none
2025-11-26T07:58:25.632 [DEBUG] [Thread-14535] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:58:25.650 [DEBUG] [Thread-14535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:58:25.651 [DEBUG] [Thread-14535] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:58:25.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:58:25.652 [DEBUG] [Thread-14535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:58:25.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:58:25.654 [DEBUG] [Thread-14535] [transport.py] [_log()] userauth is OK
2025-11-26T07:58:25.654 [DEBUG] [Thread-14535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:58:25.654 [DEBUG] [Thread-14535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:58:25.654 [DEBUG] [Thread-14535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:58:25.654 [DEBUG] [Thread-14535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:58:25.679 [INFO] [Thread-14535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:58:25.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:58:26.281 [DEBUG] [Thread-14535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:58:26.281 [DEBUG] [Thread-14535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:58:26.282 [DEBUG] [Thread-14535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:58:26.323 [DEBUG] [Thread-14535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:58:26.323 [DEBUG] [Thread-14535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:58:26.327 [DEBUG] [Thread-14535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:58:26.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:58:26.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:58:26.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:58:26.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:58:26.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:58:26.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:58:26.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:58:26.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:58:26.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:58:26.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.248704 -999.00  +23.00  23.07     18   -2.10 1 1 1 1 1   887    0 25.22 8.56 ----- 22.5 23.1 27.2 25.6 27.1 -27.3 26.6 -26.9 25.1 -25.5 25.4 -26.1
2025-11-26T07:58:26.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:58:26.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:58:26.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.248704
2025-11-26T07:58:26.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:58:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:58:26.355 [DEBUG] [Thread-14535] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:58:26.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:58:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:58:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:58:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:58:10', tmtdew=29.86, humidity=13.08, cloud=0.0, wind=23.54, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:58:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:58:26.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:58:26.453 [DEBUG] [Thread-14538] [transport.py] [_log()] starting thread (client mode): 0x737ebfd0
2025-11-26T07:58:26.453 [DEBUG] [Thread-14538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:58:26.469 [DEBUG] [Thread-14538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:58:26.470 [INFO] [Thread-14538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:58:26.477 [DEBUG] [Thread-14538] [transport.py] [_log()] client lang: <none>
2025-11-26T07:58:26.478 [DEBUG] [Thread-14538] [transport.py] [_log()] server lang: <none>
2025-11-26T07:58:26.478 [DEBUG] [Thread-14538] [transport.py] [_log()] kex follows: False
2025-11-26T07:58:26.478 [DEBUG] [Thread-14538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:58:26.478 [DEBUG] [Thread-14538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:58:26.478 [DEBUG] [Thread-14538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:58:26.478 [DEBUG] [Thread-14538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:58:26.478 [DEBUG] [Thread-14538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:58:26.478 [DEBUG] [Thread-14538] [transport.py] [_log()] Compression: none
2025-11-26T07:58:26.478 [DEBUG] [Thread-14538] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:58:26.537 [DEBUG] [Thread-14538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:58:26.537 [DEBUG] [Thread-14538] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:58:26.538 [DEBUG] [Thread-14538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:58:26.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:58:26.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:58:26.593 [DEBUG] [Thread-14538] [transport.py] [_log()] userauth is OK
2025-11-26T07:58:26.594 [DEBUG] [Thread-14538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:58:26.594 [DEBUG] [Thread-14538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:58:26.594 [DEBUG] [Thread-14538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:58:26.594 [DEBUG] [Thread-14538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:58:26.613 [INFO] [Thread-14538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:58:26.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:58:26.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:58:27.446 [DEBUG] [Thread-14538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:58:27.447 [DEBUG] [Thread-14538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:58:27.495 [DEBUG] [Thread-14538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:58:27.495 [DEBUG] [Thread-14538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:58:27.504 [DEBUG] [Thread-14538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:58:27.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:58:27.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:58:27.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:58:27.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:58:27.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:58:27.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:58:27.541 [DEBUG] [Thread-14538] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:58:38.259 [DEBUG] [Thread-14540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:58:41.620 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:58:41.621 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:58:41.747 [DEBUG] [Thread-14541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:58:53.297 [DEBUG] [Thread-14542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:58:57.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:58:57.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:58:57.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:58:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 58, 41), 29.81, 13.09, 0.0, 17.64, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:58:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:58:41
2025-11-26T07:58:58.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:58:58.491 [DEBUG] [Thread-14543] [transport.py] [_log()] starting thread (client mode): 0x761db3a0
2025-11-26T07:58:58.491 [DEBUG] [Thread-14543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:58:58.512 [DEBUG] [Thread-14543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:58:58.512 [INFO] [Thread-14543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] client lang: <none>
2025-11-26T07:58:58.515 [DEBUG] [Thread-14543] [transport.py] [_log()] server lang: <none>
2025-11-26T07:58:58.516 [DEBUG] [Thread-14543] [transport.py] [_log()] kex follows: False
2025-11-26T07:58:58.516 [DEBUG] [Thread-14543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:58:58.516 [DEBUG] [Thread-14543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:58:58.516 [DEBUG] [Thread-14543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:58:58.516 [DEBUG] [Thread-14543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:58:58.516 [DEBUG] [Thread-14543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:58:58.516 [DEBUG] [Thread-14543] [transport.py] [_log()] Compression: none
2025-11-26T07:58:58.516 [DEBUG] [Thread-14543] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:58:58.535 [DEBUG] [Thread-14543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:58:58.535 [DEBUG] [Thread-14543] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:58:58.536 [DEBUG] [Thread-14543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:58:58.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:58:58.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:58:58.538 [DEBUG] [Thread-14543] [transport.py] [_log()] userauth is OK
2025-11-26T07:58:58.538 [DEBUG] [Thread-14543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:58:58.538 [DEBUG] [Thread-14543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:58:58.538 [DEBUG] [Thread-14543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:58:58.538 [DEBUG] [Thread-14543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:58:58.556 [INFO] [Thread-14543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:58:58.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:58:59.200 [DEBUG] [Thread-14543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:58:59.201 [DEBUG] [Thread-14543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:58:59.201 [DEBUG] [Thread-14543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:58:59.242 [DEBUG] [Thread-14543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:58:59.242 [DEBUG] [Thread-14543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:58:59.244 [DEBUG] [Thread-14543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:58:59.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:58:59.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:58:59.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:58:59.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:58:59.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:58:59.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:58:59.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:58:59.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:58:59.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:58:59.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.249051 -999.00  +23.00  17.11     18   -2.00 1 1 1 1 1   887    0 25.33 9.86 ----- 29.2 17.1 14.8 27.9 27.1 -26.8 26.6 -27.1 25.2 -25.1 25.4 -26.1
2025-11-26T07:58:59.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:58:59.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:58:59.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.249051
2025-11-26T07:58:59.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:58:59.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:58:59.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:58:59.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:58:59.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:58:59.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:58:41', tmtdew=29.81, humidity=13.09, cloud=0.0, wind=17.64, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:58:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:58:59.270 [DEBUG] [Thread-14543] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:58:59.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:58:59.369 [DEBUG] [Thread-14546] [transport.py] [_log()] starting thread (client mode): 0x70d0d510
2025-11-26T07:58:59.369 [DEBUG] [Thread-14546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:58:59.386 [DEBUG] [Thread-14546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:58:59.386 [INFO] [Thread-14546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:58:59.394 [DEBUG] [Thread-14546] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:58:59.394 [DEBUG] [Thread-14546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:58:59.394 [DEBUG] [Thread-14546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:58:59.394 [DEBUG] [Thread-14546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:58:59.394 [DEBUG] [Thread-14546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:58:59.394 [DEBUG] [Thread-14546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:58:59.394 [DEBUG] [Thread-14546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:58:59.395 [DEBUG] [Thread-14546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:58:59.395 [DEBUG] [Thread-14546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:58:59.395 [DEBUG] [Thread-14546] [transport.py] [_log()] client lang: <none>
2025-11-26T07:58:59.395 [DEBUG] [Thread-14546] [transport.py] [_log()] server lang: <none>
2025-11-26T07:58:59.395 [DEBUG] [Thread-14546] [transport.py] [_log()] kex follows: False
2025-11-26T07:58:59.395 [DEBUG] [Thread-14546] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:58:59.395 [DEBUG] [Thread-14546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:58:59.395 [DEBUG] [Thread-14546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:58:59.396 [DEBUG] [Thread-14546] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:58:59.396 [DEBUG] [Thread-14546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:58:59.396 [DEBUG] [Thread-14546] [transport.py] [_log()] Compression: none
2025-11-26T07:58:59.396 [DEBUG] [Thread-14546] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:58:59.454 [DEBUG] [Thread-14546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:58:59.455 [DEBUG] [Thread-14546] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:58:59.456 [DEBUG] [Thread-14546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:58:59.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:58:59.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:58:59.510 [DEBUG] [Thread-14546] [transport.py] [_log()] userauth is OK
2025-11-26T07:58:59.510 [DEBUG] [Thread-14546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:58:59.510 [DEBUG] [Thread-14546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:58:59.510 [DEBUG] [Thread-14546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:58:59.510 [DEBUG] [Thread-14546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:58:59.529 [INFO] [Thread-14546] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:58:59.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:58:59.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:59:00.352 [DEBUG] [Thread-14546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:59:00.353 [DEBUG] [Thread-14546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:59:00.401 [DEBUG] [Thread-14546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:59:00.401 [DEBUG] [Thread-14546] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:59:00.411 [DEBUG] [Thread-14546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:59:00.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:59: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')
2025-11-26T07:59:00.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:59:00.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:59:00.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:59:00.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:59:00.449 [DEBUG] [Thread-14546] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:59:08.333 [DEBUG] [Thread-14548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:59:23.393 [DEBUG] [Thread-14549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:59:30.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T07:59:30.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T07:59:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T07:59:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 59, 13), 29.9, 13.01, 0.0, 13.82, 23.32, 0, 0, 0, 2, 0, 0),)
2025-11-26T07:59:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:59:13
2025-11-26T07:59:31.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T07:59:31.362 [DEBUG] [Thread-14550] [transport.py] [_log()] starting thread (client mode): 0x70d0cf70
2025-11-26T07:59:31.362 [DEBUG] [Thread-14550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:59:31.389 [DEBUG] [Thread-14550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T07:59:31.389 [INFO] [Thread-14550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] client lang: <none>
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] server lang: <none>
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] kex follows: False
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:59:31.390 [DEBUG] [Thread-14550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:59:31.391 [DEBUG] [Thread-14550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:59:31.391 [DEBUG] [Thread-14550] [transport.py] [_log()] Compression: none
2025-11-26T07:59:31.391 [DEBUG] [Thread-14550] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:59:31.400 [DEBUG] [Thread-14550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:59:31.400 [DEBUG] [Thread-14550] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:59:31.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T07:59:31.401 [DEBUG] [Thread-14550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T07:59:31.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:59:31.403 [DEBUG] [Thread-14550] [transport.py] [_log()] userauth is OK
2025-11-26T07:59:31.404 [DEBUG] [Thread-14550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:59:31.404 [DEBUG] [Thread-14550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:59:31.404 [DEBUG] [Thread-14550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T07:59:31.404 [DEBUG] [Thread-14550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:59:31.428 [INFO] [Thread-14550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:59:31.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:59:32.062 [DEBUG] [Thread-14550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:59:32.062 [DEBUG] [Thread-14550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:59:32.063 [DEBUG] [Thread-14550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T07:59:32.103 [DEBUG] [Thread-14550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:59:32.103 [DEBUG] [Thread-14550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:59:32.107 [DEBUG] [Thread-14550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:59:32.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:59:32.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T07:59:32.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T07:59:32.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T07:59:32.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:59:32.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T07:59:32.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:59:32.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:59:32.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T07:59:32.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.249399 -999.00  +23.00  22.30     18   -2.00 1 1 1 1 1   887    0 25.19 11.94 ----- 15.8 22.3 25.8 36.2 27.1 -27.2 26.6 -27.0 25.1 -25.2 25.4 -26.0
2025-11-26T07:59:32.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T07:59:32.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T07:59:32.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.249399
2025-11-26T07:59:32.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T07:59:32.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T07:59:32.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T07:59:32.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T07:59:32.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T07:59:32.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:59:13', tmtdew=29.9, humidity=13.01, cloud=0.0, wind=13.82, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:59:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T07:59:32.137 [DEBUG] [Thread-14550] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:59:32.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T07:59:32.232 [DEBUG] [Thread-14553] [transport.py] [_log()] starting thread (client mode): 0x7376ca00
2025-11-26T07:59:32.232 [DEBUG] [Thread-14553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T07:59:32.247 [DEBUG] [Thread-14553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T07:59:32.247 [INFO] [Thread-14553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] client lang: <none>
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] server lang: <none>
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] kex follows: False
2025-11-26T07:59:32.255 [DEBUG] [Thread-14553] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T07:59:32.256 [DEBUG] [Thread-14553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T07:59:32.256 [DEBUG] [Thread-14553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T07:59:32.256 [DEBUG] [Thread-14553] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T07:59:32.256 [DEBUG] [Thread-14553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T07:59:32.256 [DEBUG] [Thread-14553] [transport.py] [_log()] Compression: none
2025-11-26T07:59:32.256 [DEBUG] [Thread-14553] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T07:59:32.315 [DEBUG] [Thread-14553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T07:59:32.316 [DEBUG] [Thread-14553] [transport.py] [_log()] Switch to new keys ...
2025-11-26T07:59:32.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T07:59:32.316 [DEBUG] [Thread-14553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T07:59:32.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T07:59:32.371 [DEBUG] [Thread-14553] [transport.py] [_log()] userauth is OK
2025-11-26T07:59:32.372 [DEBUG] [Thread-14553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T07:59:32.372 [DEBUG] [Thread-14553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T07:59:32.372 [DEBUG] [Thread-14553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T07:59:32.372 [DEBUG] [Thread-14553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T07:59:32.391 [INFO] [Thread-14553] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T07:59:32.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T07:59:32.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T07:59:33.281 [DEBUG] [Thread-14553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T07:59:33.281 [DEBUG] [Thread-14553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T07:59:33.329 [DEBUG] [Thread-14553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T07:59:33.329 [DEBUG] [Thread-14553] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T07:59:33.338 [DEBUG] [Thread-14553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T07:59:33.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T07:59:33.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T07:59:33.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T07:59:33.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T07:59:33.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T07:59:33.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T07:59:33.375 [DEBUG] [Thread-14553] [transport.py] [_log()] EOF in transport thread
2025-11-26T07:59:38.431 [DEBUG] [Thread-14555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:59:41.760 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:59:41.761 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:59:41.782 [DEBUG] [Thread-14556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T07:59:53.479 [DEBUG] [Thread-14557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:00:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T08:00:03.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T08:00:03.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T08:00:04.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 7, 59, 46), 30.06, 12.98, 0.0, 25.34, 23.5, 0, 0, 0, 2, 0, 0),)
2025-11-26T08:00:04.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 07:59:46
2025-11-26T08:00:04.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T08:00:04.306 [DEBUG] [Thread-14558] [transport.py] [_log()] starting thread (client mode): 0x737eb5b0
2025-11-26T08:00:04.306 [DEBUG] [Thread-14558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:00:04.326 [DEBUG] [Thread-14558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T08:00:04.326 [INFO] [Thread-14558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] client lang: <none>
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] server lang: <none>
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] kex follows: False
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:00:04.329 [DEBUG] [Thread-14558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:00:04.330 [DEBUG] [Thread-14558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:00:04.330 [DEBUG] [Thread-14558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:00:04.330 [DEBUG] [Thread-14558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:00:04.330 [DEBUG] [Thread-14558] [transport.py] [_log()] Compression: none
2025-11-26T08:00:04.330 [DEBUG] [Thread-14558] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:00:04.348 [DEBUG] [Thread-14558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:00:04.348 [DEBUG] [Thread-14558] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:00:04.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T08:00:04.349 [DEBUG] [Thread-14558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T08:00:04.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:00:04.351 [DEBUG] [Thread-14558] [transport.py] [_log()] userauth is OK
2025-11-26T08:00:04.352 [DEBUG] [Thread-14558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:00:04.352 [DEBUG] [Thread-14558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:00:04.352 [DEBUG] [Thread-14558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T08:00:04.352 [DEBUG] [Thread-14558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:00:04.367 [INFO] [Thread-14558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:00:04.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:00:08.510 [DEBUG] [Thread-14560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:00:11.825 [DEBUG] [Thread-14558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:00:11.825 [DEBUG] [Thread-14558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:00:11.826 [DEBUG] [Thread-14558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T08:00:11.867 [DEBUG] [Thread-14558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:00:11.867 [DEBUG] [Thread-14558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:00:11.870 [DEBUG] [Thread-14558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:00:12.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:00:12.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T08:00:12.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T08:00:12.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T08:00:12.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:00:12.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T08:00:12.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:00:12.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:00:12.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T08:00:12.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.249746 -999.00  +23.00  18.91     18   -2.00 1 1 1 1 1   887    0 25.58 13.51 ----- 20.0 18.9 8.0 21.7 27.1 -27.6 26.6 -26.8 25.1 -25.3 25.3 -26.1
2025-11-26T08:00:12.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T08:00:12.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T08:00:12.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.249746
2025-11-26T08:00:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T08:00:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T08:00:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T08:00:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T08:00:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T08:00:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T07:59:46', tmtdew=30.06, humidity=12.98, cloud=0.0, wind=25.34, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T05:59:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T08:00:12.158 [DEBUG] [Thread-14558] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:00:12.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T08:00:12.243 [DEBUG] [Thread-14562] [transport.py] [_log()] starting thread (client mode): 0x70d0c760
2025-11-26T08:00:12.243 [DEBUG] [Thread-14562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:00:12.258 [DEBUG] [Thread-14562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T08:00:12.258 [INFO] [Thread-14562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T08:00:12.266 [DEBUG] [Thread-14562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:00:12.266 [DEBUG] [Thread-14562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T08:00:12.266 [DEBUG] [Thread-14562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:00:12.266 [DEBUG] [Thread-14562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:00:12.266 [DEBUG] [Thread-14562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:00:12.266 [DEBUG] [Thread-14562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:00:12.266 [DEBUG] [Thread-14562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:00:12.266 [DEBUG] [Thread-14562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] client lang: <none>
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] server lang: <none>
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] kex follows: False
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] Compression: none
2025-11-26T08:00:12.267 [DEBUG] [Thread-14562] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:00:12.328 [DEBUG] [Thread-14562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:00:12.329 [DEBUG] [Thread-14562] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:00:12.329 [DEBUG] [Thread-14562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T08:00:12.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T08:00:12.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:00:12.385 [DEBUG] [Thread-14562] [transport.py] [_log()] userauth is OK
2025-11-26T08:00:12.385 [DEBUG] [Thread-14562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:00:12.385 [DEBUG] [Thread-14562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:00:12.385 [DEBUG] [Thread-14562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T08:00:12.385 [DEBUG] [Thread-14562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:00:12.404 [INFO] [Thread-14562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:00:12.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T08:00:12.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:00:13.245 [DEBUG] [Thread-14562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:00:13.246 [DEBUG] [Thread-14562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:00:13.294 [DEBUG] [Thread-14562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:00:13.294 [DEBUG] [Thread-14562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:00:13.303 [DEBUG] [Thread-14562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:00:13.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:00:13.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T08:00:13.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T08:00:13.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:00:13.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:00:13.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:00:13.340 [DEBUG] [Thread-14562] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:00:23.553 [DEBUG] [Thread-14564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:00:38.611 [DEBUG] [Thread-14565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:00:41.835 [DEBUG] [Thread-14566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:00:41.900 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:00:41.901 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:00:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T08:00:43.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T08:00:43.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T08:00:44.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 8, 0, 18), 30.14, 12.89, 0.0, 23.68, 23.48, 0, 0, 0, 2, 0, 0),)
2025-11-26T08:00:44.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 08:00:18
2025-11-26T08:00:44.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T08:00:44.284 [DEBUG] [Thread-14567] [transport.py] [_log()] starting thread (client mode): 0x761da5c0
2025-11-26T08:00:44.284 [DEBUG] [Thread-14567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:00:44.304 [DEBUG] [Thread-14567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T08:00:44.305 [INFO] [Thread-14567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T08:00:44.307 [DEBUG] [Thread-14567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] client lang: <none>
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] server lang: <none>
2025-11-26T08:00:44.308 [DEBUG] [Thread-14567] [transport.py] [_log()] kex follows: False
2025-11-26T08:00:44.309 [DEBUG] [Thread-14567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:00:44.309 [DEBUG] [Thread-14567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:00:44.309 [DEBUG] [Thread-14567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:00:44.309 [DEBUG] [Thread-14567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:00:44.309 [DEBUG] [Thread-14567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:00:44.309 [DEBUG] [Thread-14567] [transport.py] [_log()] Compression: none
2025-11-26T08:00:44.309 [DEBUG] [Thread-14567] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:00:44.328 [DEBUG] [Thread-14567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:00:44.328 [DEBUG] [Thread-14567] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:00:44.329 [DEBUG] [Thread-14567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T08:00:44.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T08:00:44.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:00:44.332 [DEBUG] [Thread-14567] [transport.py] [_log()] userauth is OK
2025-11-26T08:00:44.332 [DEBUG] [Thread-14567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:00:44.332 [DEBUG] [Thread-14567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:00:44.332 [DEBUG] [Thread-14567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T08:00:44.333 [DEBUG] [Thread-14567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:00:44.357 [INFO] [Thread-14567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:00:44.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:00:45.005 [DEBUG] [Thread-14567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:00:45.006 [DEBUG] [Thread-14567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:00:45.006 [DEBUG] [Thread-14567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T08:00:45.047 [DEBUG] [Thread-14567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:00:45.047 [DEBUG] [Thread-14567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:00:45.050 [DEBUG] [Thread-14567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:00:45.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:00:45.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T08:00:45.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T08:00:45.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T08:00:45.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:00:45.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T08:00:45.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:00:45.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:00:45.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T08:00:45.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.250093 -999.00  +23.10  21.38     18   -2.10 1 1 1 1 1   887    0 25.83 13.78 ----- 18.9 21.4 27.6 27.9 27.2 -26.9 26.6 -25.6 25.2 -25.1 25.3 -27.0
2025-11-26T08:00:45.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T08:00:45.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T08:00:45.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.250093
2025-11-26T08:00:45.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T08:00:45.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T08:00:45.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T08:00:45.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T08:00:45.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T08:00:45.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T08:00:18', tmtdew=30.14, humidity=12.89, cloud=0.0, wind=23.68, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T06:00:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T08:00:45.075 [DEBUG] [Thread-14567] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:00:45.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T08:00:45.169 [DEBUG] [Thread-14570] [transport.py] [_log()] starting thread (client mode): 0x737e8490
2025-11-26T08:00:45.170 [DEBUG] [Thread-14570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:00:45.184 [DEBUG] [Thread-14570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T08:00:45.184 [INFO] [Thread-14570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T08:00:45.192 [DEBUG] [Thread-14570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:00:45.192 [DEBUG] [Thread-14570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T08:00:45.192 [DEBUG] [Thread-14570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:00:45.192 [DEBUG] [Thread-14570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:00:45.192 [DEBUG] [Thread-14570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:00:45.192 [DEBUG] [Thread-14570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:00:45.192 [DEBUG] [Thread-14570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] client lang: <none>
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] server lang: <none>
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] kex follows: False
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] Compression: none
2025-11-26T08:00:45.193 [DEBUG] [Thread-14570] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:00:45.250 [DEBUG] [Thread-14570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:00:45.250 [DEBUG] [Thread-14570] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:00:45.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T08:00:45.251 [DEBUG] [Thread-14570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T08:00:45.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:00:45.306 [DEBUG] [Thread-14570] [transport.py] [_log()] userauth is OK
2025-11-26T08:00:45.306 [DEBUG] [Thread-14570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:00:45.306 [DEBUG] [Thread-14570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:00:45.306 [DEBUG] [Thread-14570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T08:00:45.306 [DEBUG] [Thread-14570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:00:45.326 [INFO] [Thread-14570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:00:45.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T08:00:45.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:00:46.158 [DEBUG] [Thread-14570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:00:46.158 [DEBUG] [Thread-14570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:00:46.205 [DEBUG] [Thread-14570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:00:46.206 [DEBUG] [Thread-14570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:00:46.214 [DEBUG] [Thread-14570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:00:46.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:00:46.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T08:00:46.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T08:00:46.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:00:46.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:00:46.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:00:46.249 [DEBUG] [Thread-14570] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:00:53.649 [DEBUG] [Thread-14572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:01:08.694 [DEBUG] [Thread-14573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:01:16.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T08:01:16.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T08:01:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T08:01:16.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 8, 0, 50), 30.08, 12.88, 0.0, 25.18, 23.52, 0, 0, 0, 2, 0, 0),)
2025-11-26T08:01:16.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 08:00:50
2025-11-26T08:01:17.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T08:01:17.175 [DEBUG] [Thread-14574] [transport.py] [_log()] starting thread (client mode): 0x7376ed40
2025-11-26T08:01:17.175 [DEBUG] [Thread-14574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:01:17.196 [DEBUG] [Thread-14574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T08:01:17.196 [INFO] [Thread-14574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T08:01:17.199 [DEBUG] [Thread-14574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] client lang: <none>
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] server lang: <none>
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] kex follows: False
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] Compression: none
2025-11-26T08:01:17.200 [DEBUG] [Thread-14574] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:01:17.219 [DEBUG] [Thread-14574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:01:17.219 [DEBUG] [Thread-14574] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:01:17.220 [DEBUG] [Thread-14574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T08:01:17.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T08:01:17.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:01:17.222 [DEBUG] [Thread-14574] [transport.py] [_log()] userauth is OK
2025-11-26T08:01:17.222 [DEBUG] [Thread-14574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:01:17.222 [DEBUG] [Thread-14574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:01:17.222 [DEBUG] [Thread-14574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T08:01:17.222 [DEBUG] [Thread-14574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:01:17.238 [INFO] [Thread-14574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:01:17.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:01:17.868 [DEBUG] [Thread-14574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:01:17.869 [DEBUG] [Thread-14574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:01:17.869 [DEBUG] [Thread-14574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T08:01:17.910 [DEBUG] [Thread-14574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:01:17.910 [DEBUG] [Thread-14574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:01:17.914 [DEBUG] [Thread-14574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:01:17.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:01:17.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T08:01:17.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T08:01:17.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T08:01:17.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:01:17.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T08:01:17.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:01:17.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:01:17.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T08:01:17.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.250440 -999.00  +23.20  15.31     18   -1.90 1 1 1 1 1   887    0 25.91 13.26 ----- 17.2 15.3 11.6 31.1 27.2 -26.6 26.6 -26.3 25.2 -25.3 25.4 -26.4
2025-11-26T08:01:17.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T08:01:17.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T08:01:17.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.250440
2025-11-26T08:01:17.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T08:01:17.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T08:01:17.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T08:01:17.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T08:01:17.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T08:01:17.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T08:00:50', tmtdew=30.08, humidity=12.88, cloud=0.0, wind=25.18, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T06:00:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T08:01:17.935 [DEBUG] [Thread-14574] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:01:18.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T08:01:18.031 [DEBUG] [Thread-14577] [transport.py] [_log()] starting thread (client mode): 0x7376f040
2025-11-26T08:01:18.031 [DEBUG] [Thread-14577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:01:18.046 [DEBUG] [Thread-14577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T08:01:18.047 [INFO] [Thread-14577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:01:18.056 [DEBUG] [Thread-14577] [transport.py] [_log()] client lang: <none>
2025-11-26T08:01:18.057 [DEBUG] [Thread-14577] [transport.py] [_log()] server lang: <none>
2025-11-26T08:01:18.057 [DEBUG] [Thread-14577] [transport.py] [_log()] kex follows: False
2025-11-26T08:01:18.057 [DEBUG] [Thread-14577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:01:18.057 [DEBUG] [Thread-14577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:01:18.057 [DEBUG] [Thread-14577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:01:18.057 [DEBUG] [Thread-14577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:01:18.057 [DEBUG] [Thread-14577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:01:18.057 [DEBUG] [Thread-14577] [transport.py] [_log()] Compression: none
2025-11-26T08:01:18.057 [DEBUG] [Thread-14577] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:01:18.121 [DEBUG] [Thread-14577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:01:18.122 [DEBUG] [Thread-14577] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:01:18.123 [DEBUG] [Thread-14577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T08:01:18.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T08:01:18.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:01:18.188 [DEBUG] [Thread-14577] [transport.py] [_log()] userauth is OK
2025-11-26T08:01:18.188 [DEBUG] [Thread-14577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:01:18.188 [DEBUG] [Thread-14577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:01:18.188 [DEBUG] [Thread-14577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T08:01:18.188 [DEBUG] [Thread-14577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:01:18.210 [INFO] [Thread-14577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:01:18.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T08:01:18.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:01:19.056 [DEBUG] [Thread-14577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:01:19.056 [DEBUG] [Thread-14577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:01:19.104 [DEBUG] [Thread-14577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:01:19.104 [DEBUG] [Thread-14577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:01:19.113 [DEBUG] [Thread-14577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:01:19.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:01:19.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T08:01:19.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T08:01:19.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:01:19.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:01:19.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:01:19.151 [DEBUG] [Thread-14577] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:01:23.725 [DEBUG] [Thread-14579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:01:38.768 [DEBUG] [Thread-14580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:01:41.884 [DEBUG] [Thread-14581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:01:42.041 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:01:42.042 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:01:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T08:01:49.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T08:01:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T08:01:49.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 8, 1, 22), 30.22, 12.76, 0.0, 22.9, 23.6, 0, 0, 0, 2, 0, 0),)
2025-11-26T08:01:49.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 08:01:22
2025-11-26T08:01:49.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T08:01:50.074 [DEBUG] [Thread-14582] [transport.py] [_log()] starting thread (client mode): 0x737eb0d0
2025-11-26T08:01:50.074 [DEBUG] [Thread-14582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:01:50.096 [DEBUG] [Thread-14582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T08:01:50.096 [INFO] [Thread-14582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T08:01:50.099 [DEBUG] [Thread-14582] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] client lang: <none>
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] server lang: <none>
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] kex follows: False
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:01:50.100 [DEBUG] [Thread-14582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:01:50.101 [DEBUG] [Thread-14582] [transport.py] [_log()] Compression: none
2025-11-26T08:01:50.101 [DEBUG] [Thread-14582] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:01:50.118 [DEBUG] [Thread-14582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:01:50.119 [DEBUG] [Thread-14582] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:01:50.119 [DEBUG] [Thread-14582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T08:01:50.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T08:01:50.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:01:50.121 [DEBUG] [Thread-14582] [transport.py] [_log()] userauth is OK
2025-11-26T08:01:50.121 [DEBUG] [Thread-14582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:01:50.121 [DEBUG] [Thread-14582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:01:50.121 [DEBUG] [Thread-14582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T08:01:50.122 [DEBUG] [Thread-14582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:01:50.160 [INFO] [Thread-14582] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:01:50.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:01:50.818 [DEBUG] [Thread-14582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:01:50.819 [DEBUG] [Thread-14582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:01:50.819 [DEBUG] [Thread-14582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T08:01:50.860 [DEBUG] [Thread-14582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:01:50.860 [DEBUG] [Thread-14582] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:01:50.864 [DEBUG] [Thread-14582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:01:50.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:01:50.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T08:01:50.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T08:01:50.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T08:01:50.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:01:50.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T08:01:50.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:01:50.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:01:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T08:01:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.250788 -999.00  +23.20  18.89     18   -2.00 1 1 1 1 1   887    0 25.66 13.21 ----- 19.6 18.9 357.9 20.7 27.2 -27.1 26.7 -26.5 25.2 -25.6 25.4 -26.9
2025-11-26T08:01:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T08:01:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T08:01:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.250788
2025-11-26T08:01:50.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T08:01:50.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T08:01:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T08:01:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T08:01:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T08:01:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T08:01:22', tmtdew=30.22, humidity=12.76, cloud=0.0, wind=22.9, temperature=23.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T06:01:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T08:01:50.891 [DEBUG] [Thread-14582] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:01:50.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T08:01:50.988 [DEBUG] [Thread-14585] [transport.py] [_log()] starting thread (client mode): 0x761db220
2025-11-26T08:01:50.988 [DEBUG] [Thread-14585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:01:51.003 [DEBUG] [Thread-14585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T08:01:51.003 [INFO] [Thread-14585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T08:01:51.011 [DEBUG] [Thread-14585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:01:51.011 [DEBUG] [Thread-14585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T08:01:51.011 [DEBUG] [Thread-14585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:01:51.011 [DEBUG] [Thread-14585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:01:51.011 [DEBUG] [Thread-14585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] client lang: <none>
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] server lang: <none>
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] kex follows: False
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] Compression: none
2025-11-26T08:01:51.012 [DEBUG] [Thread-14585] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:01:51.073 [DEBUG] [Thread-14585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:01:51.074 [DEBUG] [Thread-14585] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:01:51.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T08:01:51.075 [DEBUG] [Thread-14585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T08:01:51.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:01:51.136 [DEBUG] [Thread-14585] [transport.py] [_log()] userauth is OK
2025-11-26T08:01:51.136 [DEBUG] [Thread-14585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:01:51.136 [DEBUG] [Thread-14585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:01:51.136 [DEBUG] [Thread-14585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T08:01:51.137 [DEBUG] [Thread-14585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:01:51.159 [INFO] [Thread-14585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:01:51.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T08:01:51.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:01:52.071 [DEBUG] [Thread-14585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:01:52.071 [DEBUG] [Thread-14585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:01:52.118 [DEBUG] [Thread-14585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:01:52.118 [DEBUG] [Thread-14585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:01:52.127 [DEBUG] [Thread-14585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:01:52.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:01:52.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T08:01:52.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T08:01:52.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:01:52.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:01:52.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:01:52.162 [DEBUG] [Thread-14585] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:01:53.803 [DEBUG] [Thread-14587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:02:08.855 [DEBUG] [Thread-14588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:02:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T08:02:22.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T08:02:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T08:02:22.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 8, 1, 54), 30.11, 12.76, 0.0, 22.3, 23.4, 0, 0, 0, 2, 0, 0),)
2025-11-26T08:02:22.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 08:01:54
2025-11-26T08:02:22.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T08:02:23.147 [DEBUG] [Thread-14589] [transport.py] [_log()] starting thread (client mode): 0x70d021d0
2025-11-26T08:02:23.147 [DEBUG] [Thread-14589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:02:23.168 [DEBUG] [Thread-14589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T08:02:23.168 [INFO] [Thread-14589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] client lang: <none>
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] server lang: <none>
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] kex follows: False
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:02:23.171 [DEBUG] [Thread-14589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:02:23.172 [DEBUG] [Thread-14589] [transport.py] [_log()] Compression: none
2025-11-26T08:02:23.172 [DEBUG] [Thread-14589] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:02:23.187 [DEBUG] [Thread-14589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:02:23.187 [DEBUG] [Thread-14589] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:02:23.187 [DEBUG] [Thread-14589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T08:02:23.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T08:02:23.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:02:23.187 [DEBUG] [Thread-14589] [transport.py] [_log()] userauth is OK
2025-11-26T08:02:23.187 [DEBUG] [Thread-14589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:02:23.187 [DEBUG] [Thread-14589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:02:23.187 [DEBUG] [Thread-14589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T08:02:23.187 [DEBUG] [Thread-14589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:02:23.197 [INFO] [Thread-14589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:02:23.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:02:23.834 [DEBUG] [Thread-14589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:02:23.834 [DEBUG] [Thread-14589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:02:23.834 [DEBUG] [Thread-14589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T08:02:23.875 [DEBUG] [Thread-14589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:02:23.875 [DEBUG] [Thread-14589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:02:23.877 [DEBUG] [Thread-14589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:02:23.888 [DEBUG] [Thread-14591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:02:23.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:02:23.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T08:02:23.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T08:02:23.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T08:02:23.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:02:23.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T08:02:23.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.251482 -999.00  +23.30  20.89     18   -1.90 1 1 1 1 1   887    0 25.64 11.97 ----- 21.7 20.9 33.0 28.2 27.3 -27.1 26.7 -26.8 25.2 -25.1 25.5 -25.6
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.251482
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T08:02:23.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T08:01:54', tmtdew=30.11, humidity=12.76, cloud=0.0, wind=22.3, temperature=23.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T06:02:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T08:02:23.895 [DEBUG] [Thread-14589] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:02:23.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T08:02:23.983 [DEBUG] [Thread-14593] [transport.py] [_log()] starting thread (client mode): 0x70d2bb50
2025-11-26T08:02:23.984 [DEBUG] [Thread-14593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:02:24.004 [DEBUG] [Thread-14593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T08:02:24.004 [INFO] [Thread-14593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T08:02:24.011 [DEBUG] [Thread-14593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] client lang: <none>
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] server lang: <none>
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] kex follows: False
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] Compression: none
2025-11-26T08:02:24.012 [DEBUG] [Thread-14593] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:02:24.073 [DEBUG] [Thread-14593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:02:24.073 [DEBUG] [Thread-14593] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:02:24.073 [DEBUG] [Thread-14593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T08:02:24.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T08:02:24.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:02:24.129 [DEBUG] [Thread-14593] [transport.py] [_log()] userauth is OK
2025-11-26T08:02:24.129 [DEBUG] [Thread-14593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:02:24.129 [DEBUG] [Thread-14593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:02:24.129 [DEBUG] [Thread-14593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T08:02:24.129 [DEBUG] [Thread-14593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:02:24.143 [INFO] [Thread-14593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:02:24.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T08:02:24.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:02:25.021 [DEBUG] [Thread-14593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:02:25.021 [DEBUG] [Thread-14593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:02:25.069 [DEBUG] [Thread-14593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:02:25.069 [DEBUG] [Thread-14593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:02:25.079 [DEBUG] [Thread-14593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:02:25.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:02:25.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T08:02:25.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T08:02:25.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:02:25.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:02:25.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:02:25.112 [DEBUG] [Thread-14593] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:02:38.920 [DEBUG] [Thread-14595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:02:41.938 [DEBUG] [Thread-14596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:02:42.185 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:02:42.186 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:02:53.982 [DEBUG] [Thread-14597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:02:55.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T08:02:55.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T08:02:55.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T08:02:55.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 8, 2, 26), 30.05, 12.81, 0.0, 26.38, 23.4, 0, 0, 0, 2, 0, 0),)
2025-11-26T08:02:55.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 08:02:26
2025-11-26T08:02:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T08:02:56.036 [DEBUG] [Thread-14598] [transport.py] [_log()] starting thread (client mode): 0x6e316aa0
2025-11-26T08:02:56.036 [DEBUG] [Thread-14598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:02:56.059 [DEBUG] [Thread-14598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T08:02:56.059 [INFO] [Thread-14598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T08:02:56.062 [DEBUG] [Thread-14598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:02:56.062 [DEBUG] [Thread-14598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T08:02:56.062 [DEBUG] [Thread-14598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:02:56.062 [DEBUG] [Thread-14598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:02:56.062 [DEBUG] [Thread-14598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] client lang: <none>
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] server lang: <none>
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] kex follows: False
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] Compression: none
2025-11-26T08:02:56.063 [DEBUG] [Thread-14598] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:02:56.081 [DEBUG] [Thread-14598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:02:56.082 [DEBUG] [Thread-14598] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:02:56.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T08:02:56.083 [DEBUG] [Thread-14598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T08:02:56.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:02:56.085 [DEBUG] [Thread-14598] [transport.py] [_log()] userauth is OK
2025-11-26T08:02:56.086 [DEBUG] [Thread-14598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:02:56.086 [DEBUG] [Thread-14598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:02:56.086 [DEBUG] [Thread-14598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T08:02:56.086 [DEBUG] [Thread-14598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:02:56.110 [INFO] [Thread-14598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:02:56.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:02:56.780 [DEBUG] [Thread-14598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:02:56.780 [DEBUG] [Thread-14598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:02:56.780 [DEBUG] [Thread-14598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T08:02:56.821 [DEBUG] [Thread-14598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:02:56.821 [DEBUG] [Thread-14598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:02:56.823 [DEBUG] [Thread-14598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:02:56.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:02:56.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T08:02:56.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T08:02:56.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T08:02:56.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:02:56.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T08:02:56.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.251829 -999.00  +23.30  19.06     18   -1.90 1 1 1 1 1   887    0 25.88 14.02 ----- 25.3 19.1 22.8 26.5 27.4 -27.2 26.9 -26.6 25.3 -25.5 25.5 -26.7
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.251829
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T08:02:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T08:02:26', tmtdew=30.05, humidity=12.81, cloud=0.0, wind=26.38, temperature=23.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T06:02:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T08:02:56.843 [DEBUG] [Thread-14598] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:02:56.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T08:02:56.933 [DEBUG] [Thread-14601] [transport.py] [_log()] starting thread (client mode): 0x70d031c0
2025-11-26T08:02:56.933 [DEBUG] [Thread-14601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:02:56.948 [DEBUG] [Thread-14601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T08:02:56.948 [INFO] [Thread-14601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T08:02:56.956 [DEBUG] [Thread-14601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:02:56.956 [DEBUG] [Thread-14601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T08:02:56.956 [DEBUG] [Thread-14601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:02:56.956 [DEBUG] [Thread-14601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:02:56.956 [DEBUG] [Thread-14601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:02:56.956 [DEBUG] [Thread-14601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:02:56.956 [DEBUG] [Thread-14601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] client lang: <none>
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] server lang: <none>
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] kex follows: False
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] Compression: none
2025-11-26T08:02:56.957 [DEBUG] [Thread-14601] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:02:57.017 [DEBUG] [Thread-14601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:02:57.017 [DEBUG] [Thread-14601] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:02:57.017 [DEBUG] [Thread-14601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T08:02:57.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T08:02:57.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:02:57.075 [DEBUG] [Thread-14601] [transport.py] [_log()] userauth is OK
2025-11-26T08:02:57.075 [DEBUG] [Thread-14601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:02:57.075 [DEBUG] [Thread-14601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:02:57.075 [DEBUG] [Thread-14601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T08:02:57.075 [DEBUG] [Thread-14601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:02:57.092 [INFO] [Thread-14601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:02:57.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T08:02:57.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:02:57.904 [DEBUG] [Thread-14601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:02:57.904 [DEBUG] [Thread-14601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:02:57.952 [DEBUG] [Thread-14601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:02:57.952 [DEBUG] [Thread-14601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:02:57.960 [DEBUG] [Thread-14601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:02:57.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:02:57.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T08:02:57.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T08:02:57.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:02:57.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:02:57.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:02:57.993 [DEBUG] [Thread-14601] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:03:09.017 [DEBUG] [Thread-14603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:03:24.070 [DEBUG] [Thread-14604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:03:28.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T08:03:28.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T08:03:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T08:03:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 8, 2, 58), 30.15, 12.86, 0.0, 21.6, 23.63, 0, 0, 0, 2, 0, 0),)
2025-11-26T08:03:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 08:02:58
2025-11-26T08:03:28.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T08:03:28.911 [DEBUG] [Thread-14605] [transport.py] [_log()] starting thread (client mode): 0x6e316e30
2025-11-26T08:03:28.911 [DEBUG] [Thread-14605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:03:28.933 [DEBUG] [Thread-14605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T08:03:28.933 [INFO] [Thread-14605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T08:03:28.936 [DEBUG] [Thread-14605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:03:28.936 [DEBUG] [Thread-14605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T08:03:28.936 [DEBUG] [Thread-14605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:03:28.936 [DEBUG] [Thread-14605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:03:28.936 [DEBUG] [Thread-14605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] client lang: <none>
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] server lang: <none>
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] kex follows: False
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] Compression: none
2025-11-26T08:03:28.937 [DEBUG] [Thread-14605] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:03:28.952 [DEBUG] [Thread-14605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:03:28.953 [DEBUG] [Thread-14605] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:03:28.953 [DEBUG] [Thread-14605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T08:03:28.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T08:03:28.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:03:28.955 [DEBUG] [Thread-14605] [transport.py] [_log()] userauth is OK
2025-11-26T08:03:28.956 [DEBUG] [Thread-14605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:03:28.956 [DEBUG] [Thread-14605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:03:28.956 [DEBUG] [Thread-14605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T08:03:28.956 [DEBUG] [Thread-14605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:03:28.993 [INFO] [Thread-14605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:03:28.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:03:29.624 [DEBUG] [Thread-14605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:03:29.624 [DEBUG] [Thread-14605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:03:29.625 [DEBUG] [Thread-14605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T08:03:29.666 [DEBUG] [Thread-14605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:03:29.666 [DEBUG] [Thread-14605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:03:29.670 [DEBUG] [Thread-14605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:03:29.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:03:29.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T08:03:29.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T08:03:29.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T08:03:29.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:03:29.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T08:03:29.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:03:29.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:03:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T08:03:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.252176 -999.00  +23.50  24.13     18   -1.80 1 1 1 1 1   887    0 25.32 16.80 ----- 17.8 24.1 36.5 33.2 27.4 -26.9 26.8 -26.0 25.4 -25.5 25.6 -25.9
2025-11-26T08:03:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T08:03:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T08:03:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.252176
2025-11-26T08:03:29.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T08:03:29.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T08:03:29.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T08:03:29.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T08:03:29.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T08:03:29.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T08:02:58', tmtdew=30.15, humidity=12.86, cloud=0.0, wind=21.6, temperature=23.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T06:03:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.06524999999999892, -0.017500000000001847, 0.0, 0.02224999999999966, 0.02149999999999963, -0.06700000000000017, 0.05424999999999969, 0.08749999999999858, -0.020250000000000767, -0.038750000000000284, 0.09425000000000061, 0.03649999999999842, -0.046499999999999986, 0.0017499999999994742, 0.1274999999999995, 0.22799999999999976, 0.11100000000000065, 0.11300000000000132, 0.034000000000000696, -0.01925000000000132], zp_timestamp='2025-11-26T02:35:00')
2025-11-26T08:03:29.699 [DEBUG] [Thread-14605] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:03:29.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-26T08:03:29.799 [DEBUG] [Thread-14608] [transport.py] [_log()] starting thread (client mode): 0x6e315c00
2025-11-26T08:03:29.799 [DEBUG] [Thread-14608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:03:29.814 [DEBUG] [Thread-14608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-26T08:03:29.815 [INFO] [Thread-14608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-26T08:03:29.822 [DEBUG] [Thread-14608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:03:29.822 [DEBUG] [Thread-14608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-26T08:03:29.822 [DEBUG] [Thread-14608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:03:29.822 [DEBUG] [Thread-14608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] client lang: <none>
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] server lang: <none>
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] kex follows: False
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] Compression: none
2025-11-26T08:03:29.823 [DEBUG] [Thread-14608] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:03:29.879 [DEBUG] [Thread-14608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:03:29.880 [DEBUG] [Thread-14608] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:03:29.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-26T08:03:29.881 [DEBUG] [Thread-14608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-26T08:03:29.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:03:29.935 [DEBUG] [Thread-14608] [transport.py] [_log()] userauth is OK
2025-11-26T08:03:29.936 [DEBUG] [Thread-14608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:03:29.936 [DEBUG] [Thread-14608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:03:29.936 [DEBUG] [Thread-14608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-26T08:03:29.936 [DEBUG] [Thread-14608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:03:29.955 [INFO] [Thread-14608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:03:29.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-26T08:03:29.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:03:30.822 [DEBUG] [Thread-14608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:03:30.822 [DEBUG] [Thread-14608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:03:30.870 [DEBUG] [Thread-14608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:03:30.870 [DEBUG] [Thread-14608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:03:30.878 [DEBUG] [Thread-14608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:03:30.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:03:30.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-26T08:03:30.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-26T08:03:30.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:03:30.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:03:30.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:03:30.909 [DEBUG] [Thread-14608] [transport.py] [_log()] EOF in transport thread
2025-11-26T08:03:39.105 [DEBUG] [Thread-14610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:03:41.990 [DEBUG] [Thread-14611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:03:42.328 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:03:42.329 [DEBUG] [Thread-4123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:03:54.147 [DEBUG] [Thread-14612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-26T08:04:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-26T08:04:00.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-26T08:04:00.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-26T08:04:01.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 26, 8, 3, 30), 30.08, 12.91, 0.0, 23.62, 23.57, 0, 0, 0, 2, 0, 0),)
2025-11-26T08:04:01.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-26 08:03:30
2025-11-26T08:04:01.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-26T08:04:01.823 [DEBUG] [Thread-14613] [transport.py] [_log()] starting thread (client mode): 0x70d2bbb0
2025-11-26T08:04:01.823 [DEBUG] [Thread-14613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-26T08:04:01.843 [DEBUG] [Thread-14613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-26T08:04:01.844 [INFO] [Thread-14613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] client lang: <none>
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] server lang: <none>
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] kex follows: False
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] Compression: none
2025-11-26T08:04:01.845 [DEBUG] [Thread-14613] [transport.py] [_log()] === End of kex handshake ===
2025-11-26T08:04:01.862 [DEBUG] [Thread-14613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-26T08:04:01.863 [DEBUG] [Thread-14613] [transport.py] [_log()] Switch to new keys ...
2025-11-26T08:04:01.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-26T08:04:01.864 [DEBUG] [Thread-14613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-26T08:04:01.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-26T08:04:01.868 [DEBUG] [Thread-14613] [transport.py] [_log()] userauth is OK
2025-11-26T08:04:01.868 [DEBUG] [Thread-14613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-26T08:04:01.868 [DEBUG] [Thread-14613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-26T08:04:01.868 [DEBUG] [Thread-14613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-26T08:04:01.868 [DEBUG] [Thread-14613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-26T08:04:01.885 [INFO] [Thread-14613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-26T08:04:01.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-26T08:04:02.492 [DEBUG] [Thread-14613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-26T08:04:02.492 [DEBUG] [Thread-14613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-26T08:04:02.492 [DEBUG] [Thread-14613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-26T08:04:02.533 [DEBUG] [Thread-14613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-26T08:04:02.533 [DEBUG] [Thread-14613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-26T08:04:02.535 [DEBUG] [Thread-14613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-26T08:04:02.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-26T08:04:02.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-26T08:04:02.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-26T08:04:02.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-26T08:04:02.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-26T08:04:02.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-26T08:04:02.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61005.252524 -999.00  +23.50  21.41     18   -1.80 1 1 1 1 1   887    0 26.21 23.30 ----- 21.0 21.4 48.6 28.0 27.4 -26.6 26.9 -26.4 25.4 -25.0 25.6 -25.7
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61005.252524
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-26T08:04:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-26T08:03:30', tmtdew=30.08, humidity=12.91, cloud=0.0, wind=23.62, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-26T04:37:21', seeing=1.04, atlas_timestamp='2025-11-26T06:03:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[-0.07624999999999993, -0.0337499999999995, -0.0727499999999992, -0.06850000000000023, -0.04449999999999932, 0.008250000000000313, 0.0030000000000001137, -0.003249999999999531, 0.028499999999999304, 0.010500000000000398, -0.22524999999999906, -0.07399999999999984, 0.16799999999999926, 0.065249999
[file cut: first 33554432 bytes kept]
[document cut: first 32642932 of 33554432 characters kept]
